MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
naivewrap.h
Go to the documentation of this file.
1 /* $Header: /var/cvs/mbdyn/mbdyn/mbdyn-1.0/libraries/libmbwrap/naivewrap.h,v 1.38 2017/01/12 14:44:25 masarati Exp $ */
2 /*
3  * MBDyn (C) is a multibody analysis code.
4  * http://www.mbdyn.org
5  *
6  * Copyright (C) 1996-2017
7  *
8  * Pierangelo Masarati <masarati@aero.polimi.it>
9  * Paolo Mantegazza <mantegazza@aero.polimi.it>
10  *
11  * Dipartimento di Ingegneria Aerospaziale - Politecnico di Milano
12  * via La Masa, 34 - 20156 Milano, Italy
13  * http://www.aero.polimi.it
14  *
15  * Changing this copyright notice is forbidden.
16  *
17  * This program is free software; you can redistribute it and/or modify
18  * it under the terms of the GNU General Public License as published by
19  * the Free Software Foundation (version 2 of the License).
20  *
21  *
22  * This program is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25  * GNU General Public License for more details.
26  *
27  * You should have received a copy of the GNU General Public License
28  * along with this program; if not, write to the Free Software
29  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
30  */
31 
32 /*
33  * The Naive Solver is copyright (C) 2004 by
34  * Paolo Mantegazza <mantegazza@aero.polimi.it>
35  */
36 
37 #ifndef NaiveSolutionManager_hh
38 #define NaiveSolutionManager_hh
39 
40 #include <iostream>
41 #include <vector>
42 
43 #include "myassert.h"
44 #include "mynewmem.h"
45 #include "ls.h"
46 #include "solman.h"
47 #include "naivemh.h"
48 #include "dgeequ.h"
49 
50 /* NaiveSolver - begin */
51 
52 class NaiveSolver: public LinearSolver {
53 private:
56  mutable std::vector<integer> piv;
58 
59  void Factor(void) throw(LinearSolver::ErrFactor);
60 
61 public:
62  NaiveSolver(const integer &size, const doublereal &dMP,
63  NaiveMatrixHandler *const a = 0);
64  ~NaiveSolver(void);
65 
66  void SetMat(NaiveMatrixHandler *const a);
67  void Reset(void);
68  void Solve(void) const;
69 };
70 
71 /* NaiveSolver - end */
72 
73 /* NaiveSparseSolutionManager - begin */
74 
76 protected:
79 
82 
83  template <class MH>
84  void ScaleMatrixAndRightHandSide(MH& mh);
85 
86  template <typename MH>
87  MatrixScale<MH>& GetMatrixScale();
88 
89  void ScaleSolution(void);
90 
91 public:
93  const doublereal dMP = 1.e-9,
94  const ScaleOpt& scale = ScaleOpt());
95  virtual ~NaiveSparseSolutionManager(void);
96 #ifdef DEBUG
97  virtual void IsValid(void) const {
98  NO_OP;
99  };
100 #endif /* DEBUG */
101 
102  /* Inizializzatore generico */
103  virtual void MatrReset(void);
104 
105  /* Risolve il sistema Backward Substitution; fattorizza se necessario */
106  virtual void Solve(void);
107 
108  /* Rende disponibile l'handler per la matrice */
109  virtual MatrixHandler* pMatHdl(void) const;
110 
111  /* Rende disponibile l'handler per il termine noto */
112  virtual MyVectorHandler* pResHdl(void) const;
113 
114  /* Rende disponibile l'handler per la soluzione */
115  virtual MyVectorHandler* pSolHdl(void) const;
116 };
117 
118 /* NaiveSparseSolutionManager - end */
119 
120 
121 /* NaiveSparsePermSolutionManager - begin */
122 
123 template<class T>
125 private:
128 
129  void ComputePermutation(void);
130  void BackPerm(void);
131 
132 protected:
133  enum {
136  PERM_READY
137  } ePermState;
138 
139  mutable std::vector<integer> perm;
140  mutable std::vector<integer> invperm;
141 
142  virtual void MatrReset(void);
143 
144 public:
146  const doublereal dMP = 1.e-9,
147  const ScaleOpt& scale = ScaleOpt());
148  virtual ~NaiveSparsePermSolutionManager(void);
149 
150  /* Risolve il sistema Backward Substitution; fattorizza se necessario */
151  virtual void Solve(void);
152 
153  /* Inizializzatore "speciale" */
154  virtual void MatrInitialize(void);
155 };
156 
157 // class NaiveSparseCuthillMcKeePermSolutionManager: public NaiveSparseSolutionManager {
158 // private:
159 // const doublereal dMinPiv;
160 // mutable MyVectorHandler TmpH;
161 //
162 // void ComputePermutation();
163 // void BackPerm();
164 //
165 // protected:
166 // enum {
167 // PERM_NO,
168 // PERM_INTERMEDIATE,
169 // PERM_READY
170 // } ePermState;
171 //
172 // mutable std::vector<integer> perm;
173 // mutable std::vector<integer> invperm;
174 //
175 // virtual void MatrReset(void);
176 //
177 // public:
178 // NaiveSparseCuthillMcKeePermSolutionManager(const integer Dim, const doublereal dMP = 1.e-9);
179 // virtual ~NaiveSparseCuthillMcKeePermSolutionManager(void);
180 //
181 // /* Risolve il sistema Backward Substitution; fattorizza se necessario */
182 // virtual void Solve(void);
183 //
184 // /* Inizializzatore "speciale" */
185 // virtual void MatrInitialize(void);
186 // };
187 
188 /* NaiveSparsePermSolutionManager - end */
189 
190 
191 // supported permutations
192 class Colamd_ordering;
193 // #ifdef USE_BOOST
194 class rcmk_ordering;
195 class king_ordering;
196 class sloan_ordering;
197 class md_ordering;
198 // #endif USE_BOOST
199 // #ifdef USE_METIS
200 class metis_ordering;
201 // #endif USE_METIS
202 // #ifdef HAVE_UMFPACK
203 class amd_ordering;
204 // #endif
205 
206 
207 #endif // NaiveSolutionManager_hh
208 
MatrixScaleBase * pMatScale
Definition: naivewrap.h:81
void SetMat(NaiveMatrixHandler *const a)
Definition: naivewrap.cc:69
MyVectorHandler VH
Definition: naivewrap.h:78
#define NO_OP
Definition: myassert.h:74
const doublereal dMinPiv
Definition: naivewrap.h:126
void Reset(void)
Definition: naivewrap.cc:75
std::vector< integer > invperm
Definition: naivewrap.h:140
NaiveMatrixHandler * A
Definition: naivewrap.h:57
doublereal dMinPiv
Definition: naivewrap.h:55
NaiveMatrixHandler * A
Definition: naivewrap.h:77
void Factor(void)
Definition: naivewrap.cc:109
std::vector< integer > piv
Definition: naivewrap.h:56
void Solve(void) const
Definition: naivewrap.cc:81
static const doublereal a
Definition: hfluid_.h:289
double doublereal
Definition: colamd.c:52
long int integer
Definition: colamd.c:51
std::vector< integer > perm
Definition: naivewrap.h:139
integer iSize
Definition: naivewrap.h:54