WSF
BrawlerMover.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI//REL TO USA ONLY
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// Updated by Infoscitex, a DCS Company
13// ****************************************************************************
14
15#ifndef BRAWLERMOVER_HPP
16#define BRAWLERMOVER_HPP
17
18#include "brawler_export.h"
19
20#include <algorithm>
21#include <bitset>
22#include <string>
23#include <vector>
24
25#include "BrawlerPlatform.hpp"
26#include "UtEntity.hpp"
27#include "UtFortMat3.hpp"
28#include "UtLog.hpp"
29#include "UtVec3.hpp"
30
31// NOTE - these values are never initialized, they are for reference only
32//#include "acphys.h" //somebody else's conversion of acphys.fi
33//#include "par.h" //somebody else's conversion of par.fi
34//#include "pcon.h" //my initial attempt at converting pcon.fi (following style in par.h)
35//#include "typdat.h" //somebody else's conversion of typdat.fi
36//#include "extst.h" //somebody else's conversion of extst.fi
37//#include "acstat.h" //somebody else's conversion of acstat.fi
38//#include "svwork.h" //somebody else's conversion of svwork.fi
39
40/******************************************************************************
41 * OOP representation of a Brawler aircraft mover.
42 * Specifically to replicate this call tree:
43 * NOTE: methods that get/set/update common blocks are left out
44 * all values stored in the class member variables now
45 * perfrm()
46 * flyac()
47 * flyefficient() //for straight flight
48 * flacti()
49 * flyac_short() //for short time steps
50 * flact0()
51 * acarea() //computes aircraft reference area
52 * getdt() //timestep for integration of equations of motion
53 * rates() //computes new yaw, pitch, & roll rates
54 * ratmx1() //aero algorithm type 1
55 * gwreq() //converts commanded angular rates
56 * aoa() //computes current alpha
57 * flact1()
58 * xlift() //computes current lift
59 * udrbe() //updates orientation
60 * drag2()
61 * seteng() //computes new engine settings
62 * desaxf() //convert commanded axial forces
63 * deseng() //translates desired forces into engine settings
64 * stenst() //computes actual engine settings from desired
65 * effthr() //computes effective thrust & drag
66 * thrdec() //translate throttle settings into engine settings
67 * fthrst() //thrust
68 * fntthr() //net thrust
69 * udxv() //updates aircraft position/velocity
70 * fflo() //computes current rate of fuel flow
71 * aproj3() //projects a maneuver forward in time for alternative evaluation
72 * allim()
73 * laccel()
74 * prjacc()
75 * spdtoa()
76 * thstoa()
77 * manwnd()
78 ******************************************************************************/
79class BRAWLER_EXPORT BrawlerMover
80{
81protected:
82 BrawlerMover(const BrawlerMover& aSrc);
83
84public:
87 virtual ~BrawlerMover();
88 virtual bool LoadAeroConfig(const std::string& absolutePathFile);
89 virtual bool Initialize(double aCreationTime, UtEntity& aStartingState, BrawlerPlatform* aPlatformPtr);
90 virtual bool UpdateState(double toSimTime); // calls perfrm() and flyac()
91 virtual UtEntity State(double aSimTime);
92
93 virtual void DeleteMover() = 0;
94
95 // Update the amount of fuel used un a timestep based on the throttle
96 // and the flow at the beginning of the timestep
97 virtual void UpdateFuel(double aTimeStep, double aInitialFlow, double aThrottle, double& aFuelQuantity, double& aVehicleMass);
98
99 // virtual void UpdateLocal(double toSimTime, UtVc3d& AngularRates, UtVec3d& AxialAccel, double Speed) {
100 // UpdateOrientation(toSimTime, AngularRates);
101 // UpdateTranslation(toSimTime, AxialAccel, Speed);
102 // }
103 // virtual void UpdateOrientation(double deltaTime, UtVec3d& AngularRates); //1st part of flact1() BEFORE
104 // it calls seteng() virtual void UpdateTranslation(double deltaTime, UtVec3d& AxialAccel, double Speed); //2nd part
105 // of flact1() AFTER it calls seteng()
106
109 // C++ OOP versions of brawler values:
111
112 // direct queries of constants, limits, or state
113 // svwork
114 virtual double PlatformTime() { return tsv; } // seconds?
115 virtual UtVec3d& Position() { return pos; } // pos[3] nautical miles NED ???
116 virtual double Altitude() { return -Position()[2]; }
117 virtual UtVec3d& Velocity() { return vel; } // vel[3] units???
118 virtual UtVec3d& Acceleration() { return acc; } // acc[3] units???
119 virtual UtFortMat3d& EarthToBodyRotationMatrix() { return rbea; } // units?
120 // virtual double* EarthToWindRotationMatrix() { return &rwea[0][0]; } //units?
121 virtual UtFortMat3d& EarthToWindRotationMatrix() { return rwea; } // units?
122 // virtual double* AngularRates() { return wnow; } //wnow[3] units???
123 virtual UtVec3d& AngularRates() { return wnow; }
124 virtual double Alpha() { return alfa; } // radians
125 virtual double AlphaCL0() { return alpha0; } // radians
126 virtual double AngleOfAttackRate() { return alfdot; }
127 virtual double AircraftMass() { return amass; } // total mass, including fuel in slugs
128 virtual double EmptyMass() { return barems; } // slugs
129 virtual double Speed() { return spd; }
130 virtual double TurnRadius() { return turn; } // units???
131 // double wsqr; //magnitude of axis to rotate about - squared
132 // double rate; //magnitude of axis to rotate about
133 virtual double Mach() { return fm; } // mach number
134 virtual double DynamicPressure() { return dyp; }
135 virtual double LagFilterFreqPitchRate() { return omegp; } // 1st order lag filter frequency for pitch rates
136 virtual double LagFilterFreqRollRate() { return omegq; } // 1st order lag filter frequency for roll rates
137 virtual double RollRateMax() { return pmx; } // max roll RATE limit
138 virtual double PitchRatePositiveMax() { return qmxpos; } // max positive pitch RATE limit
139 // double rlthrs; //some large roll threshold for limit checking (180*rad ???)
140 virtual double RollMax() { return rolmx; } // max allowed roll limit
141 virtual double ReferenceArea() { return rarea; } // aircraft reference area (sq feet)
142 virtual double Gas() { return gas; } // fuel mass, slugs
143
144 // queries for calculated values:
145 virtual double MaxAllowedThrottle() { return throtm; } // value 1-3 ?
146 virtual double CoefficientOfLift(double mach, double alpha);
147 virtual double CoefficientOfDrag(double mach, double alpha);
148 virtual double Drag2() { return drag2(alpha0); } // difference between this & Drag()?
149 virtual double Drag(double alpha, double speed, double altitude); // deg, ft/sec, ft
150 virtual double Lift() { return xlift(Alpha()); }
151 virtual double Lift(double alpha, double speed, double altitude); // deg, ft/sec, ft
152 virtual double LiftFromAlpha(double alpha) { return xlift(alpha); }
153 virtual double AngleOfAttackFromDrag(double drag)
154 {
155 return get_aoa(drag);
156 }; // reverse lookup from CD table using given drag and current mach
157 virtual double AngleOfAttackFromLift(double lift) { return aoa(lift, false); };
158 // virtual double AngleOfAttackFromLift(double lift) { return faoa(lift, false); };
159 virtual double CalibratedAirSpeed() { return cas(Speed()); }
161 virtual double SpecificEnergyRate() { return erate; }
162 // RETURNS THRUST IN AIRCRAFT BODY AXES IN LBS (DUE TO GAS GENERATOR AND AFTERBURNER) BASED ON THROTTLE OR ENGINE
163 // STATE DOES NOT CONSIDER THRUST REVERSAL OR DRAG DEVICES.
164 virtual double Thrust(double throttle) // throttle setting in [1,3]
165 {
166 double GasGeneratorThrust, AfterBurnerThrust, InletDrag;
167 thrust(throttle, GasGeneratorThrust, AfterBurnerThrust, InletDrag);
168 return (GasGeneratorThrust + AfterBurnerThrust);
169 }
170 virtual double Thrust(double throttle, // throttle setting only in [1,3] (no thrust reverser or engine failure
171 // supported in this query)
172 double speed, // ft/sec
173 double altitude); // ft
174 virtual double Throttle(); // current throttle setting (tricky if commanded maneuver doesn't specify)
175
176 // RETURNS Longitudinal force due to thrust, thrust reverser, and drag devices.
177 // DOES NOT INLCUDE PROPULSION DRAG.
178 //(Effective gross thrust acting along aircraft body x-axis)
179 virtual double AxialForceX()
180 {
181 double faxial, xl, flow, efpd;
182 flacti(faxial, xl, flow, efpd); // go deeper? call effthr() instead?
183 return faxial;
184 }
185 virtual double InletDrag(double throttle) // going to be zero, not using gross thrust calculations (usually same as net thrust)
186 {
187 double GasGeneratorThrust, AfterBurnerThrust, InletDrag;
188 thrust(throttle, GasGeneratorThrust, AfterBurnerThrust, InletDrag);
189 return InletDrag;
190 }
191 virtual UtVec3d VelocityWindAxes(void);
192 virtual UtVec3d GravityWindAxes(void);
193 virtual UtVec3d AccelerationWindAxes(void);
195
196
199 // maneuver command processing
209
210 // replicate pieces of the flyac() logic to compute command rates/forces
211 // bool GetCommandedRates(double aSimTime, UtVec3d& AngularRates, UtVec3d& AxialAccel, double& Speed); //calls
212 // gwreq() and desaxf()
213
214 void CommandRates(UtVec3d& aAngularRates, UtVec3d& aLongitudinalAccel);
215 void CommandHeadingSpeedAltitude(double aHeading, // degrees
216 double aSpeed, // feet/sec
217 double aAltitude, // feet
218 double aMaxGees, // Gs or ft/sec^2 ???
219 double aMaxClimb); // feet/sec
220 void CommandPlaneManeuver(const UtVec3d& aPlane, double aGees, double aSpeed, bool aThrottleFlag = false);
221 void CommandVector(UtVec3d& aVelocityVector,
222 double aMaxGees,
223 double aSpeed, // feet/sec
224 bool aThrottleFlag = false);
225 void CommandLevelTurn(double aHeading, double aMach, double aGees);
226 void CommandSlice(double aHeading, double aAltitude, double aRunMach);
227
228 // C++ equivalents of svwork.fi COMMAND values (e.g. wdes, spdreq, greq, etc...)
229 // (the equivalents of svwork.fi STATE values are further below)
230 // //SVWORK: //ALTHLD:
231 UtVec3d mAngularRates; // wdes //a0
232 UtVec3d mAxialAccel; // accreq //al0
233 UtVec3d mPlane; // areqt //a0
234 UtVec3d mVelocityVector; // direq //dir0
235 double mHeading; // hedreq //dir0
236 double mAltitude; // altreq //hgt0
237 double mSpeed; // spdreq //spd0 (only use if can mThrottleFlag == false), ft/s
238 double mThrottle; // tsetmn //al0 / spd0 (only use if can mThrottleFlag == true )
239 double mMaxGees; // greq / areqtm //gmx
240 double mMaxClimb; // rocreq //clmbmx
241 CommandType mCommandType; // jacton //iactn
242 bool mThrottleFlag; // spdrmd //accmod / spdmod
243
245
247 //#include "svwork.fi"
249 // desired high level aero commands:
250 // int jacton; //action type (aero command type) //use: mCommandType
251 // command type: jacton == 1
252 // int spdrmd; //speed/throttle flag
253 // UtVec3d wdes; //desired angular rates [roll,pitch,yaw] //use: mAngularRates
254 // double tsetmn; //throttle //use: mThrottle
255 // UtVec3d accreq; //acceleration required (axial force?) //use: mAxialAccel
256 // command type: jacton == 2
257 // double hedreq[2]; //heading required (north/east vectors???)
258 // double spdreq; //speed required
259 // double altreq; //altitude required
260 // double rocreq; //max rate of climb
261 // double greq; //max gees //use: mMaxGees
262 // command type: jacton == 3
263 // double areqt[3]; //maneuver plane //use: mPlane
264 // double areqtm; //max gees //use: mMaxGees
265 // double tsetmn; //above
266 // command type: jacton == 4
267 // UtVec3d direq; //use: mVelocityVector (direction vector, world coordinates (NED brawler))
268 // double greq; //above
269 // int spdrmd; //above
270 // double tsetmn; //above
271 // double spdreq; //above
273 void prlevl(double aGees, double aTurn, double aRoc, double aHeading, double aMach);
274 void forcev(double spd, std::string spdmod, double headng, double rclimb);
275 void dirct(double spddes, std::string spdmd, double rolds, std::string rolmd, double geedes);
276 void SetMaxThrottle(double aThrottle);
277 void aproj3(double timeDelta, UtEntity& proj);
278 void allim(double aldes, double alpha, double cosalf, double gx, double acm, double& along, double& thrust);
279 void grthr(double aldes, double drag, double cosaoa, double gx, double& grosst, double& epd);
280 void laccel(double& along,
281 double almin_use,
282 UtVec3d& atrans,
283 const UtVec3d& v,
284 double spd,
285 const UtFortMat3d& rbe,
286 double acm,
287 double amax,
288 double& atload,
289 double& erate);
290 void prjacc(const UtVec3d& xin, const UtVec3d& vin, const UtVec3d& a, double dt, UtVec3d& xout, UtVec3d& vout);
291 void spdtoa(double spd0x,
292 double spdtmp,
293 double dspeed,
294 const UtVec3d& vdes,
295 double dt,
296 double gmax,
297 const UtVec3d& vtemp,
298 double& aldes,
299 UtVec3d& atrans);
300 void thstoa(double gx,
301 double frclon,
302 const UtVec3d& dir0,
303 const UtVec3d& vtemp,
304 double spdtmp,
305 double dt,
306 double gmax,
307 double& aldes,
308 UtVec3d& atrans);
309 void manwnd(const UtVec3d& v, const UtVec3d& a, UtFortMat3d& rw, double& al, double& at);
310
312 // main maneuvering command interpretation logic
314 // updates derived performance values
315 void perfrm();
316 double corner(double alt, double vs, double wate);
317
318 // flies the aircraft (main brawler platform update method)
319 // void flyac(double toTime, BrawlerPlatform& plat);
320 void flyac(double toTime);
321 // rates() - computes actual angular rates at end of time step
322 // void rates(double aSimTime, double wact[3]);
323 void rates(double& xl,
324 double thrst,
325 double& dt,
326 double tend,
327 UtVec3d& wact,
328 double& spddes,
329 UtVec3d& vw,
330 UtVec3d& gw,
331 UtVec3d& aw,
332 const int arotyp,
333 double& aoaact,
334 double& aldact);
335 // gwreq() - computes desired angular rates from current command type
336 // parameter: wnext - return angular rates
337 // parameter: spddes - return speed, used by flyac() -> flact1() -> seteng()
338 // parameter: aoades - not used for arotyp1
339 // parameter: gavdfl - ground avoidance situation, used to limit gmax in rates() for modifying pitch rate
340 void gwreq(double& dt, double thrst, double tend, UtVec3d& aw, UtVec3d& wnext, double& spddes, double& aoades, bool& gavdfl);
341 // computes other values for time step after angular rates and alpha are known
342 void flact1(UtVec3d& wnext,
343 double& d /*drag*/,
344 double delt,
345 double& flow,
346 double spddes,
347 double& faxial,
348 double& wate,
349 double& xl,
350 double& efpd);
351 // determines current engine state
352 void seteng(double delt, double drg, double spddes, double tsmn);
353 // computes desired axial force (forward) from current command type
354 // void desaxf(double drg, double spddes, double tsmn, double& axfreq);
355 void desaxf(double drg, double spddes, double tsmn, double& axfreq, double& accx); // my version that also returns
356 // acceleration on X axis
359
360 // declared for use by flyac() :
361 void flacti(double& faxial, double& xl, double& flow, double& efpd);
362 void flyac_short(double dt);
363 // void flact0(double vw[3], double gw[3], double aw[3], double tend, double xl);
364 void flact0(UtVec3d& vw, UtVec3d& gw, UtVec3d& aw);
365 void acarea();
366 // void gsweepc(int sweep);
367 // void getdt(double aw[3], double wnow[3], double wdes[3], double ftime, int jacton, double& delt);
368 void getdt(UtVec3d& aw, UtVec3d& wnow, double ftim, double& dt);
369 // void gac();
370 // void pac();
371 // void flyconst();
372 // bool flyefficient(BrawlerPlatform& plat);
373 // bool benign_aero(BrawlerPlatform& plat); //replicates benign_aero computed in set_benign()
374 // declared for use by rates()
375 void ratmx1(double xl,
376 double acmass,
377 UtVec3d& avw,
378 UtVec3d& agw,
379 double aoaold,
380 double thrst,
381 double& maxp,
382 double& qmxpos,
383 double& qmxneg,
384 double& aoamx);
385 double pmax(double wate, double glift);
386 double gliftm(double mach, double dypr, double wate);
387 double fliftm(double mach, double dypr, double wate);
388 double qmax(double u, double wate, double awz, const int idir);
389 void aoamx1(double acmass, double& aoamx);
390 double actxdt(double xdota0, double xdotr, double omeg, double dt);
391 double gldmx(double wate, const int idir);
392
393 // double aoamxcl(double fm);
394 // void rates9(double& xl, double faxial, double delt, double wnext[3], double& spddes, double vw[3], double gw[3],
395 // int arotyp, double& alfnow, double& aldnow);
396
397
398 // declared for use by gwreq()
399 double dsxdot(double xdes, double x, double xdot, double xdotmx, double tau);
400 double stept(double ades, double w, double angmax, double& wdes, double tau);
401 void qroots(double a, double b, double c, double& x1, double& x2, bool& solutn); // needed by stept()
402 bool toltst(double xf, double x0, double tol);
403 void adjal(double& aly, double& alz, double& al, double greqm, UtVec3d& toup, bool& gavdfl);
404 void altlim(UtVec3d& vwr);
405 void vmake2(double a, UtVec3d& vin, UtVec3d& vout); // needed by altlim()
406 // void chkrng(double x, double xmin, double xmax, char** text);
407 void chkrng(double x, double xmin, double xmax, std::string text);
408 // void ckrngi(int k, int kmin, int kmax, char** text);
409 void ckrngi(const int k, const int kmin, const int kmax, const std::string& text);
410 void desang(UtVec3d& vw, UtVec3d& wnow, double& cphi, double& sphi, double& psidot, double& psi);
411 void orient(UtFortMat3d& dircos, double& yaw, double& pitch, double& roll);
412 void rollim(UtVec3d& gw, double& roldes, double& aly, double& alz, double psi);
413 void limchk(double value,
414 double limit,
415 double maxovr,
416 double minund,
417 double timnow,
418 double& toact,
419 double& timovr,
420 double& timund,
421 bool& ld2,
422 bool& over,
423 bool limon); // needed by rollim()
424 // void vxfrmc(UtFortMat3d& b, UtVec3d& v, UtVec3d& vt, int mode);
425
426
427 // declared for use by flact1()
428 void udrbe(UtFortMat3d& rbe, UtVec3d& w, double wsq, double wmag, double chi);
429 void udxv(UtVec3d& accbar, UtVec3d& pos, UtVec3d& vel, double delt, UtFortMat3d& rwea);
430 double fflo(double thrtlx);
431 void getqm(double speed, double& dyp, double& fmach);
432 // void getqm(double speed);
433
434 // declared for use by seteng()
435 void deseng(double freq, double& fggdes, double& fabdes, double& ddpdes, double& trpdes);
436 double throt(double thrst);
437 void stenst(double fggdes, double fabdes, double ddpdes, double trpdes, double delt);
438
439 // declared for use by desaxf()
440 // void effth2(double fmachc, double alt, double thrtlx, double& efgrth, double& efpd);
441 void effth2(double thrtlx, double& efgrth, double& efpd);
442 // void effthr(double fmachc, double alt, double fggc, double fabc, double trpdc, double ddpdc, double& efgrth, double& efpd);
443 void effthr(double fggc, double fabc, double trpdc, double ddpdc, double& efgrth, double& efpd);
444 void thrst2(double fgg, double fab, double& tgg, double& tab, double& id);
445 // double fdddrg(double ddpd);
447
448
450 // common utility methods: table access, vector/matrix operations
452 // All functions here moved to BrawlerUtil
453 // double param1(int i, double xx, double* aray);
454 // double tbl1(double x, double* z, double* xval, int nxval);
455 // double tbl2(double x, double y, double* z, double* xval, int nxval, double* yval, int nyval);
456 // void invtb2(double* tbl, double z, int nr, int ir, double pr, bool revdir, int nc, int& ic, double& pc);
457 // void srch(double* x, int nx, double xint, int& ilow, double& p);
458 // bool maxcnt(int count, bool zprnt, int mcount, char* subnam);
459 // double tbl2e(double x, double y, double* z, double* xval, int nxval,double* yval, int nyval);
460 // double xlimit(double xreq, double xmax, double xmin);
461 // void xmit(int n, int* a, int* b);
462 // void xmit(int n, double* a, double* b) { xmit(n, (int*)a, (int*)b); }
463 // void xmit(int n, void* a, void* b);
464
465 // void gtypd(int mode); //gets TYPDAT and optionally: ACPHYS, PRFORM, RDRDAT, & PODDAT from global memory
466 // void gtypd_inner(int iactyp, int mode, int sweep); //needed by gtypd() //was implemented only for mode = [0,1,2]
467 // (bits 1 and 2) void memrd(int* array, int mwds, int loc, int modep); //needed by gtypd_inner() void memrd(double*
468 // array, int mwds, int loc, int modep) { memrd((int*)array, mwds, loc, modep); } void memrdc(char* carray, int
469 // mchar, int loc, int mode); //needed by gtypd_inner() void xmitnc(int n, int* b, int* a); //needed by memrdc() void
470 // itoc(int i, char c[4]) {} //needed by xmitnc() void memrtn(int nwords, int locx) { } //needed by memrdc() //not
471 // implemented at this time bool lbit(int word, int n); //needed by gtypd_inner()
472
476 // aircraft performance queries
478
479 // find max transverse acceleration from min longitudinal acceleration
480 void max_asubt(double& g_trans_max, bool& low_spd); // needed by gwreq()
481 // drag
482 double drag(double tlift); // TODO
483 double drag2(double xaoa);
484 double fdrag2(double xaoa, const int num_acd_m, double* acd_mach, double* acd);
485 double fdrag_inner(double aoa, const int num_acd_m, double* acd_mach, double* acd);
486 void gcdadd(const int num_mach, double* machs, double* cds, double& cdadd);
487 double drgad();
488 // lift
489 double xlift(double alfa);
490 double fxlift(double alfa);
491 // aoa given current state & hypothetical drag
492 double get_aoa(double drag);
493 void srch2(double* x, const int nx, double xint, int& ilow, double& p);
494 // calibrated air speed
495 double cas(double speed);
496 void atmos(double alt, double& t, double& pres, double& dens, double& vs, double& pr, double& dr);
497 // thrust
498 void thrust(double thrtlx, double& tgg, double& tab, double& id);
499 void thrdec(double thrtlx, double& fgg, double& fab, double& trpd);
500 void thrst3(double fgg, double fab, double& tgg, double& tab, double& id, double trpd, bool destrv);
501 void fthrst(double fgg, double fab, double& tgg, double& tab, double& id);
502 void fntthr(double fgg, double fab, double& tgg, double& tab);
503 // void fgrthr(double fggc, double fabc, double& tggg, double& tabg);
504 // sustained Gees for max turn?
505 double susgmx(double wate, double thrtlx);
506 // alpha at max instantaneous lift?
507 double aoamcl(double wate);
508 // angle of attack given current state & hypothetical lift
509 double aoa(double xl, bool postall);
510 // angle of attack given current state & hypothetical lift & area
511 double faoa(double xl, bool postall);
514
515
516 // FORTRAN common blocks
517 //#include "par.fi" //NOTE - just include par.h for now
518 //#include "pcon.fi" //NOTE - just include pcon.h for now
519 //#include "extst.fi" //NOTE - just include extst.h for now, only used for: area[mac], itype[mac], &
520 // wing_sweep[mac] #include "typdat.fi" //NOTE - just include typdat.h for now #include "acphys.fi" //NOTE - just
521 // include acphys.h for now #include "acstat.fi" //NOTE - just include acstat.h for now, only used for:
522 // num_ac_acd_m[mac], ac_acd_mach[2*max_acd_mach][mac], & ac_acd[2*max_acd_mach][mac]. Only used by drag2()
523
525 //#include "pcon.fi"
526 //#include "pcon.h"
528 //#define lnpcon (13)
529 //#define grav (32.17405)
530 //#define eps (1.0e-35)
531 //#define bolk (1.38e-23)
532 //#define antmp (290.0)
533 //#define pi (3.141592654)
534 //#define twopi (6.283185308)
535 //#define hafpi (1.570796327)
536 //#define root2 (1.414213562)
537 //#define root3 (1.732050808)
538 //#define xlarge (1.0e38)
539 //#define rad (pi/180.0)
540 //#define deg (1.0/rad)
541 //#define ftnmi (1.64578834e-4)
542 //#define unused (-2147463603.0)
543 //#define re (20890377.0)
544 //#define re_rf (4.0*re/3.0)
545#define psl (2116.216)
546#define tsl (518.688)
547#define dsl (0.0023769)
548 //#define warp1 (0.98357119e+09)
549 //#define ftcmsq (929.0304)
550 //#define m22ft2 (10.763911)
551 //#define ft2m (2.54*12.0/100.0)
552 //#define m2ft (1.0/ft2m)
553 //#define rem (re*ft2m)
554 //#define log10_e (0.43429448)
556 //#define large (2147483647.0)
557 //#define blank (' ')
558 //#define end ('END ')
564 // static union {
565 // double unit3[3][3];
566 // struct {
567 // double unitx[3];
568 // double unity[3];
569 // double unitz[3];
570 // };
571 // };
572
574 // UtFortMat3d unit3;
575 // //struct {
576 // UtVec3d unitx;
577 // UtVec3d unity;
578 // UtVec3d unitz;
579 // //};
581
582
583 UtVec3d gravec;
584 // double xnu;
585 // double zero_3vec[3];
586
587
589 // current status / capability of aircraft:
590 // LBM - use BrawlerPlatform for state
591 double tsv; // current time (time of state vector)
592 UtVec3d pos; // position
593 UtVec3d vel; // velocity
594 UtVec3d acc; // acceleration
595 UtFortMat3d rbea; // earth-to-body rotation matrix (orientation)
596 UtFortMat3d rwea; // earth-to-wind axis rotation matrix (orientation)
597 UtVec3d wnow; // angular rates now (last time step)
598 double alfa; //"old" angle of attack (AOA)
599 double alfdot; // angle of attack rate of change
600 double amass; // taken from svwork.fi. Aircraft mass (empty weight + fuel) in slugs
601 double spd; // speed
602 double turn; // direction of turn??? magnitude of turn???
603 double wsqr; // angular rates squared???
604 double rate; // rate of turn???
605 double fm; // mach number
606 double bvrmch;
607 double dyp; // dynamic pressure
608
609 double omegp; // 1st order lag filter frequency for pitch rates
610 double omegq; // 1st order lag filter frequency for roll rates
611
612 double pmx; // max roll RATE limit
613 double qmxpos; // max positive pitch RATE limit
614 double rlthrs; // some large roll threshold for limit checking (180*rad ???)
615 double rolmx; // max allowed roll limit
616 double rarea; // aircraft reference area (sq feet)
617 double gas; // taken from svwork.fi. Aircraft fuel mass in slugs
618 double tset;
619 double ttset;
620 double fggsv;
621 double fabsv;
622 double trpdsv;
623 double ddpdsv;
624 // int wsweep; //wing sweep number???
625 // strange time limit values:
626 double mxexrl; // max time over limit before limit reimposed
627 double mnonrl; // min time limits must be imposed before they can be exceeded again
628 double tmexrl; // time last exceeded the limit to determine if "mxexrl" has been reached --> for purposes of
629 // reapplying limit (not negligible short excursions past limit due to control system)
630 double tmonrl; // time last dipped back under limit to determine if "mnonrl" has been reached
631 double tmacex; // time last exceeded the limit (including negligible short excursions due to control system???)
632 bool ld2; // flag for if the limit may now be exceeded, because it was previously applied long enough
633 bool over; // flag for if the limit is currently being exceeded
634
635
637 //#include "extst.fi"
638 //#include "extst.h" //NOTE - only include necessary parts, for now
639 // aircraft "external" state data (truth data)
641 // double svtime[mac];
642 // double acmass[mac];
643 // double fuel[mac];
644 // int itype[mac];
645 // double area[mac];
646 // double barems[mac];
647 // int wing_sweep[mac];
648 // int bd[mac];
649 double svtime;
650 // double acmass; // Using amass from svwork
651 // double fuel; // Using gas from svwork
652 // int itype;
653 // double area;
654 double barems; // Aircraft empty/design weight in slugs
655 // int wing_sweep;
656 // int bd;
657 // double xe[mac][3];
658 // double ve[mac][3];
659 // double ae[mac][3];
660 // double rbe[mac][9];
661 // double rwe[mac][9];
662 // double wb[mac][3];
663 // double alpha[mac];
664 // double speed[mac];
665 // double radmin[mac];
666 // double wsq[mac];
667 // double wmag[mac];
668 // double fmach[mac];
669 // int istorl[mac][mxdev];
670 // int imind[mac];
671 // double timded[mac];
672 // double dypres[mac];
673 // int alive[mac];
674 // int nactot;
675 // int armnt[mac][numwpn];
676 // int killer[mac];
677 // int entity[mac];
678 // int nsamst;
679 // int avdptr[mac];
680 // int fcptr[mac];
681 // double fgg[mac];
682 // double fab[mac];
683 // int mdctrl[mac];
684 // double ddpd[mac];
685 // double trpd[mac];
686 // int updmod[mac];
687 // double ecmlvl;
688 // double freqp[mac];
689 // double freqq[mac];
690 // double rratmx[mac];
691 // double pratmx[mac];
692 // int exprfm[mac][manten];
693 // double alrate[mac];
694 // double crnrv[mac];
695 double crnrv;
696 // int nnofly;
697 // int c2func[mac];
698 // int gcmndp[mac];
699 // int damage[mac];
700 // int cev_off[mac];
701 // int ssm_char_p[mac];
702 // int ssm_trj_p[mac];
703 // int is_ssm[mac];
704 // int slot_in_use[mac];
705 // int deactivated[mac];
706 // int l_cap[mac];
707 // int sys_damage[num_sys_defined][mac];
708 // int msl_damage[numwpn][mac];
709 // int dalet_ptr[mac];
710
711
713 //#include "par.fi"
714 //#include "par.h" //NOTE - only include necessary parts, for now
715 // utility constants
717#define msweep (3)
718#define max_acd_mach (20)
719 //#define desspd (1)
720 //#define thrttl (2)
721#define desacc (3)
722#define undnum (-999.99e30)
723#define bay_closed (4)
724#define trkr_neg_alt (5000.0)
725
726
728 //#include "prform.fi" //NOTE - only include necessary parts, for now
729 // aircraft performance data
733 bool tdlim;
734 bool tmlim;
735 bool tablim;
736 double trmm;
737 double trtd;
738 double alpha0;
739 // int lperf, lperf2;
740#define mmach1 (25)
741#define mhts (21)
742#define aero1 (1)
743#define aero2 (2)
744 //#define lpform (21+mmach1*(5+12*mhts)+mhts+2*msweep+(msweep-1))
745 // double perf[lpform];
746#define mfm (30)
747#define malpha (45)
748 //#define lwingsweep (7 + 6*mfm + 2*malpha + 2*mfm*malpha)
749 // double wingsweep[lwingsweep];
750 // int sweep_ptr[msweep];
751#define mdpv1 (10)
752#define mgtv (10)
753#define malv (10)
754#define mdpv2 (20)
755#define malfa (19)
756#define mmach2 (25)
757 //#define lpfrm2 (15+mdpv1+mdpv2+4*malv+mgtv*(6+mdpv2)+malfa*(4+mdpv1+3*mgtv)+mmach2*(1+4*malv+2*mgtv))
758 // double perf2[lpfrm2];
760#define reflective (1)
761#define full (2)
762 // equivalence(wingsweep(1),nfm1)
763 int nfm1; // <= mfm, size of fmvec1[]
764 int nfm2; // <= mfm, size of fmvec2[]
765 int nfm3; // <= mfm, size of fmvec3[]
766 double fmvec1[mfm]; // mach for clmax
767 double fmvec2[mfm]; // mach for clift
768 double fmvec3[mfm]; // mach for cdrag
769 // tbl1() only used on clmin[] & clmax[], both with fmvec1[]
770 // double clmin[ mfm]; //not used if "AOA_TABLE" is reflective
771 double clmax[mfm];
772 // double alpha_clmax[mfm];
773 int nalph1; // <= malpha, size of alfv1[]
774 int nalph2; // <= malpha, size of alfv2[]
775 double alfv1[malpha]; // AOA values for clift[]
776 double alfv2[malpha]; // AOA values for cdrag[]
777 // invtb2() only used on "2d" arrays clift[] & cdrag[]
778 double clift[mfm * malpha]; // coefficient lift(mach,aoa)
779 double cdrag[mfm * malpha]; // coefficient drag(mach,aoa)
780 int nmach1; // <= mmach1
781 int nhts; // <= mhts
782 double mchval[mmach1]; // mach
783 double htvec[mhts]; // alt
784 // all these "2d" arrays accessed with tbl2()
785 double tidle[mmach1 * mhts]; // thrust idle(mach,alt)
786 double tmil[mmach1 * mhts]; // thrust mil (mach,alt)
787 double thrmx[mmach1 * mhts]; // thrust max (mach,alt)
788 // LBM - no gross thrust effects
789 // double gtidle[mmach1*mhts]; //gross thrust idle(mach,alt)
790 // double gtmil [mmach1*mhts]; //gross thrust mil (mach,alt)
791 // double gthrmx[mmach1*mhts]; //gross thrust max (mach,alt)
792 // LBM - no drag deployment devices
793 // double drgdmx[mmach1*mhts]; //coefficient of additive drag at full drag device employment
794 double abcorl;
795 // structural G limit (load factor limit)
796 //[0] = positive limit, [1] = negative limit (negative number)
797 double gcap[2][mmach1]; // indexed as fortran would???
798 // structural G limit (load factor limit) when weight of aircraft above miss_mass (design weight for max gee
799 // performance) [0] = positive limit, [1] = negative limit (negative number)
800 double gcap2[2][mmach1]; // indexed as fortran would???
801 // double sweep_machs[msweep-1];
802 double rfarea[msweep];
803 // int sweep_cp;
804
805 // ZU - Keep these here in case a fuel object is not defined on the platform
806 // These are copied exactly in WsfBrawlerFuel
807 double floidl[mmach1 * mhts];
808 double flomil[mmach1 * mhts];
809 double flomax[mmach1 * mhts];
810 double ff_adj;
811
812
814 // myprfm.fi
816#define ndatbl (10)
817#define ndtbl2 (10)
818 double dragvl[ndatbl];
819 double aoavl[ndatbl];
820 double drgaoa[ndtbl2];
821 UtVec3d aw;
822 UtVec3d gwind;
823 double almax;
824 double almin;
825 double gmxin;
826 double thrmin;
827 double thrnow;
828 double thrmax;
829 double drgnow;
830 double gmxsu;
831 double almaxg;
832 double alming;
833 double amxin;
834 double drgsu;
835 double wmax;
836 double wate;
837 double gmnin;
838 double gmxsut;
839 double psubs;
840 double cornrv;
841 double tempme;
842 double presme;
843 double densme;
844 double vsme;
845 double prme;
846 double drme;
847 // double dyprsp;
848 // double acmasp;
849 double radmnp;
850 // double throtp;
851 double aoamx;
852 double aoamn;
853 double epdmin;
854 double epdnow;
855 double epdmax;
856 double thrstl[5]; // double thrstl(-1:3); //TODO - figure this out
858
859
861 //#include "bugger.fi" //NOTE - only include necessary parts, for now
863 //#define lbuggr (5*mac+1)
864 // double throtm[mac];
865 // double altmin[mac];
866 // double altmax[mac];
867 // double casmin[mac];
868 double throtm; // these are aircraft specific, no need for array
869 double altmin;
870 double altmax;
871 double casmin;
872 // double rabnm;
873 // bool nopost[mac];
875
876
878 //#include "adaero.fi" //NOTE - only include necessary parts, for now
879 // int lnadar; // = mac
880 // bool adactv[mac];
881 // bool adactv; //this is aircraft specific, no need for array
882 // should be false
884
885 // //#include "opmode.fi"
886 // int progrm;
887 //#define trprog (9)
888
889 // //#include "evtim.fi"
890 //#define levtim (4)
891 // int indev,indf;
892 // double time,futime;
893
895 //#include "acphys.fi"
896 //#include "acphys.h" //NOTE - only include necessary parts, for now
898 // int lphys;
899 double miss_mass;
900 // int has_bay_door;
901 // double bay_drag;
902 double parea[3];
903 // double varea[3];
904 double deswt;
905 // double vis[4];
906 // double delxg[2][3];
907 // double rgb[2][3][3];
908 // double tefac;
909 // int nguns;
910 // double intksn[3];
912 // double bay_cycle_time;
913 // double bay_delay_time;
914 // int fwez_acid;
915
916
918 //#include "typdat.fi"
919 //#include "typdat.h" //NOTE - only include necessary parts, for now
922 double thrst_adj;
923 //#include "par.h" //for: mxdev
924 //#define lentyp (19*1+2*mxdev)
925 //#define mxphys (1)
926 //#define mxaero (2)
927 //#define mxir (2)
928 //#define lntypc (20)
929 // int lactyp;
930 // int typptr;
931 // int iperf;
932 // int iphys;
933 // int istors[mxdev];
934 // int iamlev[mxdev];
935 // double fueli;
936 // double valac;
937 // double cmbeff;
938 // int pystyp;
939 // int inimsl;
940 // int iir;
941 // int avtptr;
942 // double rcsadj;
943 // double vaadj;
944 // int ir_spec_type;
945 // int iamlev_set;
946 // double ff_adj;
947 // int methdx;
948 // int rcsptr;
949
950
952 //#include "acstat.fi"
953 //#include "acstat.h" //NOTE - only include necessary parts, for now
955 // int num_ac_acd_m[mac];
956 // double ac_acd_mach[mac][2*max_acd_mach];
957 // double ac_acd[mac][2*max_acd_mach];
958 // int sweep0[mac];
961 double ac_acd[2 * max_acd_mach];
962 // int sweep0;
963
964 //#define lacsta ((28*1+1*2+3*3+max_acd_mach*4)*mac)
965 // int mdactn[mac];
966 // double wb0[mac][3];
967 // double head0[mac][2];
968 // double climb0[mac];
969 // double gmax0[mac];
970 // double speed0[mac];
971 // double alt0[mac];
972 // double acc0[mac][3];
973 // double direc0[mac][3];
974 // double throtl[mac];
975 double throtl;
976 // double thrott[mac];
977 // double ddpd0[mac];
978 // double trpd0[mac];
979 // double rlexmx[mac];
980 // double rlonmn[mac];
981 // double tmrlex[mac];
982 // double tmrlon[mac];
983 // double maxrol[mac];
984 // double tmexac[mac];
985 // int limd2[mac];
986 // int overl[mac];
987 // double rollth[mac];
988 // double tzero[mac];
989 // double aztrak[mac];
990 // double eltrak[mac];
991 // int spdmd0[mac];
992 // int lin_fly[mac];
993 // int benign_aero[mac];
994 // int gun_maneuver[mac];
995 // int tgt_for_gun[mac];
996 // int sweep0[mac];
999
1000private:
1002 //#include "prjct.fi" //NOTE - only include necessary parts, for now
1004
1006 double erate;
1007};
1008
1009#endif
#define ndtbl2
Definition BrawlerMover.hpp:817
#define ndatbl
Definition BrawlerMover.hpp:816
#define mhts
Definition BrawlerMover.hpp:741
#define mfm
Definition BrawlerMover.hpp:746
#define mmach1
Definition BrawlerMover.hpp:740
#define max_acd_mach
Definition BrawlerMover.hpp:718
#define msweep
Definition BrawlerMover.hpp:717
#define malpha
Definition BrawlerMover.hpp:747
double bvrmch
Definition BrawlerMover.hpp:606
virtual void UpdateFuel(double aTimeStep, double aInitialFlow, double aThrottle, double &aFuelQuantity, double &aVehicleMass)
Definition BrawlerMover.cpp:574
void fntthr(double fgg, double fab, double &tgg, double &tab)
Definition BrawlerMover.cpp:7275
virtual double CalibratedAirSpeed()
Definition BrawlerMover.hpp:159
double faoa(double xl, bool postall)
Definition BrawlerMover.cpp:5907
UtVec3d mAxialAccel
Definition BrawlerMover.hpp:232
virtual bool UpdateState(double toSimTime)
Definition BrawlerMover.cpp:528
virtual double PlatformTime()
Definition BrawlerMover.hpp:114
double cdrag[mfm *malpha]
Definition BrawlerMover.hpp:779
double fxlift(double alfa)
Definition BrawlerMover.cpp:6480
void thrst2(double fgg, double fab, double &tgg, double &tab, double &id)
Definition BrawlerMover.cpp:8296
double prme
Definition BrawlerMover.hpp:845
int num_ac_acd_m
Definition BrawlerMover.hpp:959
double clmax[mfm]
Definition BrawlerMover.hpp:771
double mSpeed
Definition BrawlerMover.hpp:237
virtual UtEntity State(double aSimTime)
Definition BrawlerMover.cpp:536
virtual double Mach()
Definition BrawlerMover.hpp:133
double turn
Definition BrawlerMover.hpp:602
double epdmax
Definition BrawlerMover.hpp:855
void altlim(UtVec3d &vwr)
Definition BrawlerMover.cpp:6151
void ratmx1(double xl, double acmass, UtVec3d &avw, UtVec3d &agw, double aoaold, double thrst, double &maxp, double &qmxpos, double &qmxneg, double &aoamx)
Definition BrawlerMover.cpp:4732
double fggsv
Definition BrawlerMover.hpp:620
int aoa_tab_type
Definition BrawlerMover.hpp:759
int arotyp
Definition BrawlerMover.hpp:921
double ac_acd_mach[2 *max_acd_mach]
Definition BrawlerMover.hpp:960
BrawlerMover & operator=(const BrawlerMover &)=delete
double thrnow
Definition BrawlerMover.hpp:827
double fm
Definition BrawlerMover.hpp:605
void seteng(double delt, double drg, double spddes, double tsmn)
Definition BrawlerMover.cpp:4312
CommandType mCommandType
Definition BrawlerMover.hpp:241
double dtggup
Definition BrawlerMover.hpp:732
double susgmx(double wate, double thrtlx)
Definition BrawlerMover.cpp:5199
double altmax
Definition BrawlerMover.hpp:870
virtual double AlphaCL0()
Definition BrawlerMover.hpp:125
virtual double Alpha()
Definition BrawlerMover.hpp:124
virtual double LagFilterFreqPitchRate()
Definition BrawlerMover.hpp:135
double drgad()
Definition BrawlerMover.cpp:5164
double barems
Definition BrawlerMover.hpp:654
double clift[mfm *malpha]
Definition BrawlerMover.hpp:778
double drgnow
Definition BrawlerMover.hpp:829
void max_asubt(double &g_trans_max, bool &low_spd)
Definition BrawlerMover.cpp:6374
void grthr(double aldes, double drag, double cosaoa, double gx, double &grosst, double &epd)
Definition BrawlerMover.cpp:2240
double mxexrl
Definition BrawlerMover.hpp:626
virtual double DynamicPressure()
Definition BrawlerMover.hpp:134
double mThrottle
Definition BrawlerMover.hpp:238
UtVec3d gwind
Definition BrawlerMover.hpp:822
double drag(double tlift)
Definition BrawlerMover.cpp:5040
double vsme
Definition BrawlerMover.hpp:844
double htvec[mhts]
Definition BrawlerMover.hpp:783
double altmin
Definition BrawlerMover.hpp:869
bool tablim
Definition BrawlerMover.hpp:735
double deswt
Definition BrawlerMover.hpp:904
double ddpdsv
Definition BrawlerMover.hpp:623
double omegq
Definition BrawlerMover.hpp:610
virtual double Speed()
Definition BrawlerMover.hpp:129
double mchval[mmach1]
Definition BrawlerMover.hpp:782
double floidl[mmach1 *mhts]
Definition BrawlerMover.hpp:807
virtual double AngleOfAttackFromLift(double lift)
Definition BrawlerMover.hpp:157
double dyp
Definition BrawlerMover.hpp:607
double tempme
Definition BrawlerMover.hpp:841
void limchk(double value, double limit, double maxovr, double minund, double timnow, double &toact, double &timovr, double &timund, bool &ld2, bool &over, bool limon)
Definition BrawlerMover.cpp:7482
double xlift(double alfa)
Definition BrawlerMover.cpp:6439
double throt(double thrst)
Definition BrawlerMover.cpp:7997
double epdnow
Definition BrawlerMover.hpp:854
double pmax(double wate, double glift)
Definition BrawlerMover.cpp:4759
void atmos(double alt, double &t, double &pres, double &dens, double &vs, double &pr, double &dr)
Definition BrawlerMover.cpp:6853
bool mThrottleFlag
Definition BrawlerMover.hpp:242
void chkrng(double x, double xmin, double xmax, std::string text)
Definition BrawlerMover.cpp:6237
double gcap2[2][mmach1]
Definition BrawlerMover.hpp:800
double rfarea[msweep]
Definition BrawlerMover.hpp:802
double fmvec1[mfm]
Definition BrawlerMover.hpp:766
void forcev(double spd, std::string spdmod, double headng, double rclimb)
Definition BrawlerMover.cpp:1264
double gmnin
Definition BrawlerMover.hpp:837
double actxdt(double xdota0, double xdotr, double omeg, double dt)
Definition BrawlerMover.cpp:4963
double tidle[mmach1 *mhts]
Definition BrawlerMover.hpp:785
double alming
Definition BrawlerMover.hpp:832
double almin
Definition BrawlerMover.hpp:824
double ac_acd[2 *max_acd_mach]
Definition BrawlerMover.hpp:961
double gmxsut
Definition BrawlerMover.hpp:838
virtual double EmptyMass()
Definition BrawlerMover.hpp:128
int nhts
Definition BrawlerMover.hpp:781
void spdtoa(double spd0x, double spdtmp, double dspeed, const UtVec3d &vdes, double dt, double gmax, const UtVec3d &vtemp, double &aldes, UtVec3d &atrans)
Definition BrawlerMover.cpp:2541
UtVec3d wnow
Definition BrawlerMover.hpp:597
double aoamcl(double wate)
Definition BrawlerMover.cpp:5494
void srch2(double *x, const int nx, double xint, int &ilow, double &p)
Definition BrawlerMover.cpp:6618
BrawlerMover(const BrawlerMover &aSrc)
Definition BrawlerMover.cpp:232
double fabsv
Definition BrawlerMover.hpp:621
double amxin
Definition BrawlerMover.hpp:833
double amass
Definition BrawlerMover.hpp:600
double densme
Definition BrawlerMover.hpp:843
double thrmin
Definition BrawlerMover.hpp:826
double dtggdn
Definition BrawlerMover.hpp:732
virtual double MaxAllowedThrottle()
Definition BrawlerMover.hpp:145
UtFortMat3d rbea
Definition BrawlerMover.hpp:595
double omegp
Definition BrawlerMover.hpp:609
double fdrag_inner(double aoa, const int num_acd_m, double *acd_mach, double *acd)
Definition BrawlerMover.cpp:5090
double get_aoa(double drag)
Definition BrawlerMover.cpp:6584
double svtime
Definition BrawlerMover.hpp:649
double fmvec2[mfm]
Definition BrawlerMover.hpp:767
double epdmin
Definition BrawlerMover.hpp:853
UtVec3d pos
Definition BrawlerMover.hpp:592
void gcdadd(const int num_mach, double *machs, double *cds, double &cdadd)
Definition BrawlerMover.cpp:5157
double abdt
Definition BrawlerMover.hpp:732
double aoamx
Definition BrawlerMover.hpp:851
double alfdot
Definition BrawlerMover.hpp:599
double tmexrl
Definition BrawlerMover.hpp:628
virtual bool Initialize(double aCreationTime, UtEntity &aStartingState, BrawlerPlatform *aPlatformPtr)
Definition BrawlerMover.cpp:475
int nfm1
Definition BrawlerMover.hpp:763
double throtl
Definition BrawlerMover.hpp:975
UtVec3d mPlane
Definition BrawlerMover.hpp:233
void flact0(UtVec3d &vw, UtVec3d &gw, UtVec3d &aw)
Definition BrawlerMover.cpp:4586
virtual bool LoadAeroConfig(const std::string &absolutePathFile)
Definition BrawlerMover.cpp:599
double corner(double alt, double vs, double wate)
Definition BrawlerMover.cpp:3014
int nalph1
Definition BrawlerMover.hpp:773
double trmm
Definition BrawlerMover.hpp:736
double gmxsu
Definition BrawlerMover.hpp:830
void allim(double aldes, double alpha, double cosalf, double gx, double acm, double &along, double &thrust)
Definition BrawlerMover.cpp:2207
double wmax
Definition BrawlerMover.hpp:835
void orient(UtFortMat3d &dircos, double &yaw, double &pitch, double &roll)
Definition BrawlerMover.cpp:7315
double gldmx(double wate, const int idir)
Definition BrawlerMover.cpp:4991
void vmake2(double a, UtVec3d &vin, UtVec3d &vout)
Definition BrawlerMover.cpp:6227
void getdt(UtVec3d &aw, UtVec3d &wnow, double ftim, double &dt)
Definition BrawlerMover.cpp:4663
double parea[3]
Definition BrawlerMover.hpp:902
double drag2(double xaoa)
Definition BrawlerMover.cpp:5061
double aoamn
Definition BrawlerMover.hpp:852
virtual UtFortMat3d & EarthToBodyRotationMatrix()
Definition BrawlerMover.hpp:119
double fmmax
Definition BrawlerMover.hpp:731
double thrstl[5]
Definition BrawlerMover.hpp:856
void flyac(double toTime)
Definition BrawlerMover.cpp:3190
void effth2(double thrtlx, double &efgrth, double &efpd)
Definition BrawlerMover.cpp:8210
void rollim(UtVec3d &gw, double &roldes, double &aly, double &alz, double psi)
Definition BrawlerMover.cpp:7376
double mHeading
Definition BrawlerMover.hpp:235
void udxv(UtVec3d &accbar, UtVec3d &pos, UtVec3d &vel, double delt, UtFortMat3d &rwea)
Definition BrawlerMover.cpp:7662
UtFortMat3d rwea
Definition BrawlerMover.hpp:596
bool tdlim
Definition BrawlerMover.hpp:733
double mMaxClimb
Definition BrawlerMover.hpp:240
double abcorl
Definition BrawlerMover.hpp:794
double drgaoa[ndtbl2]
Definition BrawlerMover.hpp:820
virtual double InletDrag(double throttle)
Definition BrawlerMover.hpp:185
double mnonrl
Definition BrawlerMover.hpp:627
double fdrag2(double xaoa, const int num_acd_m, double *acd_mach, double *acd)
Definition BrawlerMover.cpp:5075
double rolmx
Definition BrawlerMover.hpp:615
bool over
Definition BrawlerMover.hpp:633
virtual UtVec3d & AngularRates()
Definition BrawlerMover.hpp:123
double trmla
Definition BrawlerMover.hpp:731
double miss_mass
Definition BrawlerMover.hpp:899
double cornrv
Definition BrawlerMover.hpp:840
void flyac_short(double dt)
Definition BrawlerMover.cpp:4535
double crnrv
Definition BrawlerMover.hpp:695
void dirct(double spddes, std::string spdmd, double rolds, std::string rolmd, double geedes)
Definition BrawlerMover.cpp:1294
UtVec3d aw
Definition BrawlerMover.hpp:821
double thrst_adj
Definition BrawlerMover.hpp:922
double tmacex
Definition BrawlerMover.hpp:631
void getqm(double speed, double &dyp, double &fmach)
Definition BrawlerMover.cpp:7781
void thstoa(double gx, double frclon, const UtVec3d &dir0, const UtVec3d &vtemp, double spdtmp, double dt, double gmax, double &aldes, UtVec3d &atrans)
Definition BrawlerMover.cpp:2633
double throtm
Definition BrawlerMover.hpp:868
UtVec3d gravec
Definition BrawlerMover.hpp:583
virtual double AxialForceX()
Definition BrawlerMover.hpp:179
void deseng(double freq, double &fggdes, double &fabdes, double &ddpdes, double &trpdes)
Definition BrawlerMover.cpp:7828
double psubs
Definition BrawlerMover.hpp:839
double cas(double speed)
Definition BrawlerMover.cpp:6773
void thrust(double thrtlx, double &tgg, double &tab, double &id)
Definition BrawlerMover.cpp:6986
void desang(UtVec3d &vw, UtVec3d &wnow, double &cphi, double &sphi, double &psidot, double &psi)
Definition BrawlerMover.cpp:6312
double trefgg
Definition BrawlerMover.hpp:731
void ckrngi(const int k, const int kmin, const int kmax, const std::string &text)
Definition BrawlerMover.cpp:6263
virtual double SpecificEnergyRate()
Returns specific energy rate calculated in aproj3.
Definition BrawlerMover.hpp:161
virtual double Altitude()
Definition BrawlerMover.hpp:116
double thrmax
Definition BrawlerMover.hpp:828
double ac_fuel_cap
Definition BrawlerMover.hpp:911
void udrbe(UtFortMat3d &rbe, UtVec3d &w, double wsq, double wmag, double chi)
Definition BrawlerMover.cpp:7567
virtual double LagFilterFreqRollRate()
Definition BrawlerMover.hpp:136
double tsv
Definition BrawlerMover.hpp:591
double alfa
Definition BrawlerMover.hpp:598
double wate
Definition BrawlerMover.hpp:836
double qmax(double u, double wate, double awz, const int idir)
Definition BrawlerMover.cpp:4820
double rarea
Definition BrawlerMover.hpp:616
double fmvec3[mfm]
Definition BrawlerMover.hpp:768
virtual double Drag2()
Definition BrawlerMover.hpp:148
double casmin
Definition BrawlerMover.hpp:871
double rlthrs
Definition BrawlerMover.hpp:614
int nalph2
Definition BrawlerMover.hpp:774
void prlevl(double aGees, double aTurn, double aRoc, double aHeading, double aMach)
Definition BrawlerMover.cpp:1160
double flomil[mmach1 *mhts]
Definition BrawlerMover.hpp:808
double pmx
Definition BrawlerMover.hpp:612
double dsxdot(double xdes, double x, double xdot, double xdotmx, double tau)
Definition BrawlerMover.cpp:5609
double gcap[2][mmach1]
Definition BrawlerMover.hpp:797
void adjal(double &aly, double &alz, double &al, double greqm, UtVec3d &toup, bool &gavdfl)
Definition BrawlerMover.cpp:6025
int nfm2
Definition BrawlerMover.hpp:764
virtual double Thrust(double throttle)
Definition BrawlerMover.hpp:164
UtVec3d mVelocityVector
Definition BrawlerMover.hpp:234
double fflo(double thrtlx)
Definition BrawlerMover.cpp:7707
UtVec3d mAngularRates
Definition BrawlerMover.hpp:231
double ttset
Definition BrawlerMover.hpp:619
virtual void DeleteMover()=0
bool tmlim
Definition BrawlerMover.hpp:734
double almax
Definition BrawlerMover.hpp:823
UtVec3d vel
Definition BrawlerMover.hpp:593
void manwnd(const UtVec3d &v, const UtVec3d &a, UtFortMat3d &rw, double &al, double &at)
Definition BrawlerMover.cpp:2717
double alpha0
Definition BrawlerMover.hpp:738
void thrst3(double fgg, double fab, double &tgg, double &tab, double &id, double trpd, bool destrv)
Definition BrawlerMover.cpp:7151
CommandType
Definition BrawlerMover.hpp:202
@ PLANE_GEES_SPEED
Definition BrawlerMover.hpp:205
@ ALSO_COMMAND_ALPHA
Definition BrawlerMover.hpp:207
@ RATES
Definition BrawlerMover.hpp:203
@ VECTOR_GEES
Definition BrawlerMover.hpp:206
@ HEADING_SPEED_ALTITUDE
Definition BrawlerMover.hpp:204
double fliftm(double mach, double dypr, double wate)
Definition BrawlerMover.cpp:4784
void flact1(UtVec3d &wnext, double &d, double delt, double &flow, double spddes, double &faxial, double &wate, double &xl, double &efpd)
Definition BrawlerMover.cpp:4129
virtual double ReferenceArea()
Definition BrawlerMover.hpp:141
double tmonrl
Definition BrawlerMover.hpp:630
virtual double RollRateMax()
Definition BrawlerMover.hpp:137
virtual double Gas()
Definition BrawlerMover.hpp:142
double flomax[mmach1 *mhts]
Definition BrawlerMover.hpp:809
double trpdsv
Definition BrawlerMover.hpp:622
int nmach1
Definition BrawlerMover.hpp:780
void aoamx1(double acmass, double &aoamx)
Definition BrawlerMover.cpp:4885
double dragvl[ndatbl]
Definition BrawlerMover.hpp:818
UtVec3d acc
Definition BrawlerMover.hpp:594
double alfv1[malpha]
Definition BrawlerMover.hpp:775
double qmxpos
Definition BrawlerMover.hpp:613
virtual double AngleOfAttackRate()
Definition BrawlerMover.hpp:126
virtual double Lift()
Definition BrawlerMover.hpp:150
double gas
Definition BrawlerMover.hpp:617
virtual UtFortMat3d & EarthToWindRotationMatrix()
Definition BrawlerMover.hpp:121
void aproj3(double timeDelta, UtEntity &proj)
Definition BrawlerMover.cpp:1465
double aoavl[ndatbl]
Definition BrawlerMover.hpp:819
bool ld2
Definition BrawlerMover.hpp:632
double spd
Definition BrawlerMover.hpp:601
double tset
Definition BrawlerMover.hpp:618
double ff_adj
Definition BrawlerMover.hpp:810
void effthr(double fggc, double fabc, double trpdc, double ddpdc, double &efgrth, double &efpd)
Definition BrawlerMover.cpp:8249
double drme
Definition BrawlerMover.hpp:846
void laccel(double &along, double almin_use, UtVec3d &atrans, const UtVec3d &v, double spd, const UtFortMat3d &rbe, double acm, double amax, double &atload, double &erate)
Definition BrawlerMover.cpp:2336
double rate
Definition BrawlerMover.hpp:604
double thrmx[mmach1 *mhts]
Definition BrawlerMover.hpp:787
bool toltst(double xf, double x0, double tol)
Definition BrawlerMover.cpp:5988
virtual double TurnRadius()
Definition BrawlerMover.hpp:130
double trtd
Definition BrawlerMover.hpp:737
virtual double RollMax()
Definition BrawlerMover.hpp:140
double casmax
Definition BrawlerMover.hpp:731
void stenst(double fggdes, double fabdes, double ddpdes, double trpdes, double delt)
Definition BrawlerMover.cpp:8111
int nfm3
Definition BrawlerMover.hpp:765
void rates(double &xl, double thrst, double &dt, double tend, UtVec3d &wact, double &spddes, UtVec3d &vw, UtVec3d &gw, UtVec3d &aw, const int arotyp, double &aoaact, double &aldact)
Definition BrawlerMover.cpp:3522
double wsqr
Definition BrawlerMover.hpp:603
void qroots(double a, double b, double c, double &x1, double &x2, bool &solutn)
Definition BrawlerMover.cpp:5806
double stept(double ades, double w, double angmax, double &wdes, double tau)
Definition BrawlerMover.cpp:5683
virtual UtVec3d & Velocity()
Definition BrawlerMover.hpp:117
void perfrm()
Definition BrawlerMover.cpp:2771
double tmil[mmach1 *mhts]
Definition BrawlerMover.hpp:786
virtual double PitchRatePositiveMax()
Definition BrawlerMover.hpp:138
virtual double LiftFromAlpha(double alpha)
Definition BrawlerMover.hpp:152
void desaxf(double drg, double spddes, double tsmn, double &axfreq, double &accx)
Definition BrawlerMover.cpp:4392
void gwreq(double &dt, double thrst, double tend, UtVec3d &aw, UtVec3d &wnext, double &spddes, double &aoades, bool &gavdfl)
Definition BrawlerMover.cpp:3721
double mAltitude
Definition BrawlerMover.hpp:236
double gliftm(double mach, double dypr, double wate)
Definition BrawlerMover.cpp:4766
double presme
Definition BrawlerMover.hpp:842
double radmnp
Definition BrawlerMover.hpp:849
void fthrst(double fgg, double fab, double &tgg, double &tab, double &id)
Definition BrawlerMover.cpp:7214
double drgsu
Definition BrawlerMover.hpp:834
bool aeroLoaded
Definition BrawlerMover.hpp:997
double alfv2[malpha]
Definition BrawlerMover.hpp:776
virtual UtVec3d & Position()
Definition BrawlerMover.hpp:115
void SetMaxThrottle(double aThrottle)
Definition BrawlerMover.cpp:8303
virtual UtVec3d & Acceleration()
Definition BrawlerMover.hpp:118
double aoa(double xl, bool postall)
Definition BrawlerMover.cpp:5858
double gmxin
Definition BrawlerMover.hpp:825
virtual double AngleOfAttackFromDrag(double drag)
Definition BrawlerMover.hpp:153
void flacti(double &faxial, double &xl, double &flow, double &efpd)
Definition BrawlerMover.cpp:4491
virtual double AircraftMass()
Definition BrawlerMover.hpp:127
double mMaxGees
Definition BrawlerMover.hpp:239
void prjacc(const UtVec3d &xin, const UtVec3d &vin, const UtVec3d &a, double dt, UtVec3d &xout, UtVec3d &vout)
Definition BrawlerMover.cpp:2495
void thrdec(double thrtlx, double &fgg, double &fab, double &trpd)
Definition BrawlerMover.cpp:7120
BrawlerPlatform * mBrawlerPlatformPtr
Definition BrawlerMover.hpp:998
double almaxg
Definition BrawlerMover.hpp:831
void acarea()
Definition BrawlerMover.cpp:4609
Definition BrawlerPlatform.hpp:41
Copyrights Multiple, All Rights Reserved