diff options
author | eschnett <> | 2001-03-15 22:28:00 +0000 |
---|---|---|
committer | eschnett <> | 2001-03-15 22:28:00 +0000 |
commit | 0675254561b66bdfac7065867dd9699154740aad (patch) | |
tree | 1e4005616e45dda7cb6d7515dfdb3e1551c7bd16 | |
parent | 5c1233fe2921e9b6c37935989842efd128bb10c2 (diff) |
Added FlexIO I/O.
darcs-hash:20010315222845-f6438-22ee1dfc7f233239470a5ac47b09f3bcd5b20c41.gz
-rw-r--r-- | CarpetAttic/CarpetIOFlexIO/README | 5 | ||||
-rw-r--r-- | CarpetAttic/CarpetIOFlexIO/interface.ccl | 20 | ||||
-rw-r--r-- | CarpetAttic/CarpetIOFlexIO/param.ccl | 61 | ||||
-rw-r--r-- | CarpetAttic/CarpetIOFlexIO/schedule.ccl | 10 | ||||
-rw-r--r-- | CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc | 1081 | ||||
-rw-r--r-- | CarpetAttic/CarpetIOFlexIO/src/ioflexio.h | 23 | ||||
-rw-r--r-- | CarpetAttic/CarpetIOFlexIO/src/ioflexio.hh | 32 | ||||
-rw-r--r-- | CarpetAttic/CarpetIOFlexIO/src/make.code.defn | 6 |
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 = + |