From 8005e2b4a2e359b1b4842d19315b4745376084e7 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Thu, 22 Jun 2017 14:45:53 +0100 Subject: [PATCH 1/4] ENH: add cloneParallelCase function into bin/tools/RunFunctions --- bin/tools/RunFunctions | 109 ++++++++++++++---- .../pisoFoam/LES/motorBike/Allrun | 20 ---- 2 files changed, 89 insertions(+), 40 deletions(-) diff --git a/bin/tools/RunFunctions b/bin/tools/RunFunctions index 873048fcd5..e4a49bef18 100644 --- a/bin/tools/RunFunctions +++ b/bin/tools/RunFunctions @@ -219,28 +219,97 @@ compileApplication() # cloneCase() { - if [ -e "$2" ] - then - echo "Case already cloned: remove case directory $2 to clone" - elif [ -d "$1" ] - then - echo "Cloning $2 case from $1" - mkdir $2 - # These must exist, so do not hide error messages - for f in system constant - do - \cp -r $1/$f $2 - done + local src=$1 + local dst=$2 + shift 2 - # Either (or both) may exist, so error messages may be spurious - for f in 0 0.orig - do - \cp -r $1/$f $2 2>/dev/null - done - else - echo "Error: cannot clone from non-existent directory" - echo " $1" + if [ -e "$dst" ] + then + echo "Case already cloned: remove case directory $dst prior to cloning" + return 1 + elif [ ! -d "$src" ] + then + echo "Error: no directory to clone: $src" + return 1 fi + + echo "Cloning $dst case from $src" + mkdir $dst + # These must exist, so do not hide error messages + for f in constant system + do + \cp -r $src/$f $dst + done + + # Either (or both) may exist, so error messages may be spurious + for f in 0 0.orig + do + \cp -r $src/$f $dst 2>/dev/null + done + return 0 +} + +# +# cloneParallelCase srcDir dstDir [...times] +# +# If any times are specified, they will be used for the cloning. +# Otherwise the entire processor* directories are cloned +cloneParallelCase() +{ + local src=$1 + local dst=$2 + shift 2 + + if [ -e "$dst" ] + then + echo "Case already cloned: remove case directory $dst prior to cloning" + return 1 + fi + + [ -d "$src" ] || { + echo "Error: no directory to clone: $src" + return 1 + } + + echo "Cloning $dst parallel case from $src" + mkdir $dst + # These must exist, so do not hide error messages + for f in constant system + do + \cp -r $src/$f $dst + done + + [ -d $src/processor0 ] || { + echo "Does not appear to be a parallel case" + return 1 + } + + if [ "$#" -eq 0 ] + then + # Copy all processor directories + echo " clone processor* directories" + \cp -r $src/processor* $dst + else + # Only copy some time directories + echo " clone processor directories with $# times: $@" + + for proc in $(cd $src && \ls -d processor*) + do + srcProc=$src/$proc + dstProc=$dst/$proc + + mkdir $dstProc + cp -r $srcProc/constant $dstProc/ + + for time + do + [ -d $srcProc/$time ] && cp -r $srcProc/$time $dstProc/ + done + + done + fi + + return 0 } # Overwrite 0/ with the contents of 0.orig/ if it exists. diff --git a/tutorials/incompressible/pisoFoam/LES/motorBike/Allrun b/tutorials/incompressible/pisoFoam/LES/motorBike/Allrun index 6c45de5d87..65eb7ef78f 100755 --- a/tutorials/incompressible/pisoFoam/LES/motorBike/Allrun +++ b/tutorials/incompressible/pisoFoam/LES/motorBike/Allrun @@ -1,27 +1,7 @@ #!/bin/sh cd ${0%/*} || exit 1 # Run from this directory - -# Source tutorial run functions . $WM_PROJECT_DIR/bin/tools/RunFunctions - -cloneParallelCase() -{ - if [ -d $2 ] - then - echo "Case already cloned: remove case directory $2 to clone" - else - echo "Cloning $2 case from $1 in parallel mode" - mkdir $2 - cpfiles="processor* system constant" - for f in $cpfiles - do - cp -r $1/$f $2 - done - fi -} - - # Do the Spalart-Allmaras steady-state case (cd motorBike && foamRunTutorials) From 6779036af656b1a83fef163e504515f3c94f9a50 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Fri, 23 Jun 2017 13:51:46 +0100 Subject: [PATCH 2/4] ENH: paraFoam -touch-proc option for processor directories - Can be useful when investigating mesh topologies --- bin/paraFoam | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/bin/paraFoam b/bin/paraFoam index 0015e73952..f0b583409b 100755 --- a/bin/paraFoam +++ b/bin/paraFoam @@ -39,12 +39,14 @@ usage() { Usage: ${0##*/} [OPTION] [--] [PARAVIEW_OPTION] options: - -block use blockMesh reader (uses .blockMesh extension) + -block use blockMesh reader (uses .blockMesh extension) -case specify alternative case directory, default is the cwd -region specify alternative mesh region - -touch only create the file (eg, .blockMesh, .OpenFOAM, etc) - -touchAll create .blockMesh, .OpenFOAM files (and for all regions) - -vtk | -builtin use VTK builtin OpenFOAM reader (uses .foam extension) + -touch create the file (eg, .blockMesh, .OpenFOAM, .foam, ...) + -touch-all | -touchAll + create .blockMesh, .OpenFOAM files (and for all regions) + -touch-proc same as '-touch' but for each processor + -vtk | -builtin use VTK builtin OpenFOAM reader (uses .foam extension) -help print the usage --help paraview help @@ -102,11 +104,16 @@ do unset plugin shift ;; - -touchAll) + -touch-all | -touchAll) optTouch=all unset plugin shift ;; + -touch-proc*) + optTouch=processor + unset plugin + shift + ;; --) shift break # Stop here, treat balance as paraview options @@ -205,6 +212,16 @@ all) done exit 0 ;; +processor) + for i in processor* + do + ( + cd $i 2> /dev/null && touch "${caseFile%.*}#${i#processor}.$extension" + ) + done + echo "Created '$caseFile' for processor directories" 1>&2 + exit 0 + ;; true) touch "$caseFile" echo "Created '$caseFile'" 1>&2 From c0b38033ea919661f8a1f6bf6788a50e7798e334 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Fri, 23 Jun 2017 14:43:09 +0100 Subject: [PATCH 3/4] ENH: integration of lumpedPointMotion - This provides a mechanism for moving mesh patches based on external input (eg, from an external structures solver). The patch points are influenced by the position and rotation of the lumped points. BC: lumpedPointDisplacementPointPatchVectorField Controlling mechanisms: - externalCoupler for coordinating the master/slave - lumpedPointMovement manages the patch-points motion, but also for extracting forces/moments - lumpedPointState represents the positions/rotations of the controlling points Utils: - lumpedPointZones diagnostic for visualizing the correspondence between controlling points and patch faces - lumpedPointMovement Test that the patch motion is as desired without invoking moveMesh. With the -slave option, return items from a precalculated table for the lumpedPointDisplacementPointPatchVectorField BC. --- applications/test/externalCoupler/Make/files | 3 + .../test/externalCoupler/Make/options | 7 + .../externalCoupler/Test-externalCoupler.C | 97 +++ .../lumped/lumpedPointForces/Make/files | 3 + .../lumped/lumpedPointForces/Make/options | 10 + .../lumpedPointForces/lumpedPointForces.C | 177 ++++ .../lumped/lumpedPointMovement/Make/files | 3 + .../lumped/lumpedPointMovement/Make/options | 10 + .../lumpedPointMovement/lumpedPointMovement.C | 263 ++++++ .../lumped/lumpedPointZones/Make/files | 3 + .../lumped/lumpedPointZones/Make/options | 10 + .../lumpedPointZones/lumpedPointZones.C | 107 +++ src/Allwmake | 1 + src/lumpedPointMotion/Make/files | 13 + src/lumpedPointMotion/Make/options | 10 + src/lumpedPointMotion/externalCoupler.C | 309 +++++++ src/lumpedPointMotion/externalCoupler.H | 207 +++++ ...edPointDisplacementPointPatchVectorField.C | 285 +++++++ ...edPointDisplacementPointPatchVectorField.H | 200 +++++ src/lumpedPointMotion/lumpedPointIOMovement.C | 142 ++++ src/lumpedPointMotion/lumpedPointIOMovement.H | 133 +++ src/lumpedPointMotion/lumpedPointMovement.C | 790 ++++++++++++++++++ src/lumpedPointMotion/lumpedPointMovement.H | 399 +++++++++ src/lumpedPointMotion/lumpedPointMovementI.H | 162 ++++ .../lumpedPointMovementWriter.C | 447 ++++++++++ src/lumpedPointMotion/lumpedPointState.C | 362 ++++++++ src/lumpedPointMotion/lumpedPointState.H | 194 +++++ src/lumpedPointMotion/lumpedPointStateI.H | 67 ++ .../lumpedPointStateWriter.C | 326 ++++++++ src/lumpedPointMotion/lumpedPointTools.C | 161 ++++ src/lumpedPointMotion/lumpedPointTools.H | 86 ++ 31 files changed, 4987 insertions(+) create mode 100644 applications/test/externalCoupler/Make/files create mode 100644 applications/test/externalCoupler/Make/options create mode 100644 applications/test/externalCoupler/Test-externalCoupler.C create mode 100644 applications/utilities/postProcessing/lumped/lumpedPointForces/Make/files create mode 100644 applications/utilities/postProcessing/lumped/lumpedPointForces/Make/options create mode 100644 applications/utilities/postProcessing/lumped/lumpedPointForces/lumpedPointForces.C create mode 100644 applications/utilities/postProcessing/lumped/lumpedPointMovement/Make/files create mode 100644 applications/utilities/postProcessing/lumped/lumpedPointMovement/Make/options create mode 100644 applications/utilities/postProcessing/lumped/lumpedPointMovement/lumpedPointMovement.C create mode 100644 applications/utilities/postProcessing/lumped/lumpedPointZones/Make/files create mode 100644 applications/utilities/postProcessing/lumped/lumpedPointZones/Make/options create mode 100644 applications/utilities/postProcessing/lumped/lumpedPointZones/lumpedPointZones.C create mode 100644 src/lumpedPointMotion/Make/files create mode 100644 src/lumpedPointMotion/Make/options create mode 100644 src/lumpedPointMotion/externalCoupler.C create mode 100644 src/lumpedPointMotion/externalCoupler.H create mode 100644 src/lumpedPointMotion/lumpedPointDisplacementPointPatchVectorField.C create mode 100644 src/lumpedPointMotion/lumpedPointDisplacementPointPatchVectorField.H create mode 100644 src/lumpedPointMotion/lumpedPointIOMovement.C create mode 100644 src/lumpedPointMotion/lumpedPointIOMovement.H create mode 100644 src/lumpedPointMotion/lumpedPointMovement.C create mode 100644 src/lumpedPointMotion/lumpedPointMovement.H create mode 100644 src/lumpedPointMotion/lumpedPointMovementI.H create mode 100644 src/lumpedPointMotion/lumpedPointMovementWriter.C create mode 100644 src/lumpedPointMotion/lumpedPointState.C create mode 100644 src/lumpedPointMotion/lumpedPointState.H create mode 100644 src/lumpedPointMotion/lumpedPointStateI.H create mode 100644 src/lumpedPointMotion/lumpedPointStateWriter.C create mode 100644 src/lumpedPointMotion/lumpedPointTools.C create mode 100644 src/lumpedPointMotion/lumpedPointTools.H diff --git a/applications/test/externalCoupler/Make/files b/applications/test/externalCoupler/Make/files new file mode 100644 index 0000000000..0e55c301e2 --- /dev/null +++ b/applications/test/externalCoupler/Make/files @@ -0,0 +1,3 @@ +Test-externalCoupler.C + +EXE = $(FOAM_USER_APPBIN)/Test-externalCoupler diff --git a/applications/test/externalCoupler/Make/options b/applications/test/externalCoupler/Make/options new file mode 100644 index 0000000000..e2c645cc88 --- /dev/null +++ b/applications/test/externalCoupler/Make/options @@ -0,0 +1,7 @@ +EXE_INC = \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/lumpedPointMotion/lnInclude + +EXE_LIBS = \ + -lfiniteVolume \ + -llumpedPointMotion diff --git a/applications/test/externalCoupler/Test-externalCoupler.C b/applications/test/externalCoupler/Test-externalCoupler.C new file mode 100644 index 0000000000..90cd38d07c --- /dev/null +++ b/applications/test/externalCoupler/Test-externalCoupler.C @@ -0,0 +1,97 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2017 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see . + +Application + Test-externalCoupler + +Description + Test of master/slave communication etc. +\*---------------------------------------------------------------------------*/ + +#include "argList.H" +#include "externalCoupler.H" + +using namespace Foam; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Main program: + +int main(int argc, char *argv[]) +{ + argList::noParallel(); + argList::addOption("max", "N", "max number of calls (default: 1000)"); + argList::addBoolOption("slave", "run as slave"); + + #include "setRootCase.H" + + const label maxCount = args.optionLookupOrDefault