- 积分
 - 834
 
	- 贡献
 -  
 
	- 精华
 
	- 在线时间
 -  小时
 
	- 注册时间
 - 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 
 
 |   
 
 
 
 |