From 22800b737774a8d1f2ed2d6b5ac546829e7cacec Mon Sep 17 00:00:00 2001 From: Erik Schnetter Date: Fri, 12 Sep 2008 19:23:54 -0400 Subject: CarpetIOASCII: Correct error in determining symmetry and ghost zones Correct error in the logic which determines which boundaries are inter- processor, symmetry, or outer boundaries. This only has an effect if these points should not be output. --- Carpet/CarpetIOASCII/src/ioascii.cc | 265 ++++++++++++++++++------------------ 1 file changed, 129 insertions(+), 136 deletions(-) (limited to 'Carpet/CarpetIOASCII') diff --git a/Carpet/CarpetIOASCII/src/ioascii.cc b/Carpet/CarpetIOASCII/src/ioascii.cc index 11814b216..e003cec9a 100644 --- a/Carpet/CarpetIOASCII/src/ioascii.cc +++ b/Carpet/CarpetIOASCII/src/ioascii.cc @@ -396,8 +396,12 @@ namespace CarpetIOASCII { const int var = vindex - vindex0; const int num_tl = CCTK_NumTimeLevelsFromVarI (vindex); assert (num_tl >= 1); - - const int grouptype = CCTK_GroupTypeI (group); + cGroup groupdata; + { + int const ierr = CCTK_GroupData (group, & groupdata); + assert (not ierr); + } + const int grouptype = groupdata.grouptype; if (grouptype != CCTK_GF) { assert (do_global_mode); } @@ -776,158 +780,147 @@ namespace CarpetIOASCII { int const c_max = grouptype == CCTK_GF ? vhh.at(m)->components(reflevel) : - CCTK_nProcs(cctkGH); + groupdata.disttype != CCTK_DISTRIB_CONSTANT ? + CCTK_nProcs(cctkGH) : + 0; for (int c = c_min; c < c_max; ++ c) { - cGroup groupdata; - { - int const ierr = CCTK_GroupData (group, & groupdata); - assert (not ierr); - } + const ggf* const ff = arrdata.at(group).at(m).data.at(var); - cGroupDynamicData dyndata; - { - int const ierr = CCTK_GroupDynamicData - (cctkGH, group, & dyndata); - assert (not ierr); - } + const int maxtl = output_all_timelevels ? num_tl : 1; + for (int tl=0; tlextent(); - const ggf* const ff = arrdata.at(group).at(m).data.at(var); + ivect lo = ext.lower(); + ivect hi = ext.upper(); + ivect str = ext.stride(); - const int maxtl = output_all_timelevels ? num_tl : 1; - for (int tl=0; tlextent(); - - ivect lo = ext.lower(); - ivect hi = ext.upper(); - ivect str = ext.stride(); - - // Ignore symmetry and ghost zones if desired + // Ignore symmetry and ghost zones if desired + { + CCTK_INT symtable; + // TODO: This is a bit ad hoc + if (groupdata.grouptype == CCTK_GF + and groupdata.dim == cctkGH->cctk_dim) { - CCTK_INT symtable; - // TODO: This is a bit ad hoc - if (groupdata.grouptype == CCTK_GF - and groupdata.dim == cctkGH->cctk_dim) - { - symtable - = SymmetryTableHandleForGrid (cctkGH); - if (symtable < 0) CCTK_WARN (0, "internal error"); - } else { - symtable - = SymmetryTableHandleForGI (cctkGH, group); - if (symtable < 0) CCTK_WARN (0, "internal error"); - } - CCTK_INT symbnd[2*dim]; - int const ierr = Util_TableGetIntArray - (symtable, 2*groupdata.dim, symbnd, "symmetry_handle"); - if (ierr != 2*groupdata.dim) { - CCTK_WARN (0, "internal error"); - } - bool is_symbnd[2*dim]; - for (int d=0; d<2*groupdata.dim; ++d) { - is_symbnd[d] = symbnd[d] >= 0; - } - - for (int d=0; d= 0; } - - ext = ibbox(lo,hi,str); - - // coordinates - const CCTK_REAL coord_time = cctkGH->cctk_time; - rvect global_lower; - rvect coord_delta; - if (grouptype == CCTK_GF) { - rvect const cctk_origin_space = - origin_space.at(m).at(mglevel); - rvect const cctk_delta_space = - delta_space.at(m) * rvect (mglevelfact); - for (int d=0; dbaseextents.at(0).at(0).stride()[d]; + + b2vect const & obnds = + vhh.at(m)->outer_boundaries(reflevel,c); + for (int d=0; dghost_width; + if (not output_lower_ghosts) { + lo[d] += ghost_width[0][d] * str[d]; } - } else { - for (int d=0; dbaseextents.at(mglevel).at(reflevel); - offset1 = baseext.lower() + offset * ext.stride(); - } else { - offset1 = offset * ext.stride(); - } + } - for (int d=0; dcctk_time; + rvect global_lower; + rvect coord_delta; + if (grouptype == CCTK_GF) { + rvect const cctk_origin_space = + origin_space.at(m).at(mglevel); + rvect const cctk_delta_space = + delta_space.at(m) * rvect (mglevelfact); + for (int d=0; dbaseextents.at(0).at(0).stride()[d]; } + } else { + for (int d=0; dbaseextents.at(mglevel).at(reflevel); + offset1 = baseext.lower() + offset * ext.stride(); + } else { + offset1 = offset * ext.stride(); + } - vector datas; - if (one_file_per_group) { - int const numvars = CCTK_NumVarsInGroupI(group); - datas.resize (numvars); - for (int n=0; n datas; + if (one_file_per_group) { + int const numvars = CCTK_NumVarsInGroupI(group); + datas.resize (numvars); + for (int n=0; ncctk_iteration, - offset1, dirs, - my_reflevel, mglevel, m, c, tl, - coord_time, coord_lower, coord_upper); - - // Append EOL after every component - if (dist::rank()==ioproc) { - if (separate_components) { - assert (file.good()); - file << eol; - } + } else { + datas.resize (1); + datas.at(0) = data; + } + WriteASCII (file, datas, ext, vindex, cctkGH->cctk_iteration, + offset1, dirs, + my_reflevel, mglevel, m, c, tl, + coord_time, coord_lower, coord_upper); + + // Append EOL after every component + if (dist::rank()==ioproc) { + if (separate_components) { assert (file.good()); + file << eol; } + assert (file.good()); + } - } // for tl - - } // if distrib!=CONSTANT or c==0 + } // for tl } // for c -- cgit v1.2.3