aboutsummaryrefslogtreecommitdiff
path: root/src/SetupGroup.c
diff options
context:
space:
mode:
authortradke <tradke@b61c5cb5-eaca-4651-9a7a-d64986f99364>2001-09-01 10:20:37 +0000
committertradke <tradke@b61c5cb5-eaca-4651-9a7a-d64986f99364>2001-09-01 10:20:37 +0000
commit64cfbb459bda999fc1153ec2a1995fb8dfab1515 (patch)
treed9aac2fa1a67c65bbb18a59bf7defb6d8f44dc93 /src/SetupGroup.c
parent6ca9d86c3032ba54c1e935d00c6331699e27d896 (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.c114
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
{