爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5414|回复: 10

[求助] 我用Fortran计算EC细网格数据的TD,但写法有误?请高手指教!

[复制链接]

新浪微博达人勋

发表于 2013-4-22 17:44:59 | 显示全部楼层 |阅读模式

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

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

x
我之前用程序1写的,但计算TD数值不对;
后来改成了程序2,计算出的TD才靠谱。
不知道这两种写法有什么区别?或者说前面的一种写法错误在哪里?我是Fortran菜鸟,还请高手指教~

程序1:
        PROGRAM TD_CALCULATION
        PARAMETER (LEV=7,NX=361,NY=281)
        DIMENSION T(NX,NY,LEV),RH(NX,NY,LEV),TD(NX,NY,LEV)

      OPEN(100,FILE='t.txt')
        OPEN(200,FILE='rh.txt')
        OPEN(300,FILE='td.txt')

        DO k=1,LEV
      READ(100,*) ((t(i,j,k),j=1,361),i=1,281)
        READ(200,*) ((rh(i,j,k),j=1,361),i=1,281)
        ENDDO
        
        WRITE(*,*)RH(1,1,1)
        
        CALL CAL_RH_TD(T,RH,TD)
        DO k=1,7
      WRITE(300,'(361f12.4)') ((td(i,j,k),j=1,361),i=1,281)
        ENDDO

        END

         SUBROUTINE CAL_RH_TD(T,RH,TD)
C     THIS SUBROUTINE CALCULATE DEW POINT BY USING TEMPERATURE AND RELATIVE HUMIDITY
C     INPUT   T ========> TEMPERATURE (CELSIUS DEGREE)
C             RH =======> RELATIVE HUMIDITY  (E/ES)
C             LEV ======> LEVEL
C     OUTPUT  TD =======> DEW POINT  (CELSIUS DEGREE)
      DIMENSION T(281,361,7),RH(281,361,7),TD(281,361,7)
      DO K=1,7
        DO I=1,281
        DO J=1,361
            RH(i,j,k)=RH(i,j,k)/100.
            IF(RH(i,j,k).GT.1.0)RH(i,j,k)=1.0
            IF(RH(i,j,k).LT.0.05)RH(i,j,k)=0.05
          RMA=ALOG(RH(i,j,k))*461.*273.15/4.18/597./1000.+T(i,j,k)/
     1        (273.15+T(i,j,k))
          TD(i,j,k)=273.15*RMA/(1-RMA)
            
      ENDDO
        ENDDO
        ENDDO

      RETURN
      END



程序2:
        PROGRAM TD_CALCULATION
        parameter(ki=281,kj=361,kc=7)
        integer i,j,c
        DIMENSION T(ki,kj,kc),RH(ki,kj,kc),TD(ki,kj,kc)

      OPEN(100,FILE='t.txt')
        OPEN(200,FILE='rh.txt')
        OPEN(300,FILE='td.txt')

        do  c=1,kc
         READ(100,*)((t(i,j,c),j=1,kj),i=1,ki)
      READ(200,*)((rh(i,j,c),j=1,kj),i=1,ki)
         
      enddo

          CALL CAL_RH_TD(T,RH,TD)

        do  c=1,kc
           WRITE(300,'(361f12.4)')((td(i,j,c),j=1,kj),i=1,ki)
            ENDDO

        WRITE(*,'(3f12.4)')        T(100,200,2),RH(100,200,2),TD(100,200,2)

        END

         SUBROUTINE CAL_RH_TD(T,RH,TD)
C     THIS SUBROUTINE CALCULATE DEW POINT BY USING TEMPERATURE AND RELATIVE HUMIDITY
C     INPUT   T ========> TEMPERATURE (CELSIUS DEGREE)
C             RH =======> RELATIVE HUMIDITY  (E/ES)
C             LEV ======> LEVEL
C     OUTPUT  TD =======> DEW POINT  (CELSIUS DEGREE)
        parameter(ki=281,kj=361,kc=7)
      DIMENSION T(ki,kj,kc),RH(ki,kj,kc),TD(ki,kj,kc)
      DO c=1,7
        DO i=1,281
        DO j=1,361
            RH(i,j,c)=RH(i,j,c)/100.
            IF(RH(i,j,c).GT.1.0)RH(i,j,c)=1.0
            IF(RH(i,j,c).LT.0.05)RH(i,j,c)=0.05
          RMA=ALOG(RH(i,j,c))*461.*273.15/4.18/597./1000.+T(i,j,c)/
     1        (273.15+T(i,j,c))
          TD(i,j,c)=273.15*RMA/(1-RMA)  
      ENDDO
        ENDDO
        ENDDO
        
      RETURN
      END

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

新浪微博达人勋

发表于 2013-4-22 21:10:53 | 显示全部楼层
感谢楼主分享!!!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-22 21:11:07 | 显示全部楼层
感谢楼主分享!!!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-22 21:23:50 | 显示全部楼层
第一个程序在调用子程序的时候数据传递出错了,主程序数组定义:
PARAMETER (LEV=7,NX=361,NY=281)
DIMENSION T(NX,NY,LEV),RH(NX,NY,LEV),TD(NX,NY,LEV) !T(361,281,7)
子程序数组定义DIMENSION T(281,361,7)……
数组传递的时候 X Y 乱了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-4-23 08:54:08 | 显示全部楼层

谢谢Cheen帮我发现问题!
原来是我太粗心了,犯了这么低级的错误。。。
我把x,y方向数组的范围写错了,看来还是写成ki,ki这样比较简单些。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-1-3 11:56:34 | 显示全部楼层
请教lz,ec细网格数据是怎么得到并处理为*.txt各要素场的?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-3-14 14:07:47 | 显示全部楼层
要先用grads读nc数据输出为二进制的dat文件,然后再用fortran读取dat文件再转成txt文件~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-4-30 10:28:26 | 显示全部楼层
请问楼主,cmacast下发的ec细网格二级压缩资料*.bin怎么处理成.txt文件呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-6-9 10:18:55 | 显示全部楼层
346883050 发表于 2015-4-30 10:28
请问楼主,cmacast下发的ec细网格二级压缩资料*.bin怎么处理成.txt文件呢?

很抱歉,这个cmacast下发的文件处理我没研究过哈~我只做了.NC格式文件的处理...
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-6-9 10:20:08 | 显示全部楼层
clare 发表于 2015-1-3 11:56
请教lz,ec细网格数据是怎么得到并处理为*.txt各要素场的?

要先用grads读nc数据输出为二进制的dat文件,然后再用fortran读取dat文件再转成txt文件~
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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