使用C语言将数据写成Grads格式的代码示例

一般使用Fortran,但有时又不得不使用C语言。

下面是使用C语言将数据写成Grads格式的代码示例:

/*WriteDataForGrads.c*/
//-------------------------------------------------------
// Author: Wu Xuping
// Date:2013-08-17
// Desciption: Test For Writing Data into Grads Using C Language.
//-------------------------------------------------------

#include <stdio.h>
#include <math.h>
int main()
{
	//-------------------------------------------------------
	//定义整型常量
	const int xn=32;//经度(Longitude)网格数
	const int yn=18;//纬度(Latitude)网格数
	const int zn=7; //高度层数
	const int vn=3; //3个变量分别保存水平风速u,垂直风速w,相对湿度h
	const int tn=5; //时间跨度20010101-20010105
	//定义整型变量
	int x,y,z,v,t;
	//定义五维数组,测试发现数值类型不能是double
	float u[xn][yn][zn][tn];//水平风速u
	float w[xn][yn][zn][tn];//垂直风速w
	float h[xn][yn][zn][tn];//相对湿度h
	//-------------------------------------------------------
	//数据赋值
	for(t=0;t<tn;t++){
	//时间维数循环
		for(z=0;z<zn;z++){
		//高度层维数循环
			for(y=0;y<yn;y++){
			//y方向维数循环
				for(x=0;x<xn;x++){
				//x方向维数循环
					u[x][y][z][t]=10*sin(x+y)+z;
					w[x][y][z][t]=10*cos(x+y)+z;
					h[x][y][z][t]=1.0/(t+1)+1.0/(x+1)+1.0/(y+1);
				}
			}
		}
	}
	//-------------------------------------------------------
	FILE * pfile;//定义文件指针
	//写入Grads格式的数据文件
	pfile=fopen("WriteDataForGrads.dat","wb");
	if (pfile != NULL){
		for(t=0;t<tn;t++){
		//时间维数循环
			//----------------------------------水平风速
			for(z=0;z<zn;z++){
			//高度层维数循环
				for(y=0;y<yn;y++){
				//y方向维数循环
					for(x=0;x<xn;x++){
					//x方向维数循环
						fwrite(&u[x][y][z][t],sizeof(float),1,pfile);
					}
				}
			}
			//----------------------------------垂直风速
			for(z=0;z<zn;z++){
			//高度层维数循环
				for(y=0;y<yn;y++){
				//y方向维数循环
					for(x=0;x<xn;x++){
					//x方向维数循环
						fwrite(&w[x][y][z][t],sizeof(float),1,pfile);
					}
				}
			}
			//----------------------------------相对湿度
			for(z=0;z<zn;z++){
			//高度层维数循环
				for(y=0;y<yn;y++){
				//y方向维数循环
					for(x=0;x<xn;x++){
					//x方向维数循环
						fwrite(&h[x][y][z][t],sizeof(float),1,pfile);
					}
				}
			}
			//----------------------------------
		}
	}
	fclose(pfile);//关闭文件指针
	return 0;
}
//-------------------------------------------------------


编译和运行如下:

g++ -o WriteDataForGrads WriteDataForGrads.c 
./WriteDataForGrads


Grads中控制文件为:

dset ^WriteDataForGrads.dat
title "Write Data for GrADS Using C"
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

测试环境Centos 6.4,gcc 4.4.7.

你可能感兴趣的:(使用C语言将数据写成Grads格式的代码示例)