File: externalSolver

package info (click to toggle)
openfoam 4.1%2Bdfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 163,028 kB
  • ctags: 58,990
  • sloc: cpp: 830,760; sh: 10,227; ansic: 8,215; xml: 745; lex: 437; awk: 194; sed: 91; makefile: 77; python: 18
file content (85 lines) | stat: -rwxr-xr-x 1,871 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/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"


#------------------------------------------------------------------------------