Files
OpenFOAM-12/tutorials/fluid/externalCoupledCavity/externalSolver
Will Bainbridge 303e3d1f60 tutorials: Consistency of All* scripts
Various minor changes to tutorial scripts. In particular, ensuring that
they all change to the containing directory so that batches of tutorials
can be run easily from the root of the installation.
2024-06-28 14:31:05 +01:00

86 lines
1.8 KiB
Bash
Executable File

#!/bin/sh
#
# Dummy external solver to communicate with OpenFOAM via externalCoupled
# boundary conditions
#
# Functionality is hard-coded for this particular test case
# - patch temperatures increased by 1K on each step
#
cd ${0%/*} || exit 1 # Run from this directory
echo "Executing dummy external solver"
commsDir="comms"
lockFile="${commsDir}/OpenFOAM.lock"
dataFile="${commsDir}/data"
waitSec=1
timeOut=10
refGrad=0
valueFraction=1
log()
{
echo "External: $@"
}
init()
{
log "initialisation: creating ${dataFile}.in"
# Hard-coded for 2 patches of size 2250
n=2250
refCold=283
refHot=303
touch "${dataFile}.in"
for i in $(seq 1 $n); do
echo "$refHot $refGrad $valueFraction" >> "${dataFile}.in"
done
for i in $(seq 1 $n); do
echo "$refCold $refGrad $valueFraction" >> "${dataFile}.in"
done
# create lock file to pass control to OF
touch ${lockFile}
}
# tutorial case employs the 'initByExternalOption', so we need to provide
# the initial values
init
totalWait=0
step=0
while [ 1 ]; do
if [ -f $lockFile ]; then
log "found lock file ${lockFile} - waiting"
totalWait=$(expr $totalWait + $waitSec)
if [ $totalWait -gt $timeOut ]; then
log "timeout"
break
else
sleep $waitSec
fi
else
totalWait=0
step=$(expr $step + 1)
log "step $step"
log "lock not present - taking control"
log "sleeping for $waitSec secs to simulate external process"
sleep $waitSec
log "creating ${dataFile}.in"
awk '{if( $1 != "#" ){print $2+1 " 0 1"}}' ${dataFile}.out > ${dataFile}.in
log "creating lock file ${lockFile}"
touch ${lockFile}
fi
done
log "done"
#------------------------------------------------------------------------------