aboutsummaryrefslogtreecommitdiff
path: root/src/RK2.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/RK2.c')
-rw-r--r--src/RK2.c163
1 files changed, 49 insertions, 114 deletions
diff --git a/src/RK2.c b/src/RK2.c
index 58dd03f..ea4f12c 100644
--- a/src/RK2.c
+++ b/src/RK2.c
@@ -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