Vega FEM Library (v1.1) User's Manual - University of Southern ...
Vega FEM Library (v1.1) User's Manual - University of Southern ...
Vega FEM Library (v1.1) User's Manual - University of Southern ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Return the time taken in DoTimestep to generate the force/stiffness values and to solve the linear system<br />
while timestepping, respectively. It is up to subclasses to calculate these values in DoTimestep.<br />
virtual double GetKineticEnergy()<br />
virtual double GetTotalMass()<br />
Calculates and returns the kinetic energy or total mass <strong>of</strong> the simulation, based upon the mass matrix<br />
and the velocity buffer <strong>of</strong> the class.<br />
class ImplicitNewmarkSparse : public IntegratorBaseSparse Implements implicit Newmark integration,<br />
and expands IntegratorBaseSparse with features common to Newmark-style integrators.<br />
ImplicitNewmarkSparse(int r, double timestep,<br />
SparseMatrix * massMatrix, ForceModel * forceModel,<br />
int positiveDefiniteSolver=0, int numConstrainedDOFs=0,<br />
int * constrainedDOFs=NULL, double dampingMassCoef=0.0,<br />
double dampingStiffnessCoef=0.0, int maxIterations = 1,<br />
double epsilon = 1E-6, double NewmarkBeta=0.25,<br />
double NewmarkGamma=0.5, int numSolverThreads=0)<br />
Initializes maxIterations, epsilon, NewmarkBeta, NewmarkGamma, and<br />
numSolverThreads parameters, and forwards the other parameters to the<br />
IntegratorBaseSparse constructor. For PARDISO and SPOOLES solvers, we found best performance with<br />
2-3 threads; more threads usually decreased performance.<br />
virtual void SetTimestep(double timestep)<br />
Sets the timestep.<br />
virtual int SetState(double * q, double * qvel=NULL)<br />
Sets the position (and optionally the velocity) buffer, and calculates the acceleration buffer accordingly<br />
using implicit Newmark, assuming no external force. Returns 0 if successful, 1 otherwise.<br />
virtual int DoTimestep()<br />
Runs a timestep <strong>of</strong> implicit Newmark, updating the internal position, velocity, and acceleration buffers<br />
accordingly. Returns 0 if and only if the timestep is completed successfully.<br />
void SetNewmarkBeta(double NewmarkBeta)<br />
void SetNewmarkGamma(double NewmarkGamma)<br />
Set the value <strong>of</strong> the beta and gamma parameters, respectively, for Newmark integrators. No checking is<br />
performed to see if these values are in the appropriate range.<br />
void UseStaticSolver(bool useStaticSolver)<br />
Sets whether to use a static solver. The class defaults to dynamic.<br />
class ImplicitBackwardEulerSparse : public ImplicitNewmarkSparse Replaces the DoTimestep<br />
function <strong>of</strong> ImplicitNewmarkSparse to implement implicit Euler integration.<br />
ImplicitBackwardEulerSparse(int r, double timestep,<br />
SparseMatrix * massMatrix,<br />
ForceModel * forceModel,<br />
int positiveDefiniteSolver=0, int numConstrainedDOFs=0,<br />
int * constrainedDOFs=NULL, double dampingMassCoef=0.0,<br />
double dampingStiffnessCoef=0.0, int maxIterations = 1,<br />
double epsilon = 1E-6, int numSolverThreads=0)<br />
Sets the integrator parameters with the ImplicitNewmarkSparse constructor.<br />
14