一般使用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