]> git.mxchange.org Git - flightgear.git/blob - src/FDM/UIUCModel/uiuc_iced_nonlin.cpp
Fixed calibrated airspeed output so that it accounts for wind.
[flightgear.git] / src / FDM / UIUCModel / uiuc_iced_nonlin.cpp
1 //     SIS Twin Otter Iced aircraft Nonlinear model\r
2 //     Version 020409\r
3 //     read readme_020212.doc for information\r
4
5 #include "uiuc_iced_nonlin.h"
6
7 void Calc_Iced_Forces()
8         {
9         // alpha in deg
10           double alpha;
11           double de;
12         double eta_ref_wing = 0.08;                      // eta of iced data used for curve fit
13         double eta_ref_tail = 0.20; //changed from 0.12 10-23-2002
14         double eta_wing;
15         //double delta_CL;                              // CL_clean - CL_iced;
16         //double delta_CD;                              // CD_clean - CD_iced;
17         //double delta_Cm;                              // CM_clean - CM_iced;
18         double delta_Cm_a;                              // (Cm_clean - Cm_iced) as a function of AoA;
19         double delta_Cm_de;                             // (Cm_clean - Cm_iced) as a function of de;
20         double delta_Ch_a;
21         double delta_Ch_e;
22         double KCL;
23         double KCD;
24         double KCm_alpha;
25         double KCm_de;
26         double KCh;
27         double CL_diff;
28         double CD_diff;
29         
30         
31         
32         alpha = Alpha*RAD_TO_DEG;
33         de = elevator*RAD_TO_DEG;
34         // lift fits
35         if (alpha < 16)
36                 {
37                 delta_CL = (0.088449 + 0.004836*alpha - 0.0005459*alpha*alpha +
38                             4.0859e-5*pow(alpha,3));
39                 }
40         else
41                 {
42                 delta_CL = (-11.838 + 1.6861*alpha - 0.076707*alpha*alpha +
43                                         0.001142*pow(alpha,3));
44                 }
45         KCL = -delta_CL/eta_ref_wing;
46         eta_wing = 0.5*(eta_wing_left + eta_wing_right);
47         delta_CL = eta_wing*KCL;
48         
49                 
50         // drag fit
51         delta_CD = (-0.0089 + 0.001578*alpha - 0.00046253*pow(alpha,2) +
52                     -4.7511e-5*pow(alpha,3) + 2.3384e-6*pow(alpha,4));
53         KCD = -delta_CD/eta_ref_wing;
54         delta_CD = eta_wing*KCD;
55         
56         // pitching moment fit
57         delta_Cm_a = (-0.01892 - 0.0056476*alpha + 1.0205e-5*pow(alpha,2)
58                       - 4.0692e-5*pow(alpha,3) + 1.7594e-6*pow(alpha,4));
59                                         
60         delta_Cm_de = (-0.014928 - 0.0037783*alpha + 0.00039086*pow(de,2)
61                        - 1.1304e-5*pow(de,3) - 1.8439e-6*pow(de,4));
62                                         
63         delta_Cm = delta_Cm_a + delta_Cm_de;
64         KCm_alpha = delta_Cm_a/eta_ref_wing;
65         KCm_de = delta_Cm_de/eta_ref_tail;
66         delta_Cm = (0.75*eta_wing + 0.25*eta_tail)*KCm_alpha + (eta_tail)*KCm_de;
67         
68         // hinge moment
69         if (alpha < 13)
70           {
71             delta_Ch_a = (-0.0012862 - 0.00022705*alpha + 1.5911e-5*pow(alpha,2)
72                           + 5.4536e-7*pow(alpha,3));
73           }
74         else
75           {
76             delta_Ch_a = 0;
77           }
78         delta_Ch_e = -0.0011851 - 0.00049924*de;
79         delta_Ch = -(delta_Ch_a + delta_Ch_e);
80         KCh = -delta_Ch/eta_ref_tail;
81         delta_Ch = eta_tail*KCh;
82         
83         // rolling moment
84         CL_diff = (eta_wing_left - eta_wing_right)*KCL;
85         delta_Cl = CL_diff/8.; // 10-23-02 Previously 4
86
87         //yawing moment
88         CD_diff = (eta_wing_left - eta_wing_right)*KCD;
89         delta_Cn = CD_diff/8.;
90         
91         }
92
93 void add_ice_effects()
94 {
95   CD_clean = -1*CX*Cos_alpha*Cos_beta - CY*Sin_beta - CZ*Sin_alpha*Cos_beta;
96   CY_clean = -1*CX*Cos_alpha*Sin_beta + CY*Cos_beta - CZ*Sin_alpha*Sin_beta;
97   CL_clean = CX*Sin_alpha - CZ*Cos_alpha;
98   Cm_clean = Cm;
99   Cl_clean = Cl;
100   Cn_clean = Cn;
101   Ch_clean = Ch;
102
103   CD_iced = CD_clean + delta_CD;
104   CY_iced = CY_clean;
105   CL_iced = CL_clean + delta_CL;
106   Cm_iced = Cm_clean + delta_Cm;
107   Cl_iced = Cl_clean + delta_Cl;
108   Cn_iced = Cn_clean + delta_Cn;
109   //Ch_iced = Ch_clean + delta_Ch;
110
111   CD = CD_iced;
112   CY = CY_iced;
113   CL = CL_iced;
114   Cm = Cm_iced;
115   Cl = Cl_iced;
116   Cn = Cn_iced;
117   //Ch = Ch_iced;
118
119   CX = -1*CD*Cos_alpha*Cos_beta - CY*Cos_alpha*Sin_beta + CL*Sin_alpha;
120   CY = -1*CD*Sin_beta + CY*Cos_beta;
121   CZ = -1*CD*Sin_alpha*Cos_beta - CY*Sin_alpha*Sin_beta - CL*Cos_alpha;
122
123 }