#include #include #include "cctk.h" #include "cctk_Arguments.h" #include "cctk_Parameters.h" #include "util_Table.h" void InterpToArray (CCTK_ARGUMENTS) { DECLARE_CCTK_ARGUMENTS; DECLARE_CCTK_PARAMETERS; int interpolator; int options_table; int coord_handle; CCTK_REAL * restrict coordsx; CCTK_REAL * restrict coordsy; CCTK_REAL * restrict coordsz; CCTK_POINTER_TO_CONST coords[3]; CCTK_INT * restrict inputs; CCTK_INT * restrict output_types; CCTK_POINTER * restrict outputs; CCTK_INT * restrict operation_codes; CCTK_INT * restrict time_deriv_order; int group; cGroupDynamicData dyndata; int nvars; int npoints; int n; int i, j, k; int ierr; interpolator = CCTK_InterpHandle (interpolator_name); assert (interpolator >= 0); options_table = Util_TableCreateFromString (interpolator_options); assert (options_table >= 0); coord_handle = CCTK_CoordSystemHandle (interpolator_coordinates); assert (coord_handle >= 0); /* Scalars */ { nvars = nscalars; if (nvars > 0) { npoints = 1; coordsx = malloc (npoints * sizeof * coordsx); assert (npoints==0 || coordsx); coordsy = malloc (npoints * sizeof * coordsy); assert (npoints==0 || coordsy); coordsz = malloc (npoints * sizeof * coordsz); assert (npoints==0 || coordsz); coords[0] = coordsx; coords[1] = coordsy; coords[2] = coordsz; n = 0; assert (n <= npoints); coordsx[n] = scalar_x0; coordsy[n] = scalar_y0; coordsz[n] = scalar_z0; ++n; assert (n == npoints); inputs = malloc (nvars * sizeof * inputs); assert (inputs); for (n=0; n 0) { npoints = array1d_npoints_i; coordsx = malloc (npoints * sizeof * coordsx); assert (npoints==0 || coordsx); coordsy = malloc (npoints * sizeof * coordsy); assert (npoints==0 || coordsy); coordsz = malloc (npoints * sizeof * coordsz); assert (npoints==0 || coordsz); coords[0] = coordsx; coords[1] = coordsy; coords[2] = coordsz; n = 0; for (i=0; i= 0); if (inputs[n] < 0) { inputs[n] = -1; } } output_types = malloc (nvars * sizeof * output_types); assert (output_types); for (n=0; n 0) { npoints = array2d_npoints_i * array2d_npoints_j; coordsx = malloc (npoints * sizeof * coordsx); assert (npoints==0 || coordsx); coordsy = malloc (npoints * sizeof * coordsy); assert (npoints==0 || coordsy); coordsz = malloc (npoints * sizeof * coordsz); assert (npoints==0 || coordsz); coords[0] = coordsx; coords[1] = coordsy; coords[2] = coordsz; n = 0; for (j=0; j 0) { npoints = array3d_npoints_i * array3d_npoints_j * array3d_npoints_k; coordsx = malloc (npoints * sizeof * coordsx); assert (npoints==0 || coordsx); coordsy = malloc (npoints * sizeof * coordsy); assert (npoints==0 || coordsy); coordsz = malloc (npoints * sizeof * coordsz); assert (npoints==0 || coordsz); coords[0] = coordsx; coords[1] = coordsy; coords[2] = coordsz; n = 0; for (k=0; k 0) { group = CCTK_GroupIndex ("InterpToArray::parrays1d"); assert (group >= 0); ierr = CCTK_GroupDynamicData (cctkGH, group, &dyndata); assert (! ierr); assert (dyndata.dim == 1); npoints = dyndata.lsh[0]; coordsx = malloc (npoints * sizeof * coordsx); assert (npoints==0 || coordsx); coordsy = malloc (npoints * sizeof * coordsy); assert (npoints==0 || coordsy); coordsz = malloc (npoints * sizeof * coordsz); assert (npoints==0 || coordsz); coords[0] = coordsx; coords[1] = coordsy; coords[2] = coordsz; n = 0; for (i=0; i= 0); if (inputs[n] < 0) { inputs[n] = -1; } } output_types = malloc (nvars * sizeof * output_types); assert (output_types); for (n=0; n 0) { group = CCTK_GroupIndex ("InterpToArray::parrays2d"); assert (group >= 0); ierr = CCTK_GroupDynamicData (cctkGH, group, &dyndata); assert (! ierr); assert (dyndata.dim == 2); npoints = dyndata.lsh[0] * dyndata.lsh[1]; coordsx = malloc (npoints * sizeof * coordsx); assert (npoints==0 || coordsx); coordsy = malloc (npoints * sizeof * coordsy); assert (npoints==0 || coordsy); coordsz = malloc (npoints * sizeof * coordsz); assert (npoints==0 || coordsz); coords[0] = coordsx; coords[1] = coordsy; coords[2] = coordsz; n = 0; for (j=0; j 0) { group = CCTK_GroupIndex ("InterpToArray::parrays3d"); assert (group >= 0); ierr = CCTK_GroupDynamicData (cctkGH, group, &dyndata); assert (! ierr); assert (dyndata.dim == 3); npoints = dyndata.lsh[0] * dyndata.lsh[1] * dyndata.lsh[2]; coordsx = malloc (npoints * sizeof * coordsx); assert (npoints==0 || coordsx); coordsy = malloc (npoints * sizeof * coordsy); assert (npoints==0 || coordsy); coordsz = malloc (npoints * sizeof * coordsz); assert (npoints==0 || coordsz); coords[0] = coordsx; coords[1] = coordsy; coords[2] = coordsz; n = 0; for (k=0; k