aboutsummaryrefslogtreecommitdiff
path: root/CarpetAttic/CartGrid3D/src/Symmetry.c
diff options
context:
space:
mode:
authorschnetter <>2002-04-03 14:33:00 +0000
committerschnetter <>2002-04-03 14:33:00 +0000
commit0595b414b78936d85408cd902690b54a380faa28 (patch)
treebdc63d0dea7cd90c5833eb096aa8c69099917fc9 /CarpetAttic/CartGrid3D/src/Symmetry.c
parent758051e118348c28b79488981e9f68b6e7be9d6f (diff)
Replacement version of CactusBase/CartGrid3D for use with mesh refinement.
darcs-hash:20020403143326-07bb3-687978f66afa7dca09e3ac4cd702b18fef8e1e89.gz
Diffstat (limited to 'CarpetAttic/CartGrid3D/src/Symmetry.c')
-rw-r--r--CarpetAttic/CartGrid3D/src/Symmetry.c224
1 files changed, 224 insertions, 0 deletions
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 <stdio.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+#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);
+}
+