aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortradke <tradke@1c20744c-e24a-42ec-9533-f5004cb800e5>2003-03-10 16:19:50 +0000
committertradke <tradke@1c20744c-e24a-42ec-9533-f5004cb800e5>2003-03-10 16:19:50 +0000
commit308686fdec590aaaadb0c1775608a392768a1b46 (patch)
tree0cbca5175dd9ac3571bbee1ff6312c37b0f74d51 /src
parent673b44e5fa3d8616b96dbc03fbab73e40789a650 (diff)
Fixed the query call for the multiprocessor case which now tests only on
interprocessor faces whether there are enough ghost zones available for the given molecule size. git-svn-id: http://svn.cactuscode.org/arrangements/CactusPUGH/PUGHInterp/trunk@52 1c20744c-e24a-42ec-9533-f5004cb800e5
Diffstat (limited to 'src')
-rw-r--r--src/InterpGridArrays.c29
1 files changed, 24 insertions, 5 deletions
diff --git a/src/InterpGridArrays.c b/src/InterpGridArrays.c
index 39de534..3c95211 100644
--- a/src/InterpGridArrays.c
+++ b/src/InterpGridArrays.c
@@ -203,7 +203,7 @@ int PUGHInterp_InterpGridArrays (const cGH *GH,
CCTK_REAL *range_min, *range_max;
CCTK_REAL *origin_global;
CCTK_REAL *interp_coords_proc, *coords, *bbox_local;
- const CCTK_REAL **bbox_interp_coords;
+ CCTK_REAL **bbox_interp_coords;
#endif
@@ -566,17 +566,29 @@ int PUGHInterp_InterpGridArrays (const cGH *GH,
This is done as a query, simply by passing all arguments as for the
real call to the local interpolator, except for the output_arrays[]
argument which contains NULL pointers. */
- bbox_interp_coords = malloc (N_dims * sizeof (void *));
- for (i = 0; i < N_dims; i++)
+ bbox_interp_coords = malloc (N_dims * sizeof (CCTK_REAL *));
+ bbox_interp_coords[0] = malloc (2 * N_dims * N_dims * sizeof (CCTK_REAL));
+ for (i = 1; i < N_dims; i++)
+ {
+ bbox_interp_coords[i] = bbox_interp_coords[i-1] + 2*N_dims;
+ }
+ for (j = 0; j < 2 * N_dims; j++)
{
- bbox_interp_coords[i] = &bbox_local[2 * i];
+ for (i = 0; i < N_dims; i++)
+ {
+ bbox_interp_coords[i][j] = 0.5 * (bbox_local[2*i+0] + bbox_local[2*i+1]);
+ }
+ if (! GH->cctk_bbox[j])
+ {
+ bbox_interp_coords[j/2][j] = bbox_local[j];
+ }
}
output_arrays_local = N_output_arrays > 0 ?
calloc (N_output_arrays, sizeof (void *)) : NULL;
retval = CCTK_InterpLocalUniform (N_dims, local_interp_handle,
param_table_handle,
- origin_local, delta, 2,
+ origin_local, delta, 2 * N_dims,
CCTK_VARIABLE_REAL,
(const void *const *) bbox_interp_coords,
N_input_arrays, input_array_dims,
@@ -612,6 +624,7 @@ int PUGHInterp_InterpGridArrays (const cGH *GH,
{
free (output_arrays_local);
}
+ free (bbox_interp_coords[0]);
free (bbox_interp_coords);
free (range_min);
@@ -627,6 +640,12 @@ int PUGHInterp_InterpGridArrays (const cGH *GH,
free (input_array_dims);
free (type_desc);
+ /* if the query call returned 'point-outside' error
+ we turn this into a 'ghost-size-too-small' error here */
+ if (retval == CCTK_ERROR_INTERP_POINT_OUTSIDE)
+ {
+ retval = CCTK_ERROR_INTERP_GHOST_SIZE_TOO_SMALL;
+ }
return (retval);
}