aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorallen <allen@6a38eb6e-646e-4a02-a296-d141613ad6c4>2000-07-15 18:59:01 +0000
committerallen <allen@6a38eb6e-646e-4a02-a296-d141613ad6c4>2000-07-15 18:59:01 +0000
commitf248d9d88b79a4c7e4f66a89aca6222b70190e14 (patch)
tree199ffcd31362d0d1a080f93a78141f80cc230f07
parent35e47f97ca82d39e84faa5568233ffeacc4389fc (diff)
Fixed bug in 1D scalar boundary condition
Apply boundary conditions to the right timelevels (!) Add fake symmetry structure so no longer need to compile Boundary with CartGrid3D. git-svn-id: http://svn.cactuscode.org/arrangements/CactusBase/Boundary/trunk@112 6a38eb6e-646e-4a02-a296-d141613ad6c4
-rw-r--r--interface.ccl4
-rw-r--r--src/CopyBoundary.c20
-rw-r--r--src/FlatBoundary.c14
-rw-r--r--src/RadiationBoundary.c3
-rw-r--r--src/RobinBoundaryWrappers.c4
-rw-r--r--src/ScalarBoundary.c73
6 files changed, 75 insertions, 43 deletions
diff --git a/interface.ccl b/interface.ccl
index 02660d5..0185fda 100644
--- a/interface.ccl
+++ b/interface.ccl
@@ -3,6 +3,6 @@
implements: boundary
-INCLUDES: Boundary.h in Boundary.h
+INCLUDES HEADER: Boundary.h in Boundary.h
-USES INCLUDE: Symmetry.h
+USES INCLUDE HEADER: Symmetry.h
diff --git a/src/CopyBoundary.c b/src/CopyBoundary.c
index 6ae555e..8a429a0 100644
--- a/src/CopyBoundary.c
+++ b/src/CopyBoundary.c
@@ -18,7 +18,7 @@
#include "cctk_FortranString.h"
#include "cctk_Parameters.h"
-#include "Symmetry.h"
+#include "BoundarySymmetries.h"
#include "Boundary.h"
/* Internal routine prototypes */
@@ -277,6 +277,7 @@ static int ApplyBndCopy(cGH *GH,
int berr,ierr;
int *doBC, *dstag, *lssh;
SymmetryGHex *sGHex;
+ int timelevel; /* timelevel that condition applied on */
/* See if we have a symmetry array */
symmetry_handle = CCTK_GHExtensionHandle("Symmetry");
@@ -301,6 +302,11 @@ static int ApplyBndCopy(cGH *GH,
gi = CCTK_GroupIndexFromVarI(first_var);
ierr = CCTK_GroupStaggerDirArrayGI(dstag, dim, gi);
+ /* get the current timelevel */
+ timelevel = CCTK_NumTimeLevelsFromVarI (first_var) - 1;
+ if (timelevel > 0)
+ timelevel--;
+
for (vi=first_var; vi<first_var+num_vars; vi++)
{
vi2 = (vi-first_var+second_var);
@@ -342,22 +348,22 @@ static int ApplyBndCopy(cGH *GH,
doBC,
lssh,
stencil,
- GH->data[vi][0],
- GH->data[vi2][0]); break;
+ GH->data[vi][timelevel],
+ GH->data[vi2][timelevel]); break;
case 2: berr = BndApplyCopy2Di(GH,
dim,
doBC,
lssh,
stencil,
- GH->data[vi][0],
- GH->data[vi2][0]); break;
+ GH->data[vi][timelevel],
+ GH->data[vi2][timelevel]); break;
case 3: berr = BndApplyCopy3Di(GH,
dim,
doBC,
lssh,
stencil,
- GH->data[vi][0],
- GH->data[vi2][0]); break;
+ GH->data[vi][timelevel],
+ GH->data[vi2][timelevel]); break;
default : berr = -1; CCTK_WARN(1, "No BC for dim>3");
}
berr = (berr>-1) ? 0 : -1;
diff --git a/src/FlatBoundary.c b/src/FlatBoundary.c
index 3b5b3f9..dab27f2 100644
--- a/src/FlatBoundary.c
+++ b/src/FlatBoundary.c
@@ -21,7 +21,7 @@
#include "cctk_Parameters.h"
#include "cctk_FortranString.h"
-#include "Boundary.h"
+#include "BoundarySymmetries.h"
#include "Symmetry.h"
@@ -245,6 +245,7 @@ int ApplyBndFlat(cGH *GH,
int idim;
int berr,ierr;
int *doBC, *dstag, *lssh;
+ int timelevel; /* timelevel that condition applied on */
SymmetryGHex *sGHex;
/* See if we have a symmetry array */
@@ -270,6 +271,11 @@ int ApplyBndFlat(cGH *GH,
gi = CCTK_GroupIndexFromVarI(first_var);
ierr = CCTK_GroupStaggerDirArrayGI(dstag, dim, gi);
+ /* get the current timelevel */
+ timelevel = CCTK_NumTimeLevelsFromVarI (first_var) - 1;
+ if (timelevel > 0)
+ timelevel--;
+
for (vi=first_var; vi<first_var+num_vars; vi++)
{
@@ -309,19 +315,19 @@ int ApplyBndFlat(cGH *GH,
doBC,
lssh,
stencil,
- GH->data[vi][0]); break;
+ GH->data[vi][timelevel]); break;
case 2: berr = BndApplyFlat2Di(GH,
dim,
doBC,
lssh,
stencil,
- GH->data[vi][0]); break;
+ GH->data[vi][timelevel]); break;
case 3: berr = BndApplyFlat3Di(GH,
dim,
doBC,
lssh,
stencil,
- GH->data[vi][0]); break;
+ GH->data[vi][timelevel]); break;
default : berr = -1; CCTK_WARN(1, "ApplyBndFlat: No BC for dim>3");
}
berr = (berr>-1) ? 0 : -1;
diff --git a/src/RadiationBoundary.c b/src/RadiationBoundary.c
index 26ac285..4ba041d 100644
--- a/src/RadiationBoundary.c
+++ b/src/RadiationBoundary.c
@@ -21,7 +21,8 @@
#include "cctk_FortranString.h"
#include "cctk_Parameters.h"
#include "cctk_Stagger.h"
-#include "Symmetry.h"
+
+#include "BoundarySymmetries.h"
#include "Boundary.h"
#define SQR(a) ((a)*(a))
diff --git a/src/RobinBoundaryWrappers.c b/src/RobinBoundaryWrappers.c
index c76e439..85cdb91 100644
--- a/src/RobinBoundaryWrappers.c
+++ b/src/RobinBoundaryWrappers.c
@@ -17,9 +17,11 @@
#include "cctk.h"
#include "cctk_Parameters.h"
-#include "Symmetry.h"
#include "cctk_FortranString.h"
+#include "BoundarySymmetries.h"
+
+
void CCTKi_NotYetImplemented(const char *message);
void BndApplyRobin3Di(cGH *GH,
int *sw,
diff --git a/src/ScalarBoundary.c b/src/ScalarBoundary.c
index 4b60192..b33a0fc 100644
--- a/src/ScalarBoundary.c
+++ b/src/ScalarBoundary.c
@@ -17,7 +17,7 @@
#include "cctk.h"
#include "cctk_Parameters.h"
#include "cctk_FortranString.h"
-#include "Symmetry.h"
+#include "BoundarySymmetries.h"
#include "Boundary.h"
/* Internal routine prototypes */
@@ -227,6 +227,7 @@ int BndScalarVN(cGH *GH,
"BndScalarVN: Cannot find variable index for %s ",impvn);
retval = -1;
}
+
return retval;
}
@@ -259,7 +260,9 @@ static int ApplyBndScalar(cGH *GH,
int vi, gi, dim;
int idim;
int berr,ierr;
- int *doBC, *dstag, *lssh;
+ int *doBC, *dstag;
+ int *lssh;
+ int timelevel; /* timelevel that condition applied on */
SymmetryGHex *sGHex;
/* See if we have a symmetry array */
@@ -285,6 +288,12 @@ static int ApplyBndScalar(cGH *GH,
gi = CCTK_GroupIndexFromVarI(first_var);
ierr = CCTK_GroupStaggerDirArrayGI(dstag, dim, gi);
+ /* get the current timelevel */
+ timelevel = CCTK_NumTimeLevelsFromVarI (first_var) - 1;
+ if (timelevel > 0)
+ timelevel--;
+
+
for (vi=first_var; vi<first_var+num_vars; vi++)
{
@@ -304,7 +313,7 @@ static int ApplyBndScalar(cGH *GH,
doBC[idim*2+1] = (((sGHex->GFSym[vi][idim*2+1]==GFSYM_NOSYM)||
(sGHex->GFSym[vi][idim*2+1]==GFSYM_UNSET)) &&
GH->cctk_lsh[idim]>1 && GH->cctk_bbox[idim*2+1]);
- lssh[idim] = GH->cctk_lssh[CCTK_LSSH_IDX(dstag[idim],idim)];
+ lssh[idim] = (int)GH->cctk_lssh[CCTK_LSSH_IDX(dstag[idim],idim)];
}
}
else
@@ -313,35 +322,43 @@ static int ApplyBndScalar(cGH *GH,
{
doBC[idim*2] = (GH->cctk_lsh[idim]>1 && GH->cctk_bbox[idim*2]);
doBC[idim*2+1] = (GH->cctk_lsh[idim]>1 && GH->cctk_bbox[idim*2+1]);
- lssh[idim] = GH->cctk_lssh[CCTK_LSSH_IDX(dstag[idim],idim)];
- }
+ lssh[idim] = (int)GH->cctk_lssh[CCTK_LSSH_IDX(dstag[idim],idim)];
+ }
}
switch (dim)
{
- case 1: berr = BndApplyScalar1Di(GH,
- dim,
- doBC,
- lssh,
- stencil,
- var0,
- GH->data[vi][0]); break;
- case 2: berr = BndApplyScalar2Di(GH,
- dim,
- doBC,
- lssh,
- stencil,
- var0,
- GH->data[vi][0]); break;
- case 3: berr = BndApplyScalar3Di(GH,
- dim,
- doBC,
- lssh,
- stencil,
- var0,
- GH->data[vi][0]); break;
- default : berr = -1; CCTK_WARN(1, "No BC for dim>3");
+ case 1:
+ berr = BndApplyScalar1Di(GH,
+ dim,
+ doBC,
+ lssh,
+ stencil,
+ var0,
+ GH->data[vi][timelevel]);
+ break;
+ case 2:
+ berr = BndApplyScalar2Di(GH,
+ dim,
+ doBC,
+ lssh,
+ stencil,
+ var0,
+ GH->data[vi][timelevel]);
+ break;
+ case 3:
+ berr = BndApplyScalar3Di(GH,
+ dim,
+ doBC,
+ lssh,
+ stencil,
+ var0,
+ GH->data[vi][timelevel]);
+ break;
+ default :
+ berr = -1;
+ CCTK_WARN(1, "No BC for dim>3");
}
berr = (berr>-1) ? 0 : -1;
}
@@ -568,8 +585,8 @@ static int BndApplyScalar2Di(cGH *GH,
static int BndApplyScalar1Di(cGH *GH,
int gdim,
int *doBC,
+ int *lsh,
int *stencil,
- int *dstag,
CCTK_REAL var0,
CCTK_REAL *var)
{