aboutsummaryrefslogtreecommitdiff
path: root/CarpetDev/CarpetIOF5
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@cct.lsu.edu>2005-12-03 16:41:00 +0000
committerErik Schnetter <schnetter@cct.lsu.edu>2005-12-03 16:41:00 +0000
commit614a9d54afc05718cdc1c9f4318e482d1c005fca (patch)
tree65901d87d457bc71062941e3c9f77714fd19d2b9 /CarpetDev/CarpetIOF5
parentb334e22363d03fdf2127ad9d793976be3d61d543 (diff)
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
Diffstat (limited to 'CarpetDev/CarpetIOF5')
-rw-r--r--CarpetDev/CarpetIOF5/src/IOF5.cc5
-rw-r--r--CarpetDev/CarpetIOF5/src/make.code.defn2
-rw-r--r--CarpetDev/CarpetIOF5/src/topology.cc3
-rw-r--r--CarpetDev/CarpetIOF5/src/topology.hh1
-rw-r--r--CarpetDev/CarpetIOF5/src/write.cc284
-rw-r--r--CarpetDev/CarpetIOF5/src/write.hh56
-rw-r--r--CarpetDev/CarpetIOF5/src/writer.cc299
-rw-r--r--CarpetDev/CarpetIOF5/src/writer.hh60
8 files changed, 366 insertions, 344 deletions
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<int, dim> 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<int, dim> 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 <sstream>
-
-#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<CCTK_REAL, dim> level_origin, level_delta;
- for (int d=0; d<dim; ++d)
- {
- level_origin[d] = 0.0;
- level_delta[d] = 1.0;
- }
- F5::Cartesian_coordinate_system_t coordinate_system
- (topology, level_origin, level_delta);
-
- F5::physical_quantity_t physical_quantity (coordinate_system, group);
-
- F5::tensor_component_t tensor_component (physical_quantity, variable);
-
- int const myproc = CCTK_MyProc (cctkGH);
- dh * const dd = Carpet::arrdata.at(group).at(0).dd;
- bbox<int, dim> 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<CCTK_REAL, dim> level_origin, level_delta;
- for (int d=0; d<dim; ++d)
- {
- DECLARE_CCTK_ARGUMENTS;
- level_origin[d] = CCTK_ORIGIN_SPACE(d);
- level_delta[d] = CCTK_DELTA_SPACE(d);
- }
- F5::Cartesian_coordinate_system_t coordinate_system
- (topology, level_origin, level_delta);
-
- F5::physical_quantity_t physical_quantity (coordinate_system, group);
-
- F5::tensor_component_t tensor_component (physical_quantity, variable);
-
- if (Carpet::is_singlemap_mode())
- {
- int const grouptype = CCTK_GroupTypeI (group);
- assert (grouptype >= 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<int, dim> 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 <sstream>
+
+#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<CCTK_REAL, dim> level_origin, level_delta;
+ for (int d=0; d<dim; ++d)
+ {
+ level_origin[d] = 0.0;
+ level_delta[d] = 1.0;
+ }
+ F5::Cartesian_coordinate_system_t coordinate_system
+ (topology, level_origin, level_delta);
+
+ int const group = CCTK_GroupIndexFromVarI (m_variable);
+ assert (group >= 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<int, dim> 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<CCTK_REAL, dim> level_origin, level_delta;
+ for (int d=0; d<dim; ++d)
+ {
+ cGH const * const cctkGH = m_cctkGH;
+ DECLARE_CCTK_ARGUMENTS;
+ level_origin[d] = CCTK_ORIGIN_SPACE(d);
+ level_delta[d] = CCTK_DELTA_SPACE(d);
+ }
+ F5::Cartesian_coordinate_system_t coordinate_system
+ (topology, level_origin, level_delta);
+
+ int const group = CCTK_GroupIndexFromVarI (m_variable);
+ assert (group >= 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<int, dim> 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