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;
53using jive::Properties;
56using jive::StringVector;
58using jive::algebra::AbstractMatrix;
59using jive::algebra::DiagMatrixObject;
60using jive::algebra::FlexMatrixBuilder;
61using jive::app::Module;
62using jive::fem::ElementGroup;
63using jive::fem::ElementSet;
64using jive::implict::newSolverParams;
65using jive::implict::SolverInfo;
66using jive::implict::SolverModule;
67using jive::model::ActionParams;
68using jive::model::Actions;
69using jive::model::Model;
70using jive::model::StateVector;
71using jive::solver::newSolver;
72using jive::solver::Solver;
73using jive::util::Constraints;
74using jive::util::DenseTable;
75using jive::util::DofSpace;
76using jive::util::FuncUtils;
77using jive::util::Globdat;
78using jive::util::ItemSet;
79using jive::util::XTable;
117 virtual Status
init(
const Properties &conf,
118 const Properties &props,
119 const Properties &globdat)
override;
123 virtual void shutdown(
const Properties &globdat)
override;
128 virtual void configure(
const Properties &props,
129 const Properties &globdat)
override;
134 virtual void getConfig(
const Properties &props,
135 const Properties &globdat)
const override;
139 virtual void advance(
const Properties &globdat)
override;
144 virtual void solve(
const Properties &info,
145 const Properties &globdat)
override = 0;
149 virtual void cancel(
const Properties &globdat)
override;
154 virtual bool commit(
const Properties &globdat)
override;
190 inline void ABupdate(
const Vector &delta_y,
192 const Vector &f_old)
const;
197 inline void ABupdate(
const Vector &delta_y,
198 const Vector &f_cur)
const;
207 const Vector &delta_y,
208 const bool rot =
false);
216 const Ref<Constraints> &cons,
218 const Properties &globdat);
227 const Properties &globdat);
234 const Vector &y_cor);
283 const Vector &f_old)
const
285 delta_y =
dtime_ / 2. * (3. * f_cur - 1. * f_old);
289 const Vector &f_cur)
const
Base class for explicit time integration schemes.
Definition ExplicitModule.h:93
bool valid_
State validity flag.
Definition ExplicitModule.h:239
void updateMass_(const Properties &globdat)
Update mass matrix.
Definition ExplicitModule.cpp:425
virtual ~ExplicitModule()
Protected destructor.
Definition ExplicitModule.cpp:50
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:247
Ref< Function > updCond_
Update condition function.
Definition ExplicitModule.h:262
void invalidate_()
invalidate_ current state
Definition ExplicitModule.cpp:465
double lenScale_
Characteristic length scale.
Definition ExplicitModule.h:257
static const char * SO3_DOFS
SO(3) DOF types property.
Definition ExplicitModule.h:108
double dtime_
Current time step size.
Definition ExplicitModule.h:244
static const char * LEN_SCALE
Length scale property.
Definition ExplicitModule.h:109
Vector getForce(const Vector &fint, const Vector &fext, const Properties &globdat)
Get force vector.
Definition ExplicitModule.cpp:398
IdxVector dofsSO3_
SO(3) DOF type indices.
Definition ExplicitModule.h:264
static const char * STEP_COUNT
Step count property.
Definition ExplicitModule.h:107
double saftey_
Safety factor for step size control.
Definition ExplicitModule.h:248
virtual Status init(const Properties &conf, const Properties &props, const Properties &globdat) override
Initialize the module.
Definition ExplicitModule.cpp:60
Ref< Constraints > cons_
Constraint manager.
Definition ExplicitModule.h:272
idx_t order_
Integration order.
Definition ExplicitModule.h:256
MassMode
Mass matrix formulation modes.
Definition ExplicitModule.h:97
@ LUMPED
Lumped mass matrix.
Definition ExplicitModule.h:98
@ CONSISTENT
Consistent mass matrix.
Definition ExplicitModule.h:99
Ref< Model > model_
Root of the model tree.
Definition ExplicitModule.h:270
IdxMatrix rdofs_
Rotational DOF mapping.
Definition ExplicitModule.h:265
virtual void configure(const Properties &props, const Properties &globdat) override
Configure the module from properties.
Definition ExplicitModule.cpp:218
virtual void getConfig(const Properties &props, const Properties &globdat) const override
Get current module configuration.
Definition ExplicitModule.cpp:242
virtual void shutdown(const Properties &globdat) override
Shutdown the module.
Definition ExplicitModule.cpp:202
virtual void advance(const Properties &globdat) override
Advance to next time step.
Definition ExplicitModule.cpp:259
double minDtime_
Minimum time step size.
Definition ExplicitModule.h:246
virtual double getPrecision() const override
Get current convergence precision.
Definition ExplicitModule.cpp:484
virtual void cancel(const Properties &globdat) override
Cancel current solution attempt.
Definition ExplicitModule.cpp:277
double prec_
Precision tolerance.
Definition ExplicitModule.h:245
void ABupdate(const Vector &delta_y, const Vector &f_cur, const Vector &f_old) const
Adams-Bashforth 2-step update.
Definition ExplicitModule.h:281
Vector massInv_
Inverse mass matrix.
Definition ExplicitModule.h:263
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:362
double incrFact_
Step size increase factor.
Definition ExplicitModule.h:249
static const char * TYPE_NAME
Module type name.
Definition ExplicitModule.h:106
double getQuality(const Vector &y_pre, const Vector &y_cor)
Get solution quality measure.
Definition ExplicitModule.cpp:494
Ref< DofSpace > dofs_
Degree of freedom space.
Definition ExplicitModule.h:271
double decrFact_
Step size decrease factor.
Definition ExplicitModule.h:250
virtual bool commit(const Properties &globdat) override
Compute next step size and commit solution.
Definition ExplicitModule.cpp:291
MassMode mode_
Mass matrix mode.
Definition ExplicitModule.h:255
virtual void setPrecision(double eps) override
Set convergence precision.
Definition ExplicitModule.cpp:474
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:339
Ref< Solver > solver_
Linear solver.
Definition ExplicitModule.h:273
file containing some basic helper functions
void expVec(const Matrix &Exp, const Vector &psi)
compute the exponential of a axial vector.
Definition helpers.cpp:139
void logMat(const Vector &rv, const Matrix &R)
compute rotational vector from rotation matrix.
Definition helpers.cpp:99