55 const bool bmod_res_test)
59 bAdvanceCalledFirstTime(
true)
76 std::deque<MyVectorHandler*>& qX,
77 std::deque<MyVectorHandler*>& qXPrime,
90 for (
int iCntm1 = 0; iCntm1 < n;
98 CurrDof =
pDofs->begin();
118 EffIter, Err,
dSolTol, SolErr);
148 silent_cerr(
"ThirdOrderIntegrator::PredictDof_for_AfterPredict:"
149 <<
"unknown order for dof "
150 << DCount<< std::endl);
190 silent_cerr(
"ThirdOrderIntegrator::RealPredictDof: "
191 <<
"unknown order for dof "
192 << DCount<< std::endl);
205 if ((pSDM = dynamic_cast<SchurDataManager*> (
pDM)) != 0) {
206 silent_cerr(
"Warning: ThirdOrderIntegrator currently is "
207 <<
"untested with the parallel solver" << std::endl);
279 #warning This trick does not work with Coulomb friction (and other elements too)
339 doublereal dxp_xi = pSol->operator()(DCount+iNumDofs);
357 silent_cerr(
"unknown order for dof "
358 << DCount<< std::endl);
371 if ((pSDM = dynamic_cast<SchurDataManager*> (
pDM)) != 0) {
372 silent_cerr(
"Warning: ThirdOrderIntegrator is untested "
373 <<
"with the parallel solver" << std::endl);
425 const bool bmod_res_test)
476 DEBUGCOUT(
"Tunable Third Order Integrator coefficients:" << std::endl
477 <<
"\t rho: " <<
rho << std::endl
478 <<
"\ttheta: " <<
theta << std::endl
479 <<
"\t w0: " <<
w0 << std::endl
480 <<
"\t w1: " <<
w1 << std::endl
481 <<
"\t w2: " <<
w2 << std::endl
482 <<
"\t m0: " <<
m0 << std::endl
483 <<
"\t m1: " << m1 << std::endl
484 <<
"\t n0: " << n0 << std::endl
485 <<
"\t n1: " <<
n1 << std::endl);
497 const bool bmod_res_test)
546 DEBUGCOUT(
"Ad Hoc Third Order Integrator coefficients:" << std::endl
547 <<
"\t rho: " <<
rho << std::endl
548 <<
"\ttheta: " << theta << std::endl
549 <<
"\t w0: " <<
w0 << std::endl
550 <<
"\t w1: " <<
w1 << std::endl
551 <<
"\t w2: " <<
w2 << std::endl
552 <<
"\t m0: " <<
m0 << std::endl
553 <<
"\t m1: " <<
m1 << std::endl
554 <<
"\t n0: " <<
n0 << std::endl
555 <<
"\t n1: " << n1 << std::endl);
VectorHandler * pXPrimePrev
AdHocThirdOrderIntegrator(const doublereal dT, const doublereal dSolutionTol, const integer iMaxIt, const bool bmod_res_test)
std::vector< bool > EqIsAlgebraic
void SetCoef(doublereal dT, doublereal dAlpha, enum StepChange NewStep)
GradientExpression< BinaryExpr< FuncPow, LhsExpr, RhsExpr > > pow(const GradientExpression< LhsExpr > &u, const GradientExpression< RhsExpr > &v)
#define MBDYN_EXCEPT_ARGS
#define DEBUGCOUTFNAME(fname)
virtual doublereal * pdGetVec(void) const =0
void PredictDof_for_AfterPredict(const int DCount, const DofOrder::Order Order, const VectorHandler *const pSol=0) const
void UpdateDof(const int DCount, const DofOrder::Order Order, const VectorHandler *const pSol=0) const
virtual void Jacobian(MatrixHandler *pJac) const
void SetDriveHandler(const DriveHandler *pDH)
SpMapMatrixHandler Jacxi_x
doublereal dGetTime(void) const
virtual void IncCoef(integer iRow, const doublereal &dCoef)=0
virtual void AssRes(VectorHandler &ResHdl, doublereal dCoef)
virtual void Resize(integer iSize)
virtual void Reset(void)=0
bool bAdvanceCalledFirstTime
virtual void Update(const VectorHandler *pSol) const
virtual void AfterPredict(void) const
void LinkToSolution(VectorHandler &XCurr, VectorHandler &XPrimeCurr)
virtual ~AdHocThirdOrderIntegrator(void)
virtual void SetDrvHdl(const DriveHandler *pDH)
const DataManager::DofVecType * pDofs
std::vector< bool > EqIsDifferential
MatrixHandler & MulAndSumWithShift(MatrixHandler &out, doublereal s=1., integer drow=0, integer dcol=0) const
virtual void Predict(void)
void Resize(integer ir, integer ic)
MatrixHandler * pJacxi_xp
virtual NonlinearSolver * pGetNonlinearSolver(void) const
VectorHandler * pXPrimeCurr
virtual void AssJac(MatrixHandler &JacHdl, doublereal dCoef)
void SetCoef(doublereal dT, doublereal dAlpha, enum StepChange NewStep)
DofVecType::const_iterator DofIterator_const
#define ASSERT(expression)
MatrixHandler & FakeThirdOrderMulAndSumWithShift(MatrixHandler &out, std::vector< bool > b, doublereal s=1., integer drow=0, integer dcol=0) const
virtual ~ThirdOrderIntegrator(void)
virtual void PutCoef(integer iRow, const doublereal &dCoef)=0
DriveCaller * pGetDriveCaller(void) const
void SetTime(const doublereal &dTime, const doublereal &dTimeStep=-1., const integer &iStep=-1, bool bServePending=true)
virtual void Residual(VectorHandler *pRes) const
ThirdOrderIntegrator(const doublereal dT, const doublereal dSolutionTol, const integer iMaxIt, const bool bmod_res_test)
virtual void SetCoef(doublereal dT, doublereal dAlpha, enum StepChange NewStep)=0
void RealPredictDof(const int DCount, const DofOrder::Order Order, const VectorHandler *const pSol=0) const
doublereal dGet(const doublereal &dVar) const
SpMapMatrixHandler Jacxi_xp
virtual void Update(void) const
void Attach(integer iSize, doublereal *pd, integer iMSize=0)
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
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 ~TunableThirdOrderIntegrator(void)
virtual void Solve(const NonlinearProblem *pNLP, Solver *pS, const integer iMaxIter, const doublereal &Tol, integer &iIterCnt, doublereal &dErr, const doublereal &SolTol, doublereal &dSolErr)=0
integer iGetNumDofs(void) const
SpMapMatrixHandler Jac_xp
TunableThirdOrderIntegrator(const doublereal dT, const doublereal dSolutionTol, const integer iMaxIt, const DriveCaller *pRho, const bool bmod_res_test)