diff options
-rw-r--r-- | param.ccl | 121 | ||||
-rw-r--r-- | src/driver/driver.hh | 19 | ||||
-rw-r--r-- | src/driver/find_horizons.cc | 13 | ||||
-rw-r--r-- | src/driver/initial_guess.cc | 66 | ||||
-rw-r--r-- | src/driver/io.cc | 12 | ||||
-rw-r--r-- | src/driver/setup.cc | 66 |
6 files changed, 172 insertions, 125 deletions
@@ -72,6 +72,7 @@ keyword verbose_level \ "controls which (how many) messages to print describing AH finding" { # 1 line each time step giving number of horizons found and their masses +# ... this doesn't work yet :( "physics highlights" :: "just a few physics messages" # 1 line for each horizon giving position/mass/area, + a summary line or two @@ -84,7 +85,7 @@ keyword verbose_level \ # lots of details tracing what the code is doing "algorithm details" :: \ "physics details + lots of messages about the AH-finding algorithm" -} "physics details" +} "algorithm highlights" # n.b. printing timing stats is independent of verbose_level boolean print_timing_stats \ @@ -100,8 +101,10 @@ boolean print_timing_stats \ keyword Jacobian_method "how do we compute the Jacobian matrix?" { -"numerical perturbation" :: \ - "*very* slow, but useful for debugging" +# for debugging only" +"numerical perturbation" :: "n.b. this is *very* slow" + +# use this for normal apparent horizon finding "symbolic differentiation with finite diff d/dr" :: \ "fast, tricky programming, uses only gij, dx gij, Kij" @@ -119,7 +122,8 @@ keyword Jacobian_method "how do we compute the Jacobian matrix?" # keyword Jacobian_storage_method "how do we store the Jacobian matrix?" { -"dense matrix" :: "dense matrix (inefficient, but good for debugging)" +# at present this is the only option +"dense matrix" :: "dense matrix (inefficient at high angular resolution)" } "dense matrix" # @@ -147,11 +151,11 @@ real Jacobian_perturbation_amplitude \ # # -# The first time we (try to) find a given horizon, our initial -# guess is likely to be rather inaccurate, so we may need a -# larger number of iterations. But if we've found this horizon -# before, then we have its previous position as an initial guess, -# so we shouldn't need as many iterations. +# The first time we (try to) find a given horizon, our initial guess +# is likely to be rather inaccurate, so we may need a larger number of +# iterations. But if we've found this horizon before, then we have its +# previous position as an initial guess, so (assuming that we've been +# scheduled at each time step) we shouldn't need as many iterations. # int max_Newton_iterations__initial \ "maximum number of Newton iterations before giving up \ @@ -184,12 +188,12 @@ real max_Delta_h_over_h \ real H_norm_for_convergence "declare convergence if ||H||_inf <= this" { (0.0:* :: "any positive real number" -} 1.0e-10 +} 1.0e-8 real Delta_h_norm_for_convergence \ "declare convergence after any Newton step with ||Delta_h||_inf <= this" { (0.0:* :: "any positive real number" -} 1.0e-10 +} 1.0e-8 # # This only needs to be set to true for very careful convergence studies @@ -214,7 +218,7 @@ boolean output_initial_guess \ { } "false" -# for debugging failure to converge, we can optionally output +# for debugging convergence failures, we can optionally output # h, H, and delta_h at each Newton iteration # (the file names are the usual ones with ".it%d" appended) boolean debugging_output_at_each_Newton_iteration \ @@ -222,30 +226,44 @@ boolean debugging_output_at_each_Newton_iteration \ { } "false" -boolean output_h "should we output each horizon's shape h?" +# the next two parameters control how often we write full-sized +# output files (format controlled by file_format ); we still *find* +# apparent horizons at each time step, and compute/print small-sized +# diagnostics, but this parameter may be used to reduce the number +# and size of output files +int how_often_to_output_h \ + "how often (in Cactus time steps) should we output h (0 to disable)?" { -} "true" +0 :: "don't output h at all" +1:* :: "any integer >= 1" +} 1 -boolean output_H_of_h "should we output each horizon's H(h) function?" +# setting this > 0 is probably only of interest if the Newton iteration +# fails to converge, or if you're debugging AHFinderDirect internals +int how_often_to_output_H_of_h \ + "how often (in Cactus time steps) should we output the H(h) functions?" { -} "true" +0 :: "don't output H(h) at all" +1:* :: "any integer >= 1" +} 0 keyword file_format \ "what file format should we use for h and H(h) data files?" { -"ASCII" :: "simple ASCII format, directly readable by gnuplot" -"HDF5" :: "HDF5 surface format (alas not implemented yet)" -} "ASCII" +"ASCII (gnuplot)" :: "simple ASCII format, directly readable by gnuplot" +"HDF5" :: "HDF5 surface format (alas not implemented yet)" +} "ASCII (gnuplot)" boolean output_ghost_zones_for_h \ "should we include the ghost zones in h data files?" { } "false" -string ASCII_file_name_extension "extension for ASCII data files" +string ASCII_gnuplot_file_name_extension \ + "extension for ASCII (gnuplot) data files" { .* :: "any string" -} "ascii" +} "gnuplot" string HDF5_file_name_extension "extension for HDF5 data files" { .* :: "any string" @@ -330,8 +348,12 @@ keyword patch_system_type "what type of patch system should we use?" "match Cactus grid symmetry" :: \ "choose automagically based on grid symmetries and the patch system's origin" +# these are also fully supported "full sphere" :: "full sphere, no symmetries" "+z hemisphere" :: "mirror symmetry across z=0 plane" + +# these don't fully work yet for apparent horizon finding +# (the Jacobian computation doesn't grok them properly) "+xy quadrant" :: "90 degree periodic rotation symmetry about z axis" "+xz quadrant" :: "mirror symmetry across z=0 plane *and* \ 180 degree periodic rotation symmetry about z axis" @@ -339,9 +361,17 @@ keyword patch_system_type "what type of patch system should we use?" 90 degree periodic rotation symmetry about z axis" } "match Cactus grid symmetry" -# this must be at least -# * 2 if FINITE_DIFF_ORDER is set to 4 in "src/include/config.hh" -# * 1 if FINITE_DIFF_ORDER is set to 2 in "src/include/config.hh" +# +# This parameter sets the width of the interpatch ghost zones in the +# patch system. Note that this thorn uses the terminology "ghost zone" +# for any of what Cactus in general now calls a "boundary zone" or a +# "symmetry zone" or a "patch zone". +# +# This parameter must be at least +# ... 2 if FINITE_DIFF_ORDER is set to 4 in "src/include/config.hh" +# ... 1 if FINITE_DIFF_ORDER is set to 2 in "src/include/config.hh" +# The code checks for this being too small, and reports a fatal error if so. +# int N_ghost_points "number of ghost zones on each side of a patch" { 0:* :: "any integer >= 0" @@ -369,6 +399,11 @@ int N_overlap_points \ # grid zones (i.e. the patch size divided by this parameter) is even or # >= 7 (or both) for both coordinates of all patches. # +# If you are thinking of setting this to a small value (high resolution), +# note also that with the current dense-matrix storage of the Jacobian, +# the memory/running time of the LAPACK linear system solve scales as +# the inverse 4th/6th power of this parameter! +# real delta_drho_dsigma "angular grid spacing of patches, in degrees" { (0.0:* :: "any real number > 0.0" @@ -436,6 +471,9 @@ keyword geometry_method "how do we compute the slice's geometry?" # fail to converge all the way down to tight error tolerances. $C^2$ # would be even better, but in practice a ($C^1$) Hermite interpolant # works well. +# In practice the default values for these parameters should work fine +# (so long as you compile with CactusBase/LocalInterp and activate that +# thorn). # string geometry_interpolator_name \ @@ -559,14 +597,14 @@ string interpatch_interpolator_pars \ keyword initial_guess_method \ "method used to set up initial guess for apparent horizon shape" { -"read from file" :: "read from input file" -"Kerr/Kerr" :: \ +"read from file" :: "read from input file" +"Kerr/Kerr" :: \ "set to the (analytical) horizon of Kerr spacetime in Kerr coordinates" -"Kerr/Kerr-Schild" :: \ +"Kerr/Kerr-Schild" :: \ "set to the (analytical) horizon of Kerr spacetime in Kerr-Schild coordinates" -"sphere" :: "set to a coordinate sphere" -"ellipsoid" :: "set to a coordinate ellipsoid" -} "read from file" +"coordinate sphere" :: "set to a coordinate sphere" +"coordinate ellipsoid" :: "set to a coordinate ellipsoid" +} "coordinate sphere" # parameters for initial_guess_method = "Kerr/Kerr" real initial_guess__Kerr_Kerr__x_posn[5] "x coordinate of Kerr BH" @@ -619,45 +657,48 @@ real initial_guess__Kerr_KerrSchild__spin[5] "dimensionless spin a=J/m^2 of Kerr } 0.6 # parameters for initial_guess_method = "sphere" -real initial_guess__sphere__x_center[5] "x coordinate of sphere center" +real initial_guess__coord_sphere__x_center[5] "x coordinate of sphere center" { *:* :: "any real number" } 0.0 -real initial_guess__sphere__y_center[5] "y coordinate of sphere center" +real initial_guess__coord_sphere__y_center[5] "y coordinate of sphere center" { *:* :: "any real number" } 0.0 -real initial_guess__sphere__z_center[5] "z coordinate of sphere center" +real initial_guess__coord_sphere__z_center[5] "z coordinate of sphere center" { *:* :: "any real number" } 0.0 -real initial_guess__sphere__radius[5] "radius of sphere" +real initial_guess__coord_sphere__radius[5] "radius of sphere" { (0.0:* :: "any real number > 0.0" } 2.0 # parameters for initial_guess_method = "ellipsoid" -real initial_guess__ellipsoid__x_center[5] "x coordinate of ellipsoid center" +real initial_guess__coord_ellipsoid__x_center[5] \ + "x coordinate of ellipsoid center" { *:* :: "any real number" } 0.0 -real initial_guess__ellipsoid__y_center[5] "y coordinate of ellipsoid center" +real initial_guess__coord_ellipsoid__y_center[5] \ + "y coordinate of ellipsoid center" { *:* :: "any real number" } 0.0 -real initial_guess__ellipsoid__z_center[5] "z coordinate of ellipsoid center" +real initial_guess__coord_ellipsoid__z_center[5] \ + "z coordinate of ellipsoid center" { *:* :: "any real number" } 0.0 -real initial_guess__ellipsoid__x_radius[5] "x radius of ellipsoid" +real initial_guess__coord_ellipsoid__x_radius[5] "x radius of ellipsoid" { (0.0:* :: "any real number > 0.0" } 2.0 -real initial_guess__ellipsoid__y_radius[5] "y radius of ellipsoid" +real initial_guess__coord_ellipsoid__y_radius[5] "y radius of ellipsoid" { (0.0:* :: "any real number > 0.0" } 2.0 -real initial_guess__ellipsoid__z_radius[5] "z radius of ellipsoid" +real initial_guess__coord_ellipsoid__z_radius[5] "z radius of ellipsoid" { (0.0:* :: "any real number > 0.0" } 2.0 diff --git a/src/driver/driver.hh b/src/driver/driver.hh index d5f9ea7..44a962d 100644 --- a/src/driver/driver.hh +++ b/src/driver/driver.hh @@ -37,8 +37,8 @@ enum initial_guess_method initial_guess__read_from_file, initial_guess__Kerr_Kerr, initial_guess__Kerr_KerrSchild, - initial_guess__sphere, - initial_guess__ellipsoid // no comma + initial_guess__coord_sphere, + initial_guess__coord_ellipsoid // no comma }; // @@ -47,7 +47,7 @@ enum initial_guess_method // enum file_format { - file_format__ASCII, + file_format__ASCII_gnuplot, file_format__HDF5 // no comma }; @@ -73,17 +73,17 @@ struct initial_guess_info fp mass, spin; } Kerr_KerrSchild_info; - // parameters for method == initial_guess__sphere + // parameters for method == initial_guess__coord_sphere struct { fp x_center, y_center, z_center; fp radius; - } sphere_info; + } coord_sphere_info; - // parameters for method == initial_guess__ellipsoid + // parameters for method == initial_guess__coord_ellipsoid struct { fp x_center, y_center, z_center; fp x_radius, y_radius, z_radius; - } ellipsoid_info; + } coord_ellipsoid_info; }; // @@ -92,7 +92,6 @@ struct initial_guess_info struct solver_info { bool output_initial_guess; - bool output_h, output_H; bool debugging_output_at_each_Newton_iteration; int max_Newton_iterations__initial, max_Newton_iterations__subsequent; @@ -108,8 +107,10 @@ struct solver_info struct IO_info { enum file_format file_format; + int how_often_to_output_h, + how_often_to_output_H; bool output_ghost_zones_for_h; - const char* ASCII_file_name_extension; + const char* ASCII_gnuplot_file_name_extension; const char* HDF5_file_name_extension; const char* h_base_file_name; const char* H_base_file_name; diff --git a/src/driver/find_horizons.cc b/src/driver/find_horizons.cc index 7d38b34..ba50897 100644 --- a/src/driver/find_horizons.cc +++ b/src/driver/find_horizons.cc @@ -213,6 +213,13 @@ bool find_horizon(enum method method, patch_system& ps, Jacobian* Jac_ptr, int hn, int N_horizons) { +const bool output_h + = (IO_info.how_often_to_output_h > 0) + && ((IO_info.time_iteration % IO_info.how_often_to_output_h) == 0); +const bool output_H + = (IO_info.how_often_to_output_H > 0) + && ((IO_info.time_iteration % IO_info.how_often_to_output_H) == 0); + switch (method) { // just evaluate the horizon function @@ -233,7 +240,7 @@ case method__horizon_function: then CCTK_VInfo(CCTK_THORNSTRING, " H(h) rms-norm %.2e, infinity-norm %.2e", H_norms.rms_norm(), H_norms.infinity_norm()); - if (solver_info.output_H) + if (output_H) then output_gridfn(ps, gfns::gfn__H, IO_info, IO_info.H_base_file_name, hn, true); @@ -312,11 +319,11 @@ case method__Newton_solve: if (! status) then return false; // *** ERROR RETURN *** - if (solver_info.output_h) + if (output_h) then output_gridfn(ps, gfns::gfn__h, IO_info, IO_info.h_base_file_name, hn, verbose_info.print_algorithm_details); - if (solver_info.output_H) + if (output_H) then output_gridfn(ps, gfns::gfn__H, IO_info, IO_info.H_base_file_name, hn, verbose_info.print_algorithm_details); diff --git a/src/driver/initial_guess.cc b/src/driver/initial_guess.cc index 0c11742..9c92ca9 100644 --- a/src/driver/initial_guess.cc +++ b/src/driver/initial_guess.cc @@ -6,7 +6,7 @@ // setup_initial_guess - set up initial guess in h // decode_initial_guess_method - decode the initial_guess_method parameter /// setup_Kerr_horizon - set up Kerr horizon in h (Kerr or Kerr-Schild coords) -/// setup_ellipsoid - setup up a coordinate ellipsoid in h +/// setup_coord_ellipsoid - setup up a coordinate ellipsoid in h /// #include <stdio.h> @@ -56,10 +56,10 @@ void setup_Kerr_horizon(patch_system& ps, fp m, fp a, bool Kerr_Schild_flag, const struct verbose_info& verbose_info); -void setup_ellipsoid(patch_system& ps, - fp x_center, fp y_center, fp z_center, - fp x_radius, fp y_radius, fp z_radius, - bool print_msg_flag); +void setup_coord_ellipsoid(patch_system& ps, + fp x_center, fp y_center, fp z_center, + fp x_radius, fp y_radius, fp z_radius, + bool print_msg_flag); } //****************************************************************************** @@ -107,26 +107,26 @@ case initial_guess__Kerr_KerrSchild: verbose_info); break; -case initial_guess__sphere: - setup_ellipsoid(ps, - igi.sphere_info.x_center, - igi.sphere_info.y_center, - igi.sphere_info.z_center, - igi.sphere_info.radius, - igi.sphere_info.radius, - igi.sphere_info.radius, - verbose_info.print_algorithm_highlights); +case initial_guess__coord_sphere: + setup_coord_ellipsoid(ps, + igi.coord_sphere_info.x_center, + igi.coord_sphere_info.y_center, + igi.coord_sphere_info.z_center, + igi.coord_sphere_info.radius, + igi.coord_sphere_info.radius, + igi.coord_sphere_info.radius, + verbose_info.print_algorithm_highlights); break; -case initial_guess__ellipsoid: - setup_ellipsoid(ps, - igi.ellipsoid_info.x_center, - igi.ellipsoid_info.y_center, - igi.ellipsoid_info.z_center, - igi.ellipsoid_info.x_radius, - igi.ellipsoid_info.y_radius, - igi.ellipsoid_info.z_radius, - verbose_info.print_algorithm_highlights); +case initial_guess__coord_ellipsoid: + setup_coord_ellipsoid(ps, + igi.coord_ellipsoid_info.x_center, + igi.coord_ellipsoid_info.y_center, + igi.coord_ellipsoid_info.z_center, + igi.coord_ellipsoid_info.x_radius, + igi.coord_ellipsoid_info.y_radius, + igi.coord_ellipsoid_info.z_radius, + verbose_info.print_algorithm_highlights); break; default: @@ -151,10 +151,10 @@ else if (STRING_EQUAL(initial_guess_method_string, "Kerr/Kerr")) then return initial_guess__Kerr_Kerr; else if (STRING_EQUAL(initial_guess_method_string, "Kerr/Kerr-Schild")) then return initial_guess__Kerr_KerrSchild; -else if (STRING_EQUAL(initial_guess_method_string, "sphere")) - then return initial_guess__sphere; -else if (STRING_EQUAL(initial_guess_method_string, "ellipsoid")) - then return initial_guess__ellipsoid; +else if (STRING_EQUAL(initial_guess_method_string, "coordinate sphere")) + then return initial_guess__coord_sphere; +else if (STRING_EQUAL(initial_guess_method_string, "coordinate ellipsoid")) + then return initial_guess__coord_ellipsoid; else CCTK_VWarn(-1, __LINE__, __FILE__, CCTK_THORNSTRING, "\n" " decode_initial_guess_method():\n" @@ -212,7 +212,7 @@ if (verbose_info.print_algorithm_details) then CCTK_VInfo(CCTK_THORNSTRING, " setting coordinate %s", Kerr_Schild_flag ? "ellipsoid" : "sphere"); -setup_ellipsoid(ps, +setup_coord_ellipsoid(ps, x_posn, y_posn, z_posn, xy_radius, xy_radius, z_radius, verbose_info.print_algorithm_details); @@ -242,10 +242,10 @@ setup_ellipsoid(ps, // CW = C - W // namespace { -void setup_ellipsoid(patch_system& ps, - fp x_center, fp y_center, fp z_center, - fp x_radius, fp y_radius, fp z_radius, - bool print_msg_flag) +void setup_coord_ellipsoid(patch_system& ps, + fp x_center, fp y_center, fp z_center, + fp x_radius, fp y_radius, fp z_radius, + bool print_msg_flag) { if (print_msg_flag) then { @@ -292,7 +292,7 @@ if (print_msg_flag) then r = r_minus; else CCTK_VWarn(-1, __LINE__, __FILE__, CCTK_THORNSTRING, "\n" -" setup_ellipsoid():\n" +" setup_coord_ellipsoid():\n" " expected exactly one r>0 solution to quadratic, got 0 or 2!\n" " %s patch (irho,isigma)=(%d,%d) ==> (rho,sigma)=(%g,%g)\n" " direction cosines (xcos,ycos,zcos)=(%g,%g,%g)\n" diff --git a/src/driver/io.cc b/src/driver/io.cc index af7d5f9..b4dd114 100644 --- a/src/driver/io.cc +++ b/src/driver/io.cc @@ -82,7 +82,7 @@ if (print_msg_flag) switch (IO_info.file_format) { -case file_format__ASCII: +case file_format__ASCII_gnuplot: ps.read_ghosted_gridfn(unknown_gfn, file_name, false); // no ghost zones in data file @@ -121,7 +121,7 @@ const char* file_name = io_file_name(IO_info, base_file_name, switch (IO_info.file_format) { -case file_format__ASCII: +case file_format__ASCII_gnuplot: switch (unknown_gfn) { case gfns::gfn__h: @@ -303,8 +303,8 @@ fclose(fileptr); enum file_format decode_file_format(const char file_format_string[]) { -if (STRING_EQUAL(file_format_string, "ASCII")) - then return file_format__ASCII; +if (STRING_EQUAL(file_format_string, "ASCII (gnuplot)")) + then return file_format__ASCII_gnuplot; else if (STRING_EQUAL(file_format_string, "HDF5")) then return file_format__HDF5; else CCTK_VWarn(-1, __LINE__, __FILE__, CCTK_THORNSTRING, @@ -344,8 +344,8 @@ static char file_name_buffer[N_file_name_buffer]; const char* file_name_extension; switch (IO_info.file_format) { -case file_format__ASCII: - file_name_extension = IO_info.ASCII_file_name_extension; +case file_format__ASCII_gnuplot: + file_name_extension = IO_info.ASCII_gnuplot_file_name_extension; break; case file_format__HDF5: file_name_extension = IO_info.HDF5_file_name_extension; diff --git a/src/driver/setup.cc b/src/driver/setup.cc index 10dd891..dd1123b 100644 --- a/src/driver/setup.cc +++ b/src/driver/setup.cc @@ -110,21 +110,21 @@ verbose_info.print_algorithm_highlights verbose_info.print_algorithm_details = (state.verbose_info.verbose_level >= verbose_level__algorithm_details); -state.timer_handle = (print_timing_stats != 0) - ? CCTK_TimerCreateI() - : -1; +state.timer_handle = (print_timing_stats != 0) ? CCTK_TimerCreateI() : -1; state.surface_integral_method = patch::decode_integration_method(surface_integral_method); struct IO_info& IO_info = state.IO_info; IO_info.file_format = decode_file_format(file_format); -IO_info.output_ghost_zones_for_h = (output_ghost_zones_for_h != 0); -IO_info.ASCII_file_name_extension = ASCII_file_name_extension; -IO_info.HDF5_file_name_extension = HDF5_file_name_extension; -IO_info.h_base_file_name = h_base_file_name; -IO_info.H_base_file_name = H_of_h_base_file_name; -IO_info.Delta_h_base_file_name = Delta_h_base_file_name; -IO_info.Jacobian_base_file_name = Jacobian_base_file_name; +IO_info.how_often_to_output_h = how_often_to_output_h; +IO_info.how_often_to_output_H = how_often_to_output_H_of_h; +IO_info.output_ghost_zones_for_h = (output_ghost_zones_for_h != 0); +IO_info.ASCII_gnuplot_file_name_extension = ASCII_gnuplot_file_name_extension; +IO_info.HDF5_file_name_extension = HDF5_file_name_extension; +IO_info.h_base_file_name = h_base_file_name; +IO_info.H_base_file_name = H_of_h_base_file_name; +IO_info.Delta_h_base_file_name = Delta_h_base_file_name; +IO_info.Jacobian_base_file_name = Jacobian_base_file_name; IO_info.time_iteration = 0; struct Jacobian_info& Jac_info = state.Jac_info; @@ -135,8 +135,6 @@ Jac_info.perturbation_amplitude = Jacobian_perturbation_amplitude; struct solver_info& solver_info = state.solver_info; solver_info.output_initial_guess = (output_initial_guess != 0); -solver_info.output_h = (output_h != 0); -solver_info.output_H = (output_H_of_h != 0); solver_info.debugging_output_at_each_Newton_iteration = (debugging_output_at_each_Newton_iteration != 0); solver_info.max_Newton_iterations__initial @@ -310,28 +308,28 @@ state.AH_info_ptrs.push_back(NULL); = initial_guess__Kerr_KerrSchild__mass[hn]; AH_ptr->initial_guess_info.Kerr_KerrSchild_info.spin = initial_guess__Kerr_KerrSchild__spin[hn]; - // ... sphere - AH_ptr->initial_guess_info.sphere_info.x_center - = initial_guess__sphere__x_center[hn]; - AH_ptr->initial_guess_info.sphere_info.y_center - = initial_guess__sphere__y_center[hn]; - AH_ptr->initial_guess_info.sphere_info.z_center - = initial_guess__sphere__z_center[hn]; - AH_ptr->initial_guess_info.sphere_info.radius - = initial_guess__sphere__radius[hn]; - // ... ellipsoid - AH_ptr->initial_guess_info.ellipsoid_info.x_center - = initial_guess__ellipsoid__x_center[hn]; - AH_ptr->initial_guess_info.ellipsoid_info.y_center - = initial_guess__ellipsoid__y_center[hn]; - AH_ptr->initial_guess_info.ellipsoid_info.z_center - = initial_guess__ellipsoid__z_center[hn]; - AH_ptr->initial_guess_info.ellipsoid_info.x_radius - = initial_guess__ellipsoid__x_radius[hn]; - AH_ptr->initial_guess_info.ellipsoid_info.y_radius - = initial_guess__ellipsoid__y_radius[hn]; - AH_ptr->initial_guess_info.ellipsoid_info.z_radius - = initial_guess__ellipsoid__z_radius[hn]; + // ... coordinate sphere + AH_ptr->initial_guess_info.coord_sphere_info.x_center + = initial_guess__coord_sphere__x_center[hn]; + AH_ptr->initial_guess_info.coord_sphere_info.y_center + = initial_guess__coord_sphere__y_center[hn]; + AH_ptr->initial_guess_info.coord_sphere_info.z_center + = initial_guess__coord_sphere__z_center[hn]; + AH_ptr->initial_guess_info.coord_sphere_info.radius + = initial_guess__coord_sphere__radius[hn]; + // ... coordinate ellipsoid + AH_ptr->initial_guess_info.coord_ellipsoid_info.x_center + = initial_guess__coord_ellipsoid__x_center[hn]; + AH_ptr->initial_guess_info.coord_ellipsoid_info.y_center + = initial_guess__coord_ellipsoid__y_center[hn]; + AH_ptr->initial_guess_info.coord_ellipsoid_info.z_center + = initial_guess__coord_ellipsoid__z_center[hn]; + AH_ptr->initial_guess_info.coord_ellipsoid_info.x_radius + = initial_guess__coord_ellipsoid__x_radius[hn]; + AH_ptr->initial_guess_info.coord_ellipsoid_info.y_radius + = initial_guess__coord_ellipsoid__y_radius[hn]; + AH_ptr->initial_guess_info.coord_ellipsoid_info.z_radius + = initial_guess__coord_ellipsoid__z_radius[hn]; // initialize the BH diagnostics AH_ptr->AH_found = false; |