diff options
author | hawke <hawke@578cdeb0-5ea1-4b81-8215-5a3b8777ee0b> | 2006-08-01 12:57:45 +0000 |
---|---|---|
committer | hawke <hawke@578cdeb0-5ea1-4b81-8215-5a3b8777ee0b> | 2006-08-01 12:57:45 +0000 |
commit | 1db9e820e488272d13b6331d4f81aa9c2d637fbc (patch) | |
tree | 502778f424980849482fc46ad3a8b2454a5c3bf4 /src/InitialCopy.c | |
parent | 5b12759aff89d3e5854999776b169112e8510111 (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.c | 41 |
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 |