void VLiftCoeff (double aoa, double M, double Re, double *cl, double *cm, double *cd)
{
int i;
const int nabsc = 19;
// Angle of attack -180, -160, -140, -120, -100, -80, -60, -40, -20, 0, 20, 40, 60, 80, 100, 120, 140, 160, 180,
static const double AOA[nabsc]= {-180*RAD, -160*RAD, -140*RAD, -120*RAD, -100*RAD, -80*RAD, -60*RAD, -40*RAD, -20*RAD, 0*RAD, 20*RAD, 40*RAD, 60*RAD, 80*RAD, 100*RAD, 120*RAD, 140*RAD, 160*RAD, 180*RAD};
static const double CL[nabsc] = { 0, -0.172, -0.011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0.011, +0.172, 0};
static const double CM[nabsc] = {-0.00014, -0.00037, -0.001, -0.005, -0.006, -0.006, -0.005, -0.003, -0.002, 0, +0.002, +0.003, +0.005, +0.006, +0.006, +0.005, +0.001, +0.00037, +0.00014};
for (i = 0; i < nabsc-1 && AOA[i+1] < aoa; i++);
double f = (aoa-AOA[i]) / (AOA[i+1]-AOA[i]);
*cl = CL[i] + (CL[i+1]-CL[i]) * f; // aoa-dependent lift coefficient
*cm = CM[i] + (CM[i+1]-CM[i]) * f; // aoa-dependent moment coefficient
double saoa = sin(aoa);
double pd = 0.21 + 0.01*saoa*saoa; // profile drag
*cd = pd + oapiGetInducedDrag (*cl, 6.82, 0.4);
// profile drag + (lift-)induced drag
};
// 2. horizontal lift component (vertical stabiliser and body)
void HLiftCoeff (double beta, double M, double Re, double *cl, double *cm, double *cd)
{
int i;
const int nabsc = 19;
static const double BETA[nabsc] = {-180*RAD, -160*RAD, -140*RAD, -120*RAD, -100*RAD, -80*RAD, -60*RAD, -40*RAD, -20*RAD, 0*RAD, 20*RAD, 40*RAD, 60*RAD, 80*RAD, 100*RAD, 120*RAD, 140*RAD, 160*RAD, 180*RAD};
static const double CL[nabsc] = { 0, -0.15, -0.05, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.05, 0.15, 0};
for (i = 0; i < nabsc-1 && BETA[i+1] < beta; i++);
*cl = CL[i] + (CL[i+1]-CL[i]) * (beta-BETA[i]) / (BETA[i+1]-BETA[i]);
*cm = 0;
*cd = 0.21 + oapiGetInducedDrag (*cl, 6.82, 0.04);
};