#include #include #include #include "../include/binio.h" #include "../include/v5d.h" void v5dconv_(double *u, double *v, double *w, double *c, int *nx, int *ny, int *nz, int *t) { /** STEP 1: The following variables must be initialized in STEP 2. See ** the README file section describing the 'v5dCreateSimple' call for more ** information. **/ int NumTimes=1; /* number of time steps */ int NumVars=4; /* number of variables */ int Nr=*nx, Nc=*ny, Nl[MAXVARS]; /* size of 3-D grids */ char VarName[MAXVARS][10]; /* names of variables */ int TimeStamp[MAXTIMES]; /* real times for each time step */ int DateStamp[MAXTIMES]; /* real dates for each time step */ int CompressMode=1; /* number of bytes per grid */ int Projection=0; /* a projection number */ float ProjArgs[100]; /* the projection parameters */ int Vertical=0; /* a vertical coord system number */ float VertArgs[MAXLEVELS]; /* the vertical coord sys parameters */ char s[256]; float *ug, *vg, *wg, *cg; int i, j, k; sprintf(s, "%d.%s", *t, "v5d"); TimeStamp[0] = 000001 + *t; DateStamp[0] = 01001; Nl[0] = *nz; Nl[1] = *nz; Nl[2] = *nz; Nl[3] = *nz; ProjArgs[0] = Nr; ProjArgs[1] = Nc; ProjArgs[2] = 1; ProjArgs[3] = 1; VertArgs[0] = 1; VertArgs[1] = 1; /* VarName[0]="U"; VarName[1]="V"; VarName[2]="W"; VarName[3]="C";*/ sprintf(VarName[0],"U"); sprintf(VarName[1],"V"); sprintf(VarName[2],"W"); sprintf(VarName[3],"C"); v5dCreate( s, NumTimes, NumVars, Nr, Nc, Nl, (const char(*)[10]) VarName, TimeStamp, DateStamp, CompressMode, Projection, ProjArgs, Vertical, VertArgs ); /* allocate space for grid data */ { int maxnl, l; maxnl = Nl[0]; for (l=1;lmaxnl) maxnl = Nl[l]; } ug = (float *) malloc( Nr * Nc * maxnl * sizeof(float) ); if (!ug) { printf("Error: out of memory\n"); exit(1); } vg = (float *) malloc( Nr * Nc * maxnl * sizeof(float) ); if (!vg) { printf("Error: out of memory\n"); exit(1); } wg = (float *) malloc( Nr * Nc * maxnl * sizeof(float) ); if (!wg) { printf("Error: out of memory\n"); exit(1); } cg = (float *) malloc( Nr * Nc * maxnl * sizeof(float) ); if (!cg) { printf("Error: out of memory\n"); exit(1); } } for (i = 0; i < *nx; i++) for (j = 0; j < *ny; j++) for (k = 0; k < *nz; k++) { ug[ i + (j + k * Nc) * Nr ] = - u[ i + (j + k * Nc) * Nr ]; vg[ i + (j + k * Nc) * Nr ] = v[ i + (j + k * Nc) * Nr ]; wg[ i + (j + k * Nc) * Nr ] = w[ i + (j + k * Nc) * Nr ]; cg[ i + (j + k * Nc) * Nr ] = c[ i + (j + k * Nc) * Nr ]; } v5dWrite( 1, 1, vg ); v5dWrite( 1, 2, ug ); v5dWrite( 1, 3, wg ); v5dWrite( 1, 4, cg ); v5dClose(); }