diff options
Diffstat (limited to 'src/Comm.c')
-rw-r--r-- | src/Comm.c | 72 |
1 files changed, 72 insertions, 0 deletions
@@ -103,6 +103,78 @@ int PUGH_SyncGroup(const cGH *GH, const char *groupname) /*@@ + @routine PUGH_SyncGroupsByDirI + @author Thomas Radke + @date 29 June 2006 + @desc + Synchronizes a list of groups in the given directions. + @enddesc + @calls PUGH_SyncGArrayGroup + + @var GH + @vdesc Pointer to CCTK grid hierarchy + @vtype const cGH * + @vio in + @endvar + @var num_groups + @vdesc number of groups to be synchronised + @vtype int + @vio in + @endvar + @var groups + @vdesc list of indices of groups to be synchronised + @vtype const int * + @vio in + @endvar + @var directions + @vdesc list of directions to be synchronised + @vtype const int * + @vio in + @endvar + + @returntype int + @returndesc + returns the number of groups synchronised successfully + @endreturndesc +@@*/ +int PUGH_SyncGroupsByDirI(const cGH *GH, + int num_groups, + const int *groups, + const int *directions) +{ + int group, first_var, retval = 0; + pGH *pughGH = PUGH_pGH (GH); + + + /* individual directions aren't supported (yet?) */ + if (directions != NULL) + { + CCTK_WARN (0, "PUGH doesn't support synchronisation of individual " + "directions"); + } + + /* synchronise all groups one by one */ + for (group = 0; group < num_groups; group++) + { +#ifdef DEBUG_PUGH + char *groupname = CCTK_GroupName (groups[group]); + printf (" PUGH_SyncGroupsByDirI: request for group '%s'\n", groupname); + fflush (stdout); + free (groupname); +#endif + + first_var = CCTK_FirstVarIndexI (groups[group]); + if (first_var > 0 && PUGH_SyncGArrayGroup (pughGH, first_var) == 0) + { + retval++; + } + } + + return (retval); +} + + +/*@@ @routine PUGH_EnableGroupComm @author Thomas Radke @date 30 Mar 1999 |