View raw

1 %wing shear flow 2 clear all; 3 close all; 4 5 Vx = 1; Vz = 1; My = 1; %test loads will be applied individually 6 7 8 %Ixz = -Ixz; 9 10 %define webs 11 12 %% web cell 1 13 14 %upper webs 15 numStringers = numTopStringers; 16 stringerGap = upperStringerGap; 17 webThickness = t_upper; 18 tempStringers = topStringers; 19 20 for i=1:(numStringers+1) 21 web(i).xStart = sparCaps(1).posX + stringerGap*(i-1); 22 web(i).xEnd = sparCaps(1).posX + stringerGap*(i); 23 web(i).thickness = webThickness; 24 web(i).zStart = get_z(web(i).xStart/chord,1)*chord; 25 web(i).zEnd = get_z(web(i).xEnd/chord,1)*chord; 26 if i==1 27 web(i).dp_area = sparCaps(1).area; 28 web(i).dP_X = 0; 29 web(i).dP_Z = 0; 30 web(i).qPrime_X = 0; 31 web(i).qPrime_Z = 0; 32 else 33 web(i).dp_area = tempStringers(i-1).area; 34 dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ; 35 web(i).dP_X = get_dp(dx,dz,Vx,0,Ix,Iz,Ixz,web(i).dp_area); %just Vx 36 web(i).dP_Z = get_dp(dx,dz,0,Vz,Ix,Iz,Ixz,web(i).dp_area); %just Vz 37 web(i).qPrime_X = web(i-1).qPrime_X - web(i).dP_X; 38 web(i).qPrime_Z = web(i-1).qPrime_Z - web(i).dP_Z; 39 end 40 tempInt = get_int(web(i).xStart/chord,web(i).xEnd/chord,1)*chord^2; %integral of airfoil function 41 triangle1 = abs( (web(i).xStart - sparCaps(1).posX)*web(i).zStart/2); 42 triangle2 = abs((web(i).xEnd - sparCaps(1).posX)*web(i).zEnd/2); 43 web(i).Area = tempInt + triangle1 - triangle2; 44 web(i).ds = get_ds(web(i).xStart/chord,web(i).xEnd/chord,1)*chord; 45 web(i).dS_over_t = web(i).ds / web(i).thickness; 46 47 web(i).q_dS_over_t_X = web(i).qPrime_X * web(i).dS_over_t; 48 web(i).q_dS_over_t_Z = web(i).qPrime_Z * web(i).dS_over_t; 49 web(i).two_A_qprime_X = 2*web(i).Area*web(i).qPrime_X; 50 web(i).two_A_qprime_Z = 2*web(i).Area*web(i).qPrime_Z; 51 web(i).qp_dx_X = web(i).qPrime_X *(web(i).xEnd-web(i).xStart); 52 web(i).qp_dx_Z = web(i).qPrime_Z *(web(i).xEnd-web(i).xStart); 53 web(i).qp_dz_X = web(i).qPrime_X *(web(i).zEnd-web(i).zStart); 54 web(i).qp_dz_Z = web(i).qPrime_Z *(web(i).zEnd-web(i).zStart); 55 end 56 webTop = web; 57 web = []; 58 59 %rear spar 60 i=1; 61 web(i).xStart = sparCaps(3).posX; 62 web(i).xEnd = sparCaps(4).posX; 63 web(i).thickness = t_rearSpar; 64 web(i).zStart = sparCaps(3).posZ; 65 web(i).zEnd = sparCaps(4).posZ; 66 web(i).dp_area = sparCaps(3).area; 67 dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ; 68 web(i).dP_X = get_dp(dx,dz,Vx,0,Ix,Iz,Ixz,web(i).dp_area); 69 web(i).dP_Z = get_dp(dx,dz,0,Vz,Ix,Iz,Ixz,web(i).dp_area); 70 web(i).qPrime_X = webTop(numTopStringers+1).qPrime_X - web(i).dP_X; 71 web(i).qPrime_Z = webTop(numTopStringers+1).qPrime_Z - web(i).dP_Z; 72 73 web(i).Area = (sparCaps(3).posX-sparCaps(1).posX)*sparCaps(3).posZ/2 + ... 74 abs((sparCaps(3).posX-sparCaps(1).posX)*sparCaps(4).posZ/2); 75 web(i).ds = abs(sparCaps(3).posZ - sparCaps(4).posZ); 76 web(i).dS_over_t = web(i).ds / web(i).thickness; 77 78 web(i).q_dS_over_t_X = web(i).qPrime_X * web(i).dS_over_t; 79 web(i).q_dS_over_t_Z = web(i).qPrime_Z * web(i).dS_over_t; 80 web(i).two_A_qprime_X = 2*web(i).Area*web(i).qPrime_X; 81 web(i).two_A_qprime_Z = 2*web(i).Area*web(i).qPrime_Z; 82 web(i).qp_dx_X = web(i).qPrime_X *(web(i).xEnd-web(i).xStart); 83 web(i).qp_dx_Z = web(i).qPrime_Z *(web(i).xEnd-web(i).xStart); 84 web(i).qp_dz_X = web(i).qPrime_X *(web(i).zEnd-web(i).zStart); 85 web(i).qp_dz_Z = web(i).qPrime_Z *(web(i).zEnd-web(i).zStart); 86 87 webRearSpar = web; 88 web = []; 89 90 91 %lower webs 92 numStringers = numBottomStringers; 93 stringerGap = lowerStringerGap; 94 webThickness = t_lower; 95 tempStringers = bottomStringers; 96 97 for i=1:(numStringers+1) 98 web(i).xStart = sparCaps(4).posX - stringerGap*(i-1); 99 web(i).xEnd = sparCaps(4).posX - stringerGap*(i); 100 web(i).thickness = webThickness; 101 web(i).zStart = get_z(web(i).xStart/chord,0)*chord; 102 web(i).zEnd = get_z(web(i).xEnd/chord,0)*chord; 103 dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ; 104 if i==1 105 web(i).dp_area = sparCaps(4).area; 106 web(i).dP_X = get_dp(dx,dz,Vx,0,Ix,Iz,Ixz,web(i).dp_area); 107 web(i).dP_Z = get_dp(dx,dz,0,Vz,Ix,Iz,Ixz,web(i).dp_area); 108 web(i).qPrime_X = webRearSpar.qPrime_X - web(i).dP_X; 109 web(i).qPrime_Z = webRearSpar.qPrime_Z - web(i).dP_Z; 110 else 111 web(i).dp_area = tempStringers(i-1).area; 112 web(i).dP_X = get_dp(dx,dz, Vx,0,Ix,Iz,Ixz,web(i).dp_area); 113 web(i).dP_Z = get_dp(dx,dz, 0,Vz,Ix,Iz,Ixz,web(i).dp_area); 114 web(i).qPrime_X = web(i-1).qPrime_X - web(i).dP_X; 115 web(i).qPrime_Z = web(i-1).qPrime_Z - web(i).dP_Z; 116 end 117 118 tempInt = get_int(web(i).xEnd/chord,web(i).xStart/chord,0)*chord^2; %integral of airfoil function 119 triangle2 = abs((web(i).xStart - sparCaps(1).posX)*web(i).zStart/2); 120 triangle1 = abs((web(i).xEnd - sparCaps(1).posX)*web(i).zEnd/2); 121 web(i).Area = tempInt + triangle1 - triangle2; 122 web(i).ds = get_ds(web(i).xStart/chord,web(i).xEnd/chord,0)*chord; 123 web(i).dS_over_t = web(i).ds / web(i).thickness; 124 125 web(i).q_dS_over_t_X = web(i).qPrime_X * web(i).dS_over_t; 126 web(i).q_dS_over_t_Z = web(i).qPrime_Z * web(i).dS_over_t; 127 web(i).two_A_qprime_X = 2*web(i).Area*web(i).qPrime_X; 128 web(i).two_A_qprime_Z = 2*web(i).Area*web(i).qPrime_Z; 129 web(i).qp_dx_X = web(i).qPrime_X*(web(i).xEnd-web(i).xStart); 130 web(i).qp_dx_Z = web(i).qPrime_Z*(web(i).xEnd-web(i).xStart); 131 web(i).qp_dz_X = web(i).qPrime_X*(web(i).zEnd-web(i).zStart); 132 web(i).qp_dz_Z = web(i).qPrime_Z*(web(i).zEnd-web(i).zStart); 133 134 %web(i).radCurv = ... Example: get_curve(web(i).xStart,web(i).xEnd,1) 135 end 136 webBottom = web; 137 web = []; 138 139 %front Spar 140 i=1; 141 web(i).xStart = sparCaps(2).posX; 142 web(i).xEnd = sparCaps(1).posX; 143 web(i).thickness = t_frontSpar; 144 web(i).zStart = sparCaps(2).posZ; 145 web(i).zEnd = sparCaps(1).posZ; 146 web(i).dp_area = sparCaps(2).area; 147 dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ; 148 web(i).dP_X = get_dp(dx,dz,Vx,0,Ix,Iz,Ixz,web(i).dp_area); 149 web(i).dP_Z = get_dp(dx,dz,0,Vz,Ix,Iz,Ixz,web(i).dp_area); 150 web(i).qPrime_X = webBottom(numBottomStringers+1).qPrime_X - web(i).dP_X; 151 web(i).qPrime_Z = webBottom(numBottomStringers+1).qPrime_Z - web(i).dP_Z; 152 web(i).Area = 0; 153 web(i).ds = abs(sparCaps(2).posZ - sparCaps(1).posZ); 154 web(i).dS_over_t = web(i).ds / web(i).thickness; 155 156 web(i).q_dS_over_t_X = web(i).qPrime_X * web(i).dS_over_t; 157 web(i).q_dS_over_t_Z = web(i).qPrime_Z * web(i).dS_over_t; 158 web(i).two_A_qprime_X = 2*web(i).Area*web(i).qPrime_X; 159 web(i).two_A_qprime_Z = 2*web(i).Area*web(i).qPrime_Z; 160 web(i).qp_dx_X = web(i).qPrime_X *(web(i).xEnd-web(i).xStart); 161 web(i).qp_dx_Z = web(i).qPrime_Z *(web(i).xEnd-web(i).xStart); 162 web(i).qp_dz_X = web(i).qPrime_X *(web(i).zEnd-web(i).zStart); 163 web(i).qp_dz_Z = web(i).qPrime_Z *(web(i).zEnd-web(i).zStart); 164 165 webFrontSpar = web; 166 web = []; 167 168 169 170 171 %% web cell 2 172 173 %lower nose webs 174 numStringers = numNoseBottomStringers; 175 stringerGap = lowerNoseStringerGap; 176 webThickness = t_lower_front; 177 tempStringers = noseBottomStringers; 178 179 for i=1:(numStringers+1) 180 web(i).xStart = sparCaps(2).posX - stringerGap*(i-1); 181 web(i).xEnd = sparCaps(2).posX - stringerGap*(i); 182 web(i).thickness = webThickness; 183 web(i).zStart = get_z(web(i).xStart/chord,0)*chord; 184 web(i).zEnd = get_z(web(i).xEnd/chord,0)*chord; 185 dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ; 186 187 if i==1 188 web(i).dp_area = sparCaps(2).area; 189 web(i).dP_X = 0; 190 web(i).dP_Z = 0; 191 web(i).qPrime_X = 0; 192 web(i).qPrime_Z = 0; 193 else 194 web(i).dp_area = tempStringers(i-1).area; 195 web(i).dP_X = get_dp(dx,dz,Vx,0,Ix,Iz,Ixz,web(i).dp_area); 196 web(i).dP_Z = get_dp(dx,dz,0,Vz,Ix,Iz,Ixz,web(i).dp_area); 197 web(i).qPrime_X = web(i-1).qPrime_X - web(i).dP_X; 198 web(i).qPrime_Z = web(i-1).qPrime_Z - web(i).dP_Z; 199 end 200 tempInt = get_int(web(i).xEnd/chord,web(i).xStart/chord,0)*chord^2; %integral of airfoil function 201 triangle1 = abs((web(i).xStart - sparCaps(2).posX)*web(i).zStart/2); 202 triangle2 = abs((web(i).xEnd - sparCaps(2).posX)*web(i).zEnd/2); 203 web(i).Area = tempInt + triangle1 - triangle2; 204 web(i).ds = get_ds(web(i).xStart/chord,web(i).xEnd/chord,0)*chord; 205 web(i).dS_over_t = web(i).ds / web(i).thickness; 206 207 web(i).q_dS_over_t_X = web(i).qPrime_X * web(i).dS_over_t; 208 web(i).q_dS_over_t_Z = web(i).qPrime_Z * web(i).dS_over_t; 209 web(i).two_A_qprime_X = 2*web(i).Area*web(i).qPrime_X; 210 web(i).two_A_qprime_Z = 2*web(i).Area*web(i).qPrime_Z; 211 web(i).qp_dx_X = web(i).qPrime_X *(web(i).xEnd-web(i).xStart); 212 web(i).qp_dx_Z = web(i).qPrime_Z *(web(i).xEnd-web(i).xStart); 213 web(i).qp_dz_X = web(i).qPrime_X *(web(i).zEnd-web(i).zStart); 214 web(i).qp_dz_Z = web(i).qPrime_Z *(web(i).zEnd-web(i).zStart); 215 216 %web(i).radCurv = ... Example: get_curve(web(i).xStart,web(i).xEnd,1) 217 end 218 webLowerNose = web; 219 web = []; 220 221 %upper nose webs 222 numStringers = numNoseTopStringers; 223 stringerGap = upperNoseStringerGap; 224 webThickness = t_upper_front; 225 tempStringers = noseTopStringers; 226 227 for i=1:(numStringers+1) 228 web(i).xStart = stringerGap*(i-1); 229 web(i).xEnd = stringerGap*(i); 230 web(i).thickness = webThickness; 231 web(i).zStart = get_z(web(i).xStart/chord,1)*chord; 232 web(i).zEnd = get_z(web(i).xEnd/chord,1)*chord; 233 dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ; 234 if i==1 235 web(i).dp_area = 0; 236 web(i).dP_X = 0; 237 web(i).dP_Z = 0; 238 web(i).qPrime_X = webLowerNose(numNoseBottomStringers+1).qPrime_X - web(i).dP_X; 239 web(i).qPrime_Z = webLowerNose(numNoseBottomStringers+1).qPrime_Z - web(i).dP_Z; 240 else 241 web(i).dp_area = tempStringers(i-1).area; 242 web(i).dP_X = get_dp(dx,dz,Vx,0,Ix,Iz,Ixz,web(i).dp_area); 243 web(i).dP_Z = get_dp(dx,dz,0,Vz,Ix,Iz,Ixz,web(i).dp_area); 244 web(i).qPrime_X = web(i-1).qPrime_X - web(i).dP_X; 245 web(i).qPrime_Z = web(i-1).qPrime_Z - web(i).dP_Z; 246 end 247 tempInt = get_int(web(i).xStart/chord,web(i).xEnd/chord,1)*chord^2; %integral of airfoil function 248 triangle2 = abs((web(i).xStart - sparCaps(2).posX)*web(i).zStart/2); 249 triangle1 = abs((web(i).xEnd - sparCaps(2).posX)*web(i).zEnd/2); 250 web(i).Area = tempInt + triangle1 - triangle2; 251 web(i).ds = get_ds(web(i).xStart/chord,web(i).xEnd/chord,1)*chord; 252 web(i).dS_over_t = web(i).ds / web(i).thickness; 253 254 web(i).q_dS_over_t_X = web(i).qPrime_X * web(i).dS_over_t; 255 web(i).q_dS_over_t_Z = web(i).qPrime_Z * web(i).dS_over_t; 256 web(i).two_A_qprime_X = 2*web(i).Area*web(i).qPrime_X; 257 web(i).two_A_qprime_Z = 2*web(i).Area*web(i).qPrime_Z; 258 web(i).qp_dx_X = web(i).qPrime_X *(web(i).xEnd-web(i).xStart); 259 web(i).qp_dx_Z = web(i).qPrime_Z *(web(i).xEnd-web(i).xStart); 260 web(i).qp_dz_X = web(i).qPrime_X *(web(i).zEnd-web(i).zStart); 261 web(i).qp_dz_Z = web(i).qPrime_Z *(web(i).zEnd-web(i).zStart); 262 263 end 264 webUpperNose = web; 265 web = []; 266 267 268 %front Spar 269 i=1; 270 web(i).xStart = sparCaps(1).posX; 271 web(i).xEnd = sparCaps(2).posX; 272 web(i).thickness = t_frontSpar; 273 web(i).zStart = sparCaps(1).posZ; 274 web(i).zEnd = sparCaps(2).posZ; 275 web(i).dp_area = sparCaps(1).area; 276 dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ; 277 278 web(i).dP_X = get_dp(dx,dz,Vx,0,Ix,Iz,Ixz,web(i).dp_area); 279 web(i).dP_Z = get_dp(dx,dz,0,Vz,Ix,Iz,Ixz,web(i).dp_area); 280 web(i).qPrime_X = webUpperNose(numNoseTopStringers+1).qPrime_X - web(i).dP_X; 281 web(i).qPrime_Z = webUpperNose(numNoseTopStringers+1).qPrime_Z - web(i).dP_Z; 282 web(i).Area = 0; 283 web(i).ds = abs(sparCaps(1).posZ - sparCaps(2).posZ); 284 web(i).dS_over_t = web(i).ds / web(i).thickness; 285 web(i).q_dS_over_t_X = web(i).qPrime_X * web(i).dS_over_t; 286 web(i).q_dS_over_t_Z = web(i).qPrime_Z * web(i).dS_over_t; 287 web(i).two_A_qprime_X = 2*web(i).Area*web(i).qPrime_X; 288 web(i).two_A_qprime_Z = 2*web(i).Area*web(i).qPrime_Z; 289 web(i).qp_dx_X = web(i).qPrime_X *(web(i).xEnd-web(i).xStart); 290 web(i).qp_dx_Z = web(i).qPrime_Z *(web(i).xEnd-web(i).xStart); 291 web(i).qp_dz_X = web(i).qPrime_X *(web(i).zEnd-web(i).zStart); 292 web(i).qp_dz_Z = web(i).qPrime_Z *(web(i).zEnd-web(i).zStart); 293 294 webFrontSparCell2 = web; 295 web = []; 296 297 298 %check that q'*dx sums up to Vx 299 300 Fx = sum([webTop.qp_dx_X])+webRearSpar.qp_dx_X+ sum([webBottom.qp_dx_X])+webFrontSpar.qp_dx_X; %cell 1 301 Fx = Fx + sum([webLowerNose.qp_dx_X])+ sum([webUpperNose.qp_dx_X]); %cell 2 302 Fx 303 Fz = sum([webTop.qp_dz_X])+webRearSpar.qp_dz_X+ sum([webBottom.qp_dz_X])+webFrontSpar.qp_dz_X; %cell 1 304 Fz = Fz + sum([webLowerNose.qp_dz_X])+ sum([webUpperNose.qp_dz_X]); %cell 2 305 Fz 306 307 %check that q'*dz sums up to Vz 308 309 310 Fx = sum([webTop.qp_dx_Z])+webRearSpar.qp_dx_Z+ sum([webBottom.qp_dx_Z])+webFrontSpar.qp_dx_Z; %cell 1 311 Fx = Fx + sum([webLowerNose.qp_dx_Z])+ sum([webUpperNose.qp_dx_Z]); %cell 2 312 Fx 313 Fz = sum([webTop.qp_dz_Z])+webRearSpar.qp_dz_Z+ sum([webBottom.qp_dz_Z])+webFrontSpar.qp_dz_Z; %cell 1 314 Fz = Fz + sum([webLowerNose.qp_dz_Z])+ sum([webUpperNose.qp_dz_Z]); %cell 2 315 Fz 316 317 %% 318 319 % sum up the ds/t and q*ds/t to solve 2 equations, 2 unknowns 320 321 % [A]*[q1s q2s] = B 322 323 A11 = sum([webTop.dS_over_t])+webRearSpar.dS_over_t+ sum([webBottom.dS_over_t])+webFrontSpar.dS_over_t; 324 A22 = sum([webLowerNose.dS_over_t])+ sum([webUpperNose.dS_over_t])+webFrontSparCell2.dS_over_t; 325 A12 = -webFrontSpar.dS_over_t; 326 A21 = -webFrontSparCell2.dS_over_t; 327 328 B1_X = sum([webTop.q_dS_over_t_X])+webRearSpar.q_dS_over_t_X+ sum([webBottom.q_dS_over_t_X])+webFrontSpar.q_dS_over_t_X; 329 B2_X = sum([webLowerNose.q_dS_over_t_X])+ sum([webUpperNose.q_dS_over_t_X])+webFrontSparCell2.q_dS_over_t_X; 330 B1_Z = sum([webTop.q_dS_over_t_Z])+webRearSpar.q_dS_over_t_Z+ sum([webBottom.q_dS_over_t_Z])+webFrontSpar.q_dS_over_t_Z; 331 B2_Z = sum([webLowerNose.q_dS_over_t_Z])+ sum([webUpperNose.q_dS_over_t_Z])+webFrontSparCell2.q_dS_over_t_Z; 332 333 Amat = [A11 A12; A21 A22]; 334 Bmat_X = -[B1_X;B2_X]; 335 Bmat_Z = -[B1_Z;B2_Z]; 336 337 qs_X = inv(Amat)*Bmat_X; 338 qs_Z = inv(Amat)*Bmat_Z; 339 340 341 342 sum_2_a_q_X = sum([webTop.two_A_qprime_X])+webRearSpar.two_A_qprime_X+ sum([webBottom.two_A_qprime_X]); %cell 1 qprimes 343 sum_2_a_q_X = sum_2_a_q_X + sum([webLowerNose.two_A_qprime_X])+ sum([webUpperNose.two_A_qprime_X]); %cell 2 qprimes 344 sum_2_a_q_X = sum_2_a_q_X + 2*qs_X(1)*(sum([webTop.Area])+webRearSpar.Area+ sum([webBottom.Area])); 345 sum_2_a_q_X = sum_2_a_q_X + 2*qs_X(2)*(sum([webLowerNose.Area])+ sum([webUpperNose.Area])); 346 347 sum_2_a_q_Z = sum([webTop.two_A_qprime_Z])+webRearSpar.two_A_qprime_Z+ sum([webBottom.two_A_qprime_Z]); %cell 1 qprimes 348 sum_2_a_q_Z = sum_2_a_q_Z + sum([webLowerNose.two_A_qprime_Z])+ sum([webUpperNose.two_A_qprime_Z]); %cell 2 qprimes 349 sum_2_a_q_Z = sum_2_a_q_Z + 2*qs_Z(1)*(sum([webTop.Area])+webRearSpar.Area+ sum([webBottom.Area])); 350 sum_2_a_q_Z = sum_2_a_q_Z + 2*qs_Z(2)*(sum([webLowerNose.Area])+ sum([webUpperNose.Area])); 351 352 %shear center 353 sc.posX = sum_2_a_q_Z / Vz + frontSpar*chord; 354 sc.posZ = - sum_2_a_q_X / Vx; 355 356 357 % now consider the torque representing shifting the load from the quarter 358 % chord to the SC (need to check signs on these moments) 359 360 torque_Z = Vz*(sc.posX - 0.25*chord); 361 torque_X = -Vx*sc.posZ; 362 363 364 Area1 = sum([webTop.Area]) + webRearSpar.Area + sum([webBottom.Area]); 365 %check area 366 Area1_check = get_int(frontSpar,backSpar,1)*chord^2 + get_int(frontSpar,backSpar,0)*chord^2; 367 368 Area2 = sum([webLowerNose.Area]) + sum([webUpperNose.Area]); 369 Area2_check = get_int(0,frontSpar,1)*chord^2 + get_int(0,frontSpar,0)*chord^2; 370 371 372 %for twist equation (see excel spreadsheet example) 373 374 q1t_over_q2t = (A22/Area2 + webFrontSpar.dS_over_t/Area1)/(A11/Area1 + webFrontSpar.dS_over_t/Area2); 375 376 q2t = torque_X/(2*Area1*q1t_over_q2t + 2*Area2); 377 q1t = q2t*q1t_over_q2t; 378 qt_X = [q1t;q2t]; 379 380 q2t = torque_Z/(2*Area1*q1t_over_q2t + 2*Area2); 381 q1t = q2t*q1t_over_q2t; 382 qt_Z = [q1t;q2t]; 383 384 385 386 % --- - add up all shear flows: qtot = (qPrime + qs) + qt 387 388 389 390 391 %--- insert force balance to check total shear flows --- 392 393 % --- -- 394 395 396 %end 397 398 sc 399 400 401 %plotting airfoil cross-section 402 403 xChord = 0:.01:1; 404 xChord = xChord*chord; 405 upperSurface = zeros(1,length(xChord)); 406 lowerSurface = zeros(1,length(xChord)); 407 408 for i=1:length(xChord) 409 upperSurface(i) = get_z(xChord(i)/chord,1)*chord; 410 lowerSurface(i) = get_z(xChord(i)/chord,0)*chord; 411 end 412 413 figure; hold on; axis equal; grid on; 414 %plot(xChord,z_camber,'-') 415 plot(xChord,upperSurface,'-k','linewidth',2) 416 plot(xChord,lowerSurface,'-k','linewidth',2) 417 plot([0 1],[0 0],'--k','linewidth',1) 418 419 420 for i = 1:length(webTop) 421 vecX = [frontSpar*chord webTop(i).xStart webTop(i).xEnd]; 422 vecZ = [0 webTop(i).zStart webTop(i).zEnd]; 423 fill(vecX,vecZ,[0.9 0.9 0.9]) 424 end 425 426 for i = 1:length(webBottom) 427 vecX = [frontSpar*chord webBottom(i).xStart webBottom(i).xEnd]; 428 vecZ = [0 webBottom(i).zStart webBottom(i).zEnd]; 429 fill(vecX,vecZ,[0.9 0.9 0.9]) 430 end 431 432 for i = 1:length(webUpperNose) 433 vecX = [frontSpar*chord webUpperNose(i).xStart webUpperNose(i).xEnd]; 434 vecZ = [0 webUpperNose(i).zStart webUpperNose(i).zEnd]; 435 fill(vecX,vecZ,[0.7 0.9 1.0]) 436 end 437 438 for i = 1:length(webLowerNose) 439 vecX = [frontSpar*chord webLowerNose(i).xStart webLowerNose(i).xEnd]; 440 vecZ = [0 webLowerNose(i).zStart webLowerNose(i).zEnd]; 441 fill(vecX,vecZ,[0.7 0.9 1.0]) 442 end 443 444 vecX = [frontSpar*chord sparCaps(3).posX sparCaps(4).posX]; 445 vecZ = [0 sparCaps(3).posZ sparCaps(4).posZ]; 446 fill(vecX,vecZ,[0.9 0.9 0.9]) 447 448 449 sparCapSize = 18; 450 stringerSize = 18; 451 plot([sparCaps(1).posX sparCaps(2).posX],[sparCaps(1).posZ sparCaps(2).posZ],'-k','linewidth',2) 452 plot([sparCaps(3).posX sparCaps(4).posX],[sparCaps(3).posZ sparCaps(4).posZ],'-k','linewidth',2) 453 plot([sparCaps.posX],[sparCaps.posZ],'.b','markersize',sparCapSize) 454 plot([topStringers.posX],[topStringers.posZ],'.r','markersize',stringerSize) 455 plot([bottomStringers.posX],[bottomStringers.posZ],'.r','markersize',stringerSize) 456 plot([noseTopStringers.posX],[noseTopStringers.posZ],'.r','markersize',stringerSize) 457 plot([noseBottomStringers.posX],[noseBottomStringers.posZ],'.r','markersize',stringerSize) 458 plot(centroid.posX,centroid.posZ,'.k','markerSize',18) 459 plot(sc.posX,sc.posZ,'.g','markersize',18) 460