The solver module provides interfaces to static, dynamic and eigenvalue solvers. Most of the solvers are implemented inside the C++ core.
- Author: Johannes Gerstmayr
- Date: 2020-12-02
- Notes: Solver functions are included directly in exudyn and can be used with exu.SolveStatic(...)
SolverErrorMessage(solver
, mbs
, isStatic = False
, showCausingObjects = True
, showCausingNodes = True
, showHints = True
)
- function description:(internal) helper function for unique error and helper messages
SolveStatic(mbs
, simulationSettings = exudyn.SimulationSettings()
, updateInitialValues = False
, storeSolver = True
, showHints = False
, showCausingItems = True
)
- NOTE: this function is directly available in MainSystem (mbs); it should be directly called as mbs.SolveStatic(...). For description of the interface, see the MainSystem Python extensions, :ref:`sec-mainsystemextensions-solvestatic`
SolveDynamic(mbs
, simulationSettings = exudyn.SimulationSettings()
, solverType = exudyn.DynamicSolverType.GeneralizedAlpha
, updateInitialValues = False
, storeSolver = True
, showHints = False
, showCausingItems = True
)
- NOTE: this function is directly available in MainSystem (mbs); it should be directly called as mbs.SolveDynamic(...). For description of the interface, see the MainSystem Python extensions, :ref:`sec-mainsystemextensions-solvedynamic`
SolverSuccess(solverStructure
)
- function description:return success (True/False) and error message of solver after SolveSteps(...), SolveSystem(...), SolveDynamic(...) or SolveStatic(...) have been called. May also be set if other higher level functions called e.g. SolveSystem(...)
- input:solverStructure: solver structure, as stored in mbs.sys or as created e.g. by exudyn.MainSolverExplicit()
- output:[success, errorString], returns success=True or False and in case of no success, information is provided in errorString
- example:
#assume MainSystem mbs, exu library and simulationSettings:
try:
mbs.SolveDynamic(simulationSettings)
except:
[success, msg] = exu.SolverSuccess(mbs.sys['dynamicSolver'])
print('success=',success)
print('error message=',msg)
#alternative:
solver=exu.MainSolverImplicitSecondOrder()
...
[success, msg] = exu.SolverSuccess(solver)
ComputeLinearizedSystem(mbs
, simulationSettings = exudyn.SimulationSettings()
, projectIntoConstraintNullspace = False
, singularValuesTolerance = 1e-12
, returnConstraintJacobian = False
, returnConstraintNullspace = False
)
- NOTE: this function is directly available in MainSystem (mbs); it should be directly called as mbs.ComputeLinearizedSystem(...). For description of the interface, see the MainSystem Python extensions, :ref:`sec-mainsystemextensions-computelinearizedsystem`
ComputeODE2Eigenvalues(mbs
, simulationSettings = exudyn.SimulationSettings()
, useSparseSolver = False
, numberOfEigenvalues = 0
, constrainedCoordinates = []
, convert2Frequencies = False
, useAbsoluteValues = True
, computeComplexEigenvalues = False
, ignoreAlgebraicEquations = False
, singularValuesTolerance = 1e-12
)
- NOTE: this function is directly available in MainSystem (mbs); it should be directly called as mbs.ComputeODE2Eigenvalues(...). For description of the interface, see the MainSystem Python extensions, :ref:`sec-mainsystemextensions-computeode2eigenvalues`
ComputeSystemDegreeOfFreedom(mbs
, simulationSettings = exudyn.SimulationSettings()
, threshold = 1e-12
, verbose = False
, useSVD = False
)
- NOTE: this function is directly available in MainSystem (mbs); it should be directly called as mbs.ComputeSystemDegreeOfFreedom(...). For description of the interface, see the MainSystem Python extensions, :ref:`sec-mainsystemextensions-computesystemdegreeoffreedom`
CheckSolverInfoStatistics(solverName
, infoStat
, numberOfEvaluations
)
- function description:helper function for solvers to check e.g. if high number of memory allocations happened during simulationThis can happen, if large amount of sensors are attached and output is written in every time step
- input:stat=exudyn.InfoStat() from previous step, numberOfEvaluations is a counter which is proportional to number of RHS evaluations in method