```
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
* 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.
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)
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
```