aboutsummaryrefslogtreecommitdiff
path: root/src/Storage.c
diff options
context:
space:
mode:
authorschnetter <schnetter@b61c5cb5-eaca-4651-9a7a-d64986f99364>2003-11-21 15:27:24 +0000
committerschnetter <schnetter@b61c5cb5-eaca-4651-9a7a-d64986f99364>2003-11-21 15:27:24 +0000
commitf6a8262ccb22d44d19707bf25b39ebbe30f6c66a (patch)
tree6c0df81c905a58122e1f250fb0cc71938107c901 /src/Storage.c
parentd61946959b3663d95b31677378c0681a0eec303a (diff)
Allow vector groups of scalars.
Allow vector groups with more than one declared variable. Much of this patch consists of removing special case code for scalars. Scalars are now almost everywhere treated as rank 0 arrays. git-svn-id: http://svn.cactuscode.org/arrangements/CactusPUGH/PUGH/trunk@423 b61c5cb5-eaca-4651-9a7a-d64986f99364
Diffstat (limited to 'src/Storage.c')
-rw-r--r--src/Storage.c579
1 files changed, 73 insertions, 506 deletions
diff --git a/src/Storage.c b/src/Storage.c
index e702a08..d27e197 100644
--- a/src/Storage.c
+++ b/src/Storage.c
@@ -37,18 +37,10 @@ static int numberGF = 0; /* Number of GFs at max */
/********************************************************************
******************** Internal Routines ************************
********************************************************************/
-static int PUGH_EnableScalarGroupStorage (pGH *pughGH,
- int first_var,
- int n_variables,
- int n_timelevels);
static int PUGH_EnableGArrayGroupStorage (pGH *pughGH,
int first_var,
int n_variables,
int n_timelevels);
-static void PUGH_InitializeMemory (const char *initialize_memory,
- int vtype,
- int bytes,
- void *data);
static int PUGHi_EnableGArrayGroupStorage (pGH *pughGH,
@@ -57,25 +49,12 @@ static int PUGHi_EnableGArrayGroupStorage (pGH *pughGH,
int max_timelevels,
int n_timelevels);
-static int PUGHi_EnableScalarGroupStorage (pGH *pughGH,
- int first_var,
- int n_variables,
- int max_timelevels,
- int n_timelevels);
-
static int PUGHi_DisableGArrayGroupStorage (pGH *pughGH,
int first_var,
int n_variables,
int max_timelevels,
int n_timelevels);
-static int PUGHi_DisableScalarGroupStorage (pGH *pughGH,
- int first_var,
- int n_variables,
- int max_timelevels,
- int n_timelevels);
-
-static int PUGHi_NumTimeLevelsScalar(const pGH *pughGH, int var, int timelevels);
static int PUGHi_NumTimeLevelsArray(const pGH *pughGH, int var, int timelevels);
/********************************************************************
@@ -226,7 +205,6 @@ int PUGH_QueryGroupStorage (const cGH *GH, int group, const char *groupname)
int first_var;
int storage;
int grouptype;
- int vtypesize;
int retval;
pGH *pughGH;
@@ -244,20 +222,7 @@ int PUGH_QueryGroupStorage (const cGH *GH, int group, const char *groupname)
{
pughGH = PUGH_pGH (GH);
grouptype = CCTK_GroupTypeI (group);
- if (grouptype == CCTK_SCALAR)
- {
- vtypesize = CCTK_VarTypeSize (CCTK_VarTypeI (first_var));
- storage = ((char *) pughGH->variables[first_var][0])[vtypesize];
- }
- else if (grouptype == CCTK_GF || grouptype == CCTK_ARRAY)
- {
- storage = ((pGA *) pughGH->variables[first_var][0])->storage;
- }
- else
- {
- storage = -1;
- CCTK_WARN (1, "Unknown group type in PUGH_QueryGroupStorage");
- }
+ storage = ((pGA *) pughGH->variables[first_var][0])->storage;
if (storage == PUGH_STORAGE)
{
@@ -302,7 +267,6 @@ int PUGH_QueryGroupStorage (const cGH *GH, int group, const char *groupname)
@enddesc
@calls CCTK_GroupIndex
CCTK_GroupData
- PUGH_EnableScalarGroupStorage
PUGH_EnableGArrayGroupStorage
@var GH
@@ -318,8 +282,7 @@ int PUGH_QueryGroupStorage (const cGH *GH, int group, const char *groupname)
@returntype int
@returndesc
- return code of @seeroutine PUGH_EnableScalarGroupStorage or
- @seeroutine PUGH_EnableGArrayGroupStorage: <BR>
+ return code of @seeroutine PUGH_EnableGArrayGroupStorage: <BR>
1 if storage was already enabled, or <BR>
0 if storage was successfully enabled <BR>
-1 if group type is not one of the above <BR>
@@ -353,55 +316,39 @@ int PUGH_EnableGroupStorage (const cGH *GH, const char *groupname)
/* get the group info from its index */
CCTK_GroupData (group, &pgroup);
- if (pgroup.grouptype == CCTK_SCALAR)
+ retval = PUGH_EnableGArrayGroupStorage (pughGH,
+ first_var,
+ pgroup.numvars,
+ pgroup.numtimelevels);
+ if (!CCTK_Equals(storage_verbose,"no") && retval == 0)
{
- retval = PUGH_EnableScalarGroupStorage (pughGH,
- first_var,
- pgroup.numvars,
- pgroup.numtimelevels);
- }
- else if (pgroup.grouptype == CCTK_GF || pgroup.grouptype == CCTK_ARRAY)
- {
- retval = PUGH_EnableGArrayGroupStorage (pughGH,
- first_var,
- pgroup.numvars,
- pgroup.numtimelevels);
- if (!CCTK_Equals(storage_verbose,"no") && retval == 0)
+ /* get GA pointer of first var in group */
+ GA = (pGA *) pughGH->variables[first_var][0];
+ if (pgroup.grouptype == CCTK_GF)
{
- /* get GA pointer of first var in group */
- GA = (pGA *) pughGH->variables[first_var][0];
- if (pgroup.grouptype == CCTK_GF)
- {
- totalnumberGF += pgroup.numvars * pgroup.numtimelevels;
- }
- else
- {
- totalnumberGA += pgroup.numvars * pgroup.numtimelevels;
- }
- totalstorage += (GA->extras->npoints * GA->varsize *
- pgroup.numtimelevels * pgroup.numvars) /
- (float) (1024*1024);
- if (totalstorage > maxstorage)
- {
- numberGF = totalnumberGF;
- numberGA = totalnumberGA;
- maxstorage = totalstorage;
- }
-
- /* Report on memory usage */
- if (CCTK_Equals(storage_verbose,"yes"))
- {
- CCTK_VInfo (CCTK_THORNSTRING, "Switched memory on for group '%s'"
- " [GFs: %d GAs: %d Total Size: %6.2fMB]",
- groupname, totalnumberGF, totalnumberGA, totalstorage);
- }
+ totalnumberGF += pgroup.numvars * pgroup.numtimelevels;
+ }
+ else
+ {
+ totalnumberGA += pgroup.numvars * pgroup.numtimelevels;
+ }
+ totalstorage += (GA->extras->npoints * GA->varsize *
+ pgroup.numtimelevels * pgroup.numvars) /
+ (float) (1024*1024);
+ if (totalstorage > maxstorage)
+ {
+ numberGF = totalnumberGF;
+ numberGA = totalnumberGA;
+ maxstorage = totalstorage;
}
- }
- else
- {
- CCTK_WARN (1, "PUGH_EnableGroupStorage: Unknown group type");
- retval = -1;
+ /* Report on memory usage */
+ if (CCTK_Equals(storage_verbose,"yes"))
+ {
+ CCTK_VInfo (CCTK_THORNSTRING, "Switched memory on for group '%s'"
+ " [GFs: %d GAs: %d Total Size: %6.2fMB]",
+ groupname, totalnumberGF, totalnumberGA, totalstorage);
+ }
}
}
@@ -461,11 +408,10 @@ int PUGH_DisableGroupStorage (const cGH *GH, const char *groupname)
DECLARE_CCTK_PARAMETERS
int group; /* group index */
cGroup pgroup; /* group information */
- int vtypesize, retval;
+ int retval;
pGA ***variables;
int first_var, var, level;
int unchanged; /* count how many aren't toggled */
- char *temp;
#ifdef DEBUG_PUGH
@@ -485,40 +431,13 @@ int PUGH_DisableGroupStorage (const cGH *GH, const char *groupname)
unchanged = 0;
retval = 1;
- if (pgroup.grouptype == CCTK_GF || pgroup.grouptype == CCTK_ARRAY)
- {
- for (var = first_var; var < first_var+pgroup.numvars; var++)
- {
- for (level = 0; level < pgroup.numtimelevels; level++)
- {
- unchanged += PUGH_DisableGArrayDataStorage (variables[var][level]);
- }
- }
- }
- else if (pgroup.grouptype == CCTK_SCALAR)
+ for (var = first_var; var < first_var+pgroup.numvars; var++)
{
- vtypesize = CCTK_VarTypeSize (pgroup.vartype);
- for (var = first_var; var < first_var+pgroup.numvars; var++)
+ for (level = 0; level < pgroup.numtimelevels; level++)
{
- for (level = 0; level < pgroup.numtimelevels; level++)
- {
- temp = (char *) variables[var][level];
- if (temp[vtypesize] == PUGH_STORAGE)
- {
- temp[vtypesize] = PUGH_NOSTORAGE;
- }
- else
- {
- unchanged++;
- }
- }
+ unchanged += PUGH_DisableGArrayDataStorage (variables[var][level]);
}
}
- else
- {
- CCTK_WARN (1, "Unknown group type in PUGH_DisableGroupStorage");
- retval = -1;
- }
/* Report on memory usage */
if (!CCTK_Equals(storage_verbose,"no") && retval >= 0)
@@ -531,7 +450,7 @@ int PUGH_DisableGroupStorage (const cGH *GH, const char *groupname)
{
totalnumberGF -= pgroup.numvars;
}
- else if (pgroup.grouptype == CCTK_ARRAY)
+ else
{
totalnumberGA -= pgroup.numvars;
}
@@ -607,86 +526,6 @@ float PUGH_ReturnMaxStorage(void)
********************************************************************/
/*@@
- @routine PUGH_EnableScalarGroupStorage
- @author Thomas Radke
- @date Thu 30 Aug 2001
- @desc
- Enables storage for a group of CCTK_SCALAR variables
- 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 pughGH
- @vdesc Pointer to PUGH GH extensions
- @vtype pGH *
- @vio in
- @endvar
- @var first_var
- @vdesc index of the first variable to enable storage for
- @vtype int
- @vio in
- @endvar
- @var n_variables
- @vdesc total number of variables to enable storage for
- @vtype int
- @vio in
- @endvar
- @var n_timelevels
- @vdesc total number of timelevels to enable storage for
- @vtype int
- @vio in
- @endvar
-
- @returntype int
- @returndesc
- 1 if storage was already enabled before
- 0 if storage was successfully enabled
- @endreturndesc
-@@*/
-static int PUGH_EnableScalarGroupStorage (pGH *pughGH,
- int first_var,
- int n_variables,
- int n_timelevels)
-{
- DECLARE_CCTK_PARAMETERS
- int vtype, vtypesize, variable, level, retval;
- void *temp;
-
-
- vtype = CCTK_VarTypeI (first_var);
- vtypesize = CCTK_VarTypeSize (vtype);
- temp = pughGH->variables[first_var][0];
- retval = ((char *) temp)[vtypesize] == PUGH_STORAGE;
-
- /* don't assign storage if was already switched on */
- if (! retval)
- {
- for (variable = 0; variable < n_variables; variable++)
- {
- for (level = 0; level < n_timelevels; level++)
- {
- temp = pughGH->variables[variable+first_var][level];
-
- /* raise the query_storage flag */
- ((char *) temp)[vtypesize] = PUGH_STORAGE;
-
- /* initialize memory if desired */
- if (! CCTK_Equals (initialize_memory, "none"))
- {
- PUGH_InitializeMemory (initialize_memory, vtype, vtypesize, temp);
- }
- }
- }
- }
-
- return (retval);
-}
-
-
- /*@@
@routine PUGH_EnableGArrayGroupStorage
@author Tom Goodale
@date 30 Mar 1999
@@ -897,9 +736,14 @@ static int PUGH_EnableGArrayGroupStorage (pGH *pughGH,
GA->extras->npoints * GA->varsize * GA->vector_size,
&GA->padddata);
}
+#ifdef DEBUG_PUGH
+ printf (" PUGH_EnableGArrayDataStorage: new pointer is %p (%p)\n",
+ GA->padddata, GA->data);
+ fflush (stdout);
+#endif
/* Initialize the memory if desired. */
- if (GA->data && ! CCTK_Equals (initialize_memory, "none"))
+ if (GA->data)
{
PUGH_InitializeMemory (initialize_memory, GA->vtype,
GA->extras->npoints * GA->varsize, GA->data);
@@ -953,7 +797,7 @@ static int PUGH_EnableGArrayGroupStorage (pGH *pughGH,
{
#ifdef DEBUG_PUGH
- printf ("PUGH_DisableGArrayDataStorage: freeing storage for var '%s'\n",
+ printf (" PUGH_DisableGArrayDataStorage: freeing storage for var '%s'\n",
GA->name);
fflush (stdout);
#endif
@@ -966,6 +810,11 @@ static int PUGH_EnableGArrayGroupStorage (pGH *pughGH,
{
if (GA->padddata)
{
+#ifdef DEBUG_PUGH
+ printf (" PUGH_DisableGArrayDataStorage: old pointer is %p (%p)\n",
+ GA->padddata, GA->data);
+ fflush (stdout);
+#endif
free (GA->padddata);
}
GA->padddata = NULL;
@@ -988,7 +837,7 @@ static int PUGH_EnableGArrayGroupStorage (pGH *pughGH,
or NaNs (floating point types only)
@enddesc
- @var initialize_memory
+ @var do_initialize_memory
@vdesc keyword describing how to initialize memory
@vtype const char *
@vio in
@@ -1009,21 +858,22 @@ static int PUGH_EnableGArrayGroupStorage (pGH *pughGH,
@vio in
@endvar
@@*/
-static void PUGH_InitializeMemory (const char *initialize_memory,
- int vtype,
- int bytes,
- void *data)
+void PUGH_InitializeMemory (const char *do_initialize_memory,
+ int vtype,
+ int bytes,
+ void *data)
{
+ DECLARE_CCTK_PARAMETERS;
const char *vtypename;
/* zero out variable */
- if (CCTK_Equals (initialize_memory, "zero"))
+ if (CCTK_Equals (do_initialize_memory, "zero"))
{
memset (data, 0, bytes);
}
/* set elements to Not-a-Number values (floating point variables only) */
- else if (CCTK_Equals (initialize_memory, "NaN"))
+ else if (CCTK_Equals (do_initialize_memory, "NaN"))
{
vtypename = CCTK_VarTypeName (vtype);
if (strncmp (vtypename, "CCTK_VARIABLE_REAL", 18) == 0 ||
@@ -1032,11 +882,11 @@ static void PUGH_InitializeMemory (const char *initialize_memory,
memset (data, -1, bytes);
}
}
- else if (! CCTK_Equals (initialize_memory, "none"))
+ else if (! CCTK_Equals (do_initialize_memory, "none"))
{
CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
"InitializeMemory: Unknown value '%s' for "
- "argument 'initialize_memory'", initialize_memory);
+ "argument 'do_initialize_memory'", do_initialize_memory);
}
}
@@ -1071,8 +921,7 @@ void PUGHi_PrintStorageReport ()
not change the storage for that group.
@enddesc
- @calls PUGHi_EnableScalarGroupStorage
- PUGHi_EnableGArrayGroupStorage
+ @calls PUGHi_EnableGArrayGroupStorage
@var GH
@vdesc Pointer to CCTK grid hierarchy
@@ -1149,27 +998,11 @@ int PUGH_GroupStorageIncrease(const cGH *GH, int n_groups,const int *groups,cons
tlevels = timelevels[group];
}
- if (pgroup.grouptype == CCTK_SCALAR)
- {
- previous = PUGHi_EnableScalarGroupStorage (pughGH,
- first_var,
- pgroup.numvars,
- pgroup.numtimelevels,
- tlevels);
- }
- else if (pgroup.grouptype == CCTK_GF || pgroup.grouptype == CCTK_ARRAY)
- {
- previous = PUGHi_EnableGArrayGroupStorage (pughGH,
- first_var,
- pgroup.numvars,
- pgroup.numtimelevels,
- tlevels);
- }
- else
- {
- CCTK_WARN (1, "PUGH_GroupStorageIncrease: Unknown group type");
- previous = 0;
- }
+ previous = PUGHi_EnableGArrayGroupStorage (pughGH,
+ first_var,
+ pgroup.numvars,
+ pgroup.numtimelevels,
+ tlevels);
if(status)
{
@@ -1198,8 +1031,7 @@ int PUGH_GroupStorageIncrease(const cGH *GH, int n_groups,const int *groups,cons
not change the storage for that group.
@enddesc
- @calls PUGHi_DisableScalarGroupStorage
- PUGHi_DisableGArrayGroupStorage
+ @calls PUGHi_DisableGArrayGroupStorage
@var GH
@vdesc Pointer to CCTK grid hierarchy
@@ -1276,27 +1108,11 @@ int PUGH_GroupStorageDecrease(const cGH *GH, int n_groups,const int *groups,cons
tlevels = timelevels[group];
}
- if (pgroup.grouptype == CCTK_SCALAR)
- {
- previous = PUGHi_DisableScalarGroupStorage (pughGH,
- first_var,
- pgroup.numvars,
- pgroup.numtimelevels,
- tlevels);
- }
- else if (pgroup.grouptype == CCTK_GF || pgroup.grouptype == CCTK_ARRAY)
- {
- previous = PUGHi_DisableGArrayGroupStorage (pughGH,
- first_var,
- pgroup.numvars,
- pgroup.numtimelevels,
- tlevels);
- }
- else
- {
- CCTK_WARN (1, "PUGH_GroupStorageIncrease: Unknown group type");
- previous = 0;
- }
+ previous = PUGHi_DisableGArrayGroupStorage (pughGH,
+ first_var,
+ pgroup.numvars,
+ pgroup.numtimelevels,
+ tlevels);
if(status)
{
@@ -1381,7 +1197,7 @@ static int PUGHi_EnableGArrayGroupStorage (pGH *pughGH,
if(level < n_timelevels)
{
#ifdef DEBUG_PUGH
- printf (" PUGH_EnableGArrayGroupStorage: request for var '%s' "
+ printf (" PUGHi_EnableGArrayGroupStorage: request for var '%s' "
"timelevel %d\n", GA->name, level);
fflush (stdout);
#endif
@@ -1512,193 +1328,13 @@ static int PUGHi_DisableGArrayGroupStorage (pGH *pughGH,
}
/*@@
- @routine PUGHi_EnableScalarGroupStorage
- @author Thomas Radke
- @date Thu 30 Aug 2001
- @desc
- Enables storage for a group of CCTK_SCALAR variables
- 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 pughGH
- @vdesc Pointer to PUGH GH extensions
- @vtype pGH *
- @vio in
- @endvar
- @var first_var
- @vdesc index of the first variable to enable storage for
- @vtype int
- @vio in
- @endvar
- @var n_variables
- @vdesc total number of variables to enable storage for
- @vtype int
- @vio in
- @endvar
- @var max_timelevels
- @vdesc total number of timelevels for this group
- @vtype int
- @vio in
- @var n_timelevels
- @vdesc number of timelevels to enable storage for
- @vtype int
- @vio in
- @endvar
-
- @returntype int
- @returndesc
- The number of timelevels enabled previously
- @endreturndesc
-@@*/
-static int PUGHi_EnableScalarGroupStorage (pGH *pughGH,
- int first_var,
- int n_variables,
- int max_timelevels,
- int n_timelevels)
-{
- DECLARE_CCTK_PARAMETERS
- int vtype, vtypesize, variable, level, retval;
- void *temp;
-
- retval = 0;
- vtype = CCTK_VarTypeI (first_var);
- vtypesize = CCTK_VarTypeSize (vtype);
-
- for (variable = 0; variable < n_variables; variable++)
- {
- for (level = 0; level < max_timelevels; level++)
- {
- temp = pughGH->variables[variable+first_var][level];
-
- if(((char *) temp)[vtypesize] != PUGH_STORAGE)
- {
- if(level < n_timelevels)
- {
- /* raise the query_storage flag */
- ((char *) temp)[vtypesize] = PUGH_STORAGE;
-
- /* initialize memory if desired */
- if (! CCTK_Equals (initialize_memory, "none"))
- {
- PUGH_InitializeMemory (initialize_memory, vtype, vtypesize, temp);
- }
- }
- }
- else
- {
- if(variable == 0)
- {
- retval++;
- }
- }
-
- /* set the variable's data pointer in the cGH structure */
- ((cGH *) pughGH->callerid)->data[variable+first_var][level] = temp;
- }
- }
-
- return retval;
-}
-
-
- /*@@
- @routine PUGHi_DisableScalarGroupStorage
- @author Thomas Radke
- @date Thu 30 Aug 2001
- @desc
- Disables storage for a group of CCTK_SCALAR variables
- 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 pughGH
- @vdesc Pointer to PUGH GH extensions
- @vtype pGH *
- @vio in
- @endvar
- @var first_var
- @vdesc index of the first variable to disable storage for
- @vtype int
- @vio in
- @endvar
- @var n_variables
- @vdesc total number of variables to disable storage for
- @vtype int
- @vio in
- @endvar
- @var max_timelevels
- @vdesc total number of timelevels for this group
- @vtype int
- @vio in
- @var n_timelevels
- @vdesc number of timelevels to disable storage for
- @vtype int
- @vio in
- @endvar
-
- @returntype int
- @returndesc
- The number of timelevels disabled previously
- @endreturndesc
-@@*/
-static int PUGHi_DisableScalarGroupStorage (pGH *pughGH,
- int first_var,
- int n_variables,
- int max_timelevels,
- int n_timelevels)
-{
- int vtypesize, variable, level, retval;
- void *temp;
- DECLARE_CCTK_PARAMETERS
-
- retval = 0;
-
- vtypesize = CCTK_VarTypeSize (CCTK_VarTypeI (first_var));
-
- for (variable = 0; variable < n_variables; variable++)
- {
- for (level = 0; level < max_timelevels; level++)
- {
- temp = pughGH->variables[variable+first_var][level];
-
- if(((char *) temp)[vtypesize] != PUGH_NOSTORAGE)
- {
- if(variable == 0)
- {
- retval++;
- }
-
- if(level >= n_timelevels)
- {
- /* set the storage flag to no-storage*/
- ((char *) temp)[vtypesize] = PUGH_NOSTORAGE;
-
- /* set the variable's data pointer in the cGH structure */
- ((cGH *) pughGH->callerid)->data[variable+first_var][level] = NULL;
- }
- }
- }
- }
-
- return retval;
-}
-
- /*@@
@routine PUGH_NumTimeLevels
@date Tue Apr 16 19:03:30 2002
@author Tom Goodale
@desc
Work out the number of enabled timelevels for a variable.
@enddesc
- @calls PUGHi_NumTimeLevelsScalar
- PUGHi_NumTimeLevelsArray
+ @calls PUGHi_NumTimeLevelsArray
@var pughGH
@vdesc a PUGH GH
@@ -1722,76 +1358,7 @@ int PUGH_NumTimeLevels(const pGH *pughGH, int var)
timelevels = CCTK_MaxTimeLevelsVI(var);
- switch(CCTK_GroupTypeFromVarI(var))
- {
- case CCTK_SCALAR:
- retval = PUGHi_NumTimeLevelsScalar(pughGH, var, timelevels);
- break;
- case CCTK_GF:
- /* Fall through. */
- case CCTK_ARRAY:
- retval = PUGHi_NumTimeLevelsArray(pughGH, var, timelevels);
- break;
- default:
- retval = -1;
- }
-
- return retval;
-}
-
- /*@@
- @routine PUGH_NumTimeLevelsScalar
- @date Tue Apr 16 19:03:30 2002
- @author Tom Goodale
- @desc
- Work out the number of enabled timelevels for a scalar variable.
- @enddesc
-
- @var pughGH
- @vdesc a PUGH GH
- @vtype const pGH *
- @vio in
- @var var
- @vdesc The variable index to get the info for
- @vtype int
- @vio in
- @var timelevels
- @vdesc The maximum number of timelevels the variable can have
- @vtype int
- @vio in
-
- @returntype int
- @returndesc
- The number of timelevels enabled for this variable
- @endreturndesc
- @@*/
-static int PUGHi_NumTimeLevelsScalar(const pGH *pughGH, int var, int timelevels)
-{
- int retval;
-
- int vtype;
- int vtypesize;
- int level;
- void *temp;
-
- retval = 0;
-
- vtype = CCTK_VarTypeI (var);
- vtypesize = CCTK_VarTypeSize (vtype);
-
- for (level = 0; level < timelevels; level++)
- {
- temp = pughGH->variables[var][level];
-
- if(((char *) temp)[vtypesize] == PUGH_STORAGE)
- {
- retval++;
- }
- else
- {
- break;
- }
- }
+ retval = PUGHi_NumTimeLevelsArray(pughGH, var, timelevels);
return retval;
}