diff options
Diffstat (limited to 'src/RK2.c')
-rw-r--r-- | src/RK2.c | 163 |
1 files changed, 49 insertions, 114 deletions
@@ -16,6 +16,7 @@ #include "cctk_Parameters.h" #include "ExternalVariables.h" +#include "Operators.h" static const char *rcsid = "$Header$"; @@ -68,15 +69,10 @@ void MoL_RK2Add(CCTK_ARGUMENTS) DECLARE_CCTK_ARGUMENTS; DECLARE_CCTK_PARAMETERS; - cGroupDynamicData arraydata; - CCTK_INT groupindex, ierr; - CCTK_INT arraytotalsize, arraydim; + CCTK_INT arraydim; - CCTK_INT index, var; + CCTK_INT var; CCTK_INT totalsize; - CCTK_REAL const * restrict OldVar; - CCTK_REAL * restrict UpdateVar; - CCTK_REAL const * restrict RHSVar; /* FIXME */ @@ -103,7 +99,7 @@ void MoL_RK2Add(CCTK_ARGUMENTS) totalsize = 1; for (arraydim = 0; arraydim < cctk_dim; arraydim++) { - totalsize *= cctk_lsh[arraydim]; + totalsize *= cctk_ash[arraydim]; } switch (*MoL_Intermediate_Step) @@ -113,45 +109,24 @@ void MoL_RK2Add(CCTK_ARGUMENTS) { for (var = 0; var < MoLNumEvolvedVariables; var++) { - UpdateVar = (CCTK_REAL*)CCTK_VarDataPtrI(cctkGH, 0, - EvolvedVariableIndex[var]); - RHSVar = (CCTK_REAL const*)CCTK_VarDataPtrI(cctkGH, 0, - RHSVariableIndex[var]); - -#pragma omp parallel for - for (index = 0; index < totalsize; index++) - { - UpdateVar[index] += CCTK_DELTA_TIME * RHSVar[index]; - } + int const nsrcs = 1; + CCTK_INT const srcs[] = {RHSVariableIndex[var]}; + CCTK_INT const tls[] = {0}; + CCTK_REAL const facts[] = {CCTK_DELTA_TIME}; + MoL_LinearCombination(cctkGH, + EvolvedVariableIndex[var], 1.0, + srcs, tls, facts, nsrcs); } for (var = 0; var < MoLNumEvolvedArrayVariables; var++) { - UpdateVar = (CCTK_REAL*)CCTK_VarDataPtrI(cctkGH, 0, - EvolvedArrayVariableIndex[var]); - RHSVar = (CCTK_REAL const*)CCTK_VarDataPtrI(cctkGH, 0, - RHSArrayVariableIndex[var]); - groupindex = CCTK_GroupIndexFromVarI(EvolvedArrayVariableIndex[var]); - ierr = CCTK_GroupDynamicData(cctkGH, groupindex, - &arraydata); - if (ierr) - { - CCTK_VWarn(0, __LINE__, __FILE__, CCTK_THORNSTRING, - "The driver does not return group information " - "for group '%s'.", - CCTK_GroupName(groupindex)); - } - arraytotalsize = 1; - for (arraydim = 0; arraydim < arraydata.dim; arraydim++) - { - arraytotalsize *= arraydata.lsh[arraydim]; - } - -#pragma omp parallel for - for (index = 0; index < arraytotalsize; index++) - { - UpdateVar[index] += CCTK_DELTA_TIME * RHSVar[index]; - } + int const nsrcs = 1; + CCTK_INT const srcs[] = {RHSArrayVariableIndex[var]}; + CCTK_INT const tls[] = {0}; + CCTK_REAL const facts[] = {CCTK_DELTA_TIME}; + MoL_LinearCombination(cctkGH, + EvolvedArrayVariableIndex[var], 1.0, + srcs, tls, facts, nsrcs); } /* FIXME */ @@ -160,18 +135,13 @@ void MoL_RK2Add(CCTK_ARGUMENTS) for (var = 0; var < MoLNumEvolvedComplexVariables; var++) { - UpdateComplexVar = (CCTK_COMPLEX*)CCTK_VarDataPtrI(cctkGH, 0, - EvolvedComplexVariableIndex[var]); - RHSComplexVar = (CCTK_COMPLEX const*)CCTK_VarDataPtrI(cctkGH, 0, - RHSComplexVariableIndex[var]); - -#pragma omp parallel for - for (index = 0; index < totalsize; index++) - { - UpdateComplexVar[index] = CCTK_CmplxAdd(UpdateComplexVar[index], - CCTK_CmplxMul(Complex_Delta_Time, - RHSComplexVar[index])); - } + int const nsrcs = 1; + CCTK_INT const srcs[] = {RHSComplexVariableIndex[var]}; + CCTK_INT const tls[] = {0}; + CCTK_REAL const facts[] = {CCTK_DELTA_TIME}; + MoL_LinearCombination(cctkGH, + EvolvedComplexVariableIndex[var], 1.0, + srcs, tls, facts, nsrcs); } #endif @@ -182,52 +152,26 @@ void MoL_RK2Add(CCTK_ARGUMENTS) { for (var = 0; var < MoLNumEvolvedVariables; var++) { - OldVar = (CCTK_REAL const*)CCTK_VarDataPtrI(cctkGH, 1, - EvolvedVariableIndex[var]); - UpdateVar = (CCTK_REAL*)CCTK_VarDataPtrI(cctkGH, 0, - EvolvedVariableIndex[var]); - RHSVar = (CCTK_REAL const*)CCTK_VarDataPtrI(cctkGH, 0, - RHSVariableIndex[var]); - -#pragma omp parallel for - for (index = 0; index < totalsize; index++) - { - UpdateVar[index] = 0.5 * (OldVar[index] + UpdateVar[index]) + - CCTK_DELTA_TIME * RHSVar[index]; - } + int const nsrcs = 2; + CCTK_INT const srcs[] = + {EvolvedVariableIndex[var], RHSVariableIndex[var]}; + CCTK_INT const tls[] = {1, 0}; + CCTK_REAL const facts[] = {0.5, CCTK_DELTA_TIME}; + MoL_LinearCombination(cctkGH, + EvolvedVariableIndex[var], 0.5, + srcs, tls, facts, nsrcs); } for (var = 0; var < MoLNumEvolvedArrayVariables; var++) { - OldVar = (CCTK_REAL const*)CCTK_VarDataPtrI(cctkGH, 1, - EvolvedArrayVariableIndex[var]); - UpdateVar = (CCTK_REAL*)CCTK_VarDataPtrI(cctkGH, 0, - EvolvedArrayVariableIndex[var]); - RHSVar = (CCTK_REAL const*)CCTK_VarDataPtrI(cctkGH, 0, - RHSArrayVariableIndex[var]); - - groupindex = CCTK_GroupIndexFromVarI(EvolvedArrayVariableIndex[var]); - ierr = CCTK_GroupDynamicData(cctkGH, groupindex, - &arraydata); - if (ierr) - { - CCTK_VWarn(0, __LINE__, __FILE__, CCTK_THORNSTRING, - "The driver does not return group information " - "for group '%s'.", - CCTK_GroupName(groupindex)); - } - arraytotalsize = 1; - for (arraydim = 0; arraydim < arraydata.dim; arraydim++) - { - arraytotalsize *= arraydata.lsh[arraydim]; - } - -#pragma omp parallel for - for (index = 0; index < arraytotalsize; index++) - { - UpdateVar[index] = 0.5 * (OldVar[index] + UpdateVar[index]) + - CCTK_DELTA_TIME * RHSVar[index]; - } + int const nsrcs = 2; + CCTK_INT const srcs[] = + {EvolvedArrayVariableIndex[var], RHSArrayVariableIndex[var]}; + CCTK_INT const tls[] = {1, 0}; + CCTK_REAL const facts[] = {0.5, CCTK_DELTA_TIME}; + MoL_LinearCombination(cctkGH, + EvolvedArrayVariableIndex[var], 0.5, + srcs, tls, facts, nsrcs); } /* FIXME */ @@ -236,23 +180,14 @@ void MoL_RK2Add(CCTK_ARGUMENTS) for (var = 0; var < MoLNumEvolvedComplexVariables; var++) { - OldComplexVar = (CCTK_COMPLEX const*)CCTK_VarDataPtrI(cctkGH, 1, - EvolvedComplexVariableIndex[var]); - UpdateComplexVar = (CCTK_COMPLEX*)CCTK_VarDataPtrI(cctkGH, 0, - EvolvedComplexVariableIndex[var]); - RHSComplexVar = (CCTK_COMPLEX const*)CCTK_VarDataPtrI(cctkGH, 0, - RHSComplexVariableIndex[var]); - -#pragma omp parallel for - for (index = 0; index < totalsize; index++) - { - UpdateComplexVar[index] = - CCTK_CmplxAdd(CCTK_CmplxMul(Complex_Half, - (CCTK_CmplxAdd(OldComplexVar[index], - UpdateComplexVar[index]))), - CCTK_CmplxMul(Complex_Delta_Time, - RHSComplexVar[index])); - } + int const nsrcs = 2; + CCTK_INT const srcs[] = + {EvolvedComplexVariableIndex[var], RHSComplexVariableIndex[var]}; + CCTK_INT const tls[] = {1, 0}; + CCTK_REAL const facts[] = {0.5, CCTK_DELTA_TIME}; + MoL_LinearCombination(cctkGH, + EvolvedComplexVariableIndex[var], 0.5, + srcs, tls, facts, nsrcs); } #endif |