1 /* $Header: /var/cvs/mbdyn/mbdyn/mbdyn-1.0/mbdyn/struct/planej.h,v 1.50 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 /* Giunti piani */ 33 34 #ifndef PLANEJ_H 35 #define PLANEJ_H 36 37 #include "joint.h" 38 #include "drive.h" 39 #include "friction.h" 40 41 /* PlaneHingeJoint - begin */ 42 43 class PlaneHingeJoint : virtual public Elem, public Joint { 44 private: 45 /* Cerniera piana - asse di rotazione dato dall'asse 3 del sistema di 46 * riferimento della cerniera. Tale sistema e' noto relativamente ai due 47 * nodi. In particolare rispetto al nodo 1 la trasformazione dal sistema 48 * di riferimento della cerniera al sistema globale e': R1*R1h, mentre per 49 * il nodo 2 la medesima trasformazion e': R2*R2h. 50 * I vettori d1 e d2 esprimono, nel sistema di riferimento dei rispettivi 51 * nodi, la distanza della cerniera dai nodi stessi. 52 * I vettori F, M esprimono le reazioni vincolari di forza e coppia. */ 53 const StructNode* pNode1; 54 const StructNode* pNode2; 55 Vec3 d1; 56 Mat3x3 R1h; 57 Vec3 d2; 58 Mat3x3 R2h; 59 Vec3 F; 60 Vec3 M; 61 #ifdef USE_NETCDF 62 NcVar *Var_Phi; 63 NcVar *Var_Omega; 64 // NcVar *Var_MFR; 65 // NcVar *Var_MU; 66 #endif // USE_NETCDF 67 68 bool calcInitdTheta; 69 mutable int NTheta; 70 mutable doublereal dTheta, dThetaWrapped; 71 72 /* friction related data */ 73 BasicShapeCoefficient *const Sh_c; 74 BasicFriction *const fc; 75 const doublereal preF; 76 const doublereal r; 77 doublereal M3; 78 static const unsigned int NumSelfDof; 79 static const unsigned int NumDof; 80 /* end of friction related data */ 81 82 protected: 83 OrientationDescription od; 84 85 public: 86 /* Costruttore non banale */ 87 PlaneHingeJoint(unsigned int uL, const DofOwner* pDO, 88 const StructNode* pN1, const StructNode* pN2, 89 const Vec3& dTmp1, const Vec3& dTmp2, 90 const Mat3x3& R1hTmp, const Mat3x3& R2hTmp, 91 const OrientationDescription& od, 92 flag fOut, 93 const bool _calcInitdTheta = true, 94 const doublereal initDTheta = 0., 95 const doublereal rr = 0., 96 const doublereal pref = 0., 97 BasicShapeCoefficient *const sh = 0, 98 BasicFriction *const f = 0); 99 100 /* Distruttore */ 101 ~PlaneHingeJoint(void); 102 103 virtual void ReadInitialState(MBDynParser& HP); 104 105 /* Contributo al file di restart */ 106 virtual std::ostream& Restart(std::ostream& out) const; 107 108 /* Tipo di Joint */ GetJointType(void)109 virtual Joint::Type GetJointType(void) const { 110 return Joint::PLANEHINGE; 111 }; 112 113 virtual unsigned int iGetNumDof(void) const; 114 115 virtual std::ostream& DescribeDof(std::ostream& out, 116 const char *prefix = "", 117 bool bInitial = false) const; 118 119 virtual void DescribeDof(std::vector<std::string>& desc, 120 bool bInitial = false, int i = -1) const; 121 122 virtual std::ostream& DescribeEq(std::ostream& out, 123 const char *prefix = "", 124 bool bInitial = false) const; 125 126 virtual void DescribeEq(std::vector<std::string>& desc, 127 bool bInitial = false, int i = -1) const; 128 129 DofOrder::Order GetDofType(unsigned int i) const; 130 131 virtual void SetValue(DataManager *pDM, 132 VectorHandler& X, VectorHandler& XP, 133 SimulationEntity::Hints *ph = 0); 134 135 virtual Hint * 136 ParseHint(DataManager *pDM, const char *s) const; 137 138 virtual void AfterConvergence(const VectorHandler& X, 139 const VectorHandler& XP); 140 WorkSpaceDim(integer * piNumRows,integer * piNumCols)141 void WorkSpaceDim(integer* piNumRows, integer* piNumCols) const { 142 *piNumRows = NumDof; 143 *piNumCols = NumDof; 144 if (fc) { 145 *piNumRows += fc->iGetNumDof(); 146 *piNumCols += fc->iGetNumDof(); 147 } 148 }; 149 150 151 VariableSubMatrixHandler& AssJac(VariableSubMatrixHandler& WorkMat, 152 doublereal dCoef, 153 const VectorHandler& XCurr, 154 const VectorHandler& XPrimeCurr); 155 SubVectorHandler& AssRes(SubVectorHandler& WorkVec, 156 doublereal dCoef, 157 const VectorHandler& XCurr, 158 const VectorHandler& XPrimeCurr); 159 160 DofOrder::Order GetEqType(unsigned int i) const; 161 162 void OutputPrepare(OutputHandler &OH); 163 void Output(OutputHandler& OH) const; 164 165 166 /* funzioni usate nell'assemblaggio iniziale */ 167 iGetInitialNumDof(void)168 virtual unsigned int iGetInitialNumDof(void) const { 169 return 10; 170 }; InitialWorkSpaceDim(integer * piNumRows,integer * piNumCols)171 virtual void InitialWorkSpaceDim(integer* piNumRows, 172 integer* piNumCols) const { 173 *piNumRows = 34; 174 *piNumCols = 34; 175 }; 176 177 /* Contributo allo jacobiano durante l'assemblaggio iniziale */ 178 VariableSubMatrixHandler& InitialAssJac(VariableSubMatrixHandler& WorkMat, 179 const VectorHandler& XCurr); 180 181 /* Contributo al residuo durante l'assemblaggio iniziale */ 182 SubVectorHandler& InitialAssRes(SubVectorHandler& WorkVec, 183 const VectorHandler& XCurr); 184 185 /* Dati privati */ 186 virtual unsigned int iGetNumPrivData(void) const; 187 virtual unsigned int iGetPrivDataIdx(const char *s) const; 188 virtual doublereal dGetPrivData(unsigned int i) const; 189 190 /* *******PER IL SOLUTORE PARALLELO******** */ 191 /* Fornisce il tipo e la label dei nodi che sono connessi all'elemento 192 utile per l'assemblaggio della matrice di connessione fra i dofs */ GetConnectedNodes(std::vector<const Node * > & connectedNodes)193 virtual void GetConnectedNodes(std::vector<const Node *>& connectedNodes) const { 194 connectedNodes.resize(2); 195 connectedNodes[0] = pNode1; 196 connectedNodes[1] = pNode2; 197 }; 198 /* ************************************************ */ 199 }; 200 201 /* PlaneHingeJoint - end */ 202 203 204 /* PlaneRotationJoint - begin */ 205 206 class PlaneRotationJoint : virtual public Elem, public Joint { 207 private: 208 /* Cerniera piana - asse di rotazione dato dall'asse 3 del sistema di 209 * riferimento della cerniera. Tale sistema e' noto relativamente ai due 210 * nodi. In particolare rispetto al nodo 1 la trasformazione dal sistema 211 * di riferimento della cerniera al sistema globale e': R1*R1h, mentre per 212 * il nodo 2 la medesima trasformazion e': R2*R2h. 213 * I vettori d1 e d2 esprimono, nel sistema di riferimento dei rispettivi 214 * nodi, la distanza della cerniera dai nodi stessi. 215 * I vettori F, M esprimono le reazioni vincolari di forza e coppia. */ 216 const StructNode* pNode1; 217 const StructNode* pNode2; 218 Mat3x3 R1h; 219 Mat3x3 R2h; 220 Vec3 M; 221 mutable int NTheta; 222 mutable doublereal dTheta, dThetaWrapped; 223 #ifdef USE_NETCDF 224 NcVar *Var_Phi; 225 NcVar *Var_Omega; 226 #endif // USE_NETCDF 227 228 protected: 229 OrientationDescription od; 230 231 public: 232 /* Costruttore non banale */ 233 PlaneRotationJoint(unsigned int uL, const DofOwner* pDO, 234 const StructNode* pN1, const StructNode* pN2, 235 const Mat3x3& R1hTmp, const Mat3x3& R2hTmp, 236 const OrientationDescription& od, 237 flag fOut); 238 239 /* Distruttore */ 240 ~PlaneRotationJoint(void); 241 242 /* Contributo al file di restart */ 243 virtual std::ostream& Restart(std::ostream& out) const; 244 245 /* Tipo di Joint */ GetJointType(void)246 virtual Joint::Type GetJointType(void) const { 247 return Joint::PLANEROTATION; 248 }; 249 iGetNumDof(void)250 virtual unsigned int iGetNumDof(void) const { 251 return 2; 252 }; 253 254 virtual std::ostream& DescribeDof(std::ostream& out, 255 const char *prefix = "", 256 bool bInitial = false) const; 257 258 virtual void DescribeDof(std::vector<std::string>& desc, 259 bool bInitial = false, int i = -1) const; 260 261 virtual std::ostream& DescribeEq(std::ostream& out, 262 const char *prefix = "", 263 bool bInitial = false) const; 264 265 virtual void DescribeEq(std::vector<std::string>& desc, 266 bool bInitial = false, int i = -1) const; 267 GetDofType(unsigned int i)268 DofOrder::Order GetDofType(unsigned int i) const { 269 ASSERT(i >= 0 && i < 2); 270 return DofOrder::ALGEBRAIC; 271 }; 272 273 virtual void SetValue(DataManager *pDM, 274 VectorHandler& X, VectorHandler& XP, 275 SimulationEntity::Hints *ph = 0); 276 277 virtual Hint * 278 ParseHint(DataManager *pDM, const char *s) const; 279 280 virtual void AfterConvergence(const VectorHandler& X, 281 const VectorHandler& XP); 282 WorkSpaceDim(integer * piNumRows,integer * piNumCols)283 void WorkSpaceDim(integer* piNumRows, integer* piNumCols) const { 284 *piNumRows = 3+3+2; 285 *piNumCols = 3+3+2; 286 }; 287 288 289 VariableSubMatrixHandler& AssJac(VariableSubMatrixHandler& WorkMat, 290 doublereal dCoef, 291 const VectorHandler& XCurr, 292 const VectorHandler& XPrimeCurr); 293 SubVectorHandler& AssRes(SubVectorHandler& WorkVec, 294 doublereal dCoef, 295 const VectorHandler& XCurr, 296 const VectorHandler& XPrimeCurr); 297 298 DofOrder::Order GetEqType(unsigned int i) const; 299 300 void OutputPrepare(OutputHandler &OH); 301 void Output(OutputHandler& OH) const; 302 303 304 /* funzioni usate nell'assemblaggio iniziale */ 305 iGetInitialNumDof(void)306 virtual unsigned int iGetInitialNumDof(void) const { 307 return 2+2; 308 }; InitialWorkSpaceDim(integer * piNumRows,integer * piNumCols)309 virtual void InitialWorkSpaceDim(integer* piNumRows, 310 integer* piNumCols) const { 311 *piNumRows = 3+3+3+3+2+2; 312 *piNumCols = 3+3+3+3+2+2; 313 }; 314 315 /* Contributo allo jacobiano durante l'assemblaggio iniziale */ 316 VariableSubMatrixHandler& InitialAssJac(VariableSubMatrixHandler& WorkMat, 317 const VectorHandler& XCurr); 318 319 /* Contributo al residuo durante l'assemblaggio iniziale */ 320 SubVectorHandler& InitialAssRes(SubVectorHandler& WorkVec, 321 const VectorHandler& XCurr); 322 323 /* Dati privati */ 324 virtual unsigned int iGetNumPrivData(void) const; 325 virtual unsigned int iGetPrivDataIdx(const char *s) const; 326 virtual doublereal dGetPrivData(unsigned int i) const; 327 328 /* *******PER IL SOLUTORE PARALLELO******** */ 329 /* Fornisce il tipo e la label dei nodi che sono connessi all'elemento 330 utile per l'assemblaggio della matrice di connessione fra i dofs */ GetConnectedNodes(std::vector<const Node * > & connectedNodes)331 virtual void GetConnectedNodes(std::vector<const Node *>& connectedNodes) const { 332 connectedNodes.resize(2); 333 connectedNodes[0] = pNode1; 334 connectedNodes[1] = pNode2; 335 }; 336 /* ************************************************ */ 337 }; 338 339 /* PlaneRotationJoint - end */ 340 341 342 /* AxialRotationJoint - begin */ 343 344 class AxialRotationJoint : virtual public Elem, 345 public Joint, public DriveOwner { 346 private: 347 /* Rotazione assiale attorno ad una cerniera piana - 348 * asse di rotazione dato dall'asse 3 del sistema di 349 * riferimento della cerniera. Tale sistema e' noto relativamente ai due 350 * nodi. In particolare rispetto al nodo 1 la trasformazione dal sistema 351 * di riferimento della cerniera al sistema globale e': R1*R1h, mentre per 352 * il nodo 2 la medesima trasformazione e': R2*R2h. 353 * I vettori d1 e d2 esprimono, nel sistema di riferimento dei rispettivi 354 * nodi, la distanza della cerniera dai nodi stessi. 355 * I vettori F, M esprimono le reazioni vincolari di forza e coppia. 356 * La velocita' di rotazione e' imposta attraverso un driver. */ 357 const StructNode* pNode1; 358 const StructNode* pNode2; 359 Vec3 d1; 360 Mat3x3 R1h; 361 Vec3 d2; 362 Mat3x3 R2h; 363 Vec3 F; 364 Vec3 M; 365 mutable int NTheta; 366 mutable doublereal dTheta, dThetaWrapped; 367 368 #ifdef USE_NETCDF 369 NcVar *Var_Phi; 370 NcVar *Var_Omega; 371 // NcVar *Var_MFR; 372 // NcVar *Var_MU; 373 #endif // USE_NETCDF 374 375 /* friction related data */ 376 BasicShapeCoefficient *const Sh_c; 377 BasicFriction *const fc; 378 const doublereal preF; 379 const doublereal r; 380 doublereal M3; 381 static const unsigned int NumSelfDof; 382 static const unsigned int NumDof; 383 /* end of friction related data */ 384 385 protected: 386 OrientationDescription od; 387 388 public: 389 /* Costruttore non banale */ 390 AxialRotationJoint(unsigned int uL, const DofOwner* pDO, 391 const StructNode* pN1, const StructNode* pN2, 392 const Vec3& dTmp1, const Vec3& dTmp2, 393 const Mat3x3& R1hTmp, const Mat3x3& R2hTmp, 394 const DriveCaller* pDC, 395 const OrientationDescription& od, 396 flag fOut, 397 const doublereal rr = 0., 398 const doublereal pref = 0., 399 BasicShapeCoefficient *const sh = 0, 400 BasicFriction *const f = 0); 401 402 /* Distruttore */ 403 ~AxialRotationJoint(void); 404 405 /* Tipo di Joint */ GetJointType(void)406 virtual Joint::Type GetJointType(void) const { 407 return Joint::AXIALROTATION; 408 }; 409 410 /* Contributo al file di restart */ 411 virtual std::ostream& Restart(std::ostream& out) const; 412 iGetNumDof(void)413 virtual unsigned int iGetNumDof(void) const { 414 unsigned int i = NumSelfDof; 415 if (fc) { 416 i+=fc->iGetNumDof(); 417 } 418 return i; 419 }; 420 421 virtual std::ostream& DescribeDof(std::ostream& out, 422 const char *prefix = "", 423 bool bInitial = false) const; 424 425 virtual void DescribeDof(std::vector<std::string>& desc, 426 bool bInitial = false, int i = -1) const; 427 428 virtual std::ostream& DescribeEq(std::ostream& out, 429 const char *prefix = "", 430 bool bInitial = false) const; 431 432 virtual void DescribeEq(std::vector<std::string>& desc, 433 bool bInitial = false, int i = -1) const; 434 GetDofType(unsigned int i)435 DofOrder::Order GetDofType(unsigned int i) const { 436 ASSERT(i >= 0 && i < iGetNumDof()); 437 if (i<NumSelfDof) { 438 return DofOrder::ALGEBRAIC; 439 } else { 440 return fc->GetDofType(i-NumSelfDof); 441 } 442 }; 443 444 virtual void SetValue(DataManager *pDM, 445 VectorHandler& X, VectorHandler& XP, 446 SimulationEntity::Hints *ph = 0); 447 448 virtual Hint * 449 ParseHint(DataManager *pDM, const char *s) const; 450 451 virtual void AfterConvergence(const VectorHandler& X, 452 const VectorHandler& XP); 453 WorkSpaceDim(integer * piNumRows,integer * piNumCols)454 void WorkSpaceDim(integer* piNumRows, integer* piNumCols) const { 455 *piNumRows = NumDof; 456 *piNumCols = NumDof; 457 if (fc) { 458 *piNumRows += fc->iGetNumDof(); 459 *piNumCols += fc->iGetNumDof(); 460 } 461 }; 462 463 464 VariableSubMatrixHandler& AssJac(VariableSubMatrixHandler& WorkMat, 465 doublereal dCoef, 466 const VectorHandler& XCurr, 467 const VectorHandler& XPrimeCurr); 468 SubVectorHandler& AssRes(SubVectorHandler& WorkVec, 469 doublereal dCoef, 470 const VectorHandler& XCurr, 471 const VectorHandler& XPrimeCurr); 472 473 DofOrder::Order GetEqType(unsigned int i) const; 474 475 void OutputPrepare(OutputHandler &OH); 476 void Output(OutputHandler& OH) const; 477 478 479 /* funzioni usate nell'assemblaggio iniziale */ 480 iGetInitialNumDof(void)481 virtual unsigned int iGetInitialNumDof(void) const { 482 return 11; 483 }; InitialWorkSpaceDim(integer * piNumRows,integer * piNumCols)484 virtual void InitialWorkSpaceDim(integer* piNumRows, 485 integer* piNumCols) const { 486 *piNumRows = 35; 487 *piNumCols = 35; 488 }; 489 490 /* Contributo allo jacobiano durante l'assemblaggio iniziale */ 491 VariableSubMatrixHandler& InitialAssJac(VariableSubMatrixHandler& WorkMat, 492 const VectorHandler& XCurr); 493 494 /* Contributo al residuo durante l'assemblaggio iniziale */ 495 SubVectorHandler& InitialAssRes(SubVectorHandler& WorkVec, 496 const VectorHandler& XCurr); 497 498 /* Dati privati */ 499 virtual unsigned int iGetNumPrivData(void) const; 500 virtual unsigned int iGetPrivDataIdx(const char *s) const; 501 virtual doublereal dGetPrivData(unsigned int i) const; 502 503 /* *******PER IL SOLUTORE PARALLELO******** */ 504 /* Fornisce il tipo e la label dei nodi che sono connessi all'elemento 505 utile per l'assemblaggio della matrice di connessione fra i dofs */ GetConnectedNodes(std::vector<const Node * > & connectedNodes)506 virtual void GetConnectedNodes(std::vector<const Node *>& connectedNodes) const { 507 connectedNodes.resize(2); 508 connectedNodes[0] = pNode1; 509 connectedNodes[1] = pNode2; 510 }; 511 /* ************************************************ */ 512 }; 513 514 /* AxialRotationJoint - end */ 515 516 517 /* PlanePinJoint - begin */ 518 519 /* Incastro con liberta' di rotazione su un asse */ 520 521 class PlanePinJoint : virtual public Elem, public Joint { 522 private: 523 const StructNode* pNode; 524 Vec3 X0; 525 Mat3x3 R0; 526 Vec3 d; 527 Mat3x3 Rh; 528 Vec3 F; 529 Vec3 M; 530 bool calcInitdTheta; 531 mutable int NTheta; 532 mutable doublereal dTheta, dThetaWrapped; 533 534 public: 535 /* Costruttore non banale */ 536 PlanePinJoint(unsigned int uL, const DofOwner* pDO, 537 const StructNode* pN, 538 const Vec3& X0Tmp, const Mat3x3& R0Tmp, 539 const Vec3& dTmp, const Mat3x3& RhTmp, 540 flag fOut, const bool _calcInitdTheta, 541 const doublereal initDTheta); 542 543 ~PlanePinJoint(void); 544 545 /* Tipo di Joint */ GetJointType(void)546 virtual Joint::Type GetJointType(void) const { 547 return Joint::PIN; 548 }; 549 550 /* legge lo sato iniziale*/ 551 virtual void ReadInitialState(MBDynParser& HP); 552 553 /* Contributo al file di restart */ 554 virtual std::ostream& Restart(std::ostream& out) const; 555 iGetNumDof(void)556 virtual unsigned int iGetNumDof(void) const { 557 return 5; 558 }; 559 560 virtual std::ostream& DescribeDof(std::ostream& out, 561 const char *prefix = "", 562 bool bInitial = false) const; 563 564 virtual void DescribeDof(std::vector<std::string>& desc, 565 bool bInitial = false, int i = -1) const; 566 567 virtual std::ostream& DescribeEq(std::ostream& out, 568 const char *prefix = "", 569 bool bInitial = false) const; 570 571 virtual void DescribeEq(std::vector<std::string>& desc, 572 bool bInitial = false, int i = -1) const; 573 GetDofType(unsigned int i)574 virtual DofOrder::Order GetDofType(unsigned int i) const { 575 ASSERT(i >= 0 && i < 5); 576 return DofOrder::ALGEBRAIC; 577 }; 578 579 DofOrder::Order GetEqType(unsigned int i) const; 580 581 virtual void SetValue(DataManager *pDM, 582 VectorHandler& X, VectorHandler& XP, 583 SimulationEntity::Hints *ph = 0); 584 585 virtual Hint * 586 ParseHint(DataManager *pDM, const char *s) const; 587 588 virtual void AfterConvergence(const VectorHandler& X, 589 const VectorHandler& XP); 590 WorkSpaceDim(integer * piNumRows,integer * piNumCols)591 virtual void WorkSpaceDim(integer* piNumRows, integer* piNumCols) const { 592 *piNumRows = 11; 593 *piNumCols = 11; 594 }; 595 596 VariableSubMatrixHandler& AssJac(VariableSubMatrixHandler& WorkMat, 597 doublereal dCoef, 598 const VectorHandler& XCurr, 599 const VectorHandler& XPrimeCurr); 600 SubVectorHandler& AssRes(SubVectorHandler& WorkVec, 601 doublereal dCoef, 602 const VectorHandler& XCurr, 603 const VectorHandler& XPrimeCurr); 604 605 virtual void Output(OutputHandler& OH) const; 606 607 608 /* funzioni usate nell'assemblaggio iniziale */ 609 iGetInitialNumDof(void)610 virtual unsigned int iGetInitialNumDof(void) const { 611 return 10; 612 }; InitialWorkSpaceDim(integer * piNumRows,integer * piNumCols)613 virtual void InitialWorkSpaceDim(integer* piNumRows, 614 integer* piNumCols) const { 615 *piNumRows = 22; 616 *piNumCols = 22; 617 }; 618 619 /* Contributo allo jacobiano durante l'assemblaggio iniziale */ 620 VariableSubMatrixHandler& InitialAssJac(VariableSubMatrixHandler& WorkMat, 621 const VectorHandler& XCurr); 622 623 /* Contributo al residuo durante l'assemblaggio iniziale */ 624 SubVectorHandler& InitialAssRes(SubVectorHandler& WorkVec, 625 const VectorHandler& XCurr); 626 627 /* Dati privati */ 628 virtual unsigned int iGetNumPrivData(void) const; 629 virtual unsigned int iGetPrivDataIdx(const char *s) const; 630 virtual doublereal dGetPrivData(unsigned int i) const; 631 632 /* *******PER IL SOLUTORE PARALLELO******** */ 633 /* Fornisce il tipo e la label dei nodi che sono connessi all'elemento 634 utile per l'assemblaggio della matrice di connessione fra i dofs */ GetConnectedNodes(std::vector<const Node * > & connectedNodes)635 virtual void GetConnectedNodes(std::vector<const Node *>& connectedNodes) const { 636 connectedNodes.resize(1); 637 connectedNodes[0] = pNode; 638 }; 639 /* ************************************************ */ 640 }; 641 642 /* PlanePinJoint - end */ 643 644 #endif /* PLANEJ_H */ 645 646