extern COCKPIT cockpit_;
-SCALAR interp(SCALAR *y_table, SCALAR *x_table, int Ntable, SCALAR x)
+ SCALAR CLadot;
+ SCALAR CLq;
+ SCALAR CLde;
+ SCALAR CLob;
+
+
+ SCALAR Cdob;
+ SCALAR Cda; /*Not used*/
+ SCALAR Cdde;
+
+ SCALAR Cma;
+ SCALAR Cmadot;
+ SCALAR Cmq;
+ SCALAR Cmob;
+ SCALAR Cmde;
+
+ SCALAR Clbeta;
+ SCALAR Clp;
+ SCALAR Clr;
+ SCALAR Clda;
+ SCALAR Cldr;
+
+ SCALAR Cnbeta;
+ SCALAR Cnp;
+ SCALAR Cnr;
+ SCALAR Cnda;
+ SCALAR Cndr;
+
+ SCALAR Cybeta;
+ SCALAR Cyp;
+ SCALAR Cyr;
+ SCALAR Cyda;
+ SCALAR Cydr;
+
+ /*nondimensionalization quantities*/
+ /*units here are ft and lbs */
+ SCALAR cbar; /*mean aero chord ft*/
+ SCALAR b; /*wing span ft */
+ SCALAR Sw; /*wing planform surface area ft^2*/
+ SCALAR rPiARe; /*reciprocal of Pi*AR*e*/
+ SCALAR lbare; /*elevator moment arm MAC*/
+
+ SCALAR Weight; /*lbs*/
+ SCALAR MaxTakeoffWeight,EmptyWeight;
+ SCALAR Cg; /*%MAC*/
+ SCALAR Zcg; /*%MAC*/
+
+
+ SCALAR CLwbh,CL,cm,cd,cn,cy,croll,cbar_2V,b_2V,qS,qScbar,qSb;
+ SCALAR CLo,Cdo,Cmo;
+
+ SCALAR F_X_wind,F_Y_wind,F_Z_wind;
+
+ SCALAR long_trim;
+
+
+ SCALAR elevator, aileron, rudder;
+
+
+ SCALAR Flap_Position;
+
+ int Flaps_In_Transit;
+
+static SCALAR interp(SCALAR *y_table, SCALAR *x_table, int Ntable, SCALAR x)
{
SCALAR slope;
int i=1;
}
-void aero( SCALAR dt, int Initialize ) {
+void c172_aero( SCALAR dt, int Initialize ) {
- static int init = 0;
- static int flap_dir=0;
+ // static int init = 0;
+ static int fi=0;
static SCALAR lastFlapHandle=0;
static SCALAR Ai;
static SCALAR CLtable[NCL]={-0.22,0.25,1.02,1.252,1.354,1.44,1.466,1.298,0.97};
static SCALAR flap_ind[Ndf]={0,10,20,30};
+ static SCALAR flap_times[Ndf]={0,4,2,2};
static SCALAR dCLf[Ndf]={0,0.20,0.30,0.35};
static SCALAR dCdf[Ndf]={0,0.0021,0.0085,0.0191};
static SCALAR dCmf[Ndf]={0,-0.0654,-0.0981,-0.114};
if(Flap_handle < flap_ind[0])
{
- Flap_handle=flap_ind[0];
+ fi=0;
+ Flap_handle=flap_ind[0];
+ lastFlapHandle=Flap_handle;
Flap_Position=flap_ind[0];
}
- else if(Flap_handle > flap_ind[3])
+ else if(Flap_handle > flap_ind[Ndf-1])
{
- Flap_handle=flap_ind[3];
- Flap_Position=flap_ind[3];
+ fi=Ndf-1;
+ Flap_handle=flap_ind[fi];
+ lastFlapHandle=Flap_handle;
+ Flap_Position=flap_ind[fi];
}
else
{
-
- if((Flap_handle != lastFlapHandle) && (dt > 0))
+ if(dt <= 0)
+ Flap_Position=Flap_handle;
+ else
{
- Flaps_In_Transit=1;
-
- }
- else if(dt <= 0)
- Flap_Position=Flap_handle;
-
- lastFlapHandle=Flap_handle;
- if((Flaps_In_Transit) && (dt > 0))
- {
- if(Flap_Position < 10)
- flap_transit_rate = 2.5;
- else
- flap_transit_rate=5;
-
+ if(Flap_handle != lastFlapHandle)
+ {
+ Flaps_In_Transit=1;
+ }
if(Flaps_In_Transit)
{
+ fi=0;
+ while(flap_ind[fi] < Flap_handle) { fi++; }
if(Flap_Position < Flap_handle)
- flap_dir=1;
+ {
+ if(flap_times[fi] > 0)
+ flap_transit_rate=(flap_ind[fi] - flap_ind[fi-1])/flap_times[fi];
+ else
+ flap_transit_rate=(flap_ind[fi] - flap_ind[fi-1])/5;
+ }
else
- flap_dir=-1;
-
+ {
+ if(flap_times[fi+1] > 0)
+ flap_transit_rate=(flap_ind[fi] - flap_ind[fi+1])/flap_times[fi+1];
+ else
+ flap_transit_rate=(flap_ind[fi] - flap_ind[fi+1])/5;
+ }
if(fabs(Flap_Position - Flap_handle) > dt*flap_transit_rate)
- Flap_Position+=flap_dir*flap_transit_rate*dt;
-
- if(fabs(Flap_Position - Flap_handle) < dt*flap_transit_rate)
+ Flap_Position+=flap_transit_rate*dt;
+ else
{
Flaps_In_Transit=0;
Flap_Position=Flap_handle;
}
}
- }
+ }
+ lastFlapHandle=Flap_handle;
}
if(Aft_trim) long_trim = long_trim - trim_inc;
/* sum coefficients */
- CLwbh = interp(CLtable,alpha_ind,NCL,Alpha);
+ CLwbh = interp(CLtable,alpha_ind,NCL,Std_Alpha);
/* printf("CLwbh: %g\n",CLwbh);
*/
CLo = CLob + interp(dCLf,flap_ind,Ndf,Flap_Position);
- CL = CLo + CLwbh + (CLadot*Alpha_dot + CLq*Theta_dot)*cbar_2V + CLde*elevator;
+ CL = CLo + CLwbh + (CLadot*Std_Alpha_dot + CLq*Theta_dot)*cbar_2V + CLde*elevator;
cd = Cdo + rPiARe*Ai*Ai*CL*CL + Cdde*elevator;
- cy = Cybeta*Beta + (Cyp*P_body + Cyr*R_body)*b_2V + Cyda*aileron + Cydr*rudder;
+ cy = Cybeta*Std_Beta + (Cyp*P_body + Cyr*R_body)*b_2V + Cyda*aileron + Cydr*rudder;
- cm = Cmo + Cma*Alpha + (Cmq*Q_body + Cmadot*Alpha_dot)*cbar_2V + Cmde*(elevator);
- cn = Cnbeta*Beta + (Cnp*P_body + Cnr*R_body)*b_2V + Cnda*aileron + Cndr*rudder;
- croll=Clbeta*Beta + (Clp*P_body + Clr*R_body)*b_2V + Clda*aileron + Cldr*rudder;
+ cm = Cmo + Cma*Std_Alpha + (Cmq*Q_body + Cmadot*Std_Alpha_dot)*cbar_2V + Cmde*(elevator);
+ cn = Cnbeta*Std_Beta + (Cnp*P_body + Cnr*R_body)*b_2V + Cnda*aileron + Cndr*rudder;
+ croll=Clbeta*Std_Beta + (Clp*P_body + Clr*R_body)*b_2V + Clda*aileron + Cldr*rudder;
/* printf("aero: CL: %7.4f, Cd: %7.4f, Cm: %7.4f, Cy: %7.4f, Cn: %7.4f, Cl: %7.4f\n",CL,cd,cm,cy,cn,croll);
*/