TALK=F;RUN( 1, 1)
CPVNAM=VDI;SPPNAM=Core
TEXT(USP. Conductivity task on divided grid)

title
  DISPLAY 
    This case solves a simple three-dimensional conductivity
    task on divided grid in cube.
    The exact solution is one-dimensional constant gradient 
    of temperature.
    User can change direction of gradient and coefficient of
    conductivity.
  ENDDIS
   
STEADY  =    T
RSET(M,64,64,64)
RSET(D,DOM,1.,1.,1.)
 
ONEPHS  =    T
NAME(148) =KOND; NAME(150) =TEM1
STORE(KOND)
SOLVE(TEM1)
SOLUTN(TEM1,Y,Y,Y,N,N,Y)

integer(idir)
idir = 1
mesg(Default direction of temperature gradient is X.
mesg(Do you want to change it? (y/n)
readvdu(ans,char,n)
if(:ans:.eq.y)then
 mesg(Please, enter direction of temperature gradient. (x/y/z)
 readvdu(ans,char,n)
 if(:ans:.eq.x)then
 idir = 1
 mesg(New direction of temperature gradient is X.
 endif
 if(:ans:.eq.y)then
 idir = 2
 mesg(New direction of temperature gradient is Y.
 endif
 if(:ans:.eq.z)then
 idir = 3
 mesg(New direction of temperature gradient is Z.
 endif
endif

real(MINT,MAXT,MINKOND,MAXKOND,KONDC,DK,MINGR)
MINKOND=1.e-2
MAXKOND=1.e-2
mesg(Default coefficient of conductivity is constant.
mesg(Conductivity is :MINKOND:
mesg(Do you want to change it? (y/n)
readvdu(ans,char,n)
if(:ans:.eq.y)then
 mesg(Enter coductivity at minimum temperature
 readvdu(MINKOND,real,MINKOND)
 mesg(New coductivity at minimum temperature is :MINKOND:
 mesg(Enter coductivity at maximum temperature
 readvdu(MAXKOND,real,MAXKOND)
 mesg(New coductivity at maximum temperature is :MAXKOND:
endif

MINT=0
MAXT=100

if(idir.eq.1)then
       MINGR = MINKOND*2*NX
 MINGR = MINKOND/0.125
 PATCH(LESS,WEST,1,1,1,NY,1,NZ,1,1)
      COVAL(LESS,TEM1,FIXVAL,MINT)
 COVAL(LESS,TEM1,MINGR,MINT)
 PATCH(MORE,EAST,NX,NX,1,NY,1,NZ,1,1)
      COVAL(MORE,TEM1,FIXVAL,MAXT)
 COVAL(MORE,TEM1,MINGR,MAXT)
DK = (MAXKOND-MINKOND)/NX
DO II=1,NX
+ KONDC = MINKOND+0.5*DK+(II-1)*DK
+ PATCH(IP:II:,INIVAL,:II:,:II:,1,NY,1,NZ,1,1)
+ INIT(IP:II:,KOND,0.0,KONDC)
ENDDO
endif
if(idir.eq.2)then
 PATCH(LESS,SOUTH,1,NX,1,1,1,NZ,1,1)
 COVAL(LESS,TEM1,FIXVAL,MINT)
 PATCH(MORE,NORTH,1,NX,NY,NY,1,NZ,1,1)
 COVAL(MORE,TEM1,FIXVAL,MAXT)
DK = (MAXKOND-MINKOND)/NY
DO JJ=1,NY
+ KONDC = MINKOND+0.5*DK+(JJ-1)*DK
+ PATCH(IP:JJ:,INIVAL,1,NX,:JJ:,:JJ:,1,NZ,1,1)
+ INIT(IP:JJ:,KOND,0.0,KONDC)
ENDDO
endif
if(idir.eq.3)then
 PATCH(LESS,LOW,1,NX,1,NY,1,1,1,1)
 COVAL(LESS,TEM1,FIXVAL,MINT)
 PATCH(MORE,HIGH,1,NX,1,NY,NZ,NZ,1,1)
 COVAL(MORE,TEM1,FIXVAL,MAXT)
DK = (MAXKOND-MINKOND)/NZ
DO KK=1,NZ
+ KONDC = MINKOND+0.5*DK+(KK-1)*DK
+ PATCH(IP:KK:,INIVAL,1,NX,1,NY,:KK:,:KK:,1,1)
+ INIT(IP:KK:,KOND,0.0,KONDC)
ENDDO
endif

INTEGER(LEVEL)
LEVEL = 4
mesg(Level of coarsening is :LEVEL:
mesg(Do you want to change it? (y/n)
readvdu(ans,char,n)
if(:ans:.eq.y)then
 mesg(Enter level of coarsening
 readvdu(LEVEL,int,LEVEL)
 mesg(New level of coarsening is :LEVEL:
endif

mesg(Do you want to view results in the centres of cells? (y/n)
readvdu(ans,char,n)
if(:ans:.eq.y)then
SPEDAT(SET,USPIO,VERTCENT,L,F)
endif


mesg(Do you want to solve task without calculation of gradients ? (y/n)
readvdu(ans,char,n)
if(:ans:.eq.y)then
SPEDAT(SET,USP,CALCGRAD,L,F)
endif
 
LSWEEP  =       100
RESFAC  = 1.000000E-07
 
PARSOL=F
ECHO=T
IXMON=2 ;IYMON=2 ;IZMON=2
NPRMON=100000
NPRMNT=1
TSTSWP=-1
NPRINT=100000
ISWPRF=1 ;ISWPRL=100000

  SAVE7BEGIN
 
    ******** Test In-Form ******
(STORED of EXT1 is 100.*XG)
(STORED of DTEM is EXT1-TEM1) 
 
  SAVE7END


      Usp related variables
USP    = T
UAUTO  = F
USPDBG = F
UTCPLT = T
USPIMB = F
MXLEV  = LEVEL 
MYLEV  = LEVEL
MZLEV  = LEVEL
DOMAT  = -1
MINPRP = -1
MAXPRP = 250
CELLST = 10
FACEST = 10

SPEDAT(SET,USPVTK,GRADOUT,C,TEM1)

 PARSOL = F
 ISG62 = 0
 ISG60 = 1

> DOM,    SIZE,        1.000000E+00, 1.000000E+00, 1.000000E+00
> DOM,    MONIT,       4.250000E-01, 4.250000E-01, 4.454545E-01
> DOM,    SCALE,       1.000000E+00, 1.000000E+00, 1.000000E+00
> DOM,    SNAPSIZE,    1.000000E-02

if(LEVEL.gt.0)then 
> OBJ,    NAME,        B1
> OBJ,    POSITION,    0.468750E+00, 0.468750E+00, 0.468750E+00
> OBJ,    SIZE,        6.250000E-02, 6.250000E-02, 6.250000E-02
> OBJ,    GEOMETRY,    fine
> OBJ,    ROTATION24,        1
> OBJ,    TYPE,        FINE_GRID_VOL
> OBJ,    LEVELS,       0.000000E+00, 0.000000E+00, 0.000000E+00
> OBJ,    AXES,        OXYZ
endif

if(LEVEL.gt.1)then
> OBJ,    NAME,        B2
> OBJ,    POSITION,    0.437500E+00, 0.437500E+00, 0.437500E+00
> OBJ,    SIZE,        0.125000E+00, 0.125000E+00, 0.125000E+00
> OBJ,    GEOMETRY,    fine
> OBJ,    ROTATION24,        1
> OBJ,    TYPE,        FINE_GRID_VOL
> OBJ,    LEVELS,       1.000000E+00, 1.000000E+00, 1.000000E+00
> OBJ,    AXES,        OXYZ
endif

if(LEVEL.gt.2)then
> OBJ,    NAME,        B3
> OBJ,    POSITION,    0.375000E+00, 0.375000E+00, 0.375000E+00
> OBJ,    SIZE,        0.250000E+00, 0.250000E+00, 0.250000E+00
> OBJ,    GEOMETRY,    fine
> OBJ,    ROTATION24,        1
> OBJ,    TYPE,        FINE_GRID_VOL
> OBJ,    LEVELS,       2.000000E+00, 2.000000E+00, 2.000000E+00
> OBJ,    AXES,        OXYZ
endif

if(LEVEL.gt.3)then
> OBJ,    NAME,        E1
> OBJ,    POSITION,    0.250000E+00, 0.250000E+00, 0.250000E+00
> OBJ,    SIZE,        0.500000E+00, 0.500000E+00, 0.500000E+00
> OBJ,    GEOMETRY,    fine
> OBJ,    ROTATION24,        1
> OBJ,    TYPE,        FINE_GRID_VOL
> OBJ,    LEVELS,       3.000000E+00, 3.000000E+00, 3.000000E+00
> OBJ,    AXES,        OXYZ
endif

STOP