From 1786e2595727da2e193b2165fd032cebfddc89bd Mon Sep 17 00:00:00 2001 From: schnetter <> Date: Wed, 21 May 2003 12:31:00 +0000 Subject: Allow reducing grid arrays. darcs-hash:20030521123103-07bb3-b55fc535375111abe37293b2e9e4b907ed8f5e30.gz --- Carpet/CarpetReduce/src/reduce.cc | 103 +++++++++++++++++++++++++++++--------- 1 file changed, 79 insertions(+), 24 deletions(-) diff --git a/Carpet/CarpetReduce/src/reduce.cc b/Carpet/CarpetReduce/src/reduce.cc index eccc2737b..1a5bc0271 100644 --- a/Carpet/CarpetReduce/src/reduce.cc +++ b/Carpet/CarpetReduce/src/reduce.cc @@ -1,4 +1,4 @@ -// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/src/reduce.cc,v 1.22 2003/05/14 08:12:52 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/src/reduce.cc,v 1.23 2003/05/21 14:31:03 schnetter Exp $ #include #include @@ -22,7 +22,7 @@ #include "reduce.hh" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/src/reduce.cc,v 1.22 2003/05/14 08:12:52 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/src/reduce.cc,v 1.23 2003/05/21 14:31:03 schnetter Exp $"; CCTK_FILEVERSION(Carpet_CarpetReduce_reduce_cc); } @@ -664,19 +664,6 @@ namespace CarpetReduce { { int ierr; - // TODO: allow all modes for grid scalars and grid arrays, and - // restrict usage only for grid functions. - for (int n=0; n=0 && proc0); const int vi = invars[0]; assert (vi>=0 && vi=0); + + + int const reduce_arrays = CCTK_GroupTypeFromVarI(vi) != CCTK_GF; + + for (int n=0; n myoutvals (vartypesize * num_outvals); vector mycounts (vartypesize * num_outvals); Initialise (cgh, proc, num_outvals, &myoutvals[0], outtype, &mycounts[0], red); - int const saved_component = component; - if (component!=-1) { - set_component ((cGH*)cgh, -1); - } - BEGIN_LOCAL_COMPONENT_LOOP(cgh) { + if (reduce_arrays) { assert (grpdim<=dim); int lsh[dim], bbox[2*dim], nghostzones[dim]; @@ -761,10 +762,64 @@ namespace CarpetReduce { num_outvals, &myoutvals[0], outtype, &mycounts[0], red); - } END_LOCAL_COMPONENT_LOOP(cgh); - if (saved_component!=-1) { - set_component ((cGH*)cgh, saved_component); - } + } else { // ! reduce_arrays + + int const saved_component = component; + if (component!=-1) { + set_component ((cGH*)cgh, -1); + } + BEGIN_LOCAL_COMPONENT_LOOP(cgh) { + + assert (grpdim<=dim); + int lsh[dim], bbox[2*dim], nghostzones[dim]; + ierr = CCTK_GrouplshVI(cgh, grpdim, lsh, vi); + assert (!ierr); + ierr = CCTK_GroupbboxVI(cgh, 2*grpdim, bbox, vi); + assert (!ierr); + ierr = CCTK_GroupnghostzonesVI(cgh, grpdim, nghostzones, vi); + assert (!ierr); + for (int d=0; d=0); + assert (nghostzones[d]>=0 && 2*nghostzones[d]<=lsh[d]); + } + + vector inarrays (num_invars); + for (int n=0; n mylsh, mynghostzones; + vect,dim> mybbox; + for (int d=0; d