26#ifndef _ACF_UTILS_PERF_H_
27#define _ACF_UTILS_PERF_H_
39#define KELVIN2C(k) ((k) - 273.15)
40#define C2KELVIN(c) ((c) + 273.15)
41#define FAH2C(f) (((f) - 32) * 0.555555)
42#define C2FAH(c) (((c) * 1.8) + 32)
43#define FAH2KELVIN(f) (((f) + 459.67) * 0.5555555555)
44#define KELVIN2FAH(k) (((k) * 1.8) - 459.67)
49#define FEET2MET(x) ((x) * 0.3048)
50#define MET2FEET(x) ((x) * 3.2808398950131)
51#define NM2MET(x) ((x) * 1852)
52#define MET2NM(x) ((x) / 1852.0)
53#define MET2MILES(x) (MET2FEET(x) / 5280.0)
54#define MILES2MET(x) FEET2MET((x) * 5280.0)
55#define KT2MPS(k) (NM2MET(k) / 3600.0)
56#define MPS2KT(k) (MET2NM(k) * 3600.0)
57#define MPS2KPH(k) ((k) * 3.6)
58#define KPH2MPS(k) ((k) / 3.6)
59#define MPS2MPH(k) ((k) / 0.44704)
60#define MPH2MPS(k) ((k) * 0.44704)
61#define FPM2MPS(f) FEET2MET((f) / 60.0)
62#define MPS2FPM(m) MET2FEET((m) * 60.0)
64#define INHG2PA(p) ((p) * (101325 / 29.92))
65#define PA2INHG(p) ((p) * (29.92 / 101325))
67#define RADSEC2RPM(r) (((r) / (2.0 * M_PI)) * 60.0)
68#define RPM2RADSEC(r) (((r) / 60.0) * (2.0 * M_PI))
70#define USG2LIT(usg) ((usg) * 3.785411784)
71#define LIT2USG(lit) ((lit) / 3.785411784)
72#define LBS2KG(lbs) ((lbs) * 0.45359237)
73#define KG2LBS(kg) ((kg) / 0.45359237)
75#define LBF2NEWTON(lb) (LBS2KG(lb) * EARTH_GRAVITY)
76#define NEWTON2LBF(f) (KG2LBS((f) / EARTH_GRAVITY))
78#define WATT2HP(W) ((W) * 0.001341022)
79#define HP2WATT(W) ((W) / 0.001341022)
84#define HPA2PA(x) ((x) * 100)
85#define PA2HPA(x) ((x) / 100)
86#define PSI2PA(x) ((x) * 6894.73326075122482308111)
87#define PA2PSI(x) ((x) / 6894.73326075122482308111)
92#define ISA_SL_TEMP_C 15.0
93#define ISA_SL_TEMP_K 288.15
94#define ISA_SL_PRESS 101325.0
95#define ISA_SL_DENS 1.225
96#define ISA_TLR_PER_1000FT 1.98
97#define ISA_TLR_PER_1M 0.0065
98#define ISA_SPEED_SOUND 340.3
99#define ISA_TP_ALT 36089
104#define EARTH_GRAVITY 9.80665
105#define EARTH_SID_DAY 86164.0905
106#define EARTH_ROT_RATE (360.0 / EARTH_SID_DAY)
107#define DRY_AIR_MOL 0.02896968
109#define R_univ 8.314462618
110#define R_spec 287.058
111#define BOLTZMANN_CONST 5.67E-8
114#define MASS2GFORCE(m) ((m) * EARTH_GRAVITY)
119#define JETA_KG2GAL(kg) ((kg) / 3.08447722)
120#define JETA_GAL2KG(gal) ((gal) * 3.08447722)
146#define FLT_PERF_NUM_SPD_LIMS 2
195 double cl_flap_max_aoa;
201 perf_table_set_t *clb_tables;
202 perf_table_set_t *crz_tables;
203 perf_table_set_t *des_tables;
213API_EXPORT
void lacf_set_perf_step_debug(bool_t flag);
214API_EXPORT bool_t lacf_get_perf_step_debug(
void);
216#define acft_perf_parse ACFSYM(acft_perf_parse)
217API_EXPORT
acft_perf_t *acft_perf_parse(
const char *filename);
218#define acft_perf_destroy ACFSYM(acft_perf_destroy)
219API_EXPORT
void acft_perf_destroy(
acft_perf_t *perf);
221#define flt_perf_new ACFSYM(flt_perf_new)
223#define flt_perf_destroy ACFSYM(flt_perf_destroy)
224API_EXPORT
void flt_perf_destroy(
flt_perf_t *flt);
226#define eng_max_thr_avg ACFSYM(eng_max_thr_avg)
227API_EXPORT
double eng_max_thr_avg(
const flt_perf_t *flt,
228 const acft_perf_t *acft,
double alt1,
double alt2,
double ktas,
229 double qnh,
double isadev,
double tp_alt);
231#define accelclb2dist ACFSYM(accelclb2dist)
233 double isadev,
double qnh,
double tp_alt,
double accel_alt,
235 double alt1,
double kcas1,
vect2_t wind1,
236 double alt2,
double kcas2,
vect2_t wind2,
237 double flap_ratio,
double mach_lim, accelclb_t type,
double *burnp,
239#define dist2accelclb ACFSYM(dist2accelclb)
242 double accel_alt,
double fuel,
vect2_t dir,
244 vect2_t wind,
double alt_tgt,
double kcas_tgt,
double mach_lim,
245 double dist_tgt, accelclb_t type,
double *burnp,
double *ttg_out);
246#define decel2dist ACFSYM(decel2dist)
248 double isadev,
double qnh,
double tp_alt,
double fuel,
249 double alt,
double kcas1,
double kcas2,
double dist_tgt,
250 double *kcas_out,
double *burn_out);
251#define perf_crz2burn ACFSYM(perf_crz2burn)
252API_EXPORT
double perf_crz2burn(
double isadev,
double tp_alt,
double qnh,
253 double alt_ft,
double spd, bool_t is_mach,
double hdg,
vect2_t wind1,
256#define perf_des2burn ACFSYM(perf_des2burn)
258 double isadev,
double qnh,
double fuel,
double hdgt,
double dist_nm,
260 double alt1_ft,
double kcas1,
vect2_t wind1,
261 double alt2_ft,
double kcas2,
vect2_t wind2,
264#define perf_TO_spd ACFSYM(perf_TO_spd)
267#define acft_get_sfc ACFSYM(acft_get_sfc)
269 double thr,
double alt,
double ktas,
double qnh,
double isadev,
272#define perf_get_turn_rate ACFSYM(perf_get_turn_rate)
273API_EXPORT
double perf_get_turn_rate(
double bank_ratio,
double gs_kts,
278#define alt2press ACFSYM(alt2press)
279API_EXPORT
double alt2press(
double alt_ft,
double qnh_Pa);
280#define press2alt ACFSYM(press2alt)
281API_EXPORT
double press2alt(
double press_Pa,
double qnh_Pa);
285#define alt2press_baro ACFSYM(alt2press_baro)
286API_EXPORT
double alt2press_baro(
double alt_m,
double p0_Pa,
double T0_K,
288#define press2alt_baro ACFSYM(press2alt_baro)
289API_EXPORT
double press2alt_baro(
double p_Pa,
double p0_Pa,
double T0_K,
292#define alt2fl ACFSYM(alt2fl)
293API_EXPORT
double alt2fl(
double alt,
double qnh);
294#define fl2alt ACFSYM(fl2alt)
295API_EXPORT
double fl2alt(
double alt,
double qnh);
297#define ktas2mach ACFSYM(ktas2mach)
298API_EXPORT
double ktas2mach(
double ktas,
double oat);
299#define mach2ktas ACFSYM(mach2ktas)
300API_EXPORT
double mach2ktas(
double mach,
double oat);
302#define ktas2kcas ACFSYM(ktas2kcas)
303API_EXPORT
double ktas2kcas(
double ktas,
double pressure,
double oat);
304#define kcas2ktas ACFSYM(kcas2ktas)
305API_EXPORT
double kcas2ktas(
double kcas,
double pressure,
double oat);
306#define impact_press2kcas ACFSYM(impact_press2kcas)
307API_EXPORT
double impact_press2kcas(
double impact_pressure);
309#define kcas2mach ACFSYM(kcas2mach)
310API_EXPORT
double kcas2mach(
double kcas,
double alt_ft,
double qnh,
double oat);
311#define mach2kcas ACFSYM(mach2kcas)
312API_EXPORT
double mach2kcas(
double mach,
double alt_ft,
double qnh,
double oat);
314#define mach2keas ACFSYM(mach2keas)
315API_EXPORT
double mach2keas(
double mach,
double press);
316#define keas2mach ACFSYM(keas2mach)
317API_EXPORT
double keas2mach(
double keas,
double press);
319#define sat2tat ACFSYM(sat2tat)
320API_EXPORT
double sat2tat(
double sat,
double mach);
321#define tat2sat ACFSYM(tat2sat)
322API_EXPORT
double tat2sat(
double tat,
double mach);
324#define sat2isadev ACFSYM(sat2isadev)
325API_EXPORT
double sat2isadev(
double fl,
double sat);
326#define isadev2sat ACFSYM(isadev2sat)
327API_EXPORT
double isadev2sat(
double fl,
double isadev);
329#define speed_sound ACFSYM(speed_sound)
330#define speed_sound_gas ACFSYM(speed_sound_gas)
331API_EXPORT
double speed_sound(
double oat);
332API_EXPORT
double speed_sound_gas(
double T,
double gamma,
double R);
334#define air_density ACFSYM(air_density)
335API_EXPORT
double air_density(
double pressure,
double oat);
337#define gas_density ACFSYM(gas_density)
338API_EXPORT
double gas_density(
double pressure,
double oat,
double gas_const);
340#define impact_press ACFSYM(impact_press)
341API_EXPORT
double impact_press(
double mach,
double pressure);
343#define dyn_press ACFSYM(dyn_press)
344API_EXPORT
double dyn_press(
double ktas,
double press,
double oat);
346#define dyn_gas_press ACFSYM(dyn_gas_press)
347API_EXPORT
double dyn_gas_press(
double ktas,
double press,
double oat,
350#define static_press ACFSYM(static_press)
351API_EXPORT
double static_press(
double rho,
double oat);
353#define static_gas_press ACFSYM(static_gas_press)
354API_EXPORT
double static_gas_press(
double rho,
double oat,
double gas_const);
356#define adiabatic_heating_gas ACFSYM(adiabatic_heating_gas)
357API_EXPORT
double adiabatic_heating_gas(
double press_ratio,
double start_temp,
360#define adiabatic_heating ACFSYM(adiabatic_heating)
361API_EXPORT
double adiabatic_heating(
double press_ratio,
double start_temp);
367#define air_kin_visc ACFSYM(air_kin_visc)
368API_EXPORT
double air_kin_visc(
double temp_K);
376#define air_reynolds ACFSYM(air_reynolds)
377API_EXPORT
double air_reynolds(
double vel,
double chord,
double temp_K);
383API_EXPORT
double lacf_gamma_air(
double T);
389API_EXPORT
double lacf_therm_cond_air(
double T);
395API_EXPORT
double lacf_therm_cond_aluminum(
double T);
401API_EXPORT
double lacf_therm_cond_glass(
double T);
411#define earth_gravity_accurate ACFSYM(earth_gravity_accurate)
412API_EXPORT
double earth_gravity_accurate(
double lat,
double alt);
An optional type for wrapping a non-NAN double value.