From 0595b414b78936d85408cd902690b54a380faa28 Mon Sep 17 00:00:00 2001 From: schnetter <> Date: Wed, 3 Apr 2002 14:33:00 +0000 Subject: Replacement version of CactusBase/CartGrid3D for use with mesh refinement. darcs-hash:20020403143326-07bb3-687978f66afa7dca09e3ac4cd702b18fef8e1e89.gz --- CarpetAttic/CartGrid3D/src/Symmetry.c | 224 ++++++++++++++++++++++++++++++++++ 1 file changed, 224 insertions(+) create mode 100644 CarpetAttic/CartGrid3D/src/Symmetry.c (limited to 'CarpetAttic/CartGrid3D/src/Symmetry.c') diff --git a/CarpetAttic/CartGrid3D/src/Symmetry.c b/CarpetAttic/CartGrid3D/src/Symmetry.c new file mode 100644 index 000000000..0c5f6b002 --- /dev/null +++ b/CarpetAttic/CartGrid3D/src/Symmetry.c @@ -0,0 +1,224 @@ + + /*@@ + @file Symmetry.c + @date Tue Apr 18 14:14:16 2000 + @author Gerd Lanfermann + @desc + Routines to apply the 1/2/3D Symmetries for + all symmetry domains (octant/bitant/quadrant). + @enddesc + @@*/ + +#include +#include +#include +#include + +#include "cctk.h" + +static const char *rcsid = "$Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CartGrid3D/src/Attic/Symmetry.c,v 1.1 2002/04/03 16:33:29 schnetter Exp $"; + +CCTK_FILEVERSION(CactusBase_CartGrid3D_Symmetry_c) + +/*#define SYM_DEBUG*/ + +int CartApplySym3Di(cGH *GH, int *doSym, int *cntstag, + int *lssh, int *ghostz, int *sym, CCTK_REAL *var); +int CartApplySym2Di(cGH *GH, int *doSym, int *cntstag, + int *lssh, int *ghostz, int *sym, CCTK_REAL *var); +int CartApplySym1Di(cGH *GH, int *doSym, int *cntstag, + int *lssh, int *ghostz, int *sym, CCTK_REAL *var); + + +/*@@ + @routine CartApplySym3Di + @date Tue Apr 18 14:17:23 2000 + @author Gerd Lanfermann + @desc Apply Symmetry BC to 3D variables + + Variables passed through: + cGH *GH pointer to cGH + int *doSym flags whether to apply a symmetries on a given face + size 2*dim, here we only check for lower faces:0,2,4 + int *cntstag value used when the gridpoints are staggered + around the origin + int *lssh size of the domain, + int *ghostz size of the ghostzone + int *sym symmetry values + CCTK_REAL *var pointer to variable + + index convention: + i ~ x ~ 0 + j ~ y ~ 1 + k ~ z ~ 2 + + @enddesc + @calls + @calledby + @history + + @endhistory + +@@*/ + + +int CartApplySym3Di(cGH *GH, int *doSym, int *cntstag, + int *lssh, int *ghostz, int *sym, CCTK_REAL *var) +{ + + int i,j,k; + +#ifdef SYM_DEBUG + printf(" doSym: %d %d / %d %d / %d %d \n", + doSym[0],doSym[1], + doSym[2],doSym[3], + doSym[4],doSym[5]); + printf(" lssh: %d %d %d sym: %d %d %d \n", + lssh[0],lssh[1],lssh[2], sym[0], sym[2], sym[4] ); + printf(" ghostz %d %d %d \n",ghostz[0],ghostz[1],ghostz[2]); + printf(" cntstag: %d %d %d\n",cntstag[0],cntstag[1],cntstag[2]); +#endif + + if (doSym[0] == 1) + { + for(k=0; k < lssh[2]; k++) + { + for(j=0; j < lssh[1]; j++) + { + for(i=0; i < ghostz[0]; i++) + { + var[CCTK_GFINDEX3D(GH,i,j,k)] = + sym[0]*var[CCTK_GFINDEX3D(GH,2*ghostz[0]-cntstag[0]-i,j,k)]; + } + } + } + } + if (doSym[2] == 1) + { + for(i=0; i < lssh[0]; i++) + { + for(k=0; k < lssh[2]; k++) + { + for(j=0; j < ghostz[1]; j++) + { + var[CCTK_GFINDEX3D(GH,i,j,k)] = + sym[2]*var[CCTK_GFINDEX3D(GH,i,2*ghostz[1]-cntstag[1]-j,k)]; + } + } + } + } + if (doSym[4] == 1) + { + for(i=0; i < lssh[0]; i++) + { + for(j=0; j < lssh[1]; j++) + { + for(k=0; k < ghostz[2]; k++) + { + var[CCTK_GFINDEX3D(GH,i,j,k)] = + sym[4]*var[CCTK_GFINDEX3D(GH,i,j,2*ghostz[2]-cntstag[2]-k)]; + } + } + } + } + return(0); +} + + +/*@@ + @routine CartApplySym2Di + @date Tue Apr 18 14:17:23 2000 + @author Gerd Lanfermann + @desc Apply Symmetry BC to 2D variables + + + index convention: + i ~ x ~ 0 + j ~ y ~ 1 + k ~ z ~ 2 + + @enddesc + @calls + @calledby + @history + + @endhistory + +@@*/ + +int CartApplySym2Di(cGH *GH, int *doSym, int *cntstag, + int *lssh, int *ghostz, int *sym, CCTK_REAL *var) +{ + int i,j; + + if (doSym[0] == 1) + { + for(j=0; j < lssh[1]; j++) + { + for(i=0; i < ghostz[0]; i++) + { + var[CCTK_GFINDEX2D(GH,i,j)] = + sym[0]*var[CCTK_GFINDEX2D(GH,2*ghostz[0]-cntstag[0]-i,j)]; + } + } + } + + if (doSym[2] == 1) + { + for(i=0; i < lssh[0]; i++) + { + for(j=0; j < ghostz[1]; j++) + { + var[CCTK_GFINDEX2D(GH,i,j)] = + sym[2]*var[CCTK_GFINDEX2D(GH,i,2*ghostz[1]-cntstag[1]-j)]; + } + } + } + + return(0); +} + + +/*@@ + @routine CartApplySym1Di + @date Tue Apr 18 14:17:23 2000 + @author Gerd Lanfermann + @desc Apply Symmetry BC to 1D variables + + + index convention: + i ~ x ~ 0 + j ~ y ~ 1 + k ~ z ~ 2 + + @enddesc + @calls + @calledby + @history + + @endhistory + +@@*/ + +int CartApplySym1Di(cGH *GH, int *doSym, int *cntstag, + int *lssh, int *ghostz, int *sym, CCTK_REAL *var) +{ + int i; + + + /* avoid compiler warnings about unused parameters */ + GH = GH; + lssh = lssh; + + if (doSym[0] == 1) + { + for(i=0; i < ghostz[0]; i++) + { + var[CCTK_GFINDEX1D(GH,i)] = + sym[0]*var[CCTK_GFINDEX1D(GH,2*ghostz[0]-cntstag[0]-i)]; + } + } + + return(0); +} + -- cgit v1.2.3