TALK=F;RUN( 1, 1)
TEXT(Flow in porous media. USP Test 6.                 
title
  DISPLAY
  
  This case solves a three-dimensional steady hydrodynamics
  problem with flow in propous medium.

  The analytical solution is: U1 = Uin, P1 = P-A*X
  where A depends on viscosity friction factor.
  ENDDIS  
real(fric,visc,Velin)
fric=10.
mesg(Default value of friction factor is :fric:
mesg(Do you want to change it? (y/n)
readvdu(ans,char,n)
if(:ans:.eq.y)then
 mesg(Enter new value of friction factor
 readvdu(fric,real,fric)
 mesg(New value of friction factor is :fric:
endif

visc=0.
mesg(Default value of viscosity is :visc:
mesg(Do you want to change it? (y/n)
readvdu(ans,char,n)
if(:ans:.eq.y)then
 mesg(Enter new value of viscosity 
 readvdu(visc,real,visc)
 mesg(New value of viscosity is :visc:
endif

Velin=1.
mesg(Default value of inlet velocity is :Velin: m/s
mesg(Do you want to change it? (y/n)
readvdu(ans,char,n)
if(:ans:.eq.y)then
 mesg(Enter new value of velocity 
 readvdu(Velin,real,Velin)
 mesg(New value of velocity is :Velin: m/s
endif

STEADY=T

BOOLEAN(dim1)
dim1=F
mesg(Do you want to use 1D case (y) or 3D(n)? (y/n)
readvdu(ans,char,n)
if(:ans:.eq.y)then
 dim1=T
endif

RSET(D,DOM,1.,1.,1.)
RHO1    = 1.
ENUL    = visc

IF(dim1)THEN
 RSET(M,10,1,1)
 STORE(V1,W1)
 SOLVE(P1,U1)
 SOLUTN(P1  ,Y,Y,Y,N,N,Y)
 SOLUTN(U1  ,Y,Y,Y,N,N,Y)
 LSWEEP = 5

 PATCH(IN,WEST,1,1,1,NY,1,NZ,1,1)
 COVAL(IN,P1, FIXFLU, Velin*RHO1)
 COVAL(IN,U1, 0., Velin)
 COVAL(IN,V1, 0., 0.)
 COVAL(IN,W1, 0., 0.)

 PATCH(OUT,EAST,NX,NX,1,NY,1,NZ,1,1)
 COVAL(OUT,P1, 1.E+3, 0.)

ELSE


RSET(M,10,10,10)

  Group 7. Variables: STOREd,SOLVEd,NAMEd
ONEPHS = T
SOLVE(P1,U1,V1,W1)
SOLUTN(P1  ,Y,Y,Y,N,N,Y)
SOLUTN(U1  ,Y,Y,Y,N,N,Y)
SOLUTN(V1  ,Y,Y,Y,N,N,Y)
SOLUTN(W1  ,Y,Y,Y,N,N,Y)

 
integer(idir)
idir = 0
mesg(Default direction of flow is from WEST to EAST
mesg(Do you want to change it? (y/n)
readvdu(ans,char,n)
if(:ans:.eq.y)then
 mesg(Enter new direction of flow 
 mesg(0 = WEST-EAST, 1 = EAST-WEST
 mesg(2 = SOUTH-NORTH, 3 = NORTH-SOUTH
 mesg(4 = LOW-HIGH, 5 = HIGH-LOW
 readvdu(idir,int,0)
 if(idir.gt.5)then
 idir = 0
 endif
 if(idir.lt.0)then
 idir = 0
 endif
endif
         Flow from WEST to EAST
if(idir.eq.0)then
 mesg(Flow from WEST to EAST
 PATCH(IN,WEST,1,1,1,NY,1,NZ,1,1)
 COVAL(IN,P1, FIXFLU, Velin*RHO1)
 COVAL(IN,U1, 0., Velin)
 COVAL(IN,V1, 0., 0.)
 COVAL(IN,W1, 0., 0.)

 PATCH(OUT,EAST,NX,NX,1,NY,1,NZ,1,1)
 COVAL(OUT,P1, 1.E+3, 0.)
endif
         Flow from EAST to WEST
if(idir.eq.1)then
 mesg(Flow from EAST to WEST
 PATCH(IN,EAST,NX,NX,1,NY,1,NZ,1,1)
 COVAL(IN,P1, FIXFLU, -Velin*RHO1)
 COVAL(IN,U1, 0., -Velin)
 COVAL(IN,V1, 0., 0.)
 COVAL(IN,W1, 0., 0.)

 PATCH(OUT,WEST,1,1,1,NY,1,NZ,1,1)
 COVAL(OUT,P1, 1.E+3, 0.)
endif
         Flow from SOUTH to NORTH
if(idir.eq.2)then
 mesg(Flow from SOUTH to NORTH
 PATCH(IN,SOUTH,1,NX,1,1,1,NZ,1,1)
 COVAL(IN,P1, FIXFLU, Velin*RHO1)
 COVAL(IN,U1, 0., 0.)
 COVAL(IN,V1, 0., Velin)
 COVAL(IN,W1, 0., 0.)

 PATCH(OUT,NORTH,1,NX,NY,NY,1,NZ,1,1)
 COVAL(OUT,P1, 1.E+3, 0.)
endif
         Flow from NORTH to SOUTH
if(idir.eq.3)then
 mesg(Flow from NORTH to SOUTH
 PATCH(IN,NORTH,1,NX,NY,NY,1,NZ,1,1)
 COVAL(IN,P1, FIXFLU, -Velin*RHO1)
 COVAL(IN,U1, 0., 0.)
 COVAL(IN,V1, 0., -Velin)
 COVAL(IN,W1, 0., 0.)

 PATCH(OUT,SOUTH,1,NX,1,1,1,NZ,1,1)
 COVAL(OUT,P1, 1.E+3, 0.)
endif
         Flow from LOW to HIGH
if(idir.eq.4)then
 mesg(Flow from LOW to HIGH
 PATCH(IN,LOW,1,NX,1,NY,1,1,1,1)
 COVAL(IN,P1, FIXFLU, Velin*RHO1)
 COVAL(IN,U1, 0., 0.)
 COVAL(IN,V1, 0., 0.)
 COVAL(IN,W1, 0., Velin)

 PATCH(OUT,HIGH,1,NX,1,NY,NZ,NZ,1,1)
 COVAL(OUT,P1, 1.E+3, 0.)
endif
         Flow from HIGH to LOW
if(idir.eq.5)then
 mesg(Flow from HIGH to LOW
 PATCH(IN,HIGH,1,NX,1,NY,NZ,NZ,1,1)
 COVAL(IN,P1, FIXFLU, -Velin*RHO1)
 COVAL(IN,U1, 0., 0.)
 COVAL(IN,V1, 0., 0.)
 COVAL(IN,W1, 0., -Velin)

 PATCH(OUT,LOW,1,NX,1,NY,1,1,1,1)
 COVAL(OUT,P1, 1.E+3, 0.)
endif

  Group 15. Terminate Sweeps
 LSWEEP = 25
mesg(Default value of LSWEEP is :LSWEEP:
mesg(Do you want to change it? (y/n)
readvdu(ans,char,n)
if(:ans:.eq.y)then
 mesg(Enter new value of LSWEEP 
 readvdu(LSWEEP,int,LSWEEP)
 mesg(New value of LSWEEP is :LSWEEP:
endif

ENDIF

    Group 11.Initialise Var/Porosity Fields
INIADD  =    F
FIINIT(U1) =0.0; FIINIT(V1) =0.0
FIINIT(W1) =0.0; FIINIT(P1) =0.0

PATCH(FRICT   ,VOLUME,1,NX,1,NY,1,NZ,1,1)
COVAL(FRICT   ,U1  , fric, 0.000000E+00)
COVAL(FRICT   ,V1  , fric, 0.000000E+00)
COVAL(FRICT   ,W1  , fric, 0.000000E+00)
 
RESFAC  = 1.E-06
 
  Group 16. Terminate Iterations
 LITER (P1)=200 ;LITER (U1)=200 ;LITER (V1)=200
 LITER (W1)=200
 ENDIT(P1) = 1.e-9; ENDIT(U1) = 1.e-9; ENDIT(V1) = 1.e-9
 ENDIT(W1) = 1.e-9

  Group 17. Relaxation
 RELAX(P1  ,LINRLX, 1.0)
 RELAX(U1  ,FALSDT, 1.E+8)
 RELAX(V1  ,FALSDT, 1.E+8)
 RELAX(W1  ,FALSDT, 1.E+8)

 ECHO    =    T
  Group 22. Monitor Print-Out
 IXMON=NX-1 ;IYMON=1 ;IZMON=1
 NPRMON=100000
 NPRMNT=1
 TSTSWP=-1
 
  Group 23.Field Print-Out & Plot Control
 NXPRIN=1; NYPRIN =1
 NPRINT  =    100000
 ISWPRF  =         1 ;ISWPRL =    100000

      Usp related variables
USP    = T
USPDBG = F
UAUTO  = F
UTCPLT = T
USPVTK = T
USPIMB = F
MXLEV  = 4 
MYLEV  = 4 
MZLEV  = 4
DOMAT  = -1
MINPRP = -1
MAXPRP = 250
CELLST = 1
FACEST = 1
USPREL = 0.7
PARSOL = F

mesg(Do you want to use collocated arrangement (y) or staggered one (n)? (y/n)
readvdu(ans,char,n)
if(:ans:.eq.y)then
 SPEDAT(SET,USP,METHOD,I,1)
 LSWEEP = 100
endif

IF(dim1)THEN
mesg(Do you want to use the debug mode (y)? (y/n)
readvdu(ans,char,n)
if(:ans:.eq.y)then
 USPDBG = T
 SPEDAT(SET,USPDBG,PRINTCOEF,L,T) 
 SPEDAT(SET,USPDBG,PRINTASSP,L,T) 
endif
ENDIF

STOP