MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
accelerometer.cc
Go to the documentation of this file.
1 /* $Header: /var/cvs/mbdyn/mbdyn/mbdyn-1.0/mbdyn/elec/accelerometer.cc,v 1.32 2017/01/12 14:46:22 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 elettrici */
33 
34 #include "mbconfig.h" /* This goes first in every *.c,*.cc file */
35 
36 #include "strnode.h"
37 #include "elecnode.h"
38 #include "accelerometer.h"
39 
40 /* Accelerometer - begin */
41 
42 /* Costruttore */
43 Accelerometer::Accelerometer(unsigned int uL, const DofOwner* pDO,
44  const StructNode* pS,
45  const ScalarDifferentialNode* pA,
46  const Vec3& TmpDir,
47  doublereal dO, doublereal dT,
48  doublereal dC, doublereal dK,
49  flag fOut)
50 : Elem(uL, fOut),
51 Electric(uL, pDO, fOut),
52 pStrNode(pS), pAbsNode(pA),
53 Dir(TmpDir), dOmega(dO), dTau(dT), dCsi(dC), dKappa(dK)
54 {
55  NO_OP;
56 }
57 
58 /* Distruttore banale */
60 {
61  NO_OP;
62 }
63 
64 /* Contributo al file di restart */
65 std::ostream&
66 Accelerometer::Restart(std::ostream& out) const
67 {
68  Electric::Restart(out) << ", accelerometer, "
69  << pStrNode->GetLabel() << ", "
70  << pAbsNode->GetLabel() << ", "
71  "reference, node, ", Dir.Write(out, ", ") << ", "
72  "node, "
73  << dOmega << ", "
74  << dTau << ", "
75  << dCsi << ", "
76  << dKappa << ';'
77  << std::endl;
78  return out;
79 }
80 
81 /* Costruisce il contributo allo jacobiano */
84  doublereal dCoef,
85  const VectorHandler& /* XCurr */ ,
86  const VectorHandler& /* XPrimeCurr */ )
87 {
88  DEBUGCOUT("Entering Accelerometer::AssJac()" << std::endl);
89 
90  /* Casting di WorkMat */
91  SparseSubMatrixHandler& WM = WorkMat.SetSparse();
92  WM.ResizeReset(15, 0);
93 
94  /* Indici delle equazioni */
95  integer iFirstPositionIndex = pStrNode->iGetFirstPositionIndex();
96  integer iAbstractIndex = pAbsNode->iGetFirstIndex();
97  integer iFirstIndex = iGetFirstIndex();
98 
99  /*
100  * | c 0 0 0 -a^T c*xP^T*a/\ || Delta_vP |
101  * | 0 1 c*O^2/T 0 0 0 || Delta_y1P |
102  * | 0 0 1+c*(2*C*O+1/T) -c 0 0 || Delta_y2P |
103  * |-K*O^2 -c c*O*(1+2*C/T) 1 0 0 || Delta_zP | = res
104  * | Delta_xP |
105  * | Delta_gP |
106  *
107  * con: c = dCoef
108  * a = RNode*Dir
109  * xp = Velocita' del nodo
110  * O = dOmega
111  * T = dTau
112  * C = dCsi
113  * K = dKappa
114  *
115  * v e' la misura della veocita' del punto,
116  * y1 e y2 sono stati dell'acceleromtro; v, y1, y2 appartengono al DofOwner
117  * dell'elemento;
118  * z e' la variabile del nodo astratto;
119  * x e g sono posizione e parametri di rotazione del nodo strutturale
120  *
121  *
122  * Funzione di trasferimento dell'accelerometro nel dominio di Laplace:
123  *
124  * e0 T * s
125  * ----(s) = K * ---------------------------------
126  * acc. (1 + T*s)*(1 + 2*C/O*s + s^2/O^2)
127  *
128  */
129 
130  /* Dinamica dell'accelerometro */
131  WM.PutItem(1, iFirstIndex + 1, iFirstIndex + 1, dCoef);
132  WM.PutItem(2, iAbstractIndex + 1, iFirstIndex + 1,
133  -dKappa*dOmega*dOmega);
134  WM.PutItem(3, iFirstIndex + 2, iFirstIndex + 2, 1.);
135  WM.PutItem(4, iAbstractIndex + 1, iFirstIndex + 2, -dCoef);
136  WM.PutItem(5, iFirstIndex + 2, iFirstIndex + 3,
137  dCoef*dOmega*dOmega/dTau);
138  WM.PutItem(6, iFirstIndex + 3, iFirstIndex + 3,
139  1. + dCoef*(2.*dCsi*dOmega + 1./dTau));
140  WM.PutItem(7, iAbstractIndex + 1, iFirstIndex + 3,
141  dCoef*dOmega*(dOmega + 2.*dCsi/dTau));
142  WM.PutItem(8, iFirstIndex + 3, iAbstractIndex + 1, -dCoef);
143  WM.PutItem(9, iAbstractIndex + 1, iAbstractIndex + 1, 1.);
144 
145  /* Misura dell'accelerazione */
146  Vec3 TmpDir((pStrNode->GetRRef())*Dir);
147  for (int iCnt = 1; iCnt <= 3; iCnt++) {
148  WM.PutItem(9 + iCnt, iFirstIndex + 1,
149  iFirstPositionIndex + iCnt,
150  - TmpDir.dGet(iCnt));
151  }
152 
153  Vec3 XP(pStrNode->GetVCurr());
154  TmpDir = -TmpDir.Cross(XP);
155  for (int iCnt = 1; iCnt <= 3; iCnt++) {
156  WM.PutItem(12 + iCnt, iFirstIndex + 1,
157  iFirstPositionIndex + 3 + iCnt,
158  dCoef*TmpDir.dGet(iCnt));
159  }
160 
161  return WorkMat;
162 }
163 
164 /* Costruisce il contributo al residuo */
167  doublereal /* dCoef */ ,
168  const VectorHandler& XCurr,
169  const VectorHandler& XPrimeCurr)
170 {
171  DEBUGCOUT("Entering Accelerometer::AssRes()" << std::endl);
172 
173  /* Dimensiona e resetta la matrice di lavoro */
174  integer iNumRows = 0;
175  integer iNumCols = 0;
176  WorkSpaceDim(&iNumRows, &iNumCols);
177  WorkVec.ResizeReset(iNumRows);
178 
179  integer iAbstractIndex = pAbsNode->iGetFirstIndex();
180  integer iFirstIndex = iGetFirstIndex();
181 
182  /*
183  * | Delta_vP | | -v+a^T*xP |
184  * | Delta_y1P | | -y1P-O^2/T*y2 |
185  * jac * | Delta_y2P | = | -y2P+z-(2*C*O+1/T)*y2 |
186  * | Delta_zP | | -zP+y1-O*(O+2*C/T)*y2+K*O^2*vP |
187  * | Delta_xP |
188  * | Delta_gP |
189  *
190  * per il significato dei termini vedi AssJac
191  */
192 
193  WorkVec.PutRowIndex(1, iFirstIndex + 1);
194  WorkVec.PutRowIndex(2, iFirstIndex + 2);
195  WorkVec.PutRowIndex(3, iFirstIndex + 3);
196  WorkVec.PutRowIndex(4, iAbstractIndex + 1);
197 
198  Vec3 XP(pStrNode->GetVCurr());
200  doublereal v = XCurr(iFirstIndex + 1);
201  doublereal vp = XPrimeCurr(iFirstIndex + 1);
202  doublereal y1 = XCurr(iFirstIndex + 2);
203  doublereal y1p = XPrimeCurr(iFirstIndex + 2);
204  doublereal y2 = XCurr(iFirstIndex + 3);
205  doublereal y2p = XPrimeCurr(iFirstIndex + 3);
206  doublereal z = XCurr(iAbstractIndex + 1);
207  doublereal zp = XPrimeCurr(iAbstractIndex + 1);
208 
209  WorkVec.PutCoef(1, (R*Dir).Dot(XP) - v);
210  WorkVec.PutCoef(2, -y1p - dOmega*dOmega/dTau*y2);
211  WorkVec.PutCoef(3, -y2p + z - (2.*dCsi*dOmega + 1./dTau)*y2);
212  WorkVec.PutCoef(4, -zp + y1 - dOmega*(dOmega + 2.*dCsi/dTau)*y2
213  + dKappa*dOmega*dOmega*vp);
214 
215  return WorkVec;
216 }
217 
218 unsigned int
220 {
221  return 3;
222 }
223 
225 Accelerometer::GetDofType(unsigned int i) const
226 {
227  ASSERT(i >= 0 && i < 3);
228  return DofOrder::DIFFERENTIAL;
229 }
230 
231 void
232 Accelerometer::WorkSpaceDim(integer* piNumRows, integer* piNumCols) const
233 {
234  *piNumRows = 4;
235  *piNumCols = 10;
236 }
237 
238 void
240 {
241  NO_OP;
242 }
243 
244 void
246  VectorHandler& X, VectorHandler& /* XP */ ,
248 {
250  X.PutCoef(iGetFirstIndex() + 1, v);
251 }
252 
253 /* Accelerometer - end */
254 
255 
256 /* TranslAccel - begin */
257 
258 /* Costruttore */
259 TranslAccel::TranslAccel(unsigned int uL,
260  const DofOwner* pDO,
261  const StructNode* pS,
262  const ScalarDifferentialNode* pA,
263  const Vec3& TmpDir,
264  const Vec3& Tmpf,
265  flag fOut)
266 : Elem(uL, fOut),
267 Electric(uL, pDO, fOut),
268 pStrNode(pS), pAbsNode(pA),
269 Dir(TmpDir), f(Tmpf)
270 {
271  ASSERT(pStrNode != NULL);
273  ASSERT(pAbsNode != NULL);
275 }
276 
277 /* Distruttore banale */
279 {
280  NO_OP;
281 }
282 
283 /* Contributo al file di restart */
284 std::ostream&
285 TranslAccel::Restart(std::ostream& out) const
286 {
287  Electric::Restart(out) << ", accelerometer, translational, "
288  << pStrNode->GetLabel() << ", "
289  << pAbsNode->GetLabel() << ", "
290  "reference, node, ", Dir.Write(out, ", ") << ", "
291  "reference, node, ", f.Write(out, ", ") << ';'
292  << std::endl;
293  return out;
294 }
295 
296 /* Costruisce il contributo allo jacobiano */
299  doublereal dCoef,
300  const VectorHandler& /* XCurr */ ,
301  const VectorHandler& /* XPrimeCurr */ )
302 {
303  DEBUGCOUT("Entering TranslAccel::AssJac()" << std::endl);
304 
305  /* Casting di WorkMat */
306  SparseSubMatrixHandler& WM = WorkMat.SetSparse();
307  WM.ResizeReset(9, 0);
308 
309  /* Indici delle equazioni */
310  integer iFirstColIndex = pStrNode->iGetFirstColIndex();
311  integer iAbstractIndex = pAbsNode->iGetFirstIndex() + 1;
312  integer iFirstIndex = iGetFirstIndex() + 1;
313 
314  WM.PutItem(1, iAbstractIndex, iAbstractIndex, dCoef);
315  WM.PutItem(2, iAbstractIndex, iFirstIndex, -1.);
316  WM.PutItem(3, iFirstIndex, iFirstIndex, dCoef);
317 
318  Vec3 tmpf = pStrNode->GetRCurr()*f;
319  Vec3 tmpd = pStrNode->GetRCurr()*Dir;
320  Vec3 tmp = tmpf.Cross(tmpd); // FIXME?
321  WM.PutItem(4, iFirstIndex, iFirstColIndex + 1, -tmpd.dGet(1));
322  WM.PutItem(5, iFirstIndex, iFirstColIndex + 2, -tmpd.dGet(2));
323  WM.PutItem(6, iFirstIndex, iFirstColIndex + 3, -tmpd.dGet(3));
324 
325  tmp = tmpd.Cross((pStrNode->GetVCurr()*(-dCoef) + tmpf));
326  WM.PutItem(7, iFirstIndex, iFirstColIndex + 4, tmp.dGet(1));
327  WM.PutItem(8, iFirstIndex, iFirstColIndex + 5, tmp.dGet(2));
328  WM.PutItem(9, iFirstIndex, iFirstColIndex + 6, tmp.dGet(3));
329 
330  return WorkMat;
331 }
332 
333 /* Costruisce il contributo al residuo */
336  doublereal /* dCoef */ ,
337  const VectorHandler& XCurr,
338  const VectorHandler& XPrimeCurr)
339 {
340  DEBUGCOUT("Entering TranslAccel::AssRes()" << std::endl);
341 
342  /* Dimensiona e resetta la matrice di lavoro */
343  WorkVec.Resize(2);
344 
345  integer iAbstractIndex = pAbsNode->iGetFirstIndex() + 1;
346  integer iFirstIndex = iGetFirstIndex()+1;
347 
348  WorkVec.PutRowIndex(1, iAbstractIndex);
349  WorkVec.PutRowIndex(2, iFirstIndex);
350 
351  Vec3 tmpf = pStrNode->GetRCurr()*f;
352  Vec3 tmpd = pStrNode->GetRCurr()*Dir;
353 
354  doublereal v = XCurr(iFirstIndex);
355  doublereal vp = XPrimeCurr(iFirstIndex);
356  doublereal a = pAbsNode->dGetX();
357 
358  WorkVec.PutCoef(1, vp - a);
359  WorkVec.PutCoef(2, tmpd.Dot((pStrNode->GetVCurr() + pStrNode->GetWCurr().Cross(tmpf))) - v);
360 
361  return WorkVec;
362 }
363 
364 unsigned int
366 {
367  return 1;
368 }
369 
371 TranslAccel::GetDofType(unsigned int i) const
372 {
373  ASSERT(i == 0);
374  return DofOrder::DIFFERENTIAL;
375 }
376 
377 void
378 TranslAccel::WorkSpaceDim(integer* piNumRows, integer* piNumCols) const
379 {
380  *piNumRows = 2;
381  *piNumCols = 8;
382 }
383 
384 void
386 {
387  NO_OP;
388 }
389 
390 void
394 {
395  doublereal v =
398  X.PutCoef(iGetFirstIndex() + 1, v);
399  XP.PutCoef(iGetFirstIndex() + 1, 0.);
400 }
401 
402 /* TranslAccel - end */
403 
404 
405 /* RotAccel - begin */
406 
407 /* Costruttore */
408 RotAccel::RotAccel(unsigned int uL,
409  const DofOwner* pDO,
410  const StructNode* pS,
411  const ScalarDifferentialNode* pA,
412  const Vec3& TmpDir,
413  flag fOut)
414 : Elem(uL, fOut),
415 Electric(uL, pDO, fOut),
416 pStrNode(pS), pAbsNode(pA),
417 Dir(TmpDir)
418 {
419  ASSERT(pStrNode != NULL);
421  ASSERT(pAbsNode != NULL);
423 }
424 
425 /* Distruttore banale */
427 {
428  NO_OP;
429 }
430 
431 /* Contributo al file di restart */
432 std::ostream&
433 RotAccel::Restart(std::ostream& out) const
434 {
435  Electric::Restart(out) << ", accelerometer, rotational, "
436  << pStrNode->GetLabel() << ", "
437  << pAbsNode->GetLabel() << ", "
438  "reference, node, ", Dir.Write(out, ", ") << ';'
439  << std::endl;
440  return out;
441 }
442 
443 /* Costruisce il contributo allo jacobiano */
446  doublereal dCoef,
447  const VectorHandler& /* XCurr */ ,
448  const VectorHandler& /* XPrimeCurr */ )
449 {
450  DEBUGCOUT("Entering RotAccel::AssJac()" << std::endl);
451 
452  /* Casting di WorkMat */
453  SparseSubMatrixHandler& WM = WorkMat.SetSparse();
454  WM.ResizeReset(6, 0);
455 
456  /* Indici delle equazioni */
457  integer iFirstColIndex = pStrNode->iGetFirstColIndex();
458  integer iAbstractIndex = pAbsNode->iGetFirstIndex()+1;
459  integer iFirstIndex = iGetFirstIndex()+1;
460 
461  WM.PutItem(1, iAbstractIndex, iAbstractIndex, dCoef);
462  WM.PutItem(2, iAbstractIndex, iFirstIndex, -1.);
463  WM.PutItem(3, iFirstIndex, iFirstIndex, dCoef);
464 
465  Vec3 tmp = pStrNode->GetRCurr()*Dir;
466  WM.PutItem(4, iFirstIndex, iFirstColIndex+4, tmp.dGet(1));
467  WM.PutItem(5, iFirstIndex, iFirstColIndex+5, tmp.dGet(2));
468  WM.PutItem(6, iFirstIndex, iFirstColIndex+6, tmp.dGet(3));
469 
470  return WorkMat;
471 }
472 
473 /* Costruisce il contributo al residuo */
476  doublereal /* dCoef */ ,
477  const VectorHandler& XCurr,
478  const VectorHandler& XPrimeCurr)
479 {
480  DEBUGCOUT("Entering RotAccel::AssRes()" << std::endl);
481 
482  /* Dimensiona e resetta la matrice di lavoro */
483  WorkVec.Resize(2);
484 
485  integer iAbstractIndex = pAbsNode->iGetFirstIndex() + 1;
486  integer iFirstIndex = iGetFirstIndex() + 1;
487 
488  WorkVec.PutRowIndex(1, iAbstractIndex);
489  WorkVec.PutRowIndex(2, iFirstIndex);
490 
491  Vec3 tmp = pStrNode->GetRCurr()*Dir;
492 
493  doublereal v = XCurr(iFirstIndex);
494  doublereal vp = XPrimeCurr(iFirstIndex);
495  doublereal a = pAbsNode->dGetX();
496 
497  WorkVec.PutCoef(1, vp - a);
498  WorkVec.PutCoef(2, tmp.Dot(pStrNode->GetWCurr()) - v);
499 
500  return WorkVec;
501 }
502 
503 unsigned int
505 {
506  return 1;
507 }
508 
510 RotAccel::GetDofType(unsigned int i) const
511 {
512  ASSERT(i == 0);
513  return DofOrder::DIFFERENTIAL;
514 }
515 
516 void
517 RotAccel::WorkSpaceDim(integer* piNumRows, integer* piNumCols) const
518 {
519  *piNumRows = 2;
520  *piNumCols = 5;
521 }
522 
523 void
525 {
526  NO_OP;
527 }
528 
529 void
531  VectorHandler& X, VectorHandler& /* XP */ ,
533 {
535  X.PutCoef(iGetFirstIndex() + 1, v);
536 }
537 
538 /* RotAccel - end */
539 
doublereal dOmega
Definition: accelerometer.h:44
virtual unsigned int iGetNumDof(void) const
doublereal dKappa
Definition: accelerometer.h:47
const ScalarDifferentialNode * pAbsNode
virtual unsigned int iGetNumDof(void) const
Vec3 Cross(const Vec3 &v) const
Definition: matvec3.h:218
std::ostream & Write(std::ostream &out, const char *sFill=" ") const
Definition: matvec3.cc:738
long int flag
Definition: mbdyn.h:43
virtual const Mat3x3 & GetRRef(void) const
Definition: strnode.h:1006
Definition: matvec3.h:98
virtual void ResizeReset(integer)
Definition: vh.cc:55
virtual const Mat3x3 & GetRCurr(void) const
Definition: strnode.h:1012
virtual Node::Type GetNodeType(void) const
Definition: strnode.cc:145
doublereal Dot(const Vec3 &v) const
Definition: matvec3.h:243
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
const StructNode * pStrNode
Definition: accelerometer.h:41
VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual void SetInitialValue(VectorHandler &)
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &, SimulationEntity::Hints *ph=0)
virtual void SetInitialValue(VectorHandler &)
doublereal dCsi
Definition: accelerometer.h:46
void ResizeReset(integer iNewRow, integer iNewCol)
Definition: submat.cc:1084
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &, SimulationEntity::Hints *ph=0)
VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
#define NO_OP
Definition: myassert.h:74
std::vector< Hint * > Hints
Definition: simentity.h:89
const StructNode * pStrNode
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
void PutItem(integer iSubIt, integer iRow, integer iCol, const doublereal &dCoef)
Definition: submat.h:997
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &, SimulationEntity::Hints *ph=0)
~TranslAccel(void)
~Accelerometer(void)
virtual void SetInitialValue(VectorHandler &)
virtual DofOrder::Order GetDofType(unsigned int i) const
SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
const doublereal & dGet(unsigned short int iRow) const
Definition: matvec3.h:285
Definition: elec.h:43
#define DEBUGCOUT(msg)
Definition: myassert.h:232
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual integer iGetFirstPositionIndex(void) const
Definition: strnode.h:452
virtual const Vec3 & GetWCurr(void) const
Definition: strnode.h:1030
DotTraits< VectorExprLhs, VectorExprRhs, N_rows, N_rows >::ExpressionType Dot(const VectorExpression< VectorExprLhs, N_rows > &u, const VectorExpression< VectorExprRhs, N_rows > &v)
Definition: matvec.h:3133
TranslAccel(unsigned int uL, const DofOwner *pD, const StructNode *pS, const ScalarDifferentialNode *pA, const Vec3 &TmpDir, const Vec3 &Tmpf, flag fOut)
#define ASSERT(expression)
Definition: colamd.c:977
virtual DofOrder::Order GetDofType(unsigned int i) const
const ScalarDifferentialNode * pAbsNode
virtual void PutCoef(integer iRow, const doublereal &dCoef)=0
virtual std::ostream & Restart(std::ostream &out) const
RotAccel(unsigned int uL, const DofOwner *pD, const StructNode *pS, const ScalarDifferentialNode *pA, const Vec3 &TmpDir, flag fOut)
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: elem.h:75
doublereal dTau
Definition: accelerometer.h:45
virtual std::ostream & Restart(std::ostream &out) const
Definition: elec.cc:65
virtual const Vec3 & GetVCurr(void) const
Definition: strnode.h:322
static const doublereal a
Definition: hfluid_.h:289
SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
const StructNode * pStrNode
const ScalarDifferentialNode * pAbsNode
Definition: accelerometer.h:42
~RotAccel(void)
SparseSubMatrixHandler & SetSparse(void)
Definition: submat.h:1178
virtual integer iGetFirstIndex(void) const
Definition: dofown.h:127
virtual Node::Type GetNodeType(void) const
Definition: node.cc:169
virtual std::ostream & Restart(std::ostream &out) const
double doublereal
Definition: colamd.c:52
long int integer
Definition: colamd.c:51
unsigned int GetLabel(void) const
Definition: withlab.cc:62
Accelerometer(unsigned int uL, const DofOwner *pD, const StructNode *pS, const ScalarDifferentialNode *pA, const Vec3 &TmpDir, doublereal dO, doublereal dT, doublereal dC, doublereal dK, flag fOut)
virtual std::ostream & Restart(std::ostream &out) const
SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual unsigned int iGetNumDof(void) const
virtual void Resize(integer iNewSize)=0
virtual const doublereal & dGetX(void) const
Definition: node.h:386
Mat3x3 R
virtual DofOrder::Order GetDofType(unsigned int i) const
virtual integer iGetFirstColIndex(void) const
Definition: node.cc:88