User: rhaas Date: 2013/02/01 10:54 PM
Modified: /trunk/src/driver/ BH_diagnostics.cc
Log: Dont use recovered origin if AH was never found
Problem: After some time in the simulation, I want to search for an horizon. I do not know where the horizon appears initially when the simulation started. I therefore leave origin_* and initial_guesscoord_sphere*_center at zero.
By some means later, I have figured out where the horizon will appear. Therefore, after recovery, I want to set origin_* and initial_guesscoord_sphere*_center to the origin where I believe the horizon will appear.
Unfortunately, upon recovery, the new origin_* is overwritten by whatever was stored in ah_origin_* (this would be zero). Generally, this means that the initial guess ellipsoid that is setup when a horizon has never been found, is ill-posed (because the initial (and incorrect) origin_* are used with the updated initial_guesscoord_sphere*_center).
Solution: Don't use the stored AH origin upon recovery when a horizon has never been found before.
Patch by Christian Reisswig
File Changes:
Directory: /trunk/src/driver/ =============================
File [modified]: BH_diagnostics.cc Delta lines: +6 -3 =================================================================== --- trunk/src/driver/BH_diagnostics.cc 2013-01-18 17:54:47 UTC (rev 1571) +++ trunk/src/driver/BH_diagnostics.cc 2013-02-02 04:54:18 UTC (rev 1572) @@ -834,9 +834,12 @@ struct AH_data& AH_data = *state.AH_data_array[horizon_number]; patch_system& ps = *AH_data.ps_ptr;
- ps.origin_x(ah_origin_x[horizon_number-1]); - ps.origin_y(ah_origin_y[horizon_number-1]); - ps.origin_z(ah_origin_z[horizon_number-1]); + // only use stored origins if horizon had not yet been found! + if (ah_found_flag[horizon_number-1]) { + ps.origin_x(ah_origin_x[horizon_number-1]); + ps.origin_y(ah_origin_y[horizon_number-1]); + ps.origin_z(ah_origin_z[horizon_number-1]); + }
for (int pn = 0; pn < ps.N_patches(); ++pn) { assert (pn < 6);
commits@lists.einsteintoolkit.org