aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgoodale <goodale@b61c5cb5-eaca-4651-9a7a-d64986f99364>2001-10-07 10:06:32 +0000
committergoodale <goodale@b61c5cb5-eaca-4651-9a7a-d64986f99364>2001-10-07 10:06:32 +0000
commite8cdd90785ee3239b9ba8ffdb974d1b3450f231c (patch)
treeae70f698996c2451c6505dddb121089c2d69db5c
parent21374b8c6a67f5d8ddf11a14a2353b7ee11c0054 (diff)
Preliminary support for 'vector' Grid Variables (see commits to interface_parser.ccl for
syntax). Works for GFs and GAs, but not implemented yet for GSs. Please treat this as volatile until it is documented, and let me know if you are using it. Tom git-svn-id: http://svn.cactuscode.org/arrangements/CactusPUGH/PUGH/trunk@351 b61c5cb5-eaca-4651-9a7a-d64986f99364
-rw-r--r--src/GHExtension.c2
-rw-r--r--src/SetupGroup.c41
-rw-r--r--src/SetupPGV.c9
-rw-r--r--src/Storage.c110
-rw-r--r--src/include/pGV.h3
-rw-r--r--src/include/pugh.h19
-rw-r--r--src/include/pughi.h9
7 files changed, 124 insertions, 69 deletions
diff --git a/src/GHExtension.c b/src/GHExtension.c
index e427de2..505b8fb 100644
--- a/src/GHExtension.c
+++ b/src/GHExtension.c
@@ -149,7 +149,7 @@ void *PUGH_SetupGH (tFleshConfig *config,
PUGH_SetupGroup (newGH, groupsize, groupghostsize, pgroup.grouptype,
pgroup.vartype, pgroup.dim, pgroup.numvars,
- pgroup.stagtype, pgroup.numtimelevels);
+ pgroup.stagtype, pgroup.numtimelevels,pgroup.vectorgroup);
}
/* clean up */
diff --git a/src/SetupGroup.c b/src/SetupGroup.c
index e3fffc3..c2a8bab 100644
--- a/src/SetupGroup.c
+++ b/src/SetupGroup.c
@@ -26,7 +26,9 @@ CCTK_FILEVERSION (CactusPUGH_PUGH_SetupGroup_c)
static int PUGH_SetupScalarGroup (pGH *newGH,
int vtype,
int n_variables,
- int n_timelevels);
+ int n_timelevels,
+ int vectorgroup);
+
static int PUGH_SetupGAGroup (pGH *newGH,
int *nsize,
int *ghostsize,
@@ -35,7 +37,8 @@ static int PUGH_SetupGAGroup (pGH *newGH,
int dim,
int n_variables,
int staggercode,
- int n_timelevels);
+ int n_timelevels,
+ int vectorgroup);
/*@@
@@ -71,6 +74,11 @@ static int PUGH_SetupGAGroup (pGH *newGH,
@vtype int
@vio in
@endvar
+ @var vectorgroup
+ @vdesc is this a vector group ?
+ @vtype int
+ @vio in
+ @endvar
@returntype int
@returndesc
@@ -81,7 +89,8 @@ static int PUGH_SetupGAGroup (pGH *newGH,
static int PUGH_SetupScalarGroup (pGH *newGH,
int vtype,
int n_variables,
- int n_timelevels)
+ int n_timelevels,
+ int vectorgroup)
{
DECLARE_CCTK_PARAMETERS
int variable, level, vtypesize, retval;
@@ -204,6 +213,11 @@ static int PUGH_SetupScalarGroup (pGH *newGH,
@vtype int
@vio in
@endvar
+ @var vectorgroup
+ @vdesc is this a vector group ?
+ @vtype int
+ @vio in
+ @endvar
@returntype int
@returndesc
@@ -219,7 +233,8 @@ static int PUGH_SetupGAGroup (pGH *newGH,
int dim,
int n_variables,
int staggercode,
- int n_timelevels)
+ int n_timelevels,
+ int vectorgroup)
{
int i;
int variable;
@@ -323,7 +338,10 @@ static int PUGH_SetupGAGroup (pGH *newGH,
newGH->narrays,
var_size,
vtype,
- staggercode);
+ staggercode,
+ vectorgroup ? n_variables : 1,
+ variable,
+ variable > 0 ? newGH->variables[newGH->nvariables-variable][level] : NULL);
newGH->narrays++;
}
newGH->nvariables++;
@@ -404,6 +422,11 @@ static int PUGH_SetupGAGroup (pGH *newGH,
@vtype int
@vio in
@endvar
+ @var vectorgroup
+ @vdesc is this a vector group ?
+ @vtype int
+ @vio in
+ @endvar
@returntype int
@returndesc
@@ -420,19 +443,19 @@ int PUGH_SetupGroup (pGH *newGH,
int dim,
int n_variables,
int staggercode,
- int n_timelevels)
+ int n_timelevels,
+ int vectorgroup)
{
int retval;
-
if (gtype == CCTK_SCALAR)
{
- retval = PUGH_SetupScalarGroup (newGH, vtype, n_variables, n_timelevels);
+ retval = PUGH_SetupScalarGroup (newGH, vtype, n_variables, n_timelevels, vectorgroup);
}
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,vectorgroup);
}
else
{
diff --git a/src/SetupPGV.c b/src/SetupPGV.c
index ba8496b..86233c2 100644
--- a/src/SetupPGV.c
+++ b/src/SetupPGV.c
@@ -1475,7 +1475,10 @@ pGA *PUGH_SetupGArray(void *parent,
int arrayid,
int varsize,
int vtype,
- int stagger)
+ int stagger,
+ int vector_size,
+ int vector_entry,
+ pGA *vector_base)
{
pGA *this;
@@ -1499,6 +1502,10 @@ pGA *PUGH_SetupGArray(void *parent,
this->padddata = (void *) calloc(1, varsize);
this->data = this->padddata;
+ this->vector_size = vector_size;
+ this->vector_entry = vector_entry;
+ this->vector_base = vector_base;
+
if(this->name && this->padddata)
{
strcpy(this->name, name);
diff --git a/src/Storage.c b/src/Storage.c
index a116e77..7426b3c 100644
--- a/src/Storage.c
+++ b/src/Storage.c
@@ -780,54 +780,65 @@ static int PUGH_EnableGArrayGroupStorage (pGH *pughGH,
fflush (stdout);
#endif
- /* Now assign memory for the variable itself */
- if (GA->padddata)
+ if(GA->vector_size > 1 && GA->vector_entry > 0)
{
- free (GA->padddata);
- GA->padddata = NULL;
- }
-
- if (GA->extras->npoints * GA->varsize <= 0)
- {
- CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
- "PUGH_EnableGArrayDataStorage: Tried to allocate storage "
- "for zero-sized variable '%s'", GA->name);
- GA->data = GA->padddata = NULL;
- }
- else if (! padding_active)
- {
- /* Easy case. */
- GA->data = malloc (GA->extras->npoints * GA->varsize);
- GA->padddata = GA->data;
+ GA->data = (char *)(GA->vector_base->data) + GA->extras->npoints * GA->varsize * GA->vector_entry;
+ retval = 0;
}
else
{
- /* Use the Cactus Cache alignment function */
- GA->data = Util_CacheMalloc (GA->arrayid,
- GA->extras->npoints * GA->varsize,
- &GA->padddata);
+
+ /* Now assign memory for the variable itself */
+ if (GA->padddata)
+ {
+ free (GA->padddata);
+ GA->padddata = NULL;
+ }
+
+ if (GA->extras->npoints * GA->varsize <= 0)
+ {
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "PUGH_EnableGArrayDataStorage: Tried to allocate storage "
+ "for zero-sized variable '%s'", GA->name);
+ GA->data = GA->padddata = NULL;
+ }
+ else if (! padding_active)
+ {
+ /* Easy case. */
+ GA->data = malloc (GA->extras->npoints * GA->varsize);
+ GA->padddata = GA->data;
+ }
+ else
+ {
+ /* Use the Cactus Cache alignment function */
+ GA->data = Util_CacheMalloc (GA->arrayid,
+ GA->extras->npoints * GA->varsize * GA->vector_size,
+ &GA->padddata);
+ }
+
+ /* Initialize the memory if desired. */
+ if (GA->data && ! CCTK_Equals (initialize_memory, "none"))
+ {
+ PUGH_InitializeMemory (initialize_memory, GA->vtype,
+ GA->extras->npoints * GA->varsize, GA->data);
+ }
}
- /* Initialize the memory if desired. */
- if (GA->data && ! CCTK_Equals (initialize_memory, "none"))
+ retval = GA->extras->npoints * GA->varsize < 0 ||
+ GA->padddata != NULL ? 0 : -1;
+
+
+ if (retval)
{
- PUGH_InitializeMemory (initialize_memory, GA->vtype,
- GA->extras->npoints * GA->varsize, GA->data);
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "PUGH_EnableGArrayDataStorage: Cannot allocate data for '%s' [%d]",
+ GA->name, GA->id);
}
}
- retval = GA->extras->npoints * GA->varsize < 0 ||
- GA->padddata != NULL ? 0 : -1;
- if (retval)
- {
- CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
- "PUGH_EnableGArrayDataStorage: Cannot allocate data for '%s' [%d]",
- GA->name, GA->id);
- }
-
GA->storage = PUGH_STORAGE;
- return (retval);
+ return retval;
}
@@ -857,28 +868,35 @@ static int PUGH_EnableGArrayGroupStorage (pGH *pughGH,
{
int retval;
-
retval = GA->storage != PUGH_STORAGE;
if (GA->storage == PUGH_STORAGE)
{
-
+
#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);
+ fflush (stdout);
#endif
-
- if (GA->padddata)
+
+ if(GA->vector_size > 1 && GA->vector_entry > 0)
{
- free (GA->padddata);
+ GA->data = GA->padddata;
}
- GA->padddata = calloc (1, GA->varsize);
- GA->data = GA->padddata;
+ else
+ {
+ if (GA->padddata)
+ {
+ free (GA->padddata);
+ }
+ GA->padddata = calloc (1, GA->varsize);
+ GA->data = GA->padddata;
+ }
+
GA->storage = PUGH_NOSTORAGE;
}
- return (retval);
+ return retval;
}
diff --git a/src/include/pGV.h b/src/include/pGV.h
index 3c5b8bb..fd6edd8 100644
--- a/src/include/pGV.h
+++ b/src/include/pGV.h
@@ -120,6 +120,9 @@ typedef struct PGA
pComm *comm; /* comm buffer for single variable */
pComm *groupcomm; /* comm buffer for a variable group */
+ int vector_size;
+ int vector_entry;
+ struct PGA *vector_base;
} pGA;
typedef struct PGV
diff --git a/src/include/pugh.h b/src/include/pugh.h
index 2b8b527..09deef2 100644
--- a/src/include/pugh.h
+++ b/src/include/pugh.h
@@ -115,15 +115,16 @@ extern "C"
#endif
-int PUGH_SetupGroup(pGH *newGH,
- int *nsize,
- int *nghostsize,
- int gtype,
- int vtype,
- int dim,
- int n_variables,
- int staggertype,
- int n_timelevels);
+int PUGH_SetupGroup (pGH *newGH,
+ int *nsize,
+ int *nghostsize,
+ int gtype,
+ int vtype,
+ int dim,
+ int n_variables,
+ int staggercode,
+ int n_timelevels,
+ int vectorgroup);
pGH *PUGH_SetupPGH(void *callerid,
int dim,
diff --git a/src/include/pughi.h b/src/include/pughi.h
index 139be29..78aff4b 100644
--- a/src/include/pughi.h
+++ b/src/include/pughi.h
@@ -116,13 +116,16 @@ int PUGH_SetupPGExtrasStaggering(int dim,
pGA *PUGH_SetupGArray(void *parent,
pGExtras *extras,
pConnectivity *connectivity,
- pComm *comm,
+ pComm *groupcomm,
const char *name,
int id,
- int arrayid,
+ int arrayid,
int varsize,
int vtype,
- int stagger);
+ int stagger,
+ int vector_size,
+ int vector_entry,
+ pGA *vector_base);
pComm *PUGH_SetupGArrayComm(pGH *pughGH,
int dim,