fortran处理二进制文件

2018-11-06  本文已影响0人  Aerosols

一共有ixXiyXkxX30X12X33,网格点数X20层X30个变量X12个月X33年的数据,二进制grd加ctl文件,求33年平均,10年平均,5年平均。生成的是文本文件。
编译器把Fortran高级语言翻译为机器码,即扩展名为exe的文件。
ifort test.f90
./a.out
如果不想使用默认的a.out作为执行文件的名字,
则编译时可以使用ifort test.f90 -o hello
在遇到数据量大的时候 http://www.nbi.dk/cgi-bin/man2html?ifort+1
在编译时使用 ifort -mcmodel=medium test.f90

image.png
program main
implicit none
integer,parameter:: ix=195,jx=153,kx=20,nvar=30
integer i,j,k,ivar,iyr,imn,yrb,yre
real var(ix,jx,kx,nvar),sumvar(ix,jx,kx,nvar)
real mean_33(ix,jx,kx,nvar),mean_5(ix,jx,kx,nvar,6),mean_10(ix,jx,kx,nvar,3) ,mean_3(ix,jx,kx,nvar)
real varyr(ix,jx,kx,nvar,33)
character(len=80) filename
character(len=4) cyr
character(len=2) cmn


yrb=1980
yre=2012

sumvar=0.
varyr=0.
do iyr = yrb, yre
    do imn = 1, 12

        write (cyr(1:4),fmt='(i4.4)') iyr
        write (cmn(1:2),fmt='(i2.2)') imn
        filename="/public/month_avg/"//cyr//"/"//"testd2."//cyr//cmn//".grd"
        
        open(11,file=filename,convert='big_endian',form='binary',status='old')
        print*,filename

        do ivar = 1, nvar
            do k =1 ,kx
                read(11) ((var(i,j,k,ivar),i=1,ix),j=1,jx)
                !varyr(i,j,k,ivar,iyr-1979) = varyr(i,j,k,ivar,iyr-1979)+var(i,j,k,ivar)
            enddo
        enddo       
        varyr(:,:,:,:,iyr-1979) = varyr(:,:,:,:,iyr-1979) + var
        !print*,varyr(:,10,4,1,1)
        !pause
        close(11)
    enddo


enddo

do i=1,6
    sumvar=0.
    do j=1+(i-1)*5,i*5
        sumvar=varyr(:,:,:,:,j)+sumvar
    enddo
    mean_5(:,:,:,:,i)=sumvar/5./12.
enddo

do i=1,3
    sumvar=0.
    do j=1+(i-1)*10,i*10
        sumvar=varyr(:,:,:,:,j)+sumvar
    enddo
    mean_10(:,:,:,:,i)=sumvar/10./12.
enddo


sumvar=0.
do j=1,33
    sumvar=varyr(:,:,:,:,j)+sumvar
enddo
mean_33=sumvar/33./12.
!print*,varyr(:,1,1,1,1)

!stop
sumvar=0.
do j=30,33
    sumvar=varyr(:,:,:,:,j)+sumvar
enddo
mean_3=sumvar/3./12.

!open(21,file="mean33_3.bin",form="binary",status='unkowmn')
open(21,file="mean33_2.log")
do ivar=1,nvar
    do k=1,1
        write(21, "(153(1XF12.4))") ((mean_33(i,j,k,ivar),i=1,ix),j=1,jx)
!       !write(21, "(75(1XF8.2))") ((mean_3(i,j,k,ivar),i=1,ix),j=j,jx)
    enddo
enddo


open(21,file="mean3_2.log")
do ivar=1,nvar
    do k=1,1
        write(21, "(153(1XF12.4))") ((mean_3(i,j,k,ivar),i=1,ix),j=1,jx)
    enddo
enddo
close(21)
!
!!open(21,file="mean5.bin",form="binary",status='unkowmn')
open(21,file="mean5_2.log")
do iyr=1,6
    do ivar=1,nvar
        do k=1,1
            write(21,"(153(1XF12.4))") ((mean_5(i,j,k,ivar,iyr),i=1,ix),j=1,jx)
        enddo
    enddo
enddo
close(21)
!
!open(21,file="mean10.bin",form="binary",status='unkowmn')
open(21,file="mean10_2.log")
do iyr=1,3
    do ivar=1,nvar
        do k=1,1
            write(21,"(153(1XF12.4))") ((mean_10(i,j,k,ivar,iyr),i=1,ix),j=1,jx)
        enddo
    enddo
enddo
close(21)
end
上一篇 下一篇

猜你喜欢

热点阅读