fortran编程 出现 list-directed I/O syntax error,unit 10 求解答
程序如下programmian!声明变量real::u!相对湿度real::t!干球温度real::p!本站气压real::e!水汽压real,parameter::t1...
程序如下
program mian
!声明变量real::u !相对湿度
real::t !干球温度
real::p !本站气压
real::e !水汽压
real,parameter::t1=273.16
real::t0
integer,parameter::n=1500
real::tw(0:n) !湿球温度估算值序列
real::eti !干球温度对应的饱和水汽压
real::etw !湿球温度对应的饱和水汽压
real,parameter::a=8.15*10**(-4)
real::ej(0:n) !水汽压的计算值
real::err(0:n) !计算误差
real::ermin !计算误差的最小值
real::twmin !合理的湿球温度
real,parameter::fileid=10
real,parameter::count=52608
character(len=80)::tempstr
integer num,day,time
open(fileid,file="temp.txt",status="old",iostat=error)if(error/=0)then
write(fileid,*)"打开文件失败"
stop
end if
read(fileid,"(A80)")tempstr
do i=1,count read(fileid,*)num,day,time,t,u
!计算水汽压 t0=273.15+t
if(t>0)then
eti=10**(10.79574*(1-t1/t0)-5.02800*alog10(t0/t1)+1.50475*10**(-4)*(1-10**((-8.2969*(t0/t1-1))))+0.42873*10**(-3)*(10**(4.76955*(1-t1/t0))-1)+0.78614)
else
eti=10**((-9.09685)*(t1/t0-1)-3.56654*alog10(t1/t0)+0.87682*(1-t0/t1)+0.78614)
end if
e=eti*u
!算出误差序列 tw(0)=t-15
do j=0,n
if(tw(j)>0)then
etw=10**(10.79574*(1-t1/t0)-5.02800*alog10(t0/t1)+1.50475*10**(-4)*(1-10**((-8.2969*(t0/t1-1))))+0.42873*10**(-3)*(10**(4.76955*(1-t1/t0))-1)+0.78614)
else
etw=10**((-9.09685)*(t1/t0-1)-3.56654*alog10(t1/t0)+0.87682*(1-t0/t1)+0.78614)
end if
ej(j)=etw-a*p*(t-tw(j)) !算出水汽压的计算值
err(j)=abs(e-ej(j))
if(j==n) exit
tw(j+1)=tw(j)+0.01
end do
!算出最合适的湿球温度 errmin=err(0)
do j=1,n
if(err(j)<err(j-1))then
errmin=err(j)
k=j
end if
twmin=tw(k)
end do
end do
write(*,"(7A7)")"站号","日期","小时","干球温度","相对湿度","湿球温度"
do i=1,count write(*,*)t,u,twmin
end do
stop end
结果: 展开
program mian
!声明变量real::u !相对湿度
real::t !干球温度
real::p !本站气压
real::e !水汽压
real,parameter::t1=273.16
real::t0
integer,parameter::n=1500
real::tw(0:n) !湿球温度估算值序列
real::eti !干球温度对应的饱和水汽压
real::etw !湿球温度对应的饱和水汽压
real,parameter::a=8.15*10**(-4)
real::ej(0:n) !水汽压的计算值
real::err(0:n) !计算误差
real::ermin !计算误差的最小值
real::twmin !合理的湿球温度
real,parameter::fileid=10
real,parameter::count=52608
character(len=80)::tempstr
integer num,day,time
open(fileid,file="temp.txt",status="old",iostat=error)if(error/=0)then
write(fileid,*)"打开文件失败"
stop
end if
read(fileid,"(A80)")tempstr
do i=1,count read(fileid,*)num,day,time,t,u
!计算水汽压 t0=273.15+t
if(t>0)then
eti=10**(10.79574*(1-t1/t0)-5.02800*alog10(t0/t1)+1.50475*10**(-4)*(1-10**((-8.2969*(t0/t1-1))))+0.42873*10**(-3)*(10**(4.76955*(1-t1/t0))-1)+0.78614)
else
eti=10**((-9.09685)*(t1/t0-1)-3.56654*alog10(t1/t0)+0.87682*(1-t0/t1)+0.78614)
end if
e=eti*u
!算出误差序列 tw(0)=t-15
do j=0,n
if(tw(j)>0)then
etw=10**(10.79574*(1-t1/t0)-5.02800*alog10(t0/t1)+1.50475*10**(-4)*(1-10**((-8.2969*(t0/t1-1))))+0.42873*10**(-3)*(10**(4.76955*(1-t1/t0))-1)+0.78614)
else
etw=10**((-9.09685)*(t1/t0-1)-3.56654*alog10(t1/t0)+0.87682*(1-t0/t1)+0.78614)
end if
ej(j)=etw-a*p*(t-tw(j)) !算出水汽压的计算值
err(j)=abs(e-ej(j))
if(j==n) exit
tw(j+1)=tw(j)+0.01
end do
!算出最合适的湿球温度 errmin=err(0)
do j=1,n
if(err(j)<err(j-1))then
errmin=err(j)
k=j
end if
twmin=tw(k)
end do
end do
write(*,"(7A7)")"站号","日期","小时","干球温度","相对湿度","湿球温度"
do i=1,count write(*,*)t,u,twmin
end do
stop end
结果: 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询