SolveVisitor
Used by the animation loop: send the solve signal to the others solvers This visitor is able to run the solvers sequentially or concurrently.
The SolveVisitor manages and executes solvers during the SOFA simulation loop, enabling both sequential and concurrent solving of mechanical systems.
- module
- Sofa.framework.Simulation.Core
- namespace
- sofa::simulation
- include
- sofa/simulation/SolveVisitor.h
- inherits
-
- Visitor
- description
The SolveVisitor in the SOFA framework plays a critical role in coordinating the solving process for mechanical systems, specifically by managing and executing Ordinary Differential Equation (ODE) solvers within the simulation pipeline. Its primary function is to handle the solution of the governing equations that describe the system's dynamics. These equations often arise from variational formulations or direct discretizations of continuous physics models.
Governing Equations
The ODEs managed by SolveVisitor typically take the form:
where:
M: Mass matrix,f_{int}(x): Internal forces (e.g., from constitutive laws),f_{ext}(t): External forces.
Constitutive and Kinematic Laws
The SolveVisitor itself does not explicitly implement any constitutive or kinematic laws. Instead, it invokes the solvers that handle these laws. The solvers (e.g., derived from OdeSolver) are responsible for computing internal forces based on the specific material models and deformation measures.
Role in Global FEM Pipeline
The SolveVisitor plays a crucial role in the global FEM pipeline by coordinating the solving process:
- Assembly Phase: The component is involved after the assembly phase where the system matrices (mass, stiffness) and vectors (internal forces) have been constructed.
- Time Integration: It facilitates time integration by invoking solvers that handle time-stepping schemes such as implicit Euler or Newmark-type methods.
- Nonlinear Resolution: The
SolveVisitorcan manage the nonlinear resolution process, enabling both sequential and parallel execution of solvers to solve the system of equations. - Linear Solve: The component ensures that the linearized system is solved either sequentially or concurrently based on user configuration. This involves invoking iterative Krylov methods (e.g., Conjugate Gradient) or direct sparse factorizations within the
OdeSolverimplementations. - State Update: After solving, the component updates the state of the system, advancing it to the next time step.
Numerical Methods and Discretization Choices
The SolveVisitor does not directly implement numerical methods or discretization choices. These are encapsulated within the solvers that it invokes. The component provides mechanisms for sequential or parallel execution of these solvers, enabling efficient solution strategies.
Fitting into the Variational / Lagrangian Mechanics Framework
The SolveVisitor integrates into the broader variational and Lagrangian mechanics framework by facilitating the resolution of equations derived from variational formulations. It ensures that these equations are solved efficiently within a simulation loop, leveraging both sequential and parallel processing capabilities to handle complex mechanical systems.
Methods
void
processSolver
(simulation::Node * node, sofa::core::behavior::OdeSolver * b)
virtual
void
fwdInteractionForceField
(Node * node, core::behavior::BaseInteractionForceField * forceField)
Result
processNodeTopDown
(simulation::Node * node)
virtual
void
processNodeBottomUp
(simulation::Node * )
virtual
bool
isThreadSafe
()
virtual
const char *
getCategoryName
()
virtual
void
setDt
(SReal _dt)
SReal
getDt
()
void
sequentialSolve
(simulation::Node * node)
void
parallelSolve
(simulation::Node * node)
void
initializeTaskScheduler
()
{
"name": "SolveVisitor",
"namespace": "sofa::simulation",
"module": "Sofa.framework.Simulation.Core",
"include": "sofa/simulation/SolveVisitor.h",
"doc": "Used by the animation loop: send the solve signal to the others solvers\nThis visitor is able to run the solvers sequentially or concurrently.",
"inherits": [
"Visitor"
],
"templates": [],
"data_fields": [],
"links": [],
"methods": [
{
"name": "processSolver",
"return_type": "void",
"params": [
{
"name": "node",
"type": "simulation::Node *"
},
{
"name": "b",
"type": "sofa::core::behavior::OdeSolver *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "fwdInteractionForceField",
"return_type": "void",
"params": [
{
"name": "node",
"type": "Node *"
},
{
"name": "forceField",
"type": "core::behavior::BaseInteractionForceField *"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "processNodeTopDown",
"return_type": "Result",
"params": [
{
"name": "node",
"type": "simulation::Node *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "processNodeBottomUp",
"return_type": "void",
"params": [
{
"name": "",
"type": "simulation::Node *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "isThreadSafe",
"return_type": "bool",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getCategoryName",
"return_type": "const char *",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "setDt",
"return_type": "void",
"params": [
{
"name": "_dt",
"type": "SReal"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getDt",
"return_type": "SReal",
"params": [],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "sequentialSolve",
"return_type": "void",
"params": [
{
"name": "node",
"type": "simulation::Node *"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "parallelSolve",
"return_type": "void",
"params": [
{
"name": "node",
"type": "simulation::Node *"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "initializeTaskScheduler",
"return_type": "void",
"params": [],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
}
],
"description": "The `SolveVisitor` is a core component in the SOFA simulation framework, inheriting from the `Visitor` class. Its primary role is to manage and execute solvers during the animation loop, enabling both sequential and concurrent execution of these solvers based on user configuration.\n\n### Role and Purpose:\nThe `SolveVisitor` coordinates the solving process for mechanical systems by interacting with `OdeSolver` instances within a simulation node hierarchy. It can perform solver operations sequentially or in parallel, depending on the setting provided during its instantiation.\n\n### Interactions with Other Components:\n- **Process Solvers**: The `processSolver` method sends solve signals to other solvers, invoking their `solve` methods with parameters such as time step (`dt`) and vectors for position (`x`) and velocity (`v`).\n- **Interaction Force Fields**: The `fwdInteractionForceField` method handles interaction force fields by computing external forces.\n- **Top-Down Processing**: The `processNodeTopDown` method recursively traverses the node hierarchy to apply solvers either sequentially or concurrently.\n- **Bottom-Up Processing**: The `processNodeBottomUp` method ensures that all parallel tasks have completed before continuing, coordinating with a task scheduler.\n\n### Practical Usage Guidance:\nThe component is typically used within the framework's animation loop. Users can control whether solvers operate in sequence (`sequentialSolve`) or concurrently (`parallelSolve`). The class handles timing and thread safety considerations, ensuring that the solving process is efficient and consistent with the simulation requirements.",
"maths": "<p>The <code>SolveVisitor</code> in the SOFA framework plays a critical role in coordinating the solving process for mechanical systems, specifically by managing and executing Ordinary Differential Equation (ODE) solvers within the simulation pipeline. Its primary function is to handle the solution of the governing equations that describe the system's dynamics. These equations often arise from variational formulations or direct discretizations of continuous physics models.</p>\n\n<h2>Governing Equations</h2>\n\n<p>The ODEs managed by <code>SolveVisitor</code> typically take the form:</p>\n\n\begin{align*}\nM\\ddot{x}(t) + f_{int}(x(t)) = f_{ext}(t)\n\tag{1}\n\tag{2}\n\tag{3}\n\tag{4}\n\tag{5}\n\tag{6}\n\tag{7}\n\tag{8}\n\tag{9}\n\tag{10}\n\tag{11}\n\tag{12}\n\tag{13}\n\tag{14}\n\tag{15}\n\tag{16}\n\tag{17}\n\tag{18}\n\tag{19}\n\tag{20}\n\tag{21}\n\tag{22}\n\tag{23}\n\tag{24}\n\tag{25}\n\tag{26}\n\tag{27}\n\tag{28}\n\tag{29}\n\tag{30}\n\tag{31}\n\tag{32}\n\tag{33}\n\tag{34}\n\tag{35}\n\tag{36}\n\tag{37}\n\tag{38}\n\tag{39}\n\tag{40}\n\tag{41}\n\tag{42}\n\tag{43}\n\tag{44}\n\tag{45}\n\tag{46}\n\tag{47}\n\tag{48}\n\tag{49}\n\tag{50}\n\tag{51}\n\tag{52}\n\tag{53}\n\tag{54}\n\tag{55}\n\tag{56}\n\tag{57}\n\tag{58}\n\tag{59}\n\tag{60}\n\tag{61}\n\tag{62}\n\tag{63}\n\tag{64}\n\tag{65}\n\tag{66}\n\tag{67}\n\tag{68}\n\tag{69}\n\tag{70}\n\tag{71}\n\tag{72}\n\tag{73}\n\tag{74}\n\tag{75}\n\tag{76}\n\tag{77}\n\tag{78}\n\tag{79}\n\tag{80}\n\tag{81}\n\tag{82}\n\tag{83}\n\tag{84}\n\tag{85}\n\tag{86}\n\tag{87}\n\tag{88}\n\tag{89}\n\tag{90}\n\tag{91}\n\tag{92}\n\tag{93}\n\tag{94}\n\tag{95}\n\tag{96}\n\tag{97}\n\tag{98}\n\tag{99}\n\tag{100}\n\tag{101}\n\tag{102}\n\tag{103}\n\tag{104}\n\tag{105}\n\tag{106}\n\tag{107}\n\tag{108}\n\tag{109}\n\tag{110}\n\tag{111}\n\tag{112}\n\tag{113}\n\tag{114}\n\tag{115}\n\tag{116}\n\tag{117}\n\tag{118}\n\tag{119}\n\tag{120}\n\tag{121}\n\tag{122}\n\tag{123}\n\tag{124}\n\tag{125}\n\tag{126}\n\tag{127}\n\tag{128}\n\tag{129}\n\tag{130}\n\tag{131}\n\tag{132}\n\tag{133}\n\tag{134}\n\tag{135}\n\tag{136}\n\tag{137}\n\tag{138}\n\tag{139}\n\tag{140}\n\tag{141}\n\tag{142}\n\tag{143}\n\tag{144}\n\tag{145}\n\tag{146}\n\tag{147}\n\tag{148}\n\tag{149}\n\tag{150}\n\tag{151}\n\tag{152}\n\tag{153}\n\tag{154}\n\tag{155}\n\tag{156}\n\tag{157}\n\tag{158}\n\tag{159}\n\tag{160}\n\tag{161}\n\tag{162}\n\tag{163}\n\tag{164}\n\tag{165}\n\tag{166}\n\tag{167}\n\tag{168}\n\tag{169}\n\tag{170}\n\tag{171}\n\tag{172}\n\tag{173}\n\tag{174}\n\tag{175}\n\tag{176}\n\tag{177}\n\tag{178}\n\tag{179}\n\tag{180}\n\tag{181}\n\tag{182}\n\tag{183}\n\tag{184}\n\tag{185}\n\tag{186}\n\tag{187}\n\tag{188}\n\tag{189}\n\tag{190}\n\tag{191}\n\tag{192}\n\tag{193}\n\tag{194}\n\tag{195}\n\tag{196}\n\tag{197}\n\tag{198}\n\tag{199}\n\tag{200}\n\tag{201}\n\tag{202}\n\tag{203}\n\tag{204}\n\tag{205}\n\tag{206}\n\tag{207}\n\tag{208}\n\tag{209}\n\tag{210}\n\tag{211}\n\tag{212}\n\tag{213}\n\tag{214}\n\tag{215}\n\tag{216}\n\tag{217}\n\tag{218}\n\tag{219}\n\tag{220}\n\tag{221}\n\tag{222}\n\tag{223}\n\tag{224}\n\tag{225}\n\tag{226}\n\tag{227}\n\tag{228}\n\tag{229}\n\tag{230}\n\tag{231}\n\tag{232}\n\tag{233}\n\tag{234}\n\tag{235}\n\tag{236}\n\tag{237}\n\tag{238}\n\tag{239}\n\tag{240}\n\tag{241}\n\tag{242}\n\tag{243}\n\tag{244}\n\tag{245}\n\tag{246}\n\tag{247}\n\tag{248}\n\tag{249}\n\tag{250}\n\tag{251}\n\tag{252}\n\tag{253}\n\tag{254}\n\tag{255}\n\tag{256}\n\tag{257}\n\tag{258}\n\tag{259}\n\tag{260}\n\tag{261}\n\tag{262}\n\tag{263}\n\tag{264}\n\tag{265}\n\tag{266}\n\tag{267}\n\tag{268}\n\tag{269}\n\tag{270}\n\tag{271}\n\tag{272}\n\tag{273}\n\tag{274}\n\tag{275}\n\tag{276}\n\tag{277}\n\tag{278}\n\tag{279}\n\tag{280}\n\tag{281}\n\tag{282}\n\tag{283}\n\tag{284}\n\tag{285}\n\tag{286}\n\tag{287}\n\tag{288}\n\tag{289}\n\tag{290}\n\tag{291}\n\tag{292}\n\tag{293}\n\tag{294}\n\tag{295}\n\tag{296}\n\tag{297}\n\tag{298}\n\tag{299}\n\tag{300}\n\tag{301}\n\tag{302}\n\tag{303}\n\tag{304}\n\tag{305}\n\tag{306}\n\tag{307}\n\tag{308}\n\tag{309}\n\tag{310}\n\tag{311}\n\tag{312}\n\tag{313}\n\tag{314}\n\tag{315}\n\tag{316}\n\tag{317}\n\tag{318}\n\tag{319}\n\tag{320}\n\tag{321}\n\tag{322}\n\tag{323}\n\tag{324}\n\tag{325}\n\tag{326}\n\tag{327}\n\tag{328}\n\tag{329}\n\tag{330}\n\tag{331}\n\tag{332}\n\tag{333}\n\tag{334}\n\tag{335}\n\tag{336}\n\tag{337}\n\tag{338}\n\tag{339}\n\tag{340}\n\tag{341}\n\tag{342}\n\tag{343}\n\tag{344}\n\tag{345}\n\tag{346}\n\tag{347}\n\tag{348}\n\tag{349}\n\tag{350}\n\tag{351}\n\tag{352}\n\tag{353}\n\tag{354}\n\tag{355}\n\tag{356}\n\tag{357}\n\tag{358}\n\tag{359}\n\tag{360}\n\tag{361}\n\tag{362}\n\tag{363}\n\tag{364}\n\tag{365}\n\tag{366}\n\tag{367}\n\tag{368}\n\tag{369}\n\tag{370}\n\tag{371}\n\tag{372}\n\tag{373}\n\tag{374}\n\tag{375}\n\tag{376}\n\tag{377}\n\tag{378}\n\tag{379}\n\tag{380}\n\tag{381}\n\tag{382}\n\tag{383}\n\tag{384}\n\tag{385}\n\tag{386}\n\tag{387}\n\tag{388}\n\tag{389}\n\tag{390}\n\tag{391}\n\tag{392}\n\tag{393}\n\tag{394}\n\tag{395}\n\tag{396}\n\tag{397}\n\tag{398}\n\tag{399}\n\tag{400}\n\tag{401}\n\tag{402}\n\tag{403}\n\tag{404}\n\tag{405}\n\tag{406}\n\tag{407}\n\tag{408}\n\tag{409}\n\tag{410}\n\tag{411}\n\tag{412}\n\tag{413}\n\tag{414}\n\tag{415}\n\tag{416}\n\tag{417}\n\tag{418}\n\tag{419}\n\tag{420}\n\tag{421}\n\tag{422}\n\tag{423}\n\tag{424}\n\tag{425}\n\tag{426}\n\tag{427}\n\tag{428}\n\tag{429}\n\tag{430}\n\tag{431}\n\tag{432}\n\tag{433}\n\tag{434}\n\tag{435}\n\tag{436}\n\tag{437}\n\tag{438}\n\tag{439}\n\tag{440}\n\tag{441}\n\tag{442}\n\tag{443}\n\tag{444}\n\tag{445}\n\tag{446}\n\tag{447}\n\tag{448}\n\tag{449}\n\tag{450}\n\tag{451}\n\tag{452}\n\tag{453}\n\tag{454}\n\tag{455}\n\tag{456}\n\tag{457}\n\tag{458}\n\tag{459}\n\tag{460}\n\tag{461}\n\tag{462}\n\tag{463}\n\tag{464}\n\tag{465}\n\tag{466}\n\tag{467}\n\tag{468}\n\tag{469}\n\tag{470}\n\tag{471}\n\tag{472}\n\tag{473}\n\tag{474}\n\tag{475}\n\tag{476}\n\tag{477}\n\tag{478}\n\tag{479}\n\tag{480}\n\tag{481}\n\tag{482}\n\tag{483}\n\tag{484}\n\tag{485}\n\tag{486}\n\tag{487}\n\tag{488}\n\tag{489}\n\tag{490}\n\tag{491}\n\tag{492}\n\tag{493}\n\tag{494}\n\tag{495}\n\tag{496}\n\tag{497}\n\tag{498}\n\tag{499}\n\tag{500}\n\tag{501}\n\tag{502}\n\tag{503}\n\tag{504}\n\tag{505}\n\tag{506}\n\tag{507}\n\tag{508}\n\tag{509}\n\tag{510}\n\tag{511}\n\tag{512}\n\tag{513}\n\tag{514}\n\tag{515}\n\tag{516}\n\tag{517}\n\tag{518}\n\tag{519}\n\tag{520}\n\tag{521}\n\tag{522}\n\tag{523}\n\tag{524}\n\tag{525}\n\tag{526}\n\tag{527}\n\tag{528}\n\tag{529}\n\tag{530}\n\tag{531}\n\tag{532}\n\tag{533}\n\tag{534}\n\tag{535}\n\tag{536}\n\tag{537}\n\tag{538}\n\tag{539}\n\tag{540}\n\tag{541}\n\tag{542}\n\tag{543}\n\tag{544}\n\tag{545}\n\tag{546}\n\tag{547}\n\tag{548}\n\tag{549}\n\tag{550}\n\tag{551}\n\tag{552}\n\tag{553}\n\tag{554}\n\tag{555}\n\tag{556}\n\tag{557}\n\tag{558}\n\tag{559}\n\tag{560}\n\tag{561}\n\tag{562}\n\tag{563}\n\tag{564}\n\tag{565}\n\tag{566}\n\tag{567}\n\tag{568}\n\tag{569}\n\tag{570}\n\tag{571}\n\tag{572}\n\tag{573}\n\tag{574}\n\tag{575}\n\tag{576}\n\tag{577}\n\tag{578}\n\tag{579}\n\tag{580}\n\tag{581}\n\tag{582}\n\tag{583}\n\tag{584}\n\tag{585}\n\tag{586}\n\tag{587}\n\tag{588}\n\tag{589}\n\tag{590}\n\tag{591}\n\tag{592}\n\tag{593}\n\tag{594}\n\tag{595}\n\tag{596}\n\tag{597}\n\tag{598}\n\tag{599}\n\tag{600}\n\tag{601}\n\tag{602}\n\tag{603}\n\tag{604}\n\tag{605}\n\tag{606}\n\tag{607}\n\tag{608}\n\tag{609}\n\tag{610}\n\tag{611}\n\tag{612}\n\tag{613}\n\tag{614}\n\tag{615}\n\tag{616}\n\tag{617}\n\tag{618}\n\tag{619}\n\tag{620}\n\tag{621}\n\tag{622}\n\tag{623}\n\tag{624}\n\tag{625}\n\tag{626}\n\tag{627}\n\tag{628}\n\tag{629}\n\tag{630}\n\tag{631}\n\tag{632}\n\tag{633}\n\tag{634}\n\tag{635}\n\tag{636}\n\tag{637}\n\tag{638}\n\tag{639}\n\tag{640}\n\tag{641}\n\tag{642}\n\tag{643}\n\tag{644}\n\tag{645}\n\tag{646}\n\tag{647}\n\tag{648}\n\tag{649}\n\tag{650}\n\tag{651}\n\tag{652}\n\tag{653}\n\tag{654}\n\tag{655}\n\tag{656}\n\tag{657}\n\tag{658}\n\tag{659}\n\tag{660}\n\tag{661}\n\tag{662}\n\tag{663}\n\tag{664}\n\tag{665}\n\tag{666}\n\tag{667}\n\tag{668}\n\tag{669}\n\tag{670}\n\tag{671}\n\tag{672}\n\tag{673}\n\tag{674}\n\tag{675}\n\tag{676}\n\tag{677}\n\tag{678}\n\tag{679}\n\tag{680}\n\tag{681}\n\tag{682}\n\tag{683}\n\tag{684}\n\tag{685}\n\tag{686}\n\tag{687}\n\tag{688}\n\tag{689}\n\tag{690}\n\tag{691}\n\tag{692}\n\tag{693}\n\tag{694}\n\tag{695}\n\tag{696}\n\tag{697}\n\tag{698}\n\tag{699}\n\tag{700}\n\tag{701}\n\tag{702}\n\tag{703}\n\tag{704}\n\tag{705}\n\tag{706}\n\tag{707}\n\tag{708}\n\tag{709}\n\tag{710}\n\tag{711}\n\tag{712}\n\tag{713}\n\tag{714}\n\tag{715}\n\tag{716}\n\tag{717}\n\tag{718}\n\tag{719}\n\tag{720}\n\tag{721}\n\tag{722}\n\tag{723}\n\tag{724}\n\tag{725}\n\tag{726}\n\tag{727}\n\tag{728}\n\tag{729}\n\tag{730}\n\tag{731}\n\tag{732}\n\tag{733}\n\tag{734}\n\tag{735}\n\tag{736}\n\tag{737}\n\tag{738}\n\tag{739}\n\tag{740}\n\tag{741}\n\tag{742}\n\tag{743}\n\tag{744}\n\tag{745}\n\tag{746}\n\tag{747}\n\tag{748}\n\tag{749}\n\tag{750}\n\tag{751}\n\tag{752}\n\tag{753}\n\tag{754}\n\tag{755}\n\tag{756}\n\tag{757}\n\tag{758}\n\tag{759}\n\tag{760}\n\tag{761}\n\tag{762}\n\tag{763}\n\tag{764}\n\tag{765}\n\tag{766}\n\tag{767}\n\tag{768}\n\tag{769}\n\tag{770}\n\tag{771}\n\tag{772}\n\tag{773}\n\tag{774}\n\tag{775}\n\tag{776}\n\tag{777}\n\tag{778}\n\tag{779}\n\tag{780}\n\tag{781}\n\tag{782}\n\tag{783}\n\tag{784}\n\tag{785}\n\tag{786}\n\tag{787}\n\tag{788}\n\tag{789}\n\tag{790}\n\tag{791}\n\tag{792}\n\tag{793}\n\tag{794}\n\tag{795}\n\tag{796}\n\tag{797}\n\tag{798}\n\tag{799}\n\tag{800}\n\tag{801}\n\tag{802}\n\tag{803}\n\tag{804}\n\tag{805}\n\tag{806}\n\tag{807}\n\tag{808}\n\tag{809}\n\tag{810}\n\tag{811}\n\tag{812}\n\tag{813}\n\tag{814}\n\tag{815}\n\tag{816}\n\tag{817}\n\tag{818}\n\tag{819}\n\tag{820}\n\tag{821}\n\tag{822}\n\tag{823}\n\tag{824}\n\tag{825}\n\tag{826}\n\tag{827}\n\tag{828}\n\tag{829}\n\tag{830}\n\tag{831}\n\tag{832}\n\tag{833}\n\tag{834}\n\tag{835}\n\tag{836}\n\tag{837}\n\tag{838}\n\tag{839}\n\tag{840}\n\tag{841}\n\tag{842}\n\tag{843}\n\tag{844}\n\tag{845}\n\tag{846}\n\tag{847}\n\tag{848}\n\tag{849}\n\tag{850}\n\tag{851}\n\tag{852}\n\tag{853}\n\tag{854}\n\tag{855}\n\tag{856}\n\tag{857}\n\tag{858}\n\tag{859}\n\tag{860}\n\tag{861}\n\tag{862}\n\tag{863}\n\tag{864}\n\tag{865}\n\tag{866}\n\tag{867}\n\tag{868}\n\tag{869}\n\tag{870}\n\tag{871}\n\tag{872}\n\tag{873}\n\tag{874}\n\tag{875}\n\tag{876}\n\tag{877}\n\tag{878}\n\tag{879}\n\tag{880}\n\tag{881}\n\tag{882}\n\tag{883}\n\tag{884}\n\tag{885}\n\tag{886}\n\tag{887}\n\tag{888}\n\tag{889}\n\tag{890}\n\tag{891}\n\tag{892}\n\tag{893}\n\tag{894}\n\tag{895}\n\tag{896}\n\tag{897}\n\tag{898}\n\tag{899}\n\tag{900}\n\tag{901}\n\tag{902}\n\tag{903}\n\tag{904}\n\tag{905}\n\tag{906}\n\tag{907}\n\tag{908}\n\tag{909}\n\tag{910}\n\tag{911}\n\tag{912}\n\tag{913}\n\tag{914}\n\tag{915}\n\tag{916}\n\tag{917}\n\tag{918}\n\tag{919}\n\tag{920}\n\tag{921}\n\tag{922}\n\tag{923}\n\tag{924}\n\tag{925}\n\tag{926}\n\tag{927}\n\tag{928}\n\tag{929}\n\tag{930}\n\tag{931}\n\tag{932}\n\tag{933}\n\tag{934}\n\tag{935}\n\tag{936}\n\tag{937}\n\tag{938}\n\tag{939}\n\tag{940}\n\tag{941}\n\tag{942}\n\tag{943}\n\tag{944}\n\tag{945}\n\tag{946}\n\tag{947}\n\tag{948}\n\tag{949}\n\tag{950}\n\tag{951}\n\tag{952}\n\tag{953}\n\tag{954}\n\tag{955}\n\tag{956}\n\tag{957}\n\tag{958}\n\tag{959}\n\tag{960}\n\tag{961}\n\tag{962}\n\tag{963}\n\tag{964}\n\tag{965}\n\tag{966}\n\tag{967}\n\tag{968}\n\tag{969}\n\tag{970}\n\tag{971}\n\tag{972}\n\tag{973}\n\tag{974}\n\tag{975}\n\tag{976}\n\tag{977}\n\tag{978}\n\tag{979}\n\tag{980}\n\tag{981}\n\tag{982}\n\tag{983}\n\tag{984}\n\tag{985}\n\tag{986}\n\tag{987}\n\tag{988}\n\tag{989}\n\tag{990}\n\tag{991}\n\tag{992}\n\tag{993}\n\tag{994}\n\tag{995}\n\tag{996}\n\tag{997}\n\tag{998}\n\tag{999}\n\tag{1000}\n\tag{1001}\n\tag{1002}\n\tag{1003}\n\tag{1004}\n\tag{1005}\n\tag{1006}\n\tag{1007}\n\tag{1008}\n\tag{1009}\n\tag{1010}\n\tag{1011}\n\tag{1012}\n\tag{1013}\n\tag{1014}\n\tag{1015}\n\tag{1016}\n\tag{1017}\n\tag{1018}\n\tag{1019}\n\tag{1020}\n\tag{1021}\n\tag{1022}\n\tag{1023}\n\tag{1024}\n\tag{1025}\n\tag{1026}\n\tag{1027}\n\tag{1028}\n\tag{1029}\n\tag{1030}\n\tag{1031}\n\tag{1032}\n\tag{1033}\n\tag{1034}\n\tag{1035}\n\tag{1036}\n\tag{1037}\n\tag{1038}\n\tag{1039}\n\tag{1040}\n\tag{1041}\n\tag{1042}\n\tag{1043}\n\tag{1044}\n\tag{1045}\n\tag{1046}\n\tag{1047}\n\tag{1048}\n\tag{1049}\n\tag{1050}\n\tag{1051}\n\tag{1052}\n\tag{1053}\n\tag{1054}\n\tag{1055}\n\tag{1056}\n\tag{1057}\n\tag{1058}\n\tag{1059}\n\tag{1060}\n\tag{1061}\n\tag{1062}\n\tag{1063}\n\tag{1064}\n\tag{1065}\n\tag{1066}\n\tag{1067}\n\tag{1068}\n\tag{1069}\n\tag{1070}\n\tag{1071}\n\tag{1072}\n\tag{1073}\n\tag{1074}\n\tag{1075}\n\tag{1076}\n\tag{1077}\n\tag{1078}\n\tag{1079}\n\tag{1080}\n\tag{1081}\n\tag{1082}\n\tag{1083}\n\tag{1084}\n\tag{1085}\n\tag{1086}\n\tag{1087}\n\tag{1088}\n\tag{1089}\n\tag{1090}\n\tag{1091}\n\tag{1092}\n\tag{1093}\n\tag{1094}\n\tag{1095}\n\tag{1096}\n\tag{1097}\n\tag{1098}\n\tag{1099}\n\tag{1100}\n\tag{1101}\n\tag{1102}\n\tag{1103}\n\tag{1104}\n\tag{1105}\n\tag{1106}\n\tag{1107}\n\tag{1108}\n\tag{1109}\n\tag{1110}\n\tag{1111}\n\tag{1112}\n\tag{1113}\n\tag{1114}\n\tag{1115}\n\tag{1116}\n\tag{1117}\n\tag{1118}\n\tag{1119}\n\tag{1120}\n\tag{1121}\n\tag{1122}\n\tag{1123}\n\tag{1124}\n\tag{1125}\n\tag{1126}\n\tag{1127}\n\tag{1128}\n\tag{1129}\n\tag{1130}\n\tag{1131}\n\tag{1132}\n\tag{1133}\n\tag{1134}\n\tag{1135}\n\tag{1136}\n\tag{1137}\n\tag{1138}\n\tag{1139}\n\tag{1140}\n\tag{1141}\n\tag{1142}\n\tag{1143}\n\tag{1144}\n\tag{1145}\n\tag{1146}\n\tag{1147}\n\tag{1148}\n\tag{1149}\n\tag{1150}\n\tag{1151}\n\tag{1152}\n\tag{1153}\n\tag{1154}\n\tag{1155}\n\tag{1156}\n\tag{1157}\n\tag{1158}\n\tag{1159}\n\tag{1160}\n\tag{1161}\n\tag{1162}\n\tag{1163}\n\tag{1164}\n\tag{1165}\n\tag{1166}\n\tag{1167}\n\tag{1168}\n\tag{1169}\n\tag{1170}\n\tag{1171}\n\tag{1172}\n\tag{1173}\n\tag{1174}\n\tag{1175}\n\tag{1176}\n\tag{1177}\n\tag{1178}\n\tag{1179}\n\tag{1180}\n\tag{1181}\n\tag{1182}\n\tag{1183}\n\tag{1184}\n\tag{1185}\n\tag{1186}\n\tag{1187}\n\tag{1188}\n\tag{1189}\n\tag{1190}\n\tag{1191}\n\tag{1192}\n\tag{1193}\n\tag{1194}\n\tag{1195}\n\tag{1196}\n\tag{1197}\n\tag{1198}\n\tag{1199}\n\tag{1200}\n\tag{1201}\n\tag{1202}\n\tag{1203}\n\tag{1204}\n\tag{1205}\n\tag{1206}\n\tag{1207}\n\tag{1208}\n\tag{1209}\n\tag{1210}\n\tag{1211}\n\tag{1212}\n\tag{1213}\n\tag{1214}\n\tag{1215}\n\tag{1216}\n\tag{1217}\n\tag{1218}\n\tag{1219}\n\tag{1220}\n\tag{1221}\n\tag{1222}\n\tag{1223}\n\tag{1224}\n\tag{1225}\n\tag{1226}\n\tag{1227}\n\tag{1228}\n\tag{1229}\n\tag{1230}\n\tag{1231}\n\tag{1232}\n\tag{1233}\n\tag{1234}\n\tag{1235}\n\tag{1236}\n\tag{1237}\n\tag{1238}\n\tag{1239}\n\tag{1240}\n\tag{1241}\n\tag{1242}\n\tag{1243}\n\tag{1244}\n\tag{1245}\n\tag{1246}\n\tag{1247}\n\tag{1248}\n\tag{1249}\n\tag{1250}\n\tag{1251}\n\tag{1252}\n\tag{1253}\n\tag{1254}\n\tag{1255}\n\tag{1256}\n\tag{1257}\n\tag{1258}\n\tag{1259}\n\tag{1260}\n\tag{1261}\n\tag{1262}\n\tag{1263}\n\tag{1264}\n\tag{1265}\n\tag{1266}\n\tag{1267}\n\tag{1268}\n\tag{1269}\n\tag{1270}\n\tag{1271}\n\tag{1272}\n\tag{1273}\n\tag{1274}\n\tag{1275}\n\tag{1276}\n\tag{1277}\n\tag{1278}\n\tag{1279}\n\tag{1280}\n\tag{1281}\n\tag{1282}\n\tag{1283}\n\tag{1284}\n\tag{1285}\n\tag{1286}\n\tag{1287}\n\tag{1288}\n\tag{1289}\n\tag{1290}\n\tag{1291}\n\tag{1292}\n\tag{1293}\n\tag{1294}\n\tag{1295}\n\tag{1296}\n\tag{1297}\n\tag{1298}\n\tag{1299}\n\tag{1300}\n\tag{1301}\n\tag{1302}\n\tag{1303}\n\tag{1304}\n\tag{1305}\n\tag{1306}\n\tag{1307}\n\tag{1308}\n\tag{1309}\n\tag{1310}\n\tag{1311}\n\tag{1312}\n\tag{1313}\n\tag{1314}\n\tag{1315}\n\tag{1316}\n\tag{1317}\n\tag{1318}\n\tag{1319}\n\tag{1320}\n\tag{1321}\n\tag{1322}\n\tag{1323}\n\tag{1324}\n\tag{1325}\n\tag{1326}\n\tag{1327}\n\tag{1328}\n\tag{1329}\n\tag{1330}\n\tag{1331}\n\tag{1332}\n\tag{1333}\n\tag{1334}\n\tag{1335}\n\tag{1336}\n\tag{1337}\n\tag{1338}\n\tag{1339}\n\tag{1340}\n\tag{1341}\n\tag{1342}\n\tag{1343}\n\tag{1344}\n\tag{1345}\n\tag{1346}\n\tag{1347}\n\tag{1348}\n\tag{1349}\n\tag{1350}\n\tag{1351}\n\tag{1352}\n\tag{1353}\n\tag{1354}\n\tag{1355}\n\tag{1356}\n\tag{1357}\n\tag{1358}\n\tag{1359}\n\tag{1360}\n\tag{1361}\n\tag{1362}\n\tag{1363}\n\tag{1364}\n\tag{1365}\n\tag{1366}\n\tag{1367}\n\tag{1368}\n\tag{1369}\n\tag{1370}\n\tag{1371}\n\tag{1372}\n\tag{1373}\n\tag{1374}\n\tag{1375}\n\tag{1376}\n\tag{1377}\n\tag{1378}\n\tag{1379}\n\tag{1380}\n\tag{1381}\n\tag{1382}\n\tag{1383}\n\tag{1384}\n\tag{1385}\n\tag{1386}\n\tag{1387}\n\tag{1388}\n\tag{1389}\n\tag{1390}\n\tag{1391}\n\tag{1392}\n\tag{1393}\n\tag{1394}\n\tag{1395}\n\tag{1396}\n\tag{1397}\n\tag{1398}\n\tag{1399}\n\tag{1400}\n\tag{1401}\n\tag{1402}\n\tag{1403}\n\tag{1404}\n\tag{1405}\n\tag{1406}\n\tag{1407}\n\tag{1408}\n\tag{1409}\n\tag{1410}\n\tag{1411}\n\tag{1412}\n\tag{1413}\n\tag{1414}\n\tag{1415}\n\tag{1416}\n\tag{1417}\n\tag{1418}\n\tag{1419}\n\tag{1420}\n\tag{1421}\n\tag{1422}\n\tag{1423}\n\tag{1424}\n\tag{1425}\n\tag{1426}\n\tag{1427}\n\tag{1428}\n\tag{1429}\n\tag{1430}\n\tag{1431}\n\tag{1432}\n\tag{1433}\n\tag{1434}\n\tag{1435}\n\tag{1436}\n\tag{1437}\n\tag{1438}\n\tag{1439}\n\tag{1440}\n\tag{1441}\n\tag{1442}\n\tag{1443}\n\tag{1444}\n\tag{1445}\n\tag{1446}\n\tag{1447}\n\tag{1448}\n\tag{1449}\n\tag{1450}\n\tag{1451}\n\tag{1452}\n\tag{1453}\n\tag{1454}\n\tag{1455}\n\tag{1456}\n\tag{1457}\n\tag{1458}\n\tag{1459}\n\tag{1460}\n\tag{1461}\n\tag{1462}\n\tag{1463}\n\tag{1464}\n\tag{1465}\n\tag{1466}\n\tag{1467}\n\tag{1468}\n\tag{1469}\n\tag{1470}\n\tag{1471}\n\tag{1472}\n\tag{1473}\n\tag{1474}\n\tag{1475}\n\tag{1476}\n\tag{1477}\n\tag{1478}\n\tag{1479}\n\tag{1480}\n\tag{1481}\n\tag{1482}\n\tag{1483}\n\tag{1484}\n\tag{1485}\n\tag{1486}\n\tag{1487}\n\tag{1488}\n\tag{1489}\n\tag{1490}\n\tag{1491}\n\tag{1492}\n\tag{1493}\n\tag{1494}\n\tag{1495}\n\tag{1496}\n\tag{1497}\n\tag{1498}\n\tag{1499}\n\tag{1500}\n\tag{1501}\n\tag{1502}\n\tag{1503}\n\tag{1504}\n\tag{1505}\n\tag{1506}\n\tag{1507}\n\tag{1508}\n\tag{1509}\n\tag{1510}\n\tag{1511}\n\tag{1512}\n\tag{1513}\n\tag{1514}\n\tag{1515}\n\tag{1516}\n\tag{1517}\n\tag{1518}\n\tag{1519}\n\tag{1520}\n\tag{1521}\n\tag{1522}\n\tag{1523}\n\tag{1524}\n\tag{1525}\n\tag{1526}\n\tag{1527}\n\tag{1528}\n\tag{1529}\n\tag{1530}\n\tag{1531}\n\tag{1532}\n\tag{1533}\n\tag{1534}\n\tag{1535}\n\tag{1536}\n\tag{1537}\n\tag{1538}\n\tag{1539}\n\tag{1540}\n\tag{1541}\n\tag{1542}\n\tag{1543}\n\tag{1544}\n\tag{1545}\n\tag{1546}\n\tag{1547}\n\tag{1548}\n\tag{1549}\n\tag{1550}\n\tag{1551}\n\tag{1552}\n\tag{1553}\n\tag{1554}\n\tag{1555}\n\tag{1556}\n\tag{1557}\n\tag{1558}\n\tag{1559}\n\tag{1560}\n\tag{1561}\n\tag{1562}\n\tag{1563}\n\tag{1564}\n\tag{1565}\n\tag{1566}\n\tag{1567}\n\tag{1568}\n\tag{1569}\n\tag{1570}\n\tag{1571}\n\tag{1572}\n\tag{1573}\n\tag{1574}\n\tag{1575}\n\tag{1576}\n\tag{1577}\n\tag{1578}\n\tag{1579}\n\tag{1580}\n\tag{1581}\n\tag{1582}\n\tag{1583}\n\tag{1584}\n\tag{1585}\n\tag{1586}\n\tag{1587}\n\tag{1588}\n\tag{1589}\n\tag{1590}\n\tag{1591}\n\tag{1592}\n\tag{1593}\n\tag{1594}\n\tag{1595}\n\tag{1596}\n\tag{1597}\n\tag{1598}\n\tag{1599}\n\tag{1600}\n\tag{1601}\n\tag{1602}\n\tag{1603}\n\tag{1604}\n\tag{1605}\n\tag{1606}\n\tag{1607}\n\tag{1608}\n\tag{1609}\n\tag{1610}\n\tag{1611}\n\tag{1612}\n\tag{1613}\n\tag{1614}\n\tag{1615}\n\tag{1616}\n\tag{1617}\n\tag{1618}\n\tag{1619}\n\tag{1620}\n\tag{1621}\n\tag{1622}\n\tag{1623}\n\tag{1624}\n\tag{1625}\n\tag{1626}\n\tag{1627}\n\tag{1628}\n\tag{1629}\n\tag{1630}\n\tag{1631}\n\tag{1632}\n\tag{1633}\n\tag{1634}\n\tag{1635}\n\tag{1636}\n\tag{1637}\n\tag{1638}\n\tag{1639}\n\tag{1640}\n\tag{1641}\n\tag{1642}\n\tag{1643}\n\tag{1644}\n\tag{1645}\n\tag{1646}\n\tag{1647}\n\tag{1648}\n\tag{1649}\n\tag{1650}\n\tag{1651}\n\tag{1652}\n\tag{1653}\n\tag{1654}\n\tag{1655}\n\tag{1656}\n\tag{1657}\n\tag{1658}\n\tag{1659}\n\tag{1660}\n\tag{1661}\n\tag{1662}\n\tag{1663}\n\tag{1664}\n\tag{1665}\n\tag{1666}\n\tag{1667}\n\tag{1668}\n\tag{1669}\n\tag{1670}\n\tag{1671}\n\tag{1672}\n\tag{1673}\n\tag{1674}\n\tag{1675}\n\tag{1676}\n\tag{1677}\n\tag{1678}\n\tag{1679}\n\tag{1680}\n\tag{1681}\n\tag{1682}\n\tag{1683}\n\tag{1684}\n\tag{1685}\n\tag{1686}\n\tag{1687}\n\tag{1688}\n\tag{1689}\n\tag{1690}\n\tag{1691}\n\tag{1692}\n\tag{1693}\n\tag{1694}\n\tag{1695}\n\tag{1696}\n\tag{1697}\n\tag{1698}\n\tag{1699}\n\tag{1700}\n\tag{1701}\n\tag{1702}\n\tag{1703}\n\tag{1704}\n\tag{1705}\n\tag{1706}\n\tag{1707}\n\tag{1708}\n\tag{1709}\n\tag{1710}\n\tag{1711}\n\tag{1712}\n\tag{1713}\n\tag{1714}\n\tag{1715}\n\tag{1716}\n\tag{1717}\n\tag{1718}\n\tag{1719}\n\tag{1720}\n\tag{1721}\n\tag{1722}\n\tag{1723}\n\tag{1724}\n\tag{1725}\n\tag{1726}\n\tag{1727}\n\tag{1728}\n\tag{1729}\n\tag{1730}\n\tag{1731}\n\tag{1732}\n\tag{1733}\n\tag{1734}\n\tag{1735}\n\tag{1736}\n\tag{1737}\n\tag{1738}\n\tag{1739}\n\tag{1740}\n\tag{1741}\n\tag{1742}\n\tag{1743}\n\tag{1744}\n\tag{1745}\n\tag{1746}\n\tag{1747}\n\tag{1748}\n\tag{1749}\n\tag{1750}\n\tag{1751}\n\tag{1752}\n\tag{1753}\n\tag{1754}\n\tag{1755}\n\tag{1756}\n\tag{1757}\n\tag{1758}\n\tag{1759}\n\tag{1760}\n\tag{1761}\n\tag{1762}\n\tag{1763}\n\tag{1764}\n\tag{1765}\n\tag{1766}\n\tag{1767}\n\tag{1768}\n\tag{1769}\n\tag{1770}\n\tag{1771}\n\tag{1772}\n\tag{1773}\n\tag{1774}\n\tag{1775}\n\tag{1776}\n\tag{1777}\n\tag{1778}\n\tag{1779}\n\tag{1780}\n\tag{1781}\n\tag{1782}\n\tag{1783}\n\tag{1784}\n\tag{1785}\n\tag{1786}\n\tag{1787}\n\tag{1788}\n\tag{1789}\n\tag{1790}\n\tag{1791}\n\tag{1792}\n\tag{1793}\n\tag{1794}\n\tag{1795}\n\tag{1796}\n\tag{1797}\n\tag{1798}\n\tag{1799}\n\tag{1800}\n\tag{1801}\n\tag{1802}\n\tag{1803}\n\tag{1804}\n\tag{1805}\n\tag{1806}\n\tag{1807}\n\tag{1808}\n\tag{1809}\n\tag{1810}\n\tag{1811}\n\tag{1812}\n\tag{1813}\n\tag{1814}\n\tag{1815}\n\tag{1816}\n\tag{1817}\n\tag{1818}\n\tag{1819}\n\tag{1820}\n\tag{1821}\n\tag{1822}\n\tag{1823}\n\tag{1824}\n\tag{1825}\n\tag{1826}\n\tag{1827}\n\tag{1828}\n\tag{1829}\n\tag{1830}\n\tag{1831}\n\tag{1832}\n\tag{1833}\n\tag{1834}\n\tag{1835}\n\tag{1836}\n\tag{1837}\n\tag{1838}\n\tag{1839}\n\tag{1840}\n\tag{1841}\n\tag{1842}\n\tag{1843}\n\tag{1844}\n\tag{1845}\n\tag{1846}\n\tag{1847}\n\tag{1848}\n\tag{1849}\n\tag{1850}\n\tag{1851}\n\tag{1852}\n\tag{1853}\n\tag{1854}\n\tag{1855}\n\tag{1856}\n\tag{1857}\n\tag{1858}\n\tag{1859}\n\tag{1860}\n\tag{1861}\n\tag{1862}\n\tag{1863}\n\tag{1864}\n\tag{1865}\n\tag{1866}\n\tag{1867}\n\tag{1868}\n\tag{1869}\n\tag{1870}\n\tag{1871}\n\tag{1872}\n\tag{1873}\n\tag{1874}\n\tag{1875}\n\tag{1876}\n\tag{1877}\n\tag{1878}\n\tag{1879}\n\tag{1880}\n\tag{1881}\n\tag{1882}\n\tag{1883}\n\tag{1884}\n\tag{1885}\n\tag{1886}\n\tag{1887}\n\tag{1888}\n\tag{1889}\n\tag{1890}\n\tag{1891}\n\tag{1892}\n\tag{1893}\n\tag{1894}\n\tag{1895}\n\tag{1896}\n\tag{1897}\n\tag{1898}\n\tag{1899}\n\tag{1900}\n\tag{1901}\n\tag{1902}\n\tag{1903}\n\tag{1904}\n\tag{1905}\n\tag{1906}\n\tag{1907}\n\tag{1908}\n\tag{1909}\n\tag{1910}\n\tag{1911}\n\tag{1912}\n\tag{1913}\n\tag{1914}\n\tag{1915}\n\tag{1916}\n\tag{1917}\n\tag{1918}\n\tag{1919}\n\tag{1920}\n\tag{1921}\n\tag{1922}\n\tag{1923}\n\tag{1924}\n\tag{1925}\n\tag{1926}\n\tag{1927}\n\tag{1928}\n\tag{1929}\n\tag{1930}\n\tag{1931}\n\tag{1932}\n\tag{1933}\n\tag{1934}\n\tag{1935}\n\tag{1936}\n\tag{1937}\n\tag{1938}\n\tag{1939}\n\tag{1940}\n\tag{1941}\n\tag{1942}\n\tag{1943}\n\tag{1944}\n\tag{1945}\n\tag{1946}\n\tag{1947}\n\tag{1948}\n\tag{1949}\n\tag{1950}\n\tag{1951}\n\tag{1952}\n\tag{1953}\n\tag{1954}\n\tag{1955}\n\tag{1956}\n\tag{1957}\n\tag{1958}\n\tag{1959}\n\tag{1960}\n\tag{1961}\n\tag{1962}\n\tag{1963}\n\tag{1964}\n\tag{1965}\n\tag{1966}\n\tag{1967}\n\tag{1968}\n\tag{1969}\n\tag{1970}\n\tag{1971}\n\tag{1972}\n\tag{1973}\n\tag{1974}\n\tag{1975}\n\tag{1976}\n\tag{1977}\n\tag{1978}\n\tag{1979}\n\tag{1980}\n\tag{1981}\n\tag{1982}\n\tag{1983}\n\tag{1984}\n\tag{1985}\n\tag{1986}\n\tag{1987}\n\tag{1988}\n\tag{1989}\n\tag{1990}\n\tag{1991}\n\tag{1992}\n\tag{1993}\n\tag{1994}\n\tag{1995}\n\tag{1996}\n\tag{1997}\n\tag{1998}\n\tag{1999}\n\tag{2000}\n\n<p>where:</p>\n<ul>\n<li><code>M</code>: Mass matrix,</li>\n<li><code>f_{int}(x)</code>: Internal forces (e.g., from constitutive laws),</li>\n<li><code>f_{ext}(t)</code>: External forces.</li>\n</ul>\n\n<h2>Constitutive and Kinematic Laws</h2>\n\n<p>The <code>SolveVisitor</code> itself does not explicitly implement any constitutive or kinematic laws. Instead, it invokes the solvers that handle these laws. The solvers (e.g., derived from <code>OdeSolver</code>) are responsible for computing internal forces based on the specific material models and deformation measures.</p>\n\n<h2>Role in Global FEM Pipeline</h2>\n\n<p>The <code>SolveVisitor</code> plays a crucial role in the global FEM pipeline by coordinating the solving process:</p>\n\n<ul>\n<li><strong>Assembly Phase</strong>: The component is involved after the assembly phase where the system matrices (mass, stiffness) and vectors (internal forces) have been constructed.</li>\n<li><strong>Time Integration</strong>: It facilitates time integration by invoking solvers that handle time-stepping schemes such as implicit Euler or Newmark-type methods.</li>\n<li><strong>Nonlinear Resolution</strong>: The <code>SolveVisitor</code> can manage the nonlinear resolution process, enabling both sequential and parallel execution of solvers to solve the system of equations.</li>\n<li><strong>Linear Solve</strong>: The component ensures that the linearized system is solved either sequentially or concurrently based on user configuration. This involves invoking iterative Krylov methods (e.g., Conjugate Gradient) or direct sparse factorizations within the <code>OdeSolver</code> implementations.</li>\n<li><strong>State Update</strong>: After solving, the component updates the state of the system, advancing it to the next time step.</li>\n</ul>\n\n<h2>Numerical Methods and Discretization Choices</h2>\n\n<p>The <code>SolveVisitor</code> does not directly implement numerical methods or discretization choices. These are encapsulated within the solvers that it invokes. The component provides mechanisms for sequential or parallel execution of these solvers, enabling efficient solution strategies.</p>\n\n<h2>Fitting into the Variational / Lagrangian Mechanics Framework</h2>\n\n<p>The <code>SolveVisitor</code> integrates into the broader variational and Lagrangian mechanics framework by facilitating the resolution of equations derived from variational formulations. It ensures that these equations are solved efficiently within a simulation loop, leveraging both sequential and parallel processing capabilities to handle complex mechanical systems.</p>",
"abstract": "The SolveVisitor manages and executes solvers during the SOFA simulation loop, enabling both sequential and concurrent solving of mechanical systems.",
"sheet": "# SolveVisitor\n\n## Overview\n\nThe `SolveVisitor` is a core component that coordinates the solving process for mechanical systems within the SOFA framework. It inherits from the `Visitor` class and plays a critical role in managing Ordinary Differential Equation (ODE) solvers during the simulation loop, allowing both sequential and concurrent execution based on user configuration.\n\n## Dependencies and Connections\n\nThe `SolveVisitor` interacts with various components within the scene graph hierarchy:\n\n- **Process Solvers**: The `processSolver` method sends solve signals to other solvers, invoking their `solve` methods with parameters such as time step (`dt`) and vectors for position (`x`) and velocity (`v`).\n- **Interaction Force Fields**: The `fwdInteractionForceField` method handles interaction force fields by computing external forces.\n- **Top-Down Processing**: The `processNodeTopDown` method recursively traverses the node hierarchy to apply solvers either sequentially or concurrently.\n- **Bottom-Up Processing**: The `processNodeBottomUp` method ensures that all parallel tasks have completed before continuing, coordinating with a task scheduler.\n\n## Practical Notes\n\nThe component is typically used within the framework's animation loop. Users can control whether solvers operate in sequence (`sequentialSolve`) or concurrently (`parallelSolve`). The class handles timing and thread safety considerations, ensuring that the solving process is efficient and consistent with the simulation requirements."
}