爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5212|回复: 9

[源代码] 关于计算水汽通量散度的程序出错

[复制链接]

新浪微博达人勋

发表于 2014-10-6 14:06:45 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 lulu 于 2014-10-6 14:06 编辑

我在使用fortran程序运算水汽通量散度时,在编译时出现错误如下:
--------------------Configuration: flux - Win32 Debug--------------------
Linking...
Debug/flux.exe : warning LNK4084: total image size -1120153600 exceeds max (268435456); image may not run


flux.exe - 0 error(s), 1 warning(s)


搜了网上,发现大家说是因为数组定义太大,内存不足的缘故,而且不会影响程序运行,但是我继续运行,发现执行结果框闪退,而且并没有生成结果文件,自己也找不到错误在哪,麻烦各位大神帮忙看一下啊!
程序如下:
*水汽通量散度计算程序(计算分析水汽压,比湿,水汽通量散度)
*      
*本程序可改变网格点数in,jn,网格距d。
        parameter(in=144,jn=73,kn=17,d=2.5,tn=365)
          integer  i,j,k,t
        dimension z(in,jn,kn,tn),tem(in,jn,kn,tn),
     # u(in,jn,kn,tn),v(in,jn,kn,tn),es(in,jn,kn,tn),e(in,jn,kn,tn),
     # rh(in,jn,kn,tn),q(in,jn,kn,tn),qs(in,jn,kn,tn),
     * qu(in,jn,kn,tn),qv(in,jn,kn,tn),div(in,jn,kn,tn),
     * kp(kn),dp(kn),flux(in,jn,tn)
         
        data kp/1000,925,850,700,600,500,400,300,250,200,150,100,70,
     #               50,30,20,10/
        data dp/0.0,0.75,0.75,1.5,1.0,1.0,1.0,1.0,0.5,0.5,0.5,0.5,0.3,
     #               0.2,0.2,0.1,0.1/

          open(2,file='f:\2013flux\hgt.grd',form='binary')  
          open(3,file='f:\2013flux\air.grd',form='binary')
          open(4,file='f:\2013flux\rhum.grd',form='binary')
          open(5,file='f:\2013flux\uwnd.grd',form='binary')
          open(6,file='f:\2013flux\vwnd.grd',form='binary')
          open(7,file='f:\2013flux\pres.grd',form='binary')   

          do 10 t=1,tn     
          do 10 k=1,kn
        read(2,*) ((z(i,j,k,t),i=1,in),j=1,jn)
        read(3,*) ((tem(i,j,k,t),i=1,in),j=1,jn)
          read(4,*) ((rh(i,j,k,t),i=1,in),j=1,jn)
        read(5,*) ((u(i,j,k,t),i=1,in),j=1,jn)
        read(6,*) ((v(i,j,k,t),i=1,in),j=1,jn)
10     continue


        do 20 k=1,kn
        do 20 j=1,jn
        do 20 i=1,in

        !饱和水汽压
        es(i,j,k,t)=6.112*exp(17.67*tem(i,j,k,t)/(tem(i,j,k,t)+243.5))

        !饱和比湿q
       qs(i,j,k,t)=0.622*es(i,j,k,t)/(kp(k)-0.378*es(i,j,k,t))

        !比湿q
        q(i,j,k,t)=rh(i,j,k,t)*qs(i,j,k,t)/100

        !水汽通量的u,v分量
        qu(i,j,k,t)=u(i,j,k,t)*q(i,j,k,t)/9.8
        qv(i,j,k,t)=u(i,j,k,t)*q(i,j,k,t)/9.8

20     continue



      !单层水汽通量散度
        do 50 k=1,kn
          do 50 j=2,jn-1
        do 50 i=2,in-1

         div(i,j,k,t)=((qu(i+1,j,k,t)-qu(i-1,j,k,t))+(qv(i,j+1,k,t)
     #               -qv(i,j-1,k,t)))/(2*d)
50     continue

        !整层水汽通量散度flux
          do 60 j=1,jn
          do 60 i=1,in
          do 60 k=1,kn
          if(k<kn)then
          flux(i,j,t)=flux(i,j,t)+0.5*(div(i,j,k,t)+div(i,j,k+1,t))
     #              *dp(k+1)
          endif          


60      continue

        open(8,file='flux.grd',form='binary')
        write(8,*) (((flux(i,j,t),i=1,in),j=1,jn),t=1,tn)
             
        close(2)
        close(3)
        close(4)
        close(5)
        close(6)
        close(7)
        close(8)
        end

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

新浪微博达人勋

 楼主| 发表于 2014-10-6 15:28:08 | 显示全部楼层
自己改成了free 格式,并且设置了动态数组,但是又出现了其他错误。。。修改后的程序如下:

!水汽通量散度计算程序(计算分析水汽压,比湿,水汽通量散度)
!     
!本程序可改变网格点数in,jn,网格距d。
        parameter(in=144,jn=73,kn=17,d=2.5,tn=365)
            integer  i,j,k,t
        
            dimension kp(kn),dp(kn)
        data kp/1000,925,850,700,600,500,400,300,250,200,150,100,70,50,30,20,10/
        data dp/0.0,0.75,0.75,1.5,1.0,1.0,1.0,1.0,0.5,0.5,0.5,0.5,0.3,0.2,0.2,0.1,0.1/
        real,allocatable :: tem(:,:,:,:),u(:,:,:,:),v(:,:,:,:),es(:,:,:,:),e(:,:,:,:),rh(:,:,:,:),q(:,:,:,:),qs(:,:,:,:),qu(:,:,:,:),qv(:,:,:,:),div(:,:,:,:),flux(:,:,:)
        allocate (tem(in,jn,kn,tn),u(in,jn,kn,tn),v(in,jn,kn,tn),es(in,jn,kn,tn),e(in,jn,kn,tn),rh(in,jn,kn,tn),q(in,jn,kn,tn),qs(in,jn,kn,tn),qu(in,jn,kn,tn),qv(in,jn,kn,tn),div(in,jn,kn,tn),flux(in,jn,tn))

          
          open(3,file='f:\2013flux\air.grd',form='binary')
          open(4,file='f:\2013flux\rhum.grd',form='binary')
          open(5,file='f:\2013flux\uwnd.grd',form='binary')
          open(6,file='f:\2013flux\vwnd.grd',form='binary')
          open(7,file='f:\2013flux\pres.grd',form='binary')   
             
          do 10 t=1,tn     
          do 10 k=1,kn
      
        read(3,*) ((tem(i,j,k,t),i=1,in),j=1,jn)
          read(4,*) ((rh(i,j,k,t),i=1,in),j=1,jn)
        read(5,*) ((u(i,j,k,t),i=1,in),j=1,jn)
        read(6,*) ((v(i,j,k,t),i=1,in),j=1,jn)
10     continue

      
       
        do 20 k=1,kn
        do 20 j=1,jn
        do 20 i=1,in


        !饱和水汽压
        es(i,j,k,t)=6.112*exp(17.67*tem(i,j,k,t)/(tem(i,j,k,t)+243.5))

        !饱和比湿q
       qs(i,j,k,t)=0.622*es(i,j,k,t)/(kp(k)-0.378*es(i,j,k,t))
       
        !比湿q
        q(i,j,k,t)=rh(i,j,k,t)*qs(i,j,k,t)/100

        !水汽通量的u,v分量
        qu(i,j,k,t)=u(i,j,k,t)*q(i,j,k,t)/9.8
        qv(i,j,k,t)=u(i,j,k,t)*q(i,j,k,t)/9.8

20     continue
    deallocate(tem,rh,u,v)


      !散度
        do 50 k=1,kn
          do 50 j=2,jn-1
        do 50 i=2,in-1
      
          div(i,j,k,t)=((qu(i+1,j,k,t)-qu(i-1,j,k,t))+(qv(i,j+1,k,t)-qv(i,j-1,k,t)))/(2*d)
                                                    
50     continue
        !整层水汽通量散度flux
       
          
          do 60 j=1,jn
        do 60 i=1,in
          do 60 k=1,kn
          if(k<kn)then
          flux(i,j,t)=flux(i,j,t)+0.5*(div(i,j,k,t)+div(i,j,k+1,t))*dp(k+1)
          
          endif
          
60      continue


        open(8,file='flux.grd',form='binary')
       
        write(8,*) (((flux(i,j,t),i=1,in),j=1,jn),t=1,tn)
      
       
       
        close(3)
        close(4)
        close(5)
        close(6)
        close(7)
        close(8)
      
        end



然后它出现的错误如下(看起来是同样的错误):
--------------------Configuration: vapor - Win32 Debug--------------------
Compiling Fortran...
F:\2013flux\vapor.f90
F:\2013flux\vapor.f90(12) : Error: The highest data type rank permitted is INTEGER(KIND=8).   [365]
        allocate (tem(in,jn,kn,tn),u(in,jn,kn,tn),v(in,jn,kn,tn),es(in,jn,kn,tn),e(in,jn,kn,tn),rh(in,jn,kn,tn),q(in,jn,kn,tn),qs(in,jn,kn,tn),qu(in,jn,kn,tn),qv(in,jn,kn,tn),div(in,jn,kn,tn),flux(in,jn,tn))
-------------------------------^
F:\2013flux\vapor.f90(12) : Error: The highest data type rank permitted is INTEGER(KIND=8).   [365]
        allocate (tem(in,jn,kn,tn),u(in,jn,kn,tn),v(in,jn,kn,tn),es(in,jn,kn,tn),e(in,jn,kn,tn),rh(in,jn,kn,tn),q(in,jn,kn,tn),qs(in,jn,kn,tn),qu(in,jn,kn,tn),qv(in,jn,kn,tn),div(in,jn,kn,tn),flux(in,jn,tn))
----------------------------------------------^
F:\2013flux\vapor.f90(12) : Error: The highest data type rank permitted is INTEGER(KIND=8).   [365]
        allocate (tem(in,jn,kn,tn),u(in,jn,kn,tn),v(in,jn,kn,tn),es(in,jn,kn,tn),e(in,jn,kn,tn),rh(in,jn,kn,tn),q(in,jn,kn,tn),qs(in,jn,kn,tn),qu(in,jn,kn,tn),qv(in,jn,kn,tn),div(in,jn,kn,tn),flux(in,jn,tn))
-------------------------------------------------------------^
F:\2013flux\vapor.f90(12) : Error: The highest data type rank permitted is INTEGER(KIND=8).   [365]
        allocate (tem(in,jn,kn,tn),u(in,jn,kn,tn),v(in,jn,kn,tn),es(in,jn,kn,tn),e(in,jn,kn,tn),rh(in,jn,kn,tn),q(in,jn,kn,tn),qs(in,jn,kn,tn),qu(in,jn,kn,tn),qv(in,jn,kn,tn),div(in,jn,kn,tn),flux(in,jn,tn))
-----------------------------------------------------------------------------^
F:\2013flux\vapor.f90(12) : Error: The highest data type rank permitted is INTEGER(KIND=8).   [365]
        allocate (tem(in,jn,kn,tn),u(in,jn,kn,tn),v(in,jn,kn,tn),es(in,jn,kn,tn),e(in,jn,kn,tn),rh(in,jn,kn,tn),q(in,jn,kn,tn),qs(in,jn,kn,tn),qu(in,jn,kn,tn),qv(in,jn,kn,tn),div(in,jn,kn,tn),flux(in,jn,tn))
--------------------------------------------------------------------------------------------^
F:\2013flux\vapor.f90(12) : Error: The highest data type rank permitted is INTEGER(KIND=8).   [365]
        allocate (tem(in,jn,kn,tn),u(in,jn,kn,tn),v(in,jn,kn,tn),es(in,jn,kn,tn),e(in,jn,kn,tn),rh(in,jn,kn,tn),q(in,jn,kn,tn),qs(in,jn,kn,tn),qu(in,jn,kn,tn),qv(in,jn,kn,tn),div(in,jn,kn,tn),flux(in,jn,tn))
------------------------------------------------------------------------------------------------------------^
F:\2013flux\vapor.f90(12) : Error: The highest data type rank permitted is INTEGER(KIND=8).   [365]
        allocate (tem(in,jn,kn,tn),u(in,jn,kn,tn),v(in,jn,kn,tn),es(in,jn,kn,tn),e(in,jn,kn,tn),rh(in,jn,kn,tn),q(in,jn,kn,tn),qs(in,jn,kn,tn),qu(in,jn,kn,tn),qv(in,jn,kn,tn),div(in,jn,kn,tn),flux(in,jn,tn))
---------------------------------------------------------------------------------------------------------------------------^
F:\2013flux\vapor.f90(12) : Error: The highest data type rank permitted is INTEGER(KIND=8).   [365]
        allocate (tem(in,jn,kn,tn),u(in,jn,kn,tn),v(in,jn,kn,tn),es(in,jn,kn,tn),e(in,jn,kn,tn),rh(in,jn,kn,tn),q(in,jn,kn,tn),qs(in,jn,kn,tn),qu(in,jn,kn,tn),qv(in,jn,kn,tn),div(in,jn,kn,tn),flux(in,jn,tn))
-------------------------------------------------------------------------------------------------------------------------------------------^
F:\2013flux\vapor.f90(12) : Error: The highest data type rank permitted is INTEGER(KIND=8).   [365]
        allocate (tem(in,jn,kn,tn),u(in,jn,kn,tn),v(in,jn,kn,tn),es(in,jn,kn,tn),e(in,jn,kn,tn),rh(in,jn,kn,tn),q(in,jn,kn,tn),qs(in,jn,kn,tn),qu(in,jn,kn,tn),qv(in,jn,kn,tn),div(in,jn,kn,tn),flux(in,jn,tn))
-----------------------------------------------------------------------------------------------------------------------------------------------------------^
F:\2013flux\vapor.f90(12) : Error: The highest data type rank permitted is INTEGER(KIND=8).   [365]
        allocate (tem(in,jn,kn,tn),u(in,jn,kn,tn),v(in,jn,kn,tn),es(in,jn,kn,tn),e(in,jn,kn,tn),rh(in,jn,kn,tn),q(in,jn,kn,tn),qs(in,jn,kn,tn),qu(in,jn,kn,tn),qv(in,jn,kn,tn),div(in,jn,kn,tn),flux(in,jn,tn))
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------^
F:\2013flux\vapor.f90(12) : Error: The highest data type rank permitted is INTEGER(KIND=8).   [365]
        allocate (tem(in,jn,kn,tn),u(in,jn,kn,tn),v(in,jn,kn,tn),es(in,jn,kn,tn),e(in,jn,kn,tn),rh(in,jn,kn,tn),q(in,jn,kn,tn),qs(in,jn,kn,tn),qu(in,jn,kn,tn),qv(in,jn,kn,tn),div(in,jn,kn,tn),flux(in,jn,tn))
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^
F:\2013flux\vapor.f90(12) : Error: The highest data type rank permitted is INTEGER(KIND=8).   [365]
        allocate (tem(in,jn,kn,tn),u(in,jn,kn,tn),v(in,jn,kn,tn),es(in,jn,kn,tn),e(in,jn,kn,tn),rh(in,jn,kn,tn),q(in,jn,kn,tn),qs(in,jn,kn,tn),qu(in,jn,kn,tn),qv(in,jn,kn,tn),div(in,jn,kn,tn),flux(in,jn,tn))
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^
Error executing df.exe.

vapor.obj - 12 error(s), 0 warning(s)


求各位指教啊!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-10-6 19:35:18 | 显示全部楼层
再自我回复。。。上述问题解决了,可是结果还是出现错误41即虚拟内存不足的问题。。。到底该怎么办啊啊啊
9HEXZ79[Y]2}H55KXUC3E]D.jpg

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

新浪微博达人勋

发表于 2015-5-25 10:46:46 | 显示全部楼层
我的倒是能编译出来,可是出图的时候d不了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-3-5 09:36:36 | 显示全部楼层
不知道楼主的问题最后解决没有
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-3-5 09:40:55 | 显示全部楼层
雪颜 发表于 2015-5-25 10:46
我的倒是能编译出来,可是出图的时候d不了

请问您是怎么解决这个问题的?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-3-5 10:28:36 | 显示全部楼层
好资料。多谢楼主分享!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-4-8 18:31:33 | 显示全部楼层
请问LZ解决问题了吗{:5_239:}
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-4-11 13:18:51 | 显示全部楼层
lotus_1905 发表于 2017-4-8 18:31
请问LZ解决问题了吗

网格距不应该是0.5,要算的吧
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-4-11 13:19:21 | 显示全部楼层
小霸道丶 发表于 2018-4-11 13:18
网格距不应该是0.5,要算的吧

2.5
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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