aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortradke <tradke@b61c5cb5-eaca-4651-9a7a-d64986f99364>2006-07-06 17:41:27 +0000
committertradke <tradke@b61c5cb5-eaca-4651-9a7a-d64986f99364>2006-07-06 17:41:27 +0000
commitb03b3f8955ab2436e8df1dd5da79573c5beeed9f (patch)
treeabe47f8f79b0fba15fe0e0c1dd6657e56192625c
parent1ec9f7182a8f82535e52fcaaa26c6d2ff644583a (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.ccl3
-rw-r--r--src/Comm.c72
-rw-r--r--src/Startup.c4
-rw-r--r--src/pugh_Comm.h4
4 files changed, 83 insertions, 0 deletions
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
@@ -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);