diff options
author | tradke <tradke@b61c5cb5-eaca-4651-9a7a-d64986f99364> | 2006-07-06 17:41:27 +0000 |
---|---|---|
committer | tradke <tradke@b61c5cb5-eaca-4651-9a7a-d64986f99364> | 2006-07-06 17:41:27 +0000 |
commit | b03b3f8955ab2436e8df1dd5da79573c5beeed9f (patch) | |
tree | abe47f8f79b0fba15fe0e0c1dd6657e56192625c | |
parent | 1ec9f7182a8f82535e52fcaaa26c6d2ff644583a (diff) |
Provide new overload function for CCTK_SyncGroupsByDirI().
Do not overload CCTK_SyncGroup() anymore by default.
This patch requires the most recent changes in the flesh API to provide the
new overloadable function CCTK_SyncGroupsByDirI(), as discussed in thread
http://www.cactuscode.org/old/pipermail/developers/2006-June/004933.html.
git-svn-id: http://svn.cactuscode.org/arrangements/CactusPUGH/PUGH/trunk@482 b61c5cb5-eaca-4651-9a7a-d64986f99364
-rw-r--r-- | param.ccl | 3 | ||||
-rw-r--r-- | src/Comm.c | 72 | ||||
-rw-r--r-- | src/Startup.c | 4 | ||||
-rw-r--r-- | src/pugh_Comm.h | 4 |
4 files changed, 83 insertions, 0 deletions
@@ -258,6 +258,9 @@ BOOLEAN overloadevolve "Overload Evolve driver function" } "yes" BOOLEAN overloadsyncgroup "Overload SyncGroup driver function" { +} "no" +BOOLEAN overloadsyncgroupsbydiri "Overload SyncGroupsByDirI driver function" +{ } "yes" BOOLEAN overloadenablegroupstorage "Overload EnableGroupStorage driver function" { @@ -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 diff --git a/src/Startup.c b/src/Startup.c index 2160216..b0f6d2d 100644 --- a/src/Startup.c +++ b/src/Startup.c @@ -59,6 +59,10 @@ int PUGH_Startup(void) { CCTK_OverloadSyncGroup(PUGH_SyncGroup); } + if (overloadsyncgroupsbydiri) + { + CCTK_OverloadSyncGroupsByDirI(PUGH_SyncGroupsByDirI); + } if (overloadenablegroupstorage) { CCTK_OverloadGroupStorageIncrease(PUGH_GroupStorageIncrease); diff --git a/src/pugh_Comm.h b/src/pugh_Comm.h index 0c02e43..c6c4a9a 100644 --- a/src/pugh_Comm.h +++ b/src/pugh_Comm.h @@ -18,6 +18,10 @@ extern "C" int PUGH_Barrier (const cGH *GH); int PUGH_SyncGroup (const cGH *GH, const char *group); +int PUGH_SyncGroupsByDirI (const cGH *GH, + int num_groups, + const int *groups, + const int *directions); int PUGH_EnableGroupStorage (const cGH *GH, const char *group); int PUGH_DisableGroupStorage (const cGH *GH, const char *group); |