- 积分
- 47559
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-11-14
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本人最近写的fortran程序不知为什么能够算出来但是全都是0。很纠结,求大神指教!!!
附上本人的程序两个,水平较差请见谅。
1.空间滤波的程序:
program lbx
implicit none
real,dimension(1:144,1:73,1:17,1:720)::hgt
real,dimension(0:12,1:73,1:6)::a,b
real,dimension(1:144,1:73,1:6)::lb0t3,lb6t12
real,dimension(0:12,1:144,1:73,1:6)::lb
real,dimension(1:144,1:73,1:17)::ahgt
real::w
integer::i,j,k,t,irec,m
!读取数据
open(11,file='hgt.dat',status='old',form='unformatted',access='direct',recl=144*73)
irec=1
do t=1,720
do k=1,17
read(11,rec=irec)((hgt(i,j,k,t),i=1,144),j=1,73)
irec=irec+1
end do
end do
close(11)
print*,'*'
!这就开始空间滤波了
!首先对位势高度时间平均,这样再固定气压面,位势高度就仅仅是水平空间的函数了
do k=12,17
do j=1,73
do i=1,144
ahgt(i,j,k)=0
do t=1,720
ahgt(i,j,k)=ahgt(i,j,k)+hgt(i,j,k,t)
end do
ahgt(i,j,k)=ahgt(i,j,k)/720
end do
end do
end do
print*,'**'
!第二步,对所有谐波的系数进行初始设置
a=0
b=0
!第三步,计算每个谐波的系数
do k=1,6
do m=0,12
w=360/144
do j=1,73
do i=1,144
a(m,j,k)=a(m,j,k)+ahgt(i,j,k)*cosd(m*w*i)
b(m,j,k)=b(m,j,k)+ahgt(i,j,k)*sind(m*w*i)
end do
end do
end do
end do
!再除以空间序列的长度
a=a/72
b=b/72
do k=1,6
do j=1,73
a(0,j,k)=a(0,j,k)/2
end do
end do
print*,'***'
!第四步,累加各个谐波,得到各个波段的空间滤波场
do k=1,6
do m=1,12
do j=1,73
do i=1,144
lb(m,i,j,k)=a(0,j,k)+a(m,j,k)*cosd(m*w*i)+b(m,j,k)*sind(m*w*i)
end do
end do
end do
end do
!得到平均场即0波滤波
do k=1,6
do j=1,73
do i=1,144
lb(0,i,j,k)=a(0,j,k)
end do
end do
end do
!得到0-3波和6-12波的空间滤波
do k=1,6
do j=1,73
do i=1,144
lb0t3(i,j,k)=lb(0,i,j,k)+lb(1,i,j,k)+lb(2,i,j,k)+lb(3,i,j,k)
lb6t12(i,j,k)=lb(0,i,j,k)+lb(6,i,j,k)+lb(7,i,j,k)+lb(8,i,j,k)+lb(9,i,j,k)+lb(10,i,j,k)+lb(11,i,j,k)+lb(12,i,j,k)
end do
end do
end do
print*,'****'
!第五步,结果输出
open(11,file='lb.dat',status='replace',form='unformatted',access='direct',recl=144*73*6)
irec=1
do m=0,12
write(11,rec=irec)(((lb(m,i,j,k),i=1,144),j=1,73),k=1,6)
irec=irec+1
end do
close(11)
open(11,file='lb0-3.dat',status='replace',form='unformatted',access='direct',recl=144*73*6)
irec=1
write(11,rec=irec)(((lb0t3(i,j,k),i=1,144),j=1,73),k=1,6)
close(11)
open(11,file='lb6-12.dat',status='replace',form='unformatted',access='direct',recl=144*73*6)
irec=1
write(11,rec=irec)(((lb6t12(i,j,k),i=1,144),j=1,73),k=1,6)
close(11)
print*,'ok!'
!完成
end program
2.一个筛选数据的程序
program count
character(60)::filename,filename1
character(2)::p1,p2,p3,p4,p5
character(79)::a
integer::i,j,e,f,g,k,t,n,m
integer,dimension(1:40)::x
character(15),dimension(1:12)::w
open(13,file='readfile.txt',status='unknown',form='formatted')
do i=08,10
write(p1,'(i2.2)') i
do j=1,31
write(p2,'(i2.2)') j
do e=0,24
write(p3,'(i2.2)') e
do f=0,60
write(p4,'(i2.2)') f
do g=0,60
write(p5,'(i2.2)') g
filename='00PCASP_X22012'//p1//p2//p3//p4//p5//'.csv'
filename1=p1//p2//p3//p4//p5//".dat"
open(11,file=trim(filename),status='old',form='formatted',iostat=it)
if(it.ne.0) cycle
open(12,file=trim(filename1),status='unknown',form='unformatted',access='direct',recl=40)
do k=1,36
read(11,*)a
end do
m=0
do k=1,200000
read(11,*,iostat=n)(w(t),t=1,12),(x(t),t=1,40)
if (n<0) exit
print*,x(5)
write(12,rec=k)(x(t),t=1,40)
m=m+1
end do
write(13,*)filename1,m
close(11)
close(12)
end do
end do
end do
end do
end do
close(13)
end program
以上问题严重困扰着我,请各位不吝赐教。
|
|