diff options
Diffstat (limited to 'src/SetSymmetry.c')
-rw-r--r-- | src/SetSymmetry.c | 131 |
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 |