13#include <jem/base/ArithmeticException.h>
14#include <jem/base/Array.h>
15#include <jem/base/Class.h>
16#include <jem/base/ClassTemplate.h>
17#include <jem/base/System.h>
18#include <jem/base/array/operators.h>
19#include <jem/util/Event.h>
20#include <jem/util/Properties.h>
21#include <jem/util/PropertyException.h>
22#include <jive/algebra/AbstractMatrix.h>
23#include <jive/algebra/DiagMatrixObject.h>
24#include <jive/algebra/FlexMatrixBuilder.h>
25#include <jive/app/Module.h>
26#include <jive/app/ModuleFactory.h>
27#include <jive/fem/ElementGroup.h>
28#include <jive/fem/ElementSet.h>
29#include <jive/implict/Names.h>
30#include <jive/implict/SolverInfo.h>
31#include <jive/implict/SolverModule.h>
32#include <jive/implict/utilities.h>
33#include <jive/model/Actions.h>
34#include <jive/model/Model.h>
35#include <jive/model/StateVector.h>
36#include <jive/solver/Solver.h>
37#include <jive/solver/SolverParams.h>
38#include <jive/solver/declare.h>
39#include <jive/solver/utilities.h>
40#include <jive/util/Constraints.h>
41#include <jive/util/DenseTable.h>
42#include <jive/util/DofSpace.h>
43#include <jive/util/FuncUtils.h>
44#include <jive/util/Globdat.h>
45#include <jive/util/ItemSet.h>
46#include <jive/util/XTable.h>
49using jem::newInstance;
50using jem::numeric::Function;
52using jive::BoolVector;
54using jive::Properties;
57using jive::StringVector;
59using jive::algebra::AbstractMatrix;
60using jive::algebra::DiagMatrixObject;
61using jive::algebra::FlexMatrixBuilder;
62using jive::app::Module;
63using jive::fem::ElementGroup;
64using jive::fem::ElementSet;
65using jive::implict::newSolverParams;
66using jive::implict::SolverInfo;
67using jive::implict::SolverModule;
68using jive::model::ActionParams;
69using jive::model::Actions;
70using jive::model::Model;
71using jive::model::StateVector;
72using jive::solver::newSolver;
73using jive::solver::Solver;
74using jive::util::Constraints;
75using jive::util::DenseTable;
76using jive::util::DofSpace;
77using jive::util::FuncUtils;
78using jive::util::Globdat;
79using jive::util::ItemSet;
80using jive::util::XTable;
120 virtual Status
init(
const Properties &conf,
121 const Properties &props,
122 const Properties &globdat)
override;
126 virtual void shutdown(
const Properties &globdat)
override;
131 virtual void configure(
const Properties &props,
132 const Properties &globdat)
override;
137 virtual void getConfig(
const Properties &props,
138 const Properties &globdat)
const override;
142 virtual void advance(
const Properties &globdat)
override;
147 virtual void solve(
const Properties &info,
148 const Properties &globdat)
override = 0;
152 virtual void cancel(
const Properties &globdat)
override;
157 virtual bool commit(
const Properties &globdat)
override;
213 inline void ABupdate(
const Vector &delta_y,
215 const Vector &f_old)
const;
220 inline void ABupdate(
const Vector &delta_y,
221 const Vector &f_cur)
const;
230 const Vector &delta_y,
231 const bool rot =
false);
239 const Ref<Constraints> &cons,
241 const Properties &globdat);
250 const Properties &globdat);
257 const Vector &y_cor);
314 const Vector &f_old)
const
316 delta_y =
dtime_ / 2. * (3. * f_cur - 1. * f_old);
320 const Vector &f_cur)
const
Base class for explicit time integration schemes.
Definition ExplicitModule.h:95
bool valid_
State validity flag.
Definition ExplicitModule.h:262
void updateMass_(const Properties &globdat)
Update mass matrix.
Definition ExplicitModule.cpp:521
virtual ~ExplicitModule()
Protected destructor.
Definition ExplicitModule.cpp:52
void dropCommittedForce_(const Properties &globdat)
Remove the published forces again (they are no longer valid)
Definition ExplicitModule.cpp:509
virtual void solve(const Properties &info, const Properties &globdat) override=0
Solve current time step (pure virtual)
double maxDtime_
Maximum time step size.
Definition ExplicitModule.h:277
Ref< Function > updCond_
Update condition function.
Definition ExplicitModule.h:292
void invalidate_()
invalidate_ current state
Definition ExplicitModule.cpp:580
double lenScale_
Characteristic length scale.
Definition ExplicitModule.h:287
void evalCommittedForce_(const Properties &globdat)
Evaluate the internal force at the committed state.
Definition ExplicitModule.cpp:471
static const char * SO3_DOFS
SO(3) DOF types property.
Definition ExplicitModule.h:110
BoolVector isRotDof_
Mask of rotational DOFs (rebuilt with rdofs_)
Definition ExplicitModule.h:296
Vector fintCache_
Internal force (without gyroscopic term) at the committed state.
Definition ExplicitModule.h:268
double dtime_
Current time step size.
Definition ExplicitModule.h:274
static const char * LEN_SCALE
Length scale property.
Definition ExplicitModule.h:111
Vector getForce(const Vector &fint, const Vector &fext, const Properties &globdat)
Get force vector.
Definition ExplicitModule.cpp:410
IdxVector dofsSO3_
SO(3) DOF type indices.
Definition ExplicitModule.h:294
static const char * STEP_COUNT
Step count property.
Definition ExplicitModule.h:109
double saftey_
Safety factor for step size control.
Definition ExplicitModule.h:278
virtual Status init(const Properties &conf, const Properties &props, const Properties &globdat) override
Initialize the module.
Definition ExplicitModule.cpp:62
bool fintCacheValid_
True between commit and the next state change.
Definition ExplicitModule.h:267
Ref< Constraints > cons_
Constraint manager.
Definition ExplicitModule.h:303
idx_t order_
Integration order.
Definition ExplicitModule.h:286
MassMode
Mass matrix formulation modes.
Definition ExplicitModule.h:99
@ LUMPED
Lumped mass matrix.
Definition ExplicitModule.h:100
@ CONSISTENT
Consistent mass matrix.
Definition ExplicitModule.h:101
static const char * MASS_MATRIX
globdat key of the published mass matrix
Definition ExplicitModule.h:112
Ref< Model > model_
Root of the model tree.
Definition ExplicitModule.h:301
IdxMatrix rdofs_
Rotational DOF mapping.
Definition ExplicitModule.h:295
virtual void configure(const Properties &props, const Properties &globdat) override
Configure the module from properties.
Definition ExplicitModule.cpp:221
virtual void getConfig(const Properties &props, const Properties &globdat) const override
Get current module configuration.
Definition ExplicitModule.cpp:245
virtual void shutdown(const Properties &globdat) override
Shutdown the module.
Definition ExplicitModule.cpp:205
virtual void advance(const Properties &globdat) override
Advance to next time step.
Definition ExplicitModule.cpp:262
void publishCommittedForce_(const Properties &globdat)
Publish the internal force of the committed state in globdat Not compatible with TangentOutputModule....
Definition ExplicitModule.cpp:489
double minDtime_
Minimum time step size.
Definition ExplicitModule.h:276
void updRotMask_()
Rebuild the rotational DOF mask from rdofs_.
Definition ExplicitModule.cpp:562
virtual double getPrecision() const override
Get current convergence precision.
Definition ExplicitModule.cpp:600
virtual void cancel(const Properties &globdat) override
Cancel current solution attempt.
Definition ExplicitModule.cpp:285
double prec_
Precision tolerance.
Definition ExplicitModule.h:275
void ABupdate(const Vector &delta_y, const Vector &f_cur, const Vector &f_old) const
Adams-Bashforth 2-step update.
Definition ExplicitModule.h:312
Vector massInv_
Inverse mass matrix.
Definition ExplicitModule.h:293
void updateVec(const Vector &y_new, const Vector &y_old, const Vector &delta_y, const bool rot=false)
Update displacement vectors with optional SO(3) handling.
Definition ExplicitModule.cpp:374
double incrFact_
Step size increase factor.
Definition ExplicitModule.h:279
static const char * TYPE_NAME
Module type name.
Definition ExplicitModule.h:108
Vector fintCacheDisp_
Displacements the cached force belongs to.
Definition ExplicitModule.h:269
double getQuality(const Vector &y_pre, const Vector &y_cor)
Get solution quality measure.
Definition ExplicitModule.cpp:610
Ref< DofSpace > dofs_
Degree of freedom space.
Definition ExplicitModule.h:302
double decrFact_
Step size decrease factor.
Definition ExplicitModule.h:280
virtual bool commit(const Properties &globdat) override
Compute next step size and commit solution.
Definition ExplicitModule.cpp:300
MassMode mode_
Mass matrix mode.
Definition ExplicitModule.h:285
virtual void setPrecision(double eps) override
Set convergence precision.
Definition ExplicitModule.cpp:590
void getAcce(const Vector &a, const Ref< Constraints > &cons, const Vector &fres, const Properties &globdat)
Get acceleration and return resulting force vector.
Definition ExplicitModule.cpp:351
Ref< Solver > solver_
Linear solver.
Definition ExplicitModule.h:304
file containing some basic helper functions
void expVec(const Matrix &Exp, const Vector &psi)
compute the exponential of a axial vector.
Definition helpers.cpp:185
void logMat(const Vector &rv, const Matrix &R)
compute rotational vector from rotation matrix.
Definition helpers.cpp:117
void mul3(const Matrix &C, const Matrix &A, const Matrix &B)
C = A * B for 3 x 3 matrices without heap allocation.
Definition helpers.cpp:162