aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorallen <allen@c78560ca-4b45-4335-b268-5f3340f3cb52>1999-09-27 17:02:43 +0000
committerallen <allen@c78560ca-4b45-4335-b268-5f3340f3cb52>1999-09-27 17:02:43 +0000
commit1bd138bb37a1ef2107603ced1f2f7943fb0933d2 (patch)
tree4a171e54c64d2916dd306873d5f8ffbdaf49d3b8
parent9628fc9f2662c1da20fff57ee3f94db58cc1ca0e (diff)
Updated function names
git-svn-id: http://svn.cactuscode.org/arrangements/CactusBase/CartGrid3D/trunk@59 c78560ca-4b45-4335-b268-5f3340f3cb52
-rw-r--r--src/Symmetry.c141
1 files changed, 124 insertions, 17 deletions
diff --git a/src/Symmetry.c b/src/Symmetry.c
index 4fcb559..182dd63 100644
--- a/src/Symmetry.c
+++ b/src/Symmetry.c
@@ -144,14 +144,16 @@ void FMODIFIER FORTRAN_NAME(SetCartSymmetry)(cGH *GH, int *sym, ONE_FORTSTRING_
@@*/
-void ApplySymmetry(cGH *GH, char *name) {
+
+
+
+int CartSymBCGroupI(cGH *GH, int groupnum) {
void FORTRAN_NAME(SymmetryCondition)(int *, CCTK_REAL *, int *, int *, int *);
DECLARE_CCTK_PARAMETERS
SymmetryGHex *sGHex;
- int groupnum;
int first,last,index,j;
int doSym[6];
@@ -161,18 +163,12 @@ void ApplySymmetry(cGH *GH, char *name) {
/* Get the pointer to the Symmetry GH extension */
sGHex = (SymmetryGHex*)GH->extensions[CCTK_GHExtensionHandle("Symmetry")];
-#ifdef DEBUG_BOUND
- printf("\n In ApplySymmetry\n -----------\n");
- printf(" Applying boundary conditions to -%s-\n",name);
-#endif
- /* Get the group number */
- groupnum = CCTK_GroupIndex(name);
if (groupnum < 0)
{
char *message=NULL;
- message = (char *)malloc(300*sizeof(char)+sizeof(name));
- sprintf(message,"Invalid group number decomposing %s",name);
+ message = (char *)malloc(300*sizeof(char));
+ sprintf(message,"Invalid group number %d",groupnum);
CCTK_WARN(0,message);
free(message);
}
@@ -193,8 +189,8 @@ void ApplySymmetry(cGH *GH, char *name) {
(sGHex->GFSym[index][2]==GFSYM_UNSET)||
(sGHex->GFSym[index][4]==GFSYM_UNSET)) {
char *message=NULL;
- message = (char *)malloc(300*sizeof(char)+sizeof(name));
- sprintf(message,"Cannot apply symmetry to -%s- without registered symmetries",name);
+ message = (char *)malloc(300*sizeof(char));
+ sprintf(message,"Cannot apply symmetry to -%d- without registered symmetries",index);
CCTK_WARN(1,message);
free(message);
}
@@ -230,20 +226,131 @@ void ApplySymmetry(cGH *GH, char *name) {
}
-void FMODIFIER FORTRAN_NAME(ApplySymmetry)(cGH *GH, ONE_FORTSTRING_ARG) {
- ONE_FORTSTRING_CREATE(name)
+
+
+int CartSymBCVarI(cGH *GH, int varnum) {
+
+ void FORTRAN_NAME(SymmetryCondition)(int *, CCTK_REAL *, int *, int *, int *);
- ApplySymmetry(GH,name);
+ DECLARE_CCTK_PARAMETERS
+
+ SymmetryGHex *sGHex;
+ int index,j;
+ int doSym[6];
+
+ /* Get out if we are sure no symmetries should be applied */
+ if (CCTK_Equals(domain,"full")) return;
+
+ /* Get the pointer to the Symmetry GH extension */
+ sGHex = (SymmetryGHex*)GH->extensions[CCTK_GHExtensionHandle("Symmetry")];
+
+ /* and check that we actually have a grid function (and not a scalar)*/
+ if (CCTK_GroupTypeFromVarI(index) == GROUP_GF) {
+
+ /*at this point, there should be NO ESYM_UNSET anymore
+ if there is, we forgot to register the symmetries for a GF */
+ if ((sGHex->GFSym[varnum][0]==GFSYM_UNSET)||
+ (sGHex->GFSym[varnum][2]==GFSYM_UNSET)||
+ (sGHex->GFSym[varnum][4]==GFSYM_UNSET)) {
+ char *message=NULL;
+ message = (char *)malloc(300*sizeof(char));
+ sprintf(message,"Cannot apply symmetry to -%d- without registered symmetries",varnum);
+ CCTK_WARN(1,message);
+ free(message);
+ }
+
+ /* whether we want to apply sym depends on several things: */
+ for (j=0;j<3;j++)
+ {
+ doSym[2*j+1]=0;
+ if ( (GH->cctk_lsh[j]>1) && (GH->cctk_bbox[2*j]==1) &&
+ (sGHex->GFSym[varnum][2*j] != GFSYM_UNSET) &&
+ (sGHex->GFSym[varnum][2*j] != GFSYM_NOSYM)
+ )
+ doSym[2*j] = 1;
+ else
+ doSym[2*j] = 0;
+ }
+ /* Call the Fortran Symmetry Routine */
+ FORTRAN_NAME(SymmetryCondition)(
+ GH->cctk_lsh,
+ /* xyz-size of PE local grid */
+ GH->data[varnum][0],
+ /* pointer to start of data array for GF[varnum]*/
+ GH->cctk_nghostzones,
+ /* number of ghost zones */
+ sGHex->GFSym[varnum],
+ /* the symmetries for this GF */
+ doSym
+ /* flags whether to apply syms */
+ );
+ }
+}
+
+
+int CartSymBCVar(cGH *GH, char *name)
+{
+
+ int index;
+ index = CCTK_VarIndex(name);
+ CartSymBCVarI(GH,index);
+ return 0;
+
+}
+
+int CartSymBCGroup(cGH *GH, char *name)
+{
+
+ int index;
+ int retval;
+ index = CCTK_GroupIndex(name);
+ retval = CartSymBCGroupI(GH,index);
+ return retval;
+
+}
+
+void FMODIFIER FORTRAN_NAME(CartSymBCVar)(int *ierr, cGH *GH, ONE_FORTSTRING_ARG)
+{
+
+ ONE_FORTSTRING_CREATE(name)
+ *ierr = CartSymBCVar(GH,name);
+ free(name);
+}
+
+void FMODIFIER FORTRAN_NAME(CartSymBCGroup)(int *ierr, cGH *GH, ONE_FORTSTRING_ARG)
+{
+
+ ONE_FORTSTRING_CREATE(name)
+ *ierr = CartSymBCGroup(GH,name);
+ free(name);
+}
+
+void FMODIFIER FORTRAN_NAME(ApplySymmetry)(cGH *GH, ONE_FORTSTRING_ARG)
+{
+
+ ONE_FORTSTRING_CREATE(name)
+ CartSymBCGroup(GH,name);
free(name);
}
-void FMODIFIER FORTRAN_NAME(ApplySymmetryVarI)(cGH *GH, int *vi) {
- ApplySymmetry(GH, CCTK_GroupNameFromVarI(*vi));
+void FMODIFIER FORTRAN_NAME(CartSymBCVarI)(int *ierr, cGH *GH, int *index)
+{
+ *ierr = CartSymBCVarI(GH,*index);
+}
+
+void FMODIFIER FORTRAN_NAME(CartSymBCGRoupI)(int *ierr, cGH *GH, int *index)
+{
+ *ierr = CartSymBCGroupI(GH,*index);
}
+
+
+
+
+