diff options
Diffstat (limited to 'src/SymmetryWrappers.c')
-rw-r--r-- | src/SymmetryWrappers.c | 261 |
1 files changed, 153 insertions, 108 deletions
diff --git a/src/SymmetryWrappers.c b/src/SymmetryWrappers.c index 8641938..eed3455 100644 --- a/src/SymmetryWrappers.c +++ b/src/SymmetryWrappers.c @@ -1,9 +1,13 @@ -#include <stdio.h> -#include <assert.h> + /*@@ + @file SymmetryWrappers.c + @date April 2000 + @author Gerd Lanfermann + @desc + Apply symmetry boundary conditions + @enddesc + @@*/ + #include <stdlib.h> -#include <ctype.h> -#include <stdarg.h> -#include <string.h> #include "cctk.h" #include "cctk_Parameters.h" @@ -11,41 +15,61 @@ #include "Symmetry.h" int CartApplySym3Di(cGH *GH, - int gdim, - int *doSym, - int *cntstag, - int *lssh, - int *ghostz, - int *sym, - CCTK_REAL *var); + int gdim, + int *doSym, + int *cntstag, + int *lssh, + int *ghostz, + int *sym, + CCTK_REAL *var); int CartApplySym2Di(cGH *GH, - int gdim, - int *doSym, - int *cntstag, - int *lssh, - int *ghostz, - int *sym, - CCTK_REAL *var); + int gdim, + int *doSym, + int *cntstag, + int *lssh, + int *ghostz, + int *sym, + CCTK_REAL *var); int CartApplySym1Di(cGH *GH, - int gdim, - int *doSym, - int *cntstag, - int *lssh, - int *ghostz, - int *sym, - CCTK_REAL *var); + int gdim, + int *doSym, + int *cntstag, + int *lssh, + int *ghostz, + int *sym, + CCTK_REAL *var); + +static 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 idim, gdim; int berr=-1,ierr=-1; int time; int *doSym, *dstag, *lssh, *cntstag; @@ -56,17 +80,16 @@ int CartSymGI(cGH *GH, int gi) /*$if (CCTK_Equals(domain,"full")) return 0;$*/ first_vi = CCTK_FirstVarIndexI(gi); - numvars = CCTK_NumVarsInGroupI(gi); - gdim = CCTK_GroupDimI(gi); if (first_vi<0) { - char mess[256]; - sprintf(mess,"Cannot find group %s (grp.index: %d) in CartSymGN", - CCTK_GroupName(gi),first_vi); - CCTK_WARN(1,mess); + CCTK_VWarn(1,__LINE__,__FILE__,CCTK_THORNSTRING, + "Cannot find group %d (%s) in CartSymGI",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)); @@ -105,25 +128,22 @@ int CartSymGI(cGH *GH, int gi) for (vi=first_vi; vi<first_vi+numvars; vi++) { - /* Apply Symmetries to lower sides [0,2,4] if: - + if the Symmetrie is activated (== NOT NOSYM) - + if the Symmetrie is set (== NOT UNSET) - + if the lenght in the direction is more than 1 grid point + /* 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 Symmetrie Setup process. + is part if the Symmetry Setup process. - No Symmetries for "upper" sides : [1,3,5] + No Symmetries for "upper" sides : [1,3,5,...] */ for (idim=0; idim<gdim; idim++) { - if ((sGHex->GFSym[vi][idim*2] ==GFSYM_UNSET)) - + if ((sGHex->GFSym[vi][idim*2] == GFSYM_UNSET)) { - char mess[128]; - sprintf(mess, - "You apply a symmetry to a grid functions but have not specified the symmetries.\nVariable name: %s", CCTK_FullName(vi)); - CCTK_WARN(0,mess); + 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)]; @@ -179,54 +199,76 @@ int CartSymGI(cGH *GH, int gi) free(dstag); free(doSym); + free(lssh); free(cntstag); return(ierr); } -void FMODIFIER FORTRAN_NAME(CartSymGI) - (int *ierr, cGH *GH, int *gi) +void CCTK_FCALL CCTK_FNAME(CartSymGI)(int *ierr, cGH *GH, int *gi) { - *ierr = CartSymGI(GH, *gi); + *ierr = CartSymGI(GH,*gi); + return; } + + + /*@@ + @routine + @date + @author + @desc + + @enddesc + @calls + @calledby + @history + + @endhistory + +@@*/ + int CartSymGN(cGH *GH, const char *gn) { - int gi; - char mess[128]; - gi = CCTK_GroupIndex(gn); - + int gi=CCTK_GroupIndex(gn); + int retval=-1; if (gi>-1) - return(CartSymGI(GH,gi)); + { + retval = CartSymGI(GH,gi); + } else { - sprintf(mess,"Cannot find implementation::group >%s< in CartSymGN",gn); - CCTK_WARN(1,mess); - return(-1); + CCTK_VWarn(1,__LINE__,__FILE__,CCTK_THORNSTRING, + "Cannot find group %s in CartSymGN",gn); } + return retval; } -void FMODIFIER FORTRAN_NAME(CartSymGN) +void CCTK_FCALL CCTK_FNAME(CartSymGN) (int *ierr, cGH *GH, ONE_FORTSTRING_ARG) { ONE_FORTSTRING_CREATE(gn) - int gi; - char mess[128]; - - gi = CCTK_GroupIndex(gn); - - if (gi>-1) - *ierr = CartSymGI(GH, gi); - else - { - sprintf(mess,"Cannot find group implementation::group >%s< in CartSymGN",gn); - CCTK_WARN(1,mess); - *ierr = -1; - } - free(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 @@ -247,9 +289,9 @@ int CartSymVI(cGH *GH, int vi) gi = CCTK_GroupIndexFromVarI(vi); if (gi<0) { - char mess[256]; - sprintf(mess,"Cannot find implementation::variable >%s< (var.index: %d) in CartSymGN",CCTK_FullName(vi),vi); - CCTK_WARN(1,mess); + CCTK_VWarn(1,__LINE__,__FILE__,CCTK_THORNSTRING, + "Cannot find variable index %d (%s) in CartSymVI", + vi,CCTK_FullName(vi)); return(-1); } @@ -291,12 +333,12 @@ int CartSymVI(cGH *GH, int vi) /* Apply Symmetries to lower sides [0,2,4] if: - + if the Symmetrie is activated (== NOT NOSYM) - + if the Symmetrie is set (== NOT UNSET) - + if the lenght in the direction is more than 1 grid point + + 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 Symmetrie Setup process. + is part if the Symmetry Setup process. No Symmetries for "upper" sides : [1,3,5] */ @@ -304,10 +346,8 @@ int CartSymVI(cGH *GH, int vi) { if (sGHex->GFSym[vi][idim*2]==GFSYM_UNSET) { - char mess[128]; - sprintf(mess, - "You apply a symmetry to a grid functions but have not specified the symmetries.\nVariable name: %s", CCTK_FullName(vi)); - CCTK_WARN(0,mess); + 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)]; @@ -360,6 +400,7 @@ int CartSymVI(cGH *GH, int vi) default: berr = -1; CCTK_WARN(1, "No Symmetries for GF dim>3"); } + free(lssh); free(dstag); free(doSym); free(cntstag); @@ -367,48 +408,52 @@ int CartSymVI(cGH *GH, int vi) return(berr); } -void FMODIFIER FORTRAN_NAME(CartSymVI) - (int *ierr, cGH *GH, int *vi) +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 vi; - char mess[128]; + int retval=-1; + int vi=CCTK_VarIndex(vn); - vi = CCTK_VarIndex(vn); - if (vi>-1) - return(CartSymVI(GH, vi)); + { + retval = CartSymVI(GH, vi); + } else { - sprintf(mess,"Cannot find implementation::variable >%s< in BndFlatVN",vn); - CCTK_WARN(1,mess); - return(-1); + CCTK_VWarn(1,__LINE__,__FILE__,CCTK_THORNSTRING, + "Cannot find variable %s in CartSymVN",vn); } + return retval; } -void FMODIFIER FORTRAN_NAME(CartSymVN) +void CCTK_FCALL CCTK_FNAME(CartSymVN) (int *ierr, cGH *GH, ONE_FORTSTRING_ARG) { ONE_FORTSTRING_CREATE(vn) - int vi; - char mess[128]; - - vi = CCTK_VarIndex(vn); - - if (vi>-1) - { - *ierr = CartSymVI(GH, vi); - } - else - { - sprintf(mess,"Cannot find implementation::variable >%s< in FlatBndVN",vn); - CCTK_WARN(1,mess); - *ierr=-1; - } + *ierr = CartSymVN(GH,vn); free(vn); + return; } |