#include <EulerImplicitSolver.h>


Public Member Functions | |
| EulerImplicitSolver () | |
| void | solve (double dt) |
| Main computation method. | |
| virtual double | getVelocityIntegrationFactor () const |
| Given a displacement as computed by the linear system inversion, how much will it affect the velocity. | |
| virtual double | getPositionIntegrationFactor () const |
| Given a displacement as computed by the linear system inversion, how much will it affect the position. | |
| double | getIntegrationFactor (int inputDerivative, int outputDerivative) const |
| Given an input derivative order (0 for position, 1 for velocity, 2 for acceleration), how much will it affect the output derivative of the given order. | |
| double | getSolutionIntegrationFactor (int outputDerivative) const |
| Given a solution of the linear system, how much will it affect the output derivative of the given order. | |
Data Fields | |
| Data< double > | f_rayleighStiffness |
| Data< double > | f_rayleighMass |
| Data< double > | f_velocityDamping |
| Data< bool > | f_verbose |
Definition at line 44 of file EulerImplicitSolver.h.
| sofa::component::odesolver::EulerImplicitSolver::EulerImplicitSolver | ( | ) |
Definition at line 50 of file EulerImplicitSolver.cpp.
| double sofa::component::odesolver::EulerImplicitSolver::getIntegrationFactor | ( | int | inputDerivative, | |
| int | outputDerivative | |||
| ) | const [inline, virtual] |
Given an input derivative order (0 for position, 1 for velocity, 2 for acceleration), how much will it affect the output derivative of the given order.
This method is used to compute the compliance for contact corrections. For example, a backward-Euler dynamic implicit integrator would use: Input: x_t v_t a_{t+dt} x_{t+dt} 1 dt dt^2 v_{t+dt} 0 1 dt
If the linear system is expressed on s = a_{t+dt} dt, then the final factors are: Input: x_t v_t a_t s x_{t+dt} 1 dt 0 dt v_{t+dt} 0 1 0 1 a_{t+dt} 0 0 0 1/dt The last column is returned by the getSolutionIntegrationFactor method.
Implements sofa::core::componentmodel::behavior::OdeSolver.
Definition at line 90 of file EulerImplicitSolver.h.
References sofa::core::objectmodel::BaseObject::getContext(), and sofa::core::objectmodel::BaseContext::getDt().
| virtual double sofa::component::odesolver::EulerImplicitSolver::getPositionIntegrationFactor | ( | ) | const [inline, virtual] |
Given a displacement as computed by the linear system inversion, how much will it affect the position.
This method is used to compute the compliance for contact corrections For Euler methods, it is typically dt².
Reimplemented from sofa::core::componentmodel::behavior::OdeSolver.
Definition at line 70 of file EulerImplicitSolver.h.
References sofa::core::objectmodel::BaseObject::getContext(), and sofa::core::objectmodel::BaseContext::getDt().
| double sofa::component::odesolver::EulerImplicitSolver::getSolutionIntegrationFactor | ( | int | outputDerivative | ) | const [inline, virtual] |
Given a solution of the linear system, how much will it affect the output derivative of the given order.
Implements sofa::core::componentmodel::behavior::OdeSolver.
Definition at line 105 of file EulerImplicitSolver.h.
References sofa::core::objectmodel::BaseObject::getContext(), and sofa::core::objectmodel::BaseContext::getDt().
| virtual double sofa::component::odesolver::EulerImplicitSolver::getVelocityIntegrationFactor | ( | ) | const [inline, virtual] |
Given a displacement as computed by the linear system inversion, how much will it affect the velocity.
This method is used to compute the compliance for contact corrections For Euler methods, it is typically dt.
Reimplemented from sofa::core::componentmodel::behavior::OdeSolver.
Definition at line 61 of file EulerImplicitSolver.h.
| void sofa::component::odesolver::EulerImplicitSolver::solve | ( | double | dt | ) | [virtual] |
Main computation method.
Specify and execute all computation for timestep integration, i.e. advancing the state from time t to t+dt.
Implements sofa::core::componentmodel::behavior::OdeSolver.
Definition at line 58 of file EulerImplicitSolver.cpp.
References sofa::simulation::SolverImpl::addMBKv(), sofa::simulation::SolverImpl::addMdx(), sofa::simulation::SolverImpl::addSeparateGravity(), sofa::simulation::SolverImpl::computeDfV(), sofa::simulation::SolverImpl::computeForce(), sofa::simulation::Visitor::execute(), f_rayleighMass, f_rayleighStiffness, f_velocityDamping, f_verbose, sofa::core::componentmodel::behavior::BaseMechanicalState::VecId::force(), sofa::core::objectmodel::BaseObject::getContext(), sofa::core::objectmodel::Data< T >::getValue(), sofa::core::componentmodel::behavior::MechanicalMatrix::K, sofa::core::componentmodel::behavior::MechanicalMatrix::M, sofa::simulation::MechanicalVMultiOpVisitor::ops, sofa::core::componentmodel::behavior::MultiVector< Parent >::peq(), sofa::core::componentmodel::behavior::BaseMechanicalState::VecId::position(), sofa::simulation::SolverImpl::projectResponse(), sofa::core::componentmodel::behavior::MultiMatrix< Parent >::solve(), sofa::core::componentmodel::behavior::MultiVector< Parent >::teq(), sofa::core::componentmodel::behavior::BaseMechanicalState::VecId::V_DERIV, and sofa::core::componentmodel::behavior::BaseMechanicalState::VecId::velocity().
Definition at line 49 of file EulerImplicitSolver.h.
Referenced by sofa::component::collision::SolverMergers::createSolverEulerImplicitEulerImplicit(), main(), and solve().
Definition at line 48 of file EulerImplicitSolver.h.
Referenced by sofa::component::collision::SolverMergers::createSolverEulerImplicitEulerImplicit(), main(), and solve().
Definition at line 50 of file EulerImplicitSolver.h.
Referenced by sofa::component::collision::SolverMergers::createSolverEulerImplicitEulerImplicit(), and solve().
1.5.7.1