- 积分
- 848
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2020-3-20
- 最后登录
- 1970-1-1
|
Fortran
系统平台: |
fortran |
问题概况: |
我通过Fortran编程计算对流层顶高度,即利用探空数据(探空气球上升时每秒采集的高度和温度数据),输入文件中的高度和温度数据,后一个温度减前一个温度除以后一个高度减前一个高度,算出来小于0.002且这个高度以上2000m内的温度递减率都满足小于0.002的最低高度是对流层顶高度,单独处理一个文件时程序输出结果正常,且换了几个文件,都能输出不同的结果,后来我在前面加了一个批量处理文件的主程序,把计算对流层顶的程序变成子例行程序,结果每个不同的文件输出的结果都跟第一个文件输出的结果一样,不知道在哪个部分出错了 |
问题截图: |
|
我看过提问的智慧: |
看过 |
自己思考时长(天): |
7 |
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 chocoooe 于 2020-4-3 18:02 编辑
我通过Fortran编程计算对流层顶高度,即利用探空数据(探空气球上升时每秒采集的高度和温度数据),输入文件中的高度和温度数据,后一个温度减前一个温度除以后一个高度减前一个高度,算出来小于0.002且这个高度以上2000m内的温度递减率都满足小于0.002的最低高度是对流层顶高度,单独处理一个文件时程序输出结果正常,且换了几个文件,都能输出不同的结果,后来我在前面加了一个批量处理文件的主程序,把计算对流层顶的程序变成子例行程序,结果每个不同的文件输出的结果都跟第一个文件输出的结果一样,不知道在哪个部分出错了
program ex01
implicit none
external trop
integer m,error
character fname*12
open(11,file='C:\var\guangdong_1\L\2016_rw\list.txt',status='old',iostat=error)
do m=1,441
read(11,'(A12)')fname
if(error/=0)exit
call trop(fname)
end do
close(11)
end program
subroutine trop(fname)
implicit none
integer :: i,j=1,k=1,error
character fname*12
integer,parameter::s1=50000
real hgt(s1),pre(s1),temp(s1),rh(s1),sita(s1),uu(s1),vv(s1),tro(s1),dhgt(s1),dtemp(s1),dht(s1)
open(45,file='C:\var\guangdong_1\L\2016_rw\'//Trim(AdjustL(fname))//'')
do i=1,2700
read(45,'(f8.1,f8.1,f8.1,f8.1,f8.1,f8.2,f8.2)')pre(i),hgt(i),temp(i),sita(i),rh(i),uu(i),vv(i)
end do
do i=700,2700
dhgt(i)=hgt(i+1)-hgt(i)
dtemp(i)=temp(i)-temp(i+1)
dht(i)=dtemp(i)/dhgt(i)
if(dht(i)<0.002)then
k=i+1
do_while:do while(hgt(k)-hgt(i)<=2000.0)
dhgt(k)=hgt(k)-hgt(i)
dtemp(k)=temp(i)-temp(k)
dht(k)=dtemp(k)/dhgt(k)
if(dht(k)<=0.002) k=k+1
if(dht(k)>0.002) EXIT do_while
end do do_while
end if
if (hgt(k)-hgt(i)>2000.0)then
tro(j)=hgt(i)
j=j+1
end if
end do
close(45)
open(46,file='C:\var\guangdong_1\L\2016_jf\'//Trim(AdjustL(fname))//'')
write(46,'(f8.1)')tro(1)
close(46)
end subroutine trop
|
|