aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortradke <tradke@10716dce-81a3-4424-a2c8-48026a0d3035>2002-07-23 12:03:53 +0000
committertradke <tradke@10716dce-81a3-4424-a2c8-48026a0d3035>2002-07-23 12:03:53 +0000
commit1421c2a4b81217e4de274b7cc3098f71de841aa3 (patch)
treecac171f3a91d5288a9a0c1280a900273892d51fd /src
parent551b674d220f97ec8b2f56cdab7e3daebf38562b (diff)
Fixed a bug in datatype conversions. Now single-precision output should work
again. git-svn-id: http://svn.cactuscode.org/arrangements/CactusPUGH/PUGHSlab/trunk@89 10716dce-81a3-4424-a2c8-48026a0d3035
Diffstat (limited to 'src')
-rw-r--r--src/GetHyperslab.c31
1 files changed, 16 insertions, 15 deletions
diff --git a/src/GetHyperslab.c b/src/GetHyperslab.c
index d254915..8629e79 100644
--- a/src/GetHyperslab.c
+++ b/src/GetHyperslab.c
@@ -47,6 +47,7 @@ static int GetDiagonalFromFrom3D (const cGH *GH,
int vindex,
int timelevel,
int hdatatype,
+ t_hslabConversionFn conversion_fn,
void *hdata);
#ifdef CCTK_MPI
static void SortIntoUnchunkedHyperslab (const hslab_mapping_t *mapping,
@@ -390,14 +391,6 @@ static int GetLocalHyperslab (const cGH *GH,
return (-1);
}
- /* diagonals from 3D variables are treated special */
- if (mapping->is_diagonal_in_3D)
- {
- retval = GetDiagonalFromFrom3D (GH, mapping, vindex, timelevel, hdatatype,
- hdata);
- return (retval);
- }
-
/* if datatype conversion was requested
get the appropriate predefined datatype conversion routine
in case the user didn't supply one by her own */
@@ -425,6 +418,14 @@ static int GetLocalHyperslab (const cGH *GH,
conversion_fn = NULL;
}
+ /* diagonals from 3D variables are treated special */
+ if (mapping->is_diagonal_in_3D)
+ {
+ retval = GetDiagonalFromFrom3D (GH, mapping, vindex, timelevel, hdatatype,
+ conversion_fn, hdata);
+ return (retval);
+ }
+
/* allocate the temporary arrays */
point = (int *) malloc (5 * vinfo.dim * sizeof (int));
startpoint = point + 1*vinfo.dim;
@@ -529,9 +530,9 @@ static int GetLocalHyperslab (const cGH *GH,
in a row otherwise do it one by one */
if (downsample[0] == vdata_size)
{
- if (mapping->conversion_fn)
+ if (conversion_fn)
{
- mapping->conversion_fn (typed_vdata, typed_hdata, dim0_points, 1,1);
+ conversion_fn (typed_vdata, typed_hdata, dim0_points, 1,1);
}
else
{
@@ -540,10 +541,9 @@ static int GetLocalHyperslab (const cGH *GH,
}
else
{
- if (mapping->conversion_fn)
+ if (conversion_fn)
{
- mapping->conversion_fn (typed_vdata, typed_hdata, dim0_points,
- downsample[0], 1);
+ conversion_fn (typed_vdata, typed_hdata, dim0_points,downsample[0],1);
typed_vdata += downsample[0] * dim0_points;
}
else
@@ -583,6 +583,7 @@ static int GetDiagonalFromFrom3D (const cGH *GH,
int vindex,
int timelevel,
int hdatatype,
+ t_hslabConversionFn conversion_fn,
void *hdata)
{
int i, j, k, npoints, myproc, linear_idx;
@@ -611,9 +612,9 @@ static int GetDiagonalFromFrom3D (const cGH *GH,
k >= extras->ownership[0][0][2] && k < extras->ownership[0][1][2])
{
linear_idx = i + j*extras->hyper_volume[1] + k*extras->hyper_volume[2];
- if (vdatatype != hdatatype)
+ if (conversion_fn)
{
- mapping->conversion_fn (vdata + linear_idx*vdata_size, hdata, 1, 1, 1);
+ conversion_fn (vdata + linear_idx*vdata_size, hdata, 1, 1, 1);
}
else
{