diff options
author | tradke <tradke@b61c5cb5-eaca-4651-9a7a-d64986f99364> | 2001-09-01 10:20:37 +0000 |
---|---|---|
committer | tradke <tradke@b61c5cb5-eaca-4651-9a7a-d64986f99364> | 2001-09-01 10:20:37 +0000 |
commit | 64cfbb459bda999fc1153ec2a1995fb8dfab1515 (patch) | |
tree | d9aac2fa1a67c65bbb18a59bf7defb6d8f44dc93 /src/SetupGroup.c | |
parent | 6ca9d86c3032ba54c1e935d00c6331699e27d896 (diff) |
Fixed bug for scalar group storage allocation within schedule groups.
This closes PR CactusPUGH-PUGH 782 and Cactus 781.
git-svn-id: http://svn.cactuscode.org/arrangements/CactusPUGH/PUGH/trunk@343 b61c5cb5-eaca-4651-9a7a-d64986f99364
Diffstat (limited to 'src/SetupGroup.c')
-rw-r--r-- | src/SetupGroup.c | 114 |
1 files changed, 70 insertions, 44 deletions
diff --git a/src/SetupGroup.c b/src/SetupGroup.c index 3cf4d57..e3fffc3 100644 --- a/src/SetupGroup.c +++ b/src/SetupGroup.c @@ -2,9 +2,9 @@ @file SetupGroup.c @date Mon Feb 8 19:31:45 1999 @author Tom Goodale - @desc + @desc Subroutines for setting up a group on a pGH. - @enddesc + @enddesc @version $Id$ @@*/ @@ -19,22 +19,22 @@ static const char *rcsid = "$Header$"; CCTK_FILEVERSION (CactusPUGH_PUGH_SetupGroup_c) - + /******************************************************************** ******************** Internal Routines ************************ ********************************************************************/ -static int PUGH_SetupScalarGroup (pGH *newGH, +static int PUGH_SetupScalarGroup (pGH *newGH, int vtype, int n_variables, int n_timelevels); -static int PUGH_SetupGAGroup (pGH *newGH, - int *nsize, +static int PUGH_SetupGAGroup (pGH *newGH, + int *nsize, int *ghostsize, - int gtype, - int vtype, - int dim, - int n_variables, - int staggercode, + int gtype, + int vtype, + int dim, + int n_variables, + int staggercode, int n_timelevels); @@ -42,9 +42,14 @@ static int PUGH_SetupGAGroup (pGH *newGH, @routine PUGH_SetupScalarGroup @date Wed Feb 17 04:45:49 1999 @author Tom Goodale - @desc + @desc Set up a group of scalar variables on a pGH. - @enddesc + For efficiency reasons, PUGH allocates storage for scalars + only once when the group is created. + The current state of storage allocation (which is toggled by + Enable/DisableGroupStorage) is stored in a byte-sized flag + immediately after the scalar data. + @enddesc @var newGH @vdesc Pointer to PUGH grid hierarchy @@ -73,13 +78,13 @@ static int PUGH_SetupGAGroup (pGH *newGH, PUGH_ERRORMEMORY (negative) if memory allocation failed @endreturndesc @@*/ -static int PUGH_SetupScalarGroup (pGH *newGH, +static int PUGH_SetupScalarGroup (pGH *newGH, int vtype, int n_variables, int n_timelevels) { DECLARE_CCTK_PARAMETERS - int variable, retval; + int variable, level, vtypesize, retval; void *temp; @@ -90,18 +95,35 @@ static int PUGH_SetupScalarGroup (pGH *newGH, if (temp) { newGH->variables = (void ***) temp; + vtypesize = CCTK_VarTypeSize (vtype); - for (variable = 0; variable < n_variables; variable++) + for (variable = 0; variable < n_variables && retval == 0; variable++) { - temp = (void **) calloc (n_timelevels, sizeof (void *)); + temp = malloc (n_timelevels * sizeof (void *)); if (temp) { - newGH->variables[newGH->nvariables++] = (void **) temp; + newGH->variables[newGH->nvariables + variable] = (void **) temp; + for (level = 0; level < n_timelevels; level++) + { + /* allocate one more byte for the query_storage flag */ + temp = malloc (vtypesize + 1); + if (temp) + { + newGH->variables[newGH->nvariables + variable][level] = temp; + + /* reset the query_storage flag */ + ((char *) temp)[vtypesize] = PUGH_NOSTORAGE; + } + else + { + retval = PUGH_ERRORMEMORY; + break; + } + } } else { retval = PUGH_ERRORMEMORY; - break; } } } @@ -110,7 +132,11 @@ static int PUGH_SetupScalarGroup (pGH *newGH, retval = PUGH_ERRORMEMORY; } - if (retval) + if (! retval) + { + newGH->nvariables += n_variables; + } + else { CCTK_WARN (1, "Memory allocation error in PUGH_SetupScalarGroup"); } @@ -123,10 +149,10 @@ static int PUGH_SetupScalarGroup (pGH *newGH, @routine PUGH_SetupGAGroup @date January 19 2000 @author Gabrielle Allen - @desc + @desc Set up a group of grid array variables (CCTK_GF or CCTK_ARRAY types) on a pGH. - @enddesc + @enddesc @calls CCTK_VarTypeSize PUGH_SetupConnectivity PUGH_SetupPGExtras @@ -185,14 +211,14 @@ static int PUGH_SetupScalarGroup (pGH *newGH, PUGH_ERRORMEMORY (negative) if memory allocation failed @endreturndesc @@*/ -static int PUGH_SetupGAGroup (pGH *newGH, - int *nsize, +static int PUGH_SetupGAGroup (pGH *newGH, + int *nsize, int *ghostsize, - int gtype, - int vtype, - int dim, - int n_variables, - int staggercode, + int gtype, + int vtype, + int dim, + int n_variables, + int staggercode, int n_timelevels) { int i; @@ -235,7 +261,7 @@ static int PUGH_SetupGAGroup (pGH *newGH, connectivity = PUGH_SetupConnectivity (dim, newGH->nprocs, nprocs, perme); - extras = PUGH_SetupPGExtras (dim, + extras = PUGH_SetupPGExtras (dim, perme, staggercode, nsize, @@ -287,12 +313,12 @@ static int PUGH_SetupGAGroup (pGH *newGH, { for (level = 0; level < n_timelevels; level++) { - newGH->variables[newGH->nvariables][level] = + newGH->variables[newGH->nvariables][level] = PUGH_SetupGArray (newGH, extras, connectivity, groupcomm, - CCTK_VarName (newGH->nvariables), + CCTK_VarName (newGH->nvariables), newGH->nvariables, newGH->narrays, var_size, @@ -313,7 +339,7 @@ static int PUGH_SetupGAGroup (pGH *newGH, { retval = PUGH_ERRORMEMORY; } - + if (retval) { CCTK_WARN (1, "Memory allocation error in PUGH_SetupGAGroup"); @@ -327,9 +353,9 @@ static int PUGH_SetupGAGroup (pGH *newGH, @routine PUGH_SetupGroup @date Mon Feb 8 19:37:55 1999 @author Tom Goodale - @desc + @desc Sets up a group on a pGH - @enddesc + @enddesc @calls PUGH_SetupScalarGroup PUGH_SetupGAGroup @@ -386,14 +412,14 @@ static int PUGH_SetupGAGroup (pGH *newGH, PUGH_ERROR if invalid group type was passed in @endreturndesc @@*/ -int PUGH_SetupGroup (pGH *newGH, - int *nsize, +int PUGH_SetupGroup (pGH *newGH, + int *nsize, int *nghostsize, - int gtype, - int vtype, - int dim, - int n_variables, - int staggercode, + int gtype, + int vtype, + int dim, + int n_variables, + int staggercode, int n_timelevels) { int retval; @@ -401,12 +427,12 @@ int PUGH_SetupGroup (pGH *newGH, if (gtype == CCTK_SCALAR) { - retval = PUGH_SetupScalarGroup (newGH, vtype, n_variables, n_timelevels); + retval = PUGH_SetupScalarGroup (newGH, vtype, n_variables, n_timelevels); } else if (gtype == CCTK_ARRAY || gtype == CCTK_GF) { retval = PUGH_SetupGAGroup (newGH, nsize, nghostsize, gtype, vtype, dim, - n_variables, staggercode, n_timelevels); + n_variables, staggercode, n_timelevels); } else { |