MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
rotor.h
Go to the documentation of this file.
1 /* $Header: /var/cvs/mbdyn/mbdyn/mbdyn-1.0/mbdyn/aero/rotor.h,v 1.69 2017/01/12 14:45:58 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 rotore */
33 
34 #ifndef ROTOR_H
35 #define ROTOR_H
36 
37 #include "indvel.h"
38 
39 extern const char* psRotorNames[];
40 
41 /* Rotor - begin */
42 
43 class Rotor
44 : virtual public Elem, public InducedVelocityElem {
45 protected:
48 
49  doublereal dOmegaRef; // Velocita' di rotazione di riferimento
50 
51  doublereal dRadius; // Raggio del rotore
52  doublereal dVTipRef; // Raggio del rotore
53  doublereal dArea; // Area del disco
54  doublereal dUMean; // Velocita' indotta media
55  doublereal dUMeanRef; // Velocita' indotta media (nominale)
56  mutable doublereal dUMeanPrev; // Vel. indotta media al passo prec.
57 
58  // iterations for dUMeanRef
59  unsigned int iMaxIter;
60  unsigned int iCurrIter;
64 
66  // Peso della velocita' indotta media
67  // (peso della V al passo precedente, def = 0.)
69  // Correzione H (scala la velocita' indotta)
71  // FF
73 
74  // Trasposta della matrice di rotazione rotore
77  Vec3 RRot3; // Direzione dell'asse del rotore
78  Vec3 VCraft; // Velocita' di traslazione del velivolo
79  doublereal dPsi0; // Angolo di azimuth del rotore
80  doublereal dSinAlphad; // Angolo di incidenza del disco?
82  doublereal dMu; // Parametro di'avanzamento
83  doublereal dLambda; // Parametro di influsso
84  doublereal dChi; // ???
85 
86  doublereal dVelocity; // Velocita' di riferimento
87  doublereal dOmega; // Velocita' di rotazione di riferimento
88 
89 
90 
91  // temporaneo
92  mutable int iNumSteps;
93 
94  // Questa funzione non viene usata, da Rotor, ma da altre classi derivate
95  // con modellazioni piu' sofisticate della velocita' indotta
96  virtual doublereal dGetPsi(const Vec3& X) const;
97 
98  // Calcola la distanza di un punto dall'asse di rotazione
99  // in coordinate adimensionali
100  virtual doublereal dGetPos(const Vec3& X) const;
101 
102  // Combina i due ...
103  virtual void GetPos(const Vec3& X, doublereal& dr, doublereal& dp) const;
104 
105  // Calcola la velocita' di traslazione del rotore
106  virtual void InitParam(bool bComputeMeanInducedVelocity = true);
107 
108  virtual void Init(const StructNode* pC, const Mat3x3& rrot,
109  const StructNode* pR, const StructNode* pG,
110  ResForceSet **ppres,
111  const doublereal& dR,
112  unsigned int iMaxIt,
113  const doublereal& dTol,
114  const doublereal& dE,
115  flag fOut);
116 
117 public:
118  Rotor(unsigned int uL, const DofOwner* pDO);
119  Rotor(unsigned int uL, const DofOwner* pDO,
120  const StructNode* pC, const Mat3x3& rrot,
121  const StructNode* pR, const StructNode* pG,
122  ResForceSet **ppres,
123  const doublereal& dR,
124  unsigned int iMaxIt,
125  const doublereal& dTol,
126  const doublereal& dE,
127  flag fOut);
128  virtual ~Rotor(void);
129 
130  // Elaborazione stato interno dopo la convergenza
131  virtual void
132  AfterConvergence(const VectorHandler& X, const VectorHandler& XP);
133 
134  // output; si assume che ogni tipo di elemento sappia,
135  // attraverso l'OutputHandler, dove scrivere il proprio output
136  virtual void Output(OutputHandler& OH) const;
137 
138  // Contributo al file di Restart
139  virtual std::ostream& Restart(std::ostream& out) const;
140 
141  // Relativo ai ...WithDofs
142  virtual void SetInitialValue(VectorHandler& /* X */ ) {
143  NO_OP;
144  };
145 
146  virtual inline const Vec3& GetXCurr(void) const {
147  return pRotor->GetXCurr();
148  };
149 
150  // accesso a dati
151  virtual inline doublereal dGetOmega(void) const {
152 #if defined(USE_MULTITHREAD) && defined(MBDYN_X_MT_ASSRES)
153  Wait();
154 #endif // USE_MULTITHREAD && MBDYN_X_MT_ASSRES
155  return dOmega;
156  };
157 
158  virtual inline doublereal dGetRadius(void) const {
159 #if defined(USE_MULTITHREAD) && defined(MBDYN_X_MT_ASSRES)
160  Wait();
161 #endif // USE_MULTITHREAD && MBDYN_X_MT_ASSRES
162  return dRadius;
163  };
164 
165  virtual inline doublereal dGetMu(void) const {
166 #if defined(USE_MULTITHREAD) && defined(MBDYN_X_MT_ASSRES)
167  Wait();
168 #endif // USE_MULTITHREAD && MBDYN_X_MT_ASSRES
169  return dMu;
170  };
171 
172  virtual inline const Vec3& GetForces(void) const {
173 #if defined(USE_MULTITHREAD) && defined(MBDYN_X_MT_ASSRES)
174  Wait();
175 #endif // USE_MULTITHREAD && MBDYN_X_MT_ASSRES
176  return Res.Force();
177  };
178 
179  virtual inline const Vec3& GetMoments(void) const {
180 #if defined(USE_MULTITHREAD) && defined(MBDYN_X_MT_ASSRES)
181  Wait();
182 #endif // USE_MULTITHREAD && MBDYN_X_MT_ASSRES
183  return Res.Moment();
184  };
185 
186  // *******PER IL SOLUTORE PARALLELO********
187  // Fornisce il tipo e la label dei nodi che sono connessi all'elemento
188  // utile per l'assemblaggio della matrice di connessione fra i dofs
189  virtual void
190  GetConnectedNodes(std::vector<const Node *>& connectedNodes) const {
191  if (pGround != 0) {
192  connectedNodes.resize(3);
193  connectedNodes[2] = pGround;
194  } else {
195  connectedNodes.resize(2);
196  }
197 
198  connectedNodes[0] = pCraft;
199  connectedNodes[1] = pRotor;
200  };
201  // ************************************************
202 };
203 
204 /* Rotor - end */
205 
206 
207 /* NoRotor - begin */
208 
209 class NoRotor : virtual public Elem, public Rotor {
210 protected:
211  virtual void Init(const StructNode* pCraft,
212  const Mat3x3& rrot,
213  const StructNode* pRotor,
214  ResForceSet **ppres,
215  const doublereal& dR,
216  flag fOut);
217 
218 public:
219  NoRotor(unsigned int uLabel, const DofOwner* pDO);
220  NoRotor(unsigned int uLabel,
221  const DofOwner* pDO,
222  const StructNode* pCraft,
223  const Mat3x3& rrot,
224  const StructNode* pRotor,
225  ResForceSet **ppres,
226  const doublereal& dR,
227  flag fOut);
228  virtual ~NoRotor(void);
229 
230  // assemblaggio residuo
231  virtual SubVectorHandler&
232  AssRes(SubVectorHandler& WorkVec,
233  doublereal dCoef,
234  const VectorHandler& XCurr,
235  const VectorHandler& XPrimeCurr);
236 
237  // Contributo al file di Restart
238  virtual std::ostream& Restart(std::ostream& out) const;
239 
241  return InducedVelocity::NO;
242  };
243 
244  // Somma alla trazione il contributo di un elemento
245  virtual void
246  AddForce(const Elem *pEl, const StructNode *pNode, const Vec3& F, const Vec3& M, const Vec3& X);
247 
248  // Restituisce ad un elemento la velocita' indotta
249  // in base alla posizione azimuthale
250  virtual Vec3 GetInducedVelocity(Elem::Type type,
251  unsigned uLabel, unsigned uPnt, const Vec3& X) const;
252 };
253 
254 /* NoRotor - end */
255 
256 
257 /* UniformRotor - begin */
258 
259 class UniformRotor : virtual public Elem, public Rotor {
260 protected:
261  virtual void Init(const StructNode* pCraft,
262  const Mat3x3& rrot,
263  const StructNode* pRotor,
264  const StructNode* pGround,
265  ResForceSet **ppres,
266  const doublereal& dOR,
267  const doublereal& dR,
268  DriveCaller *pdW,
269  unsigned int iMaxIt,
270  const doublereal& dTol,
271  const doublereal& dE,
272  const doublereal& dCH,
273  const doublereal& dCFF,
274  flag fOut);
275 
276 public:
277  UniformRotor(unsigned int uLabel, const DofOwner* pDO);
278  UniformRotor(unsigned int uLabel,
279  const DofOwner* pDO,
280  const StructNode* pCraft,
281  const Mat3x3& rrot,
282  const StructNode* pRotor,
283  const StructNode* pGround,
284  ResForceSet **ppres,
285  const doublereal& dOR,
286  const doublereal& dR,
287  DriveCaller *pdW,
288  unsigned int iMaxIt,
289  const doublereal& dTol,
290  const doublereal& dE,
291  const doublereal& dCH,
292  const doublereal& dCFF,
293  flag fOut);
294  virtual ~UniformRotor(void);
295 
296  // assemblaggio residuo
297  virtual SubVectorHandler&
298  AssRes(SubVectorHandler& WorkVec,
299  doublereal dCoef,
300  const VectorHandler& XCurr,
301  const VectorHandler& XPrimeCurr);
302 
303  // Contributo al file di Restart
304  virtual std::ostream& Restart(std::ostream& out) const;
305 
308  };
309 
310  // Somma alla trazione il contributo di un elemento
311  virtual void
312  AddForce(const Elem *pEl, const StructNode *pNode, const Vec3& F, const Vec3& M, const Vec3& X);
313 
314  // Restituisce ad un elemento la velocita' indotta
315  // in base alla posizione azimuthale
316  virtual Vec3 GetInducedVelocity(Elem::Type type,
317  unsigned uLabel, unsigned uPnt, const Vec3& X) const;
318 };
319 
320 class UniformRotor2 : virtual public Elem, public UniformRotor {
321 protected:
322 #if 0 // not needed because identical to UniformRotor::Init()
323  virtual void Init(const StructNode* pCraft,
324  const Mat3x3& rrot,
325  const StructNode* pRotor,
326  const StructNode* pGround,
327  ResForceSet **ppres,
328  const doublereal& dOR,
329  const doublereal& dR,
330  DriveCaller *pdW,
331  unsigned int iMaxIt,
332  const doublereal& dTol,
333  const doublereal& dE,
334  const doublereal& dCH,
335  const doublereal& dCFF,
336  flag fOut);
337 #endif
338 
339 public:
340  UniformRotor2(unsigned int uLabel, const DofOwner* pDO);
341  UniformRotor2(unsigned int uLabel,
342  const DofOwner* pDO,
343  const StructNode* pCraft,
344  const Mat3x3& rrot,
345  const StructNode* pRotor,
346  const StructNode* pGround,
347  ResForceSet **ppres,
348  const doublereal& dOR,
349  const doublereal& dR,
350  DriveCaller *pdW,
351  unsigned int iMaxIt,
352  const doublereal& dTol,
353  const doublereal& dE,
354  const doublereal& dCH,
355  const doublereal& dCFF,
356  flag fOut);
357  virtual ~UniformRotor2(void);
358 
359  virtual bool bSectionalForces(void) const;
360  virtual void AddSectionalForce(Elem::Type type,
361  const Elem *pEl, unsigned uPnt,
362  const Vec3& F, const Vec3& M, doublereal dW,
363  const Vec3& X, const Mat3x3& R,
364  const Vec3& V, const Vec3& W);
365 };
366 
367 /* UniformRotor - end */
368 
369 
370 /* GlauertRotor - begin */
371 
372 class GlauertRotor : virtual public Elem, public Rotor {
373 public:
374  enum Type {
375  UNKNOWN = -1,
376 
377  // from (?)
379 
380  // from J. Gordon Leishman, Principles of Helicopter Aerodynamics, 2000
387 
388  // from Massimo Gennaretti, Roma Tre
390 
392  };
393 
394 protected:
396 
397  virtual void Init(const StructNode* pCraft,
398  const Mat3x3& rrot,
399  const StructNode* pRotor,
400  const StructNode* pGround,
401  ResForceSet **ppres,
402  const doublereal& dOR,
403  const doublereal& dR,
404  DriveCaller *pdW,
405  unsigned int iMaxIt,
406  const doublereal& dTol,
407  const doublereal& dE,
408  const doublereal& dCH,
409  const doublereal& dCFF,
410  flag fOut);
411 
412 public:
413  GlauertRotor(unsigned int uLabel, const DofOwner* pDO);
414  GlauertRotor(unsigned int uLabel,
415  const DofOwner* pDO,
416  const StructNode* pCraft,
417  const Mat3x3& rrot,
418  const StructNode* pRotor,
419  const StructNode* pGround,
420  ResForceSet **ppres,
421  const doublereal& dOR,
422  const doublereal& dR,
423  DriveCaller *pdW,
424  unsigned int iMaxIt,
425  const doublereal& dTol,
426  const doublereal& dE,
427  const doublereal& dCH,
428  const doublereal& dCFF,
430  flag fOut);
431  virtual ~GlauertRotor(void);
432 
433  // assemblaggio residuo
434  virtual SubVectorHandler&
435  AssRes(SubVectorHandler& WorkVec,
436  doublereal dCoef,
437  const VectorHandler& XCurr,
438  const VectorHandler& XPrimeCurr);
439 
440  // Contributo al file di Restart
441  virtual std::ostream& Restart(std::ostream& out) const;
442 
445  };
446 
447  // Somma alla trazione il contributo di un elemento
448  virtual void
449  AddForce(const Elem *pEl, const StructNode *pNode, const Vec3& F, const Vec3& M, const Vec3& X);
450 
451  // Restituisce ad un elemento la velocita' indotta
452  // in base alla posizione azimuthale
453  virtual Vec3 GetInducedVelocity(Elem::Type type,
454  unsigned uLabel, unsigned uPnt, const Vec3& X) const;
455 };
456 
457 /* GlauertRotor - end */
458 
459 
460 /* ManglerRotor - begin */
461 
462 class ManglerRotor : virtual public Elem, public Rotor {
463 protected:
464  virtual void Init(const StructNode* pCraft,
465  const Mat3x3& rrot,
466  const StructNode* pRotor,
467  const StructNode* pGround,
468  ResForceSet **ppres,
469  const doublereal& dOR,
470  const doublereal& dR,
471  DriveCaller *pdW,
472  unsigned int iMaxIt,
473  const doublereal& dTol,
474  const doublereal& dE,
475  const doublereal& dCH,
476  const doublereal& dCFF,
477  flag fOut);
478 
479 public:
480  ManglerRotor(unsigned int uLabel, const DofOwner* pDO);
481  ManglerRotor(unsigned int uLabel,
482  const DofOwner* pDO,
483  const StructNode* pCraft,
484  const Mat3x3& rrot,
485  const StructNode* pRotor,
486  const StructNode* pGround,
487  ResForceSet **ppres,
488  const doublereal& dOR,
489  const doublereal& dR,
490  DriveCaller *pdW,
491  unsigned int iMaxIt,
492  const doublereal& dTol,
493  const doublereal& dE,
494  const doublereal& dCH,
495  const doublereal& dCFF,
496  flag fOut);
497  virtual ~ManglerRotor(void);
498 
499  // assemblaggio residuo
500  virtual SubVectorHandler&
501  AssRes(SubVectorHandler& WorkVec,
502  doublereal dCoef,
503  const VectorHandler& XCurr,
504  const VectorHandler& XPrimeCurr);
505 
506  // Contributo al file di Restart
507  virtual std::ostream& Restart(std::ostream& out) const;
508 
511  };
512 
513  // Somma alla trazione il contributo di un elemento
514  virtual void
515  AddForce(const Elem *pEl, const StructNode *pNode, const Vec3& F, const Vec3& M, const Vec3& X);
516 
517  // Restituisce ad un elemento la velocita' indotta
518  // in base alla posizione azimuthale
519  virtual Vec3 GetInducedVelocity(Elem::Type type,
520  unsigned uLabel, unsigned uPnt, const Vec3& X) const;
521 };
522 
523 /* ManglerRotor - end */
524 
525 
526 /* DynamicInflowRotor - begin */
527 
528 /*
529  * Based on the 3 state dynamic inflow by Pitt-Peters:
530  *
531  * D. M. Pitt, D. A. Peters,
532  * "Theoretical Prediction of Dynamic Inflow Derivatives",
533  * Vertica, Vol. 5, pp.21-34, 1981
534  *
535  * as discussed by Chen in:
536  *
537  * R. T. N. Chen,
538  * "A Survey of Nonuniform Inflow Models for Rotorcraft
539  * Flight Dynamics and Control Applications"
540  * Vertica, Vol 14, No. 2, pp.147-184, 1990
541  */
542 
543 class DynamicInflowRotor : virtual public Elem, public Rotor {
544 protected:
548 
554 
555  virtual void Init(const StructNode* pCraft,
556  const Mat3x3& rrot,
557  const StructNode* pRotor,
558  const StructNode* pGround,
559  ResForceSet **ppres,
560  const doublereal& dOR,
561  const doublereal& dR,
562  unsigned int iMaxIt,
563  const doublereal& dTol,
564  const doublereal& dE,
565  const doublereal& dCH,
566  const doublereal& dCFF,
567  const doublereal& dVConstTmp,
568  const doublereal& dVSineTmp,
569  const doublereal& dVCosineTmp,
570  flag fOut);
571 
572 public:
573  DynamicInflowRotor(unsigned int uLabel, const DofOwner* pDO);
574  DynamicInflowRotor(unsigned int uLabel,
575  const DofOwner* pDO,
576  const StructNode* pCraft,
577  const Mat3x3& rrot,
578  const StructNode* pRotor,
579  const StructNode* pGround,
580  ResForceSet **ppres,
581  const doublereal& dOR,
582  const doublereal& dR,
583  unsigned int iMaxIt,
584  const doublereal& dTol,
585  const doublereal& dE,
586  const doublereal& dCH,
587  const doublereal& dCFF,
588  const doublereal& dVConstTmp,
589  const doublereal& dVSineTmp,
590  const doublereal& dVCosineTmp,
591  flag fOut);
592  virtual ~DynamicInflowRotor(void);
593 
594  // ritorna il numero di Dofs per gli elementi che sono anche DofOwner
595  virtual unsigned int iGetNumDof(void) const {
596  return 3;
597  };
598 
599  // output; si assume che ogni tipo di elemento sappia,
600  // attraverso l'OutputHandler, dove scrivere il proprio output
601  virtual void Output(OutputHandler& OH) const;
602 
603  // Dimensioni del workspace
604  virtual void WorkSpaceDim(integer* piNumRows, integer* piNumCols) const {
605  *piNumRows = 3;
606  *piNumCols = 3;
607  };
608 
609  // assemblaggio jacobiano
610  virtual VariableSubMatrixHandler&
612  doublereal dCoef,
613  const VectorHandler& XCurr,
614  const VectorHandler& XPrimeCurr);
615 
616  // assemblaggio residuo
617  virtual SubVectorHandler&
618  AssRes(SubVectorHandler& WorkVec,
619  doublereal dCoef,
620  const VectorHandler& XCurr,
621  const VectorHandler& XPrimeCurr);
622 
623  // Contributo al file di Restart
624  virtual std::ostream& Restart(std::ostream& out) const;
625 
626  // Relativo ai ...WithDofs
627  virtual void SetInitialValue(VectorHandler& X);
628 
629  // Relativo ai ...WithDofs
630  virtual void
631  SetValue(DataManager *pDM,
633  SimulationEntity::Hints *ph = 0);
634 
637  };
638 
639  // Somma alla trazione il contributo di un elemento */
640  virtual void
641  AddForce(const Elem *pEl, const StructNode *pNode, const Vec3& F, const Vec3& M, const Vec3& X);
642 
643  // Restituisce ad un elemento la velocita' indotta
644  // in base alla posizione azimuthale
645  virtual Vec3 GetInducedVelocity(Elem::Type type,
646  unsigned uLabel, unsigned uPnt, const Vec3& X) const;
647 };
648 
649 /* DynamicInflowRotor - end */
650 
651 /* PetersHeRotor - begin */
652 
653 /*
654  * Based on the 3 state dynamic inflow by Pitt-Peters:
655  *
656  * D. M. Pitt, D. A. Peters,
657  * "Theoretical Prediction of Dynamic Inflow Derivatives",
658  * Vertica, Vol. 5, pp.21-34, 1981
659  *
660  * as discussed by Chen in:
661  *
662  * R. T. N. Chen,
663  * "A Survey of Nonuniform Inflow Models for Rotorcraft
664  * Flight Dynamics and Control Applications"
665  * Vertica, Vol 14, No. 2, pp.147-184, 1990
666  */
667 
668 class PetersHeRotor : virtual public Elem, public Rotor {
669 protected:
673 
679 
680  virtual void Init(const StructNode* pCraft,
681  const Mat3x3& rrot,
682  const StructNode* pRotor,
683  const StructNode* pGround,
684  ResForceSet **ppres,
685  const doublereal& dOR,
686  const doublereal& dR,
687  unsigned int iMaxIt,
688  const doublereal& dTol,
689  const doublereal& dE,
690  const doublereal& dCH,
691  const doublereal& dCFF,
692  const doublereal& dVConstTmp,
693  const doublereal& dVSineTmp,
694  const doublereal& dVCosineTmp,
695  flag fOut);
696 
697 public:
698  PetersHeRotor(unsigned int uLabel, const DofOwner* pDO);
699  PetersHeRotor(unsigned int uLabel,
700  const DofOwner* pDO,
701  const StructNode* pCraft,
702  const Mat3x3& rrot,
703  const StructNode* pRotor,
704  const StructNode* pGround,
705  ResForceSet **ppres,
706  const doublereal& dOR,
707  const doublereal& dR,
708  unsigned int iMaxIt,
709  const doublereal& dTol,
710  const doublereal& dE,
711  const doublereal& dCH,
712  const doublereal& dCFF,
713  const doublereal& dVConstTmp,
714  const doublereal& dVSineTmp,
715  const doublereal& dVCosineTmp,
716  flag fOut);
717  virtual ~PetersHeRotor(void);
718 
719  // ritorna il numero di Dofs per gli elementi che sono anche DofOwner
720  virtual unsigned int iGetNumDof(void) const {
721  return 3;
722  };
723 
724  // output; si assume che ogni tipo di elemento sappia,
725  // attraverso l'OutputHandler, dove scrivere il proprio output
726  virtual void Output(OutputHandler& OH) const;
727 
728  // Dimensioni del workspace
729  virtual void WorkSpaceDim(integer* piNumRows, integer* piNumCols) const {
730  *piNumRows = 3;
731  *piNumCols = 3;
732  };
733 
734  // assemblaggio jacobiano
735  virtual VariableSubMatrixHandler&
737  doublereal dCoef,
738  const VectorHandler& XCurr,
739  const VectorHandler& XPrimeCurr);
740 
741  // assemblaggio residuo
742  virtual SubVectorHandler&
743  AssRes(SubVectorHandler& WorkVec,
744  doublereal dCoef,
745  const VectorHandler& XCurr,
746  const VectorHandler& XPrimeCurr);
747 
748  // Contributo al file di Restart
749  virtual std::ostream& Restart(std::ostream& out) const;
750 
751  // Relativo ai ...WithDofs
752  virtual void SetInitialValue(VectorHandler& X);
753 
754  // Relativo ai ...WithDofs
755  virtual void
756  SetValue(DataManager *pDM,
758  SimulationEntity::Hints *ph = 0);
759 
762  };
763 
764  // Somma alla trazione il contributo di un elemento */
765  virtual void
766  AddForce(const Elem *pEl, const StructNode *pNode, const Vec3& F, const Vec3& M, const Vec3& X);
767 
768  // Restituisce ad un elemento la velocita' indotta
769  // in base alla posizione azimuthale
770  virtual Vec3 GetInducedVelocity(Elem::Type type,
771  unsigned uLabel, unsigned uPnt, const Vec3& X) const;
772 };
773 
774 /* PetersHeRotor - end */
775 
776 class DataManager;
777 class MBDynParser;
778 
779 extern Elem*
781  MBDynParser& HP,
782  const DofOwner* pDO,
783  unsigned int uLabel);
784 
785 #endif /* ROTOR_H */
786 
Type gtype
Definition: rotor.h:395
ExternResForces Res
Definition: indvel.h:114
virtual void SetInitialValue(VectorHandler &X)
Definition: rotor.cc:2485
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: rotor.cc:1755
virtual Vec3 GetInducedVelocity(Elem::Type type, unsigned uLabel, unsigned uPnt, const Vec3 &X) const
Definition: rotor.cc:1460
doublereal dHoverCorrection
Definition: rotor.h:70
virtual std::ostream & Restart(std::ostream &out) const
Definition: rotor.cc:535
doublereal dArea
Definition: rotor.h:53
doublereal dForwardFlightCorrection
Definition: rotor.h:72
doublereal dVelocity
Definition: rotor.h:86
virtual std::ostream & Restart(std::ostream &out) const
Definition: rotor.cc:2511
long int flag
Definition: mbdyn.h:43
InducedVelocity::Type GetInducedVelocityType(void) const
Definition: rotor.h:306
virtual ~UniformRotor2(void)
Definition: rotor.cc:923
doublereal dL33
Definition: rotor.h:678
virtual ~UniformRotor(void)
Definition: rotor.cc:774
virtual doublereal dGetPsi(const Vec3 &X) const
Definition: rotor.cc:286
doublereal dCosAlphad
Definition: rotor.h:81
UniformRotor(unsigned int uLabel, const DofOwner *pDO)
Definition: rotor.cc:694
Definition: matvec3.h:98
virtual std::ostream & Restart(std::ostream &out) const
Definition: rotor.cc:1112
int iNumSteps
Definition: rotor.h:92
InducedVelocity::Type GetInducedVelocityType(void) const
Definition: rotor.h:443
Vec3 RRot3
Definition: rotor.h:77
virtual void AddSectionalForce(Elem::Type type, const Elem *pEl, unsigned uPnt, const Vec3 &F, const Vec3 &M, doublereal dW, const Vec3 &X, const Mat3x3 &R, const Vec3 &V, const Vec3 &W)
Definition: rotor.cc:936
NoRotor(unsigned int uLabel, const DofOwner *pDO)
Definition: rotor.cc:547
InducedVelocity::Type GetInducedVelocityType(void) const
Definition: rotor.h:509
virtual void AddForce(const Elem *pEl, const StructNode *pNode, const Vec3 &F, const Vec3 &M, const Vec3 &X)
Definition: rotor.cc:852
virtual const Vec3 & Force(void) const
Definition: resforces.cc:103
doublereal dVSine
Definition: rotor.h:671
const char * psRotorNames[]
Definition: enums.cc:330
doublereal dL31
Definition: rotor.h:677
virtual std::ostream & Restart(std::ostream &out) const
Definition: rotor.cc:842
virtual std::ostream & Restart(std::ostream &out) const
Definition: rotor.cc:1417
unsigned int iMaxIter
Definition: rotor.h:59
virtual void AfterConvergence(const VectorHandler &X, const VectorHandler &XP)
Definition: rotor.cc:152
doublereal dVCosine
Definition: rotor.h:547
GlauertRotor(unsigned int uLabel, const DofOwner *pDO)
Definition: rotor.cc:976
doublereal dL22
Definition: rotor.h:551
Mat3x3 RRot
Definition: rotor.h:76
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: rotor.cc:1785
virtual void AddForce(const Elem *pEl, const StructNode *pNode, const Vec3 &F, const Vec3 &M, const Vec3 &X)
Definition: rotor.cc:1123
virtual std::ostream & Restart(std::ostream &out) const
Definition: rotor.cc:645
doublereal dVConst
Definition: rotor.h:670
virtual void Init(const StructNode *pC, const Mat3x3 &rrot, const StructNode *pR, const StructNode *pG, ResForceSet **ppres, const doublereal &dR, unsigned int iMaxIt, const doublereal &dTol, const doublereal &dE, flag fOut)
Definition: rotor.cc:112
doublereal dL22
Definition: rotor.h:676
#define NO_OP
Definition: myassert.h:74
ManglerRotor(unsigned int uLabel, const DofOwner *pDO)
Definition: rotor.cc:1261
doublereal dSinAlphad
Definition: rotor.h:80
std::vector< Hint * > Hints
Definition: simentity.h:89
virtual const Vec3 & Moment(void) const
Definition: resforces.cc:109
virtual void Init(const StructNode *pCraft, const Mat3x3 &rrot, const StructNode *pRotor, const StructNode *pGround, ResForceSet **ppres, const doublereal &dOR, const doublereal &dR, unsigned int iMaxIt, const doublereal &dTol, const doublereal &dE, const doublereal &dCH, const doublereal &dCFF, const doublereal &dVConstTmp, const doublereal &dVSineTmp, const doublereal &dVCosineTmp, flag fOut)
Definition: rotor.cc:2093
DriveOwner Weight
Definition: rotor.h:65
virtual ~Rotor(void)
Definition: rotor.cc:146
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: rotor.cc:2273
doublereal dVConst
Definition: rotor.h:545
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: rotor.cc:785
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: rotor.h:604
virtual Vec3 GetInducedVelocity(Elem::Type type, unsigned uLabel, unsigned uPnt, const Vec3 &X) const
Definition: rotor.cc:2037
virtual ~NoRotor(void)
Definition: rotor.cc:596
virtual const Vec3 & GetForces(void) const
Definition: rotor.h:172
virtual void SetInitialValue(VectorHandler &X)
Definition: rotor.cc:1967
virtual void Init(const StructNode *pCraft, const Mat3x3 &rrot, const StructNode *pRotor, const StructNode *pGround, ResForceSet **ppres, const doublereal &dOR, const doublereal &dR, DriveCaller *pdW, unsigned int iMaxIt, const doublereal &dTol, const doublereal &dE, const doublereal &dCH, const doublereal &dCFF, flag fOut)
Definition: rotor.cc:1291
DynamicInflowRotor(unsigned int uLabel, const DofOwner *pDO)
Definition: rotor.cc:1537
virtual doublereal dGetMu(void) const
Definition: rotor.h:165
Definition: rotor.h:209
virtual unsigned int iGetNumDof(void) const
Definition: rotor.h:720
virtual ~GlauertRotor(void)
Definition: rotor.cc:1067
virtual void AddForce(const Elem *pEl, const StructNode *pNode, const Vec3 &F, const Vec3 &M, const Vec3 &X)
Definition: rotor.cc:652
virtual bool bSectionalForces(void) const
Definition: rotor.cc:929
doublereal dUMeanPrev
Definition: rotor.h:56
virtual void GetConnectedNodes(std::vector< const Node * > &connectedNodes) const
Definition: rotor.h:190
virtual ~PetersHeRotor(void)
Definition: rotor.cc:2158
bool bUMeanRefConverged
Definition: rotor.h:63
PetersHeRotor(unsigned int uLabel, const DofOwner *pDO)
Definition: rotor.cc:2055
InducedVelocity::Type GetInducedVelocityType(void) const
Definition: rotor.h:760
virtual doublereal dGetRadius(void) const
Definition: rotor.h:158
virtual const Vec3 & GetXCurr(void) const
Definition: rotor.h:146
virtual void SetInitialValue(VectorHandler &)
Definition: rotor.h:142
Rotor(unsigned int uL, const DofOwner *pDO)
Definition: rotor.cc:59
doublereal dOmega
Definition: rotor.h:87
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: rotor.cc:2303
doublereal dL11
Definition: rotor.h:674
virtual Vec3 GetInducedVelocity(Elem::Type type, unsigned uLabel, unsigned uPnt, const Vec3 &X) const
Definition: rotor.cc:1158
DataManager * pDM
Definition: mbpar.h:252
InducedVelocity::Type GetInducedVelocityType(void) const
Definition: rotor.h:635
virtual InducedVelocity::Type GetInducedVelocityType(void) const
Definition: rotor.h:240
virtual void Output(OutputHandler &OH) const
Definition: rotor.cc:1651
virtual std::ostream & Restart(std::ostream &out) const
Definition: rotor.cc:1993
virtual Vec3 GetInducedVelocity(Elem::Type type, unsigned uLabel, unsigned uPnt, const Vec3 &X) const
Definition: rotor.cc:2555
doublereal dPsi0
Definition: rotor.h:79
virtual void Init(const StructNode *pCraft, const Mat3x3 &rrot, const StructNode *pRotor, const StructNode *pGround, ResForceSet **ppres, const doublereal &dOR, const doublereal &dR, DriveCaller *pdW, unsigned int iMaxIt, const doublereal &dTol, const doublereal &dE, const doublereal &dCH, const doublereal &dCFF, flag fOut)
Definition: rotor.cc:725
Vec3 VCraft
Definition: rotor.h:78
doublereal dUMeanRef
Definition: rotor.h:55
Elem * ReadRotor(DataManager *pDM, MBDynParser &HP, const DofOwner *pDO, unsigned int uLabel)
Definition: rotor.cc:2573
virtual Vec3 GetInducedVelocity(Elem::Type type, unsigned uLabel, unsigned uPnt, const Vec3 &X) const
Definition: rotor.cc:683
doublereal dMu
Definition: rotor.h:82
unsigned int uLabel
Definition: withlab.h:44
virtual void GetPos(const Vec3 &X, doublereal &dr, doublereal &dp) const
Definition: rotor.cc:304
virtual void AddForce(const Elem *pEl, const StructNode *pNode, const Vec3 &F, const Vec3 &M, const Vec3 &X)
Definition: rotor.cc:2003
virtual doublereal dGetOmega(void) const
Definition: rotor.h:151
virtual void Init(const StructNode *pCraft, const Mat3x3 &rrot, const StructNode *pRotor, const StructNode *pGround, ResForceSet **ppres, const doublereal &dOR, const doublereal &dR, DriveCaller *pdW, unsigned int iMaxIt, const doublereal &dTol, const doublereal &dE, const doublereal &dCH, const doublereal &dCFF, flag fOut)
Definition: rotor.cc:1010
virtual const Vec3 & GetXCurr(void) const
Definition: strnode.h:310
doublereal dVCosine
Definition: rotor.h:672
virtual void Output(OutputHandler &OH) const
Definition: rotor.cc:2169
doublereal dL11
Definition: rotor.h:549
doublereal dVSine
Definition: rotor.h:546
doublereal dVTipRef
Definition: rotor.h:52
Mat3x3 RRotTranspose
Definition: rotor.h:75
virtual doublereal dGetPos(const Vec3 &X) const
Definition: rotor.cc:296
doublereal dEta
Definition: rotor.h:62
Definition: elem.h:75
doublereal dL13
Definition: rotor.h:550
Type
Definition: elem.h:91
doublereal dOmegaRef
Definition: rotor.h:49
virtual ~DynamicInflowRotor(void)
Definition: rotor.cc:1640
virtual void InitParam(bool bComputeMeanInducedVelocity=true)
Definition: rotor.cc:323
unsigned int iCurrIter
Definition: rotor.h:60
doublereal dWeight
Definition: rotor.h:68
doublereal dLambda
Definition: rotor.h:83
virtual void AddForce(const Elem *pEl, const StructNode *pNode, const Vec3 &F, const Vec3 &M, const Vec3 &X)
Definition: rotor.cc:2521
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: rotor.h:729
virtual void Init(const StructNode *pCraft, const Mat3x3 &rrot, const StructNode *pRotor, ResForceSet **ppres, const doublereal &dR, flag fOut)
Definition: rotor.cc:570
UniformRotor2(unsigned int uLabel, const DofOwner *pDO)
Definition: rotor.cc:894
doublereal dRadius
Definition: rotor.h:51
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: rotor.cc:1358
const StructNode * pRotor
Definition: rotor.h:46
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
Definition: rotor.cc:1975
doublereal dL13
Definition: rotor.h:675
doublereal dL33
Definition: rotor.h:553
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: rotor.cc:1079
doublereal dL31
Definition: rotor.h:552
double doublereal
Definition: colamd.c:52
virtual void Output(OutputHandler &OH) const
Definition: rotor.cc:183
long int integer
Definition: colamd.c:51
const StructNode * pGround
Definition: rotor.h:47
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
Definition: rotor.cc:2493
virtual void AddForce(const Elem *pEl, const StructNode *pNode, const Vec3 &F, const Vec3 &M, const Vec3 &X)
Definition: rotor.cc:1427
virtual Vec3 GetInducedVelocity(Elem::Type type, unsigned uLabel, unsigned uPnt, const Vec3 &X) const
Definition: rotor.cc:884
virtual const Vec3 & GetMoments(void) const
Definition: rotor.h:179
doublereal dUMean
Definition: rotor.h:54
doublereal dTolerance
Definition: rotor.h:61
doublereal dChi
Definition: rotor.h:84
virtual void Init(const StructNode *pCraft, const Mat3x3 &rrot, const StructNode *pRotor, const StructNode *pGround, ResForceSet **ppres, const doublereal &dOR, const doublereal &dR, unsigned int iMaxIt, const doublereal &dTol, const doublereal &dE, const doublereal &dCH, const doublereal &dCFF, const doublereal &dVConstTmp, const doublereal &dVSineTmp, const doublereal &dVCosineTmp, flag fOut)
Definition: rotor.cc:1575
Mat3x3 R
virtual unsigned int iGetNumDof(void) const
Definition: rotor.h:595
const StructNode * pCraft
Definition: indvel.h:111
Definition: rotor.h:43
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: rotor.cc:607
virtual ~ManglerRotor(void)
Definition: rotor.cc:1346