爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 51425|回复: 83

[经验总结] Fortran批量为nc写ctl

  [复制链接]

新浪微博达人勋

发表于 2012-5-4 16:15:41 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 黎大页子 于 2012-5-5 21:50 编辑

有的NetCDF文件不符合COARES约定,不能用sdfopen直接打开,需要自己配写ctl文件。详见兰溪的帖子【免费派送】“SDF file has no discernable X coordinate” 问题详解http://bbs.06climate.com/forum.php?mod=viewthread&tid=6008&fromuid=1368

但是网上下载数据的多半是一年一个nc文件,如果是日资料,需要判断闰年,这种情况我不会用一个ctl描述全部文件。一个一个写又太麻烦。所以可以用Fortran批量生产。
1.先在excel里面写好要生产的ctl路径+文件名,斜杠一定要用“\”,用"/"Fortran读的时候会出错,然后Ctrl+下拉.....
2.复制放进namelist.txt,然后用fortran读namelist,读了路径+文件名放进数组name()里面。
3.加入闰年判断子程序
4.依次把ctl文件内容write进去,运行就可以看见可爱的ctl们一个一个自己蹦出来啦,真是神清气爽。

程序很简单,唯一让我百度了一下的地方是不换行的问题,有一个现成的advance=“no”,很好用。advance是write()里面的控制语句,默认为yes,也就是换行,改成no可以接着往下写,但是一定要指明写的内容的格式。

这个问题不难,经验总结比较弱,自己mark下来,也给同为小白的同志们共勉。

PS:后来发现,其实GrADS考虑了闰年的情况,所以无论是日资料,还是月资料,都可以一个ctl搞定,详见
http://bbs.06climate.com/forum.php?mod=viewthread&tid=6663
但是因为我的数据处理是每年分开做的,所以ctl分开比较方便,不然每次还要掐着指头算第X年在几千天当中究竟是哪一段.....大家根据自己数据处理的需要选择合适的方法吧。

  1. !This program is to write ctl for monthly mean documents:''sh/lh_oaflux_xxxx.nc''
  2. Program writectl
  3. implicit none
  4. integer::i,j,y,var,days
  5. character(len=100)::name(54)

  6. open(10,file='e:/thesis/lh/ctl_name.txt')!读取批处理文件名
  7. rewind(10)
  8.   do i=1,26,1
  9.   y=1985+i-1
  10.   call year(y,days)

  11.   read(10,*)name(i) !把文件名放入数组
  12. !----写文件--------------------------------------------
  13.   write(*,*)name(i)
  14.   open(37,file=name(i),form='formatted',iostat=var)
  15.   write(37,'(a)',advance="no")'dset e:/thesis/lh/lh_oaflux_'
  16.   write(37,'(i4)',advance="no")y
  17.   write(37,'(a)',advance="no")'.nc'
  18.   write(37,*)'title monthly mean surface latent heat flux'
  19.   write(37,*)'undef 32766'
  20.   write(37,*)'xdef lon 360 linear 0.5 1.0'
  21.   write(37,*)'ydef lat 180 linear -89.5 1.0'
  22.   write(37,'(a)',advance="no")'tdef time '
  23.   write(37,'(i3)',advance="no")days
  24.   write(37,'(a)',advance="no")' linear 00Z01JAN'
  25.   write(37,'(i4)',advance="no")y
  26.   write(37,*)'1dy'
  27.   write(37,*)'vars 2'
  28.   write(37,*)'lhtfl=>lhtfl 0 99 daily mean surface latent heat'
  29.   write(37,*)'err=>err 0 99 daily mean estimated error of latent heat'
  30.   write(37,*)'endvars'
  31. !---------------------------------------------------------
  32.   close(37)
  33.   end do
  34. close(10)

  35. stop
  36. end

  37. !闰年判断-------------------------------
  38. subroutine year(m,dys)
  39. implicit none
  40. integer::m,dys
  41. dys=365
  42. if(mod(m,100)==0)then
  43.    if(mod(m,400)==0)then
  44.    dys=dys+1
  45.    end if
  46. else
  47.    if(mod(m,4)==0)then
  48.    dys=dys+1
  49.    end if
  50. end if

  51. return
  52. stop
  53. end subroutine
  54. end










评分

参与人数 8金钱 +117 贡献 +22 体力 +750 收起 理由
しovの李少 + 1 很给力!
善人/jw + 18 + 6 很给力!
兰溪之水 + 18 + 2 + 200 好好战斗~
topmad + 18 + 2 + 120 体力是亮点
传说中的谁 + 15 + 2 + 200 多给点体力,晚上大战A
artmunich + 19 + 3 + 120 比深深给的多一些,哈哈
mofangbao + 10 + 5
言深深 + 18 + 2 + 110 很给力!

查看全部评分

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

新浪微博达人勋

 成长值: 0
发表于 2012-5-4 16:19:44 | 显示全部楼层
哎呀,沙发啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-5-4 16:21:14 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2012-5-4 16:22:02 | 显示全部楼层
黎大页子 发表于 2012-5-4 16:21
你真的好快!,一看就是天天泡在网上的技术宅男呀,嘿嘿。

吓···哪有,碰巧一下子登录进来就看到了呗
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-5-4 16:30:42 | 显示全部楼层
深深你还我沙发。。。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2012-5-4 16:46:29 | 显示全部楼层
真好,很省力啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2012-5-4 16:46:54 | 显示全部楼层
artmunich 发表于 2012-5-4 16:30
深深你还我沙发。。。。。

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

新浪微博达人勋

发表于 2012-5-4 16:47:19 | 显示全部楼层
artmunich 发表于 2012-5-4 16:30
深深你还我沙发。。。。。

你们这....人民内部矛盾....结果被升级到阶级矛盾了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-5-4 16:50:11 | 显示全部楼层
围观一下,好久木有原创帖子了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-5-4 16:55:19 | 显示全部楼层
传说中的谁 发表于 2012-5-4 16:50
围观一下,好久木有原创帖子了

什么叫做大战A?
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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