aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjthorn <jthorn@f88db872-0e4f-0410-b76b-b9085cfa78c5>2005-02-28 14:25:44 +0000
committerjthorn <jthorn@f88db872-0e4f-0410-b76b-b9085cfa78c5>2005-02-28 14:25:44 +0000
commit80ba194efcad80bd36bcb621d4678701f3987fb2 (patch)
tree3181c6e0f2bb22c9cd9c63688e1c8801169966de /src
parent528c16bc31082e8b2b6b00ce7bf96d8177d05260 (diff)
make some of the mask parameters steerable (finally!!!)
-- thanks to Frank Loeffler for the basic patches for this git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinAnalysis/AHFinderDirect/trunk@1397 f88db872-0e4f-0410-b76b-b9085cfa78c5
Diffstat (limited to 'src')
-rw-r--r--src/driver/driver.hh4
-rw-r--r--src/driver/setup.cc121
2 files changed, 85 insertions, 40 deletions
diff --git a/src/driver/driver.hh b/src/driver/driver.hh
index 1b19a7a..326cbc7 100644
--- a/src/driver/driver.hh
+++ b/src/driver/driver.hh
@@ -397,6 +397,10 @@ struct state
extern "C"
void AHFinderDirect_setup(CCTK_ARGUMENTS);
+// ... called from Cactus Scheduler
+extern "C"
+ void AHFinderDirect_setupupdate(CCTK_ARGUMENTS);
+
// find_horizons.cc
// ... called from Cactus Scheduler
extern "C"
diff --git a/src/driver/setup.cc b/src/driver/setup.cc
index e2507a0..51c5562 100644
--- a/src/driver/setup.cc
+++ b/src/driver/setup.cc
@@ -5,6 +5,9 @@
// <<<access to persistent data>>>
//
// AHFinderDirect_setup - top-level driver to setup persistent data structures
+// AHFinderDirect_update - top-level driver to update from steerable parameters
+//
+/// set_mask_pars - set internal data structures from mask parameters
///
/// decode_method - decode the method parameter
/// decode_verbose_level - decode the verbose_level parameter
@@ -64,6 +67,8 @@ using jtutil::error_exit;
//
namespace {
+void set_mask_pars(CCTK_ARGUMENTS);
+
enum method
decode_method(const char method_string[]);
enum verbose_level
@@ -97,9 +102,6 @@ extern struct state state;
// This function is called by the Cactus scheduler to set up all our
// persistent data structures. (These are stored in struct state .)
//
-// This function is the only one in this thorn which looks directly at
-// the Cactus parameters.
-//
extern "C"
void AHFinderDirect_setup(CCTK_ARGUMENTS)
{
@@ -322,45 +324,12 @@ mask_info.set_mask_for_this_horizon = new bool[N_horizons+1];
}
}
if (mask_info.set_mask_for_any_horizon)
- then {
- mask_info.radius_multiplier = mask_radius_multiplier;
- mask_info.radius_offset = mask_radius_offset;
- mask_info.buffer_thickness = mask_buffer_thickness;
- mask_info.mask_is_noshrink = mask_is_noshrink;
- mask_info.min_horizon_radius_points_for_mask
- = min_horizon_radius_points_for_mask;
- mask_info.set_old_style_mask = (set_old_style_mask != 0);
- mask_info.set_new_style_mask = (set_new_style_mask != 0);
- if (mask_info.set_old_style_mask)
- then {
- struct mask_info::old_style_mask_info& osmi
- = mask_info.old_style_mask_info;
- osmi.gridfn_name = old_style_mask_gridfn_name;
- osmi.gridfn_varindex = Cactus_gridfn_varindex(osmi.gridfn_name);
- osmi.gridfn_dataptr = NULL; // dummy value; fixup later
- osmi.inside_value = old_style_mask_inside_value;
- osmi.buffer_value = old_style_mask_buffer_value;
- osmi.outside_value = old_style_mask_outside_value;
- }
- if (mask_info.set_new_style_mask)
- then {
- struct mask_info::new_style_mask_info& nsmi
- = mask_info.new_style_mask_info;
- nsmi.gridfn_name = new_style_mask_gridfn_name;
- nsmi.gridfn_varindex = Cactus_gridfn_varindex(nsmi.gridfn_name);
- nsmi.gridfn_dataptr = NULL; // dummy value; fixup later
- nsmi.bitfield_name = new_style_mask_bitfield_name;
- nsmi.bitfield_bitmask = 0; // dummy value; fixup later
- nsmi.inside_value = new_style_mask_inside_value;
- nsmi.buffer_value = new_style_mask_buffer_value;
- nsmi.outside_value = new_style_mask_outside_value;
- nsmi.inside_bitvalue = 0; // dummy value; fixup later
- nsmi.buffer_bitvalue = 0; // dummy value; fixup later
- nsmi.outside_bitvalue = 0; // dummy value; fixup later
- }
- }
+ then set_mask_pars(CCTK_PASS_CTOC);
+//
+// announce parameters
+//
state.announce_centroid_flag = (which_horizon_to_announce_centroid != 0);
if (state.announce_centroid_flag)
then {
@@ -601,6 +570,78 @@ if (strlen(surface_interpolator_name) > 0)
}
//******************************************************************************
+
+//
+// This function is called by the Cactus scheduler to update some of our
+// persistent data structures (stored in struct state ) from parameters
+// which may have been steered. It is also called by AHFinderDirect_setup()
+// (above) as part of the initial setup of these data structures.
+//
+extern "C"
+ void AHFinderDirect_update(CCTK_ARGUMENTS)
+{
+set_mask_pars(CCTK_PASS_CTOC);
+}
+
+//******************************************************************************
+//******************************************************************************
+//******************************************************************************
+
+//
+// This function sets our internal data structures from the the mask
+// parameters.
+//
+namespace {
+void set_mask_pars(CCTK_ARGUMENTS)
+{
+DECLARE_CCTK_ARGUMENTS
+DECLARE_CCTK_PARAMETERS
+
+struct mask_info& mask_info = state.mask_info;
+mask_info.set_old_style_mask = (set_old_style_mask != 0);
+mask_info.set_new_style_mask = (set_new_style_mask != 0);
+if (mask_info.set_mask_for_any_horizon)
+ then {
+ mask_info.radius_multiplier = mask_radius_multiplier;
+ mask_info.radius_offset = mask_radius_offset;
+ mask_info.buffer_thickness = mask_buffer_thickness;
+ mask_info.mask_is_noshrink = mask_is_noshrink;
+ mask_info.min_horizon_radius_points_for_mask
+ = min_horizon_radius_points_for_mask;
+ mask_info.set_old_style_mask = (set_old_style_mask != 0);
+ mask_info.set_new_style_mask = (set_new_style_mask != 0);
+ if (mask_info.set_old_style_mask)
+ then {
+ struct mask_info::old_style_mask_info& osmi
+ = mask_info.old_style_mask_info;
+ osmi.gridfn_name = old_style_mask_gridfn_name;
+ osmi.gridfn_varindex = Cactus_gridfn_varindex(osmi.gridfn_name);
+ osmi.gridfn_dataptr = NULL; // dummy value; fixup later
+ osmi.inside_value = old_style_mask_inside_value;
+ osmi.buffer_value = old_style_mask_buffer_value;
+ osmi.outside_value = old_style_mask_outside_value;
+ }
+ if (mask_info.set_new_style_mask)
+ then {
+ struct mask_info::new_style_mask_info& nsmi
+ = mask_info.new_style_mask_info;
+ nsmi.gridfn_name = new_style_mask_gridfn_name;
+ nsmi.gridfn_varindex = Cactus_gridfn_varindex(nsmi.gridfn_name);
+ nsmi.gridfn_dataptr = NULL; // dummy value; fixup later
+ nsmi.bitfield_name = new_style_mask_bitfield_name;
+ nsmi.bitfield_bitmask = 0; // dummy value; fixup later
+ nsmi.inside_value = new_style_mask_inside_value;
+ nsmi.buffer_value = new_style_mask_buffer_value;
+ nsmi.outside_value = new_style_mask_outside_value;
+ nsmi.inside_bitvalue = 0; // dummy value; fixup later
+ nsmi.buffer_bitvalue = 0; // dummy value; fixup later
+ nsmi.outside_bitvalue = 0; // dummy value; fixup later
+ }
+ }
+}
+ }
+
+//******************************************************************************
//******************************************************************************
//******************************************************************************