94 get_coef(nm, m, na, a, alpha, mach, &c, NULL);
111 doublereal cl = 0., cl0 = 0., cd = 0., cd0 = 0., cm = 0.;
121 enum { V_X = 0, V_Y = 1, V_Z = 2, W_X = 3, W_Y = 4, W_Z = 5 };
127 v[V_Y] = W[V_Y] + c34*W[W_Z];
128 v[V_Z] = W[V_Z] - c34*W[W_Y];
130 vp2 = v[V_X]*v[V_X] + v[V_Y]*v[V_Y];
133 vtot =
sqrt(vp2 + v[V_Z]*v[V_Z]);
166 alpha =
atan2(-v[V_Y], v[V_X]);
167 OUTA->
alpha = alpha*RAD2DEG;
170 OUTA->
gamma = gamma*RAD2DEG;
172 if (
fabs(gamma) > M_PI_3) {
178 mach = (vtot*
sqrt(cosgam))/cs;
185 OUTA->
alpha, mach, &cl, &cl0);
187 OUTA->
alpha, mach, &cd, &cd0);
189 OUTA->
alpha, mach, &cm, NULL);
212 if (
fabs(alpha) > 1.e-6) {
213 doublereal dclatmp = (cl - cl0)/(alpha*cosgam);
214 if (dclatmp < dcla) {
218 cl = cl0 + dcla*alpha;
225 q = .5*rho*chord*vp2;
227 TNG[V_X] = -q*(cl*v[V_Y] + cd*v[V_X])/vp;
228 TNG[V_Y] = q*(cl*v[V_X] - cd*v[V_Y])/vp;
229 TNG[V_Z] = -q*cd0*v[V_Z]/vp;
231 TNG[W_Y] = -ca*TNG[V_Z];
232 TNG[W_Z] = q*chord*cm + ca*TNG[V_Y];
255 doublereal cl = 0., cl0 = 0., cd = 0., cd0 = 0., cm = 0.;
265 enum { V_X = 0, V_Y = 1, V_Z = 2, W_X = 3, W_Y = 4, W_Z = 5 };
271 v[V_Y] = W[V_Y] + c34*W[W_Z];
272 v[V_Z] = W[V_Z] - c34*W[W_Y];
274 vp2 = v[V_X]*v[V_X] + v[V_Y]*v[V_Y];
277 vtot =
sqrt(vp2 + v[V_Z]*v[V_Z]);
311 alpha =
atan2(-v[V_Y], v[V_X]);
312 OUTA->
alpha = alpha*RAD2DEG;
315 OUTA->
gamma = gamma*RAD2DEG;
317 if (
fabs(gamma) > M_PI_3) {
323 mach = (vtot*
sqrt(cosgam))/cs;
336 switch (unsteadyflag) {
343 OUTA->
alpha, mach, &cl, &cl0);
345 OUTA->
alpha, mach, &cd, &cd0);
347 OUTA->
alpha, mach, &cm, NULL);
370 if (
fabs(alpha) > 1.e-6) {
371 doublereal dclatmp = (cl - cl0)/(alpha*cosgam);
372 if (dclatmp < dcla) {
374 cl = cl0 + dcla*alpha;
393 S2, alphaN, alphaM, C1,
394 dcma, dclatan, ALF1, ALF2,
478 const doublereal ASN0 = .22689, ASM0 = .22689;
483 A = .5*chord*ALF1/vp;
484 B = .25*chord*chord*ALF2/vp2;
501 ASN = ASN0*(1. - mach);
502 ASM = ASM0*(1. - mach);
504 SGN =
fabs(alpha/ASN);
505 SGM =
fabs(alpha/ASM);
506 SGMAX = 1.839 - 70.33*
fabs(B);
517 DAN = (A*(PN[U_1] + PN[U_5]*SGN) + B*(PN[U_2] + PN[U_6]*SGN)
518 +
exp(-1072.52*A2)*(A*(PN[U_3] + PN[U_7]*SGN)
519 +A2*(PN[U_9] + PN[U10]*SGN))
520 +
exp(-40316.42*B2)*B*(PN[U_4] + PN[U_8]*SGN))*ASN;
521 DCN = A*(QN[U_1] + QN[U_3]*A2 + SGN*(QN[U_7] + QN[U_9]*A2 + QN[U13]*SGN)
522 + B2*(QN[U_5] + QN[U11]*SGN))
523 + B*(QN[U_2] + QN[U_4]*A2
524 + SGN*(QN[U_8] + QN[U10]*A2 + QN[U14]*SGN)
525 + B2*(QN[U_6] + QN[U12]*SGN));
526 DAM = (A*(PM[U_1] + PM[U_3]*A2 + PM[U_5]*B2 + PM[U10]*SGM + PM[U_7]*A)
527 + B*(PM[U_2] + PM[U_4]*B2 + PM[U_6]*A2
528 + PM[U11]*SGM + PM[U_8]*B + PM[U_9]*A))*ASM;
532 DCM = A*(QM[U_2] + QM[U_8]*A + SGM*(QM[U_4] + QM[U10]*A)
533 + S2*(QM[U_6] + QM[U12]*A))
534 + B*(QM[U_1] + QM[U_7]*B + SGM*(QM[U_3] + QM[U_9]*B)
535 + S2*(QM[U_5] + QM[U11]*B));
537 OUTA->
dan = DAN*RAD2DEG;
538 OUTA->
dam = DAM*RAD2DEG;
555 alphaN = (alpha - DAN)*RAD2DEG;
557 alphaN, mach, &cl, &cl0);
559 alphaN, mach, &cd, &cd0);
561 alphaM = (alpha - DAM)*RAD2DEG;
563 alphaM, mach, &cm, NULL);
570 if (
fabs(alphaN) > 1.e-6) {
571 dclatan = (cl - cl0)/(alphaN*cosgam);
573 cl = cl0 + dclatan*alphaN;
579 C1 = .9457/
sqrt(1. - mach*mach);
587 cn = dcla*DAN + DCN*C1;
590 cm += dcma*DAM + DCM*C1;
607 q = .5*rho*chord*vp2;
612 TNG[V_X] = -q*(cl*v[V_Y] + cd*v[V_X])/vp;
613 TNG[V_Y] = q*(cl*v[V_X] - cd*v[V_Y])/vp;
614 TNG[V_Z] = -q*cd0*v[V_Z]/vp;
616 TNG[W_Y] = -ca*TNG[V_Z];
617 TNG[W_Z] = q*chord*cm + ca*TNG[V_Y];
643 while (alpha < -180.) {
647 while (alpha >= 180.) {
657 im =
bisec_d(m, mach, 0, nm - 1);
664 ia0 =
bisec_d(a, 0., 0, na - 1);
667 ia =
bisec_d(a, alpha, 0, na - 1);
672 *c0 = a[na*(nm + 1) - 1];
674 }
else if (ia0 == -1) {
681 da = -a[ia0 - 1]/(a[ia0] - a[ia0 - 1]);
682 *c0 = (1. - da)*a[na*nm + ia0 - 1] + da*a[na*nm + ia0];
687 *c = a[na*(nm + 1) - 1];
689 }
else if (ia == -1) {
696 da = (alpha - a[ia - 1])/(a[ia] - a[ia - 1]);
697 *c = (1. - da)*a[na*nm + ia - 1] + da*a[na*nm + ia];
700 }
else if (im == -1) {
705 }
else if (ia0 == -1) {
712 da = -a[ia0 - 1]/(a[ia0] - a[ia0 - 1]);
713 *c0 = (1. - da)*a[na + ia0 - 1] + da*a[na + ia0];
720 }
else if (ia == -1) {
727 da = (alpha - a[ia - 1])/(a[ia] - a[ia - 1]);
728 *c = (1. - da)*a[na + ia - 1] + da*a[na + ia];
735 d = (mach - m[im - 1])/(m[im] - m[im - 1]);
739 *c0 = (1. - d)*a[na*(im + 1) - 1] + d*a[na*(im + 2) - 1];
742 a1 = (1. - d)*a[na*im + ia0 - 1] + d*a[na*(im + 1) + ia0 - 1];
743 a2 = (1. - d)*a[na*im + ia0] + d*a[na*(im + 1) + ia0];
744 da = -a[ia0 - 1]/(a[ia0] - a[ia0 - 1]);
745 *c0 = (1. - da)*a1 + da*a2;
750 *c = (1. - d)*a[na*(im + 1) - 1] + d*a[na*(im + 2) - 1];
752 }
else if (ia == -1) {
753 *c = (1. - d)*a[na*im] + d*a[na*(im + 1)];
759 a1 = (1. - d)*a[na*im + ia - 1] + d*a[na*(im + 1) + ia - 1];
760 a2 = (1. - d)*a[na*im + ia] + d*a[na*(im + 1) + ia];
761 da = (alpha - a[ia - 1])/(a[ia] - a[ia - 1]);
762 *c = (1. - da)*a1 + da*a2;
780 im =
bisec_d(m, mach, 0, nm - 1);
785 }
else if (im == -1) {
792 d = (mach - m[im - 1])/(m[im] - m[im - 1]);
794 return (1. - d)*s[2*nm + im - 1] + d*s[2*nm + im];
811 im =
bisec_d(m, mach, 0, nm - 1);
821 doublereal d = (mach - m[im - 1])/(m[im] - m[im - 1]);
823 *dcpa = (1. - d)*s[2*nm + im - 1] + d*s[2*nm + im];
824 *dasp = (1. - d)*s[im - 1] + d*s[im];
825 *dasm = (1. - d)*s[nm + im - 1] + d*s[nm + im];
GradientExpression< UnaryExpr< FuncExp, Expr > > exp(const GradientExpression< Expr > &u)
GradientExpression< BinaryExpr< FuncPow, LhsExpr, RhsExpr > > pow(const GradientExpression< LhsExpr > &u, const GradientExpression< RhsExpr > &v)
doublereal sound_celerity
int bisec_d(doublereal *v, doublereal val, int lb, int ub)
int c81_aerod2_u(doublereal *W, const vam_t *VAM, doublereal *TNG, outa_t *OUTA, c81_data *data, long unsteadyflag)
GradientExpression< UnaryExpr< FuncFabs, Expr > > fabs(const GradientExpression< Expr > &u)
static int get_coef(int nm, doublereal *m, int na, doublereal *a, doublereal alpha, doublereal mach, doublereal *c, doublereal *c0)
doublereal force_position
int c81_aerod2(doublereal *W, const vam_t *VAM, doublereal *TNG, outa_t *OUTA, c81_data *data)
doublereal c81_data_get_coef(int nm, doublereal *m, int na, doublereal *a, doublereal alpha, doublereal mach)
GradientExpression< UnaryExpr< FuncSqrt, Expr > > sqrt(const GradientExpression< Expr > &u)
static std::stack< cleanup * > c
GradientExpression< UnaryExpr< FuncCos, Expr > > cos(const GradientExpression< Expr > &u)
static const doublereal a
static doublereal get_dcla(int nm, doublereal *m, doublereal *s, doublereal mach)
GradientExpression< BinaryExpr< FuncAtan2, LhsExpr, RhsExpr > > atan2(const GradientExpression< LhsExpr > &u, const GradientExpression< RhsExpr > &v)