From 1616d350bf971862664bcaa78d5e5fc08b905f38 Mon Sep 17 00:00:00 2001 From: eschnett <> Date: Fri, 16 Mar 2001 20:32:00 +0000 Subject: Changed the way output is handled. Now output is per refinement level Changed the way output is handled. Now output is per refinement level only. A single cctk_iteration is now a time step on the finest grid, instead of a time step on the coarsest grid. The analysis stage should now work on the finer grid. darcs-hash:20010316203212-f6438-36f1809e816f4b3ae73a1a837c0fcd8d81616120.gz --- CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc | 128 ++++++++++++++--------------- 1 file changed, 63 insertions(+), 65 deletions(-) (limited to 'CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc') diff --git a/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc b/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc index 5f87c41a9..e0494da20 100644 --- a/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc +++ b/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -27,7 +28,7 @@ #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 $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc,v 1.2 2001/03/16 21:32:17 eschnett Exp $"; @@ -41,7 +42,7 @@ namespace CarpetIOFlexIO { int GHExtension; int IOMethod; vector do_truncate; - vector last_output; + vector > last_output; @@ -81,10 +82,14 @@ namespace CarpetIOFlexIO { do_truncate.resize(CCTK_NumVars(), ! IOUtil_RestartFromRecovery(cgh)); // No iterations have yet been output - last_output.resize(CCTK_NumVars(), -1); + last_output.resize(maxreflevels); + for (int rl=0; rlsetType (IObase::Float64); // Set coordinate information - assert (reflevel==0); - double lower[dim], upper[dim]; + CCTK_REAL lower[dim], upper[dim]; double origin[dim], delta[dim], timestep; for (int d=0; dcctk_delta_space[d]; + delta[d] = cgh->cctk_delta_space[d] / reflevelfact; } - timestep = cgh->cctk_delta_time; + timestep = cgh->cctk_delta_time / reflevelfact; amrwriter->setTopLevelParameters - (dim, origin, delta, timestep, hh->reflevels()); + (dim, origin, delta, timestep, maxreflevels); // Set refinement information int interlevel_timerefinement, interlevel_spacerefinement[dim]; @@ -219,66 +224,59 @@ namespace CarpetIOFlexIO { } amrwriter->setRefinement (interlevel_timerefinement, interlevel_spacerefinement); - } - - // Traverse all components on all refinement levels - assert (mglevel>=0); - assert (reflevel==0); - for (reflevel=0; reflevelreflevels(); ++reflevel) { - enact_reflevel (cgh); + // 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) { - assert (component==-1); - for (component=0; componentcomponents(reflevel); ++component) { - - generic_gf* 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(); - } + generic_gf* ff = 0; + + switch (CCTK_GroupTypeI(group)) { - const generic_data* const data - = (*ff) (tl, reflevel, component, mglevel); + case CCTK_ARRAY: + assert (var < (int)arrdata[group].data.size()); + ff = arrdata[group].data[var]; + break; - // Make temporary copy on processor 0 - const bbox ext = data->extent(); - generic_data* tmp = data->make_typed (); - tmp->allocate (ext, 0); - tmp->copy_from (data, ext); + case CCTK_GF: + assert (var < (int)gfdata[group].data.size()); + ff = gfdata[group].data[var]; + break; - // Write data - if (CCTK_MyProc(cgh)==0) { - int origin[dim], dims[dim]; - for (int d=0; dwrite (origin, dims, (void*)data->storage()); + 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* 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*)data->storage()); + } + + // Delete temporary copy + delete tmp; - } // Loop over refinement levels - reflevel = 0; - enact_reflevel (cgh); + } END_COMPONENT_LOOP(cgh); // Close the file if (CCTK_MyProc(cgh)==0) { @@ -305,7 +303,7 @@ namespace CarpetIOFlexIO { int TimeToOutput (cGH* const cgh, const int vindex) { DECLARE_CCTK_PARAMETERS; - assert (vindex>=0 && vindex<(int)last_output.size()); + assert (vindex>=0 && vindex<(int)last_output[reflevel].size()); const int myoutevery = GetIntParameter("out3D_every", out_every); @@ -319,12 +317,12 @@ namespace CarpetIOFlexIO { return 0; } - if (! CheckForVariable(cgh, GetStringParameter("out3D_vars", ""), vindex)) { + if (! CheckForVariable(cgh, GetStringParameter("out3D_vars",""), vindex)) { // This variable should not be output return 0; } - if (last_output[vindex] == cgh->cctk_iteration) { + if (last_output[reflevel][vindex] == cgh->cctk_iteration) { // Has already been output during this iteration char* varname = CCTK_FullName(vindex); CCTK_VWarn (5, __LINE__, __FILE__, CCTK_THORNSTRING, @@ -336,7 +334,7 @@ namespace CarpetIOFlexIO { return 0; } - assert (last_output[vindex] < cgh->cctk_iteration); + assert (last_output[reflevel][vindex] < cgh->cctk_iteration); // Should be output during this iteration return 1; @@ -351,7 +349,7 @@ namespace CarpetIOFlexIO { const int retval = OutputVarAs (cgh, varname, CCTK_VarName(vindex)); free (varname); - last_output[vindex] = cgh->cctk_iteration; + last_output[reflevel][vindex] = cgh->cctk_iteration; return retval; } -- cgit v1.2.3