MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
GenericAerodynamicForce Class Reference

#include <genfm.h>

Inheritance diagram for GenericAerodynamicForce:
Collaboration diagram for GenericAerodynamicForce:

Public Member Functions

 GenericAerodynamicForce (unsigned int uLabel, const DofOwner *pDO, const StructNode *pN, const Vec3 &fTmp, const Mat3x3 &RaTmp, doublereal dS, doublereal dL, bool bAlphaFirst, GenericAerodynamicData *pData, flag fOut)
 
virtual ~GenericAerodynamicForce (void)
 
virtual std::ostream & Restart (std::ostream &out) const
 
virtual Elem::Type GetElemType (void) const
 
virtual void WorkSpaceDim (integer *piNumRows, integer *piNumCols) const
 
virtual VariableSubMatrixHandlerAssJac (VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual SubVectorHandlerAssRes (SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual void Output (OutputHandler &OH) const
 
virtual unsigned int iGetNumPrivData (void) const
 
virtual unsigned int iGetPrivDataIdx (const char *s) const
 
virtual doublereal dGetPrivData (unsigned int i) const
 
virtual unsigned int iGetInitialNumDof (void) const
 
virtual void InitialWorkSpaceDim (integer *piNumRows, integer *piNumCols) const
 
virtual VariableSubMatrixHandlerInitialAssJac (VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
 
virtual SubVectorHandlerInitialAssRes (SubVectorHandler &WorkVec, const VectorHandler &XCurr)
 
virtual AerodynamicElem::Type GetAerodynamicElemType (void) const
 
virtual void GetConnectedNodes (std::vector< const Node * > &connectedNodes) const
 
- Public Member Functions inherited from Elem
 Elem (unsigned int uL, flag fOut)
 
virtual ~Elem (void)
 
virtual unsigned int iGetNumDof (void) const
 
virtual std::ostream & DescribeDof (std::ostream &out, const char *prefix="", bool bInitial=false) const
 
virtual void DescribeDof (std::vector< std::string > &desc, bool bInitial=false, int i=-1) const
 
virtual std::ostream & DescribeEq (std::ostream &out, const char *prefix="", bool bInitial=false) const
 
virtual void DescribeEq (std::vector< std::string > &desc, bool bInitial=false, int i=-1) const
 
virtual DofOrder::Order GetDofType (unsigned int) const
 
virtual void AssMats (VariableSubMatrixHandler &WorkMatA, VariableSubMatrixHandler &WorkMatB, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual bool bInverseDynamics (void) const
 
void SetInverseDynamicsFlags (unsigned uIDF)
 
unsigned GetInverseDynamicsFlags (void) const
 
bool bIsErgonomy (void) const
 
bool bIsRightHandSide (void) const
 
virtual VariableSubMatrixHandlerAssJac (VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
 
virtual SubVectorHandlerAssRes (SubVectorHandler &WorkVec, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr, const VectorHandler &XPrimePrimeCurr, InverseDynamics::Order iOrder=InverseDynamics::INVERSE_DYNAMICS)
 
virtual int GetNumConnectedNodes (void) const
 
- Public Member Functions inherited from WithLabel
 WithLabel (unsigned int uL=0, const std::string &sN="")
 
virtual ~WithLabel (void)
 
void PutLabel (unsigned int uL)
 
void PutName (const std::string &sN)
 
unsigned int GetLabel (void) const
 
const std::string & GetName (void) const
 
- Public Member Functions inherited from SimulationEntity
 SimulationEntity (void)
 
virtual ~SimulationEntity (void)
 
virtual bool bIsValidIndex (unsigned int i) const
 
virtual DofOrder::Order GetEqType (unsigned int i) const
 
virtual void SetValue (DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *h=0)
 
virtual HintParseHint (DataManager *pDM, const char *s) const
 
virtual void BeforePredict (VectorHandler &, VectorHandler &, VectorHandler &, VectorHandler &) const
 
virtual void AfterPredict (VectorHandler &X, VectorHandler &XP)
 
virtual void Update (const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual void DerivativesUpdate (const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual void Update (const VectorHandler &XCurr, InverseDynamics::Order iOrder)
 
virtual void AfterConvergence (const VectorHandler &X, const VectorHandler &XP)
 
virtual void AfterConvergence (const VectorHandler &X, const VectorHandler &XP, const VectorHandler &XPP)
 
virtual std::ostream & OutputAppend (std::ostream &out) const
 
virtual void ReadInitialState (MBDynParser &HP)
 
- Public Member Functions inherited from ToBeOutput
 ToBeOutput (flag fOut=fDefaultOut)
 
virtual ~ToBeOutput (void)
 
virtual void OutputPrepare (OutputHandler &OH)
 
virtual void Output (OutputHandler &OH, const VectorHandler &X, const VectorHandler &XP) const
 
virtual flag fToBeOutput (void) const
 
virtual bool bToBeOutput (void) const
 
virtual void SetOutputFlag (flag f=flag(1))
 
- Public Member Functions inherited from AerodynamicElem
 AerodynamicElem (unsigned int uL, const DofOwner *pDO, flag fOut)
 
virtual ~AerodynamicElem (void)
 
virtual bool NeedsAirProperties (void) const
 
virtual const InducedVelocitypGetInducedVelocity (void) const
 
- Public Member Functions inherited from ElemWithDofs
 ElemWithDofs (unsigned int uL, const DofOwner *pDO, flag fOut)
 
virtual ~ElemWithDofs (void)
 
- Public Member Functions inherited from DofOwnerOwner
 DofOwnerOwner (const DofOwner *pDO)
 
virtual ~DofOwnerOwner ()
 
virtual const DofOwnerpGetDofOwner (void) const
 
virtual integer iGetFirstIndex (void) const
 
virtual void SetInitialValue (VectorHandler &X)
 
- Public Member Functions inherited from AirPropOwner
 AirPropOwner (void)
 
virtual ~AirPropOwner (void)
 
virtual void PutAirProperties (const AirProperties *pAP)
 
virtual flag fGetAirVelocity (Vec3 &Velocity, const Vec3 &X) const
 
virtual doublereal dGetAirDensity (const Vec3 &X) const
 
virtual doublereal dGetAirPressure (const Vec3 &X) const
 
virtual doublereal dGetAirTemperature (const Vec3 &X) const
 
virtual doublereal dGetSoundSpeed (const Vec3 &X) const
 
virtual bool GetAirProps (const Vec3 &X, doublereal &rho, doublereal &c, doublereal &p, doublereal &T) const
 
- Public Member Functions inherited from InitialAssemblyElem
 InitialAssemblyElem (unsigned int uL, flag fOut)
 
virtual ~InitialAssemblyElem (void)
 
- Public Member Functions inherited from SubjectToInitialAssembly
 SubjectToInitialAssembly (void)
 
virtual ~SubjectToInitialAssembly (void)
 

Protected Member Functions

void AssVec (SubVectorHandler &WorkVec)
 

Protected Attributes

const StructNodepNode
 
const doublereal dRefSurface
 
const doublereal dRefLength
 
const bool bAlphaFirst
 
const Vec3 tilde_f
 
const Mat3x3 tilde_Ra
 
Vec3 tilde_F
 
Vec3 tilde_M
 
Vec3 F
 
Vec3 M
 
doublereal dAlpha
 
doublereal dBeta
 
GenericAerodynamicDatapData
 
- Protected Attributes inherited from WithLabel
unsigned int uLabel
 
std::string sName
 
- Protected Attributes inherited from ToBeOutput
flag fOutput
 
- Protected Attributes inherited from AirPropOwner
const AirPropertiespAirProperties
 

Additional Inherited Members

- Public Types inherited from Elem
enum  Type {
  UNKNOWN = -1, AIRPROPERTIES = 0, INDUCEDVELOCITY, AUTOMATICSTRUCTURAL,
  GRAVITY, BODY, JOINT, JOINT_REGULARIZATION,
  BEAM, PLATE, FORCE, INERTIA,
  ELECTRICBULK, ELECTRIC, THERMAL, HYDRAULIC,
  BULK, LOADABLE, DRIVEN, EXTERNAL,
  AEROMODAL, AERODYNAMIC, GENEL, SOCKETSTREAM_OUTPUT,
  RTAI_OUTPUT = SOCKETSTREAM_OUTPUT, LASTELEMTYPE
}
 
- Public Types inherited from SimulationEntity
typedef std::vector< Hint * > Hints
 
- Public Types inherited from ToBeOutput
enum  { OUTPUT = 0x1U, OUTPUT_MASK = 0xFU, OUTPUT_PRIVATE = 0x10U, OUTPUT_PRIVATE_MASK = ~OUTPUT_MASK }
 
- Public Types inherited from AerodynamicElem
enum  Type {
  UNKNOWN = -1, INDUCEDVELOCITY = 0, AEROMODAL, AERODYNAMICBODY,
  AERODYNAMICBEAM, AERODYNAMICEXTERNAL, AERODYNAMICEXTERNALMODAL, AERODYNAMICLOADABLE,
  AIRCRAFTINSTRUMENTS, GENERICFORCE, LASTAEROTYPE
}
 

Detailed Description

Definition at line 69 of file genfm.h.

Constructor & Destructor Documentation

GenericAerodynamicForce::GenericAerodynamicForce ( unsigned int  uLabel,
const DofOwner pDO,
const StructNode pN,
const Vec3 fTmp,
const Mat3x3 RaTmp,
doublereal  dS,
doublereal  dL,
bool  bAlphaFirst,
GenericAerodynamicData pData,
flag  fOut 
)

Definition at line 236 of file genfm.cc.

References NO_OP.

243 : Elem(uLabel, fOut),
244 AerodynamicElem(uLabel, pDO, fOut),
246 pNode(pN),
247 dRefSurface(dS),
248 dRefLength(dL),
250 tilde_f(fTmp),
251 tilde_Ra(RaTmp),
252 tilde_F(Zero3),
253 tilde_M(Zero3),
254 F(Zero3),
255 M(Zero3),
256 dAlpha(0.),
257 dBeta(0.),
258 pData(pD)
259 {
260  NO_OP;
261 }
const Vec3 tilde_f
Definition: genfm.h:83
const Vec3 Zero3(0., 0., 0.)
GenericAerodynamicData * pData
Definition: genfm.h:97
AerodynamicElem(unsigned int uL, const DofOwner *pDO, flag fOut)
Definition: aerodyn.cc:771
const bool bAlphaFirst
Definition: genfm.h:81
#define NO_OP
Definition: myassert.h:74
const Mat3x3 tilde_Ra
Definition: genfm.h:85
doublereal dBeta
Definition: genfm.h:94
const doublereal dRefSurface
Definition: genfm.h:79
unsigned int uLabel
Definition: withlab.h:44
const StructNode * pNode
Definition: genfm.h:76
const doublereal dRefLength
Definition: genfm.h:80
const doublereal dS
Definition: beamslider.cc:71
doublereal dAlpha
Definition: genfm.h:94
InitialAssemblyElem(unsigned int uL, flag fOut)
Definition: elem.cc:233
Elem(unsigned int uL, flag fOut)
Definition: elem.cc:41
GenericAerodynamicForce::~GenericAerodynamicForce ( void  )
virtual

Definition at line 263 of file genfm.cc.

References pData.

264 {
265  if (pData != 0) {
266  delete pData;
267  }
268 }
GenericAerodynamicData * pData
Definition: genfm.h:97

Member Function Documentation

VariableSubMatrixHandler & GenericAerodynamicForce::AssJac ( VariableSubMatrixHandler WorkMat,
doublereal  dCoef,
const VectorHandler XCurr,
const VectorHandler XPrimeCurr 
)
virtual

Implements Elem.

Definition at line 287 of file genfm.cc.

References DEBUGCOUTFNAME, and VariableSubMatrixHandler::SetNullMatrix().

291 {
292  DEBUGCOUTFNAME("GenericAerodynamicForce::AssJac");
293  WorkMat.SetNullMatrix();
294  return WorkMat;
295 }
#define DEBUGCOUTFNAME(fname)
Definition: myassert.h:256
void SetNullMatrix(void)
Definition: submat.h:1159

Here is the call graph for this function:

SubVectorHandler & GenericAerodynamicForce::AssRes ( SubVectorHandler WorkVec,
doublereal  dCoef,
const VectorHandler XCurr,
const VectorHandler XPrimeCurr 
)
virtual

Implements Elem.

Definition at line 345 of file genfm.cc.

References AssVec(), StructDispNode::iGetFirstMomentumIndex(), pNode, SubVectorHandler::PutRowIndex(), and VectorHandler::ResizeReset().

349 {
350  WorkVec.ResizeReset(6);
351 
352  integer iNodeFirstIndex = pNode->iGetFirstMomentumIndex();
353  for (int iCnt = 1; iCnt <= 6; iCnt++) {
354  WorkVec.PutRowIndex(iCnt, iNodeFirstIndex + iCnt);
355  }
356 
357  AssVec(WorkVec);
358 
359  return WorkVec;
360 }
void AssVec(SubVectorHandler &WorkVec)
Definition: genfm.cc:49
virtual void ResizeReset(integer)
Definition: vh.cc:55
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
virtual integer iGetFirstMomentumIndex(void) const =0
const StructNode * pNode
Definition: genfm.h:76
long int integer
Definition: colamd.c:51

Here is the call graph for this function:

void GenericAerodynamicForce::AssVec ( SubVectorHandler WorkVec)
protected

Definition at line 49 of file genfm.cc.

References VectorHandler::Add(), GenericAerodynamicData::Alpha, ASSERT, grad::atan2(), bAlphaFirst, GenericAerodynamicData::Beta, c, copysign(), grad::cos(), Vec3::Cross(), dAlpha, dAlphaMax, GenericAerodynamicData::Data, dBeta, dBetaMax, GenericAerodynamicData::GenericAerodynamicCoef::dCoef, dRefLength, dRefSurface, F, AirPropOwner::fGetAirVelocity(), AirPropOwner::GetAirProps(), GetElemType(), WithLabel::GetLabel(), StructNode::GetRCurr(), StructDispNode::GetVCurr(), StructNode::GetWCurr(), StructDispNode::GetXCurr(), M, Mat3x3::MulTV(), pData, pNode, R, grad::sqrt(), tilde_f, tilde_F, tilde_M, tilde_Ra, and Zero3.

Referenced by AssRes().

50 {
51  /* velocity at aerodynamic center */
52 
53  /* position of aerodynamic center */
54  const Mat3x3& Rn(pNode->GetRCurr());
55  Vec3 f(Rn*tilde_f);
56  Mat3x3 R(Rn*tilde_Ra);
57  Vec3 Xca(pNode->GetXCurr() + f);
58  Vec3 Vca(pNode->GetVCurr() + f.Cross(pNode->GetWCurr()));
59 
60  Vec3 VTmp(Zero3);
61  if (fGetAirVelocity(VTmp, Xca)) {
62  Vca -= VTmp;
63  }
64 
65 #if 0
66  /*
67  * Se l'elemento e' collegato ad un rotore,
68  * aggiunge alla velocita' la velocita' indotta
69  */
70  if (pRotor != NULL) {
71  Vca += pRotor->GetInducedVelocity(GetElemType(), GetLabel(), 0, Xca);
72  }
73 #endif
74 
75  Vec3 V(R.MulTV(Vca));
76 
77  if (bAlphaFirst) {
78  dAlpha = atan2(V(3), copysign(std::sqrt(V(1)*V(1) + V(2)*V(2)), V(1)));
79  dBeta = -atan2(V(2), std::abs(V(1)));
80 
81  } else {
82  dAlpha = atan2(V(3), std::abs(V(1)));
83  dBeta = -atan2(V(2), copysign(std::sqrt(V(1)*V(1) + V(2)*V(2)), V(1)));
84  }
85 
86  doublereal rho, c, p, T;
87  GetAirProps(Xca, rho, c, p, T); /* p, T no used yet */
88  doublereal q = Vca.Dot()*rho/2.;
89 
90  doublereal dScaleForce = q*dRefSurface;
91  doublereal dScaleMoment = dScaleForce*dRefLength;
92 
93  int nAlpha = pData->Alpha.size() - 1;
94  int nBeta = pData->Beta.size() - 1;
95 
96  ASSERT(nAlpha >= 0);
97  ASSERT(nBeta >= 0);
98 
99  if (dAlpha < pData->Alpha[0]) {
100  /* smooth out coefficients if Alpha does not span -180 => 180 */
101  doublereal dAlphaX = (dAlpha - pData->Alpha[0])/(-::dAlphaMax[bAlphaFirst] - pData->Alpha[0]);
102  doublereal dSmoothAlpha = (std::cos(::dAlphaMax[bAlphaFirst]*dAlphaX) + 1)/2.;
103 
104  if (dBeta < pData->Beta[0]) {
105  /* smooth out coefficients if Beta does not span -180 => 180 */
106  doublereal dBetaX = (dBeta - pData->Beta[0])/(-::dBetaMax[bAlphaFirst] - pData->Beta[0]);
107  doublereal dSmoothBeta = (std::cos(::dBetaMax[bAlphaFirst]*dBetaX) + 1)/2.;
108 
109  tilde_F = Vec3(&pData->Data[0][0].dCoef[0])*(dScaleForce*dSmoothAlpha*dSmoothBeta);
110  tilde_M = Vec3(&pData->Data[0][0].dCoef[3])*(dScaleMoment*dSmoothAlpha*dSmoothBeta);
111 
112  } else if (dBeta > pData->Beta[nBeta]) {
113  /* smooth out coefficients if Beta does not span -180 => 180 */
114  doublereal dBetaX = (dBeta - pData->Beta[nBeta])/(::dBetaMax[bAlphaFirst] - pData->Beta[nBeta]);
115  doublereal dSmoothBeta = (std::cos(::dBetaMax[bAlphaFirst]*dBetaX) + 1)/2.;
116 
117  tilde_F = Vec3(&pData->Data[nBeta][0].dCoef[0])*(dScaleForce*dSmoothAlpha*dSmoothBeta);
118  tilde_M = Vec3(&pData->Data[nBeta][0].dCoef[3])*(dScaleMoment*dSmoothAlpha*dSmoothBeta);
119 
120  } else {
121  int iBeta = bisec<doublereal>(&pData->Beta[0], dBeta, 0, nBeta);
122 
123  ASSERT(iBeta >= 0);
124  ASSERT(iBeta < nBeta);
125 
126  doublereal ddBeta = pData->Beta[iBeta + 1] - pData->Beta[iBeta];
127  doublereal d1Beta = (pData->Beta[iBeta + 1] - dBeta)/ddBeta;
128  doublereal d2Beta = (dBeta - pData->Beta[iBeta])/ddBeta;
129 
131  = pData->Data[iBeta][0]*d1Beta + pData->Data[iBeta + 1][0]*d2Beta;
132 
133  tilde_F = Vec3(&c.dCoef[0])*(dScaleForce*dSmoothAlpha);
134  tilde_M = Vec3(&c.dCoef[3])*(dScaleMoment*dSmoothAlpha);
135  }
136 
137  } else if (dAlpha > pData->Alpha[nAlpha]) {
138  /* smooth out coefficients if Alpha does not span -180 => 180 */
139  doublereal dAlphaX = (dAlpha - pData->Alpha[nAlpha])/(-::dAlphaMax[bAlphaFirst] - pData->Alpha[nAlpha]);
140  doublereal dSmoothAlpha = (std::cos(::dAlphaMax[bAlphaFirst]*dAlphaX) + 1)/2.;
141 
142  if (dBeta < pData->Beta[0]) {
143  /* smooth out coefficients if Beta does not span -180 => 180 */
144  doublereal dBetaX = (dBeta - pData->Beta[0])/(-::dBetaMax[bAlphaFirst] - pData->Beta[0]);
145  doublereal dSmoothBeta = (std::cos(::dBetaMax[bAlphaFirst]*dBetaX) + 1)/2.;
146 
147  tilde_F = Vec3(&pData->Data[0][nAlpha].dCoef[0])*(dScaleForce*dSmoothAlpha*dSmoothBeta);
148  tilde_M = Vec3(&pData->Data[0][nAlpha].dCoef[3])*(dScaleMoment*dSmoothAlpha*dSmoothBeta);
149 
150  } else if (dBeta > pData->Beta[nBeta]) {
151  /* smooth out coefficients if Beta does not span -180 => 180 */
152  doublereal dBetaX = (dBeta - pData->Beta[nBeta])/(::dBetaMax[bAlphaFirst] - pData->Beta[nBeta]);
153  doublereal dSmoothBeta = (std::cos(::dBetaMax[bAlphaFirst]*dBetaX) + 1)/2.;
154 
155  tilde_F = Vec3(&pData->Data[nBeta][nAlpha].dCoef[0])*(dScaleForce*dSmoothAlpha*dSmoothBeta);
156  tilde_M = Vec3(&pData->Data[nBeta][nAlpha].dCoef[3])*(dScaleMoment*dSmoothAlpha*dSmoothBeta);
157 
158  } else {
159  int iBeta = bisec<doublereal>(&pData->Beta[0], dBeta, 0, nBeta);
160 
161  ASSERT(iBeta >= 0);
162  ASSERT(iBeta < nBeta);
163 
164  doublereal ddBeta = pData->Beta[iBeta + 1] - pData->Beta[iBeta];
165  doublereal d1Beta = (pData->Beta[iBeta + 1] - dBeta)/ddBeta;
166  doublereal d2Beta = (dBeta - pData->Beta[iBeta])/ddBeta;
167 
169  = pData->Data[iBeta][nAlpha]*d1Beta + pData->Data[iBeta + 1][nAlpha]*d2Beta;
170 
171  tilde_F = Vec3(&c.dCoef[0])*(dScaleForce*dSmoothAlpha);
172  tilde_M = Vec3(&c.dCoef[3])*(dScaleMoment*dSmoothAlpha);
173  }
174 
175  } else {
176  int iAlpha = bisec<doublereal>(&pData->Alpha[0], dAlpha, 0, nAlpha);
177 
178  ASSERT(iAlpha >= 0);
179  ASSERT(iAlpha < nAlpha);
180 
181  doublereal ddAlpha = pData->Alpha[iAlpha + 1] - pData->Alpha[iAlpha];
182  doublereal d1Alpha = (pData->Alpha[iAlpha + 1] - dAlpha)/ddAlpha;
183  doublereal d2Alpha = (dAlpha - pData->Alpha[iAlpha])/ddAlpha;
184 
185  if (dBeta < pData->Beta[0]) {
186  /* smooth out coefficients if Beta does not span -180 => 180 */
187  doublereal dBetaX = (dBeta - pData->Beta[0])/(-::dBetaMax[bAlphaFirst] - pData->Beta[0]);
188  doublereal dSmoothBeta = (std::cos(::dBetaMax[bAlphaFirst]*dBetaX) + 1)/2.;
189 
191  = pData->Data[0][iAlpha]*d1Alpha + pData->Data[0][iAlpha + 1]*d2Alpha;
192 
193  tilde_F = Vec3(&c.dCoef[0])*(dScaleForce*dSmoothBeta);
194  tilde_M = Vec3(&c.dCoef[3])*(dScaleMoment*dSmoothBeta);
195 
196  } else if (dBeta > pData->Beta[nBeta]) {
197  /* smooth out coefficients if Beta does not span -180 => 180 */
198  doublereal dBetaX = (dBeta - pData->Beta[nBeta])/(::dBetaMax[bAlphaFirst] - pData->Beta[nBeta]);
199  doublereal dSmoothBeta = (std::cos(::dBetaMax[bAlphaFirst]*dBetaX) + 1)/2.;
200 
202  = pData->Data[nBeta][iAlpha]*d1Alpha + pData->Data[nBeta][iAlpha + 1]*d2Alpha;
203 
204  tilde_F = Vec3(&c.dCoef[0])*(dScaleForce*dSmoothBeta);
205  tilde_M = Vec3(&c.dCoef[3])*(dScaleMoment*dSmoothBeta);
206 
207  } else {
208  int iBeta = bisec<doublereal>(&pData->Beta[0], dBeta, 0, nBeta);
209 
210  ASSERT(iBeta >= 0);
211  ASSERT(iBeta < nBeta);
212 
213  doublereal ddBeta = pData->Beta[iBeta + 1] - pData->Beta[iBeta];
214  doublereal d1Beta = (pData->Beta[iBeta + 1] - dBeta)/ddBeta;
215  doublereal d2Beta = (dBeta - pData->Beta[iBeta])/ddBeta;
216 
218  = pData->Data[iBeta][iAlpha]*d1Alpha + pData->Data[iBeta][iAlpha + 1]*d2Alpha;
220  = pData->Data[iBeta + 1][iAlpha]*d1Alpha + pData->Data[iBeta + 1][iAlpha + 1]*d2Alpha;
221 
222  GenericAerodynamicData::GenericAerodynamicCoef c = c1*d1Beta + c2*d2Beta;
223 
224  tilde_F = Vec3(&c.dCoef[0])*dScaleForce;
225  tilde_M = Vec3(&c.dCoef[3])*dScaleMoment;
226  }
227  }
228 
229  F = R*tilde_F;
230  M = R*tilde_M + f.Cross(F);
231 
232  WorkVec.Add(1, F);
233  WorkVec.Add(4, M);
234 }
static const doublereal dAlphaMax[]
Definition: genfm.cc:44
virtual Elem::Type GetElemType(void) const
Definition: genfm.cc:272
const Vec3 tilde_f
Definition: genfm.h:83
const Vec3 Zero3(0., 0., 0.)
Vec3 Cross(const Vec3 &v) const
Definition: matvec3.h:218
virtual bool GetAirProps(const Vec3 &X, doublereal &rho, doublereal &c, doublereal &p, doublereal &T) const
Definition: aerodyn.cc:760
Definition: matvec3.h:98
GenericAerodynamicData * pData
Definition: genfm.h:97
std::vector< doublereal > Alpha
Definition: genfm.h:52
virtual const Mat3x3 & GetRCurr(void) const
Definition: strnode.h:1012
const bool bAlphaFirst
Definition: genfm.h:81
const Mat3x3 tilde_Ra
Definition: genfm.h:85
Vec3 MulTV(const Vec3 &v) const
Definition: matvec3.cc:482
std::vector< std::vector< GenericAerodynamicCoef > > Data
Definition: genfm.h:66
doublereal dBeta
Definition: genfm.h:94
doublereal copysign(doublereal x, doublereal y)
Definition: gradient.h:97
std::vector< doublereal > Beta
Definition: genfm.h:53
const doublereal dRefSurface
Definition: genfm.h:79
virtual const Vec3 & GetWCurr(void) const
Definition: strnode.h:1030
const StructNode * pNode
Definition: genfm.h:76
const doublereal dRefLength
Definition: genfm.h:80
#define ASSERT(expression)
Definition: colamd.c:977
GradientExpression< UnaryExpr< FuncSqrt, Expr > > sqrt(const GradientExpression< Expr > &u)
Definition: gradient.h:2974
virtual const Vec3 & GetXCurr(void) const
Definition: strnode.h:310
virtual void Add(integer iRow, const Vec3 &v)
Definition: vh.cc:63
static const doublereal dBetaMax[]
Definition: genfm.cc:45
static std::stack< cleanup * > c
Definition: cleanup.cc:59
doublereal dAlpha
Definition: genfm.h:94
virtual const Vec3 & GetVCurr(void) const
Definition: strnode.h:322
virtual flag fGetAirVelocity(Vec3 &Velocity, const Vec3 &X) const
Definition: aerodyn.cc:725
GradientExpression< UnaryExpr< FuncCos, Expr > > cos(const GradientExpression< Expr > &u)
Definition: gradient.h:2978
GradientExpression< BinaryExpr< FuncAtan2, LhsExpr, RhsExpr > > atan2(const GradientExpression< LhsExpr > &u, const GradientExpression< RhsExpr > &v)
Definition: gradient.h:2962
double doublereal
Definition: colamd.c:52
unsigned int GetLabel(void) const
Definition: withlab.cc:62
Mat3x3 R

Here is the call graph for this function:

doublereal GenericAerodynamicForce::dGetPrivData ( unsigned int  i) const
virtual

Reimplemented from SimulationEntity.

Definition at line 442 of file genfm.cc.

References dAlpha, dBeta, F, iGetNumPrivData(), M, MBDYN_EXCEPT_ARGS, tilde_F, and tilde_M.

443 {
444  if (i <= 0 || i > iGetNumPrivData()) {
445  // error
446  return 0.;
447  }
448 
449  switch (i) {
450  case 1:
451  case 2:
452  case 3:
453  return F(i);
454 
455  case 3 + 1:
456  case 3 + 2:
457  case 3 + 3:
458  return M(i - 3);
459 
460  case 6 + 1:
461  case 6 + 2:
462  case 6 + 3:
463  return tilde_F(i - 6);
464 
465  case 9 + 1:
466  case 9 + 2:
467  case 9 + 3:
468  return tilde_M(i - 9);
469 
470  case 12 + 1:
471  return dAlpha;
472 
473  case 12 + 2:
474  return dBeta;
475 
476  default:
478  }
479 }
#define MBDYN_EXCEPT_ARGS
Definition: except.h:63
doublereal dBeta
Definition: genfm.h:94
doublereal dAlpha
Definition: genfm.h:94
virtual unsigned int iGetNumPrivData(void) const
Definition: genfm.cc:381

Here is the call graph for this function:

AerodynamicElem::Type GenericAerodynamicForce::GetAerodynamicElemType ( void  ) const
virtual

Implements AerodynamicElem.

Definition at line 324 of file genfm.cc.

References AerodynamicElem::GENERICFORCE.

void GenericAerodynamicForce::GetConnectedNodes ( std::vector< const Node * > &  connectedNodes) const
virtual

Reimplemented from Elem.

Definition at line 330 of file genfm.cc.

References pNode.

331 {
332  connectedNodes.resize(1);
333  connectedNodes[0] = pNode;
334 }
const StructNode * pNode
Definition: genfm.h:76
Elem::Type GenericAerodynamicForce::GetElemType ( void  ) const
virtual

Implements Elem.

Definition at line 272 of file genfm.cc.

References Elem::AERODYNAMIC.

Referenced by AssVec().

273 {
274  return Elem::AERODYNAMIC;
275 }
unsigned int GenericAerodynamicForce::iGetInitialNumDof ( void  ) const
virtual

Implements SubjectToInitialAssembly.

Definition at line 299 of file genfm.cc.

300 {
301  return 0;
302 }
unsigned int GenericAerodynamicForce::iGetNumPrivData ( void  ) const
virtual

Reimplemented from SimulationEntity.

Definition at line 381 of file genfm.cc.

Referenced by dGetPrivData().

382 {
383  return 2 + 6 + 6;
384 }
unsigned int GenericAerodynamicForce::iGetPrivDataIdx ( const char *  s) const
virtual

Reimplemented from SimulationEntity.

Definition at line 387 of file genfm.cc.

388 {
389  unsigned idx = 0;
390  switch (s[0]) {
391  case 'F':
392  break;
393 
394  case 'M':
395  idx += 3;
396  break;
397 
398  case 'f':
399  idx += 6;
400  break;
401 
402  case 'm':
403  idx += 9;
404  break;
405 
406  default:
407  if (strcmp(s, "alpha") == 0) {
408  return idx + 12 + 1;
409 
410  } else if (strcmp(s, "beta") == 0) {
411  return idx + 12 + 2;
412 
413  }
414  return 0;
415  }
416 
417  if (s[2] != '\0') {
418  return 0;
419  }
420 
421  switch (s[1]) {
422  case 'x':
423  idx += 1;
424  break;
425 
426  case 'y':
427  idx += 2;
428  break;
429 
430  case 'z':
431  idx += 3;
432  break;
433 
434  default:
435  return 0;
436  }
437 
438  return idx;
439 }
VariableSubMatrixHandler & GenericAerodynamicForce::InitialAssJac ( VariableSubMatrixHandler WorkMat,
const VectorHandler XCurr 
)
virtual

Implements SubjectToInitialAssembly.

Definition at line 314 of file genfm.cc.

References DEBUGCOUTFNAME, and VariableSubMatrixHandler::SetNullMatrix().

316 {
317  DEBUGCOUTFNAME("GenericAerodynamicForce::InitialAssJac");
318  WorkMat.SetNullMatrix();
319  return WorkMat;
320 }
#define DEBUGCOUTFNAME(fname)
Definition: myassert.h:256
void SetNullMatrix(void)
Definition: submat.h:1159

Here is the call graph for this function:

SubVectorHandler & GenericAerodynamicForce::InitialAssRes ( SubVectorHandler WorkVec,
const VectorHandler XCurr 
)
virtual

Implements SubjectToInitialAssembly.

Definition at line 483 of file genfm.cc.

485 {
486  return WorkVec;
487 }
void GenericAerodynamicForce::InitialWorkSpaceDim ( integer piNumRows,
integer piNumCols 
) const
virtual

Implements SubjectToInitialAssembly.

Definition at line 306 of file genfm.cc.

307 {
308  *piNumRows = 6;
309  *piNumCols = 1;
310 }
void GenericAerodynamicForce::Output ( OutputHandler OH) const
virtual

Reimplemented from ToBeOutput.

Definition at line 367 of file genfm.cc.

References OutputHandler::Aerodynamic(), ToBeOutput::bToBeOutput(), dAlpha, dBeta, F, WithLabel::GetLabel(), M, M_PI, tilde_F, and tilde_M.

368 {
369  if (bToBeOutput()) {
370  OH.Aerodynamic()
371  << std::setw(8) << GetLabel()
372  << " " << dAlpha*180./M_PI
373  << " " << dBeta*180./M_PI
374  << " " << tilde_F << " " << tilde_M
375  << " " << F << " " << M << std::endl;
376  }
377 }
#define M_PI
Definition: gradienttest.cc:67
virtual bool bToBeOutput(void) const
Definition: output.cc:890
doublereal dBeta
Definition: genfm.h:94
doublereal dAlpha
Definition: genfm.h:94
unsigned int GetLabel(void) const
Definition: withlab.cc:62
std::ostream & Aerodynamic(void) const
Definition: output.h:485

Here is the call graph for this function:

std::ostream & GenericAerodynamicForce::Restart ( std::ostream &  out) const
virtual

Implements Elem.

Definition at line 338 of file genfm.cc.

339 {
340  return out;
341 }
void GenericAerodynamicForce::WorkSpaceDim ( integer piNumRows,
integer piNumCols 
) const
virtual

Implements Elem.

Definition at line 279 of file genfm.cc.

280 {
281  *piNumRows = 6;
282  *piNumCols = 1;
283 }

Member Data Documentation

const bool GenericAerodynamicForce::bAlphaFirst
protected

Definition at line 81 of file genfm.h.

Referenced by AssVec().

doublereal GenericAerodynamicForce::dAlpha
protected

Definition at line 94 of file genfm.h.

Referenced by AssVec(), dGetPrivData(), and Output().

doublereal GenericAerodynamicForce::dBeta
protected

Definition at line 94 of file genfm.h.

Referenced by AssVec(), dGetPrivData(), and Output().

const doublereal GenericAerodynamicForce::dRefLength
protected

Definition at line 80 of file genfm.h.

Referenced by AssVec().

const doublereal GenericAerodynamicForce::dRefSurface
protected

Definition at line 79 of file genfm.h.

Referenced by AssVec().

Vec3 GenericAerodynamicForce::F
protected

Definition at line 90 of file genfm.h.

Referenced by AssVec(), dGetPrivData(), and Output().

Vec3 GenericAerodynamicForce::M
protected

Definition at line 91 of file genfm.h.

Referenced by AssVec(), dGetPrivData(), and Output().

GenericAerodynamicData* GenericAerodynamicForce::pData
protected

Definition at line 97 of file genfm.h.

Referenced by AssVec(), and ~GenericAerodynamicForce().

const StructNode* GenericAerodynamicForce::pNode
protected

Definition at line 76 of file genfm.h.

Referenced by AssRes(), AssVec(), and GetConnectedNodes().

const Vec3 GenericAerodynamicForce::tilde_f
protected

Definition at line 83 of file genfm.h.

Referenced by AssVec().

Vec3 GenericAerodynamicForce::tilde_F
protected

Definition at line 88 of file genfm.h.

Referenced by AssVec(), dGetPrivData(), and Output().

Vec3 GenericAerodynamicForce::tilde_M
protected

Definition at line 89 of file genfm.h.

Referenced by AssVec(), dGetPrivData(), and Output().

const Mat3x3 GenericAerodynamicForce::tilde_Ra
protected

Definition at line 85 of file genfm.h.

Referenced by AssVec().


The documentation for this class was generated from the following files: