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

#include <stepsol.h>

Inheritance diagram for StepNIntegrator:
Collaboration diagram for StepNIntegrator:

Public Member Functions

 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)
 
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)=0
 
- Public Member Functions inherited from NonlinearProblem
virtual ~NonlinearProblem (void)
 

Public Attributes

doublereal db0Differential
 
doublereal db0Algebraic
 

Protected Member Functions

void UpdateDof (const int DCount, const DofOrder::Order Order, const VectorHandler *const pSol=0) const
 
virtual void SetCoef (doublereal dT, doublereal dAlpha, enum StepChange NewStep)=0
 
- 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
 

Additional Inherited Members

- Public Types inherited from StepIntegrator
enum  { DIFFERENTIAL = 0, ALGEBRAIC = 1 }
 
enum  StepChange { NEWSTEP, REPEATSTEP }
 
- 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
 

Detailed Description

Definition at line 231 of file stepsol.h.

Constructor & Destructor Documentation

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

Definition at line 446 of file stepsol.cc.

References NO_OP.

451 : ImplicitStepIntegrator(MaxIt, dT, dSolutionTol, stp, 1, bmod_res_test),
452 db0Differential(0.),
453 db0Algebraic(0.)
454 {
455  NO_OP;
456 }
ImplicitStepIntegrator(const integer MaxIt, const doublereal dT, const doublereal dSolutionTol, const integer stp, const integer sts, const bool bmod_res_test)
Definition: stepsol.cc:124
#define NO_OP
Definition: myassert.h:74
doublereal db0Differential
Definition: stepsol.h:235
doublereal db0Algebraic
Definition: stepsol.h:236
StepNIntegrator::~StepNIntegrator ( void  )
virtual

Definition at line 458 of file stepsol.cc.

References NO_OP.

459 {
460  NO_OP;
461 }
#define NO_OP
Definition: myassert.h:74

Member Function Documentation

void StepNIntegrator::Jacobian ( MatrixHandler pJac) const
virtual

Implements NonlinearProblem.

Definition at line 472 of file stepsol.cc.

References ASSERT, DataManager::AssJac(), DataManager::AssRes(), db0Differential, MatrixHandler::iGetNumCols(), MatrixHandler::iGetNumRows(), StepIntegrator::pDM, NaiveMatrixHandler::Reset(), Residual(), and Update().

473 {
474  ASSERT(pDM != NULL);
475  pDM->AssJac(*pJac, db0Differential);
476 
477 #ifdef MBDYN_FDJAC
478  // Finite difference check of Jacobian matrix
479  // Uncomment this whenever you need to debug your new Jacobian
480  // NOTE: might not be safe!
481  if (pDM->bFDJac()) {
482  NaiveMatrixHandler fdjac(pJac->iGetNumRows());
483  fdjac.Reset();
484  MyVectorHandler basesol(pJac->iGetNumRows());
485  MyVectorHandler incsol(pJac->iGetNumRows());
486  MyVectorHandler inc(pJac->iGetNumRows());
487  Residual(&basesol);
488  doublereal ddd = 0.001;
489  for (integer i = 1; i <= pJac->iGetNumRows(); i++) {
490  incsol.Reset();
491  inc.Reset();
492  inc.PutCoef(i, ddd);
493  Update(&inc);
494  // std::cerr << pXPrimeCurr->operator()(30) << std::endl;
495  pDM->AssRes(incsol, db0Differential);
496  inc.Reset();
497  inc.PutCoef(i, -ddd);
498  Update(&inc);
499  incsol -= basesol;
500  incsol *= (1./(-ddd));
501  for (integer j = 1; j <= pJac->iGetNumCols(); j++) {
502  fdjac.PutCoef(j, i, std::abs(incsol(j)) > 1.E-100 ? incsol(j) : 0.);
503  }
504  }
505 
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;
511  }
512 #endif // MBDYN_FDJAC
513 }
void Reset(void)
Definition: naivemh.cc:151
virtual integer iGetNumCols(void) const =0
virtual void AssRes(VectorHandler &ResHdl, doublereal dCoef)
Definition: elman.cc:498
DataManager * pDM
Definition: stepsol.h:93
virtual void AssJac(MatrixHandler &JacHdl, doublereal dCoef)
Definition: elman.cc:392
#define ASSERT(expression)
Definition: colamd.c:977
doublereal db0Differential
Definition: stepsol.h:235
virtual void Update(const VectorHandler *pSol) const
Definition: stepsol.cc:538
double doublereal
Definition: colamd.c:52
long int integer
Definition: colamd.c:51
virtual void Residual(VectorHandler *pRes) const
Definition: stepsol.cc:464
virtual integer iGetNumRows(void) const =0

Here is the call graph for this function:

void StepNIntegrator::Residual ( VectorHandler pRes) const
virtual

Implements NonlinearProblem.

Definition at line 464 of file stepsol.cc.

References ASSERT, DataManager::AssRes(), db0Differential, and StepIntegrator::pDM.

Referenced by Jacobian().

465 {
466  ASSERT(pDM != NULL);
467  pDM->AssRes(*pRes, db0Differential);
468 }
virtual void AssRes(VectorHandler &ResHdl, doublereal dCoef)
Definition: elman.cc:498
DataManager * pDM
Definition: stepsol.h:93
#define ASSERT(expression)
Definition: colamd.c:977
doublereal db0Differential
Definition: stepsol.h:235

Here is the call graph for this function:

virtual void StepNIntegrator::SetCoef ( doublereal  dT,
doublereal  dAlpha,
enum StepChange  NewStep 
)
protectedpure virtual
doublereal StepNIntegrator::TestScale ( const NonlinearSolverTest pTest,
doublereal dAlgebraicEqu 
) const
virtual

Reimplemented from ImplicitStepIntegrator.

Definition at line 547 of file stepsol.cc.

References db0Differential, and ImplicitStepIntegrator::TestScale().

548 {
549  const doublereal dDiffEqu = ImplicitStepIntegrator::TestScale(pTest, dAlgebraicEqu);
550  dAlgebraicEqu = db0Differential;
551 
552  return dDiffEqu;
553 }
virtual doublereal TestScale(const NonlinearSolverTest *pTest, doublereal &dCoef) const
Definition: stepsol.cc:210
doublereal db0Differential
Definition: stepsol.h:235
double doublereal
Definition: colamd.c:52

Here is the call graph for this function:

void StepNIntegrator::Update ( const VectorHandler pSol) const
virtual

Implements NonlinearProblem.

Definition at line 538 of file stepsol.cc.

References ASSERT, DEBUGCOUTFNAME, StepIntegrator::pDM, DataManager::Update(), UpdateDof(), and StepIntegrator::UpdateLoop().

Referenced by Jacobian().

539 {
540  DEBUGCOUTFNAME("StepNIntegrator::Update");
541  ASSERT(pDM != NULL);
542 
544  pDM->Update();
545 }
#define DEBUGCOUTFNAME(fname)
Definition: myassert.h:256
DataManager * pDM
Definition: stepsol.h:93
void UpdateDof(const int DCount, const DofOrder::Order Order, const VectorHandler *const pSol=0) const
Definition: stepsol.cc:516
#define ASSERT(expression)
Definition: colamd.c:977
virtual void Update(void) const
Definition: dataman2.cc:2511
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 StepNIntegrator::UpdateDof ( const int  DCount,
const DofOrder::Order  Order,
const VectorHandler *const  pSol = 0 
) const
protected

Definition at line 516 of file stepsol.cc.

References db0Algebraic, db0Differential, DofOrder::DIFFERENTIAL, VectorHandler::IncCoef(), ImplicitStepIntegrator::pXCurr, and ImplicitStepIntegrator::pXPrimeCurr.

Referenced by Update().

519 {
520  doublereal d = pSol->operator()(DCount);
521  if (Order == DofOrder::DIFFERENTIAL) {
522  pXPrimeCurr->IncCoef(DCount, d);
523 
524  /* Nota: b0Differential e b0Algebraic
525  * possono essere distinti;
526  * in ogni caso sono calcolati
527  * dalle funzioni di predizione
528  * e sono dati globali */
529  pXCurr->IncCoef(DCount, db0Differential*d);
530 
531  } else {
532  pXCurr->IncCoef(DCount, d);
533  pXPrimeCurr->IncCoef(DCount, db0Algebraic*d);
534  }
535 }
virtual void IncCoef(integer iRow, const doublereal &dCoef)=0
VectorHandler * pXPrimeCurr
Definition: stepsol.h:164
VectorHandler * pXCurr
Definition: stepsol.h:163
Order
Definition: shapefnc.h:42
doublereal db0Differential
Definition: stepsol.h:235
doublereal db0Algebraic
Definition: stepsol.h:236
double doublereal
Definition: colamd.c:52

Here is the call graph for this function:

Member Data Documentation


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