From c8e020e2fd5f0cdf6b240b771ad284864e222e08 Mon Sep 17 00:00:00 2001 From: Roland Haas Date: Wed, 8 Nov 2023 15:08:17 -0600 Subject: [PATCH 1/2] CarpetX: register dummy "CarpetX" interpoaltor with Cactus this allows user code to use "CarpetX" when requesting an interpolator handle --- CarpetX/src/driver.cxx | 5 +++++ CarpetX/src/interp.hxx | 20 ++++++++++++++++++++ CarpetX/src/interpolate.cxx | 28 ++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+) diff --git a/CarpetX/src/driver.cxx b/CarpetX/src/driver.cxx index 126af6ec3..c6536621c 100644 --- a/CarpetX/src/driver.cxx +++ b/CarpetX/src/driver.cxx @@ -2301,6 +2301,11 @@ extern "C" int CarpetX_Startup() { CCTK_OverloadInterpGridArrays(CarpetX_InterpGridArrays); CCTK_OverloadArrayGroupSizeB(ArrayGroupSizeB); CCTK_OverloadGroupDynamicData(GroupDynamicData); + + iret = CCTK_InterpRegisterOpLocalUniform(InterpLocalUniform, "CarpetX", + CCTK_THORNSTRING); + assert(!iret && "CCTK_InterpRegisterOpLocalUniform failed"); + return 0; } diff --git a/CarpetX/src/interp.hxx b/CarpetX/src/interp.hxx index 906de0991..6eca375a9 100644 --- a/CarpetX/src/interp.hxx +++ b/CarpetX/src/interp.hxx @@ -22,4 +22,24 @@ extern "C" CCTK_INT CarpetX_DriverInterpolate( CCTK_INT const N_output_arrays, CCTK_INT const output_array_type_codes[], CCTK_POINTER const output_arrays[]); +namespace CarpetX { +// a dummy routine for now +// TODO: implement this for actual local interpolation +int InterpLocalUniform(int N_dims, int param_table_handle, + /***** coordinate system *****/ + const CCTK_REAL coord_origin[], + const CCTK_REAL coord_delta[], + /***** interpolation points *****/ + int N_interp_points, int interp_coords_type_code, + const void *const interp_coords[], + /***** input arrays *****/ + int N_input_arrays, const CCTK_INT input_array_dims[], + const CCTK_INT input_array_type_codes[], + const void *const input_arrays[], + /***** output arrays *****/ + int N_output_arrays, + const CCTK_INT output_array_type_codes[], + void *const output_arrays[]); +} // namespace CarpetX + #endif // #ifndef CARPETX_CARPETX_INTERP_HXX diff --git a/CarpetX/src/interpolate.cxx b/CarpetX/src/interpolate.cxx index 0cdabbb08..df9ef5cd6 100644 --- a/CarpetX/src/interpolate.cxx +++ b/CarpetX/src/interpolate.cxx @@ -307,6 +307,25 @@ template struct interpolator { } // namespace +int InterpLocalUniform(int /*N_dims*/, int /*param_table_handle*/, + /***** coordinate system *****/ + const CCTK_REAL /*coord_origin*/[], + const CCTK_REAL /*coord_delta*/[], + /***** interpolation points *****/ + int /*N_interp_points*/, int /*interp_coords_type_code*/, + const void *const /*interp_coords*/[], + /***** input arrays *****/ + int /*N_input_arrays*/, + const CCTK_INT /*input_array_dims*/[], + const CCTK_INT /*input_array_type_codes*/[], + const void *const /*input_arrays*/[], + /***** output arrays *****/ + int /*N_output_arrays*/, + const CCTK_INT /*output_array_type_codes*/[], + void *const /*output_arrays*/[]) { + CCTK_ERROR("Dummy InterpLocalUniform function called"); +} + extern "C" CCTK_INT CarpetX_InterpGridArrays( cGH const *const cctkGH, int const N_dims, int const local_interp_handle, int const param_table_handle, int const coord_system_handle, @@ -342,6 +361,15 @@ extern "C" CCTK_INT CarpetX_DriverInterpolate( CCTK_POINTER const output_arrays[]) { DECLARE_CCTK_PARAMETERS; + // We do not support local interpolators yet + const int carpetx_interp_handle = CCTK_InterpHandle("CarpetX"); + assert(carpetx_interp_handle >= 0); + if (carpetx_interp_handle != local_interp_handle) { + CCTK_VERROR("Incorrect local interpolator handle provided, only 'CarpetX' " + "is allowed: %d != %d", + local_interp_handle, carpetx_interp_handle); + } + // This verifies that the order in param_table_handle matches the order of the // runtime parameter from CarpetX CCTK_INT order; From 4914fd83ffcd83201bbd6c3693882331cfe6d9a2 Mon Sep 17 00:00:00 2001 From: Roland Haas Date: Fri, 10 Nov 2023 12:36:49 -0600 Subject: [PATCH 2/2] TestInterpolate: adapt to CarpetX's interpolator requiring a handle --- TestInterpolate/src/test_interpolation.cxx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/TestInterpolate/src/test_interpolation.cxx b/TestInterpolate/src/test_interpolation.cxx index 2516b6e60..54c32e214 100644 --- a/TestInterpolate/src/test_interpolation.cxx +++ b/TestInterpolate/src/test_interpolation.cxx @@ -99,7 +99,10 @@ extern "C" void TestInterpolate_test_interpolation(CCTK_ARGUMENTS) { CCTK_INT const coord_system_handle = 0; CCTK_INT const interp_coords_type_code = 0; CCTK_INT const output_array_type_codes[1] = {0}; - int interp_handle = 0; + int interp_handle = CCTK_InterpHandle("CarpetX"); + + if(interp_handle < 0) + CCTK_VERROR("Could not obtain inteprolator handle for built-in 'CarpetX' interpolator: %d", interp_handle); /* Table generation */ int operands[DIM(all_operations)][DIM(all_varinds)];