diff options
author | jthorn <jthorn@f88db872-0e4f-0410-b76b-b9085cfa78c5> | 2003-11-19 16:53:29 +0000 |
---|---|---|
committer | jthorn <jthorn@f88db872-0e4f-0410-b76b-b9085cfa78c5> | 2003-11-19 16:53:29 +0000 |
commit | c5938832b234565efde9808b7016d78b3035ef91 (patch) | |
tree | 335f9ef502a82ff8aac68d16439a8fd397ea1ae6 | |
parent | e7cef318b23996769b90b54cd9aba8fe47ef4e6e (diff) |
make max_allowable_horizon_radius into an array parameter
so it can/must be specified for each horizon
--> gives a bit more flexibility for screening out "bad" cases
(alas this isn't in the thornguide yet :()
git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinAnalysis/AHFinderDirect/trunk@1205 f88db872-0e4f-0410-b76b-b9085cfa78c5
-rw-r--r-- | par/misner-max-allowable-horizon-radius=0.75.par | 97 | ||||
-rw-r--r-- | par/misner-max-allowable-horizon-radius=0.8.par | 97 | ||||
-rw-r--r-- | param.ccl | 9 | ||||
-rw-r--r-- | src/driver/Newton.cc | 2 | ||||
-rw-r--r-- | src/driver/driver.hh | 4 | ||||
-rw-r--r-- | src/driver/setup.cc | 15 |
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 @@ -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]; + } + } // |