MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
NRTrim Class Reference
Collaboration diagram for NRTrim:

Public Member Functions

 NRTrim (IO &io, int n, double t)
 
 ~NRTrim (void)
 
int DoTrim (const std::vector< double > expectedMeasures, const std::vector< double > incrControls, std::vector< double > controls)
 

Private Attributes

IOio
 
ConvergenceCheckpcc
 

Detailed Description

Definition at line 465 of file trim.cc.

Constructor & Destructor Documentation

NRTrim::NRTrim ( IO io,
int  n,
double  t 
)

Definition at line 479 of file trim.cc.

References pcc.

480 : io(io),
481 pcc(0)
482 {
483  pcc = new FFDConvergenceCheck(n, t, .99);
484 }
ConvergenceCheck * pcc
Definition: trim.cc:468
IO & io
Definition: trim.cc:467
NRTrim::~NRTrim ( void  )
inline

Definition at line 472 of file trim.cc.

472 {};

Member Function Documentation

int NRTrim::DoTrim ( const std::vector< double >  expectedMeasures,
const std::vector< double >  incrControls,
std::vector< double >  controls 
)

Definition at line 487 of file trim.cc.

References c, ConvergenceCheck::Check(), IO::Controls(), TrimEval::FuncEval(), LinSol::GetSolutionManager(), io, IO::Measures(), pcc, SolutionManager::pMatHdl(), SolutionManager::pResHdl(), SolutionManager::pSolHdl(), VectorHandler::PutCoef(), MatrixHandler::PutCoef(), and SolutionManager::Solve().

Referenced by main().

490 {
491  TrimEval te(io, *pcc);
492  std::vector<double> Xref(incrControls.size()),
493  X(incrControls.size());
494  std::vector<double> Fref(expectedMeasures.size()),
495  F(expectedMeasures.size(), 0.);
496  LinSol LS;
497  SolutionManager *psm(LS.GetSolutionManager(expectedMeasures.size()));
498  MatrixHandler *pM = psm->pMatHdl();
499  VectorHandler *pR = psm->pResHdl();
500  VectorHandler *pX = psm->pSolHdl();
501 
502  if (expectedMeasures.size() != incrControls.size()) {
503  return -1;
504  }
505 
506  for (unsigned int i = 0; i < incrControls.size(); i++) {
507  Xref[i] = io.Controls()[i];
508  }
509 
510  for (unsigned int i = 0; i < expectedMeasures.size(); i++) {
511  Fref[i] = io.Measures()[i];
512  }
513 
514  for (unsigned int c = 0; c < incrControls.size(); c++) {
515  for (unsigned int i = 0; i < incrControls.size(); i++) {
516  X[i] = Xref[i];
517  }
518  X[c] += incrControls[c];
519 
520  te.FuncEval(X, F, 10, 1000);
521 
522  for (unsigned int i = 0; i < expectedMeasures.size(); i++) {
523  pM->PutCoef(i + 1, c + 1, F[i] - Fref[i]);
524  }
525  }
526 
527  while (!pcc->Check(io.Measures())) {
528  for (unsigned int i = 0; i < expectedMeasures.size(); i++) {
529  pR->PutCoef(i + 1, expectedMeasures[i] - Fref[i]);
530  }
531 
532  psm->Solve();
533 
534  for (unsigned int i = 0; i < incrControls.size(); i++) {
535  X[i] = Xref[i] + pX->operator()(i + 1);
536  Xref[i] = X[i];
537  }
538 
539  te.FuncEval(X, F, 10, 1000);
540 
541  for (unsigned int i = 0; i < expectedMeasures.size(); i++) {
542  Fref[i] = F[i];
543  }
544  }
545 
546  return 0;
547 }
virtual bool Check(const std::vector< double > &measures)=0
ConvergenceCheck * pcc
Definition: trim.cc:468
SolutionManager *const GetSolutionManager(integer iNLD, integer iLWS=0) const
Definition: linsol.cc:455
Definition: linsol.h:39
const std::vector< double > & Measures(void) const
Definition: trim.cc:177
virtual void PutCoef(integer iRow, integer iCol, const doublereal &dCoef)
Definition: mh.cc:384
virtual void PutCoef(integer iRow, const doublereal &dCoef)=0
static std::stack< cleanup * > c
Definition: cleanup.cc:59
std::vector< double > & Controls(void)
Definition: trim.cc:178
IO & io
Definition: trim.cc:467

Here is the call graph for this function:

Member Data Documentation

IO& NRTrim::io
private

Definition at line 467 of file trim.cc.

Referenced by DoTrim().

ConvergenceCheck* NRTrim::pcc
private

Definition at line 468 of file trim.cc.

Referenced by DoTrim(), and NRTrim().


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