Code covered by the BSD License  

Highlights from
Co-Blade: Software for Analysis and Design of Composite Blades

image thumbnail

Co-Blade: Software for Analysis and Design of Composite Blades

by

 

18 Sep 2012 (Updated )

Analysis and design of composite blades for wind and hydrokinetic turbines

dispCorrectionFactor(zFrac, NUM_SEC, I1, I2)
function disp_CF = dispCorrectionFactor(zFrac, NUM_SEC, I1, I2)
% This function calculates correction factors for displacment of tapered cantilever beams.  
% Code written and validated by Matthew Trudeau, Master's Student, PSU ARL
% Trudeau, M.G., "Structural and Hydrodynamic Design Optimization Enhancements
%                 with Application to Marine Hydrokinetic Turbine Blades," Master's
%                 Thesis, The Pennsylvania State University, 2011.

Iratio1 = zeros(NUM_SEC, 1);    
Iratio2 = zeros(NUM_SEC, 1);    
for n = 1:NUM_SEC
    Iratio1(n) = I1(1) / I1(n);      
    Iratio2(n) = I2(1) / I2(n);
end

%Average the two Iratios together
Iratio = (Iratio1 + Iratio2) ./ 2;

%% This entire loop interpolates from the correction values for deflection of tapered beams.  
%  W. Young and R. Budynas, Roark's Formulas for Stress and Strain. McGraw-Hill, 7th ed., 2001.
%  this uses n = 4 in Table 8.11(d) of the above book 

interpl_Iratio1      = zeros(NUM_SEC, 1);   
interpl_Iratio2      = zeros(NUM_SEC, 1);  
interpl_y_correction = zeros(NUM_SEC, 1); 
for i = 1:NUM_SEC  
    if Iratio(i) <= 0.5  
        if zFrac(i) > 0 && zFrac(i) < 0.25
            x1  = 0;
            x2  = 0.25;
            y1  = 3.864;
            y2  = 3.532;
            y11 = 1.976;
            y22 = 1.886;
            
            x = zFrac(i);
            interpl_Iratio1(i) = y1  +   (y2-y1)/(x2-x1) * (x-x1);
            interpl_Iratio2(i) = y11 + (y22-y11)/(x2-x1) * (x-x1);
             
        elseif zFrac(i) > 0.25 && zFrac(i) < 0.5
            x1  = 0.25;
            x2  = 0.5;
            y1  = 3.532;
            y2  = 3.2;
            y11 = 1.886;
            y22 = 1.796;
            
            x = zFrac(i);
            interpl_Iratio1(i) = y1  +   (y2-y1)/(x2-x1) * (x-x1);
            interpl_Iratio2(i) = y11 + (y22-y11)/(x2-x1) * (x-x1);
        
        elseif zFrac(i) > 0.5 && zFrac(i) < 0.75
            x1  = 0.5;
            x2  = 0.75;
            y1  = 3.2;
            y2  = 2.971;
            y11 = 1.796;
            y22 = 1.727;
            
            x = zFrac(i);
            interpl_Iratio1(i) = y1  +   (y2-y1)/(x2-x1) * (x-x1);
            interpl_Iratio2(i) = y11 + (y22-y11)/(x2-x1) * (x-x1);
       
        elseif zFrac(i) > 0.75 && zFrac(i) < 1
            x1  = 0.75;
            x2  = 1;
            y1  = 2.971;
            y2  = 2.828;
            y11 = 1.727;
            y22 = 1.682;
            
            x = zFrac(i);
            interpl_Iratio1(i) = y1  +   (y2-y1)/(x2-x1) * (x-x1);
            interpl_Iratio2(i) = y11 + (y22-y11)/(x2-x1) * (x-x1);
       
        elseif zFrac(i) == 0.25
            interpl_Iratio1(i) = 3.532;
            interpl_Iratio2(i) = 1.886;
        
        elseif zFrac(i) == 0.5    
            interpl_Iratio1(i) = 3.2;
            interpl_Iratio2(i) = 1.796;
     
        elseif zFrac(i) == 0.75
            interpl_Iratio1(i) = 2.971;
            interpl_Iratio2(i) = 1.727;
           
        elseif zFrac(i) == 1    
            interpl_Iratio1(i) = 2.828;
            interpl_Iratio2(i) = 1.682;
           
        end
        
        x1 = 0;
        x2 = 0.5;
        y1 = interpl_Iratio1(i);
        y2 = interpl_Iratio2(i);
        x  = Iratio(i);
        interpl_y_correction(i) = y1 + (y2-y1)/(x2-x1) * (x-x1);
   
    elseif Iratio(i) > 0.5 && Iratio(i) <= 2
        if zFrac(i) > 0 && zFrac(i) < 0.25
            x1  = 0;
            x2  = 0.25;
            y1  = 1.976;
            y2  = 1.886;
            y11 = 0.514;
            y22 = 0.527;
            
            x = zFrac(i);
            interpl_Iratio1(i) = y1  +   (y2-y1)/(x2-x1) * (x-x1);
            interpl_Iratio2(i) = y11 + (y22-y11)/(x2-x1) * (x-x1);
             
        elseif zFrac(i) > 0.25 && zFrac(i) < 0.5
            x1  = 0.25;
            x2  = 0.5;
            y1  = 1.886;
            y2  = 1.796;
            y11 = 0.527;
            y22 = 0.553;
            
            x = zFrac(i);
            interpl_Iratio1(i) = y1  +   (y2-y1)/(x2-x1) * (x-x1);
            interpl_Iratio2(i) = y11 + (y22-y11)/(x2-x1) * (x-x1);
        
        elseif zFrac(i) > 0.5 && zFrac(i) < 0.75
            x1  = 0.5;
            x2  = 0.75;
            y1  = 1.796;
            y2  = 1.727;
            y11 = 0.553;
            y22 = 0.576;
            
            x = zFrac(i);
            interpl_Iratio1(i) = y1  +   (y2-y1)/(x2-x1) * (x-x1);
            interpl_Iratio2(i) = y11 + (y22-y11)/(x2-x1) * (x-x1);
       
        elseif zFrac(i) > 0.75 && zFrac(i) < 1
            x1  = 0.75;
            x2  = 1;
            y1  = 1.727;
            y2  = 1.682;
            y11 = 0.576;
            y22 = 0.595;
            
            x = zFrac(i);
            interpl_Iratio1(i) = y1  +   (y2-y1)/(x2-x1) * (x-x1);
            interpl_Iratio2(i) = y11 + (y22-y11)/(x2-x1) * (x-x1);    
        
        elseif zFrac(i) == 0.25
            interpl_Iratio1(i) = 1.886;
            interpl_Iratio2(i) = 0.527;
        
        elseif zFrac(i) == 0.5    
            interpl_Iratio1(i) = 1.796;
            interpl_Iratio2(i) = 0.553;
     
        elseif zFrac(i) == 0.75
            interpl_Iratio1(i) = 1.727;
            interpl_Iratio2(i) = 0.576;
           
        elseif zFrac(i) == 1    
            interpl_Iratio1(i) = 1.682;
            interpl_Iratio2(i) = 0.595;
           
        end
        
        x1 = 0.5;
        x2 = 2;
        y1 = interpl_Iratio1(i);
        y2 = interpl_Iratio2(i);
        x  = Iratio(i);
        interpl_y_correction(i) = y1 + (y2-y1)/(x2-x1) * (x-x1);
        
    elseif Iratio(i) > 2 && Iratio(i) <= 4
        if zFrac(i) > 0 && zFrac(i) < 0.25
            x1  = 0;
            x2  = 0.25;
            y1  = 0.514;
            y2  = 0.527;
            y11 = 0.249;
            y22 = 0.276;
            
            x = zFrac(i);
            interpl_Iratio1(i) = y1  +   (y2-y1)/(x2-x1) * (x-x1);
            interpl_Iratio2(i) = y11 + (y22-y11)/(x2-x1) * (x-x1);
        
         elseif zFrac(i) > 0.25 && zFrac(i) < 0.5
            x1  = 0.25;
            x2  = 0.5;
            y1  = 0.527;
            y2  = 0.553;
            y11 = 0.276;
            y22 = 0.303;
            
            x = zFrac(i);
            interpl_Iratio1(i) = y1  +   (y2-y1)/(x2-x1) * (x-x1);
            interpl_Iratio2(i) = y11 + (y22-y11)/(x2-x1) * (x-x1);
        
        elseif zFrac(i) > 0.5 && zFrac(i) < 0.75
            x1  = 0.5;
            x2  = 0.75;
            y1  = 0.553;
            y2  = 0.576;
            y11 = 0.303;
            y22 = 0.330;
            
            x = zFrac(i);
            interpl_Iratio1(i) = y1  +   (y2-y1)/(x2-x1) * (x-x1);
            interpl_Iratio2(i) = y11 + (y22-y11)/(x2-x1) * (x-x1);
       
        elseif zFrac(i) > 0.75 && zFrac(i) < 1
            x1  = 0.75;
            x2  = 1;
            y1  = 0.576;
            y2  = 0.595;
            y11 = 0.330;
            y22 = 0.354;
            
            x = zFrac(i);
            interpl_Iratio1(i) = y1  +   (y2-y1)/(x2-x1) * (x-x1);
            interpl_Iratio2(i) = y11 + (y22-y11)/(x2-x1) * (x-x1);
       
        elseif zFrac(i) == 0.25
            interpl_Iratio1(i) = 0.527;
            interpl_Iratio2(i) = 0.276;
        
        elseif zFrac(i) == 0.5    
            interpl_Iratio1(i) = 0.553;
            interpl_Iratio2(i) = 0.303;
     
        elseif zFrac(i) == 0.75
            interpl_Iratio1(i) = 0.576;
            interpl_Iratio2(i) = 0.330;
           
        elseif zFrac(i) == 1    
            interpl_Iratio1(i) = 0.595;
            interpl_Iratio2(i) = 0.354;
           
        end
        
        x1 = 2;
        x2 = 4;
        y1 = interpl_Iratio1(i);
        y2 = interpl_Iratio2(i);
        x  = Iratio(i);
        interpl_y_correction(i) = y1 + (y2-y1)/(x2-x1) * (x-x1);  

    elseif Iratio(i) > 4 && Iratio(i) <= 8
        if zFrac(i) > 0 && zFrac(i) < 0.25
            x1  = 0;
            x2  = 0.25;
            y1  = 0.249;
            y2  = 0.276;
            y11 = 0.121;
            y22 = 0.143;
            
            x = zFrac(i);
            interpl_Iratio1(i) = y1  +   (y2-y1)/(x2-x1) * (x-x1);
            interpl_Iratio2(i) = y11 + (y22-y11)/(x2-x1) * (x-x1);
             
         elseif zFrac(i) > 0.25 && zFrac(i) < 0.5
            x1  = 0.25;
            x2  = 0.5;
            y1  = 0.276;
            y2  = 0.303;
            y11 = 0.143;
            y22 = 0.165;
            
            x = zFrac(i);
            interpl_Iratio1(i) = y1  +   (y2-y1)/(x2-x1) * (x-x1);
            interpl_Iratio2(i) = y11 + (y22-y11)/(x2-x1) * (x-x1);
        
        elseif zFrac(i) > 0.5 && zFrac(i) < 0.75
            x1  = 0.5;
            x2  = 0.75;
            y1  = 0.303;
            y2  = 0.330;
            y11 = 0.165;
            y22 = 0.188;
            
            x = zFrac(i);
            interpl_Iratio1(i) = y1  +   (y2-y1)/(x2-x1) * (x-x1);
            interpl_Iratio2(i) = y11 + (y22-y11)/(x2-x1) * (x-x1);
       
        elseif zFrac(i) > 0.75 && zFrac(i) < 1
            x1  = 0.75;
            x2  = 1;
            y1  = 0.330;
            y2  = 0.354;
            y11 = 0.188;
            y22 = 0.210;
            
            x = zFrac(i);
            interpl_Iratio1(i) = y1  +   (y2-y1)/(x2-x1) * (x-x1);
            interpl_Iratio2(i) = y11 + (y22-y11)/(x2-x1) * (x-x1);
       
        elseif zFrac(i) == 0.25
            interpl_Iratio1(i) = 0.276;
            interpl_Iratio2(i) = 0.143;
        
        elseif zFrac(i) == 0.5    
            interpl_Iratio1(i) = 0.303;
            interpl_Iratio2(i) = 0.165;
     
        elseif zFrac(i) == 0.75
            interpl_Iratio1(i) = 0.330;
            interpl_Iratio2(i) = 0.188;
           
        elseif zFrac(i) == 1    
            interpl_Iratio1(i) = 0.354;
            interpl_Iratio2(i) = 0.210;
           
        end
        
        x1 = 4;
        x2 = 8;
        y1 = interpl_Iratio1(i);
        y2 = interpl_Iratio2(i);
        x  = Iratio(i);
        interpl_y_correction(i) = y1 + (y2-y1)/(x2-x1) * (x-x1); 
    
    elseif Iratio(i) > 8
        if zFrac(i) > 0 && zFrac(i) <= 0.25
            interpl_Iratio1(i) = 0.9877*(Iratio(i)^-0.997);
            interpl_Iratio2(i) = 0.9893*(Iratio(i)^-0.925);

            y1 = interpl_Iratio1(i);
            y2 = interpl_Iratio2(i);
            x1 = 0;  
            x2 = 0.25;
            x  = zFrac(i);

            interpl_y_correction(i) = y1 + (y2-y1)/(x2-x1) * (x-x1); 
          
        elseif zFrac(i) > 0.25 && zFrac(i) <= 0.5         
            interpl_Iratio1(i) = 0.9893*(Iratio(i)^-0.925);
            interpl_Iratio2(i) = 0.9878*(Iratio(i)^-0.855);

            y1 = interpl_Iratio1(i);
            y2 = interpl_Iratio2(i);
            x1 = 0.25; 
            x2 = 0.5;  
            x  = zFrac(i);

            interpl_y_correction(i) = y1 + (y2-y1)/(x2-x1) * (x-x1); 
             
        elseif zFrac(i) > 0.5 && zFrac(i) <= 0.75
            interpl_Iratio1(i) = 0.9878*(Iratio(i)^-0.855);
            interpl_Iratio2(i) = 0.9918*(Iratio(i)^-0.796);

            y1 = interpl_Iratio1(i);
            y2 = interpl_Iratio2(i);
            x1 = 0.5;   
            x2 = 0.75;
            x  = zFrac(i);
                
            interpl_y_correction(i) = y1 + (y2-y1)/(x2-x1) * (x-x1); 
       
        elseif zFrac(i) > 0.75 && zFrac(i) <= 1
            interpl_Iratio1(i) = 0.9918*(Iratio(i)^-0.796);
            interpl_Iratio2(i) = 1.0002*(Iratio(i)^-0.75);
            
            y1 = interpl_Iratio1(i);
            y2 = interpl_Iratio2(i);
            x1 = 0.75;
            x2 = 1;
            x  = zFrac(i);
            
            interpl_y_correction(i) = y1 + (y2-y1)/(x2-x1) * (x-x1); 
           
        end
    end
end

disp_CF = interpl_y_correction;

end % function dispCorrectionFactor

Contact us