From 91c2d7743b1037c2d8cc639d2826cf60db422972 Mon Sep 17 00:00:00 2001
From: mattijs <m.janssens@opencfd.co.uk>
Date: Thu, 12 Jun 2008 19:32:10 +0100
Subject: [PATCH] tutorial scripts

---
 src/meshTools/octree/PointIndexHit.H          |   5 +
 tutorials/Allclean                            |  19 +--
 tutorials/Allrun                              | 126 +++++++----------
 tutorials/Alltest                             |  17 ++-
 tutorials/CleanFunctions                      |  28 ++--
 .../MRFSimpleFoam/mixerVessel2D/Allclean      |  17 +++
 tutorials/MRFSimpleFoam/mixerVessel2D/Allrun  |  19 +++
 tutorials/README.txt                          | 129 ++++++++++++++++++
 tutorials/RunFunctions                        |  22 ++-
 tutorials/XiFoam/Allclean                     |  20 ++-
 tutorials/XiFoam/Allrun                       |  41 +++---
 tutorials/buoyantFoam/hotRoom/Allclean        |  19 +++
 tutorials/buoyantFoam/hotRoom/Allrun          |  19 +++
 .../buoyantFoam/hotRoom/system/controlDict    |   2 +-
 .../buoyantFoam/hotRoom/system/fvSolution     |   6 +
 tutorials/buoyantSimpleFoam/hotRoom/Allclean  |  18 +++
 tutorials/buoyantSimpleFoam/hotRoom/Allrun    |  20 +++
 tutorials/channelOodles/channel395/Allrun     |  20 +++
 tutorials/cleanAll                            |  67 +++++++++
 tutorials/dnsFoam/boxTurb16/Allclean          |  18 +++
 tutorials/dnsFoam/boxTurb16/Allrun            |  19 +++
 tutorials/engineFoam/kivaTest/Allclean        |  21 +++
 tutorials/engineFoam/kivaTest/Allrun          |  43 ++++++
 tutorials/icoFoam/Allclean                    |  15 +-
 tutorials/icoFoam/Allrun                      |  36 ++---
 .../interDyMFoam/damBreakWithObstacle/Allrun  |  20 +++
 tutorials/interFoam/Allclean                  |  20 ++-
 tutorials/interFoam/Allrun                    |  58 ++++----
 tutorials/laplacianFoam/flange/Allclean       |  19 +++
 tutorials/laplacianFoam/flange/Allrun         |  30 ++++
 tutorials/lesInterFoam/nozzleFlow2D/Allclean  |  18 +++
 tutorials/lesInterFoam/nozzleFlow2D/Allrun    |  42 ++++++
 .../mdEquilibrationFoam/periodicCube/Allrun   |  18 +++
 tutorials/mhdFoam/hartmann/Allclean           |  18 +++
 tutorials/mhdFoam/hartmann/Allrun             |  19 +++
 tutorials/oodles/pitzDailyDirectMapped/Allrun |  18 +++
 tutorials/potentialFoam/Allclean              |  36 +++--
 tutorials/potentialFoam/cylinder/Allrun       |  20 +++
 tutorials/potentialFoam/pitzDaily/Allrun      |  18 +++
 tutorials/rasInterFoam/Allclean               |  21 ++-
 tutorials/rasInterFoam/Allrun                 |  58 ++++----
 tutorials/rasInterFoam/damBreak/Allrun        |  19 +++
 tutorials/rhoSonicFoam/shockTube/Allclean     |  20 +++
 tutorials/rhoSonicFoam/shockTube/Allrun       |  23 ++++
 tutorials/rhoTurbTwinParcelFoam/Allclean      |  24 +++-
 .../simplifiedSiwek/Allrun                    |  19 +++
 tutorials/rhopSonicFoam/shockTube/Allclean    |  19 +++
 tutorials/rhopSonicFoam/shockTube/Allrun      |  19 +++
 tutorials/runAll                              |  73 ++++++++++
 tutorials/settlingFoam/tank3D/Allclean        |  16 +++
 tutorials/settlingFoam/tank3D/Allrun          |  17 +++
 tutorials/simpleSRFFoam/mixer/Allclean        |  17 +++
 tutorials/simpleSRFFoam/mixer/Allrun          |  19 +++
 .../solidDisplacementFoam/plateHole/Allclean  |  17 +++
 .../solidDisplacementFoam/plateHole/Allrun    |  18 +++
 tutorials/sonicFoam/shockTube/Allclean        |  20 +++
 tutorials/sonicFoam/shockTube/Allrun          |  21 +++
 tutorials/sonicLiquidFoam/Allclean            |  27 ++--
 tutorials/sonicLiquidFoam/Allrun              |  38 ++++--
 tutorials/sonicTurbFoam/Allrun                |  49 ++++---
 60 files changed, 1375 insertions(+), 299 deletions(-)
 create mode 100755 tutorials/MRFSimpleFoam/mixerVessel2D/Allclean
 create mode 100755 tutorials/MRFSimpleFoam/mixerVessel2D/Allrun
 create mode 100644 tutorials/README.txt
 create mode 100755 tutorials/buoyantFoam/hotRoom/Allclean
 create mode 100755 tutorials/buoyantFoam/hotRoom/Allrun
 create mode 100755 tutorials/buoyantSimpleFoam/hotRoom/Allclean
 create mode 100755 tutorials/buoyantSimpleFoam/hotRoom/Allrun
 create mode 100755 tutorials/channelOodles/channel395/Allrun
 create mode 100755 tutorials/cleanAll
 create mode 100755 tutorials/dnsFoam/boxTurb16/Allclean
 create mode 100755 tutorials/dnsFoam/boxTurb16/Allrun
 create mode 100755 tutorials/engineFoam/kivaTest/Allclean
 create mode 100755 tutorials/engineFoam/kivaTest/Allrun
 create mode 100755 tutorials/interDyMFoam/damBreakWithObstacle/Allrun
 create mode 100755 tutorials/laplacianFoam/flange/Allclean
 create mode 100755 tutorials/laplacianFoam/flange/Allrun
 create mode 100755 tutorials/lesInterFoam/nozzleFlow2D/Allclean
 create mode 100755 tutorials/lesInterFoam/nozzleFlow2D/Allrun
 create mode 100755 tutorials/mdEquilibrationFoam/periodicCube/Allrun
 create mode 100755 tutorials/mhdFoam/hartmann/Allclean
 create mode 100755 tutorials/mhdFoam/hartmann/Allrun
 create mode 100755 tutorials/oodles/pitzDailyDirectMapped/Allrun
 create mode 100755 tutorials/potentialFoam/cylinder/Allrun
 create mode 100755 tutorials/potentialFoam/pitzDaily/Allrun
 create mode 100755 tutorials/rasInterFoam/damBreak/Allrun
 create mode 100755 tutorials/rhoSonicFoam/shockTube/Allclean
 create mode 100755 tutorials/rhoSonicFoam/shockTube/Allrun
 create mode 100755 tutorials/rhoTurbTwinParcelFoam/simplifiedSiwek/Allrun
 create mode 100755 tutorials/rhopSonicFoam/shockTube/Allclean
 create mode 100755 tutorials/rhopSonicFoam/shockTube/Allrun
 create mode 100755 tutorials/runAll
 create mode 100755 tutorials/settlingFoam/tank3D/Allclean
 create mode 100755 tutorials/settlingFoam/tank3D/Allrun
 create mode 100755 tutorials/simpleSRFFoam/mixer/Allclean
 create mode 100755 tutorials/simpleSRFFoam/mixer/Allrun
 create mode 100755 tutorials/solidDisplacementFoam/plateHole/Allclean
 create mode 100755 tutorials/solidDisplacementFoam/plateHole/Allrun
 create mode 100755 tutorials/sonicFoam/shockTube/Allclean
 create mode 100755 tutorials/sonicFoam/shockTube/Allrun

diff --git a/src/meshTools/octree/PointIndexHit.H b/src/meshTools/octree/PointIndexHit.H
index 35388eaa1b7..4af500c8cd9 100644
--- a/src/meshTools/octree/PointIndexHit.H
+++ b/src/meshTools/octree/PointIndexHit.H
@@ -141,6 +141,11 @@ public:
             return hitPoint_;
         }
 
+        Point& rawPoint()
+        {
+            return hitPoint_;
+        }
+
         void setHit()
         {
             hit_ = true;
diff --git a/tutorials/Allclean b/tutorials/Allclean
index aefce0c6f09..6f62878c0a8 100755
--- a/tutorials/Allclean
+++ b/tutorials/Allclean
@@ -43,23 +43,10 @@ echo ""
 
 for application in *
 do
-    if [ -d "$application" ]
+    if [ -d $application ]
     then
-        cd $application
-        if [ -f "Allclean" ] 
-        then
-            ./Allclean
-        else
-            for case in *
-            do
-                if [ -d "$case" ]
-                then
-                    cleanCase $case
-                fi
-            done
-        fi
-        cd ..
-     fi
+        (cd $application && ../cleanAll)
+    fi
 done
 
 #------------------------------------------------------------------------------
diff --git a/tutorials/Allrun b/tutorials/Allrun
index e41156e63a7..3e48760c4f0 100755
--- a/tutorials/Allrun
+++ b/tutorials/Allrun
@@ -32,94 +32,64 @@
 
 . RunFunctions
 
-applications=\
-" \
-    icoFoam \
-    turbFoam \
-    simpleFoam \
-    icoDyMFoam \
-    nonNewtonianIcoFoam \
-    boundaryFoam \
-    interFoam \
-    lesInterFoam \
-    rasInterFoam \
-    multiphaseInterFoam \
-    buoyantSimpleFoam \
-    buoyantFoam \
-    potentialFoam \
-    laplacianFoam \
-    scalarTransportFoam \
-    oodles \
-    coodles \
-    channelOodles \
-    dnsFoam \
-    mhdFoam \
-    electrostaticFoam \
-    financialFoam \
-    sonicFoam \
-    rhoSonicFoam \
-    rhopSonicFoam \
-    sonicLiquidFoam \
-    sonicTurbFoam \
-    solidDisplacementFoam \
-    solidEquilibriumDisplacementFoam \
-    XiFoam \
-    Xoodles \
-    dieselFoam \
-    engineFoam \
-    bubbleFoam \
-    twoPhaseEulerFoam \
-    settlingFoam \
-    rhoExplicitPorousSimpleFoam \
-    rhoImplicitPorousSimpleFoam \
-    rhoTurbFoam \
-    cavitatingFoam \
-    MRFSimpleFoam \
-    interDyMFoam \
-"
 
+# logReport <logfile>
+# Extracts useful info from log file.
 logReport () {
-case=`dirname $1 | sed s/"\(.*\)\.\/"/""/g`
-app=`echo $1 | sed s/"\(.*\)\."/""/g`
-appAndCase="Application $app - case $case"
+    case=`dirname $1 | sed s/"\(.*\)\.\/"/""/g`
+    app=`echo $1 | sed s/"\(.*\)\."/""/g`
+    appAndCase="Application $app - case $case"
 
-fatalError=`grep "FOAM FATAL" $1`
-UxSS=`grep -E "Ux[:| ]*solution singularity" $1`
-UySS=`grep -E "Uy[:| ]*solution singularity" $1`
-UzSS=`grep -E "Uz[:| ]*solution singularity" $1`
-completed=`grep -E "^[\t ]*[eE]nd" $1`
+    fatalError=`grep "FOAM FATAL" $1`
+    UxSS=`grep -E "Ux[:| ]*solution singularity" $1`
+    UySS=`grep -E "Uy[:| ]*solution singularity" $1`
+    UzSS=`grep -E "Uz[:| ]*solution singularity" $1`
+    completed=`grep -E "^[\t ]*[eE]nd" $1`
 
-if [ "$fatalError" ] ; then
-    echo "$appAndCase: ** FOAM FATAL ERROR **"
-    return
-elif [ "$UxSS" -a "$UySS" -a "$UzSS" ] ; then
-    echo "$appAndCase: ** Solution singularity **"
-    return
-elif [ "$completed" ] ; then
-    completionTime=`tail -10 $log | grep Execution | cut -d= -f2 | sed 's/^[ \t]*//'` 
-    if [ "$completionTime" ] ; then
-        completionTime="in $completionTime"
+    if [ "$fatalError" ] ; then
+        echo "$appAndCase: ** FOAM FATAL ERROR **"
+        return
+    elif [ "$UxSS" -a "$UySS" -a "$UzSS" ] ; then
+        echo "$appAndCase: ** Solution singularity **"
+        return
+    elif [ "$completed" ] ; then
+        completionTime=`tail -10 $log | grep Execution | cut -d= -f2 | sed 's/^[ \t]*//'` 
+        if [ "$completionTime" ] ; then
+            completionTime="in $completionTime"
+        fi
+        echo "$appAndCase: completed $completionTime"
+        return
+    else
+        echo "$appAndCase: unconfirmed completion"
     fi
-    echo "$appAndCase: completed $completionTime"
-    return
-else
-    echo "$appAndCase: unconfirmed completion"
-fi
 }
 
+
+# Recursively run all tutorials
+for application in *
+do
+    if [ -d $application ]
+    then
+        #(cd $application && ../runAll)
+        $WM_SCHEDULER "cd $PWD/$application && ../runAll"
+    fi
+done
+
+# Analyse all log files
 rm testLoopReport > /dev/null 2>&1 &
 touch testLoopReport
-for application in $applications
+for application in *
 do
-    cd $application
-    ./Allrun
-#    echo "$application application completed" >> ../testLoopReport
-    for log in `find . -name "log.*" | xargs ls -rt`
-    do
-        logReport $log >> ../testLoopReport
-    done
-    echo "" >> ../testLoopReport
-    cd ..
+    if [ -d $application ]
+    then
+        cd $application
+        for log in `find . -name "log.*" | xargs ls -rt`
+        do
+            logReport $log >> ../testLoopReport
+        done
+        echo "" >> ../testLoopReport
+        cd ..
+    fi
 done
 
 find . -name "log.*" -exec cat {} \; >> logs
diff --git a/tutorials/Alltest b/tutorials/Alltest
index 74e70dafefd..2817a861f28 100755
--- a/tutorials/Alltest
+++ b/tutorials/Alltest
@@ -65,7 +65,22 @@ EOF
 #
 # VARIABLE
 #
-MAIN_CONTROL_DICT=${WM_PROJECT_DIR}/${FOAM_DOT_DIR}/controlDict
+MAIN_CONTROL_DICT=
+: ${FOAM_DOT_DIR:=.$WM_PROJECT-$WM_PROJECT_VERSION}
+
+for i in \
+  $HOME/$FOAM_DOT_DIR \
+  $HOME/.$WM_PROJECT/$WM_PROJECT_VERSION \
+  $HOME/.$WM_PROJECT \
+  $WM_PROJECT_DIR/etc \
+  $WM_PROJECT_DIR/$FOAM_DOT_DIR \
+  ;
+do
+  if [ -f "$i/controlDict" ]; then
+     MAIN_CONTROL_DICT="$i/controlDict"
+     break
+  fi
+done
 TUTORIALS_DIR=.
 TEST_RUN_DIR=../tutorialsTest
 FV_SCHEMES=\
diff --git a/tutorials/CleanFunctions b/tutorials/CleanFunctions
index a5e9b7ebed4..e7895183e15 100644
--- a/tutorials/CleanFunctions
+++ b/tutorials/CleanFunctions
@@ -38,33 +38,33 @@
 #    do
 #        if [ $T != "0" ] ; then
 #            echo "Deleting directory $T"
-#            rm -rf $1/${T} > /dev/null 2>&1
+#            rm -rf ${T} > /dev/null 2>&1
 #        fi
 #    done
-#    rm -rf $1/{log,log.*,log-*,logSummary.*,.fxLock,*.xml,ParaView*,paraFoam*,*.foam} > /dev/null 2>&1
+#    rm -rf {log,log.*,log-*,logSummary.*,.fxLock,*.xml,ParaView*,paraFoam*,*.foam} > /dev/null 2>&1
 #}
 
 cleanTimeDirectories ()
 {
-    echo "Cleaning $case case of $application application"
+    echo "Cleaning $PWD case"
     nZeros=0
     zeros=""
     while [ $nZeros -lt 8 ] ; do
         timeDir="0.${zeros}[1-9]*"
-        rm -rf $1/${timeDir} > /dev/null 2>&1
-        rm -rf $1/-${timeDir} > /dev/null 2>&1
+        rm -rf ${timeDir} > /dev/null 2>&1
+        rm -rf ./-${timeDir} > /dev/null 2>&1
         zeros=`printf %0${nZeros}d 0`
         nZeros=$(($nZeros + 1))
     done
-    rm -rf $1/{[1-9]*,-[1-9]*,log,log.*,log-*,logSummary.*,.fxLock,*.xml,ParaView*,paraFoam*,*.foam} > /dev/null 2>&1
+    rm -rf ./{[1-9]*,-[1-9]*,log,log.*,log-*,logSummary.*,.fxLock,*.xml,ParaView*,paraFoam*,*.foam} > /dev/null 2>&1
 }
 
 cleanCase ()
 {
-    cleanTimeDirectories $1
+    cleanTimeDirectories
 
-    rm -rf $1/constant/polyMesh/{allOwner*,cell*,face*,meshModifiers*} \
-           $1/constant/polyMesh/{owner*,neighbour*,point*,edge*} \ 
+    rm -rf constant/polyMesh/{allOwner*,cell*,face*,meshModifiers*} \
+           constant/polyMesh/{owner*,neighbour*,point*,edge*} \ 
            > /dev/null 2>&1
 
     for f in `find . -name "*Dict"`
@@ -76,25 +76,25 @@ cleanCase ()
 
 cleanParallelCase ()
 {
-    cleanCase $1
+    cleanCase
 
-    rm -rf $1/processor* > /dev/null 2>&1
+    rm -rf processor* > /dev/null 2>&1
 }
 
 removeCase ()
 {
-    echo "Removing $case case of $application application"
+    echo "Removing $case case"
     rm -rf $1
 }
 
 cleanSamples ()
 {
-    rm -rf $1/{samples,sampleSurfaces} > /dev/null 2>&1
+    rm -rf {samples,sampleSurfaces} > /dev/null 2>&1
 }
 
 cleanUcomponents ()
 {
-    rm -rf $1/0/{Ux,Uy,Uz} > /dev/null 2>&1
+    rm -rf 0/{Ux,Uy,Uz} > /dev/null 2>&1
 }
 
 #------------------------------------------------------------------------------
diff --git a/tutorials/MRFSimpleFoam/mixerVessel2D/Allclean b/tutorials/MRFSimpleFoam/mixerVessel2D/Allclean
new file mode 100755
index 00000000000..dd032d23aac
--- /dev/null
+++ b/tutorials/MRFSimpleFoam/mixerVessel2D/Allclean
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/CleanFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/CleanFunctions
+
+
+cleanCase
+wclean ../MRFSimpleFoam
diff --git a/tutorials/MRFSimpleFoam/mixerVessel2D/Allrun b/tutorials/MRFSimpleFoam/mixerVessel2D/Allrun
new file mode 100755
index 00000000000..8e10ba55a13
--- /dev/null
+++ b/tutorials/MRFSimpleFoam/mixerVessel2D/Allrun
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/RunFunctions
+
+
+compileApplication ../MRFSimpleFoam
+runApplication makeMesh
+runApplication $application
+
diff --git a/tutorials/README.txt b/tutorials/README.txt
new file mode 100644
index 00000000000..a98300a74fd
--- /dev/null
+++ b/tutorials/README.txt
@@ -0,0 +1,129 @@
+To run all               : Allrun
+To run all one iteration : Alltest
+To clean all             : Allclean
+
+The structure now is that a case that only requires blockMesh
+and application does not need an Allrun or Allclean script.
+Only if running is special it requires an Allrun. Similarly
+if cleaning is non-standard.
+
+
+                                run clean
+boundaryFoam
+    boundaryLaunderSharma       ok
+    boundaryWallFunctions       ok
+bubbleFoam
+    bubbleColumn                ok
+buoyantFoam
+    hotRoom                     ok
+buoyantSimpleFoam
+    hotRoom                     ok
+buoyantSimpleRadiationFoam
+    hotRadiationRoom            ok
+cavitatingFoam
+    nozzle2D                    No cavitatingFoam solver.
+channelOodles
+    channel395                  ok
+coodles
+    pitzDaily                   ok
+dieselFoam
+    aachenBomb
+dnsFoam
+    boxTurb16
+electrostaticFoam
+    chargedWire                 ok
+engineFoam
+    kivaTest
+financialFoam
+    europeanCall                ok
+icoDyMFoam
+    movingCone                  ok  ok
+icoFoam
+    cavity                      ok  ok
+    cavityFine                  ok  ok
+    cavityGrade                 ok  ok
+    cavityHighRe                ok  ok
+    cavityClipped               ok  ok
+    elbow                       ok  ok
+interDyMFoam
+    damBreakWithObstacle        ok  ok
+interFoam
+    damBreak                    ok  ok
+    damBreakFine                ok  ok
+laplacianFoam
+    flange                      ok  ok
+lesInterFoam
+    nozzleFlow2D
+mdEquilibrationFoam
+    periodicCube
+mhdFoam                         ok
+    hartmann
+MRFSimpleFoam
+    mixerVessel2D
+multiphaseInterFoam
+    damBreak4phase
+    damBreak4phaseFine
+nonNewtonianIcoFoam
+    offsetCylinder
+oodles
+    pitzDaily
+    pitzDailyDirectMapped
+potentialFoam
+    cylinder
+    pitzDaily
+rasInterFoam
+    damBreak
+    damBreakFine
+rhoPimpleFoam
+    angledDuct
+rhoPorousSimpleFoam
+    angledDuctExplicit
+    angledDuctImplicit
+rhopSonicFoam
+    shockTube
+    wedge15Ma5
+rhoSonicFoam
+    forwardStep
+    shockTube               No setShock application
+rhoTurbFoam
+    cavity
+rhoTurbTwinParcelFoam
+    simplifiedSiwek
+scalarTransportFoam
+    pitzDaily
+settlingFoam
+    dahl
+    tank3D
+simpleFoam
+    pitzDaily
+    pitzDaily3Blocks
+    pitzDailyExptInlet
+simpleSRFFoam
+    mixer
+    simpleSRFFoam
+solidDisplacementFoam
+    plateHole
+solidEquilibriumDisplacementFoam
+    beamEndLoad
+sonicFoam
+    forwardStep
+    shockTube
+sonicLiquidFoam
+    decompressionTank
+    decompressionTankFine
+sonicTurbFoam
+    nacaAirfoil
+    prism
+turbFoam
+    cavity
+twoPhaseEulerFoam
+    bed
+    bed2
+    bubbleColumn
+XiFoam
+    moriyoshiHomogeneous
+    moriyoshiHomogeneousPart2
+Xoodles
+    pitzDaily
+    pitzDaily3D
+
diff --git a/tutorials/RunFunctions b/tutorials/RunFunctions
index 910a01c0a6d..64cc1ae4e59 100644
--- a/tutorials/RunFunctions
+++ b/tutorials/RunFunctions
@@ -33,31 +33,29 @@
 runApplication ()
 {
     APP_RUN=$1; shift
-    dir=$1; shift
 
-    if [ -f $dir/log.$APP_RUN ] ; then
-        echo "$APP_RUN already run on $dir: remove log file to run"
+    if [ -f log.$APP_RUN ] ; then
+        echo "$APP_RUN already run on $PWD: remove log file to run"
     else
-        echo "Running $APP_RUN on $dir"
-        ( cd $dir && $APP_RUN $* > log.$APP_RUN 2>&1 )
+        echo "Running $APP_RUN on $PWD"
+        $APP_RUN $* > log.$APP_RUN 2>&1
     fi
 }
 
 runParallel ()
 {
     APP_RUN=$1; shift
-    dir=$2; shift
 
-    if [ -f $dir/log.$APP_RUN ] ; then
-        echo "$APP_RUN already run on $dir: remove log file to run"
+    if [ -f $log.$APP_RUN ] ; then
+        echo "$APP_RUN already run on $PWD: remove log file to run"
     else
         if [ "$WM_MPLIB" = LAM ]
         then
             echo "Starting LAM using $2 machines file"
             lamboot -v $2
         fi
-        echo "Running $APP_RUN in parallel on $dir using $1 processes"
-        ( cd $dir && mpirun -np $1 $APP_RUN -parallel < /dev/null > log.$APP_RUN 2>&1 )
+        echo "Running $APP_RUN in parallel on $PWD using $1 processes"
+        ( mpirun -np $1 $APP_RUN -parallel < /dev/null > log.$APP_RUN 2>&1 )
         if [ "$WM_MPLIB" = LAM ]
         then
             echo "Stopping LAM"
@@ -68,8 +66,8 @@ runParallel ()
 
 compileApplication ()
 {
-    echo "Compiling $1/$2 application"
-    wmake $1/$2
+    echo "Compiling $1 application"
+    wmake $1
 }
 
 cloneCase ()
diff --git a/tutorials/XiFoam/Allclean b/tutorials/XiFoam/Allclean
index e7edc11dc64..38c9de21bc4 100755
--- a/tutorials/XiFoam/Allclean
+++ b/tutorials/XiFoam/Allclean
@@ -1,16 +1,26 @@
 #!/bin/sh
 
-currDir=`pwd`
-application=`basename $currDir`
+# Get application name from directory
+application=`basename $PWD`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/CleanFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/CleanFunctions
+
+
+
+
 keepCases="moriyoshiHomogeneous"
 loseCases="moriyoshiHomogeneousPart2"
 
-tutorialPath=`dirname $0`/..
-. $tutorialPath/CleanFunctions
 
 for case in $keepCases
 do
-    cleanCase $case
+    (cd $case && $tutorialsDir/cleanAll)
 done
 
 for case in $loseCases
diff --git a/tutorials/XiFoam/Allrun b/tutorials/XiFoam/Allrun
index 78eac11c897..2cb966a848d 100755
--- a/tutorials/XiFoam/Allrun
+++ b/tutorials/XiFoam/Allrun
@@ -1,14 +1,20 @@
 #!/bin/sh
 
-currDir=`pwd`
-application=`basename $currDir`
-cases="moriyoshiHomogeneous moriyoshiHomogeneousPart2"
+# Get application name from directory
+application=`basename $PWD`
 
-tutorialPath=`dirname $0`/..
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
 . $tutorialPath/RunFunctions
 
+
+
 setControlDict () {
-    controlDict="$case/system/controlDict"
+    controlDict="system/controlDict"
     sed \
     -e s/"\(deltaT[ \t]*\) 5e-06;"/"\1 1e-05;"/g \
     -e s/"\(endTime[ \t]*\) 0.005;"/"\1 0.015;"/g \
@@ -17,14 +23,17 @@ setControlDict () {
     mv temp.$$ $controlDict    
 }
 
-for case in $cases
-do
-    if [ "$case" = "moriyoshiHomogeneousPart2" ] ; then
-        cloneCase moriyoshiHomogeneous $case
-        cp -r moriyoshiHomogeneous/0.005 $case
-        setControlDict
-    else
-        runApplication blockMesh $case
-    fi
-    runApplication $application $case
-done
+
+
+# Do moriyoshiHomogeneous
+(cd moriyoshiHomogeneous && $tutorialPath/runAll)
+
+# Clone case
+cloneCase moriyoshiHomogeneous moriyoshiHomogeneousPart2
+# Modify and execute
+cd moriyoshiHomogeneousPart2
+    cp -r ../moriyoshiHomogeneous/0.005 .
+    setControlDict
+    runApplication $application
+cd ..
+
diff --git a/tutorials/buoyantFoam/hotRoom/Allclean b/tutorials/buoyantFoam/hotRoom/Allclean
new file mode 100755
index 00000000000..26ee1b2ae12
--- /dev/null
+++ b/tutorials/buoyantFoam/hotRoom/Allclean
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/CleanFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/CleanFunctions
+
+
+
+cleanCase
+cp 0/T.org 0/T
+wclean setHotRoom    
diff --git a/tutorials/buoyantFoam/hotRoom/Allrun b/tutorials/buoyantFoam/hotRoom/Allrun
new file mode 100755
index 00000000000..50076870330
--- /dev/null
+++ b/tutorials/buoyantFoam/hotRoom/Allrun
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/RunFunctions
+
+
+compileApplication setHotRoom
+runApplication blockMesh
+runApplication setHotRoom
+runApplication $application
diff --git a/tutorials/buoyantFoam/hotRoom/system/controlDict b/tutorials/buoyantFoam/hotRoom/system/controlDict
index 8f889c99419..655a98b4d4d 100644
--- a/tutorials/buoyantFoam/hotRoom/system/controlDict
+++ b/tutorials/buoyantFoam/hotRoom/system/controlDict
@@ -24,7 +24,7 @@ FoamFile
 
 application buoyantFoam;
 
-startFrom       latestTime;
+startFrom       startTime;
 
 startTime       0;
 
diff --git a/tutorials/buoyantFoam/hotRoom/system/fvSolution b/tutorials/buoyantFoam/hotRoom/system/fvSolution
index 399464b4e4a..c04ea071339 100644
--- a/tutorials/buoyantFoam/hotRoom/system/fvSolution
+++ b/tutorials/buoyantFoam/hotRoom/system/fvSolution
@@ -31,6 +31,12 @@ solvers
         relTol           0;
     };
     pd PCG
+    {
+        preconditioner   DIC;
+        tolerance        1e-06;
+        relTol           0.1;
+    };
+    pdFinal PCG
     {
         preconditioner   DIC;
         tolerance        1e-06;
diff --git a/tutorials/buoyantSimpleFoam/hotRoom/Allclean b/tutorials/buoyantSimpleFoam/hotRoom/Allclean
new file mode 100755
index 00000000000..e8e689b4577
--- /dev/null
+++ b/tutorials/buoyantSimpleFoam/hotRoom/Allclean
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/CleanFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/CleanFunctions
+
+
+cleanCase
+cp 0/T.org 0/T
+wclean ../../buoyantFoam/hotRoom/setHotRoom
diff --git a/tutorials/buoyantSimpleFoam/hotRoom/Allrun b/tutorials/buoyantSimpleFoam/hotRoom/Allrun
new file mode 100755
index 00000000000..9ebb5a17cf2
--- /dev/null
+++ b/tutorials/buoyantSimpleFoam/hotRoom/Allrun
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# Get application directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/RunFunctions
+
+
+
+compileApplication ../../buoyantFoam/hotRoom/setHotRoom
+runApplication blockMesh
+runApplication setHotRoom
+runApplication $application
diff --git a/tutorials/channelOodles/channel395/Allrun b/tutorials/channelOodles/channel395/Allrun
new file mode 100755
index 00000000000..c6d6ce7d73b
--- /dev/null
+++ b/tutorials/channelOodles/channel395/Allrun
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# Get application directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/RunFunctions
+
+
+
+runApplication blockMesh
+runApplication $application
+runApplication postChannel
+
diff --git a/tutorials/cleanAll b/tutorials/cleanAll
new file mode 100755
index 00000000000..d88c49c5d76
--- /dev/null
+++ b/tutorials/cleanAll
@@ -0,0 +1,67 @@
+#!/bin/sh
+#------------------------------------------------------------------------------
+# =========                 |
+# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+#  \\    /   O peration     |
+#   \\  /    A nd           | Copyright (C) 1991-2007 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 2 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, write to the Free Software Foundation,
+#     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# Script
+#     cleanAll
+#
+# Description
+#       Run either Allclean or default cleanCase in current directory
+#       and all its subdirectories.
+#
+#------------------------------------------------------------------------------
+
+tutorialsDir=$PWD
+while [ ! -f $tutorialsDir/CleanFunctions ]
+do
+    tutorialsDir="$tutorialsDir/.."
+done
+. $tutorialsDir/CleanFunctions
+
+thisScript=$0
+if [ "/${thisScript#/}" != "$thisScript" ]
+then
+    thisScript="$PWD/$thisScript"
+fi
+
+if [ -f "./Allclean" ] 
+then
+    # Specialised script.
+    ./Allclean
+elif [ -d "./system" ]
+then
+    # Normal case. 
+    cleanCase
+else
+    # Recurse to subdirectories
+    for case in *
+    do
+        if [ -d $case ]
+        then
+            (cd $case && $thisScript)
+        fi
+    done
+fi
+
+#------------------------------------------------------------------------------
diff --git a/tutorials/dnsFoam/boxTurb16/Allclean b/tutorials/dnsFoam/boxTurb16/Allclean
new file mode 100755
index 00000000000..a73d9b8d55a
--- /dev/null
+++ b/tutorials/dnsFoam/boxTurb16/Allclean
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/CleanFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/CleanFunctions
+
+
+cleanCase
+rm -rf 0
+cp -r 0.org 0
diff --git a/tutorials/dnsFoam/boxTurb16/Allrun b/tutorials/dnsFoam/boxTurb16/Allrun
new file mode 100755
index 00000000000..c2effc61b73
--- /dev/null
+++ b/tutorials/dnsFoam/boxTurb16/Allrun
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+# Get application directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/RunFunctions
+
+
+runApplication blockMesh
+runApplication boxTurb
+runApplication $application
+runApplication enstrophy
diff --git a/tutorials/engineFoam/kivaTest/Allclean b/tutorials/engineFoam/kivaTest/Allclean
new file mode 100755
index 00000000000..5b26a4fd0bc
--- /dev/null
+++ b/tutorials/engineFoam/kivaTest/Allclean
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/CleanFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/CleanFunctions
+
+
+
+mv ./-180 temp180
+rm -rf 0
+cp system/controlDict.1st system/controlDict
+cleanCase
+mv temp180 ./-180
diff --git a/tutorials/engineFoam/kivaTest/Allrun b/tutorials/engineFoam/kivaTest/Allrun
new file mode 100755
index 00000000000..51935190750
--- /dev/null
+++ b/tutorials/engineFoam/kivaTest/Allrun
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/RunFunctions
+
+
+
+runKivaToFoam ()
+{
+    if [ -f log.kivaToFoam ] ; then
+        echo "kivaToFoam already run on $PWD: remove log file to run"
+    else
+        echo "kivaToFoam: converting kiva file"
+        kivaToFoam -file $1 > log.kivaToFoam 2>&1
+    fi
+}
+
+restartApplication ()
+{
+    if [ -f log-2.$1 ] ; then
+        echo "$1 already run on $PWD: remove log file to run"
+    else
+        echo "Running $1 on $PWD"
+        $1 > log-2.$1 2>&1
+    fi
+}
+
+
+
+runKivaToFoam . $case/otape17
+cp system/controlDict.1st system/controlDict
+runApplication $application
+cp system/controlDict.2nd system/controlDict
+restartApplication $application
diff --git a/tutorials/icoFoam/Allclean b/tutorials/icoFoam/Allclean
index dd254664cdb..5aa80a4f3f1 100755
--- a/tutorials/icoFoam/Allclean
+++ b/tutorials/icoFoam/Allclean
@@ -2,15 +2,24 @@
 
 currDir=`pwd`
 application=`basename $currDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/CleanFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/CleanFunctions
+
+
 keepCases="cavity cavityGrade cavityClipped elbow"
 loseCases="cavityFine cavityHighRe"
 
-tutorialPath=`dirname $0`/..
-. $tutorialPath/CleanFunctions
 
 for case in $keepCases
 do
-    cleanCase $case
+    (cd $case && $tutorialPath/cleanAll)
+
     if [ "$case" = "elbow" ]
     then
         rm -rf $case/fluentInterface
diff --git a/tutorials/icoFoam/Allrun b/tutorials/icoFoam/Allrun
index 8588970cb77..dbadedb88e9 100755
--- a/tutorials/icoFoam/Allrun
+++ b/tutorials/icoFoam/Allrun
@@ -10,19 +10,19 @@ tutorialPath=`dirname $0`/..
 runMapFields ()
 {
     echo "Running mapFields from $1 to $2"
-    mapFields . $1 . $2 > $2/log.mapFields 2>&1
+    mapFields -source $1 -case $2 -sourceTime latestTime > $2/log.mapFields 2>&1
 }
 
 runMapFieldsConsistent ()
 {
     echo "Running mapFields from $1 to $2"
-    mapFields . $1 . $2 -consistent > $2/log.mapFields 2>&1
+    mapFields -source $1 -case $2 -sourceTime latestTime -consistent > $2/log.mapFields 2>&1
 }
 
 runFluentMeshToFoam ()
 {
     echo "fluentMeshToFoam: converting mesh $2"
-    fluentMeshToFoam . $1 $2 > $1/log.fluentMeshToFoam 2>&1
+    fluentMeshToFoam $2 -case $1 > $1/log.fluentMeshToFoam 2>&1
 }
 
 copySolutionDirs ()
@@ -34,7 +34,7 @@ copySolutionDirs ()
 setCavityFine ()
 {
     blockMeshDict="$case/constant/polyMesh/blockMeshDict"
-    controlDict="$case/system/controlDict"        
+    controlDict="$case/system/controlDict"
     sed s/"20 20 1"/"41 41 1"/g $blockMeshDict > temp.$$
     mv temp.$$ $blockMeshDict
     sed \
@@ -44,13 +44,13 @@ setCavityFine ()
     -e s/"\(writeControl[ \t]*\) timeStep;"/"\1 runTime;"/g \
     -e s/"\(writeInterval[ \t]*\) 20;"/"\1 0.1;"/g \
     $controlDict > temp.$$
-    mv temp.$$ $controlDict    
+    mv temp.$$ $controlDict
 }
 
 setCavityHighRe ()
 {
     echo "Setting cavityHighRe to generate a secondary vortex"
-    controlDict="$case/system/controlDict"        
+    controlDict="$case/system/controlDict"
     transportProperties="$case/constant/transportProperties"
     sed \
     -e s/"\(startFrom[ \t]*\) startTime;"/"\1 latestTime;"/g \
@@ -63,27 +63,27 @@ setCavityHighRe ()
 
 for case in $cavityCases
 do
-    if [ "$case" = "cavityFine" ] 
+    if [ "$case" = "cavityFine" ]
     then
-        cloneCase cavity $case 
+        cloneCase cavity $case
         setCavityFine
     fi
 
-    if [ "$case" = "cavityHighRe" ] 
+    if [ "$case" = "cavityHighRe" ]
     then
-        cloneCase cavity $case 
+        cloneCase cavity $case
         setCavityHighRe
         copySolutionDirs $case cavity
     fi
 
-    runApplication blockMesh $case
+    (cd $case && runApplication blockMesh)
 #
-    if [ "$case" = "cavityFine" -o "$case" = "cavityGrade" ] 
+    if [ "$case" = "cavityFine" -o "$case" = "cavityGrade" ]
     then
         runMapFieldsConsistent $previousCase $case
     fi
 
-    if [ "$case" = "cavityClipped" ] 
+    if [ "$case" = "cavityClipped" ]
     then
         cp -r $case/0 $case/0.5
         runMapFields cavity $case
@@ -96,13 +96,13 @@ do
 #
     previousCase="$case"
 #
-    runApplication $application $case
-done 
+    (cd $case && runApplication $application)
+done
 
 # elbow case for testing Fluent-FOAM conversion tools
 
 runFluentMeshToFoam elbow elbow/elbow.msh
-runApplication icoFoam elbow
-runApplication foamMeshToFluent elbow
-runApplication foamDataToFluent elbow
+(cd elbow && runApplication $application)
+(cd elbow && runApplication foamMeshToFluent)
+(cd elbow && runApplication foamDataToFluent)
 
diff --git a/tutorials/interDyMFoam/damBreakWithObstacle/Allrun b/tutorials/interDyMFoam/damBreakWithObstacle/Allrun
new file mode 100755
index 00000000000..a04fee0ed7b
--- /dev/null
+++ b/tutorials/interDyMFoam/damBreakWithObstacle/Allrun
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# Get application directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/RunFunctions
+
+
+runApplication blockMesh
+runApplication setSet -batch createObstacle.setSet
+runApplication subsetMesh c0 -patch walls
+runApplication setFields -latestTime
+runApplication $application
diff --git a/tutorials/interFoam/Allclean b/tutorials/interFoam/Allclean
index 0fb4e14285f..2d4ceec108a 100755
--- a/tutorials/interFoam/Allclean
+++ b/tutorials/interFoam/Allclean
@@ -1,16 +1,26 @@
 #!/bin/sh
 
-currDir=`pwd`
-application=`basename $currDir`
+# Get application name from directory
+application=`basename $PWD`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/CleanFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/CleanFunctions
+
+
+
 keepCases="damBreak"
 loseCases="damBreakFine"
 
-tutorialPath=`dirname $0`/..
-. $tutorialPath/CleanFunctions
 
 for case in $keepCases
 do
-    cleanCase $case
+    (cd $case && $tutorialPath/cleanAll)
+
     if [ "$case" = "damBreak" ] 
     then 
         cp $case/0/gamma.org $case/0/gamma
diff --git a/tutorials/interFoam/Allrun b/tutorials/interFoam/Allrun
index 7241d04e691..6a48764bfeb 100755
--- a/tutorials/interFoam/Allrun
+++ b/tutorials/interFoam/Allrun
@@ -1,16 +1,21 @@
 #!/bin/sh
 
-currDir=`pwd`
-application=`basename $currDir`
-cases="damBreak damBreakFine"
+# Get application name from directory
+application=`basename $PWD`
 
-tutorialPath=`dirname $0`/..
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
 . $tutorialPath/RunFunctions
 
+
 setDamBreakFine ()
 {
-    blockMeshDict="$case/constant/polyMesh/blockMeshDict"
-    controlDict="$case/system/controlDict"        
+    blockMeshDict="constant/polyMesh/blockMeshDict"
+    controlDict="system/controlDict"        
     sed \
     -e s/"23 8"/"46 10"/g \
     -e s/"19 8"/"40 10"/g \
@@ -26,24 +31,23 @@ setDamBreakFine ()
     mv temp.$$ $controlDict    
 }
 
-for case in $cases
-do
-    if [ "$case" = "damBreakFine" ] 
-    then
-        cloneCase damBreak $case
-        setDamBreakFine
-        cp damBreak/0/gamma.org $case/0/gamma
-    fi
-
-    runApplication blockMesh $case
-    runApplication setFields $case
-    if [ "$case" = "damBreakFine" ]
-    then
-        runApplication decomposePar $case
-        hostname > $case/system/machines
-        runParallel $application $case 4 $case/system/machines
-        runApplication reconstructPar $case
-    else
-        runApplication $application $case
-    fi
-done
+
+
+# Do damBreak
+(cd damBreak && $tutorialPath/runAll)
+
+# Clone case
+cloneCase damBreak damBreakFine
+
+cd damBreakFine
+    # Modify case
+    setDamBreakFine
+    cp ../damBreak/0/gamma.org 0/gamma
+    # And execute
+    runApplication blockMesh
+    runApplication setFields
+    runApplication decomposePar
+    hostname > system/machines
+    runParallel $application 4 system/machines
+    runApplication reconstructPar
+cd ..
diff --git a/tutorials/laplacianFoam/flange/Allclean b/tutorials/laplacianFoam/flange/Allclean
new file mode 100755
index 00000000000..798298762a1
--- /dev/null
+++ b/tutorials/laplacianFoam/flange/Allclean
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/CleanFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/CleanFunctions
+
+
+cleanCase
+rm -rf Fieldview > /dev/null 2>&1
+rm -rf EnSight > /dev/null 2>&1
+
diff --git a/tutorials/laplacianFoam/flange/Allrun b/tutorials/laplacianFoam/flange/Allrun
new file mode 100755
index 00000000000..2bb1213785a
--- /dev/null
+++ b/tutorials/laplacianFoam/flange/Allrun
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+# Get application directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/RunFunctions
+
+
+
+runIdeasToFoam ()
+{
+    if [ -f log.ideasToFoam ] ; then
+        echo "ansysToFoam already run on $PWD: remove log file to run"
+    else
+        echo "ansysToFoam: converting mesh $1"
+        ansysToFoam $1 -scale $2 > log.ansysToFoam 2>&1
+    fi
+}
+
+runIdeasToFoam flange.ans 0.001
+runApplication $application
+runApplication foamToFieldview
+runApplication foamToEnsight
diff --git a/tutorials/lesInterFoam/nozzleFlow2D/Allclean b/tutorials/lesInterFoam/nozzleFlow2D/Allclean
new file mode 100755
index 00000000000..26e6f5985fa
--- /dev/null
+++ b/tutorials/lesInterFoam/nozzleFlow2D/Allclean
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/CleanFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/CleanFunctions
+
+
+
+cleanCase
+cp constant/polyMesh/boundary.org constant/polyMesh/boundary
diff --git a/tutorials/lesInterFoam/nozzleFlow2D/Allrun b/tutorials/lesInterFoam/nozzleFlow2D/Allrun
new file mode 100755
index 00000000000..ebeb94443d3
--- /dev/null
+++ b/tutorials/lesInterFoam/nozzleFlow2D/Allrun
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/RunFunctions
+
+
+
+runRefineMesh ()
+{
+    echo "Running refineMesh on $PWD"
+    refineMesh -dict > log.refineMesh 2>&1
+}
+
+runApplication blockMesh
+
+i=1
+if [ -f log.cellSet ] ; then
+   i=3
+fi
+while [ "$i" -lt 3 ] ; do
+    if [ -f log.cellSet ] ; then
+        mv log.cellSet log.cellSet.1
+    fi
+    cp system/cellSetDict.${i} system/cellSetDict
+    runApplication cellSet
+    runRefineMesh
+    cp -r 1e-08/polyMesh/* constant/polyMesh
+    rm -rf 1e-08
+    i=`expr $i + 1`
+done
+cp constant/polyMesh/boundary.org constant/polyMesh/boundary
+
+runApplication $application
diff --git a/tutorials/mdEquilibrationFoam/periodicCube/Allrun b/tutorials/mdEquilibrationFoam/periodicCube/Allrun
new file mode 100755
index 00000000000..5ce9785b9db
--- /dev/null
+++ b/tutorials/mdEquilibrationFoam/periodicCube/Allrun
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/RunFunctions
+
+
+runApplication blockMesh
+runApplication molConfig
+runApplication $application
diff --git a/tutorials/mhdFoam/hartmann/Allclean b/tutorials/mhdFoam/hartmann/Allclean
new file mode 100755
index 00000000000..f38a025731d
--- /dev/null
+++ b/tutorials/mhdFoam/hartmann/Allclean
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/CleanFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/CleanFunctions
+
+
+cleanCase
+cleanSamples
+
diff --git a/tutorials/mhdFoam/hartmann/Allrun b/tutorials/mhdFoam/hartmann/Allrun
new file mode 100755
index 00000000000..2a26afc937b
--- /dev/null
+++ b/tutorials/mhdFoam/hartmann/Allrun
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/RunFunctions
+
+
+
+runApplication blockMesh
+runApplication $application
+runApplication sample
diff --git a/tutorials/oodles/pitzDailyDirectMapped/Allrun b/tutorials/oodles/pitzDailyDirectMapped/Allrun
new file mode 100755
index 00000000000..23d7ad3f33d
--- /dev/null
+++ b/tutorials/oodles/pitzDailyDirectMapped/Allrun
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/RunFunctions
+
+
+runApplication blockMesh
+runApplication changeDictionary
+runApplication $application
diff --git a/tutorials/potentialFoam/Allclean b/tutorials/potentialFoam/Allclean
index f27b164c010..4884a02756c 100755
--- a/tutorials/potentialFoam/Allclean
+++ b/tutorials/potentialFoam/Allclean
@@ -1,23 +1,29 @@
 #!/bin/sh
 
-currDir=`pwd`
-application=`basename $currDir`
-cases="cylinder pitzDaily"
-utility=analyticalCylinder
+# Get application name from directory
+application=`basename $PWD`
 
-tutorialPath=`dirname $0`/..
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/CleanFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
 . $tutorialPath/CleanFunctions
 
-for case in $cases
-do
-    cleanCase $case
-    rm -rf $case/0 > /dev/null 2>&1
-    cp -r $case/0.org $case/0
 
-    if [ "$case" = "cylinder" ] 
-    then
-        wclean $case/$utility
-    fi
-done 
 
 
+cd cylinder
+    cleanCase
+    rm -rf 0 > /dev/null 2>&1
+    cp -r 0.org 0
+    wclean analyticalCylinder
+cd ..
+
+cd pitzDaily
+    cleanCase
+    rm -rf 0 > /dev/null 2>&1
+    cp -r 0.org 0
+cd ..
+
diff --git a/tutorials/potentialFoam/cylinder/Allrun b/tutorials/potentialFoam/cylinder/Allrun
new file mode 100755
index 00000000000..8a5b56e9f74
--- /dev/null
+++ b/tutorials/potentialFoam/cylinder/Allrun
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/RunFunctions
+
+
+runApplication blockMesh
+runApplication $application
+compileApplication analyticalCylinder
+runApplication analyticalCylinder
+runApplication streamFunction
diff --git a/tutorials/potentialFoam/pitzDaily/Allrun b/tutorials/potentialFoam/pitzDaily/Allrun
new file mode 100755
index 00000000000..e3c90d9c8a7
--- /dev/null
+++ b/tutorials/potentialFoam/pitzDaily/Allrun
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath='.'
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="../$tutorialPath"
+done
+. $tutorialPath/RunFunctions
+
+
+runApplication blockMesh
+runApplication $application
+runApplication streamFunction
diff --git a/tutorials/rasInterFoam/Allclean b/tutorials/rasInterFoam/Allclean
index 0fb4e14285f..1927e695d53 100755
--- a/tutorials/rasInterFoam/Allclean
+++ b/tutorials/rasInterFoam/Allclean
@@ -1,16 +1,25 @@
 #!/bin/sh
 
-currDir=`pwd`
-application=`basename $currDir`
-keepCases="damBreak"
-loseCases="damBreakFine"
+# Get application name from directory
+application=`basename $PWD`
 
-tutorialPath=`dirname $0`/..
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/CleanFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
 . $tutorialPath/CleanFunctions
 
+
+
+keepCases="damBreak"
+loseCases="damBreakFine"
+
 for case in $keepCases
 do
-    cleanCase $case
+    (cd $case && $tutorialPath/cleanAll)
+
     if [ "$case" = "damBreak" ] 
     then 
         cp $case/0/gamma.org $case/0/gamma
diff --git a/tutorials/rasInterFoam/Allrun b/tutorials/rasInterFoam/Allrun
index 7241d04e691..e189c4ee951 100755
--- a/tutorials/rasInterFoam/Allrun
+++ b/tutorials/rasInterFoam/Allrun
@@ -1,16 +1,22 @@
 #!/bin/sh
 
-currDir=`pwd`
-application=`basename $currDir`
-cases="damBreak damBreakFine"
+# Get application name from directory
+application=`basename $PWD`
 
-tutorialPath=`dirname $0`/..
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
 . $tutorialPath/RunFunctions
 
+
+
 setDamBreakFine ()
 {
-    blockMeshDict="$case/constant/polyMesh/blockMeshDict"
-    controlDict="$case/system/controlDict"        
+    blockMeshDict="constant/polyMesh/blockMeshDict"
+    controlDict="system/controlDict"        
     sed \
     -e s/"23 8"/"46 10"/g \
     -e s/"19 8"/"40 10"/g \
@@ -26,24 +32,22 @@ setDamBreakFine ()
     mv temp.$$ $controlDict    
 }
 
-for case in $cases
-do
-    if [ "$case" = "damBreakFine" ] 
-    then
-        cloneCase damBreak $case
-        setDamBreakFine
-        cp damBreak/0/gamma.org $case/0/gamma
-    fi
-
-    runApplication blockMesh $case
-    runApplication setFields $case
-    if [ "$case" = "damBreakFine" ]
-    then
-        runApplication decomposePar $case
-        hostname > $case/system/machines
-        runParallel $application $case 4 $case/system/machines
-        runApplication reconstructPar $case
-    else
-        runApplication $application $case
-    fi
-done
+
+# Do damBreak
+(cd damBreak && $tutorialPath/runAll)
+
+# Clone case
+cloneCase damBreak damBreakFine
+
+cd damBreakFine
+    # Modify case
+    setDamBreakFine
+    cp ../damBreak/0/gamma.org 0/gamma
+    # And execute
+    runApplication blockMesh
+    runApplication setFields
+    runApplication decomposePar
+    hostname > system/machines
+    runParallel $application 4 system/machines
+    runApplication reconstructPar
+cd ..
diff --git a/tutorials/rasInterFoam/damBreak/Allrun b/tutorials/rasInterFoam/damBreak/Allrun
new file mode 100755
index 00000000000..a4037c0c449
--- /dev/null
+++ b/tutorials/rasInterFoam/damBreak/Allrun
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/RunFunctions
+
+
+runApplication blockMesh
+runApplication setFields
+runApplication $application
diff --git a/tutorials/rhoSonicFoam/shockTube/Allclean b/tutorials/rhoSonicFoam/shockTube/Allclean
new file mode 100755
index 00000000000..f9a35ccec83
--- /dev/null
+++ b/tutorials/rhoSonicFoam/shockTube/Allclean
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/CleanFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/CleanFunctions
+
+
+
+cleanCase
+rm -rf 0
+cp -r 0.org 0
+cleanSamples
diff --git a/tutorials/rhoSonicFoam/shockTube/Allrun b/tutorials/rhoSonicFoam/shockTube/Allrun
new file mode 100755
index 00000000000..ce36bd5e82c
--- /dev/null
+++ b/tutorials/rhoSonicFoam/shockTube/Allrun
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/RunFunctions
+
+
+
+runApplication blockMesh
+compileApplication setShock
+runApplication setShock
+runApplication $application
+runApplication magU
+runApplication sample
+
diff --git a/tutorials/rhoTurbTwinParcelFoam/Allclean b/tutorials/rhoTurbTwinParcelFoam/Allclean
index ad62b421fba..aa903859fb3 100755
--- a/tutorials/rhoTurbTwinParcelFoam/Allclean
+++ b/tutorials/rhoTurbTwinParcelFoam/Allclean
@@ -1,16 +1,26 @@
 #!/bin/sh
 
-currDir=`pwd`
-application=`basename $currDir`
-cases="simplifiedSiwek"
+# Get application name from directory
+application=`basename $PWD`
 
-tutorialPath=`dirname $0`/..
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/CleanFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
 . $tutorialPath/CleanFunctions
 
-wclean $application
 
-for case in $cases
+
+
+wclean rhoTurbTwinParcelFoam
+
+for case in *
 do
-    cleanCase $case
+    if [ -d $case ]
+    then
+        (cd $case && $tutorialPath/cleanAll)
+    fi
 done
 
diff --git a/tutorials/rhoTurbTwinParcelFoam/simplifiedSiwek/Allrun b/tutorials/rhoTurbTwinParcelFoam/simplifiedSiwek/Allrun
new file mode 100755
index 00000000000..3e93e90da67
--- /dev/null
+++ b/tutorials/rhoTurbTwinParcelFoam/simplifiedSiwek/Allrun
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/RunFunctions
+
+
+
+compileApplication $application
+runApplication blockMesh
+runApplication $application
diff --git a/tutorials/rhopSonicFoam/shockTube/Allclean b/tutorials/rhopSonicFoam/shockTube/Allclean
new file mode 100755
index 00000000000..38b06c9effc
--- /dev/null
+++ b/tutorials/rhopSonicFoam/shockTube/Allclean
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/CleanFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/CleanFunctions
+
+
+
+rm -rf 0
+cp -r 0.org 0
+cleanCase
diff --git a/tutorials/rhopSonicFoam/shockTube/Allrun b/tutorials/rhopSonicFoam/shockTube/Allrun
new file mode 100755
index 00000000000..fd85554d6cd
--- /dev/null
+++ b/tutorials/rhopSonicFoam/shockTube/Allrun
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/RunFunctions
+
+
+
+runApplication blockMesh
+runApplication setFields
+runApplication $application
diff --git a/tutorials/runAll b/tutorials/runAll
new file mode 100755
index 00000000000..8f0ad603442
--- /dev/null
+++ b/tutorials/runAll
@@ -0,0 +1,73 @@
+#!/bin/sh
+#------------------------------------------------------------------------------
+# =========                 |
+# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+#  \\    /   O peration     |
+#   \\  /    A nd           | Copyright (C) 1991-2007 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 2 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, write to the Free Software Foundation,
+#     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# Script
+#     runAll
+#
+# Description
+#       Run either Allrun or blockMesh/application in current directory
+#       and all its subdirectories.
+#
+#------------------------------------------------------------------------------
+
+unset WM_COLOURS
+
+tutorialsDir=$PWD
+while [ ! -f $tutorialsDir/RunFunctions ]
+do
+    tutorialsDir="$tutorialsDir/.."
+done
+. $tutorialsDir/RunFunctions
+
+thisScript=$0
+if [ "/${thisScript#/}" != "$thisScript" ]
+then
+    thisScript="$PWD/$thisScript"
+fi
+
+if [ -f "./Allrun" ] 
+then
+    # Specialised script.
+    ./Allrun
+elif [ -d "./system" ]
+then
+    # Normal case. 
+    parentDir=`dirname $PWD`
+    application=`basename $parentDir`
+    runApplication blockMesh
+    runApplication $application
+else
+    # Recurse to subdirectories
+    for case in *
+    do
+        if [ -d $case ]
+        then
+            #(cd $case && $thisScript)
+            $WM_SCHEDULER "cd $PWD/$case && $thisScript"
+        fi
+    done
+fi
+
+#------------------------------------------------------------------------------
diff --git a/tutorials/settlingFoam/tank3D/Allclean b/tutorials/settlingFoam/tank3D/Allclean
new file mode 100755
index 00000000000..dfabea30d28
--- /dev/null
+++ b/tutorials/settlingFoam/tank3D/Allclean
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/CleanFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/CleanFunctions
+
+
+cleanTimeDirectories
diff --git a/tutorials/settlingFoam/tank3D/Allrun b/tutorials/settlingFoam/tank3D/Allrun
new file mode 100755
index 00000000000..016a846a2c9
--- /dev/null
+++ b/tutorials/settlingFoam/tank3D/Allrun
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/RunFunctions
+
+
+runApplication $application
+
diff --git a/tutorials/simpleSRFFoam/mixer/Allclean b/tutorials/simpleSRFFoam/mixer/Allclean
new file mode 100755
index 00000000000..d7759c2a93d
--- /dev/null
+++ b/tutorials/simpleSRFFoam/mixer/Allclean
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/CleanFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/CleanFunctions
+
+
+cleanCase
+wclean ../simpleSRFFoam
diff --git a/tutorials/simpleSRFFoam/mixer/Allrun b/tutorials/simpleSRFFoam/mixer/Allrun
new file mode 100755
index 00000000000..746283994f1
--- /dev/null
+++ b/tutorials/simpleSRFFoam/mixer/Allrun
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/RunFunctions
+
+
+compileApplication ../simpleSRFFoam
+runApplication blockMesh
+runApplication $application
diff --git a/tutorials/solidDisplacementFoam/plateHole/Allclean b/tutorials/solidDisplacementFoam/plateHole/Allclean
new file mode 100755
index 00000000000..e70bdb2126c
--- /dev/null
+++ b/tutorials/solidDisplacementFoam/plateHole/Allclean
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/CleanFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/CleanFunctions
+
+
+cleanCase
+cleanSamples
diff --git a/tutorials/solidDisplacementFoam/plateHole/Allrun b/tutorials/solidDisplacementFoam/plateHole/Allrun
new file mode 100755
index 00000000000..332f4910967
--- /dev/null
+++ b/tutorials/solidDisplacementFoam/plateHole/Allrun
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/RunFunctions
+
+
+runApplication blockMesh
+runApplication $application
+runApplication sample
diff --git a/tutorials/sonicFoam/shockTube/Allclean b/tutorials/sonicFoam/shockTube/Allclean
new file mode 100755
index 00000000000..f9a35ccec83
--- /dev/null
+++ b/tutorials/sonicFoam/shockTube/Allclean
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/CleanFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/CleanFunctions
+
+
+
+cleanCase
+rm -rf 0
+cp -r 0.org 0
+cleanSamples
diff --git a/tutorials/sonicFoam/shockTube/Allrun b/tutorials/sonicFoam/shockTube/Allrun
new file mode 100755
index 00000000000..ab1cf6caa95
--- /dev/null
+++ b/tutorials/sonicFoam/shockTube/Allrun
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+# Get application name from directory
+parentDir=`dirname $PWD`
+application=`basename $parentDir`
+
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
+. $tutorialPath/RunFunctions
+
+
+runApplication blockMesh
+runApplication setFields
+runApplication $application
+runApplication magU
+runApplication sample
+
diff --git a/tutorials/sonicLiquidFoam/Allclean b/tutorials/sonicLiquidFoam/Allclean
index e7cfa0dd6d1..0be16088f0a 100755
--- a/tutorials/sonicLiquidFoam/Allclean
+++ b/tutorials/sonicLiquidFoam/Allclean
@@ -1,19 +1,24 @@
 #!/bin/sh
 
-currDir=`pwd`
-application=`basename $currDir`
-keepCases="decompressionTank"
-loseCases="decompressionTankFine"
+# Get application name from directory
+application=`basename $PWD`
 
-tutorialPath=`dirname $0`/..
-. $tutorialPath/CleanFunctions
-
-for case in $keepCases
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/CleanFunctions ]
 do
-    cleanCase $case
+    tutorialPath="$tutorialPath/.."
 done
+. $tutorialPath/CleanFunctions
+
+
+
+removeCase decompressionTankFine
 
-for case in $loseCases
+for case in *
 do
-    removeCase $case
+    if [ -d $case ]
+    then
+        (cd $case && $tutorialsDir/cleanAll)
+    fi
 done
diff --git a/tutorials/sonicLiquidFoam/Allrun b/tutorials/sonicLiquidFoam/Allrun
index 69c414f2676..949590a0f84 100755
--- a/tutorials/sonicLiquidFoam/Allrun
+++ b/tutorials/sonicLiquidFoam/Allrun
@@ -1,12 +1,18 @@
 #!/bin/sh
 
-currDir=`pwd`
-application=`basename $currDir`
-cases="decompressionTank decompressionTankFine"
+# Get application name from directory
+application=`basename $PWD`
 
-tutorialPath=`dirname $0`/..
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
 . $tutorialPath/RunFunctions
 
+
+
 setDecompressionTankFine ()
 {
     blockMeshDict="$case/constant/polyMesh/blockMeshDict"
@@ -25,14 +31,16 @@ setDecompressionTankFine ()
     mv temp.$$ $controlDict    
 }
 
-for case in $cases
-do
-    if [ "$case" = "decompressionTankFine" ] 
-    then
-        cloneCase decompressionTank $case
-        setDecompressionTankFine
-    fi
-#
-    runApplication blockMesh $case
-    runApplication $application $case
-done 
+# Do decompressionTank
+(cd decompressionTank && $tutorialPath/runAll)
+
+# Clone case
+cloneCase decompressionTank decompressionTankFine
+
+cd decompressionTankFine
+    # Modify case
+    setDecompressionTankFine
+    # And execute
+    runApplication blockMesh
+    runApplication $application
+cd ..
diff --git a/tutorials/sonicTurbFoam/Allrun b/tutorials/sonicTurbFoam/Allrun
index ac75c53afe2..8926a4812df 100755
--- a/tutorials/sonicTurbFoam/Allrun
+++ b/tutorials/sonicTurbFoam/Allrun
@@ -1,33 +1,38 @@
 #!/bin/sh
 
-currDir=`pwd`
-application=`basename $currDir`
-cases="prism nacaAirfoil"
+# Get application name from directory
+application=`basename $PWD`
 
-tutorialPath=`dirname $0`/..
+# Find and source additional functions
+tutorialPath=$PWD
+while [ ! -f $tutorialPath/RunFunctions ]
+do
+    tutorialPath="$tutorialPath/.."
+done
 . $tutorialPath/RunFunctions
 
+
 runStarToFoam ()
 {
-    if [ -f $1/log.starToFoam ] ; then
-        echo "starToFoam already run on $1: remove log file to run"
+    if [ -f log.starToFoam ] ; then
+        echo "starToFoam already run on $PWD: remove log file to run"
     else
-        echo "starToFoam: converting mesh $2"
-        starToFoam . $1 $2 > $1/log.starToFoam 2>&1
+        echo "starToFoam: converting mesh $1"
+        starToFoam $1 > log.starToFoam 2>&1
     fi
 }
 
-for case in $cases
-do
-    if [ "$case" = "nacaAirfoil" ] ; then
-        runStarToFoam $case ${case}/prostar/${case}
-        mv ${case}/constant/polyMesh/boundary temp
-        sed -e s/"\([\t ]*type[\t ]*\)symmetryPlane"/"\1empty"/g \
-            temp > ${case}/constant/polyMesh/boundary
-        rm temp
-    else
-        runApplication blockMesh $case
-    fi
-    runApplication $application $case
-#    runApplication Mach $case
-done 
+
+
+# Do prism
+(cd prism && $tutorialPath/runAll)
+
+# Special handling for nacaAirFoil
+cd nacaAirFoil
+    runStarToFoam prostar/nacaAirFoil
+    mv constant/polyMesh/boundary temp
+    sed -e s/"\([\t ]*type[\t ]*\)symmetryPlane"/"\1empty"/g \
+        temp > constant/polyMesh/boundary
+    rm temp
+    runApplication $application
+cd ..
-- 
GitLab