#cls                                                                            
TEXT(Piston moved by crank & conn. rod                                          
title                                                                           
libref=783                                                                      
                                                                                
  DISPLAY                                                                       
                                    valve vent                                  
              /////////////////////Ý  Ý///                                      
              --------------------------/                                       
                     ------            Ý/                                       
         crank/ .      pisÝ            Ý/                                       
             / conn.   tonÝ            Ý/                                       
            /      rod.   Ý            Ý/                                       
           *_ . _ . _ . _*. _ . _ . _ .Ý_ . _  . Symmetry axis                  
                          Ý            Ý/                                       
                          Ý            Ý/                                       
                                                                                
                     z1  zwn                                                    
                                                                                
   The compression of gas by a piston-cylinder combination is                   
   simulated by the use of the In-Form BOX function.                            
                                                                                
   The "fluid" within the piston is given a velocity which                      
   corresponds the rotation of the crank.                                       
                                                                                
                                                                                
   At a precribed instant a valve provides a fixed-pressurse outlet             
   in the cylinder wall. This is achieved by use of a boundary                  
   condition embodying the In-Form IF condition.                                
  ENDDIS                                                                        
                                                                                
    GROUP 1. Run title and other preliminaries                                  
TEXT(3D Piston by In-Form)                                                      

   INFORM1BEGIN
           Initial data of problem                                              
           -----------------------                                              
REAL(CRAD); CRAD=.05            ! Cylinder radius, m.                           
REAL(CHIG); CHIG=.1111          ! Cylinder height, m.                           
REAL(CR); CR=.050               ! Crank radius, m.                              
REAL(DR); DR=4.                 ! Connecting-rod centre distance                
                                ! /crank radius                                 
REAL(RPS); RPS=40.              ! Revolutions per second.                       
REAL(VOLF); VOLF=0.8E-3*RPS     ! Mean vol flowrate                             
REAL(ANGFRST); ANGFRST=0.       ! Crank angle at start, deg.                    
REAL(ANGLAST); ANGLAST=180.     ! CrANGLASTk engle at end, deg.                 
INTEGER(KNZ1)                   ! Z cell number where outlet vent               
                                ! starts                                        
                                                                                
           Auxiliary data                                                       
           --------------                                                       
REAL(PI,PI2); PI=3.14159; PI2=2.*PI  ! Pythagoras's constant                    
REAL(ANGLE); ANGLE=ANGLAST - ANGFRST ! Crank-angle change, deg.                 
REAL(DEGPS); DEGPS=RPS*360.     ! Revolutions per second, radians.              
REAL(DET)                       ! Time step, sec.                               
REAL(AV); AV=RPS*PI*2.          ! Angular velocity                              
REAL(ANGL)                      ! Angle                                         
REAL(Z1)                        ! Z coordinate of piston at start               
CHAR(FORM)                      ! Formula                                       
   INFORM1END
                                                                                
    GROUP 2. Transience; time-step specification                                
STEADY=F                                                                        
TFIRST=ANGFRST/DEGPS                                                            
TLAST=ANGLAST/DEGPS                                                             
LSTEP=10                                                                        
DET=(TLAST-TFIRST)/LSTEP                                                        
GRDPWR(T,LSTEP,TLAST-TFIRST,1.0)     ! uniform time steps                       
                                                                                
    GROUP 3. X-direction grid specification                                     
CARTES=F;NX=4                                                                   
XFRAC(1)=0.3;XFRAC(2)=0.5;XFRAC(3)=0.7;XFRAC(4)=1.                              
XULAST=PI                                                                       
                                                                                
    GROUP 4. Y-direction grid specification                                     
NY=4                                                                            
YFRAC(1)=0.5; YFRAC(2)=.8; YFRAC(3)=.95; YFRAC(4)=1.                            
YVLAST=CRAD                                                                     
                                                                                
    GROUP 5. Z-direction grid specification                                     
NZ=100                                                                          
GRDPWR(Z,NZ,CHIG,1.0)                                                           
KNZ1=NZ-5                                                                       
    GROUP 7. Variables stored, solved & named                                   
SOLVE(P1,U1,V1,W1,H1);SOLUTN(P1,Y,Y,Y,N,N,N)                                    
STORE(RHO1,MARK)                                                                
                                                                                
    GROUP 9. Properties of the medium (or media)                                
ENUL=1.E-5;ENUT=1.E-3                                                           
   ** Temperature from enthalpy field.                                          
TMP1=LINH                                                                       
   **  the specific heat...                                    
CP1=1000.
TMP1B=1./cp1                                                                   
RHO1=IDEALGAS        ! density from ideal gas law                               
DRH1DP=IDEALGAS      ! compressibility likewise                                 
RHO1B=29./8305.6     ! molecular weight of air/Gas_Constant                     
                                                                                
    GROUP 11. Initialization of variable or porosity fields                     
FIINIT(P1)=1.0E5;FIINIT(H1)=9.0E5                                               
                                                                                
    GROUP 13. Boundary conditions and special sources                           
WALL (HEAD,LOW,1,NX,1,NY,1,1,1,LSTEP)    ! Cylinder Head                        
WALL (CYL,NORTH,1,NX,NY,NY,1,NZ,1,LSTEP) ! Cylinder Wall                        
WALL (PCR,HIGH,1,NX,1,NY,NZ,NZ,1,LSTEP)  ! Piston Crown                         
                                                                                
  INFORM13BEGIN                                                                 
           In-Form statements                                                   
           ------------------                                                   
                                                                                
   ** Piston geometry at first time step                                                          
(MAKE of ZWO)                                                                   
(MAKE of ZWN)                                                                   
(MAKE of VENT)                                                                  
                                                                                
   **** ZWO is Z coordinate of piston at previous time step                   
PATCH(ONECELL1,CELL,1,1,1,1,1,1,1,1)                                            
(STORE1 of ZWO at ONECELL1 is 0)                                                
ANGL=ANGFRST*PI/180.+AV*DET                                                     
                                                                                
   ***** Z1=CR*(SQRT(DR**2-SIN(ANGL)**2)-COS(ANGL)-DR+1)                        
Z1=DR**2-SIN(ANGL)**2                                                           
Z1=CR*(SQRT(Z1)-COS(ANGL)-DR+1.)                                                
                                                                                                                                                
   **** ZWN is Z coordinate of piston at current time step                      
(STORE1 of ZWN at ONECELL1 is Z1)                                             
PATCH(PISTON1,CELL,1,NX,1,NY,1,NZ,1,1)                                          
                                                                                                                                               
   **** Using BOX function for formation of piston geometry                       
(INFOB at PISTON1 is BOX(0.,0.,0.,.1,.1,Z1,0.,0.,0.$                          
) with INFOB_1)                                                                 
   
  !!!!! note the use of the IF condition !!!!!                                                                             
   *** Second and next time steps                                               
PATCH(ONECELL2,CELL,1,1,1,1,1,1,2,LSTEP)                                        
(STORE1 of ZWO at ONECELL2 is ZWN with IF(ISWEEP.EQ.1))                         
                                                                                
FORM=:CR:*(SQRT(:DR:^2-SIN(AV*TIM)^2)-COS(AV*TIM)-:DR:+1.)                      
(STORE1 of ZWN at ONECELL2 is :FORM: with$                                      
 IF(ISWEEP.EQ.1))                                                               
                                                                                
   **** Using BOX function for formation of piston geometry                     
PATCH(PISTON2,CELL,1,NX,1,NY,1,NZ,2,LSTEP)                                      
(INFOB at PISTON2 is BOX(0.,0.,0.,.1,.1,ZWN,0.,0.,0.)$                          
 with INFOB_1)                                                                  
                                                                                
   ** Velocities components of piston                                           
                                                                                
   *** First time step                                                          
(SOURCE of W1 at PISTON1 is Z1 with INFOB_1!FIXVAL)                           
                                                                                
   *** Second and next time steps                                               
(SOURCE of W1 at PISTON2 is (ZWN-ZWO)/DT with$                                  
 INFOB_1!FIXVAL)                                                                
                                                                                
   ** Set the switch for opening of the outlet valve                            
      VENT=0 - the output vent is closed                                        
      VENT=1 - the output vent is opened                                        
                                                                                
   *** Condition of opening of the outlet vent                                  
FORM=IF(ISWEEP.EQ.LSWEEP.AND.P1[,,NZ-1].GE.3.E5)                                
   *** First time step                                                          
(STORE1 of VENT at ONECELL1 is 0.)                                              
   *** Second and next time steps                                               
       Set VENT is 1 when FORM is TRUE                                          
(STORE1 of VENT at ONECELL2 is 1. with :FORM:)                                  
                                                                                
   ** Boundary condition at the output vent                                     
                                                                                
PATCH(EXHAUST,NORTH,1,1,NY,NY,KNZ1,NZ,2,LSTEP)                                  
(SOURCE of P1 at EXHAUST is -10. with IF(VENT.NE.0.))                           
                                                                                
   ** MARK variable is used for the image of the piston position                
                                                                                
   *** Initialization of MARK variable                                          
(STORED of MARK is 0 with IF(ISWEEP.EQ.1))                                      
   *** Image of a location of the piston                                        
(STORED of MARK is 1 with INFOB_1!IF(ISWEEP.EQ.1))                              
  INFORM13END                                                                   
                                                                                
    GROUP 15. Termination of sweeps                                             
LSWEEP=30                                                                       
RESREF(P1)=2.0E-4*VOLF                                                          
RESREF(W1)=0.2*RPS*RESREF(P1)                                                   
RESREF(U1)=RESREF(W1);RESREF(V1)=RESREF(W1)                                     
RESREF(H1)=RESREF(P1)*300000.                                                   
                                                                                
    GROUP 16. Termination of iterations                                         
LITER(P1)=10;LITER(U1)=1;LITER(V1)=1;LITER(W1)=1;LITER(H1)=5                    
                                                                                
    GROUP 17. Under-relaxation devices                                          
RELAX(P1,LINRLX,.05)                                                            
RELAX(V1,FALSDT,5.E-5)                                                          
RELAX(W1,FALSDT,5.E-5)                                                          
RELAX(U1,FALSDT,5.E-5)                                                          
                                                                                
    GROUP 18. Limits on variables or increments to them                         
VARMIN(P1)=1.E4                                                                 
                                                                                
    GROUP 22. Spot-value print-out                                              
IXMON=1;IYMON=1;IZMON=NZ-1                                                      
TSTSWP=-1                                                                       
                                                                                
    GROUP 23. Field print-out and plot control                                  
NYPRIN=NY/5;NZPRIN=NZ/5;NPRINT=LSWEEP;NTPRIN=5                                  
XZPR=T;IYPRF=1;IYPRL=1                                                          
IPLTL=LSWEEP                                                                    
                                                                                
  Group 24. Dumps For Restarts                                                  
IDISPA=1; CSG1='P'                                                              
DISTIL=T                                                                        
EX(P1)=1.912E+05                                                                
EX(U1)=1.406E-01; EX(V1)=8.936E-02; EX(W1)=2.305E+00                            
EX(H1)=1.001E+06; EX(MARK)=8.700E-01; EX(RHO1)=4.367E-01                        
libref=783                                                                      
  PHOTON USE                                                                    
  p                                                                             
  p1                                                                            
                                                                                
                                                                                
  up z; gr z 1                                                                  
  gr out x 1; gr out x 4                                                        
  con w1 x 1 fi;0.001;  con w1 x 3 fi;0.001                                     
  surf mark x .99 col 4                                                         
  surf mark y .99 col 4                                                         
  msg Velocity contours at time step=1                                          
  msg Press RETURN to continue                                                  
  pause; vec off; red                                                           
  cont p1 x 1 fil;0.001                                                         
  cont p1 x 3 fil;0.001                                                         
  surf mark x .99 col 4                                                         
  surf mark y .99 col 4                                                         
  msg Pressure contours at time step=1                                          
  msg Press RETURN to continue                                                  
  pause                                                                         
  cont h1 x 1 fil;0.001                                                         
  cont h1 x 3 fil;0.001                                                         
  surf mark x .99 col 4                                                         
  surf mark y .99 col 4                                                         
  msg Temperature contours at time step=1                                       
  msg Press RETURN to continue                                                  
  pause                                                                         
  p                                                                             
  p5                                                                            
                                                                                
                                                                                
  up z; gr z 1                                                                  
  gr out x 1; gr out x 4                                                        
  con w1 x 1 fi;0.001;  con w1 x 3 fi;0.001                                     
  surf mark x .99 col 4                                                         
  surf mark y .99 col 4                                                         
  msg Velocity contours at time step=5                                          
  msg Press RETURN to continue                                                  
  pause; vec off; red                                                           
  cont p1 x 1 fil;0.001                                                         
  cont p1 x 3 fil;0.001                                                         
  surf mark x .99 col 4                                                         
  surf mark y .99 col 4                                                         
  msg Pressure contours at time step=5                                          
  msg Press RETURN to continue                                                  
  pause                                                                         
  cont h1 x 1 fil;0.001                                                         
  cont h1 x 3 fil;0.001                                                         
  surf mark x .99 col 4                                                         
  surf mark y .99 col 4                                                         
  msg Temperature contours at time step=5                                       
  msg Press RETURN to continue                                                  
  pause                                                                         
  p                                                                             
  p10                                                                           
                                                                                
                                                                                
  up z; gr z 1                                                                  
  gr out x 1; gr out x 4                                                        
  con w1 x 1 fi;0.001;  con w1 x 3 fi;0.001                                     
  surf mark x .99 col 4                                                         
  surf mark y .99 col 4                                                         
  msg Velocity contours at time step=10                                         
  msg Press RETURN to continue                                                  
  pause; vec off; red                                                           
  cont p1 x 1 fil;0.001                                                         
  cont p1 x 3 fil;0.001                                                         
  surf mark x .99 col 4                                                         
  surf mark y .99 col 4                                                         
  msg Pressure contours at time step=10                                         
  msg Press RETURN to continue                                                  
  pause                                                                         
  cont h1 x 1 fil;0.001                                                         
  cont h1 x 3 fil;0.001                                                         
  surf mark x .99 col 4                                                         
  surf mark y .99 col 4                                                         
  msg Temperature contours at time step=10                                      
  msg Press e to END                                                            
  ENDUSE