From 1421c2a4b81217e4de274b7cc3098f71de841aa3 Mon Sep 17 00:00:00 2001 From: tradke Date: Tue, 23 Jul 2002 12:03:53 +0000 Subject: 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 --- src/GetHyperslab.c | 31 ++++++++++++++++--------------- 1 file 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 { -- cgit v1.2.3