Files
senior-design/strut/strutcall.m
2010-04-17 12:00:00 -05:00

111 lines
2.8 KiB
Matlab
Executable File

function strutcall(action)
global x y tmax
% Remove
global P
switch(action)
case 'load'
% Read Input Data
[fname,pname] = uigetfile('*.*','File containing airfoil co-ordinates');
if fname == 0
return;
end
dot=find(fname=='.');
oldpath = pwd;
eval(['cd ' pname]);
data = load(fname);
eval(['cd ' oldpath]);
x = data(:,1);
y = data(:,2);
txtHndl=findobj(gcbf,'Tag','airfoilname');
set(txtHndl,'String',fname(1:dot-1));
plot(x,y); axis([0 1 -.5 .5]);
% Load default strut size
fid=fopen('default.dat','r');
fgetl(fid);
lstrut=eval(fgetl(fid));
fgetl(fid);
wstrut=eval(fgetl(fid));
fclose(fid);
txtHndl=findobj(gcbf,'Tag','length');
set(txtHndl,'String',num2str(lstrut));
txtHndl=findobj(gcbf,'Tag','width');
set(txtHndl,'String',num2str(wstrut));
case 'calculate'
global x y
delt=1e-7; % Used for calculating dF/dt
TOL=1e-6; % Tolerance for N-R iteration
N = length(x);
c = max(x)-min(x);
x1 = x-c/2;
r = sqrt(x1.^2+y.^2);
theta = acos(x1./r);
% Use a continues theta
theta((N+1)/2:N)=2*pi-theta((N+1)/2:N);
P = spline(theta,r); % Fit cubic spline in polar coords
txtHndl=findobj(gcbf,'Tag','length');
lstrut=eval(get(txtHndl,'String'));
txtHndl=findobj(gcbf,'Tag','width');
tstrut=eval(get(txtHndl,'String'));
ARrqd=lstrut/tstrut; % AR of strut
[tmax,I]=max(y); % Approx. max thickness
tmax=tmax*2;
t0=tmax/2; % Start with tmax/2
F='ARfit(P,x)-y'; % For sol. F=AR(t)-ARrqd=0
FP=['(ARfit(P,x+' num2str(delt) ')-(ARfit(P,x)))/' num2str(delt)];
% Derivative: F'=(F(t+dt)-F(t))/dt
tnew=Newton(F,FP,t0,ARrqd,P,TOL);
% Find size of strut that will fit in norm. airfoil
[AR,xLEnew]=ARfit(P,tnew);
% Scale
scale = tstrut/tnew;
chord=scale*c;
xLEnewnorm = xLEnew+c/2;
xLEnew = xLEnewnorm*scale;
x1=x*scale;
y1=y*scale;
% Plotit
c1x=xLEnew; cy=tstrut/2;
c2x=xLEnew+lstrut;
strx=[c1x c2x c2x c1x c1x];
stry=[cy cy -cy -cy cy];
plot(x1,y1,'b',strx,stry,'r');
axis([0 chord -chord/2 chord/2]);
txtHndl=findobj(gcbf,'Tag','scale');
set(txtHndl,'String',num2str(scale));
txtHndl=findobj(gcbf,'Tag','xlepers');
set(txtHndl,'String',num2str(xLEnewnorm*100));
txtHndl=findobj(gcbf,'Tag','xle');
set(txtHndl,'String',num2str(xLEnew));
end;