TALK=T;RUN( 1, 1)
************************************************************
Group 1
************************************************************
save1begin
Notes of experiences, by dbs:
1. The inadvertent erasure of the following line
> DOM, SIZE, :domlong:,:domwide: , :domhigh:
caused the floor object to be ignored, and unexpected objects
to appear.
I recommend that satellte should print a clear warning message
reporting why it is ignoring objects which are represented
correctly in the Q1 file.
2. The pipe VR object, de-activated below led to convergence
difficulties, even without the presence of the wall and the
release. Its size was such that, with the grid prescribed, it
created y-direction lines of four adjacent cut cells.
It has therefore been replaced by two in-form LINE object, to
leave space for the release object between their ends.
3. However, it emerged that the line object, at least as
implemented, did not stretch across the domain. An ellipsoid
object will be tried instead.
4. An old 'quick fix' in e2eaio.for switched off conwiz (i.e.
lsg57) when in-form objects were present. I have deactivated
this, because conwiz-related features, such as the control of
dvdp's, are need to procude convergence.
Without them very large (~1.e9) dvdps were found for v1 and w1
near the wall.
Whether the VR-pipe convergence difficulties would disappear
with conwiz=t has not been investigated.
DISPLAY
This parameterised relational Q1 was created by dbs in Nov. 2008
It represents the release of gas from a hole in a pipeline.
Of interest is what influence a nearby wall has on the spread of
gas into the atmosphere.
__________________ north boundary ________________
Ý Ý Ý
Ý Ý Ý
Ý< indist >< walldist >Ý< outdist >Ý
Ý Ý Ý
Ý * Ý Ý
Ý Ý Ý
Ý_________________ south boundary _______________Ý_
west (inlet) release wall east (outlet)
------)--------
- ) wind angle
-
-
The effect of non-zero wind angle can be represented in two ways,
namely:
(1) grid turns with wind, and
(2) flow occurs through north, south, east and west boundaries.
In the latter case,in order to avoid switching from inlet to
outlet type, but also for physical realism, it is best to fix
velocities rather than mass flows, and to make the top boundary
an open constant-pressure one. This may just as well be done for
method (1) also.
However, Method (2) is the only one represented below.
ENDDIS
!-------------------------------- declarations
! primary parameters, real
real(wallhigh,wallthck,walldist,indist,outdist)
real(domhigh,domwide)
real(pipezpos,relhigh,floorco)
real(pipediam,reldiam,relangl,gaspr)
real(windvel,windangl) ! wind parameters
! secondary parameters
real(domlong,molwt,scale)
real(uwind,vwind) ! horizontal wind components
real(xlen,xtot)
real(xp,yp,zp,xs,ys,zs,al,be,ga)
real(xpw,ypw,zpw,xsw,ysw,zsw) ! wall parameters for use in BOUND
real(rad)
real(valu)
! primary parameters, integer
integer(nxgrid,nygrid,nzgrid)
! secondary parameters
integer(nrx,ixwal1,ixwal2)
integer(intger)
integer(secno)
integer(nrz)
integer(io) ! index of in-form objects
integer(iii)
! primary parameters, character
char(gas) ! what gas is released
char(tmodel,profl) ! turbulence model; wind profile
! secondary parameters
char(uprofl,vprofl,gasden,gasvel,gasflo)
char(item,ch)
! primary parameters, boolean
boolean(pipe,wal,releas,diagnos,uniform,restart)
! secondary parameters
boolean(bool,subwal)
!----------------------------------------- settings
! reals
! geometrical settings
wallhigh=2.5 ! used as a general length-scale parameter
scale=wallhigh ! by means of this setting of scale
wallthck=0.2*scale ! which therefore influence all the rest
domhigh=3.5*scale
domwide= 12*scale
pipezpos=0.4*scale
indist= 2.5*scale
walldist=7.5*scale
outdist =14*scale
reldiam=2.0*0.0254 ! release diameter specified in inches
relhigh= 0.4*scale
relangl= 90 *3.14159/180 ! release angle; 0 = +ve x direction
relangl= 0. *3.14159/180 ! release angle; 0 = +ve x direction
! 90 = +ve z direction
floorco=0.01
floorco=0.005
pipediam=0.16*scale
windvel = 2
windangl=-45 ! wind from south-west
windangl=45 ! wind from north-west
windangl= 0 ! wind from west
windangl=180 ! wind from east
windangl=-90 ! wind from south
windangl= 90 ! wind from north
! integers, defining the grid
nxgrid=50
nxgrid=5
nygrid=30
nygrid=1
nzgrid=35
nzgrid=5
! characters
gas=h2s ! hydrogen sulphide
gas=propane ! other possibilities are methane, ethane and propane
gaspr = 1.e5 ! i.e. one atmosphere
gaspr = .0
gaspr
profl=(zg/:zwlast:)^(1./7.) ! one-seventh power law
profl=1.0 ! uniform velocity
tmodel=lvel
tmodel=ke
! booleans
! these logicals enable features of the simulation to be
! switched on or off, which permits their individual
! influences to be studied
releas=t
releas=f
wal=t
wal=f
pipe=t
pipe=f
diagnos=f
uniform=f
restart=f
restart=t
! ----------------------- end of settings -----------------
! ------- Interactive inputs Part 1 Information ------------
label input ! print to screen and satlog.txt
mesgm(
mesga(Summary of parameters which can be changed interactively
mesg(1. geometry settings in meters:
mesg(wall height=:wallhigh: ;wall thick=:wallthck:
mesg(domwide=:domwide:; domhigh=:domhigh:
mesg(indist=:indist:, walldist=:walldist:;
domlong =indist+walldist+outdist
mesg(dist. from wall to east=:outdist:; so domlong=:domlong:
mesga(2. wind parameters
mesg(windvel=:windvel:; angle=:windangl:; profile=:profl:
mesga(3. logicals
mesg(releas=:releas:;restart=:restart:; wall =:wal:; pipe=:pipe:
mesg(uniform=:uniform:; diagnos=:diagnos:
mesga(4. release parameters
mesg(gas=:gas:; excess pressure in atm,=:gaspr:
mesg(relhigh=:relhigh:; relangl=:relangl:; reldiam=:reldiam:
mesg(pipediam=:pipediam:; pipezpos=:pipezpos:
mesga(5. grid parameters
mesg(nxgrid=:nxgrid:; nygrid=:nygrid:; nzgrid=:nzgrid:
! -------- Interactive inputs Part 2 Question and answer --------
mesgm(Are above settings OK?. If not enter section number to change
readvdu(secno,int,0)
if(secno.eq.0) then ! section number 0
goto continue
else
if(secno.eq.1) then ! section number 1
! Note that the messages in these sections are copies of those
! which have appeared above. The repetition could be avoided by
! use of the PIL 'array' feature.
mesg(1. geometry settings in meters:
mesg(wall height=:wallhigh: ;wall thick=:wallthck:
mesg(domwide=:domwide:; domhigh=:domhigh:
mesg(dist. of release from west, to wall=:indist:, walldist
mesg(dist. from wall to east=:outdist:; so domlong=:domlong:
valu=wallhigh ;item='wallhigh'
CALL CHREAL
valu=wallthck; item='wallthck'
CALL CHREAL
valu=domwide ; item='domwide'
CALL CHREAL
valu=domhigh ; item='domhigh'
CALL CHREAL
valu=indist; item='indist'
CALL CHREAL
valu=walldist; item='walldist'
CALL CHREAL
valu=outdist ; item='outdist'
CALL CHREAL
endif
if(secno.eq.2) then ! section number 2
mesga(2. wind parameters
mesg(speed=:windvel:; angle=:windangl:; profile=:profl:
valu=windvel ; item='windvel'
CALL CHREAL
valu=windangl; item='windangl'
CALL CHREAL
ch=profl ;item='profl'
CALL CHCHAR
endif
if(secno.eq.3) then ! section number 3
mesga(3. logicals
mesg(releas=:releas:; restart=:restart:; wall =:wal:; pipe=:pipe:
mesg(uniform=:uniform:; dignos=:diagnos
bool=restart; item='restart'
CALL CHBOOL
bool=wal; item='wal'
CALL CHBOOL
bool=pipe; item='pipe'
CALL CHBOOL
bool=uniform; item='uniform'
CALL CHBOOL
bool=diagnos; item='diagnos'
CALL CHBOOL
endif
if(secno.eq.4) then ! section number 4
mesga(4. release parameters
mesg(gas=:gas:; excess pressure in atm,=:gaspr:
mesg(relhigh=:relhigh:; relangl=:relangl:; reldiam=:reldiam:
mesg(pipediam=:pipediam:; pipezpos=:pipezpos:
ch=:gas: ; item='gas'
CALL CHCHAR
valu=relhigh ; item='relhigh'
CALL CHREAL
valu=relangl ; item='relangl'
CALL CHREAL
valu=reldiam ; item='reldiam'
CALL CHREAL
valu=pipediam ; item='pipediam'
CALL CHREAL
valu=pipezpos ; item='pipezpos'
CALL CHREAL
endif
if(secno.eq.5) then ! section number 5
endif
mesga(5. grid parameters
mesg(nxgrid=:nxgrid:; nygrid=:nygrid:; nzgrid=:nzgrid:
mesg(uniform=:uniform:
intger=nxgrid; item='nxgrid'
CALL CHINT
mesg(uniform=:uniform:
intger=nygrid; item='nygrid'
CALL CHINT
mesg(uniform=:uniform:
intger=nzgrid; item='nzgrid'
CALL CHINT
endif
label continue ! end of interactive sections
! --------------- Interactive inputs End --------
!-------------- consequential settings -------------------
mesgm(consequences of settings
!----------------------- consequences GROUP 1 ------------
molwt=28.9 ! i.e. that of air, the default gas
if(:gas:.eq.h2s) then
molwt=34.08
endif
if(:gas:.eq.methane) then
molwt=16
endif
if(:gas:.eq.ethane) then
molwt=30
endif
if(:gas:.eq.propane) then
molwt=44
endif
mesg(gas=:gas:; molwt=:molwt:
domlong =indist+walldist+outdist ! the implied domain length
windangl=windangl*3.14159/180 ! convert angle to radians
uwind=windvel*cos(windangl) ! deduce x- & y-direction
vwind=-windvel*sin(windangl) ! wind components
uprofl=:uwind:*:profl:
vprofl=:vwind:*:profl:
if(releas) then
gasden=1.189*molwt/28.9 ! air density * molecular-weight ratio
gasvel = (2*:gaspr:/:gasden:)^.5 ! an approximation
gasflo = :gasvel:*:gasden:*:relDIAM:^2*3.14159/4 ! vel*den*area
else
gasvel=0.0
gasflo=0.0
endif
gasvel ! print to satlog for checking
gasflo
TEXT(gas-release with wind angle = :windangl:
libref=162
save1end
!---------------- consequences for further groups ---------
************************************************************
Group 2. Transience
save2begin
STEADY = T
save2end
************************************************************
********************* non-uniform-grid settings **********
Group 3
save3begin
(a name="unigrid">
if(uniform) then ! activate the following if uniform grid is ! chosen
nx=nxgrid
ny=nygrid
nz=nzgrid
xulast=domlong
yvlast=domwide
zwlast=domhigh
#unigrid
mesg(go to next
goto next ! skip the next settings if grid is uniform
endif
(a name="finegrid">
********************* x grid *****************************
ixwal1=0
mesgm(grid information
nregx=5 ! 5 regions, of length 1. indist-pipediam
2. 6.*pipediam
3. walldist- 5.pipediam-wallthck
4. 3.*wallthck
5. outdist-2.&wallthck
xlen=indist-pipediam
xtot=xlen
nrx=nxgrid/10
ixwal1=ixwal1+nrx
iregx=1;grdpwr(x,-nrx,-xlen,-1.15) ! from west to release
mesg(west to release; iregx=:iregx: nrx=:nrx: xlen=:xlen:
xlen=6.*pipediam
xtot=xtot+xlen
nrx=nxgrid/5
ixwal1=ixwal1+nrx
iregx=2;grdpwr(x,nrx,-xlen,1.0) ! vicinity of release
mesg(around release; iregx=:iregx: nrx=:nrx: xlen=:xlen:
xlen=walldist-wallthck-5.*pipediam
xtot=xtot+xlen
nrx=nxgrid/5
ixwal1=ixwal1+nrx
iregx=3;grdpwr(x,-nrx,-xlen,1.15) ! from release to wall
mesg(release to wall; iregx=:iregx: nrx=:nrx: xlen=:xlen:
xlen=6.0*wallthck
xtot=xtot+xlen
nrx=nxgrid/10
ixwal2=ixwal1+nrx
iregx=4;grdpwr(x,nrx,-xlen,1.0) ! vicinity of wall
mesg(around wall; iregx=:iregx: nrx=:nrx: xlen=:xlen:
xlen=outdist-4.*wallthck
xtot=xtot+xlen
mesg(total length is :xtot:)
nrx=2*nxgrid/5
iregx=5;grdpwr(x,nrx,-xlen,1.05) ! from wall to east
mesg(wall to east; iregx=:iregx: nrx=:nrx: xlen=:xlen:
Group 4
*************************** y grid *********************
char(form)
form=-nygrid,-domwide,0.9
form=-nygrid,-domwide,1.0
grdpwr(y,:form:)
Group 5
*************************** z grid *********************
nregz=2
xlen=domhigh/2
nrz=5*nzgrid/7
iregz=1;grdpwr(z,nrz,-xlen,1.0)
nrz=2*nzgrid/7
iregz=2;grdpwr(z,nrz,-xlen,1.1)
nogrid=t ! setting needed to tell the Satellite not to modify
! the just-specified grid in any way.
label next ! end of grid settings
view(k,1) ! display grid (not yet active)
save3end
************************************************************
Group 7. Variables: STOREd,SOLVEd,NAMEd
************************************************************
Echo InForm settings for Group 7
save7begin
store (p1,u1,v1,w1,prps,vabs)
solutn (u1, y, y, y, n, n, y )
varmax(u1) = 1.0 ;varmin(u1) =-1.0e+11
output(u1,y,n,y,y,y,y)
solutn (v1, y, y, y, n, n, y )
varmax(v1) = 1.0 ;varmin(v1) =-1.0e+11
output(v1,y,n,y,y,y,y)
solutn (w1, y, y, y, n, n, y )
varmax(w1) = 1.0 ;varmin(w1) =-1.0e+11
output(w1,y,n,y,y,y,y)
solutn (p1, y, y, y, n, n, y )
output(p1,y,n,y,y,y,y)
if(releas) then
store (gas)
store (g.25)
solutn (gas, y, y, y, n, n, y )
output(gas,y,n,y,y,y,y)
varmin(gas)=0.0
(stored var g.25 is gas^0.25) ! g.25, i.e. the fourth root of gas,
! is computed because it is more
! visible than gas when contours are
! plotted in the viewer or photon
output(g.25,y,n,y,y,y,y)
endif
store (mark,epor,enut,den1)
if(diagnos) then ! quantities assisting diagnosis
store (imb1,pcor,v1sl,v1ad) ! if needed
fiinit(du1p)=0
fiinit(dv1p)=0
fiinit(dw1p)=0
relax(du1p,linrlx,0.1)
relax(dv1p,linrlx,0.1)
relax(dw1p,linrlx,0.1)
varmax(du1p)=100
varmax(dv1p)=100
varmax(dw1p)=100
endif
save7end
************************************************************
Group 8. Terms & Devices
************************************************************
Group 9. Properties
************************************************************
Echo InForm settings for Group 9
save9begin
! properties are taken as those of air at 20 degK, except that
! density increases with mass fraction of gas in proportion to
! the molecular-weight difference
if(releas) then
(property den1 is 1.189*(1.+gas*(molwt/28.9-1.)))
else
(property den1 is 1.189)
endif
(property enul is 1.544e-5)
if(:tmodel:.eq.lvel) then
turmod(lvel)
liter(ltls) = 1000; endit(ltls) = 0.0
output(wdis.y,n,n,n,n,n)
endif
if(:tmodel:.eq.ke) then
turmod(kemodl)
solutn (ke, y, y, y, n, n, y )
solutn (ep, y, y, y, n, n, y )
output (ke, y, n,y, y, y, y)
output (ep, y, n,y, y, y, y)
varmin(ke)=0.005*windvel**2
varmin(ep)=10.*varmin(ke)**1.5
endif
save9end
************************************************************
Group 10.Inter-Phase Transfer Processes
************************************************************
Group 11.Initialise Var/Porosity Fields
************************************************************
Echo InForm settings for Group 11
save11Begin
patch(whole,cell,1,nx,1,ny,1,nz,1,lstep)
(initial of u1 at whole is :uprofl:)
mesgm(u and v initial profiles
(initial of v1 at whole is :vprofl:)
if(releas) then
(initial of gas at whole is 0.0)
endif
if(restart) then
restrt(all)
endif
save11end
************************************************************
Group 13. Boundary & Special Sources
************************************************************
Echo InForm settings for Group 13
save13begin
************************ patches *********************************
patch(zerov,cell,1,nx,1,ny,1,nz,1,1) ! a patch used during
! testing
coval(zerov,v1,1.e6,0.0)
do ixx=1,nx
+ patch(zerow:ixx:,cell,:ixx:,:ixx:,1,ny,1,nz,1,1)
! used during testing
+ coval(zerow:ixx:,w1,1.e9,0.0)
enddo
if(releas) then
patch(gravity,phasem,1,nx,1,ny,1,nz,1,lstep) ! when density varies
(source of w1 at gravity is coval(fixflu,-9.81*(den1-1.189)))
endif
patch(ceiling,high,1,nx,1,ny,nz,nz,1,1) ! fixed u and v at ceilinq
coval(ceiling,p1,fixp,0.0)
(source of u1 at ceiling is coval(fixval,:uprofl:))
(source of v1 at ceiling is coval(fixval,:vprofl:))
(source of gas at ceiling is coval(fixval,0.0))
patch(ceiling2,high,1,nx,1,ny,nz-1,nz-1,1,1) ! some in and outflow
(source of w1 at ceiling2 is coval(1.e3,0.0)) ! alllowed by ceiling2
(source of gas at ceiling2 is coval(fixval,0.0))
patch(floor,low,1,nx,1,ny,1,1,1,1) ! a rough surface, with friction
! factor floorco
(source of u1 at floor is coval(den1*vabs*floorco,0.0))
(source of v1 at floor is coval(den1*vabs*floorco,0.0))
********************** In-Form objects **************************
! the use of In-Form objects
! note that infob_1, infob_2, infob_3 must appear in numerical
! order.
! otherwise unexpected things happen to solution and print-out
! The use of io, and io=io+1 for each activated object, allows
! this. Note however that this use if io as a variable which can
! appear on both side of the = sign means that it is not a PIL
! variable in the sense understood by PRELUDE.
!---------------------------------------------------------------
io=0
io=io+1 ! in-form object 1
patch(infob:io:,west,1,1,1,ny,1,nz,1,1) ! infob_:io:, the west
! boundary
xp=0
yp=0
zp=0
xs=domlong * xfrac(1) ! to make the box one cell thick
ys=domwide
zs=domhigh
if(wal) then
real(xpw,ypw,zpw,xsw,ysw,zsw) ! wall parameters for use in BOUND
xpw=indist+walldist-1 ! in order that the -box feature
xsw=wallthck+2 ! may be used to avoid enforcing
ypw=-domwide ! boundary conditions at the ends
ysw=domwide *3 ! of the wall1
zpw=0.0
zsw=wallhigh
endif
subwal=f
CALL BOUND
io=io+1 ! next infob
patch(infob:io:,east,nx-2,nx,1,ny,1,nz,1,1) ! infob_:io:, the
! east boundary
iii=nx-2
xp=xfrac(iii)
xp=domlong*xp
yp=0
zp=0
iii=nx-1
xs=domlong-xp
ys=domwide
zs=domhigh
subwal=f
CALL BOUND
if(ny.gt.1.or.windangl.eq.0.0) then ! to allow testng with ny=1
io=io+1 ! next in-form object, the south boundary
patch(infob:io:,south,1,nx,1,1,1,nz,1,1)
xp=0
yp=0
zp=0
xs=domlong
ys=domwide * yfrac(1) ! to make the box one cell thick
zs=domhigh
subwal=wal ! subtract wall box if wal
CALL BOUND ! note that PIL subroutine names must be upper-case
io=io+1
patch(infob:io:,north,1,nx,ny-1,ny,1,nz,1,1) ! infob_:io:, the
! north boundary
iii=ny-2
xp=0
yp=yfrac(iii)
yp=domwide*yp
zp=0
xs=domlong
ys=domwide-yp
zs=domhigh
subwal-wal ! subtract wall box if wal
CALL BOUND
endif ! end of if(ny.gt.1)
if(wal) then ! next infob the wall
io=io+1
patch(infob:io:,cell,ixwal1-1,ixwal2+1,1,ny,1,nz/2,1,1)
xp=indist+walldist
xs=wallthck
yp=-domwide
ys=domwide *3
zp=0.0
zs=wallhigh
(infob at infob:io: is box(xp,yp,zp,xs,ys,zs,al,be,ga) with infob_:$
io:)
CALL VELZERO
endif
if(releas) then
io=io+1 ! next infob, the gas release
mesg(at release, infob no is :io: gasflo=:gasflo:
patch(infob:io:,cell,1,nx/2,ny/4,3*ny/4+1,1,nz/2,1,1)
patch(infob:io:,cell,1,nx,1,ny/4,1,nz,1,1)
(infob at infob:io: is point(:indist:,:domwide/2:,:pipezpos+pipedi$
am/2:,0.01) with infob_:io:)
(source of p1 at infob:io: is :gasflo: with infob_:io:)
(source of p1 at infob:io: is 1.e6 with infob_:io:)
(source of u1 at infob:io: is :gasvel:*:cos(relangl): with infob_:i$
o:!only)
(source of w1 at infob:io: is :gasvel:*:sin(relangl): with infob_:i$
o:!only)
(source of gas at infob:io: is 1.0 with infob_:io:!only)
endif
if(pipe) then
io=io+1 ! next infob, the southern half of the gas-carrying
! pipe
patch(infob:io:,phasem,1,nx/2,1,ny/2-2,1,nz/2,1,1)
real(rad)
rad=:pipediam/2:
(infob at infob:io: is ellpsd(:indist:,:domwide/2:,:pipezpos:+:rad:$
,:rad:,100.0,:rad:,0.,0.,0.) with infob_:io:)
CALL VELZERO
io=io+1 ! next infob, the northern part of the gas-carrying pipe
patch(infob:io:,phasem,1,nx/2,ny/2+1,ny,1,nz/2,1,1)
(infob at infob:io: is ellpsd(:indist:,:domwide/2:,:pipezpos:+:rad:$
,:rad:,100.0,:rad:,0.,0.,0.) with infob_:io:)
CALL VELZERO
endif
save13end
************************************************************
Group 15. Terminate Sweeps
************************************************************
Echo InForm settings for Group 15
save15begin
LSWEEP = 50
RESFAC = 1.000000E-03
save15end
************************************************************
Group 16. Terminate Iterations
************************************************************
Echo InForm settings for Group 16
save16begin
liter(p1) = 200 ;liter(gas ) = 200
endit(gas) = 0.0
save16end
************************************************************
Group 17. Relaxation
************************************************************
Group 18. Limits
save18begin
save18end
************************************************************
Group 19. EARTH Calls To GROUND Station
save19begin
conwiz = t ! use convergence wizard
calfor = t ! calculate forces
isg50 = 1 ! enforce endpause
isg52 = 1 ! plot max and min values as convergence indicators
save19end
************************************************************
Group 20. Preliminary Printout
************************************************************
Group 21. Print-out of Variables
************************************************************
Group 22. Monitor Print-Out
************************************************************
Group 23.Field Print-Out & Plot Control
************************************************************
Echo InForm settings for Group 23
save23begin
xzpr = t
tstswp=-1
save23end
************************************************************
Group 24. Dumps For Restarts
************************************************************
save25begin
GVIEW(P,0.000000E+00,-1.000000E+00,0.000000E+00)
GVIEW(UP,0.000000E+00,0.000000E+00,1.000000E+00)
Monitor MONITOROBJECT
> DOM, MONIT, 5, 15, 21
> DOM, SCALE, 1.000000E+00, 1.000000E+00, 1.000000E+00
> DOM, SNAPSIZE, 1.000000E-02
> DOM, SIZE, :domlong:,:domwide: , :domhigh:
save25end
debug=t
flag=t
izdb2=nz
iswdb2=lsweep
ENDMAIN
! start of subroutines (upper-case names needed)
SUBROUTINE CHINT
mesgm(:item:=:intger: press n if not ok
readvdu(ans,char,y)
if(:ans:.ne.y) then
label int
mesg(insert desired integer value for :item:
readvdu(:item:,int,12345)
if(:item:.eq.12345) then
goto int
endif
goto input
endif
ENDSUB
SUBROUTINE CHREAL
mesgm(:item:=:valu: press n if not ok
readvdu(ans,char,y)
if(:ans:.ne.y) then
label real
mesg(insert desired real value for :item:
readvdu(:item:,real,.12345)
if(:item:.eq..12345) then
goto real
endif
goto input
endif
ENDSUB
SUBROUTINE CHBOOL
mesgm(:item:=:bool: press n if not ok
readvdu(ans,char,y)
if(:ans:.eq.n) then
goto input
endif
ENDSUB
SUBROUTINE CHCHAR
mesgm(:item:=:ch: press n if not ok
readvdu(ans,char,y)
if(:ans:.ne.y) then
label char
mesg(insert desired character value for :item:
readvdu(:item:,char,pqrst)
if(:item:.eq.pqrst) then
goto char
endif
goto input
endif
mesgm(:item:=:ch: return if ok, else insert characters
readvdu(:item:,char,ch)
if(:item:.ne..pqrs) then
goto input
endif
ENDSUB
SUBROUTINE BOUND
al=0.0
be=0.0
ga=0.0
if(subwal) then ! subtract wall box for north and south
(infob at infob:io: is box(xp,yp,zp,xs,ys,zs,al,be,ga)-$
box(xpw,ypw,zpw,xsw,ysw,zsw,0.,0.,0.) with infob_:io:)
else
(infob at infob:io: is box(xp,yp,zp,xs,ys,zs,al,be,ga)$
with infob_:io:)
endif
(source of P1 at infob:io: is -1.e10*p1 with infob_:io:!line)
(source of U1 at infob:io: is :uprofl: with infob_:io:!fixv)
(source of V1 at infob:io: is :vprofl: with infob_:io:!fixv)
(source of w1 at infob:io: is 0. with infob_:io:!fixv)
if(releas) then
(source of gas at infob:io: is 0.0 with infob_:io:!only)
endif
if(tmodel.eq.ke) then
+ (source of ke at infob:io: is same with infob_:io:!only)
+ (source of ep at infob:io: is same with infob_:io:!only)
endif
(initial of mark at infob:io: is :io:+1 with infob_:io:)
ENDSUB
SUBROUTINE VELZERO
(source of u1 at infob:io: is 1.e9*(0.0-u1) with infob_:io:!line)
! why did coval not work
(source of v1 at infob:io: is 1.e9*(0.0-v1) with infob_:io:!line)
! why did coval not work ?
(source of w1 at infob:io: is 1.e9*(0.0-w1) with infob_:io:!line)
if(:tmodel:.eq.lvel) then
(source of ltls at infob:io: is 1.e9*(0.0-ltls) with infob_:io:!lin$
e)
endif
(initial of mark at infob:io: is 1.0 with infob_:io:)
ENDSUB
STOP
VRV USE
* Start of frame
* Setting display switches
TEXT CLEAR
AXIS ON
CELPOS OFF
CONTOUR SCALE ON
POSITION CONTOURKEY 2.252252E-02 8.389262E-02
TEXT ON
POSITION TITLE 2.590090E-01 8.993289E-01
POSITION PROBE 7.972973E-01 8.389262E-02
GRID OFF
* Domain scaling factors
SCALE 1.000000E+00 1.000000E+00 1.000000E+00
* Settings for current slice
PROBE 5.468750E+00 1.450000E+01 5.000000E-02; PROBE ON
SLICE Y
SLICE OUTLINE ON
* View and up directions
VIEW -6.841546E-02 -9.966097E-01 -4.569499E-02
UP -4.894052E-02 -4.239444E-02 9.979016E-01
* View centre
VIEW CENTRE 2.900758E+01 1.717579E+01 3.993689E+00
* View size
VIEW SIZE 1.704600E+01
* View perspective
VIEW DEPTH 3.000000E+00;VIEW TILT 0.8
DOMAIN ON
* Setting object visibility and painting status
OBJECT SHOW TYPE BLOCKAGE
OBJECT PAINT TYPE BLOCKAGE OFF
OBJECT WIREFRAME TYPE BLOCKAGE OFF
OBJECT SHOW TYPE INLET
OBJECT PAINT TYPE INLET OFF
OBJECT WIREFRAME TYPE INLET OFF
OBJECT SHOW TYPE OUTLET
OBJECT PAINT TYPE OUTLET OFF
OBJECT WIREFRAME TYPE OUTLET OFF
OBJECT SHOW TYPE USER_DEFINED
OBJECT PAINT TYPE USER_DEFINED OFF
OBJECT WIREFRAME TYPE USER_DEFINED OFF
VARIABLE u1
VECTOR ON
VECTOR COLOUR MULTI
VECTOR TYPE TOTAL
CONTOUR ON
CONTOUR BLANK ON
CONTOUR AVERAGE ON
SURFACE OFF
MINMAX OFF
CONTOUR OPAQUENESS 100
PAUSE
VRVEND