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); numvars = CCTK_NumVarsInGroupI(gi); if (first_vari<0) { CCTK_VWarn(1,__LINE__,__FILE__,CCTK_THORNSTRING, "Cannot find group %s (grp.index: %d) in SetCartSymGI", CCTK_GroupName(gi),first_vari); return(-1); } /* Reference the hash table in the GHex and tell it what kind of symmetry is being applied (depending on sym and the grid layout) If there is no symmetry necessary,set ESYM_NOSYM When we apply a symmetry and find ESYM_UNSET, something went wrong! */ for (vi=first_vari; vi<first_vari+numvars; vi++) { #ifdef SYM_DEBUG printf("SetSymmetry: %s [%d,%d,%d]\n",CCTK_VarName(vi), sym[0],sym[1],sym[2]); #endif DecodeSymParameters3D (domainsym); for (dir=0; dir<MAX_FACE; dir++) { if (domainsym[dir]) { sGHex->GFSym[vi][dir] = sym[dir/2]; } else { sGHex->GFSym[vi][dir] = GFSYM_NOSYM; } } #ifdef SYM_DEBUG printf("SetSymmetry: %s [%d,%d,%d]\n\n",imp_gf, sGHex->GFSym[vi][0], sGHex->GFSym[vi][2], sGHex->GFSym[vi][4]); #endif } USE_CCTK_PARAMETERS; return(0); }
/*@@ @routine CCTK_SyncGroupI @date Thu Sep 18 14:27:18 1999 @author Gerd Lanfermann @desc Synchronizes a group given by its index. @enddesc @calls CCTK_GroupName CCTK_SyncGroup @var GH @vdesc Pointer to Grid Hierachy @vtype cGH * @vio in @endvar @var group @vdesc group index @vtype int @vio in @endvar @returntype int @returndesc 0 for success, or<BR> -1 if an invalid group was given,<BR> -2 if driver returned an error on syncing the group @endreturndesc @@*/ int CCTK_SyncGroupI (cGH *GH, int group) { int retval; char *groupname; retval = -1; groupname = CCTK_GroupName (group); if (groupname) { retval = CCTK_SyncGroup (GH, groupname); if (retval) { retval = -2; } free (groupname); } return (retval); }
/*@@ @routine PUGH_DestroyPGH @date Thu Aug 21 11:38:10 1997 @author Paul Walker @desc Destroys a GH object. @enddesc @var GHin @vdesc address of PUGH GH extensions object to be destroyed @vtype pGH ** @vio in @endvar @@*/ void PUGH_DestroyPGH (pGH **GHin) { pGH *GH; pGA *GA; cGroup pgroup; int i; int variable; int group; int this_var; GH = *GHin; #ifdef CCTK_MPI CACTUS_MPI_ERROR (MPI_Comm_free (&GH->PUGH_COMM_WORLD)); CACTUS_MPI_ERROR (MPI_Type_free (&GH->PUGH_mpi_complex)); #ifdef CCTK_REAL4 CACTUS_MPI_ERROR (MPI_Type_free (&GH->PUGH_mpi_complex8)); #endif #ifdef CCTK_REAL8 CACTUS_MPI_ERROR (MPI_Type_free (&GH->PUGH_mpi_complex16)); #endif #ifdef CCTK_REAL16 CACTUS_MPI_ERROR (MPI_Type_free (&GH->PUGH_mpi_complex32)); #endif #endif /* Great. Now go about the work of destroying me. */ variable = 0; for(group = 0; group < CCTK_NumGroups(); group++) { #ifdef DEBUG_PUGH printf("Calling Destroying Group %s\n", CCTK_GroupName(group)); fflush(stdout); #endif CCTK_GroupData(group,&pgroup); if (pgroup.grouptype == CCTK_ARRAY || pgroup.grouptype == CCTK_GF) { GA = (pGA *) GH->variables[variable][0]; /* Destroy group comm buffers */ if (GA->groupcomm) { if (GA->groupcomm->commflag != PUGH_NOCOMM) { PUGH_DisableGArrayGroupComm (GH, variable, GA->groupcomm); } PUGH_DestroyComm (&GA->groupcomm); } /* Destroy the group's connectivity and extras structure for CCTK_ARRAY groups. Remember that the connectivity and extras for CCTK_GF types are shared between all such groups and are destroyed later. */ if (GA->connectivity != GH->Connectivity[pgroup.dim-1]) { PUGH_DestroyConnectivity (&GA->connectivity); } if (GA->extras != GH->GFExtras[pgroup.dim-1]) { PUGH_DestroyPGExtras (&GA->extras); } } for (this_var = 0; this_var < pgroup.numvars; this_var++, variable++) { for(i = 0 ; i < pgroup.numtimelevels; i++) { switch(pgroup.grouptype) { case CCTK_GF: case CCTK_ARRAY: PUGH_DestroyGArray(&(((pGA ***)GH->variables)[variable][i])); break; case CCTK_SCALAR: if (GH->variables[variable][i]) { free(GH->variables[variable][i]); } break; } } free(GH->variables[variable]); } } for (i=1;i<=GH->dim;i++) { PUGH_DestroyConnectivity(&GH->Connectivity[i-1]); PUGH_DestroyPGExtras(&GH->GFExtras[i-1]); } if(GH->identity_string) { free(GH->identity_string); } free(GH->Connectivity); free(GH->GFExtras); free(GH->variables); free(GH); *GHin = NULL; }