diff options
author | schnetter <schnetter@578cdeb0-5ea1-4b81-8215-5a3b8777ee0b> | 2004-03-23 17:53:29 +0000 |
---|---|---|
committer | schnetter <schnetter@578cdeb0-5ea1-4b81-8215-5a3b8777ee0b> | 2004-03-23 17:53:29 +0000 |
commit | f7f56a61852ea7125d2d0b539a1cd5b6849e87b3 (patch) | |
tree | c9b6b412257f34be96cb6402f53cf85dcb84cd97 /src | |
parent | b6b896ef68bebf49b1b2cc241986da174b64e205 (diff) |
Initialise the RHS with zero before scheduling the physics routines.
This is necessary because MoL switches off boundary prolongation when
there is mesh refinement, leaving certain grid points undefined.
git-svn-id: http://svn.cactuscode.org/arrangements/CactusNumerical/MoL/trunk@54 578cdeb0-5ea1-4b81-8215-5a3b8777ee0b
Diffstat (limited to 'src')
-rw-r--r-- | src/InitialCopy.c | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/src/InitialCopy.c b/src/InitialCopy.c index 89c67ae..05a8dfb 100644 --- a/src/InitialCopy.c +++ b/src/InitialCopy.c @@ -37,6 +37,8 @@ CCTK_FILEVERSION(AlphaThorns_MoL_InitialCopy_c); void MoL_InitialCopy(CCTK_ARGUMENTS); +void MoL_InitRHS(CCTK_ARGUMENTS); + void MoL_FillAllLevels(CCTK_ARGUMENTS); void MoL_ReportNumberVariables(CCTK_ARGUMENTS); @@ -53,6 +55,21 @@ void MoL_ReportNumberVariables(CCTK_ARGUMENTS); ********************* External Routines ********************** ********************************************************************/ + /*@@ + @routine MoL_InitialCopy + @date ??? + @author Ian Hawke + @desc + Copy the previous time level to the current time level. + @enddesc + @calls + @calledby + @history + + @endhistory + +@@*/ + void MoL_InitialCopy(CCTK_ARGUMENTS) { @@ -390,6 +407,171 @@ void MoL_InitialCopy(CCTK_ARGUMENTS) } /*@@ + @routine MoL_InitRHS + @date Tue Mar 23 2004 + @author Erik Schnetter + @desc + Initialise all RHS variables with zero. + @enddesc + @calls + @calledby + @history + + @endhistory + +@@*/ + +void MoL_InitRHS(CCTK_ARGUMENTS) +{ + + DECLARE_CCTK_ARGUMENTS; + DECLARE_CCTK_PARAMETERS; + + cGroupDynamicData arraydata; + CCTK_INT groupindex, ierr; + CCTK_INT arraytotalsize, arraydim; + + CCTK_INT var; + CCTK_INT index; +/* CCTK_INT i,j,k; */ + CCTK_INT totalsize; + + CCTK_REAL *RHSVar; + CCTK_INT StorageOn; + + /* FIXME */ + +#ifdef MOLDOESCOMPLEX + + CCTK_COMPLEX *RHSComplexVar; + +#endif + + totalsize = cctk_lsh[0]*cctk_lsh[1]*cctk_lsh[2]; + + for (var = 0; var < MoLNumEvolvedVariables; var++) + { + + StorageOn = CCTK_QueryGroupStorage(cctkGH, + CCTK_GroupNameFromVarI(RHSVariableIndex[var])); + + if (StorageOn < 0) + { + CCTK_VWarn(1,__LINE__,__FILE__,"MoL","Warning for index %i", + RHSVariableIndex[var]); + CCTK_WARN(0, "The index passed does not correspond to a GF."); + } + else if (StorageOn == 0) { +#ifdef MOLDEBUG + printf("Aargh! Vars %d var %d index %d name %s\n", + MoLNumEvolvedVariables, var, RHSVariableIndex[var], + CCTK_VarName(RHSVariableIndex[var])); +#endif + CCTK_VWarn(1,__LINE__,__FILE__,"MoL","Warning for GF %s", + CCTK_VarName(RHSVariableIndex[var])); + CCTK_WARN(0, "The grid function does not have storage assigned."); + } + + RHSVar = (CCTK_REAL*)CCTK_VarDataPtrI(cctkGH, 0, + RHSVariableIndex[var]); + if (RHSVar) + { + for (index = 0; index < totalsize; index++) + { + RHSVar[index] = 0; + } + } + else + { + CCTK_VWarn(0,__LINE__,__FILE__,"MoL","Null pointer for variable %s", + CCTK_VarName(RHSVariableIndex[var])); + } + + } + + for (var = 0; var < MoLNumEvolvedArrayVariables; var++) + { + RHSVar = (CCTK_REAL*)CCTK_VarDataPtrI(cctkGH, 0, + RHSArrayVariableIndex[var]); + + groupindex = CCTK_GroupIndexFromVarI(RHSArrayVariableIndex[var]); + ierr = CCTK_GroupDynamicData(cctkGH, groupindex, + &arraydata); + if (ierr) + { + CCTK_VWarn(0, __LINE__, __FILE__, "MoL", + "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]; + } + + if (RHSVar) + { + for (index = 0; index < arraytotalsize; index++) + { + RHSVar[index] = 0; + } + } + else + { + printf("The pointer is %p (rhs)\n.", + RHSVar); + CCTK_VWarn(0,__LINE__,__FILE__,"MoL","Null pointer for variable %s", + CCTK_VarName(RHSArrayVariableIndex[var])); + } + + } + + /* FIXME */ + +#ifdef MOLDOESCOMPLEX + + for (var = 0; var < MoLNumEvolvedComplexVariables; var++) + { + + StorageOn = CCTK_QueryGroupStorage(cctkGH, + CCTK_GroupNameFromVarI(RHSComplexVariableIndex[var])); + + if (StorageOn < 0) + { + CCTK_VWarn(1,__LINE__,__FILE__,"MoL","Warning for index %i", + RHSComplexVariableIndex[var]); + CCTK_WARN(0, "The index passed does not correspond to a GF."); + } + else if (StorageOn == 0) { + CCTK_VWarn(1,__LINE__,__FILE__,"MoL","Warning for GF %s", + CCTK_VarName(RHSComplexVariableIndex[var])); + CCTK_WARN(0, "The grid function does not have storage assigned."); + } + + RHSComplexVar = (CCTK_COMPLEX*)CCTK_VarDataPtrI(cctkGH, 0, + RHSComplexVariableIndex[var]); + if (RHSVar) + { + for (index = 0; index < totalsize; index++) + { + RHSVar[index] = 0; + } + } + else + { + CCTK_VWarn(0,__LINE__,__FILE__,"MoL","Null pointer for variable %s", + CCTK_VarName(RHSComplexVariableIndex[var])); + } + + } + +#endif + + return; +} + + /*@@ @routine MoL_FillAllLevels @date Fri Apr 25 16:11:18 2003 @author Ian Hawke |