suanPan
GSSSS Class Reference

A GSSSS class defines a solver using GSSSS algorithm. More...

#include <GSSSS.h>

Inheritance diagram for GSSSS:
Collaboration diagram for GSSSS:

Public Member Functions

 GSSSS (unsigned)
 
void assemble_resistance () override
 
void assemble_matrix () override
 
int process_load () override
 
int process_constraint () override
 
int process_load_resistance () override
 
int process_constraint_resistance () override
 
int update_trial_status () override
 
void stage_status () override
 
void update_parameter (double) override
 
void update_compatibility () const override
 
vec from_incre_velocity (const vec &, const uvec &) override
 
vec from_incre_acceleration (const vec &, const uvec &) override
 
void print () override
 
- Public Member Functions inherited from Integrator
 Integrator (unsigned=0)
 
 Integrator (const Integrator &)=delete
 
 Integrator (Integrator &&)=delete
 
Integratoroperator= (const Integrator &)=delete
 
Integratoroperator= (Integrator &&)=delete
 
 ~Integrator () override
 
void set_domain (const weak_ptr< DomainBase > &)
 
const weak_ptr< DomainBase > & get_domain () const
 
virtual int initialize ()
 
void set_time_step_switch (bool)
 
bool allow_to_change_time_step () const
 
virtual int process_criterion ()
 
virtual int process_modifier ()
 
void record () const
 
virtual vec get_force_residual ()
 
virtual vec get_displacement_residual ()
 
virtual vec get_auxiliary_residual ()
 
virtual sp_mat get_reference_load ()
 
virtual sp_mat get_auxiliary_stiffness ()
 
virtual void update_load ()
 
virtual void update_constraint ()
 
virtual void update_trial_load_factor (double)
 
virtual void update_trial_load_factor (const vec &)
 
virtual void update_trial_displacement (const vec &)
 
void update_trial_time (double)
 
void update_incre_time (double)
 
virtual int update_incre_status ()
 
virtual int update_internal (const mat &)
 
mat solve (const mat &)
 
mat solve (const sp_mat &)
 
mat solve (mat &&)
 
mat solve (sp_mat &&)
 
virtual int solve (mat &, const mat &)
 
virtual int solve (mat &, const sp_mat &)
 
virtual int solve (mat &, mat &&)
 
virtual int solve (mat &, sp_mat &&)
 
virtual void erase_machine_error () const
 
virtual void stage_and_commit_status ()
 
virtual void commit_status ()
 
virtual void clear_status ()
 
virtual void reset_status ()
 
vec from_total_velocity (const vec &, const uvec &)
 
vec from_total_acceleration (const vec &, const uvec &)
 
vec from_incre_velocity (double, const uvec &)
 
vec from_incre_acceleration (double, const uvec &)
 
vec from_total_velocity (double, const uvec &)
 
vec from_total_acceleration (double, const uvec &)
 
- Public Member Functions inherited from Tag
 Tag (unsigned=0)
 
 Tag (const Tag &)=default
 
 Tag (Tag &&)=default
 
Tagoperator= (const Tag &)=delete
 
Tagoperator= (Tag &&)=delete
 
virtual ~Tag ()=default
 
void set_tag (unsigned) const
 
unsigned get_tag () const
 
void enable ()
 
void disable ()
 
void guard ()
 
void unguard ()
 
bool is_active () const
 
bool is_guarded () const
 

Protected Member Functions

template<typename T >
void generate_constants (double, double, double)
 
template<>
void generate_constants (const double R3, const double R1, const double R2)
 
template<>
void generate_constants (const double R3, const double R1, const double R2)
 
template<>
void generate_constants (const double R, double, double)
 

Protected Attributes

const double L1
 
const double L2
 
const double L4
 
double L3 = 0.
 
double L5 = 0.
 
double W1 = 0.
 
double W1G1 = 0.
 
double W2G2 = 0.
 
double W3G3 = 0.
 
double W1G4 = 0.
 
double W2G5 = 0.
 
double W1G6 = 0.
 
double DT = 0.
 
double XPV2 = 0.
 
double XPV3 = 0.
 
double XPA2 = 0.
 
double XPA3 = 0.
 
double XCVD = 0.
 
double XCAD = 0.
 

Detailed Description

A GSSSS class defines a solver using GSSSS algorithm.

Advances in Computational Dynamics of Particles, Materials and Structures

ISBN: 978-1-119-96692-0

Author
tlc
Date
15/04/2022
Version
0.1.0

Constructor & Destructor Documentation

◆ GSSSS()

GSSSS::GSSSS ( unsigned  T)
explicit

Member Function Documentation

◆ assemble_matrix()

void GSSSS::assemble_matrix ( )
overridevirtual

Assemble the global effective matrix A in AX=B. For FEM applications, it is often a linear combination of stiffness, mass, damping and geometry matrices.

Reimplemented from Integrator.

Here is the call graph for this function:

◆ assemble_resistance()

void GSSSS::assemble_resistance ( )
overridevirtual

Reimplemented from Integrator.

Here is the call graph for this function:

◆ from_incre_acceleration()

vec GSSSS::from_incre_acceleration ( const vec &  ,
const uvec &  encoding 
)
overridevirtual

When external loads are applied, they can be applied in forms of displacement/velocity/acceleration. The time integration methods, by default, form effective stiffness matrices in displacement domain. That is, in AX=B, A is the effective stiffness matrix and X is the displacement increment. Thus, loads in velocity/acceleration must be converted to displacement. This cannot be done arbitrarily due to compatibility issues. This method takes acceleration increment and converts it to displacement increment.

Reimplemented from Integrator.

Here is the call graph for this function:

◆ from_incre_velocity()

vec GSSSS::from_incre_velocity ( const vec &  ,
const uvec &  encoding 
)
overridevirtual

When external loads are applied, they can be applied in forms of displacement/velocity/acceleration. The time integration methods, by default, form effective stiffness matrices in displacement domain. That is, in AX=B, A is the effective stiffness matrix and X is the displacement increment. Thus, loads in velocity/acceleration must be converted to displacement. This cannot be done arbitrarily due to compatibility issues. This method takes velocity increment and converts it to displacement increment.

Reimplemented from Integrator.

Here is the call graph for this function:

◆ generate_constants() [1/4]

template<>
void GSSSS::generate_constants ( const double  R,
double  ,
double   
)
protected

◆ generate_constants() [2/4]

template<>
void GSSSS::generate_constants ( const double  R3,
const double  R1,
const double  R2 
)
protected

◆ generate_constants() [3/4]

template<>
void GSSSS::generate_constants ( const double  R3,
const double  R1,
const double  R2 
)
protected

◆ generate_constants() [4/4]

template<typename T >
void GSSSS::generate_constants ( double  ,
double  ,
double   
)
inlineprotected

◆ print()

void GSSSS::print ( )
overridevirtual

Reimplemented from Tag.

Here is the call graph for this function:

◆ process_constraint()

int GSSSS::process_constraint ( )
overridevirtual

The main task of this method is to apply constraints (of various forms implemented in various methods). Combinations of different types need to be considered: 1) homogeneous, 2) inhomogeneous, 3) linear, 4) nonlinear. Combinations of different methods need to be considered: 1) penalty, 2) multiplier. On exit, the global stiffness matrix should be updated, the global residual vector should be updated.

Reimplemented from Integrator.

Here is the call graph for this function:

◆ process_constraint_resistance()

int GSSSS::process_constraint_resistance ( )
overridevirtual

This method is similar to process_constraint(), but it only updates the global residual vector. The global stiffness matrix is not touched as in some solving schemes, the global stiffness matrix is only assembled and factorised once at the beginning. Subsequent iterations do not assemble the global stiffness matrix again and reuse the factorised matrix. In this case, the factorised matrix cannot be modified.

Reimplemented from Integrator.

Here is the call graph for this function:

◆ process_load()

int GSSSS::process_load ( )
overridevirtual

Reimplemented from Integrator.

Here is the call graph for this function:

◆ process_load_resistance()

int GSSSS::process_load_resistance ( )
overridevirtual

Reimplemented from Integrator.

Here is the call graph for this function:

◆ stage_status()

void GSSSS::stage_status ( )
overridevirtual

Reimplemented from Integrator.

Here is the call graph for this function:

◆ update_compatibility()

void GSSSS::update_compatibility ( ) const
overridevirtual

Make sure that the trial displacement/velocity/acceleration are consistent with each other. When starting a new trial state, the trial displacement is identical to the current displacement. This essentially means that the displacement increment is zero. To have such a trial state with the given time step, the trial velocity and acceleration shall be updated to be compatible with the trial displacement.

On exit, trial velocity and acceleration should be computed from current/trial displacement.

Reimplemented from Integrator.

Here is the call graph for this function:

◆ update_parameter()

void GSSSS::update_parameter ( double  )
overridevirtual

When tim step changes, some parameters may need to be updated.

Reimplemented from Integrator.

Here is the call graph for this function:

◆ update_trial_status()

int GSSSS::update_trial_status ( )
overridevirtual

Reimplemented from Integrator.

Here is the call graph for this function:

Member Data Documentation

◆ DT

double GSSSS::DT = 0.
protected

◆ L1

const double GSSSS::L1
protected

◆ L2

const double GSSSS::L2
protected

◆ L3

double GSSSS::L3 = 0.
protected

◆ L4

const double GSSSS::L4
protected

◆ L5

double GSSSS::L5 = 0.
protected

◆ W1

double GSSSS::W1 = 0.
protected

◆ W1G1

double GSSSS::W1G1 = 0.
protected

◆ W1G4

double GSSSS::W1G4 = 0.
protected

◆ W1G6

double GSSSS::W1G6 = 0.
protected

◆ W2G2

double GSSSS::W2G2 = 0.
protected

◆ W2G5

double GSSSS::W2G5 = 0.
protected

◆ W3G3

double GSSSS::W3G3 = 0.
protected

◆ XCAD

double GSSSS::XCAD = 0.
protected

◆ XCVD

double GSSSS::XCVD = 0.
protected

◆ XPA2

double GSSSS::XPA2 = 0.
protected

◆ XPA3

double GSSSS::XPA3 = 0.
protected

◆ XPV2

double GSSSS::XPV2 = 0.
protected

◆ XPV3

double GSSSS::XPV3 = 0.
protected

The documentation for this class was generated from the following files: