aboutsummaryrefslogtreecommitdiff
path: root/src/driver/setup.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/driver/setup.cc')
-rw-r--r--src/driver/setup.cc74
1 files changed, 53 insertions, 21 deletions
diff --git a/src/driver/setup.cc b/src/driver/setup.cc
index cd9efd7..375e458 100644
--- a/src/driver/setup.cc
+++ b/src/driver/setup.cc
@@ -5,6 +5,7 @@
// <<<access to persistent data>>>
//
// AHFinderDirect_driver - top-level driver to setup persistent data structures
+// Cactus_gridfn_data_ptr - get Cactus data pointer for CCTK_REAL gridfn
///
/// decode_method - decode the method parameter
/// decode_verbose_level - decode the verbose_level parameter
@@ -82,10 +83,8 @@ extern struct state state;
//******************************************************************************
//
-// This function is called by the Cactus scheduler to set up the
-// following data structures:
-// state.gi
-// state.cgi
+// This function is called by the Cactus scheduler to set up all our
+// persistent data structures. (These are stored in struct state .)
//
extern "C"
void AHFinderDirect_setup(CCTK_ARGUMENTS)
@@ -153,6 +152,7 @@ solver_info.Delta_h_norm_for_convergence = Delta_h_norm_for_convergence;
solver_info.final_H_update_if_exit_x_H_small
= (final_H_update_if_exit_x_H_small != 0);
+
//
// set up the Cactus grid info
//
@@ -169,23 +169,23 @@ cgi.coord_delta[2] = cctk_delta_space[2];
cgi.gridfn_dims[0] = cctk_lsh[0];
cgi.gridfn_dims[1] = cctk_lsh[1];
cgi.gridfn_dims[2] = cctk_lsh[2];
-// CCTK_VarDataPtr() returns a void * , but we need a const fp *;
-// since static_cast<> won't change const-ness, we need a 2-stage cast
-// for this:
-#define DATA_PTR_CAST(void_ptr_) \
- static_cast<const fp*>( const_cast<const void *>(void_ptr_) )
-cgi.g_dd_11_data = DATA_PTR_CAST(CCTK_VarDataPtr(cctkGH, 0, "ADMBase::gxx"));
-cgi.g_dd_12_data = DATA_PTR_CAST(CCTK_VarDataPtr(cctkGH, 0, "ADMBase::gxy"));
-cgi.g_dd_13_data = DATA_PTR_CAST(CCTK_VarDataPtr(cctkGH, 0, "ADMBase::gxz"));
-cgi.g_dd_22_data = DATA_PTR_CAST(CCTK_VarDataPtr(cctkGH, 0, "ADMBase::gyy"));
-cgi.g_dd_23_data = DATA_PTR_CAST(CCTK_VarDataPtr(cctkGH, 0, "ADMBase::gyz"));
-cgi.g_dd_33_data = DATA_PTR_CAST(CCTK_VarDataPtr(cctkGH, 0, "ADMBase::gzz"));
-cgi.K_dd_11_data = DATA_PTR_CAST(CCTK_VarDataPtr(cctkGH, 0, "ADMBase::kxx"));
-cgi.K_dd_12_data = DATA_PTR_CAST(CCTK_VarDataPtr(cctkGH, 0, "ADMBase::kxy"));
-cgi.K_dd_13_data = DATA_PTR_CAST(CCTK_VarDataPtr(cctkGH, 0, "ADMBase::kxz"));
-cgi.K_dd_22_data = DATA_PTR_CAST(CCTK_VarDataPtr(cctkGH, 0, "ADMBase::kyy"));
-cgi.K_dd_23_data = DATA_PTR_CAST(CCTK_VarDataPtr(cctkGH, 0, "ADMBase::kyz"));
-cgi.K_dd_33_data = DATA_PTR_CAST(CCTK_VarDataPtr(cctkGH, 0, "ADMBase::kzz"));
+
+// dummy values -- real ones filled in in AHFinderDirect_find_horizons()
+cgi.Cactus_conformal_metric = false;
+cgi.psi_data = NULL;
+
+cgi.g_dd_11_data = Cactus_gridfn_data_ptr(cctkGH, "ADMBase::gxx");
+cgi.g_dd_12_data = Cactus_gridfn_data_ptr(cctkGH, "ADMBase::gxy");
+cgi.g_dd_13_data = Cactus_gridfn_data_ptr(cctkGH, "ADMBase::gxz");
+cgi.g_dd_22_data = Cactus_gridfn_data_ptr(cctkGH, "ADMBase::gyy");
+cgi.g_dd_23_data = Cactus_gridfn_data_ptr(cctkGH, "ADMBase::gyz");
+cgi.g_dd_33_data = Cactus_gridfn_data_ptr(cctkGH, "ADMBase::gzz");
+cgi.K_dd_11_data = Cactus_gridfn_data_ptr(cctkGH, "ADMBase::kxx");
+cgi.K_dd_12_data = Cactus_gridfn_data_ptr(cctkGH, "ADMBase::kxy");
+cgi.K_dd_13_data = Cactus_gridfn_data_ptr(cctkGH, "ADMBase::kxz");
+cgi.K_dd_22_data = Cactus_gridfn_data_ptr(cctkGH, "ADMBase::kyy");
+cgi.K_dd_23_data = Cactus_gridfn_data_ptr(cctkGH, "ADMBase::kyz");
+cgi.K_dd_33_data = Cactus_gridfn_data_ptr(cctkGH, "ADMBase::kzz");
//
@@ -301,6 +301,38 @@ state.AH_info_ptrs.push_back(NULL);
//******************************************************************************
//
+// This function gets the Cactus data pointer for a gridfn, and checks
+// to make sure this is non-NULL.
+//
+const CCTK_REAL* Cactus_gridfn_data_ptr(const cGH *GH, const char gridfn_name[])
+{
+const int time_level = 0;
+
+//
+// CCTK_VarDataPtr() returns a void * , but we need a const CCTK_REAL*;
+// since static_cast<> won't change const-ness, we need a 2-stage cast
+// for this:
+//
+const CCTK_REAL *const data_ptr
+ = static_cast<const fp*>(
+ const_cast<const void *>(
+ CCTK_VarDataPtr(GH, time_level, gridfn_name)
+ )
+ );
+
+if (data_ptr == NULL)
+ then CCTK_VWarn(-1, __LINE__, __FILE__, CCTK_THORNSTRING,
+"***** Cactus_gridfn_data_ptr(): can't find gridfn \"%s\"!",
+ gridfn_name); /*NOTREACHED*/
+
+return data_ptr;
+}
+
+//******************************************************************************
+//******************************************************************************
+//******************************************************************************
+
+//
// This function decodes the method parameter (string) into an
// internal enum for future use.
//