From 076bcc25c92bad5b7a667262c35c064cfc9a87b5 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Tue, 9 Jun 2020 12:15:11 +0200
Subject: [PATCH] ENH: relocate externalFileCoupler from finiteVolume to
 meshTools

---
 .../test/externalFileCoupler/Allclean         | 10 ++++++
 applications/test/externalFileCoupler/Allrun  | 20 +++++++++++
 .../test/externalFileCoupler/Make/options     |  4 +--
 .../Test-externalFileCoupler.C                | 36 +++++++++++++++----
 src/finiteVolume/Make/files                   |  3 --
 src/meshTools/Make/files                      |  2 ++
 .../coupling/externalFileCoupler.C            |  0
 .../coupling/externalFileCoupler.H            |  1 -
 .../coupling/externalFileCouplerI.H           |  0
 9 files changed, 64 insertions(+), 12 deletions(-)
 create mode 100755 applications/test/externalFileCoupler/Allclean
 create mode 100755 applications/test/externalFileCoupler/Allrun
 rename src/{finiteVolume/cfdTools/general => meshTools}/coupling/externalFileCoupler.C (100%)
 rename src/{finiteVolume/cfdTools/general => meshTools}/coupling/externalFileCoupler.H (99%)
 rename src/{finiteVolume/cfdTools/general => meshTools}/coupling/externalFileCouplerI.H (100%)

diff --git a/applications/test/externalFileCoupler/Allclean b/applications/test/externalFileCoupler/Allclean
new file mode 100755
index 00000000000..ad4e6f33013
--- /dev/null
+++ b/applications/test/externalFileCoupler/Allclean
@@ -0,0 +1,10 @@
+#!/bin/sh
+cd "${0%/*}" || exit                                # Run from this directory
+#------------------------------------------------------------------------------
+
+# Remove old junk
+rm -f comms/OpenFOAM.lock
+
+rmdir comms
+
+#------------------------------------------------------------------------------
diff --git a/applications/test/externalFileCoupler/Allrun b/applications/test/externalFileCoupler/Allrun
new file mode 100755
index 00000000000..e5557cc1581
--- /dev/null
+++ b/applications/test/externalFileCoupler/Allrun
@@ -0,0 +1,20 @@
+#!/bin/sh
+cd "${0%/*}" || exit                                # Run from this directory
+#------------------------------------------------------------------------------
+
+# Cleanup old junk that may prevent things from starting
+rm -f comms/OpenFOAM.lock
+
+# If this exits prematurely, trigger the external solver to stop
+trap '[ -e comms/OpenFOAM.lock ] && echo "status=done" > comms/OpenFOAM.lock' EXIT TERM INT
+
+Test-externalFileCoupler -slave -max 50 &
+
+Test-externalFileCoupler -max 25
+
+# Give some time for the slave to find updated file
+sleep 2
+
+[ -d comms ] && echo "status=done" > comms/OpenFOAM.lock
+
+#------------------------------------------------------------------------------
diff --git a/applications/test/externalFileCoupler/Make/options b/applications/test/externalFileCoupler/Make/options
index fa15f124528..54c035b8f55 100644
--- a/applications/test/externalFileCoupler/Make/options
+++ b/applications/test/externalFileCoupler/Make/options
@@ -1,5 +1,5 @@
 EXE_INC = \
-    -I$(LIB_SRC)/finiteVolume/lnInclude
+    -I$(LIB_SRC)/meshTools/lnInclude
 
 EXE_LIBS = \
-    -lfiniteVolume
+    -lmeshTools
diff --git a/applications/test/externalFileCoupler/Test-externalFileCoupler.C b/applications/test/externalFileCoupler/Test-externalFileCoupler.C
index c90e766aacb..65edbddeb09 100644
--- a/applications/test/externalFileCoupler/Test-externalFileCoupler.C
+++ b/applications/test/externalFileCoupler/Test-externalFileCoupler.C
@@ -28,6 +28,7 @@ Application
 
 Description
     Test of master/slave communication etc.
+
 \*---------------------------------------------------------------------------*/
 
 #include "argList.H"
@@ -41,55 +42,78 @@ using namespace Foam;
 
 int main(int argc, char *argv[])
 {
+    argList::noBanner();
     argList::noParallel();
+    argList::addOption("sleep", "N", "sleep to add between calls");
     argList::addOption("max", "N", "max number of calls (default: 1000)");
     argList::addBoolOption("slave", "run as slave");
 
     #include "setRootCase.H"
 
     const label maxCount = args.getOrDefault<label>("max", 1000);
+    const label sleeping = args.getOrDefault<label>("sleep", 0);
 
     externalFileCoupler coupler;
 
     if (args.found("slave"))
     {
         const word role = "slave";
-        Info<< "Running as " << role << " max=" << maxCount << endl;
+        const word other = "master";
+        Info<< "Running as " << role << " max=" << maxCount
+            << " (sleep " << sleeping << ')' << endl;
 
         for (label count = 0; count < maxCount; ++count)
         {
             // Wait for master, but stop if status=done was seen
+            Info<< role << '[' << count << "] wait for " << other << endl;
 
-            Info<< role << ": waiting for master" << endl;
             if (!coupler.waitForMaster())
             {
                 Info<< role << ": stopping. status=done was detected" << endl;
                 break;
             }
 
-            Info<< role << ": switch to master" << endl;
+            if (sleeping)
+            {
+                sleep(sleeping);
+            }
+
+            // Info<< role << ": switch to " << other << endl;
             coupler.useMaster();
         }
+
+        Info<< role << ": exiting" << endl;
     }
     else
     {
         const word role = "master";
-        Info<< "Running as " << role << " max=" << maxCount << endl;
+        const word other = "slave";
+        Info<< "Running as " << role << " max=" << maxCount
+            << " (sleep " << sleeping << ')' << endl;
 
         for (label count = 0; count < maxCount; ++count)
         {
             // Wait for slave, but stop if status=done was seen
 
-            Info<< role << ": waiting for slave" << endl;
+            Info<< role << '[' << count << "] wait for " << other << endl;
+
             if (!coupler.waitForSlave())
             {
                 Info<< role << ": stopping. status=done was detected" << endl;
                 break;
             }
 
-            Info<< role << ": switch to slave" << endl;
+            if (sleeping)
+            {
+                sleep(sleeping);
+            }
+
+            // Info<< role << ": switch to " << other << endl;
             coupler.useSlave();
         }
+
+        // shudown - slave should notice and terminate
+        Info<< role << ": exiting" << endl;
     }
 
     return 0;
diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files
index 6a0bf5c8fa7..7ef61600d63 100644
--- a/src/finiteVolume/Make/files
+++ b/src/finiteVolume/Make/files
@@ -471,9 +471,6 @@ $(general)/pressureControl/pressureControl.C
 $(general)/levelSet/levelSet.C
 $(general)/meshObjects/gravity/gravityMeshObject.C
 
-coupling = $(general)/coupling
-$(coupling)/externalFileCoupler.C
-
 solutionControl = $(general)/solutionControl
 $(solutionControl)/solutionControl/solutionControl.C
 $(solutionControl)/loopControl/loopControl.C
diff --git a/src/meshTools/Make/files b/src/meshTools/Make/files
index 1203f2e448f..a5f1aa4cd39 100644
--- a/src/meshTools/Make/files
+++ b/src/meshTools/Make/files
@@ -301,6 +301,8 @@ PatchFunction1/CodedField/makeCodedFields.C
 
 meshStructure/meshStructure.C
 
+coupling/externalFileCoupler.C
+
 output/foamVtkIndPatchWriter.C
 output/foamVtkInternalMeshWriter.C
 output/foamVtkPatchMeshWriter.C
diff --git a/src/finiteVolume/cfdTools/general/coupling/externalFileCoupler.C b/src/meshTools/coupling/externalFileCoupler.C
similarity index 100%
rename from src/finiteVolume/cfdTools/general/coupling/externalFileCoupler.C
rename to src/meshTools/coupling/externalFileCoupler.C
diff --git a/src/finiteVolume/cfdTools/general/coupling/externalFileCoupler.H b/src/meshTools/coupling/externalFileCoupler.H
similarity index 99%
rename from src/finiteVolume/cfdTools/general/coupling/externalFileCoupler.H
rename to src/meshTools/coupling/externalFileCoupler.H
index c6008105f7b..599c0804b2d 100644
--- a/src/finiteVolume/cfdTools/general/coupling/externalFileCoupler.H
+++ b/src/meshTools/coupling/externalFileCoupler.H
@@ -290,7 +290,6 @@ public:
 
         //- Remove files written by OpenFOAM
         void removeDirectory() const;
-
 };
 
 
diff --git a/src/finiteVolume/cfdTools/general/coupling/externalFileCouplerI.H b/src/meshTools/coupling/externalFileCouplerI.H
similarity index 100%
rename from src/finiteVolume/cfdTools/general/coupling/externalFileCouplerI.H
rename to src/meshTools/coupling/externalFileCouplerI.H
-- 
GitLab