Encyclopaedia Index

Case

Another name for a simulation. When a case is defined by use of the PHOENICS Commander, the case name forms a unique filename for the Q1 file.


CASE

-------------- Advanced PIL command --- -

Examples are:

a) Numeric CASE


CASE NX OF
WHEN 1
+ MESG(NX=1
WHEN 3
+ MESG(NX=3
ENDCASE

b) Character CASE, with the WHEN's extra number of characters argument


CASE :CH1: OF
WHEN XXXX,3
+ MESG(CH1 = XXX
WHEN YYYY,3
+ MESG(CH1 = YYY
ORELSE
+ MESG(CH1 = something else
ENDCASE


CASE constructs in PIL

The CASE statement is provided mainly for use when implementing menus. The syntax is:

(a) Numeric case constructs


       CASE    <numeric expression> OF

       WHEN    <value 1>

               <statements 1>

       WHEN    <value 2>

               <statements 2>

       WHEN    <value n>

               <statements n>

       ORELSE

               <statements o>

       ENDCASE

for example:


CASE NX OF
WHEN 1
MESG(NX=1
WHEN 3
MESG(NX=3
ENDCASE

The effect of this construct is to execute <statements 1> when the <numeric expression> equals <value 1>, <statements 2> when it equals <value 2> and so on. If the numeric expression does not match any of the WHEN values, the statements following the ORELSE (if present) are executed.

(b) Character-case Constructs

Character-case statements are similar in syntax to numeric constructs except for the presence of an optional extra parameter in the WHEN statement specifying the number of characters to be compared, eg:


CASE CH1 OF
WHEN XXXX,3
+ MESG(CH1 = XXX)
WHEN YYYY,3
+ MESG(CH1 = YYY)
ENDCASE

This will execute the command MESG(CH1 = XXX) if CH1 has the values XXX or XXXX, but not if it has the values XX, XXC, XXXC or XXXXX. If the number of characters to match is not specified, then all characters must match.

It should be noted that the character variable does not need to be enclosed in colons (:) in the CASE statement in order for its value to be evaluated, but it is allowed for compatibility.

The number of WHEN statements permitted within a CASE. ENDCASE construct is unlimited.

CASE constructs can be nested to a maximum depth of 20 and interleaved freely with DO loops and other "flow- control" constructs.

Example of use

The following sequence sets up a 2-D duct in the X-Y plane, but asks whether to put the main flow direction along X or Y. There are also options to have a blockage at the inlet, and to include or dispense with relaxation.

TALK=F;RUN( 1, 1);VDU=WINDOWED

CHAR(ANS);INTEGER(I1);BOOLEAN(BLOCK)
CHAR(TYP,TYPOUT,TYPTOP,TYPBOT,VEL1,VEL2)
REAL(UIN)

DO II=1,8
+ INTEGER(IX:II:,IY:II:,IZ:II:,IXB:II:,IYB:II:)
ENDDO

MESG(Blockage ? (Y/N)
READVDU(ANS,CHAR,N)

CASE :ANS: OF
+ WHEN YES,1
+ BLOCK=T;I1=1
+ MESG(Blockage activated
ORELSE
+ BLOCK=F;I1=0
+ MESG(No blockage included
ENDCASE

MESG(Flow direction? (X/Y)
READVDU(ANS,CHAR,X)

+CASE :ANS: OF
+ WHEN X,1
+ GRDPWR(X,5,1,1);GRDPWR(Y,-5,.2,1.5)
+ IX1=1+I1;IX2=IX1;IY1=1;IY2=NY;IZ1=1;IZ2=NZ
+ IX3=NX;IX4=NX;IY3=1; IY4=NY;IZ3=1; IZ4=NZ
+ IX5=1; IX6=NX;IY5=NY;IY6=NY;IZ5=1; IZ6=NZ
+ IX7=1; IX8=NX;IY7=1; IY8=1; IZ7=1; IZ8=NZ
+ IXB1=1;IXB2=1;IYB1=1;IYB2=NY
+ TYP=WEST;TYPOUT=EAST;TYPTOP=NORTH;TYPBOT=SOUTH
+ VEL1=U1;VEL2=V1
+ ISOLX=1
+ WHEN Y,1
+ GRDPWR(Y,5,1,1);GRDPWR(X,-5,.2,1.5)
+ IX1=1;IX2=NX;IY1=1+I1;IY2=IY1;IZ1=1;IZ2=NZ
+ IX3=1; IX4=NX;IY3=NY;IY4=NY;IZ3=1; IZ4=NZ
+ IX5=NX;IX6=NX;IY5=1; IY6=NY;IZ5=1; IZ6=NZ
+ IX7=1; IX8=1; IY7=1; IY8=NY;IZ7=1; IZ8=NZ
+ IXB1=1;IXB2=NX;IYB1=1;IYB2=1
+ TYP=SOUTH;TYPOUT=NORTH;TYPTOP=EAST;TYPBOT=WEST
+ VEL1=V1;VEL2=U1
+ ISOLY=1
+ENDCASE

MESG(Main flow direction is :ans:

SOLVE(P1,:VEL1:,:VEL2:)

IF(BLOCK) THEN
+ CONPOR(BLOCK,0.0,CELL,IXB1,IXB2,IYB1,IYB2,IZ1,IZ2)
ENDIF

UIN=5
INLET(IN1,:TYP:,IX1,IX2,IY1,IY2,IZ1,IZ2,1,1)
VALUE(IN1,P1,RHO1*UIN);VALUE(IN1,:VEL1:,UIN)

OUTLET(OUT1,:TYPOUT:,IX3,IX4,IY3,IY4,IZ3,IZ4,1,1)

WALL(TOP_WALL,:TYPTOP:,IX5,IX6,IY5,IY6,IZ5,IZ6,1,1)

WALL(BOT_WALL,:TYPBOT:,IX7,IX8,IY7,IY8,IZ7,IZ8,1,1)

MESG(Relaxation ? (Y/N)
READVDU(ANS,CHAR,N)
IF(:ANS:.EQ.Y) THEN
+ RELAX(U1,FALSDT,XULAST/UIN)
+ RELAX(V1,FALSDT,XULAST/UIN)
+ RELAX(P1,LINRLX,.5)
ENDIF

LSWEEP=40
NPRINT=1
ITABL=3;NPLT=1;ORSIZ=.4
IYMON=NY/2;IXMON=NX/2
STOP