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

#include <aeroelem.h>

Inheritance diagram for AerodynamicBeam:
Collaboration diagram for AerodynamicBeam:

Public Member Functions

 AerodynamicBeam (unsigned int uLabel, const DofOwner *pDO, const Beam *pB, InducedVelocity *pR, bool bPassive, const Vec3 &fTmp1, const Vec3 &fTmp2, const Vec3 &fTmp3, const Mat3x3 &Ra1Tmp, const Mat3x3 &Ra2Tmp, const Mat3x3 &Ra3Tmp, const Shape *pC, const Shape *pF, const Shape *pV, const Shape *pT, const Shape *pTL, integer iN, AeroData *a, const DriveCaller *pDC, bool bUseJacobian, OrientationDescription ood, flag fOut)
 
virtual ~AerodynamicBeam (void)
 
virtual std::ostream & Restart (std::ostream &out) const
 
virtual VariableSubMatrixHandlerAssJac (VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &, const VectorHandler &)
 
virtual SubVectorHandlerAssRes (SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual SubVectorHandlerInitialAssRes (SubVectorHandler &WorkVec, const VectorHandler &XCurr)
 
virtual void Output (OutputHandler &OH) const
 
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 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 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, const VectorHandler &XPP)
 
virtual unsigned int iGetNumPrivData (void) const
 
virtual unsigned int iGetPrivDataIdx (const char *s) const
 
virtual doublereal dGetPrivData (unsigned int i) const
 
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 Output (OutputHandler &OH, const VectorHandler &X, const VectorHandler &XP) const
 
virtual flag fToBeOutput (void) const
 
virtual bool bToBeOutput (void) const
 
- Public Member Functions inherited from Aerodynamic2DElem< 3 >
 Aerodynamic2DElem (unsigned int uLabel, const DofOwner *pDO, InducedVelocity *pR, bool bPassive, const Shape *pC, const Shape *pF, const Shape *pV, const Shape *pT, const Shape *pTL, integer iN, AeroData *a, const DriveCaller *pDC, bool bUseJacobian, OrientationDescription ood, flag fOut)
 
virtual ~Aerodynamic2DElem (void)
 
virtual Elem::Type GetElemType (void) const
 
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 OutputPrepare (OutputHandler &OH)
 
virtual void SetValue (DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *h=0)
 
virtual void AfterConvergence (const VectorHandler &X, const VectorHandler &XP)
 
virtual void WorkSpaceDim (integer *piNumRows, integer *piNumCols) const
 
virtual unsigned int iGetInitialNumDof (void) const
 
virtual void InitialWorkSpaceDim (integer *piNumRows, integer *piNumCols) const
 
virtual VariableSubMatrixHandlerInitialAssJac (VariableSubMatrixHandler &WorkMat, const VectorHandler &)
 
virtual const InducedVelocitypGetInducedVelocity (void) const
 
- Public Member Functions inherited from AerodynamicElem
 AerodynamicElem (unsigned int uL, const DofOwner *pDO, flag fOut)
 
virtual ~AerodynamicElem (void)
 
virtual bool NeedsAirProperties (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)
 
- Public Member Functions inherited from DriveOwner
 DriveOwner (const DriveCaller *pDC=0)
 
 DriveOwner (const DriveOwner &drive)
 
virtual ~DriveOwner (void)
 
void Set (const DriveCaller *pDC)
 
DriveCallerpGetDriveCaller (void) const
 
doublereal dGet (const doublereal &dVar) const
 
doublereal dGet (void) const
 
bool bIsDifferentiable (void) const
 
doublereal dGetP (const doublereal &dVar) const
 
doublereal dGetP (void) const
 
- Public Member Functions inherited from AerodynamicOutput
 AerodynamicOutput (flag f, int iNP, OrientationDescription ood)
 
 ~AerodynamicOutput (void)
 
void SetOutputFlag (flag f, int iNP)
 
void ResetIterator (void)
 
void SetData (const Vec3 &v, const doublereal *pd, const Vec3 &X, const Mat3x3 &R, const Vec3 &V, const Vec3 &W, const Vec3 &F, const Vec3 &M)
 
AerodynamicOutput::eOutput GetOutput (void) const
 
bool IsOutput (void) const
 
bool IsSTD (void) const
 
bool IsPGAUSS (void) const
 
bool IsNODE (void) const
 

Protected Types

enum  { NODE1 = 0, NODE2, NODE3, LASTNODE }
 
enum  {
  DELTAx1 = 0, DELTAg1, DELTAx2, DELTAg2,
  DELTAx3, DELTAg3
}
 

Protected Member Functions

void AssVec (SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
- Protected Member Functions inherited from Aerodynamic2DElem< 3 >
virtual void SetOutputFlag (flag f=flag(1))
 
void Output_int (OutputHandler &OH) const
 
void AddForce_int (const StructNode *pN, const Vec3 &F, const Vec3 &M, const Vec3 &X) const
 
void AddSectionalForce_int (unsigned uPnt, const Vec3 &F, const Vec3 &M, doublereal dW, const Vec3 &X, const Mat3x3 &R, const Vec3 &V, const Vec3 &W) const
 

Protected Attributes

const BeampBeam
 
const StructNodepNode [3]
 
const Vec3 f1
 
const Vec3 f2
 
const Vec3 f3
 
const Mat3x3 Ra1
 
const Mat3x3 Ra2
 
const Mat3x3 Ra3
 
const Vec3 Ra1_3
 
const Vec3 Ra2_3
 
const Vec3 Ra3_3
 
Vec3 F [LASTNODE]
 
Vec3 M [LASTNODE]
 
- Protected Attributes inherited from WithLabel
unsigned int uLabel
 
std::string sName
 
- Protected Attributes inherited from ToBeOutput
flag fOutput
 
- Protected Attributes inherited from Aerodynamic2DElem< 3 >
AeroDataaerodata
 
InducedVelocitypIndVel
 
bool bPassiveInducedVelocity
 
const ShapeOwner Chord
 
const ShapeOwner ForcePoint
 
const ShapeOwner VelocityPoint
 
const ShapeOwner Twist
 
const ShapeOwner TipLoss
 
GaussDataIterator GDI
 
std::vector< outa_tOUTA
 
Mat3xN vx
 
Mat3xN wx
 
Mat3xN fq
 
Mat3xN cq
 
bool bJacobian
 
- Protected Attributes inherited from AirPropOwner
const AirPropertiespAirProperties
 
- Protected Attributes inherited from DriveOwner
DriveCallerpDriveCaller
 
- Protected Attributes inherited from AerodynamicOutput
flag m_eOutput
 
OrientationDescription od
 
std::vector< Aero_outputOutputData
 
std::vector< Aero_output >
::iterator 
OutputIter
 

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
}
 
- Public Types inherited from AerodynamicOutput
enum  eOutput {
  AEROD_OUT_NONE = 0x0U, AEROD_OUT_STD = (ToBeOutput::OUTPUT_PRIVATE << 0), AEROD_OUT_PGAUSS = (ToBeOutput::OUTPUT_PRIVATE << 1), AEROD_OUT_NODE = (ToBeOutput::OUTPUT_PRIVATE << 2),
  AEROD_OUT_MASK = (AEROD_OUT_STD | AEROD_OUT_PGAUSS | AEROD_OUT_NODE)
}
 
enum  {
  OUTPUT_NONE = 0x0U, OUTPUT_GP_X = (ToBeOutput::OUTPUT_PRIVATE << 4), OUTPUT_GP_R = (ToBeOutput::OUTPUT_PRIVATE << 5), OUTPUT_GP_V = (ToBeOutput::OUTPUT_PRIVATE << 6),
  OUTPUT_GP_W = (ToBeOutput::OUTPUT_PRIVATE << 7), OUTPUT_GP_CONFIGURATION = (OUTPUT_GP_X | OUTPUT_GP_R | OUTPUT_GP_V | OUTPUT_GP_W), OUTPUT_GP_F = (ToBeOutput::OUTPUT_PRIVATE << 8), OUTPUT_GP_M = (ToBeOutput::OUTPUT_PRIVATE << 9),
  OUTPUT_GP_FORCES = (OUTPUT_GP_F | OUTPUT_GP_M), OUTPUT_DEFAULT = (OUTPUT_GP_F | OUTPUT_GP_M), OUTPUT_GP_ALL = (ToBeOutput::OUTPUT_PRIVATE_MASK & (~AEROD_OUT_MASK))
}
 

Detailed Description

Definition at line 341 of file aeroelem.h.

Member Enumeration Documentation

anonymous enum
protected
Enumerator
NODE1 
NODE2 
NODE3 
LASTNODE 

Definition at line 346 of file aeroelem.h.

anonymous enum
protected
Enumerator
DELTAx1 
DELTAg1 
DELTAx2 
DELTAg2 
DELTAx3 
DELTAg3 

Definition at line 347 of file aeroelem.h.

Constructor & Destructor Documentation

AerodynamicBeam::AerodynamicBeam ( unsigned int  uLabel,
const DofOwner pDO,
const Beam pB,
InducedVelocity pR,
bool  bPassive,
const Vec3 fTmp1,
const Vec3 fTmp2,
const Vec3 fTmp3,
const Mat3x3 Ra1Tmp,
const Mat3x3 Ra2Tmp,
const Mat3x3 Ra3Tmp,
const Shape pC,
const Shape pF,
const Shape pV,
const Shape pT,
const Shape pTL,
integer  iN,
AeroData a,
const DriveCaller pDC,
bool  bUseJacobian,
OrientationDescription  ood,
flag  fOut 
)

Definition at line 1477 of file aeroelem.cc.

References ASSERT, Elem::BEAM, DEBUGCOUTFNAME, Beam::GetElemType(), pBeam, Beam::pGetNode(), pNode, and Node::STRUCTURAL.

1494 : Elem(uLabel, fOut),
1495 Aerodynamic2DElem<3>(uLabel, pDO, pR, bPassive,
1496  pC, pF, pV, pT, pTL, iN, a, pDC, bUseJacobian, ood, fOut),
1497 pBeam(pB),
1498 f1(fTmp1),
1499 f2(fTmp2),
1500 f3(fTmp3),
1501 Ra1(Ra1Tmp),
1502 Ra2(Ra2Tmp),
1503 Ra3(Ra3Tmp),
1504 Ra1_3(Ra1Tmp.GetVec(3)),
1505 Ra2_3(Ra2Tmp.GetVec(3)),
1506 Ra3_3(Ra3Tmp.GetVec(3))
1507 {
1508  DEBUGCOUTFNAME("AerodynamicBeam::AerodynamicBeam");
1509 
1510  ASSERT(pBeam != 0);
1512 
1513  for (int iNode = 0; iNode < 3; iNode++) {
1514  pNode[iNode] = pBeam->pGetNode(iNode + 1);
1515 
1516  ASSERT(pNode[iNode] != 0);
1517  ASSERT(pNode[iNode]->GetNodeType() == Node::STRUCTURAL);
1518  }
1519 }
virtual Elem::Type GetElemType(void) const
Definition: beam.h:297
const Mat3x3 Ra1
Definition: aeroelem.h:355
#define DEBUGCOUTFNAME(fname)
Definition: myassert.h:256
const Vec3 Ra3_3
Definition: aeroelem.h:360
const Mat3x3 Ra2
Definition: aeroelem.h:356
const Beam * pBeam
Definition: aeroelem.h:349
Vec3 GetVec(unsigned short int i) const
Definition: matvec3.h:893
virtual const StructNode * pGetNode(unsigned int i) const
Definition: beam.cc:1290
const StructNode * pNode[3]
Definition: aeroelem.h:350
unsigned int uLabel
Definition: withlab.h:44
#define ASSERT(expression)
Definition: colamd.c:977
const Vec3 f2
Definition: aeroelem.h:353
const Vec3 f1
Definition: aeroelem.h:352
const Vec3 Ra1_3
Definition: aeroelem.h:358
const Vec3 f3
Definition: aeroelem.h:354
static const doublereal a
Definition: hfluid_.h:289
Elem(unsigned int uL, flag fOut)
Definition: elem.cc:41
const Vec3 Ra2_3
Definition: aeroelem.h:359
const Mat3x3 Ra3
Definition: aeroelem.h:357

Here is the call graph for this function:

AerodynamicBeam::~AerodynamicBeam ( void  )
virtual

Definition at line 1521 of file aeroelem.cc.

References DEBUGCOUTFNAME.

1522 {
1523  DEBUGCOUTFNAME("AerodynamicBeam::~AerodynamicBeam");
1524 }
#define DEBUGCOUTFNAME(fname)
Definition: myassert.h:256

Member Function Documentation

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

Implements Elem.

Definition at line 1562 of file aeroelem.cc.

References Aerodynamic2DElem< 3 >::aerodata, AeroData::AssJac(), Aerodynamic2DElem< 3 >::bJacobian, c, Aerodynamic2DElem< 3 >::Chord, grad::cos(), Aerodynamic2DElem< 3 >::cq, Vec3::Cross(), DEBUGCOUT, DELTAg1, DELTAg2, DELTAg3, DELTAx1, DELTAx2, DELTAx3, ShapeOwner::dGet(), DriveOwner::dGet(), Rotor::dGetOmega(), PntWght::dGetPnt(), PntWght::dGetWght(), dN2, dN3, DxDcsi3N(), Eye3, f1, f2, f3, AirPropOwner::fGetAirVelocity(), GaussDataIterator::fGetNext(), Aerodynamic2DElem< 3 >::ForcePoint, Aerodynamic2DElem< 3 >::fq, Aerodynamic2DElem< 3 >::GDI, AirPropOwner::GetAirProps(), Elem::GetElemType(), GaussDataIterator::GetFirst(), AeroData::GetForcesJac(), InducedVelocity::GetInducedVelocity(), WithLabel::GetLabel(), Mat6x6::GetMat11(), Mat6x6::GetMat12(), Mat6x6::GetMat21(), Mat6x6::GetMat22(), Mat3xN::GetVec(), StructDispNode::GetXCurr(), DofOwnerOwner::iGetFirstIndex(), StructDispNode::iGetFirstMomentumIndex(), StructDispNode::iGetFirstPositionIndex(), AeroData::iGetNumDof(), LASTNODE, MatCross, MatCrossCross, ER_Rot::MatG, ER_Rot::MatGm1, ER_Rot::MatR, Mat3x3::MulMT(), Mat3x3::MulTM(), MultRMRt(), Mat3x3::MulTV(), NODE1, NODE2, NODE3, Aerodynamic2DElem< 3 >::OUTA, ER_Rot::Param, pdsf3, pdsi3, Aerodynamic2DElem< 3 >::pIndVel, pNode, FullSubMatrixHandler::PutColIndex(), Mat3xN::PutMat3x3(), FullSubMatrixHandler::PutRowIndex(), Vec3::PutTo(), Ra1, Ra2, Ra3, Mat3x3::Reset(), AerodynamicOutput::ResetIterator(), FullSubMatrixHandler::ResizeReset(), AeroData::SetAirData(), VariableSubMatrixHandler::SetFull(), VariableSubMatrixHandler::SetNullMatrix(), AeroData::SetSectionData(), ShapeFunc3N(), grad::sin(), FullSubMatrixHandler::Sub(), Mat3x3::Transpose(), Aerodynamic2DElem< 3 >::Twist, Aerodynamic2DElem< 3 >::VelocityPoint, Aerodynamic2DElem< 3 >::vx, Elem::WorkSpaceDim(), Aerodynamic2DElem< 3 >::wx, and Zero3.

1566 {
1567  DEBUGCOUT("Entering AerodynamicBeam::AssJac()" << std::endl);
1568 
1569  if (!bJacobian) {
1570  WorkMat.SetNullMatrix();
1571  return WorkMat;
1572  }
1573 
1574  FullSubMatrixHandler& WM = WorkMat.SetFull();
1575 
1576  /* Ridimensiona la sottomatrice in base alle esigenze */
1577  integer iNumRows = 0;
1578  integer iNumCols = 0;
1579  WorkSpaceDim(&iNumRows, &iNumCols);
1580  WM.ResizeReset(iNumRows, iNumCols);
1581 
1582  integer iNode1FirstIndex = pNode[NODE1]->iGetFirstMomentumIndex();
1583  integer iNode1FirstPosIndex = pNode[NODE1]->iGetFirstPositionIndex();
1584  integer iNode2FirstIndex = pNode[NODE2]->iGetFirstMomentumIndex();
1585  integer iNode2FirstPosIndex = pNode[NODE2]->iGetFirstPositionIndex();
1586  integer iNode3FirstIndex = pNode[NODE3]->iGetFirstMomentumIndex();
1587  integer iNode3FirstPosIndex = pNode[NODE3]->iGetFirstPositionIndex();
1588 
1589  for (int iCnt = 1; iCnt <= 6; iCnt++) {
1590  WM.PutRowIndex(iCnt, iNode1FirstIndex + iCnt);
1591  WM.PutColIndex(iCnt, iNode1FirstPosIndex + iCnt);
1592  WM.PutRowIndex(6 + iCnt, iNode2FirstIndex + iCnt);
1593  WM.PutColIndex(6 + iCnt, iNode2FirstPosIndex + iCnt);
1594  WM.PutRowIndex(12 + iCnt, iNode3FirstIndex + iCnt);
1595  WM.PutColIndex(12 + iCnt, iNode3FirstPosIndex + iCnt);
1596  }
1597 
1598  doublereal dW[6];
1599 
1600  /* array di vettori per via del ciclo sui nodi ... */
1601  Vec3 Xn[3];
1602 
1603  /* Dati dei nodi */
1604  Xn[NODE1] = pNode[NODE1]->GetXCurr();
1605  const Mat3x3& Rn1(pNode[NODE1]->GetRCurr());
1606  const Vec3& Vn1(pNode[NODE1]->GetVCurr());
1607  const Vec3& Wn1(pNode[NODE1]->GetWCurr());
1608 
1609  Xn[NODE2] = pNode[NODE2]->GetXCurr();
1610  const Mat3x3& Rn2(pNode[NODE2]->GetRCurr());
1611  const Vec3& Vn2(pNode[NODE2]->GetVCurr());
1612  const Vec3& Wn2(pNode[NODE2]->GetWCurr());
1613 
1614  Xn[NODE3] = pNode[NODE3]->GetXCurr();
1615  const Mat3x3& Rn3(pNode[NODE3]->GetRCurr());
1616  const Vec3& Vn3(pNode[NODE3]->GetVCurr());
1617  const Vec3& Wn3(pNode[NODE3]->GetWCurr());
1618 
1619  Vec3 f1Tmp(Rn1*f1);
1620  Vec3 f2Tmp(Rn2*f2);
1621  Vec3 f3Tmp(Rn3*f3);
1622 
1623  Vec3 X1Tmp(Xn[NODE1] + f1Tmp);
1624  Vec3 X2Tmp(Xn[NODE2] + f2Tmp);
1625  Vec3 X3Tmp(Xn[NODE3] + f3Tmp);
1626 
1627  Vec3 V1Tmp(Vn1 + Wn1.Cross(f1Tmp));
1628  Vec3 V2Tmp(Vn2 + Wn2.Cross(f2Tmp));
1629  Vec3 V3Tmp(Vn3 + Wn3.Cross(f3Tmp));
1630 
1631  Vec3 Omega1Crossf1(Wn1.Cross(f1Tmp));
1632  Vec3 Omega2Crossf2(Wn2.Cross(f2Tmp));
1633  Vec3 Omega3Crossf3(Wn3.Cross(f3Tmp));
1634 
1635  /*
1636  * Matrice di trasformazione dal sistema globale a quello aerodinamico
1637  */
1638  Mat3x3 RR1(Rn1*Ra1);
1639  Mat3x3 RR2(Rn2*Ra2);
1640  Mat3x3 RR3(Rn3*Ra3);
1641 
1642  /*
1643  * Parametri di rotazione dai nodi 1 e 3 al nodo 2 (nell'ipotesi
1644  * che tale trasformazione non dia luogo ad una singolarita')
1645  */
1646 
1647  Vec3 g1(ER_Rot::Param, RR2.MulTM(RR1));
1648  Vec3 g3(ER_Rot::Param, RR2.MulTM(RR3));
1649 
1650  Mat3x3 GammaInv1(ER_Rot::MatGm1, g1);
1651  Mat3x3 GammaInv3(ER_Rot::MatGm1, g3);
1652 
1653  /*
1654  * Se l'elemento e' collegato ad un rotore,
1655  * si fa dare la velocita' di rotazione
1656  */
1657  doublereal dOmega = 0.;
1658  if (pIndVel != 0) {
1659  Rotor *pRotor = dynamic_cast<Rotor *>(pIndVel);
1660  if (pRotor != 0) {
1661  dOmega = pRotor->dGetOmega();
1662  }
1663  }
1664 
1665  /*
1666  * Dati "permanenti" (uso solo la posizione del nodo 2 perche'
1667  * non dovrebbero cambiare "molto")
1668  */
1669  doublereal rho, c, p, T;
1670  GetAirProps(Xn[NODE2], rho, c, p, T); /* p, T no used yet */
1671  aerodata->SetAirData(rho, c);
1672 
1673  int iPnt = 0;
1674 
1675  ResetIterator();
1676 
1677  integer iNumDof = aerodata->iGetNumDof();
1678  integer iFirstEq = -1;
1679  integer iFirstSubEq = -1;
1680  if (iNumDof > 0) {
1681  iFirstEq = iGetFirstIndex();
1682  iFirstSubEq = 18;
1683 
1684  integer iOffset = iFirstEq - 18;
1685 
1686  for (int iCnt = 18 + 1; iCnt <= iNumRows; iCnt++) {
1687  WM.PutRowIndex(iCnt, iOffset + iCnt);
1688  WM.PutColIndex(iCnt, iOffset + iCnt);
1689  }
1690  }
1691 
1692  for (int iNode = 0; iNode < LASTNODE; iNode++) {
1693  doublereal dsi = pdsi3[iNode];
1694  doublereal dsf = pdsf3[iNode];
1695 
1696  doublereal dsm = (dsf + dsi)/2.;
1697  doublereal dsdCsi = (dsf - dsi)/2.;
1698 
1699  Mat3x3 WM_F[6], WM_M[6];
1700  WM_F[DELTAx1].Reset();
1701  WM_F[DELTAg1].Reset();
1702  WM_F[DELTAx2].Reset();
1703  WM_F[DELTAg2].Reset();
1704  WM_F[DELTAx3].Reset();
1705  WM_F[DELTAg3].Reset();
1706  WM_M[DELTAx1].Reset();
1707  WM_M[DELTAg1].Reset();
1708  WM_M[DELTAx2].Reset();
1709  WM_M[DELTAg2].Reset();
1710  WM_M[DELTAx3].Reset();
1711  WM_M[DELTAg3].Reset();
1712 
1713  //unsigned int iDelta_x1, iDelta_g1, iDelta_x2, iDelta_g2, iDelta_x3, iDelta_g3;
1714  //iDelta_x1 = 0;, iDelta_g1, iDelta_x2, iDelta_g2, iDelta_x3, iDelta_g3;
1715 
1716  /* Ciclo sui punti di Gauss */
1717  PntWght PW = GDI.GetFirst();
1718  do {
1719  doublereal dCsi = PW.dGetPnt();
1720  doublereal ds = dsm + dsdCsi*dCsi;
1721  doublereal dXds = DxDcsi3N(ds,
1722  Xn[NODE1], Xn[NODE2], Xn[NODE3]);
1723 
1724  doublereal dN1 = ShapeFunc3N(ds, 1);
1725  doublereal dN2 = ShapeFunc3N(ds, 2);
1726  doublereal dN3 = ShapeFunc3N(ds, 3);
1727 
1728  Vec3 Xr(X1Tmp*dN1 + X2Tmp*dN2 + X3Tmp*dN3);
1729  Vec3 Vr(V1Tmp*dN1 + V2Tmp*dN2 + V3Tmp*dN3);
1730  Vec3 Wr(Wn1*dN1 + Wn2*dN2 + Wn3*dN3);
1731  Vec3 gr(g1*dN1 + g3*dN3);
1732  Mat3x3 Gamma(ER_Rot::MatG, gr);
1733 
1734  /* Contributo di velocita' del vento */
1735  Vec3 VTmp(Zero3);
1736  if (fGetAirVelocity(VTmp, Xr)) {
1737  Vr -= VTmp;
1738  }
1739 
1740  /*
1741  * Se l'elemento e' collegato ad un rotore,
1742  * aggiunge alla velocita' la velocita' indotta
1743  */
1744  if (pIndVel != 0) {
1746  GetLabel(), iPnt, Xr);
1747  }
1748 
1749  /* Copia i dati nel vettore di lavoro dVAM */
1750  doublereal dTw = Twist.dGet(ds);
1751  /* Contributo dell'eventuale sup. mobile */
1752  dTw += dGet();
1753 
1754  aerodata->SetSectionData(dCsi,
1755  Chord.dGet(ds),
1756  ForcePoint.dGet(ds),
1757  VelocityPoint.dGet(ds),
1758  dTw,
1759  dOmega);
1760 
1761  /*
1762  * Lo svergolamento non viene piu' trattato in aerod2_;
1763  * quindi lo uso per correggere la matrice di rotazione
1764  * dal sistema aerodinamico a quello globale
1765  */
1766  Mat3x3 RRloc(RR2*Mat3x3(ER_Rot::MatR, gr));
1767  if (dTw != 0.) {
1768  doublereal dCosT = cos(dTw);
1769  doublereal dSinT = sin(dTw);
1770  /* Assumo lo svergolamento positivo a cabrare */
1771  Mat3x3 RTw(dCosT, dSinT, 0.,
1772  -dSinT, dCosT, 0.,
1773  0., 0., 1.);
1774  /*
1775  * Allo stesso tempo interpola le g
1776  * e aggiunge lo svergolamento
1777  */
1778  RRloc = RRloc*RTw;
1779  }
1780 
1781  /*
1782  * Ruota velocita' e velocita' angolare nel sistema
1783  * aerodinamico e li copia nel vettore di lavoro dW
1784  */
1785  VTmp = RRloc.MulTV(Vr);
1786  VTmp.PutTo(&dW[0]);
1787 
1788  Vec3 WTmp = RRloc.MulTV(Wr);
1789  WTmp.PutTo(&dW[3]);
1790  /* Funzione di calcolo delle forze aerodinamiche */
1791  doublereal Fa0[6];
1792  Mat6x6 JFa;
1793 
1794  doublereal cc = dXds*dsdCsi*PW.dGetWght();
1795 
1796  Vec3 d(Xr - Xn[iNode]);
1797 
1798  Mat3x3 Theta1(RR2*Gamma*GammaInv1.MulMT(RR2*dN1));
1799  Mat3x3 Theta3(RR2*Gamma*GammaInv3.MulMT(RR2*dN3));
1800  Mat3x3 Theta2(Eye3 - Theta1 - Theta3);
1801 
1802  Vec3 Vrc(Vr*dCoef);
1803  Mat3x3 Bv1(Vrc.Cross(Theta1) - Mat3x3(MatCross, Omega1Crossf1*(dN1*dCoef)));
1804  Mat3x3 Bv2(Vrc.Cross(Theta2) - Mat3x3(MatCross, Omega2Crossf2*(dN2*dCoef)));
1805  Mat3x3 Bv3(Vrc.Cross(Theta3) - Mat3x3(MatCross, Omega3Crossf3*(dN3*dCoef)));
1806 
1807  Vec3 Wrc(Wr*dCoef);
1808  Mat3x3 Bw1(Wrc.Cross(Theta1) - Mat3x3(MatCross, Wn1*(dN1*dCoef)));
1809  Mat3x3 Bw2(Wrc.Cross(Theta2) - Mat3x3(MatCross, Wn2*(dN2*dCoef)));
1810  Mat3x3 Bw3(Wrc.Cross(Theta3) - Mat3x3(MatCross, Wn3*(dN3*dCoef)));
1811 
1812  if (iNumDof) {
1813  // prepare (v/dot{x} + dCoef*v/x) and so
1814  Mat3x3 RRlocT(RRloc.Transpose());
1815 
1816  vx.PutMat3x3(1, RRlocT*dN1);
1817  vx.PutMat3x3(4, RRloc.MulTM(Bv1 - Mat3x3(MatCross, f1Tmp*dN1)));
1818 
1819  vx.PutMat3x3(6 + 1, RRlocT*dN2);
1820  vx.PutMat3x3(6 + 4, RRloc.MulTM(Bv2 - Mat3x3(MatCross, f2Tmp*dN2)));
1821 
1822  vx.PutMat3x3(12 + 1, RRlocT*dN3);
1823  vx.PutMat3x3(12 + 4, RRloc.MulTM(Bv3 - Mat3x3(MatCross, f3Tmp*dN3)));
1824 
1825  wx.PutMat3x3(4, RRlocT + Bw1);
1826  wx.PutMat3x3(6 + 4, RRlocT + Bw2);
1827  wx.PutMat3x3(12 + 4, RRlocT + Bw3);
1828 
1829  // equations from iFirstEq on are dealt with by aerodata
1830  aerodata->AssJac(WM, dCoef, XCurr, XPrimeCurr,
1831  iFirstEq, iFirstSubEq,
1832  vx, wx, fq, cq, iPnt, dW, Fa0, JFa, OUTA[iPnt]);
1833 
1834  // deal with (f/dot{q} + dCoef*f/q) and so
1835  integer iOffset = 18 + iPnt*iNumDof;
1836  for (integer iCol = 1; iCol <= iNumDof; iCol++) {
1837  Vec3 fqTmp((RRloc*fq.GetVec(iCol))*cc);
1838  Vec3 cqTmp(d.Cross(fqTmp) + (RRloc*cq.GetVec(iCol))*cc);
1839 
1840  WM.Sub(6*iNode + 1, iOffset + iCol, fqTmp);
1841  WM.Sub(6*iNode + 4, iOffset + iCol, cqTmp);
1842  }
1843 
1844  // first equation
1845  iFirstEq += iNumDof;
1846  iFirstSubEq += iNumDof;
1847 
1848  } else {
1849  aerodata->GetForcesJac(iPnt, dW, Fa0, JFa, OUTA[iPnt]);
1850  }
1851 
1852  // rotate force, couple and Jacobian matrix in absolute frame
1853  Mat6x6 JFaR = MultRMRt(JFa, RRloc, cc);
1854 
1855  // force and moment about the node
1856  Vec3 fTmp(RRloc*(Vec3(&Fa0[0])*dCoef));
1857  Vec3 cTmp(RRloc*(Vec3(&Fa0[3])*dCoef) + d.Cross(fTmp));
1858 
1859  Mat3x3 WM_F2[6];
1860 
1861  // f <-> x
1862  WM_F2[DELTAx1] = JFaR.GetMat11()*dN1;
1863 
1864  WM_F2[DELTAx2] = JFaR.GetMat11()*dN2;
1865 
1866  WM_F2[DELTAx3] = JFaR.GetMat11()*dN3;
1867 
1868  doublereal delta;
1869 
1870  // c <-> x
1871  delta = (iNode == NODE1) ? 1. : 0.;
1872  WM_M[DELTAx1] += JFaR.GetMat21()*dN1 - Mat3x3(MatCross, fTmp*(dN1 - delta));
1873 
1874  delta = (iNode == NODE2) ? 1. : 0.;
1875  WM_M[DELTAx2] += JFaR.GetMat21()*dN2 - Mat3x3(MatCross, fTmp*(dN2 - delta));
1876 
1877  delta = (iNode == NODE3) ? 1. : 0.;
1878  WM_M[DELTAx3] += JFaR.GetMat21()*dN3 - Mat3x3(MatCross, fTmp*(dN3 - delta));
1879 
1880  // f <-> g
1881  WM_F2[DELTAg1] = (JFaR.GetMat12() - JFaR.GetMat11()*Mat3x3(MatCross, f1Tmp))*dN1;
1882  WM_F2[DELTAg1] += JFaR.GetMat11()*Bv1 + JFaR.GetMat12()*Bw1;
1883  WM_F2[DELTAg1] -= fTmp.Cross(Theta1);
1884 
1885  WM_F2[DELTAg2] = (JFaR.GetMat12() - JFaR.GetMat11()*Mat3x3(MatCross, f2Tmp))*dN2;
1886  WM_F2[DELTAg2] += JFaR.GetMat11()*Bv2 + JFaR.GetMat12()*Bw2;
1887  WM_F2[DELTAg2] -= fTmp.Cross(Theta2);
1888 
1889  WM_F2[DELTAg3] = (JFaR.GetMat12() - JFaR.GetMat11()*Mat3x3(MatCross, f3Tmp))*dN3;
1890  WM_F2[DELTAg3] += JFaR.GetMat11()*Bv3 + JFaR.GetMat12()*Bw3;
1891  WM_F2[DELTAg3] -= fTmp.Cross(Theta3);
1892 
1893  // c <-> g
1894  WM_M[DELTAg1] += (JFaR.GetMat22() - JFaR.GetMat21()*Mat3x3(MatCross, f1Tmp))*dN1;
1895  WM_M[DELTAg1] += JFaR.GetMat21()*Bv1 + JFaR.GetMat22()*Bw1;
1896  WM_M[DELTAg1] -= cTmp.Cross(Theta1);
1897  WM_M[DELTAg1] += Mat3x3(MatCrossCross, fTmp, f1Tmp*dN1);
1898 
1899  WM_M[DELTAg2] += (JFaR.GetMat22() - JFaR.GetMat21()*Mat3x3(MatCross, f2Tmp))*dN2;
1900  WM_M[DELTAg2] += JFaR.GetMat21()*Bv2 + JFaR.GetMat22()*Bw2;
1901  WM_M[DELTAg2] -= cTmp.Cross(Theta2);
1902  WM_M[DELTAg2] += Mat3x3(MatCrossCross, fTmp, f2Tmp*dN2);
1903 
1904  WM_M[DELTAg3] += (JFaR.GetMat22() - JFaR.GetMat21()*Mat3x3(MatCross, f3Tmp))*dN3;
1905  WM_M[DELTAg3] += JFaR.GetMat21()*Bv3 + JFaR.GetMat22()*Bw3;
1906  WM_M[DELTAg3] -= cTmp.Cross(Theta3);
1907  WM_M[DELTAg3] += Mat3x3(MatCrossCross, fTmp, f3Tmp*dN3);
1908 
1909  for (int iCnt = 0; iCnt < 2*LASTNODE; iCnt++) {
1910  WM_F[iCnt] += WM_F2[iCnt];
1911  WM_M[iCnt] += d.Cross(WM_F2[iCnt]);
1912  }
1913 
1914  iPnt++;
1915 
1916  } while (GDI.fGetNext(PW));
1917 
1918  for (int iCnt = 0; iCnt < 2*LASTNODE; iCnt++) {
1919  WM.Sub(6*iNode + 1, 3*iCnt + 1, WM_F[iCnt]);
1920  WM.Sub(6*iNode + 4, 3*iCnt + 1, WM_M[iCnt]);
1921  }
1922  }
1923 
1924  return WorkMat;
1925 }
void ResetIterator(void)
Definition: aeroelem.cc:77
Mat3x3 MultRMRt(const Mat3x3 &m, const Mat3x3 &R)
Definition: matvec3.cc:1162
void PutColIndex(integer iSubCol, integer iCol)
Definition: submat.h:325
virtual void SetSectionData(const doublereal &abscissa, const doublereal &chord, const doublereal &forcepoint, const doublereal &velocitypoint, const doublereal &twist, const doublereal &omega=0.)
Definition: aerodata.cc:237
const Vec3 Zero3(0., 0., 0.)
virtual bool GetAirProps(const Vec3 &X, doublereal &rho, doublereal &c, doublereal &p, doublereal &T) const
Definition: aerodyn.cc:760
const Mat3x3 Ra1
Definition: aeroelem.h:355
Mat3x3 GetMat12(void)
Definition: matvec6.h:328
virtual int GetForcesJac(int i, const doublereal *W, doublereal *TNG, Mat6x6 &J, outa_t &OUTA)
Definition: aerodata.cc:384
Definition: matvec3.h:98
GradientExpression< UnaryExpr< FuncSin, Expr > > sin(const GradientExpression< Expr > &u)
Definition: gradient.h:2977
MatR_Manip MatR
Definition: Rot.cc:292
const MatCross_Manip MatCross
Definition: matvec3.cc:639
FullSubMatrixHandler & SetFull(void)
Definition: submat.h:1168
flag fGetNext(doublereal &d, integer i=0) const
Definition: gauss.cc:205
Mat3x3 GetMat21(void)
Definition: matvec6.h:324
virtual unsigned int iGetNumDof(void) const
Definition: aerodata.cc:362
PntWght GetFirst(void) const
Definition: gauss.cc:198
doublereal dGet(void) const
Definition: drive.cc:671
const Mat3x3 Eye3(1., 0., 0., 0., 1., 0., 0., 0., 1.)
std::vector< outa_t > OUTA
Definition: aeroelem.h:164
const ShapeOwner Chord
Definition: aeroelem.h:157
InducedVelocity * pIndVel
Definition: aeroelem.h:154
void PutMat3x3(integer iCol, const Mat3x3 &m)
Definition: matvec3n.cc:628
Param_Manip Param
Definition: Rot.cc:291
doublereal ShapeFunc3N(doublereal d, integer iNode, enum Order Ord)
Definition: shapefnc.cc:173
Mat3x3 GetMat22(void)
Definition: matvec6.h:332
virtual Elem::Type GetElemType(void) const =0
const Mat3x3 Ra2
Definition: aeroelem.h:356
const ShapeOwner Twist
Definition: aeroelem.h:160
AeroData * aerodata
Definition: aeroelem.h:153
virtual void SetAirData(const doublereal &rho, const doublereal &c)
Definition: aerodata.cc:214
Mat3x3 GetMat11(void)
Definition: matvec6.h:320
Vec3 GetVec(integer iCol) const
Definition: matvec3n.cc:553
void Reset(void)
Definition: matvec3.cc:613
doublereal dGetWght(void) const
Definition: gauss.h:56
const doublereal dN2[2]
Definition: shapefnc.cc:52
const StructNode * pNode[3]
Definition: aeroelem.h:350
const ShapeOwner ForcePoint
Definition: aeroelem.h:158
void SetNullMatrix(void)
Definition: submat.h:1159
const doublereal dN3[2][3]
Definition: shapefnc.cc:157
static const doublereal pdsf3[]
Definition: aeroelem.cc:1558
void PutTo(doublereal *pd) const
Definition: matvec3.h:339
virtual Vec3 GetInducedVelocity(Elem::Type type, unsigned uLabel, unsigned uPnt, const Vec3 &X) const =0
#define DEBUGCOUT(msg)
Definition: myassert.h:232
GaussDataIterator GDI
Definition: aeroelem.h:163
virtual integer iGetFirstMomentumIndex(void) const =0
virtual doublereal dGet(doublereal d) const
Definition: shape.cc:60
virtual integer iGetFirstPositionIndex(void) const
Definition: strnode.h:452
MatG_Manip MatG
Definition: Rot.cc:293
const Vec3 f2
Definition: aeroelem.h:353
const Vec3 f1
Definition: aeroelem.h:352
virtual doublereal dGetOmega(void) const
Definition: rotor.h:151
virtual const Vec3 & GetXCurr(void) const
Definition: strnode.h:310
virtual void ResizeReset(integer, integer)
Definition: submat.cc:182
const ShapeOwner VelocityPoint
Definition: aeroelem.h:159
static std::stack< cleanup * > c
Definition: cleanup.cc:59
const MatCrossCross_Manip MatCrossCross
Definition: matvec3.cc:640
doublereal DxDcsi3N(doublereal d, const Vec3 &X1, const Vec3 &X2, const Vec3 &X3)
Definition: shapefnc.cc:228
doublereal dGetPnt(void) const
Definition: gauss.h:55
void PutRowIndex(integer iSubRow, integer iRow)
Definition: submat.h:311
const Vec3 f3
Definition: aeroelem.h:354
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const =0
void Sub(integer iRow, integer iCol, const Vec3 &v)
Definition: submat.cc:215
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
static const doublereal pdsi3[]
Definition: aeroelem.cc:1557
virtual integer iGetFirstIndex(void) const
Definition: dofown.h:127
virtual void AssJac(FullSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr, integer iFirstIndex, integer iFirstSubIndex, const Mat3xN &vx, const Mat3xN &wx, Mat3xN &fq, Mat3xN &cq, int i, const doublereal *W, doublereal *TNG, Mat6x6 &J, outa_t &OUTA)
Definition: aerodata.cc:403
double doublereal
Definition: colamd.c:52
long int integer
Definition: colamd.c:51
unsigned int GetLabel(void) const
Definition: withlab.cc:62
MatGm1_Manip MatGm1
Definition: Rot.cc:294
const Mat3x3 Ra3
Definition: aeroelem.h:357
Definition: rotor.h:43
Definition: gauss.h:50

Here is the call graph for this function:

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

Implements Elem.

Definition at line 1929 of file aeroelem.cc.

References AssVec(), DEBUGCOUTFNAME, StructDispNode::iGetFirstMomentumIndex(), NODE1, NODE2, NODE3, pNode, SubVectorHandler::PutRowIndex(), VectorHandler::ResizeReset(), and Elem::WorkSpaceDim().

1933 {
1934  DEBUGCOUTFNAME("AerodynamicBeam::AssRes");
1935 
1936  integer iNumRows;
1937  integer iNumCols;
1938  WorkSpaceDim(&iNumRows, &iNumCols);
1939  WorkVec.ResizeReset(iNumRows);
1940 
1941  integer iNode1FirstIndex = pNode[NODE1]->iGetFirstMomentumIndex();
1942  integer iNode2FirstIndex = pNode[NODE2]->iGetFirstMomentumIndex();
1943  integer iNode3FirstIndex = pNode[NODE3]->iGetFirstMomentumIndex();
1944  for (int iCnt = 1; iCnt <= 6; iCnt++) {
1945  WorkVec.PutRowIndex(iCnt, iNode1FirstIndex + iCnt);
1946  WorkVec.PutRowIndex(6 + iCnt, iNode2FirstIndex + iCnt);
1947  WorkVec.PutRowIndex(12 + iCnt, iNode3FirstIndex + iCnt);
1948  }
1949 
1950  AssVec(WorkVec, dCoef, XCurr, XPrimeCurr);
1951 
1952  return WorkVec;
1953 }
#define DEBUGCOUTFNAME(fname)
Definition: myassert.h:256
virtual void ResizeReset(integer)
Definition: vh.cc:55
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
void AssVec(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: aeroelem.cc:1980
const StructNode * pNode[3]
Definition: aeroelem.h:350
virtual integer iGetFirstMomentumIndex(void) const =0
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const =0
long int integer
Definition: colamd.c:51

Here is the call graph for this function:

void AerodynamicBeam::AssVec ( SubVectorHandler WorkVec,
doublereal  dCoef,
const VectorHandler XCurr,
const VectorHandler XPrimeCurr 
)
protected

Definition at line 1980 of file aeroelem.cc.

References VectorHandler::Add(), Aerodynamic2DElem< 3 >::AddForce_int(), Aerodynamic2DElem< 3 >::AddSectionalForce_int(), Aerodynamic2DElem< 3 >::aerodata, AeroData::AssRes(), ToBeOutput::bToBeOutput(), c, Aerodynamic2DElem< 3 >::Chord, grad::cos(), Vec3::Cross(), grad::Cross(), DEBUGCOUTFNAME, ShapeOwner::dGet(), DriveOwner::dGet(), Rotor::dGetOmega(), PntWght::dGetPnt(), PntWght::dGetWght(), dN2, dN3, DxDcsi3N(), F, f1, f2, f3, AirPropOwner::fGetAirVelocity(), GaussDataIterator::fGetNext(), Aerodynamic2DElem< 3 >::ForcePoint, Aerodynamic2DElem< 3 >::GDI, AirPropOwner::GetAirProps(), Elem::GetElemType(), GaussDataIterator::GetFirst(), AeroData::GetForces(), InducedVelocity::GetInducedVelocity(), WithLabel::GetLabel(), StructDispNode::GetXCurr(), DofOwnerOwner::iGetFirstIndex(), AeroData::iGetNumDof(), VectorHandler::iGetSize(), LASTNODE, M, ER_Rot::MatR, Mat3x3::MulTM(), Mat3x3::MulTV(), NODE1, NODE2, NODE3, Aerodynamic2DElem< 3 >::OUTA, ER_Rot::Param, pdsf3, pdsi3, Aerodynamic2DElem< 3 >::pIndVel, pNode, SubVectorHandler::PutRowIndex(), Vec3::PutTo(), Ra1, Ra2, Ra3, Vec3::Reset(), AerodynamicOutput::ResetIterator(), AeroData::SetAirData(), AerodynamicOutput::SetData(), AeroData::SetSectionData(), ShapeFunc3N(), grad::sin(), Aerodynamic2DElem< 3 >::TipLoss, Aerodynamic2DElem< 3 >::Twist, Aerodynamic2DElem< 3 >::VelocityPoint, and Zero3.

Referenced by AssRes(), and InitialAssRes().

1984 {
1985  DEBUGCOUTFNAME("AerodynamicBeam::AssVec");
1986 
1987  /* array di vettori per via del ciclo sui nodi ... */
1988  Vec3 Xn[3];
1989 
1990  /* Dati dei nodi */
1991  Xn[NODE1] = pNode[NODE1]->GetXCurr();
1992  const Mat3x3& Rn1(pNode[NODE1]->GetRCurr());
1993  const Vec3& Vn1(pNode[NODE1]->GetVCurr());
1994  const Vec3& Wn1(pNode[NODE1]->GetWCurr());
1995 
1996  Xn[NODE2] = pNode[NODE2]->GetXCurr();
1997  const Mat3x3& Rn2(pNode[NODE2]->GetRCurr());
1998  const Vec3& Vn2(pNode[NODE2]->GetVCurr());
1999  const Vec3& Wn2(pNode[NODE2]->GetWCurr());
2000 
2001  Xn[NODE3] = pNode[NODE3]->GetXCurr();
2002  const Mat3x3& Rn3(pNode[NODE3]->GetRCurr());
2003  const Vec3& Vn3(pNode[NODE3]->GetVCurr());
2004  const Vec3& Wn3(pNode[NODE3]->GetWCurr());
2005 
2006  Vec3 f1Tmp(Rn1*f1);
2007  Vec3 f2Tmp(Rn2*f2);
2008  Vec3 f3Tmp(Rn3*f3);
2009 
2010  Vec3 X1Tmp(Xn[NODE1] + f1Tmp);
2011  Vec3 X2Tmp(Xn[NODE2] + f2Tmp);
2012  Vec3 X3Tmp(Xn[NODE3] + f3Tmp);
2013 
2014  Vec3 V1Tmp(Vn1 + Wn1.Cross(f1Tmp));
2015  Vec3 V2Tmp(Vn2 + Wn2.Cross(f2Tmp));
2016  Vec3 V3Tmp(Vn3 + Wn3.Cross(f3Tmp));
2017 
2018  /*
2019  * Matrice di trasformazione dal sistema globale a quello aerodinamico
2020  */
2021  Mat3x3 RR1(Rn1*Ra1);
2022  Mat3x3 RR2(Rn2*Ra2);
2023  Mat3x3 RR3(Rn3*Ra3);
2024 
2025  /*
2026  * Parametri di rotazione dai nodi 1 e 3 al nodo 2 (nell'ipotesi
2027  * che tale trasformazione non dia luogo ad una singolarita')
2028  */
2029  Vec3 g1(ER_Rot::Param, RR2.MulTM(RR1));
2030  Vec3 g3(ER_Rot::Param, RR2.MulTM(RR3));
2031 
2032  /*
2033  * Se l'elemento e' collegato ad un rotore,
2034  * si fa dare la velocita' di rotazione
2035  */
2036  doublereal dOmega = 0.;
2037  if (pIndVel != 0) {
2038  Rotor *pRotor = dynamic_cast<Rotor *>(pIndVel);
2039  if (pRotor != 0) {
2040  dOmega = pRotor->dGetOmega();
2041  }
2042  }
2043 
2044  /*
2045  * Dati "permanenti" (uso solo la posizione del nodo 2 perche'
2046  * non dovrebbero cambiare "molto")
2047  */
2048  doublereal rho, c, p, T;
2049  GetAirProps(Xn[NODE2], rho, c, p, T); /* p, T no used yet */
2050  aerodata->SetAirData(rho, c);
2051 
2052  int iPnt = 0;
2053 
2054  ResetIterator();
2055 
2056  integer iNumDof = aerodata->iGetNumDof();
2057  integer iFirstEq = -1;
2058  integer iFirstSubEq = -1;
2059  if (iNumDof > 0) {
2060  iFirstEq = iGetFirstIndex();
2061  iFirstSubEq = 18;
2062 
2063  integer iOffset = iFirstEq - 18;
2064  integer iNumRows = WorkVec.iGetSize();
2065  for (int iCnt = 18 + 1; iCnt <= iNumRows; iCnt++) {
2066  WorkVec.PutRowIndex(iCnt, iOffset + iCnt);
2067  }
2068  }
2069 
2070  for (int iNode = 0; iNode < LASTNODE; iNode++) {
2071 
2072  /* Resetta le forze */
2073  F[iNode].Reset();
2074  M[iNode].Reset();
2075 
2076  doublereal dsi = pdsi3[iNode];
2077  doublereal dsf = pdsf3[iNode];
2078 
2079  doublereal dsm = (dsf + dsi)/2.;
2080  doublereal dsdCsi = (dsf - dsi)/2.;
2081 
2082  /* Ciclo sui punti di Gauss */
2083  PntWght PW = GDI.GetFirst();
2084  do {
2085  doublereal dCsi = PW.dGetPnt();
2086  doublereal ds = dsm + dsdCsi*dCsi;
2087  doublereal dXds = DxDcsi3N(ds,
2088  Xn[NODE1], Xn[NODE2], Xn[NODE3]);
2089 
2090  doublereal dN1 = ShapeFunc3N(ds, 1);
2091  doublereal dN2 = ShapeFunc3N(ds, 2);
2092  doublereal dN3 = ShapeFunc3N(ds, 3);
2093 
2094  Vec3 Xr(X1Tmp*dN1 + X2Tmp*dN2 + X3Tmp*dN3);
2095  Vec3 Vr(V1Tmp*dN1 + V2Tmp*dN2 + V3Tmp*dN3);
2096  Vec3 Wr(Wn1*dN1 + Wn2*dN2 + Wn3*dN3);
2097 
2098  /* Contributo di velocita' del vento */
2099  Vec3 VTmp(Zero3);
2100  if (fGetAirVelocity(VTmp, Xr)) {
2101  Vr -= VTmp;
2102  }
2103 
2104  /*
2105  * Se l'elemento e' collegato ad un rotore,
2106  * aggiunge alla velocita' la velocita' indotta
2107  */
2108  if (pIndVel != 0) {
2110  GetLabel(), iPnt, Xr);
2111  }
2112 
2113  /* Copia i dati nel vettore di lavoro dVAM */
2114  doublereal dTw = Twist.dGet(ds);
2115  /* Contributo dell'eventuale sup. mobile */
2116  dTw += dGet();
2117 
2118  aerodata->SetSectionData(dCsi,
2119  Chord.dGet(ds),
2120  ForcePoint.dGet(ds),
2121  VelocityPoint.dGet(ds),
2122  dTw,
2123  dOmega);
2124 
2125  /*
2126  * Lo svergolamento non viene piu' trattato in aerod2_;
2127  * quindi lo uso per correggere la matrice di rotazione
2128  * dal sistema aerodinamico a quello globale
2129  */
2130  Mat3x3 RRloc(RR2*Mat3x3(ER_Rot::MatR, g1*dN1 + g3*dN3));
2131  if (dTw != 0.) {
2132  doublereal dCosT = cos(dTw);
2133  doublereal dSinT = sin(dTw);
2134  /* Assumo lo svergolamento positivo a cabrare */
2135  Mat3x3 RTw(dCosT, dSinT, 0.,
2136  -dSinT, dCosT, 0.,
2137  0., 0., 1.);
2138  /*
2139  * Allo stesso tempo interpola le g
2140  * e aggiunge lo svergolamento
2141  */
2142  RRloc = RRloc*RTw;
2143  }
2144 
2145  /*
2146  * Ruota velocita' e velocita' angolare nel sistema
2147  * aerodinamico e li copia nel vettore di lavoro dW
2148  */
2149  doublereal dW[6];
2150  doublereal dTng[6];
2151 
2152  VTmp = RRloc.MulTV(Vr);
2153  VTmp.PutTo(&dW[0]);
2154 
2155  Vec3 WTmp = RRloc.MulTV(Wr);
2156  WTmp.PutTo(&dW[3]);
2157 
2158  /* Funzione di calcolo delle forze aerodinamiche */
2159  if (iNumDof) {
2160  aerodata->AssRes(WorkVec, dCoef, XCurr, XPrimeCurr,
2161  iFirstEq, iFirstSubEq, iPnt, dW, dTng, OUTA[iPnt]);
2162 
2163  // first equation
2164  iFirstEq += iNumDof;
2165  iFirstSubEq += iNumDof;
2166 
2167  } else {
2168  aerodata->GetForces(iPnt, dW, dTng, OUTA[iPnt]);
2169  }
2170 
2171  /* Dimensionalizza le forze */
2172  doublereal dWght = dXds*dsdCsi*PW.dGetWght();
2173  dTng[1] *= TipLoss.dGet(dCsi);
2174  Vec3 FTmp(RRloc*(Vec3(&dTng[0])));
2175  Vec3 MTmp(RRloc*(Vec3(&dTng[3])));
2176 
2177  // Se e' definito il rotore, aggiungere il contributo alla trazione
2178  AddSectionalForce_int(iPnt, FTmp, MTmp, dWght, Xr, RRloc, Vr, Wr);
2179 
2180  FTmp *= dWght;
2181  MTmp *= dWght;
2182  F[iNode] += FTmp;
2183  M[iNode] += MTmp;
2184  M[iNode] += (Xr - Xn[iNode]).Cross(FTmp);
2185 
2186  // specific for Gauss points force output
2187  if (bToBeOutput()) {
2188  SetData(VTmp, dTng, Xr, RRloc, Vr, Wr, FTmp, MTmp);
2189  }
2190 
2191  iPnt++;
2192 
2193  } while (GDI.fGetNext(PW));
2194 
2195  // Se e' definito il rotore, aggiungere il contributo alla trazione
2196  AddForce_int(pNode[iNode], F[iNode], M[iNode], Xn[iNode]);
2197 
2198  /* Somma il termine al residuo */
2199  WorkVec.Add(6*iNode + 1, F[iNode]);
2200  WorkVec.Add(6*iNode + 4, M[iNode]);
2201  }
2202 }
void ResetIterator(void)
Definition: aeroelem.cc:77
virtual void SetSectionData(const doublereal &abscissa, const doublereal &chord, const doublereal &forcepoint, const doublereal &velocitypoint, const doublereal &twist, const doublereal &omega=0.)
Definition: aerodata.cc:237
const Vec3 Zero3(0., 0., 0.)
virtual bool GetAirProps(const Vec3 &X, doublereal &rho, doublereal &c, doublereal &p, doublereal &T) const
Definition: aerodyn.cc:760
const Mat3x3 Ra1
Definition: aeroelem.h:355
virtual bool bToBeOutput(void) const
Definition: output.cc:890
Definition: matvec3.h:98
GradientExpression< UnaryExpr< FuncSin, Expr > > sin(const GradientExpression< Expr > &u)
Definition: gradient.h:2977
#define DEBUGCOUTFNAME(fname)
Definition: myassert.h:256
MatR_Manip MatR
Definition: Rot.cc:292
Vec3 M[LASTNODE]
Definition: aeroelem.h:367
flag fGetNext(doublereal &d, integer i=0) const
Definition: gauss.cc:205
virtual unsigned int iGetNumDof(void) const
Definition: aerodata.cc:362
PntWght GetFirst(void) const
Definition: gauss.cc:198
doublereal dGet(void) const
Definition: drive.cc:671
std::vector< outa_t > OUTA
Definition: aeroelem.h:164
virtual int GetForces(int i, const doublereal *W, doublereal *TNG, outa_t &OUTA)
Definition: aerodata.cc:377
const ShapeOwner Chord
Definition: aeroelem.h:157
InducedVelocity * pIndVel
Definition: aeroelem.h:154
Param_Manip Param
Definition: Rot.cc:291
doublereal ShapeFunc3N(doublereal d, integer iNode, enum Order Ord)
Definition: shapefnc.cc:173
virtual Elem::Type GetElemType(void) const =0
const Mat3x3 Ra2
Definition: aeroelem.h:356
virtual integer iGetSize(void) const =0
const ShapeOwner Twist
Definition: aeroelem.h:160
AeroData * aerodata
Definition: aeroelem.h:153
const ShapeOwner TipLoss
Definition: aeroelem.h:161
virtual void SetAirData(const doublereal &rho, const doublereal &c)
Definition: aerodata.cc:214
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
doublereal dGetWght(void) const
Definition: gauss.h:56
const doublereal dN2[2]
Definition: shapefnc.cc:52
const StructNode * pNode[3]
Definition: aeroelem.h:350
const ShapeOwner ForcePoint
Definition: aeroelem.h:158
const doublereal dN3[2][3]
Definition: shapefnc.cc:157
void Reset(void)
Definition: matvec3.cc:109
static const doublereal pdsf3[]
Definition: aeroelem.cc:1558
void PutTo(doublereal *pd) const
Definition: matvec3.h:339
virtual Vec3 GetInducedVelocity(Elem::Type type, unsigned uLabel, unsigned uPnt, const Vec3 &X) const =0
GaussDataIterator GDI
Definition: aeroelem.h:163
virtual doublereal dGet(doublereal d) const
Definition: shape.cc:60
const Vec3 f2
Definition: aeroelem.h:353
const Vec3 f1
Definition: aeroelem.h:352
virtual doublereal dGetOmega(void) const
Definition: rotor.h:151
VectorExpression< VectorCrossExpr< VectorLhsExpr, VectorRhsExpr >, 3 > Cross(const VectorExpression< VectorLhsExpr, 3 > &u, const VectorExpression< VectorRhsExpr, 3 > &v)
Definition: matvec.h:3248
void AddSectionalForce_int(unsigned uPnt, const Vec3 &F, const Vec3 &M, doublereal dW, const Vec3 &X, const Mat3x3 &R, const Vec3 &V, const Vec3 &W) const
virtual const Vec3 & GetXCurr(void) const
Definition: strnode.h:310
virtual void Add(integer iRow, const Vec3 &v)
Definition: vh.cc:63
const ShapeOwner VelocityPoint
Definition: aeroelem.h:159
static std::stack< cleanup * > c
Definition: cleanup.cc:59
void SetData(const Vec3 &v, const doublereal *pd, const Vec3 &X, const Mat3x3 &R, const Vec3 &V, const Vec3 &W, const Vec3 &F, const Vec3 &M)
Definition: aeroelem.cc:92
doublereal DxDcsi3N(doublereal d, const Vec3 &X1, const Vec3 &X2, const Vec3 &X3)
Definition: shapefnc.cc:228
doublereal dGetPnt(void) const
Definition: gauss.h:55
const Vec3 f3
Definition: aeroelem.h:354
Vec3 F[LASTNODE]
Definition: aeroelem.h:366
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
static const doublereal pdsi3[]
Definition: aeroelem.cc:1557
virtual integer iGetFirstIndex(void) const
Definition: dofown.h:127
double doublereal
Definition: colamd.c:52
void AddForce_int(const StructNode *pN, const Vec3 &F, const Vec3 &M, const Vec3 &X) const
long int integer
Definition: colamd.c:51
unsigned int GetLabel(void) const
Definition: withlab.cc:62
const Mat3x3 Ra3
Definition: aeroelem.h:357
virtual void AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr, integer iFirstIndex, integer iFirstSubIndex, int i, const doublereal *W, doublereal *TNG, outa_t &OUTA)
Definition: aerodata.cc:391
Definition: rotor.h:43
Definition: gauss.h:50

Here is the call graph for this function:

virtual AerodynamicElem::Type AerodynamicBeam::GetAerodynamicElemType ( void  ) const
inlinevirtual

Implements AerodynamicElem.

Definition at line 424 of file aeroelem.h.

References AerodynamicElem::AERODYNAMICBEAM.

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

Reimplemented from Elem.

Definition at line 434 of file aeroelem.h.

References NODE1, and NODE2.

434  {
435  connectedNodes.resize(3);
436  connectedNodes[0] = pNode[NODE1];
437  connectedNodes[1] = pNode[NODE2];
438  connectedNodes[2] = pNode[NODE3];
439  };
const StructNode * pNode[3]
Definition: aeroelem.h:350
SubVectorHandler & AerodynamicBeam::InitialAssRes ( SubVectorHandler WorkVec,
const VectorHandler XCurr 
)
virtual

Implements SubjectToInitialAssembly.

Definition at line 1957 of file aeroelem.cc.

References AssVec(), DEBUGCOUTFNAME, StructDispNode::iGetFirstPositionIndex(), NODE1, NODE2, NODE3, pNode, SubVectorHandler::PutRowIndex(), and VectorHandler::ResizeReset().

1959 {
1960  DEBUGCOUTFNAME("AerodynamicBeam::InitialAssRes");
1961  WorkVec.ResizeReset(18);
1962 
1963  integer iNode1FirstIndex = pNode[NODE1]->iGetFirstPositionIndex();
1964  integer iNode2FirstIndex = pNode[NODE2]->iGetFirstPositionIndex();
1965  integer iNode3FirstIndex = pNode[NODE3]->iGetFirstPositionIndex();
1966  for (int iCnt = 1; iCnt <= 6; iCnt++) {
1967  WorkVec.PutRowIndex(iCnt, iNode1FirstIndex + iCnt);
1968  WorkVec.PutRowIndex(6 + iCnt, iNode2FirstIndex + iCnt);
1969  WorkVec.PutRowIndex(12 + iCnt, iNode3FirstIndex + iCnt);
1970  }
1971 
1972  AssVec(WorkVec, 1., XCurr, XCurr);
1973 
1974  return WorkVec;
1975 }
#define DEBUGCOUTFNAME(fname)
Definition: myassert.h:256
virtual void ResizeReset(integer)
Definition: vh.cc:55
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
void AssVec(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Definition: aeroelem.cc:1980
const StructNode * pNode[3]
Definition: aeroelem.h:350
virtual integer iGetFirstPositionIndex(void) const
Definition: strnode.h:452
long int integer
Definition: colamd.c:51

Here is the call graph for this function:

void AerodynamicBeam::Output ( OutputHandler OH) const
virtual

Reimplemented from ToBeOutput.

Definition at line 2209 of file aeroelem.cc.

References AerodynamicOutput::AEROD_OUT_NODE, AerodynamicOutput::AEROD_OUT_PGAUSS, AerodynamicOutput::AEROD_OUT_STD, OutputHandler::AERODYNAMIC, OutputHandler::Aerodynamic(), ASSERT, ToBeOutput::bToBeOutput(), DEBUGCOUTFNAME, F, Aerodynamic2DElem< 3 >::GDI, WithLabel::GetLabel(), AerodynamicOutput::GetOutput(), NumIntData::iGetNum(), M, NODE1, NODE2, NODE3, Aerodynamic2DElem< 3 >::OUTA, Aerodynamic2DElem< iNN >::Output_int(), AerodynamicOutput::OutputData, pBeam, OutputHandler::UseText(), and Vec3::Write().

2210 {
2211  DEBUGCOUTFNAME("AerodynamicBeam::Output");
2212 
2213  if (bToBeOutput()) {
2215 
2217  std::ostream& out = OH.Aerodynamic() << std::setw(8) << GetLabel();
2218 
2219  switch (GetOutput()) {
2220  case AEROD_OUT_NODE:
2221  out << " " << std::setw(8) << pBeam->GetLabel()
2222  << " ", F[NODE1].Write(out, " ") << " ", M[NODE1].Write(out, " ")
2223  << " ", F[NODE2].Write(out, " ") << " ", M[NODE2].Write(out, " ")
2224  << " ", F[NODE3].Write(out, " ") << " ", M[NODE3].Write(out, " ");
2225  break;
2226 
2227  case AEROD_OUT_PGAUSS:
2228  ASSERT(!OutputData.empty());
2229 
2230  for (std::vector<Aero_output>::const_iterator i = OutputData.begin();
2231  i != OutputData.end(); ++i)
2232  {
2233  out << " " << i->alpha
2234  << " " << i->f;
2235  }
2236  break;
2237 
2238  case AEROD_OUT_STD:
2239  for (int i = 0; i < 3*GDI.iGetNum(); i++) {
2240  out
2241  << " " << OUTA[i].alpha
2242  << " " << OUTA[i].gamma
2243  << " " << OUTA[i].mach
2244  << " " << OUTA[i].cl
2245  << " " << OUTA[i].cd
2246  << " " << OUTA[i].cm
2247  << " " << OUTA[i].alf1
2248  << " " << OUTA[i].alf2;
2249  }
2250  break;
2251 
2252  default:
2253  ASSERT(0);
2254  break;
2255  }
2256 
2257  out << std::endl;
2258  }
2259  }
2260 }
std::ostream & Write(std::ostream &out, const char *sFill=" ") const
Definition: matvec3.cc:738
virtual bool bToBeOutput(void) const
Definition: output.cc:890
#define DEBUGCOUTFNAME(fname)
Definition: myassert.h:256
AerodynamicOutput::eOutput GetOutput(void) const
Definition: aeroelem.cc:125
Vec3 M[LASTNODE]
Definition: aeroelem.h:367
std::vector< outa_t > OUTA
Definition: aeroelem.h:164
const Beam * pBeam
Definition: aeroelem.h:349
GaussDataIterator GDI
Definition: aeroelem.h:163
#define ASSERT(expression)
Definition: colamd.c:977
void Output_int(OutputHandler &OH) const
Definition: aeroelem.cc:544
std::vector< Aero_output > OutputData
Definition: aeroelem.h:107
Vec3 F[LASTNODE]
Definition: aeroelem.h:366
virtual integer iGetNum(void) const
Definition: gauss.h:96
unsigned int GetLabel(void) const
Definition: withlab.cc:62
bool UseText(int out) const
Definition: output.cc:446
std::ostream & Aerodynamic(void) const
Definition: output.h:485

Here is the call graph for this function:

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

Implements Elem.

Definition at line 1528 of file aeroelem.cc.

References Aerodynamic2DElem< 3 >::aerodata, Aerodynamic2DElem< 3 >::Chord, DEBUGCOUTFNAME, f1, f2, f3, Aerodynamic2DElem< 3 >::ForcePoint, Aerodynamic2DElem< 3 >::GDI, WithLabel::GetLabel(), Mat3x3::GetVec(), NumIntData::iGetNum(), pBeam, DriveOwner::pGetDriveCaller(), ShapeOwner::pGetShape(), Aerodynamic2DElem< 3 >::pIndVel, Ra1, Ra2, Ra3, Shape::Restart(), AeroData::Restart(), DriveCaller::Restart(), Aerodynamic2DElem< 3 >::Twist, Aerodynamic2DElem< 3 >::VelocityPoint, Write(), and Vec3::Write().

1529 {
1530  DEBUGCOUTFNAME("AerodynamicBeam::Restart");
1531  out << " aerodynamic beam: " << GetLabel()
1532  << ", " << pBeam->GetLabel();
1533  if (pIndVel != 0) {
1534  out << ", rotor, " << pIndVel->GetLabel();
1535  }
1536  out << ", reference, node, ", f1.Write(out, ", ")
1537  << ", reference, node, 1, ", (Ra1.GetVec(1)).Write(out, ", ")
1538  << ", 2, ", (Ra1.GetVec(2)).Write(out, ", ")
1539  << ", reference, node, ", f2.Write(out, ", ")
1540  << ", reference, node, 1, ", (Ra2.GetVec(1)).Write(out, ", ")
1541  << ", 2, ", (Ra2.GetVec(2)).Write(out, ", ")
1542  << ", reference, node, ", f3.Write(out, ", ")
1543  << ", reference, node, 1, ", (Ra3.GetVec(1)).Write(out, ", ")
1544  << ", 2, ", (Ra3.GetVec(2)).Write(out, ", ")
1545  << ", ";
1546  Chord.pGetShape()->Restart(out) << ", ";
1547  ForcePoint.pGetShape()->Restart(out) << ", ";
1548  VelocityPoint.pGetShape()->Restart(out) << ", ";
1549  Twist.pGetShape()->Restart(out) << ", "
1550  << GDI.iGetNum() << ", control, ";
1551  pGetDriveCaller()->Restart(out) << ", ";
1552  aerodata->Restart(out);
1553  return out << ";" << std::endl;
1554 }
std::ostream & Write(std::ostream &out, const char *sFill=" ") const
Definition: matvec3.cc:738
const Mat3x3 Ra1
Definition: aeroelem.h:355
#define DEBUGCOUTFNAME(fname)
Definition: myassert.h:256
virtual std::ostream & Restart(std::ostream &out) const =0
std::ostream & Write(std::ostream &out, const FullMatrixHandler &m, const char *s, const char *s2)
Definition: fullmh.cc:376
const ShapeOwner Chord
Definition: aeroelem.h:157
InducedVelocity * pIndVel
Definition: aeroelem.h:154
virtual const Shape * pGetShape(void) const
Definition: shape.cc:72
const Mat3x3 Ra2
Definition: aeroelem.h:356
const Beam * pBeam
Definition: aeroelem.h:349
Vec3 GetVec(unsigned short int i) const
Definition: matvec3.h:893
const ShapeOwner Twist
Definition: aeroelem.h:160
AeroData * aerodata
Definition: aeroelem.h:153
virtual std::ostream & Restart(std::ostream &out) const =0
virtual std::ostream & Restart(std::ostream &out) const =0
const ShapeOwner ForcePoint
Definition: aeroelem.h:158
GaussDataIterator GDI
Definition: aeroelem.h:163
const Vec3 f2
Definition: aeroelem.h:353
const Vec3 f1
Definition: aeroelem.h:352
DriveCaller * pGetDriveCaller(void) const
Definition: drive.cc:658
const ShapeOwner VelocityPoint
Definition: aeroelem.h:159
const Vec3 f3
Definition: aeroelem.h:354
virtual integer iGetNum(void) const
Definition: gauss.h:96
unsigned int GetLabel(void) const
Definition: withlab.cc:62
const Mat3x3 Ra3
Definition: aeroelem.h:357

Here is the call graph for this function:

Member Data Documentation

Vec3 AerodynamicBeam::F[LASTNODE]
protected

Definition at line 366 of file aeroelem.h.

Referenced by AssVec(), and Output().

const Vec3 AerodynamicBeam::f1
protected

Definition at line 352 of file aeroelem.h.

Referenced by AssJac(), AssVec(), and Restart().

const Vec3 AerodynamicBeam::f2
protected

Definition at line 353 of file aeroelem.h.

Referenced by AssJac(), AssVec(), and Restart().

const Vec3 AerodynamicBeam::f3
protected

Definition at line 354 of file aeroelem.h.

Referenced by AssJac(), AssVec(), and Restart().

Vec3 AerodynamicBeam::M[LASTNODE]
protected

Definition at line 367 of file aeroelem.h.

Referenced by AssVec(), and Output().

const Beam* AerodynamicBeam::pBeam
protected

Definition at line 349 of file aeroelem.h.

Referenced by AerodynamicBeam(), Output(), and Restart().

const StructNode* AerodynamicBeam::pNode[3]
protected

Definition at line 350 of file aeroelem.h.

Referenced by AerodynamicBeam(), AssJac(), AssRes(), AssVec(), and InitialAssRes().

const Mat3x3 AerodynamicBeam::Ra1
protected

Definition at line 355 of file aeroelem.h.

Referenced by AssJac(), AssVec(), and Restart().

const Vec3 AerodynamicBeam::Ra1_3
protected

Definition at line 358 of file aeroelem.h.

const Mat3x3 AerodynamicBeam::Ra2
protected

Definition at line 356 of file aeroelem.h.

Referenced by AssJac(), AssVec(), and Restart().

const Vec3 AerodynamicBeam::Ra2_3
protected

Definition at line 359 of file aeroelem.h.

const Mat3x3 AerodynamicBeam::Ra3
protected

Definition at line 357 of file aeroelem.h.

Referenced by AssJac(), AssVec(), and Restart().

const Vec3 AerodynamicBeam::Ra3_3
protected

Definition at line 360 of file aeroelem.h.


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