- 积分
- 7458
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-9-20
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 虫儿飞 于 2014-7-12 21:21 编辑
开贴调程序有不少天,调了几个程序吧,有些还没调出来,伤感!
今天先写第一个总结帖,细节的重要性。
下面给出一个实例程,是我调试之后的,但是还有未尽之处,但已经可以解决问题。
program stjp
integer*4,parameter:: x=90,y=62,t=53
integer*4 :: ix,iy,it
real*4,parameter :: undef = -9.9900000E+08
real*4 :: sm(x,y,t),s(x,y),ave(x,y),ano(x,y,t),sd(x,y),anosd(x,y,t),su(x,y),sum1(x,y),ave1(x,y)
open (10,file='stnew.grd',form='binary')
!!! 读数据
do iy=1,y
do ix=1,x
do it=1,t
read(10) sm(ix,iy,it)
enddo
enddo
enddo
!!! 气候场
ave = 0.0
do iy=1,y
do ix=1,x
if(sm(ix,iy,1).ne.undef) then
do it=1,t
ave(ix,iy)=ave(ix,iy)+sm(ix,iy,it)/53.0
enddo
else
ave(ix,iy) = undef
endif
! ave(ix,iy)=(su(ix,iy))/53.0
enddo
enddo
!!! 距平场
do iy=1,y
do ix=1,x
if(sm(ix,iy,1).ne.undef) then
do it=1,t
ano(ix,iy,it)=sm(ix,iy,it)-ave(ix,iy)
enddo
else
do it=1,t
ano(ix,iy,it)=undef
enddo
endif
enddo
enddo
!!! 标准差
sd = 0.0
do iy=1,y
do ix=1,x
if(sm(ix,iy,1).ne.undef) then
do it=1,t
sd(ix,iy)=sd(ix,iy)+ano(ix,iy,it)**2/53.0
enddo
sd(ix,iy)=sqrt(sd(ix,iy))
else
sd(ix,iy)=undef
endif
enddo
enddo
!!! 标准化距平
sum1 = 0.0
do iy=1,y
do ix=1,x
if(sm(ix,iy,1).ne.undef) then
do it=1,t
anosd(ix,iy,it)=ano(ix,iy,it)/sd(ix,iy)
sum1(ix,iy)=sum1(ix,iy)+anosd(ix,iy,it)
enddo
else
do it=1,t
anosd(ix,iy,it)=undef
enddo
sum1(ix,iy)=undef
endif
!!!!!!验证结果的正确性,因为标准化距平的平均值为0
enddo
enddo
print *,sum1
open (14,file='biaozhunhua.grd',form='binary')
open (15,file='biaozhunhua.txt')
do it=1,t
write(14) ((anosd(ix,iy,it),ix=1,x),iy=1,y)
write(15,100) ((anosd(ix,iy,it),ix=1,x),iy=1,y)
enddo
100 format(61f7.3)
end program
给出这个程序是想说明两个问题:
1、大家都会遇到求距平的问题,首先要求气候态平均场,那么这个地方就有一个小细节需要注意,就是除以样本的过程要放在累积的过程中,并且累积之前要注意将 累积量赋值为0。但是需要值本身比较小,就需要在累加完再除以样本量。这个不讲究的时候的确不讲究,但是讲究起来还是有那么点意思的,各位自己体会。
!!! 气候场
ave = 0.0
do iy=1,y
do ix=1,x
if(sm(ix,iy,1).ne.undef) then
do it=1,t
ave(ix,iy)=ave(ix,iy)+sm(ix,iy,it)/53.0
enddo
else
ave(ix,iy) = undef
endif enddo
enddo
2、.for 和.f90格式不要混用,从开始到结束。
以上两点都强调了细节的重要性,但是不知道各位有没有体会。
把我之前写的两个贴引过来,大家瞧瞧吧。
fortran编程的一点小体
http://bbs.06climate.com/forum.p ... =16909&fromuid=2680
(出处: 气象家园)
fortran编程之算法篇
http://bbs.06climate.com/forum.p ... =17120&fromuid=2680
(出处: 气象家园)
|
评分
-
查看全部评分
|