Skip to content
Snippets Groups Projects
Commit d5fce445 authored by Thomas Jahns's avatar Thomas Jahns :cartwheel: Committed by Sergey Kosukhin
Browse files

Cleanup of example programs.

parent 04a4b26b
No related branches found
No related tags found
2 merge requests!34Version 2.2.0,!13Consolidation with CDI-PIO (develop)
#include <stdio.h>
#include <stdlib.h>
#include "cdi.h"
int
main(void)
{
enum
{
nlon = 12, // Number of longitudes
nlat = 6, // Number of latitudes
nlev = 5, // Number of levels
nts = 3, // Number of time steps
};
SizeType nmiss;
double var1[nlon * nlat];
double var2[nlon * nlat * nlev];
// Open the input dataset
int streamID1 = streamOpenRead("example.nc");
......@@ -26,43 +17,55 @@ main(void)
// Get the variable list of the dataset
int vlistID1 = streamInqVlist(streamID1);
// Set the variable IDs
int varID1 = 0;
int varID2 = 1;
int nvars = vlistNvars(vlistID1);
int varDataSize = 0;
double *varData = NULL;
for (int varID = 0; varID < nvars; ++varID)
{
int varSize = vlistInqVarSize(vlistID1, varID);
varDataSize = varSize > varDataSize ? varSize : varDataSize;
}
varData = malloc((size_t) varDataSize * sizeof(double));
if (!varData)
{
perror("cannot allocate temporary copying buffer");
return EXIT_FAILURE;
}
// Open the output dataset (GRIB format)
int streamID2 = streamOpenWrite("example.grb", CDI_FILETYPE_GRB);
if (streamID2 < 0)
{
fprintf(stderr, "%s\n", cdiStringError(streamID2));
return 1;
return EXIT_FAILURE;
}
int vlistID2 = vlistDuplicate(vlistID1);
streamDefVlist(streamID2, vlistID2);
// Loop over the number of time steps
for (int tsID = 0; tsID < nts; tsID++)
// Loop over the input time steps
int tsID = 0;
while (streamInqTimestep(streamID1, tsID))
{
// Inquire the input time step
streamInqTimestep(streamID1, tsID);
// Define the output time step
streamDefTimestep(streamID2, tsID);
// Read var1 and var2
streamReadVar(streamID1, varID1, var1, &nmiss);
streamReadVar(streamID1, varID2, var2, &nmiss);
// Write var1 and var2
streamWriteVar(streamID2, varID1, var1, nmiss);
streamWriteVar(streamID2, varID2, var2, nmiss);
for (int varID = 0; varID < nvars; ++varID)
{
SizeType nmiss;
// Read var
streamReadVar(streamID1, varID, varData, &nmiss);
// Write var
streamWriteVar(streamID2, varID, varData, nmiss);
}
++tsID;
}
// Close the streams
streamClose(streamID1);
streamClose(streamID2);
return 0;
return EXIT_SUCCESS;
}
......@@ -89,11 +89,11 @@ main(void)
for (varID = 0; varID < nvars; varID++)
{
int gridID = vlistInqVarGrid(vlistID, varID);
int zaxisID = vlistInqVarZaxis(vlistID, varID);
size_t gridsize = (size_t) gridInqSize(gridID);
size_t nlevel = (size_t) zaxisInqSize(zaxisID);
if (gridsize * nlevel > datasize) datasize = gridsize * nlevel;
int varGridID = vlistInqVarGrid(vlistID, varID);
int varZaxisID = vlistInqVarZaxis(vlistID, varID);
size_t gridsize = (size_t) gridInqSize(varGridID);
size_t varNlevel = (size_t) zaxisInqSize(varZaxisID);
if (gridsize * varNlevel > datasize) datasize = gridsize * varNlevel;
}
data = (double *) malloc(datasize * sizeof(double));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment