爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: jeffggg

[求助] fortran处理数据问题

[复制链接]

新浪微博达人勋

发表于 2013-4-2 10:34:57 | 显示全部楼层
本帖最后由 平流层的萝卜 于 2013-4-2 10:46 编辑

这个可以弄成4维的,就是说可以设成a(i,j,k,t),而最外边的年循环维可以省去。读一年,计算一年。读下一年的时候数组数据自动刷新。楼主可以试试
do ye=1,year
    open(、、、、)
   do t、、、
       do k....
           do j...
               do i.....
                   read()  a(i,j,k,t)
                enddo
           enddo
        enddo
    enddo
    do  j=..
        do  i=..
              upentab(i,j)=                (此处循环你搞错了吧,应该是i和j吧)                         write(..) upentab(i,j)
         enddo     enddo
   

enddo


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

新浪微博达人勋

 楼主| 发表于 2013-4-2 11:40:23 | 显示全部楼层

10:15是把10-15侯的加起来再除以6  这样就是平均值了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2013-4-2 12:46:37 | 显示全部楼层
jeffggg 发表于 2013-4-2 11:40
10:15是把10-15侯的加起来再除以6  这样就是平均值了

这个用二维的数组就行了,大小是 nx*ny,因为你做的是简单的累加,所以直接在这个数组上累加就行了,你要用recl的直接读取方式来读取,不需要用顺序读取读入所有的资料,只读取你需要的那部分,每个rec的大小是nx*ny,这样你就能算出你要的那部分数据的recl值,再去读取就行了,思路给你了,接下来就是你自己做了,我就不写代码给你了,如果对直接读取不熟悉,请看彭国伦的教材
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-4 00:51:12 | 显示全部楼层
jeffggg 发表于 2013-4-1 19:37
清风版主啊 这个问题很常见  因为下载的NC数据如果要放在一个文件下面 计算 都要用数组的啊  它的数据本来 ...

请问楼主,fortran处理nc文件,是否需要插件呢?你是用的什么版本的编译器呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-4 12:42:26 | 显示全部楼层
我记得好像ctl是可以批量生成的?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-5-18 11:17:33 | 显示全部楼层
我也遇到这个问题了,不知道动态数组能不能解决问题。。。正在试
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-5-18 12:22:02 | 显示全部楼层
定义动态数组是可以解决这个问题的,刚刚试过了。我的数组比你的还大呢,是1*1的资料
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-5-19 09:08:23 | 显示全部楼层
lemon_tree 发表于 2013-5-18 12:22
定义动态数组是可以解决这个问题的,刚刚试过了。我的数组比你的还大呢,是1*1的资料

没用过啊  麻烦大神讲清楚点
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-5-19 11:00:01 | 显示全部楼层
jeffggg 发表于 2013-5-19 09:08
没用过啊  麻烦大神讲清楚点

我也是昨天才试的,之前没用过,在fortran书上有教动态数组的用法。动态数组的使用分三步
举个例子
real,allocatable::qu(:,:,:,:),qv(:,:,:,:),quv(:,:,:,:)    !定义
使用之前再给数组分配相应的空间
allocate(qu(nx,ny,nz2,nt))
allocate(qv(nx,ny,nz2,nt))
allocate(quv(nx,ny,nz2,nt))
用完输出后再释放空间
deallocate(qu)
deallocate(qv)
deallocate(quv)

我的程序用了二十来个数组,没个数组使用完我都尽量立即输出结果释放空间,然后就不会出现那个问题啦,希望对你有帮助,具体还是参考fortran书吧,南信大那本书是在164页
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-5-19 21:30:48 | 显示全部楼层
教一个特别行之有效的方法:首先 要确立你的思路,是可以在时间上分割 还是在 空间上 分割, 然后用 grads把数据分成几个数据,就可以了,内存不够的时候只用动态数组不一定解决问题。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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