MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
precond.cc
Go to the documentation of this file.
1 /* $Header: /var/cvs/mbdyn/mbdyn/mbdyn-1.0/mbdyn/base/precond.cc,v 1.20 2017/01/12 14:46:10 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  *
34  * Copyright (C) 2003-2017
35  * Giuseppe Quaranta <quaranta@aero.polimi.it>
36  *
37  * classi che implementano la risoluzione del sistema nonlineare
38  */
39 
40 #include "mbconfig.h" /* This goes first in every *.c,*.cc file */
41 
42 #include "precond_.h"
43 
45 {
46  NO_OP;
47 }
48 
50 {
51  NO_OP;
52 }
53 
54 
55 void
57  SolutionManager* pSM) const
58 {
59  /*
60  * To be conservative, restore the existing vectors when done :)
61  */
62  doublereal *pdr = 0, *pds = 0;
63 
64  /*
65  * FIXME: what if they're null, but in general need be different?
66  *
67  * better do a
68 
69  bool bChangePointers(doublereal *newRhs, doublereal *newSol,
70  doublereal *&oldRhs, doublereal *&oldSol)
71 
72  * that, if both are needed does what expected, otherwise
73  * copies rhs in sol and uses only sol
74  */
75  if (pSM->pSolHdl() != pSM->pResHdl()) {
76  pdr = pSM->pdSetResVec(b.pdGetVec());
77  pds = pSM->pdSetSolVec(x.pdGetVec());
78 
79  } else {
80  x = b;
81  pdr = pSM->pdSetResVec(x.pdGetVec());
82  }
83 
84  pSM->Solve();
85 
86  (void)pSM->pdSetResVec(pdr);
87  if (pds != 0 && pds != pdr) {
88  (void)pSM->pdSetSolVec(pds);
89  }
90 }
91 
virtual VectorHandler * pResHdl(void) const =0
virtual ~Preconditioner(void)
Definition: precond.cc:44
virtual doublereal * pdGetVec(void) const =0
doublereal * pdSetSolVec(doublereal *pd)
Definition: solman.cc:101
~FullJacobianPr(void)
Definition: precond.cc:49
#define NO_OP
Definition: myassert.h:74
doublereal * pdSetResVec(doublereal *pd)
Definition: solman.cc:93
virtual void Solve(void)=0
void Precond(VectorHandler &b, VectorHandler &x, SolutionManager *pSM) const
Definition: precond.cc:56
virtual VectorHandler * pSolHdl(void) const =0
double doublereal
Definition: colamd.c:52