Skip to content

Commit

Permalink
Merge pull request #248 from eschnett/rhaas/registerinterp
Browse files Browse the repository at this point in the history
add CarpetX interpolator to list of localinterps known to Cactus
  • Loading branch information
eschnett authored Nov 16, 2023
2 parents 06205f9 + 4914fd8 commit 6b2acc4
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 1 deletion.
5 changes: 5 additions & 0 deletions CarpetX/src/driver.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down
20 changes: 20 additions & 0 deletions CarpetX/src/interp.hxx
Original file line number Diff line number Diff line change
Expand Up @@ -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
28 changes: 28 additions & 0 deletions CarpetX/src/interpolate.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,25 @@ template <typename T, int order, int centering> 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,
Expand Down Expand Up @@ -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;
Expand Down
5 changes: 4 additions & 1 deletion TestInterpolate/src/test_interpolation.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -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)];
Expand Down

0 comments on commit 6b2acc4

Please sign in to comment.