MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
univj.h
Go to the documentation of this file.
1 /* $Header: /var/cvs/mbdyn/mbdyn/mbdyn-1.0/mbdyn/struct/univj.h,v 1.27 2017/01/12 14:46:44 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 /* Giunti universali */
33 
34 
35 #ifndef UNIVJ_H
36 #define UNIVJ_H
37 
38 #include "joint.h"
39 
40 
41 /* UniversalHingeJoint - begin */
42 
43 class UniversalHingeJoint : virtual public Elem, public Joint {
44 private:
45  /* Giunto universale: l'asse 3 del primo nodo e l'asse 2 del secondo nodo
46  * rimangono ortogonali (giunto cardanico)
47  * I vettori F, M esprimono le reazioni vincolari di forza e coppia. */
56 
57 public:
58  /* Costruttore non banale */
59  UniversalHingeJoint(unsigned int uL, const DofOwner* pDO,
60  const StructNode* pN1, const StructNode* pN2,
61  const Vec3& dTmp1, const Vec3& dTmp2,
62  const Mat3x3& R1hTmp, const Mat3x3& R2hTmp, flag fOut);
63 
64  /* Distruttore */
66 
67  /* Contributo al file di restart */
68  virtual std::ostream& Restart(std::ostream& out) const;
69 
70  /* Tipo di Joint */
71  virtual Joint::Type GetJointType(void) const {
72  return Joint::UNIVERSALHINGE;
73  };
74 
75  virtual unsigned int iGetNumDof(void) const {
76  return 4;
77  };
78 
79  DofOrder::Order GetDofType(unsigned int i) const {
80  ASSERT(i >= 0 && i < 4);
81  return DofOrder::ALGEBRAIC;
82  };
83 
84  void WorkSpaceDim(integer* piNumRows, integer* piNumCols) const {
85  *piNumRows = 16;
86  *piNumCols = 16;
87  };
88 
90  doublereal dCoef,
91  const VectorHandler& XCurr,
92  const VectorHandler& XPrimeCurr);
94  doublereal dCoef,
95  const VectorHandler& XCurr,
96  const VectorHandler& XPrimeCurr);
97 
98  void Output(OutputHandler& OH) const;
99 
100  /* funzioni usate nell'assemblaggio iniziale */
101 
102  virtual unsigned int iGetInitialNumDof(void) const {
103  return 8;
104  };
105  virtual void
106  InitialWorkSpaceDim(integer* piNumRows, integer* piNumCols) const {
107  *piNumRows = 32;
108  *piNumCols = 32;
109  };
110 
111  /* Contributo allo jacobiano durante l'assemblaggio iniziale */
114  const VectorHandler& XCurr);
115 
116  /* Contributo al residuo durante l'assemblaggio iniziale */
119  const VectorHandler& XCurr);
120 
121  /* *******PER IL SOLUTORE PARALLELO******** */
122  /* Fornisce il tipo e la label dei nodi che sono connessi all'elemento
123  utile per l'assemblaggio della matrice di connessione fra i dofs */
124  virtual void
125  GetConnectedNodes(std::vector<const Node *>& connectedNodes) const {
126  connectedNodes.resize(2);
127  connectedNodes[0] = pNode1;
128  connectedNodes[1] = pNode2;
129  };
130  /* ************************************************ */
131 };
132 
133 /* UniversalHingeJoint - end */
134 
135 
136 /* UniversalRotationJoint - begin */
137 
138 class UniversalRotationJoint : virtual public Elem, public Joint {
139 private:
140  /* Giunto universale: l'asse 3 del primo nodo e l'asse 2 del secondo nodo
141  * rimangono ortogonali (giunto cardanico)
142  * I vettori F, M esprimono le reazioni vincolari di forza e coppia. */
145 #ifdef USE_NETCDF
146  NcVar *Var_Phi;
147 #endif // USE_NETCDF
151 
152 protected:
154 
155 public:
156  /* Costruttore non banale */
157  UniversalRotationJoint(unsigned int uL, const DofOwner* pDO,
158  const StructNode* pN1, const StructNode* pN2,
159  const Mat3x3& R1hTmp, const Mat3x3& R2hTmp,
160  const OrientationDescription& od,
161  flag fOut);
162 
163  /* Distruttore */
165 
166  /* Contributo al file di restart */
167  virtual std::ostream& Restart(std::ostream& out) const;
168 
169  /* Tipo di Joint */
170  virtual Joint::Type GetJointType(void) const {
172  };
173 
174  virtual unsigned int iGetNumDof(void) const {
175  return 1;
176  };
177 
178  DofOrder::Order GetDofType(unsigned int i) const {
179  ASSERT(i >= 0 && i < 1);
180  return DofOrder::ALGEBRAIC;
181  };
182 
183  void WorkSpaceDim(integer* piNumRows, integer* piNumCols) const {
184  *piNumRows = 7;
185  *piNumCols = 7;
186  };
187 
190  doublereal dCoef,
191  const VectorHandler& XCurr,
192  const VectorHandler& XPrimeCurr);
194  doublereal dCoef,
195  const VectorHandler& XCurr,
196  const VectorHandler& XPrimeCurr);
197 
198  void OutputPrepare(OutputHandler &OH);
199  void Output(OutputHandler& OH) const;
200 
201 
202  /* funzioni usate nell'assemblaggio iniziale */
203 
204  virtual unsigned int iGetInitialNumDof(void) const {
205  return 2;
206  };
207  virtual void
208  InitialWorkSpaceDim(integer* piNumRows, integer* piNumCols) const {
209  *piNumRows = 14;
210  *piNumCols = 14;
211  };
212 
213  /* Contributo allo jacobiano durante l'assemblaggio iniziale */
216  const VectorHandler& XCurr);
217 
218  /* Contributo al residuo durante l'assemblaggio iniziale */
221  const VectorHandler& XCurr);
222 
223  /* *******PER IL SOLUTORE PARALLELO******** */
224  /* Fornisce il tipo e la label dei nodi che sono connessi all'elemento
225  utile per l'assemblaggio della matrice di connessione fra i dofs */
226  virtual void
227  GetConnectedNodes(std::vector<const Node *>& connectedNodes) const {
228  connectedNodes.resize(2);
229  connectedNodes[0] = pNode1;
230  connectedNodes[1] = pNode2;
231  };
232  /* ************************************************ */
233 };
234 
235 /* UniversalRotationJoint - end */
236 
237 
238 /* UniversalPinJoint - begin */
239 
240 /* Incastro con liberta' di rotazione su un asse */
241 
242 class UniversalPinJoint : virtual public Elem, public Joint {
243 private:
251 
252 public:
253  /* Costruttore non banale */
254  UniversalPinJoint(unsigned int uL, const DofOwner* pDO,
255  const StructNode* pN,
256  const Vec3& X0Tmp, const Mat3x3& R0Tmp,
257  const Vec3& dTmp, const Mat3x3& RhTmp, flag fOut);
258 
259  ~UniversalPinJoint(void);
260 
261  /* Tipo di Joint */
262  virtual Joint::Type GetJointType(void) const {
263  return Joint::UNIVERSALPIN;
264  };
265 
266  /* Contributo al file di restart */
267  virtual std::ostream& Restart(std::ostream& out) const;
268 
269  virtual unsigned int iGetNumDof(void) const {
270  return 4;
271  };
272 
273  virtual DofOrder::Order
274  GetDofType(unsigned int i) const {
275  ASSERT(i >= 0 && i < 4);
276  return DofOrder::ALGEBRAIC;
277  };
278 
279  virtual void
280  WorkSpaceDim(integer* piNumRows, integer* piNumCols) const {
281  *piNumRows = 10;
282  *piNumCols = 10;
283  };
284 
287  doublereal dCoef,
288  const VectorHandler& XCurr,
289  const VectorHandler& XPrimeCurr);
291  AssRes(SubVectorHandler& WorkVec,
292  doublereal dCoef,
293  const VectorHandler& XCurr,
294  const VectorHandler& XPrimeCurr);
295 
296  virtual void Output(OutputHandler& OH) const;
297 
298  /* funzioni usate nell'assemblaggio iniziale */
299 
300  virtual unsigned int iGetInitialNumDof(void) const {
301  return 8;
302  };
303  virtual void
304  InitialWorkSpaceDim(integer* piNumRows, integer* piNumCols) const {
305  *piNumRows = 20;
306  *piNumCols = 20;
307  };
308 
309  /* Contributo allo jacobiano durante l'assemblaggio iniziale */
312  const VectorHandler& XCurr);
313 
314  /* Contributo al residuo durante l'assemblaggio iniziale */
317  const VectorHandler& XCurr);
318 
319  /* *******PER IL SOLUTORE PARALLELO******** */
320  /* Fornisce il tipo e la label dei nodi che sono connessi all'elemento
321  utile per l'assemblaggio della matrice di connessione fra i dofs */
322  virtual void
323  GetConnectedNodes(std::vector<const Node *>& connectedNodes) const {
324  connectedNodes.resize(1);
325  connectedNodes[0] = pNode;
326  };
327  /* ************************************************ */
328 };
329 
330 /* UniversalPinJoint - end */
331 
332 #endif /* UNIVJ_H */
333 
~UniversalHingeJoint(void)
Definition: univj.cc:63
VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: univj.cc:1159
Type
Definition: joint.h:66
virtual Joint::Type GetJointType(void) const
Definition: univj.h:262
long int flag
Definition: mbdyn.h:43
Definition: matvec3.h:98
DofOrder::Order GetDofType(unsigned int i) const
Definition: univj.h:79
void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: univj.h:183
void Output(OutputHandler &OH) const
Definition: univj.cc:798
virtual void GetConnectedNodes(std::vector< const Node * > &connectedNodes) const
Definition: univj.h:227
OrientationDescription
Definition: matvec3.h:1597
const StructNode * pNode2
Definition: univj.h:49
virtual unsigned int iGetNumDof(void) const
Definition: univj.h:174
virtual void GetConnectedNodes(std::vector< const Node * > &connectedNodes) const
Definition: univj.h:323
virtual void Output(OutputHandler &OH) const
Definition: univj.cc:1286
DofOrder::Order GetDofType(unsigned int i) const
Definition: univj.h:178
const StructNode * pNode1
Definition: univj.h:48
VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: univj.cc:649
~UniversalRotationJoint(void)
Definition: univj.cc:624
virtual std::ostream & Restart(std::ostream &out) const
Definition: univj.cc:632
~UniversalPinJoint(void)
Definition: univj.cc:1131
virtual unsigned int iGetInitialNumDof(void) const
Definition: univj.h:300
virtual std::ostream & Restart(std::ostream &out) const
Definition: univj.cc:71
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: univj.h:106
SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
Definition: univj.cc:502
doublereal dM
Definition: univj.h:55
UniversalRotationJoint(unsigned int uL, const DofOwner *pDO, const StructNode *pN1, const StructNode *pN2, const Mat3x3 &R1hTmp, const Mat3x3 &R2hTmp, const OrientationDescription &od, flag fOut)
Definition: univj.cc:603
SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: univj.cc:205
VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
Definition: univj.cc:1302
virtual unsigned int iGetInitialNumDof(void) const
Definition: univj.h:102
virtual std::ostream & Restart(std::ostream &out) const
Definition: univj.cc:1139
VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: univj.cc:92
VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
Definition: univj.cc:885
virtual unsigned int iGetInitialNumDof(void) const
Definition: univj.h:204
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: univj.h:304
SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
Definition: univj.cc:1038
void Output(OutputHandler &OH) const
Definition: univj.cc:275
UniversalHingeJoint(unsigned int uL, const DofOwner *pDO, const StructNode *pN1, const StructNode *pN2, const Vec3 &dTmp1, const Vec3 &dTmp2, const Mat3x3 &R1hTmp, const Mat3x3 &R2hTmp, flag fOut)
Definition: univj.cc:44
#define ASSERT(expression)
Definition: colamd.c:977
const StructNode * pNode2
Definition: univj.h:144
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: univj.h:280
SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
Definition: univj.cc:1442
virtual void GetConnectedNodes(std::vector< const Node * > &connectedNodes) const
Definition: univj.h:125
void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: univj.h:84
virtual unsigned int iGetNumDof(void) const
Definition: univj.h:75
SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: univj.cc:725
virtual Joint::Type GetJointType(void) const
Definition: univj.h:170
Definition: elem.h:75
void OutputPrepare(OutputHandler &OH)
Definition: univj.cc:780
virtual Joint::Type GetJointType(void) const
Definition: univj.h:71
const StructNode * pNode
Definition: univj.h:244
const StructNode * pNode1
Definition: univj.h:143
OrientationDescription od
Definition: univj.h:153
Definition: joint.h:50
doublereal dM
Definition: univj.h:250
double doublereal
Definition: colamd.c:52
doublereal dM
Definition: univj.h:150
long int integer
Definition: colamd.c:51
UniversalPinJoint(unsigned int uL, const DofOwner *pDO, const StructNode *pN, const Vec3 &X0Tmp, const Mat3x3 &R0Tmp, const Vec3 &dTmp, const Mat3x3 &RhTmp, flag fOut)
Definition: univj.cc:1116
SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: univj.cc:1235
virtual DofOrder::Order GetDofType(unsigned int i) const
Definition: univj.h:274
virtual unsigned int iGetNumDof(void) const
Definition: univj.h:269
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: univj.h:208
VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
Definition: univj.cc:293