Skip to content
Snippets Groups Projects
Commit 082de075 authored by Uwe Schulzweida's avatar Uwe Schulzweida
Browse files

include csdtio

parent f7fdc765
No related branches found
No related tags found
1 merge request!337cdo_cmpstr: changed parameter type to std::string_view
Pipeline #98319 passed
......@@ -36,7 +36,6 @@ public:
inline static RegisterEntry<Eofcoeff3d> registration = RegisterEntry<Eofcoeff3d>(module);
double missval1 = -999, missval2 = -999;
int varID, levelID;
int numFields;
CdoStreamID streamID1;
......@@ -63,8 +62,6 @@ public:
std::vector<CdoStreamID> streamIDs;
int eofID = 0;
public:
void
init() override
......@@ -98,36 +95,39 @@ public:
fileSuffix = FileUtils::gen_suffix(cdo_inq_filetype(streamID1), vlistID1, cdo_get_stream_name(0));
eof = FieldVector3D(numVars);
for (varID = 0; varID < numVars; ++varID) eof[varID].resize(numLevels);
for (int varID = 0; varID < numVars; ++varID) eof[varID].resize(numLevels);
}
void
run() override
{
while (1)
{
numFields = cdo_stream_inq_timestep(streamID1, eofID);
if (numFields == 0) break;
for (int fieldID = 0; fieldID < numFields; ++fieldID)
{
cdo_inq_field(streamID1, &varID, &levelID);
missval1 = varList1.vars[varID].missval;
eof[varID][levelID].resize((eofID == 0) ? 1 : eofID + 1);
eof[varID][levelID][eofID].grid = gridID1;
eof[varID][levelID][eofID].missval = missval1;
eof[varID][levelID][eofID].resize(gridsize);
ranges::fill(eof[varID][levelID][eofID].vec_d, missval1);
if (varID >= numVars) cdo_abort("Internal error - varID >= nvars");
if (levelID >= numLevels) cdo_abort("Internal error - levelID >= nlevs");
cdo_read_field(streamID1, eof[varID][levelID][eofID]);
}
eofID++;
}
{
int eofID = 0;
while (1)
{
numFields = cdo_stream_inq_timestep(streamID1, eofID);
if (numFields == 0) break;
for (int fieldID = 0; fieldID < numFields; ++fieldID)
{
auto [varID, levelID] = cdo_inq_field(streamID1);
missval1 = varList1.vars[varID].missval;
eof[varID][levelID].resize((eofID == 0) ? 1 : eofID + 1);
eof[varID][levelID][eofID].grid = gridID1;
eof[varID][levelID][eofID].missval = missval1;
eof[varID][levelID][eofID].resize(gridsize);
ranges::fill(eof[varID][levelID][eofID].vec_d, missval1);
if (varID >= numVars) cdo_abort("Internal error - varID >= nvars");
if (levelID >= numLevels) cdo_abort("Internal error - levelID >= nlevs");
cdo_read_field(streamID1, eof[varID][levelID][eofID]);
}
eofID++;
}
neof = eofID;
neof = eofID;
}
if (Options::cdoVerbose) cdo_print("%s contains %i eof's", cdo_get_stream_name(0), neof);
// Create 1x1 Grid for output
......@@ -156,12 +156,12 @@ public:
for (int i = 0; i < numZaxes; ++i) vlistChangeZaxisIndex(vlistID3, i, zaxisID3);
vlistDefTaxis(vlistID3, taxisID3);
for (varID = 0; varID < numVars; ++varID) vlistDefVarTimetype(vlistID3, varID, TIME_VARYING);
for (int varID = 0; varID < numVars; ++varID) vlistDefVarTimetype(vlistID3, varID, TIME_VARYING);
// open streams for eofcoeff output
streamIDs = std::vector<CdoStreamID>(neof);
for (eofID = 0; eofID < neof; eofID++)
for (int eofID = 0; eofID < neof; eofID++)
{
auto fileName = cdo_get_obase() + string_format("%5.5i", eofID);
if (fileSuffix.size() > 0) fileName += fileSuffix;
......@@ -179,10 +179,10 @@ public:
in.resize(gridsize);
in.grid = gridID1;
FieldVector2D out(numVars);
for (varID = 0; varID < numVars; ++varID)
for (int varID = 0; varID < numVars; ++varID)
{
out[varID].resize(neof);
for (eofID = 0; eofID < neof; eofID++)
for (int eofID = 0; eofID < neof; eofID++)
{
out[varID][eofID].missval = missval1;
out[varID][eofID].numMissVals = 0;
......@@ -196,8 +196,8 @@ public:
numFields = cdo_stream_inq_timestep(streamID2, tsID);
if (numFields == 0) break;
for (varID = 0; varID < numVars; ++varID)
for (eofID = 0; eofID < neof; eofID++)
for (int varID = 0; varID < numVars; ++varID)
for (int eofID = 0; eofID < neof; eofID++)
{
out[varID][eofID].vec_d[0] = 0;
out[varID][eofID].grid = gridID3;
......@@ -208,16 +208,15 @@ public:
for (int fieldID = 0; fieldID < numFields; ++fieldID)
{
cdo_inq_field(streamID2, &varID, &levelID);
auto [varID, levelID] = cdo_inq_field(streamID2);
cdo_read_field(streamID2, in);
missval2 = varList2.vars[varID].missval;
size_t numMissVals;
for (eofID = 0; eofID < neof; eofID++)
for (int eofID = 0; eofID < neof; eofID++)
{
if (fieldID == 0) cdo_def_timestep(streamIDs[eofID], tsID);
numMissVals = 0;
// size_t numMissVals = 0;
for (size_t i = 0; i < gridsize; ++i)
{
if (!fp_is_equal(in.vec_d[i], missval2) && !fp_is_equal(eof[varID][levelID][eofID].vec_d[i], missval1))
......@@ -225,8 +224,7 @@ public:
// out[varID][eofID].vec_d[0] += w[i]*in.vec_d[i]*eof[varID][levelID][eofID].vec_d[i];
out[varID][eofID].vec_d[0] += in.vec_d[i] * eof[varID][levelID][eofID].vec_d[i];
}
else
numMissVals += 1;
// else { numMissVals += 1; }
}
/*
if ( numMissVals ) {
......@@ -240,9 +238,9 @@ public:
if (levelID >= numLevels) cdo_abort("Internal error - levelID >= nlevs");
}
for (eofID = 0; eofID < neof; eofID++)
for (int eofID = 0; eofID < neof; eofID++)
{
for (varID = 0; varID < numVars; ++varID)
for (int varID = 0; varID < numVars; ++varID)
{
cdo_def_field(streamIDs[eofID], varID, 0);
cdo_write_field(streamIDs[eofID], out[varID][eofID]);
......@@ -256,7 +254,7 @@ public:
void
close() override
{
for (eofID = 0; eofID < neof; eofID++) cdo_stream_close(streamIDs[eofID]);
for (int eofID = 0; eofID < neof; eofID++) cdo_stream_close(streamIDs[eofID]);
cdo_stream_close(streamID2);
cdo_stream_close(streamID1);
......
......@@ -2,6 +2,7 @@
#include <cfloat>
#include <cmath>
#include <cstdio>
#include "compare.h"
#include "statistic.h"
......
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