爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4029|回复: 7

[求助] fortran编程时出现变量溢出怎么办

[复制链接]

新浪微博达人勋

发表于 2013-10-24 10:54:07 | 显示全部楼层 |阅读模式

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

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

x
请问大家fortran编程时出现这个错怎么办,我设置的变量为  parameter(nl=30,nx=144,ny=73,nz=8,nt=365,nnt=291)
是不是数据太大了,fortran运行不了?求高手指点!

--------------------Configuration: hecheng850uv - Win32 Debug--------------------
Compiling Fortran...
D:\tmax\huanliu_daily\sqtl\hecheng850uv.for
D:\tmax\huanliu_daily\sqtl\hecheng850uv.for(4) : Error: A common block or variable may not exceed 2147483647 bytes
real q(nx,ny,nz,nnt,nl),cha(nx,ny,nz,nnt)
-------------^
Error executing df.exe.

hecheng850uv.obj - 1 error(s), 0 warning(s)



QQ截图20131024104847.png
QQ截图20131024104751.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-10-24 11:35:53 | 显示全部楼层
数值开的太大,变小的。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-10-24 11:53:56 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-10-24 12:23:46 | 显示全部楼层
别用那么大的数组,算个平均根本不用数组的。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-10-24 12:43:01 | 显示全部楼层
lqouc 发表于 2013-10-24 12:23
别用那么大的数组,算个平均根本不用数组的。

求指点, 这是我的程序,怎么才能做到不用数组呢
    parameter(nl=30,nx=144,ny=73,nz=8,nt=365,nnt=291)
        real a(nx,ny,nz,nnt),q13(nx,ny,nz,nnt)
        real q(nx,ny,nz,nnt,nl),cha(nx,ny,nz,nnt)
        character*9 filename(nl)

        open(31,file='D:\tmax\huanliu_daily\sqtl\sj\u-2013.grd',
     &form='binary')
        !!!!!!2013年资料到第291天
        do t=1,nnt
             do k=1,nz
        do j=1,ny
        do i=1,nx
        read(31) q13(i,j,k,t)
        enddo;enddo;enddo;enddo
        close(31)

        open(11,file='D:\tmax\huanliu_daily\name.txt')
        do i=1,nl
        read(11,'(a9)')filename(i)
        enddo
        close(11)
      
        do nk=1,nl
        open(21,file='D:\tmax\huanliu_daily\sqtl\sj\u-
     &'//trim(filename(k))//'.grd',form='binary')
        do t=1,nnt
             do k=1,nz
        do j=1,ny
        do i=1,nx
        read(21) q(i,j,k,t,nk)
        enddo;enddo;enddo;enddo
        close(21)
        enddo

      do t=1,nnt
             do k=1,nz
        do j=1,ny
        do i=1,nx
        a(i,j,k,t)=0
        do nk=1,nl
        a(i,j,k,t)=a(i,j,k,t)+q(i,j,k,t,nk)
        enddo
        a(i,j,k,t)=a(i,j,k,t)/real(nl)
        enddo;enddo;enddo;enddo  
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-10-24 12:43:29 | 显示全部楼层
lqouc 发表于 2013-10-24 12:23
别用那么大的数组,算个平均根本不用数组的。

求指点, 这是我的程序,怎么才能做到不用数组呢
    parameter(nl=30,nx=144,ny=73,nz=8,nt=365,nnt=291)
        real a(nx,ny,nz,nnt),q13(nx,ny,nz,nnt)
        real q(nx,ny,nz,nnt,nl),cha(nx,ny,nz,nnt)
        character*9 filename(nl)

        open(31,file='D:\tmax\huanliu_daily\sqtl\sj\u-2013.grd',
     &form='binary')
        !!!!!!2013年资料到第291天
        do t=1,nnt
             do k=1,nz
        do j=1,ny
        do i=1,nx
        read(31) q13(i,j,k,t)
        enddo;enddo;enddo;enddo
        close(31)

        open(11,file='D:\tmax\huanliu_daily\name.txt')
        do i=1,nl
        read(11,'(a9)')filename(i)
        enddo
        close(11)
      
        do nk=1,nl
        open(21,file='D:\tmax\huanliu_daily\sqtl\sj\u-
     &'//trim(filename(k))//'.grd',form='binary')
        do t=1,nnt
             do k=1,nz
        do j=1,ny
        do i=1,nx
        read(21) q(i,j,k,t,nk)
        enddo;enddo;enddo;enddo
        close(21)
        enddo

      do t=1,nnt
             do k=1,nz
        do j=1,ny
        do i=1,nx
        a(i,j,k,t)=0
        do nk=1,nl
        a(i,j,k,t)=a(i,j,k,t)+q(i,j,k,t,nk)
        enddo
        a(i,j,k,t)=a(i,j,k,t)/real(nl)
        enddo;enddo;enddo;enddo  
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-10-24 15:00:09 | 显示全部楼层
不要都把数据读出来再用循环进行求和平均,循环读取的时候完全可以直接进行累加,读完了除以记录数就好了。
你这么算效率很低。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-10-24 16:29:09 | 显示全部楼层
什么资料居然用五维的数组啊,一般的数据不需要用这么大的数组
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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