aboutsummaryrefslogtreecommitdiff
path: root/src/SymmetryWrappers.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/SymmetryWrappers.c')
-rw-r--r--src/SymmetryWrappers.c261
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;
}