From 4f9bcd9dfec80121a7d5d2eb32636aadbd5851bd Mon Sep 17 00:00:00 2001 From: schnetter <> Date: Mon, 9 Jul 2001 07:00:00 +0000 Subject: Changed handling of scalars. Scalars are now zero-dimensional arrays. Changed handling of scalars. Scalars are now zero-dimensional arrays. Now handling CCTK_GroupDynamicData correctly. Now using "include header". Added results of test case. darcs-hash:20010709070002-07bb3-ba0f4339acb8652e35a884fbdf7e8482b7236f8e.gz --- CarpetAttic/CarpetIOFlexIO/interface.ccl | 4 +- CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc | 332 ++++++++++++----------------- 2 files changed, 145 insertions(+), 191 deletions(-) (limited to 'CarpetAttic') diff --git a/CarpetAttic/CarpetIOFlexIO/interface.ccl b/CarpetAttic/CarpetIOFlexIO/interface.ccl index f10a470cb..4b51ccd97 100644 --- a/CarpetAttic/CarpetIOFlexIO/interface.ccl +++ b/CarpetAttic/CarpetIOFlexIO/interface.ccl @@ -1,4 +1,6 @@ # Interface definition for thorn CarpetIOFlexIO -# $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/interface.ccl,v 1.1 2001/03/15 23:28:45 eschnett Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/interface.ccl,v 1.2 2001/07/09 09:00:21 schnetter Exp $ implements: IOFlexIO + +uses include header: carpet.hh diff --git a/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc b/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc index 0c87f5701..bbf8235d4 100644 --- a/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc +++ b/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc @@ -28,11 +28,11 @@ #include "Carpet/CarpetLib/src/ggf.hh" #include "Carpet/CarpetLib/src/vect.hh" -#include "Carpet/Carpet/src/carpet.hh" +#include "carpet.hh" #include "ioflexio.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc,v 1.10 2001/07/04 12:29:50 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc,v 1.11 2001/07/09 09:00:22 schnetter Exp $"; @@ -118,206 +118,171 @@ namespace CarpetIOFlexIO { const int n = CCTK_VarIndex(varname); assert (n>=0 && n=0 && group<(int)Carpet::gfdata.size()); + assert (group>=0 && group<(int)Carpet::arrdata.size()); const int n0 = CCTK_FirstVarIndexI(group); assert (n0>=0 && n0=0 && varisValid()); + amrwriter = new AMRwriter(*writer); - char* const filename = (char*)alloca(strlen(myoutdir) - +strlen(alias) - +strlen(extension)+100); - sprintf (filename, "%s/%s%s", myoutdir, alias, extension); + // 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); - IObase* writer = 0; - AMRwriter* amrwriter = 0; + const int gpdim = CCTK_GroupDimI(group); - // 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]) { - struct stat fileinfo; - if (! IOUtil_RestartFromRecovery(cgh) - || stat(filename, &fileinfo)!=0) { - writer = 0; - if (CCTK_Equals(out3D_format, "IEEE")) { - writer = new IEEEIO(filename, IObase::Create); -#ifdef HDF5 - } else if (CCTK_Equals(out3D_format, "HDF4")) { - writer = new HDFIO(filename, IObase::Create); - } else if (CCTK_Equals(out3D_format, "HDF5")) { - writer = new H5IO(filename, IObase::Create); -#endif - } else { - abort(); - } - delete writer; - writer = 0; - } - } - - // Open the file - if (CCTK_Equals(out3D_format, "IEEE")) { - writer = new IEEEIO(filename, IObase::Append); -#ifdef HDF5 - } 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); -#endif - } else { - abort(); - } - 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 - CCTK_REAL lower[dim], upper[dim]; - double origin[dim], delta[dim], timestep; - for (int d=0; dcctk_delta_space[d]; - } - timestep = base_delta_time; - amrwriter->setTopLevelParameters - (gpdim, origin, delta, timestep, maxreflevels); - - // Set refinement information - int interlevel_timerefinement; - int interlevel_spacerefinement[dim]; - int initial_gridplacementrefinement[dim]; - interlevel_timerefinement = hh->reffact; - for (int d=0; dreffact; - initial_gridplacementrefinement[d] = 1; - } - amrwriter->setRefinement - (interlevel_timerefinement, interlevel_spacerefinement, - initial_gridplacementrefinement); - - // Set level - amrwriter->setLevel (reflevel); - - // Set current time - amrwriter->setTime (cgh->cctk_iteration); + // Set coordinate information + CCTK_REAL lower[dim], upper[dim]; + double origin[dim], delta[dim], timestep; + for (int d=0; dcctk_delta_space[d]; } + timestep = base_delta_time; + amrwriter->setTopLevelParameters + (gpdim, origin, delta, timestep, maxreflevels); - // Traverse all components on this refinement and multigrid - // level - BEGIN_COMPONENT_LOOP(cgh) { - - const generic_gf* ff = 0; - - switch (CCTK_GroupTypeI(group)) { - - case CCTK_ARRAY: - assert (var < (int)arrdata[group].data.size()); - ff = (generic_gf*)arrdata[group].data[var]; - break; - - case CCTK_GF: - assert (var < (int)gfdata[group].data.size()); - ff = (generic_gf*)gfdata[group].data[var]; - break; - - default: - abort(); - } - - const generic_data* const data - = (*ff) (tl, reflevel, component, mglevel); - - /* Make temporary copy on processor 0 */ - const bbox ext = data->extent(); - generic_data* const 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; dwrite (origin, dims, (void*)tmp->storage()); - } - - /* Delete temporary copy */ - delete tmp; - - } END_COMPONENT_LOOP(cgh); + // Set refinement information + int interlevel_timerefinement; + int interlevel_spacerefinement[dim]; + int initial_gridplacementrefinement[dim]; + interlevel_timerefinement = hh->reffact; + for (int d=0; dreffact; + initial_gridplacementrefinement[d] = 1; + } + amrwriter->setRefinement + (interlevel_timerefinement, interlevel_spacerefinement, + initial_gridplacementrefinement); - // Close the file + // Set level + amrwriter->setLevel (reflevel); + + // Set current time + amrwriter->setTime (cgh->cctk_iteration); + } + + // Traverse all components on this refinement and multigrid level + BEGIN_COMPONENT_LOOP(cgh) { + + const generic_gf* ff = 0; + + assert (var < (int)arrdata[group].data.size()); + ff = (generic_gf*)arrdata[group].data[var]; + + const generic_data* const data + = (*ff) (tl, reflevel, component, mglevel); + + // Make temporary copy on processor 0 + const bbox ext = data->extent(); + generic_data* const tmp = data->make_typed (); + tmp->allocate (ext, 0); + tmp->copy_from (data, ext); + + // Write data if (CCTK_MyProc(cgh)==0) { - delete amrwriter; - amrwriter = 0; - delete writer; - writer = 0; + int origin[dim], dims[dim]; + for (int d=0; dwrite (origin, dims, (void*)tmp->storage()); } - break; - } // ARRAY or GROUP + // Delete temporary copy + delete tmp; - default: - abort(); + } END_COMPONENT_LOOP(cgh); + + // Close the file + if (CCTK_MyProc(cgh)==0) { + delete amrwriter; + amrwriter = 0; + delete writer; + writer = 0; } // Don't truncate again @@ -406,7 +371,7 @@ namespace CarpetIOFlexIO { const int n = CCTK_VarIndex(varname); assert (n>=0 && n=0 && group<(int)Carpet::gfdata.size()); + assert (group>=0 && group<(int)Carpet::arrdata.size()); const int n0 = CCTK_FirstVarIndexI(group); assert (n0>=0 && n0* ff = 0; - switch (CCTK_GroupTypeI(group)) { - - case CCTK_ARRAY: - assert (var < (int)arrdata[group].data.size()); - ff = (generic_gf*)arrdata[group].data[var]; - break; - - case CCTK_GF: - assert (var < (int)gfdata[group].data.size()); - ff = (generic_gf*)gfdata[group].data[var]; - break; - - default: - abort(); - } + assert (var < (int)arrdata[group].data.size()); + ff = (generic_gf*)arrdata[group].data[var]; generic_data* const data = (*ff) (tl, reflevel, component, mglevel); - /* Create temporary data storage on processor 0 */ + // Create temporary data storage on processor 0 const vect str = vect(reflevelfact); const vect lb = vect(amr_origin) * str; const vect ub @@ -583,10 +535,10 @@ namespace CarpetIOFlexIO { tmp->allocate (ext, 0, 0); } - /* Copy into grid function */ + // Copy into grid function data->copy_from (tmp, ext); - /* Delete temporary copy */ + // Delete temporary copy delete tmp; } END_COMPONENT_LOOP(cgh); -- cgit v1.2.3