diff --git a/tutorials/incompressible/lumpedPointMotion/building/Allclean b/tutorials/incompressible/lumpedPointMotion/building/Allclean
new file mode 100755
index 0000000000..deafd19282
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/Allclean
@@ -0,0 +1,9 @@
+#!/bin/sh
+cd ${0%/*} || exit 1 # Run from this directory
+
+(cd steady && ./Allclean)
+
+rm -rf movement
+rm -rf transient
+
+#------------------------------------------------------------------------------
diff --git a/tutorials/incompressible/lumpedPointMotion/building/Allrun b/tutorials/incompressible/lumpedPointMotion/building/Allrun
new file mode 100755
index 0000000000..8aad569cae
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/Allrun
@@ -0,0 +1,92 @@
+#!/bin/sh
+cd ${0%/*} || exit 1 # Run from this directory
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+
+# 1) First run steady-state to establish a good initial field.
+# 2) Copy the latest state-state results for the transient case,
+# but need to copy the pointDisplacement from the 0/ directory
+# since it will not have been used for the steady-state case
+# 3) Relocate this initial solution to coincide with the first deltaT
+# to avoid overwriting the 0/ directory at all.
+
+#
+# copyParallelPointDisplacement caseDir timeName
+#
+# Copy pointDisplacement from caseDir/0/ to caseDir/timeName/
+#
+copyParallelPointDisplacement()
+{
+ local src=$1
+ local dstTime=$2
+ local file=pointDisplacement
+
+ [ -d "$src" ] || {
+ echo "Error: no directory: $src"
+ return 1
+ }
+
+ # Copy select directories
+ echo " copy processor '$file' from 0/ -> $dstTime"
+ if [ -n "$dstTime" ]
+ then
+ (
+ cd $src || exit 1
+
+ for proc in processor*
+ do
+ [ -d "$proc/0" -a -d "$proc/$dstTime" ] && \
+ cp $proc/0/$file $proc/$dstTime/$file
+ done
+ )
+ else
+ echo " no destination time"
+ fi
+
+ # Restart from latestTime
+ foamDictionary $src/system/controlDict \
+ -entry startFrom -set latestTime
+
+ deltaT=$(foamDictionary $src/system/controlDict -entry deltaT -value)
+ latestTime=$(foamListTimes -case $src -noZero -latestTime -processor)
+
+ # Restart using steady results as first deltaT interval
+ echo "deltaT=$deltaT latestTime=$latestTime"
+ if [ -n "$latestTime" -a "$deltaT" != "$latestTime" ]
+ then
+ (
+ cd $src || exit 1
+
+ for proc in processor*
+ do
+ if [ -d "$proc/$latestTime" -a ! -d "$proc/$deltaT" ]
+ then
+ mv $proc/$latestTime $proc/$deltaT
+ \rm -rf $proc/$deltaT/uniform
+ fi
+ done
+ )
+ fi
+
+ return 0
+}
+
+
+# Do steady-state case
+(cd steady && foamRunTutorials)
+
+if ! isTest $@
+then
+ latestTime=$(cd steady && foamListTimes -noZero -latestTime -processor)
+
+ # Clone the steady-state case to transient
+ cloneParallelCase steady transient 0 $latestTime
+
+ copyParallelPointDisplacement transient $latestTime
+
+ # Do the transient case
+ \cp files/Allrun.transient transient/Allrun
+ (cd transient && foamRunTutorials)
+fi
+
+#------------------------------------------------------------------------------
diff --git a/tutorials/incompressible/lumpedPointMotion/building/Allrun.move b/tutorials/incompressible/lumpedPointMotion/building/Allrun.move
new file mode 100755
index 0000000000..842eb6cefe
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/Allrun.move
@@ -0,0 +1,59 @@
+#!/bin/sh
+cd ${0%/*} || exit 1 # Run from this directory
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+# 1) Run meshing
+# 2) Reconstruct
+# 3) Test input zones and movement
+
+#
+# linkParallelCase srcDir dstDir
+#
+linkParallelCase()
+{
+ local src=$1
+ local dst=$2
+ shift 2
+
+ if [ -e "$dst" ]
+ then
+ echo "Case already linked: remove case directory $dst prior to linking"
+ return 1
+ elif [ ! -d "$src" ]
+ then
+ echo "Error: no directory to link: $src"
+ return 1
+ fi
+
+ echo "Linking $dst parallel case from $src"
+ mkdir $dst
+ for i in constant system
+ do
+ cp -r $src/$i $dst
+ done
+
+ echo " link processor directories with $# times: $@"
+
+ for proc in $(cd $src && \ls -d processor*)
+ do
+ ( cd $dst && ln -sf ../$src/$proc . )
+ done
+
+ return 0
+}
+
+
+# Do steady-state case
+(cd steady && ./Allrun.pre)
+
+if ! isTest $@
+then
+ # Copy/link the steady-state case to movement
+ linkParallelCase steady movement
+
+ # Test movement
+ \cp files/Allrun.movement movement/Allrun
+ (cd movement && foamRunTutorials)
+fi
+
+#------------------------------------------------------------------------------
diff --git a/tutorials/incompressible/lumpedPointMotion/building/files/Allrun.movement b/tutorials/incompressible/lumpedPointMotion/building/files/Allrun.movement
new file mode 100755
index 0000000000..4e7cab8fb7
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/files/Allrun.movement
@@ -0,0 +1,16 @@
+#!/bin/sh
+cd ${0%/*} || exit 1 # Run from this directory
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+# The 0/ field only
+runApplication reconstructPar -withZero -time 0
+
+# Check the location of the pressure zones
+# runParallel lumpedPointZones <<- Parallel file writing not yet done
+runApplication lumpedPointZones
+
+# Simulated external solver
+# Using -scale=1 to see the excessively large movements
+runApplication lumpedPointMovement -span 25 -scale 1 ../files/response.txt
+
+#------------------------------------------------------------------------------
diff --git a/tutorials/incompressible/lumpedPointMotion/building/files/Allrun.transient b/tutorials/incompressible/lumpedPointMotion/building/files/Allrun.transient
new file mode 100755
index 0000000000..91920e1883
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/files/Allrun.transient
@@ -0,0 +1,16 @@
+#!/bin/sh
+cd ${0%/*} || exit 1 # Run from this directory
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+# If OpenFOAM stops prematurely, trigger the external solver to stop
+trap '[ -e comms/OpenFOAM.lock ] && echo "status=done" > comms/OpenFOAM.lock' EXIT TERM INT
+
+# Simulated external solver.
+# Using -scale since the input movement table is excessively large
+runApplication -overwrite \
+ lumpedPointMovement -scale 0.01 -removeLock -slave ../files/response.txt &
+
+# Run OpenFOAM
+runParallel $(getApplication)
+
+#------------------------------------------------------------------------------
diff --git a/tutorials/incompressible/lumpedPointMotion/building/files/response.txt.gz b/tutorials/incompressible/lumpedPointMotion/building/files/response.txt.gz
new file mode 100644
index 0000000000..30b6604355
Binary files /dev/null and b/tutorials/incompressible/lumpedPointMotion/building/files/response.txt.gz differ
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/U b/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/U
new file mode 100644
index 0000000000..1eccace7d3
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/U
@@ -0,0 +1,50 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: plus |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class volVectorField;
+ object U;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "include/initialConditions"
+
+dimensions [0 1 -1 0 0 0 0];
+
+internalField uniform $flowVelocity;
+
+boundaryField
+{
+ #includeEtc "caseDicts/setConstraintTypes"
+
+ #include "include/fixedInlet"
+
+ outlet
+ {
+ type inletOutlet;
+ inletValue uniform (0 0 0);
+ value $internalField;
+ }
+
+ // the ground
+ z_
+ {
+ type noSlip;
+ }
+
+ "(?i).*building.*"
+ {
+ type noSlip;
+ }
+
+ #include "include/environ"
+}
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/epsilon b/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/epsilon
new file mode 100644
index 0000000000..35ee62489d
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/epsilon
@@ -0,0 +1,51 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: plus |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class volScalarField;
+ object epsilon;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "include/initialConditions"
+
+dimensions [0 2 -3 0 0 0 0];
+
+internalField uniform $turbulentEpsilon;
+
+boundaryField
+{
+ #includeEtc "caseDicts/setConstraintTypes"
+
+ #include "include/fixedInlet"
+
+ outlet
+ {
+ type inletOutlet;
+ inletValue $internalField;
+ value $internalField;
+ }
+
+ z_
+ {
+ type epsilonWallFunction;
+ value $internalField;
+ }
+
+ "(?i).*building.*"
+ {
+ type epsilonWallFunction;
+ value $internalField;
+ }
+
+ #include "include/environ"
+}
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/include/environ b/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/include/environ
new file mode 100644
index 0000000000..45c1af9a0b
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/include/environ
@@ -0,0 +1,24 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: plus |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+
+_y
+{
+ type slip;
+}
+
+y_
+{
+ type slip;
+}
+
+_z
+{
+ type slip;
+}
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/include/fixedInlet b/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/include/fixedInlet
new file mode 100644
index 0000000000..d69bf4f580
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/include/fixedInlet
@@ -0,0 +1,15 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: plus |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+
+inlet
+{
+ type fixedValue;
+ value $internalField;
+}
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/include/initialConditions b/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/include/initialConditions
new file mode 100644
index 0000000000..8d82530aae
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/include/initialConditions
@@ -0,0 +1,17 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: plus |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+
+flowVelocity (100 0 0);
+pressure 0;
+turbulentKE 37;
+turbulentOmega 32;
+turbulentEpsilon 30;
+
+#inputMode merge
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/k b/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/k
new file mode 100644
index 0000000000..9aac15a655
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/k
@@ -0,0 +1,51 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: plus |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class volScalarField;
+ object k;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "include/initialConditions"
+
+dimensions [0 2 -2 0 0 0 0];
+
+internalField uniform $turbulentKE;
+
+boundaryField
+{
+ #includeEtc "caseDicts/setConstraintTypes"
+
+ #include "include/fixedInlet"
+
+ outlet
+ {
+ type inletOutlet;
+ inletValue $internalField;
+ value $internalField;
+ }
+
+ z_
+ {
+ type kqRWallFunction;
+ value $internalField;
+ }
+
+ "(?i).*building.*"
+ {
+ type kqRWallFunction;
+ value $internalField;
+ }
+
+ #include "include/environ"
+}
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/nut b/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/nut
new file mode 100644
index 0000000000..7d98c929f5
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/nut
@@ -0,0 +1,44 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: plus |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class volScalarField;
+ object nut;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions [0 2 -1 0 0 0 0];
+
+internalField uniform 0;
+
+boundaryField
+{
+ #includeEtc "caseDicts/setConstraintTypes"
+
+ z_
+ {
+ type nutkWallFunction;
+ value uniform 0;
+ }
+
+ "(?i).*building.*"
+ {
+ type nutkWallFunction;
+ value uniform 0;
+ }
+
+ ".*"
+ {
+ type calculated;
+ value uniform 0;
+ }
+}
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/omega b/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/omega
new file mode 100644
index 0000000000..20e3b3a72e
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/omega
@@ -0,0 +1,51 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: plus |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class volScalarField;
+ object epsilon;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "include/initialConditions"
+
+dimensions [0 0 -1 0 0 0 0];
+
+internalField uniform $turbulentOmega;
+
+boundaryField
+{
+ #includeEtc "caseDicts/setConstraintTypes"
+
+ #include "include/fixedInlet"
+
+ outlet
+ {
+ type inletOutlet;
+ inletValue $internalField;
+ value $internalField;
+ }
+
+ z_
+ {
+ type omegaWallFunction;
+ value $internalField;
+ }
+
+ "(?i).*building.*"
+ {
+ type omegaWallFunction;
+ value $internalField;
+ }
+
+ #include "include/environ"
+}
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/p b/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/p
new file mode 100644
index 0000000000..600c4c2d3e
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/p
@@ -0,0 +1,51 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: plus |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class volScalarField;
+ object p;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "include/initialConditions"
+
+dimensions [0 2 -2 0 0 0 0];
+
+internalField uniform $pressure;
+
+boundaryField
+{
+ #includeEtc "caseDicts/setConstraintTypes"
+
+ inlet
+ {
+ type zeroGradient;
+ }
+
+ outlet
+ {
+ type fixedValue;
+ value $internalField;
+ }
+
+ z_
+ {
+ type zeroGradient;
+ }
+
+ "(?i).*building.*"
+ {
+ type zeroGradient;
+ }
+
+ #include "include/environ"
+}
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/pointDisplacement b/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/pointDisplacement
new file mode 100644
index 0000000000..a117dcc657
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/0.orig/pointDisplacement
@@ -0,0 +1,73 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: plus |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class pointVectorField;
+ object pointDisplacement;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions [0 1 0 0 0 0 0];
+
+internalField uniform (0 0 0);
+
+boundaryField
+{
+ // Specify directly (without include) for benefit of the paraview reader
+ processor
+ {
+ type processor;
+ value uniform (0 0 0);
+ }
+
+ inlet
+ {
+ type uniformFixedValue;
+ uniformValue (0 0 0);
+ }
+
+ outlet
+ {
+ type uniformFixedValue;
+ uniformValue (0 0 0);
+ }
+
+ _y
+ {
+ type uniformFixedValue;
+ uniformValue (0 0 0);
+ }
+
+ y_
+ {
+ type uniformFixedValue;
+ uniformValue (0 0 0);
+ }
+
+ _z
+ {
+ type uniformFixedValue;
+ uniformValue (0 0 0);
+ }
+
+ // the ground
+ z_
+ {
+ type slip;
+ }
+
+ "(?i).*building.*"
+ {
+ type lumpedPointDisplacement;
+ value uniform (0 0 0);
+ }
+}
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/Allclean b/tutorials/incompressible/lumpedPointMotion/building/steady/Allclean
new file mode 100755
index 0000000000..3b8b23422e
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/Allclean
@@ -0,0 +1,8 @@
+#!/bin/sh
+cd ${0%/*} || exit 1 # Run from this directory
+. $WM_PROJECT_DIR/bin/tools/CleanFunctions
+
+cleanCase
+\rm -rf 0
+
+#------------------------------------------------------------------------------
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/Allrun b/tutorials/incompressible/lumpedPointMotion/building/steady/Allrun
new file mode 100755
index 0000000000..57456db2fd
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/Allrun
@@ -0,0 +1,24 @@
+#!/bin/sh
+cd ${0%/*} || exit 1 # Run from this directory
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+./Allrun.pre
+
+unset parallel
+parallel=true
+
+if [ "${parallel:-false}" = false ]
+then
+ # Serial
+
+ runApplication simpleFoam
+
+else
+ # Parallel
+
+ runParallel simpleFoam
+
+fi
+
+
+#------------------------------------------------------------------------------
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/Allrun.pre b/tutorials/incompressible/lumpedPointMotion/building/steady/Allrun.pre
new file mode 100755
index 0000000000..b58f7f5cea
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/Allrun.pre
@@ -0,0 +1,45 @@
+#!/bin/sh
+cd ${0%/*} || exit 1 # Run from this directory
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+# Copy building from resources directory
+mkdir -p constant/triSurface/
+cp $FOAM_TUTORIALS/resources/geometry/building_wtc2.obj constant/triSurface/
+
+# runApplication surfaceFeatureExtract
+runApplication blockMesh
+
+\rm -f constant/polyMesh/*Level
+
+unset parallel
+parallel=true
+
+# Dummy 0 directory
+mkdir 0
+
+if [ "${parallel:-false}" = false ]
+then
+ # Serial
+
+ runApplication snappyHexMesh -overwrite
+ \rm -f constant/polyMesh/refinementHistory*
+
+ restore0Dir
+
+ runApplication renumberMesh -overwrite
+
+else
+ # Parallel
+
+ runApplication decomposePar -force
+ runParallel snappyHexMesh -overwrite
+ \ls -d processor* | xargs -I {} \rm -f ./{}/constant/polyMesh/refinementHistory
+
+ restore0Dir -processor
+
+ runParallel renumberMesh -overwrite
+
+fi
+
+
+#------------------------------------------------------------------------------
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/constant/dynamicMeshDict b/tutorials/incompressible/lumpedPointMotion/building/steady/constant/dynamicMeshDict
new file mode 100644
index 0000000000..b068462155
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/constant/dynamicMeshDict
@@ -0,0 +1,31 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: plus |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class dictionary;
+ location "system";
+ object dynamicMeshDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dynamicFvMesh dynamicMotionSolverFvMesh;
+
+motionSolverLibs ("libfvMotionSolvers.so");
+
+solver displacementLaplacian;
+
+displacementLaplacianCoeffs
+{
+ diffusivity inverseDistance ( targetBuilding );
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/constant/transportProperties b/tutorials/incompressible/lumpedPointMotion/building/steady/constant/transportProperties
new file mode 100644
index 0000000000..93a8cb630c
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/constant/transportProperties
@@ -0,0 +1,21 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: plus |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class dictionary;
+ object transportProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+transportModel Newtonian;
+
+nu [0 2 -1 0 0 0 0] 1.5e-05;
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/constant/turbulenceProperties b/tutorials/incompressible/lumpedPointMotion/building/steady/constant/turbulenceProperties
new file mode 100644
index 0000000000..6719c90774
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/constant/turbulenceProperties
@@ -0,0 +1,29 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: plus |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class dictionary;
+ object turbulenceProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+simulationType RAS;
+
+RAS
+{
+ // RASModel kOmegaSST;
+ RASModel kEpsilon;
+
+ turbulence on;
+
+ printCoeffs on;
+}
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/system/blockMeshDict b/tutorials/incompressible/lumpedPointMotion/building/steady/system/blockMeshDict
new file mode 100644
index 0000000000..f74ade9f7a
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/system/blockMeshDict
@@ -0,0 +1,96 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: plus |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class dictionary;
+ object blockMeshDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+convertToMeters 1;
+
+vertices
+(
+ ( -1.6065 -1.428 0.0)
+ ( 1.6065 -1.428 0.0)
+ ( 1.6065 1.428 0.0)
+ ( -1.6065 1.428 0.0)
+ ( -1.6065 -1.428 2.021031)
+ ( 1.6065 -1.428 2.021031)
+ ( 1.6065 1.428 2.021031)
+ ( -1.6065 1.428 2.021031)
+);
+
+blocks
+(
+ // High resolution
+ // hex (0 1 2 3 4 5 6 7) (153 136 168) simpleGrading (1 1 5)
+ // Low resolution
+ hex (0 1 2 3 4 5 6 7) (77 68 84) simpleGrading (1 1 5)
+);
+
+edges
+(
+);
+
+boundary
+(
+ inlet // -ve X
+ {
+ type patch;
+ faces
+ (
+ ( 0 4 7 3 )
+ );
+ }
+ outlet // +x X
+ {
+ type patch;
+ faces
+ (
+ ( 1 2 6 5 )
+ );
+ }
+ y_ // -ve Y
+ {
+ type wall;
+ faces
+ (
+ ( 0 1 5 4)
+ );
+ }
+ _y // +ve Y
+ {
+ type wall;
+ faces
+ (
+ ( 3 7 6 2)
+ );
+ }
+ z_ // -ve Z = ground
+ {
+ type wall;
+ faces
+ (
+ ( 0 3 2 1)
+ );
+ }
+ _z // +ve Z = sky
+ {
+ type wall;
+ faces
+ (
+ ( 4 5 6 7)
+ );
+ }
+);
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/system/controlDict b/tutorials/incompressible/lumpedPointMotion/building/steady/system/controlDict
new file mode 100644
index 0000000000..ee469a87f0
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/system/controlDict
@@ -0,0 +1,75 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: plus |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class dictionary;
+ object controlDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+libs ("liblumpedPointMotion.so");
+
+application pimpleDyMFoam;
+
+startFrom startTime;
+
+startTime 0;
+
+stopAt endTime;
+
+endTime 0.01;
+
+deltaT 1e-4;
+
+writeControl timeStep;
+
+writeInterval 10;
+
+purgeWrite 0;
+
+writeFormat binary;
+
+writePrecision 8;
+
+writeCompression off;
+
+timeFormat general;
+
+timePrecision 6;
+
+runTimeModifiable true;
+
+adjustTimeStep yes;
+
+// These can be a bit larger when we restart from steady-state
+maxCo 0.75;
+
+maxDeltaT 0.01;
+
+
+// Embed steady-state settings (simpleFoam) without changeDictionary
+_simpleFoam
+{
+ endTime 500;
+ writeInterval 100;
+ deltaT 1;
+ adjustTimeStep no;
+}
+
+${_${FOAM_EXECUTABLE}};
+
+#remove _simpleFoam
+
+functions
+{
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/system/decomposeParDict b/tutorials/incompressible/lumpedPointMotion/building/steady/system/decomposeParDict
new file mode 100644
index 0000000000..e155f990eb
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/system/decomposeParDict
@@ -0,0 +1,30 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: plus |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class dictionary;
+ note "mesh decomposition control dictionary";
+ object decomposeParDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+numberOfSubdomains 12;
+method scotch;
+
+// method hierarchical;
+
+hierarchicalCoeffs
+{
+ n (3 2 1);
+ delta 0.001;
+ order xyz;
+}
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/system/fvSchemes b/tutorials/incompressible/lumpedPointMotion/building/steady/system/fvSchemes
new file mode 100644
index 0000000000..cae00de2df
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/system/fvSchemes
@@ -0,0 +1,72 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: plus |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class dictionary;
+ object fvSchemes;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+ddtSchemes
+{
+ default Euler;
+}
+
+gradSchemes
+{
+ default Gauss linear;
+ grad(U) cellLimited Gauss linear 1;
+}
+
+divSchemes
+{
+ default none;
+ div(phi,U) bounded Gauss linearUpwindV grad(U);
+ div(phi,k) bounded Gauss upwind;
+ div(phi,omega) bounded Gauss upwind;
+ div(phi,epsilon) bounded Gauss upwind;
+ div((nuEff*dev2(T(grad(U))))) Gauss linear;
+}
+
+laplacianSchemes
+{
+ default Gauss linear corrected;
+}
+
+interpolationSchemes
+{
+ default linear;
+}
+
+snGradSchemes
+{
+ default corrected;
+}
+
+wallDist
+{
+ method meshWave;
+}
+
+
+// Embed steady-state settings (simpleFoam) without changeDictionary
+_simpleFoam
+{
+ ddtSchemes
+ {
+ default steadyState;
+ }
+}
+
+${_${FOAM_EXECUTABLE}};
+
+#remove _simpleFoam
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/system/fvSolution b/tutorials/incompressible/lumpedPointMotion/building/steady/system/fvSolution
new file mode 100644
index 0000000000..d0c9c144aa
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/system/fvSolution
@@ -0,0 +1,134 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: plus |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class dictionary;
+ object fvSolution;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solvers
+{
+ p
+ {
+ solver GAMG;
+ tolerance 1e-7;
+ relTol 0.01;
+ smoother GaussSeidel;
+ nPreSweeps 0;
+ nPostSweeps 2;
+ cacheAgglomeration true;
+ agglomerator faceAreaPair;
+ nCellsInCoarsestLevel 10;
+ mergeLevels 1;
+ }
+
+ "(cellDisplacement)"
+ {
+ $p;
+ tolerance 1e-6;
+ relTol 0.001;
+ minIter 1;
+ }
+
+ pFinal
+ {
+ $p;
+ tolerance 1e-6;
+ relTol 0;
+ }
+
+ cellDisplacementFinal
+ {
+ $cellDisplacement;
+ tolerance 1e-6;
+ relTol 0;
+ }
+
+ Phi
+ {
+ $p;
+ }
+
+ "(U|k|epsilon|omega)"
+ {
+ solver smoothSolver;
+ smoother GaussSeidel;
+ tolerance 1e-8;
+ relTol 0.1;
+ nSweeps 1;
+ }
+
+ "(U|k|epsilon|omega)Final"
+ {
+ $U;
+ relTol 0;
+ }
+}
+
+SIMPLE
+{
+ nNonOrthogonalCorrectors 0;
+ consistent yes;
+ pRefCell 0;
+ pRefValue 0;
+}
+
+PIMPLE
+{
+ nOuterCorrectors 2;
+ nCorrectors 1;
+ nNonOrthogonalCorrectors 0;
+ pRefCell 0;
+ pRefValue 0;
+}
+
+potentialFlow
+{
+ nNonOrthogonalCorrectors 10;
+}
+
+cache
+{
+ grad(U);
+}
+
+
+// Default relaxation for transient
+relaxationFactors
+{
+ equations
+ {
+ ".*" 1;
+ }
+}
+
+// Embed steady-state settings (simpleFoam) without changeDictionary
+_simpleFoam
+{
+ fields
+ {
+ p 1.0;
+ }
+
+ equations
+ {
+ "(U|k|epsilon)" 0.9;
+ }
+}
+
+relaxationFactors
+{
+ ${_${FOAM_EXECUTABLE}};
+}
+
+#remove _simpleFoam
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/system/lumpedPointMovement b/tutorials/incompressible/lumpedPointMotion/building/steady/system/lumpedPointMovement
new file mode 100644
index 0000000000..3950ff4771
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/system/lumpedPointMovement
@@ -0,0 +1,75 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: plus |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class dictionary;
+ location "system";
+ object lumpedPointMovement;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+// Reference axis for the locations
+axis (0 0 1);
+
+// Locations of the lumped points
+locations 11(0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5);
+
+// Division for pressure forces (0-1)
+division 0.5;
+
+//- If present, the offset of patch points compared to the locations
+// Otherwise determined from the bounding box
+// centre (0 0 0);
+
+//- The interpolation scheme
+interpolationScheme linear;
+
+//- Relaxation/scaling factor when updating positions
+relax 1.0;
+
+
+forces
+{
+ //- The pressure name (default: p)
+ p p;
+
+ //- Reference pressure [Pa] (default: 0)
+ pRef 0;
+
+ //- Reference density for incompressible calculations (default: 1)
+ rhoRef 1;
+}
+
+
+communication
+{
+ commsDir "comms";
+
+ log on;
+
+ waitInterval 1;
+
+ timeOut 100;
+
+ initByExternal false;
+
+ // Input file of positions/rotation, written by external application
+ inputName positions.in;
+
+ // Output file of forces, written by OpenFOAM
+ outputName forces.out;
+
+ inputFormat dictionary;
+ outputFormat dictionary;
+
+ debugTable "$FOAM_CASE/output.txt";
+}
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/system/meshQualityDict b/tutorials/incompressible/lumpedPointMotion/building/steady/system/meshQualityDict
new file mode 100644
index 0000000000..5f9fcbb6cd
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/system/meshQualityDict
@@ -0,0 +1,24 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: plus |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class dictionary;
+ object meshQualityDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+// Include defaults parameters from master dictionary
+#includeEtc "caseDicts/meshQualityDict"
+
+//- minFaceWeight (0 -> 0.5)
+minFaceWeight 0.02;
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/system/snappyHexMeshDict b/tutorials/incompressible/lumpedPointMotion/building/steady/system/snappyHexMeshDict
new file mode 100644
index 0000000000..ecffd9b650
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/system/snappyHexMeshDict
@@ -0,0 +1,305 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: plus |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class dictionary;
+ object snappyHexMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+// Which of the steps to run
+castellatedMesh true;
+snap true;
+addLayers false;
+
+
+// Geometry. Definition of all surfaces. All surfaces are of class
+// searchableSurface.
+// Surfaces are used
+// - to specify refinement for any mesh cell intersecting it
+// - to specify refinement for any mesh cell inside/outside/near
+// - to 'snap' the mesh boundary to the surface
+geometry
+{
+ building_wtc2.obj
+ {
+ type triSurfaceMesh;
+ name building;
+ }
+};
+
+
+// Settings for the castellatedMesh generation.
+castellatedMeshControls
+{
+
+ // Refinement parameters
+ // ~~~~~~~~~~~~~~~~~~~~~
+
+ // If local number of cells is >= maxLocalCells on any processor
+ // switches from from refinement followed by balancing
+ // (current method) to (weighted) balancing before refinement.
+ maxLocalCells 100000;
+
+ // Overall cell limit (approximately). Refinement will stop immediately
+ // upon reaching this number so a refinement level might not complete.
+ // Note that this is the number of cells before removing the part which
+ // is not 'visible' from the keepPoint. The final number of cells might
+ // actually be a lot less.
+ maxGlobalCells 2000000;
+
+ // The surface refinement loop might spend lots of iterations refining just a
+ // few cells. This setting will cause refinement to stop if <= minimumRefine
+ // are selected for refinement. Note: it will at least do one iteration
+ // (unless the number of cells to refine is 0)
+ minRefinementCells 10;
+
+ // Allow a certain level of imbalance during refining
+ // (since balancing is quite expensive)
+ // Expressed as fraction of perfect balance (= overall number of cells /
+ // nProcs). 0=balance always.
+ maxLoadUnbalance 0.10;
+
+
+ // Number of buffer layers between different levels.
+ // 1 means normal 2:1 refinement restriction, larger means slower
+ // refinement.
+ nCellsBetweenLevels 15;
+
+
+
+ // Explicit feature edge refinement
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ // Specifies a level for any cell intersected by its edges.
+ // This is a featureEdgeMesh, read from constant/triSurface for now.
+ features
+ (
+ );
+
+
+
+ // Surface based refinement
+ // ~~~~~~~~~~~~~~~~~~~~~~~~
+
+ // Specifies two levels for every surface. The first is the minimum level,
+ // every cell intersecting a surface gets refined up to the minimum level.
+ // The second level is the maximum level. Cells that 'see' multiple
+ // intersections where the intersections make an
+ // angle > resolveFeatureAngle get refined up to the maximum level.
+
+ refinementSurfaces
+ {
+ building
+ {
+ // Surface-wise min and max refinement level
+ level (2 2);
+
+ // Optional specification of patch type (default is wall). No
+ // constraint types (cyclic, symmetry) etc. are allowed.
+ patchInfo
+ {
+ type wall;
+ inGroups (targetBuilding);
+ }
+ }
+ }
+
+ // Resolve sharp angles
+ resolveFeatureAngle 30;
+
+
+ // Region-wise refinement
+ // ~~~~~~~~~~~~~~~~~~~~~~
+
+ // Specifies refinement level for cells in relation to a surface. One of
+ // three modes
+ // - distance. 'levels' specifies per distance to the surface the
+ // wanted refinement level. The distances need to be specified in
+ // descending order.
+ // - inside. 'levels' is only one entry and only the level is used. All
+ // cells inside the surface get refined up to the level. The surface
+ // needs to be closed for this to be possible.
+ // - outside. Same but cells outside.
+
+ refinementRegions
+ {
+ }
+
+
+ // Mesh selection
+ // ~~~~~~~~~~~~~~
+
+ // After refinement patches get added for all refinementSurfaces and
+ // all cells intersecting the surfaces get put into these patches. The
+ // section reachable from the locationInMesh is kept.
+ // NOTE: This point should never be on a face, always inside a cell, even
+ // after refinement.
+ locationInMesh (0 0 1.99);
+
+
+ // Whether any faceZones (as specified in the refinementSurfaces)
+ // are only on the boundary of corresponding cellZones or also allow
+ // free-standing zone faces. Not used if there are no faceZones.
+ allowFreeStandingZoneFaces true;
+}
+
+
+
+// Settings for the snapping.
+snapControls
+{
+ //- Number of patch smoothing iterations before finding correspondence
+ // to surface
+ nSmoothPatch 3;
+
+ //- Relative distance for points to be attracted by surface feature point
+ // or edge. True distance is this factor times local
+ // maximum edge length.
+ tolerance 2.0;
+
+ //- Number of mesh displacement relaxation iterations.
+ nSolveIter 30;
+
+ //- Maximum number of snapping relaxation iterations. Should stop
+ // before upon reaching a correct mesh.
+ nRelaxIter 5;
+
+ // Feature snapping
+
+ //- Number of feature edge snapping iterations.
+ // Leave out altogether to disable.
+ nFeatureSnapIter 10;
+
+ //- Detect (geometric only) features by sampling the surface
+ // (default=false).
+ implicitFeatureSnap false;
+
+ //- Use castellatedMeshControls::features (default = true)
+ explicitFeatureSnap true;
+
+ //- Detect points on multiple surfaces (only for explicitFeatureSnap)
+ multiRegionFeatureSnap false;
+}
+
+
+
+// Settings for the layer addition.
+addLayersControls
+{
+ // Are the thickness parameters below relative to the undistorted
+ // size of the refined cell outside layer (true) or absolute sizes (false).
+ relativeSizes true;
+
+ // Per final patch (so not geometry!) the layer information
+ layers
+ {
+ }
+
+ // Expansion factor for layer mesh
+ expansionRatio 1.0;
+
+ // Wanted thickness of final added cell layer. If multiple layers
+ // is the thickness of the layer furthest away from the wall.
+ // Relative to undistorted size of cell outside layer.
+ // See relativeSizes parameter.
+ finalLayerThickness 0.3;
+
+ // Minimum thickness of cell layer. If for any reason layer
+ // cannot be above minThickness do not add layer.
+ // Relative to undistorted size of cell outside layer.
+ minThickness 0.1;
+
+ // If points get not extruded do nGrow layers of connected faces that are
+ // also not grown. This helps convergence of the layer addition process
+ // close to features.
+ // Note: changed(corrected) w.r.t 17x! (didn't do anything in 17x)
+ nGrow 0;
+
+ // Advanced settings
+
+ // When not to extrude surface. 0 is flat surface, 90 is when two faces
+ // are perpendicular
+ featureAngle 60;
+
+ // At non-patched sides allow mesh to slip if extrusion direction makes
+ // angle larger than slipFeatureAngle.
+ slipFeatureAngle 30;
+
+ // Maximum number of snapping relaxation iterations. Should stop
+ // before upon reaching a correct mesh.
+ nRelaxIter 3;
+
+ // Number of smoothing iterations of surface normals
+ nSmoothSurfaceNormals 1;
+
+ // Number of smoothing iterations of interior mesh movement direction
+ nSmoothNormals 3;
+
+ // Smooth layer thickness over surface patches
+ nSmoothThickness 10;
+
+ // Stop layer growth on highly warped cells
+ maxFaceThicknessRatio 0.5;
+
+ // Reduce layer growth where ratio thickness to medial
+ // distance is large
+ maxThicknessToMedialRatio 0.3;
+
+ // Angle used to pick up medial axis points
+ // Note: changed(corrected) w.r.t 17x! 90 degrees corresponds to 130 in 17x.
+ minMedianAxisAngle 90;
+
+
+ // Create buffer region for new layer terminations
+ nBufferCellsNoExtrude 0;
+
+
+ // Overall max number of layer addition iterations. The mesher will exit
+ // if it reaches this number of iterations; possibly with an illegal
+ // mesh.
+ nLayerIter 50;
+}
+
+
+
+// Generic mesh quality settings. At any undoable phase these determine
+// where to undo.
+meshQualityControls
+{
+ #include "meshQualityDict"
+
+
+ // Advanced
+
+ //- Number of error distribution iterations
+ nSmoothScale 4;
+ //- Amount to scale back displacement at error points
+ errorReduction 0.75;
+}
+
+
+// Advanced
+
+// Write flags
+writeFlags
+(
+ scalarLevels
+ layerSets
+ layerFields // write volScalarField for layer coverage
+);
+
+
+// Merge tolerance. Is fraction of overall bounding box of initial mesh.
+// Note: the write tolerance needs to be higher than this.
+mergeTolerance 1e-6;
+
+
+// ************************************************************************* //
diff --git a/tutorials/incompressible/lumpedPointMotion/building/steady/system/surfaceFeatureExtractDict b/tutorials/incompressible/lumpedPointMotion/building/steady/system/surfaceFeatureExtractDict
new file mode 100644
index 0000000000..c640b9997f
--- /dev/null
+++ b/tutorials/incompressible/lumpedPointMotion/building/steady/system/surfaceFeatureExtractDict
@@ -0,0 +1,33 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| ========= | |
+| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
+| \\ / O peration | Version: plus |
+| \\ / A nd | Web: www.OpenFOAM.com |
+| \\/ M anipulation | |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ version 2.0;
+ format ascii;
+ class dictionary;
+ object surfaceFeatureExtractDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+building_wtc2.obj
+{
+ // How to obtain raw features (extractFromFile || extractFromSurface)
+ extractionMethod extractFromSurface;
+
+ // Mark edges whose adjacent surface normals are at an angle less
+ // than includedAngle as features
+ // - 0 : selects no edges
+ // - 180: selects all edges
+ includedAngle 85;
+
+ // Write features to obj format for postprocessing
+ writeObj false;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/resources/geometry/building_wtc2.obj b/tutorials/resources/geometry/building_wtc2.obj
new file mode 100644
index 0000000000..61c584a1d2
--- /dev/null
+++ b/tutorials/resources/geometry/building_wtc2.obj
@@ -0,0 +1,319 @@
+# Wavefront OBJ file
+# source https://grabcad.com/library/1-world-trade-center-1
+#
+# Terms of Usage:
+# One World Trade Center by CaitlinLe is licensed under the
+# Creative Commons - Attribution - Share Alike license.
+#
+o targetBuilding_wtc2
+
+# points : 101
+# faces : 198
+# zones : 1
+# 0 building (nFaces: 198)
+
+#
+v 0.21015 0.243555 7.5e-06
+v 0.21015 0.056445 7.5e-06
+v 0.38985 0.056445 7.5e-06
+v 0.38985 0.243555 7.5e-06
+v 0.2109 0.0616875 0.111383
+v 0.21522 0.0571875 0.111383
+v 0.2109 0.239858 0.111383
+v 0.3891 0.0601425 0.111383
+v 0.386258 0.0571875 0.111383
+v 0.213735 0.242812 0.111383
+v 0.3891 0.242812 0.111383
+v 0.21015 0.056445 0.111383
+v 0.21015 0.243555 0.111383
+v 0.38985 0.056445 0.111383
+v 0.38985 0.243555 0.111383
+v 0.3891 0.242812 0.119212
+v 0.2109 0.150773 0.728745
+v 0.300742 0.0571875 0.72873
+v 0.262478 0.11247 0.742507
+v 0.255555 0.120915 0.742507
+v 0.270915 0.105547 0.742507
+v 0.250403 0.130545 0.742507
+v 0.280545 0.100395 0.742507
+v 0.290992 0.0972375 0.742507
+v 0.247237 0.140992 0.742507
+v 0.246173 0.151853 0.742507
+v 0.30186 0.0961575 0.742507
+v 0.247237 0.162712 0.742507
+v 0.31272 0.0972375 0.742507
+v 0.250403 0.17316 0.742507
+v 0.323168 0.100395 0.742507
+v 0.255555 0.18279 0.742507
+v 0.332798 0.105547 0.742507
+v 0.262478 0.191235 0.742507
+v 0.341235 0.11247 0.742507
+v 0.348157 0.120915 0.742507
+v 0.270915 0.198157 0.742507
+v 0.280545 0.20331 0.742507
+v 0.35331 0.130545 0.742507
+v 0.290992 0.206467 0.742507
+v 0.356475 0.140992 0.742507
+v 0.35754 0.151853 0.742507
+v 0.30186 0.20754 0.742507
+v 0.31272 0.206467 0.742507
+v 0.356475 0.162712 0.742507
+v 0.35331 0.17316 0.742507
+v 0.323168 0.20331 0.742507
+v 0.348157 0.18279 0.742507
+v 0.332798 0.198157 0.742507
+v 0.341235 0.191235 0.742507
+v 0.212805 0.150773 0.742507
+v 0.3891 0.151207 0.742507
+v 0.3891 0.152872 0.742507
+v 0.300742 0.059175 0.742507
+v 0.301163 0.242812 0.742507
+v 0.30276 0.242812 0.742507
+v 0.3 0.149993 0.764783
+v 0.301853 0.150495 0.764783
+v 0.298148 0.150495 0.764783
+v 0.303218 0.151853 0.764783
+v 0.296783 0.151853 0.764783
+v 0.30372 0.153713 0.764783
+v 0.29628 0.153713 0.764783
+v 0.303218 0.155565 0.764783
+v 0.296783 0.155565 0.764783
+v 0.301853 0.156922 0.764783
+v 0.298148 0.156922 0.764783
+v 0.3 0.157425 0.764783
+v 0.262478 0.11247 0.764783
+v 0.255555 0.120915 0.764783
+v 0.270915 0.105547 0.764783
+v 0.250403 0.130545 0.764783
+v 0.280545 0.100395 0.764783
+v 0.247237 0.140992 0.764783
+v 0.290992 0.0972375 0.764783
+v 0.246173 0.151853 0.764783
+v 0.30186 0.0961575 0.764783
+v 0.247237 0.162712 0.764783
+v 0.31272 0.0972375 0.764783
+v 0.250403 0.17316 0.764783
+v 0.323168 0.100395 0.764783
+v 0.255555 0.18279 0.764783
+v 0.332798 0.105547 0.764783
+v 0.262478 0.191235 0.764783
+v 0.341235 0.11247 0.764783
+v 0.348157 0.120915 0.764783
+v 0.270915 0.198157 0.764783
+v 0.35331 0.130545 0.764783
+v 0.280545 0.20331 0.764783
+v 0.290992 0.206467 0.764783
+v 0.356475 0.140992 0.764783
+v 0.35754 0.151853 0.764783
+v 0.30186 0.20754 0.764783
+v 0.31272 0.206467 0.764783
+v 0.356475 0.162712 0.764783
+v 0.35331 0.17316 0.764783
+v 0.323168 0.20331 0.764783
+v 0.348157 0.18279 0.764783
+v 0.332798 0.198157 0.764783
+v 0.341235 0.191235 0.764783
+v 0.3 0.153713 0.95784
+#
+
+#
+g building
+f 1 2 12
+f 13 1 12
+f 12 2 14
+f 3 14 2
+f 3 2 4
+f 2 1 4
+f 4 15 14
+f 4 14 3
+f 15 4 13
+f 1 13 4
+f 13 7 10
+f 44 94 97
+f 44 97 47
+f 13 10 15
+f 11 15 10
+f 44 43 93
+f 44 93 94
+f 11 10 16
+f 47 56 44
+f 11 8 15
+f 14 15 8
+f 14 8 9
+f 11 16 8
+f 46 96 95
+f 46 95 45
+f 52 53 42
+f 17 7 5
+f 95 92 42
+f 95 42 45
+f 18 9 8
+f 98 64 96
+f 95 96 62
+f 5 12 6
+f 9 6 14
+f 41 52 42
+f 101 64 66
+f 92 41 42
+f 60 62 101
+f 62 64 101
+f 12 14 6
+f 12 5 13
+f 7 13 5
+f 65 78 63
+f 63 74 61
+f 72 70 61
+f 67 84 65
+f 55 43 56
+f 46 45 53
+f 45 42 53
+f 16 56 53
+f 26 76 78
+f 26 78 28
+f 78 80 30
+f 78 30 28
+f 16 53 8
+f 52 8 53
+f 101 66 68
+f 28 51 26
+f 28 30 51
+f 101 58 60
+f 48 53 50
+f 56 50 53
+f 50 100 98
+f 50 98 48
+f 46 53 48
+f 46 48 96
+f 98 96 48
+f 83 58 81
+f 81 58 79
+f 85 58 83
+f 99 66 100
+f 100 64 98
+f 50 56 49
+f 97 94 66
+f 64 100 66
+f 62 96 64
+f 91 92 62
+f 97 66 99
+f 99 49 97
+f 62 60 91
+f 58 85 60
+f 88 60 86
+f 88 91 60
+f 50 49 99
+f 50 99 100
+f 90 68 93
+f 101 68 67
+f 56 47 49
+f 49 47 97
+f 38 40 55
+f 77 79 57
+f 86 60 85
+f 92 95 62
+f 57 79 58
+f 91 41 92
+f 88 39 41
+f 88 41 91
+f 86 36 39
+f 86 39 88
+f 85 36 86
+f 41 39 52
+f 35 52 36
+f 39 36 52
+f 94 93 68
+f 89 67 90
+f 87 67 89
+f 84 82 65
+f 82 80 65
+f 78 65 80
+f 84 67 87
+f 87 37 34
+f 87 34 84
+f 18 8 52
+f 34 32 82
+f 34 82 84
+f 89 38 37
+f 89 37 87
+f 57 58 101
+f 90 40 38
+f 90 38 89
+f 19 69 70
+f 24 77 75
+f 71 73 59
+f 57 59 73
+f 75 57 73
+f 77 57 75
+f 73 23 24
+f 73 24 75
+f 71 21 23
+f 71 23 73
+f 69 19 21
+f 69 21 71
+f 23 54 24
+f 54 21 19
+f 51 25 26
+f 51 55 17
+f 55 10 7
+f 17 55 7
+f 56 16 55
+f 10 55 16
+f 5 6 18
+f 54 51 17
+f 18 54 17
+f 17 5 18
+f 18 6 9
+f 52 35 54
+f 35 33 54
+f 52 54 18
+f 36 85 35
+f 33 31 54
+f 83 33 35
+f 83 35 85
+f 31 29 54
+f 81 31 33
+f 81 33 83
+f 79 29 31
+f 79 31 81
+f 77 27 29
+f 77 29 79
+f 77 24 27
+f 27 24 54
+f 54 29 27
+f 72 61 74
+f 70 69 61
+f 59 61 69
+f 69 71 59
+f 20 22 51
+f 19 70 20
+f 25 51 22
+f 74 25 22
+f 74 22 72
+f 74 76 25
+f 26 25 76
+f 22 20 70
+f 22 70 72
+f 23 21 54
+f 54 19 51
+f 20 51 19
+f 93 43 40
+f 93 40 90
+f 80 82 30
+f 32 30 82
+f 37 38 55
+f 34 37 55
+f 32 34 51
+f 55 51 34
+f 30 32 51
+f 44 56 43
+f 43 55 40
+f 101 65 63
+f 101 63 61
+f 59 101 61
+f 101 67 65
+f 59 57 101
+f 68 90 67
+f 78 76 63
+f 68 66 94
+f 76 74 63
+#