aboutsummaryrefslogtreecommitdiff
path: root/src/InitialCopy.c
diff options
context:
space:
mode:
authorhawke <hawke@578cdeb0-5ea1-4b81-8215-5a3b8777ee0b>2006-08-01 12:57:45 +0000
committerhawke <hawke@578cdeb0-5ea1-4b81-8215-5a3b8777ee0b>2006-08-01 12:57:45 +0000
commit1db9e820e488272d13b6331d4f81aa9c2d637fbc (patch)
tree502778f424980849482fc46ad3a8b2454a5c3bf4 /src/InitialCopy.c
parent5b12759aff89d3e5854999776b169112e8510111 (diff)
Modification for evolving array variables; change to local
arrays. This gets around the problems with the driver allocating the scratch space differently on multiprocessors from the individual arrays. git-svn-id: http://svn.cactuscode.org/arrangements/CactusNumerical/MoL/trunk@116 578cdeb0-5ea1-4b81-8215-5a3b8777ee0b
Diffstat (limited to 'src/InitialCopy.c')
-rw-r--r--src/InitialCopy.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/InitialCopy.c b/src/InitialCopy.c
index 2b63697..7948006 100644
--- a/src/InitialCopy.c
+++ b/src/InitialCopy.c
@@ -11,6 +11,7 @@
@version $Header$
@@*/
+#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@@ -80,6 +81,7 @@ void MoL_InitialCopy(CCTK_ARGUMENTS)
cGroupDynamicData arraydata;
CCTK_INT groupindex, ierr;
CCTK_INT arraytotalsize, arraydim;
+ CCTK_INT totalarrayscratchsize;
CCTK_INT var;
CCTK_INT totalsize;
@@ -144,6 +146,23 @@ void MoL_InitialCopy(CCTK_ARGUMENTS)
}
+ /* Set up the array sizes */
+
+ if (!ArrayScratchSizes)
+ {
+ ArrayScratchSizes = (CCTK_INT *)malloc(MoLNumEvolvedArrayVariables * sizeof(CCTK_INT));
+ if (!ArrayScratchSizes)
+ {
+ CCTK_WARN(0, "Failed to allocate the array scratch sizes array.");
+ }
+ for (var = 0; var < MoLNumEvolvedArrayVariables; var++)
+ {
+ ArrayScratchSizes[var] = -1;
+ }
+ }
+
+ totalarrayscratchsize = 0;
+
for (var = 0; var < MoLNumEvolvedArrayVariables; var++)
{
PreviousVar = (CCTK_REAL const*)CCTK_VarDataPtrI(cctkGH, 1,
@@ -167,6 +186,9 @@ void MoL_InitialCopy(CCTK_ARGUMENTS)
arraytotalsize *= arraydata.lsh[arraydim];
}
+ ArrayScratchSizes[var] = arraytotalsize;
+ totalarrayscratchsize += arraytotalsize;
+
if (arraytotalsize)
{
if (PreviousVar && CurrentVar)
@@ -184,6 +206,25 @@ void MoL_InitialCopy(CCTK_ARGUMENTS)
}
+ if (totalarrayscratchsize > CurrentArrayScratchSize)
+ {
+ if (ArrayScratchSpace)
+ {
+ free(ArrayScratchSpace);
+ ArrayScratchSpace = NULL;
+ }
+ ArrayScratchSpace =
+ (CCTK_REAL*)malloc(totalarrayscratchsize *
+ MoL_Num_Scratch_Levels *
+ sizeof(CCTK_REAL));
+ for (var = 0; var < totalarrayscratchsize * MoL_Num_Scratch_Levels; var++)
+ {
+ ArrayScratchSpace[var] = 0.0;
+ }
+ CurrentArrayScratchSize = totalarrayscratchsize;
+ }
+
+
/* FIXME */
#ifdef MOLDOESCOMPLEX