aboutsummaryrefslogtreecommitdiff
path: root/src/SetSymmetry.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/SetSymmetry.c')
-rw-r--r--src/SetSymmetry.c131
1 files changed, 58 insertions, 73 deletions
diff --git a/src/SetSymmetry.c b/src/SetSymmetry.c
index f610221..050dc38 100644
--- a/src/SetSymmetry.c
+++ b/src/SetSymmetry.c
@@ -16,6 +16,12 @@
#include "cctk_FortranString.h"
#include "Symmetry.h"
+void DecodeSymParameters3D(int sym[6]);
+
+#define MAX_DIM 3
+#define MAX_FACE 6
+
+
/*@@
@routine SetCartSymmetry
@@ -30,7 +36,7 @@
@enddesc
@calls
@calledby
- @history
+ @history enhanced by E.Schnetter
@endhistory
@@ -41,7 +47,9 @@ int SetCartSymVI(cGH *GH, int *sym, int vi)
DECLARE_CCTK_PARAMETERS
- SymmetryGHex *sGHex;
+ int domainsym[MAX_FACE];
+ SymmetryGHex *sGHex;
+ int dir;
/* Pointer to the SymmetryGHextension */
sGHex = (SymmetryGHex *)GH->extensions[CCTK_GHExtensionHandle("Symmetry")];
@@ -56,41 +64,18 @@ int SetCartSymVI(cGH *GH, int *sym, int vi)
#ifdef SYM_DEBUG
printf("SetSymmetry: %s [%d,%d,%d]\n",CCTK_VarName(vi), sym[0],sym[1],sym[2]);
#endif
-
- if (CCTK_Equals(domain,"full"))
- {
- sGHex->GFSym[vi][0] = GFSYM_NOSYM;
- sGHex->GFSym[vi][2] = GFSYM_NOSYM;
- sGHex->GFSym[vi][4] = GFSYM_NOSYM;
-
- }
- else if (CCTK_Equals(domain,"octant"))
- {
- sGHex->GFSym[vi][0] = sym[0];
- sGHex->GFSym[vi][2] = sym[1];
- sGHex->GFSym[vi][4] = sym[2];
-
- }
- else if (CCTK_Equals(domain,"quadrant"))
- {
- sGHex->GFSym[vi][0] = sym[0];
- sGHex->GFSym[vi][2] = sym[1];
- sGHex->GFSym[vi][4] = GFSYM_NOSYM;
-
- }
- else if (CCTK_Equals(domain,"bitant"))
- {
- sGHex->GFSym[vi][0] = GFSYM_NOSYM;
- sGHex->GFSym[vi][2] = GFSYM_NOSYM;
- sGHex->GFSym[vi][4] = GFSYM_NOSYM;
- if (CCTK_Equals(bitant_plane,"xy")) sGHex->GFSym[vi][4]=sym[2];
- if (CCTK_Equals(bitant_plane,"xz")) sGHex->GFSym[vi][2]=sym[1];
- if (CCTK_Equals(bitant_plane,"yz")) sGHex->GFSym[vi][0]=sym[0];
- }
- else
+
+ DecodeSymParameters3D(domainsym);
+ for (dir=0; dir<MAX_FACE; ++dir)
{
- CCTK_WARN(1,"This kind of domain not supported for symmetries.");
- return(-1);
+ if (domainsym[dir])
+ {
+ sGHex->GFSym[vi][dir] = sym[dir/2];
+ }
+ else
+ {
+ sGHex->GFSym[vi][dir] = GFSYM_NOSYM;
+ }
}
#ifdef SYM_DEBUG
@@ -99,7 +84,7 @@ int SetCartSymVI(cGH *GH, int *sym, int vi)
sGHex->GFSym[vi][2],
sGHex->GFSym[vi][4]);
#endif
- return(0);
+ return 0;
}
void CCTK_FCALL CCTK_FNAME(SetCartSymVI)
@@ -108,6 +93,22 @@ void CCTK_FCALL CCTK_FNAME(SetCartSymVI)
*ierr = SetCartSymVI(GH, sym, *vi);
}
+ /*@@
+ @routine SetCartSymVN
+ @date Thu May 11 13:32:55 2000
+ @author Gerd Lanfermann
+ @desc
+ Applies symmetry boundary conditions from
+ variable index
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+
int SetCartSymVN(cGH *GH, int *sym, const char *vn) {
int vi;
vi = CCTK_VarIndex(vn);
@@ -135,11 +136,12 @@ void CCTK_FCALL CCTK_FNAME(SetCartSymVN)
/*@@
- @routine
+ @routine SetCartSymGI
@date
- @author
+ @author Gerd Lanfermann
@desc
-
+ Applies symmetry boundary conditions from
+ Group index
@enddesc
@calls
@calledby
@@ -154,9 +156,11 @@ int SetCartSymGI(cGH *GH, int *sym, int gi)
DECLARE_CCTK_PARAMETERS
+ int domainsym[MAX_FACE];
SymmetryGHex *sGHex;
int first_vari,numvars,vi;
-
+ int dir;
+
sGHex = (SymmetryGHex *)GH->extensions[CCTK_GHExtensionHandle("Symmetry")];
first_vari = CCTK_FirstVarIndexI(gi);
@@ -183,38 +187,18 @@ int SetCartSymGI(cGH *GH, int *sym, int gi)
printf("SetSymmetry: %s [%d,%d,%d]\n",CCTK_VarName(vi),
sym[0],sym[1],sym[2]);
#endif
-
- if (CCTK_Equals(domain,"full"))
- {
- sGHex->GFSym[vi][0] = GFSYM_NOSYM;
- sGHex->GFSym[vi][2] = GFSYM_NOSYM;
- sGHex->GFSym[vi][4] = GFSYM_NOSYM;
- }
- else if (CCTK_Equals(domain,"octant"))
- {
- sGHex->GFSym[vi][0] = sym[0];
- sGHex->GFSym[vi][2] = sym[1];
- sGHex->GFSym[vi][4] = sym[2];
- }
- else if (CCTK_Equals(domain,"quadrant"))
- {
- sGHex->GFSym[vi][0] = sym[0];
- sGHex->GFSym[vi][2] = sym[1];
- sGHex->GFSym[vi][4] = GFSYM_NOSYM;
- }
- else if (CCTK_Equals(domain,"bitant"))
- {
- sGHex->GFSym[vi][0] = GFSYM_NOSYM;
- sGHex->GFSym[vi][2] = GFSYM_NOSYM;
- sGHex->GFSym[vi][4] = GFSYM_NOSYM;
- if (CCTK_Equals(bitant_plane,"xy")) sGHex->GFSym[vi][4]=sym[2];
- if (CCTK_Equals(bitant_plane,"xz")) sGHex->GFSym[vi][2]=sym[1];
- if (CCTK_Equals(bitant_plane,"yz")) sGHex->GFSym[vi][0]=sym[0];
- }
- else
+
+ DecodeSymParameters3D (domainsym);
+ for (dir=0; dir<MAX_FACE; dir++)
{
- CCTK_WARN(1,"This kind of domain not supported for symmetries.");
- return(-1);
+ if (domainsym[dir])
+ {
+ sGHex->GFSym[vi][dir] = sym[dir/2];
+ }
+ else
+ {
+ sGHex->GFSym[vi][dir] = GFSYM_NOSYM;
+ }
}
#ifdef SYM_DEBUG
@@ -240,7 +224,8 @@ void CCTK_FCALL CCTK_FNAME(SetCartSymGI)
@date
@author
@desc
-
+ Applies symmetry boundary conditions from
+ "Implementation::Groupname"
@enddesc
@calls
@calledby