A listing of a fully functioning sample Fasttalk file of the type described in §5.1 follows. Note that the notation is that of the earlier works for which it was used (McBain 1997a; McBain & Harris 1998), rather than that of this thesis.
%humid.tal.prob
P Sc 0.61
P Le0 Sc/0.71
P GrSTAR 1000.0/(Sc/Le0)
P N 0.5
P B -0.5
P I 0.5
%
P LeA (B*Le0)/(B-(I*Le0))
P lnBp1 log(B+1.0)
P Lambda lnBp1/LeA
%
P Pen 5e2
P rvtol 1e-3
P rvtol2 5e-4
P rdiltol 1e-3
P Relx 0.5
%
F . ffFlib/cavbtag
%
A momentum
%
e D_i {-Pen} D_j U1_j + D_i {v201} - D_j D_j U1_i +\
{v100*GrSTAR}_j D_j U1_i = {0.0, (1/(1.0+N))}_i U2 +\
{0.0, (N/(1.0+N))}_i U3
e D_j D_j U2 + {v300 * I}_j D_j U2 =\
{GrSTAR * Sc * ((I*v104)+(1.0/Le0)) * v100}_j D_j U2
e D_j D_j U3 =\
{GrSTAR * Sc * v100}_j D_j U3
e v300 = [grad] {v104}
b floor U1 = {0.0, 0.0}
b rightwall U1 = {rightblow * v301, rightblow * v302}
b ceiling U1 = {0.0, 0.0}
b leftwall U1 = {leftblow * v301, leftblow * v302}
b rightwall U2 = {1.0}
b leftwall U2 = {0.0}
b rightwall U3 = {1.0}
b leftwall U3 = {0.0}
%
A [reduced] dilatation
e U1 = {1.0} D_j {v100}_j
%
F . ffFlib/myutes
%
A fickfluxp
e U1_i = {-1.0} D_i {v104}
%
A advvapflux
e v000={GrSTAR*Sc*v101*v104,GrSTAR*Sc*v102*v104}
%
A mflux
% bulk advective flux
e v500={GrSTAR*Sc*v101*v104,GrSTAR*Sc*v102*v104}
% Fickian diffusion flux
e v600=grad{-v104}
% total flux w.r.t. stationary coordinates
e v000={v500+v600}
%
< momloop
mtitno = 1
while rmaxchange>rvtol | mtitno<3
show mtitno
momentum
solv
v500=v200
if ((mtitno*bigitno)<2)
v200 = v100
endif
if ((mtitno*bigitno)>1)
v200 = (Relx*v100) + ((1.0-Relx)*v500)
endif
popp
clea
arro
cont 103
cont 104
v500 = v100 - v400
v500 = abs v500
v600 = abs v100
v601 = max v601
v602 = max v602
v603 = max v603
v604 = max v604
v500 = v500/v600
rmaxchange = max v500
show rmaxchange
mtitno = mtitno + 1
endwhile
>
< run
clock
prim
paras
leftblow = B/(GrSTAR*Sc)
rightblow = leftblow/(B+1.0)
bigitno = 1
RelMaxDil=rdiltol+1
keeplooping=1
while keeplooping
show bigitno
momloop
rvtol=rvtol2
dilatation
solv
expand 1
v301 = v301 - (Pen * v101)
cont 301
v101=abs v101
MaxDil = max v101
show MaxDil
popp
oldrmd=RelMaxDil
uscal = max v601
vscal = max v602
uscal = uscal M vscal
RelMaxDil = MaxDil/uscal
show RelMaxDil
if RelMaxDil<rdiltol
keeplooping=0
endif
if RelMaxDil>rdiltol & RelMaxDil<oldrmd
keeplooping=1
endif
if RelMaxDil>oldrmd & bigitno>1
!#Divergence diverging!
keeplooping=keeplooping-0.2
endif
bigitno = bigitno + 1
endwhile
clock
name 100 velocity
name 103 temperature
name 104 mass fraction
name 201 pressure
>
< hhmark
!marknodes 2 1.0 # the second argument should be A/2
>
< eflux
% conduction flux
nostack
gradient 300 101 v103
solv 300
nostack -1
v300=-v300
name 301 conduction
name 302 conduction
% bulk advection flux
v401=GrSTAR*Sc*(I*v104 + (1.0/Le0))*v101*v103
v402=GrSTAR*Sc*(I*v104 + (1.0/Le0))*v102*v103
name 401 advection flux
name 402 advection flux
% interdiffusion flux
nostack
gradient 500 101 v104
solv 500
nostack -1
v501=-I*v501*v103
v502=-I*v502*v103
name 501 interdiffusion
name 502 interdiffusion
% total energy flux
v600 = v300 + v400 + v500
name 601 energy flux
name 602 energy flux
>
< heatlines
eflux
total_int 101 101 v601
ANubar=-Out
show ANubar
lscalint 101 101 v601
ANu0=-Out
Nuinfty=Lambda/(exp(Lambda)-1)
show ANu0
show Lambda
show Nuinfty
heatf 101 100 v600
solv
cont 101
popp
>
< b4c4
hhmark
mark 0
mark 102
show B
show Sc
show LeA
show N
>
< afterc4
push
push
limits -0.05 0.05
% calculate comparison with fully developed solution
% horizontal component of velocity, normalised by max u
uinf = lnBp1/(GrSTAR*Sc)
v101 = uinf
name 101 uinf
v201 = v301 - v101
umin = min v301
umax = max v301
umin = abs umin
uscal = umin M umax
v201 = v201/uscal
name 201 udefectnrmd
% temperature, not normalised (no need)
v103 = ((B+1.0)^(X1/LeA)-1.0)/((B+1.0)^(1.0/LeA)-1.0)
name 103 thetainf
v203 = v303 - v103
name 203 tdefect
% mass fraction, not normalised (no need)
v104 = ((B+1.0)^X1 - 1.0)/B
name 104 phiinf
v204 = v304 - v104
name 204 mdefect
% vertical component of velocity, normalised by max vinf
c1 = LeA*LeA/(Sc-LeA)/lnBp1/lnBp1
c2 = N/(Sc-1.0)/lnBp1/lnBp1
c3 = (((LeA+N)/lnBp1) + c4 * (N+1.0))/lnBp1
v102 = ((B+1.0)^(X1/Sc)-1.0)/((B+1.0)^(1.0/Sc)-1.0)
name 102 sigma
v102 = Sc*(c1*(v102-v103) + c2*(v102-v104) +\
c3*(v102-X1))/(N+1.0)
name 102 vinf
vscal = max v102
v202 = v302 - v102
v202 = v202/vscal
name 202 vdefectnrmd
% vertical pressure gradient, normalised by dpdyinf
phibar = 1.0/lnBp1 - 1.0/B
thetabar = LeA/lnBp1 - 1.0/((B+1.0)^(1/LeA)-1.0)
denpertbar = (thetabar + N * phibar)/(1.0 + N)
nostack
gradient 501 101 v401
solv 501
nostack -1
name 501 pressure gradient
name 502 pressure gradient
dpdyinf = denpertbar + c4
v504 = v502 - dpdyinf
v504 = v504/dpdyinf
name 504 dpdydefectnrmd
hhmark
mark 0
mark 201
mark 202
mark 203
mark 204
mark 504
>
< paras
!#Problem Parameters:
show GrSTAR*Sc/Le0
show Sc/Le0
show Sc
show B
show I
show N
!#Solution Method Parameters:
show Pen
show Relx
show rvtol
show rvtol2
show rdiltol
>
< reading
open #1 r A5/a516sq._0.5.s.out
read #1
clos #1
v100=v100
open #2 r A5/a516sq._0.5.p.out
read #2
clos #2
v201=v201
>
The file inclusion commands, beginning with an F, include the contents
of the files ffFlib/cavbtag:
D 1 floor D 2 rightwall D 3 ceiling D 4 leftwalland
ffFlib/myutes:
A total_int
e [integrated] {v101}
%
A fscalint
b floor [integrated] {v101}
A rscalint
b rightwall [integrated] {v101}
A cscalint
b ceiling [integrated] {v101}
A lscalint
b leftwall [integrated] {v101}
%
A strf
e v101 = [curlv] {-v100}
e D_j D_j U1 = {v101}
b floor U1 = {0.0}
%
A heatf
e v101 = [curlv] {-v100}
e D_j D_j U1 = {v101}
b floor U1 = {0.0}
b ceiling U1 = {-ANubar}
A gradient
e U1_i = {1.0} D_i {v101}
%
The Fasttalk file calls a Bourne shell script,
marknodes, which is listed below.
# marknodes coord_number coord_value:
# creates a mark.dat file from a mesh.dat
# Use coord_number = 1 for x, 2 for y
# Do not use on mesh.dat files invoking
# the triangular mesh generator
awk '
NF == 2 && $c == v { print }
' c=$1 v=$2 mesh.dat >mark.dat