*IF DEF,OCEAN @DYALLOC.4512
C ******************************COPYRIGHT****************************** GTS2F400.8353
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.8354
C GTS2F400.8355
C Use, duplication or disclosure of this code is subject to the GTS2F400.8356
C restrictions as set forth in the contract. GTS2F400.8357
C GTS2F400.8358
C Meteorological Office GTS2F400.8359
C London Road GTS2F400.8360
C BRACKNELL GTS2F400.8361
C Berkshire UK GTS2F400.8362
C RG12 2SZ GTS2F400.8363
C GTS2F400.8364
C If no contract has been raised with this copy of the code, the use, GTS2F400.8365
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.8366
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.8367
C Modelling at the above address. GTS2F400.8368
C ******************************COPYRIGHT****************************** GTS2F400.8369
C GTS2F400.8370
CLL Subroutine ROW_CTL ------------------------------------------------ ROW_CTL.2
CLL ROW_CTL.3
CLL Level 2 control routine ROW_CTL.4
CLL ROW_CTL.5
CLL version for CRAY YMP ROW_CTL.6
CLL written by S. Ineson ROW_CTL.7
CLL ROW_CTL.8
CLL code reviewed by : S. J. Foreman ROW_CTL.9
CLL ROW_CTL.10
CLL version number 1.2 dated 02/03/93 ROW_CTL.11
CLL programming standard : ROW_CTL.12
CLL system components covered : ROW_CTL.13
CLL system task : ROW_CTL.14
CLL Modification record: ROW_CTL.15
CLL 08/05/92 (vn1.1) Initialise STASH WORKSPACE to RMDI instead of zero. ROW_CTL.16
CLL 02/03/93 (vn1.2) Remove test on stash flags when initialising ROW_CTL.17
CLL stash workspace. Include code to allow mead diagnostics to ROW_CTL.18
CLL be calculated as zonal mean fields. (SI) ROW_CTL.19
CLL 3.4 16/6/94 : Change CHARACTER*(*) to CHARACTER*(80) N.Farnon ONF0F304.11
CLL 01/09/94 (vn3.4) Parallelisation modifications: Replace call ORH1F304.124
CLL to ROWCALC with call to BLOKCALC. Adjust argument list ORH1F304.125
CLL accordingly. ROWCALC now called at a lower parallel ORH1F304.126
CLL level. R. Hill ORH1F304.127
! Vn 3.4 31/08/94 Add Biological Model diagnostics (Nick Taylor) ONT1F304.1
CLL 3.4 04/08/94 Remove ice flux correction and split sea ice OJT0F304.27
CLL haney forcing from SST/SSS haney forcing. (JFT) OJT0F304.28
CLL 4.0 7.7.95 J.M.Gregory Copy heatsink diagnostic to stash OJG0F400.7
CLL Salinity*waterflux diagnostic to stash OJG1F400.7
CLL 3.5 05/06/95 Chgs to SI & STINDEX arrays. RTHBarnes GRB4F305.432
CLL ROW_CTL.20
CLL 3.5 01/02/95 Remove *IF DEF dependency-replace with ORH1F305.487
CLL logical run time tests. R. Hill ORH1F305.488
CLL 4.0 Correct splitting of leads heatflux and snowrate OJC2F400.86
CLL for ice dynamics and add diagnostics. J.F.Crossley OJC2F400.87
CLL Baroclinic acceleration diagnostics converted to OJG2F404.99
CLL rates J.M.Gregory OJG2F404.100
CLL 4.1 01/04/96 ! Add Gent and McWilliams diagnostics C.M.Roberts OLA0F401.63
CLL 4.1 23.5.96 J.M.Gregory Diags for rate of change of salinity OJG2F401.279
CLL 4.1 23.5.96 J.M.Gregory Diagnostic for total ocean velocity OJG5F401.36
CLL 4.1 Vertical mean vorticity diagnostics introduced. M. J. Bell OMB3F401.48
CLL 4.3 18/03/97 4.3 Introduce the Visbeck scheme. C. Roberts OLA2F403.48
CLL 4.4 25.9.97 Use subroutines for masking diags for rates of OJG2F404.101
CLL change of temperature and salinity. Introduce rate of change OJG2F404.102
CLL of salinity due to GMW scheme. Jonathan Gregory. OJG2F404.103
! 4.4 Pass LCAL360 through to BLOKCALC. R.Forbes OFR8F404.7
CLL 4.4 21/5/97 Enable actual temperature to be stashed (M. Bell) OMB1F404.164
CLL 4.4 15/06/97 changes to accomodate the free surface solution ORL1F404.730
CLL R.Lenton ORL1F404.731
CLL ROW_CTL.21
! 4.4 Include call to CALC_RLIDP and pass stash flag 30285 OFRAF404.28
! into BLOKCALC (R.Forbes) OFRAF404.29
! 4.5 Remove refs to ARGPTRA, ARGCONA, TYPPTRA, TYPCONA. Reduce ORH3F405.1
! continuation lines further in argument lists by passing ORH3F405.2
! temperature, salinity and biology stash work space around ORH3F405.3
! as a block rather than individual component arrays. R. Hill ORH3F405.4
! OFRAF404.30
! 4.5 Move Visbeck scheme to subroutine - cleans up ROW_CTL ORH4F405.2
! and saves memory since the global arrays required by ORH4F405.3
! visbeck will not be retained on completion. R. Hill ORH4F405.4
CLL Documentation : ROW_CTL.22
CLL ROW_CTL.23
CLL ROW_CTL.24
CLLEND ----------------------------------------------------------------- ROW_CTL.25
C*L Arguments ROW_CTL.26
ROW_CTL.27
SUBROUTINE ROW_CTL( 1,20@DYALLOC.4513
*CALL ARGSIZE
@DYALLOC.4514
*CALL ARGD1
@DYALLOC.4515
*CALL ARGDUMA
@DYALLOC.4516
*CALL ARGDUMO
@DYALLOC.4517
*CALL ARGDUMW
GKR1F401.256
*CALL ARGPTRO
@DYALLOC.4519
*CALL ARGSTS
@DYALLOC.4520
*CALL ARGCONO
@DYALLOC.4522
*CALL ARGOCALL
@DYALLOC.4523
*CALL ARGPPX
GKR0F305.979
*CALL ARGOINDX
ORH7F402.263
& ICODE,CMESSAGE ! ############################################ @DYALLOC.4524
ROW_CTL.29
C IN: model description held in dump ROW_CTL.30
ROW_CTL.31
&,ITT,TTSEC,SWLDEG,FKMP_GLOBAL ORH6F402.68
ROW_CTL.33
C INOUT: primary variables ROW_CTL.34
&,ZU,ZV OFRAF404.31
&,P,PB,PTD,PTDB,UBT,VBT,UBTBBC,VBTBBC,MLD,AICE,HICE,HSNOW OOM1F405.380
&,HICE_REF,CARYHEAT,FLXTOICE,CARYSALT OOM1F405.381
&,ISX,ISY,WSX_LEADS,WSY_LEADS,ATHKDFT OLA2F403.49
ROW_CTL.51
C IN: array required for sea ice calculation ROW_CTL.52
ROW_CTL.53
&,ICY,OCEANHEATFLUX,OCEANSNOWRATE OOM1F405.382
ROW_CTL.55
C IN: array required for haney forcing of seaice ROW_CTL.58
ROW_CTL.59
&,anomiceh ROW_CTL.60
ROW_CTL.61
C IN: arrays required for flux correction ROW_CTL.64
ROW_CTL.65
&,fluxcorh,fluxcorw OJT0F304.30
ROW_CTL.67
C IN: Data assimilation ROW_CTL.70
ROW_CTL.71
&,LL_ASS_BTRP,DU_ASS_BTRP,DV_ASS_BTRP ROW_CTL.72
ROW_CTL.73
C OUT: arrays for interfacing between sections ROW_CTL.75
ROW_CTL.76
&,SURFTEMP,SURFSAL,NEWICE,UCURRENT,VCURRENT,ZTD,XF,YF,SWZVRT OOM1F405.383
ROW_CTL.86
C IN: pointers and stashflags to diagnostics ROW_CTL.93
ROW_CTL.94
&,SI201_30,SI202_30,SI203_30,SI204_30,SI205_30 ROW_CTL.95
&,SI208_30 ROW_CTL.96
&,SI248_30,SI249_30,SI250_30,SI251_30 NT071293.270
&,SI292_30,SI293_30 OJP0F404.897
&,SF201_30,SF202_30,SF203_30,SF204_30,SF205_30 ROW_CTL.97
&,SF208_30 ROW_CTL.98
&,SF248_30,SF249_30,SF250_30,SF251_30 NT071293.271
&,SF292_30,SF293_30 OJP0F404.898
ROW_CTL.99
C IN: STASH_MAXLEN for dynamically allocating STASH workspace ROW_CTL.100
ROW_CTL.101
&,sw_len30 ROW_CTL.102
*CALL ARGOCTOT
ORH1F304.134
ROW_CTL.103
&,LCAL360 OFR8F404.8
& ) ROW_CTL.104
ROW_CTL.105
IMPLICIT NONE ROW_CTL.106
ROW_CTL.107
INTEGER ROW_CTL.108
& SI201_30,SI202_30,SI203_30,SI204_30,SI205_30 @DYALLOC.4525
&,SI208_30 ROW_CTL.120
&,SI248_30,SI249_30,SI250_30,SI251_30 NT071293.272
&,SI292_30,SI293_30 OJP0F404.899
&,sw_len30 ROW_CTL.121
&,ICODE ROW_CTL.122
ROW_CTL.123
LOGICAL ROW_CTL.124
& SF201_30,SF202_30,SF203_30,SF204_30,SF205_30 @DYALLOC.4526
&,SF208_30 ROW_CTL.127
&,SF248_30,SF249_30,SF250_30,SF251_30 NT071293.273
&,SF292_30,SF293_30 OJP0F404.900
ROW_CTL.128
LOGICAL OFR8F404.9
& LCAL360 OFR8F404.10
CHARACTER*(80) ONF0F304.12
& CMESSAGE ROW_CTL.130
ROW_CTL.131
REAL ROW_CTL.132
& STASHWORK(sw_len30) ROW_CTL.133
ROW_CTL.134
*CALL CSUBMODL
GRB4F305.433
*CALL OARRYSIZ
ORH6F401.34
*CALL CMAXSIZE
@DYALLOC.4527
*CALL TYPSIZE
@DYALLOC.4528
*CALL TYPD1
@DYALLOC.4529
*CALL TYPDUMA
@DYALLOC.4530
*CALL TYPDUMO
@DYALLOC.4531
*CALL TYPDUMW
GKR1F401.257
*CALL TYPPTRO
@DYALLOC.4533
*CALL TYPSTS
@DYALLOC.4534
*CALL TYPCONO
@DYALLOC.4536
*CALL TYPOINDX
PXORDER.45
*CALL TYPOCALL
@DYALLOC.4537
*CALL TYPOC2DG
ORH0F400.10
*CALL TYPOCTOT
ORH1F304.135
*CALL C_MDI
ROW_CTL.139
*CALL CNTLOCN
ORH1F305.492
*CALL PPXLOOK
GKR0F305.980
*CALL PARVARS
OLA2F403.50
ROW_CTL.140
INTEGER ROW_CTL.141
& ITT ROW_CTL.142
REAL ROW_CTL.143
& TTSEC,SWLDEG,FKMP_GLOBAL(IMT,JMT_GLOBAL) ORH6F402.69
&,ZU(IMT,JMT),ZV(IMT,JMT) ORH1F304.173
&,ZUENG(IMT,8,JMT),ZVENG(IMT,8,JMT) ORH1F304.174
&,P(IMT_STREAM,0:JMT_STREAM+1),PB(IMT_STREAM,0:JMT_STREAM+1) ORH1F402.47
&,PTD(IMT_STREAM,JMT_STREAM),PTDB(IMT_STREAM,JMT_STREAM) ORH1F305.495
&,UBT(IMT_FSF,JMTM1_FSF),VBT(IMT_FSF,JMTM1_FSF) ORL1F404.733
&,UBTBBC(IMT_FSF,JMTM1_FSF),VBTBBC(IMT_FSF,JMTM1_FSF) ORL1F404.734
&,MLD(IMT_IPD_MIX,JMT_IPD_MIX) ORH1F305.498
REAL ROW_CTL.155
& SURFTEMP(IMT_ICE,JMT_ICE),SURFSAL(IMT_ICE,JMT_ICE) ORH1F305.499
&,ISX(IMT_Idr,JMTM1_idr),ISY(IMT_idr,JMTM1_idr) ODC1F405.418
&,WSX_LEADS(IMT_idr,JMTM1_idr),WSY_LEADS(IMT_idr,JMTM1_idr) ODC1F405.419
&,CARYHEAT(IMT_ICE,JMT_ICE) ORH1F305.502
&,FLXTOICE(IMT_ICE,JMT_ICE),CARYSALT(IMT_ICE,JMT_ICE) ORH1F305.503
&,UCURRENT(IMT_DRsa,JMTM1_DRsa),VCURRENT(IMT_DRsa,JMTM1_DRsa) ODC1F405.420
ORH1F305.505
LOGICAL ROW_CTL.159
& ICY(IMT_ICE,JMT_ICE),NEWICE(IMT_ICE,JMT_ICE) ORH1F305.506
ORH1F305.507
REAL ROW_CTL.163
& anomiceh(IMT_IHY,JMT_IHY) ORH1F305.508
ORH1F305.509
REAL ROW_CTL.167
& fluxcorh(IMT_FLX,JMT_FLX),fluxcorw(IMT_FLX,JMT_FLX) ORH1F305.510
ORH1F305.511
REAL ROW_CTL.171
& AICE(IMT_ICE,JMT_ICE),HICE(IMT_ICE,JMT_ICE) ORH1F305.512
&,HSNOW(IMT_ICE,JMT_ICE) ORH1F305.513
&,HICE_REF(IMT_IHY,JMT_IHY) ORH1F305.514
ORH1F305.515
REAL ROW_CTL.175
& DU_ASS_BTRP(IMT_ASM,JMT_ASM),DV_ASS_BTRP(IMT_ASM,JMT_ASM) ORH1F305.516
LOGICAL ROW_CTL.177
& LL_ASS_BTRP ROW_CTL.178
ORH1F305.517
REAL ROW_CTL.181
& ZTD(IMT_STREAM,JMT_STREAM) ORH1F305.518
REAL ROW_CTL.185
& XF(IMT_FSF,JMT_FSF),YF(IMT_FSF,JMT_FSF) ORH1F305.519
# ,SWZVRT(IMT_ZVRT,JMT_ZVRT,N_ZVRT)! vorticity diagnostics OMB3F401.50
OMB3F401.51
C local variables OMB3F401.52
REAL ZCONU(IMT_ZVRT,JMT_ZVRT,N_ZVRT) ! } contributions to barotrop OMB3F401.53
# ,ZCONV(IMT_ZVRT,JMT_ZVRT,N_ZVRT) ! } u and v tendencies OMB3F401.54
OMB3F401.55
OMB3F401.56
C Local scalar parameters and pointer variables OMB3F401.57
ROW_CTL.188
REAL OFRAF404.32
& RLSRFP(IMT,JMT) ! Rigid-lid surface pressure OFRAF404.33
INTEGER I,J,K,N,IPOINT ORH1F304.130
&,SWNCOL ! number of columns JG170893.18
&,DTITEM1 ! item no. of first heating-rate diagnostic JG170893.19
&,NDTITEM ! no. of heating-rate diagnostics JG170893.20
&,DSITEM1 ! item no. of 1st diag. for rate salinity change OJG2F401.280
&,NDSITEM ! no. of diags. for rate of change of salinity OJG2F401.281
&,ZNITEM1 ! item no. of baroclinic x-acceleration diagnostic ORH1F305.520
&,BIOITEM1 ! Item no. of first biology diagnostic ONT1F304.3
&,NBIOITEM ! No. of biology diagnostics ONT1F304.4
&,heatsinkitem OJG0F400.8
&,diagswitem OJG1F400.8
&,GMWITEM ! item no. of first Gent & McWilliams diagnostic OLA0F401.64
&,NGMWITEM ! no. of Gent & McWilliams diagnostics OLA0F401.65
&,gnumitem ! item no for vertical momentum diffusion coeff OLA3F403.18
&,gnuTitem ! item no for vertical tracer diffusion coeff OLA3F403.19
&,Rimitem ! item no for momentum Richardson no OLA3F403.20
&,RiTitem ! item no for tracer Richardson no OLA3F403.21
&,hmitem ! item no for max depth Large scheme momentum OLA3F403.22
&,hTitem ! item no for max depth Large scheme tracer OLA3F403.23
&,LMITEM ! ITEM NO MONIN OBUKHOV LENGTH LARGE SCHEME MOMENTUM OOM1F405.384
&,LTITEM ! ITEM NO MONIN OBUKHOV LENGTH LARGE SCHEME TRACER OOM1F405.385
&,RIMLDCALCITEM ! ITEM NO FOR RICHARDSON NO FROM MLD CALCULATION OOM1F405.386
ORH0F404.24
INTEGER UV_J_DIM ! J dimension for special use on UV ORH0F404.25
! grid diagnostics. ORH0F404.26
ORH0F404.27
REAL OLA2F403.57
C The variables defined below are used for the Visbeck scheme OLA2F403.58
& athkdft(imt_vis,jmt_vis) ! thickness diffusion coeff on T grid OLA2F403.59
C OJG0F400.9
parameter(heatsinkitem=279) OJG0F400.10
parameter(diagswitem=280) OJG1F400.9
PARAMETER(hmitem=290,hTitem=291) OOM1F405.387
PARAMETER(LMITEM=302,LTITEM=303,RIMLDCALCITEM=294) OOM1F405.388
PARAMETER(gnumitem=296,gnuTitem=297,Rimitem=298,RiTitem=299) OOM1F405.389
C Note that the 5th item is not directly after the first four OJG2F404.104
PARAMETER(GMWITEM=281,NGMWITEM=5) OJG2F404.105
PARAMETER(DTITEM1=231,NDTITEM=15,DSITEM1=306,NDSITEM=14) OJG2F401.282
PARAMETER(ZNITEM1=246) JG170893.26
integer utotitem ! Stash item number for total velocity OJG5F401.37
parameter(utotitem=320) OJG5F401.38
integer tempitem ! Stash item number for temperature OMB1F404.165
parameter(tempitem=301) OMB1F404.166
ORH1F305.523
PARAMETER(BIOITEM1=252,NBIOITEM=27) ONT1F304.7
C stashwork addresses of heating-rate diagnostics JG170893.28
INTEGER SI_DT(NDTITEM),SI_DS(NDSITEM) OJG2F401.283
C stashwork addresses of barotropic acceleration diagnostics OMB3F401.58
INTEGER SI_ZUN,SI_ZVN JG170893.32
C Stashwork addresses of biology diagnostics ONT1F304.10
INTEGER SI_BIO(NBIOITEM) ONT1F304.11
INTEGER SI_DT_LOCAL(NDTITEM) ORH3F405.5
&, SI_DS_LOCAL(NDSITEM) ORH3F405.6
&, SI_BIO_LOCAL(NBIOITEM) ORH3F405.7
&, dt_size ! Size of stashwork chunk relevant to DT ORH3F405.8
&, ds_size ! Size of stashwork chunk relevant to DS ORH3F405.9
&, bio_size ! Size of stashwork chunk relevant to biology ORH3F405.10
ORH3F405.11
INTEGER ITEM ! local index ORH1F305.525
INTEGER IM_IDENT ! internal model identifier GRB4F305.434
INTEGER IM_INDEX ! internal model index for STASH arrays GRB4F305.435
ROW_CTL.211
INTEGER SI_GMW(NGMWITEM) OLA0F401.67
INTEGER ROW_CTL.212
& tracer_xref(O_MAX_TRACERS_MEA)!maps model trcers to cox trcers ORH1F305.526
&,sirel_mead(O_MAX_TRACERS_MEA) !ptrs to STASHWS rel.to SI(211,30) ORH1F305.527
&,mead_index ! to find position of 1st mead diagnostic in SW ROW_CTL.215
&,tracer_count,L,pl_count,LD ! local indices JG170893.35
LOGICAL ROW_CTL.217
& Lpl_mead(4*LSEGC_MEA,O_MAX_TRACERS_MEA)!pseudo levels indicator ORH1F305.528
&,sf_mead(O_MAX_TRACERS_MEA) ! stash flags for mead diagnostics ORH1F305.529
&,land ROW_CTL.220
ORH1F305.530
LOGICAL JG170893.37
& SF_DT(NDTITEM) ! stash flags for heating-rate diagnostics JG170893.38
&,SF_DS(NDSITEM) ! stash flags for rates of change of salinity OJG2F401.284
&,SF_ZN(2) ! stash flags for barotropic acceleration diagnostics OMB3F401.59
ORH1F305.531
C Stashwork addresses of biology diagnostics ONT1F304.14
&,SF_BIO(NBIOITEM) ! stash flags for biology diagnostics ONT1F304.15
LOGICAL OCEAN(IMT,JMT) OJG2F401.285
INTEGER IMT_STASH OJG2F401.286
ROW_CTL.222
LOGICAL SF_GMW(NGMWITEM) OLA0F401.68
C External subroutines called ROW_CTL.223
ROW_CTL.224
EXTERNAL ROW_CTL.225
& BLOKCALC ORH1F304.128
& ,STASH ROW_CTL.227
& ,TIMER ROW_CTL.229
& ,SET_PSEUDO_LIST ROW_CTL.232
&,maskodiagn,copyodiagn,copyodiagl OJG5F401.39
ORH1F305.532
ROW_CTL.234
C Set up internal model identifier and STASH index GRB4F305.436
im_ident = ocean_im GRB4F305.437
im_index = internal_model_index(im_ident) GRB4F305.438
GRB4F305.439
ICODE=0 ROW_CTL.235
CMESSAGE=' ' ROW_CTL.236
C ORH5F400.3
C Initialise arrays for vertically averaged barotropic acceleration OMB3F401.73
C ORH5F400.5
do j=j_1,j_jmt ORH3F402.269
do i=1,imt ORH5F400.7
zu(i,j)=0. ORH5F400.8
zv(i,j)=0. ORH5F400.9
enddo ORH5F400.10
enddo ORH5F400.11
ROW_CTL.237
C OMB3F401.60
C Initialise arrays for vorticity diagnostics OMB3F401.61
C OMB3F401.62
IF ( L_OZVRT ) THEN OMB3F401.63
DO item = 1,N_ZVRT OMB3F401.64
DO J = J_1,J_JMT ORH3F402.270
DO I=1,IMT OMB3F401.66
ZCONU(I,J,item)=0.0 OMB3F401.67
ZCONV(I,J,item)=0.0 OMB3F401.68
END DO ! I OMB3F401.69
END DO ! J OMB3F401.70
END DO ! ID OMB3F401.71
END IF ! L_OZVRT OMB3F401.72
ORH1F305.533
IF (L_OHMEAD) THEN ORH1F305.534
ORH1F305.535
CL Set up variables to enable tracer transport diagnostics ROW_CTL.239
SI061093.1
mead_index=1 SI061093.2
DO item=O_MAX_TRACERS,1,-1 SI061093.3
IF (SF(210+item,30)) mead_index=SI(210+item,30,im_index) GRB4F305.440
END DO SI061093.5
ROW_CTL.240
DO item = 1,O_MAX_TRACERS ROW_CTL.241
ROW_CTL.242
tracer_xref(item) = 0 ROW_CTL.243
sf_mead(item) = SF(210+item,30) ROW_CTL.244
sirel_mead(item) = 1 SI061093.6
ROW_CTL.246
IF (SF(210+item,30)) THEN ROW_CTL.247
sirel_mead(item) = SI(210+item,30,im_index) - mead_index + 1 GRB4F305.441
CALL SET_PSEUDO_LIST
(LSEGC*4,LEN_STLIST ROW_CTL.248
&,STLIST(1,STINDEX(1,210+item,30,im_index)),Lpl_mead(1,item) GRB4F305.442
&,STASH_PSEUDO_LEVELS,NUM_STASH_PSEUDO,ICODE,CMESSAGE) ROW_CTL.250
IF (ICODE.GT.0) RETURN ROW_CTL.251
ENDIF ROW_CTL.252
ROW_CTL.253
END DO ROW_CTL.254
ROW_CTL.255
tracer_count=1 ROW_CTL.256
tracer_xref(tracer_count)=1 ROW_CTL.257
tracer_count=2 ROW_CTL.258
tracer_xref(tracer_count)=2 ROW_CTL.259
DO item= 3, O_MAX_TRACERS ROW_CTL.260
IF (SI(100+item,0,im_index).GT.1) THEN GRB4F305.443
tracer_count = tracer_count + 1 ROW_CTL.262
tracer_xref(item) = tracer_count ROW_CTL.263
ENDIF ROW_CTL.264
END DO ROW_CTL.265
ROW_CTL.266
ELSE ! L_OHMEAD = true ORH1F305.536
mead_index = 1 ORH1F305.537
ENDIF ! L_OHMEAD = true ORH1F305.538
ORH1F305.539
CL Initialise STASH workspace ROW_CTL.272
ROW_CTL.273
DO N=1,sw_len30 ROW_CTL.274
STASHWORK(N)=RMDI ROW_CTL.275
END DO ROW_CTL.276
ROW_CTL.277
C JG170893.41
C Stash pointers and flags for heating-rate diagnostics JG170893.42
C JG170893.43
DO ITEM=1,NDTITEM JG170893.44
SI_DT(ITEM)=SI(DTITEM1-1+ITEM,30,im_index) GRB4F305.444
SF_DT(ITEM)=SF(DTITEM1-1+ITEM,30) JG170893.46
SI_DT_LOCAL(ITEM) = SI_DT(ITEM) - SI_DT(1) + 1 ORH3F405.12
ENDDO JG170893.47
DO ITEM=1,NDSITEM OJG2F401.287
SI_DS(ITEM)=SI(DSITEM1-1+ITEM,30,im_index) OJG2F401.288
SF_DS(ITEM)=SF(DSITEM1-1+ITEM,30) OJG2F401.289
SI_DS_LOCAL(ITEM) = SI_DS(ITEM) - SI_DS(1) + 1 ORH3F405.13
ENDDO OJG2F401.290
C JG170893.49
C Stash pointers and flags for barotropic acceleration diagnostics OMB3F401.74
C JG170893.51
SI_ZUN=SI(ZNITEM1,30,im_index) GRB4F305.445
SI_ZVN=SI(ZNITEM1+1,30,im_index) GRB4F305.446
SF_ZN(1)=SF(ZNITEM1,30) JG170893.54
SF_ZN(2)=SF(ZNITEM1+1,30) JG170893.55
ORH1F305.541
ORH1F305.542
C ONT1F304.18
C Stash pointers and flags for biology diagnostics ONT1F304.19
C ONT1F304.20
DO ITEM=1,NBIOITEM ONT1F304.21
SI_BIO(ITEM)=SI(BIOITEM1-1+ITEM,30,im_index) GRB4F305.447
SF_BIO(ITEM)=SF(BIOITEM1-1+ITEM,30) ONT1F304.23
SI_BIO_LOCAL(ITEM) = SI_BIO(ITEM) - SI_BIO(1) + 1 ORH3F405.14
ENDDO ONT1F304.24
C OLA0F401.69
C Stash pointers and flags for Gent & McWilliams diagnostics OLA0F401.70
C OLA0F401.71
DO ITEM=1,4 OJG2F404.106
SI_GMW(ITEM)=SI(GMWITEM-1+ITEM,30,im_index) OLA0F401.73
SF_GMW(ITEM)=SF(GMWITEM-1+ITEM,30) OLA0F401.74
ENDDO OLA0F401.75
si_gmw(5)=si(322,30,im_index) OJG2F404.107
sf_gmw(5)=sf(322,30) OJG2F404.108
C OLA0F401.76
ORH1F305.543
C JG170893.57
C Length of a row JG170893.58
C JG170893.59
IF (L_OCYCLIC) THEN ORH1F305.544
SWNCOL=IMTM2 ORH1F305.545
ELSE ORH1F305.546
SWNCOL=IMT ORH1F305.547
ENDIF ORH1F305.548
IMT_STASH=SWNCOL OJC2F400.91
ORH1F305.549
IF (L_OBIOLOGY) THEN ORH1F305.550
SWNCOL_BIO = SWNCOL ORH1F305.551
ELSE ORH1F305.552
SWNCOL_BIO = 1 ORH1F305.553
ENDIF ORH1F305.554
ORH1F305.555
IF (.NOT.L_ONOCLIN) THEN ORH1F305.556
SWNCOL_CLN = SWNCOL ORH1F305.557
ELSE ORH1F305.558
SWNCOL_CLN = 1 ORH1F305.559
ENDIF ORH1F305.560
ORH1F305.561
C JG170893.65
IF ((L_OISOPYCGM.AND.L_OVISBECK).or.(L_OISOGM.AND.L_OVISBECK)) OOM1F405.78
& THEN OOM1F405.79
c Average the thickness diffusion coefficent onto the C grid OLA2F403.71
c for the Visbeck scheme. Set cyclic conditions OLA2F403.72
*IF DEF,MPP OLA2F403.73
CALL SWAPBOUNDS
(ATHKDFT,IMT,JMT,O_EW_HALO,O_NS_HALO,1) OLA2F403.74
*ENDIF OLA2F403.75
do j=j_1,j_jmt OLA2F403.76
do i=1,imtm1 OLA2F403.77
ATHKDFTU(i,j)=(ATHKDFT(i,j)+ATHKDFT(i+1,j))/2. OLA2F403.78
ATHKDFTV(i,j)=(ATHKDFT(i,j)+ATHKDFT(i,j+1))/2. OLA2F403.79
enddo OLA2F403.80
enddo OLA2F403.81
IF (L_OCYCLIC) THEN OLA2F403.82
do j=j_1,j_jmt OLA2F403.83
ATHKDFTU(1,j)=ATHKDFTU(imtm1,j) OLA2F403.84
ATHKDFTU(imt,j)=ATHKDFTU(2,j) OLA2F403.85
ATHKDFTV(1,j)=ATHKDFTV(imtm1,j) OLA2F403.86
ATHKDFTV(imt,j)=ATHKDFTV(2,j) OLA2F403.87
enddo OLA2F403.88
ELSE OLA2F403.89
do j=j_1,j_jmt OLA2F403.90
ATHKDFTU(imt,j)=ATHKDFT(imt,j) OLA2F403.91
ATHKDFTV(imt,j)=(ATHKDFT(imt,j)+ATHKDFT(imt,j+1))/2. OLA2F403.92
enddo OLA2F403.93
ENDIF OLA2F403.94
*IF DEF,MPP OLA2F403.95
CALL SWAPBOUNDS
(ATHKDFTV,IMT,JMT,O_EW_HALO,O_NS_HALO,1) OLA2F403.96
CALL SWAPBOUNDS
(ATHKDFTU,IMT,JMT,O_EW_HALO,O_NS_HALO,1) OLA2F403.97
*ENDIF OLA2F403.98
ENDIF ! for L_OISOPYCGM.AND.L_OVISBECK OLA2F403.99
OLA2F403.100
OLA2F403.101
CL Section 30: Row calculations ROW_CTL.302
ROW_CTL.303
CALL BLOKCALC
( ORH1F304.129
*CALL ARGSIZE
@DYALLOC.4539
*CALL ARGD1
@DYALLOC.4540
*CALL ARGDUMO
@DYALLOC.4541
*CALL ARGPTRO
@DYALLOC.4542
*CALL ARGOCALL
@DYALLOC.4543
*CALL ARGOINDX
ORH7F402.265
ROW_CTL.305
C IN: model description held in dump ROW_CTL.306
ROW_CTL.307
& ITT,TTSEC,SWLDEG,FKMP_GLOBAL ORH6F402.70
ROW_CTL.309
C INOUT: primary variables ROW_CTL.310
&,ZU,ZV,ZUENG,ZVENG,ZCONU,ZCONV,SWZVRT ORH3F403.246
&,P,PB,PTD,PTDB,UBT,VBT,UBTBBC,VBTBBC,MLD ORL1F404.735
C OUT: arrays for interfacing between sections ROW_CTL.322
&,ZTD,XF,YF ORH3F403.248
C OUT: diagnostic quantities, IN: STASH flags ROW_CTL.331
*CALL ARGOC2DG
ORH0F400.11
ROW_CTL.332
&,imt_stash,sf(210,30),stashwork(si(210,30,im_index)) ORH3F403.249
&,STASHWORK(SI_GMW(1)),STASHWORK(SI_GMW(2)),STASHWORK(SI_GMW(3)) OJG2F404.109
&,STASHWORK(SI_GMW(4)),STASHWORK(SI_GMW(5)) OJG2F404.110
&,SF_GMW(1),SF_GMW(2),SF_GMW(3),SF_GMW(4),SF_GMW(5) OJG2F404.111
&,STASHWORK(SI(gnumitem,30,im_index)) OLA3F403.26
&,STASHWORK(SI(gnuTitem,30,im_index)) OLA3F403.27
&,STASHWORK(SI(Rimitem,30,im_index)) OLA3F403.28
&,STASHWORK(SI(RiTitem,30,im_index)) OLA3F403.29
&,STASHWORK(SI(hmitem,30,im_index)) OLA3F403.30
&,STASHWORK(SI(hTitem,30,im_index)) OLA3F403.31
&,SF(gnumitem,30),SF(gnuTitem,30),SF(Rimitem,30),SF(RiTitem,30) OLA3F403.32
&,SF(hmitem,30),SF(hTitem,30) OLA3F403.33
&,STASHWORK(SI(LMITEM,30,IM_INDEX)),SF(LMITEM,30) OOM1F405.390
&,STASHWORK(SI(LTITEM,30,IM_INDEX)),SF(LTITEM,30) OOM1F405.391
&,STASHWORK(SI(RIMLDCALCITEM,30,IM_INDEX)),SF(RIMLDCALCITEM,30) OOM1F405.392
&,SWNCOL,STASHWORK(SI201_30),STASHWORK(SI202_30) JG170893.66
&,STASHWORK(SI203_30),STASHWORK(SI204_30),STASHWORK(SI205_30) JG170893.67
&,STASHWORK(SI208_30),STASHWORK(SI248_30),STASHWORK(SI249_30) OOM1F405.393
&,STASHWORK(SI250_30),STASHWORK(SI251_30) NT071293.275
&,STASHWORK(SI292_30),STASHWORK(SI293_30) OJP0F404.901
&,SF201_30,SF202_30,SF203_30,SF204_30,SF205_30,SF208_30 OOM1F405.394
&,SF248_30,SF249_30,SF250_30,SF251_30,SF(285,30) OFRAF404.34
&,STASHWORK(mead_index),sirel_mead,sf_mead,Lpl_mead,tracer_xref ORH3F403.250
&,SF292_30,SF293_30 OJP0F404.902
OJP0F404.903
&,stashwork(si_dt(1)),si_dt_local,sf_dt,dt_size ORH3F405.15
&,stashwork(si_ds(1)),si_ds_local,sf_ds,ds_size ORH3F405.16
&,stashwork(si_bio(1)),si_bio_local,sf_bio,bio_size ORH3F405.17
&,stashwork(si_zun),stashwork(si_zvn),sf_zn ORH1F305.564
&,stashwork(si(utotitem,30,im_index)) OJG5F401.40
&,stashwork(si(utotitem+1,30,im_index)) OJG5F401.41
&,sf(utotitem,30),sf(utotitem+1,30) OJG5F401.42
&,stashwork(si(tempitem,30,im_index)),sf(tempitem,30) OMB1F404.167
ORH1F305.565
C INOUT: arrays for interfacing between sections 30 and 32 ROW_CTL.344
ROW_CTL.345
&,AICE,HICE,HSNOW,HICE_REF,CARYHEAT ORH3F403.252
ROW_CTL.352
C IN: ROW_CTL.353
ROW_CTL.354
&,ICY,FLXTOICE,CARYSALT,anomiceh,fluxcorh,fluxcorw ORH3F403.253
&,ISX,ISY,WSX_LEADS,WSY_LEADS JT161193.103
ORH1F305.567
C IN: Data assimilation variables and model calendar OFR8F404.11
&,LL_ASS_BTRP,DU_ASS_BTRP,DV_ASS_BTRP,LCAL360 OFR8F404.12
ROW_CTL.370
C OUT: ROW_CTL.373
ROW_CTL.374
&,SURFTEMP,SURFSAL,NEWICE,UCURRENT,VCURRENT ORH3F403.254
ROW_CTL.386
*CALL ARGOCTOT
ORH1F304.136
&, IMT_IPD_MIX,JMT_IPD_MIX,IMT_idr,JMTM1_idr ! For dynamic ODC1F405.421
&, IMT_idr_MIX,JMT_idr_MIX,JMTM1_idr_MIX ! allocation ODC1F405.422
&, IMTIMT_FLT, NTMIN2, NBLOCK, NSLAB ) OOM1F405.395
ROW_CTL.388
IF (L_OHMEAD) THEN ORH1F305.572
C Set land points to RMDI for mead diagnostics ROW_CTL.390
ROW_CTL.391
Do item = 1,O_MAX_TRACERS ROW_CTL.392
IF (sf_mead(item)) THEN ROW_CTL.393
DO J = J_1,J_JMTM1 ORH3F402.271
DO L = 1,LSEGC ROW_CTL.395
land =.true. ROW_CTL.396
DO LD=1,LDIV ROW_CTL.397
IF (ISHT(J,L,LD).NE.0) land=.FALSE. ROW_CTL.398
END DO ROW_CTL.399
IF (land) THEN ROW_CTL.400
DO N=1,4 ROW_CTL.401
pl_count=(L-1)*4+N ROW_CTL.402
IF (Lpl_mead(pl_count,item)) THEN ROW_CTL.403
STASHWORK(SI(210+item,30,im_index) -1 + GRB4F305.448
& (pl_count-1)*(J_JMTM1-J_1+1)+J-O_NS_HALO) = RMDI ORH0F404.1
ENDIF ROW_CTL.406
END DO ROW_CTL.407
END IF ROW_CTL.408
END DO ROW_CTL.409
END DO ROW_CTL.410
ENDIF ROW_CTL.411
END DO ROW_CTL.412
ORH1F305.573
ENDIF ! L_OHMEAD = true ORH1F305.574
C OJG1F400.10
if (sf(diagswitem,30)) call copyodiagn
(imt,jmt,1,.true.,0. OJG1F400.11
&,diagsw,fkmp,stashwork(si(diagswitem,30,im_index))) OJG1F400.12
C JG170893.77
C Blank out non-water points in heating-rate diagnostics OJG2F404.112
C in stash workspace. OJG2F404.113
C JG170893.79
DO ITEM=1,NDTITEM JG170893.80
IF (SF(DTITEM1-1+ITEM,30)) OJG2F404.114
& call maskodiagn
(imt,jmt,km,.true.,0.,fkmp OJG2F404.115
& ,stashwork(SI(DTITEM1-1+ITEM,30,im_index))) OJG2F404.116
ENDDO OJG2F404.117
IF (SF_GMW(4)) call maskodiagn
(imt,jmt,km,.true.,0.,fkmp OJG2F404.118
&,stashwork(si_gmw(4))) OJG2F404.119
IF (SF(210,30)) call maskodiagn
(imt,jmt,km,.true.,0.,fkmp OJG2F404.120
&,stashwork(SI(210,30,im_index))) OJG2F404.121
C OJG2F404.122
C Copy diags for snow and heat into ocean into stash workspace OJG2F404.123
C OJG2F404.124
DO J=1,JMT ORH5F403.14
DO I=1,IMT OJC2F400.106
OCEAN(I,J)=FKMP(I,J).GT.0.1 OJC2F400.107
ENDDO OJC2F400.108
ENDDO OJC2F400.109
K=1 OJC2F400.110
IF (SF(206,30)) OJC2F400.111
&CALL COPYODIAGL(IMT,JMT,K,.TRUE.,0. OJC2F400.112
& ,OCEANHEATFLUX,OCEAN,STASHWORK(SI(206,30,im_index))) OJC2F400.113
IF (SF(207,30)) OJC2F400.114
&CALL COPYODIAGL(IMT,JMT,K,.TRUE.,0. OJC2F400.115
& ,OCEANSNOWRATE,OCEAN,STASHWORK(SI(207,30,im_index))) OJC2F400.116
C OJG2F401.297
C Blank out non-water points in rates of change of salinity OJG2F404.125
C in stash workspace. Note that items 8 and 9 are single-level OJG2F404.126
C fields, the others on all levels. OJG2F404.127
C OJG2F404.128
DO ITEM=1,NDSITEM OJG2F401.298
IF (SF(DSITEM1-1+ITEM,30)) THEN OJG2F401.300
IPOINT=SI(DSITEM1-1+ITEM,30,im_index) OJG2F404.129
IF (ITEM.EQ.7.OR.ITEM.EQ.8) THEN OJG2F404.130
call maskodiagn
(imt,jmt,1,.true.,0.,fkmp OJG2F404.131
& ,stashwork(ipoint)) OJG2F404.132
ELSE OJG2F401.310
call maskodiagn
(imt,jmt,km,.true.,0.,fkmp OJG2F404.133
& ,stashwork(ipoint)) OJG2F404.134
ENDIF OJG2F401.321
ENDIF OJG2F401.322
ENDDO OJG2F401.323
IF (SF_GMW(5)) call maskodiagn
(imt,jmt,km,.true.,0.,fkmp OJG2F404.135
&,stashwork(si_gmw(5))) OJG2F404.136
C ONT1F304.40
C Blank out land points for ocean biology diagnostics ONT1F304.41
C First 2 diagnostics are single-layer. ONT1F304.42
C Rest are full-depth (all levels). ONT1F304.43
C ONT1F304.44
DO ITEM=1,2 ONT1F304.45
IPOINT=SI(BIOITEM1-1+ITEM,30,im_index) GRB4F305.451
IF (SF(BIOITEM1-1+ITEM,30)) THEN ONT1F304.47
DO J=1,JMT ORH5F403.17
DO I=1,SWNCOL ONT1F304.49
IF (INT(FKMP(I,J)).LT.1) STASHWORK(IPOINT)=RMDI ONT1F304.50
IPOINT=IPOINT+1 ONT1F304.51
ENDDO ONT1F304.52
ENDDO ONT1F304.53
ENDIF ONT1F304.54
ENDDO ONT1F304.55
C ONT1F304.56
DO ITEM=3,NBIOITEM ONT1F304.57
IPOINT=SI(BIOITEM1-1+ITEM,30,im_index) GRB4F305.452
IF (SF(BIOITEM1-1+ITEM,30)) THEN ONT1F304.59
DO K=1,KM ONT1F304.60
DO J=1,JMT ORH5F403.18
DO I=1,SWNCOL ONT1F304.62
IF (K.GT.INT(FKMP(I,J))) STASHWORK(IPOINT)=RMDI ONT1F304.63
IPOINT=IPOINT+1 ONT1F304.64
ENDDO ONT1F304.65
ENDDO ONT1F304.66
ENDDO ONT1F304.67
ENDIF ONT1F304.68
ENDDO ONT1F304.69
OFRAF404.35
C--------------------------------------------------------------------- OFRAF404.36
C Calculate rigid lid surface pressure for the case of no stfn OFRAF404.37
C--------------------------------------------------------------------- OFRAF404.38
OFRAF404.39
IF (SF(285,30) .AND. L_ONOCLIN) THEN OFRAF404.40
OFRAF404.41
CALL CALC_RLIDP
( OFRAF404.42
*CALL ARGSIZE
OFRAF404.43
*CALL ARGOCALL
OFRAF404.44
*CALL ARGOINDX
OFRAF404.45
& ICODE,CMESSAGE,ITT,ZU,ZV,PTD,RLSRFP ) OFRAF404.46
OFRAF404.47
! Place data in STASH array removing cyclic points (if present) OFRAF404.48
CALL COPYODIAGN
(IMT,JMT,1,.TRUE.,0.,RLSRFP,FKMP, OFRAF404.49
& STASHWORK(SI(285,30,im_index)) ) OFRAF404.50
OFRAF404.51
ENDIF OFRAF404.52
OLA2F403.102
c Calculate length scale for Visbeck scheme if this is a mixing OLA2F403.103
c timestep. lscale is the min number of grid points needed to find OLA2F403.104
c a value of tmin1 le tmin1_max (set to min 1 max 7). OLA2F403.105
IF ((L_OISOPYCGM.AND.L_OVISBECK.and.mix.eq.1).or. OOM1F405.80
& (L_OISOGM.AND.L_OVISBECK.and.mix.eq.1)) THEN OOM1F405.81
OLA2F403.189
CALL VISBECK_CALC
( ORH4F405.5
& athkdft ORH4F405.6
*CALL ARGOC2DG
ORH4F405.7
&,CST,DXT,DYT ORH4F405.8
&,IMT,JMT,IMT_VIS,JMT_VIS,IMT_IPD,IMTM2,JMT_GLOBAL ORH4F405.9
&,JST,JFIN,J_1,J_JMT,O_MYPE,L_OVISHADCM4 ORH4F405.10
&) ORH4F405.11
OLA2F403.191
OLA2F403.194
ENDIF ORH4F405.12
ORH4F405.13
*IF DEF,MPP ORH0F404.28
! Stash overdimesions UV fields generally - this ORH0F404.29
! must be catered for although this smacks of the tail ORH0F404.30
! (STASH) wagging the dog (the Ocean model). ORH0F404.31
UV_J_DIM = JMT ORH0F404.32
*ELSE ORH0F404.33
UV_J_DIM = JMTM1 ORH0F404.34
*ENDIF ORH0F404.35
c OMB1F404.168
c mask out land points in selected 3D stashed arrays OMB1F404.169
c OMB1F404.170
if (sf(utotitem,30)) OJG5F401.43
& call maskodiagn
(imt,uv_j_dim,km,.true.,0.,fkmq ORH0F404.36
&,stashwork(si(utotitem,30,im_index))) OJG5F401.45
if (sf(utotitem+1,30)) OJG5F401.46
& call maskodiagn
(imt,uv_j_dim,km,.true.,0.,fkmq ORH0F404.37
&,stashwork(si(utotitem+1,30,im_index))) OJG5F401.48
if (sf(tempitem,30)) then OMB1F404.171
call maskodiagn
( imt,jmt,km,.true.,0.,fkmp OMB1F404.172
&, stashwork(si(tempitem,30,im_index)) ) OMB1F404.173
end if ! sf(tempitem,30) OMB1F404.174
OMB1F404.175
C OJG0F400.11
C--------------------------------------------------------------------- OJG0F400.12
C Copy heatsink, the heat 'lost' from the model due to resetting of OJG0F400.13
C the temperature to -1.8 C at the bottom level, to STASH workspace. OJG0F400.14
C--------------------------------------------------------------------- OJG0F400.15
C OJG0F400.16
if (sf(heatsinkitem,30)) call copyodiagn
(imt,jmt,1,.true.,0. OJG0F400.17
&,heatsink,fkmp,stashwork(si(heatsinkitem,30,im_index))) OJG0F400.18
ROW_CTL.414
CALL STASH
(o_sm,o_im,30,STASHWORK, GKR0F305.981
*CALL ARGSIZE
@DYALLOC.4545
*CALL ARGD1
@DYALLOC.4546
*CALL ARGDUMA
@DYALLOC.4547
*CALL ARGDUMO
@DYALLOC.4548
*CALL ARGDUMW
GKR1F401.258
*CALL ARGSTS
@DYALLOC.4549
*CALL ARGPPX
GKR0F305.982
& ICODE,CMESSAGE) @DYALLOC.4553
ROW_CTL.416
RETURN ROW_CTL.417
END ROW_CTL.418
*ENDIF @DYALLOC.4554