diff options
author | allen <allen@6a38eb6e-646e-4a02-a296-d141613ad6c4> | 2000-07-15 18:59:01 +0000 |
---|---|---|
committer | allen <allen@6a38eb6e-646e-4a02-a296-d141613ad6c4> | 2000-07-15 18:59:01 +0000 |
commit | f248d9d88b79a4c7e4f66a89aca6222b70190e14 (patch) | |
tree | 199ffcd31362d0d1a080f93a78141f80cc230f07 | |
parent | 35e47f97ca82d39e84faa5568233ffeacc4389fc (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.ccl | 4 | ||||
-rw-r--r-- | src/CopyBoundary.c | 20 | ||||
-rw-r--r-- | src/FlatBoundary.c | 14 | ||||
-rw-r--r-- | src/RadiationBoundary.c | 3 | ||||
-rw-r--r-- | src/RobinBoundaryWrappers.c | 4 | ||||
-rw-r--r-- | src/ScalarBoundary.c | 73 |
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) { |