frgmsonly

BEM_GPU

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