aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--par/misner-max-allowable-horizon-radius=0.75.par97
-rw-r--r--par/misner-max-allowable-horizon-radius=0.8.par97
-rw-r--r--param.ccl9
-rw-r--r--src/driver/Newton.cc2
-rw-r--r--src/driver/driver.hh4
-rw-r--r--src/driver/setup.cc15
6 files changed, 216 insertions, 8 deletions
diff --git a/par/misner-max-allowable-horizon-radius=0.75.par b/par/misner-max-allowable-horizon-radius=0.75.par
new file mode 100644
index 0000000..da8e1c3
--- /dev/null
+++ b/par/misner-max-allowable-horizon-radius=0.75.par
@@ -0,0 +1,97 @@
+# This parameter file sets up Misner initial data and finds the
+# apparent horizons in it with AHFinderDirect.
+#
+# Note that the grid is very high-resolution, but small (the outer
+# boundaries are very close in). This isn't a problem for the purposes
+# of this test. This run takes about 185 megabytes of memory, and
+# 36 cpu seconds on a 1.07GHz PIII laptop.
+
+########################################
+
+#
+# ***** grid *****
+#
+
+ActiveThorns = "CoordBase CartGrid3D PUGH"
+
+Driver::global_nx = 83
+Driver::global_ny = 83
+Driver::global_nz = 115
+PUGH::ghost_size = 2
+
+Grid::domain = "octant"
+Grid::type = "byspacing"
+Grid::dxyz = 0.025
+Grid::avoid_origin = "true"
+
+########################################
+
+#
+# physics
+#
+
+ActiveThorns = "ADMBase ADMCoupling CoordGauge StaticConformal SpaceMask"
+ActiveThorns = "IDAnalyticBH"
+
+ADMBase::initial_data = "misner_bh"
+IDAnalyticBH::mu = 1.2
+
+########################################
+
+#
+# numerical methods
+#
+
+Cactus::cctk_itlast = 0
+ADMBase::metric_type = "static conformal"
+StaticConformal::conformal_storage = "factor+derivs+2nd derivs"
+ADMBase::evolution_method = "none"
+ADMBase::initial_lapse = "Cadez"
+ADMBase::lapse_evolution_method = "static"
+ADMBase::initial_shift = "zero"
+ADMBase::shift_evolution_method = "static"
+
+########################################
+
+ActiveThorns = "IOUtil"
+IOUtil::parfile_write = "no"
+
+########################################
+
+#
+# AHFinderDirect
+#
+
+ActiveThorns = "always AEILocalInterp PUGHInterp PUGHReduce AHFinderDirect"
+
+AHFinderDirect::print_timing_stats = "true"
+##AHFinderDirect::verbose_level = "algorithm details"
+
+AHFinderDirect::h_base_file_name = "misner.h"
+AHFinderDirect::BH_diagnostics_base_file_name = "misner.BH_diagnostics"
+
+AHFinderDirect::N_horizons = 2
+
+AHFinderDirect::max_allowable_horizon_radius[1] = 1.0 # no problem
+AHFinderDirect::origin_x[1] = 0.0
+AHFinderDirect::origin_y[1] = 0.0
+AHFinderDirect::origin_z[1] = 1.0
+AHFinderDirect::initial_guess_method[1] = "coordinate sphere"
+AHFinderDirect::initial_guess__coord_sphere__x_center[1] = 0.0
+AHFinderDirect::initial_guess__coord_sphere__y_center[1] = 0.0
+AHFinderDirect::initial_guess__coord_sphere__z_center[1] = 1.1
+AHFinderDirect::initial_guess__coord_sphere__radius[1] = 0.60
+
+AHFinderDirect::max_allowable_horizon_radius[2] = 0.75 # should prevent this
+ # AH from being found
+AHFinderDirect::N_zones_per_right_angle[2] = 30
+AHFinderDirect::origin_x[2] = 0.0
+AHFinderDirect::origin_y[2] = 0.0
+AHFinderDirect::origin_z[2] = 0.0
+AHFinderDirect::initial_guess_method[2] = "coordinate ellipsoid"
+AHFinderDirect::initial_guess__coord_ellipsoid__x_center[2] = 0.0
+AHFinderDirect::initial_guess__coord_ellipsoid__y_center[2] = 0.0
+AHFinderDirect::initial_guess__coord_ellipsoid__z_center[2] = 0.0
+AHFinderDirect::initial_guess__coord_ellipsoid__x_radius[2] = 0.6
+AHFinderDirect::initial_guess__coord_ellipsoid__y_radius[2] = 0.6
+AHFinderDirect::initial_guess__coord_ellipsoid__z_radius[2] = 1.8
diff --git a/par/misner-max-allowable-horizon-radius=0.8.par b/par/misner-max-allowable-horizon-radius=0.8.par
new file mode 100644
index 0000000..7075965
--- /dev/null
+++ b/par/misner-max-allowable-horizon-radius=0.8.par
@@ -0,0 +1,97 @@
+# This parameter file sets up Misner initial data and finds the
+# apparent horizons in it with AHFinderDirect.
+#
+# Note that the grid is very high-resolution, but small (the outer
+# boundaries are very close in). This isn't a problem for the purposes
+# of this test. This run takes about 185 megabytes of memory, and
+# 36 cpu seconds on a 1.07GHz PIII laptop.
+
+########################################
+
+#
+# ***** grid *****
+#
+
+ActiveThorns = "CoordBase CartGrid3D PUGH"
+
+Driver::global_nx = 83
+Driver::global_ny = 83
+Driver::global_nz = 115
+PUGH::ghost_size = 2
+
+Grid::domain = "octant"
+Grid::type = "byspacing"
+Grid::dxyz = 0.025
+Grid::avoid_origin = "true"
+
+########################################
+
+#
+# physics
+#
+
+ActiveThorns = "ADMBase ADMCoupling CoordGauge StaticConformal SpaceMask"
+ActiveThorns = "IDAnalyticBH"
+
+ADMBase::initial_data = "misner_bh"
+IDAnalyticBH::mu = 1.2
+
+########################################
+
+#
+# numerical methods
+#
+
+Cactus::cctk_itlast = 0
+ADMBase::metric_type = "static conformal"
+StaticConformal::conformal_storage = "factor+derivs+2nd derivs"
+ADMBase::evolution_method = "none"
+ADMBase::initial_lapse = "Cadez"
+ADMBase::lapse_evolution_method = "static"
+ADMBase::initial_shift = "zero"
+ADMBase::shift_evolution_method = "static"
+
+########################################
+
+ActiveThorns = "IOUtil"
+IOUtil::parfile_write = "no"
+
+########################################
+
+#
+# AHFinderDirect
+#
+
+ActiveThorns = "always AEILocalInterp PUGHInterp PUGHReduce AHFinderDirect"
+
+AHFinderDirect::print_timing_stats = "true"
+##AHFinderDirect::verbose_level = "algorithm details"
+
+AHFinderDirect::h_base_file_name = "misner.h"
+AHFinderDirect::BH_diagnostics_base_file_name = "misner.BH_diagnostics"
+
+AHFinderDirect::N_horizons = 2
+
+AHFinderDirect::max_allowable_horizon_radius[1] = 1.0 # no problem
+AHFinderDirect::origin_x[1] = 0.0
+AHFinderDirect::origin_y[1] = 0.0
+AHFinderDirect::origin_z[1] = 1.0
+AHFinderDirect::initial_guess_method[1] = "coordinate sphere"
+AHFinderDirect::initial_guess__coord_sphere__x_center[1] = 0.0
+AHFinderDirect::initial_guess__coord_sphere__y_center[1] = 0.0
+AHFinderDirect::initial_guess__coord_sphere__z_center[1] = 1.1
+AHFinderDirect::initial_guess__coord_sphere__radius[1] = 0.60
+
+AHFinderDirect::max_allowable_horizon_radius[2] = 0.8 # should still allow
+ # finding this AH
+AHFinderDirect::N_zones_per_right_angle[2] = 30
+AHFinderDirect::origin_x[2] = 0.0
+AHFinderDirect::origin_y[2] = 0.0
+AHFinderDirect::origin_z[2] = 0.0
+AHFinderDirect::initial_guess_method[2] = "coordinate ellipsoid"
+AHFinderDirect::initial_guess__coord_ellipsoid__x_center[2] = 0.0
+AHFinderDirect::initial_guess__coord_ellipsoid__y_center[2] = 0.0
+AHFinderDirect::initial_guess__coord_ellipsoid__z_center[2] = 0.0
+AHFinderDirect::initial_guess__coord_ellipsoid__x_radius[2] = 0.6
+AHFinderDirect::initial_guess__coord_ellipsoid__y_radius[2] = 0.6
+AHFinderDirect::initial_guess__coord_ellipsoid__z_radius[2] = 1.8
diff --git a/param.ccl b/param.ccl
index 528c8b6..4c4e2e8 100644
--- a/param.ccl
+++ b/param.ccl
@@ -724,11 +724,12 @@ real max_allowable_Delta_h_over_h \
# this divergence faster) if there is no horizon present or if the initial
# guess is bad, we also deem any horizon with a mean radius (measured around
# its local coordinate origin) larger than this to be "not found". The
-# default is effectively "no limit"; you should (re)set this to the
-# coordinate radius of a sphere with areal radius 4m or so, where m is
-# the ADM mass of the slice.
+# default is effectively "no limit"; AHFinderDirect will be more efficient
+# if you (re)set this (for each horizon) to the coordinate radius of a
+# sphere a bit larger than you expect the horizon to be (eg a sphere with
+# areal radius 4m or so, where m is the ADM mass of the slice).
#
-real max_allowable_horizon_radius \
+real max_allowable_horizon_radius[11] \
"max mean-coordinate-radius allowed for any trial surface \
before we give up and say we can't find this horizon"
{
diff --git a/src/driver/Newton.cc b/src/driver/Newton.cc
index 0e82f10..ae56acb 100644
--- a/src/driver/Newton.cc
+++ b/src/driver/Newton.cc
@@ -254,7 +254,7 @@ if (hs.has_genuine_horizons())
: 0.0;
const bool horizon_is_too_large
= (mean_horizon_radius > solver_info
- .max_allowable_horizon_radius);
+ .max_allowable_horizon_radius[hn]);
const enum expansion_status effective_expansion_status
= horizon_is_too_large ? expansion_failure__surface_too_large
diff --git a/src/driver/driver.hh b/src/driver/driver.hh
index 91063d2..04665b9 100644
--- a/src/driver/driver.hh
+++ b/src/driver/driver.hh
@@ -117,8 +117,10 @@ struct solver_info
int max_Newton_iterations__initial,
max_Newton_iterations__subsequent;
fp max_allowable_Delta_h_over_h;
- fp max_allowable_horizon_radius;
fp Theta_norm_for_convergence;
+ fp *max_allowable_horizon_radius; // --> new[]-allocated array
+ // of size N_horizons+1 ,
+ // subscripted by hn
};
//
diff --git a/src/driver/setup.cc b/src/driver/setup.cc
index 027e68c..42a5bfa 100644
--- a/src/driver/setup.cc
+++ b/src/driver/setup.cc
@@ -223,7 +223,7 @@ Jac_info.perturbation_amplitude = Jacobian_perturbation_amplitude;
//
-// elliptic-solver info
+// solver info
//
struct solver_info& solver_info = state.solver_info;
solver_info.debugging_output_at_each_Newton_iteration
@@ -237,8 +237,19 @@ solver_info.max_Newton_iterations__initial
solver_info.max_Newton_iterations__subsequent
= max_Newton_iterations__subsequent;
solver_info.max_allowable_Delta_h_over_h = max_allowable_Delta_h_over_h;
-solver_info.max_allowable_horizon_radius = max_allowable_horizon_radius;
solver_info.Theta_norm_for_convergence = Theta_norm_for_convergence;
+solver_info.max_allowable_horizon_radius
+ = new double[state.N_horizons+1]; // horizon numbers run from
+ // 1 to N_horizons inclusive
+ // so the array size is
+ // N_horizons+1
+ {
+ for (int hn = 0 ; hn <= N_horizons ; ++hn)
+ {
+ solver_info.max_allowable_horizon_radius[hn]
+ = max_allowable_horizon_radius[hn];
+ }
+ }
//