WSF
WsfPointMassSixDOF_AeroCoreObject.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2020 Infoscitex, a DCS Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11
12#ifndef WSFPOINTMASSSIXDOFAEROCOREOBJECT_HPP
13#define WSFPOINTMASSSIXDOFAEROCOREOBJECT_HPP
14
16
17namespace wsf
18{
19namespace six_dof
20{
21// The PointMassAeroCoreObject provides the main aerodynamics for an object.
22// It includes various aero parameters and stability derivatives. It may
23// include one or more aero modes, which provide configuration-dependent aero.
24// Modes also provide a means to remove any aero effects, such as while a subobject
25// is internally carried. A different mode can then be used when 'free'.
26
27class WSF_SIX_DOF_EXPORT PointMassAeroCoreObject : public AeroCoreObject
28{
29public:
32
34
36
37 // ProcessInput reads initialization data
38 bool ProcessInput(UtInput& aInput);
39
40 const std::list<UtCloneablePtr<PointMassAeroCoreObject>>* GetSubModesList() const;
41 PointMassAeroCoreObject* GetSubModeByName(const std::string& aName) const;
42
43 // The CalculateAeroFM function calculates the lift, drag, and
44 // side force magnitudes and the moment vector.
45 void CalculateCoreAeroFM(double aDynPress_lbsqft,
46 double aMach,
47 double aAlpha_rad,
48 double aBeta_rad,
49 double aSpeedbrakeLever,
50 double aFlapsLever,
51 double aSpoilersLever,
52 double& aLift_lbs,
53 double& aDrag_lbs,
54 double& aSideForce_lbs,
55 double& aMaximumRollAcceleration_rps2,
56 double& aMaximumPitchAcceleration_rps2,
57 double& aMaximumYawAcceleration_rps2,
58 double& aAlphaStabilizingFrequency_rps,
59 double& aBetaStabilizingFrequency_rps,
60 double& aRollStabilizingFrequency_rps,
61 double aRadiusSizeFactor = 1.0);
62
63 // The CalculateAeroFM function calculates the lift
64 double CalculateLiftAtSpecifiedAlpha_lbs(double aDynPress_lbsqft,
65 double aMach,
66 double aAlpha_deg,
67 double aRadiusSizeFactor = 1.0);
68
69 // This calculates the lift coefficient (CL), drag coefficient (Cd) and
70 // pitching moment coefficient (Cm) including reference area effects but not
71 // including dynamic pressure effects.
72 void CalculateAeroCoefficientVectors(double aMach,
73 double aAlpha_rad,
74 double& aCLArea,
75 double& aCdArea,
76 double& aCmArea,
77 double aRadiusSizeFactor = 1.0);
78
79 // Non-trim effector deltas
80 double SpeedbrakeDeltaCd_Mach(double aMach);
81 double FlapsDeltaCd_Mach(double aMach);
82 double FlapsDeltaCL_Mach(double aMach);
83 double SpoilersDeltaCd_Mach(double aMach);
84 double SpoilersDeltaCL_Mach(double aMach);
85
86 // Roll dynamics
87 double MaximumRollAcceleration_Mach(double aMach);
88 double RollStabilizingFrequency_Mach(double aMach);
89
90 // Pitch dynamics
91 double MaximumPitchAcceleration_Mach(double aMach);
92 double AlphaStabilizingFrequency_Mach(double aMach);
93
94 // Yaw dynamics
95 double MaximumYawAcceleration_Mach(double aMach);
96 double BetaStabilizingFrequency_Mach(double aMach);
97
98protected:
99 static bool ProcessCommonInput(UtInput& aInput, const std::string& aCommand, PointMassAeroCoreObject* aObject);
100
102
103 std::list<UtCloneablePtr<PointMassAeroCoreObject>> mSubModesList;
104
105 // High-drag / high-lift effectors for aircraft
106 UtCloneablePtr<UtTable::Table> mFlapsDeltaCL_MachTablePtr{nullptr};
107 UtCloneablePtr<UtTable::Table> mFlapsDeltaCd_MachTablePtr{nullptr};
108 UtCloneablePtr<UtTable::Table> mSpoilersDeltaCL_MachTablePtr{nullptr};
109 UtCloneablePtr<UtTable::Table> mSpoilersDeltaCd_MachTablePtr{nullptr};
110 UtCloneablePtr<UtTable::Table> mSpeedbrakeDeltaCd_MachTablePtr{nullptr};
111
112 // Rotation control dynamics (deg/s/s)
113 UtCloneablePtr<UtTable::Table> mMaximumRollAcceleration_MachTablePtr{nullptr};
114 UtCloneablePtr<UtTable::Table> mMaximumPitchAcceleration_MachTablePtr{nullptr};
115 UtCloneablePtr<UtTable::Table> mMaximumYawAcceleration_MachTablePtr{nullptr};
116
117 // Rotation plant dynamics (Hz)
118 UtCloneablePtr<UtTable::Table> mAlphaStabilizingFrequency_MachTablePtr{nullptr};
119 UtCloneablePtr<UtTable::Table> mBetaStabilizingFrequency_MachTablePtr{nullptr};
120 UtCloneablePtr<UtTable::Table> mRollStabilizingFrequency_MachTablePtr{nullptr};
121};
122} // namespace six_dof
123} // namespace wsf
124
125#endif
double BetaStabilizingFrequency_Mach(double aMach)
Definition WsfPointMassSixDOF_AeroCoreObject.cpp:344
double MaximumRollAcceleration_Mach(double aMach)
Definition WsfPointMassSixDOF_AeroCoreObject.cpp:296
void CalculateAeroCoefficientVectors(double aMach, double aAlpha_rad, double &aCLArea, double &aCdArea, double &aCmArea, double aRadiusSizeFactor=1.0)
Definition WsfPointMassSixDOF_AeroCoreObject.cpp:499
UtCloneablePtr< UtTable::Table > mMaximumYawAcceleration_MachTablePtr
Definition WsfPointMassSixDOF_AeroCoreObject.hpp:115
UtCloneablePtr< UtTable::Table > mRollStabilizingFrequency_MachTablePtr
Definition WsfPointMassSixDOF_AeroCoreObject.hpp:120
double AlphaStabilizingFrequency_Mach(double aMach)
Definition WsfPointMassSixDOF_AeroCoreObject.cpp:332
double MaximumPitchAcceleration_Mach(double aMach)
Definition WsfPointMassSixDOF_AeroCoreObject.cpp:308
const std::list< UtCloneablePtr< PointMassAeroCoreObject > > * GetSubModesList() const
Definition WsfPointMassSixDOF_AeroCoreObject.cpp:277
double SpoilersDeltaCL_Mach(double aMach)
Definition WsfPointMassSixDOF_AeroCoreObject.cpp:392
PointMassAeroCoreObject & operator=(const PointMassAeroCoreObject &other)=delete
UtCloneablePtr< UtTable::Table > mSpoilersDeltaCL_MachTablePtr
Definition WsfPointMassSixDOF_AeroCoreObject.hpp:108
UtCloneablePtr< UtTable::Table > mAlphaStabilizingFrequency_MachTablePtr
Definition WsfPointMassSixDOF_AeroCoreObject.hpp:118
void CalculateCoreAeroFM(double aDynPress_lbsqft, double aMach, double aAlpha_rad, double aBeta_rad, double aSpeedbrakeLever, double aFlapsLever, double aSpoilersLever, double &aLift_lbs, double &aDrag_lbs, double &aSideForce_lbs, double &aMaximumRollAcceleration_rps2, double &aMaximumPitchAcceleration_rps2, double &aMaximumYawAcceleration_rps2, double &aAlphaStabilizingFrequency_rps, double &aBetaStabilizingFrequency_rps, double &aRollStabilizingFrequency_rps, double aRadiusSizeFactor=1.0)
Definition WsfPointMassSixDOF_AeroCoreObject.cpp:428
UtCloneablePtr< UtTable::Table > mMaximumRollAcceleration_MachTablePtr
Definition WsfPointMassSixDOF_AeroCoreObject.hpp:113
double SpeedbrakeDeltaCd_Mach(double aMach)
Definition WsfPointMassSixDOF_AeroCoreObject.cpp:368
PointMassAeroCoreObject * Clone() const
Definition WsfPointMassSixDOF_AeroCoreObject.cpp:22
double FlapsDeltaCd_Mach(double aMach)
Definition WsfPointMassSixDOF_AeroCoreObject.cpp:404
UtCloneablePtr< UtTable::Table > mBetaStabilizingFrequency_MachTablePtr
Definition WsfPointMassSixDOF_AeroCoreObject.hpp:119
UtCloneablePtr< UtTable::Table > mFlapsDeltaCL_MachTablePtr
Definition WsfPointMassSixDOF_AeroCoreObject.hpp:106
UtCloneablePtr< UtTable::Table > mSpoilersDeltaCd_MachTablePtr
Definition WsfPointMassSixDOF_AeroCoreObject.hpp:109
double SpoilersDeltaCd_Mach(double aMach)
Definition WsfPointMassSixDOF_AeroCoreObject.cpp:380
static bool ProcessCommonInput(UtInput &aInput, const std::string &aCommand, PointMassAeroCoreObject *aObject)
Definition WsfPointMassSixDOF_AeroCoreObject.cpp:74
UtCloneablePtr< UtTable::Table > mSpeedbrakeDeltaCd_MachTablePtr
Definition WsfPointMassSixDOF_AeroCoreObject.hpp:110
double FlapsDeltaCL_Mach(double aMach)
Definition WsfPointMassSixDOF_AeroCoreObject.cpp:416
UtCloneablePtr< UtTable::Table > mFlapsDeltaCd_MachTablePtr
Definition WsfPointMassSixDOF_AeroCoreObject.hpp:107
UtCloneablePtr< UtTable::Table > mMaximumPitchAcceleration_MachTablePtr
Definition WsfPointMassSixDOF_AeroCoreObject.hpp:114
PointMassAeroCoreObject(const PointMassAeroCoreObject &aSrc)=default
std::list< UtCloneablePtr< PointMassAeroCoreObject > > mSubModesList
Definition WsfPointMassSixDOF_AeroCoreObject.hpp:103
PointMassAeroCoreObject * GetSubModeByName(const std::string &aName) const
Definition WsfPointMassSixDOF_AeroCoreObject.cpp:282
double CalculateLiftAtSpecifiedAlpha_lbs(double aDynPress_lbsqft, double aMach, double aAlpha_deg, double aRadiusSizeFactor=1.0)
Definition WsfPointMassSixDOF_AeroCoreObject.cpp:517
double RollStabilizingFrequency_Mach(double aMach)
Definition WsfPointMassSixDOF_AeroCoreObject.cpp:356
bool ProcessInput(UtInput &aInput)
Definition WsfPointMassSixDOF_AeroCoreObject.cpp:27
double MaximumYawAcceleration_Mach(double aMach)
Definition WsfPointMassSixDOF_AeroCoreObject.cpp:320
Definition WsfSA_Processor.hpp:35
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
Copyrights Multiple, All Rights Reserved