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