*IF DEF,OCEAN @DYALLOC.4029
C ******************************COPYRIGHT****************************** GTS3F400.146
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS3F400.147
C GTS3F400.148
C Use, duplication or disclosure of this code is subject to the GTS3F400.149
C restrictions as set forth in the contract. GTS3F400.150
C GTS3F400.151
C Meteorological Office GTS3F400.152
C London Road GTS3F400.153
C BRACKNELL GTS3F400.154
C Berkshire UK GTS3F400.155
C RG12 2SZ GTS3F400.156
C GTS3F400.157
C If no contract has been raised with this copy of the code, the use, GTS3F400.158
C duplication or disclosure of it is strictly prohibited. Permission GTS3F400.159
C to do so must first be obtained in writing from the Head of Numerical GTS3F400.160
C Modelling at the above address. GTS3F400.161
C ******************************COPYRIGHT****************************** GTS3F400.162
C ****************************ACKNOWLEDGMENT*************************** GTS3F400.163
C This code is derived from Public Domain code (the Cox 1984 Ocean GTS3F400.164
C Model) distributed by the Geophysical Fluid Dynamics Laboratory. GTS3F400.165
C NOAA GTS3F400.166
C PO Box 308 GTS3F400.167
C Princeton GTS3F400.168
C New Jersey USA GTS3F400.169
C If you wish to obtain a copy of the original code that does not have GTS3F400.170
C Crown Copyright use, duplication or disclosure restrictions, please GTS3F400.171
C contact them at the above address. GTS3F400.172
C ****************************ACKNOWLEDGMENT*************************** GTS3F400.173
C GTS3F400.174
!LL GPB8F405.123
!LL Modification History GPB8F405.124
!LL 4.5 17/09/98 Update calls to timer, required because of GPB8F405.125
!LL new barrier inside timer. P.Burton GPB8F405.126
!LL GPB8F405.127
SUBROUTINE TRACER( 1,68@DYALLOC.4030
*CALL ARGSIZE
@DYALLOC.4031
*CALL ARGOCALL
@DYALLOC.4032
*CALL ARGOINDX
ORH7F402.289
& J, ! ##################################################### @DYALLOC.4033
& AICE,HICE,HSNOW, JT161193.368
& HICE_REF, ORH1F305.576
& CARYHEAT,CARYSALT, TRACER.7
& ICY,FLXTOICE, TRACER.8
& SURFTEMP,SURFSAL,NEWICE, TRACER.9
& OCEANHEATFLUX,OCEANSNOWRATE, OJC2F400.136
& WME_ICE, ORH1F305.577
*CALL COCAROWS
TRACER.11
&, @DYALLOC.4034
*CALL COCAWRKA
TRACER.12
&,fluxcorh,fluxcorw OJT0F304.54
+,heatsink ! Heat/W m**-2 lost at the ocean floor OJG0F400.22
+,anom_heat,anom_salt TRACER.17
+,anomiceh ORH1F305.578
&,diagsw OJG1F400.16
&,WSXM,WSYM OLA3F403.276
&,ISX,ISY,WSX_LEADS,WSY_LEADS OLA0F404.43
&,ISXM,ISYM,WSX_LEADSM,WSY_LEADSM OLA0F404.44
&,gnuT,RiT,hT OLA3F403.277
&,L_T,MLD_LARGE,WATERFLUX_ICE,L_OWINDMIX OOM1F405.797
&,L_OBULKMAXMLD,LAMBDA_LARGE OOM1F405.798
&,SWNCOL,DTXADV,DTYADV,DTZADV,DTXDIFF,DTYDIFF,DTZDIFF JG170893.165
&,DTSFC,DTPEN,DTICE,DTMIX,DTCNVC,DTZ,DTFF,DTMED,SF_DT JG170893.166
&,dsxadv,dsyadv,dszadv,dsxdiff,dsydiff,dszdiff OJG2F401.1
&,dssfc,dsice,dsmix,dscnvc,dsz,dsff,dsmed,sf_ds OJG2F401.2
+,PRIM_PROD,ZOO_PROD,PHYTO_GROW,PHYTO_GRAZE,PHYTO_MORT ONT1F304.152
+,EXCRETE_NUT,GROW_NUT,PMORT_NUT,ZMORT_NUT ONT1F304.153
+,PRESP_NUT,REMIN_NUT ONT1F304.154
+,NUT_LIMIT,LIGHT_LIMIT,TEMP_LIMIT ONT1F304.155
+,DETRI_FLUX,NUT_FLUX ONT1F304.156
+,HADV_NUT,VADV_NUT,HDIF_NUT,VDIF_NUT,MIX_NUT,CNVC_NUT ONT1F304.157
+,BIO_NUT ONT1F304.158
+,FIX_NUT ONT1F304.159
+,HADV_PHY,HADV_ZOO,HADV_DET ONT1F304.160
+,SF_BIO ONT1F304.161
+,DIAG_MLD TRACER.23
+ ,PCO2,CO2_FLUX,PCO2_ATM NT071293.32
&,ATMPCO2_ROW OCN1F405.24
+ ,c14to12_atm NT071293.34
+ ,INVADE,EVADE NT071293.36
& ,VTCO2_FLUX,VALK_FLUX OJP0F404.943
+,RHOSRN,RHOSRNA,RHOSRNB OOM1F405.793
&,tmin2 OLA2F403.313
+,esav,rxp,ry,rrzp ORH1F305.579
&,drhob1p,drhob2p OLA0F401.247
&,uisop,visopn,visops,wisop,dtgm,dsgm OJG2F404.11
&,athkdftu, athkdftv, FTARR ORH1F405.468
&,IMT_IPD_NOMIX_ARG ORH1F405.469
&,ATTEND,HUDTEND OOM2F405.291
&,adv_vetiso,adv_vbtiso,times,srho OOM1F405.151
& ) TRACER.31
C TRACER.32
CFPP$ NOCONCUR R ORH5F400.2
C======================================================================= TRACER.33
C === TRACER.34
C TRACER COMPUTES, FOR ONE ROW, THE NT TRACERS, WHERE: === TRACER.35
C J=THE ROW NUMBER === TRACER.36
C === TRACER.37
C======================================================================= TRACER.38
CLL Modification history: SF020993.10
CLL 02/09/93: correct implicit advection/diffusion code: (FOREMAN) SF020993.11
CLL 01/09/94: (v3.4) Include comdeck TYPOCLWK keeping workspace ORH1F304.95
CLL arrays local to this routine. R. Hill ORH1F304.96
CLL 3.4 04/08/94 Split sea ice and SST/SSS Haney forcing and remove OJT0F304.56
CLL sea ice depth flux correction. (JFT) OJT0F304.57
! Vn3.4 31/8/94 Use upwind differences for tracer advection (Taylor) ONT2F304.1
! Vn3.4 31/8/94 Switch off Fourier Filtering for tracers (Taylor) ONT2F304.2
! Vn3.4 31/8/94 Simplify *DEF logic for implicit vertical advection ONT2F304.3
! and skipland (Taylor) ONT2F304.4
! Vn3.4 31/08/94 Added Biological Model diagnostics (Nick Taylor) ONT2F304.5
C TRACER.39
! Vn3.4 31/8/94 Weight solar radiation thru' ice by ONT3F304.1
! leads fraction. (Nick Taylor) ONT3F304.2
CLL 4.0 7.7.95 Add arguments to SFCADD, FREEZEUP and REFREEZE OJG0F400.21
CLL Record salinity * surface water flux as DIAGSW OJG0F401.3
! 3.5 01/02/95 Remove *IF DEF dependency. R. Hill ORH1F305.581
! 4.0 Change CARYSALT from increment to rate. J.F.Crossley ORH1F403.94
! 4.0 Correct treatment of non-pen. heatflux and snowfall OJC2F400.137
! for models with ice dynamics. J.F.Crossley OJC2F400.138
CLL 4.1 23.5.96 J.M.Gregory Diags for rate of change of salinity OJG2F401.3
CLL 4.1 22.5.96 J.M.Gregory If heat flux correction cannot be OJG0F401.4
CLL applied because it would freeze layer 1, record it in HEATSINK OJG0F401.5
CLL 4.3 8.11.96 J.M.Gregory Add alternative schemes IPDCOFCO OJG0F403.6
CLL and COXCNVC, as used in HADCM2 OJG0F403.7
! 4.3 17/03/97 Allow filtering to be assisted by all pes for mpp ORH1F403.95
! load balancing purposes. R. Hill ORH1F403.96
CLL 4.4 25.9.97 J.M.Gregory Multiply diagnostics for rates of OJG2F404.1
CLL change of temperature and salinity by 1e9 for backward OJG2F404.2
CLL compatibility with the C90, where this was necessary to avoid OJG2F404.3
CLL loss of accuracy from dump packing. Introduce a rate of OJG2F404.4
CLL change of salinity from the GM scheme. Provide rates of change OJG2F404.5
CLL from advection (x+y+z) for temperature and salinity, reusing OJG2F404.6
CLL the combined Z-ADV+Z-DIFF diags, which are now redundant. OJG2F404.7
CLL Correct the dtheta/dt and dS/dt diags for GM and the vertical OJG2F404.8
CLL diffusion of salinity. OJG2F404.9
C OJG2F404.10
! 4.4 10/09/97 Remove all references to SKIPLAND code. R.Hill ORH7F404.6
CLL 4.4 15/06/97 Add new vertical velocity calculation for use with ORL1F404.635
CLL the free surface solution R.Lenton ORL1F404.636
CLL 4.5 12/08/97 Changed the logical used to work out the flux OSI1F405.17
CLL across the southern boundary. Added the code for OSI1F405.18
CLL the eastern boundary C.G. Jones OSI1F405.19
CLL 4.5 3.11.98 Diagnostic calculations for Med/Hud outflow OOM2F405.288
CLL changed. CONVADJ called at Med outflow point OOM2F405.289
CLL M. Roberts OOM2F405.290
CLL 4.5 10/11/98 Enable alternative isopycnal diffusion routines OOM1F405.149
CLL (ISOPYC_M and ISOFLUX) to be called. M. Roberts OOM1F405.150
! 4.5 4/6/98 Replace calculation of advection source term with OSY1F405.74
! a call to new routine ADV_SOURCE to enable use of 3rd OSY1F405.75
! order QUICK scheme. Redefine variables FUW, FVN, FVST to OSY1F405.76
! be equal to cell face velocities with no grid-spacing OSY1F405.77
! factors etc. as previously. D.Storkey OSY1F405.78
! OSY1F405.79
IMPLICIT NONE RH011293.148
C--------------------------------------------------------------------- TRACER.40
C DEFINE GLOBAL DATA TRACER.41
C--------------------------------------------------------------------- TRACER.42
C TRACER.43
*CALL OARRYSIZ
ORH6F401.28
*CALL TYPSIZE
@DYALLOC.4036
*CALL TYPOINDX
PXORDER.49
*CALL TYPOCALL
@DYALLOC.4037
*CALL UMSCALAR
TRACER.46
*CALL CNTLOCN
ORH1F305.582
*CALL OTIMER
ORH1F305.584
*CALL OTRACPNT
OJP0F404.722
C----------------------------------------------------------------------- TRACER.50
C DEFINE ARGUMENT LIST TRACER.51
C----------------------------------------------------------------------- TRACER.52
C TRACER.53
*CALL COCTROWS
TRACER.54
*CALL COCTWRKA
TRACER.55
REAL TRACER.57
& TIMESTEP(KM) ! Depth dependent timestep OJP0F404.723
&, GAMMA_DZ(KM) ! Level thickness * gamma factor OJP0F404.724
REAL OJP0F404.725
+ fluxcorh (IMT_FLX) ! IN Heat flux correction -sea (W/m2) ORH1F305.585
+, fluxcorw (IMT_FLX) ! IN Water flux correction (kg/m2/s) ORH1F305.586
REAL TRACER.63
+ anom_heat (IMT_OHY) ! OUT Anomalous heat flux (W/m2) ORH1F305.587
+, anom_salt (IMT_OHY) ! OUT Anomalous P-E (kg/m2/s) ORH1F305.588
+, anomiceh (IMT_IHY) ! OUT Anomalous heat flux (w/m2) due ORH1F305.589
+ ! to relaxing sea ice to climatology. ORH1F305.590
+,anom_ice_salt(IMT_IHY)! OUT PME flux due to forcing sea ice back ORH1F305.591
+ ! to climatology. ORH1F305.592
C ORH1F305.593
REAL NT091293.40
& RTPIG(IMT,KM) ! Square root of phytoplankton OJP0F404.726
& ! pigment conc. ORH1F305.595
&, ETA_BIO(IMT,KM) ! Light extinction coefficient, biological OJP0F404.727
& ! light model in 1/m OJP0F404.728
INTEGER KFIX_BIO ! Depth index to which to do biological OJP0F404.729
! light model calculations OJP0F404.730
C Diagnostic of salinity * surface water flux / density OJG1F400.17
REAL diagsw(imt,jmt) OJG1F400.18
JG170893.167
C Full-field heating-rate diagnostics JG170893.168
INTEGER SWNCOL ! number of columns in a row JG170893.169
&,ISSW,IESW ! 1st and last stashwork columns JG170893.170
&, IMT_IPD_NOMIX_ARG ! Argument passed in for dynamic alloc ORH1F305.599
ORH1F305.601
REAL DTXADV(SWNCOL,JMT,KM) ! zonal heat divergence JG170893.171
&,DTYADV(SWNCOL,JMT,KM) ! meridional heat divergence JG170893.172
&,DTZADV(SWNCOL,JMT,KM) ! vertical heat divergence JG170893.173
&,DTXDIFF(SWNCOL,JMT,KM) ! zonal heat diffusion JG170893.174
&,DTYDIFF(SWNCOL,JMT,KM) ! meridional heat diffusion JG170893.175
&,DTZDIFF(SWNCOL,JMT,KM) ! vertical heat diffusion JG170893.176
&,DTSFC(SWNCOL,JMT,KM) ! non-penetrative surface heat, ex ice JG170893.177
&,DTPEN(SWNCOL,JMT,KM) ! penetrative surface heat JG170893.178
&,DTICE(SWNCOL,JMT,KM) ! heat fluxes associated with ice JG170893.179
&,DTMIX(SWNCOL,JMT,KM) ! mixed layer JG170893.180
&,DTCNVC(SWNCOL,JMT,KM) ! convection JG170893.181
&,DTZ(SWNCOL,JMT,KM) ! total heat divergence (x+y+z) OJG2F404.13
&,DTFF(SWNCOL,JMT,KM) ! Fourier filtering JG170893.183
&,DTMED(SWNCOL,JMT,KM) ! Mediterranean outflow JG170893.184
&,C2DTTSK ! 2 * timestep at this level JG170893.185
LOGICAL SF_DT(*) JG170893.186
C Each dtheta/dt diagnostic has a stash flag in SF_DT thus: OJG2F401.4
C 1 DTHETA/DT FROM X-ADVECTION OJG2F401.5
C 2 DTHETA/DT FROM Y-ADVECTION OJG2F401.6
C 3 DTHETA/DT FROM Z-ADVECTION OJG2F401.7
C 4 DTHETA/DT FROM X-DIFFUSION OJG2F401.8
C 5 DTHETA/DT FROM Y-DIFFUSION OJG2F401.9
C 6 DTHETA/DT FROM Z-DIFFUSION OJG2F401.10
C 7 DTHETA/DT FROM SFC. FLUXES OJG2F401.11
C 8 DTHETA/DT FROM PEN. SOLAR OJG2F401.12
C 9 DTHETA/DT FROM ICE PHYSICS OJG2F401.13
C 10 DTHETA/DT FROM ML PHYSICS OJG2F401.14
C 11 DTHETA/DT FROM CONVECTION OJG2F401.15
C 12 DTHETA/DT FROM ADVECTION OJG2F404.14
C 13 DTHETA/DT FROM FOURIER FILT OJG2F401.17
C 14 DTHETA/DT FROM ROBERT FILT OJG2F401.18
C 15 DTHETA/DT FROM MED. OUTFLOW OJG2F401.19
REAL OCEANHEATFLUX(IMT),OCEANSNOWRATE(IMT) OOM1F405.336
C Fields of rates of change of salinity OJG2F401.20
REAL DSXADV(SWNCOL,JMT,KM) ! zonal salinity divergence OJG2F401.21
&,DSYADV(SWNCOL,JMT,KM) ! meridional salinity divergence OJG2F401.22
&,DSZADV(SWNCOL,JMT,KM) ! vertical salinity divergence OJG2F401.23
&,DSXDIFF(SWNCOL,JMT,KM) ! zonal salinity diffusion OJG2F401.24
&,DSYDIFF(SWNCOL,JMT,KM) ! meridional salinity diffusion OJG2F401.25
&,DSZDIFF(SWNCOL,JMT,KM) ! vertical salinity diffusion OJG2F401.26
&,DSSFC(SWNCOL,JMT) ! non-pen surface salinity, ex ice OJG2F401.27
&,DSICE(SWNCOL,JMT) ! salinity fluxes associated with ice OJG2F401.28
&,DSMIX(SWNCOL,JMT,KM) ! mixed layer OJG2F401.29
&,DSCNVC(SWNCOL,JMT,KM) ! convection OJG2F401.30
&,DSZ(SWNCOL,JMT,KM) ! total salinity divergence (x+y+z) OJG2F404.15
&,DSFF(SWNCOL,JMT,KM) ! Fourier filtering OJG2F401.32
&,DSMED(SWNCOL,JMT,KM) ! Mediterranean outflow OJG2F401.33
LOGICAL SF_DS(*) OJG2F401.34
C Each ds/dt diagnostic has a stash flag in SF_DS thus: OJG2F401.35
C 1 DS/DT FROM X-ADVECTION OJG2F401.36
C 2 DS/DT FROM Y-ADVECTION OJG2F401.37
C 3 DS/DT FROM Z-ADVECTION OJG2F401.38
C 4 DS/DT FROM X-DIFFUSION OJG2F401.39
C 5 DS/DT FROM Y-DIFFUSION OJG2F401.40
C 6 DS/DT FROM Z-DIFFUSION OJG2F401.41
C 7 DS/DT FROM SFC. FLUXES OJG2F401.42
C 8 DS/DT FROM ICE PHYSICS OJG2F401.43
C 9 DS/DT FROM ML PHYSICS OJG2F401.44
C 10 DS/DT FROM CONVECTION OJG2F401.45
C 11 DS/DT FROM ADVECTION OJG2F404.16
C 12 DS/DT FROM FOURIER FILT OJG2F401.47
C 13 DS/DT FROM ROBERT FILT OJG2F401.48
C 14 DS/DT FROM MED. OUTFLOW OJG2F401.49
C ORH1F305.602
C ONT1F304.164
C DIAGNOSTICS ONT1F304.165
C ONT1F304.166
C Integrated production ONT1F304.167
REAL PRIM_PROD(SWNCOL_BIO,JMT_BIO) ORH1F305.603
! Primary production (gross) ORH1F305.604
C ! (gC/m2/day) -Integrated over top 200m ONT1F304.169
REAL ZOO_PROD(SWNCOL_BIO,JMT_BIO) ORH1F305.605
! Zooplankton production (gross) ORH1F305.606
C ! Totalled over top 200m (gC/m2/day) ONT1F304.171
C Growth limitation terms ONT1F304.172
REAL NUT_LIMIT(SWNCOL_BIO,JMT_BIO,KM_BIO) ! Phytoplankton growth ORH1F305.607
REAL LIGHT_LIMIT(SWNCOL_BIO,JMT_BIO,KM_BIO) ! limitation terms ORH1F305.608
REAL TEMP_LIMIT(SWNCOL_BIO,JMT_BIO,KM_BIO) ORH1F305.609
C ONT1F304.176
C Phyto specific rates ONT1F304.177
REAL PHYTO_GROW (SWNCOL_BIO,JMT_BIO,KM_BIO) ORH1F305.610
! Phyto growth specific rate ORH1F305.611
REAL PHYTO_GRAZE(SWNCOL_BIO,JMT_BIO,KM_BIO) ORH1F305.612
! Phyto grazing specific rate ORH1F305.613
REAL PHYTO_MORT (SWNCOL_BIO,JMT_BIO,KM_BIO) ORH1F305.614
! Phyto mortality spec. rate ORH1F305.615
C ! Specific rates in (day)-1 ORH1F305.616
C Detrital sinking ONT1F304.182
REAL DETRI_FLUX (SWNCOL_BIO,JMT_BIO,KM_BIO) ORH1F305.617
! Detrital sinking flux through ORH1F305.618
C ! base of layer (mMol-N/m2/day). ORH1F305.619
C ONT1F304.185
C Terms in Nitrate balance (all in units mMol-N/m3/day) ONT1F304.186
REAL EXCRETE_NUT(SWNCOL_BIO,JMT_BIO,KM_BIO) ORH1F305.620
& ! Nutrient excretion rate ORH1F305.621
& ,GROW_NUT(SWNCOL_BIO,JMT_BIO,KM_BIO) ORH1F305.622
& ! Loss rate of N due to phyto ORH1F305.623
& ,PMORT_NUT(SWNCOL_BIO,JMT_BIO,KM_BIO) ORH1F305.624
& ! Gain due to phyto death ORH1F305.625
& ,ZMORT_NUT(SWNCOL_BIO,JMT_BIO,KM_BIO) ORH1F305.626
& ! Gain due to zoo death ORH1F305.627
& ,PRESP_NUT(SWNCOL_BIO,JMT_BIO,KM_BIO) ORH1F305.628
& ! Gain due to phyto resp ORH1F305.629
& ,REMIN_NUT(SWNCOL_BIO,JMT_BIO,KM_BIO) ORH1F305.630
& ! Gain due to detrtus remin. ORH1F305.631
C ONT1F304.193
C Rate of change of Nitrate due to physical processes ONT1F304.194
C (units: mMols-N/m3/day) ONT1F304.195
REAL HADV_NUT(SWNCOL_BIO,JMT_BIO,KM_BIO) ! Horizontal advection ORH1F305.632
& ,VADV_NUT(SWNCOL_BIO,JMT_BIO,KM_BIO) ! Vertical advection ORH1F305.633
& ,HDIF_NUT(SWNCOL_BIO,JMT_BIO,KM_BIO) ! Horizontal diffusion ORH1F305.634
& ,VDIF_NUT(SWNCOL_BIO,JMT_BIO,KM_BIO) ! Vertical diffusion ORH1F305.635
& ,MIX_NUT(SWNCOL_BIO,JMT_BIO,KM_BIO) ! Mixed layer model ORH1F305.636
& ,CNVC_NUT(SWNCOL_BIO,JMT_BIO,KM_BIO) ! Convection ORH1F305.637
& ,BIO_NUT(SWNCOL_BIO,JMT_BIO,KM_BIO) ! BIOLOGICL MODEL (net) ORH1F305.638
& ,FIX_NUT(SWNCOL_BIO,JMT_BIO,KM_BIO) ORH1F305.639
! Reset of Nitrates from neg. values ORH1F305.640
C ONT1F304.204
C Rate of change of Phyto,Zoo & Detritus due to horiz advection ONT1F304.205
C (units: mMols-N/m3/day) ONT1F304.206
REAL HADV_PHY(SWNCOL_BIO,JMT_BIO,KM_BIO) ORH1F305.641
& ,HADV_ZOO(SWNCOL_BIO,JMT_BIO,KM_BIO) ORH1F305.642
& ,HADV_DET(SWNCOL_BIO,JMT_BIO,KM_BIO) ORH1F305.643
ONT1F304.210
REAL NUT_FLUX (SWNCOL_BIO,JMT_BIO,KM_BIO) ORH1F305.644
! Vertical flux of nutrient ORH1F305.645
C ! through base of layer (positive=flux into ONT1F304.212
C ! layer, negative=flux out). (mMol-N/m2/day). ONT1F304.213
C ONT1F304.214
LOGICAL SF_BIO(*) ONT1F304.215
C ONT1F304.218
C Workspace, intercepted for full-field diagnostics ONT1F304.219
C ONT1F304.220
REAL WNUT_FLUX(IMT_BIO,KM_BIO),WHADV_NUT(IMT_BIO,KM_BIO) ORH1F305.646
& ,DNWORK(IMT_BIO,KM_BIO) ORH1F305.647
+ ,WMIX_NUT(IMT_BIO,KM_BIO),WCNVC_NUT(IMT_BIO,KM_BIO) ORH1F305.648
& ,WBIO_NUT(IMT_BIO,KM_BIO) OJP0F404.948
C ORH1F305.650
C ONT1F304.225
C JG170893.187
C ORH1F305.651
REAL NT071293.39
+ PCO2 (IMT_CAR) ! OUT Partial pressure CO2 (ppm) ORH1F305.652
+ ,CO2_FLUX (IMT_CAR) ! OUT Air-sea flux of CO2 (Mole/m2/yr) ORH1F305.653
& ,VTCO2_FLUX (IMT_CAR) ! OUT Virtual carbon flux OJP0F404.944
& ,VALK_FLUX (IMT_CAR) ! OUT Virtual alkalinity flux OJP0F404.945
+ ,INVADE (IMT_CAR) ! OUT Invasion of CO2 (Mole/m2/yr) ORH1F305.654
+ ,EVADE(IMT_CAR) ! OUT Evasion of CO2 (Mole/m2/yr) ORH1F305.655
+ ,PCO2_ATM ! IN Atmosphere part. pres. CO2 (ppm) ORH1F305.656
+ ,c14to12_atm ! IN Atmosphere ratio of c14/c12 ORH1F305.657
& ,ATMPCO2_ROW(IMT_CAR) ! IN atmospheric CO2 conc (ppmv) OCN1F405.25
REAL TRACER.78
+ rhosrn(IMT_RIC,KM_RIC)! IN Density on row J as calculated by ORH1F305.658
+ ,RHOSRNA(IMT_RIC,KM_RIC+1),RHOSRNB(IMT_RIC,KM_RIC+1) OOM1F405.794
C ! IN DENSITY ON ROW J AS CALCULATED BY STATEC. OOM1F405.795
C ! PASSED FROM CLINIC TO SAVE REPEAT CALL TO STATEC. OOM1F405.796
C STATED. Passed from CLINIC to save TRACER.80
C repeat call to STATED. TRACER.81
+,esav(IMT_IPD,KM_IPD,NT_IPD) ORH1F305.659
! INOUT Used to save e(I,K,2) in IPDFLXCL ORH1F305.660
C TRACER.86
REAL OLA0F404.45
& WSXM(IMT),WSYM(IMT) ! IN wind stress on row j-1 OLA0F404.46
&,RiT(imt_gnu,km_gnu-1) ! OUT Richardson no on T grid OLA0F404.47
&,hT(imt_qlarge) ! OUT Depth Large scheme applied to (T grid) OLA0F404.48
&,gnuT(imt_gnu,km_gnu-1) ! OUT Vertical viscosity coeff, OLA0F404.49
! bottom of gridbox on T grid OLA0F404.50
C TRACER.88
C DECLARE VARIABLES REQUIRED FOR INTERACTIONS WITH SEA-ICE. TRACER.89
C TRACER.90
LOGICAL ICY(IMT_ICE), ! IN TRUE WHERE SEA-ICE EXISTS. ORH1F305.661
+ NEWICE(IMT_ICE) ! OUT TRUE WHERE ICE DOES NOT YET ORH1F305.662
+ ! EXIST BUT IS ABOUT TO FORM. ORH1F305.663
C TRACER.94
REAL TRACER.95
+ AICE(IMT_ICE), ! INOUT Fractional ice concentration. ORH1F305.664
+ HICE(IMT_ICE), ! INOUT Ice depth averaged over grid box. ORH1F305.665
+ HSNOW(IMT_ICE), ! INOUT Snow depth over ice frctn of grid box ORH1F305.666
+ HICE_REF(IMT_IHY), ! IN CLIMATOLOGICAL ice depth. ORH1F305.667
+ WMEALT(IMT_PIIC_MIX), ! WME WITH ZEROS INSERTED AT ICE POINTS ORH1F305.668
+ DRHO_ICE(IMT_ICE_MIX), ! DENSITY CHANGE AT THE SURFACE DUE TO ORH1F305.669
+ ! ICE-OCEAN FLUXES. FOR MIXED LAYER MODEL. RH011293.196
C ORH1F305.670
+ FLXTOICE(IMT_ICE), ORH1F305.671
+ ! IN PRIMARY HEAT FLUX FROM OCEAN TO ICE,IN W/M**2 ORH1F305.672
+ CARYHEAT(IMT_ICE), ORH1F305.673
+ ! INOUT ON ENTRY CONTAINS MINOR CONTRIBUTIONS TO ORH1F305.674
+ ! THE OCEAN-TO-ICE HEAT FLUX. THESE ARE POSITIVE TRACER.106
+ ! FOR HEAT ENTERING THE OCEAN IE SIGN CONVENTION TRACER.107
+ ! OPPOSITE TO FLXTOICE. ON EXIT CONTAINS THE -VE TRACER.108
+ ! HEAT FLUX IN W.M-2 DUE TO RESETTING OCEAN LEVEL TRACER.109
+ ! 1 TEMPERATURES WHICH FALL BELOW -1.8 CELSIUS. TRACER.110
+ CARYSALT(IMT_ICE), ORH1F305.675
+ ! IN Rate of salinity increase due to OJC0F400.17
+ ! ice-snow processes. OJC0F400.18
+ WME_ICE(IMT_IDR), ODC1F405.423
+ ! IN Mixing energy under sea ice including wind ORH1F305.678
+ ! and ice-ocean stress. JT161193.378
+ SURFTEMP(IMT_ICE), ! OUT TEMP OF THE TOP LAYER AT START OF STEP. ORH1F305.679
+ SURFSAL(IMT_ICE) ! OUT TRUE TOP LAYER SALIN AT START OF STEP ORH1F305.680
+,HEATSINK(IMT) ! OUT Heat 'lost' by setting T to TFREEZE OJG0F401.2
+ ! at ocean floor. OJG0F400.24
C TRACER.129
REAL OLA0F404.51
& ISX(IMT_idr) ! IN Stress under sea ice fraction, row j ODC1F405.424
&,ISY(IMT_idr) ! IN Stress under sea ice fraction, row j ODC1F405.425
&,WSX_LEADS(IMT_idr) ! IN Stress under leads fraction, row j ODC1F405.426
&,WSY_LEADS(IMT_idr) ! IN Stress under leads fraction, row j ODC1F405.427
&,ISXM(IMT_idr) ! IN Stress under sea ice fraction, row j-1 ODC1F405.428
&,ISYM(IMT_idr) ! IN Stress under sea ice fraction, row j-1 ODC1F405.429
&,WSX_LEADSM(IMT_idr) ! IN Stress under leads fraction, row j-1 ODC1F405.430
&,WSY_LEADSM(IMT_idr) ! IN Stress under leads fraction, row j-1 ODC1F405.431
C NT071293.50
C Declare variables required for the carbon cycle model NT071293.51
REAL NT071293.52
+ REK0 (IMT_CAR) ! Solubility of CO2 (Henrys Law const) ORH1F305.681
+, RG1 (IMT_CAR) ! Products etc of the Equilibrium ORH1F305.682
+, RG2 (IMT_CAR) ! constants, which are used for ORH1F305.683
+, RG3 (IMT_CAR) ! the calculation of PCO2 ORH1F305.684
+, REK (IMT_CAR) ORH1F305.685
C NT071293.58
REAL @DYALLOC.4039
+ rxp(IMT_IPD,KM_IPD) ! delta-rho in x dirn. } ORH1F305.686
+ ,ry (IMT_IPD,KM_IPD) ! delta-rho in y dirn. } ORH1F305.687
+ ,rrzp(IMT_IPD,KMP1_IPD) ! delta-rho in z dirn. } ORH1F305.688
C These variables are used to compute the extrapolated density at the OLA0F401.249
C surface and bottom OLA0F401.250
REAL drhob1p(IMT_GM),drhob2p(IMT_GM,2) OLA0F401.251
C Declare the 'eddy induced transport velocities' for GM OLA0F401.252
REAL UISOP(IMT_GM,KM_GM) ! u* isopycnal velocity OLA0F401.253
&, VISOPN(IMT_GM,KM_GM) ! v* at north face of T gridbox OLA0F401.254
&, VISOPS(IMT_GM,KM_GM) ! v* at south face of T gridbox OLA0F401.255
&, WISOP(IMT_GM,KMP1_GM) ! w* at top face of T gridbox OLA0F401.256
&, DTGM(IMT,KM) ! Total dT/dt from GM OOM1F405.152
&, DSGM(IMT,KM) ! Total dsalinity/dt from GM OOM1F405.153
c Declare thickness diffusion coeff for Visbeck scheme OLA2F403.315
REAL OLA2F403.316
& athkdftu(IMT_VIS,JMT_VIS) ! thickness diffusion coeff. (u* pts) OLA2F403.317
&,athkdftv(IMT_VIS,JMT_VIS) ! thickness diffusion coeff. (v* pts) OLA2F403.318
C ORH1F305.689
REAL DRHO_SOL(IMT_MIX) ORH1F305.690
& ,DRHO_NET(IMT_MIX) ! Surface density change (ML) ORH1F305.691
& ,WORKA(IMT_MIX) ORH1F305.692
& ,WORKB(IMT_MIX) ! Workspace for STATED (ML) ORH1F305.693
C ORH1F305.694
REAL QFLUX(IMT_OHY),SFLUX(IMT_OHY) ORH1F305.695
! Surface ht & sal flxes incl Haney ORH1F305.696
C ORH1F305.697
REAL BICE(IMT_PIC) ! Set to 0.0 if climatol. ice pt., 1.0 else ORH1F305.698
* ,QFLUXALT(IMT_PIIC) ORH1F305.699
& ! HTN masked out to zero at climat. ice pts. ORH1F305.700
* ,PMEALT(IMT_PIC) ! PME masked out to zero at climat. ice pts. ORH1F305.701
C ORH1F305.702
* ,SOLALT(IMT_PIIC) ! SOL masked out to zero at climat. ice pts ORH1F305.703
* ,DRHO_PSEU(IMT_PIC_MIX) ! Sfce. density change due to pseudo-ice ORH1F305.704
& ,SOL_PEN_LOC(IMT,0:KM) ! 2D array of SOL_PEN local to OJP0F404.731
& ! this routine. OJP0F404.732
& ,SOL_PEN_BIO(IMT,0:KM) ! 2D array of SOL_PEN, resulting OJP0F404.733
& ! from biological light model. OJP0F404.734
& ,DELPSL_LOC(IMT,0:KM) ! 2D array of DELPSL local to OJP0F404.735
& ! this routine. OJP0F404.736
C ORH1F305.711
REAL TRACER.151
+ gnu(IMT_GNU,KM_GNU) ! Vert diffusion coefficient (cm2/s) ORH1F305.712
+ ,fk1(IMT_IPD,KM_IPD,3) ! } 1st/2nd/3rd rows of diffusn tensor ORH1F305.713
+ ,fk2(IMT_IPD,KM_IPD,3) ! } for point (I,J,K) (cm2/s) ORH1F305.714
+ ,fk3(IMT_IPD,1:KM_IPD,3) ! } Eqn. 1.8 ORH1F305.715
ORH1F305.716
C Define arrays which are local to this subroutine and which ORH1F305.717
C contain values dependent on the model configuration in use. ORH1F305.718
REAL ORH1F305.719
& FK3_OR_GNU(IMT,KM) ! FK3 or GNU ORH1F305.720
&, HTN_OR_QFLALT(IMT) ! HTN or QFLUXALT ORH1F305.721
&, PME_OR_PMEALT(IMT) ! PME or PMEALT ORH1F305.722
&, SOL_OR_SOLALT(IMT) ! SOL or SOLALT ORH1F305.723
&, MLD_MIX(IMT) ORH1F305.724
&, WME_MIX(IMT) ORH1F305.725
C variables for Gent & McW 'eddy induced transport velocities' OLA0F401.258
REAL WISOPT(IMT_GM,KMP1_GM) OLA0F401.259
REAL UTxiso(IMT_GM,KM_GM),VTyiso(IMT_GM,KM_GM), OLA0F401.260
& WTziso(IMT_GM,KM_GM) ! Heating rates for GM scheme OLA0F401.261
C TRACER.191
C This sets the mixed layer depth to zero when using isopycnal TRACER.192
C diffusion without the mixed layer code (currently not allowed TRACER.193
C under the UM system). TRACER.194
C TRACER.195
REAL DIAG_MLD(IMT_NOIPD_MIX) ! OUT ORH1F305.729
ORH1F305.730
C ORW1F400.55
C Dummy mixed layer depth, currently set to 50m. Isopycnal ORW1F400.56
C diffusion is switched off down to this depth ORW1F400.57
C unless the old scheme is used (L_SLOPEMAX) OJG0F403.8
C ORW1F400.58
REAL DUMMY_MLD(IMT) ORW1F400.59
C ORH1F304.97
*CALL TYPOCLWK
ORH1F304.98
C ORH1F304.99
C TRACER.199
C Workspace for full-field heating-rates and rates of change of OJG2F401.50
C salinity. These WD* variables have one row and correspond to OJG2F401.51
C the IMT,JMT[,KM] D* variables which contain the final OJG2F401.52
C diagnostic output. There are no WDS* variables for advection OJG2F401.53
C and diffusion because the WDT* variables can be used instead, OJG2F401.54
C as that portion of the computation takes place within a loop OJG2F401.55
C over tracers. OJG2F401.56
C JG170893.189
REAL WDTXADV(IMT,KM),WDTYADV(IMT,KM),WDTZADV(IMT,KM) JG170893.190
&,WDTXDIFF(IMT,KM),WDTYDIFF(IMT,KM) JG170893.191
&,WDTZDIFFV(IMT,KM),WDTZDIFFI(IMT,KM) JG170893.192
&,WDTSFC(IMT,KM),WDTPEN(IMT,KM),WDTICE(IMT,KM) JG170893.193
&,WDTMIX(IMT,KM),WDTCNVC(IMT,KM) JG170893.194
&,WDTZ(IMT,KM),WDTFF(IMT,KM),WDTMED(IMT,KM) JG170893.195
&,DTWORK(IMT,KM) JG170893.196
&,WDSSFC(IMT),WDSICE(IMT) OJG2F401.57
&,WDSMIX(IMT,KM),WDSCNVC(IMT,KM) OJG2F401.58
&,WDSZ(IMT,KM),WDSFF(IMT,KM),WDSMED(IMT,KM) OJG2F401.59
&,DSWORK(IMT,KM) OJG2F401.60
C RH011293.149
C DECLARE REAL NUMBER VARIABLES RH011293.150
C RH011293.151
REAL BOXVOL, ! Volume of a grid box RH011293.152
& BBTJ, ! Coeff used in horizontal mixing of T RH011293.153
& CCTJ, ! Coeff used in horizontal mixing of T RH011293.154
& DDTJ, ! Coeff used in horizontal mixing of T RH011293.155
& FX, ! Temporary value RH011293.156
& FXA, ! Temporary value RH011293.157
& FXB, ! Temporary value RH011293.158
& FACTOR ! Temporary intermetiate result RH011293.159
C RH011293.160
C DECLARE INTEGER VARIABLES RH011293.161
C RH011293.162
INTEGER I, ! Grid point index (Zonal) RH011293.163
& J, ! Grid point index (Meridional) RH011293.164
& K, ! Grid point index (Vertical TOP DOWN) RH011293.165
& KM1, ! K - 1 RH011293.175
& KMP, ! Tot no of vert levels at row J+1 RH011293.176
& KP1, ! K + 1 RH011293.177
& KP2, ! K + 2 RH011293.178
& KZ, ! Number of sea levels at point RH011293.181
& M, ! Tracer indicator RH011293.182
& N, ! Index used during grav instblty adjstmnt RH011293.183
& II, ! Loop control for U,V processing RH011293.187
& MXP ! Euler backward pass timestep flag RH011293.191
& ,KOFF ! offset used in divergence calculation ORL1F404.638
ORH1F304.89
REAL OLA2F403.319
& ri(imt_vis) ! depth averaged Richardson number for Visbeck OLA2F403.320
&, tmin2(imt_vis) ! Time scale ^-2 for Visbeck scheme OLA2F403.321
INTEGER OLA2F403.322
& bot ! used to calc ri,depth averaged Richardson number OLA2F403.323
C ORH1F305.731
REAL FTARR(IMTIMT_FLT) ! Coeffs used in filtering routine ORH1F405.470
ORH1F305.733
REAL DIAG_MLD_LOC(IMT_IPD_NOMIX_ARG) ! Local version of DIAG_MLD ORH1F305.734
! used when L_OISOPYC = t ORH1F305.735
! and L_OMIXLAY = f. ORH1F305.736
C diffusion coefficients used in the isopycnal diffusion OOM1F405.154
C of the MOM code - defined in subroutine ISOPYC_M OOM1F405.155
REAL Ai_ez(imt_iso,km_iso,0:1,0:1),Ai_bx(imt_iso,km_iso,0:1,0:1), OOM1F405.156
& Ai_by(imt_iso,km_iso,0:1,0:1),Ai_nz(imt_iso,km_iso,0:1,0:1), OOM1F405.157
& K11(imt_iso,km_iso),K22(imt_iso,km_iso),K33(imt_iso,km_iso) OOM1F405.158
OOM1F405.159
C GM variables for Griffies implementation OOM1F405.160
REAL adv_vetiso(imt_iso,km_iso), OOM1F405.161
& adv_vbtiso(imt_iso,0:km_iso),adv_fbiso(imt_iso,0:km_iso) OOM1F405.162
OOM1F405.163
C variables for Gent & McW MOM 'eddy induced transport velocities' OOM1F405.164
REAL UTxiso_mom(IMT_GMM,KM_GMM),VTyiso_mom(IMT_GMM,KM_GMM), OOM1F405.165
& WTziso_mom(IMT_GMM,KM_GMM) OOM1F405.166
REAL times(imt),rhoz,srho(imt,km) OOM1F405.167
OOM1F405.168
C OJG2F404.17
real giga OJG2F404.18
parameter(giga=1e9) ! Constant for multiplying diagnostics OJG2F404.19
LOGICAL L_BOOTSTRAP ! =.false. For call to ADV_SOURCE OSY1F405.80
C OJG2F404.20
REAL OOM1F405.799
& MLD_LARGE(IMT) ! IN MIXED LAYER DEPTH (CM) OOM1F405.800
&, WATERFLUX_ICE(IMT) ! IN WATER FLUX FROM ICE (KG/M2/S) ,ROW J OOM1F405.801
&, L_T(IMT) ! OUT MONIN OBUKHOV LENGTH LARGE SCHEME (TRACER) OOM1F405.802
&, LAMBDA_LARGE ! IN FOR CALCULATING MINIMUM MLD OOM1F405.803
&, CGFLUX(IMT,KM,NT) ! TRACER COUNTER GRADIENT FLUXES OOM1F405.804
LOGICAL L_OWINDMIX,L_OBULKMAXMLD OOM1F405.805
C OOM1F405.806
C ORH1F305.737
C OLA3F403.283
REAL OLA0F404.60
& XSTRESS_ICE(IMT_idr) ! Total stress under sea ice, row j ODC1F405.432
&,YSTRESS_ICE(IMT_idr) ! (Wind stress at ice free points) ODC1F405.433
&,XSTRESS_ICEM(IMT_idr) ! Total stress under sea ice, row j-1 ODC1F405.434
&,YSTRESS_ICEM(IMT_idr) ! (Wind stress at ice free points) ODC1F405.435
ORH1F304.93
REAL OOM1F403.69
& ATTEND(KM,NT,4) ! Mixing tendencies caused by Med outflow OOM1F403.70
REAL HUDTEND(KM,NT,4) OOM2F405.292
C---------------------------------------------------------------------- RH011293.192
C BEGIN EXECUTABLE CODE TRACER.201
C--------------------------------------------------------------------- TRACER.202
C ORH1F305.738
IF (L_OTIMER) CALL TIMER
('TRACER ',103) GPB8F405.128
ORH1F403.99
DO I=1,IMT OOM1F405.169
DO K=1,KM OOM1F405.170
WDTZDIFFI(I,K)=0.0 OOM1F405.171
ENDDO OOM1F405.172
ENDDO OOM1F405.173
c OOM1F405.174
do i=1,imt OOM1F405.175
times(i)=0. OOM1F405.176
enddo OOM1F405.177
OOM1F405.178
! Only actually do main calculations for rows 2 to JMTM1_GLOBAL ORH1F403.100
IF (J.GE.J_2.AND.J.LE.J_JMTM1) THEN ORH1F403.101
ORH1F403.102
IF (L_OISOPYC.AND.(.NOT.(L_OMIXLAY)))THEN ORH1F305.740
DO I = 1, IMT ORH1F305.741
DIAG_MLD_LOC(I) = 0.0 ORH1F305.742
ENDDO ORH1F305.743
ENDIF ORH1F305.744
c Initialise ri OLA2F403.324
IF (L_OVISBECK) THEN OLA2F403.325
do i=1,imt OLA2F403.326
ri(i)=0.0 OLA2F403.327
enddo OLA2F403.328
ENDIF OLA2F403.329
C TRACER.206
C Set indices for copying working arrays for heating-rates JG170893.198
C to stash workspace JG170893.199
C JG170893.200
! Set MXP to zero - it is not actually used ORH1F305.745
! at present, but appears in the code giving warning ORH1F305.746
! messagees about being used before initialisation ORH1F305.747
MXP = 0 ORH1F305.748
ORH1F305.749
IF (L_OCYCLIC) THEN ORH1F305.750
ISSW=2 ORH1F305.751
IESW=IMTM1 ORH1F305.752
ELSE ORH1F305.753
ISSW=1 ORH1F305.754
IESW=IMT ORH1F305.755
ENDIF ORH1F305.756
C ORH1F305.757
C Initialise Heatsink OJG0F401.6
do I=1,IMT OJG0F401.7
HEATSINK(I)=0.0 OJG0F401.8
enddo OJG0F401.9
C OJG0F401.10
IF (L_SEAICE) THEN ORH1F305.758
C TRACER.208
C--------------------------------------------------------------------- TRACER.209
C THE FOLLOWING CALL TO KEEPTRAC STORES THE PRESENT VALUES OF THE TRACER.210
C SST AND THE TRUE SURFACE SALINITY IN THE ARRAYS SURFTEMP AND TRACER.211
C SURFSAL, FOR COMMUNICATION TO THE ICE MODEL. TRACER.212
C--------------------------------------------------------------------- TRACER.213
C TRACER.214
C ORH1F305.759
IF (L_OTIMER) CALL TIMER
('KEEPTRAC ',103) GPB8F405.129
C ORH1F305.761
CALL KEEPTRAC
(T,SURFTEMP,SURFSAL,FM,IMT,KM,NT) ORH1F305.762
C ORH1F305.763
IF (L_OTIMER) CALL TIMER
('KEEPTRAC ',104) GPB8F405.130
C ORH1F305.765
ENDIF ! L_SEAICE = true ORH1F305.766
C ORH1F305.767
C======================================================================= TRACER.225
C BEGIN INTRODUCTORY SECTION, PREPARING VARIOUS ====================== TRACER.226
C ARRAYS FOR THE COMPUTATION OF THE TRACERS ====================== TRACER.227
C======================================================================= TRACER.228
OJP0F404.737
! ---------------------------------------------------------------- OJP0F404.738
! Set up timestep and level thickness variables fo use in calls OJP0F404.739
! whatever the value of switch L_OVARYT OJP0F404.740
! ---------------------------------------------------------------- OJP0F404.741
DO K=1,KM OJP0F404.742
IF (L_OVARYT) THEN OJP0F404.743
TIMESTEP(K)=DTTSA(K) OJP0F404.744
GAMMA_DZ(K)=RZ(K) OJP0F404.745
ELSE OJP0F404.746
TIMESTEP(K)=C2DTTS OJP0F404.747
GAMMA_DZ(K)=DZ(K) OJP0F404.748
ENDIF OJP0F404.749
ENDDO OJP0F404.750
OJP0F404.751
! ---------------------------------------------------------------- OJP0F404.752
OJP0F404.753
IF (L_ORICHARD) THEN ORH1F305.768
C TRACER.230
C ---------------------------------------------------------------- TRACER.231
C Call subroutine to calculate vertical coefficient of diffusion TRACER.232
C ---------------------------------------------------------------- TRACER.233
C TRACER.234
IF (L_SEAICE.AND.L_ICEFREEDR) THEN ODC1F405.436
do i=1,imt OLA0F404.66
XSTRESS_ICE(I) = WSX_LEADS(I)+ISX(I) OLA0F404.67
YSTRESS_ICE(I) = WSY_LEADS(I)+ISY(I) OLA0F404.68
XSTRESS_ICEM(I) = WSX_LEADSM(I)+ISXM(I) OLA0F404.69
YSTRESS_ICEM(I) = WSY_LEADSM(I)+ISYM(I) OLA0F404.70
enddo OLA0F404.71
CALL VERTCOFT
OLA0F404.72
& ( J,IMT,KM,KMM1,NT, OLA0F404.73
& IMT_QLARGE,L_OQLARGE,L_OCYCLIC, OLA0F404.74
& IMT_FULARGE,L_OFULARGE,L_OUSTARWME,L_OWINDMIX,L_OBULKMAXMLD, OOM1F405.808
& L_OROTATE,L_OSTATEC,L_SEAICE,L_OPANDP,PHIT(J),TB, OOM1F405.809
& UB,VB,UBM,VBM, OLA0F404.75
& XSTRESS_ICE,YSTRESS_ICE,XSTRESS_ICEM,YSTRESS_ICEM, OLA0F404.76
& ZDZZ,ZDZ,DZ,DZZ, OOM1F405.810
& DZZ2RQ,DZ2RQ, OLA0F404.78
& NERGY,GRAV_SI,FM, OLA0F404.79
& RHOSRN,RHOSRNA,RHOSRNB, OOM1F405.807
& hT,RiT,max_qLarge_depth,crit_Ri, OLA0F404.81
& MLD_LARGE,MAX_LARGE_DEPTH,MAX_LARGE_LEVELS,RHO_WATER_SI, OOM1F405.811
& HTN,PME,WATERFLUX_ICE,SOL,WME,L_T,LAMBDA_LARGE, OOM1F405.812
& SPECIFIC_HEAT_SI, OOM1F405.813
& gnu(1,1),FNU0_SI,FNUB_SI,STABLM_SI,FKAPB_SI,GNUMINT_SI OLA0F404.82
& ,KAPPA_B_SI,OCEANHEATFLUX,CARYHEAT,FLXTOICE,CGFLUX ) OOM1F405.814
ELSE OLA0F404.84
CALL VERTCOFT
TRACER.235
& ( J,IMT,KM,KMM1,NT, TRACER.236
& IMT_QLARGE,L_OQLARGE,L_OCYCLIC, OLA3F403.284
& IMT_FULARGE,L_OFULARGE,L_OUSTARWME,L_OWINDMIX,L_OBULKMAXMLD, OOM1F405.816
& L_OROTATE,L_OSTATEC,L_SEAICE,L_OPANDP,PHIT(J),TB, OOM1F405.817
& UB,VB,UBM,VBM, TRACER.237
& WSX,WSY,WSXM,WSYM, OLA3F403.285
& ZDZZ,ZDZ,DZ,DZZ, OOM1F405.818
& DZZ2RQ,DZ2RQ, OLA3F403.287
& NERGY,GRAV_SI,FM, TRACER.239
& RHOSRN,RHOSRNA,RHOSRNB, OOM1F405.815
& hT,RiT,max_qLarge_depth,crit_Ri, OLA0F404.86
& MLD_LARGE,MAX_LARGE_DEPTH,MAX_LARGE_LEVELS,RHO_WATER_SI, OOM1F405.819
& HTN,PME,WATERFLUX_ICE,SOL,WME,L_T,LAMBDA_LARGE, OOM1F405.820
& SPECIFIC_HEAT_SI, OOM1F405.821
& gnu(1,1),FNU0_SI,FNUB_SI,STABLM_SI,FKAPB_SI,GNUMINT_SI RW071293.1
& ,KAPPA_B_SI,OCEANHEATFLUX,CARYHEAT,FLXTOICE,CGFLUX ) OOM1F405.822
ENDIF OLA0F404.87
C TRACER.242
c put vertical viscosity coeff gnu into gnuT OLA3F403.289
do k=1,km_gnu-1 OLA3F403.290
do i=1,imt_gnu OLA3F403.291
gnuT(i,k)=gnu(i,k+1) OLA3F403.292
enddo OLA3F403.293
enddo OLA3F403.294
c Set cyclic boundary condtions for Richardson no. OLA2F403.330
if (L_OCYCLIC) then OLA2F403.331
do k=1,kmm1 OLA2F403.332
RiT(1,k) = RiT(imtm1,k) OLA2F403.333
RiT(imt,k) = RiT(2,k) OLA2F403.334
enddo OLA2F403.335
endif OLA2F403.336
IF (L_OVISBECK) THEN OLA2F403.337
c Calculate time scale for Visbeck scheme OLA2F403.338
c First, average Richardson no over correct depths. OLA2F403.339
do k=kri(1),kri(2) OLA2F403.340
do i=1,imt OLA2F403.341
ri(i)=ri(i)+RiT(i,k)*dzz(k)*fm(i,k) OLA2F403.342
enddo OLA2F403.343
enddo OLA2F403.344
c find f OLA2F403.345
IF (.NOT.(L_OROTATE)) FX=2.0*OMEGA*SINE(J) OLA2F403.346
c T^min2=f^2/Ri OLA2F403.347
do i=1,imt OLA2F403.348
if (ri(i).lt.1.e-20) ri(i)=1.e-20 OLA2F403.349
bot=min(kmt(i),kri(2)) OLA2F403.350
if (bot .lt. kri(1)) bot=kri(1) OLA2F403.351
ri(i)=ri(i)/(zdzz(bot)-zdzz(kri(1)-1)) OLA2F403.352
tmin2(i)=fx*fx/ri(i) OLA2F403.353
enddo OLA2F403.354
ENDIF OLA2F403.355
ENDIF ORH1F305.769
C ORH1F305.770
IF (L_OISOPYC) THEN ORH1F305.771
C ORH1F305.772
IF (.NOT.(L_ORICHARD)) THEN ORH1F305.773
DO K=1,KM ORH1F305.774
DO I=1,IMT ORH1F305.775
gnu(I,K)=FKPH TRACER.247
END DO ORH1F305.776
END DO ORH1F305.777
ENDIF ORH1F305.778
C ORH1F305.779
IF (.NOT.L_OISOMOM) THEN OOM1F405.179
OOM1F405.180
C ------------------------------------------------------------------ TRACER.252
C Call subroutine to calculate isopycnal diffusion tensor TRACER.253
C ------------------------------------------------------------------ TRACER.254
C TRACER.255
C OJG0F403.9
IF (L_SLOPEMAX) THEN OJG0F403.10
C OJG0F403.11
C Old isopycnal diffusion scheme, with a maximum slope OJG0F403.12
C OJG0F403.13
IF (L_OMIXLAY) THEN OJG0F403.14
C OJG0F403.15
CALL IPDCOFCO
OJG0F403.16
& ( J,JMT,IMT,IMTM1,KM,KMT,KMP,KMP1,KMP2,NT,NTMIN2, OJG0F403.17
& J_OFFSET, ORH7F404.20
& T,TP,TDIF, OJG0F403.20
& DXUR,DXU2RQ,DXT4RQ,DYUR,DYT4R,DZ2RQ,DZZ2RQ,ZDZ,DTTS, OJG0F403.21
& NERGY,CSR,CSTR,ITT,FM,FMP, OJG0F403.22
& RHOS,RHON,AH,ahi, OJG0F403.23
& gnu(1,1),JFT0,esav,fk1,fk2,fk3(1,1,1), OJG0F403.24
& rxp,ry,rrzp, OJG0F403.25
& MLD(1,J) OJG0F403.26
& ,SLOPE_MAX OJG0F403.27
& ) OJG0F403.28
C OJG0F403.29
ELSE OJG0F403.30
C OJG0F403.31
CALL IPDCOFCO
OJG0F403.32
& ( J,JMT,IMT,IMTM1,KM,KMT,KMP,KMP1,KMP2,NT,NTMIN2, OJG0F403.33
& J_OFFSET, ORH7F404.21
& T,TP,TDIF, OJG0F403.36
& DXUR,DXU2RQ,DXT4RQ,DYUR,DYT4R,DZ2RQ,DZZ2RQ,ZDZ,DTTS, OJG0F403.37
& NERGY,CSR,CSTR,ITT,FM,FMP, OJG0F403.38
& RHOS,RHON,AH,ahi, OJG0F403.39
& gnu(1,1),JFT0,esav,fk1,fk2,fk3(1,1,1), OJG0F403.40
& rxp,ry,rrzp, OJG0F403.41
& DIAG_MLD_LOC OJG0F403.42
& ,SLOPE_MAX OJG0F403.43
& ) OJG0F403.44
C OJG0F403.45
ENDIF OJG0F403.46
C OJG0F403.47
ELSE OJG0F403.48
C ORH1F305.780
IF (L_OMIXLAY) THEN ORH1F305.781
C ORH1F305.782
C ORW1F400.60
C IPD is switched off in top 50m, for numerical stability reasons. ORW1F400.61
C This is instead of switching it off throughout the mixed layer, ORW1F400.62
C as in previous (<4.0) versions of the code. ORW1F400.63
C ORW1F400.64
C To revert to switching off IPD throughout mixed layer, pass MLD ORW1F400.65
C instead of DUMMY_MLD into IPDCOFCL. ORW1F400.66
C ORW1F400.67
DO I=1,IMT ORW1F400.68
DUMMY_MLD(I)=50.0 ORW1F400.69
END DO ORW1F400.70
C ORW1F400.71
CALL IPDCOFCL
TRACER.256
& ( J,JMT,IMT,IMTM1,KM,KMP,KMP1,KMP2,NT,NTMIN2, OLA0F401.262
& J_OFFSET, ORH3F402.393
& T,TP,TDIF, TRACER.258
& DZZ,KMT,KMTP,KMTPP, OLA0F401.263
& DXUR,DXU2RQ,DXT4RQ,DYUR,DYT4R,DZ2RQ,DZZ2RQ,ZDZ,DTTS, TRACER.259
& NERGY,CSR,CSTR,ITT,FM,FMP,FMM, OLA0F401.264
& RHOS,RHON,AH,ahi, TRACER.261
& gnu(1,1),JFT0,esav,fk1,fk2,fk3(1,1,1), TRACER.262
& rxp,ry,rrzp, TRACER.263
& drhob1p,drhob2p, OLA0F401.265
& DUMMY_MLD ORW1F400.72
& ,SLOPE_MAX TRACER.272
&,dslope,slopec OLA0F401.266
& ) TRACER.273
C ORH1F305.784
ELSE ORH1F305.785
C ORH1F305.786
CALL IPDCOFCL
ORH1F305.787
& ( J,JMT,IMT,IMTM1,KM,KMP,KMP1,KMP2,NT,NTMIN2, OLA0F401.267
& J_OFFSET, ORH3F402.394
& T,TP,TDIF, ORH1F305.791
& DZZ,KMT,KMTP,KMTPP, OLA1F402.1
& DXUR,DXU2RQ,DXT4RQ,DYUR,DYT4R,DZ2RQ,DZZ2RQ,ZDZ,DTTS, ORH1F305.792
& NERGY,CSR,CSTR,ITT,FM,FMP,FMM, OLA0F401.269
& RHOS,RHON,AH,ahi, ORH1F305.794
& gnu(1,1),JFT0,esav,fk1,fk2,fk3(1,1,1), ORH1F305.795
& rxp,ry,rrzp, ORH1F305.796
& drhob1p,drhob2p, OLA0F401.270
& DIAG_MLD_LOC ORH1F305.797
& ,SLOPE_MAX ORH1F305.798
&,dslope,slopec OLA0F401.271
& ) ORH1F305.799
C ORH1F305.800
ENDIF ORH1F305.801
C OJG0F403.49
ENDIF ! L_SLOPEMAX = true OJG0F403.50
ORH1F305.802
ELSE OOM1F405.181
IF (L_OTIMER) CALL TIMER
('ISOPYC_M',103) OOM1F405.182
OOM1F405.183
C isopyc_m is the equivalent of IPDCOFCL for the Griffies isopycnal OOM1F405.184
C diffusion, using the new method for calculating Redi isopycnal OOM1F405.185
C diffusion. It sets up the diffusion coefficients for the call OOM1F405.186
C to isoflux later in TRACER OOM1F405.187
OOM1F405.188
CALL ISOPYC_M
( OOM1F405.189
*CALL ARGSIZE
OOM1F405.190
*CALL COCAWRKA
OOM1F405.191
& ,j,cstr,dyur,dxur,dz2r,dzz,dzz2r,athkdftu,athkdftv,ahi,athkdf, OOM1F405.192
& slope_max,dz,dyu,dxu,cs,dxt4r,dyt4r,slopec,dslope,dxtr,dytr, OOM1F405.193
& cst,csr,Ai_ez,Ai_nz,Ai_bx,Ai_by,K11,K22,K33,gnu(1,1), OOM1F405.194
& adv_vetiso,adv_vbtiso,adv_fbiso,J_OFFSET,athkdf_bi, OOM1F405.195
& csjm,dyurjm,j_1,srho) OOM1F405.196
OOM1F405.197
IF (L_OTIMER) CALL TIMER
('ISOPYC_M',104) OOM1F405.198
OOM1F405.199
ENDIF OOM1F405.200
OOM1F405.201
C ORH1F305.803
ENDIF ! L_OISOPYC = true ORH1F305.804
C TRACER.275
IF (.NOT.L_OISOMOM) THEN OOM1F405.202
IF ((L_OISOPYC).and.(L_OISOPYCGM)) THEN OLA0F401.272
c calculate the GM velocities OLA0F401.273
c OLA0F401.274
IF (L_OTIMER) CALL TIMER
('IPDGMVEL ',103) GPB8F405.131
CALL IPDGMVEL
OLA0F401.276
& (J,JMT,IMT,IMTM1,KM,KMM1,KMP1,KMT,KMTP, OLA0F401.277
& DXTR,DYTR,DZ,DZ2R,DZZ2R, OLA0F401.278
& CSTR,CS,ITT,FM,FMP, OLA0F401.279
& J_OFFSET, ORH3F402.386
& ATHKDF,ATHKDFTU,ATHKDFTV,AHI, OLA2F403.356
& fk1,fk2,fk3, OLA0F401.281
& uisop,visopn,visops,wisop OLA0F401.282
& ,mld,zdz OLA0F401.283
& ) OLA0F401.284
IF (L_OTIMER) CALL TIMER
('IPDGMVEL ',104) GPB8F405.132
OLA0F401.286
C initialise wisopt, which will be the vertical advection of tracer OLA0F401.287
do k=1,kmp1 OLA0F401.288
do i=1,imt OLA0F401.289
wisopt(i,k)=0. OLA0F401.290
enddo OLA0F401.291
enddo OLA0F401.292
OLA0F401.293
ENDIF OLA0F401.294
OLA0F401.295
ENDIF ! NOT L_OISOMOM OOM1F405.203
OOM1F405.204
C--------------------------------------------------------------------- TRACER.276
C FIND ADVECTIVE COEFFICIENT 'FUW' FOR WEST FACE OF T BOX TRACER.277
C & 'FVN' FOR NORTH FACE OF T BOX TRACER.278
C--------------------------------------------------------------------- TRACER.279
C TRACER.280
IF ( L_OBDY_SOUTH ) THEN OSI1F405.20
C TRACER.282
C Find advective coefficient FVST for south face of T box TRACER.283
C (in same way as FVN & FUW calculated in main code). TRACER.284
C Subsequently used in computation of vertical velocity. TRACER.285
C TRACER.286
C LOOP 670 IS ONLY PERFORMED FOR ONE ROW ORH7F404.7
IF (J+J_OFFSET.EQ.2) THEN ORH3F402.387
FXA=CSTR(J)*CS(J-1) OSY1F405.81
DO 670 K=1,KM TRACER.295
DO 671 I=2,IMT TRACER.296
FVST(I,K)=(V(I,K)*DXU(I)+ OSY1F405.82
& V(I-1,K)*DXU(I-1))*FXA*DXT2R(I) OSY1F405.83
671 CONTINUE TRACER.299
FVST(1,K)=0.0 TRACER.300
670 CONTINUE TRACER.301
ENDIF TRACER.302
C ORH1F305.807
ENDIF ! L_OBDY_SOUTH = true OSI1F405.21
C ORH1F305.809
FXA=DYT2R(J) OSY1F405.84
c FXB=(CSTR(J)*CS(J)) OSY1F405.85
C ORH1F305.810
C LOOP 690 INITIALIZES ARRAYS ORH7F404.8
C ORH1F305.812
DO 690 K=1,KM TRACER.309
DO 691 I=2,IMT TRACER.310
FUW(I,K)=(U(I-1,K)*DYU (J )+UM(I-1,K)*DYU (J-1 ))*FXA TRACER.311
c FVN(I,K)=(V(I ,K)*DXU(I)+V (I-1,K)*DXU(I-1))*FXB OSY1F405.86
c & *DXT2R(I) OSY1F405.87
691 CONTINUE TRACER.314
FUW(1,K)=0.0 TRACER.315
690 CONTINUE TRACER.317
FXB=(CSTR(J)*CS(J)) OSY1F405.88
DO K=1,KM OSY1F405.89
DO I=2,IMT OSY1F405.90
FVN(I,K)=((V(I,K)*DXU(I))+(V(I-1,K)*DXU(I-1)))*FXB OSY1F405.91
& *DXT2R(I) OSY1F405.92
ENDDO OSY1F405.93
FVN(1,K)=0.0 OSY1F405.94
ENDDO OSY1F405.95
C TRACER.318
C--------------------------------------------------------------------- TRACER.319
C COMPUTE VERTICAL VELOCITY IN T COLUMNS TRACER.320
C--------------------------------------------------------------------- TRACER.321
C ORL1F404.639
C 1ST, REARRANGE THE CALCULATION OF THE VERTICAL VELOCITY TO ALLOW FOR ORL1F404.640
C THE FREE SURFACE SOLUTION. THIS METHOD INTEGRATES UPWARDS FROM THE ORL1F404.641
C BOTTOM LEVEL TO CALCULATE THE FREE SURFACE VERTICAL VELOCITY RATHER ORL1F404.642
C THAN INTEGRATING DOWNWARDS FROM THE RIGID LID BOUNDARY CONDITION. ORL1F404.643
C ORL1F404.644
FX = 0.0 ORL1F404.645
DO I=1,IMT ORL1F404.646
IF (L_OFREESFC) THEN ORL1F404.647
W(I,KMP1) = FX ORL1F404.648
ELSE ORL1F404.649
ORL1F404.650
W(I,1) = FX ORL1F404.651
ENDIF ! L_OFREESFC ORL1F404.652
ENDDO ! over i ORL1F404.653
ORL1F404.654
C ORL1F404.655
C 2ND, CALCULATE THE DIVERGENCE (DEPTH WEIGHTED) AT EACH LEVEL ORL1F404.656
C ORL1F404.657
IF (L_OFREESFC) THEN ORL1F404.658
KOFF = 0 ORL1F404.659
ELSE ORL1F404.660
KOFF = 1 ORL1F404.661
ENDIF ORL1F404.662
ORL1F404.663
DO K=1,KM ORH1F305.813
DO I=1,IMTM1 ORH1F305.821
W(I,K+KOFF)=DZ(K)*((FUW(I+1,K)-FUW (I,K))*DXTR(I)*CSTR(J) OSY1F405.96
& +(FVN(I ,K)-FVST(I,K))*DYTR(J)) OSY1F405.97
ENDDO ! over I ORH1F305.824
C ORH1F305.826
W(IMT,K+KOFF)=0.0 ORL1F404.665
ENDDO ! over K ORH1F305.828
C ORL1F404.666
C 3RD, INTEGRATE DOWNWARDS (RIGID LID SOLUTION) ORL1F404.667
C UPWARDS (FREE SURFACE SOLUTION) ORL1F404.668
C ORL1F404.669
IF (L_OFREESFC) THEN ORL1F404.670
ORL1F404.671
DO K=KMP1,2,-1 ORL1F404.672
DO I=1,IMT ORL1F404.673
W(I,K-1)=W(I,K)-W(I,K-1) ORL1F404.674
ENDDO ! over i ORL1F404.675
ENDDO ! over K ORL1F404.676
ELSE ORL1F404.677
DO K=1,KM ORH1F305.829
DO I=1,IMT ORH1F305.837
W(I,K+1)=W(I,K)+W(I,K+1) ORH1F305.838
ENDDO ORH1F305.839
C ORH1F305.841
ENDDO ! over K ORH1F305.842
ORL1F404.678
ENDIF ! L_OFREESFC ORL1F404.679
C TRACER.363
C--------------------------------------------------------------------- TRACER.364
C SET BOUNDARY CONDITIONS FOR VERTICAL DIFFUSION OF TRACERS TRACER.365
C--------------------------------------------------------------------- TRACER.366
C ORH1F305.843
C TRACER.368
C THE ROUNDOFF ERROR IN W AT THE BOTTOM IS ELIMINATED HERE TRACER.369
C IF L_ORICHARD = true ORH1F305.844
C TRACER.370
IF (.NOT.(L_OIMPDIF.OR.L_OIMPADDF))THEN ORH1F305.845
C 1ST, TRANSFER INTERIOR POINTS INT DIFFUSION COMPUTATION ARRAY TRACER.374
C TRACER.375
DO 720 M=1,NT ORH1F305.846
DO 720 K=1,KM ORH1F305.847
DO 720 I=1,IMT ORH1F305.848
TDIF(I,K+1,M)=TB(I,K,M) ORH1F305.849
720 CONTINUE ORH1F305.850
C TRACER.381
C 2ND, SET TOP POINT OF THE COLUMN TO REFLECT SURFACE FLUX, TRACER.382
C BOTTOM POINT OF THE COLUMN TO REFLECT INSULATION. TRACER.383
C (THE ROUNDOFF ERROR IN W AT THE BOTTOM IS ALSO ELIMINATED HERE) TRACER.384
C TRACER.385
ENDIF ORH1F305.851
C ORH1F305.852
FX=0.0 TRACER.390
DO 730 I=1,IMT TRACER.391
KZ=KMT(I) TRACER.392
IF(KZ.EQ.0)GO TO 730 TRACER.393
W(I,KZ+1)=FX TRACER.394
IF (.NOT.(L_OIMPDIF.OR.L_OIMPADDF)) THEN ORH1F305.855
DO 731 M=1,NT ORH1F305.856
TDIF(I,1 ,M)=TB(I,1 ,M) ORH1F305.857
TDIF(I,KZ+2,M)=TB(I,KZ,M) ORH1F305.858
731 CONTINUE ORH1F305.859
ENDIF ORH1F305.860
730 CONTINUE TRACER.401
C TRACER.402
C======================================================================= TRACER.403
C END INTRODUCTORY SECTION =========================================== TRACER.404
C======================================================================= TRACER.405
C TRACER.406
C======================================================================= TRACER.407
C BEGIN COMPUTATION OF THE TRACERS. ===================== TRACER.408
C THE NEW VALUES "TA", WILL FIRST BE LOADED WITH ===================== TRACER.409
C THE TIME RATE OF CHANGE, AND THEN UPDATED. ===================== TRACER.410
C======================================================================= TRACER.411
C TRACER.412
C ORH1F305.881
DO 855 M=1,NT TRACER.413
IF (L_OISOPYCGM) THEN OLA0F401.296
OLA0F401.297
c compute "wisop"*(tracer) at the center of the top face of OLA0F401.298
c the t grid box OLA0F401.299
c OLA0F401.300
do k=2,km OLA0F401.301
do i=1,imt OLA0F401.302
wisopt(i,k) = wisop(i,k)*(tb(i,k-1,m)+tb(i,k,m)) OLA0F401.303
enddo OLA0F401.304
enddo OLA0F401.305
c OLA0F401.306
c now consider the top and bottom boundaries OLA0F401.307
c OLA0F401.308
do i=1,imt OLA0F401.309
wisopt(i,1) = 0. OLA0F401.310
wisopt(i,kmp1) = 0. OLA0F401.311
enddo OLA0F401.312
OLA0F401.313
ENDIF OLA0F401.314
C TRACER.414
C--------------------------------------------------------------------- TRACER.415
C COMPUTE TOTAL ADVECTION OF TRACERS TRACER.416
C--------------------------------------------------------------------- TRACER.417
C TRACER.418
OSY1F405.98
DO I=1,IMT OSY1F405.99
KMTJM(I)=FKMP(I,J-1) OSY1F405.100
ENDDO OSY1F405.101
OSY1F405.102
L_BOOTSTRAP=.FALSE. OSY1F405.103
CALL ADV_SOURCE
( OSY1F405.104
& O_ADVECT_SCHEME(1,M), OSY1F405.105
& J, OSY1F405.106
& IMT,J_JMT,KM, OSY1F405.107
& TA(1,1,M), OSY1F405.108
& WDTXADV,WDTYADV,TEMPA,WDTZADV, OSY1F405.109
& T(1,1,M),TB(1,1,M), OSY1F405.110
& TM(1,1,M),TBM(1,1,M),TP(1,1,M),TBP(1,1,M), OSY1F405.111
& TPP(1,1,M),TBPP(1,1,M), OSY1F405.112
& FUW,FVN,FVST,W, OSY1F405.113
& FLUXST(1,1,M),FLUXNT(1,1,M),TEMPB, OSY1F405.114
& DXTR,DYTR,CSTR,DZ,DZZ, OSY1F405.115
& KMTJM,KMT,KMTP,KMTPP, OSY1F405.116
& L_OIMPADDF, OSY1F405.117
& L_OFREESFC, OSY1F405.118
& L_BOOTSTRAP, OSY1F405.119
& L_OCYCLIC, OSY1F405.120
& J_OFFSET,imout,jmout,imout_hud,jmout_hud,ATTEND,HUDTEND, OSY1F405.121
& NMEDLEV,m,NT,L_OMEDADV,L_OHUDOUT,SF_DT(15),SF_DS(14),WDTMED, OSY1F405.122
& WDSMED,CS OSY1F405.123
& ) OSY1F405.124
OSY1F405.125
IF (L_OBIOLOGY) THEN OSY1F405.126
DO K=1,KM OSY1F405.127
DO I=1,IMT OSY1F405.128
WHADV_NUT(I,K)=TEMPA(I,K) OSY1F405.129
ENDDO OSY1F405.130
ENDDO OSY1F405.131
ENDIF OSY1F405.132
OSY1F405.133
IF (L_OBIOLOGY.AND.M.EQ.NUTRIENT_TRACER) THEN OSY1F405.134
DO K=1,KM OSY1F405.135
DO I=1,IMT OSY1F405.136
WNUT_FLUX(I,K)=TEMPB(I,K) OSY1F405.137
ENDDO OSY1F405.138
ENDDO OSY1F405.139
ENDIF OSY1F405.140
C ORH1F305.1011
IF (.NOT.(L_OISOPYC)) THEN ORH1F305.1012
C TRACER.500
C--------------------------------------------------------------------- TRACER.501
C ADD IN HORIZONTAL DIFFUSION OF TRACERS (EVAL. AT TAU-1 TIMESTEP) TRACER.502
C--------------------------------------------------------------------- TRACER.503
C TRACER.504
C 1ST, COMPUTE SEVERAL COEFFICIENTS DEPENDENT ONLY ON LATITUDE TRACER.505
C TRACER.506
BBTJ=8.0*AH*CSTR(J)*CSTR(J) TRACER.507
CCTJ=AH*CS(J )*DYUR(J )*DYTR(J)*CSTR(J) TRACER.508
DDTJ=AH*CS(J-1)*DYUR(J-1)*DYTR(J)*CSTR(J) TRACER.509
C TRACER.510
C 2ND, COMPUTE GRADIENTS AT WEST FACE OF T BOX TRACER.511
C TRACER.512
ENDIF ORH1F305.1013
C ORH1F305.1014
IF (.NOT.(L_OISOPYC)) THEN ORH1F305.1015
C LOOP 838 INITIALIZES TEMPA ORH7F404.10
C ORH1F305.1017
C ORH1F305.1018
DO 838 K=1,KM TRACER.518
DO 839 I=2,IMT TRACER.519
TEMPA(I,K)=DXU2RQ(I-1,K)*(TB(I,K,M)-TB(I-1,K,M)) TRACER.520
839 CONTINUE TRACER.521
TEMPA(1,K)=0.0 TRACER.522
838 CONTINUE TRACER.523
C TRACER.524
C 3RD, ADD IN FINAL CONTRIBUTION FROM HOR. DIFF. OF TRACERS. TRACER.525
C (TO PROVIDE FOR INSULATED WALLS, EACH GRADIENT IS MULTIPLIED BY TRACER.526
C THE MASK OF THE POINT IN ITS RESPECTIVE DIRECTION, THUS TRACER.527
C CAUSING IT TO BE ZERO IF IT IS TAKEN ACROSS A WALL) TRACER.528
C TRACER.529
DO K=1,KM ORH1F305.1019
DO I=2,IMTM1 ORH1F305.1026
WDTXDIFF(I,K)=BBTJ*DXT4RQ(I,K)* ORH1F305.1027
* (FM(I+1,K)*TEMPA(I+1,K)-FM(I-1,K)*TEMPA(I,K)) ORH1F305.1028
WDTYDIFF(I,K)=CCTJ*FMP(I,K)*(TBP(I,K,M)-TB(I,K,M)) ORH1F305.1029
* +DDTJ*FMM(I,K)*(TBM(I,K,M)-TB(I,K,M)) ORH1F305.1030
TA(I,K,M)=TA(I,K,M)+WDTXDIFF(I,K)+WDTYDIFF(I,K) ORH1F305.1031
ENDDO ! over I ORH1F305.1032
TA(1,K,M)=0.0 ORH1F305.1033
TA(IMT,K,M)=0.0 ORH1F305.1034
C ORH1F305.1036
ENDDO ! over K ORH1F305.1037
C ORH1F305.1038
ENDIF ! L_OISOPYC = false ORH1F305.1039
ORH1F305.1040
IF ((.NOT.(L_OIMPDIF)).AND.(.NOT.(L_OIMPADDF))) THEN ORH1F305.1041
C TRACER.556
C--------------------------------------------------------------------- TRACER.557
C ADD IN VERTICAL DIFFUSION OF TRACERS TRACER.558
C--------------------------------------------------------------------- TRACER.559
C TRACER.560
C 1ST, COMPUTE GRADIENTS AT TOP OF T BOX TRACER.561
C TRACER.562
C LOOP 842 INITIALIZES TEMPB ORH7F404.11
C ORH1F305.1043
C ORH1F305.1044
DO 842 K=1,KMP1 TRACER.568
DO 842 I=1,IMT TRACER.569
TEMPB(I,K)=TDIF(I,K,M)-TDIF(I,K+1,M) TRACER.570
842 CONTINUE TRACER.571
C TRACER.572
C 2ND, ADD IN FINAL CONTRIBUTION FROM VERT. DIFF. OF TRACERS TRACER.573
C TRACER.574
DO K=1,KM ORH1F305.1045
DO I=1,IMT ORH1F305.1052
WDTZDIFFV(I,K)=EEHQ(I,K)*TEMPB(I,K)-FFHQ(I,K)*TEMPB(I,K+1) ORH1F305.1053
TA(I,K,M)=TA(I,K,M)+WDTZDIFFV(I,K) ORH1F305.1054
ENDDO ! over I ORH1F305.1055
ENDDO ! over K ORH1F305.1057
C ORH1F305.1058
ENDIF ! L_OIMPDIF and L_OIMPADDF = false ORH1F305.1059
C ORH1F305.1060
IF (L_OISOPYCGM) THEN OLA0F401.315
C calculate the advection terms for isopycnal mixing (GM90) OLA0F401.316
C OLA0F401.323
do k=1,km OLA0F401.324
do i=2,imtm1 OLA0F401.325
OLA0F401.326
UTxiso(i,k) = cstr(j)*dxt2r(i) OLA0F401.327
& *(uisop(i,k)*(t(i+1,k,m)+t(i,k,m)) OLA0F401.328
& -uisop(i-1,k)*(t(i,k,m)+t(i-1,k,m))) OLA0F401.329
c OLA0F401.330
enddo OLA0F401.331
if (l_ocyclic) then OJG2F404.21
UTxiso(1,k)=UTxiso(imtm1,k) OJG2F404.22
UTxiso(imt,k)=UTxiso(2,k) OJG2F404.23
endif OJG2F404.24
enddo OLA0F401.334
c OLA0F401.335
c meridional advection OLA0F401.336
c OLA0F401.337
do k=1,km OLA0F401.338
do i=1,imt OLA0F401.339
OLA0F401.340
VTyiso(i,k) = cstr(j)*dyt2r(j) OLA0F401.341
& *(visopn(i,k)*cs(j)*(tp(i,k,m)+t(i,k,m)) OLA0F401.342
& -visops(i,k)*cs(j-1)*(t(i,k,m) OLA0F401.343
& +tm(i,k,m))) OLA0F401.344
c OLA0F401.345
enddo OLA0F401.346
enddo OLA0F401.347
c OLA0F401.348
c vertical advection OLA0F401.349
c OLA0F401.350
do k=1,km OLA0F401.351
do i=1,imt OLA0F401.352
WTziso(i,k)=dz2r(k)*(wisopt(i,k)-wisopt(i,k+1)) OLA0F401.353
enddo OLA0F401.354
enddo OLA0F401.355
OLA0F401.356
c add the GM flux terms into the rate of change, TA OLA0F401.357
do k=1,km OLA0F401.358
do i=1,imt OLA0F401.359
DTWORK(I,K)=-(UTxiso(i,k)+VTyiso(i,k)+WTziso(i,k)) OJG2F404.25
TA(I,K,M)=TA(I,K,M)+DTWORK(I,K) OJG2F404.26
IF (M.EQ.1) THEN OJG2F404.27
DTGM(I,K)=DTWORK(I,K)*giga OJG2F404.28
ELSEIF (M.EQ.2) THEN OJG2F404.29
DSGM(I,K)=DTWORK(I,K)*giga OJG2F404.30
ENDIF OJG2F404.31
enddo OLA0F401.363
enddo OLA0F401.364
OLA0F401.365
ENDIF OLA0F401.366
IF (L_OISOPYC) THEN ORH1F305.1061
IF (.NOT.L_OISOMOM) THEN OOM1F405.205
C ORH1F305.1062
C TRACER.592
C -------------------------------------------------------------- TRACER.593
C Calculate the components of isopycnal diffusion and update tracers. TRACER.594
C Vertical diffusion is omitted, since it is treated separately TRACER.595
C in VDIFCALT below TRACER.596
C -------------------------------------------------------------- TRACER.597
C TRACER.598
CALL IPDFLXCL
TRACER.599
& ( M,J,JMT,IMT,IMTM1,KM,KMP1,KMM1,NT, TRACER.600
& TB,TBP,TBM,TA, TRACER.601
& DXU2RQ,DXT4RQ,DYUR,DYTR,DYT4R,DZ2RQ, TRACER.602
& CS,CSR,CSTR,FM,FMP,FMM, TRACER.603
& esav,fk1,fk2,fk3,WDTXDIFF,WDTYDIFF,WDTZDIFFI) JG170893.242
ELSE OOM1F405.206
OOM1F405.207
IF (L_OTIMER) CALL TIMER
('ISOFLUX',103) OOM1F405.208
OOM1F405.209
C isoflux is the equivalent to IPDFLXCL for the Griffies method OOM1F405.210
C of calculating the isopycnal diffusion OOM1F405.211
OOM1F405.212
CALL ISOFLUX
( OOM1F405.213
*CALL ARGSIZE
OOM1F405.214
*CALL COCAWRKA
OOM1F405.215
& ,m,j,cstr,dyur,dxur,dz2r,cs,csjm, OOM1F405.216
& dytr,dxtr,cst,dxt4r,dyt4r,Ai_ez,Ai_nz,Ai_bx,Ai_by,K11,K22,K33, OOM1F405.217
& itt,adv_vbtiso,adv_fbiso,WDTXDIFF,WDTYDIFF,WDTZDIFFI,j_1) OOM1F405.218
OOM1F405.219
IF (L_OTIMER) CALL TIMER
('ISOFLUX',104) OOM1F405.220
OOM1F405.221
IF (L_OISOGM) THEN OOM1F405.222
OOM1F405.223
C calculate the advection terms for isopycnal mixing (GM90) OOM1F405.224
C OOM1F405.225
C zonal advection, can set i=1, and i=imt to zero, since at OOM1F405.226
C end of TRACER OOM1F405.227
C TA(1) and TA(IMT) are set if cyclic bc's, and if not cyclic OOM1F405.228
C then these must be walls. OOM1F405.229
C OOM1F405.230
do k=1,km OOM1F405.231
do i=2,imtm1 OOM1F405.232
UTxiso_mom(i,k) = cstr(j)*dxt2r(i) OOM1F405.233
& *(adv_vetiso(i,k)*(tb(i+1,k,m)+tb(i,k,m)) OOM1F405.234
& -adv_vetiso(i-1,k)*(tb(i,k,m)+tb(i-1,k,m))) OOM1F405.235
enddo OOM1F405.236
IF (L_OCYCLIC) THEN OOM1F405.237
UTxiso_mom(1,k)=UTxiso_mom(imtm1,k) OOM1F405.238
UTxiso_mom(imt,k)= UTxiso_mom(2,k) OOM1F405.239
ELSE OOM1F405.240
UTxiso_mom(1,k)=0. OOM1F405.241
UTxiso_mom(imt,k)=0. OOM1F405.242
ENDIF OOM1F405.243
enddo OOM1F405.244
c OOM1F405.245
c meridional advection OOM1F405.246
c OOM1F405.247
do k=1,km OOM1F405.248
do i=1,imt OOM1F405.249
VTyiso_mom(i,k) = cstr(j)*dyt2r(j) OOM1F405.250
& *(adv_vntiso(i,k,1)*(tbp(i,k,m)+tb(i,k,m)) OOM1F405.251
& -adv_vntiso(i,k,0)*(tb(i,k,m) OOM1F405.252
& +tbm(i,k,m))) OOM1F405.253
enddo OOM1F405.254
enddo OOM1F405.255
c OOM1F405.256
c vertical advection OOM1F405.257
c OOM1F405.258
do k=1,km OOM1F405.259
do i=1,imt OOM1F405.260
WTziso_mom(i,k)=dz2r(k)*(adv_fbiso(i,k-1)-adv_fbiso(i,k)) OOM1F405.261
enddo OOM1F405.262
enddo OOM1F405.263
OOM1F405.264
c add the GM flux terms into the rate of change, TA OOM1F405.265
do k=1,km OOM1F405.266
do i=1,imt OOM1F405.267
DTWORK(I,K)=-(UTxiso_mom(i,k)+VTyiso_mom(i,k)+WTziso_mom(i,k)) OOM1F405.268
TA(I,K,M)=TA(I,K,M)+DTWORK(I,K) OOM1F405.269
IF (M.EQ.1) THEN OOM1F405.270
DTGM(I,K)=DTWORK(I,K)*giga OOM1F405.271
ELSEIF (M.EQ.2) THEN OOM1F405.272
DSGM(I,K)=DTWORK(I,K)*giga OOM1F405.273
ENDIF OOM1F405.274
enddo OOM1F405.275
enddo OOM1F405.276
OOM1F405.277
ENDIF ! L_OISOGM OOM1F405.278
C calculate the large scale richardson number, for the Visbeck scheme OOM1F405.279
IF (L_OVISHADCM4) THEN OOM1F405.280
do i=1,imt OOM1F405.281
do k=kri(1),kri(2) OOM1F405.282
times(i)=times(i)+(srho(i,k)*sqrt(grav) OOM1F405.283
& *dzz(k)*fm(i,k)) OOM1F405.284
enddo OOM1F405.285
enddo OOM1F405.286
do i=1,imt OOM1F405.287
bot=min(kmt(i),kri(2)) OOM1F405.288
if (bot .lt. kri(1)) bot=kri(1) OOM1F405.289
times(i)=times(i)/(zdzz(bot)-zdzz(kri(1)-1)) OOM1F405.290
enddo OOM1F405.291
ENDIF OOM1F405.292
OOM1F405.293
ENDIF ! NOT L_OISOMOM OOM1F405.294
OOM1F405.295
ENDIF ! L_OISOPYC = true ORH1F305.1063
C JG170893.243
IF (M.EQ.1) THEN JG170893.244
fx=giga ! multiplies rates by 1e9 OJG2F404.32
DO K=1,KM JG170893.245
CFPP$ NODEPCHK JG170893.246
DO I=ISSW,IESW JG170893.247
II=MOD(I-1,SWNCOL)+1 JG170893.248
IF (SF_DT(1)) DTXADV(II,J,K)=WDTXADV(I,K)*FX OJG2F404.33
IF (SF_DT(2)) DTYADV(II,J,K)=WDTYADV(I,K)*FX OJG2F404.34
C ORH1F305.1064
IF (L_OIMPADDF) THEN ORH1F305.1065
IF (SF_DT(3)) DTZADV(II,J,K)=0. ORH1F305.1066
IF (SF_DT(12)) DTZ(II,J,K)=0. OJG2F404.35
ELSE ORH1F305.1067
IF (SF_DT(3)) DTZADV(II,J,K)=WDTZADV(I,K)*FX OJG2F404.36
IF (SF_DT(12)) DTZ(II,J,K)= OJG2F404.37
& (WDTXADV(I,K)+WDTYADV(I,K)+WDTZADV(I,K))*FX OJG2F404.38
ENDIF ORH1F305.1069
C ORH1F305.1070
IF (SF_DT(4)) DTXDIFF(II,J,K)=WDTXDIFF(I,K)*FX OJG2F404.39
IF (SF_DT(5)) DTYDIFF(II,J,K)=WDTYDIFF(I,K)*FX OJG2F404.40
C ORH1F305.1071
IF ((.NOT.(L_OIMPDIF)).AND.(.NOT.(L_OIMPADDF))) THEN ORH1F305.1072
IF (.NOT.(L_OISOPYC))THEN ORH1F305.1073
IF (SF_DT(6)) DTZDIFF(II,J,K)=WDTZDIFFV(I,K)*FX OJG2F404.41
ELSE ORH1F305.1075
IF (SF_DT(6)) DTZDIFF(II,J,K)=(WDTZDIFFV(I,K)+ OJG2F404.42
& WDTZDIFFI(I,K))*FX OJG2F404.43
ENDIF ORH1F305.1078
ENDIF ORH1F305.1079
C ORH1F305.1080
IF (L_OIMPDIF.AND.L_OISOPYC) THEN ORH1F305.1081
IF (SF_DT(6)) DTZDIFF(II,J,K)=WDTZDIFFI(I,K)*FX OJG2F404.44
ENDIF ORH1F305.1083
C ORH1F305.1093
ENDDO JG170893.276
ENDDO JG170893.277
ENDIF JG170893.278
C OJG2F401.69
C Copy rates of change of salinity from workspace to diagnostic OJG2F401.70
C arrays as required by stash flags. OJG2F401.71
C OJG2F401.72
IF (M.EQ.2) THEN OJG2F401.73
fx=giga ! multiplies rates by 1e9 OJG2F404.45
DO K=1,KM OJG2F401.74
CFPP$ NODEPCHK OJG2F401.75
DO I=ISSW,IESW OJG2F401.76
II=MOD(I-1,SWNCOL)+1 OJG2F401.77
IF (SF_DS(1)) DSXADV(II,J,K)=WDTXADV(I,K)*FX OJG2F404.46
IF (SF_DS(2)) DSYADV(II,J,K)=WDTYADV(I,K)*FX OJG2F404.47
IF (L_OIMPADDF) THEN OJG2F401.80
IF (SF_DS(3)) DSZADV(II,J,K)=0. OJG2F401.81
IF (SF_DS(11)) DSZ(II,J,K)=0. OJG2F404.48
ELSE OJG2F401.82
IF (SF_DS(3)) DSZADV(II,J,K)=WDTZADV(I,K)*FX OJG2F404.49
IF (SF_DS(11)) DSZ(II,J,K)= OJG2F404.50
& (WDTXADV(I,K)+WDTYADV(I,K)+WDTZADV(I,K))*FX OJG2F404.51
ENDIF OJG2F401.84
IF (SF_DS(4)) DSXDIFF(II,J,K)=WDTXDIFF(I,K)*FX OJG2F404.52
IF (SF_DS(5)) DSYDIFF(II,J,K)=WDTYDIFF(I,K)*FX OJG2F404.53
IF ((.NOT.(L_OIMPDIF)).AND.(.NOT.(L_OIMPADDF))) THEN OJG2F401.87
IF (.NOT.(L_OISOPYC))THEN OJG2F401.88
IF (SF_DS(6)) DSZDIFF(II,J,K)=WDTZDIFFV(I,K)*FX OJG2F404.54
ELSE OJG2F401.90
IF (SF_DS(6)) DSZDIFF(II,J,K)=(WDTZDIFFV(I,K) OJG2F404.55
& +WDTZDIFFI(I,K))*FX OJG2F404.56
ENDIF OJG2F401.93
ENDIF OJG2F401.94
IF (L_OIMPDIF.AND.L_OISOPYC) THEN OJG2F401.95
IF (SF_DS(6)) DSZDIFF(II,J,K)=WDTZDIFFI(I,K)*FX OJG2F404.57
ENDIF OJG2F401.97
ENDDO OJG2F401.106
ENDDO OJG2F401.107
ENDIF OJG2F401.108
C OJG2F401.109
IF (L_OBIOLOGY) THEN ORH1F305.1095
IF (M.EQ.NUTRIENT_TRACER) THEN OJP0F404.775
C Factor fx converts rates from (1/s) to (1/day) ONT1F304.253
fx=3600.0*24.0 ONT1F304.254
DO K=1,KM ONT1F304.255
CFPP$ NODEPCHK ONT1F304.256
DO I=ISSW,IESW ONT1F304.257
II=MOD(I-1,SWNCOL)+1 ONT1F304.258
IF (SF_BIO(17)) HADV_NUT(II,J,K)=WHADV_NUT(I,K)*fx ONT1F304.259
IF (SF_BIO(18)) VADV_NUT(II,J,K)=WDTZADV(I,K)*fx ONT1F304.260
IF (SF_BIO(19)) HDIF_NUT(II,J,K)=(WDTXDIFF(I,K) ONT1F304.261
& + WDTYDIFF(I,K))*fx ONT1F304.262
C ORH1F305.1096
IF ((.NOT.(L_OIMPDIF)).AND.(.NOT.(L_OIMPADDF))) THEN ORH1F305.1097
IF (.NOT.(L_OISOPYC)) THEN ORH1F305.1098
IF (SF_BIO(20)) VDIF_NUT(II,J,K)=WDTZDIFFV(I,K)*fx ORH1F305.1099
ELSE ORH1F305.1100
IF (SF_BIO(20)) VDIF_NUT(II,J,K)=(WDTZDIFFV(I,K) ORH1F305.1101
& + WDTZDIFFI(I,K))*fx ONT1F304.268
ENDIF ORH1F305.1102
ENDIF ORH1F305.1103
C ORH1F305.1104
IF (L_OIMPDIF.AND.L_OISOPYC) THEN ORH1F305.1105
IF (SF_BIO(20)) VDIF_NUT(II,J,K)=WDTZDIFFI(I,K)*fx ORH1F305.1106
ENDIF ORH1F305.1107
IF (L_OIMPADDF) THEN ORH1F305.1108
IF (SF_BIO(20)) VDIF_NUT(II,J,K)=0. ORH1F305.1109
ENDIF ORH1F305.1110
ENDDO ONT1F304.277
ENDDO ONT1F304.278
ENDIF ONT1F304.279
ONT1F304.280
C Copy phyto, zoo & detrital advection diagnostics from workspace ONT1F304.281
IF (M.EQ.PHYTO_TRACER) THEN OJP0F404.776
C Factor fx converts rates from (1/s) to (1/day) ONT1F304.283
fx=3600.0*24.0 ONT1F304.284
DO K=1,KM ONT1F304.285
CFPP$ NODEPCHK ONT1F304.286
DO I=ISSW,IESW ONT1F304.287
II=MOD(I-1,SWNCOL)+1 ONT1F304.288
IF (SF_BIO(25)) HADV_PHY(II,J,K)=WHADV_NUT(I,K)*fx ONT1F304.289
ENDDO ONT1F304.290
ENDDO ONT1F304.291
ENDIF ONT1F304.292
ONT1F304.293
IF (M.EQ.ZOO_TRACER) THEN OJP0F404.777
C Factor fx converts rates from (1/s) to (1/day) ONT1F304.295
fx=3600.0*24.0 ONT1F304.296
DO K=1,KM ONT1F304.297
CFPP$ NODEPCHK ONT1F304.298
DO I=ISSW,IESW ONT1F304.299
II=MOD(I-1,SWNCOL)+1 ONT1F304.300
IF (SF_BIO(26)) HADV_ZOO(II,J,K)=WHADV_NUT(I,K)*fx ONT1F304.301
ENDDO ONT1F304.302
ENDDO ONT1F304.303
ENDIF ONT1F304.304
ONT1F304.305
IF (M.EQ.DETRITUS_TRACER) THEN OJP0F404.778
C Factor fx converts rates from (1/s) to (1/day) ONT1F304.307
fx=3600.0*24.0 ONT1F304.308
DO K=1,KM ONT1F304.309
CFPP$ NODEPCHK ONT1F304.310
DO I=ISSW,IESW ONT1F304.311
II=MOD(I-1,SWNCOL)+1 ONT1F304.312
IF (SF_BIO(27)) HADV_DET(II,J,K)=WHADV_NUT(I,K)*fx ONT1F304.313
ENDDO ONT1F304.314
ENDDO ONT1F304.315
ENDIF ONT1F304.316
C ORH1F305.1111
ENDIF ! L_OBIOLOGY = true ORH1F305.1112
C TRACER.606
C--------------------------------------------------------------------- TRACER.607
C COMPUTE NEW TRACERS, RESETTING LAND POINTS TO ZERO TRACER.608
C--------------------------------------------------------------------- TRACER.609
C TRACER.610
C NEXT LOOP ENSURES VALUES SET TO ZERO OVER LAND ORH1F305.1113
C ORH1F305.1115
DO K=1,KM ORH1F305.1118
DO I=1,IMT ORH1F305.1119
TA(I,K,M)=(TB(I,K,M)+TIMESTEP(K)*TA(I,K,M))*FM(I,K) OJP0F404.779
ENDDO ORH1F305.1121
ENDDO ORH1F305.1122
C ORH1F305.1123
855 CONTINUE TRACER.624
! -------------------------------------------------------------------- OJP0F404.780
! END of big loop over for M=1,NT OJP0F404.781
! -------------------------------------------------------------------- OJP0F404.782
C ORH1F305.1132
IF (L_OBIOLOGY) THEN ORH1F305.1133
C ONT1F304.319
C Copy Nutrient flux diagnostic from work array into full field. ONT1F304.320
C At the same time, multiply by 1.0E-2 to convert the earlier ONT1F304.321
C multiplication by vertical velocity from cm/s to m/s. Also ONT1F304.322
C convert from mMol/m2/s to mMol/m2/day (factor 3600*24). ONT1F304.323
C ONT1F304.324
fx=3600.0*24.0*1.0E-2 ONT1F304.325
DO K=1,KM ONT1F304.326
DO I=ISSW,IESW ONT1F304.327
II=MOD(I-1,SWNCOL)+1 ONT1F304.328
IF (SF_BIO(16)) NUT_FLUX(II,J,K)=WNUT_FLUX(I,K)*fx ONT1F304.329
ENDDO ONT1F304.330
ENDDO ONT1F304.331
ENDIF ORH1F305.1134
C ORH1F305.1135
IF (L_OIMPADDF) THEN ORH1F305.1136
C TRACER.626
C -------------------------------------------------------------- TRACER.627
C Treatment of vertical advection/diffusion using implicit TRACER.628
C finite difference equation. TRACER.629
C TRACER.630
C Set up arrays for calculation. TRACER.633
C -------------------------------------------------------------- TRACER.636
C TRACER.637
IF ((.NOT.(L_OISOPYC)).AND.(.NOT.(L_ORICHARD))) THEN ORH1F305.1143
DO K=1,KM ORH1F305.1144
DO I=1,IMT ORH1F305.1145
gnu(I,K)=FKPH ORH1F305.1146
END DO ORH1F305.1147
END DO TRACER.648
ENDIF ORH1F305.1148
C TRACER.659
C Now solve advection/diffusion equation TRACER.660
C TRACER.661
C Call to subroutine VERTSOLV removed. ORH1F305.1149
C ORH1F305.1150
C ORH1F305.1151
DO M=1,NT TRACER.689
DO K=1,KM TRACER.690
DO I=1,IMT TRACER.691
TA(I,K,M)=TF(I,K,M)*FM(I,K) SF020993.16
DTWORK(I,K)=(TF(I,K,M)-TA(I,K,M))*FM(I,K) JG170893.279
TA(I,K,M)=TA(I,K,M)+DTWORK(I,K) JG170893.280
END DO TRACER.693
END DO TRACER.694
END DO TRACER.695
C ORH1F305.1163
ENDIF ! L_OIMPADDF = false ORH1F305.1164
C ORH1F305.1165
IF (L_OIMPDIF) THEN ORH1F305.1166
C TRACER.698
C -------------------------------------------------------------- TRACER.699
C Treatment of vertical diffusion by solving implicitly the TRACER.700
C vertical diffusion equation. TRACER.701
C Because an implicit scheme is used, this is done after the TRACER.702
C new tracers have been computed. TRACER.703
C -------------------------------------------------------------- TRACER.704
C JG170893.299
DO K=1,KM JG170893.300
DO I=ISSW,IESW JG170893.301
DTWORK(I,K)=TA(I,K,1) JG170893.302
DSWORK(I,K)=TA(I,K,2) OJG2F401.132
ENDDO JG170893.303
ENDDO JG170893.304
C ORH1F305.1167
IF (L_OBIOLOGY) THEN ORH1F305.1168
DO K=1,KM ORH1F305.1169
DO I=ISSW,IESW ORH1F305.1170
DNWORK(I,K)=TA(I,K,NUTRIENT_TRACER) OJP0F404.783
ENDDO ORH1F305.1172
ENDDO ORH1F305.1173
ENDIF ORH1F305.1174
C TRACER.705
C ORH1F305.1175
! Populate arguments for subroutine calls - dependent on ORH1F305.1176
! ocean configuration being run. ORH1F305.1177
IF (L_OISOPYC) THEN ORH1F305.1178
IF (L_OISOMOM) THEN OOM1F405.296
DO K = 1, KM OOM1F405.297
DO I = 1, IMT OOM1F405.298
FK3_OR_GNU(I,K) = K33(I,K) OOM1F405.299
ENDDO OOM1F405.300
ENDDO OOM1F405.301
ELSE OOM1F405.302
DO K = 1, KM ORH1F305.1179
DO I = 1, IMT ORH1F305.1180
FK3_OR_GNU(I,K) = FK3(I,K,3) ORH1F305.1181
ENDDO ORH1F305.1182
ENDDO ORH1F305.1183
ENDIF ! OISOMOM OOM1F405.303
OOM1F405.304
ELSE ORH1F305.1184
DO K = 1, KM ORH1F305.1185
DO I = 1, IMT ORH1F305.1186
FK3_OR_GNU(I,K) = GNU(I,K) ORH1F305.1187
ENDDO ORH1F305.1188
ENDDO ORH1F305.1189
ENDIF ORH1F305.1190
C ORH1F305.1191
C OOM1F405.823
IF(.NOT.L_OFULARGE)THEN OOM1F405.824
DO M=1,NT OOM1F405.825
DO K=1,KM OOM1F405.826
DO I=1,IMT OOM1F405.827
CGFLUX(I,K,M)=0.0 OOM1F405.828
ENDDO OOM1F405.829
ENDDO OOM1F405.830
ENDDO OOM1F405.831
ENDIF OOM1F405.832
C OOM1F405.833
C ONLY CALL VDIFCALT HERE IF NOT USING THE FULL LARGE SCHEME OOM1F405.834
C OOM1F405.835
IF(.NOT.L_OFULARGE)THEN OOM1F405.836
C OOM1F405.837
CALL VDIFCALT
TRACER.706
& ( J,IMT,IMTM1,KM,KMP1,KMM1,NT, TRACER.707
& TA, TRACER.708
& DZ2R,DZZ2RQ,DZ2RQ,C2DTTS, TRACER.709
& DTTSA, TRACER.712
& FM, TRACER.715
& fk3_or_gnu(1,1),CGFLUX OOM1F405.838
& ) TRACER.724
C ORH1F305.1193
ENDIF !.NOT.L_OFULARGE OOM1F405.839
C OOM1F405.840
IF (SF_DT(6)) THEN JG170893.305
DO K=1,KM JG170893.306
CFPP$ NODEPCHK JG170893.307
DO I=ISSW,IESW JG170893.308
II=MOD(I-1,SWNCOL)+1 JG170893.309
IF (.NOT.(L_OVARYT)) THEN ORH1F305.1194
DTWORK(I,K)=(TA(I,K,1)-DTWORK(I,K))/C2DTTS*giga OJG2F404.58
ELSE ORH1F305.1196
DTWORK(I,K)=(TA(I,K,1)-DTWORK(I,K))/DTTSA(K)*giga OJG2F404.59
ENDIF ORH1F305.1198
IF (.NOT.(L_OISOPYC)) THEN ORH1F305.1199
DTZDIFF(II,J,K)=DTWORK(I,K) ORH1F305.1200
ELSE ORH1F305.1201
DTZDIFF(II,J,K)=DTZDIFF(II,J,K)+DTWORK(I,K) ORH1F305.1202
ENDIF ORH1F305.1203
ENDDO JG170893.320
ENDDO JG170893.321
ENDIF JG170893.322
C OJG2F401.133
C Diagnose rate of change of salinity from vertical diffusion OJG2F401.134
C (non-isopycnal) OJG2F401.135
C OJG2F401.136
IF (SF_DS(6)) THEN OJG2F401.137
DO K=1,KM OJG2F401.138
CFPP$ NODEPCHK OJG2F401.139
DO I=ISSW,IESW OJG2F401.140
II=MOD(I-1,SWNCOL)+1 OJG2F401.141
IF (.NOT.(L_OVARYT)) THEN OJG2F401.142
DSWORK(I,K)=(TA(I,K,2)-DSWORK(I,K))/C2DTTS*giga OJG2F404.63
ELSE OJG2F401.144
DSWORK(I,K)=(TA(I,K,2)-DSWORK(I,K))/DTTSA(K)*giga OJG2F404.64
ENDIF OJG2F401.146
IF (.NOT.(L_OISOPYC)) THEN OJG2F401.147
DSZDIFF(II,J,K)=DSWORK(I,K) OJG2F401.148
ELSE OJG2F401.149
DSZDIFF(II,J,K)=DSZDIFF(II,J,K)+DSWORK(I,K) OJG2F401.150
ENDIF OJG2F401.151
ENDDO OJG2F401.152
ENDDO OJG2F401.153
ENDIF OJG2F401.154
C OJG2F404.60
IF (L_OBIOLOGY) THEN OJG2F404.61
C OJG2F404.62
IF (SF_BIO(20)) THEN ONT1F304.337
C Factor fx converts rates from (1/s) to (1/day) ONT1F304.338
fx=3600.0*24.0 ONT1F304.339
DO K=1,KM ONT1F304.340
CFPP$ NODEPCHK ONT1F304.341
DO I=ISSW,IESW ONT1F304.342
II=MOD(I-1,SWNCOL)+1 ONT1F304.343
DNWORK(I,K)=(TA(I,K,NUTRIENT_TRACER)-DNWORK(I,K))/TIMESTEP(K) OJP0F404.784
IF (.NOT.(L_OISOPYC)) THEN ORH1F305.1212
VDIF_NUT(II,J,K)=DNWORK(I,K) * fx ORH1F305.1213
ELSE ORH1F305.1214
VDIF_NUT(II,J,K)=VDIF_NUT(II,J,K) + fx*DNWORK(I,K) ORH1F305.1215
ENDIF ORH1F305.1216
ENDDO ONT1F304.354
ENDDO ONT1F304.355
ENDIF ONT1F304.356
C ORH1F305.1217
ENDIF ! L_OBIOLOGY = true ORH1F305.1218
ENDIF ! L_OIMPDIF = true ORH1F305.1219
C ORH1F305.1220
IF (L_RIVERS) THEN ORH1F305.1221
C TRACER.727
C ---------------------------------------------------------------------- TRACER.728
C Add in river outflow to pme to get total net fresh water TRACER.729
C ---------------------------------------------------------------------- TRACER.730
C TRACER.731
DO 8591 I=1,IMT TRACER.732
PME(I)=PME(I) + RIVER(I) TRACER.733
8591 CONTINUE TRACER.734
ENDIF ORH1F305.1222
C TRACER.736
IF (L_SEAICE) THEN ORH1F305.1223
C TRACER.738
C--------------------------------------------------------------------- TRACER.739
C THE FOLLOWING CALL TO FLXBLANK ALTERS THE SURFACE HEAT FLUXES OJC2F400.140
C WHERE SEA-ICE IS PRESENT. OJC2F400.141
C THIS DOES NOT AFFECT THE HANEY TERM WHEN L_IHANEY = true ORH1F305.1224
C--------------------------------------------------------------------- TRACER.747
C TRACER.748
IF (L_OTIMER) CALL TIMER
('FLXBLANK ',103) GPB8F405.133
C ORH1F305.1226
CALL FLXBLANK
(ICY,HTN,QFLUXALT,OCEANHEATFLUX OJC2F400.142
+,WME_ICE JT161193.382
+,SOL,SOLALT TRACER.757
+,WME,WMEALT ORH1F305.1227
+,AICE JT181193.2
+,IMT) TRACER.763
C ORH1F305.1228
IF (L_OTIMER) CALL TIMER
('FLXBLANK ',104) GPB8F405.134
C ORH1F305.1230
ENDIF ! L_SEAICE = true ORH1F305.1231
C TRACER.769
C ORH1F305.1232
IF (L_OPSEUDIC) THEN ORH1F305.1233
C TRACER.772
C---------------------------------------------------------------------- TRACER.773
C Pseudo-ice model. Blank out surface fluxes at climatological TRACER.774
C ice points. TRACER.775
C---------------------------------------------------------------------- TRACER.781
C TRACER.782
DO 1855 I=1,IMT TRACER.783
BICE(I)=1. TRACER.784
IF(T_REF(I).LT.TCHECK) BICE(I)=0. TRACER.785
QFLUXALT(I)=HTN(I)*BICE(I) TRACER.786
PMEALT(I)=PME(I)*BICE(I) TRACER.787
IF (L_OSOLAR.OR.L_OSOLARAL) THEN OJP0F404.785
SOLALT(I)=SOL(I)*BICE(I) ORH1F305.1236
ENDIF ORH1F305.1240
C NT091293.56
IF (L_OMIXLAY) THEN ORH1F305.1242
WMEALT(I)=WME(I)*BICE(I) ORH1F305.1243
ENDIF ORH1F305.1244
1855 CONTINUE TRACER.796
C TRACER.797
ENDIF ! L_OPSEUDIC = true ORH1F305.1245
C ORH1F305.1246
IF (L_OHANEY) THEN ORH1F305.1247
C ORH1F305.1248
! Populate arguments for HNYCAL with required ORH1F305.1249
! values dependent on model configuration. ORH1F305.1250
IF (L_SEAICE) THEN ORH1F305.1251
DO I = 1, IMT ORH1F305.1252
HTN_OR_QFLALT(I) = QFLUXALT(I) ORH1F305.1253
PME_OR_PMEALT(I) = PME(I) ORH1F305.1254
ENDDO ORH1F305.1255
ELSE ORH1F305.1256
IF (L_OPSEUDIC) THEN ORH1F305.1257
DO I = 1, IMT ORH1F305.1258
HTN_OR_QFLALT(I) = QFLUXALT(I) ORH1F305.1259
PME_OR_PMEALT(I) = PMEALT(I) ORH1F305.1260
ENDDO ORH1F305.1261
ELSE ORH1F305.1262
! Neither L_SEAICE or L_OPSEUDIC ORH1F305.1263
DO I = 1, IMT ORH1F305.1264
HTN_OR_QFLALT(I) = HTN(I) ORH1F305.1265
PME_OR_PMEALT(I) = PME(I) ORH1F305.1266
ENDDO ORH1F305.1267
C ORH1F305.1268
ENDIF ORH1F305.1269
ENDIF ORH1F305.1270
C ORH1F305.1271
CALL HNYCAL
(TB, TRACER.800
+ HTN_OR_QFLALT,PME_OR_PMEALT, ORH1F305.1272
+ QFLUX, SFLUX, TRACER.812
+ T_REF, S_REF, TRACER.813
+ IMT,KM,NT, TRACER.814
+ HANEY_SI, SPECIFIC_HEAT_SI, TRACER.815
+ HICE,HICE_REF, TRACER.818
+ QFUSION,RHO_WATER_SI,DZ(1), TRACER.819
+ anom_heat, anom_salt TRACER.822
+ ,anomiceh TRACER.825
+ ,salref) OJL1F405.18
JA121293.117
ENDIF ! L_OHANEY = true ORH1F305.1273
ORH1F305.1274
IF (L_OMIXLAY) THEN ORH1F305.1275
C ORH1F305.1279
CALL STATED
(TA(1,1,1),TA(1,1,2),DRHO_SOL(1),WORKA,WORKB,IMT,1,J JA121293.126
&,KM JA121293.127
& ,JMT ORH7F404.22
&) JA121293.130
JA121293.131
ENDIF ! L_OMIXLAY = true ORH1F305.1280
JA121293.133
IF (SF_DT(7)) THEN JG170893.323
DO K=1,KM JG170893.324
DO I=1,IMT JG170893.325
DTWORK(I,K)=TA(I,K,1) JG170893.326
ENDDO JG170893.327
ENDDO JG170893.328
ENDIF JG170893.329
IF (SF_DS(7)) THEN OJG2F401.155
DO I=1,IMT OJG2F401.156
DSWORK(I,1)=TA(I,1,2) OJG2F401.157
ENDDO OJG2F401.158
ENDIF OJG2F401.159
DO I=1,imt OJG1F400.19
if (l_ohaney) then OJG1F400.20
diagsw(i,j)=sflux(i) OJG1F400.21
elseif (l_opseudic) then OJG1F400.22
diagsw(i,j)=pmealt(i) OJG1F400.23
else OJG1F400.24
diagsw(i,j)=pme(i) OJG1F400.25
endif OJG1F400.26
if (l_fluxcorr) then OJG1F400.27
diagsw(i,j)=diagsw(i,j)+fluxcorw(i) OJG1F400.28
endif OJG1F400.29
C Multiply by 1E9 for backward compatibility with the C90, where OJG2F403.20
C this was necessary to avoid loss of accuracy from dump packing. OJG2F403.21
if (L_REFSAL) then OJL1F405.21
diagsw(i,j)=1e9*(diagsw(i,j)*salref)/rho_water_si OJL1F405.22
else OJL1F405.23
diagsw(i,j)=1e9*(diagsw(i,j)*(tb(i,1,2)+0.035))/rho_water_si OJL1F405.24
endif OJL1F405.25
enddo OJG1F400.31
C ORH1F305.1281
IF (L_OHANEY) THEN ORH1F305.1282
DO I = 1, IMT ORH1F305.1283
HTN_OR_QFLALT(I) = QFLUX(I) ORH1F305.1284
PME_OR_PMEALT(I) = SFLUX(I) ORH1F305.1285
ENDDO ORH1F305.1286
ELSE ORH1F305.1287
! Populate arguments for HNYCAL with required ORH1F305.1288
! values dependent on model configuration. ORH1F305.1289
IF (L_SEAICE) THEN ORH1F305.1290
DO I = 1, IMT ORH1F305.1291
HTN_OR_QFLALT(I) = QFLUXALT(I) ORH1F305.1292
PME_OR_PMEALT(I) = PME(I) ORH1F305.1293
ENDDO ORH1F305.1294
ELSE ORH1F305.1295
IF (L_OPSEUDIC) THEN ORH1F305.1296
DO I = 1, IMT ORH1F305.1297
HTN_OR_QFLALT(I) = QFLUXALT(I) ORH1F305.1298
PME_OR_PMEALT(I) = PMEALT(I) ORH1F305.1299
ENDDO ORH1F305.1300
ELSE ORH1F305.1301
! Neither L_SEAICE or L_OPSEUDIC ORH1F305.1302
DO I = 1, IMT ORH1F305.1303
HTN_OR_QFLALT(I) = HTN(I) ORH1F305.1304
PME_OR_PMEALT(I) = PME(I) ORH1F305.1305
ENDDO ORH1F305.1306
C ORH1F305.1307
ENDIF ORH1F305.1308
ENDIF ORH1F305.1309
ENDIF ORH1F305.1310
C ORH1F305.1311
IF (L_OVARYT) THEN ORH1F305.1312
C ORH1F305.1313
CALL SFCADD
(TA, ORH1F305.1314
+ HTN_OR_QFLALT,PME_OR_PMEALT, ORH1F305.1315
+ TB(1,1,2), TRACER.846
+ IMT, KM, NT, TRACER.847
+ RZ, ORH1F305.1316
+ C2DTTS, SPECIFIC_HEAT_SI,RHO_WATER_SI ORH1F305.1317
+, fluxcorh,fluxcorw ORH1F305.1318
& ,tfreeze,fm OJG0F400.25
+, anomiceh,icy ORH1F305.1319
&,VTCO2_FLUX,VALK_FLUX,TB OJP0F404.946
& ,heatsink OJG0F401.11
+ ,salref) OJL1F405.19
C ORH1F305.1321
ELSE ORH1F305.1322
CALL SFCADD
(TA, ORH1F305.1323
+ HTN_OR_QFLALT,PME_OR_PMEALT, ORH1F305.1324
+ TB(1,1,2), ORH1F305.1325
+ IMT, KM, NT, ORH1F305.1326
+ DZ, TRACER.849
+ C2DTTS, SPECIFIC_HEAT_SI,RHO_WATER_SI TRACER.854
+, fluxcorh,fluxcorw OJT0F304.64
& ,tfreeze,fm OJG0F400.26
+, anomiceh,icy TRACER.859
&,VTCO2_FLUX,VALK_FLUX,TB OJP0F404.947
& ,heatsink OJG0F401.12
+ ,salref) OJL1F405.20
C ORH1F305.1327
C ORH1F305.1328
ENDIF ORH1F305.1329
if (L_INLANSEA) then OJL1F405.26
DO I=1,IMT OJL1F405.27
IF (FM(I,1).gt.0) THEN OJL1F405.28
if (ta(i,1,2).lt.sallow) then OJL1F405.29
diagsw(i,j)=diagsw(i,j) OJL1F405.30
& +1e9*dz(1)*(sallow-TA(I,1,2))/(C2DTTS*100.0) OJL1F405.31
TA(I,1,2)=sallow OJL1F405.32
endif OJL1F405.33
if (ta(i,1,2).gt.salup) then OJL1F405.34
diagsw(i,j)=diagsw(i,j) OJL1F405.35
& +1e9*dz(1)*(salup-TA(I,1,2))/(C2DTTS*100.0) OJL1F405.36
TA(I,1,2)=salup OJL1F405.37
endif OJL1F405.38
ENDIF OJL1F405.39
ENDDO OJL1F405.40
endif OJL1F405.41
C ORH1F305.1330
IF (SF_DT(7)) THEN JG170893.330
DO K=1,KM JG170893.331
DO I=1,IMT JG170893.332
WDTSFC(I,K)=TA(I,K,1)-DTWORK(I,K) JG170893.333
ENDDO JG170893.334
ENDDO JG170893.335
ENDIF JG170893.336
IF (SF_DS(7)) THEN OJG2F401.160
DO I=1,IMT OJG2F401.161
WDSSFC(I)=TA(I,1,2)-DSWORK(I,1) OJG2F401.162
ENDDO OJG2F401.163
ENDIF OJG2F401.164
C TRACER.862
IF (L_OMIXLAY) THEN ORH1F305.1332
C ORH1F305.1333
CALL STATED
(TA(1,1,1),TA(1,1,2),TDIF(1,1,1),WORKA,WORKB,IMT,1,J JA121293.137
&,KM JA121293.138
& ,JMT ORH7F404.23
&) JA121293.141
C ORH1F305.1334
DO i = 1,IMT TRACER.868
DRHO_NET(i) = TDIF(i,1,1) - DRHO_SOL(i) TRACER.869
END DO TRACER.870
C ORH1F305.1335
ENDIF ! L_OMIXLAY = true ORH1F305.1336
C JG170893.337
IF (L_SEAICE) THEN ORH1F305.1337
C ORH1F305.1338
IF (SF_DT(9)) THEN JG170893.338
DO K=1,KM JG170893.339
DO I=1,IMT JG170893.340
DTWORK(I,K)=TA(I,K,1) JG170893.341
ENDDO JG170893.342
ENDDO JG170893.343
ENDIF JG170893.344
IF (SF_DS(8)) THEN OJG2F401.165
DO I=1,IMT OJG2F401.166
DSWORK(I,1)=TA(I,1,2) OJG2F401.167
ENDDO OJG2F401.168
ENDIF OJG2F401.169
C TRACER.873
C--------------------------------------------------------------------- TRACER.874
C THE FOLLOWING CALL TO ICEFLUX INCREMENTS THE SURFACE TEMPERATURE TRACER.875
C AND SALINITY FIELDS TO APPLY THE ICE-OCEAN FLUXES. TRACER.876
C IT ALSO COMPUTES THE RESULTING CHANGE IN SURFACE DENSITY ORH1F305.1339
C WHEN L_OMIXLAY = true. ORH1F305.1340
C--------------------------------------------------------------------- TRACER.882
C TRACER.883
IF (L_OTIMER) CALL TIMER
('ICEFLUX ',103) GPB8F405.135
C ORH1F305.1342
IF (L_OVARYT) THEN ORH1F305.1343
C ORH1F305.1344
CALL ICEFLUX
(TA,FLXTOICE,CARYHEAT,CARYSALT,OCEANSNOWRATE,ICY, OJC2F400.143
+ DRHO_ICE, TRACER.892
& J,JMT, ORH7F404.24
+ IMT,KM,NT,DZ, JG170893.346
+ DTTSA(1), ORH1F305.1346
+ SPECIFIC_HEAT_SI,RHO_WATER_SI,QFUSION) ORH1F305.1347
C ORH1F305.1348
ELSE ORH1F305.1349
C ORH1F305.1350
CALL ICEFLUX
(TA,FLXTOICE,CARYHEAT,CARYSALT,OCEANSNOWRATE,ICY, OJC2F400.144
+ DRHO_ICE, ORH1F305.1352
& J,JMT, ORH7F404.25
+ IMT,KM,NT,DZ, ORH1F305.1355
+ C2DTTS, JG170893.348
+ SPECIFIC_HEAT_SI,RHO_WATER_SI,QFUSION) JG170893.351
C ORH1F305.1356
ENDIF ORH1F305.1357
C ORH1F305.1358
IF (L_OTIMER) CALL TIMER
('ICEFLUX ',104) GPB8F405.136
ORH1F305.1360
ENDIF ! L_SEAICE = true ORH1F305.1361
C JG170893.352
IF (SF_DT(9)) THEN JG170893.353
C ORH1F305.1362
IF (L_SEAICE) THEN ORH1F305.1363
DO K=1,KM ORH1F305.1364
DO I=1,IMT ORH1F305.1365
WDTICE(I,K)=TA(I,K,1)-DTWORK(I,K) ORH1F305.1366
ENDDO ORH1F305.1367
ENDDO ORH1F305.1368
ELSE ORH1F305.1369
DO K=1,KM ORH1F305.1370
DO I=1,IMT ORH1F305.1371
WDTICE(I,K)=0. ORH1F305.1372
ENDDO ORH1F305.1373
ENDDO ORH1F305.1374
ENDIF ORH1F305.1375
ENDIF JG170893.363
IF (SF_DS(8)) THEN OJG2F401.170
DO I=1,IMT OJG2F401.171
IF (L_SEAICE) THEN OJG2F401.172
WDSICE(I)=TA(I,1,2)-DSWORK(I,1) OJG2F401.173
ELSE OJG2F401.174
WDSICE(I)=0. OJG2F401.175
ENDIF OJG2F401.176
ENDDO OJG2F401.177
ENDIF OJG2F401.178
C JG170893.364
C TRACER.907
IF (L_OMIXLAY) THEN ORH1F305.1376
C ORH1F305.1377
CALL STATED
(TA(1,1,1),TA(1,1,2),TDIF(1,1,1),WORKA,WORKB,IMT,1,J JA121293.145
&,KM JA121293.146
&,JMT ORH7F404.26
&) JA121293.149
C ORH1F305.1378
ENDIF ORH1F305.1379
C ORH1F305.1380
IF (L_OSOLARAL) THEN ORH1F305.1381
ORH1F305.1382
IF (L_OBIOLOGY.AND.L_OCARBON) THEN ORH1F305.1383
C If single-waveband light model is used, call PIGSET to compute NT091293.58
C the square root of the pigment concentration (this is done before NT091293.59
C phytoplankton growth is been calculated) where biological model NT091293.60
C is in operation. NT091293.61
C NT091293.62
C NT091293.66
CALL PIGSET
(T,RTPIG OJP0F404.786
& ,ISSW,IESW ORH1F305.1384
+ ,IMT,KM,NT) NT091293.79
ENDIF ORH1F305.1385
C ORH1F305.1386
IF (.NOT.L_OBIOLOGY) THEN ORH1F305.1387
C NT091293.82
C If biology has not been selected, then assume that NT091293.83
C pigment concentration is zero NT091293.84
C NT091293.85
DO K=1,KM NT091293.86
DO I=1,IMT NT091293.87
RTPIG(I,K)=0.0 NT091293.88
ENDDO NT091293.89
ENDDO NT091293.90
ENDIF ! L_OBIOLOGY = false ORH1F305.1388
! OJP0F404.787
CALL SOLSET2
(SOL_PEN_BIO, RTPIG, KFIX_BIO, ETA_BIO, OJP0F404.788
+ KM, IMT, NT091293.94
+ DZ, ZDZ NT091293.95
+ ) NT091293.96
C NT091293.97
IF (L_OMIXLAY.AND.(.NOT.L_OSOLAR)) THEN OJP0F404.789
CALL MIXSET2
( DELPSF, DELPSL_LOC, DECAY, OJP0F404.790
+ GRAV_SI, DZ, ZDZ, ZDZZ, ORH1F305.1400
& GAMMA_DZ,IMT, OJP0F404.791
& KM, SOL_PEN_BIO, ETA_BIO, OJP0F404.792
& KFIX_BIO, DELTA_SI OJP0F404.793
+ ) ORH1F305.1404
ENDIF ! L_OMIXLAY.AND.(.NOT.L_OSOLAR) OJP0F404.794
ENDIF ! L_OSOLARAL= true ORH1F305.1410
C NT091293.114
IF (L_OSOLAR.OR.L_OSOLARAL) THEN ORH1F305.1411
C ORH1F305.1412
IF (L_SEAICE.OR.L_OPSEUDIC) THEN ORH1F305.1413
DO I = 1, IMT ORH1F305.1414
SOL_OR_SOLALT(I) = SOLALT(I) ORH1F305.1415
ENDDO ORH1F305.1416
ELSE ORH1F305.1417
DO I = 1, IMT ORH1F305.1418
SOL_OR_SOLALT(I) = SOL(I) ORH1F305.1419
ENDDO ORH1F305.1420
ENDIF ORH1F305.1421
ORH1F305.1422
IF (L_OSOLAR) THEN ORH1F305.1423
! If L_OSOLAR then use the standard light model OJP0F404.795
! values of SOL_PEN and DELPSL for the call to SOLADD. OJP0F404.796
! Note KFIX is already from standard light model. OJP0F404.797
DO K = 0, KM ORH1F305.1426
DO I = 1, IMT OJP0F404.798
SOL_PEN_LOC(I,K) = SOL_PEN(K) OJP0F404.799
DELPSL_LOC(I,K) = DELPSL(K) OJP0F404.800
ENDDO ORH1F305.1428
ENDDO OJP0F404.801
ELSE OJP0F404.802
! L_OSOLAR is false, so use bio light model results. OJP0F404.803
! Note DELPSL_LOC is already from bio light model. OJP0F404.804
DO K = 0, KM OJP0F404.805
DO I = 1, IMT OJP0F404.806
SOL_PEN_LOC(I,K) = SOL_PEN_BIO(I,K) OJP0F404.807
ENDDO OJP0F404.808
ENDDO OJP0F404.809
KFIX=KFIX_BIO OJP0F404.810
ENDIF ORH1F305.1429
IF ((.NOT.L_OSOLARAL).AND.L_OBIOLOGY) THEN OJP0F404.811
! Populate SOL_PEN_BIO with SOL_PEN_LOC for biology to use OJP0F404.812
! the standard light model. OJP0F404.813
DO K = 0, KM OJP0F404.814
DO I = 1, IMT OJP0F404.815
SOL_PEN_BIO(I,K) = SOL_PEN_LOC(I,K) OJP0F404.816
ENDDO OJP0F404.817
ENDDO OJP0F404.818
ENDIF OJP0F404.819
C ORH1F305.1430
IF (L_OVARYT) THEN ORH1F305.1431
C ORH1F305.1432
CALL SOLADD
(TA,WDTPEN, ORH1F305.1433
+ SOL_OR_SOLALT, ORH1F305.1434
& C2DTTS, ORH1F305.1435
& SOL_PEN_LOC,KFIX, ORH1F305.1436
+ KM,IMT,NT, NT091293.128
+ KMT, NT091293.129
+ RZ, ORH1F305.1437
+ SPECIFIC_HEAT_SI,RHO_WATER_SI NT091293.136
+ ) NT091293.137
C ORH1F305.1438
ELSE ORH1F305.1439
CALL SOLADD
(TA,WDTPEN, ORH1F305.1440
+ SOL_OR_SOLALT, ORH1F305.1441
+ C2DTTS, ORH1F305.1442
+ SOL_PEN_LOC, KFIX, ORH1F305.1443
+ KM,IMT,NT, ORH1F305.1444
+ KMT, ORH1F305.1445
+ DZ, ORH1F305.1446
+ SPECIFIC_HEAT_SI,RHO_WATER_SI ORH1F305.1447
+ ) ORH1F305.1448
C ORH1F305.1449
ENDIF ORH1F305.1450
C ORH1F305.1460
IF (L_OMIXLAY) THEN ORH1F305.1461
C ORH1F305.1462
CALL STATED
(TA(1,1,1),TA(1,1,2),DRHO_SOL(1),WORKA,WORKB,IMT,1,J JA121293.153
&,KM JA121293.154
&,JMT ORH7F404.27
&) JA121293.157
ENDIF ! L_OMIXLAY = true ORH1F305.1463
ENDIF ! L_OSOLARAL or L_OSOLAR = true ORH1F305.1464
ORH1F305.1465
IF (L_OMIXLAY) THEN ORH1F305.1466
ORH1F305.1467
DO i = 1,IMT TRACER.947
DRHO_SOL(i) = DRHO_SOL(i) - TDIF(i,1,1) TRACER.948
END DO TRACER.949
C ORH1F305.1470
ENDIF ORH1F305.1471
C ORH1F305.1472
C TRACER.952
C--------------------------------------------------------------------- TRACER.953
C IF L_SEAICE = TRUE THEN ... ORH1F305.1473
C THE FOLLOWING CALL TO FREEZEUP IMPOSES A MINIMUM TEMPERATURE OF TRACER.954
C FREEZING AT ALL LEVELS, AND STORES NEGATIVE HEAT FLUXES RELEASED TRACER.955
C BY THIS FOR USE IN THE ICE MODEL. IT ALSO IDENTIFIES ICE-FREE TRACER.956
C PLACES WHERE ICE IS ABOUT TO FORM, AND SETS NEWICE TO TRUE AT TRACER.957
C SUCH PLACES. TRACER.958
C--------------------------------------------------------------------- TRACER.959
C TRACER.960
C JG170893.365
IF (SF_DT(9)) THEN JG170893.366
DO K=1,KM JG170893.367
DO I=1,IMT JG170893.368
DTWORK(I,K)=TA(I,K,1) JG170893.369
ENDDO JG170893.370
ENDDO JG170893.371
ENDIF JG170893.372
C ORH1F305.1474
C ORH1F305.1475
IF (L_SEAICE) THEN ORH1F305.1476
C ORH1F305.1477
IF (L_OTIMER) CALL TIMER
('FREEZEUP ',103) GPB8F405.137
C ORH1F305.1479
IF (L_OVARYT) THEN ORH1F305.1480
C ORH1F305.1481
CALL FREEZEUP
(TA,ICY,NEWICE,CARYHEAT,IMT,KM,NT,FM, ORH1F305.1482
& HEATSINK,J,JMT, ORH7F404.28
+ DRHO_ICE, TRACER.969
& IMT_MIX,KM_MIX, ORH1F305.1483
& RZ,C2DTTS,SPECIFIC_HEAT_SI,RHO_WATER_SI,TFREEZE) ORH1F305.1484
ELSE ORH1F305.1485
CALL FREEZEUP
(TA,ICY,NEWICE,CARYHEAT,IMT,KM,NT,FM, ORH1F305.1486
& HEATSINK,J,JMT, ORH7F404.29
& DRHO_ICE, ORH1F305.1489
& IMT_MIX,KM_MIX, ORH1F305.1490
& DZ,C2DTTS,SPECIFIC_HEAT_SI,RHO_WATER_SI,TFREEZE) ORH1F305.1491
C ORH1F305.1492
ENDIF ORH1F305.1493
C ORH1F305.1494
C ORH1F305.1495
IF (L_OTIMER) CALL TIMER
('FREEZEUP ',104) GPB8F405.138
ENDIF ORH1F305.1497
C ORH1F305.1498
IF (L_OPSEUDIC) THEN ORH1F305.1499
C TRACER.984
C----------------------------------------------------------------------- TRACER.985
C Pseudo-ice model. If T drops below TFREEZ, it is reset to TFREEZ. TRACER.986
C Climatological ice points are always reset to their climatological TRACER.987
C SST and SSS. Convection is disabled under both types of point. TRACER.988
C----------------------------------------------------------------------- TRACER.989
C TRACER.990
IF (L_OMIXLAY) THEN ORH1F305.1500
C ORH1F305.1501
CALL STATED
(TA(1,1,1),TA(1,1,2),TDIF(1,1,1),WORKA,WORKB,IMT,1,J JA121293.161
&,KM JA121293.162
&,JMT ORH7F404.30
&) JA121293.165
C TRACER.994
ENDIF ORH1F305.1502
C ORH1F305.1503
C Account for temperature resetting in energy calculation. TRACER.997
C ********* NOTE: This code is omitted when isopycnal diffusion TRACER.998
C is present, since energy calculations TRACER.999
C have not yet been worked out. TRACER.1000
C TRACER.1001
C ORH1F305.1504
IF (.NOT.(L_OISOPYC)) THEN ORH1F305.1505
C ORH1F305.1506
IF(NERGY .EQ. 1 .AND. MXP .NE. 1) THEN ORH1F305.1507
DO K = 1,KM ORH1F305.1508
DO I=2,IMTM1 ORH1F305.1517
FACTOR = CST(J)*DXT(I)*DYT(J)*DZ(K)/C2DTTS ORH1F305.1518
IF(TA(I,K,1) .LT. TFREEZ ORH1F305.1519
%.OR.((BICE(I).LT.1.E-3).AND.K.EQ.1) ORH1F305.1520
%) TTDTOT(5,1) = TTDTOT(5,1) + (TFREEZ - TA(I,K,1))*FACTOR ORH1F305.1521
ENDDO ! over I ORH1F305.1522
ENDDO ! over K ORH1F305.1524
ENDIF ORH1F305.1525
ENDIF TRACER.1024
C ORH1F305.1526
C ORH1F305.1527
C ORH1F305.1528
C TRACER.1027
C Now reset temperatures. TRACER.1028
C TRACER.1029
DO K=1,KM ORH1F305.1529
DO I=1,IMT ORH1F305.1537
TA(I,K,1)=MAX(TA(I,K,1) , TFREEZ) ORH1F305.1538
ENDDO ! over I ORH1F305.1539
ENDDO ! over K ORH1F305.1541
C TRACER.1045
C Reset surface temperature and salinity to climatology at TRACER.1046
C climatological ice points. Temperature at such points is TFREEZ. TRACER.1047
C !!!!!!!!!!!!!THIS MAY CAUSE PROBLEMS!!!!!!!!!!!!!!!! TRACER.1048
C TRACER.1049
DO I=1,IMT ORH7F404.12
IF (BICE(I).LT.1.E-3) THEN ORH7F404.13
TA(I,1,1)=T_REF(I) ORH7F404.14
TA(I,1,2)=S_REF(I) ORH7F404.15
ENDIF ORH7F404.16
ENDDO ! over I ORH7F404.17
C ORH1F305.1559
IF (L_OMIXLAY) THEN ORH1F305.1560
C TRACER.1068
C ORH1F305.1563
CALL STATED
(TA(1,1,1),TA(1,1,2),DRHO_PSEU(1),WORKA,WORKB,IMT,1,J JA121293.176
&,KM JA121293.177
&,JMT ORH7F404.31
&) JA121293.180
JA121293.181
JA121293.183
DO i=1,IMT TRACER.1075
DRHO_PSEU(i)=DRHO_PSEU(i)-TDIF(i,1,1) TRACER.1076
END DO TRACER.1077
C JG170893.373
ENDIF ! L_OMIXLAY = true ORH1F305.1565
ENDIF ! L_OPSUEDIC = true ORH1F305.1566
C ORH1F305.1567
IF (SF_DT(9)) THEN JG170893.374
DO K=1,KM JG170893.375
DO I=1,IMT JG170893.376
WDTICE(I,K)=TA(I,K,1)-DTWORK(I,K)+WDTICE(I,K) JG170893.377
ENDDO JG170893.378
ENDDO JG170893.379
ENDIF JG170893.380
IF ((L_OMEDOUT).AND.(.NOT.L_OMEDADV)) THEN OOM2F405.293
C Mediterranean outflow: JG170893.381
IF (SF_DT(15)) THEN JG170893.382
DO K=1,KM JG170893.383
DO I=1,IMT JG170893.384
DTWORK(I,K)=TA(I,K,1) JG170893.385
ENDDO JG170893.386
ENDDO JG170893.387
ENDIF JG170893.388
IF (SF_DS(14)) THEN OJG2F401.179
DO K=1,KM OJG2F401.180
DO I=1,IMT OJG2F401.181
DSWORK(I,K)=TA(I,K,2) OJG2F401.182
ENDDO OJG2F401.183
ENDDO OJG2F401.184
ENDIF OJG2F401.185
C OJG2F401.186
C OOM1F403.72
C Mediterranean outflow parameterization OOM1F403.73
C Update Tracers using the tendencies calculated in BLOKCALC OOM1F403.74
C and passed down. Mixing is assumed to be instantaneous. OOM1F403.75
C OOM1F403.76
*IF DEF,MPP OOM1F403.77
IF ((J + J_OFFSET) .EQ.jmout(1)) THEN OOM1F403.78
*ELSE OOM1F403.79
IF (J.EQ.jmout(1)) THEN OOM1F403.80
*ENDIF OOM1F403.81
DO M=1,NT OOM1F403.82
DO K=1,NMEDLEV OOM1F403.83
TA(imout(1),K,M)=TA(imout(1),K,M)+ATTEND(K,M,1) OOM1F403.84
ENDDO OOM1F403.85
ENDDO OOM1F403.86
ENDIF OOM1F403.87
OOM1F403.88
*IF DEF,MPP OOM1F403.89
IF ((J + J_OFFSET).EQ.jmout(2)) THEN OOM1F403.90
*ELSE OOM1F403.91
IF (J.EQ.jmout(2)) THEN OOM1F403.92
*ENDIF OOM1F403.93
DO M=1,NT OOM1F403.94
DO K=1,NMEDLEV OOM1F403.95
TA(imout(2),K,M)=TA(imout(2),K,M)+ATTEND(K,M,2) OOM1F403.96
ENDDO OOM1F403.97
ENDDO OOM1F403.98
ENDIF OOM1F403.99
OOM1F403.100
*IF DEF,MPP OOM1F403.101
IF ((J + J_OFFSET).EQ.jmout(3)) THEN OOM1F403.102
*ELSE OOM1F403.103
IF (J.EQ.jmout(3)) THEN OOM1F403.104
*ENDIF OOM1F403.105
DO M=1,NT OOM1F403.106
DO K=1,NMEDLEV OOM1F403.107
TA(imout(3),K,M)=TA(imout(3),K,M)+ATTEND(K,M,3) OOM1F403.108
ENDDO OOM1F403.109
ENDDO OOM1F403.110
ENDIF OOM1F403.111
OOM1F403.112
*IF DEF,MPP OOM1F403.113
IF ((J + J_OFFSET).EQ.jmout(4)) THEN OOM1F403.114
*ELSE OOM1F403.115
IF (J.EQ.jmout(4)) THEN OOM1F403.116
*ENDIF OOM1F403.117
DO M=1,NT OOM1F403.118
DO K=1,NMEDLEV OOM1F403.119
TA(imout(4),K,M)=TA(imout(4),K,M)+ATTEND(K,M,4) OOM1F403.120
ENDDO OOM1F403.121
ENDDO OOM1F403.122
ENDIF OOM1F403.123
OOM1F403.124
C OJG2F401.189
C Mediterranean outflow: JG170893.389
IF (SF_DT(15)) THEN JG170893.390
DO K=1,KM JG170893.391
DO I=1,IMT JG170893.392
WDTMED(I,K)=TA(I,K,1)-DTWORK(I,K) JG170893.393
ENDDO JG170893.394
ENDDO JG170893.395
ENDIF JG170893.396
IF (SF_DS(14)) THEN OJG2F401.190
DO K=1,KM OJG2F401.191
DO I=1,IMT OJG2F401.192
WDSMED(I,K)=TA(I,K,2)-DSWORK(I,K) OJG2F401.193
ENDDO OJG2F401.194
ENDDO OJG2F401.195
ENDIF OJG2F401.196
ENDIF ! (L_OMEDOUT).AND.(.NOT.L_OMEDADV) OOM2F405.294
OOM2F405.295
C JG170893.397
C SET SALINITY TO 45 PPT OVER LAND TO STOP CONVECTION THERE TRACER.1080
C (..NOTE THAT THIS IS .01 IN MODEL UNITS -- (PPT-35)/1000..) TRACER.1081
C--------------------------------------------------------------------- TRACER.1085
C TRACER.1086
IF(NT.GE.2) THEN TRACER.1087
FXA=0.01 TRACER.1088
FXB=1.0 TRACER.1089
DO 860 K=1,KM TRACER.1090
DO 860 I=1,IMT TRACER.1091
TA(I,K,2)=FM(I,K)*TA(I,K,2) + FXA*(FXB-FM(I,K)) TRACER.1092
860 CONTINUE TRACER.1093
ENDIF TRACER.1094
C ORH1F305.1569
IF (L_OCARBON) THEN ORH1F305.1605
C NT071293.61
C Calculate the dissociation constants for the inorganic NT071293.62
C carbon cycle NT071293.63
C NT071293.64
CALL EQUILIB_CONST
(TB, REK0, REK, RG1, RG2, RG3, OJP0F404.820
+ IMT, KM, NT) NT071293.66
C NT071293.67
C Compute partial pressure of CO2 at the sea surface NT071293.68
C NT071293.69
CALL PPCO2
(TB, REK0, REK, RG1, RG2, RG3, OJP0F404.821
+ IMT, KM, NT, NT071293.71
+ FM, PCO2) NT071293.72
C NT071293.73
C Update TCO2 in the surface layer according to the difference NT071293.74
C in partial pressure between ocean and atmosphere NT071293.75
C NT071293.76
CALL FLUX_CO2
(TA, REK0, PCO2, CO2_FLUX, ATMPCO2_ROW, OCN1F405.26
+ INVADE,EVADE, NT071293.78
+ c14to12_atm, NT071293.80
+ WME, NT071293.83
+ AICE, NT071293.86
+ BICE, NT071293.89
+ IMT, KM, NT, NT071293.91
& FM, DZ, TIMESTEP(1) ) OJP0F404.822
C ORH1F305.1609
IF (L_OCARB14) THEN ORH1F305.1622
C NT071293.99
C Compute radioactive decay of C-14, with half-life of NT071293.100
C 5730 years=> decay const=3.89e-12 s-1 NT071293.101
DO K=1,KM NT071293.102
fxa=3.88915e-12*TIMESTEP(K) OJP0F404.823
DO I=1,IMT NT071293.107
TA(I,K,C14_TRACER)=TA(I,K,C14_TRACER)-fxa*TB(I,K,C14_TRACER) OJP0F404.824
ENDDO NT071293.109
ENDDO NT071293.110
C ORH1F305.1629
ENDIF ! L_OCARB14 = true ORH1F305.1630
C ORH1F305.1631
ENDIF ! L_OCARBON = true ORH1F305.1632
C--------------------------------------------------------------------- TRACER.1096
C DO ANALYSIS OF TRACER FORCING ON ENERGY TIMESTEP TRACER.1097
C--------------------------------------------------------------------- TRACER.1098
C TRACER.1099
IF(NERGY.EQ.0) GO TO 920 TRACER.1100
C ORH1F305.1633
C ORH1F305.1635
DO 910 I=2,IMTM1 TRACER.1104
KZ=KMT(I) TRACER.1105
IF (KZ.EQ.0) GOTO 910 TRACER.1106
DO 900 M=1,NT TRACER.1107
DO 900 K=1,KZ TRACER.1108
KM1=MAX(1,K-1) TRACER.1109
KP1=MIN(KM,K+1) TRACER.1110
KP2=MIN(KM+1,K+2) TRACER.1111
BOXVOL = CST(J)*DXT(I)*DYT(J)*DZ(K) TRACER.1112
C TRACER.1113
C 1ST, COMPUTE TRACER CHANGE DUE TO ADVECTION TRACER.1114
C TRACER.1115
TTDTOT(2,M)=TTDTOT(2,M)+BOXVOL* TRACER.1116
* ((-FUW (I+1,K)*(T (I+1,K,M)+T (I ,K,M)) TRACER.1117
* +FUW (I ,K)*(T (I ,K,M)+T (I-1,K,M)))*DXT4R(I) TRACER.1118
* -FVN (I ,K)*(TP(I ,K,M)+T (I ,K,M)) TRACER.1119
* +FVST(I ,K)*(T (I ,K,M)+TM(I ,K,M))) TRACER.1120
IF (.NOT.(L_OIMPADDF)) THEN ORH1F305.1636
TTDTOT(3,M)=TTDTOT(3,M)+BOXVOL* ORH1F305.1637
* (W(I,K+1)*(T(I,K ,M)+T(I,KP1,M)) TRACER.1123
* -W(I,K )*(T(I,KM1,M)+T(I,K ,M)))*DZ2R(K) TRACER.1124
ELSE ORH1F305.1638
TTDTOT(3,M)=TTDTOT(3,M)+(BOXVOL*0.5)* ORH1F305.1639
* (W(I,K+1)*(TB(I,K ,M)+TB(I,KP1,M)+ TRACER.1128
* TF(I,K,M) + TF(I,KP1,M)) TRACER.1129
* -W(I,K )*(TB(I,KM1,M)+TB(I,K ,M)+ TRACER.1130
* TF(I,KM1,M) + TF(I,K,M)))*DZ2R(K) NB151293.1
ENDIF ORH1F305.1640
C ORH1F305.1641
IF (.NOT.(L_OISOPYC)) THEN ORH1F305.1642
C TRACER.1134
C 2ND, COMPUTE TRACER CHANGE DUE TO HORIZONTAL DIFFUSION TRACER.1135
C TRACER.1136
TTDTOT(4,M)=TTDTOT(4,M)+BOXVOL* TRACER.1137
* (BBTJ*DXU2R(I )*DXT4R(I)*FM(I+1,K)*(TB(I+1,K,M)-TB(I,K,M)) TRACER.1138
* +BBTJ*DXU2R(I-1)*DXT4R(I)*FM(I-1,K)*(TB(I-1,K,M)-TB(I,K,M)) TRACER.1139
* +CCTJ*FMP(I,K)*(TBP(I,K,M)-TB(I,K,M)) TRACER.1140
* +DDTJ*FMM(I,K)*(TBM(I,K,M)-TB(I,K,M))) TRACER.1141
ENDIF ORH1F305.1643
IF (.NOT.(L_OIMPDIF.OR.L_OIMPADDF)) THEN ORH1F305.1644
C TRACER.1144
C 3RD, COMPUTE TRACER CHANGE DUE TO VERTICAL DIFFUSION TRACER.1145
C TRACER.1146
TTDTOT(5,M)=TTDTOT(5,M)+BOXVOL* ORH1F305.1645
* (EEH(K)*(TDIF(I,K,M)-TDIF(I,K+1,M)) TRACER.1148
* -FFH(K)*(TDIF(I,K+1,M)-TDIF(I,K+2,M))) TRACER.1149
ENDIF ORH1F305.1646
C ORH1F305.1647
IF (L_OIMPADDF) THEN ORH1F305.1648
TTDTOT(5,M)=TTDTOT(5,M)+(BOXVOL*0.5)* ORH1F305.1649
* (gnu(I,KP1)*(2.0*DZ2R(K)*DZZ2R(K)) * NB151293.2
* (TF(I,K,M)-TF(I,KP1,M)+ TRACER.1154
* TB(I,K,M)-TB(I,KP1,M)) TRACER.1155
* -gnu(I,K)*(2.0*DZ2R(K)*DZZ2R(KM1))* NB151293.3
* (TF(I,KM1,M)-TF(I,K,M)+ TRACER.1157
* TB(I,KM1,M)-TB(I,K,M))) TRACER.1158
ENDIF ORH1F305.1650
900 CONTINUE TRACER.1160
C TRACER.1161
C 4TH, COMPUTE TOTAL ENERGY EXCHANGE BETWEEN POTENTIAL AND KINETIC TRACER.1162
C TRACER.1163
IF(KZ.LT.2) GO TO 910 TRACER.1164
FX=CST(J)*DXT(I)*DYT(J)*GRAV*0.5 TRACER.1165
DO 905 K=2,KZ TRACER.1166
BUOY=BUOY-FX*DZZ(K)*W(I,K)*(RHOS(I,K-1)+RHOS(I,K)) TRACER.1167
905 CONTINUE TRACER.1168
910 CONTINUE TRACER.1169
920 CONTINUE TRACER.1170
C ORH1F305.1651
IF (L_OMIXLAY) THEN ORH1F305.1652
C ORH1F305.1653
IF (SF_DT(10)) THEN JG170893.398
DO K=1,KM JG170893.399
DO I=1,IMT JG170893.400
DTWORK(I,K)=TA(I,K,1) JG170893.401
ENDDO JG170893.402
ENDDO JG170893.403
ENDIF JG170893.404
IF (SF_DS(9)) THEN OJG2F401.197
DO K=1,KM OJG2F401.198
DO I=1,IMT OJG2F401.199
DSWORK(I,K)=TA(I,K,2) OJG2F401.200
ENDDO OJG2F401.201
ENDDO OJG2F401.202
ENDIF OJG2F401.203
C ORH1F305.1654
IF (L_OBIOLOGY) THEN ORH1F305.1655
C ORH1F305.1656
IF (SF_BIO(21)) THEN ONT1F304.395
DO K=1,KM ONT1F304.396
DO I=1,IMT ONT1F304.397
DNWORK(I,K)=TA(I,K,NUTRIENT_TRACER) OJP0F404.825
ENDDO ONT1F304.399
ENDDO ONT1F304.400
ENDIF ONT1F304.401
C ORH1F305.1657
ENDIF ! L_OBIOLOGY = true ORH1F305.1658
C ORH1F305.1659
C ORH1F305.1660
IF (L_SEAICE.OR.L_OPSEUDIC) THEN ORH1F305.1661
DO I = 1, IMT ORH1F305.1662
WME_MIX(I) = WMEALT(I) ORH1F305.1663
ENDDO ORH1F305.1664
ELSE ORH1F305.1665
DO I = 1, IMT ORH1F305.1666
WME_MIX(I) = WME (I) ORH1F305.1667
ENDDO ORH1F305.1668
ENDIF ORH1F305.1669
IF (L_OISOPYC) THEN ORH1F305.1670
DO I = 1, IMT ORH1F305.1671
MLD_MIX(I) = MLD(I,J) ORH1F305.1672
ENDDO ORH1F305.1673
ELSE ORH1F305.1674
DO I = 1, IMT ORH1F305.1675
MLD_MIX(I) = DIAG_MLD(I) ORH1F305.1676
ENDDO ORH1F305.1677
ENDIF ORH1F305.1678
ORH1F305.1679
C ORH1F305.1689
C OOM1F405.841
C ONLY CALL MIXLAY (AKA KRAUS-TURNER) IF THE FULL LARGE SCHEME IS OOM1F405.842
C NOT REQUIRED. IF FULL LARGE SCHEME IS USED, THEN CALL VDIFCALT OOM1F405.843
C HERE INSTEAD AFTER THE APPLICATION OF SURFACE TERMS. OOM1F405.844
C OOM1F405.845
IF (L_OFULARGE) THEN OOM1F405.846
DO I=1,IMT OOM1F405.847
MLD_MIX(I) = MLD_LARGE(I)*0.01 ! 0.01 CONVERTS CM TO M OOM1F405.848
ENDDO OOM1F405.849
C OOM1F405.850
CALL VDIFCALT
OOM1F405.851
& ( J,IMT,IMTM1,KM,KMP1,KMM1,NT, OOM1F405.852
& TA, OOM1F405.853
& DZ2R,DZZ2RQ,DZ2RQ,C2DTTS, OOM1F405.854
& DTTSA, OOM1F405.855
& FM, OOM1F405.856
& fk3_or_gnu(1,1),CGFLUX OOM1F405.857
& ) OOM1F405.858
C OOM1F405.859
ENDIF ! FOR L_OFULARGE OOM1F405.860
C OOM1F405.861
IF (.NOT.L_OFULARGE) THEN OOM1F405.862
IF (L_OVARYT) THEN ORH1F305.1690
CALL MIXLAY
( TA, WME_MIX, IMT, KM, NT ORH1F305.1691
& ,J,JMT ORH7F404.32
& ,C2DTTS, GRAV_SI ORH1F305.1694
& ,DZ, ZDZ ORH1F305.1695
& ,RZ ORH1F305.1696
& ,FM, KMT, LAMDA, EPSILON,DELPSF, DELPSL_LOC, DECAY OJP0F404.826
& ,DRHO_SOL, DRHO_NET ORH1F305.1698
& ,DRHO_ICE, DRHO_PSEU ORH1F305.1699
& ,MLD_MIX ORH1F305.1700
& ) ORH1F305.1701
ELSE ORH1F305.1702
CALL MIXLAY
( TA, WME_MIX, IMT, KM, NT ORH1F305.1703
& ,J,JMT ORH7F404.33
& ,C2DTTS, GRAV_SI ORH1F305.1706
& ,DZ, ZDZ ORH1F305.1707
& ,DZ ORH1F305.1708
& ,FM, KMT, LAMDA, EPSILON,DELPSF, DELPSL_LOC, DECAY OJP0F404.827
& ,DRHO_SOL, DRHO_NET ORH1F305.1710
& ,DRHO_ICE, DRHO_PSEU ORH1F305.1711
& ,MLD_MIX ORH1F305.1712
& ) ORH1F305.1713
ENDIF ORH1F305.1714
ENDIF ! FOR .NOT.L_OFULARGE OOM1F405.863
C ORH1F305.1715
IF (L_OISOPYC) THEN ORH1F305.1722
DO I = 1, IMT ORH1F305.1723
MLD(I,J) = MLD_MIX(I) ORH1F305.1724
ENDDO ORH1F305.1725
ELSE ORH1F305.1726
DO I = 1, IMT ORH1F305.1727
DIAG_MLD(I) = MLD_MIX(I) ORH1F305.1728
ENDDO ORH1F305.1729
ENDIF ORH1F305.1730
C ORH1F305.1731
C ORH1F305.1732
IF (SF_DT(10)) THEN JG170893.405
DO K=1,KM JG170893.406
DO I=1,IMT JG170893.407
WDTMIX(I,K)=TA(I,K,1)-DTWORK(I,K) JG170893.408
ENDDO JG170893.409
ENDDO JG170893.410
ENDIF JG170893.411
IF (SF_DS(9)) THEN OJG2F401.204
DO K=1,KM OJG2F401.205
DO I=1,IMT OJG2F401.206
WDSMIX(I,K)=TA(I,K,2)-DSWORK(I,K) OJG2F401.207
ENDDO OJG2F401.208
ENDDO OJG2F401.209
ENDIF OJG2F401.210
C ORH1F305.1733
IF (L_OBIOLOGY) THEN ORH1F305.1734
C ORH1F305.1735
IF (SF_BIO(21)) THEN ORH1F305.1736
DO K=1,KM ORH1F305.1737
DO I=1,IMT ORH1F305.1738
WMIX_NUT(I,K)=TA(I,K,NUTRIENT_TRACER)-DNWORK(I,K) OJP0F404.828
ENDDO ORH1F305.1740
ENDDO ORH1F305.1741
ENDIF ORH1F305.1742
ENDIF ONT1F304.410
ENDIF ! L_OMIXLAY = true ORH1F305.1743
C TRACER.1215
C--------------------------------------------------------------------- TRACER.1216
C CONVECTIVELY ADJUST WATER COLUMN IF GRAVITATIONALLY UNSTABLE TRACER.1217
C--------------------------------------------------------------------- TRACER.1218
C TRACER.1219
C TRACER.1223
IF (L_OBIOLOGY) THEN ORH1F305.1744
C ORH1F305.1745
IF (SF_BIO(22)) THEN ONT1F304.413
DO K=1,KM ONT1F304.414
DO I=1,IMT ONT1F304.415
DNWORK(I,K)=TA(I,K,NUTRIENT_TRACER) OJP0F404.829
ENDDO ONT1F304.417
ENDDO ONT1F304.418
ENDIF ONT1F304.419
C ORH1F305.1746
ENDIF ! L_OBIOLOGY ORH1F305.1747
C ORH1F305.1748
IF (SF_DT(11)) THEN JG170893.412
DO K=1,KM JG170893.413
DO I=1,IMT JG170893.414
DTWORK(I,K)=TA(I,K,1) JG170893.415
ENDDO JG170893.416
ENDDO JG170893.417
ENDIF JG170893.418
IF (SF_DS(10)) THEN OJG2F401.211
DO K=1,KM OJG2F401.212
DO I=1,IMT OJG2F401.213
DSWORK(I,K)=TA(I,K,2) OJG2F401.214
ENDDO OJG2F401.215
ENDDO OJG2F401.216
ENDIF OJG2F401.217
IF (L_OCONVROUS) THEN OOM2F403.17
C OOM2F403.18
C Call subroutine CONVADJ. OOM2F403.19
C This will perform the convective adjustment by mixing an unstable OOM2F403.20
C box with that box which it would be neutraly buoyant with. OOM2F403.21
C Intervening boxes are then shuffled up. Convfull should still be OOM2F403.22
C called after to ensure the column is stable (convadj does not OOM2F403.23
C guarantee a fully stable water column). OOM2F403.24
IF (L_OMEDADV) THEN OOM2F405.296
C do Roussenov convection at the points where the med outflow OOM2F405.297
C exits into the Atlantic. OOM2F405.298
OOM2F405.299
*IF DEF,MPP OOM2F405.300
IF (J+J_OFFSET .GE. jmout(1) .AND. OOM2F405.301
& J+J_OFFSET .LE. jmout(4)) THEN OOM2F405.302
*ELSE OOM2F405.303
IF (J .GE. jmout(1) .AND. J .LE. jmout(4)) THEN OOM2F405.304
*ENDIF OOM2F405.305
IF (L_OVARYT) THEN OOM2F405.306
CALL CONVADJ
( OOM2F405.307
+ IMT,KM,NT, OOM2F405.308
+ KMT,RZ,TA, OOM2F405.309
+ ITT,imout(1)-1,imout(1)+1 OOM2F405.310
+ ) OOM2F405.311
ELSE OOM2F405.312
CALL CONVADJ
( OOM2F405.313
+ IMT,KM,NT, OOM2F405.314
+ KMT,DZ,TA, OOM2F405.315
+ ITT,imout(1)-1,imout(1)+1 OOM2F405.316
+ ) OOM2F405.317
ENDIF OOM2F405.318
ENDIF ! end of applicable range of J's OOM2F405.319
C OOM2F405.320
ENDIF ! L_OMEDADV OOM2F405.321
OOM2F405.322
*IF DEF,MPP OOM2F403.25
IF (J+J_OFFSET .GE. JSROUS .AND. OOM2F403.26
& J+J_OFFSET .LE. JEROUS) THEN OOM2F403.27
*ELSE OOM2F403.28
IF (J .GE. JSROUS .AND. J .LE. JEROUS) THEN OOM2F403.29
*ENDIF OOM2F403.30
IF (L_OVARYT) THEN OOM2F403.31
CALL CONVADJ
( OOM2F403.32
+ IMT,KM,NT, OOM2F403.33
+ KMT,RZ,TA, OOM2F403.34
+ ITT,ISROUS,IEROUS OOM2F403.35
+ ) OOM2F403.36
ELSE OOM2F403.37
CALL CONVADJ
( OOM2F403.38
+ IMT,KM,NT, OOM2F403.39
+ KMT,DZ,TA, OOM2F403.40
+ ITT,ISROUS,IEROUS OOM2F403.41
+ ) OOM2F403.42
ENDIF OOM2F403.43
ENDIF ! end of applicable range of J's OOM2F403.44
ENDIF ! Roussenov convection OOM2F403.45
C OJG0F403.51
IF (L_COXCNVC) THEN OJG0F403.52
C OJG0F403.53
C Original Cox convection scheme OJG0F403.54
C OJG0F403.55
CALL COXCNVC
( OJG0F403.56
& NT,NTMIN2,IMT,IMTM1,JMT,J,KM,KMM1,KMP1,KMP2 OJG0F403.57
& ,DZ,DZZ2R,RZ,RZZ2R OJG0F403.59
& ,TCHECK,TDIF,TA OJG0F403.60
& ) OJG0F403.61
C OJG0F403.62
ELSE OJG0F403.63
C OJG0F403.64
C Call CONVFULL to do complete convective adjustment using ORW2F400.1
C Rahmstorf's algorithm. N.B. does not suppress convection ORW2F400.2
C under pseudo-ice points (option PSEUDIC). Works with ORW2F400.3
C variable timestep with depth by passing RZ, rather than ORW2F400.4
C DZ, down into CONVFULL. ORW2F400.5
C ORW2F400.9
IF (L_OVARYT) THEN ORW2F400.10
CALL CONVFULL
(IMT,KM,NT,KMT,RZ,TA ORW2F400.11
+ ) ORW2F400.12
ELSE ORW2F400.13
CALL CONVFULL
(IMT,KM,NT,KMT,DZ,TA ORW2F400.14
+ ) ORW2F400.15
END IF ORW2F400.16
C OJG0F403.65
ENDIF OJG0F403.66
C ORH1F305.1794
IF (L_OBIOLOGY) THEN ORH1F305.1795
C ORH1F305.1796
IF (SF_BIO(22)) THEN ONT1F304.422
DO K=1,KM ONT1F304.423
DO I=1,IMT ONT1F304.424
WCNVC_NUT(I,K)=TA(I,K,NUTRIENT_TRACER)-DNWORK(I,K) OJP0F404.830
ENDDO ONT1F304.426
ENDDO ONT1F304.427
ENDIF ONT1F304.428
C ORH1F305.1797
ENDIF ! L_BIOLOGY ORH1F305.1798
C ORH1F305.1799
IF (SF_DT(11)) THEN JG170893.419
DO K=1,KM JG170893.420
DO I=1,IMT JG170893.421
WDTCNVC(I,K)=TA(I,K,1)-DTWORK(I,K) JG170893.422
ENDDO JG170893.423
ENDDO JG170893.424
ENDIF JG170893.425
IF (SF_DS(10)) THEN OJG2F401.218
DO K=1,KM OJG2F401.219
DO I=1,IMT OJG2F401.220
WDSCNVC(I,K)=TA(I,K,2)-DSWORK(I,K) OJG2F401.221
ENDDO OJG2F401.222
ENDDO OJG2F401.223
ENDIF OJG2F401.224
C TRACER.1266
OJP0F404.831
IF (L_OBIOLOGY.AND.L_OCARBON) THEN OJP0F404.832
OJP0F404.833
! Call BIOLOGY to update the biological tracers for this OJP0F404.834
! timestep. BIOLOGY determines the physics nutrient supply over OJP0F404.835
! the timestep from (TA minus TB) at this point in tracer. OJP0F404.836
OJP0F404.837
! This DNWORK is for the WBIO_NUT diagnostic which stores the OJP0F404.838
! timestep change in nutrient due to the biology. OJP0F404.839
IF (SF_BIO(23)) THEN OJP0F404.840
DO K=1,KM OJP0F404.841
DO I=1,IMT OJP0F404.842
DNWORK(I,K)=TA(I,K,NUTRIENT_TRACER) OJP0F404.843
ENDDO OJP0F404.844
ENDDO OJP0F404.845
ENDIF OJP0F404.846
OJP0F404.847
CALL BIOLOGY
(T,TA,TB,SOL_PEN_BIO,KFIX_BIO,RTPIG,PI, OJP0F404.848
& TIMESTEP,ETA_BIO, OJP0F404.849
& DAYLEN,DLCO,SOL_OR_SOLALT, OJP0F404.850
& PRIM_PROD,ZOO_PROD,PHYTO_GROW, OJP0F404.851
& PHYTO_GRAZE,PHYTO_MORT, OJP0F404.852
& EXCRETE_NUT,GROW_NUT,PMORT_NUT,ZMORT_NUT, OJP0F404.853
& PRESP_NUT,REMIN_NUT, OJP0F404.854
& NUT_LIMIT,LIGHT_LIMIT,TEMP_LIMIT, OJP0F404.855
& DETRI_FLUX, OJP0F404.856
& SF_BIO, OJP0F404.857
& DZ,ZDZ,JMT,FM, OJP0F404.858
& SWNCOL, OJP0F404.859
& J,IMT,KM,KMP1,KMT,NT) OJP0F404.860
OJP0F404.861
CALL BIOMIX
(TA, IMT, KM, NT, DZ, ZDZ, RZ, OJP0F404.862
& FM, KMT, MLD_MIX) OJP0F404.863
OJP0F404.864
IF (SF_BIO(23)) THEN OJP0F404.865
DO K=1,KM OJP0F404.866
DO I=1,IMT OJP0F404.867
WBIO_NUT(I,K)=TA(I,K,NUTRIENT_TRACER)-DNWORK(I,K) OJP0F404.868
ENDDO OJP0F404.869
ENDDO OJP0F404.870
ENDIF OJP0F404.871
OJP0F404.872
ENDIF ! L_OBIOLOGY and L_OCARBON OJP0F404.873
OJP0F404.874
C======================================================================= TRACER.1267
C END COMPUTATION OF THE TRACERS ===================================== TRACER.1268
C======================================================================= TRACER.1269
C TRACER.1270
C--------------------------------------------------------------------- TRACER.1271
C INTEGRATE TOTAL CHANGES IN T,S AND SQUARED T,S ON ENERGY TIMESTEP TRACER.1272
C--------------------------------------------------------------------- TRACER.1273
C TRACER.1274
IF(NERGY.EQ.1) THEN TRACER.1275
DO M=1,NT ORH1F305.1800
DO K=1,KM ORH1F305.1801
FX=CST(J)*DYT(J)*DZ(K)/C2DTTS TRACER.1278
DO I=2,IMTM1 ORH7F404.18
TTDTOT(1,M)=TTDTOT(1,M)+(TA(I,K,M) -TB(I,K,M) )*FX*DXT(I) ORH1F305.1811
TVAR(M) =TVAR(M) +(TA(I,K,M)**2-TB(I,K,M)**2)*FX*DXT(I) ORH1F305.1812
ENDDO ! over I ORH7F404.19
ENDDO ! over K ORH1F305.1815
ENDDO ! over M ORH1F305.1816
ENDIF TRACER.1294
C TRACER.1295
IF (L_OFILTER) THEN ORH1F305.1817
C--------------------------------------------------------------------- TRACER.1297
C FOURIER FILTER TRACERS AT HIGH LATITUDES ORH1F305.1818
C--------------------------------------------------------------------- TRACER.1304
C TRACER.1305
IF (SF_DT(13)) THEN JG170893.426
DO K=1,KM JG170893.427
DO I=1,IMT JG170893.428
DTWORK(I,K)=TA(I,K,1) JG170893.429
ENDDO JG170893.430
ENDDO JG170893.431
ENDIF JG170893.432
IF (SF_DS(12)) THEN OJG2F401.225
DO K=1,KM OJG2F401.226
DO I=1,IMT OJG2F401.227
DSWORK(I,K)=TA(I,K,2) OJG2F401.228
ENDDO OJG2F401.229
ENDDO OJG2F401.230
ENDIF OJG2F401.231
ORH1F403.103
ENDIF ! L_OFILTER = true ORH1F403.104
ORH1F403.105
ENDIF ! (J.GE.J_2.AND.J.LE.J_JMTM1) ORH1F403.106
ORH1F403.107
IF (L_OFILTER) THEN ORH1F403.108
ORH1F403.109
ORH1F403.112
CALL OFILTR_CNTL
( ORH1F403.113
*CALL ARGSIZE
ORH1F403.114
*CALL ARGOCALL
ORH1F403.115
*CALL ARGOINDX
ORH1F403.116
& J,FTARR, ORH1F405.471
*CALL COCAWRKA
ORH1F403.118
& ) ORH1F403.119
ORH1F403.120
ENDIF ORH1F403.121
ORH1F403.122
ORH1F403.123
IF (J.GE.J_2.AND.J.LE.J_JMTM1) THEN ORH1F403.124
ORH1F403.125
IF (L_OFILTER) THEN ORH1F403.126
ORH1F403.127
IF (SF_DT(13)) THEN ORH1F403.128
DO K=1,KM ORH1F403.129
DO I=1,IMT ORH1F403.130
WDTFF(I,K)=TA(I,K,1)-DTWORK(I,K) ORH1F403.131
ENDDO ORH1F403.132
ENDDO ORH1F403.133
ENDIF ORH1F403.134
IF (SF_DS(12)) THEN ORH1F403.135
DO K=1,KM ORH1F403.136
DO I=1,IMT ORH1F403.137
WDSFF(I,K)=TA(I,K,2)-DSWORK(I,K) ORH1F403.138
ENDDO ORH1F403.139
ENDDO ORH1F403.140
ENDIF ORH1F403.141
ORH1F403.142
ENDIF ! L_OFILTER = true ORH1F403.143
C ORH1F305.1832
IF (SF_DT(9)) THEN JG170893.440
DO K=1,KM JG170893.441
DO I=1,IMT JG170893.442
DTWORK(I,K)=TA(I,K,1) JG170893.443
ENDDO JG170893.444
ENDDO JG170893.445
ENDIF JG170893.446
C ORH1F305.1833
IF (L_SEAICE) THEN ORH1F305.1834
C TRACER.1375
IF (L_OFILTER) THEN ORH1F305.1835
C--------------------------------------------------------------------- TRACER.1378
C THE FOLLOWING CALL TO REFREEZE REIMPOSES A MINIMUM TEMPERATURE TRACER.1379
C OF FREEZING AT ALL LEVELS, AND STORES NEGATIVE HEAT FLUXES TRACER.1380
C RELEASED BY THIS FOR USE IN THE ICE MODEL. TRACER.1381
C--------------------------------------------------------------------- TRACER.1382
C TRACER.1383
IF (L_OTIMER) CALL TIMER
('REFREEZE ',103) GPB8F405.139
C ORH1F305.1837
IF (L_OVARYT) THEN ORH1F305.1838
CALL REFREEZE
(TA,IMT,KM,NT,FM,HEATSINK, OJG0F400.29
+ RZ,C2DTTS,SPECIFIC_HEAT_SI,RHO_WATER_SI,TFREEZE) ORH1F305.1840
ELSE ORH1F305.1841
CALL REFREEZE
(TA,IMT,KM,NT,FM,HEATSINK, OJG0F400.30
+ DZ,C2DTTS,SPECIFIC_HEAT_SI,RHO_WATER_SI,TFREEZE) TRACER.1392
ENDIF ORH1F305.1843
C ORH1F305.1844
IF (L_OTIMER) CALL TIMER
('REFREEZE ',104) GPB8F405.140
C ORH1F305.1846
ENDIF ! L_OFILTER = true ORH1F305.1847
C ORH1F305.1848
ENDIF ! L_SEAICE = true ORH1F305.1849
C ORH1F305.1850
IF (L_OPSEUDIC) THEN ORH1F305.1851
C TRACER.1404
C----------------------------------------------------------------------- TRACER.1405
C The pseudo-ice calculation now has to be redone in case the TRACER.1406
C filtering has created some temperatures of < TFREEZ. TRACER.1407
C Also the mixed layer model may have changed the temperatures TRACER.1408
C at climatological ice points. This section of code may be TRACER.1409
C unnecessary in a model with options -X-F, but it is left in for TRACER.1410
C simplicity RAW 30/7/92 TRACER.1411
C----------------------------------------------------------------------- TRACER.1412
C TRACER.1413
DO K=1,KM ORH1F305.1852
DO I=1,IMT ORH1F305.1860
TA(I,K,1)=MAX(TA(I,K,1) , TFREEZ) ORH1F305.1861
ENDDO ! over I ORH1F305.1862
ENDDO ! over K ORH1F305.1864
C TRACER.1434
C TRACER.1456
DO I=1,IMT ORH1F305.1875
IF(BICE(I).LT.1.E-3) THEN ORH1F305.1876
TA(I,1,1)=T_REF(I) ORH1F305.1877
TA(I,1,2)=S_REF(I) ORH1F305.1878
END IF ORH1F305.1879
ENDDO ! over I ORH1F305.1880
C ORH1F305.1882
C ORH1F305.1883
ENDIF ! L_OPSEUDIC = true ORH1F305.1884
C ORH1F305.1885
IF (SF_DT(9)) THEN JG170893.447
DO K=1,KM JG170893.448
DO I=1,IMT JG170893.449
WDTICE(I,K)=TA(I,K,1)-DTWORK(I,K)+WDTICE(I,K) JG170893.450
ENDDO JG170893.451
ENDDO JG170893.452
ENDIF JG170893.453
C JG170893.454
DO K=1,KM JG170893.455
CFPP$ NODEPCHK JG170893.456
DO I=ISSW,IESW JG170893.457
C ORH1F305.1886
IF (.NOT.(L_OVARYT)) THEN ORH1F305.1887
fx=giga/C2DTTS OJG2F404.65
ELSE ORH1F305.1889
fx=giga/DTTSA(K) OJG2F404.66
ENDIF ORH1F305.1891
C ORH1F305.1892
II=MOD(I-1,SWNCOL)+1 JG170893.463
IF (SF_DT(7)) DTSFC(II,J,K)=WDTSFC(I,K)*fx OJG2F404.67
C ORH1F305.1893
IF (L_OSOLAR) THEN ORH1F305.1894
IF (SF_DT(8)) DTPEN(II,J,K)=WDTPEN(I,K)*fx OJG2F404.68
ELSE ORH1F305.1896
IF (SF_DT(8)) DTPEN(II,J,K)=0. ORH1F305.1897
ENDIF ORH1F305.1898
C ORH1F305.1899
IF (SF_DT(9)) DTICE(II,J,K)=WDTICE(I,K)*fx OJG2F404.69
IF (L_OMIXLAY) THEN ORH1F305.1900
IF (SF_DT(10)) DTMIX(II,J,K)=WDTMIX(I,K)*fx OJG2F404.70
ELSE ORH1F305.1902
IF (SF_DT(10)) DTMIX(II,J,K)=0. ORH1F305.1903
ENDIF ORH1F305.1904
C ORH1F305.1905
IF (SF_DT(11)) DTCNVC(II,J,K)=WDTCNVC(I,K)*fx OJG2F404.71
C ORH1F305.1906
IF (L_OFILTER) THEN ORH1F305.1907
IF (SF_DT(13)) DTFF(II,J,K)=WDTFF(I,K)*fx OJG2F404.72
ELSE ORH1F305.1909
IF (SF_DT(13)) DTFF(II,J,K)=0. ORH1F305.1910
ENDIF ORH1F305.1911
C ORH1F305.1912
IF (SF_DT(15)) DTMED(II,J,K)=WDTMED(I,K)*fx OJG2F404.73
C OJG2F401.239
C Convert salinity increments to rates and copy to diagnostics OJG2F401.240
C OJG2F401.241
IF (SF_DS(7)) DSSFC(II,J)=WDSSFC(I)*fx OJG2F404.74
IF (SF_DS(8)) DSICE(II,J)=WDSICE(I)*fx OJG2F404.75
IF (L_OMIXLAY) THEN OJG2F401.244
IF (SF_DS(9)) DSMIX(II,J,K)=WDSMIX(I,K)*fx OJG2F404.76
ELSE OJG2F401.246
IF (SF_DS(9)) DSMIX(II,J,K)=0. OJG2F401.247
ENDIF OJG2F401.248
IF (SF_DS(10)) DSCNVC(II,J,K)=WDSCNVC(I,K)*fx OJG2F404.77
IF (L_OFILTER) THEN OJG2F401.250
IF (SF_DS(12)) DSFF(II,J,K)=WDSFF(I,K)*fx OJG2F404.78
ELSE OJG2F401.252
IF (SF_DS(12)) DSFF(II,J,K)=0. OJG2F401.253
ENDIF OJG2F401.254
IF (SF_DS(14)) DSMED(II,J,K)=WDSMED(I,K)*fx OJG2F404.79
ENDDO JG170893.483
ENDDO JG170893.484
C ORH1F305.1913
IF (L_OBIOLOGY) THEN ORH1F305.1914
C Factor fx converts rates from (1/s) to (1/day) ONT1F304.431
fx=3600.0*24.0 ONT1F304.432
DO K=1,KM ONT1F304.433
CFPP$ NODEPCHK ORH5F401.4
DO I=ISSW,IESW ONT1F304.435
IF (.NOT.(L_OVARYT)) THEN ORH1F305.1915
C2DTTSK=C2DTTS ORH1F305.1916
ELSE ORH1F305.1917
C2DTTSK=DTTSA(K) ORH1F305.1918
ENDIF ORH1F305.1919
C ORH1F305.1920
II=MOD(I-1,SWNCOL)+1 ONT1F304.441
IF (L_OMIXLAY) THEN ORH1F305.1921
IF (SF_BIO(21)) MIX_NUT(II,J,K)=WMIX_NUT(I,K)*fx/C2DTTSK ORH1F305.1922
ELSE ORH1F305.1923
IF (SF_BIO(21)) MIX_NUT(II,J,K)=0.0 ORH1F305.1924
ENDIF ORH1F305.1925
IF (SF_BIO(22)) CNVC_NUT(II,J,K)=WCNVC_NUT(I,K)*fx/C2DTTSK ONT1F304.447
IF (SF_BIO(23)) BIO_NUT(II,J,K)=WBIO_NUT(I,K)*fx/C2DTTSK ONT1F304.448
ENDDO ONT1F304.450
ENDDO ONT1F304.451
ENDIF ! L_OBIOLOGY ORH1F305.1926
C TRACER.1458
C-------------------------------------------------------------------- TRACER.1459
C Mask out TA before calculating integrated T change. TRACER.1460
C 0.01 is the masked value of salinity (=45ppt). TRACER.1461
C ORH1F305.1928
C-------------------------------------------------------------------- TRACER.1465
DO 1500 K=1,KM TRACER.1466
DO 1510 I=1,IMT TRACER.1467
TA(I,K,1)=TA(I,K,1)*FM(I,K) TRACER.1468
IF(NT.GE.2) TA(I,K,2)=FM(I,K)*TA(I,K,2) + TRACER.1469
* (1.-FM(I,K))*0.01 TRACER.1470
1510 CONTINUE TRACER.1471
1500 CONTINUE TRACER.1472
C--------------------------------------------------------------------- TRACER.1473
C ACCUMULATE INTEGRATED ABSOLUTE CHANGES IN T EVERY NTSI TIMESTEPS TRACER.1474
C--------------------------------------------------------------------- TRACER.1475
C TRACER.1476
IF(MOD(ITT,NTSI).EQ.0) THEN TRACER.1477
FX=0.5*CST(J)*DYT(J)/C2DTTS TRACER.1478
DO 983 M=1,NT TRACER.1479
DO 983 K=1,KM TRACER.1480
DO 983 I=1,IMT TRACER.1481
TDIF(I,K,M)=ABS(TA(I,K,M)-TB(I,K,M))*C2DZQ(I,K)*FX*DXTQ(I,K) TRACER.1482
983 CONTINUE TRACER.1483
DO 985 M=1,NT TRACER.1484
IF (L_OFILTER) THEN ORH1F305.1929
! Allow concurrent execution ORH1F305.1930
DO 986 K=1,KM ORH1F305.1931
DO 986 I=2,IMTM1 ORH1F305.1932
DTABS(M)=DTABS(M)+TDIF(I,K,M) ORH1F305.1933
986 CONTINUE ORH1F305.1934
ELSE ORH1F305.1935
! No concurrent execution ORH1F305.1936
DO 987 K=1,KM ORH1F305.1937
DO 987 I=2,IMTM1 ORH1F305.1938
DTABS(M)=DTABS(M)+TDIF(I,K,M) ORH1F305.1939
987 CONTINUE ORH1F305.1940
ENDIF ORH1F305.1941
985 CONTINUE TRACER.1491
ENDIF TRACER.1492
C TRACER.1493
C--------------------------------------------------------------------- TRACER.1494
C TRANSFER QUANTITIES COMPUTED TO THE NORTH OF THE PRESENT ROW TRACER.1495
C TO BE DEFINED TO THE SOUTH IN THE COMPUTATION OF THE NEXT ROW TRACER.1496
C--------------------------------------------------------------------- TRACER.1500
C TRACER.1501
FX=(CST(J)*CSTR(J+1)) OSY1F405.141
DO 990 K=1,KM TRACER.1503
DO 990 I=1,IMT TRACER.1504
FVST(I,K)=FVN(I,K)*FX TRACER.1505
DO M=1,NT OSY1F405.142
FLUXST(I,K,M)=FLUXNT(I,K,M)*FX OSY1F405.143
ENDDO OSY1F405.144
RHOS(I,K)=RHON(I,K) TRACER.1506
990 CONTINUE TRACER.1507
C TRACER.1508
IF (L_OCYCLIC) THEN ORH1F305.1944
C--------------------------------------------------------------------- TRACER.1510
C SET CYCLIC BOUNDARY CONDITIONS ON NEWLY COMPUTED TRACERS TRACER.1511
C--------------------------------------------------------------------- TRACER.1512
C TRACER.1513
DO 992 M=1,NT TRACER.1514
DO 992 K=1,KM TRACER.1515
TA(1 ,K,M)=TA(IMTM1,K,M) TRACER.1516
TA(IMT,K,M)=TA(2 ,K,M) TRACER.1517
992 CONTINUE TRACER.1518
diagsw(1,j)=diagsw(imtm1,j) OJL1F405.42
diagsw(imt,j)=diagsw(2,j) OJL1F405.43
ENDIF ORH1F305.1945
C ORH1F305.1946
IF (.NOT.(L_OSYMM)) THEN ORH1F305.1947
C TRACER.1521
C--------------------------------------------------------------------- TRACER.1522
C SET NEW VELOCITIES AT NORTHERN WALL TO ZERO SINCE NO PASS THROUGH TRACER.1523
C CLINIC IS MADE FOR THIS ROW TRACER.1524
C--------------------------------------------------------------------- TRACER.1525
C TRACER.1526
IF (J+J_OFFSET.EQ.JMTM1_GLOBAL) THEN ORH3F402.392
FX=0.0 TRACER.1528
DO 680 K=1,KM TRACER.1529
DO 680 I=1,IMT TRACER.1530
UA(I,K)=FX TRACER.1531
VA(I,K)=FX TRACER.1532
680 CONTINUE TRACER.1533
ENDIF TRACER.1534
C ORH1F305.1948
ENDIF ORH1F305.1949
ORH1F403.144
ENDIF ! if (J.GE.J_2.AND.J.LE.J_JMTM1) ORH1F403.145
ORH1F403.146
IF (L_OTIMER) CALL TIMER
('TRACER ',104) GPB8F405.141
C ORH1F305.1952
RETURN TRACER.1539
END TRACER.1540
*ENDIF @DYALLOC.4055