爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3322|回复: 3

[求助] fortran批处理fnl文件,总有断点

[复制链接]

新浪微博达人勋

发表于 2018-2-27 13:10:22 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
用别人给的一个程序批处理fnl
主程序是 [url=]grib2bin.f90,其他几个程序只要和主程序放在一个目录下打开,主程序就可以调用成功。[/url]
程序已经没有错误,但是总是有一个断点,目前认为是status =RUNQQ("C:\Users\Administrator\grib22bin.bat",cmdLine) 这句代码没有运行成功导致,
这句主要是通过调用cmd来实现,不知道为什么总是不成功,需要在cmd中执行wgrib2 %1%3 | wgrib2 -i  %1%3 -bin %2%3.bin >%2%3.txt命令,就是针对grib2做操作,自己手动在cmd里输入该命令也是不成功,请教高人解决!

grib2bin.f90

7.27 KB, 下载次数: 0, 下载积分: 金钱 -5

grid22bin.bat

75 Bytes, 下载次数: 0, 下载积分: 金钱 -5

module_date_pack.F90

19.74 KB, 下载次数: 0, 下载积分: 金钱 -5

module_diagnosis.f90

64.62 KB, 下载次数: 0, 下载积分: 金钱 -5

Module_Tools.f90

714 Bytes, 下载次数: 0, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-2-27 13:12:09 | 显示全部楼层
额。。。。为什么会要金钱,我再上传一下附件,

Console2.vfproj

2.07 KB, 下载次数: 0, 下载积分: 金钱 -5

grib2bin.f90

7.27 KB, 下载次数: 0, 下载积分: 金钱 -5

grid22bin.bat

75 Bytes, 下载次数: 0, 下载积分: 金钱 -5

module_date_pack.F90

19.74 KB, 下载次数: 0, 下载积分: 金钱 -5

module_diagnosis.f90

64.62 KB, 下载次数: 0, 下载积分: 金钱 -5

Module_Tools.f90

714 Bytes, 下载次数: 0, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-2-27 13:13:41 | 显示全部楼层
还是需要,那我手动粘贴主程序和grid22bin.bat吧
program grib2bin
use date_pack
use IFPORT

implicit none

    ! Variables
    INTEGER, PARAMETER        :: NLEVEL=21
    character(len=4), dimension(NLEVEL) ,parameter :: levels=(/"1000", "975", "950", "925", "900", "850", "800", "750", "700", "650" &
           , "600", "550", "500", "450", "400", "350", "300", "250", "200", "150", "100"/)
    REAL, DIMENSION(0:359,-90:90,NLEVEL) :: hgt, tmp, rh, vvel, absv, ugrd, vgrd, td, q, thse
    real, dimension(0:359,-90:90) :: ugrd10, vgrd10, tmp2, rh2, spfh2, prmsl
   

    CHARACTER(LEN=80)         :: pathIn, pathOut, fileIn, fileOut, filePara, fileName, cmdLine
    character(len=80) :: line, subline
    character(len=80), dimension(400) :: lines
    integer :: pos, m, n, mm, nn, k, i, j, nTime,status
    integer, dimension(NLEVEL) :: hgtr, tmpr, rhr, vvelr, absvr, ugrdr, vgrdr
    integer :: ugrd10r, vgrd10r, tmp2r, rh2r, spfh2r, prmslr

    INTEGER                   :: lon1, lon2, lat1, lat2

    character (len=19) :: sDate, curDate, eDate

    INTEGER(4)  errnum




    lon1=0; lon2=180      !表示从东经0度到180度。
    lat1=0; lat2=90       !表示从北纬0度到90度。



    ! Body of grib2bin





sDate="2013-01-01 00:00:00"
eDate="2013-01-01 18:00:00"






pathIn="I:\FNL2\"
pathOut="I:\grid\"

curDate = sDate
nTime=1
do while(curDate<=eDate)

print *, ntime,curDate
   
    fileName="fnl_"//curDate(1:4)//curDate(6:7)//curDate(9:10)//"_"//curDate(12:13)//"_00"
   
    cmdLine=trim(pathIn)//" "//trim(pathOut)//" "//trim(fileName)
    status =RUNQQ("C:\Users\Administrator\grib22bin.bat",cmdLine)  
   
    print *, nTime, curDate,trim(fileName)
   

!Read in the records in filelists   

    filePara=trim(pathOut)//trim(fileName)//".txt"
    open(1, file=filePara, status="old")
    pos=0
    lines=""
    do while( .not. eof(1))
        read(1,"(A80)")line
        pos=pos+1
        lines(pos)=line
    end do
    close(1)


! get the record no.

    do m=1, pos
        do n=1, NLEVEL
            !HGT postions
            subline=":HGT:"// trim(levels(n)) //" mb:"
            if ( INDEX(trim(lines(m)),trim(subline)) > 0 ) then
                hgtr(n)=m
                !print *,"HGT", n, m
            end if

            !TMP postions
            subline=":TMP:"// trim(levels(n)) //" mb:"
            if ( INDEX(trim(lines(m)),trim(subline)) > 0 ) then
                tmpr(n)=m
                !print *, "TMP", n, m
            end if


            !RH postions
            subline=":RH:"// trim(levels(n)) //" mb:"
            if ( INDEX(trim(lines(m)),trim(subline)) > 0 ) then
                rhr(n)=m
                !print *, "RH", n, m
            end if



            !VVEL postions
            subline=":VVEL:"// trim(levels(n)) //" mb:"
            if ( INDEX(trim(lines(m)),trim(subline)) > 0 ) then
                vvelr(n)=m
                !print *, "VVEL", n, m
            end if

            !ABSV postions
            subline=":ABSV:"// trim(levels(n)) //" mb:"
            if ( INDEX(trim(lines(m)),trim(subline)) > 0 ) then
                absvr(n)=m
                !print *, "ABSV", n, m
            end if
            
            !UGRD postions
            subline=":UGRD:"// trim(levels(n)) //" mb:"
            if ( INDEX(trim(lines(m)),trim(subline)) > 0 ) then
                ugrdr(n)=m
                !print *, "UGRD", n, m
            end if

            !VGRD postions
            subline=":VGRD:"// trim(levels(n)) //" mb:"
            if ( INDEX(trim(lines(m)),trim(subline)) > 0 ) then
                vgrdr(n)=m
                !print *, "VGRD", n, m
            end if

        end do

        !UGRD 10m postions
        subline=":UGRD:10 m above ground:"
        if ( INDEX(trim(lines(m)),trim(subline)) > 0 ) then
            ugrd10r=m
            !print *, "UGRD10", m
        end if

        !VGRD 10m postions
        subline=":VGRD:10 m above ground:"
        if ( INDEX(trim(lines(m)),trim(subline)) > 0 ) then
            vgrd10r=m
            !print *, "VGRD10", m
        end if

        !TMP 2m postions
        subline=":TMP:surface:"
        if ( INDEX(trim(lines(m)),trim(subline)) > 0 ) then
            tmp2r=m
            !print *, "TMP2", m
        end if

        !RH 2m postions
        subline=":RH:2 m above ground:"
        if ( INDEX(trim(lines(m)),trim(subline)) > 0 ) then
            rh2r=m
            !print *, "RH2", m
        end if

        !SPFH 2m postions
        subline=":SPFH:2 m above ground:"
        if ( INDEX(trim(lines(m)),trim(subline)) > 0 ) then
            spfh2r=m
            !print *, "SPFH2", m
        end if

        !PRMSL 2m postions
        subline=":PRMSL:mean sea level:"
        if ( INDEX(trim(lines(m)),trim(subline)) > 0 ) then
            prmslr=m
            !print *, "PRMSL", m
        end if
    end do


    !read from
    fileIn=trim(pathOut)//trim(fileName)//".bin"

    OPEN(1,FILE=fileIn,FORM='binary', ACCESS='direct',RECL=4*360*181)

  
    DO k=1, NLEVEL
         READ(1,REC=hgtr(k))((hgt(i,j,k),i=0,359), j=90,-90,-1)
    END DO

    DO k=1, NLEVEL
        READ(1,REC=tmpr(k))((tmp(i,j,k),i=0,359), j=90,-90,-1)
    END DO

    DO k=1, NLEVEL
        READ(1,REC=rhr(k))((rh(i,j,k),i=0,359), j=90,-90,-1)
    END DO

    DO k=1, NLEVEL
        READ(1,REC=vvelr(k))((vvel(i,j,k),i=0,359), j=90,-90,-1)
    END DO

    DO k=1, NLEVEL
        READ(1,REC=absvr(k))((absv(i,j,k),i=0,359), j=90,-90,-1)
    END DO

    DO k=1, NLEVEL
        READ(1,REC=ugrdr(k))((ugrd(i,j,k),i=0,359), j=90,-90,-1)
    END DO

    DO k=1, NLEVEL
        READ(1,REC=vgrdr(k))((vgrd(i,j,k),i=0,359), j=90,-90,-1)
    END DO

    READ(1,REC=ugrd10r)((ugrd10(i,j),i=0,359), j=90,-90,-1)
    READ(1,REC=vgrd10r)((vgrd10(i,j),i=0,359), j=90,-90,-1)
    READ(1,REC=tmp2r)((tmp2(i,j),i=0,359), j=90,-90,-1)
    READ(1,REC=rh2r)((rh2(i,j),i=0,359), j=90,-90,-1)
    READ(1,REC=spfh2r)((spfh2(i,j),i=0,359), j=90,-90,-1)
    READ(1,REC=prmslr)((prmsl(i,j),i=0,359), j=90,-90,-1)
    close(1)



    !write to the grads file
    fileOut = trim(pathOut) //fileName(5:12)//fileName(14:15)//".gad"
    OPEN(2,FILE=fileOut,FORM='binary')

    DO k=1, NLEVEL
        WRITE(2)((hgt(i,j,k),i=lon1,lon2), j=lat1,lat2)
    END DO

    DO k=1, NLEVEL
        WRITE(2)((tmp(i,j,k),i=lon1,lon2), j=lat1,lat2)
    END DO

    DO k=1, NLEVEL
        WRITE(2)((rh(i,j,k),i=lon1,lon2), j=lat1,lat2)
    END DO

    DO k=1, NLEVEL
        WRITE(2)((vvel(i,j,k),i=lon1,lon2), j=lat1,lat2)
    END DO

    DO k=1, NLEVEL
        WRITE(2)((absv(i,j,k),i=lon1,lon2), j=lat1,lat2)
    END DO

    DO k=1, NLEVEL
        WRITE(2)((ugrd(i,j,k),i=lon1,lon2), j=lat1,lat2)
    END DO

    DO k=1, NLEVEL
        WRITE(2)((vgrd(i,j,k),i=lon1,lon2), j=lat1,lat2)
    END DO
   
    WRITE(2)((ugrd10(i,j),i=lon1,lon2), j=lat1,lat2)
    WRITE(2)((vgrd10(i,j),i=lon1,lon2), j=lat1,lat2)
    WRITE(2)((tmp2(i,j),i=lon1,lon2), j=lat1,lat2)
    WRITE(2)((rh2(i,j),i=lon1,lon2), j=lat1,lat2)
    WRITE(2)((spfh2(i,j),i=lon1,lon2), j=lat1,lat2)
    WRITE(2)((prmsl(i,j),i=lon1,lon2), j=lat1,lat2)
    close(2)

    call geth_newdate( curDate, sDate, (nTime) * 6 * 3600)
    nTime=nTime+1
end do

pause

end program grib2bin

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-2-27 13:14:48 | 显示全部楼层
grib22bin.bat  的内容很简单:

I:
del %2fnl*.*
wgrib2 %1%3 | wgrib2 -i  %1%3 -bin %2%3.bin >%2%3.txt
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表