/*@@ @file Startup.c @date Sun Jul 04 1999 @author Thomas Radke @desc Startup routines for PUGHInterp @enddesc @history @endhistory @version $Id$ @@*/ #include #include "cctk.h" #include "cctk_Interp.h" #include "pughInterpGH.h" /* the rcs ID and its dummy function to use it */ static const char *rcsid = "$Header$"; CCTK_FILEVERSION(CactusPUGH_PUGHInterp_Startup_c) /* prototypes of routines defined in this source file */ void PUGHInterp_Startup (void); #ifdef CCTK_MPI static void *PUGHInterp_SetupGH (tFleshConfig *config, int convergence_level, cGH *GH); #endif #ifdef CCTK_MPI /*@@ @routine PUGHInterp_SetupGH @date Sun Jul 04 1999 @author Thomas Radke @desc Allocates the GH extension structure and - for the MPI case - the count/displacement buffers used in MPI_Alltoall() and MPI_Alltoallv() @enddesc @calls CCTK_nProcs @returntype void * @returndesc pointer to the allocated GH extension structure @endreturndesc @@*/ static void *PUGHInterp_SetupGH (tFleshConfig *config, int convergence_level, cGH *GH) { int nprocs; pughInterpGH *myGH; /* suppress compiler warnings about unused variables */ config = config; convergence_level = convergence_level; myGH = (pughInterpGH *) malloc (sizeof (pughInterpGH)); /* allocate once for all fields of same type */ nprocs = CCTK_nProcs (GH); myGH->send_count = (int *) malloc (4 * nprocs * sizeof (int)); myGH->send_displ = myGH->send_count + nprocs; myGH->recv_count = myGH->send_displ + nprocs; myGH->recv_displ = myGH->recv_count + nprocs; myGH->num_points_from = (CCTK_INT *) malloc (2 * nprocs * sizeof (CCTK_INT)); myGH->num_points_to = myGH->num_points_from + nprocs; return (myGH); } #endif /* CCTK_MPI */ /*@@ @routine PUGHInterp_InterpGV_NthOrder @date Wed 14 Feb 2001 @author Thomas Radke @desc Wrappers for the different interpolation operators registered for first/second/third order interpolation. These wrappers just call the common interpolation routine passing all arguments plus the interpolation order. @enddesc @returntype int @returndesc the return code of the common interpolation routine @endreturndesc @@*/ static int PUGHInterp_InterpGV_1stOrder (cGH *GH, const char *coord_system, int num_points, int num_in_array_indices, int num_out_arrays, void *interp_coord_arrays[], int interp_coord_array_types[], int in_array_indices[], void *out_arrays[], int out_array_types[]) { return (PUGHInterp_InterpGV (GH, 1, coord_system, num_points, num_in_array_indices, num_out_arrays, interp_coord_arrays, interp_coord_array_types, in_array_indices, out_arrays, out_array_types)); } static int PUGHInterp_InterpGV_2ndOrder (cGH *GH, const char *coord_system, int num_points, int num_in_array_indices, int num_out_arrays, void *interp_coord_arrays[], int interp_coord_array_types[], int in_array_indices[], void *out_arrays[], int out_array_types[]) { return (PUGHInterp_InterpGV (GH, 2, coord_system, num_points, num_in_array_indices, num_out_arrays, interp_coord_arrays, interp_coord_array_types, in_array_indices, out_arrays, out_array_types)); } static int PUGHInterp_InterpGV_3rdOrder (cGH *GH, const char *coord_system, int num_points, int num_in_array_indices, int num_out_arrays, void *interp_coord_arrays[], int interp_coord_array_types[], int in_array_indices[], void *out_arrays[], int out_array_types[]) { return (PUGHInterp_InterpGV (GH, 3, coord_system, num_points, num_in_array_indices, num_out_arrays, interp_coord_arrays, interp_coord_array_types, in_array_indices, out_arrays, out_array_types)); } static int PUGHInterp_InterpLocal_1stOrder (cGH *GH, int num_points, int num_dims, int num_in_arrays, int num_out_arrays, int coord_dims[], void *coord_arrays[], int coord_array_types[], void *interp_coord_arrays[], int interp_coord_array_types[], void *in_arrays[], int in_array_types[], void *out_arrays[], int out_array_types[]) { return (PUGHInterp_InterpLocal (GH, 1, num_points, num_dims, num_in_arrays, num_out_arrays, coord_dims, coord_arrays, coord_array_types, interp_coord_arrays, interp_coord_array_types, in_arrays, in_array_types, out_arrays, out_array_types)); } static int PUGHInterp_InterpLocal_2ndOrder (cGH *GH, int num_points, int num_dims, int num_in_arrays, int num_out_arrays, int coord_dims[], void *coord_arrays[], int coord_array_types[], void *interp_coord_arrays[], int interp_coord_array_types[], void *in_arrays[], int in_array_types[], void *out_arrays[], int out_array_types[]) { return (PUGHInterp_InterpLocal (GH, 2, num_points, num_dims, num_in_arrays, num_out_arrays, coord_dims, coord_arrays, coord_array_types, interp_coord_arrays, interp_coord_array_types, in_arrays, in_array_types, out_arrays, out_array_types)); } static int PUGHInterp_InterpLocal_3rdOrder (cGH *GH, int num_points, int num_dims, int num_in_arrays, int num_out_arrays, int coord_dims[], void *coord_arrays[], int coord_array_types[], void *interp_coord_arrays[], int interp_coord_array_types[], void *in_arrays[], int in_array_types[], void *out_arrays[], int out_array_types[]) { return (PUGHInterp_InterpLocal (GH, 3, num_points, num_dims, num_in_arrays, num_out_arrays, coord_dims, coord_arrays, coord_array_types, interp_coord_arrays, interp_coord_array_types, in_arrays, in_array_types, out_arrays, out_array_types)); } /*@@ @routine PUGHInterp_Startup @date Sun Jul 04 1999 @author Thomas Radke @desc The startup registration routine for PUGHInterp. Registers the PUGHInterp GH extensions setup routine and the interpolation operators with the flesh. @enddesc @calls CCTK_RegisterGHExtensionSetupGH CCTK_InterpRegisterOperatorGV CCTK_InterpRegisterOperatorLocal @@*/ void PUGHInterp_Startup (void) { #ifdef CCTK_MPI CCTK_RegisterGHExtensionSetupGH (CCTK_RegisterGHExtension ("PUGHInterp"), PUGHInterp_SetupGH); #endif CCTK_InterpRegisterOperatorGV (PUGHInterp_InterpGV_1stOrder, "first-order uniform cartesian"); CCTK_InterpRegisterOperatorLocal (PUGHInterp_InterpLocal_1stOrder, "first-order uniform cartesian"); CCTK_InterpRegisterOperatorGV (PUGHInterp_InterpGV_2ndOrder, "second-order uniform cartesian"); CCTK_InterpRegisterOperatorLocal (PUGHInterp_InterpLocal_2ndOrder, "second-order uniform cartesian"); CCTK_InterpRegisterOperatorGV (PUGHInterp_InterpGV_3rdOrder, "third-order uniform cartesian"); CCTK_InterpRegisterOperatorLocal (PUGHInterp_InterpLocal_3rdOrder, "third-order uniform cartesian"); }