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

#include <stepsol.h>

Inheritance diagram for MultistepSolver:
Collaboration diagram for MultistepSolver:

Public Member Functions

 MultistepSolver (const doublereal Tl, const doublereal dSolTol, const integer iMaxIt, const DriveCaller *pRho, const DriveCaller *pAlgRho, const bool bmod_res_test)
 
 ~MultistepSolver (void)
 
- Public Member Functions inherited from Step2Integrator
 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)
 
- Public Member Functions inherited from NonlinearProblem
virtual ~NonlinearProblem (void)
 

Protected Member Functions

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

DriveOwner Rho
 
DriveOwner AlgebraicRho
 
doublereal a [2][2]
 
doublereal b [3][2]
 
doublereal mp [2]
 
doublereal np [2]
 
- Protected Attributes inherited from Step2Integrator
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 511 of file stepsol.h.

Constructor & Destructor Documentation

MultistepSolver::MultistepSolver ( const doublereal  Tl,
const doublereal  dSolTol,
const integer  iMaxIt,
const DriveCaller pRho,
const DriveCaller pAlgRho,
const bool  bmod_res_test 
)

Definition at line 992 of file stepsol.cc.

References ASSERT.

998 :Step2Integrator(iMaxIt, Tl, dSolTl, bmod_res_test),
999 Rho(pRho), AlgebraicRho(pAlgRho)
1000 {
1001  ASSERT(pRho != NULL);
1002  ASSERT(pAlgRho != NULL);
1003 }
DriveOwner AlgebraicRho
Definition: stepsol.h:516
Step2Integrator(const integer MaxIt, const doublereal dT, const doublereal dSolutionTol, const bool bmod_res_test)
Definition: stepsol.cc:692
DriveOwner Rho
Definition: stepsol.h:515
#define ASSERT(expression)
Definition: colamd.c:977
MultistepSolver::~MultistepSolver ( void  )

Definition at line 1005 of file stepsol.cc.

References NO_OP.

1006 {
1007  NO_OP;
1008 }
#define NO_OP
Definition: myassert.h:74

Member Function Documentation

doublereal MultistepSolver::dPredDer ( const doublereal dXm1,
const doublereal dXm2,
const doublereal dXPm1,
const doublereal dXPm2 
) const
protectedvirtual

Implements Step2Integrator.

Definition at line 1133 of file stepsol.cc.

References mp, and np.

1137 {
1138  return mp[0]*dXm1+mp[1]*dXm2+np[0]*dXPm1+np[1]*dXPm2;
1139 }
doublereal mp[2]
Definition: stepsol.h:521
doublereal np[2]
Definition: stepsol.h:522
doublereal MultistepSolver::dPredDerAlg ( const doublereal dXm1,
const doublereal dXPm1,
const doublereal dXPm2 
) const
protectedvirtual

Implements Step2Integrator.

Definition at line 1153 of file stepsol.cc.

References mp, and np.

1156 {
1157  return np[0]*dXPm1+np[1]*dXPm2-mp[1]*dXm1;
1158 }
doublereal mp[2]
Definition: stepsol.h:521
doublereal np[2]
Definition: stepsol.h:522
doublereal MultistepSolver::dPredictDerivative ( const doublereal dXm1,
const doublereal dXm2,
const doublereal dXPm1,
const doublereal dXPm2,
DofOrder::Order  o = DofOrder::DIFFERENTIAL 
) const
protectedvirtual

Implements Step2Integrator.

Definition at line 1102 of file stepsol.cc.

References DofOrder::ALGEBRAIC, mp, and np.

1107 {
1108  if (o == DofOrder::ALGEBRAIC) {
1109  return np[0]*dXPm1+np[1]*dXPm2-mp[1]*dXm1;
1110  } /* else if (o == DofOrder::DIFFERENTIAL) */
1111  return mp[0]*dXm1+mp[1]*dXm2+np[0]*dXPm1+np[1]*dXPm2;
1112 }
doublereal mp[2]
Definition: stepsol.h:521
doublereal np[2]
Definition: stepsol.h:522
doublereal MultistepSolver::dPredictState ( const doublereal dXm1,
const doublereal dXm2,
const doublereal dXP,
const doublereal dXPm1,
const doublereal dXPm2,
DofOrder::Order  o = DofOrder::DIFFERENTIAL 
) const
protectedvirtual

Implements Step2Integrator.

Definition at line 1115 of file stepsol.cc.

References a, DofOrder::ALGEBRAIC, StepIntegrator::ALGEBRAIC, b, and StepIntegrator::DIFFERENTIAL.

1121 {
1122  if (o == DofOrder::ALGEBRAIC) {
1123  return b[0][ALGEBRAIC]*dXP+b[1][ALGEBRAIC]*dXPm1+b[2][ALGEBRAIC]*dXPm2
1124  -a[1][ALGEBRAIC]*dXm1;
1125  } /* else if (o == DofOrder::DIFFERENTIAL) */
1126  return a[0][DIFFERENTIAL]*dXm1+a[1][DIFFERENTIAL]*dXm2
1127  +b[0][DIFFERENTIAL]*dXP+b[1][DIFFERENTIAL]*dXPm1+b[2][DIFFERENTIAL]*dXPm2;
1128 }
doublereal a[2][2]
Definition: stepsol.h:518
doublereal b[3][2]
Definition: stepsol.h:519
doublereal MultistepSolver::dPredState ( const doublereal dXm1,
const doublereal dXm2,
const doublereal dXP,
const doublereal dXPm1,
const doublereal dXPm2 
) const
protectedvirtual

Implements Step2Integrator.

Definition at line 1142 of file stepsol.cc.

References a, b, and StepIntegrator::DIFFERENTIAL.

1147 {
1148  return a[0][DIFFERENTIAL]*dXm1+a[1][DIFFERENTIAL]*dXm2
1149  +b[0][DIFFERENTIAL]*dXP+b[1][DIFFERENTIAL]*dXPm1+b[2][DIFFERENTIAL]*dXPm2;
1150 }
doublereal a[2][2]
Definition: stepsol.h:518
doublereal b[3][2]
Definition: stepsol.h:519
doublereal MultistepSolver::dPredStateAlg ( const doublereal dXm1,
const doublereal dXP,
const doublereal dXPm1,
const doublereal dXPm2 
) const
protectedvirtual

Implements Step2Integrator.

Definition at line 1161 of file stepsol.cc.

References a, StepIntegrator::ALGEBRAIC, and b.

1165 {
1166  return b[0][ALGEBRAIC]*dXP+b[1][ALGEBRAIC]*dXPm1+b[2][ALGEBRAIC]*dXPm2
1167  -a[1][ALGEBRAIC]*dXm1;
1168 }
doublereal a[2][2]
Definition: stepsol.h:518
doublereal b[3][2]
Definition: stepsol.h:519
void MultistepSolver::SetCoef ( doublereal  dT,
doublereal  dAlpha,
enum StepChange  NewStep 
)
protectedvirtual

Implements Step2Integrator.

Definition at line 1018 of file stepsol.cc.

References a, StepIntegrator::ALGEBRAIC, AlgebraicRho, b, StepNIntegrator::db0Algebraic, StepNIntegrator::db0Differential, DEBUGCOUT, DriveOwner::dGet(), StepIntegrator::DIFFERENTIAL, mp, np, and Rho.

1021 {
1022  doublereal dRho = Rho.dGet();
1023  doublereal dAlgebraicRho = AlgebraicRho.dGet();
1024 
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;
1029 
1030  mp[0] = -6.*dAlpha*(1.+dAlpha);
1031  mp[1] = -mp[0];
1032  np[0] = 1.+4.*dAlpha+3.*dAlpha*dAlpha;
1033  np[1] = dAlpha*(2.+3.*dAlpha);
1034 
1035  a[0][DIFFERENTIAL] = 1.-dBeta;
1036  a[1][DIFFERENTIAL] = dBeta;
1037  b[0][DIFFERENTIAL] = dT*(dDelta/dAlpha+dAlpha/2);
1038  b[1][DIFFERENTIAL] = dT*(dBeta/2.+dAlpha/2.-dDelta/dAlpha*(1.+dAlpha));
1039  b[2][DIFFERENTIAL] = dT*(dBeta/2.+dDelta);
1040 
1041  DEBUGCOUT("Predict()" << std::endl
1042  << "Alpha = " << dAlpha << std::endl
1043  << "Differential coefficients:" << std::endl
1044  << "beta = " << dBeta << std::endl
1045  << "delta = " << dDelta << std::endl
1046  << "a1 = " << a[0][DIFFERENTIAL] << std::endl
1047  << "a2 = " << a[1][DIFFERENTIAL] << std::endl
1048  << "b0 = " << b[0][DIFFERENTIAL] << std::endl
1049  << "b1 = " << b[1][DIFFERENTIAL] << std::endl
1050  << "b2 = " << b[2][DIFFERENTIAL] << std::endl);
1051 
1052  /* Coefficienti del metodo - variabili algebriche */
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;
1058 
1059  a[1][ALGEBRAIC] = dBeta;
1060  b[0][ALGEBRAIC] = dT*(dDelta/dAlpha+dAlpha/2.);
1061  b[1][ALGEBRAIC] = dT*(dBeta/2.+dAlpha/2.-dDelta/dAlpha*(1.+dAlpha));
1062  b[2][ALGEBRAIC] = dT*(dBeta/2.+dDelta);
1063 
1064  } else {
1065  a[1][ALGEBRAIC] = a[1][DIFFERENTIAL];
1066  b[0][ALGEBRAIC] = b[0][DIFFERENTIAL];
1067  b[1][ALGEBRAIC] = b[1][DIFFERENTIAL];
1068  b[2][ALGEBRAIC] = b[2][DIFFERENTIAL];
1069  }
1070 
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);
1078 
1079  DEBUGCOUT("Asymptotic rho: "
1080  << -b[1][DIFFERENTIAL]/(2.*b[0][DIFFERENTIAL]) << std::endl
1081  << "Discriminant: "
1082  << b[1][DIFFERENTIAL]*b[1][DIFFERENTIAL]-4.*b[2][DIFFERENTIAL]*b[0][DIFFERENTIAL]
1083  << std::endl
1084  << "Asymptotic rho for algebraic variables: "
1085  << -b[1][ALGEBRAIC]/(2.*b[0][ALGEBRAIC]) << std::endl
1086  << "Discriminant: "
1087  << b[1][ALGEBRAIC]*b[1][ALGEBRAIC]-4.*b[2][ALGEBRAIC]*b[0][ALGEBRAIC]
1088  << std::endl);
1089 
1090  /* Vengono modificati per la predizione, dopo che sono stati usati per
1091  * costruire gli altri coefficienti */
1092  mp[0] /= dT;
1093  mp[1] /= dT;
1094 
1095  /* valori di ritorno */
1097  db0Algebraic = b[0][ALGEBRAIC];
1098 }
DriveOwner AlgebraicRho
Definition: stepsol.h:516
DriveOwner Rho
Definition: stepsol.h:515
doublereal mp[2]
Definition: stepsol.h:521
#define DEBUGCOUT(msg)
Definition: myassert.h:232
doublereal db0Differential
Definition: stepsol.h:235
doublereal dGet(const doublereal &dVar) const
Definition: drive.cc:664
doublereal db0Algebraic
Definition: stepsol.h:236
doublereal a[2][2]
Definition: stepsol.h:518
doublereal b[3][2]
Definition: stepsol.h:519
double doublereal
Definition: colamd.c:52
doublereal np[2]
Definition: stepsol.h:522

Here is the call graph for this function:

void MultistepSolver::SetDriveHandler ( const DriveHandler pDH)
protectedvirtual

Reimplemented from StepIntegrator.

Definition at line 1011 of file stepsol.cc.

References AlgebraicRho, DriveOwner::pGetDriveCaller(), Rho, and DriveCaller::SetDrvHdl().

1012 {
1013  Rho.pGetDriveCaller()->SetDrvHdl(pDH);
1015 }
DriveOwner AlgebraicRho
Definition: stepsol.h:516
DriveOwner Rho
Definition: stepsol.h:515
virtual void SetDrvHdl(const DriveHandler *pDH)
Definition: drive.cc:487
DriveCaller * pGetDriveCaller(void) const
Definition: drive.cc:658

Here is the call graph for this function:

Member Data Documentation

doublereal MultistepSolver::a[2][2]
protected

Definition at line 518 of file stepsol.h.

Referenced by dPredictState(), dPredState(), dPredStateAlg(), and SetCoef().

DriveOwner MultistepSolver::AlgebraicRho
protected

Definition at line 516 of file stepsol.h.

Referenced by SetCoef(), and SetDriveHandler().

doublereal MultistepSolver::b[3][2]
protected

Definition at line 519 of file stepsol.h.

Referenced by dPredictState(), dPredState(), dPredStateAlg(), and SetCoef().

doublereal MultistepSolver::mp[2]
protected

Definition at line 521 of file stepsol.h.

Referenced by dPredDer(), dPredDerAlg(), dPredictDerivative(), and SetCoef().

doublereal MultistepSolver::np[2]
protected

Definition at line 522 of file stepsol.h.

Referenced by dPredDer(), dPredDerAlg(), dPredictDerivative(), and SetCoef().

DriveOwner MultistepSolver::Rho
protected

Definition at line 515 of file stepsol.h.

Referenced by SetCoef(), and SetDriveHandler().


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