suanPan
|
The Integrator class is basically a wrapper of the DomainBase class with regard to some status changing methods. More...
#include <Integrator.h>
Public Member Functions | |
Integrator (unsigned=0) | |
Integrator (const Integrator &)=delete | |
Integrator (Integrator &&)=delete | |
Integrator & | operator= (const Integrator &)=delete |
Integrator & | operator= (Integrator &&)=delete |
~Integrator () override=default | |
void | set_domain (const weak_ptr< DomainBase > &) |
shared_ptr< DomainBase > | get_domain () const |
virtual int | initialize () |
virtual constexpr IntegratorType | type () const |
void | set_time_step_switch (bool) |
bool | allow_to_change_time_step () const |
void | set_matrix_assembled_switch (bool) |
bool | matrix_is_assembled () const |
virtual bool | has_corrector () const |
virtual bool | time_independent_matrix () const |
virtual int | process_load () |
virtual int | process_constraint () |
virtual int | process_criterion () |
virtual int | process_modifier () |
virtual int | process_load_resistance () |
virtual int | process_constraint_resistance () |
void | record () const |
virtual void | assemble_resistance () |
virtual void | assemble_matrix () |
virtual vec | get_force_residual () |
virtual vec | get_displacement_residual () |
virtual vec | get_auxiliary_residual () |
virtual sp_mat | get_reference_load () |
virtual const vec & | get_trial_displacement () const |
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_from_ninja () |
virtual void | update_trial_time (double) |
virtual void | update_incre_time (double) |
virtual int | update_trial_status () |
virtual int | correct_trial_status () |
virtual int | sync_status (bool) |
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 (vec &) const |
void | stage_and_commit_status () |
virtual void | stage_status () |
virtual void | commit_status () |
virtual void | clear_status () |
virtual void | reset_status () |
virtual void | update_parameter (double) |
virtual vec | from_incre_velocity (const vec &, const uvec &) |
virtual vec | from_incre_acceleration (const vec &, const uvec &) |
virtual vec | from_total_velocity (const vec &, const uvec &) |
virtual 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 | |
Tag & | operator= (const Tag &)=delete |
Tag & | operator= (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 |
virtual void | print () |
The Integrator class is basically a wrapper of the DomainBase class with regard to some status changing methods.
By default, the Step object calls DomainBase(Workshop) object to update displacement/resistance/stiffness independently. When it comes to dynamic analysis (time integration is involved), it is necessary to compute the equivalent load/stiffness by combining several quantities.
The Integrator object is acting like an agent between Workshop and Step, that can modify corresponding quantities to account for dynamic effect.
|
explicit |
|
delete |
|
delete |
|
overridedefault |
bool Integrator::allow_to_change_time_step | ( | ) | const |
Some time integration methods (multistep methods) require time step to be constant (for at least some consecutive steps). Call this method in solvers to determine whether it is allowed to change time step.
|
virtual |
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 in BatheExplicit, BatheTwoStep, GeneralizedAlpha, GeneralizedAlphaExplicit, GSSSS, LeeNewmarkIterative, Newmark, NonviscousNewmark, OALTS, Tchamwa, and WilsonPenzienNewmark.
|
virtual |
Reimplemented in BatheExplicit, BatheTwoStep, GeneralizedAlpha, GeneralizedAlphaExplicit, GSSSS, LeeNewmark, Newmark, NonviscousNewmark, OALTS, RayleighNewmark, Tchamwa, and WilsonPenzienNewmark.
|
virtual |
Reimplemented in LeeNewmarkBase, BatheExplicit, BatheTwoStep, NonviscousNewmark, OALTS, and WilsonPenzienNewmark.
|
virtual |
Reimplemented in LeeNewmarkBase, BatheExplicit, BatheTwoStep, NonviscousNewmark, OALTS, and WilsonPenzienNewmark.
|
virtual |
Reimplemented in BatheExplicit, and GeneralizedAlphaExplicit.
|
virtual |
Avoid machine error accumulation. The penalty method can apply homogeneous constraints approximately. The corresponding DoF shall be set to zero after solving the system.
|
virtual |
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 TOTAL displacement.
Reimplemented in BatheTwoStep, GeneralizedAlpha, GSSSS, ExplicitIntegrator, Newmark, and OALTS.
vec Integrator::from_incre_acceleration | ( | double | magnitude, |
const uvec & | encoding | ||
) |
A simplified version similar to from_incre_acceleration(const vec&, const uvec&)
. It assumes all DoFs share the same magnitude.
|
virtual |
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 TOTAL displacement.
Reimplemented in BatheTwoStep, GeneralizedAlpha, GSSSS, ExplicitIntegrator, Newmark, and OALTS.
vec Integrator::from_incre_velocity | ( | double | magnitude, |
const uvec & | encoding | ||
) |
A simplified version similar to from_incre_velocity(const vec&, const uvec&)
. It assumes all DoFs share the same magnitude.
|
virtual |
Reimplemented in BatheTwoStep, ExplicitIntegrator, and OALTS.
vec Integrator::from_total_acceleration | ( | double | magnitude, |
const uvec & | encoding | ||
) |
|
virtual |
Reimplemented in BatheTwoStep, and OALTS.
vec Integrator::from_total_velocity | ( | double | magnitude, |
const uvec & | encoding | ||
) |
|
virtual |
Assemble the global residual vector due to nonlinear constraints implemented via the multiplier method.
|
virtual |
Assemble the global residual vector in displacement-controlled solving schemes. Apart from the global resistance and external load vectors, the reference load vector shall also be considered.
Reimplemented in LeeNewmarkBase, GeneralizedAlpha, GeneralizedAlphaExplicit, and GSSSS.
shared_ptr< DomainBase > Integrator::get_domain | ( | ) | const |
|
virtual |
Assemble the global residual vector in load-controlled solving schemes.
Reimplemented in LeeNewmarkBase, GeneralizedAlpha, GeneralizedAlphaExplicit, and GSSSS.
|
virtual |
Reimplemented in GeneralizedAlpha, GeneralizedAlphaExplicit, and GSSSS.
|
virtual |
Reimplemented in ExplicitIntegrator.
|
virtual |
Reimplemented in BatheExplicit, and GeneralizedAlphaExplicit.
|
virtual |
Reimplemented in LeeNewmark, LeeNewmarkBase, LeeNewmarkFull, LeeNewmarkIterative, NonviscousNewmark, and WilsonPenzienNewmark.
bool Integrator::matrix_is_assembled | ( | ) | const |
|
delete |
|
delete |
|
virtual |
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 in GeneralizedAlpha, GeneralizedAlphaExplicit, GSSSS, LeeNewmark, LeeNewmarkFull, LeeNewmarkIterative, and WilsonPenzienNewmark.
|
virtual |
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 in GeneralizedAlpha, GeneralizedAlphaExplicit, GSSSS, LeeNewmark, LeeNewmarkFull, and LeeNewmarkIterative.
|
virtual |
|
virtual |
Reimplemented in GeneralizedAlpha, GeneralizedAlphaExplicit, and GSSSS.
|
virtual |
Reimplemented in GeneralizedAlpha, GeneralizedAlphaExplicit, and GSSSS.
|
virtual |
void Integrator::record | ( | ) | const |
|
virtual |
Reimplemented in LeeNewmarkBase, and WilsonPenzienNewmark.
void Integrator::set_domain | ( | const weak_ptr< DomainBase > & | D | ) |
void Integrator::set_matrix_assembled_switch | ( | bool | T | ) |
void Integrator::set_time_step_switch | ( | bool | T | ) |
mat Integrator::solve | ( | const mat & | B | ) |
mat Integrator::solve | ( | const sp_mat & | B | ) |
mat Integrator::solve | ( | mat && | B | ) |
|
virtual |
Reimplemented in LeeNewmarkBase, ExplicitIntegrator, and WilsonPenzienNewmark.
|
virtual |
Reimplemented in LeeNewmarkBase, ExplicitIntegrator, and WilsonPenzienNewmark.
|
virtual |
Reimplemented in LeeNewmarkBase, ExplicitIntegrator, and WilsonPenzienNewmark.
|
virtual |
Reimplemented in LeeNewmarkBase, ExplicitIntegrator, and WilsonPenzienNewmark.
mat Integrator::solve | ( | sp_mat && | B | ) |
void Integrator::stage_and_commit_status | ( | ) |
|
virtual |
|
virtual |
When a new displacement increment is computed, it is added to global displacement vector. At this moment, nodal and elemental quantities are all computed from the previous displacement vector, directly committing the new results causes out-of-sync issue. Some algorithms use predictor-corrector type scheme, which means the converged quantities are different from the committed quantities. This method is in charge of syncing quantities between global and local quantities by updating nodal/elemental quantities using the committed quantities.
|
virtual |
Reimplemented in ImplicitIntegrator.
|
inlineconstexprvirtual |
Reimplemented in ImplicitIntegrator, and ExplicitIntegrator.
|
virtual |
|
virtual |
|
virtual |
|
virtual |
Some algorithms solve a system which differs from the original one. The size of the problem changes thus the computed increment contains additional internal quantities. This method updates internal quantities stored in those integrators.
Reimplemented in LeeNewmarkBase.
|
virtual |
|
virtual |
When time step changes, some parameters may need to be updated.
Reimplemented in BatheExplicit, BatheTwoStep, GeneralizedAlpha, GeneralizedAlphaExplicit, GSSSS, Newmark, NonviscousNewmark, OALTS, and Tchamwa.
|
virtual |
|
virtual |
|
virtual |
Reimplemented in BatheExplicit, BatheTwoStep, GeneralizedAlpha, GeneralizedAlphaExplicit, GSSSS, Newmark, OALTS, and Tchamwa.
|
virtual |