使用gfortran将数据写成Grads格式的代码示例:

!-----'Fortran4Grads.f90'
program Fortran4Grads
implicit none
integer,parameter::xn=32 !-----经度(Longitude)网格数
integer,parameter::yn=18 !-----纬度(Latitude)网格数
integer,parameter::zn=7 !-----高度层数
integer,parameter::tn=5 !-----时间跨度20010101-20010105
integer,parameter::fileunit=8 !-----文件设备号
integer::x,y,z,v,t,irec !-----定义整型变量 !-----定义多维数组,保存变量
real(kind=4) :: u(xn,yn,zn,tn) !-----水平风速u
real(kind=4) :: w(xn,yn,zn,tn) !-----垂直风速w
real(kind=4) :: h(xn,yn,zn,tn) !-----相对湿度h
real(kind=4):: var !-----辅助变量
!-----数组赋值
do t=1,tn
do z=1,zn
do y=1,yn
do x=1,xn
u(x,y,z,t) = 10.0*sin(1.0*x+1.0*y)+1.0*z !-----水平风速u
w(x,y,z,t) = 10.0*cos(1.0*x+1.0*y)+1.0*z !-----垂直风速w
h(x,y,z,t) = 1.0/real(t)+1.0/real(x)+1.0/real(y) !-----相对湿度h
enddo
enddo
enddo
enddo
!-----将数据写入文件
open(fileunit,file='m.dat',form='unformatted',access='direct',recl=4)
!---在open语句中,gfortran编译real(kind=4)时,recl=4
irec = 1
do t=1,tn
!-----保存水平风速u
do z=1,zn
do y=1,yn
do x=1,xn
write(fileunit,rec=irec) u(x,y,z,t)
irec = irec + 1
enddo
enddo
enddo
!-----保存垂直风速w
do z=1,zn
do y=1,yn
do x=1,xn
write(fileunit,rec=irec) w(x,y,z,t)
irec = irec + 1
enddo
enddo
enddo
!-----保存相对湿度h
do z=1,zn
do y=1,yn
do x=1,xn
write(fileunit,rec=irec) h(x,y,z,t)
irec = irec + 1
enddo
enddo
enddo
enddo
close(fileunit)
write(*,*)'irec=xn*yn*zn*3*tn=',irec
end program Fortran4Grads

在grads中描述文件为:

dset ^m.dat
title "Write Data for GrADS Using Fortran"
undef 1e+40
xdef 32 linear -160.000000 10.000000
ydef 18 linear -90.000000 10.000000
zdef 7 levels 1000 850 700 500 300 200 100
tdef 5 linear 0Z2jan2001 1dy
vars 3
u 7 99 Eastward wind [m/s]
w 7 99 vertical wind [m/s]
h 7 99 relative humidity [%]
endvars

上面的Fortran语句保存数据时如果采用隐式Do循环,效率会高很多:

!-----'Fortran4Grads1.f90'
program Fortran4Grads1
implicit none
integer,parameter::xn=32 !-----经度(Longitude)网格数
integer,parameter::yn=18 !-----纬度(Latitude)网格数
integer,parameter::zn=7 !-----高度层数
integer,parameter::tn=5 !-----时间跨度20010101-20010105
integer,parameter::fileunit=8 !-----文件设备号
integer::x,y,z,v,t,irec !-----定义整型变量 !-----定义多维数组,保存变量
real(kind=4) :: u(xn,yn,zn,tn) !-----水平风速u
real(kind=4) :: w(xn,yn,zn,tn) !-----垂直风速w
real(kind=4) :: h(xn,yn,zn,tn) !-----相对湿度h
real(kind=4):: var !-----辅助变量
!-----数组赋值
do t=1,tn
do z=1,zn
do y=1,yn
do x=1,xn
u(x,y,z,t) = 10.0*sin(1.0*x+1.0*y)+1.0*z !-----水平风速u
w(x,y,z,t) = real(x+y+z) !-----垂直风速w
h(x,y,z,t) = 1.0/real(t)+1.0/real(x)+1.0/real(y) !-----相对湿度h
enddo
enddo
enddo
enddo
!-----将数据写入文件Grads
open(fileunit,file='m.dat',form='unformatted',access='direct',recl=xn*yn*zn*4)
!---在open语句中,gfortran编译real(kind=4)时,recl=4
irec = 1
do t=1,tn
!-----采用Do循环,保存水平风速u
write(fileunit,rec=irec) (((u(x,y,z,t),x=1,xn),y=1,yn),z=1,zn)
irec = irec + 1
!-----采用Do循环,保存垂直风速w
write(fileunit,rec=irec) (((w(x,y,z,t),x=1,xn),y=1,yn),z=1,zn)
irec = irec + 1
!-----采用Do循环,保存相对湿度h
write(fileunit,rec=irec) (((h(x,y,z,t),x=1,xn),y=1,yn),z=1,zn)
irec = irec + 1
enddo
close(fileunit)
write(*,*)'irec=3*tn=',irec
end program Fortran4Grads1

测试环境为centos X86-64,gcc 4.4.7

使用gfortran将数据写成Grads格式的代码示例的更多相关文章

  1. CAFFE学习笔记(四)将自己的jpg数据转成lmdb格式

    1 引言 1-1 以example_mnist为例,如何加载属于自己的测试集? 首先抛出一个问题:在example_mnist这个例子中,测试集是人家给好了的.那么如果我们想自己试着手写几个数字然后验 ...

  2. python2/3中 将base64数据写成图片,并将图片数据转为16进制数据的方法、bytes/string的区别

    1.python2将base64数据写成图片,并将数据转为16进制字符串的方法 import binascii img = u'R0lGODlhagAeAIcAAAAAAAAARAAAiAAAzABE ...

  3. 利用python将excel数据解析成json格式

    利用python将excel数据解析成json格式 转成json方便项目中用post请求推送数据自定义数据,也方便测试: import xlrdimport jsonimport requests d ...

  4. MFC编辑框接收数据动态更新与刷新方法代码示例-如何让编辑框内容实时更新

    MFC编辑框接收数据动态更新与刷新方法代码示例-如何让编辑框内容实时更新 关键代码: //发送数据通知 //from txwtech@163.com LRESULT CCommSampleDlg::O ...

  5. C++读写图片数据转成Base64格式

    转载:http://www.cnblogs.com/jeray/p/8746976.html 转载:https://www.cnblogs.com/lujin49/p/4957742.html 转载: ...

  6. 利用Ajax把前端的数据封装成JSON格式发送到服务器端并写成XML格式在服务器的硬盘上

    1.首先要在前端把要发送的东西(这里是一个实例化的car对象)都准备好,利用Ajax发送到服务器端,代码如下: <html xmlns="http://www.w3.org/1999/ ...

  7. flask框架下读取mysql数据 转换成json格式API

    研究了一天 因为需要从数据库拿数据然后转换成json的格式 expose出去为 API 发现一条数据是容易,两条以上我居然搞了这么久 好歹出来了 先贴一下 后面更新 mysql的操作 比较容易了htt ...

  8. C++读写图片数据转成Base64格式的一种方法

    最近在一个项目中要实现在客户端和服务端之间传送图片文件的功能,采用了C++语言读写图片转化成Base64格式进行传输.具体代码如下: //++Base64.h #pragma once class C ...

  9. C#中任意类型数据转成JSON格式

    /// <summary>    /// List转成json     /// </summary>    /// <typeparam name="T&quo ...

随机推荐

  1. leetcodequestion_56 Merge Intervals

    Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6],[8, ...

  2. UVAlive 6131 dp+斜率优化

    这道题和06年论文<从一类单调性问题看算法的优化>第一道例题很相似. 题意:给出n个矿的重量和位置,这些矿石只能从上往下运送,现在要在这些地方建造m个heap,要使得,sigma距离*重量 ...

  3. license文件生成原理

      byte解密weblogic加密oraclehex 现在很多J2EE应用都采用一个license文件来授权系统的使用,特别是在系统购买的早期,会提供有限制的license文件对系统进行限制,比如试 ...

  4. 大数据笔记13:Hadoop安装之Hadoop的配置安装

    1.准备Linux环境 1.0点击VMware快捷方式,右键打开文件所在位置 -> 双击vmnetcfg.exe -> VMnet1 host-only ->修改subnet ip ...

  5. mongo 初始配置

    连接mongo 时  在window的可视化工具 有时会出现这种无法找到表的情况 那么我们所需要的是什么?? 用客户端的命令行 查看是否能够真正连接成功 下载mongo window 并安装  这个网 ...

  6. JSON格式的各种转换

    /** *JSON 格式的解析 */ // json 去掉转义字符 message = message.replaceAll("\\\\", ""); //转成 ...

  7. 关于链接target的问题

    <a href="http://www.baidu.com" target="_blank">点击链接</a> target: _bla ...

  8. 后台的Activity被系统回收怎么办?

    onSaveIntanceState,当程序中的某个Activity A在运行中,主动或者被动的运行另外一个新的Activity B,这个时候 A就会执行onSaveIntanceState(Bund ...

  9. objectivc-c---block

    基本格式: returnType (^blockName[num])(paramList|void) = ^returnType(paramList|void){block Body}; 标红部分可根 ...

  10. 禁止chrome中CORS跨域资源共享错误

    在开发中,可以通过命令行命令chrome --allow-file-access-from-files来 禁止CORS错误. 只在紧急情况下使用这个方法,比如你的老板正站在你身后, 并且所有事情都无法 ...