From 614a9d54afc05718cdc1c9f4318e482d1c005fca Mon Sep 17 00:00:00 2001 From: Erik Schnetter Date: Sat, 3 Dec 2005 16:41:00 +0000 Subject: CarpetIOF5: More development Place the map number into the topology instead of the region. Turn the writer into a class. darcs-hash:20051203164123-dae7b-65b1542bb466995b2cf18840d3c253167970e296.gz --- CarpetDev/CarpetIOF5/src/IOF5.cc | 5 +- CarpetDev/CarpetIOF5/src/make.code.defn | 2 +- CarpetDev/CarpetIOF5/src/topology.cc | 3 +- CarpetDev/CarpetIOF5/src/topology.hh | 1 + CarpetDev/CarpetIOF5/src/write.cc | 284 ------------------------------ CarpetDev/CarpetIOF5/src/write.hh | 56 ------ CarpetDev/CarpetIOF5/src/writer.cc | 299 ++++++++++++++++++++++++++++++++ CarpetDev/CarpetIOF5/src/writer.hh | 60 +++++++ 8 files changed, 366 insertions(+), 344 deletions(-) delete mode 100644 CarpetDev/CarpetIOF5/src/write.cc delete mode 100644 CarpetDev/CarpetIOF5/src/write.hh create mode 100644 CarpetDev/CarpetIOF5/src/writer.cc create mode 100644 CarpetDev/CarpetIOF5/src/writer.hh (limited to 'CarpetDev') diff --git a/CarpetDev/CarpetIOF5/src/IOF5.cc b/CarpetDev/CarpetIOF5/src/IOF5.cc index 4c0fbf78c..40b196751 100644 --- a/CarpetDev/CarpetIOF5/src/IOF5.cc +++ b/CarpetDev/CarpetIOF5/src/IOF5.cc @@ -16,7 +16,7 @@ #include "extending.hh" #include "file.hh" #include "utils.hh" -#include "write.hh" +#include "writer.hh" @@ -404,7 +404,8 @@ namespace CarpetIOF5 { F5::file_t file (cctkGH, filename, do_truncate); - write::write_meta (cctkGH, file, group, variable); + writer_t writer (cctkGH, variable); + writer.write (file); return Error_none; } diff --git a/CarpetDev/CarpetIOF5/src/make.code.defn b/CarpetDev/CarpetIOF5/src/make.code.defn index 40fab33c2..d0a45f9d8 100644 --- a/CarpetDev/CarpetIOF5/src/make.code.defn +++ b/CarpetDev/CarpetIOF5/src/make.code.defn @@ -12,7 +12,7 @@ SRCS = IOF5.cc \ timestep.cc \ topology.cc \ utils.cc \ - write.cc + writer.cc # Subdirectories containing source files SUBDIRS = diff --git a/CarpetDev/CarpetIOF5/src/topology.cc b/CarpetDev/CarpetIOF5/src/topology.cc index b45f580d6..9779dc040 100644 --- a/CarpetDev/CarpetIOF5/src/topology.cc +++ b/CarpetDev/CarpetIOF5/src/topology.cc @@ -93,6 +93,7 @@ namespace CarpetIOF5 { mesh_refinement_topology_t:: mesh_refinement_topology_t (simulation_t & simulation, + int const map, int const refinement_level, int const max_refinement_levels, vect const & level_refinement_factor, @@ -109,7 +110,7 @@ namespace CarpetIOF5 { assert (all (level_refinement_factor <= max_refinement_factor)); ostringstream namebuf; - namebuf << "Vertices level=" << refinement_level; + namebuf << "Vertices map=" << map << " level=" << refinement_level; string const namestr = namebuf.str(); char const * const name = namestr.c_str(); diff --git a/CarpetDev/CarpetIOF5/src/topology.hh b/CarpetDev/CarpetIOF5/src/topology.hh index 81534f945..2e97ff255 100644 --- a/CarpetDev/CarpetIOF5/src/topology.hh +++ b/CarpetDev/CarpetIOF5/src/topology.hh @@ -88,6 +88,7 @@ namespace CarpetIOF5 { public: mesh_refinement_topology_t (simulation_t & simulation, + int map, int refinement_level, int max_refinement_levels, vect const & level_refinement_factors, diff --git a/CarpetDev/CarpetIOF5/src/write.cc b/CarpetDev/CarpetIOF5/src/write.cc deleted file mode 100644 index bba4523f9..000000000 --- a/CarpetDev/CarpetIOF5/src/write.cc +++ /dev/null @@ -1,284 +0,0 @@ -#include - -#include "cctk.h" -#include "cctk_Arguments.h" -#include "cctk_Parameters.h" - -#include "carpet.hh" - -#include "data_region.hh" -#include "file.hh" -#include "simulation.hh" -#include "tensor_component.hh" -#include "timestep.hh" -#include "topology.hh" -#include "write.hh" - - - -namespace CarpetIOF5 { - - namespace write { - - void - write_meta (cGH const * const cctkGH, - F5::file_t & file, - int const group, - int const variable) - { - DECLARE_CCTK_PARAMETERS; - - if (verbose or veryverbose) - { - CCTK_VInfo (CCTK_THORNSTRING, - "OutputVarAs/write_meta"); - } - - F5::timestep_t timestep (file, cctkGH->cctk_time); - - if (Carpet::is_meta_mode()) - { - for (Carpet::mglevel_iterator mglevel_iter (cctkGH); - ! mglevel_iter.done(); - mglevel_iter.step()) - { - write_one_mglevel (cctkGH, timestep, group, variable); - } - } - else - { - write_one_mglevel (cctkGH, timestep, group, variable); - } - } - - - - void - write_one_mglevel (cGH const * const cctkGH, - F5::timestep_t & timestep, - int const group, - int const variable) - { - DECLARE_CCTK_PARAMETERS; - - if (verbose or veryverbose) - { - CCTK_VInfo (CCTK_THORNSTRING, - "OutputVarAs/write_one_mglevel mglevel=%d", - Carpet::mglevel); - } - - ostringstream namebuf; - namebuf << "convlevel=" << cctkGH->cctk_convlevel; - string const namestr = namebuf.str(); - char const * const name = namestr.c_str(); - F5::simulation_t simulation (timestep, name); - - int const grouptype = CCTK_GroupTypeI (group); - assert (grouptype >= 0); - switch (grouptype) - { - case CCTK_ARRAY: - case CCTK_SCALAR: - { - if (Carpet::do_global_mode) - { - write_global (cctkGH, simulation, group, variable); - } - } - break; - case CCTK_GF: - { - if (Carpet::is_global_mode()) - { - for (Carpet::reflevel_iterator reflevel_iter (cctkGH); - ! reflevel_iter.done(); - reflevel_iter.step()) - { - write_one_reflevel (cctkGH, simulation, group, variable); - } - } - else - { - write_one_reflevel (cctkGH, simulation, group, variable); - } - } - break; - default: - assert (0); - } - } - - - - void - write_global (cGH const * const cctkGH, - F5::simulation_t & simulation, - int const group, - int const variable) - { - DECLARE_CCTK_PARAMETERS; - - if (verbose or veryverbose) - { - CCTK_INFO ("OutputVarAs/write_global"); - } - - F5::unigrid_topology_t topology (simulation); - - int const grouptype = CCTK_GroupTypeI (group); - assert (grouptype >= 0); - assert (grouptype == CCTK_SCALAR or grouptype == CCTK_ARRAY); - - vect level_origin, level_delta; - for (int d=0; d const & region - = dd->boxes.at(Carpet::mglevel).at(0).at(myproc).exterior; - - F5::data_region_t data_region (tensor_component, region); - - void const * const varptr = CCTK_VarDataPtrI (cctkGH, 0, variable); - assert (varptr != 0); - int const vartype = CCTK_VarTypeI (variable); - assert (vartype >= 0); - data_region.write (varptr, vartype); - } - - - - void - write_one_reflevel (cGH const * const cctkGH, - F5::simulation_t & simulation, - int const group, - int const variable) - { - DECLARE_CCTK_PARAMETERS; - - if (verbose or veryverbose) - { - CCTK_VInfo (CCTK_THORNSTRING, - "OutputVarAs/write_one_reflevel reflevel=%d", - Carpet::reflevel); - } - - int const grouptype = CCTK_GroupTypeI (group); - assert (grouptype >= 0); - assert (grouptype == CCTK_GF); - - F5::mesh_refinement_topology_t topology - (simulation, Carpet::reflevel, Carpet::maxreflevels, - Carpet::spacereflevelfact, Carpet::maxspacereflevelfact); - - if (Carpet::is_level_mode()) - { - for (Carpet::map_iterator map_iter (cctkGH, grouptype); - ! map_iter.done(); - map_iter.step()) - { - write_one_map (cctkGH, topology, group, variable); - } - } - else - { - write_one_map (cctkGH, topology, group, variable); - } - } - - - - void - write_one_map (cGH const * const cctkGH, - F5::topology_t & topology, - int const group, - int const variable) - { - DECLARE_CCTK_PARAMETERS; - - if (verbose or veryverbose) - { - CCTK_VInfo (CCTK_THORNSTRING, - "OutputVarAs/write_one_map map=%d", Carpet::map); - } - - vect level_origin, level_delta; - for (int d=0; d= 0); - - for (Carpet::component_iterator component_iter (cctkGH, grouptype); - ! component_iter.done(); - component_iter.step()) - { - write_one_component (cctkGH, tensor_component); - } - } - else - { - write_one_component (cctkGH, tensor_component); - } - } - - - - void - write_one_component (cGH const * const cctkGH, - F5::tensor_component_t & tensor_component) - { - DECLARE_CCTK_PARAMETERS; - - if (verbose or veryverbose) - { - CCTK_VInfo (CCTK_THORNSTRING, - "OutputVarAs/write_one_component component=%d", - Carpet::component); - } - - gh * const hh = Carpet::vhh.at(Carpet::map); - if (hh->is_local (Carpet::reflevel, Carpet::component)) - { - dh * const dd = Carpet::vdd.at(Carpet::map); - bbox const & region - = (dd->boxes.at(Carpet::mglevel).at(Carpet::reflevel) - .at(Carpet::component).exterior); - - F5::data_region_t data_region (tensor_component, region); - - int const variable = tensor_component.get_variable(); - void const * const varptr = CCTK_VarDataPtrI (cctkGH, 0, variable); - assert (varptr != 0); - int const vartype = CCTK_VarTypeI (variable); - assert (vartype >= 0); - data_region.write (varptr, vartype); - } - } - - } // namespace write - -} // namespace CarpetIOF5 diff --git a/CarpetDev/CarpetIOF5/src/write.hh b/CarpetDev/CarpetIOF5/src/write.hh deleted file mode 100644 index 08a45ef9b..000000000 --- a/CarpetDev/CarpetIOF5/src/write.hh +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef WRITE_HH -#define WRITE_HH - -#include "cctk.h" - -#include "file.hh" -#include "simulation.hh" -#include "tensor_component.hh" -#include "timestep.hh" -#include "topology.hh" - - - -namespace CarpetIOF5 { - - namespace write { - - void - write_meta (cGH const * cctkGH, - F5::file_t & file, - int group, - int variable); - - void - write_one_mglevel (cGH const * cctkGH, - F5::timestep_t & timestep, - int group, - int variable); - - void - write_global (cGH const * cctkGH, - F5::simulation_t & simulation, - int group, - int variable); - - void - write_one_reflevel (cGH const * cctkGH, - F5::simulation_t & simulation, - int group, - int variable); - - void - write_one_map (cGH const * cctkGH, - F5::topology_t & topology, - int group, - int variable); - - void - write_one_component (cGH const * cctkGH, - F5::tensor_component_t & tensor_component); - - } // namespace write - -} // namespace CarpetIOF5 - -#endif // #ifndef WRITE_HH diff --git a/CarpetDev/CarpetIOF5/src/writer.cc b/CarpetDev/CarpetIOF5/src/writer.cc new file mode 100644 index 000000000..a871861b4 --- /dev/null +++ b/CarpetDev/CarpetIOF5/src/writer.cc @@ -0,0 +1,299 @@ +#include + +#include "cctk.h" +#include "cctk_Arguments.h" +#include "cctk_Parameters.h" + +#include "carpet.hh" + +#include "data_region.hh" +#include "file.hh" +#include "simulation.hh" +#include "tensor_component.hh" +#include "timestep.hh" +#include "topology.hh" +#include "writer.hh" + + + +namespace CarpetIOF5 { + + writer_t:: + writer_t (cGH const * const cctkGH, + int const variable) + : m_cctkGH (cctkGH), + m_variable (variable) + { + } + + + + void writer_t:: + write (F5::file_t & file) + const + { + write_meta (file); + } + + + + void writer_t:: + write_meta (F5::file_t & file) + const + { + DECLARE_CCTK_PARAMETERS; + + if (verbose or veryverbose) + { + CCTK_VInfo (CCTK_THORNSTRING, + "OutputVarAs/write_meta"); + } + + F5::timestep_t timestep (file, m_cctkGH->cctk_time); + + if (Carpet::is_meta_mode()) + { + for (Carpet::mglevel_iterator mglevel_iter (m_cctkGH); + ! mglevel_iter.done(); + mglevel_iter.step()) + { + write_one_mglevel (timestep); + } + } + else + { + write_one_mglevel (timestep); + } + } + + + + void writer_t:: + write_one_mglevel (F5::timestep_t & timestep) + const + { + DECLARE_CCTK_PARAMETERS; + + if (verbose or veryverbose) + { + CCTK_VInfo (CCTK_THORNSTRING, + "OutputVarAs/write_one_mglevel mglevel=%d", + Carpet::mglevel); + } + + ostringstream namebuf; + namebuf << "convlevel=" << m_cctkGH->cctk_convlevel; + string const namestr = namebuf.str(); + char const * const name = namestr.c_str(); + F5::simulation_t simulation (timestep, name); + + int const grouptype = CCTK_GroupTypeFromVarI (m_variable); + assert (grouptype >= 0); + switch (grouptype) + { + case CCTK_ARRAY: + case CCTK_SCALAR: + { + if (Carpet::do_global_mode) + { + write_global (simulation); + } + } + break; + case CCTK_GF: + { + if (Carpet::is_global_mode()) + { + for (Carpet::reflevel_iterator reflevel_iter (m_cctkGH); + ! reflevel_iter.done(); + reflevel_iter.step()) + { + write_one_reflevel (simulation); + } + } + else + { + write_one_reflevel (simulation); + } + } + break; + default: + assert (0); + } + } + + + + void writer_t:: + write_global (F5::simulation_t & simulation) + const + { + DECLARE_CCTK_PARAMETERS; + + if (verbose or veryverbose) + { + CCTK_INFO ("OutputVarAs/write_global"); + } + + F5::unigrid_topology_t topology (simulation); + + int const grouptype = CCTK_GroupTypeFromVarI (m_variable); + assert (grouptype >= 0); + assert (grouptype == CCTK_SCALAR or grouptype == CCTK_ARRAY); + + vect level_origin, level_delta; + for (int d=0; d= 0 and group < CCTK_NumGroups()); + F5::physical_quantity_t physical_quantity (coordinate_system, group); + + F5::tensor_component_t tensor_component (physical_quantity, m_variable); + + int const map = 0; + int const reflevel = 0; + int const myproc = CCTK_MyProc (m_cctkGH); + dh * const dd = Carpet::arrdata.at(group).at(map).dd; + bbox const & region + = dd->boxes.at(Carpet::mglevel).at(reflevel).at(myproc).exterior; + + F5::data_region_t data_region (tensor_component, region); + + int const timelevel = 0; + void const * const varptr + = CCTK_VarDataPtrI (m_cctkGH, timelevel, m_variable); + assert (varptr != 0); + int const vartype = CCTK_VarTypeI (m_variable); + assert (vartype >= 0); + data_region.write (varptr, vartype); + } + + + + void writer_t:: + write_one_reflevel (F5::simulation_t & simulation) + const + { + DECLARE_CCTK_PARAMETERS; + + if (verbose or veryverbose) + { + CCTK_VInfo (CCTK_THORNSTRING, + "OutputVarAs/write_one_reflevel reflevel=%d", + Carpet::reflevel); + } + + int const grouptype = CCTK_GroupTypeFromVarI (m_variable); + assert (grouptype >= 0); + assert (grouptype == CCTK_GF); + + if (Carpet::is_level_mode()) + { + for (Carpet::map_iterator map_iter (m_cctkGH, grouptype); + ! map_iter.done(); + map_iter.step()) + { + write_one_map (simulation); + } + } + else + { + write_one_map (simulation); + } + } + + + + void writer_t:: + write_one_map (F5::simulation_t & simulation) + const + { + DECLARE_CCTK_PARAMETERS; + + if (verbose or veryverbose) + { + CCTK_VInfo (CCTK_THORNSTRING, + "OutputVarAs/write_one_map map=%d", Carpet::map); + } + + F5::mesh_refinement_topology_t topology + (simulation, Carpet::map, Carpet::reflevel, Carpet::maxreflevels, + Carpet::spacereflevelfact, Carpet::maxspacereflevelfact); + + vect level_origin, level_delta; + for (int d=0; d= 0 and group < CCTK_NumGroups()); + F5::physical_quantity_t physical_quantity (coordinate_system, group); + + F5::tensor_component_t tensor_component (physical_quantity, m_variable); + + if (Carpet::is_singlemap_mode()) + { + int const grouptype = CCTK_GroupTypeI (group); + assert (grouptype >= 0); + + for (Carpet::component_iterator component_iter (m_cctkGH, grouptype); + ! component_iter.done(); + component_iter.step()) + { + write_one_component (tensor_component); + } + } + else + { + write_one_component (tensor_component); + } + } + + + + void writer_t:: + write_one_component (F5::tensor_component_t & tensor_component) + const + { + DECLARE_CCTK_PARAMETERS; + + if (verbose or veryverbose) + { + CCTK_VInfo (CCTK_THORNSTRING, + "OutputVarAs/write_one_component component=%d", + Carpet::component); + } + + gh * const hh = Carpet::vhh.at(Carpet::map); + if (hh->is_local (Carpet::reflevel, Carpet::component)) + { + dh * const dd = Carpet::vdd.at(Carpet::map); + bbox const & region + = (dd->boxes.at(Carpet::mglevel).at(Carpet::reflevel) + .at(Carpet::component).exterior); + + F5::data_region_t data_region (tensor_component, region); + + int const timelevel = 0; + void const * const varptr + = CCTK_VarDataPtrI (m_cctkGH, timelevel, m_variable); + assert (varptr != 0); + int const vartype = CCTK_VarTypeI (m_variable); + assert (vartype >= 0); + data_region.write (varptr, vartype); + } + } + +} // namespace CarpetIOF5 diff --git a/CarpetDev/CarpetIOF5/src/writer.hh b/CarpetDev/CarpetIOF5/src/writer.hh new file mode 100644 index 000000000..8b8473f1e --- /dev/null +++ b/CarpetDev/CarpetIOF5/src/writer.hh @@ -0,0 +1,60 @@ +#ifndef WRITER_HH +#define WRITER_HH + +#include "cctk.h" + +#include "file.hh" +#include "simulation.hh" +#include "tensor_component.hh" +#include "timestep.hh" +#include "topology.hh" + + + +namespace CarpetIOF5 { + + class writer_t { + + cGH const * const m_cctkGH; + int const m_variable; + + public: + + writer_t (cGH const * cctkGH, + int variable); + + void + write (F5::file_t & file) + const; + + private: + + void + write_meta (F5::file_t & file) + const; + + void + write_one_mglevel (F5::timestep_t & timestep) + const; + + void + write_global (F5::simulation_t & simulation) + const; + + void + write_one_reflevel (F5::simulation_t & simulation) + const; + + void + write_one_map (F5::simulation_t & simulation) + const; + + void + write_one_component (F5::tensor_component_t & tensor_component) + const; + + }; + +} // namespace CarpetIOF5 + +#endif // #ifndef WRITER_HH -- cgit v1.2.3