MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
body_vm.h
Go to the documentation of this file.
1 /* $Header: /var/cvs/mbdyn/mbdyn/mbdyn-1.0/mbdyn/struct/body_vm.h,v 1.7 2017/01/12 14:46:43 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 /* elementi di massa, tipo: Elem::Type BODY */
33 
34 #ifndef BODY_VM_H
35 #define BODY_VM_H
36 
37 /* include per derivazione della classe */
38 
39 #include "elem.h"
40 #include "strnode.h"
41 #include "gravity.h"
42 
43 /* VariableBody - begin */
44 
45 class VariableBody :
46 virtual public Elem, public ElemGravityOwner, public InitialAssemblyElem {
47 protected:
48  const StructNode *pNode;
49 
54 
55  mutable doublereal dMTmp;
56  mutable Vec3 STmp;
57  mutable Mat3x3 JTmp;
58 
59  /* momento statico */
60  Vec3 GetS_int(void) const;
61 
62  /* momento d'inerzia */
63  Mat3x3 GetJ_int(void) const;
64 
65  void
67 
68  void
72  const doublereal& dCoef,
73  const Vec3& Sc);
74 
75 public:
76  /* Costruttore definitivo (da mettere a punto) */
77  VariableBody(unsigned int uL, const StructNode *pNode,
78  const DriveCaller *pDCMass,
79  const TplDriveCaller<Vec3> *pDCXgc,
80  const TplDriveCaller<Mat3x3> *pDCJgc_vm,
81  const TplDriveCaller<Mat3x3> *pDCJgc_vg,
82  flag fOut);
83 
84  virtual ~VariableBody(void);
85 
86  /* Scrive il contributo dell'elemento al file di restart */
87  virtual std::ostream& Restart(std::ostream& out) const;
88 
89  /* massa totale */
90  doublereal dGetM(void) const;
91 
92  /* momento statico */
93  Vec3 GetS(void) const;
94 
95  /* momento d'inerzia */
96  Mat3x3 GetJ(void) const;
97 
98  /* nodo */
99  const StructNode *pGetNode(void) const;
100 
101  /* Tipo dell'elemento (usato solo per debug ecc.) */
102  virtual Elem::Type GetElemType(void) const {
103  return Elem::BODY;
104  };
105 
106  /* Numero gdl durante l'assemblaggio iniziale */
107  virtual unsigned int iGetInitialNumDof(void) const {
108  return 0;
109  };
110 
111  virtual void AfterPredict(VectorHandler& X, VectorHandler& XP);
112 
113  /* Accesso ai dati privati */
114  virtual unsigned int iGetNumPrivData(void) const;
115  virtual unsigned int iGetPrivDataIdx(const char *s) const;
116  virtual doublereal dGetPrivData(unsigned int i) const;
117 };
118 
119 /* VariableBody - end */
120 
121 /* DynamicVariableBody - begin */
122 
124 virtual public Elem, public VariableBody {
125 private:
126 
127  Vec3 GetB_int(void) const;
128  Vec3 GetG_int(void) const;
129 
130  /* Assembla le due matrici necessarie per il calcolo degli
131  * autovalori e per lo jacobiano */
132  void AssMats(FullSubMatrixHandler& WorkMatA,
133  FullSubMatrixHandler& WorkMatB,
134  doublereal dCoef,
135  bool bGravity,
136  const Vec3& GravityAcceleration);
137 
138 public:
139  /* Costruttore definitivo (da mettere a punto) */
140  DynamicVariableBody(unsigned int uL, const DynamicStructNode* pNodeTmp,
141  const DriveCaller *pDCMass,
142  const TplDriveCaller<Vec3> *pDCXgc,
143  const TplDriveCaller<Mat3x3> *pDCJgc_vm,
144  const TplDriveCaller<Mat3x3> *pDCJgc_vg,
145  flag fOut);
146 
147  virtual ~DynamicVariableBody(void);
148 
149  void WorkSpaceDim(integer* piNumRows, integer* piNumCols) const {
150  *piNumRows = 12;
151  *piNumCols = 6;
152  };
153 
154  virtual VariableSubMatrixHandler&
156  doublereal dCoef,
157  const VectorHandler& XCurr,
158  const VectorHandler& XPrimeCurr);
159 
160  void AssMats(VariableSubMatrixHandler& WorkMatA,
161  VariableSubMatrixHandler& WorkMatB,
162  const VectorHandler& XCurr,
163  const VectorHandler& XPrimeCurr);
164 
165  virtual SubVectorHandler&
166  AssRes(SubVectorHandler& WorkVec,
167  doublereal dCoef,
168  const VectorHandler& XCurr,
169  const VectorHandler& XPrimeCurr);
170 
171  /* Dimensione del workspace durante l'assemblaggio iniziale.
172  * Occorre tener conto del numero di dof che l'elemento definisce
173  * in questa fase e dei dof dei nodi che vengono utilizzati.
174  * Sono considerati dof indipendenti la posizione e la velocita'
175  * dei nodi */
176  virtual void
177  InitialWorkSpaceDim(integer* piNumRows, integer* piNumCols) const {
178  *piNumRows = 12;
179  *piNumCols = 6;
180  };
181 
182  /* Contributo allo jacobiano durante l'assemblaggio iniziale */
183  virtual VariableSubMatrixHandler&
185  const VectorHandler& XCurr);
186 
187  /* Contributo al residuo durante l'assemblaggio iniziale */
188  virtual SubVectorHandler&
189  InitialAssRes(SubVectorHandler& WorkVec, const VectorHandler& XCurr);
190 
191  /* Usata per inizializzare la quantita' di moto */
192  virtual void SetValue(DataManager *pDM,
194  SimulationEntity::Hints *ph = 0);
195 
196  /******** PER IL SOLUTORE PARALLELO *********/
197  /* Fornisce il tipo e la label dei nodi che sono connessi all'elemento
198  * utile per l'assemblaggio della matrice di connessione fra i dofs */
199  virtual void
200  GetConnectedNodes(std::vector<const Node *>& connectedNodes) const {
201  connectedNodes.resize(1);
202  connectedNodes[0] = pNode;
203  };
204  /**************************************************/
205 };
206 
207 /* DynamicVariableBody - end */
208 
209 /* StaticVariableBody - begin */
210 
212 virtual public Elem, public VariableBody {
213 private:
214  /* Assembla le due matrici necessarie per il calcolo degli
215  * autovalori e per lo jacobiano */
216  bool AssMats(FullSubMatrixHandler& WorkMatA,
217  FullSubMatrixHandler& WorkMatB,
218  doublereal dCoef);
219 
220 public:
221  /* Costruttore definitivo (da mettere a punto) */
222  StaticVariableBody(unsigned int uL, const StaticStructNode* pNode,
223  const DriveCaller *pDCMass,
224  const TplDriveCaller<Vec3> *pDCXgc,
225  const TplDriveCaller<Mat3x3> *pDCJgc_vm,
226  const TplDriveCaller<Mat3x3> *pDCJgc_vg,
227  flag fOut);
228 
229  virtual ~StaticVariableBody(void);
230 
231  void WorkSpaceDim(integer* piNumRows, integer* piNumCols) const {
232  *piNumRows = 6;
233  *piNumCols = 6;
234  };
235 
236  virtual VariableSubMatrixHandler&
238  doublereal dCoef,
239  const VectorHandler& XCurr,
240  const VectorHandler& XPrimeCurr);
241 
242  void AssMats(VariableSubMatrixHandler& WorkMatA,
243  VariableSubMatrixHandler& WorkMatB,
244  const VectorHandler& XCurr,
245  const VectorHandler& XPrimeCurr);
246 
247  virtual SubVectorHandler&
248  AssRes(SubVectorHandler& WorkVec,
249  doublereal dCoef,
250  const VectorHandler& XCurr,
251  const VectorHandler& XPrimeCurr);
252 
253  /* inverse dynamics capable element */
254  virtual bool bInverseDynamics(void) const;
255 
256  /* Inverse Dynamics: */
257  virtual SubVectorHandler&
258  AssRes(SubVectorHandler& WorkVec,
259  const VectorHandler& /* XCurr */ ,
260  const VectorHandler& /* XPrimeCurr */ ,
261  const VectorHandler& /* XPrimePrimeCurr */ ,
263 
264  /* Dimensione del workspace durante l'assemblaggio iniziale.
265  * Occorre tener conto del numero di dof che l'elemento definisce
266  * in questa fase e dei dof dei nodi che vengono utilizzati.
267  * Sono considerati dof indipendenti la posizione e la velocita'
268  * dei nodi */
269  virtual void
270  InitialWorkSpaceDim(integer* piNumRows, integer* piNumCols) const {
271  *piNumRows = 6;
272  *piNumCols = 6;
273  };
274 
275  /* Contributo allo jacobiano durante l'assemblaggio iniziale */
276  virtual VariableSubMatrixHandler&
278  const VectorHandler& XCurr);
279 
280  /* Contributo al residuo durante l'assemblaggio iniziale */
281  virtual SubVectorHandler&
282  InitialAssRes(SubVectorHandler& WorkVec, const VectorHandler& XCurr);
283 
284  /* Usata per inizializzare la quantita' di moto */
285  virtual void SetValue(DataManager *pDM,
287  SimulationEntity::Hints *ph = 0);
288 
289  /******** PER IL SOLUTORE PARALLELO *********/
290  /* Fornisce il tipo e la label dei nodi che sono connessi all'elemento
291  * utile per l'assemblaggio della matrice di connessione fra i dofs */
292  virtual void
293  GetConnectedNodes(std::vector<const Node *>& connectedNodes) const {
294  connectedNodes.resize(1);
295  connectedNodes[0] = pNode;
296  };
297  /**************************************************/
298 };
299 
300 extern Elem*
301 ReadVariableBody(DataManager* pDM, MBDynParser& HP, unsigned int uLabel,
302  const StructNode* pStrNode);
303 
304 /* StaticVariableBody - end */
305 
306 class DataManager;
307 class MBDynParser;
308 
309 #endif /* BODY_VM_H */
310 
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: body_vm.h:177
virtual ~StaticVariableBody(void)
Definition: body_vm.cc:754
long int flag
Definition: mbdyn.h:43
virtual ~VariableBody(void)
Definition: body_vm.cc:65
Definition: matvec3.h:98
DriveOwner m_Mass
Definition: body_vm.h:50
Mat3x3 JTmp
Definition: body_vm.h:57
virtual doublereal dGetPrivData(unsigned int i) const
Definition: body_vm.cc:167
void AssMatsRBK_int(FullSubMatrixHandler &WMA, FullSubMatrixHandler &WMB, const doublereal &dCoef, const Vec3 &Sc)
Definition: body_vm.cc:239
void AssVecRBK_int(SubVectorHandler &WorkVec)
Definition: body_vm.cc:197
Vec3 GetS_int(void) const
Definition: body_vm.cc:73
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
Definition: body_vm.cc:630
TplDriveOwner< Mat3x3 > m_Jgc_vm
Definition: body_vm.h:52
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
Definition: body_vm.cc:984
std::vector< Hint * > Hints
Definition: simentity.h:89
virtual void GetConnectedNodes(std::vector< const Node * > &connectedNodes) const
Definition: body_vm.h:293
Mat3x3 GetJ(void) const
Definition: body_vm.cc:131
Mat3x3 GetJ_int(void) const
Definition: body_vm.cc:81
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: body_vm.cc:491
doublereal dMTmp
Definition: body_vm.h:55
Vec3 GetB_int(void) const
Definition: body_vm.cc:709
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: body_vm.cc:874
bool AssMats(FullSubMatrixHandler &WorkMatA, FullSubMatrixHandler &WorkMatB, doublereal dCoef)
Definition: body_vm.cc:838
VariableBody(unsigned int uL, const StructNode *pNode, const DriveCaller *pDCMass, const TplDriveCaller< Vec3 > *pDCXgc, const TplDriveCaller< Mat3x3 > *pDCJgc_vm, const TplDriveCaller< Mat3x3 > *pDCJgc_vg, flag fOut)
Definition: body_vm.cc:43
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: body_vm.cc:761
TplDriveOwner< Mat3x3 > m_Jgc_vg
Definition: body_vm.h:53
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
Definition: body_vm.cc:997
Elem * ReadVariableBody(DataManager *pDM, MBDynParser &HP, unsigned int uLabel, const StructNode *pStrNode)
Definition: body_vm.cc:1022
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
Definition: body_vm.cc:1010
void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: body_vm.h:149
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
Definition: body_vm.cc:561
virtual unsigned int iGetInitialNumDof(void) const
Definition: body_vm.h:107
virtual void AfterPredict(VectorHandler &X, VectorHandler &XP)
Definition: body_vm.cc:105
DynamicVariableBody(unsigned int uL, const DynamicStructNode *pNodeTmp, const DriveCaller *pDCMass, const TplDriveCaller< Vec3 > *pDCXgc, const TplDriveCaller< Mat3x3 > *pDCJgc_vm, const TplDriveCaller< Mat3x3 > *pDCJgc_vg, flag fOut)
Definition: body_vm.cc:313
virtual bool bInverseDynamics(void) const
Definition: body_vm.cc:924
virtual ~DynamicVariableBody(void)
Definition: body_vm.cc:328
Vec3 GetG_int(void) const
Definition: body_vm.cc:721
Vec3 GetS(void) const
Definition: body_vm.cc:124
Vec3 STmp
Definition: body_vm.h:56
void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: body_vm.h:231
TplDriveOwner< Vec3 > m_Xgc
Definition: body_vm.h:51
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: body_vm.cc:335
Definition: elem.h:75
const StructNode * pNode
Definition: body_vm.h:48
Type
Definition: elem.h:91
virtual std::ostream & Restart(std::ostream &out) const
Definition: body_vm.cc:92
virtual unsigned int iGetPrivDataIdx(const char *s) const
Definition: body_vm.cc:151
virtual Elem::Type GetElemType(void) const
Definition: body_vm.h:102
doublereal dGetM(void) const
Definition: body_vm.cc:117
virtual unsigned int iGetNumPrivData(void) const
Definition: body_vm.cc:145
void AssMats(FullSubMatrixHandler &WorkMatA, FullSubMatrixHandler &WorkMatB, doublereal dCoef, bool bGravity, const Vec3 &GravityAcceleration)
Definition: body_vm.cc:438
StaticVariableBody(unsigned int uL, const StaticStructNode *pNode, const DriveCaller *pDCMass, const TplDriveCaller< Vec3 > *pDCXgc, const TplDriveCaller< Mat3x3 > *pDCJgc_vm, const TplDriveCaller< Mat3x3 > *pDCJgc_vg, flag fOut)
Definition: body_vm.cc:739
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: body_vm.h:270
double doublereal
Definition: colamd.c:52
long int integer
Definition: colamd.c:51
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
Definition: body_vm.cc:686
virtual void GetConnectedNodes(std::vector< const Node * > &connectedNodes) const
Definition: body_vm.h:200
const StructNode * pGetNode(void) const
Definition: body_vm.cc:138