使用gfortran将数据写成Grads格式的代码示例
使用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格式的代码示例的更多相关文章
- CAFFE学习笔记(四)将自己的jpg数据转成lmdb格式
1 引言 1-1 以example_mnist为例,如何加载属于自己的测试集? 首先抛出一个问题:在example_mnist这个例子中,测试集是人家给好了的.那么如果我们想自己试着手写几个数字然后验 ...
- python2/3中 将base64数据写成图片,并将图片数据转为16进制数据的方法、bytes/string的区别
1.python2将base64数据写成图片,并将数据转为16进制字符串的方法 import binascii img = u'R0lGODlhagAeAIcAAAAAAAAARAAAiAAAzABE ...
- 利用python将excel数据解析成json格式
利用python将excel数据解析成json格式 转成json方便项目中用post请求推送数据自定义数据,也方便测试: import xlrdimport jsonimport requests d ...
- MFC编辑框接收数据动态更新与刷新方法代码示例-如何让编辑框内容实时更新
MFC编辑框接收数据动态更新与刷新方法代码示例-如何让编辑框内容实时更新 关键代码: //发送数据通知 //from txwtech@163.com LRESULT CCommSampleDlg::O ...
- C++读写图片数据转成Base64格式
转载:http://www.cnblogs.com/jeray/p/8746976.html 转载:https://www.cnblogs.com/lujin49/p/4957742.html 转载: ...
- 利用Ajax把前端的数据封装成JSON格式发送到服务器端并写成XML格式在服务器的硬盘上
1.首先要在前端把要发送的东西(这里是一个实例化的car对象)都准备好,利用Ajax发送到服务器端,代码如下: <html xmlns="http://www.w3.org/1999/ ...
- flask框架下读取mysql数据 转换成json格式API
研究了一天 因为需要从数据库拿数据然后转换成json的格式 expose出去为 API 发现一条数据是容易,两条以上我居然搞了这么久 好歹出来了 先贴一下 后面更新 mysql的操作 比较容易了htt ...
- C++读写图片数据转成Base64格式的一种方法
最近在一个项目中要实现在客户端和服务端之间传送图片文件的功能,采用了C++语言读写图片转化成Base64格式进行传输.具体代码如下: //++Base64.h #pragma once class C ...
- C#中任意类型数据转成JSON格式
/// <summary> /// List转成json /// </summary> /// <typeparam name="T&quo ...
随机推荐
- android4.4 settings 中控制卡1 卡2都振动
在package/app/Settings/src/com/android/settings/SoundSettings.java
- 填坑 - 使用Entity Framework 6 + Sqlite进行DB first开发
Sqlite团队也是渣啊,到第6代了还不支持Code First. 1.安装运行环境和组件 .安装SQLite的Visual Studio设计器支持 只有安装了它,在[新建ADO.NET实体数据模型] ...
- Swift中对计算属性的理解和对之前的补充
这个功能的重点作用应该是在计算上. 对于一般的属性,要么直接存一个,要么直接读一个,计算属性则可以根据所设置内容,进行一些修改或计算之类的, 比如: import UIKit class sample ...
- SignalR2.0开发实例之——私聊
一.前言 继续上一章的补充,这章介绍使用私聊的功能.主要通过一个方法 Clients.Client(Context.ConnectionId).showMessage(msg); SignalR框 ...
- 3种创建、调用JavaScript对象的方法
hey you guys,两个月没有写技术博客了.作为一名有理想.有抱负的程序员,两个月不写技术博客,真该打.业精于勤,荒于嬉.行成于思,毁于随.勤奋是必不可少的,今后养成一周至少一篇博客的习惯.好了 ...
- linux 进程备忘
进程间同步互斥方式: 1.管道pipe(亲属进程适用),命名管道fifopipe 2.信号量 3.共享内存配合信号量
- ARP协议的报文格式 转自n哖苡逅
ARP协议的报文格式 结构ether_header定义了以太网帧首部:结构arphdr定义了其后的5个字段,其信息用于在任何类型的介质上传送ARP请求和回答:ether_arp结构除了包含arphdr ...
- nRF51 DFU 初始化包介绍及生成工具
nRF51 DFU 初始化包 当升级数据包时,在应用程序映像传输之前,在DFU中需要初始化包来执行映像的安全检测.这个初始化包作为升级流程的一部分提供了安全检测机制,因此被升级的设备只能接收兼容的应用 ...
- 使用C# DES解密java DES加密的字符串
转自 microAllen 最近需要使用C#的DES解密工具类解密字符串,但是要解密的字符串是使用java进行DES加密的,去网上查了关于C#和java关于DES加密解密的资料,发现可以相互加密解 ...
- 成为一名优秀的C程序员
英文原文:To become a good C programmer 问题的提出 每过一段时间我总会收到一些程序员发来的电子邮件,他们会问我是用什么编程语言来编写自己的游戏的,以及我是如何学习这种编程 ...