aboutsummaryrefslogtreecommitdiff
path: root/CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexioUtil.cc
diff options
context:
space:
mode:
Diffstat (limited to 'CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexioUtil.cc')
-rw-r--r--CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexioUtil.cc191
1 files changed, 91 insertions, 100 deletions
diff --git a/CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexioUtil.cc b/CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexioUtil.cc
index 17d2c699a..1342cbfa5 100644
--- a/CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexioUtil.cc
+++ b/CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexioUtil.cc
@@ -30,10 +30,6 @@
#undef BYTE
#undef CHAR
-//#include "CactusBase/IOUtil/src/ioGH.h"
-//#include "CactusBase/IOUtil/src/ioutil_CheckpointRecovery.h"
-//#include "CactusBase/IOUtil/src/ioutil_Utils.h"
-
#include "bbox.hh"
#include "data.hh"
#include "gdata.hh"
@@ -50,9 +46,9 @@ namespace CarpetIOFlexIOUtil {
using namespace Carpet;
using namespace CarpetIOFlexIO;
-IObase::DataType FlexIODataType (int cctk_type){
- //we need this to have the FlexIO data types on hand
- //for WriteGFAs
+ IObase::DataType FlexIODataType (int cctk_type){
+ //we need this to have the FlexIO data types on hand
+ //for WriteGFAs
int retval;
@@ -90,107 +86,102 @@ IObase::DataType FlexIODataType (int cctk_type){
}
-void DumpCommonAttributes (const cGH *cgh, IObase* writer, ioRequest* request)
-{
- int dim, vdim, tl;
- CCTK_INT attr_int,dimscalar;
- CCTK_REAL *attr_real;
- char coord_system_name[20];
- DECLARE_CCTK_PARAMETERS
-
- /* attributes describing the variable */
- char* groupname = CCTK_GroupNameFromVarI (request->vindex);
-
-
-//
- char *name = CCTK_FullName (request->vindex);
- writer->writeAttribute("name",IObase::Char,strlen(name)+1,name);
- free(name);
+ void DumpCommonAttributes (const cGH *cgh, IObase* writer, ioRequest* request)
+ {
+ int tl;
+ CCTK_INT attr_int,dimscalar;
+ DECLARE_CCTK_PARAMETERS;
+
+ /* attributes describing the variable */
+
+ char *name = CCTK_FullName (request->vindex);
+ WriteAttribute(writer,"name",name);
+ free(name);
+
+ char* groupname = CCTK_GroupNameFromVarI (request->vindex);
+ WriteAttribute(writer,"groupname",groupname);
+ free (groupname);
-
- //fprintf(stderr,"\nattrib %s\n",groupname);
- writer->writeAttribute("groupname",IObase::String,strlen(groupname)+1,groupname);
- free (groupname);
-
- CCTK_INT attr_int = CCTK_GroupTypeFromVarI (request->vindex);
- writer->writeAttribute("grouptype",FlexIODataType(CCTK_VARIABLE_INT),1,&attr_int);
-
- writer->writeAttribute("reflevel",FlexIODataType(CCTK_VARIABLE_INT),1,&reflevel);
- writer->writeAttribute("component",FlexIODataType(CCTK_VARIABLE_INT),1,&component);
- writer->writeAttribute("mglevel",FlexIODataType(CCTK_VARIABLE_INT),1,&mglevel);
-
-
- attr_int = CCTK_MaxTimeLevelsVI (request->vindex);
- writer->writeAttribute("ntimelevels",FlexIODataType(CCTK_VARIABLE_INT),1,&attr_int);
-
- // lets get the correct Carpet time level (which is the (-1) * timelevel):
- if (request->timelevel==0)
- tl = 0;
- else
+ WriteAttribute(writer,"grouptype",CCTK_GroupTypeFromVarI (request->vindex));
+ WriteAttribute(writer,"reflevel",reflevel);
+ WriteAttribute(writer,"component",component);
+ WriteAttribute(writer,"mglevel",mglevel);
+
+
+ WriteAttribute (writer,"ntimelevels",CCTK_MaxTimeLevelsVI (request->vindex));
+
+ // lets get the correct Carpet time level (which is the (-1) * timelevel):
+ if (request->timelevel==0)
+ tl = 0;
+ else
tl = - request->timelevel;
-
- writer->writeAttribute("timelevel",FlexIODataType(CCTK_VARIABLE_INT),1,&tl);
-
- /* we have to do below since cactus believes scalars have dimension 0, but
- flexio likes them to be of dimension 1
- */
-
- if(CCTK_GroupTypeFromVarI(request->vindex) == CCTK_SCALAR) {
- dimscalar=1;
- writer->writeAttribute("global_size",FlexIODataType(CCTK_VARIABLE_INT),1,&dimscalar);
+ WriteAttribute (writer, "timelevel", tl);
+
+ WriteAttribute (writer, "carpet_flexio_version", 1);
+ WriteAttribute (writer, "cctk_dim", cgh->cctk_dim);
+ WriteAttribute (writer, "cctk_iteration", cgh->cctk_iteration);
+ WriteAttribute (writer, "cctk_gsh", cgh->cctk_gsh, dim);
+ WriteAttribute (writer, "cctk_lsh", cgh->cctk_lsh, dim);
+ WriteAttribute (writer, "cctk_lbnd", cgh->cctk_lbnd, dim);
+ WriteAttribute (writer, "cctk_delta_time", cgh->cctk_delta_time);
+ WriteAttribute (writer, "cctk_delta_space", cgh->cctk_delta_space, dim);
+ WriteAttribute (writer, "cctk_origin_space", cgh->cctk_origin_space, dim);
+ WriteAttribute (writer, "cctk_bbox", cgh->cctk_bbox, 2*dim);
+ WriteAttribute (writer, "cctk_levfac", cgh->cctk_levfac, dim);
+ WriteAttribute (writer, "cctk_levoff", cgh->cctk_levoff, dim);
+ WriteAttribute (writer, "cctk_levoffdenom", cgh->cctk_levoffdenom, dim);
+ WriteAttribute (writer, "cctk_timefac", cgh->cctk_timefac);
+ WriteAttribute (writer, "cctk_convlevel", cgh->cctk_convlevel);
+ WriteAttribute (writer, "cctk_nghostzones", cgh->cctk_nghostzones, dim);
+ WriteAttribute (writer, "cctk_time", cgh->cctk_time);
}
- else
- writer->writeAttribute("global_size",FlexIODataType(CCTK_VARIABLE_INT),request->hdim,request->hsize);
-
-
-
-
-
- // already dumped by amrwriter (obsolete!)
- writer->writeAttribute("cctk_time",FlexIODataType(CCTK_VARIABLE_REAL),1,&cgh->cctk_time);
-
- /* attributes describing the underlying grid
- These are only stored for CCTK_GF variables if they are associated
- with coordinates. */
- /* FIXME: This is hardcoded for cartesian coordinate systems.
- A better solution would be to be able to query the coordinate
- system which is associated with the variable. */
- vdim = CCTK_GroupDimFromVarI (request->vindex);
- sprintf (coord_system_name, "cart%dd", vdim);
-
- /* this is already dumped by amrwriter or */
-#if 0
- /*
- if (CCTK_GroupTypeFromVarI (request->vindex) == CCTK_GF &&
- CCTK_CoordSystemHandle (coord_system_name) >= 0)
+
+ void WriteAttribute (IObase* writer, const char* name, int value)
+ {
+ WriteAttribute (writer, name, &value, 1);
+ }
+
+ void WriteAttribute (IObase* writer, const char* name,
+ const int* values, int nvalues)
{
- attr_real = (CCTK_REAL*) malloc (3 * vdim * sizeof (CCTK_REAL));
- for (dim = 0; dim < vdim; dim++)
- {
- CCTK_CoordRange (cgh, &attr_real[dim], &attr_real[dim + vdim], dim + 1,
- NULL, coord_system_name);
-
- attr_real[dim + 0*vdim] +=
- request->origin[dim] * cgh->cctk_delta_space[dim];
- attr_real[dim + 2*vdim] =
- cgh->cctk_delta_space[dim] * request->downsample[dim];
- attr_real[dim + 1*vdim] = attr_real[dim + 0*vdim] +
- ((request->extent[dim] + request->downsample[dim]-1) /
- request->downsample[dim] - 1) * attr_real[dim + 2*vdim];
+ assert (writer);
+ assert (name);
+ assert (values);
+ vector<CCTK_INT4> values1(nvalues);
+ for (int i=0; i<nvalues; ++i) {
+ values1[i] = values[i];
}
-
- writer->writeAttribute ("origin", FlexIODataType(CCTK_VARIABLE_REAL), vdim, attr_real);
- writer->writeAttribute ("min_ext", FlexIODataType(CCTK_VARIABLE_REAL), vdim, attr_real);
- writer->writeAttribute ("max_ext", FlexIODataType(CCTK_VARIABLE_REAL), vdim, attr_real+vdim);
- writer->writeAttribute ("delta", FlexIODataType(CCTK_VARIABLE_REAL), vdim, attr_real+2*vdim);
- free (attr_real);
- }
- */
-#endif
-
+ writer->writeAttribute (name, IObase::Int32, nvalues, &values1[0]);
+ }
+
+ void WriteAttribute (IObase* writer, const char* name, CCTK_REAL value)
+ {
+ WriteAttribute (writer, name, &value, 1);
+ }
+
+ void WriteAttribute (IObase* writer, const char* name,
+ const CCTK_REAL* values, int nvalues)
+ {
+ assert (writer);
+ assert (name);
+ assert (values);
+ vector<CCTK_REAL8> values1(nvalues);
+ for (int i=0; i<nvalues; ++i) {
+ values1[i] = values[i];
+ }
+ writer->writeAttribute (name, IObase::Float64, nvalues, &values1[0]);
}
+ void WriteAttribute (IObase* writer, const char* name,
+ const char* valuestring)
+ {
+ assert (writer);
+ assert (name);
+ assert (valuestring);
+ writer->writeAttribute (name, IObase::String, strlen(valuestring)+1, valuestring);
+ }
+
} // namespace CarpetIOFlexIOUtil