61 dSolTol(dSolutionTol),
122 #include "stepsol.hc"
129 const bool bmod_res_test)
131 bEvalProdCalledFirstTime(
true),
134 bModResTest(bmod_res_test)
167 if (nw < std::numeric_limits<doublereal>::epsilon()) {
173 if (
fabs(sigma) > std::numeric_limits<doublereal>::epsilon()) {
178 #ifdef DEBUG_ITERATIVE
179 std::cout <<
"Tau " << Tau << std::endl;
187 External::SendFreeze();
216 #warning "ImplicitStepIntegrator::TestScale() not available with Schur solution"
241 return 1./(1. + dXPr);
253 const bool bmod_res_test,
258 iMaxIterCoef(iMaxIterCoef),
259 dFactorCoef(dFactorCoef)
274 std::deque<MyVectorHandler*>& qX,
275 std::deque<MyVectorHandler*>& qXPrime,
295 bool bConverged =
false;
298 doublereal dResErrMin = std::numeric_limits<doublereal>::max();
302 for (
int i = 0; i <= iMaxPowerCoef; ++i) {
303 const bool bLastChance = i == iMaxPowerCoef;
335 if (Err < dResErrMin) {
364 dTol = dSafetyFactor * dResErrMin;
365 dSolTol = dSafetyFactor * dSolErrMin;
368 silent_cout(
"Derivatives(" << i + 1 <<
'/' << 2 *
iMaxIterCoef + 1
370 <<
" coef=" <<
dCoef / TStep
441 dAlgebraicEqu =
dCoef;
450 const bool bmod_res_test)
497 inc.PutCoef(i, -ddd);
500 incsol *= (1./(-ddd));
502 fdjac.PutCoef(j, i, std::abs(incsol(j)) > 1.E-100 ? incsol(j) : 0.);
506 std::cerr <<
"\nxxxxxxxxxxxxxxx\n" << std::endl;
507 std::cerr << *pJac << std::endl;
508 std::cerr <<
"\n---------------\n" << std::endl;
509 std::cerr << fdjac << std::endl;
510 std::cerr <<
"\n===============\n" << std::endl;
512 #endif // MBDYN_FDJAC
563 const bool bmod_res_test)
605 silent_cerr(
"Step1Integrator::"
607 "unknown order for local dof "
608 << DCount << std::endl);
626 std::deque<MyVectorHandler*>& qX,
627 std::deque<MyVectorHandler*>& qXPrime,
650 std::cout <<
"After prediction, time=" <<
pDM->
dGetTime() << std::endl;
651 std::cout <<
"Dof: | XCurr ";
652 for (
unsigned idx = 0; idx < qX.size(); idx++) {
653 std::cout <<
"| XPrev[" << idx <<
"] ";
655 std::cout <<
"| XPrime ";
656 for (
unsigned idx = 0; idx < qXPrime.size(); idx++) {
657 std::cout <<
"| XPPrev[" << idx <<
"] ";
659 std::cout <<
"|" << std::endl;
660 for (
int iTmpCnt = 1; iTmpCnt <= iNumDofs; iTmpCnt++) {
661 std::cout << std::setw(8) << iTmpCnt <<
": ";
662 std::cout << std::setw(12) << pX->operator()(iTmpCnt);
663 for (
unsigned int ivec = 0; ivec < qX.size(); ivec++) {
664 std::cout << std::setw(12)
665 << (qX[ivec])->
operator()(iTmpCnt);
667 std::cout << std::setw(12) << pXPrime->operator()(iTmpCnt);
668 for (
unsigned int ivec = 0; ivec < qXPrime.size(); ivec++) {
669 std::cout << std::setw(12)
670 << (qXPrime[ivec])->
operator()(iTmpCnt);
672 std::cout <<
" " <<
pDM->DataManager::GetDofDescription(iTmpCnt) << std::endl;
679 EffIter, Err,
dSolTol, SolErr);
695 const bool bmod_res_test)
728 dXPn, dXPnm1, dXPnm2);
748 silent_cerr(
"Step2Integrator::"
750 "unknown order for local dof "
751 << DCount << std::endl);
768 std::deque<MyVectorHandler*>& qX,
769 std::deque<MyVectorHandler*>& qXPrime,
794 std::cout <<
"After prediction, time=" <<
pDM->
dGetTime() << std::endl;
795 std::cout <<
"Dof: | XCurr ";
796 for (
unsigned idx = 0; idx < qX.size(); idx++) {
797 std::cout <<
"| XPrev[" << idx <<
"] ";
799 std::cout <<
"| XPrime ";
800 for (
unsigned idx = 0; idx < qXPrime.size(); idx++) {
801 std::cout <<
"| XPPrev[" << idx <<
"] ";
803 std::cout <<
"|" << std::endl;
804 for (
int iTmpCnt = 1; iTmpCnt <= iNumDofs; iTmpCnt++) {
805 std::cout << std::setw(8) << iTmpCnt <<
": ";
806 std::cout << std::setw(12) << pX->operator()(iTmpCnt);
807 for (
unsigned int ivec = 0; ivec < qX.size(); ivec++) {
808 std::cout << std::setw(12)
809 << (qX[ivec])->
operator()(iTmpCnt);
811 std::cout << std::setw(12) << pXPrime->operator()(iTmpCnt);
812 for (
unsigned int ivec = 0; ivec < qXPrime.size(); ivec++) {
813 std::cout << std::setw(12)
814 << (qXPrime[ivec])->
operator()(iTmpCnt);
816 std::cout <<
" " <<
pDM->DataManager::GetDofDescription(iTmpCnt) << std::endl;
823 EffIter, Err,
dSolTol, SolErr);
839 const bool bmod_res_test)
917 const bool bmod_res_test)
997 const bool bmod_res_test)
999 Rho(pRho), AlgebraicRho(pAlgRho)
1025 doublereal dDen = 2.*(1.+dAlpha)-(1.-dRho)*(1.-dRho);
1026 doublereal dBeta = dAlpha*((1.-dRho)*(1.-dRho)*(2.+dAlpha)
1027 +2.*(2.*dRho-1.)*(1.+dAlpha))/dDen;
1028 doublereal dDelta = .5*dAlpha*dAlpha*(1.-dRho)*(1.-dRho)/dDen;
1030 mp[0] = -6.*dAlpha*(1.+dAlpha);
1032 np[0] = 1.+4.*dAlpha+3.*dAlpha*dAlpha;
1033 np[1] = dAlpha*(2.+3.*dAlpha);
1038 b[1][
DIFFERENTIAL] = dT*(dBeta/2.+dAlpha/2.-dDelta/dAlpha*(1.+dAlpha));
1042 <<
"Alpha = " << dAlpha << std::endl
1043 <<
"Differential coefficients:" << std::endl
1044 <<
"beta = " << dBeta << std::endl
1045 <<
"delta = " << dDelta << std::endl
1053 if (dAlgebraicRho != dRho) {
1054 dDen = 2.*(1.+dAlpha)-(1.-dAlgebraicRho)*(1.-dAlgebraicRho);
1055 dBeta = dAlpha*((1.-dAlgebraicRho)*(1.-dAlgebraicRho)*(2.+dAlpha)
1056 +2.*(2.*dAlgebraicRho-1.)*(1.+dAlpha))/dDen;
1057 dDelta = .5*dAlpha*dAlpha*(1.-dAlgebraicRho)*(1.-dAlgebraicRho)/dDen;
1060 b[0][
ALGEBRAIC] = dT*(dDelta/dAlpha+dAlpha/2.);
1061 b[1][
ALGEBRAIC] = dT*(dBeta/2.+dAlpha/2.-dDelta/dAlpha*(1.+dAlpha));
1071 DEBUGCOUT(
"Algebraic coefficients:" << std::endl
1072 <<
"beta = " << dBeta << std::endl
1073 <<
"delta = " << dDelta << std::endl
1074 <<
"a2 = " << a[1][
ALGEBRAIC] << std::endl
1075 <<
"b0 = " << b[0][
ALGEBRAIC] << std::endl
1076 <<
"b1 = " << b[1][
ALGEBRAIC] << std::endl
1077 <<
"b2 = " << b[2][
ALGEBRAIC] << std::endl);
1082 << b[1][DIFFERENTIAL]*b[1][DIFFERENTIAL]-4.*b[2][DIFFERENTIAL]*b[0][DIFFERENTIAL]
1084 <<
"Asymptotic rho for algebraic variables: "
1087 << b[1][ALGEBRAIC]*b[1][ALGEBRAIC]-4.*b[2][ALGEBRAIC]*b[0][ALGEBRAIC]
1109 return np[0]*dXPm1+
np[1]*dXPm2-
mp[1]*dXm1;
1111 return mp[0]*dXm1+
mp[1]*dXm2+
np[0]*dXPm1+
np[1]*dXPm2;
1138 return mp[0]*dXm1+
mp[1]*dXm2+
np[0]*dXPm1+
np[1]*dXPm2;
1157 return np[0]*dXPm1+
np[1]*dXPm2-
mp[1]*dXm1;
1180 const bool bmod_res_test)
1182 Rho(pRho), AlgebraicRho(pAlgRho), bStep(0)
1207 cerr <<
"HOPE time step integrator is not implemented yet in variable step form" << std::endl;
1220 mp[0] = -6.*dAlpha*(1.+dAlpha);
1222 np[0] = 1.+4.*dAlpha+3.*dAlpha*dAlpha;
1223 np[1] = dAlpha*(2.+3.*dAlpha);
1240 <<
"Alpha = " << dAlpha << std::endl
1241 <<
"Differential coefficients:" << std::endl
1242 <<
"HOPE-Alpha = " << dALPHA << std::endl
1250 doublereal dAlgebraicALPHA = 4.*dAlgebraicRho/(3.+dAlgebraicRho);
1252 if (dAlgebraicRho != dRho) {
1254 b[0][
ALGEBRAIC] = dTMod*(4.-dAlgebraicALPHA)/6.;
1255 b[1][
ALGEBRAIC] = dTMod*dAlgebraicALPHA/2.;
1263 DEBUGCOUT(
"Algebraic coefficients:" << std::endl
1264 <<
"HOPE-Alpha = " << dAlgebraicALPHA << std::endl
1266 <<
"b0 = " << b[0][
ALGEBRAIC] << std::endl
1267 <<
"b1 = " << b[1][
ALGEBRAIC] << std::endl);
1288 return np[0]*dXPm1+
np[1]*dXPm2-
mp[1]*dXm1;
1290 return mp[0]*dXm1+
mp[1]*dXm2+
np[0]*dXPm1+
np[1]*dXPm2;
1324 return mp[0]*dXm1+
mp[1]*dXm2+
np[0]*dXPm1+
np[1]*dXPm2;
1348 return np[0]*dXPm1+
np[1]*dXPm2-
mp[1]*dXm1;
1383 const bool bmod_res_test)
1388 bEvalProdCalledFirstTime(
true),
1393 pXPrimePrimeCurr(0),
1395 bModResTest(bmod_res_test)
1428 if (nw < std::numeric_limits<doublereal>::epsilon()) {
1434 if (
fabs(sigma) > std::numeric_limits<doublereal>::epsilon()) {
1439 #ifdef DEBUG_ITERATIVE
1440 std::cout <<
"Tau " << Tau << std::endl;
1448 External::SendFreeze();
1477 #warning "InverseDynamicsStepSolver::TestScale() not available with Schur solution"
1485 iCntp1++, ++CurrDof)
1502 return 1./(1. + dXPr);
1556 EffIter, Err,
dSolTol, SolErr);
1577 silent_cout(
"Residual(velocity):" << std::endl);
1586 silent_cout(
"Jacobian(velocity):" << std::endl << *pMat);
1595 silent_cout(
"Solution(velocity):" << std::endl);
1614 silent_cout(
"Residual(acceleration):" << std::endl);
1623 silent_cout(
"Jacobian(acceleration):" << std::endl << *pMat);
1632 silent_cout(
"Solution(acceleration):" << std::endl);
1646 silent_cout(
"Residual(inverseDynamics):" << std::endl);
1655 silent_cout(
"Jacobian(inverseDynamics):" << std::endl << *pMat);
1661 switch (dynamic_cast<const InverseSolver *>(
pDM->
GetSolver())->GetProblemType()) {
1671 silent_cout(
"Solution(inverseDynamics):" << std::endl);
1735 switch (dynamic_cast<const InverseSolver *>(
pDM->
GetSolver())->GetProblemType()) {
const doublereal dFactorCoef
doublereal dPredStateAlg(const doublereal &dXm1, const doublereal &dXP, const doublereal &dXPm1, const doublereal &dXPm2) const
virtual void Reset(void)=0
virtual VectorHandler * pResHdl(void) const =0
Step1Integrator(const integer MaxIt, const doublereal dT, const doublereal dSolutionTol, const bool bmod_res_test)
virtual SolutionManager * pGetSolutionManager(void) const
void SetCoef(doublereal dT, doublereal dAlpha, enum StepChange NewStep)
doublereal dPredDer(const doublereal &dXm1, const doublereal &dXm2, const doublereal &dXPm1, const doublereal &dXPm2) const
doublereal dPredStateAlg(const doublereal &dXm1, const doublereal &dXP, const doublereal &dXPm1, const doublereal &dXPm2) const
void SetCoef(doublereal dT, doublereal dAlpha, enum StepChange NewStep)
doublereal dPredDerAlg(const doublereal &dXm1, const doublereal &dXPm1, const doublereal &dXPm2) const
virtual doublereal dPredDer(const doublereal &dXm1, const doublereal &dXPm1) const =0
void UpdateDof(const int DCount, const DofOrder::Order Order, const VectorHandler *const pSol=0) const
doublereal dPredictState(const doublereal &dXm1, const doublereal &dXP, const doublereal &dXPm1, DofOrder::Order o=DofOrder::DIFFERENTIAL) const
virtual integer iGetNumCols(void) const =0
virtual void EvalProd(doublereal Tau, const VectorHandler &f0, const VectorHandler &w, VectorHandler &z) const
doublereal dPredDer(const doublereal &dXm1, const doublereal &dXPm1) const
virtual void SetCoef(doublereal dT, doublereal dAlpha, enum StepChange NewStep)=0
virtual doublereal dPredDerAlg(const doublereal &dXm1, const doublereal &dXPm1, const doublereal &dXPm2) const =0
void Jacobian(MatrixHandler *pJac) const
bool bEvalProdCalledFirstTime
ImplicitStepIntegrator(const integer MaxIt, const doublereal dT, const doublereal dSolutionTol, const integer stp, const integer sts, const bool bmod_res_test)
#define MBDYN_EXCEPT_ARGS
StepIntegrator(const integer MaxIt, const doublereal dT, const doublereal dSolutionTol, const integer stp, const integer sts)
VectorHandler * pXPrimeCurr
#define DEBUGCOUTFNAME(fname)
DerivativeSolver(const doublereal Tl, const doublereal dSolTl, const doublereal dC, const integer iMaxIt, const bool bmod_res_test, const integer iMaxIterCoef, const doublereal dFactorCoef)
void Jacobian(MatrixHandler *pJac) const
bool bEvalProdCalledFirstTime
doublereal dPredState(const doublereal &dXm1, const doublereal &dXP, const doublereal &dXPm1) const
virtual void OutputTypes(const bool fpred)
virtual void PrintResidual(const VectorHandler &Res, integer iIterCnt) const
doublereal dGetTime(void) const
virtual void Predict(void)
doublereal dPredictState(const doublereal &dXm1, const doublereal &dXm2, const doublereal &dXP, const doublereal &dXPm1, const doublereal &dXPm2, DofOrder::Order o=DofOrder::DIFFERENTIAL) const
virtual void IncCoef(integer iRow, const doublereal &dCoef)=0
virtual doublereal InnerProd(const VectorHandler &VH) const
doublereal dPredDerAlg(const doublereal &dXm1, const doublereal &dXPm1) const
virtual ~Step2Integrator(void)
virtual integer GetIntegratorMaxIters(void) const
virtual doublereal TestScale(const NonlinearSolverTest *pTest, doublereal &dCoef) const
doublereal Advance(Solver *pS, const doublereal TStep, const doublereal, const StepChange, std::deque< MyVectorHandler * > &qX, std::deque< MyVectorHandler * > &qXPrime, MyVectorHandler *const pX, MyVectorHandler *const pXPrime, integer &EffIter, doublereal &Err, doublereal &SolErr)
void SetOrder(InverseDynamics::Order iOrder)
virtual void AssRes(VectorHandler &ResHdl, doublereal dCoef)
doublereal dPredictDerivative(const doublereal &dXm1, const doublereal &dXPm1, DofOrder::Order o=DofOrder::DIFFERENTIAL) const
bool outputRes(void) const
virtual void Residual(VectorHandler *pRes) const =0
StepNIntegrator(const integer MaxIt, const doublereal dT, const doublereal dSolutionTol, const integer stp, const bool bmod_res_test)
bool outputJac(void) const
void SetDataManager(DataManager *pDatMan)
virtual doublereal TestScale(const NonlinearSolverTest *pTest, doublereal &dAlgebraicEqu) const
VectorHandler * pXPrimePrev
Step2Integrator(const integer MaxIt, const doublereal dT, const doublereal dSolutionTol, const bool bmod_res_test)
virtual void DerivativesUpdate(void) const
virtual integer iGetSize(void) const =0
virtual doublereal Norm(void) const
GradientExpression< UnaryExpr< FuncFabs, Expr > > fabs(const GradientExpression< Expr > &u)
virtual VectorHandler & ScalarMul(const VectorHandler &VH, const doublereal &d)
virtual void AfterConvergence(void) const
virtual void Resize(integer iSize)
doublereal dPredictDerivative(const doublereal &dXm1, const doublereal &dXPm1, DofOrder::Order o=DofOrder::DIFFERENTIAL) const
bool bJacobian(void) const
InverseDynamicsStepSolver(const integer MaxIt, const doublereal dT, const doublereal dSolutionTol, const integer stp, const integer sts, const bool bmod_res_test)
doublereal dPredictDerivative(const doublereal &dXm1, const doublereal &dXm2, const doublereal &dXPm1, const doublereal &dXPm2, DofOrder::Order o=DofOrder::DIFFERENTIAL) const
virtual void IDAfterConvergence(void) const
CrankNicolsonIntegrator(const doublereal Tl, const doublereal dSolTl, const integer iMaxIt, const bool bmod_res_test)
virtual doublereal dPredState(const doublereal &dXm1, const doublereal &dXm2, const doublereal &dXP, const doublereal &dXPm1, const doublereal &dXPm2) const =0
virtual void AfterPredict(void) const
InverseDynamics::Order iOrder
void Residual(VectorHandler *pRes) const
bool outputSol(void) const
void LinkToSolution(VectorHandler &XCurr, VectorHandler &XPrimeCurr)
virtual void SetDrvHdl(const DriveHandler *pDH)
virtual doublereal dPredStateAlg(const doublereal &dXm1, const doublereal &dXP, const doublereal &dXPm1) const =0
InverseDynamics::Order GetOrder(void) const
const DataManager::DofVecType * pDofs
virtual void SolveT(void)
doublereal dPredState(const doublereal &dXm1, const doublereal &dXm2, const doublereal &dXP, const doublereal &dXPm1, const doublereal &dXPm2) const
doublereal dPredStateAlg(const doublereal &dXm1, const doublereal &dXP, const doublereal &dXPm1) const
virtual MatrixHandler * pMatHdl(void) const =0
virtual doublereal dPredState(const doublereal &dXm1, const doublereal &dXP, const doublereal &dXPm1) const =0
doublereal dPredState(const doublereal &dXm1, const doublereal &dXP, const doublereal &dXPm1) const
virtual doublereal Advance(Solver *pS, const doublereal TStep, const doublereal dAlph, const StepChange StType, std::deque< MyVectorHandler * > &qX, std::deque< MyVectorHandler * > &qXPrime, MyVectorHandler *const pX, MyVectorHandler *const pXPrime, integer &EffIter, doublereal &Err, doublereal &SolErr)
doublereal dPredDerAlg(const doublereal &dXm1, const doublereal &dXPm1, const doublereal &dXPm2) const
HopeSolver(const doublereal Tl, const doublereal dSolTol, const integer iMaxIt, const DriveCaller *pRho, const DriveCaller *pAlgRho, const bool bmod_res_test)
void Update(const VectorHandler *pSol) const
MyVectorHandler SavedState
VectorHandler * pXPrimePrimeCurr
doublereal copysign(doublereal x, doublereal y)
virtual VectorHandler & ScalarMul(const VectorHandler &VH, const doublereal &d)
virtual NonlinearSolver * pGetNonlinearSolver(void) const
virtual doublereal GetIntegratorDTol(void) const
VectorHandler * pXPrimeCurr
virtual ~StepIntegrator(void)
virtual void Predict(void)
void UpdateDof(const int DCount, const DofOrder::Order Order, const VectorHandler *const pSol=0) const
virtual void MatrReset(void)=0
void PredictDof(const int DCount, const DofOrder::Order Order, const VectorHandler *const pSol=0) const
virtual void AssJac(MatrixHandler &JacHdl, doublereal dCoef)
virtual doublereal Advance(Solver *pS, const doublereal TStep, const doublereal dAlph, const StepChange StType, std::deque< MyVectorHandler * > &qX, std::deque< MyVectorHandler * > &qXPrime, MyVectorHandler *const pX, MyVectorHandler *const pXPrime, integer &EffIter, doublereal &Err, doublereal &SolErr)
virtual void Jacobian(MatrixHandler *pJac) const
virtual void Solve(void)=0
void SetDriveHandler(const DriveHandler *pDH)
virtual doublereal TestScale(const NonlinearSolverTest *pTest, doublereal &dCoef) const
doublereal dPredictState(const doublereal &dXm1, const doublereal &dXP, const doublereal &dXPm1, DofOrder::Order o=DofOrder::DIFFERENTIAL) const
doublereal dPredDerAlg(const doublereal &dXm1, const doublereal &dXPm1) const
virtual ~StepNIntegrator(void)
MyVectorHandler SavedDerState
doublereal dPredictState(const doublereal &dXm1, const doublereal &dXm2, const doublereal &dXP, const doublereal &dXPm1, const doublereal &dXPm2, DofOrder::Order o=DofOrder::DIFFERENTIAL) const
void SetCoef(doublereal dT, doublereal dAlpha, enum StepChange NewStep)
~ImplicitEulerIntegrator(void)
DofVecType::const_iterator DofIterator_const
#define ASSERT(expression)
doublereal dPredDer(const doublereal &dXm1, const doublereal &dXm2, const doublereal &dXPm1, const doublereal &dXPm2) const
virtual void EvalProd(doublereal Tau, const VectorHandler &f0, const VectorHandler &w, VectorHandler &z) const
virtual void AssConstrJac(MatrixHandler &JacHdl)
virtual void PutCoef(integer iRow, const doublereal &dCoef)=0
const DofVecType & GetDofs(void) const
virtual doublereal dPredStateAlg(const doublereal &dXm1, const doublereal &dXP, const doublereal &dXPm1, const doublereal &dXPm2) const =0
DriveCaller * pGetDriveCaller(void) const
doublereal db0Differential
virtual void SetCoef(doublereal dT, doublereal dAlpha, enum StepChange NewStep)=0
MyVectorHandler SavedState
void Residual(VectorHandler *pRes) const
virtual void SetDriveHandler(const DriveHandler *pDH)
MultistepSolver(const doublereal Tl, const doublereal dSolTol, const integer iMaxIt, const DriveCaller *pRho, const DriveCaller *pAlgRho, const bool bmod_res_test)
MyVectorHandler SavedDerState
virtual const doublereal & dScaleCoef(const integer &iIndex) const
ImplicitEulerIntegrator(const doublereal Tl, const doublereal dSolTl, const integer iMaxIt, const bool bmod_res_test)
VectorHandler * pXPrimePrev
~InverseDynamicsStepSolver(void)
doublereal dPredState(const doublereal &dXm1, const doublereal &dXm2, const doublereal &dXP, const doublereal &dXPm1, const doublereal &dXPm2) const
doublereal dPredStateAlg(const doublereal &dXm1, const doublereal &dXP, const doublereal &dXPm1) const
virtual doublereal Advance(Solver *pS, const doublereal TStep, const doublereal dAlph, const StepChange StType, std::deque< MyVectorHandler * > &qX, std::deque< MyVectorHandler * > &qXPrime, MyVectorHandler *const pX, MyVectorHandler *const pXPrime, integer &EffIter, doublereal &Err, doublereal &SolErr)
void Update(const VectorHandler *pSol) const
virtual integer GetIntegratorNumPreviousStates(void) const
doublereal dGet(const doublereal &dVar) const
doublereal dPredDer(const doublereal &dXm1, const doublereal &dXPm1) const
virtual void PrintSolution(const VectorHandler &Sol, integer iIterCnt) const
virtual ~Step1Integrator(void)
const Solver * GetSolver(void) const
virtual void Update(const VectorHandler *pSol) const
virtual void Update(void) const
virtual doublereal TestScale(const NonlinearSolverTest *pTest, doublereal &dAlgebraicEqu) const
void PredictDof(const int DCount, const DofOrder::Order Order, const VectorHandler *const pSol=0) const
virtual VectorHandler * pSolHdl(void) const =0
virtual void Update(const VectorHandler *pSol) const =0
virtual void AssConstrRes(VectorHandler &ResHdl, InverseDynamics::Order iOrder)
void UpdateLoop(const T *const t, void(T::*pUpd)(const int DCount, const DofOrder::Order Order, const VectorHandler *const pSol) const, const VectorHandler *const pSol=0) const
void SetDriveHandler(const DriveHandler *pDH)
virtual doublereal dPredDer(const doublereal &dXm1, const doublereal &dXm2, const doublereal &dXPm1, const doublereal &dXPm2) const =0
virtual void Solve(const NonlinearProblem *pNLP, Solver *pS, const integer iMaxIter, const doublereal &Tol, integer &iIterCnt, doublereal &dErr, const doublereal &SolTol, doublereal &dSolErr)=0
virtual void Residual(VectorHandler *pRes) const
VectorHandler * pLambdaCurr
void SetCoef(doublereal dT, doublereal dAlpha, enum StepChange NewStep)
~CrankNicolsonIntegrator(void)
VectorHandler * pXPrimePrev2
doublereal dPredictDerivative(const doublereal &dXm1, const doublereal &dXm2, const doublereal &dXPm1, const doublereal &dXPm2, DofOrder::Order o=DofOrder::DIFFERENTIAL) const
virtual integer iGetNumRows(void) const =0
integer iGetNumDofs(void) const
virtual integer GetIntegratorNumUnknownStates(void) const
virtual doublereal GetIntegratorDSolTol(void) const
virtual doublereal dPredDerAlg(const doublereal &dXm1, const doublereal &dXPm1) const =0
virtual ~ImplicitStepIntegrator(void)