aboutsummaryrefslogtreecommitdiff
path: root/src/GeneralizedPolynomial-Uniform/template.c
diff options
context:
space:
mode:
authorjthorn <jthorn@df1f8a13-aa1d-4dd4-9681-27ded5b42416>2002-08-19 14:30:44 +0000
committerjthorn <jthorn@df1f8a13-aa1d-4dd4-9681-27ded5b42416>2002-08-19 14:30:44 +0000
commit6f561b6c721a72830342b0eebe204635d6167987 (patch)
treeac977703eb1469bf898ec79721fafb3c52dad2af /src/GeneralizedPolynomial-Uniform/template.c
parent25498e53288336c7f176305f036ecad05a87913c (diff)
This commit changes the semantics of the out_of_range_tolerance[]
parameter-table entry to allow the min/max ends of the grid to be handled differently. (We'll need this for the multiprocessor interpolation.) ***** IMPORTANT ***** This change is *NOT* backwards-compatible: if you are calling CCTK_InterpLocalUniform() from this thorn (CactusBase/LocalInterp), and you have set out_of_range_tolerance[] to a non-default value, you must (slightly) change your code, or else you'll get an error return from the interpolator. If you don't use out_of_range_tolerance[] , then you don't need to do anything. The semantics of out_of_range_tolerance[] are now as follows: @var out_of_range_tolerance @vdesc Specifies how out-of-range interpolation points should be handled. The array elements are matched up with the axes and minimum/maximum ends of the grid in the order [x_min, x_max, y_min, y_max, z_min, z_max, ...]. An array value TOL is interpreted as follows: If TOL >= 0.0, then an interpolation point is considered to be "out of range" if and only if the interpolation point is > TOL * coord_delta[axis] outside the grid in this coordinate direction. If TOL == -1.0, then an interpolation point is considered to be "out of range" if and only if a centered molecule (or more generally, a molecule whose centering is chosen pretending that the grid is of infinite extent), would require data from outside the grid in this direction. Other values of TOL are illegal (reserved for future use). @vtype const CCTK_REAL out_of_range_tolerance[2*N_dims] @endvar The change is that it used to have only N_dims elements, one for each axis -- now there are 2*N_dims elements, one for each min/max end of each axis. ---------------------------------------------------------------------- Modified Files: doc/documentation.tex src/GeneralizedPolynomial-Uniform/InterpLocalUniform.c src/GeneralizedPolynomial-Uniform/InterpLocalUniform.h src/GeneralizedPolynomial-Uniform/interpolate.maple src/GeneralizedPolynomial-Uniform/molecule_posn.c src/GeneralizedPolynomial-Uniform/template.c src/GeneralizedPolynomial-Uniform/test_molecule_posn.c git-svn-id: http://svn.cactuscode.org/arrangements/CactusBase/LocalInterp/trunk@88 df1f8a13-aa1d-4dd4-9681-27ded5b42416
Diffstat (limited to 'src/GeneralizedPolynomial-Uniform/template.c')
-rw-r--r--src/GeneralizedPolynomial-Uniform/template.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/GeneralizedPolynomial-Uniform/template.c b/src/GeneralizedPolynomial-Uniform/template.c
index 3cb2c38..5cb934b 100644
--- a/src/GeneralizedPolynomial-Uniform/template.c
+++ b/src/GeneralizedPolynomial-Uniform/template.c
@@ -421,6 +421,17 @@ int FUNCTION_NAME(/***** coordinate system *****/
#error "N_DIMS may not be > 3!"
#endif
+/* layout of axes and min/max ends in out_of_range_tolerance[] array */
+#define X_AXIS_MIN 0
+#define X_AXIS_MAX 1
+#define Y_AXIS_MIN 2
+#define Y_AXIS_MAX 3
+#define Z_AXIS_MIN 4
+#define Z_AXIS_MAX 5
+#if (N_DIMS > 3)
+ #error "N_DIMS may not be > 3!"
+#endif
+
/* basic sanity check on molecule size */
#define MOLECULE_M_COUNT (MOLECULE_MAX_M - MOLECULE_MIN_M + 1)
#if (MOLECULE_SIZE != MOLECULE_M_COUNT)
@@ -740,8 +751,9 @@ int pt;
= LocalInterp_molecule_posn(origin_x, delta_x,
input_array_min_subscripts[X_AXIS],
input_array_max_subscripts[X_AXIS],
- out_of_range_tolerance[X_AXIS],
MOLECULE_SIZE,
+ out_of_range_tolerance[X_AXIS_MIN],
+ out_of_range_tolerance[X_AXIS_MAX],
interp_coords_fp[X_AXIS],
&x_temp,
(int *) NULL, (int *) NULL);
@@ -753,8 +765,9 @@ int pt;
= LocalInterp_molecule_posn(origin_y, delta_y,
input_array_min_subscripts[Y_AXIS],
input_array_max_subscripts[Y_AXIS],
- out_of_range_tolerance[Y_AXIS],
MOLECULE_SIZE,
+ out_of_range_tolerance[Y_AXIS_MIN],
+ out_of_range_tolerance[Y_AXIS_MAX],
interp_coords_fp[Y_AXIS],
&y_temp,
(int *) NULL, (int *) NULL);
@@ -766,8 +779,9 @@ int pt;
= LocalInterp_molecule_posn(origin_z, delta_z,
input_array_min_subscripts[Z_AXIS],
input_array_max_subscripts[Z_AXIS],
- out_of_range_tolerance[Z_AXIS],
MOLECULE_SIZE,
+ out_of_range_tolerance[Z_AXIS_MIN],
+ out_of_range_tolerance[Z_AXIS_MAX],
interp_coords_fp[Z_AXIS],
&z_temp,
(int *) NULL, (int *) NULL);