TALK=T;RUN(1,1)
  PHOTON USE
  p
  parphi
  1 10 1

  vi -x
  con den1 x 1 fi;1
  msg density
  ENDUSE
  DISPLAY
  Oscillating water column, invented by Dennis Carey, 1970
  Two side-by-side water columns oscillate in a structure on the
  ocean floor influenced by sinusoidal pressure variations caused
  by surface waves.
  Water spills from the left (donor) column into the right
  (receptor) column and flows thence through a turbine back to the
  sea.
  This input file represents its idealised behaviour by
  use of In-Form, so as to:
      1. calculate heights of water in each column
      2. calculate corresponding density distributions
      3. estimate maximum possible power generation,
      4. (if findfreq = T) to determine the natural frequency
         of the donor column

                        /////////
                        !.......!
                        !.air...!
                        !.......!
                        !..!....!
              donor     !..!....!    receptor
              column    !..!....!    column
                        !..!    ! ^
                        !..!    !
                      ^ !  !    ! Hr
                        !  !    !
                     Hd !  !    !
        --- in/outflow--___!_____----outflow through turbine
        ^^^^^^^^^^^^^^ ocean floor ^^^^^^^^^^^^^^^^^^^

    In the following Q1 file, economies of calculation and display
    are achieved by treating the receptor column as standing on top
    of the donor, so that the system can be regerded as one-
    dimensional but time-dependent.

    Explanations are provided as comments in the Q1 file.

  ENDDIS
 ************************************************************
  Group 1. Run Title and Number
 ************************************************************
 ************************************************************
 
 TEXT(CAREY Oscillating water column          )
 
 ************************************************************
 ************************************************************
 
 IRUNN = 1 ;LIBREF = 0
 ************************************************************
  Group 2. Time dependence
 STEADY = F
    * Set overall time and no. of steps
 TFIRST =0. ;TLAST =25.
 FSTEP = 1 ;LSTEP = 2500
 TFRAC(1)=4.0E-04 ;TFRAC(251)=0.1004
 TFRAC(501)=0.2004 ;TFRAC(751)=0.3004
 TFRAC(1001)=0.4004 ;TFRAC(1251)=0.5004
 TFRAC(1501)=0.6004 ;TFRAC(1751)=0.7004
 TFRAC(2001)=0.8004 ;TFRAC(2251)=0.9004
 ************************************************************
  Group 3. X-Direction Grid Spacing
 CARTES = T
 NX = 1
 XULAST =1.
 XFRAC(1)=1.
 ************************************************************
  Group 4. Y-Direction Grid Spacing
 NY = 200
 YVLAST =4.
 YFRAC(1)=5.0E-03 ;YFRAC(21)=0.105
 YFRAC(41)=0.205 ;YFRAC(61)=0.305
 YFRAC(81)=0.405 ;YFRAC(101)=0.505
 YFRAC(121)=0.605 ;YFRAC(141)=0.705
 YFRAC(161)=0.805 ;YFRAC(181)=0.905
 ************************************************************
  Group 5. Z-Direction Grid Spacing
 PARAB = F
 NZ = 1
 ZWLAST =12.5
 ZFRAC(1)=1.
 ************************************************************
  Group 6. Body-Fitted Coordinates
 ************************************************************
  Group 7. Variables: STOREd,SOLVEd,NAMEd
 ONEPHS = T
 NAME(1)=P1 ;NAME(5)=V1
 NAME(149)=NPOR ;NAME(150)=DEN1
    * Y in SOLUTN argument list denotes:
    * 1-stored 2-solved 3-whole-field
    * 4-point-by-point 5-explicit 6-harmonic averaging 
 SOLUTN(P1,Y,Y,N,N,N,Y)
 SOLUTN(V1,Y,Y,N,N,N,Y)
 SOLUTN(NPOR,Y,N,N,N,N,Y)
 SOLUTN(DEN1,Y,N,N,N,N,Y)
 DEN1 = 150
 EPOR = 0 ;HPOR = 0 ;NPOR = 149 ;VPOR = 0
 ************************************************************
  Group 8. Terms & Devices
    * Y in TERMS argument list denotes:
    * 1-built-in source 2-convection 3-diffusion 4-transient
    * 5-first phase variable 6-interphase transport         
 TERMS(P1,Y,Y,Y,N,Y,Y)
 TERMS(V1,Y,Y,Y,Y,Y,Y)
 DIFCUT =0.5 ;ZDIFAC =1.
 GALA = T ;ADDDIF = F
 ISOLX = -1 ;ISOLY = -1 ;ISOLZ = -1
 ************************************************************
  Group 9. Properties used if PRPS is not
  stored, and where PRPS = -1.0 if it is!
 RHO1 =1000. ;TMP1 =0.
 EL1 =0.
 TSURR =0. ;TEMP0 =0.
 PRESS0 =0.
 DVO1DT =0. ;DRH1DP =0.
 EMISS =0. ;SCATT =0.
 RADIA =0. ;RADIB =0.
 ENUL =1.0E-05 ;ENUT =0.
 PRNDTL(V1)=1.
 PRT(V1)=1.
 CP1 =1. ;CP2 =1.
 ************************************************************
  Group 10.Inter-Phase Transfer Processes
 ************************************************************
  Group 11.Initial field variables (PHIs)
 FIINIT(P1)=1.0E-10 ;FIINIT(V1)=1.0E-10
 FIINIT(NPOR)=0. ;FIINIT(DEN1)=1000.
 
 PATCH(DONINIT ,INIVAL, 1, 1, 1, 50, 1, 1, 1, 1)
 
 PATCH(RECINIT ,INIVAL, 1, 1, 101, 151, 1, 1, 1, 1)
 INIADD = F
 FSWEEP = 1
 NAMFI =CHAM
 ************************************************************
  Group 12. Patchwise adjustment of terms
  Patches for this group are printed with those
  for Group 13.
  Their names begin either with GP12 or &
 ************************************************************
  Group 13. Boundary & Special Sources
 
 PATCH(NPORDON ,CELL , 1, 1, 1, 99, 1, 1, 1, 1)
 
 PATCH(VPORDON ,CELL , 1, 1, 1, 100, 1, 1, 1, 1)
 
 PATCH(NPORREC ,CELL , 1, 1, 101, 200, 1, 1, 1, 1)
 
 PATCH(TOPD ,CELL , 1, 1, 100, 100, 1, 1, 1, 2500)
 COVAL(TOPD ,P1 ,1.0E+07 ,0. )
 
 PATCH(TOPR ,CELL , 1, 1, 200, 200, 1, 1, 1, 2500)
 COVAL(TOPR ,P1 , FIXVAL ,0. )
 
 PATCH(DONBOT ,CELL , 1, 1, 1, 1, 1, 1, 1, 2500)
 COVAL(DONBOT ,P1 ,In-Form:source - see Grp 19)
 
 PATCH(RECBOT ,OUTFLO, 1, 1, 101, 101, 1, 1, 1, 2500)
 COVAL(RECBOT ,P1 ,In-Form:source - see Grp 19)
 
 PATCH(GRAVITY ,VOLUME, 1, 1, 1, 200, 1, 1, 1, 2500)
 COVAL(GRAVITY ,V1 ,In-Form:source - see Grp 19)
 
 PATCH(DONCOL ,CELL , 1, 1, 1, 1, 1, 1, 1, 2500)
 
 PATCH(RECCOL ,CELL , 1, 1, 101, 101, 1, 1, 1, 2500)
 
 PATCH(COLUMND ,VOLUME, 1, 1, 1, 100, 1, 1, 1, 2500)
 
 PATCH(COLUMNR ,VOLUME, 1, 1, 101, 200, 1, 1, 1, 2500)
 XCYCLE = F
 EGWF = T
 WALLCO = GRND2
 ************************************************************
  Group 14. Downstream Pressure For PARAB
 ************************************************************
  Group 15. Terminate Sweeps
 LSWEEP = 10 ;ISWC1 = 1
 LITHYD = 1 ;LITFLX = 1 ;LITC = 1 ;ITHC1 = 1
 SELREF = T
 RESFAC =0.
 ************************************************************
  Group 16. Terminate Iterations
 LITER(P1)=20 ;LITER(V1)=10
 ENDIT(P1)=0. ;ENDIT(V1)=0.
 ************************************************************
  Group 17. Relaxation
 RELAX(P1,LINRLX,0.5)
 RELAX(V1,FALSDT,0.041413)
 RELAX(DEN1,LINRLX,1.)
 OVRRLX =0.
 EXPERT = F ;NNORSL = F
 ************************************************************
  Group 18. Limits
 VARMAX(P1)=1.0E+10 ;VARMIN(P1)=-1.0E+10
 VARMAX(V1)=1.0E+06 ;VARMIN(V1)=-1.0E+06
 VARMAX(NPOR)=1.0E+10 ;VARMIN(NPOR)=-1.0E+10
 VARMAX(DEN1)=1.0E+10 ;VARMIN(DEN1)=1.
 ************************************************************
  Group 19. Data transmitted to GROUND
 PARSOL = F
 ISG21 = 10
 ISG52 = 2
 ISG62 = 1
 SPEDAT(SET,INITIAL,NPOR!NPORDON,C,=0.35+(0.)*YV)
 SPEDAT(SET,INITIAL,VPOR!VPORDON,C,=0.35+(0.)*YV)
 SPEDAT(SET,INITIAL,NPOR!NPORREC,C,=0.7+0.*(YV-2.))
 SPEDAT(SET,INITIAL,VPOR!NPORREC,C,=0.7+0.*(YV-2.))
 SPEDAT(SET,SOURCE,R1!DONBOT,C,=COVAL(1.E7&9800.19043+(RHO1-1.0)*9$)
 SPEDAT(SET,SOURCE,R1!DONBOT,C,.81*0.5*0.25*SIN(2.51328*TIM)))
 SPEDAT(SET,SOURCE,R1!RECBOT,C,=COVAL(0.5&9800.19043+(RHO1-1.0)*9.$)
 SPEDAT(SET,SOURCE,R1!RECBOT,C,81*0.5*0.25*SIN(2.51328*TIM)))
 SPEDAT(SET,INITIAL,P1!DONINIT,C,=9800.19043*(1-(YG-YG[&1])/1.))
 SPEDAT(SET,INITIAL,P1!RECINIT,C,=9800.19043*(1-(YG-YG[&101])/1.))
 SPEDAT(SET,SOURCE,V1!GRAVITY,C,=COVAL(2.0E-10&-9.81*VPOR*(DEN1-1.$)
 SPEDAT(SET,SOURCE,V1!GRAVITY,C,0)))
 SPEDAT(SET,STORED,VDC!DONCOL,C,=V1[1&1]*NPOR/(0.35+(0.)*HOD)!ZSLFIN)
 SPEDAT(SET,MAKE,HND,C,=0)
 SPEDAT(SET,MAKE,HNR,C,=0)
 SPEDAT(SET,MAKE,HOD,C,=0)
 SPEDAT(SET,MAKE,HOR,C,=0)
 SPEDAT(SET,MAKE,VDC,C,=0)
 SPEDAT(SET,MAKE,VRC,C,=0)
 SPEDAT(SET,MAKE,DHWL,C,=0)
 SPEDAT(SET,MAKE,HDMX,C,=0)
 SPEDAT(SET,MAKE,HRMX,C,=0)
 SPEDAT(SET,MAKE,PBOT,C,=0)
 SPEDAT(SET,STORED,VRC!RECCOL,C,=V1[1&100+1]*NPOR/(0.7+0.*HOR)!ZSL$)
 SPEDAT(SET,STORED,VRC!RECCOL,C,FIN)
 SPEDAT(SET,STORED,HOD,C,=1.!TSTSTR!IF(ISTEP.EQ.1))
 SPEDAT(SET,STORED,HOD,C,=HND!TSTSTR!IF(ISTEP.GT.1))
 SPEDAT(SET,STORED,HOR,C,=1.!TSTSTR!IF(ISTEP.EQ.1))
 SPEDAT(SET,STORED,HOR,C,=HNR!TSTSTR!IF(ISTEP.GT.1))
 SPEDAT(SET,STORED,HND,C,=HOD+VDC*DT!ZSLFIN)
 SPEDAT(SET,STORED,HNR,C,=HOR+VRC*DT!ZSLFIN)
 SPEDAT(SET,STORED,PBOT,C,=9800.19043!ZSLFIN)
 SPEDAT(SET,STORED,HND,C,=MIN(2.&HOD+VDC*DT)!TSTFIN)
 SPEDAT(SET,STORED,HNR,C,=HOR+VRC*DT!TSTFIN)
 SPEDAT(SET,STORED,DHWL,C,=MAX(0&HND-MAX(1.25&HNR))!TSTFIN)
 SPEDAT(SET,STORED,HND,C,=HND-DHWL!TSTFIN)
 SPEDAT(SET,STORED,HNR,C,=HNR+DHWL*0.5*(2*0.35+(0.)*(HND+1.25))/(0$)
 SPEDAT(SET,STORED,HNR,C,.7+0.*HNR)!TSTFIN)
 SPEDAT(SET,STORED,HRMX,C,=MAX(HNR&HRMX)!TSTFIN)
 SPEDAT(SET,STORED,HDMX,C,=MAX(HND&HDMX)!TSTFIN)
 SPEDAT(SET,MAKE,SPIL,C,=0)
 SPEDAT(SET,MAKE,RATE,C,=0)
 SPEDAT(SET,STORED,SPIL,C,=SPIL+DHWL*4375.!TSTFIN)
 SPEDAT(SET,STORED,RATE,C,=SPIL/TIM!TSTFIN)
 SPEDAT(SET,PROPERTY,RHO1!COLUMND,C,=1.0!IF(YG.GT.HND))
 SPEDAT(SET,PROPERTY,RHO1!COLUMNR,C,=1.0!IF(YG.GT.HNR+2.))
 SPEDAT(SET,PRINT,RATE,C,=RATE)
 SPEDAT(SET,PRINT,HDMX,C,=HDMX)
 SPEDAT(SET,PRINT,HRMX,C,=HRMX)
 SPEDAT(SET,PRINT,HND!P,C,=HND)
 SPEDAT(SET,PRINT,HNR!P2,C,=HNR)
 SPEDAT(SET,PRINT,DHWL!Q,C,=DHWL)
 SPEDAT(SET,PRINT,SPIL!Q2,C,=SPIL)
 ************************************************************
  Group 20. Preliminary Printout
 ************************************************************
  Group 21. Print-out of Variables
 INIFLD = T ;SUBWGR = F
    * Y in OUTPUT argument list denotes:
    * 1-field 2-correction-eq. monitor 3-selective dumping      
    * 4-whole-field residual 5-spot-value table 6-residual table
 OUTPUT(P1,Y,N,N,Y,Y,Y)
 OUTPUT(V1,Y,N,N,Y,Y,Y)
 OUTPUT(NPOR,Y,N,N,N,N,N)
 OUTPUT(DEN1,Y,N,Y,N,N,N)
 ************************************************************
  Group 22. Monitor Print-Out
 IXMON = 1 ;IYMON = 3 ;IZMON = 1
 NPRMON = 100000 ;NPRMNT = 1 ;TSTSWP = -1
 UWATCH = T ;USTEER = T
 HIGHLO = F
 ************************************************************
  Group 23.Field Print-Out & Plot Control
 NPRINT = 100000 ;NUMCLS = 5
 NTPRIN = 250 ;ISTPRF = 1 ;ISTPRL = 100000
 NYPRIN = 20 ;IYPRF = 1 ;IYPRL = 10000
 IPLTF = 1 ;IPLTL = -1 ;NPLT = -1
 ISWPRF = 1 ;ISWPRL = 100000
 ITABL = 3 ;IPROF = 1
 ABSIZ =0.5 ;ORSIZ =0.2
 NTZPRF = 1 ;NCOLPF = 50
 ICHR = 2 ;NCOLCO = 45 ;NROWCO = 20
 
 PATCH(P ,PROFIL, 1, 1, 1, 1, 1, 1, 1, 2500)
 
 PATCH(P2 ,PROFIL, 1, 1, 101, 101, 1, 1, 1, 2500)
 
 PATCH(Q ,PROFIL, 1, 1, 1, 1, 1, 1, 1, 2500)
 
 PATCH(Q2 ,PROFIL, 1, 1, 101, 101, 1, 1, 1, 2500)
 
 PATCH(DONBOTTM,PROFIL, 1, 1, 1, 1, 1, 1, 1, 2500)
 PLOT(DONBOTTM,P1 ,0. ,0. )
 PLOT(DONBOTTM,V1 ,0. ,0. )
 
 PATCH(RECBOTTM,PROFIL, 1, 1, 101, 101, 1, 1, 1, 2500)
 PLOT(RECBOTTM,P1 ,0. ,0. )
 ************************************************************
  Group 24. Dumps For Restarts
 SAVE = T ;NOWIPE = F
 NSAVE =CHAM
 IDISPA = 1 ;IDISPB = 0 ;IDISPC = 0
STOP