WSF
P6DofAeroCoreObject.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 2003-2015 The Boeing 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 P6DOFAEROCOREOBJECT_H
13#define P6DOFAEROCOREOBJECT_H
14
15#include "p6dof_export.h"
16
17#include <list>
18
19#include "UtCloneablePtr.hpp"
20#include "UtTable.hpp"
21#include "UtVec3dX.hpp"
22
23class UtInput;
24
25// The P6DofAeroCoreObject provides the main aerodynamics for an object.
26// It includes various aero parameters and stability derivatives. It may
27// include one or more aero modes, which provide configuration-dependent aero.
28// Modes also provide a means to remove any aero effects, such as while a subobject
29// is internally carried. A different mode can then be used when 'free'.
30
31class P6DOF_EXPORT P6DofAeroCoreObject
32{
33public:
36
38
40
41 // ProcessInput reads initialization data
42 bool ProcessInput(UtInput& aInput);
43
44 bool Initialize();
45
46 // SetModeName is used to change the aero mode
47 void SetModeName(const std::string& aName);
48 std::string GetModeName() const;
49
50 const std::list<UtCloneablePtr<P6DofAeroCoreObject>>* GetSubModesList() const;
51 P6DofAeroCoreObject* GetSubModeByName(const std::string& aName) const;
52
53 // The CalculateAeroFM function calculates the lift, drag, and
54 // side force magnitudes and the moment vector.
55 void CalculateCoreAeroFM(double aDynPress_lbsqft,
56 double aMach,
57 double aSpeed_fps,
58 double aAlpha_rad,
59 double aBeta_rad,
60 double aAlphaDot_rps,
61 double aBetaDot_rps,
62 const UtVec3dX& aAngularRates_rps,
63 UtVec3dX& aMoment_ftlbs,
64 double& aLift_lbs,
65 double& aDrag_lbs,
66 double& aSideForce_lbs,
67 double aRadiusSizeFactor = 1.0);
68
69 // The CalculateAeroFM function calculates the lift
70 double CalculateLiftAtSpecifiedAlpha_lbs(double aDynPress_lbsqft,
71 double aMach,
72 double aAlpha_deg,
73 double aRadiusSizeFactor = 1.0);
74
75 // This calculates the lift coefficient (CL), drag coefficient (Cd) and
76 // pitching moment coefficient (Cm) including reference area effects but not
77 // including dynamic pressure effects.
78 void CalculateAeroCoefficientVectors(double aMach,
79 double aAlpha_rad,
80 double& aCLArea,
81 double& aCdArea,
82 double& aCmArea,
83 double aRadiusSizeFactor = 1.0);
84
85 UtVec3dX GetAeroCenter_ft() const;
86
87 double GetWingChord_ft() const;
88 double GetWingSpan_ft() const;
89 double GetWingArea_sqft() const;
90 double GetRefArea_sqft() const;
91
92 // Lift
93 double CL_AlphaMach(double aMach, double aAlpha_rad); // TODO DEPRECATED ****************************** DEPRECATED
94 double CL_AlphaBetaMach(double aMach, double aAlpha_rad, double aBeta_rad);
95 double CLq_AlphaMach(double aMach, double aAlpha_rad);
96 double CL_AlphaDotAlphaMach(double aMach, double aAlpha_rad);
97
98 // Drag
99 double Cd_AlphaMach(double aMach, double aAlpha_rad); // TODO DEPRECATED ****************************** DEPRECATED
100 double Cd_BetaMach(double aMach, double aBeta_rad); // TODO DEPRECATED ****************************** DEPRECATED
101 double Cd_AlphaBetaMach(double aMach, double aAlpha_rad, double aBeta_rad);
102
103 // Side force
104 double CY_BetaMach(double aMach, double aBeta_rad); // TODO DEPRECATED ****************************** DEPRECATED
105 double CY_AlphaBetaMach(double aMach, double aAlpha_rad, double aBeta_rad);
106 double CYr_BetaMach(double aMach, double aBeta_rad);
107 double CY_BetaDotBetaMach(double aMach, double aBeta_rad);
108
109 // Pitching moments
110 double Cm_AlphaMach(double aMach, double aAlpha_rad); // TODO DEPRECATED ****************************** DEPRECATED
111 double Cm_AlphaBetaMach(double aMach, double aAlpha_rad, double aBeta_rad);
112 double Cmq_Mach(double aMach);
113 double Cmp_Mach(double aMach);
114 double CmAlphaDotMach(double aMach);
115
116 // Yawing moments
117 double Cn_BetaMach(double aMach, double aBeta_rad); // TODO DEPRECATED ****************************** DEPRECATED
118 double Cn_AlphaBetaMach(double aMach, double aAlpha_rad, double aBeta_rad);
119 double CnBetaDotMach(double aMach);
120 double Cnr_Mach(double aMach);
121 double Cnp_Mach(double aMach);
122
123 // Rolling moments
124 double Cl_BetaMach(double aMach, double aBeta_rad); // TODO DEPRECATED ****************************** DEPRECATED
125 double Cl_AlphaBetaMach(double aMach, double aAlpha_rad, double aBeta_rad);
126 double Clp_Mach(double aMach);
127 double Cl_AlphaDotMach(double aMach);
128 double Cl_BetaDotMach(double aMach);
129 double Clr_Mach(double aMach);
130 double Clq_Mach(double aMach);
131
132 // The CalculateAeroCmArea function is called to calculate the pitching moment (Cm)
133 // including reference area effects but not including dynamic pressure effects.
134 double CalculateAeroCmArea(double aMach, double aAlpha_rad);
135
136 // The CalculateAeroCLArea function is called to calculate the lift coefficient (CL)
137 // including reference area effects but not including dynamic pressure effects.
138 double CalculateAeroCLArea(double aMach, double aAlpha_rad);
139
140 // The CalculateAeroCdArea function is called to calculate the drag coefficient (Cd)
141 // including reference area effects but not including dynamic pressure effects.
142 double CalculateAeroCdArea(double aMach, double aAlpha_rad);
143
144 // This returns true if ref area is used instead of wing area, wing span, and wing chord
145 bool UsesRefArea() const { return mUseRefArea; }
146
147 // This is deprecated. This is currently use to allow "legacy" stability derivatives.
148 // However, it may be removed (along with legacy stability derivatives in later versions.
149 bool UseLegacyAero() const { return mUseLegacy; }
150
151protected:
152 static bool ProcessCommonInput(UtInput& aInput, const std::string& aCommand, P6DofAeroCoreObject* aObject);
153
155
156 std::string mModeName = "DEFAULT";
157
158 std::list<UtCloneablePtr<P6DofAeroCoreObject>> mSubModesList;
159
160 double mWingChord_ft = 0.0;
161 double mWingSpan_ft = 0.0;
162 double mWingArea_sqft = 0.0;
163 double mRefArea_sqft = 0.0;
164 double mRefLength_ft = 0.0;
165
166 // When mUseRefArea is true, mRefArea_sqft is used instead of mWingArea_sqft, mWingSpan_ft, and mWingChord_ft
167 bool mUseRefArea = false;
168
170
171 // This "legacy" flag allows the use of older aero stability derivatives, which are deprecated and should no longer be used
172 bool mUseLegacy = false;
173 bool mUseLegacySet = false;
174
175 // This "reduced frequency" flag allows the use of reduced frequency rather than angular rates to compute aerodynamic derivatives
178
179 // Lift
180 UtCloneablePtr<UtTable::Table> mCL_AlphaMachTablePtr{nullptr};
181 UtCloneablePtr<UtTable::Table> mCL_AlphaBetaMachTablePtr{nullptr};
182 UtCloneablePtr<UtTable::Table> mCLq_AlphaMachTablePtr{nullptr};
183 UtCloneablePtr<UtTable::Table> mCL_AlphaDotAlphaMachTablePtr{nullptr};
184
185 // Drag
186 UtCloneablePtr<UtTable::Table> mCd_AlphaMachTablePtr{nullptr};
187 UtCloneablePtr<UtTable::Table> mCd_BetaMachTablePtr{nullptr};
188 UtCloneablePtr<UtTable::Table> mCd_AlphaBetaMachTablePtr{nullptr};
189
190 // Side force
191 UtCloneablePtr<UtTable::Table> mCY_BetaMachTablePtr{nullptr};
192 UtCloneablePtr<UtTable::Table> mCY_AlphaBetaMachTablePtr{nullptr};
193 UtCloneablePtr<UtTable::Table> mCYr_BetaMachTablePtr{nullptr};
194 UtCloneablePtr<UtTable::Table> mCY_BetaDotBetaMachTablePtr{nullptr};
195
196 // Pitching moments
197 UtCloneablePtr<UtTable::Table> mCm_AlphaMachTablePtr{nullptr};
198 UtCloneablePtr<UtTable::Table> mCm_AlphaBetaMachTablePtr{nullptr};
199 UtCloneablePtr<UtTable::Curve> mCmq_MachCurvePtr{nullptr};
200 UtCloneablePtr<UtTable::Curve> mCmp_MachCurvePtr{nullptr};
201 UtCloneablePtr<UtTable::Curve> mCm_AlphaDotMachCurvePtr{nullptr};
202
203 // Yawing moments
204 UtCloneablePtr<UtTable::Table> mCn_BetaMachTablePtr{nullptr};
205 UtCloneablePtr<UtTable::Table> mCn_AlphaBetaMachTablePtr{nullptr};
206 UtCloneablePtr<UtTable::Curve> mCn_BetaDotMachCurvePtr{nullptr};
207 UtCloneablePtr<UtTable::Curve> mCnr_MachCurvePtr{nullptr};
208 UtCloneablePtr<UtTable::Curve> mCnp_MachCurvePtr{nullptr};
209
210 // Rolling moments
211 UtCloneablePtr<UtTable::Table> mCl_BetaMachTablePtr{nullptr};
212 UtCloneablePtr<UtTable::Table> mCl_AlphaBetaMachTablePtr{nullptr};
213 UtCloneablePtr<UtTable::Curve> mClp_MachCurvePtr{nullptr};
214 UtCloneablePtr<UtTable::Curve> mCl_AlphaDotMachCurvePtr{nullptr};
215 UtCloneablePtr<UtTable::Curve> mCl_BetaDotMachCurvePtr{nullptr};
216 UtCloneablePtr<UtTable::Curve> mClr_MachCurvePtr{nullptr};
217 UtCloneablePtr<UtTable::Curve> mClq_MachCurvePtr{nullptr};
218};
219
220#endif
Definition P6DofAeroCoreObject.hpp:32
UtCloneablePtr< UtTable::Curve > mCn_BetaDotMachCurvePtr
Definition P6DofAeroCoreObject.hpp:206
bool mUseReducedFrequencySet
Definition P6DofAeroCoreObject.hpp:177
double Cd_AlphaMach(double aMach, double aAlpha_rad)
Definition P6DofAeroCoreObject.cpp:682
double Cl_AlphaDotMach(double aMach)
Definition P6DofAeroCoreObject.cpp:926
double mWingSpan_ft
Definition P6DofAeroCoreObject.hpp:161
UtCloneablePtr< UtTable::Curve > mCl_AlphaDotMachCurvePtr
Definition P6DofAeroCoreObject.hpp:214
double Cn_BetaMach(double aMach, double aBeta_rad)
Definition P6DofAeroCoreObject.cpp:832
double mWingArea_sqft
Definition P6DofAeroCoreObject.hpp:162
std::string GetModeName() const
Definition P6DofAeroCoreObject.cpp:599
UtCloneablePtr< UtTable::Table > mCY_BetaMachTablePtr
Definition P6DofAeroCoreObject.hpp:191
UtCloneablePtr< UtTable::Table > mCm_AlphaMachTablePtr
Definition P6DofAeroCoreObject.hpp:197
double Cmp_Mach(double aMach)
Definition P6DofAeroCoreObject.cpp:812
UtCloneablePtr< UtTable::Table > mCl_BetaMachTablePtr
Definition P6DofAeroCoreObject.hpp:211
UtCloneablePtr< UtTable::Curve > mCmp_MachCurvePtr
Definition P6DofAeroCoreObject.hpp:200
std::list< UtCloneablePtr< P6DofAeroCoreObject > > mSubModesList
Definition P6DofAeroCoreObject.hpp:158
double CYr_BetaMach(double aMach, double aBeta_rad)
Definition P6DofAeroCoreObject.cpp:749
UtCloneablePtr< UtTable::Curve > mClq_MachCurvePtr
Definition P6DofAeroCoreObject.hpp:217
const std::list< UtCloneablePtr< P6DofAeroCoreObject > > * GetSubModesList() const
Definition P6DofAeroCoreObject.cpp:609
UtCloneablePtr< UtTable::Table > mCn_AlphaBetaMachTablePtr
Definition P6DofAeroCoreObject.hpp:205
double Cm_AlphaMach(double aMach, double aAlpha_rad)
Definition P6DofAeroCoreObject.cpp:775
double CnBetaDotMach(double aMach)
Definition P6DofAeroCoreObject.cpp:859
bool Initialize()
Definition P6DofAeroCoreObject.cpp:580
double Clr_Mach(double aMach)
Definition P6DofAeroCoreObject.cpp:946
UtVec3dX mAeroCenter_ft
Definition P6DofAeroCoreObject.hpp:169
UtCloneablePtr< UtTable::Curve > mClp_MachCurvePtr
Definition P6DofAeroCoreObject.hpp:213
double Cmq_Mach(double aMach)
Definition P6DofAeroCoreObject.cpp:802
UtCloneablePtr< UtTable::Curve > mCnr_MachCurvePtr
Definition P6DofAeroCoreObject.hpp:207
UtCloneablePtr< UtTable::Curve > mCm_AlphaDotMachCurvePtr
Definition P6DofAeroCoreObject.hpp:201
UtCloneablePtr< UtTable::Table > mCm_AlphaBetaMachTablePtr
Definition P6DofAeroCoreObject.hpp:198
double GetWingChord_ft() const
Definition P6DofAeroCoreObject.cpp:1052
~P6DofAeroCoreObject()=default
double Cl_AlphaBetaMach(double aMach, double aAlpha_rad, double aBeta_rad)
Definition P6DofAeroCoreObject.cpp:902
UtCloneablePtr< UtTable::Table > mCY_AlphaBetaMachTablePtr
Definition P6DofAeroCoreObject.hpp:192
double CalculateAeroCdArea(double aMach, double aAlpha_rad)
Definition P6DofAeroCoreObject.cpp:1020
UtCloneablePtr< UtTable::Table > mCd_BetaMachTablePtr
Definition P6DofAeroCoreObject.hpp:187
std::string mModeName
Definition P6DofAeroCoreObject.hpp:156
double Cnp_Mach(double aMach)
Definition P6DofAeroCoreObject.cpp:879
bool ProcessInput(UtInput &aInput)
Definition P6DofAeroCoreObject.cpp:33
double mRefLength_ft
Definition P6DofAeroCoreObject.hpp:164
UtCloneablePtr< UtTable::Table > mCd_AlphaBetaMachTablePtr
Definition P6DofAeroCoreObject.hpp:188
UtCloneablePtr< UtTable::Table > mCd_AlphaMachTablePtr
Definition P6DofAeroCoreObject.hpp:186
void SetModeName(const std::string &aName)
Definition P6DofAeroCoreObject.cpp:604
UtCloneablePtr< UtTable::Curve > mCnp_MachCurvePtr
Definition P6DofAeroCoreObject.hpp:208
P6DofAeroCoreObject()
Definition P6DofAeroCoreObject.cpp:23
bool mUseRefArea
Definition P6DofAeroCoreObject.hpp:167
P6DofAeroCoreObject * Clone() const
Definition P6DofAeroCoreObject.cpp:28
bool mUseReducedFrequency
Definition P6DofAeroCoreObject.hpp:176
P6DofAeroCoreObject & operator=(const P6DofAeroCoreObject &other)=delete
double GetWingSpan_ft() const
Definition P6DofAeroCoreObject.cpp:1057
UtCloneablePtr< UtTable::Table > mCn_BetaMachTablePtr
Definition P6DofAeroCoreObject.hpp:204
bool mUseLegacySet
Definition P6DofAeroCoreObject.hpp:173
UtCloneablePtr< UtTable::Curve > mClr_MachCurvePtr
Definition P6DofAeroCoreObject.hpp:216
bool UsesRefArea() const
Definition P6DofAeroCoreObject.hpp:145
UtCloneablePtr< UtTable::Curve > mCmq_MachCurvePtr
Definition P6DofAeroCoreObject.hpp:199
double CalculateAeroCmArea(double aMach, double aAlpha_rad)
Definition P6DofAeroCoreObject.cpp:966
P6DofAeroCoreObject(const P6DofAeroCoreObject &aSrc)=default
UtCloneablePtr< UtTable::Curve > mCl_BetaDotMachCurvePtr
Definition P6DofAeroCoreObject.hpp:215
double CalculateAeroCLArea(double aMach, double aAlpha_rad)
Definition P6DofAeroCoreObject.cpp:993
double Cd_BetaMach(double aMach, double aBeta_rad)
Definition P6DofAeroCoreObject.cpp:695
double mWingChord_ft
Definition P6DofAeroCoreObject.hpp:160
UtCloneablePtr< UtTable::Table > mCLq_AlphaMachTablePtr
Definition P6DofAeroCoreObject.hpp:182
double GetRefArea_sqft() const
Definition P6DofAeroCoreObject.cpp:1067
UtVec3dX GetAeroCenter_ft() const
Definition P6DofAeroCoreObject.cpp:1047
double Clp_Mach(double aMach)
Definition P6DofAeroCoreObject.cpp:916
double Cnr_Mach(double aMach)
Definition P6DofAeroCoreObject.cpp:869
double Cd_AlphaBetaMach(double aMach, double aAlpha_rad, double aBeta_rad)
Definition P6DofAeroCoreObject.cpp:708
bool mUseLegacy
Definition P6DofAeroCoreObject.hpp:172
P6DofAeroCoreObject * GetSubModeByName(const std::string &aName) const
Definition P6DofAeroCoreObject.cpp:614
double CalculateLiftAtSpecifiedAlpha_lbs(double aDynPress_lbsqft, double aMach, double aAlpha_deg, double aRadiusSizeFactor=1.0)
Definition P6DofAeroCoreObject.cpp:1395
double CY_BetaMach(double aMach, double aBeta_rad)
Definition P6DofAeroCoreObject.cpp:722
double GetWingArea_sqft() const
Definition P6DofAeroCoreObject.cpp:1062
void CalculateAeroCoefficientVectors(double aMach, double aAlpha_rad, double &aCLArea, double &aCdArea, double &aCmArea, double aRadiusSizeFactor=1.0)
Definition P6DofAeroCoreObject.cpp:1353
double CL_AlphaMach(double aMach, double aAlpha_rad)
Definition P6DofAeroCoreObject.cpp:628
double Cl_BetaMach(double aMach, double aBeta_rad)
Definition P6DofAeroCoreObject.cpp:889
double CL_AlphaDotAlphaMach(double aMach, double aAlpha_rad)
Definition P6DofAeroCoreObject.cpp:669
UtCloneablePtr< UtTable::Table > mCL_AlphaBetaMachTablePtr
Definition P6DofAeroCoreObject.hpp:181
double Cm_AlphaBetaMach(double aMach, double aAlpha_rad, double aBeta_rad)
Definition P6DofAeroCoreObject.cpp:788
double CL_AlphaBetaMach(double aMach, double aAlpha_rad, double aBeta_rad)
Definition P6DofAeroCoreObject.cpp:641
double Cl_BetaDotMach(double aMach)
Definition P6DofAeroCoreObject.cpp:936
UtCloneablePtr< UtTable::Table > mCL_AlphaMachTablePtr
Definition P6DofAeroCoreObject.hpp:180
bool UseLegacyAero() const
Definition P6DofAeroCoreObject.hpp:149
double CY_AlphaBetaMach(double aMach, double aAlpha_rad, double aBeta_rad)
Definition P6DofAeroCoreObject.cpp:735
double Clq_Mach(double aMach)
Definition P6DofAeroCoreObject.cpp:956
double Cn_AlphaBetaMach(double aMach, double aAlpha_rad, double aBeta_rad)
Definition P6DofAeroCoreObject.cpp:845
UtCloneablePtr< UtTable::Table > mCYr_BetaMachTablePtr
Definition P6DofAeroCoreObject.hpp:193
double CY_BetaDotBetaMach(double aMach, double aBeta_rad)
Definition P6DofAeroCoreObject.cpp:762
UtCloneablePtr< UtTable::Table > mCL_AlphaDotAlphaMachTablePtr
Definition P6DofAeroCoreObject.hpp:183
double CLq_AlphaMach(double aMach, double aAlpha_rad)
Definition P6DofAeroCoreObject.cpp:655
double CmAlphaDotMach(double aMach)
Definition P6DofAeroCoreObject.cpp:822
UtCloneablePtr< UtTable::Table > mCY_BetaDotBetaMachTablePtr
Definition P6DofAeroCoreObject.hpp:194
UtCloneablePtr< UtTable::Table > mCl_AlphaBetaMachTablePtr
Definition P6DofAeroCoreObject.hpp:212
void CalculateCoreAeroFM(double aDynPress_lbsqft, double aMach, double aSpeed_fps, double aAlpha_rad, double aBeta_rad, double aAlphaDot_rps, double aBetaDot_rps, const UtVec3dX &aAngularRates_rps, UtVec3dX &aMoment_ftlbs, double &aLift_lbs, double &aDrag_lbs, double &aSideForce_lbs, double aRadiusSizeFactor=1.0)
Definition P6DofAeroCoreObject.cpp:1072
double mRefArea_sqft
Definition P6DofAeroCoreObject.hpp:163
Copyrights Multiple, All Rights Reserved