21 #ifndef _DYNAMIC_SYSTEM_SOLVER_H_
22 #define _DYNAMIC_SYSTEM_SOLVER_H_
24 #include "mbsim/group.h"
25 #include "fmatvec/sparse_matrix.h"
55 enum Solver { FixedPointTotal, FixedPointSingle, GaussSeidel, LinearEquations, RootFinding };
65 enum LinAlg { LUDecomposition, LevenbergMarquardt, PseudoInverse };
125 void setTruncateSimulationFiles(
bool trunc) { truncateSimulationFiles=trunc; }
144 virtual void updateh(
double t,
int i=0);
145 virtual void updateM(
double t,
int i=0);
146 virtual void updateStateDependentVariables(
double t);
161 virtual void updater(
double t,
int j=0);
162 virtual void updatewb(
double t,
int j=0);
163 virtual void updateW(
double t,
int j=0);
164 virtual void updateV(
double t,
int j=0);
169 virtual std::string
getType()
const {
return "DynamicSystemSolver"; }
170 virtual void plot(
const fmatvec::Vec& z,
double t,
double dt=1);
171 virtual void plot2(
const fmatvec::Vec& z,
double t,
double dt=1);
194 void setImpactSolver(
Solver solver_) { impactSolver = solver_; }
196 const Solver& getImpactSolver() {
return impactSolver; }
197 void setTermination(
bool term_) {
term = term_; }
199 void setMaxIter(
int iter) {
maxIter = iter; }
200 void setHighIter(
int iter) { highIter = iter; }
201 void setNumJacProj(
bool numJac_) {
numJac = numJac_; }
202 void setMaxDampingSteps(
int maxDSteps) { maxDampingSteps = maxDSteps; }
203 void setLevenbergMarquardtParam(
double lmParm_) {
lmParm = lmParm_; }
206 void setUseOldla(
bool flag) {
useOldla = flag; }
207 void setDecreaseLevels(
const fmatvec::VecInt &decreaseLevels_) {
decreaseLevels = decreaseLevels_; }
208 void setCheckTermLevels(
const fmatvec::VecInt &checkTermLevels_) {
checkTermLevels = checkTermLevels_; }
209 void setCheckGSize(
bool checkGSize_) {
checkGSize = checkGSize_; }
212 const fmatvec::SparseMat& getGs()
const {
return Gs; }
213 fmatvec::SparseMat& getGs() {
return Gs; }
230 int getMaxIter() {
return maxIter;}
299 virtual void updateG(
double t,
int i=0);
350 void getLinkStatus(fmatvec::VecInt &LinkStatusExt,
double t);
374 void savela(
double dt=1.0);
380 void initla(
double dt=1.0);
432 static void sigSegfaultHandler(
int);
435 void setPartialEventDrivenSolver(
bool peds_) {
peds = peds_; }
442 void writez(std::string fileName,
bool formatH5=
true);
448 void readz0(std::string fileName);
450 virtual void initializeUsingXML(xercesc::DOMElement *element);
451 virtual xercesc::DOMElement* writeXMLFile(xercesc::DOMNode *element);
454 void writeXMLFile(
const std::string &
name);
455 void writeXMLFile() { writeXMLFile(
getName()); }
501 void setAlwaysConsiderContact(
bool alwaysConsiderContact_) {alwaysConsiderContact = alwaysConsiderContact_;}
503 void setInverseKinetics(
bool inverseKinetics_) {inverseKinetics = inverseKinetics_;}
505 void setInitialProjection(
bool initialProjection_) {initialProjection = initialProjection_;}
507 void setUseConstraintSolverForPlot(
bool useConstraintSolverForPlot_) {useConstraintSolverForPlot = useConstraintSolverForPlot_;}
514 void setRootID(
int ID) {rootID = ID;}
515 int getRootID()
const {
return rootID;}
631 fmatvec::SparseMat
Gs;
779 bool alwaysConsiderContact;
780 bool inverseKinetics;
781 bool initialProjection;
782 bool useConstraintSolverForPlot;
788 double gTol, gdTol, gddTol, laTol, LaTol;
821 bool truncateSimulationFiles;
828 std::vector<DynamicSystem*> dynamicsystemPreReorganize;
bool useOldla
flag if contac force parameter of last time step should be used
Definition: dynamic_system_solver.h:691
fmatvec::Vec fParent
right hand side of order one parameters
Definition: dynamic_system_solver.h:605
int solveConstraintsLinearEquations()
solution of contact equations with Cholesky decomposition
Definition: dynamic_system_solver.cc:978
solver-interface for dynamic systems
Definition: solver.h:38
fmatvec::Vec deltau(const fmatvec::Vec &zParent, double t, double dt)
Definition: dynamic_system_solver.cc:935
virtual int solveConstraintsRootFinding()
solve contact equations with Newton scheme
Definition: dynamic_system_solver.cc:533
virtual void setlaTol(double tol)
Definition: dynamic_system.cc:1292
fmatvec::Vec q
positions, differentiated positions, initial positions
Definition: dynamic_system.h:784
fmatvec::Vec gParent
relative distances
Definition: dynamic_system_solver.h:573
void updatezRef(const fmatvec::Vec &ext)
references to external state
Definition: dynamic_system_solver.cc:1332
bool checkGSize
boolean if force action matrix should be resized in each step
Definition: dynamic_system_solver.h:711
virtual void updateG(double t, int i=0)
updates mass action matrix
Definition: dynamic_system_solver.cc:989
fmatvec::Vec rParent[2]
nonsmooth right hand side
Definition: dynamic_system_solver.h:600
fmatvec::SymMat M[2]
mass matrix
Definition: dynamic_system.h:774
void getLinkStatus(fmatvec::VecInt &LinkStatusExt, double t)
Definition: dynamic_system_solver.cc:1049
bool term
boolean to check for termination of contact equations solution
Definition: dynamic_system_solver.h:651
void readz0(std::string fileName)
reads state from a file
Definition: dynamic_system_solver.cc:1324
bool dropContactInfo
flag if contact matrices for debugging should be dropped in no-convergence case
Definition: dynamic_system_solver.h:686
double tolProj
Tolerance for projection of generalized position.
Definition: dynamic_system_solver.h:748
solver interface for modelling and simulation of dynamic systems
Definition: dynamic_system_solver.h:49
void savela(double dt=1.0)
save contact force parameter for use as starting value in next time step
Definition: dynamic_system_solver.cc:1165
fmatvec::SparseMat Gs
sparse mass action matrix
Definition: dynamic_system_solver.h:631
virtual void zdot(const fmatvec::Vec &z, fmatvec::Vec &zd, double t)
update for event driven integrator during smooth phase
Definition: dynamic_system_solver.cc:1042
Strategy strategy
relaxarion strategy for solution of fixed-point scheme
Definition: dynamic_system_solver.h:671
void setgddTol(double tol)
Definition: dynamic_system_solver.h:477
fmatvec::VecInt checkTermLevels
TODO.
Definition: dynamic_system_solver.h:706
DynamicSystemSolver(const std::string &name="")
constructor
Definition: dynamic_system_solver.cc:69
Solver contactSolver
solver for contact equations and impact equations
Definition: dynamic_system_solver.h:666
void setgdTol(double tol)
Definition: dynamic_system_solver.h:472
void projectGeneralizedPositions(double t, int mode, bool fullUpdate=false)
drift projection for positions
Definition: dynamic_system_solver.cc:1065
bool stopIfNoConvergence
flag if the contact equations should be stopped if there is no convergence
Definition: dynamic_system_solver.h:681
fmatvec::Vec deltax(const fmatvec::Vec &zParent, double t, double dt)
return x-state difference for current time
Definition: dynamic_system_solver.cc:952
void setgTol(double tol)
Definition: dynamic_system_solver.h:467
fmatvec::Mat TParent
matrix of linear relation between differentiated positions and velocities
Definition: dynamic_system_solver.h:533
fmatvec::Vec sParent
TODO.
Definition: dynamic_system_solver.h:563
fmatvec::Vec u
velocities, differentiated velocities, initial velocities
Definition: dynamic_system.h:789
double computePotentialEnergy()
compute potential energy of entire dynamic system change? TODO
Definition: dynamic_system_solver.cc:1175
fmatvec::VecInt LinkStatusRegParent
status vector of single valued links
Definition: dynamic_system_solver.h:626
fmatvec::Vec gdParent
relative velocities
Definition: dynamic_system_solver.h:578
virtual int solveConstraints()
solves prox-functions for contact forces using sparsity structure
Definition: dynamic_system_solver.cc:846
fmatvec::VecInt LinkStatusParent
status vector of set valued links with piecewise link equation (which piece is valid) ...
Definition: dynamic_system_solver.h:620
group ingredients do not depend on each other
Definition: group.h:35
LinAlg
linear algebra for Newton scheme in solution of contact equations
Definition: dynamic_system_solver.h:65
void projectGeneralizedVelocities(double t, int mode)
drift projection for positions
Definition: dynamic_system_solver.cc:1124
virtual void closePlot()
closes plot file
Definition: dynamic_system_solver.cc:840
unsigned int flushCount
counts plot-calls until files to be flushed TODO
Definition: dynamic_system_solver.h:743
std::string getSolverInfo()
Definition: dynamic_system_solver.cc:1227
virtual void setgTol(double tol)
Definition: dynamic_system.cc:1271
basic class of MBSim mainly for plotting
Definition: element.h:58
static void sigInterruptHandler(int)
handler for user interrupt signal
Definition: dynamic_system_solver.cc:1285
double lmParm
Levenberg-Marquard parameter.
Definition: dynamic_system_solver.h:661
void addElement(Element *element_)
Definition: dynamic_system_solver.cc:1188
void addToGraph(Graph *graph, fmatvec::SqrMat &A, int i, std::vector< Object * > &objList)
adds list of objects to tree
Definition: dynamic_system_solver.cc:1542
int solveImpactsLinearEquations(double dt=0)
solution of contact equations with Cholesky decomposition on velocity level
Definition: dynamic_system_solver.cc:984
virtual void setLaTol(double tol)
Definition: dynamic_system.cc:1299
fmatvec::Vec rFactorParent
relaxation parameters for contact equations
Definition: dynamic_system_solver.h:558
virtual int solveImpactsGaussSeidel(double dt=0)
solve impact equations with Gauss-Seidel scheme on velocity level
Definition: dynamic_system_solver.cc:513
virtual void plot(double t, double dt)
plots time dependent data
Definition: dynamic_system.cc:368
fmatvec::VecInt decreaseLevels
decreasing relaxation factors is done in levels containing the number of contact iterations as condit...
Definition: dynamic_system_solver.h:701
Strategy
relaxation strategies in solution of contact equations
Definition: dynamic_system_solver.h:60
void setStopIfNoConvergence(bool flag, bool dropInfo=false)
Definition: dynamic_system_solver.h:415
void getLinkStatusReg(fmatvec::VecInt &LinkStatusRegExt, double t)
Definition: dynamic_system_solver.cc:1057
fmatvec::SymMat MParent[2]
mass matrix
Definition: dynamic_system_solver.h:523
fmatvec::Vec b
TODO.
Definition: dynamic_system_solver.h:646
virtual void checkImpactsForTermination(double dt=0)
validate force laws concerning given tolerances on velocity level
Definition: dynamic_system_solver.cc:695
void dropContactMatrices()
Definition: dynamic_system_solver.cc:1266
void initialize()
Initialize the system.
Definition: dynamic_system_solver.cc:84
double computeKineticEnergy()
compute kinetic energy of entire dynamic system
Definition: dynamic_system_solver.h:385
bool numJac
flag if Jacobian for Newton scheme should be calculated numerically
Definition: dynamic_system_solver.h:696
virtual void updater(double t, int j=0)
update smooth link force law
Definition: dynamic_system_solver.cc:821
unsigned int flushEvery
flushes all hdf5-files every x-times the plot-routine is called TODO
Definition: dynamic_system_solver.h:737
unsigned int driftCount
TODO, additional stop in event driven solver for drift correction.
Definition: dynamic_system_solver.h:731
fmatvec::Mat WParent[2]
contact force directions
Definition: dynamic_system_solver.h:538
int warnLevel
level for warning output (0-2)
Definition: dynamic_system_solver.h:721
virtual void initz(fmatvec::Vec &z0)
initialises state variables
Definition: dynamic_system_solver.cc:960
class for tree-structured mechanical systems with recursive and flat memory mechanism ...
Definition: graph.h:37
InitStage
The stages of the initialization.
Definition: element.h:97
virtual int solveImpacts(double dt=0)
solves prox-functions for impacts on velocity level using sparsity structure
Definition: dynamic_system_solver.cc:880
int(DynamicSystemSolver::* solveImpacts_)(double dt)
function pointer for election of prox-solver for impact equations on velocity level ...
Definition: dynamic_system_solver.h:278
void setProjectionTolerance(double tol)
set tolerance for projection of generalized position
Definition: dynamic_system_solver.h:462
int(DynamicSystemSolver::* solveConstraints_)()
Definition: dynamic_system_solver.h:271
Element * getElement(const std::string &name)
Definition: dynamic_system_solver.cc:1200
fmatvec::VecInt jsvParent
boolean evaluation of stopvector
Definition: dynamic_system_solver.h:615
virtual void getsv(const fmatvec::Vec &z, fmatvec::Vec &svExt, double t)
evaluation of stop vector
Definition: dynamic_system_solver.cc:1694
fmatvec::SymMat LLMParent[2]
Cholesky decomposition of mass matrix.
Definition: dynamic_system_solver.h:528
fmatvec::Vec deltaq(const fmatvec::Vec &zParent, double t, double dt)
Definition: dynamic_system_solver.cc:944
LinAlg linAlg
linear system solver used for Newton scheme in contact equations
Definition: dynamic_system_solver.h:676
virtual void setgdTol(double tol)
Definition: dynamic_system.cc:1278
std::string name
name of element
Definition: element.h:290
int limitGSize
TODO.
Definition: dynamic_system_solver.h:716
virtual int solveConstraintsFixpointSingle()
solve contact equations with single step fixed point scheme
Definition: dynamic_system_solver.cc:429
virtual void updaterFactors()
update relaxation factors for contact equations
Definition: dynamic_system_solver.cc:1356
static bool exitRequest
boolean signal evaluation for end integration set by user
Definition: dynamic_system_solver.h:804
bool peds
TODO, flag for occuring impact and sticking in event driven solver.
Definition: dynamic_system_solver.h:726
const std::string & getName() const
Definition: element.h:161
fmatvec::Vec hParent[2]
smooth, smooth with respect to objects, smooth with respect to links right hand side ...
Definition: dynamic_system_solver.h:595
void constructor()
set plot feature default values
Definition: dynamic_system_solver.cc:1382
virtual int solveImpactsRootFinding(double dt=0)
solve impact equations with Newton scheme on velocity level
Definition: dynamic_system_solver.cc:609
fmatvec::SqrMat G
mass action matrix
Definition: dynamic_system_solver.h:641
void setlaTol(double tol)
Definition: dynamic_system_solver.h:482
bool integratorExitRequest
boolean signal evaluation for end integration set by program
Definition: dynamic_system_solver.h:799
fmatvec::Vec wbParent
TODO.
Definition: dynamic_system_solver.h:548
virtual void checkConstraintsForTermination()
validate force laws concerning given tolerances
Definition: dynamic_system_solver.cc:684
void init(InitStage stage)
plots time series header
Definition: dynamic_system_solver.cc:112
void update(const fmatvec::Vec &z, double t, int options=0)
update of dynamic system for time-stepping integrator
Definition: dynamic_system_solver.cc:1008
virtual void shift(fmatvec::Vec &z, const fmatvec::VecInt &jsv, double t)
update for event driven integrator for event
Definition: dynamic_system_solver.cc:1552
void initla(double dt=1.0)
load contact force parameter for use as starting value
Definition: dynamic_system_solver.cc:1170
fmatvec::Vec la
contact force parameters
Definition: dynamic_system.h:809
int maxIter
maximum number of contact iterations, high number of contact iterations for warnings, maximum number of damping steps for Newton scheme
Definition: dynamic_system_solver.h:656
Solver
solver for contact equations
Definition: dynamic_system_solver.h:55
fmatvec::Vec zParent
state
Definition: dynamic_system_solver.h:583
fmatvec::Vec laParent
contact force parameters
Definition: dynamic_system_solver.h:553
virtual std::string getType() const
Definition: dynamic_system_solver.h:169
fmatvec::Vec resParent
residuum of contact equations
Definition: dynamic_system_solver.h:568
void setLaTol(double tol)
Definition: dynamic_system_solver.h:487
void setFlushEvery(unsigned int every)
set the number of plot-routine-calls after which all hdf5-files will be flushed
Definition: dynamic_system_solver.h:499
virtual ~DynamicSystemSolver()
destructor
Definition: dynamic_system_solver.cc:74
fmatvec::Vec svParent
stopvector (rootfunctions for event driven integration
Definition: dynamic_system_solver.h:610
fmatvec::SqrMat Jprox
JACOBIAN of contact equations for Newton scheme.
Definition: dynamic_system_solver.h:636
fmatvec::VecInt jsv
boolean evaluation of stop vector concerning roots
Definition: dynamic_system.h:839
fmatvec::Mat VParent[2]
condensed contact force directions
Definition: dynamic_system_solver.h:543
void writez(std::string fileName, bool formatH5=true)
writes state to a file
Definition: dynamic_system_solver.cc:1304
virtual int solveConstraintsGaussSeidel()
solve contact equations with Gauss-Seidel scheme
Definition: dynamic_system_solver.cc:493
static void sigAbortHandler(int)
handler for abort signals
Definition: dynamic_system_solver.cc:1290
void decreaserFactors()
decrease relaxation factors if mass action matrix is not diagonal dominant
Definition: dynamic_system_solver.cc:1002
void computeInitialCondition()
compute initial condition for links for event driven integrator
Definition: dynamic_system_solver.cc:917
void updatezdRef(const fmatvec::Vec &ext)
references to differentiated external state
Definition: dynamic_system_solver.cc:1343
bool READZ0
is a state read from a file
Definition: dynamic_system_solver.h:809
void computeConstraintForces(double t)
compute inverse kinetics constraint forces
Definition: dynamic_system_solver.cc:1378
virtual void setgddTol(double tol)
Definition: dynamic_system.cc:1285
fmatvec::Vec zdParent
differentiated state
Definition: dynamic_system_solver.h:588
virtual int solveImpactsFixpointSingle(double dt=0)
solve impact equations with single step fixed point scheme on velocity level
Definition: dynamic_system_solver.cc:461