aboutsummaryrefslogtreecommitdiff
path: root/CarpetAttic/CarpetIOFlexIO
diff options
context:
space:
mode:
authoreschnett <>2001-03-15 22:28:00 +0000
committereschnett <>2001-03-15 22:28:00 +0000
commit60680e786eaa169094567c6e24be7fe7103075fd (patch)
tree1e4005616e45dda7cb6d7515dfdb3e1551c7bd16 /CarpetAttic/CarpetIOFlexIO
parentf6cd14089f886957b548e17ccd176a7edeccd6e3 (diff)
Added FlexIO I/O.
darcs-hash:20010315222845-f6438-22ee1dfc7f233239470a5ac47b09f3bcd5b20c41.gz
Diffstat (limited to 'CarpetAttic/CarpetIOFlexIO')
-rw-r--r--CarpetAttic/CarpetIOFlexIO/README5
-rw-r--r--CarpetAttic/CarpetIOFlexIO/interface.ccl20
-rw-r--r--CarpetAttic/CarpetIOFlexIO/param.ccl61
-rw-r--r--CarpetAttic/CarpetIOFlexIO/schedule.ccl10
-rw-r--r--CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc1081
-rw-r--r--CarpetAttic/CarpetIOFlexIO/src/ioflexio.h23
-rw-r--r--CarpetAttic/CarpetIOFlexIO/src/ioflexio.hh32
-rw-r--r--CarpetAttic/CarpetIOFlexIO/src/make.code.defn6
8 files changed, 231 insertions, 1007 deletions
diff --git a/CarpetAttic/CarpetIOFlexIO/README b/CarpetAttic/CarpetIOFlexIO/README
index 77a46db46..edf8683b8 100644
--- a/CarpetAttic/CarpetIOFlexIO/README
+++ b/CarpetAttic/CarpetIOFlexIO/README
@@ -1,8 +1,7 @@
Cactus Code Thorn CarpetIOFlexIO
-Authors : Erik Schnetter <schnetter@uni-tuebingen.de>
-CVS info : $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/README,v 1.4 2004/01/25 14:57:29 schnetter Exp $
+Authors : ...
+CVS info : $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/README,v 1.1 2001/03/15 23:28:45 eschnett Exp $
--------------------------------------------------------------------------
Purpose of the thorn:
-This thorn provides FlexIO based file I/O for Carpet.
diff --git a/CarpetAttic/CarpetIOFlexIO/interface.ccl b/CarpetAttic/CarpetIOFlexIO/interface.ccl
index 103a9b594..f10a470cb 100644
--- a/CarpetAttic/CarpetIOFlexIO/interface.ccl
+++ b/CarpetAttic/CarpetIOFlexIO/interface.ccl
@@ -1,22 +1,4 @@
# Interface definition for thorn CarpetIOFlexIO
-# $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/interface.ccl,v 1.9 2003/09/04 16:23:21 tradke Exp $
+# $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/interface.ccl,v 1.1 2001/03/15 23:28:45 eschnett Exp $
implements: IOFlexIO
-
-uses include header: carpet.hh
-
-uses include header: bbox.hh
-uses include header: vect.hh
-
-uses include header: data.hh
-uses include header: gdata.hh
-
-uses include header: ggf.hh
-
-# FlexIO header files
-uses include header: IO.hh
-uses include header: IEEEIO.hh
-uses include header: HDFIO.hh
-uses include header: H5IO.hh
-uses include header: AMRwriter.hh
-uses include header: AmrGridReader.hh
diff --git a/CarpetAttic/CarpetIOFlexIO/param.ccl b/CarpetAttic/CarpetIOFlexIO/param.ccl
index 6c1f7cdca..21adb4df9 100644
--- a/CarpetAttic/CarpetIOFlexIO/param.ccl
+++ b/CarpetAttic/CarpetIOFlexIO/param.ccl
@@ -1,27 +1,21 @@
# Parameter definitions for thorn CarpetIOFlexIO
-# $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/param.ccl,v 1.9 2004/02/07 16:21:40 schnetter Exp $
+# $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/param.ccl,v 1.1 2001/03/15 23:28:45 eschnett Exp $
shares: IO
-USES STRING out_dir
+USES STRING outdir
USES CCTK_INT out_every
-private:
+restricted:
-BOOLEAN verbose "Produce log output"
-{
-} "no"
-
-
-
-CCTK_STRING out3D_dir "Name of 3D FlexIO output directory, overrides out_dir" STEERABLE = ALWAYS
+CCTK_STRING outdir3D "Name of 3D FlexIO output directory, overrides outdir" STEERABLE = ALWAYS
{
.* :: "A regex which matches everything"
} "."
@@ -38,54 +32,7 @@ KEYWORD out3D_format "File format to use for 3D FlexIO output" STEERABLE = ALWAY
"HDF5" :: "The new HDF format"
} "HDF5"
-CCTK_STRING out3D_extension "File extension to use for 3D FlexIO output" STEERABLE = ALWAYS
-{
- .* :: "A regex which matches everything"
-} ""
-
CCTK_INT out3D_every "How often to do 3D FlexIO output, overrides out_every" STEERABLE = ALWAYS
{
-1:* :: "Values <= 0 disable 3D output"
} -1
-
-
-
-CCTK_INT out3D_max_num_lower_ghosts "Maximum number of lower ghost zones that are output" STEERABLE = ALWAYS
-{
- -1 :: "output all ghost zones"
- 0:* :: "output that many ghost zones"
-} -1
-
-CCTK_INT out3D_max_num_upper_ghosts "Maximum number of upper ghost zones that are output" STEERABLE = ALWAYS
-{
- -1 :: "output all ghost zones"
- 0:* :: "output that many ghost zones"
-} -1
-
-BOOLEAN out3D_output_outer_boundary "Output all of the outer boundary ghost zones even if not all ghost zones are output" STEERABLE = ALWAYS
-{
-} "yes"
-
-
-
-CCTK_STRING in3D_dir "Name of 3D FlexIO input directory" STEERABLE = ALWAYS
-{
- .* :: "A regex which matches everything"
-} "."
-
-CCTK_STRING in3D_vars "Variables to input in 3D FlexIO file format" STEERABLE = ALWAYS
-{
- .* :: "A regex which matches everything"
-} ""
-
-KEYWORD in3D_format "File format to use for 3D FlexIO input" STEERABLE = ALWAYS
-{
- "IEEE" :: "IEEE, readable by the FlexIO library"
- "HDF4" :: "The old HDF format"
- "HDF5" :: "The new HDF format"
-} "HDF5"
-
-CCTK_STRING in3D_extension "File extension to use for 3D FlexIO input" STEERABLE = ALWAYS
-{
- .* :: "A regex which matches everything"
-} ""
diff --git a/CarpetAttic/CarpetIOFlexIO/schedule.ccl b/CarpetAttic/CarpetIOFlexIO/schedule.ccl
index 39a3f7ad5..9dc8f90f2 100644
--- a/CarpetAttic/CarpetIOFlexIO/schedule.ccl
+++ b/CarpetAttic/CarpetIOFlexIO/schedule.ccl
@@ -1,13 +1,7 @@
# Schedule definitions for thorn CarpetIOFlexIO
-# $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/schedule.ccl,v 1.6 2003/11/05 16:18:37 schnetter Exp $
+# $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/schedule.ccl,v 1.1 2001/03/15 23:28:45 eschnett Exp $
-schedule CarpetIOFlexIOStartup at STARTUP after IOUtil_Startup
+schedule CarpetIOFlexIOStartup at STARTUP after IOUtilStartup
{
LANG: C
} "Startup routine"
-
-schedule CarpetIOFlexIOReadData at INITIAL
-{
- LANG: C
- OPTIONS: global
-} "Read initial data from file"
diff --git a/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc b/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc
index 1ce401607..5f87c41a9 100644
--- a/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc
+++ b/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc
@@ -1,57 +1,38 @@
-#include <assert.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include <algorithm>
+#include <cassert>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
#include <fstream>
-#include <sstream>
#include <vector>
#include "cctk.h"
#include "cctk_Parameters.h"
-extern "C" {
- static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc,v 1.46 2004/03/08 09:12:29 schnetter Exp $";
- CCTK_FILEVERSION(Carpet_CarpetIOFlexIO_ioflexio_cc);
-}
-
-#include "AMRwriter.hh"
-#include "AmrGridReader.hh"
-#ifdef HDF4
-# include "HDFIO.hh"
-#endif
-#ifdef HDF5
-# include "H5IO.hh"
-#endif
-#include "IEEEIO.hh"
-#include "IO.hh"
-
-// Hack to stop FlexIO data type clash with LAM MPI
-#undef BYTE
-#undef CHAR
-
-#include "CactusBase/IOUtil/src/ioGH.h"
#include "CactusBase/IOUtil/src/ioutil_CheckpointRecovery.h"
-#include "bbox.hh"
-#include "data.hh"
-#include "gdata.hh"
-#include "ggf.hh"
-#include "vect.hh"
+#include "CactusExternal/FlexIO/src/AMRwriter.hh"
+#include "CactusExternal/FlexIO/src/H5IO.hh"
+#include "CactusExternal/FlexIO/src/HDFIO.hh"
+#include "CactusExternal/FlexIO/src/IEEEIO.hh"
+#include "CactusExternal/FlexIO/src/IO.hh"
-#include "carpet.hh"
+#include "Carpet/CarpetLib/src/bbox.hh"
+#include "Carpet/CarpetLib/src/data.hh"
+#include "Carpet/CarpetLib/src/gdata.hh"
+#include "Carpet/CarpetLib/src/gf.hh"
+#include "Carpet/CarpetLib/src/ggf.hh"
+#include "Carpet/CarpetLib/src/vect.hh"
+
+#include "Carpet/Carpet/src/carpet.hh"
#include "ioflexio.hh"
+static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc,v 1.1 2001/03/15 23:28:50 eschnett Exp $";
+
namespace CarpetIOFlexIO {
- using namespace std;
using namespace Carpet;
@@ -60,67 +41,32 @@ namespace CarpetIOFlexIO {
int GHExtension;
int IOMethod;
vector<bool> do_truncate;
- vector<vector<vector<int> > > last_output; // [ml][rl][var]
+ vector<int> last_output;
static const char* GetStringParameter (const char* const parametername,
const char* const fallback);
static int GetIntParameter (const char* const parametername, int fallback);
- static bool CheckForVariable (const cGH* const cgh,
+ static bool CheckForVariable (cGH* const cgh,
const char* const varlist, const int vindex);
static void SetFlag (int index, const char* optstring, void* arg);
- static int ReadAttribute (IObase* reader, const char* name,
- int& value);
- static int ReadAttribute (IObase* reader, const char* name,
- int* values, int nvalues);
- static int ReadAttribute (IObase* reader, const char* name,
- CCTK_REAL& value);
- static int ReadAttribute (IObase* reader, const char* name,
- CCTK_REAL* values, int nvalues);
- static int ReadAttribute (IObase* reader, const char* name,
- char& value);
- static int ReadAttribute (IObase* reader, const char* name,
- char*& values);
- static int ReadAttribute (IObase* reader, const char* name,
- char* values, int nvalues);
-
- static void WriteAttribute (IObase* writer, const char* name,
- int value);
- static void WriteAttribute (IObase* writer, const char* name,
- const int* values, int nvalues);
- static void WriteAttribute (IObase* writer, const char* name,
- CCTK_REAL value);
- static void WriteAttribute (IObase* writer, const char* name,
- const CCTK_REAL* values, int nvalues);
- static void WriteAttribute (IObase* writer, const char* name,
- char value);
- static void WriteAttribute (IObase* writer, const char* name,
- const char* values);
- static void WriteAttribute (IObase* writer, const char* name,
- const char* values, int nvalues);
-
int CarpetIOFlexIOStartup ()
{
- int ierr;
-
CCTK_RegisterBanner ("AMR 3D FlexIO I/O provided by CarpetIOFlexIO");
- GHExtension = CCTK_RegisterGHExtension ("CarpetIOFlexIO");
+ GHExtension = CCTK_RegisterGHExtension("CarpetIOFlexIO");
CCTK_RegisterGHExtensionSetupGH (GHExtension, SetupGH);
- IOMethod = CCTK_RegisterIOMethod ("CarpetIOFlexIO");
+ IOMethod = CCTK_RegisterIOMethod ("IOFlexIO");
CCTK_RegisterIOMethodOutputGH (IOMethod, OutputGH);
CCTK_RegisterIOMethodOutputVarAs (IOMethod, OutputVarAs);
CCTK_RegisterIOMethodTimeToOutput (IOMethod, TimeToOutput);
CCTK_RegisterIOMethodTriggerOutput (IOMethod, TriggerOutput);
- ierr = IOUtil_RegisterRecover ("CarpetIOFlexIO", Recover);
- assert (! ierr);
-
return 0;
}
@@ -132,26 +78,19 @@ namespace CarpetIOFlexIO {
DECLARE_CCTK_PARAMETERS;
// Truncate all files if this is not a restart
- do_truncate.resize(CCTK_NumVars(), true);
+ do_truncate.resize(CCTK_NumVars(), ! IOUtil_RestartFromRecovery(cgh));
// No iterations have yet been output
- last_output.resize(mglevels);
- for (int ml=0; ml<mglevels; ++ml) {
- last_output.at(ml).resize(maxreflevels);
- for (int rl=0; rl<maxreflevels; ++rl) {
- last_output.at(ml).at(rl).resize(CCTK_NumVars(), INT_MIN);
- }
- }
+ last_output.resize(CCTK_NumVars(), -1);
// We register only once, ergo we get only one handle. We store
- // that statically, so there is no need to pass anything to
- // Cactus.
+ // that statically, so there is no need to pass it to Cactus.
return 0;
}
- int OutputGH (const cGH* const cgh) {
+ int OutputGH (cGH* const cgh) {
for (int vindex=0; vindex<CCTK_NumVars(); ++vindex) {
if (TimeToOutput(cgh, vindex)) {
TriggerOutput(cgh, vindex);
@@ -162,328 +101,211 @@ namespace CarpetIOFlexIO {
- int OutputVarAs (const cGH* const cgh, const char* const varname,
+ int OutputVarAs (cGH* const cgh, const char* const varname,
const char* const alias) {
DECLARE_CCTK_PARAMETERS;
const int n = CCTK_VarIndex(varname);
assert (n>=0 && n<CCTK_NumVars());
const int group = CCTK_GroupIndexFromVarI (n);
- assert (group>=0 && group<(int)Carpet::arrdata.size());
+ assert (group>=0 && group<(int)Carpet::gfdata.size());
const int n0 = CCTK_FirstVarIndexI(group);
assert (n0>=0 && n0<CCTK_NumVars());
const int var = n - n0;
assert (var>=0 && var<CCTK_NumVars());
- const int tl = 0;
+ const int tl = activetimelevel;
- // Check for storage
- if (! CCTK_QueryGroupStorageI(cgh, group)) {
- CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
- "Cannot output variable \"%s\" because it has no storage",
+ switch (CCTK_GroupTypeI(group)) {
+
+ case CCTK_SCALAR: {
+ // Don't output scalars
+ CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Cannout output variable \"%s\" because it is a scalar",
varname);
return 0;
}
- const int grouptype = CCTK_GroupTypeI(group);
- switch (grouptype) {
- case CCTK_SCALAR:
case CCTK_ARRAY:
- assert (do_global_mode);
- break;
- case CCTK_GF:
- /* do nothing */
- break;
- default:
- assert (0);
- }
- const int rl = grouptype==CCTK_GF ? reflevel : 0;
-
- // Get grid hierarchy extentsion from IOUtil
- const ioGH * const iogh = (const ioGH *)CCTK_GHExtension (cgh, "IO");
- assert (iogh);
-
- // Create the output directory
- const char* const myoutdir = GetStringParameter("out3D_dir", out_dir);
- if (CCTK_MyProc(cgh)==0) {
- CCTK_CreateDirectory (0755, myoutdir);
- }
-
- // Invent a file name
- const char* extension = 0;
- if (CCTK_Equals(out3D_format, "IEEE")) {
- extension = ".raw";
-#ifdef HDF4
- } else if (CCTK_Equals(out3D_format, "HDF4")) {
- extension = ".hdf";
-#endif
-#ifdef HDF5
- } else if (CCTK_Equals(out3D_format, "HDF5")) {
- extension = ".h5";
-#endif
- } else {
- assert (0);
- }
- extension = GetStringParameter ("out3D_extension", extension);
-
- ostringstream filenamebuf;
- filenamebuf << myoutdir << "/" << alias << extension;
- string filenamestr = filenamebuf.str();
- const char * const filename = filenamestr.c_str();
-
- IObase* writer = 0;
- AMRwriter* amrwriter = 0;
-
- // Write the file only on the root processor
- if (CCTK_MyProc(cgh)==0) {
+ case CCTK_GF: {
+
+ // Check for storage
+ if (! CCTK_QueryGroupStorageI(cgh, group)) {
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Cannot output variable \"%s\" because it has no storage",
+ varname);
+ return 0;
+ }
- // If this is the first time, then create and truncate the file
- if (do_truncate.at(n)) {
- struct stat fileinfo;
- if (! iogh->recovered
- || stat(filename, &fileinfo)!=0) {
+ // Create the output directory
+ const char* myoutdir = GetStringParameter("outdir3D", outdir);
+ if (CCTK_MyProc(cgh)==0) {
+ CCTK_CreateDirectory (0755, myoutdir);
+ }
+
+ const char* extension = 0;
+ if (CCTK_Equals(out3D_format, "IEEE")) {
+ extension = "ieee";
+ } else if (CCTK_Equals(out3D_format, "HDF4")) {
+ extension = "hdf";
+ } else if (CCTK_Equals(out3D_format, "HDF5")) {
+ extension = "h5";
+ } else {
+ abort();
+ }
+
+ // Invent a file name
+ char filename[strlen(myoutdir)+strlen(alias)+100];
+ sprintf (filename, "%s/%s.%s", myoutdir, alias, extension);
+
+ IObase* writer = 0;
+ AMRwriter* amrwriter = 0;
+
+ // Write the file only on the root processor
+ if (CCTK_MyProc(cgh)==0) {
+
+ // If this is the first time, then create and truncate the
+ // file
+ if (do_truncate[n]) {
writer = 0;
if (CCTK_Equals(out3D_format, "IEEE")) {
writer = new IEEEIO(filename, IObase::Create);
-#ifdef HDF4
} else if (CCTK_Equals(out3D_format, "HDF4")) {
writer = new HDFIO(filename, IObase::Create);
-#endif
-#ifdef HDF5
} else if (CCTK_Equals(out3D_format, "HDF5")) {
writer = new H5IO(filename, IObase::Create);
-#endif
} else {
- assert (0);
+ abort();
}
delete writer;
writer = 0;
}
+
+ // Open the file
+ if (CCTK_Equals(out3D_format, "IEEE")) {
+ writer = new IEEEIO(filename, IObase::Append);
+ } else if (CCTK_Equals(out3D_format, "HDF4")) {
+ writer = new HDFIO(filename, IObase::Append);
+ } else if (CCTK_Equals(out3D_format, "HDF5")) {
+ writer = new H5IO(filename, IObase::Append);
+ } else {
+ abort();
+ }
+ amrwriter = new AMRwriter(*writer);
+
+ // Set datatype
+ assert (CCTK_VarTypeI(n) == CCTK_VARIABLE_REAL8);
+ amrwriter->setType (IObase::Float64);
+
+ // Set coordinate information
+ assert (reflevel==0);
+ double lower[dim], upper[dim];
+ double origin[dim], delta[dim], timestep;
+ for (int d=0; d<dim; ++d) {
+ const int ierr = CCTK_CoordRange
+ (cgh, &lower[d], &upper[d], d+1, 0, "cart3d");
+ assert (ierr==0);
+ origin[d] = lower[d];
+ delta[d] = cgh->cctk_delta_space[d];
+ }
+ timestep = cgh->cctk_delta_time;
+ amrwriter->setTopLevelParameters
+ (dim, origin, delta, timestep, hh->reflevels());
+
+ // Set refinement information
+ int interlevel_timerefinement, interlevel_spacerefinement[dim];
+ interlevel_timerefinement = hh->reffact;
+ for (int d=0; d<dim; ++d) {
+ interlevel_spacerefinement[d] = hh->reffact;
+ }
+ amrwriter->setRefinement
+ (interlevel_timerefinement, interlevel_spacerefinement);
}
- // Open the file
- if (CCTK_Equals(out3D_format, "IEEE")) {
- writer = new IEEEIO(filename, IObase::Append);
-#ifdef HDF4
- } else if (CCTK_Equals(out3D_format, "HDF4")) {
- writer = new HDFIO(filename, IObase::Append);
-#endif
-#ifdef HDF5
- } else if (CCTK_Equals(out3D_format, "HDF5")) {
- writer = new H5IO(filename, IObase::Append);
-#endif
- } else {
- assert (0);
- }
- assert (writer->isValid());
- amrwriter = new AMRwriter(*writer);
-
- // Set datatype
- assert (CCTK_VarTypeI(n) == CCTK_VARIABLE_REAL8
- || (sizeof(CCTK_REAL) == sizeof(CCTK_REAL8)
- && CCTK_VarTypeI(n) == CCTK_VARIABLE_REAL));
- // TODO: Set datatype correctly
- amrwriter->setType (IObase::Float64);
-
- const int gpdim = CCTK_GroupDimI(group);
-
- // Set coordinate information
- double origin[dim], delta[dim], timestep;
- for (int d=0; d<dim; ++d) {
- origin[d] = cgh->cctk_origin_space[d];
- delta[d] = cgh->cctk_delta_space[d];
- }
- timestep = cgh->cctk_delta_time;
- amrwriter->setTopLevelParameters
- (gpdim, origin, delta, timestep, maxreflevels);
+ // Traverse all components on all refinement levels
+ assert (mglevel>=0);
+ assert (reflevel==0);
+ for (reflevel=0; reflevel<hh->reflevels(); ++reflevel) {
+ enact_reflevel (cgh);
+
+ amrwriter->setLevel(reflevel);
+ amrwriter->setTime(cgh->cctk_iteration);
+
+ assert (component==-1);
+ for (component=0; component<hh->components(reflevel); ++component) {
+
+ generic_gf<dim>* ff = 0;
+
+ switch (CCTK_GroupTypeI(group)) {
+
+ case CCTK_ARRAY:
+ assert (var < (int)arrdata[group].data.size());
+ ff = arrdata[group].data[var];
+ break;
+
+ case CCTK_GF:
+ assert (var < (int)gfdata[group].data.size());
+ ff = gfdata[group].data[var];
+ break;
+
+ default:
+ abort();
+ }
+
+ const generic_data<dim>* const data
+ = (*ff) (tl, reflevel, component, mglevel);
+
+ // Make temporary copy on processor 0
+ const bbox<int,dim> ext = data->extent();
+ generic_data<dim>* tmp = data->make_typed ();
+ tmp->allocate (ext, 0);
+ tmp->copy_from (data, ext);
+
+ // Write data
+ if (CCTK_MyProc(cgh)==0) {
+ int origin[dim], dims[dim];
+ for (int d=0; d<dim; ++d) {
+ origin[d] = (ext.lower() / ext.stride())[d];
+ dims[d] = ((ext.upper() - ext.lower()) / ext.stride() + 1)[d];
+ }
+ amrwriter->write (origin, dims, (void*)data->storage());
+ }
+
+ // Delete temporary copy
+ delete tmp;
+
+ } // Loop over components
+ component = -1;
+
+ } // Loop over refinement levels
+ reflevel = 0;
+ enact_reflevel (cgh);
- // Set refinement information
- int interlevel_timerefinement;
- int interlevel_spacerefinement[dim];
- int initial_gridplacementrefinement[dim];
- interlevel_timerefinement = reffact;
- for (int d=0; d<dim; ++d) {
- interlevel_spacerefinement[d] = reffact;
- initial_gridplacementrefinement[d] = 1;
+ // Close the file
+ if (CCTK_MyProc(cgh)==0) {
+ delete amrwriter;
+ amrwriter = 0;
+ delete writer;
+ writer = 0;
}
- amrwriter->setRefinement
- (interlevel_timerefinement, interlevel_spacerefinement,
- initial_gridplacementrefinement);
- // Set level
- amrwriter->setLevel (rl);
+ } // ARRAY or GROUP
- // Set current time
- amrwriter->setTime (cgh->cctk_iteration);
- }
-
- // Traverse all components
- BEGIN_MAP_LOOP(cgh, grouptype) {
- BEGIN_COMPONENT_LOOP(cgh, grouptype) {
-
- const ggf<dim>* ff = 0;
-
- assert (var < (int)arrdata.at(group).at(Carpet::map).data.size());
- ff = (ggf<dim>*)arrdata.at(group).at(Carpet::map).data.at(var);
-
- const gdata<dim>* const data
- = (*ff) (tl, rl, component, mglevel);
-
- // Make temporary copy on processor 0
- bbox<int,dim> ext = data->extent();
- vect<int,dim> lo = ext.lower();
- vect<int,dim> hi = ext.upper();
- vect<int,dim> str = ext.stride();
-
- // Ignore ghost zones if desired
- for (int d=0; d<dim; ++d) {
- const int max_lower_ghosts = (cgh->cctk_bbox[2*d ] && out3D_output_outer_boundary) ? -1 : out3D_max_num_lower_ghosts;
- const int max_upper_ghosts = (cgh->cctk_bbox[2*d+1] && out3D_output_outer_boundary) ? -1 : out3D_max_num_upper_ghosts;
-
- const int num_lower_ghosts = max_lower_ghosts == -1 ? cgh->cctk_nghostzones[d] : min(out3D_max_num_lower_ghosts, cgh->cctk_nghostzones[d]);
- const int num_upper_ghosts = max_upper_ghosts == -1 ? cgh->cctk_nghostzones[d] : min(out3D_max_num_upper_ghosts, cgh->cctk_nghostzones[d]);
-
- lo[d] += (cgh->cctk_nghostzones[d] - num_lower_ghosts) * str[d];
- hi[d] -= (cgh->cctk_nghostzones[d] - num_upper_ghosts) * str[d];
- }
-
- ext = bbox<int,dim>(lo,hi,str);
-
- gdata<dim>* const tmp = data->make_typed (n);
- tmp->allocate (ext, 0);
- for (comm_state<dim> state; !state.done(); state.step()) {
- tmp->copy_from (state, data, ext);
- }
-
- // Write data
- if (CCTK_MyProc(cgh)==0) {
- int origin[dim], dims[dim];
- for (int d=0; d<dim; ++d) {
- origin[d] = (ext.lower() / ext.stride())[d];
- dims[d] = (ext.shape() / ext.stride())[d];
- }
- amrwriter->write (origin, dims, (void*)tmp->storage());
-
- // Write some additional attributes
-
- // Legacy arguments
- {
- char * fullname = CCTK_FullName(n);
- assert (fullname);
- WriteAttribute (writer, "name", fullname);
- free (fullname);
- }
-
- // Group arguments
- WriteAttribute (writer, "group_version", 1);
- {
- char * fullname = CCTK_FullName(n);
- assert (fullname);
- WriteAttribute (writer, "group_fullname", fullname);
- free (fullname);
- }
- WriteAttribute (writer, "group_varname", CCTK_VarName(n));
- {
- char * groupname = CCTK_GroupName(group);
- assert (groupname);
- WriteAttribute (writer, "group_groupname", groupname);
- free (groupname);
- }
- switch (grouptype) {
- case CCTK_GF:
- WriteAttribute (writer, "group_grouptype", "CCTK_GF");
- break;
- case CCTK_ARRAY:
- WriteAttribute (writer, "group_grouptype", "CCTK_ARRAY");
- break;
- case CCTK_SCALAR:
- WriteAttribute (writer, "group_grouptype", "CCTK_SCALAR");
- break;
- default:
- assert (0);
- }
- WriteAttribute (writer, "group_dim", CCTK_GroupDimI(group));
- WriteAttribute (writer, "group_timelevel", tl);
- WriteAttribute (writer, "group_numtimelevels", CCTK_NumTimeLevelsI(group));
-
- // Cactus arguments
- WriteAttribute (writer, "cctk_version", 1);
- WriteAttribute (writer, "cctk_dim", cgh->cctk_dim);
- WriteAttribute (writer, "cctk_iteration", cgh->cctk_iteration);
-// TODO: disable temporarily
-// WriteAttribute (writer, "cctk_nmaps", cgh->cctk_nmaps);
-// WriteAttribute (writer, "cctk_map", cgh->cctk_map);
- 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_convfac", cgh->cctk_convfac);
- WriteAttribute (writer, "cctk_nghostzones", cgh->cctk_nghostzones, dim);
- WriteAttribute (writer, "cctk_time", cgh->cctk_time);
-
- // Carpet arguments
- WriteAttribute (writer, "carpet_version", 1);
- WriteAttribute (writer, "carpet_dim", dim);
- WriteAttribute (writer, "carpet_basemglevel", basemglevel);
- WriteAttribute (writer, "carpet_mglevel", mglevel);
- WriteAttribute (writer, "carpet_mglevels", mglevels);
- WriteAttribute (writer, "carpet_mgface", mgfact);
- WriteAttribute (writer, "carpet_reflevel", reflevel);
- WriteAttribute (writer, "carpet_reflevels", reflevels);
- WriteAttribute (writer, "carpet_reffact", reffact);
- WriteAttribute (writer, "carpet_map", Carpet::map);
- WriteAttribute (writer, "carpet_maps", maps);
- WriteAttribute (writer, "carpet_component", component);
- WriteAttribute (writer, "carpet_components", vhh.at(Carpet::map)->components(reflevel));
- }
-
- // Delete temporary copy
- delete tmp;
-
- } END_COMPONENT_LOOP;
- } END_MAP_LOOP;
-
- // Close the file
- if (CCTK_MyProc(cgh)==0) {
- delete amrwriter;
- amrwriter = 0;
- delete writer;
- writer = 0;
+ default:
+ abort();
}
// Don't truncate again
- do_truncate.at(n) = false;
+ do_truncate[n] = false;
return 0;
}
- int TimeToOutput (const cGH* const cctkGH, const int vindex) {
- DECLARE_CCTK_ARGUMENTS;
+ int TimeToOutput (cGH* const cgh, const int vindex) {
DECLARE_CCTK_PARAMETERS;
- assert (vindex>=0 && vindex<CCTK_NumVars());
-
- const int grouptype = CCTK_GroupTypeFromVarI(vindex);
- switch (grouptype) {
- case CCTK_SCALAR:
- case CCTK_ARRAY:
- if (! do_global_mode) return 0;
- break;
- case CCTK_GF:
- /* do nothing */
- break;
- default:
- assert (0);
- }
+ assert (vindex>=0 && vindex<(int)last_output.size());
const int myoutevery = GetIntParameter("out3D_every", out_every);
@@ -492,17 +314,17 @@ namespace CarpetIOFlexIO {
return 0;
}
- if (cctk_iteration % myoutevery != 0) {
+ if (cgh->cctk_iteration % myoutevery != 0) {
// Nothing should be output during this iteration
return 0;
}
- if (! CheckForVariable(cctkGH, GetStringParameter("out3D_vars",""), vindex)) {
+ if (! CheckForVariable(cgh, GetStringParameter("out3D_vars", ""), vindex)) {
// This variable should not be output
return 0;
}
- if (last_output.at(mglevel).at(reflevel).at(vindex) == cctk_iteration) {
+ if (last_output[vindex] == cgh->cctk_iteration) {
// Has already been output during this iteration
char* varname = CCTK_FullName(vindex);
CCTK_VWarn (5, __LINE__, __FILE__, CCTK_THORNSTRING,
@@ -514,7 +336,7 @@ namespace CarpetIOFlexIO {
return 0;
}
- assert (last_output.at(mglevel).at(reflevel).at(vindex) < cctk_iteration);
+ assert (last_output[vindex] < cgh->cctk_iteration);
// Should be output during this iteration
return 1;
@@ -522,361 +344,26 @@ namespace CarpetIOFlexIO {
- int TriggerOutput (const cGH* const cgh, const int vindex) {
+ int TriggerOutput (cGH* const cgh, const int vindex) {
assert (vindex>=0 && vindex<CCTK_NumVars());
char* varname = CCTK_FullName(vindex);
const int retval = OutputVarAs (cgh, varname, CCTK_VarName(vindex));
free (varname);
- last_output.at(mglevel).at(reflevel).at(vindex) = cgh->cctk_iteration;
+ last_output[vindex] = cgh->cctk_iteration;
return retval;
}
- int InputGH (const cGH* const cgh) {
- int retval = 0;
- for (int vindex=0; vindex<CCTK_NumVars(); ++vindex) {
- if (CheckForVariable(cgh, GetStringParameter("in3D_vars",""), vindex)) {
- char* varname = CCTK_FullName(vindex);
- retval = InputVarAs (cgh, varname, CCTK_VarName(vindex));
- free (varname);
- if (retval != 0) return retval;
- }
- }
- return retval;
- }
-
-
-
- int InputVarAs (const cGH* const cgh, const char* const varname,
- const char* const alias) {
- DECLARE_CCTK_PARAMETERS;
-
- const int n = CCTK_VarIndex(varname);
- assert (n>=0 && n<CCTK_NumVars());
- const int group = CCTK_GroupIndexFromVarI (n);
- assert (group>=0 && group<(int)Carpet::arrdata.size());
- const int n0 = CCTK_FirstVarIndexI(group);
- assert (n0>=0 && n0<CCTK_NumVars());
- const int var = n - n0;
- assert (var>=0 && var<CCTK_NumVars());
- const int tl = 0;
-
- // Check for storage
- if (! CCTK_QueryGroupStorageI(cgh, group)) {
- CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
- "Cannot input variable \"%s\" because it has no storage",
- varname);
- return 0;
- }
-
- const int grouptype = CCTK_GroupTypeI(group);
- const int rl = grouptype==CCTK_GF ? reflevel : 0;
-
- // Find the input directory
- const char* myindir = GetStringParameter("in3D_dir", ".");
-
- // Invent a file name
- const char* extension = 0;
- if (CCTK_Equals(in3D_format, "IEEE")) {
- extension = ".raw";
-#ifdef HDF4
- } else if (CCTK_Equals(in3D_format, "HDF4")) {
- extension = ".hdf";
-#endif
-#ifdef HDF5
- } else if (CCTK_Equals(in3D_format, "HDF5")) {
- extension = ".h5";
-#endif
- } else {
- assert (0);
- }
- extension = GetStringParameter ("in3D_extension", extension);
-
- ostringstream filenamebuf;
- filenamebuf << myindir << "/" << alias << extension;
- string filenamestr = filenamebuf.str();
- const char * const filename = filenamestr.c_str();
-
- IObase* reader = 0;
- AmrGridReader* amrreader = 0;
- int ndatasets = -1;
-
- const int gpdim = CCTK_GroupDimI(group);
-
- int rank;
- int dims[dim];
- int nbytes;
-
- // Read the file only on the root processor
- if (CCTK_MyProc(cgh)==0) {
-
- // Open the file
- if (verbose) CCTK_VInfo (CCTK_THORNSTRING, "Opening file \"%s\"", filename);
- if (CCTK_Equals(in3D_format, "IEEE")) {
- reader = new IEEEIO(filename, IObase::Read);
-#ifdef HDF4
- } else if (CCTK_Equals(in3D_format, "HDF4")) {
- reader = new HDFIO(filename, IObase::Read);
-#endif
-#ifdef HDF5
- } else if (CCTK_Equals(in3D_format, "HDF5")) {
- reader = new H5IO(filename, IObase::Read);
-#endif
- } else {
- assert (0);
- }
- if (!reader->isValid()) {
- CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
- "Could not open file \"%s\" for reading", filename);
- }
- assert (reader->isValid());
-
- if (verbose) CCTK_VInfo (CCTK_THORNSTRING, "Reading AMR info");
- amrreader = new AmrGridReader(*reader);
-
- // Read information about dataset
- if (verbose) CCTK_VInfo (CCTK_THORNSTRING, "Reading dataset info");
- IObase::DataType numbertype;
- reader->readInfo (numbertype, rank, dims);
- nbytes = IObase::nBytes(numbertype,rank,dims);
- if (verbose) CCTK_VInfo (CCTK_THORNSTRING, "type=%d rank=%d dims=[%d,%d,%d] nbytes=%d", (int)numbertype, rank, dims[0], dims[1], dims[2], nbytes);
-
- // Check rank
- assert (rank==gpdim);
-
- // Check datatype
- // TODO: Check datatype correctly
- assert (CCTK_VarTypeI(n) == CCTK_VARIABLE_REAL8
- || (sizeof(CCTK_REAL) == sizeof(CCTK_REAL8)
- && CCTK_VarTypeI(n) == CCTK_VARIABLE_REAL));
-
- // TODO: check grid spacing
-
- // Number of datasets
- if (verbose) CCTK_VInfo (CCTK_THORNSTRING, "Reading number of datasets");
- ndatasets = reader->nDatasets();
- if (verbose) CCTK_VInfo (CCTK_THORNSTRING, "ndatasets=%d", ndatasets);
- assert (ndatasets>=0);
- }
-
- // Broadcast rank, dimensions, and nbytes
- MPI_Bcast (&rank, 1, MPI_INT, 0, dist::comm);
- assert (rank>=1);
- MPI_Bcast (&dims, rank, MPI_INT, 0, dist::comm);
- for (int d=0; d<rank; ++d) assert (dims[d]>=0);
- MPI_Bcast (&nbytes, 1, MPI_INT, 0, dist::comm);
- assert (nbytes>=0);
-
- // Broadcast number of datasets
- MPI_Bcast (&ndatasets, 1, MPI_INT, 0, dist::comm);
- assert (ndatasets>=0);
-
- // Read some datasets
- bool did_read_something = false;
- vector<ibset> regions_read(Carpet::maps);
- for (int dataset=0; dataset<ndatasets; ++dataset) {
- if (verbose) CCTK_VInfo (CCTK_THORNSTRING, "Handling dataset #%d", dataset);
-
- // Read grid
- AmrGrid* amrgrid = 0;
- int want_dataset;
- int amr_level;
- int amr_origin[dim];
- int amr_dims[dim];
-
- if (CCTK_MyProc(cgh)==0) {
-
- // Read data
- if (verbose) CCTK_VInfo (CCTK_THORNSTRING, "Reading AMR data");
- amrgrid = amrreader->getGrid(dataset);
- assert (amrgrid!=0);
- assert (amrgrid->data!=0);
-
- {
- char * name;
- ReadAttribute (reader, "name", name);
- if (verbose) {
- if (name) {
- CCTK_VInfo (CCTK_THORNSTRING, "Dataset name is \"%s\"", name);
- }
- }
- want_dataset = name && CCTK_EQUALS(name, varname);
- free (name);
- }
-
- // If iorigin attribute is absent, assume file has unigrid
- // data.
- {
- IObase::DataType atype;
- int alength;
- if (reader->readAttributeInfo("iorigin", atype, alength) < 0) {
- amrgrid->level = 0;
- for (int d=0; d<gpdim; ++d) {
- amrgrid->iorigin[d] = 0;
- }
- }
- }
-
- amr_level = amrgrid->level;
- for (int d=0; d<gpdim; ++d) {
- amr_origin[d] = amrgrid->iorigin[d];
- amr_dims[d] = amrgrid->dims[d];
- }
- for (int d=gpdim; d<dim; ++d) {
- amr_origin[d] = 0;
- amr_dims[d] = 1;
- }
-
- } // MyProc == 0
-
- MPI_Bcast (&want_dataset, 1, MPI_INT, 0, dist::comm);
- MPI_Bcast (&amr_level, 1, MPI_INT, 0, dist::comm);
- MPI_Bcast (amr_origin, dim, MPI_INT, 0, dist::comm);
- MPI_Bcast (amr_dims, dim, MPI_INT, 0, dist::comm);
-
- if (want_dataset && amr_level == reflevel) {
- did_read_something = true;
-
- // Traverse all components on all levels
- BEGIN_MAP_LOOP(cgh, grouptype) {
- BEGIN_COMPONENT_LOOP(cgh, grouptype) {
-
- ggf<dim>* ff = 0;
-
- assert (var < (int)arrdata.at(group).at(Carpet::map).data.size());
- ff = (ggf<dim>*)arrdata.at(group).at(Carpet::map).data.at(var);
-
- gdata<dim>* const data = (*ff) (tl, rl, component, mglevel);
-
- // Create temporary data storage on processor 0
- const vect<int,dim> str
- = vect<int,dim>(maxreflevelfact/reflevelfact);
- const vect<int,dim> lb = vect<int,dim>::ref(amr_origin) * str;
- const vect<int,dim> ub
- = lb + (vect<int,dim>::ref(amr_dims) - 1) * str;
- const bbox<int,dim> ext(lb,ub,str);
-
- gdata<dim>* const tmp = data->make_typed (n);
-
- if (CCTK_MyProc(cgh)==0) {
- tmp->allocate (ext, 0, amrgrid->data);
- } else {
- tmp->allocate (ext, 0);
- }
-
- // Initialise with what is found in the file -- this does
- // not guarantee that everything is initialised.
- const bbox<int,dim> overlap = tmp->extent() & data->extent();
- regions_read.at(Carpet::map) |= overlap;
-
- // Copy into grid function
- for (comm_state<dim> state; !state.done(); state.step()) {
- data->copy_from (state, tmp, overlap);
- }
-
- // Delete temporary copy
- delete tmp;
-
- } END_COMPONENT_LOOP;
- } END_MAP_LOOP;
-
- } // if want_dataset && level == reflevel
-
- if (CCTK_MyProc(cgh)==0) {
- free (amrgrid->data);
- free (amrgrid);
- amrgrid = 0;
- }
-
- } // loop over datasets
-
- // Close the file
- if (CCTK_MyProc(cgh)==0) {
- if (verbose) CCTK_VInfo (CCTK_THORNSTRING, "Deleting AMR info");
- delete amrreader;
-
- amrreader = 0;
- if (verbose) CCTK_VInfo (CCTK_THORNSTRING, "Closing file");
- delete reader;
- reader = 0;
- }
-
- // Was everything initialised?
- if (did_read_something) {
- for (int m=0; m<Carpet::maps; ++m) {
- dh<dim>& thedd = *arrdata.at(group).at(m).dd;
- ibset all_exterior;
- for (size_t c=0; c<thedd.boxes.at(rl).size(); ++c) {
- all_exterior |= thedd.boxes.at(rl).at(c).at(mglevel).exterior;
- }
- if (regions_read.at(m) != all_exterior) {
- CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
- "Variable \"%s\" could not be initialised from file \"%s\" -- the file contains data for this variable, but the grids therein are too small",
- varname, filename);
- }
- }
- } // if did_read_something
-
- return did_read_something ? 0 : -1;
- }
-
-
-
- /** returns the number of recovered variables */
- int Recover (cGH* const cgh, const char *basefilename,
- const int called_from)
- {
- assert (cgh);
- assert (basefilename);
- assert (called_from == CP_INITIAL_DATA
- || called_from == CP_EVOLUTION_DATA
- || called_from == CP_RECOVER_PARAMETERS
- || called_from == CP_RECOVER_DATA
- || called_from == FILEREADER_DATA);
-
- // the other modes are not supported yet
- assert (called_from == FILEREADER_DATA);
-
- const ioGH * const iogh = (const ioGH *) CCTK_GHExtension (cgh, "IO");
- assert (iogh);
-
- int num_vars_read = 0;
- assert (iogh->do_inVars);
- for (int n=0; n<CCTK_NumVars(); ++n) {
- if (iogh->do_inVars[n]) {
- char * const fullname = CCTK_FullName(n);
- assert (fullname);
- const int ierr = InputVarAs (cgh, fullname, basefilename);
- if (! ierr) {
- ++ num_vars_read;
- }
- free (fullname);
- }
- }
-
- return num_vars_read;
- }
-
-
-
- int CarpetIOFlexIOReadData (CCTK_ARGUMENTS)
- {
- DECLARE_CCTK_ARGUMENTS;
- return InputGH(cctkGH);
- }
-
-
-
const char* GetStringParameter (const char* const parametername,
const char* const fallback)
{
if (CCTK_ParameterQueryTimesSet (parametername, CCTK_THORNSTRING) > 0) {
int ptype;
- const char* const* const ppval = (const char* const*)CCTK_ParameterGet
+ const char** const ppval = (const char**)CCTK_ParameterGet
(parametername, CCTK_THORNSTRING, &ptype);
assert (ppval);
const char* const pval = *ppval;
@@ -893,8 +380,8 @@ namespace CarpetIOFlexIO {
{
if (CCTK_ParameterQueryTimesSet (parametername, CCTK_THORNSTRING) > 0) {
int ptype;
- const int* const ppval = (const int*)CCTK_ParameterGet
- (parametername, CCTK_THORNSTRING, &ptype);
+ const int* const ppval
+ = (int*)CCTK_ParameterGet (parametername, CCTK_THORNSTRING, &ptype);
assert (ppval);
const int pval = *ppval;
assert (ptype == PARAMETER_INT);
@@ -906,188 +393,26 @@ namespace CarpetIOFlexIO {
- bool CheckForVariable (const cGH* const cgh,
+ bool CheckForVariable (cGH* const cgh,
const char* const varlist, const int vindex)
{
const int numvars = CCTK_NumVars();
assert (vindex>=0 && vindex<numvars);
- vector<bool> flags(numvars);
-
- CCTK_TraverseString (varlist, SetFlag, &flags, CCTK_GROUP_OR_VAR);
-
- return flags.at(vindex);
- }
-
- void SetFlag (int index, const char* optstring, void* arg)
- {
- vector<bool>& flags = *(vector<bool>*)arg;
- flags.at(index) = true;
- }
-
-
-
- int ReadAttribute (IObase* reader, const char* name, int& value)
- {
- return ReadAttribute (reader, name, &value, 1);
- }
-
- int ReadAttribute (IObase* reader, const char* name,
- int* values, int nvalues)
- {
- assert (reader);
- assert (name);
- assert (values);
-
- IObase::DataType atype;
- int alength;
- const int attrnum = reader->readAttributeInfo (name, atype, alength);
- if (attrnum<0) return attrnum;
- if (atype != IObase::Int32) return -100;
-
- vector<CCTK_INT4> values1(alength);
- reader->readAttribute (attrnum, &values1.at(0));
- for (int i=0; i<min(alength, nvalues); ++i) {
- values[i] = values1[i];
- }
-
- return alength;
- }
-
-
-
- int ReadAttribute (IObase* reader, const char* name, CCTK_REAL& value)
- {
- return ReadAttribute (reader, name, &value, 1);
- }
-
- int ReadAttribute (IObase* reader, const char* name,
- CCTK_REAL* values, int nvalues)
- {
- assert (reader);
- assert (name);
- assert (values);
-
- IObase::DataType atype;
- int alength;
- const int attrnum = reader->readAttributeInfo (name, atype, alength);
- if (attrnum<0) return attrnum;
- if (atype != IObase::Float64) return -100;
+ bool flags[numvars];
- vector<CCTK_REAL8> values1(alength);
- reader->readAttribute (attrnum, &values1.at(0));
- for (int i=0; i<min(alength, nvalues); ++i) {
- values[i] = values1[i];
+ for (int i=0; i<numvars; ++i) {
+ flags[i] = false;
}
- return alength;
- }
-
-
-
- int ReadAttribute (IObase* reader, const char* name, char& value)
- {
- return ReadAttribute (reader, name, &value, 1);
- }
-
- int ReadAttribute (IObase* reader, const char* name, char*& values)
- {
- assert (reader);
- assert (name);
-
- values = NULL;
-
- IObase::DataType atype;
- int alength;
- const int attrnum = reader->readAttributeInfo (name, atype, alength);
- if (attrnum<0) return attrnum;
- if (atype != IObase::Char8) return -100;
-
- values = (char *) malloc (alength+1);
- if (!values) return -101;
-
- reader->readAttribute (attrnum, values);
-
- return alength;
- }
-
- int ReadAttribute (IObase* reader, const char* name,
- char* values, int nvalues)
- {
- assert (reader);
- assert (name);
- assert (values);
-
- IObase::DataType atype;
- int alength;
- const int attrnum = reader->readAttributeInfo (name, atype, alength);
- if (attrnum<0) return attrnum;
- if (atype != IObase::Char8) return -100;
-
- vector<char> values1(alength);
- reader->readAttribute (attrnum, &values1.at(0));
- for (int i=0; i<min(alength, nvalues); ++i) {
- values[i] = values1[i];
- }
+ CCTK_TraverseString (varlist, SetFlag, flags, CCTK_GROUP_OR_VAR);
- return alength;
- }
-
-
-
- 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)
- {
- assert (writer);
- assert (name);
- assert (values);
- vector<CCTK_INT4> values1(nvalues);
- for (int i=0; i<nvalues; ++i) {
- values1[i] = values[i];
- }
- writer->writeAttribute (name, IObase::Int32, nvalues, &values1.at(0));
- }
-
- void WriteAttribute (IObase* writer, const char* name, CCTK_REAL value)
- {
- WriteAttribute (writer, name, &value, 1);
+ return flags[vindex];
}
- 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.at(0));
- }
-
- void WriteAttribute (IObase* writer, const char* name, char value)
- {
- WriteAttribute (writer, name, &value, 1);
- }
-
- void WriteAttribute (IObase* writer, const char* name, const char * values)
- {
- WriteAttribute (writer, name, values, strlen(values) + 1);
- }
-
- void WriteAttribute (IObase* writer, const char* name,
- const char * values, int nvalues)
+ void SetFlag (int index, const char* optstring, void* arg)
{
- assert (writer);
- assert (name);
- assert (values);
- writer->writeAttribute (name, IObase::Char8, nvalues, values);
+ ((bool*)arg)[index] = true;
}
diff --git a/CarpetAttic/CarpetIOFlexIO/src/ioflexio.h b/CarpetAttic/CarpetIOFlexIO/src/ioflexio.h
index 7e759749a..ba74d751e 100644
--- a/CarpetAttic/CarpetIOFlexIO/src/ioflexio.h
+++ b/CarpetAttic/CarpetIOFlexIO/src/ioflexio.h
@@ -1,22 +1,5 @@
-/* $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/src/ioflexio.h,v 1.5 2003/11/05 16:18:38 schnetter Exp $ */
+// $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/src/ioflexio.h,v 1.1 2001/03/15 23:28:50 eschnett Exp $
-#ifndef CARPETIOFLEXIO_H
-#define CARPETIOFLEXIO_H
+#include "cctk.h"
-#include "cctk_Arguments.h"
-
-#ifdef __cplusplus
-namespace CarpetIOFlexIO {
- extern "C" {
-#endif
-
- /* Scheduled functions */
- int CarpetIOFlexIOStartup (void);
- int CarpetIOFlexIOReadData (CCTK_ARGUMENTS);
-
-#ifdef __cplusplus
- } /* extern "C" */
-} /* namespace CarpetIOFlexIO */
-#endif
-
-#endif /* !defined(CARPETIOFLEXIO_H) */
+int CarpetIOFlexIOStartup ();
diff --git a/CarpetAttic/CarpetIOFlexIO/src/ioflexio.hh b/CarpetAttic/CarpetIOFlexIO/src/ioflexio.hh
index 156f9baaf..0b43a3eeb 100644
--- a/CarpetAttic/CarpetIOFlexIO/src/ioflexio.hh
+++ b/CarpetAttic/CarpetIOFlexIO/src/ioflexio.hh
@@ -1,14 +1,8 @@
-// $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/src/ioflexio.hh,v 1.8 2004/02/27 16:23:34 schnetter Exp $
-
-#ifndef CARPETIOFLEXIO_HH
-#define CARPETIOFLEXIO_HH
+// $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/src/ioflexio.hh,v 1.1 2001/03/15 23:28:50 eschnett Exp $
#include <vector>
#include "cctk.h"
-#include "cctk_Arguments.h"
-
-#include "ioflexio.h"
namespace CarpetIOFlexIO {
@@ -16,24 +10,20 @@ namespace CarpetIOFlexIO {
extern int GHExtension;
extern int IOMethod;
extern vector<bool> do_truncate;
- extern vector<vector<vector<int> > > last_output; // [ml][rl][var]
+ extern vector<int> last_output;
+
+ // Scheduled functions
+ extern "C" {
+ int CarpetIOFlexIOStartup ();
+ }
void* SetupGH (tFleshConfig* const fc,
const int convLevel, cGH* const cgh);
- int OutputGH (const cGH* const cgh);
- int OutputVarAs (const cGH* const cgh, const char* const varname,
+ int OutputGH (cGH* const cgh);
+ int OutputVarAs (cGH* const cgh, const char* const varname,
const char* const alias);
- int TimeToOutput (const cGH* const cgh, const int vindex);
- int TriggerOutput (const cGH* const cgh, const int vindex);
-
- int InputGH (const cGH* const cgh);
- int InputVarAs (const cGH* const cgh, const char* const varname,
- const char* const alias);
-
- int Recover (cGH* const cgh, const char *basefilename,
- const int called_from);
+ int TimeToOutput (cGH* const cgh, const int vindex);
+ int TriggerOutput (cGH* const cgh, const int vindex);
} // namespace CarpetIOFlexIO
-
-#endif // !defined(CARPETIOFLEXIO_HH)
diff --git a/CarpetAttic/CarpetIOFlexIO/src/make.code.defn b/CarpetAttic/CarpetIOFlexIO/src/make.code.defn
index a18d9d672..2073784d6 100644
--- a/CarpetAttic/CarpetIOFlexIO/src/make.code.defn
+++ b/CarpetAttic/CarpetIOFlexIO/src/make.code.defn
@@ -1,5 +1,9 @@
# Main make.code.defn file for thorn CarpetIOFlexIO
-# $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/src/make.code.defn,v 1.6 2003/07/04 16:03:57 tradke Exp $
+# $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/src/make.code.defn,v 1.1 2001/03/15 23:28:50 eschnett Exp $
# Source files in this directory
SRCS = ioflexio.cc
+
+# Subdirectories containing source files
+SUBDIRS =
+