MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
module-cyclocopter.cc File Reference
#include "mbconfig.h"
#include <limits>
#include <cmath>
#include "dataman.h"
#include "userelem.h"
#include "indvel.h"
Include dependency graph for module-cyclocopter.cc:

Go to the source code of this file.

Classes

class  CyclocopterInflow
 
class  CyclocopterNoInflow
 
class  CyclocopterUniform1D
 
class  CyclocopterUniform2D
 
class  CyclocopterPolimi
 

Functions

static bool ReadRotorData (DataManager *pDM, MBDynParser &HP, unsigned int uLabel, const StructNode *&pCraft, Mat3x3 &rrot, const StructNode *&pRotor)
 
static bool ReadUniform (DataManager *pDM, MBDynParser &HP, unsigned int uLabel, bool &bFlagAve, doublereal &dR, doublereal &dL, DriveCaller *&pdW, doublereal &dOmegaFilter, doublereal &dKappa, doublereal &dDeltaT)
 
bool mbdyn_cyclocopter_set (void)
 

Function Documentation

bool mbdyn_cyclocopter_set ( void  )

Definition at line 1695 of file module-cyclocopter.cc.

References SetUDE().

Referenced by InitUDE().

1696 {
1697  UserDefinedElemRead *rf;
1698 
1700  if (!SetUDE("cyclocopter" "no" "inflow", rf)) {
1701  delete rf;
1702 
1703  silent_cerr("module-cyclocopter: "
1704  "unable to register \"cyclocopter no inflow\""
1705  << std::endl);
1706 
1707  return false;
1708  }
1709 
1711  if (!SetUDE("cyclocopter" "uniform" "1D", rf)) {
1712  delete rf;
1713 
1714  silent_cerr("module-cyclocopter: "
1715  "unable to register \"cyclocopter uniform 1D\""
1716  << std::endl);
1717 
1718  return false;
1719  }
1720 
1722  if (!SetUDE("cyclocopter" "uniform" "2D", rf)) {
1723  delete rf;
1724 
1725  silent_cerr("module-cyclocopter: "
1726  "unable to register \"cyclocopter uniform 2D\""
1727  << std::endl);
1728 
1729  return false;
1730  }
1731 
1732  rf = new UDERead<CyclocopterPolimi>;
1733  if (!SetUDE("cyclocopter" "Polimi", rf)) {
1734  delete rf;
1735 
1736  silent_cerr("module-cyclocopter: "
1737  "unable to register \"cyclocopter Polimi\""
1738  << std::endl);
1739 
1740  return false;
1741  }
1742 
1743 #if 0
1744  rf = new UDERead<CyclocopterKARI>;
1745  if (!SetUDE("cyclocopter" "KARI", rf)) {
1746  delete rf;
1747 
1748  silent_cerr("module-cyclocopter: "
1749  "unable to register \"cyclocopter KARI\""
1750  << std::endl);
1751 
1752  return false;
1753  }
1754 #endif
1755 
1756  return true;
1757 }
bool SetUDE(const std::string &s, UserDefinedElemRead *rude)
Definition: userelem.cc:97

Here is the call graph for this function:

static bool ReadRotorData ( DataManager pDM,
MBDynParser HP,
unsigned int  uLabel,
const StructNode *&  pCraft,
Mat3x3 rrot,
const StructNode *&  pRotor 
)
static

Definition at line 289 of file module-cyclocopter.cc.

References Eye3, IncludeParser::GetLineData(), MBDynParser::GetRotRel(), HighParser::IsKeyWord(), DataManager::ReadNode(), and Node::STRUCTURAL.

Referenced by CyclocopterNoInflow::CyclocopterNoInflow(), CyclocopterPolimi::CyclocopterPolimi(), CyclocopterUniform1D::CyclocopterUniform1D(), and CyclocopterUniform2D::CyclocopterUniform2D().

295 {
296  /* aircraft node */
297  pCraft = pDM->ReadNode<const StructNode, Node::STRUCTURAL>(HP);
298 
299  /* rotor orientation with respect to aircraft */
300  rrot = ::Eye3;
301  if (HP.IsKeyWord("orientation")) {
302  ReferenceFrame RF(pCraft);
303  rrot = HP.GetRotRel(RF);
304 
305  } else if (HP.IsKeyWord("hinge")) {
306  silent_cerr("InducedVelocity(" << uLabel << "): deprecated keyword \"hinge\"; use \"orientation\" instead at line " << HP.GetLineData() << std::endl);
307 
308  ReferenceFrame RF(pCraft);
309  rrot = HP.GetRotRel(RF);
310  }
311 
312  /* rotor node */
313  pRotor = pDM->ReadNode<const StructNode, Node::STRUCTURAL>(HP);
314 
315  return true;
316 }
Mat3x3 GetRotRel(const ReferenceFrame &rf)
Definition: mbpar.cc:1795
const Mat3x3 Eye3(1., 0., 0., 0., 1., 0., 0., 0., 1.)
virtual bool IsKeyWord(const char *sKeyWord)
Definition: parser.cc:910
virtual HighParser::ErrOut GetLineData(void) const
Definition: parsinc.cc:697
Node * ReadNode(MBDynParser &HP, Node::Type type) const
Definition: dataman3.cc:2309

Here is the call graph for this function:

static bool ReadUniform ( DataManager pDM,
MBDynParser HP,
unsigned int  uLabel,
bool bFlagAve,
doublereal dR,
doublereal dL,
DriveCaller *&  pdW,
doublereal dOmegaFilter,
doublereal dKappa,
doublereal dDeltaT 
)
static

Definition at line 319 of file module-cyclocopter.cc.

References MBDynParser::GetDriveCaller(), IncludeParser::GetLineData(), HighParser::GetReal(), HighParser::GetYesNoOrBool(), HighParser::IsKeyWord(), and SAFENEW.

Referenced by CyclocopterPolimi::CyclocopterPolimi(), CyclocopterUniform1D::CyclocopterUniform1D(), and CyclocopterUniform2D::CyclocopterUniform2D().

329 {
330  bFlagAve = HP.GetYesNoOrBool();
331 
332  dR = HP.GetReal();
333  if (dR <= 0.) {
334  silent_cerr("ReadUniform(" << uLabel << "): "
335  "illegal null or negative radius"
336  "for rotor" << uLabel << " at line " << HP.GetLineData()
337  << std::endl);
338  return false;
339  }
340 
341  dL = HP.GetReal();
342  if (dL <= 0.) {
343  silent_cerr("ReadUniform(" << uLabel << "): "
344  "illegal null or negative blade"
345  "length for rotor" << uLabel
346  << " at line " << HP.GetLineData()
347  << std::endl);
348  return false;
349  }
350 
351  pdW = 0;
352  if (HP.IsKeyWord("delay")) {
353  pdW = HP.GetDriveCaller();
354 
355  } else {
356  SAFENEW(pdW, NullDriveCaller);
357  }
358 
359  dOmegaFilter = 0.;
360  if (HP.IsKeyWord("omegacut")) {
361  dOmegaFilter = HP.GetReal();
362  if (dOmegaFilter <= 0) {
363  silent_cerr("Illegal null or negative filter"
364  "cut frequency for rotor" << uLabel
365  << " at line " << HP.GetLineData()
366  << std::endl);
367  return false;
368  }
369  } else {
370  dOmegaFilter = 0.;
371  }
372 
373  dKappa = 1.;
374  if (HP.IsKeyWord("kappa")) {
375  dKappa = HP.GetReal();
376  if (dKappa <= 0) {
377  silent_cerr("Illegal null or negative hover"
378  "correction coefficient" << uLabel
379  << " at line " << HP.GetLineData()
380  << std::endl);
381  return false;
382  }
383  }
384 
385  dDeltaT = 0.;
386  if (HP.IsKeyWord("timestep")) {
387  dDeltaT = HP.GetReal();
388  if (dDeltaT <= 0) {
389  silent_cerr("Illegal null or negative time"
390  "step for rotor" << uLabel
391  << " at line " << HP.GetLineData()
392  << std::endl);
393  return false;
394  }
395 
396  } else {
397  dDeltaT = 0.;
398  }
399 
400  return true;
401 }
virtual bool GetYesNoOrBool(bool bDefval=false)
Definition: parser.cc:1038
#define SAFENEW(pnt, item)
Definition: mynewmem.h:695
virtual bool IsKeyWord(const char *sKeyWord)
Definition: parser.cc:910
DriveCaller * GetDriveCaller(bool bDeferred=false)
Definition: mbpar.cc:2033
virtual HighParser::ErrOut GetLineData(void) const
Definition: parsinc.cc:697
virtual doublereal GetReal(const doublereal &dDefval=0.0)
Definition: parser.cc:1056

Here is the call graph for this function: