aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjthorn <jthorn@f88db872-0e4f-0410-b76b-b9085cfa78c5>2004-02-12 12:28:50 +0000
committerjthorn <jthorn@f88db872-0e4f-0410-b76b-b9085cfa78c5>2004-02-12 12:28:50 +0000
commitfb6d05a1ba08a07638a1add57de2aeb0e4ae85da (patch)
tree0e7e42ed9044131c537dffaa7a9b0db706186447 /src
parenteddcd642a2c54a5b4c2c7aef00bd4af54f96f79c (diff)
Cleanup the aliased-function interface:
* rename (delete-and-add in CVS :( ) the file which implements it from src/driver/horizon_radius.cc to src/driver/aliased_functions.cc * fix some off-by-one errors in checking the horizon number * add a new aliased function to allow querying of whether or not a given horizon was found the last time we looked for it * all the aliased functions are now *functions* returning a status code (>= 0 for ok, < 0 for error), instead of subroutines before * document the whole thing in the thorn guide (this was missing before :( ) N.b. you will need a make YOUR_CONFIG_NAME-cleandeps after this cvs update git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinAnalysis/AHFinderDirect/trunk@1267 f88db872-0e4f-0410-b76b-b9085cfa78c5
Diffstat (limited to 'src')
-rw-r--r--src/driver/aliased_functions.cc (renamed from src/driver/horizon_radius.cc)88
-rw-r--r--src/driver/driver.hh15
-rw-r--r--src/driver/make.code.defn4
3 files changed, 87 insertions, 20 deletions
diff --git a/src/driver/horizon_radius.cc b/src/driver/aliased_functions.cc
index a5982b6..b3ea530 100644
--- a/src/driver/horizon_radius.cc
+++ b/src/driver/aliased_functions.cc
@@ -3,6 +3,7 @@
//
// <<<access to persistent data>>>
// AHFinderDirect_local_coordinate_origin - provide our local coordinate origin
+// AHFinderDirect_horizon_was_found - query if a given horizon was found
// AHFinderDirect_radius_in_direction - provide r(angle) function
//
@@ -14,6 +15,7 @@
#include "cctk.h"
#include "cctk_Arguments.h"
#include "cctk_Parameters.h"
+#include "cctk_Functions.h"
#include "config.h"
#include "stdc.h"
@@ -55,22 +57,28 @@ extern struct state state;
//******************************************************************************
//
-// This function is called (via the magic of function aliasing) by
-// other thorns to find out our local coordinate origin for a given AH.
+// This function is called (via the Cactus flesh function-aliasing mechanism)
+// by other thorns to find out our local coordinate origin for a given AH.
+//
+// Results:
+// This function returns 0 for ok, or -1 if the horizon number is invalid.
//
extern "C"
- void AHFinderDirect_local_coordinate_origin
- (CCTK_INT horizon_number,
- CCTK_REAL* origin_x_ptr, CCTK_REAL* origin_y_ptr, CCTK_REAL* origin_z_ptr)
+ CCTK_INT AHFinderDirect_local_coordinate_origin
+ (CCTK_INT horizon_number,
+ CCTK_REAL* origin_x_ptr, CCTK_REAL* origin_y_ptr, CCTK_REAL* origin_z_ptr)
{
const struct verbose_info& verbose_info = state.verbose_info;
-if (! ((horizon_number >= 1) && (horizon_number < state.N_horizons)) )
- then CCTK_VWarn(1, __LINE__, __FILE__, CCTK_THORNSTRING,
+if (! ((horizon_number >= 1) && (horizon_number <= state.N_horizons)) )
+ then {
+ CCTK_VWarn(1, __LINE__, __FILE__, CCTK_THORNSTRING,
"AHFinderDirect_local_coordinate_origin():\n"
" horizon_number=%d must be in the range [1,N_horizons=%d]!\n"
,
- int(horizon_number), state.N_horizons); /*NOTREACHED*/
+ int(horizon_number), state.N_horizons);
+ return -1; // *** ERROR RETURN ***
+ }
assert(state.AH_data_array[horizon_number] != NULL);
const struct AH_data& AH_data = *state.AH_data_array[horizon_number];
@@ -81,13 +89,49 @@ const patch_system& ps = *AH_data.ps_ptr;
*origin_x_ptr = ps.origin_x();
*origin_y_ptr = ps.origin_y();
*origin_z_ptr = ps.origin_z();
+
+return 0; // *** NORMAL RETURN ***
+}
+
+//******************************************************************************
+
+//
+// This function is called (via the Cactus flesh function-aliasing mechanism)
+// by other thorns to query whether or not the specified horizon was found
+// the last time we searched for it.
+//
+// Results:
+// This function returns
+// 1 if the horizon was found
+// 0 if the horizon was not found
+// -1 if the horizon number is invalid.
+//
+extern "C"
+ CCTK_INT AHFinderDirect_horizon_was_found(CCTK_INT horizon_number)
+{
+const struct verbose_info& verbose_info = state.verbose_info;
+
+if (! ((horizon_number >= 1) && (horizon_number <= state.N_horizons)) )
+ then {
+ CCTK_VWarn(1, __LINE__, __FILE__, CCTK_THORNSTRING,
+"AHFinderDirect_horizon_was_found():\n"
+" horizon_number=%d must be in the range [1,N_horizons=%d]!\n"
+ ,
+ int(horizon_number), state.N_horizons);
+ return -1; // *** ERROR RETURN ***
+ }
+
+assert(state.AH_data_array[horizon_number] != NULL);
+const struct AH_data& AH_data = *state.AH_data_array[horizon_number];
+
+return AH_data.found_flag ? 1 : 0;
}
//******************************************************************************
//
-// This function is called (via the magic of function aliasing) by
-// other thorns to find out a given AH's radius in the direction from
+// This function is called (via the Cactus flesh function-aliasing mechanism)
+// by other thorns to find out a given AH's radius in the direction from
// its local coordinate origin to a given (x,y,z) coordinate or coordinates.
//
// FIXME:
@@ -103,21 +147,27 @@ const patch_system& ps = *AH_data.ps_ptr;
// from the local coordinate origin), or to all -1.0 if we didn't
// find this horizon the last time we looked for it
//
+// Results:
+// This function returns 0 for ok, or -1 if the horizon number is invalid.
+//
extern "C"
- void AHFinderDirect_radius_in_direction
- (CCTK_INT horizon_number,
- CCTK_INT N_points,
- const CCTK_REAL* const x, const CCTK_REAL* const y, const CCTK_REAL* const z,
- CCTK_REAL* const radius)
+ CCTK_INT AHFinderDirect_radius_in_direction
+ (CCTK_INT horizon_number,
+ CCTK_INT N_points,
+ const CCTK_REAL* const x, const CCTK_REAL* const y, const CCTK_REAL* const z,
+ CCTK_REAL* const radius)
{
const struct verbose_info& verbose_info = state.verbose_info;
-if (! ((horizon_number >= 1) && (horizon_number < state.N_horizons)) )
- then CCTK_VWarn(1, __LINE__, __FILE__, CCTK_THORNSTRING,
+if (! ((horizon_number >= 1) && (horizon_number <= state.N_horizons)) )
+ then {
+ CCTK_VWarn(1, __LINE__, __FILE__, CCTK_THORNSTRING,
"AHFinderDirect_distance_outside_thorn():\n"
" horizon_number=%d must be in the range [1,N_horizons=%d]!\n"
,
- int(horizon_number), state.N_horizons); /*NOTREACHED*/
+ int(horizon_number), state.N_horizons);
+ return -1; // *** ERROR RETURN ***
+ }
assert(state.AH_data_array[horizon_number] != NULL);
const struct AH_data& AH_data = *state.AH_data_array[horizon_number];
@@ -138,6 +188,8 @@ const struct AH_data& AH_data = *state.AH_data_array[horizon_number];
}
else radius[point] = -1.0;
}
+
+return 0; // *** NORMAL RETURN ***
}
//******************************************************************************
diff --git a/src/driver/driver.hh b/src/driver/driver.hh
index b08a551..dc73f84 100644
--- a/src/driver/driver.hh
+++ b/src/driver/driver.hh
@@ -384,6 +384,21 @@ extern "C"
extern "C"
void AHFinderDirect_maybe_do_masks(CCTK_ARGUMENTS);
+// aliased_functions.cc
+// ... called from other thorns via the Cactus flesh function-aliasing mechanism
+extern "C"
+ CCTK_INT AHFinderDirect_local_coordinate_origin
+ (CCTK_INT horizon_number,
+ CCTK_REAL* origin_x_ptr, CCTK_REAL* origin_y_ptr, CCTK_REAL* origin_z_ptr);
+extern "C"
+ CCTK_INT AHFinderDirect_horizon_was_found(CCTK_INT horizon_number);
+extern "C"
+ CCTK_INT AHFinderDirect_radius_in_direction
+ (CCTK_INT horizon_number,
+ CCTK_INT N_points,
+ const CCTK_REAL* const x, const CCTK_REAL* const y, const CCTK_REAL* const z,
+ CCTK_REAL* const radius);
+
// initial_guess.cc
void setup_initial_guess(patch_system& ps,
const struct initial_guess_info& igi,
diff --git a/src/driver/make.code.defn b/src/driver/make.code.defn
index b973728..737cb3d 100644
--- a/src/driver/make.code.defn
+++ b/src/driver/make.code.defn
@@ -6,8 +6,8 @@ SRCS = state.cc \
setup.cc find_horizons.cc \
initial_guess.cc Newton.cc \
io.cc misc-driver.cc \
- announce.cc horizon_radius.cc mask.cc \
- BH_diagnostics.cc horizon_sequence.cc
+ BH_diagnostics.cc horizon_sequence.cc \
+ mask.cc announce.cc aliased_functions.cc
# Subdirectories containing source files
SUBDIRS =