diff options
Diffstat (limited to 'src/SymmetryWrappers.c')
-rw-r--r-- | src/SymmetryWrappers.c | 445 |
1 files changed, 0 insertions, 445 deletions
diff --git a/src/SymmetryWrappers.c b/src/SymmetryWrappers.c deleted file mode 100644 index 548c149..0000000 --- a/src/SymmetryWrappers.c +++ /dev/null @@ -1,445 +0,0 @@ - /*@@ - @file SymmetryWrappers.c - @date April 2000 - @author Gerd Lanfermann - @desc - Apply symmetry boundary conditions - @enddesc - @@*/ - -#include <stdlib.h> - -#include "cctk.h" -#include "cctk_Parameters.h" -#include "cctk_FortranString.h" -#include "Symmetry.h" - -void DecodeSymParameters3D(int sym[6]); - -void CCTK_FCALL CCTK_FNAME(CartSymGI)(int *ierr, cGH *GH, int *gi); -void CCTK_FCALL CCTK_FNAME(CartSymGN) - (int *ierr, cGH *GH, ONE_FORTSTRING_ARG); -void CCTK_FCALL CCTK_FNAME(CartSymVI)(int *ierr, cGH *GH, int *vi); -void CCTK_FCALL CCTK_FNAME(CartSymVN) - (int *ierr, cGH *GH, ONE_FORTSTRING_ARG); - -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); - - -static const char *rcsid = "$Header$"; - -CCTK_FILEVERSION(CactusBase_CartGrid3D_SymmetryWrappers_c) - -/*#define SYM_DEBUG*/ - - - /*@@ - @routine - @date - @author - @desc - - @enddesc - @calls - @calledby - @history - - @endhistory - -@@*/ - -int CartSymGI(cGH *GH, int gi) -{ - DECLARE_CCTK_PARAMETERS - - int numvars, vi, first_vi; - int idim, gdim; - int berr=-1,ierr=-1; - int time; - int *doSym, *dstag, *lssh, *cntstag; - int domainsym[MAX_FACE]; - SymmetryGHex *sGHex; - - /* Get out if we are sure no symmetries should be applied */ - /* FIXME: There has to be a better way early bailout! */ - /*$if (CCTK_Equals(domain,"full")) return 0;$*/ - - first_vi = CCTK_FirstVarIndexI(gi); - if (first_vi<0) - { - CCTK_VWarn(1,__LINE__,__FILE__,CCTK_THORNSTRING, - "CartSymGI: Cannot find group %d (%s)",gi,CCTK_GroupName(gi)); - return(-1); - } - - numvars = CCTK_NumVarsInGroupI(gi); - gdim = CCTK_GroupDimI(gi); - - - sGHex = (SymmetryGHex*)GH->extensions[CCTK_GHExtensionHandle("Symmetry")]; - doSym = (int *)malloc((2*gdim)*sizeof(int)); - dstag = (int *)malloc(gdim*sizeof(int)); - lssh = (int *)malloc(gdim*sizeof(int)); - cntstag= (int *)malloc(gdim*sizeof(int)); - - /* get the directional staggering of the group */ - ierr = CCTK_GroupStaggerDirArrayGI(dstag, gdim, gi); - - /* Set value to one if grid is staggered around the center */ - - /* Avoid origin? Default is yes */ - cntstag[0] = no_origin && no_originx && avoid_origin && avoid_originx; - cntstag[1] = no_origin && no_originy && avoid_origin && avoid_originy; - cntstag[2] = no_origin && no_originz && avoid_origin && avoid_originz; - - /* Use next time level, if present */ - time = 0; - /*if (time < 0) - { - time = 0; - }*/ - - DecodeSymParameters3D(domainsym); - - for (vi=first_vi; vi<first_vi+numvars; vi++) - { - /* Apply Symmetries to lower sides [0,2,4,...] if: - + if the Symmetry is activated (== NOT NOSYM) - + if the Symmetry is set (== NOT UNSET) - + if the length in the direction is more than 1 grid point - + if the processor has a lower physical boundary. - Whether a grid allows a symmetry along a direction (e.g. octant=all) - is part if the Symmetry Setup process. - - No Symmetries for "upper" sides : [1,3,5,...] - */ - for (idim=0; idim<gdim; idim++) - { - if ((sGHex->GFSym[vi][idim*2] == GFSYM_UNSET)) - { - CCTK_VWarn(0,__LINE__,__FILE__,CCTK_THORNSTRING, - "Symmetries unspecified for %s",CCTK_FullName(vi)); - } - - lssh[idim] = GH->cctk_lssh[CCTK_LSSH_IDX(dstag[idim],idim)]; - - if (((sGHex->GFSym[vi][idim*2] != GFSYM_NOSYM) && - (sGHex->GFSym[vi][idim*2] != GFSYM_UNSET)) && - lssh[idim]>1 && GH->cctk_bbox[idim*2]==1) - { - doSym[idim*2] = domainsym[idim*2]; - } - else - { - doSym[idim*2] = 0; - } - - doSym[idim*2+1] = 0; - - } - -#ifdef SYM_DEBUG - printf(" DOSYM: %s [%d,%d] [%d,%d] [%d,%d] --- %d %d %d\n", - CCTK_VarName(vi), - doSym[0],doSym[1], - doSym[2],doSym[3], - doSym[4],doSym[5], - sGHex->GFSym[vi][0], - sGHex->GFSym[vi][2], - sGHex->GFSym[vi][4]); -#endif - - switch (gdim) - { - case 1: berr = CartApplySym1Di(GH, - doSym, - cntstag, - lssh, - GH->cctk_nghostzones, - sGHex->GFSym[vi], - GH->data[vi][time]); break; - case 2: berr = CartApplySym2Di(GH, - doSym, - cntstag, - lssh, - GH->cctk_nghostzones, - sGHex->GFSym[vi], - GH->data[vi][time]); break; - case 3: berr = CartApplySym3Di(GH, - doSym, - cntstag, - lssh, - GH->cctk_nghostzones, - sGHex->GFSym[vi], - GH->data[vi][time]); break; - default: berr = -1; CCTK_WARN(1, "No Symmetries for GF of dim>3"); - } - berr=(berr>-1)?0:-1; - } - - free(dstag); - free(doSym); - free(lssh); - free(cntstag); - - return(ierr); -} - -void CCTK_FCALL CCTK_FNAME(CartSymGI)(int *ierr, cGH *GH, int *gi) -{ - *ierr = CartSymGI(GH,*gi); - return; -} - - - - /*@@ - @routine - @date - @author - @desc - - @enddesc - @calls - @calledby - @history - - @endhistory - -@@*/ - -int CartSymGN(cGH *GH, const char *gn) -{ - int gi=CCTK_GroupIndex(gn); - int retval=-1; - if (gi>-1) - { - retval = CartSymGI(GH,gi); - } - else - { - CCTK_VWarn(1,__LINE__,__FILE__,CCTK_THORNSTRING, - "CartSymGN: Cannot find group %s",gn); - } - return retval; -} - -void CCTK_FCALL CCTK_FNAME(CartSymGN) - (int *ierr, cGH *GH, ONE_FORTSTRING_ARG) -{ - ONE_FORTSTRING_CREATE(gn) - *ierr = CartSymGN(GH,gn); - free(gn); - return; -} - - - /*@@ - @routine - @date - @author - @desc - - @enddesc - @calls - @calledby - @history - - @endhistory - -@@*/ - -int CartSymVI(cGH *GH, int vi) -{ - DECLARE_CCTK_PARAMETERS - - int gi; - int idim, gdim; - int berr=-1; - int time; - int *doSym, *dstag, *lssh, *cntstag; - SymmetryGHex *sGHex; - - /* Get out if we are sure no symmetries should be applied */ - /* FIXME: There has to be a better way early bailout! */ - if (CCTK_Equals(domain,"full")) return 0; - - /* get the dimension/directional staggering of the - group that vi belongs to */ - gi = CCTK_GroupIndexFromVarI(vi); - if (gi<0) - { - CCTK_VWarn(1,__LINE__,__FILE__,CCTK_THORNSTRING, - "Cannot find variable index %d (%s) in CartSymVI", - vi,CCTK_FullName(vi)); - return(-1); - } - - gdim = CCTK_GroupDimI(gi); - - sGHex = (SymmetryGHex*)GH->extensions[CCTK_GHExtensionHandle("Symmetry")]; - doSym = (int *)malloc((2*gdim)*sizeof(int)); - dstag = (int *)malloc(gdim*sizeof(int)); - lssh = (int *)malloc(gdim*sizeof(int)); - cntstag= (int *)malloc(gdim*sizeof(int)); - - /* get the directional staggering of the group */ - berr = CCTK_GroupStaggerDirArrayGI(dstag, gdim, gi); - - /* Avoid origin? Default is yes */ - cntstag[0] = no_origin && no_originx && avoid_origin && avoid_originx; - cntstag[1] = no_origin && no_originy && avoid_origin && avoid_originy; - cntstag[2] = no_origin && no_originz && avoid_origin && avoid_originz; - - /* Use next time level, if present */ - time = 0; - /* if (time < 0) - { - time = 0; - }*/ - - - /* Apply Symmetries to lower sides [0,2,4] if: - + if the Symmetry is activated (== NOT NOSYM) - + if the Symmetry is set (== NOT UNSET) - + if the length in the direction is more than 1 grid point - + if the processor has a lower physical boundary. - Whether a grid allows a symmetry along a direction (e.g. octant=all) - is part if the Symmetry Setup process. - - No Symmetries for "upper" sides : [1,3,5] - */ - for (idim=0; idim<gdim; idim++) - { - if (sGHex->GFSym[vi][idim*2]==GFSYM_UNSET) - { - CCTK_VWarn(0,__LINE__,__FILE__,CCTK_THORNSTRING, - "Symmetries unspecified for %s", CCTK_FullName(vi)); - } - - lssh[idim] = GH->cctk_lssh[CCTK_LSSH_IDX(dstag[idim],idim)]; - - doSym[idim*2] = (((sGHex->GFSym[vi][idim*2]!=GFSYM_NOSYM) && - (sGHex->GFSym[vi][idim*2]!=GFSYM_UNSET)) && - lssh[idim]>1 && GH->cctk_bbox[idim*2]); - doSym[idim*2+1] = 0; - } - -#ifdef SYM_DEBUG - printf(" DOSYM: %s [%d,%d] [%d,%d] [%d,%d] --- %d %d %d\n", - CCTK_VarName(vi), - doSym[0],doSym[1], - doSym[2],doSym[3], - doSym[4],doSym[5], - sGHex->GFSym[vi][0], - sGHex->GFSym[vi][2], - sGHex->GFSym[vi][4]); -#endif - - - - switch (gdim) - { - case 1: berr = CartApplySym1Di(GH, - doSym, - cntstag, - lssh, - GH->cctk_nghostzones, - sGHex->GFSym[vi], - GH->data[vi][time]); break; - case 2: berr = CartApplySym2Di(GH, - doSym, - cntstag, - lssh, - GH->cctk_nghostzones, - sGHex->GFSym[vi], - GH->data[vi][time]); break; - case 3: berr = CartApplySym3Di(GH, - doSym, - cntstag, - lssh, - GH->cctk_nghostzones, - sGHex->GFSym[vi], - GH->data[vi][time]); break; - default: berr = -1; CCTK_WARN(1, "No Symmetries for GF dim>3"); - } - - free(lssh); - free(dstag); - free(doSym); - free(cntstag); - - return(berr); -} - -void CCTK_FCALL CCTK_FNAME(CartSymVI)(int *ierr, cGH *GH, int *vi) -{ - *ierr = CartSymVI(GH, *vi); - return; -} - - - - /*@@ - @routine - @date - @author - @desc - - @enddesc - @calls - @calledby - @history - - @endhistory - -@@*/ - -int CartSymVN(cGH *GH, const char *vn) -{ - int retval=-1; - int vi=CCTK_VarIndex(vn); - - if (vi>-1) - { - retval = CartSymVI(GH, vi); - } - else - { - CCTK_VWarn(1,__LINE__,__FILE__,CCTK_THORNSTRING, - "Cannot find variable %s in CartSymVN",vn); - } - return retval; -} - -void CCTK_FCALL CCTK_FNAME(CartSymVN) - (int *ierr, cGH *GH, ONE_FORTSTRING_ARG) -{ - ONE_FORTSTRING_CREATE(vn) - *ierr = CartSymVN(GH,vn); - free(vn); - return; -} - |