MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
NaiveSparsePermSolutionManager< T > Class Template Reference

#include <naivewrap.h>

Inheritance diagram for NaiveSparsePermSolutionManager< T >:
Collaboration diagram for NaiveSparsePermSolutionManager< T >:

Public Member Functions

 NaiveSparsePermSolutionManager (const integer Dim, const doublereal dMP=1.e-9, const ScaleOpt &scale=ScaleOpt())
 
virtual ~NaiveSparsePermSolutionManager (void)
 
virtual void Solve (void)
 
virtual void MatrInitialize (void)
 
- Public Member Functions inherited from NaiveSparseSolutionManager
 NaiveSparseSolutionManager (const integer Dim, const doublereal dMP=1.e-9, const ScaleOpt &scale=ScaleOpt())
 
virtual ~NaiveSparseSolutionManager (void)
 
virtual MatrixHandlerpMatHdl (void) const
 
virtual MyVectorHandlerpResHdl (void) const
 
virtual MyVectorHandlerpSolHdl (void) const
 
- Public Member Functions inherited from SolutionManager
 SolutionManager (void)
 
virtual ~SolutionManager (void)
 
virtual void LinkToSolution (VectorHandler &XCurr, VectorHandler &XPrimeCurr)
 
virtual void SolveT (void)
 
doublerealpdSetResVec (doublereal *pd)
 
doublerealpdSetSolVec (doublereal *pd)
 
bool bGetConditionNumber (doublereal &dCond) const
 

Protected Types

enum  { PERM_NO, PERM_INTERMEDIATE, PERM_READY }
 

Protected Member Functions

virtual void MatrReset (void)
 
- Protected Member Functions inherited from NaiveSparseSolutionManager
template<class MH >
void ScaleMatrixAndRightHandSide (MH &mh)
 
template<typename MH >
MatrixScale< MH > & GetMatrixScale ()
 
void ScaleSolution (void)
 

Protected Attributes

enum
NaiveSparsePermSolutionManager:: { ... }  
ePermState
 
std::vector< integerperm
 
std::vector< integerinvperm
 
- Protected Attributes inherited from NaiveSparseSolutionManager
NaiveMatrixHandlerA
 
MyVectorHandler VH
 
ScaleOpt scale
 
MatrixScaleBasepMatScale
 
- Protected Attributes inherited from SolutionManager
LinearSolverpLS
 

Private Member Functions

void ComputePermutation (void)
 
void BackPerm (void)
 
template<>
void ComputePermutation (void)
 

Private Attributes

const doublereal dMinPiv
 
MyVectorHandler TmpH
 

Additional Inherited Members

- Public Types inherited from SolutionManager
enum  ScaleWhen { SCALEW_NEVER = 0, SCALEW_ONCE, SCALEW_ALWAYS }
 
enum  ScaleAlgorithm {
  SCALEA_NONE, SCALEA_UNDEF, SCALEA_ROW_MAX, SCALEA_ROW_SUM,
  SCALEA_COL_MAX, SCALEA_COL_SUM, SCALEA_LAPACK, SCALEA_ITERATIVE,
  SCALEA_ROW_MAX_COL_MAX
}
 
enum  ScaleFlags {
  SCALEF_DEFAULT = 0x0u, SCALEF_WARN = 0x1u, SCALEF_VERBOSE = 0x2u, SCALEF_COND_NUM_1 = 0x4u,
  SCALEF_COND_NUM_INF = 0x8u, SCALEF_COND_NUM = SCALEF_COND_NUM_1 | SCALEF_COND_NUM_INF
}
 

Detailed Description

template<class T>
class NaiveSparsePermSolutionManager< T >

Definition at line 124 of file naivewrap.h.

Member Enumeration Documentation

template<class T>
anonymous enum
protected
Enumerator
PERM_NO 
PERM_INTERMEDIATE 
PERM_READY 

Definition at line 133 of file naivewrap.h.

Constructor & Destructor Documentation

template<class T >
NaiveSparsePermSolutionManager< T >::NaiveSparsePermSolutionManager ( const integer  Dim,
const doublereal  dMP = 1.e-9,
const ScaleOpt scale = ScaleOpt() 
)

Definition at line 281 of file naivewrap.cc.

References NaiveSparseSolutionManager::A, NaiveSparsePermSolutionManager< T >::invperm, NaiveSparsePermSolutionManager< T >::MatrInitialize(), NaivePermMatrixHandler::NaivePermMatrixHandler(), NaiveSparsePermSolutionManager< T >::perm, SolutionManager::pLS, SAFEDELETE, and SAFENEWWITHCONSTRUCTOR.

285 : NaiveSparseSolutionManager(Dim, dMP, scale),
286 dMinPiv(dMP < 0 ? 0 : dMP),
287 TmpH(Dim),
289 {
290  perm.resize(Dim, 0);
291  invperm.resize(Dim, 0);
292 
293  // replace matrix handler
294  SAFEDELETE(A);
295  A = 0;
298 
299  dynamic_cast<NaiveSolver *>(pLS)->SetMat(A);
300 
301  MatrInitialize();
302 }
virtual void MatrInitialize(void)
Definition: naivewrap.cc:371
const doublereal dMinPiv
Definition: naivewrap.h:126
std::vector< integer > invperm
Definition: naivewrap.h:140
NaiveSparseSolutionManager(const integer Dim, const doublereal dMP=1.e-9, const ScaleOpt &scale=ScaleOpt())
Definition: naivewrap.cc:151
NaiveMatrixHandler * A
Definition: naivewrap.h:77
#define SAFENEWWITHCONSTRUCTOR(pnt, item, constructor)
Definition: mynewmem.h:698
LinearSolver * pLS
Definition: solman.h:151
enum NaiveSparsePermSolutionManager::@18 ePermState
std::vector< integer > perm
Definition: naivewrap.h:139
#define SAFEDELETE(pnt)
Definition: mynewmem.h:710

Here is the call graph for this function:

template<class T >
NaiveSparsePermSolutionManager< T >::~NaiveSparsePermSolutionManager ( void  )
virtual

Definition at line 305 of file naivewrap.cc.

References NO_OP.

306 {
307  NO_OP;
308 }
#define NO_OP
Definition: myassert.h:74

Member Function Documentation

template<class T >
void NaiveSparsePermSolutionManager< T >::BackPerm ( void  )
private

Definition at line 323 of file naivewrap.cc.

References ASSERT, and NaivePermMatrixHandler::invperm.

324 {
325  /* NOTE: use whatever is stored in pLS - someone could
326  * trick us into using its memory */
327  doublereal *pd = pLS->pdGetResVec();
328 
329  ASSERT(pd != TmpH.pdGetVec());
330 
331  for (integer i = 0; i < A->iGetNumCols(); i++) {
332  pd[invperm[i]] = TmpH(i + 1);
333  }
334 }
integer iGetNumCols(void) const
Definition: naivemh.h:115
std::vector< integer > invperm
Definition: naivewrap.h:140
NaiveMatrixHandler * A
Definition: naivewrap.h:77
#define ASSERT(expression)
Definition: colamd.c:977
doublereal * pdGetResVec(void) const
Definition: ls.cc:88
LinearSolver * pLS
Definition: solman.h:151
double doublereal
Definition: colamd.c:52
virtual doublereal * pdGetVec(void) const
Definition: vh.h:245
long int integer
Definition: colamd.c:51
template<class T>
void NaiveSparsePermSolutionManager< T >::ComputePermutation ( void  )
private
template<>
void NaiveSparsePermSolutionManager< Colamd_ordering >::ComputePermutation ( void  )
private

Definition at line 390 of file naivewrap.cc.

References COLAMD_KNOBS, COLAMD_STATS, NaivePermMatrixHandler::invperm, mbdyn_colamd(), mbdyn_colamd_recommended(), mbdyn_colamd_set_defaults(), MBDYN_EXCEPT_ARGS, and NaivePermMatrixHandler::perm.

391 {
392  std::vector<integer> Ai;
393  A->MakeCCStructure(Ai, invperm);
394  doublereal knobs[COLAMD_KNOBS];
395  integer stats[COLAMD_STATS];
396  integer Alen = mbdyn_colamd_recommended(Ai.size(), A->iGetNumRows(),
397  A->iGetNumCols());
398  Ai.resize(Alen);
400  if (!mbdyn_colamd(A->iGetNumRows(), A->iGetNumCols(), Alen,
401  &Ai[0], &invperm[0], knobs, stats))
402  {
403  silent_cerr("colamd permutation failed" << std::endl);
405  }
406  for (integer i = 0; i < A->iGetNumRows(); i++) {
407  perm[invperm[i]] = i;
408  }
410 }
integer iGetNumRows(void) const
Definition: naivemh.h:111
#define MBDYN_EXCEPT_ARGS
Definition: except.h:63
integer iGetNumCols(void) const
Definition: naivemh.h:115
void mbdyn_colamd_set_defaults(double knobs[20])
Definition: colamd.c:1038
#define COLAMD_STATS
Definition: colamd.h:117
std::vector< integer > invperm
Definition: naivewrap.h:140
#define COLAMD_KNOBS
Definition: colamd.h:114
integer mbdyn_colamd_recommended(integer nnz, integer n_row, integer n_col)
Definition: colamd.c:1004
integer mbdyn_colamd(integer n_row, integer n_col, integer Alen, integer A[], integer p[], double knobs[20], integer stats[20])
Definition: colamd.c:1411
NaiveMatrixHandler * A
Definition: naivewrap.h:77
void MakeCCStructure(std::vector< integer > &Ai, std::vector< integer > &Ap)
Definition: naivemh.cc:353
double doublereal
Definition: colamd.c:52
long int integer
Definition: colamd.c:51
enum NaiveSparsePermSolutionManager::@18 ePermState
std::vector< integer > perm
Definition: naivewrap.h:139

Here is the call graph for this function:

template<class T >
void NaiveSparsePermSolutionManager< T >::MatrInitialize ( void  )
virtual

Reimplemented from SolutionManager.

Definition at line 371 of file naivewrap.cc.

References NaivePermMatrixHandler::invperm, and NaivePermMatrixHandler::perm.

Referenced by NaiveSparsePermSolutionManager< T >::NaiveSparsePermSolutionManager().

372 {
374  for (integer i = 0; i < A->iGetNumRows(); i++) {
375  perm[i] = i;
376  invperm[i] = i;
377  }
378 
379  MatrReset();
380 }
integer iGetNumRows(void) const
Definition: naivemh.h:111
virtual void MatrReset(void)
Definition: naivewrap.cc:312
std::vector< integer > invperm
Definition: naivewrap.h:140
NaiveMatrixHandler * A
Definition: naivewrap.h:77
long int integer
Definition: colamd.c:51
enum NaiveSparsePermSolutionManager::@18 ePermState
std::vector< integer > perm
Definition: naivewrap.h:139
template<class T >
void NaiveSparsePermSolutionManager< T >::MatrReset ( void  )
protectedvirtual

Reimplemented from NaiveSparseSolutionManager.

Definition at line 312 of file naivewrap.cc.

References NaiveSparseSolutionManager::MatrReset().

Here is the call graph for this function:

template<class T >
void NaiveSparsePermSolutionManager< T >::Solve ( void  )
virtual

Reimplemented from NaiveSparseSolutionManager.

Definition at line 340 of file naivewrap.cc.

References ASSERT.

341 {
342  doublereal *pd = 0;
343 
344  // Will throw std::bad_cast if the data type does not match
345  ScaleMatrixAndRightHandSide(dynamic_cast<NaivePermMatrixHandler&>(*A));
346 
347  if (ePermState == PERM_NO) {
349 
350  } else if (ePermState == PERM_READY) {
351  /* We need to use local storage to allow BackPerm();
352  * save and restore original pointer */
353  pd = pLS->pdSetSolVec(TmpH.pdGetVec());
354  }
355 
356  pLS->Solve();
357 
358  if (ePermState == PERM_READY) {
359  BackPerm();
360 
361  ASSERT(pd != 0);
362  pLS->pdSetSolVec(pd);
363  }
364 
365  ScaleSolution();
366 }
void ScaleMatrixAndRightHandSide(MH &mh)
Definition: naivewrap.cc:199
doublereal * pdSetSolVec(doublereal *pd)
Definition: ls.cc:113
NaiveMatrixHandler * A
Definition: naivewrap.h:77
#define ASSERT(expression)
Definition: colamd.c:977
virtual void Solve(void) const =0
LinearSolver * pLS
Definition: solman.h:151
double doublereal
Definition: colamd.c:52
virtual doublereal * pdGetVec(void) const
Definition: vh.h:245
enum NaiveSparsePermSolutionManager::@18 ePermState

Member Data Documentation

template<class T>
const doublereal NaiveSparsePermSolutionManager< T >::dMinPiv
private

Definition at line 126 of file naivewrap.h.

enum { ... } NaiveSparsePermSolutionManager< T >::ePermState
template<class T>
std::vector<integer> NaiveSparsePermSolutionManager< T >::invperm
mutableprotected
template<class T>
std::vector<integer> NaiveSparsePermSolutionManager< T >::perm
mutableprotected
template<class T>
MyVectorHandler NaiveSparsePermSolutionManager< T >::TmpH
mutableprivate

Definition at line 127 of file naivewrap.h.


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