Can someone please convert this fortran program(.f90) to matlab (.m) for me. I would really appreciate
1 次查看(过去 30 天)
显示 更早的评论
real a,b,p,z,r,h,c,cprim,Dprim,F ,alpha,Fprim,Gprim,Hi ,Hprim
double precision k ,kprim,L,Lprim,M,Mprim , Ar(200),At(200),Br(200),Bt(200),Sigmar(200),Sigmat(200)
dimension r(200), h(200),alpha(200),deltaT(200),E(200),bnew(200)
open(1,file='Contrainte radial.dat')
open(2,file='Contrainte tangentia.dat')
write(1,*)'variable= "r(n)" "Sigmar(n)"'
write(2,*)'variable= "r(n)" "Sigmat(n)"'
write(1,*)'zone T=zone2'
write(*,*)'donner les valeurs de a b z'
read(*,*) a, b, z
p=(b-a)/(z-1)
r(1)=a
Sigmar(1)=0
write(,)'r= ',r(1) write(,)'Sigmar= ',Sigmar(1)
write(1,*) r(1),Sigmar(1) write(2,*) r(1), Sigmat(1)
do n=1,z r(n+1)=r(n)+p
h(n)=-0.002*r(n)**5+0.041668*r(n)**4-0.28432*r(n)**3+0.68273*r(n)**2-0.66228*r(n)+4.5901
bnew(n)=0.00015*r(n)**3-0.0009*r(n)**2+0.0018*r(n)+0.33
E(n)=-2.192e4*r(n)**3+1.334e5*r(n)**2-2.908e5*r(n)+2.366e7
alpha(n)=2.718e-9*r(n)**3-1.631e-8*r(n)**2+3.476e-8*r(n)+9.129e-6
deltaT(n)=1.689*r(n)**3-10.110*r(n)**2+21.630*r(n)+588
enddo
do n=2,z C=r(n)*h(n)
Cprim=bnew(n)/E(n) + ((1+ bnew(n))*(r(n)-r(n-1)))/(2*E(n)*r(n))
D=0.5*(r(n)-r(n-1))*h(n)
Dprim=1/E(n) + ((1+ bnew(n))*(r(n)-r(n-1)))/(2*E(n)*r(n))
F=r(n-1)*h(n-1)
Fprim= bnew(n-1)/E(n-1) - ((1+ bnew(n-1))*(r(n)-r(n-1)))/(2*E(n-1)*r(n-1))
G=0.5*(r(n)-r(n-1))*h(n-1)
Gprim=1/E(n-1) - ((1+ bnew(n-1))*(r(n)-r(n-1)))/(2*E(n-1)*r(n-1))
Hi=0.5*1005.7*(r(n)-r(n-1))*(h(n)*r(n)*r(n)+h(n-1)*r(n-1)*r(n-1)) Hprim=(alpha(n)*deltaT(n))-(alpha(n-1)*deltaT(n-1)) K=(Fprim*D-F*Dprim)/(Cprim*D-C*Dprim) Kprim=(Fprim*C-F*Cprim)/(Cprim*D-C*Dprim) L= -(Gprim*D+G*Dprim)/(Cprim*D-C*Dprim) Lprim = -(Gprim*C+G*Cprim)/(Cprim*D-C*Dprim) M=(Hprim*D+Hi*Dprim)/(Cprim*D-C*Dprim) Mprim= (Cprim*Hi+C*Hprim)/(Cprim*D-C*Dprim) Ar(1)=0 At(1)=1 Br(1)=0 Bt(1)=0 Sigmar(1)=0
Ar(n)=K*Ar(n-1)+L*At(n-1)
At(n)=Kprim*Ar(n-1)+Lprim*At(n-1)
Br(n)=K*Br(n-1)+L*Bt(n-1) + M
Bt(n)=Kprim*Br(n-1)+Lprim*Bt(n-1) + Mprim
enddo sigmar(z)=8500
Sigmat(1)=(sigmar(z)-Br(z))/Ar(z) write(,)'Sigmat= ',Sigmat(1) do n=2,z
Sigmar(n)= Ar(n)*Sigmat(1) + Br(n)
Sigmat(n)= At(n)*Sigmat(1) + Bt(n)
write(,)'____________________________________' write(,)'n= ', n write(,)'r= ', r(n) write(,)'C= ', c write(,)'Cprim= ', cprim write(,)'Dprim= ', Dprim WRITE(,)'F= ', F write(,)'Fprim= ', Fprim write(,)'Gprim= ', Gprim write(,)'G = ', G write(,)'Hi= ', Hi write(,)'Hprim= ', Hprim write(,)'k= ', k write(,)'kprim= ', kprim write(,)'L= ', L write(,)'Lprim= ', Lprim write(,)'M= ', M write(,)'Mprim= ', Mprim write(,)'Ar= ',Ar(n) write(,)'At= ',At(n) write(,)'Br= ',Br(n) write(,)'Bt= ',Bt(n) write(,)'r= ',r(n) write(,)'Sigmar= ',Sigmar(n) write(,)'Sigmat= ',Sigmat(n) write(1,*) r(n),Sigmar(n) write(2,*) r(n),Sigmat(n)
enddo end
3 个评论
Jan
2012-8-19
@Basil: It is unlikely that a voluntary contributor in this forum will do the work for you. Did you have success with installing f2matlab?
Walter Roberson
2012-8-20
Formatting tip: tab is not recognized by the forum formatter as being whitespace.
回答(1 个)
Ben Barrowes
2012-8-23
Putting it through f2matlab, this gets you most of the way there:
function basil(varargin)
clear all; %clear functions;
global unit2fid; if ~isempty(unit2fid), unit2fid=[]; end
persistent a alpha ar at b bnew br bt c cprim deltat dprim e f fprim gprim h hi hprim k kprim l lprim m mprim p r sigmar sigmat z ;
if isempty(a), a=0; end;
if isempty(b), b=0; end;
if isempty(p), p=0; end;
if isempty(z), z=0; end;
if isempty(r), r=zeros(1,200); end;
if isempty(h), h=zeros(1,200); end;
if isempty(c), c=0; end;
if isempty(cprim), cprim=0; end;
if isempty(dprim), dprim=0; end;
if isempty(f), f=0; end;
if isempty(alpha), alpha=zeros(1,200); end;
if isempty(fprim), fprim=0; end;
if isempty(gprim), gprim=0; end;
if isempty(hi), hi=0; end;
if isempty(hprim), hprim=0; end;
if isempty(k), k=0; end;
if isempty(kprim), kprim=0; end;
if isempty(l), l=0; end;
if isempty(lprim), lprim=0; end;
if isempty(m), m=0; end;
if isempty(mprim), mprim=0; end;
if isempty(ar), ar=zeros(1,200); end;
if isempty(at), at=zeros(1,200); end;
if isempty(br), br=zeros(1,200); end;
if isempty(bt), bt=zeros(1,200); end;
if isempty(sigmar), sigmar=zeros(1,200); end;
if isempty(sigmat), sigmat=zeros(1,200); end;
if isempty(deltat), deltat=zeros(1,200); end;
if isempty(e), e=zeros(1,200); end;
if isempty(bnew), bnew=zeros(1,200); end;
thismlfid=fopen('Contrainte radial.dat','r+');
unit2fid=[unit2fid;1,thismlfid];
thismlfid=fopen('Contrainte tangentia.dat','r+');
unit2fid=[unit2fid;2,thismlfid];
writef(1,['%s '],'variable= "r(n)" "Sigmar(n)"');
writef(2,['%s '],'variable= "r(n)" "Sigmat(n)"');
writef(1,['%s '],'zone T=zone2');
writef(1,['%s '],'donner les valeurs de a b z');
a=input('','s');
b=input('','s');
z=input('','s');
p=(b-a)./(z-1);
r(1)=a;
sigmar(1)=0;
writef(1,['%s %0.15g '],'r= ',r(1));
writef(1,['%s %0.15g '],'Sigmar= ',sigmar(1));
writef(1,['%0.15g %0.15g '], r(1),sigmar(1));
writef(2,['%0.15g %0.15g '], r(1), sigmat(1));
for n=1:z;
r(n+1)=r(n)+p;
h(n)=-0.002.*r(n).^5+0.041668.*r(n).^4-0.28432.*r(n).^3+0.68273.*r(n).^2-0.66228.*r(n)+4.5901;
bnew(n)=0.00015.*r(n).^3-0.0009.*r(n).^2+0.0018.*r(n)+0.33;
e(n)=-2.192e4.*r(n).^3+1.334e5.*r(n).^2-2.908e5.*r(n)+2.366e7;
alpha(n)=2.718e-9.*r(n).^3-1.631e-8.*r(n).^2+3.476e-8.*r(n)+9.129e-6;
deltat(n)=1.689.*r(n).^3-10.110.*r(n).^2+21.630.*r(n)+588;
end; n=z+1;
for n=2:z;
c=r(n).*h(n);
cprim=bnew(n)./e(n) +((1+ bnew(n)).*(r(n)-r(n-1)))./(2.*e(n).*r(n));
d=0.5.*(r(n)-r(n-1)).*h(n);
dprim=1./e(n) +((1+ bnew(n)).*(r(n)-r(n-1)))./(2.*e(n).*r(n));
f=r(n-1).*h(n-1);
fprim= bnew(n-1)./e(n-1) -((1+ bnew(n-1)).*(r(n)-r(n-1)))./(2.*e(n-1).*r(n-1));
g=0.5.*(r(n)-r(n-1)).*h(n-1);
gprim=1./e(n-1) -((1+ bnew(n-1)).*(r(n)-r(n-1)))./(2.*e(n-1).*r(n-1));
hi=0.5.*1005.7.*(r(n)-r(n-1)).*(h(n).*r(n).*r(n)+h(n-1).*r(n-1).*r(n-1));
hprim=(alpha(n).*deltat(n))-(alpha(n-1).*deltat(n-1));
k=(fprim.*d-f.*dprim)./(cprim.*d-c.*dprim);
kprim=(fprim.*c-f.*cprim)./(cprim.*d-c.*dprim);
l=-(gprim.*d+g.*dprim)./(cprim.*d-c.*dprim);
lprim = -(gprim.*c+g.*cprim)./(cprim.*d-c.*dprim);
m=(hprim.*d+hi.*dprim)./(cprim.*d-c.*dprim);
mprim=(cprim.*hi+c.*hprim)./(cprim.*d-c.*dprim);
ar(1)=0;
at(1)=1;
br(1)=0;
bt(1)=0;
sigmar(1)=0;
ar(n)=k.*ar(n-1)+l.*at(n-1);
at(n)=kprim.*ar(n-1)+lprim.*at(n-1);
br(n)=k.*br(n-1)+l.*bt(n-1) + m;
bt(n)=kprim.*br(n-1)+lprim.*bt(n-1) + mprim;
end; n=z+1;
sigmar(z)=8500;
sigmat(1)=(sigmar(z)-br(z))./ar(z);
writef(1,['%s %0.15g '],'Sigmat= ',sigmat(1));
for n=2:z;
sigmar(n)= ar(n).*sigmat(1) + br(n);
sigmat(n)= at(n).*sigmat(1) + bt(n);
writef(1,['%s '],'____________________________________');
writef(1,['%s %0.15g '],'n= ', n);
writef(1,['%s %0.15g '],'r= ', r(n));
writef(1,['%s %0.15g '],'C= ', c);
writef(1,['%s %0.15g '],'Cprim= ', cprim);
writef(1,['%s %0.15g '],'Dprim= ', dprim);
writef(1,['%s %0.15g '],'F= ', f);
writef(1,['%s %0.15g '],'Fprim= ', fprim);
writef(1,['%s %0.15g '],'Gprim= ', gprim);
writef(1,['%s %0.15g '],'G = ', g);
writef(1,['%s %0.15g '],'Hi= ', hi);
writef(1,['%s %0.15g '],'Hprim= ', hprim);
writef(1,['%s %0.15g '],'k= ', k);
writef(1,['%s %0.15g '],'kprim= ', kprim);
writef(1,['%s %0.15g '],'L= ', l);
writef(1,['%s %0.15g '],'Lprim= ', lprim);
writef(1,['%s %0.15g '],'M= ', m);
writef(1,['%s %0.15g '],'Mprim= ', mprim);
writef(1,['%s %0.15g '],'Ar= ',ar(n));
writef(1,['%s %0.15g '],'At= ',at(n));
writef(1,['%s %0.15g '],'Br= ',br(n));
writef(1,['%s %0.15g '],'Bt= ',bt(n));
writef(1,['%s %0.15g '],'r= ',r(n));
writef(1,['%s %0.15g '],'Sigmar= ',sigmar(n));
writef(1,['%s %0.15g '],'Sigmat= ',sigmat(n));
writef(1,['%0.15g %0.15g '], r(n),sigmar(n));
writef(2,['%0.15g %0.15g '], r(n),sigmat(n));
end; n=z+1;
end %program basil
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%extra functions as needed by the translation %%%%%%%%%%%
function out=writef(fid,varargin)
% function out=writef(fid,varargin)
% Catches fortran stdout (6) and reroutes in to Matlab's stdout (1)
% Catches fortran stderr (0) and reroutes in to Matlab's stderr (2)
if isnumeric(fid)
if fid==6|fid==1, out=fprintf(1,varargin{:});fprintf(1,char(10));
elseif fid==0, out=fprintf(2,varargin{:});fprintf(2,char(10));
elseif isempty(fid) %%treat empty array like a string array
out=sprintf(varargin{:});
if nargin>2 %set the calling var to out
if ~isempty(inputname(1)), assignin('caller',inputname(1),out); end
end
else
%translate unitIn to fidIn
global unit2fid
fidRow=find(unit2fid(:,1)==fid,1,'last');
if isempty(fidRow), error(['unknown fid in readFmt',]); end
fidIn=unit2fid(fidRow,2);
out=fprintf(fidIn,varargin{:});fprintf(fidIn,char(10));
end
elseif ischar(fid)
out=sprintf(varargin{:});
if nargin>2 %set the calling var to out
if ~isempty(inputname(1)), assignin('caller',inputname(1),out); end
end
else, out=fprintf(fid,varargin{:});
end
end
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Fortran with MATLAB 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!