/***********************************************************************版权所有(C)2013,西北大学和阿贡国家实验室*请参阅顶级目录中的COPYRIGHT通知。**********************************************************************//*$Id$(美元)*//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **此示例显示如何使用单个ncmpi_put_varn_int_all()调用*使用任意数组索引和长度编写请求序列。*使用ncmpi_put_varn_int_all()可以达到与HDF5写入相同的效果*通过以下2个API选择的文件位置序列。**H5S选择元素(fid、H5S_SELECT_SET、NUMP、(const hssize_t**)坐标);*H5Dwrite(数据集,H5T_NATIVE_INT,mid,fid,H5P_DEFAULT,val);**注意,在ncmpi_put_varn_int_all()中,用户可以编写多个*元素开始于每个选定位置。**下面给出了编译和运行命令,以及*输出文件。**%mpicc-O2-o输入变量输入变量输入.c-lpnetcdf*%mpiexec-n 4/put_varn_int/pvfs2/wkliao/testfile.nc*%ncmpidump/pvfs2/wkliao/testfile.nc*netcdf测试文件{*//文件格式:CDF-5(大变量)*尺寸:*Y=4;*X=10;*变量:*int变量(Y,X);*数据:**无功功率,无功功率=* 3, 3, 3, 1, 1, 0, 0, 2, 1, 1,* 0, 2, 2, 2, 3, 1, 1, 2, 2, 2,* 1, 1, 2, 3, 3, 3, 0, 0, 1, 1,* 0, 0, 0, 2, 1, 1, 1, 3, 3, 3 ;* }* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */#包括#包括#包括/*strcpy(),strncpy()*/#包括/*获取操作()*/#包括#包括#定义纽约4#定义NX 10#定义NDIMS 2#define ERR{if(ERR!=NC_NOERR){printf(“第%d行错误,在%s中:%s\n”,__line__,__FILE__,ncmpi_strerror(ERR));nerrs++;}}静态空隙用法(char*argv0){char*帮助=“用法:%s[-h]|[-q][file_name]\n”“[-h]打印帮助\n”“[-q]安静模式(失败时报告)\n”“[filename]输出netCDF文件名\n”;fprintf(标准错误,帮助,argv0);}int main(int argc,char**argv){外部int选项;char文件名[256];int i,j,rank,nprocs,verbose=1,err,nerrs=0;int ncid,cmode,varid,dimid[2],num_reqs,*buffer;MPI_Offset w_len,**开始=NULL,**计数=NULL;MPI_Init(&argc,&argv);MPI_Comm_rank(MPI_Comm_WORLD,&rank);MPI_Comm_size(MPI_Comm_WORLD,&nprocs);/*获取命令行参数*/while((i=getopt(argc,argv,“hq”))!=EOF)开关(i){案例“q”:详细=0;断裂;大小写“h”:默认值:如果(秩==0)使用(argv[0]);MPI_Finalize();返回1;}如果(argv[optind]==NULL)strcpy(文件名,“testfile.nc”);else snprintf(文件名,256,“%s”,argv[optind]);if(nprocs!=4&&等级==0&&详细)printf(“警告:此程序将在4个进程上运行”);/*创建用于写入的新文件----------------------------------------*/cmode=NC_CLOBBER|NC_64BIT_DATA;err=ncmpi_create(MPI_COMM_WORLD,文件名,cmode,MPI_INFO_NULL,&ncid);错误/*创建NY*NX大小的全局阵列*/err=ncmpi_def_dim(ncid,“Y”,NY,&dimid[0]);错误err=ncmpi_def_dim(ncid,“X”,NX,&dimid[1]);错误err=ncmpi_def_var(ncid,“var”,NC_INT,NDIMS,dimid,&varid);错误err=ncmpi_enddef(ncid);错误/*为4个进程选择任意数量的请求*/num_reqs=0;如果(秩==0)num_reqs=4;否则,如果(秩==1)num_reqs=6;否则,如果(秩==2)num_reqs=5;否则,如果(秩==3)num_reqs=4;如果(num_reqs>0){starts=(MPI_Offset**)malloc(num_reqs*sizeof(MPI_ Offset*));计数=(MPI_Offset**)malloc(num_reqs*sizeof(MPI_ Offset*));starts[0]=(MPI_Offset*)calloc(num_reqs*NDIMS,sizeof(MPI_ Offset));计数[0]=(MPI_Offset*)calloc(num_reqs*NDIMS,sizeof(MPI_ Offset));对于(i=1;i0) {空闲(开始[0]);空闲(计数[0]);自由(启动);自由(计数);}/*检查是否有任何PnetCDF内部malloc残留*/MPI_偏移malloc_size,sum_size;错误=ncmpi_inq_malloc_size(&malloc_sze);如果(err==NC_NOERR){MPI_Reduce(&malloc_size、&sum_size,1、MPI_OFFSET、MPI_sum,0、MPI_COMM_WORLD);if(秩==0&&sum_size>0)printf(“PnetCDF内部分配的堆内存有%lld个字节尚未释放”,sum_size);}MPI_Finalize();收益率(nerrs>0);}