frgmsonly

BEM

Sep 24th, 2018
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 4.23 KB | None | 0 0
  1. %% Exercise 3
  2. % TEP4175
  3. % Design of a Wind Turbine
  4.  
  5. % Wind turbine calculations using BEM
  6.  
  7. clear all;
  8. close all;
  9. format long
  10. load airfoildata
  11. clc;
  12.  
  13. % Fixed parameters
  14. rho=1.225;
  15. V=10;
  16. z=2;
  17.  
  18. % Variable parameters
  19. Cp_0=0.45;
  20. Rtip=0.45;
  21. Rinner=0.045;
  22. n=1000;
  23. TSR=7.5;
  24.  
  25. % Airfoil
  26. ALPHA=airfoildata(:,1);
  27. CL=airfoildata(:,2);
  28. CD=airfoildata(:,3);
  29.  
  30. CL = griddedInterpolant(ALPHA,CL);
  31. CD = griddedInterpolant(ALPHA,CD);
  32.  
  33.  
  34. %Iteration tolerances and limits
  35. itmax_Cp = 30;
  36. tol_Cp = 1e-4;
  37. tol_a_ap = 1e-9;
  38.  
  39.  
  40. % Run
  41. profile on
  42. [Cp, Power, Thrust, Torque, r, dT, dM, Lc] = calculate(rho, V, z, TSR,...
  43.     Cp_0, Rtip, Rinner, n, CL, CD, itmax_Cp, tol_Cp, tol_a_ap);
  44. profile off
  45. profile viewer
  46.  
  47. %1. Maximum power coefficient, Cp [1]
  48. Cp
  49. %2. Maximum power output, P [W]
  50. Power
  51. %3. Thrust force, T [N]
  52. Thrust
  53.  
  54. %4. Plots
  55. figure;
  56. plot(r/Rtip,dT,r/Rtip,dM)
  57. grid
  58. title('Blade loads')
  59. xlabel('r/R')
  60. ylabel('SI units')
  61. legend('Thrust [N]','Torque [Nm]', 'Location', 'Best')
  62. %5. Plot showing the chord length versus radius
  63. figure;
  64. plot(r/Rtip,Lc)
  65. title('Chord lengths')
  66. grid
  67. xlabel('r/R_{tip}')
  68. ylabel('Chord length [m]')
  69.  
  70. function [Cp, Power, Thrust, Torque, r, dT, dM, Lc] = calculate(rho, V, z, TSR,...
  71.     Cp_0, Rtip, Rinner, n, CL, CD, itmax_Cp, tol_Cp, tol_a_ap)
  72.  
  73.     dr=(Rtip-Rinner)/n;
  74.     r=(Rinner+dr/2:dr:Rtip);
  75.  
  76.     omega=TSR*V/Rtip;
  77.     rpm=30*omega/pi;
  78.     ac = 0.2;
  79.    
  80.     cost = @(x) -CL(x)/CD(x);
  81.    
  82.     alphaopt=fminsearch(cost,5);
  83.     Cl0=CL(alphaopt);
  84.     Cd0=CD(alphaopt);
  85.  
  86.     dA=pi*(((r+dr/2).^2 - (r-dr/2).^2))/z;
  87.     dP=0.5*rho*V.^3*dA*Cp_0;
  88.     dT=dP/omega;
  89.     dFt=dT./r;
  90.     U=omega*r;
  91.     Vrel=sqrt(U.^2+V.^2);
  92.     phi0=(360/(2*pi))*(atan(V./U));
  93.     Lc=(2*dFt)./(rho*dr*Vrel.^2.*(Cl0*sin(((2*pi)/360)*(phi0))-Cd0*cos(((2*pi)/360)*(phi0))));
  94.  
  95.     it=0;
  96.     Cp=1;
  97.     Cp_prev = 1.1;
  98.  
  99. %     figure
  100. %     hold on
  101. %     title('C_p convergence')
  102. %     xlabel('Iteration number')
  103. %     ylabel('C_p')
  104. %     grid
  105.  
  106.     while (abs(Cp-Cp_prev)>tol_Cp)
  107.  
  108.         it=it+1;
  109.  
  110.         if it==itmax_Cp
  111.             %disp('No Cp convergence')
  112.             break;
  113.         end
  114.  
  115.         [a,ap,F,Ca,Cr,phi,Cl,Cd]=a_ap(V,omega,r,CD,CL, ac,n,alphaopt,z,Rtip,Lc, tol_a_ap);
  116.  
  117.         Bep = (a/(1+ap))*4.*sin((phi));
  118.         Lc= Bep.*(pi*V./(Cl*omega));
  119.  
  120.         dT=z.*Ca*0.5*rho.*Lc.*((V^2.*(1-a).^2)./sin(phi).^2).*F*dr;
  121.         dM=z.*Cr*0.5*rho.*Lc.*(V.*(1-a)./sin(phi)).*(omega.*r.*(1+ap)./cos(phi)).*F*dr;
  122.  
  123.         Torque=sum(dM.*r);
  124.         Power=Torque*omega;
  125.         Cp_prev = Cp;
  126.         Cp=Power/(0.5*rho*V^3*pi*Rtip^2);
  127.         Thrust = sum(dT);
  128.  
  129. %         datavec(it,1) = Cp;
  130. %         datavec(it,2) = abs(Cp-Cp_prev);
  131. %         error = abs(Cp-Cp_prev);
  132. %         pause(0.0001)
  133. %         plot(datavec(:,1), '-r' )
  134.        
  135.     end
  136. end
  137.  
  138.  
  139. function [avec,apvec,Fvec,Cavec,Crvec,phivec,Clvec,Cdvec,thetavec]=...
  140.         a_ap(V,omega,r,CD,CL,ac,n,alphaopt,z,Rtip,Lc, tol_a_ap)
  141.  
  142.    
  143.     a0=0;
  144.     ap0=1;
  145.     sigma=z.*Lc./(2*pi*r);
  146.  
  147.     avec = zeros(1,n);
  148.     apvec = zeros(1,n);
  149.     Fvec = zeros(1,n);
  150.     Cavec = zeros(1,n);
  151.     Crvec = zeros(1,n);
  152.     phivec = zeros(1,n);
  153.     Clvec = zeros(1,n);
  154.     Cdvec = zeros(1,n);
  155.     thetavec = zeros(1,n);
  156.    
  157.     for i=1:n
  158.  
  159.         a=1/3;
  160.         ap=0;
  161.  
  162.         while (abs(a0-a)>tol_a_ap) && (abs(ap0-ap)>tol_a_ap)
  163.  
  164.             phi=atan((1-a)*V/((1+ap)*omega*r(i)));
  165.  
  166.             theta=(360/(2*pi))*(phi)-alphaopt;
  167.             alpha = (360/(2*pi))*(phi)- theta;
  168.            
  169.             Cl=CL(alpha);
  170.             Cd=CD(alpha);
  171.  
  172.             Ca=Cl*cos(phi)+Cd*sin(phi);
  173.             Cr=Cl*sin(phi)-Cd*cos(phi);
  174.  
  175.             F=2/pi*acos(exp(-z*(Rtip-r(i))/(2*r(i)*sin(phi))));
  176.             K=4*F*sin(phi)^2/(Ca*sigma(i));
  177.  
  178.             a0=a;
  179.             ap0=ap;
  180.             if a<ac
  181.                 a=1/(K+1);
  182.             else
  183.                 a=0.5*(2+K*(1-2*ac)-sqrt((K*(1-2*ac)+2)^2+4*(K*ac^2-1)));
  184.  
  185.             end
  186.             ap=1/(4*F*sin(phi)*cos(phi)/(Cr*sigma(i))-1);
  187.         end
  188.  
  189.         avec(i) = a;
  190.         apvec(i) = ap;
  191.         Fvec(i) = F;
  192.         Cavec(i) = Ca;
  193.         Crvec(i) = Cr;
  194.         phivec(i) = phi;
  195.         Clvec(i) = Cl;
  196.         Cdvec(i) = Cd;
  197.         thetavec(i) = theta;
  198.  
  199.     end
  200. end
Add Comment
Please, Sign In to add comment