From b03b3f8955ab2436e8df1dd5da79573c5beeed9f Mon Sep 17 00:00:00 2001 From: tradke Date: Thu, 6 Jul 2006 17:41:27 +0000 Subject: 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 --- param.ccl | 3 +++ src/Comm.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/Startup.c | 4 ++++ src/pugh_Comm.h | 4 ++++ 4 files changed, 83 insertions(+) diff --git a/param.ccl b/param.ccl index 6f79261..fc50e79 100644 --- a/param.ccl +++ b/param.ccl @@ -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" { diff --git a/src/Comm.c b/src/Comm.c index f739f6e..fdcde7c 100644 --- a/src/Comm.c +++ b/src/Comm.c @@ -102,6 +102,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 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); -- cgit v1.2.3