MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
Step2Integrator Class Referenceabstract

#include <stepsol.h>

Inheritance diagram for Step2Integrator:
Collaboration diagram for Step2Integrator:

Public Member Functions

 Step2Integrator (const integer MaxIt, const doublereal dT, const doublereal dSolutionTol, const bool bmod_res_test)
 
virtual ~Step2Integrator (void)
 
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)
 
- Public Member Functions inherited from StepNIntegrator
 StepNIntegrator (const integer MaxIt, const doublereal dT, const doublereal dSolutionTol, const integer stp, const bool bmod_res_test)
 
virtual ~StepNIntegrator (void)
 
virtual void Residual (VectorHandler *pRes) const
 
virtual void Jacobian (MatrixHandler *pJac) const
 
virtual void Update (const VectorHandler *pSol) const
 
virtual doublereal TestScale (const NonlinearSolverTest *pTest, doublereal &dAlgebraicEqu) const
 
- Public Member Functions inherited from ImplicitStepIntegrator
 ImplicitStepIntegrator (const integer MaxIt, const doublereal dT, const doublereal dSolutionTol, const integer stp, const integer sts, const bool bmod_res_test)
 
virtual ~ImplicitStepIntegrator (void)
 
virtual void EvalProd (doublereal Tau, const VectorHandler &f0, const VectorHandler &w, VectorHandler &z) const
 
- Public Member Functions inherited from StepIntegrator
 StepIntegrator (const integer MaxIt, const doublereal dT, const doublereal dSolutionTol, const integer stp, const integer sts)
 
virtual ~StepIntegrator (void)
 
void SetDataManager (DataManager *pDatMan)
 
virtual integer GetIntegratorNumPreviousStates (void) const
 
virtual integer GetIntegratorNumUnknownStates (void) const
 
virtual integer GetIntegratorMaxIters (void) const
 
virtual doublereal GetIntegratorDTol (void) const
 
virtual doublereal GetIntegratorDSolTol (void) const
 
virtual void OutputTypes (const bool fpred)
 
virtual void SetDriveHandler (const DriveHandler *pDH)
 
- Public Member Functions inherited from NonlinearProblem
virtual ~NonlinearProblem (void)
 

Protected Member Functions

void PredictDof (const int DCount, const DofOrder::Order Order, const VectorHandler *const pSol=0) const
 
virtual void Predict (void)
 
virtual doublereal dPredictDerivative (const doublereal &dXm1, const doublereal &dXm2, const doublereal &dXPm1, const doublereal &dXPm2, DofOrder::Order o=DofOrder::DIFFERENTIAL) const =0
 
virtual doublereal dPredictState (const doublereal &dXm1, const doublereal &dXm2, const doublereal &dXP, const doublereal &dXPm1, const doublereal &dXPm2, DofOrder::Order o=DofOrder::DIFFERENTIAL) const =0
 
virtual doublereal dPredDer (const doublereal &dXm1, const doublereal &dXm2, const doublereal &dXPm1, const doublereal &dXPm2) const =0
 
virtual doublereal dPredState (const doublereal &dXm1, const doublereal &dXm2, const doublereal &dXP, const doublereal &dXPm1, const doublereal &dXPm2) const =0
 
virtual doublereal dPredDerAlg (const doublereal &dXm1, const doublereal &dXPm1, const doublereal &dXPm2) const =0
 
virtual doublereal dPredStateAlg (const doublereal &dXm1, const doublereal &dXP, const doublereal &dXPm1, const doublereal &dXPm2) const =0
 
virtual void SetCoef (doublereal dT, doublereal dAlpha, enum StepChange NewStep)=0
 
- Protected Member Functions inherited from StepNIntegrator
void UpdateDof (const int DCount, const DofOrder::Order Order, const VectorHandler *const pSol=0) const
 
- Protected Member Functions inherited from StepIntegrator
template<class T >
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
 

Protected Attributes

VectorHandlerpXPrev
 
VectorHandlerpXPrev2
 
VectorHandlerpXPrimePrev
 
VectorHandlerpXPrimePrev2
 
- Protected Attributes inherited from ImplicitStepIntegrator
VectorHandlerpXCurr
 
VectorHandlerpXPrimeCurr
 
bool bModResTest
 
- Protected Attributes inherited from StepIntegrator
DataManagerpDM
 
const DataManager::DofVecTypepDofs
 
bool outputPred
 
integer MaxIters
 
doublereal dTol
 
doublereal dSolTol
 
integer steps
 
integer unkstates
 

Additional Inherited Members

- Public Types inherited from StepIntegrator
enum  { DIFFERENTIAL = 0, ALGEBRAIC = 1 }
 
enum  StepChange { NEWSTEP, REPEATSTEP }
 
- Public Attributes inherited from StepNIntegrator
doublereal db0Differential
 
doublereal db0Algebraic
 

Detailed Description

Definition at line 430 of file stepsol.h.

Constructor & Destructor Documentation

Step2Integrator::Step2Integrator ( const integer  MaxIt,
const doublereal  dT,
const doublereal  dSolutionTol,
const bool  bmod_res_test 
)

Definition at line 692 of file stepsol.cc.

References NO_OP.

696 : StepNIntegrator(MaxIt, dT, dSolutionTol, 2, bmod_res_test),
697 pXPrev(NULL),
698 pXPrev2(NULL),
699 pXPrimePrev(NULL),
700 pXPrimePrev2(NULL)
701 {
702  NO_OP;
703 }
StepNIntegrator(const integer MaxIt, const doublereal dT, const doublereal dSolutionTol, const integer stp, const bool bmod_res_test)
Definition: stepsol.cc:446
#define NO_OP
Definition: myassert.h:74
VectorHandler * pXPrev2
Definition: stepsol.h:434
VectorHandler * pXPrimePrev
Definition: stepsol.h:435
VectorHandler * pXPrimePrev2
Definition: stepsol.h:435
VectorHandler * pXPrev
Definition: stepsol.h:434
Step2Integrator::~Step2Integrator ( void  )
virtual

Definition at line 705 of file stepsol.cc.

References NO_OP.

706 {
707  NO_OP;
708 }
#define NO_OP
Definition: myassert.h:74

Member Function Documentation

doublereal Step2Integrator::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

Implements StepIntegrator.

Definition at line 765 of file stepsol.cc.

References DataManager::AfterConvergence(), DataManager::AfterPredict(), ASSERT, DataManager::dGetTime(), StepIntegrator::dSolTol, StepIntegrator::dTol, DataManager::iGetNumDofs(), DataManager::LinkToSolution(), StepIntegrator::MaxIters, StepIntegrator::outputPred, StepIntegrator::pDM, Solver::pGetNonlinearSolver(), Predict(), ImplicitStepIntegrator::pXCurr, pXPrev, pXPrev2, ImplicitStepIntegrator::pXPrimeCurr, pXPrimePrev, pXPrimePrev2, SetCoef(), and NonlinearSolver::Solve().

775 {
776  ASSERT(pDM != NULL);
777  pXCurr = pX;
778  pXPrev = qX[0];
779  pXPrev2 = qX[1];
780 
781  pXPrimeCurr = pXPrime;
782  pXPrimePrev = qXPrime[0];
783  pXPrimePrev2 = qXPrime[1];
784 
785  /* predizione */
786  SetCoef(TStep, dAph, StType);
787  Predict();
789  pDM->AfterPredict();
790 
791 #ifdef DEBUG
792  integer iNumDofs = pDM->iGetNumDofs();
793  if (outputPred) {
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 << "] ";
798  }
799  std::cout << "| XPrime ";
800  for (unsigned idx = 0; idx < qXPrime.size(); idx++) {
801  std::cout << "| XPPrev[" << idx << "] ";
802  }
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);
810  }
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);
815  }
816  std::cout << " " << pDM->DataManager::GetDofDescription(iTmpCnt) << std::endl;
817  }
818  }
819 #endif /* DEBUG */
820 
821  Err = 0.;
822  pS->pGetNonlinearSolver()->Solve(this, pS, MaxIters, dTol,
823  EffIter, Err, dSolTol, SolErr);
824 
825  /* if it gets here, it surely converged */
827 
828  return Err;
829 }
bool outputPred
Definition: stepsol.h:96
doublereal dGetTime(void) const
Definition: dataman2.cc:165
doublereal dSolTol
Definition: stepsol.h:99
VectorHandler * pXPrev2
Definition: stepsol.h:434
virtual void AfterConvergence(void) const
Definition: dataman2.cc:2527
virtual void AfterPredict(void) const
Definition: dataman2.cc:2472
void LinkToSolution(VectorHandler &XCurr, VectorHandler &XPrimeCurr)
Definition: dataman2.cc:172
DataManager * pDM
Definition: stepsol.h:93
virtual NonlinearSolver * pGetNonlinearSolver(void) const
Definition: solver.h:404
VectorHandler * pXPrimeCurr
Definition: stepsol.h:164
virtual void Predict(void)
Definition: stepsol.cc:757
VectorHandler * pXCurr
Definition: stepsol.h:163
integer MaxIters
Definition: stepsol.h:98
#define ASSERT(expression)
Definition: colamd.c:977
virtual void SetCoef(doublereal dT, doublereal dAlpha, enum StepChange NewStep)=0
VectorHandler * pXPrimePrev
Definition: stepsol.h:435
virtual void Solve(const NonlinearProblem *pNLP, Solver *pS, const integer iMaxIter, const doublereal &Tol, integer &iIterCnt, doublereal &dErr, const doublereal &SolTol, doublereal &dSolErr)=0
long int integer
Definition: colamd.c:51
doublereal dTol
Definition: stepsol.h:99
VectorHandler * pXPrimePrev2
Definition: stepsol.h:435
VectorHandler * pXPrev
Definition: stepsol.h:434
integer iGetNumDofs(void) const
Definition: dataman.h:809

Here is the call graph for this function:

virtual doublereal Step2Integrator::dPredDer ( const doublereal dXm1,
const doublereal dXm2,
const doublereal dXPm1,
const doublereal dXPm2 
) const
protectedpure virtual

Implemented in HopeSolver, and MultistepSolver.

Referenced by PredictDof().

virtual doublereal Step2Integrator::dPredDerAlg ( const doublereal dXm1,
const doublereal dXPm1,
const doublereal dXPm2 
) const
protectedpure virtual

Implemented in HopeSolver, and MultistepSolver.

Referenced by PredictDof().

virtual doublereal Step2Integrator::dPredictDerivative ( const doublereal dXm1,
const doublereal dXm2,
const doublereal dXPm1,
const doublereal dXPm2,
DofOrder::Order  o = DofOrder::DIFFERENTIAL 
) const
protectedpure virtual

Implemented in HopeSolver, and MultistepSolver.

virtual doublereal Step2Integrator::dPredictState ( const doublereal dXm1,
const doublereal dXm2,
const doublereal dXP,
const doublereal dXPm1,
const doublereal dXPm2,
DofOrder::Order  o = DofOrder::DIFFERENTIAL 
) const
protectedpure virtual

Implemented in HopeSolver, and MultistepSolver.

virtual doublereal Step2Integrator::dPredState ( const doublereal dXm1,
const doublereal dXm2,
const doublereal dXP,
const doublereal dXPm1,
const doublereal dXPm2 
) const
protectedpure virtual

Implemented in HopeSolver, and MultistepSolver.

Referenced by PredictDof().

virtual doublereal Step2Integrator::dPredStateAlg ( const doublereal dXm1,
const doublereal dXP,
const doublereal dXPm1,
const doublereal dXPm2 
) const
protectedpure virtual

Implemented in HopeSolver, and MultistepSolver.

Referenced by PredictDof().

void Step2Integrator::Predict ( void  )
protectedvirtual

Definition at line 757 of file stepsol.cc.

References ASSERT, DEBUGCOUTFNAME, StepIntegrator::pDM, PredictDof(), and StepIntegrator::UpdateLoop().

Referenced by Advance().

758 {
759  DEBUGCOUTFNAME("Step2Integrator::Predict");
760  ASSERT(pDM != NULL);
762 }
#define DEBUGCOUTFNAME(fname)
Definition: myassert.h:256
DataManager * pDM
Definition: stepsol.h:93
void PredictDof(const int DCount, const DofOrder::Order Order, const VectorHandler *const pSol=0) const
Definition: stepsol.cc:714
#define ASSERT(expression)
Definition: colamd.c:977
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

Here is the call graph for this function:

void Step2Integrator::PredictDof ( const int  DCount,
const DofOrder::Order  Order,
const VectorHandler *const  pSol = 0 
) const
protected

Definition at line 714 of file stepsol.cc.

References DofOrder::ALGEBRAIC, DofOrder::DIFFERENTIAL, dPredDer(), dPredDerAlg(), dPredState(), dPredStateAlg(), MBDYN_EXCEPT_ARGS, VectorHandler::PutCoef(), ImplicitStepIntegrator::pXCurr, pXPrev, pXPrev2, ImplicitStepIntegrator::pXPrimeCurr, pXPrimePrev, and pXPrimePrev2.

Referenced by Predict().

717 {
718  if (Order == DofOrder::DIFFERENTIAL) {
719  doublereal dXnm1 = pXPrev->operator()(DCount);
720  doublereal dXnm2 = pXPrev2->operator()(DCount);
721  doublereal dXPnm1 = pXPrimePrev->operator()(DCount);
722 
723  doublereal dXPnm2 =
724  pXPrimePrev2->operator()(DCount);
725  doublereal dXPn = dPredDer(dXnm1, dXnm2,
726  dXPnm1, dXPnm2);
727  doublereal dXn = dPredState(dXnm1, dXnm2,
728  dXPn, dXPnm1, dXPnm2);
729 
730  pXPrimeCurr->PutCoef(DCount, dXPn);
731  pXCurr->PutCoef(DCount, dXn);
732 
733  } else if (Order == DofOrder::ALGEBRAIC) {
734  doublereal dXnm1 = pXPrev->operator()(DCount);
735  doublereal dXnm2 = pXPrev2->operator()(DCount);
736  doublereal dXInm1 =
737  pXPrimePrev->operator()(DCount);
738 
739  doublereal dXn = dPredDerAlg(dXInm1,
740  dXnm1, dXnm2);
741  doublereal dXIn = dPredStateAlg(dXInm1,
742  dXn, dXnm1, dXnm2);
743 
744  pXCurr->PutCoef(DCount, dXn);
745  pXPrimeCurr->PutCoef(DCount, dXIn);
746 
747  } else {
748  silent_cerr("Step2Integrator::"
749  "PredictDof(): "
750  "unknown order for local dof "
751  << DCount << std::endl);
753  }
754 }
virtual doublereal dPredDerAlg(const doublereal &dXm1, const doublereal &dXPm1, const doublereal &dXPm2) const =0
#define MBDYN_EXCEPT_ARGS
Definition: except.h:63
VectorHandler * pXPrev2
Definition: stepsol.h:434
virtual doublereal dPredState(const doublereal &dXm1, const doublereal &dXm2, const doublereal &dXP, const doublereal &dXPm1, const doublereal &dXPm2) const =0
VectorHandler * pXPrimeCurr
Definition: stepsol.h:164
VectorHandler * pXCurr
Definition: stepsol.h:163
Order
Definition: shapefnc.h:42
virtual void PutCoef(integer iRow, const doublereal &dCoef)=0
virtual doublereal dPredStateAlg(const doublereal &dXm1, const doublereal &dXP, const doublereal &dXPm1, const doublereal &dXPm2) const =0
VectorHandler * pXPrimePrev
Definition: stepsol.h:435
virtual doublereal dPredDer(const doublereal &dXm1, const doublereal &dXm2, const doublereal &dXPm1, const doublereal &dXPm2) const =0
double doublereal
Definition: colamd.c:52
VectorHandler * pXPrimePrev2
Definition: stepsol.h:435
VectorHandler * pXPrev
Definition: stepsol.h:434

Here is the call graph for this function:

virtual void Step2Integrator::SetCoef ( doublereal  dT,
doublereal  dAlpha,
enum StepChange  NewStep 
)
protectedpure virtual

Implements StepNIntegrator.

Implemented in HopeSolver, and MultistepSolver.

Referenced by Advance().

Member Data Documentation

VectorHandler* Step2Integrator::pXPrev
protected

Definition at line 434 of file stepsol.h.

Referenced by Advance(), and PredictDof().

VectorHandler * Step2Integrator::pXPrev2
protected

Definition at line 434 of file stepsol.h.

Referenced by Advance(), and PredictDof().

VectorHandler* Step2Integrator::pXPrimePrev
protected

Definition at line 435 of file stepsol.h.

Referenced by Advance(), and PredictDof().

VectorHandler * Step2Integrator::pXPrimePrev2
protected

Definition at line 435 of file stepsol.h.

Referenced by Advance(), and PredictDof().


The documentation for this class was generated from the following files: