*IF DEF,OCEAN @DYALLOC.3993
C ******************************COPYRIGHT****************************** GTS3F400.1
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS3F400.2
C GTS3F400.3
C Use, duplication or disclosure of this code is subject to the GTS3F400.4
C restrictions as set forth in the contract. GTS3F400.5
C GTS3F400.6
C Meteorological Office GTS3F400.7
C London Road GTS3F400.8
C BRACKNELL GTS3F400.9
C Berkshire UK GTS3F400.10
C RG12 2SZ GTS3F400.11
C GTS3F400.12
C If no contract has been raised with this copy of the code, the use, GTS3F400.13
C duplication or disclosure of it is strictly prohibited. Permission GTS3F400.14
C to do so must first be obtained in writing from the Head of Numerical GTS3F400.15
C Modelling at the above address. GTS3F400.16
C ******************************COPYRIGHT****************************** GTS3F400.17
C ****************************ACKNOWLEDGMENT*************************** GTS3F400.18
C This code is derived from Public Domain code (the Cox 1984 Ocean GTS3F400.19
C Model) distributed by the Geophysical Fluid Dynamics Laboratory. GTS3F400.20
C NOAA GTS3F400.21
C PO Box 308 GTS3F400.22
C Princeton GTS3F400.23
C New Jersey USA GTS3F400.24
C If you wish to obtain a copy of the original code that does not have GTS3F400.25
C Crown Copyright use, duplication or disclosure restrictions, please GTS3F400.26
C contact them at the above address. GTS3F400.27
C ****************************ACKNOWLEDGMENT*************************** GTS3F400.28
C GTS3F400.29
CLL SUBROUTINE CLINIC @DYALLOC.3994
CLL Calculate changes to baroclinic currents @DYALLOC.3995
CLL @DYALLOC.3996
CLL Modification History @DYALLOC.3997
CLL 21/05/93: Enter UPDATE library; add arguments for dynamic alloc @DYALLOC.3998
CLL 03/09/93: Correct code for implicit advection diffusion (Foreman) SF020993.1
CLL 12/12/93 O. Alves add Skipland option to STATE routines JA121293.68
CLL 01/09/94: R.Hill Moved ZTD calculation to BLOKCALC, also ORH1F304.80
CLL ZUS,ZUN,ZVS,ZVN replaced with ZU and ZV ORH1F304.81
CLL indexed over J. Similarly ZUSENG,ZUNENG ORH1F304.82
CLL ZVSENG and ZVNENG replaced with ZUENG and ORH1F304.83
CLL ZVENG indexed over J. Required for ORH1F304.84
CLL parallelisation at ocean row level. ORH1F304.85
CLL 4.1 M.Bell Introduce diagnostics of contributions to OMB3F401.209
CLL vertical mean vorticity tendencies; using OMB3F401.210
CLL arrays UCONA, VCONA, ZCONU and ZCONV OMB3F401.211
CLL 4.3 R. Hill Mods to allow filtering to be assisted ORH1F403.59
CLL by all PEs in MPP mode. ORH1F403.60
CLL 4.4 M.Bell Contributions to bottom pressure torque OMB2F404.16
CLL corrected: V component had been missed. OMB2F404.17
! 4.4 Pass stash flag for rigid-lid surface pressure OFRAF404.65
! and calculate ZU and ZV if set to true (R. Forbes) OFRAF404.66
! 4.4 15/08/97 Remove SKIPLAND code. R. Hill ORH7F404.48
CLL 15/06/97 R.Lenton Changes to accomodate the free surface ORL1F404.401
CLL (vn 4.4) solution. For the free surface solution external ORL1F404.402
CLL components are now calculated using the ORL1F404.403
CLL velocities calculated in TROPIC. The forcing ORL1F404.404
CLL array xf,yf is now used in TROPIC without the ORL1F404.405
CLL vertically averaged horizontal diffusion and ORL1F404.406
CLL coriolis components, which are removed here. ORL1F404.407
CLL Vertical velocities are now non-zero at the ORL1F404.408
CLL surface and the velocity fluxes are now calc'ed ORL1F404.409
CLL using the new flux solution scheme based on ORL1F404.410
CLL 'scheme D' described in: ORL1F404.411
CLL 'Velocity Fluxes next to topography in the ORL1F404.412
CLL Bryan-Cox Ocean Model', M.J.Bell 1996 ORL1F404.413
CLL for further details. ORL1F404.414
CLL Note for the free surface solution the forcing ORL1F404.415
CLL array is not multiplied by a timestep here. ORL1F404.416
CLL 4.5 3.11.98 Calculate j+2 total velocity if required OOM3F405.877
CLL Calculate biharmonic mom diff variables OOM3F405.878
CLL and apply dissipation to velocities and OOM3F405.879
CLL diagnostics. M. Roberts OOM3F405.880
!LL 4.5 17/09/98 Update calls to timer, required because of GPB8F405.84
!LL new barrier inside timer. P.Burton GPB8F405.85
! 4.5 C.Sherlock Control logicals changed for ice dynamics ODC1F405.146
CLL 4.4 M.Bell Correction to vorticity diagnostics: set viscous ORH0F405.22
CLL force to zero at land points ORH0F405.23
CLL @DYALLOC.3999
SUBROUTINE CLINIC( 1,7@DYALLOC.4000
*CALL ARGSIZE
@DYALLOC.4001
*CALL ARGOCALL
@DYALLOC.4002
*CALL ARGOINDX
ORH7F402.287
& J, @DYALLOC.4003
*CALL COCAROWS
CLINIC.3
&, @DYALLOC.4004
*CALL COCAWRKA
CLINIC.4
+,RHOSRN,RHOSRNA,RHOSRNB OOM1F405.743
+,LL_ASS_BTRP,DU_ASS_BTRP,DV_ASS_BTRP CLINIC.9
&,SF_RLIDP OFRAF404.67
&,ISX,ISY,WSX_LEADS,WSY_LEADS ORH1F305.2908
&,IMT_GNU_ARG,KM_GNU_ARG,IMU_GNUZ_ARG,KM_GNUZ_ARG ORH1F305.2909
&,IMT_idr_ARG ORH1F405.467
&,gnum,Rim,hm,IMT_QLARGE_ARG OLA3F403.34
&,L_M,MLD_LARGE,MLD_LARGEP,WATERFLUX_ICE,LAMBDA_LARGE OOM1F405.744
&,HTNP,PMEP,WATERFLUX_ICEP,SOLP,WMEP OOM1F405.745
&,L_OWINDMIX,L_OBULKMAXMLD OOM1F405.746
&,OCEANHEATFLUX,OCEANHEATFLUXP OOM1F405.747
&,CARYHEAT,CARYHEATP OOM1F405.748
&,FLXTOICE,FLXTOICEP ) OOM1F405.749
C CLINIC.12
C======================================================================= CLINIC.13
C === CLINIC.14
C CLINIC COMPUTES, FOR ONE ROW, THE INTERNAL MODE COMPONENT OF === CLINIC.15
C THE U AND V VELOCITIES, AS WELL AS THE VORTICITY DRIVING === CLINIC.16
C FUNCTION FOR USE BY "RELAX" LATER IN DETERMINING THE === CLINIC.17
C EXTERNAL MODES, WHERE: === CLINIC.18
C J=THE ROW NUMBER === CLINIC.19
C === CLINIC.20
C======================================================================= CLINIC.21
C CLINIC.22
IMPLICIT NONE RH011293.1
C--------------------------------------------------------------------- CLINIC.23
C DEFINE GLOBAL DATA CLINIC.24
C--------------------------------------------------------------------- CLINIC.25
C CLINIC.26
*CALL OARRYSIZ
ORH6F401.29
*CALL TYPSIZE
@DYALLOC.4005
*CALL TYPOINDX
PXORDER.10
*CALL TYPOCALL
@DYALLOC.4006
*CALL UMSCALAR
CLINIC.29
*CALL CNTLOCN
ORH1F305.2911
*CALL OTIMER
ORH1F305.2913
C CLINIC.37
*CALL COCTROWS
CLINIC.38
*CALL COCTWRKA
CLINIC.39
ORH1F305.2914
REAL rhosrn(IMT_RIC,KM_RIC) ! OUT Density on TS row to S ORH1F305.2915
! of UV row J (i.e. on TS row J), ORH1F305.2916
! from STATED ORH1F305.2917
REAL RHOSRNA(IMT_RIC,KM_RIC+1),RHOSRNB(IMT_RIC,KM_RIC+1) OOM1F405.750
! OUT DENSITY ON TS ROW TO S OF UV ROW J (I.E. ON TS ROW J), OOM1F405.751
! FROM STATEC NOW (JUNE 1998) OOM1F405.752
ORH1F305.2918
REAL CLINIC.45
& DU_ASS_BTRP(IMT_ASM,JMT_ASM)! u_component data assim increment ORH1F305.2919
&,DV_ASS_BTRP(IMT_ASM,JMT_ASM)! v_component data assim increment ORH1F305.2920
ORH1F305.2921
LOGICAL CLINIC.48
& LL_ASS_BTRP ! logical selecting data assimilation CLINIC.49
&,SF_RLIDP ! stash flag set if rigid-lid pressure required OFRAF404.68
ORH1F305.2922
REAL JT161193.335
& ISX(IMT_idr) ! IN Stress under sea ice fraction. ODC1F405.147
&,ISY(IMT_idr) ! IN Stress under sea ice fraction. ODC1F405.148
&,WSX_LEADS(IMT_idr) ! IN Stress under leads fraction. ODC1F405.149
&,WSY_LEADS(IMT_idr) ! IN Stress under leads fraction. ODC1F405.150
REAL OOM1F405.753
& MLD_LARGE(IMT) ! IN MIXED LAYER DEPTH ON T GRID, ROW J (CM) OOM1F405.754
&, MLD_LARGEP(IMT) ! IN MIXED LAYER DEPTH ON T GRID, ROW J+1 (CM) OOM1F405.755
&, HTNP(IMT) ! IN NON-PENETRATING HEAT FLUX (W/M2) ON ROW J+1 OOM1F405.756
&, PMEP(IMT) ! IN PRECIP MINUS EVAP (KG/M2/S) ON ROW J+1 OOM1F405.757
&, SOLP(IMT) ! IN SOLAR IRRADIANCE (W/M2) AT SURFACE ON ROW J+1 OOM1F405.758
&, WMEP(IMT) ! IN WIND MIXING POWER ON ROW J+1 (W M^-2) OOM1F405.759
&, WATERFLUX_ICE(IMT) ! IN WATER FLUX FROM ICE (KG/M2/S) ,ROW J OOM1F405.760
&, WATERFLUX_ICEP(IMT) ! IN WATER FLUX FROM ICE (KG/M2/S) ,ROW J+1 OOM1F405.761
&, L_M(IMT) ! OUT MONIN OBUKHOV LENGTH LARGE SCHEME (MOMENTUM) OOM1F405.762
&, LAMBDA_LARGE ! IN FOR CALCULATING MINIMUM MLD OOM1F405.763
LOGICAL L_OWINDMIX,L_OBULKMAXMLD OOM1F405.764
INTEGER PXORDER.11
& IMT_GNU_ARG ! } Arguments for dynamic allocation of local PXORDER.12
&, KM_GNU_ARG ! } arrays - passed in through arg list to PXORDER.13
&, IMT_QLARGE_ARG ! } PXORDER.14
REAL gnum(IMT_GNU_ARG,KM_GNU_ARG-1) OLA3F403.36
REAL Rim(IMT_GNU_ARG,KM_GNU_ARG-1) OLA3F403.37
REAL hm(IMT_QLARGE_ARG) OLA3F403.38
REAL OOM1F405.765
& OCEANHEATFLUX(IMT),OCEANHEATFLUXP(IMT) OOM1F405.766
& !HTN:NON-PENETRATIVE SURFACE HEATFLUX INTO OCEAN BUDGET OOM1F405.767
&,CARYHEAT(IMT),CARYHEATP(IMT) !MISCELLANEOUS HEATFLUX FROM ICE OOM1F405.768
&,FLXTOICE(IMT),FLXTOICEP(IMT) !OCEAN TO ICE HEATFLUX OOM1F405.769
C CLINIC.51
C--------------------------------------------------------------------- CLINIC.52
C DEFINE LOCAL DATA CLINIC.53
C--------------------------------------------------------------------- CLINIC.54
C CLINIC.55
C ORH1F304.86
*CALL TYPOCLWK
ORH1F304.87
INTEGER ORH6F401.71
& IMU_GNUZ_ARG ! } avoid problems with portable versions PXORDER.15
&, KM_GNUZ_ARG ! } of model. ORH6F401.75
&, IMT_idr_ARG ! } ODC1F405.151
C ORH1F304.88
REAL DPDX(IMT+1,KM),DPDY(IMT+1,KM),UENG(IMT,KM),VENG(IMT,KM) @DYALLOC.4007
C LOCAL VARIABLES FOR BIHARMONIC DIFFUSION OOM3F405.881
REAL TEMPAP(IMT,KM),TEMPBP(IMT,KM) OOM3F405.882
REAL Uxx(IMT,KM),Uyy(IMT,KM),Umet(IMT,KM) OOM3F405.883
REAL Vxx(IMT,KM),Vyy(IMT,KM),Vmet(IMT,KM) OOM3F405.884
REAL pt1,pt2,pt3 OOM3F405.885
ORH1F305.2927
REAL gnu(IMT_GNU_ARG,KM_GNU_ARG) ! Vertical viscosity (cm2/s) ORH1F305.2928
&,gnu1z(IMU_GNUZ_ARG,KM_GNUZ_ARG+1) ! } Arrays used in ORH1F305.2929
&,gnu2z(IMU_GNUZ_ARG,KM_GNUZ_ARG+1) ! } energy calculation ORH1F305.2930
ORH1F305.2931
ORH1F305.2932
REAL UCOR(IMT,KM) ! u comp coriolis force ORL1F404.417
REAL VCOR(IMT,KM) ! v comp coriolis force ORL1F404.418
REAL UCORTOT(IMT) ! u comp depth averaged coriolis term ORL1F404.419
REAL VCORTOT(IMT) ! v comp depth averaged coriolis term ORL1F404.420
REAL UDFN(IMT) ! local array for u horizontal diffusion ORL1F404.421
REAL VDFN(IMT) ! local array for v horizontal diffusion ORL1F404.422
REAL UDFNTOT(IMT) ! local total horztl diffn in u dir ORL1F404.423
REAL VDFNTOT(IMT) ! local total horizl diffn in v dir ORL1F404.424
REAL scale(2) ! Scaling coefft for surface fluxes ORH1F305.2933
REAL tscale(KM) ! Scaled timesteps (for implicit code) ORH1F305.2934
C RH011293.2
REAL UCONA(IMT_ZVRT,KM,5) ! contributions to UA and VA stored for OMB3F401.212
REAL VCONA(IMT_ZVRT,KM,5) ! vertical mean vorticity diagnostics OMB3F401.213
C OMB3F401.214
C DECLARE REAL NUMBER VARIABLES RH011293.3
C RH011293.4
REAL DIAG1, ! Temporary storage of diagonal diff RH011293.5
& DIAG2, ! " " " " " RH011293.6
& BBUJ, ! Coeff used in horizontal U,V mixing RH011293.7
& CCUJ, ! " " " " " " RH011293.8
& DDUJ, ! " " " " " " RH011293.9
& GGUJ, ! " " " " " " RH011293.10
& HHUJ, ! " " " " " " RH011293.11
& FX, ! Temporary value RH011293.12
& FXA, ! Temporary value RH011293.13
& FXB, ! Temporary value RH011293.14
& DETMR ! Reciprocal of matrix determinant from ORH0F405.3
! simultaneous eqns of coriolis term ORH0F405.4
C RH011293.19
C DECLARE INTEGER VARIABLES RH011293.20
C RH011293.21
INTEGER I, ! Grid point index (zonal) RH011293.22
& J, ! Grid point index (meridional) RH011293.23
& K, ! Grid point index (Vertical TOP DOWN) RH011293.24
& LL, ! Loop control for energy components RH011293.26
& KM1, ! K - 1 RH011293.27
& KP1, ! K + 1 RH011293.28
& KZ, ! Number of sea levels at point RH011293.29
& ID ! loop counter for vorticity diagnostics OMB3F401.216
ORH1F305.2935
REAL JT161193.342
& XSTRESS_ICE(IMT_idr) ! Total stress under sea ice. ODC1F405.152
&,YSTRESS_ICE(IMT_idr) ! (Wind stress at ice free points) ODC1F405.153
ORH1F304.77
C CLINIC.74
C--------------------------------------------------------------------- CLINIC.75
C BEGIN EXECUTABLE CODE CLINIC.76
C--------------------------------------------------------------------- CLINIC.77
IF (L_OTIMER) THEN ORH1F305.2947
CALL TIMER
('CLINIC ',103) GPB8F405.86
ENDIF ORH1F305.2949
ORH1F403.62
IF (J.GE.J_2.AND.J.LE.J_JMTM1) THEN ORH1F403.63
ORH1F403.64
IF (L_OSYMM.OR.(J+J_OFFSET.NE.JMTM1_GLOBAL)) THEN ORH1F403.65
C CLINIC.81
C======================================================================= CLINIC.82
C BEGIN INTRODUCTORY SECTION, PREPARING VARIOUS =================== CLINIC.83
C ARRAYS FOR THE COMPUTATION OF THE INTERNAL MODES =================== CLINIC.84
C======================================================================= CLINIC.85
C CLINIC.86
C---------------------------------------------------------------- CLINIC.87
C Initialise the IMTP1th column of the local workspace CLINIC.88
C arrays DPDX,DPDY. This prevents an 'unitialised data' CLINIC.89
C type of floating point error when this element is first CLINIC.90
C referenced in the 273 loop. CLINIC.91
C---------------------------------------------------------------- CLINIC.92
C CLINIC.93
DO 50 K=1,KM CLINIC.94
DPDX(IMT+1,K)=0. @DYALLOC.4010
DPDY(IMT+1,K)=0. @DYALLOC.4011
50 CONTINUE CLINIC.97
ORH1F305.2950
IF (L_ICEFREEDR) THEN ODC1F405.154
C CLINIC.98
C----------------------------------------------------------------------- JT161193.347
C Calculate total stress when dynamic sea ice is in the model and store JT161193.348
C in arrays XSTRESS_ICE and YSTRESS_ICE JT161193.349
C----------------------------------------------------------------------- JT161193.350
do i=1,imt ORH1F305.2952
xstress_ice(i) = ( wsx_leads(i) + isx(i) ) * gm(i,1) ORH1F305.2953
ystress_ice(i) = ( wsy_leads(i) + isy(i) ) * gm(i,1) ORH1F305.2954
end do ORH1F305.2955
ENDIF ORH1F305.2956
C JT161193.356
C JT161193.357
C--------------------------------------------------------------------- CLINIC.99
C FIND ADVECTIVE COEFFICIENT 'FUW' FOR WEST FACE OF U,V BOX CLINIC.100
C & 'FVN' FOR NORTH FACE OF U,V BOX CLINIC.101
C--------------------------------------------------------------------- CLINIC.102
C CLINIC.103
C 1ST, FORM PART OF BAROTROPIC U AT WEST FACE OF U,V BOX ORL1F404.876
C & V AT NORTH FACE OF U,V BOX ORL1F404.877
C CLINIC.109
IF ((.NOT.L_ONOCLIN).AND.(.NOT.L_OFREESFC)) THEN ORL1F404.425
C ORL1F404.426
C FOR RIGID LID CASE SFU,SFV FROM THE STREAMFUNCTION. ORL1F404.427
C ORL1F404.428
IF (.NOT.(L_FLUXD)) THEN ORL1F404.878
ORL1F404.879
C use the old cox scheme to calculate the fluxes on the box faces ORL1F404.880
ORL1F404.881
DO 101 I=2,IMT ORH1F305.2958
SFU(I)=-(P(I ,J+1)-P(I,J ))*DYUR(J) ORH1F305.2959
& *MIN(HR(I-1,J ),HR(I,J)) ORH1F305.2960
101 CONTINUE ORH1F305.2961
SFU(1)=0.0 ORH1F305.2962
DO 102 I=1,IMTM1 ORH1F305.2963
SFV(I)= ((P(I+1,J+1)-P(I,J+1))*DXUR(I)) OOM3F405.886
& *(MIN(HR(I ,J+1),HR(I,J))*CSTR(J+1)) OOM3F405.887
OOM3F405.888
102 CONTINUE ORH1F305.2966
SFV(IMT)=0.0 ORH1F305.2967
ORL1F404.882
ELSE ORL1F404.883
ORL1F404.884
C use the new 'version D' method to calculate fluxes at the faces ORL1F404.885
ORL1F404.886
DO I=2,IMT ORL1F404.887
SFU(I)=-(P(I ,J+1)-P(I,J ))*DYUR(J) ORL1F404.888
ENDDO ORL1F404.889
SFU(1)=0.0 ORL1F404.890
DO I=1,IMTM1 ORL1F404.891
SFV(I)= (P(I+1,J+1)-P(I,J+1))*DXUR(I)*CSTR(J+1) ORL1F404.892
ENDDO ORL1F404.893
SFV(IMT)=0.0 ORL1F404.894
ORL1F404.895
ENDIF ! type of flux solution ORL1F404.896
ORL1F404.897
ORL1F404.429
ELSE IF ((.NOT.L_ONOCLIN).AND.(L_OFREESFC)) THEN ORL1F404.430
C ORL1F404.431
C FOR FREE SURFACE CASE CALCULATE SFU,SFV FROM THE BAROTROPIC VELYS ORL1F404.432
C CALCULATED IN TROPIC ORL1F404.433
C ORL1F404.434
ORL1F404.435
DO I=2,IMT ORL1F404.436
SFU(I)= 0.5*( UBT(I-1,J) + UBT(I,J) ) ORL1F404.437
ENDDO ORL1F404.438
SFU(1)=0.0 ORL1F404.439
ORL1F404.440
DO I=1,IMTM1 ORL1F404.441
SFV(I)= 0.5*( VBT(I,J+1) + VBT(I,J) ) ORL1F404.442
ENDDO ORL1F404.443
SFV(IMT)=0.0 ORL1F404.444
ORL1F404.445
ENDIF !(.NOT.L_ONOCLIN).AND.(.NOT.L_OFREESFC) ORL1F404.446
C CLINIC.121
C 2ND, CALCULATE INT. MODE U AT WEST FACE OF U,V BOX CLINIC.122
C & V AT NORTH FACE OF U,V BOX CLINIC.123
C CLINIC.124
IF ((L_ONOCLIN).OR.((.NOT.L_ONOCLIN).AND.(.NOT.L_FLUXD))) THEN ORL1F404.898
ORL1F404.899
c follow the method used in the original COX scheme ORL1F404.900
ORL1F404.901
FX=0.5 CLINIC.125
IF (.NOT.(L_OBIMOM.or.L_OBIHARMGM)) THEN OOM3F405.889
DO 110 K=1,KM CLINIC.126
DO 111 I=2,IMT CLINIC.127
FUW(I,K)=(UCLIN(I,K)+UCLIN(I-1,K))*FX CLINIC.128
FVN(I,K)=(VP (I,K)+VCLIN(I ,K))*FX CLINIC.129
111 CONTINUE CLINIC.130
FUW(1,K)=0.0 CLINIC.131
FVN(1,K)=(VP(1,K)+VCLIN(1,K))*FX CLINIC.132
110 CONTINUE CLINIC.133
ELSE OOM3F405.890
C For biharmonic runs, VCLINP becomes the baroclinic velocity OOM3F405.891
C for row j+1 OOM3F405.892
DO K=1,KM OOM3F405.893
DO I=2,IMT OOM3F405.894
FUW(I,K)=(UCLIN(I,K)+UCLIN(I-1,K))*FX OOM3F405.895
FVN(I,K)=(VCLINP(I,K)+VCLIN(I ,K))*FX OOM3F405.896
ENDDO OOM3F405.897
FUW(1,K)=0.0 OOM3F405.898
FVN(1,K)=(VCLINP(1,K)+VCLIN(1,K))*FX OOM3F405.899
ENDDO OOM3F405.900
ENDIF ! not L_OBIMOM.or.L_OBIHARMGM OOM3F405.901
ORH1F305.2969
ORL1F404.902
ELSE ! .NOT. L_ONOCLIN ORL1F404.903
ORL1F404.904
C new 'version D' formula to calculate the fluxes ORL1F404.905
ORL1F404.906
DO K = 1, KM ORL1F404.907
ORL1F404.908
C first contributions for each term ORL1F404.909
DO I=1,IMT ORL1F404.910
IF ( KMU(I) .GE. KAR(K) ) THEN ORL1F404.911
FUW(I,K) = 0.5 * ( UCLIN(I,K) + SFU(I)*HR(I,J) ) ORL1F404.912
FVN(I,K) = 0.5 * ( VCLIN(I,K) + SFV(I)*HR(I,J) ) ORL1F404.913
ELSE ORL1F404.914
FUW(I,K) = 0.0 ORL1F404.915
FVN(I,K) = 0.0 ORL1F404.916
END IF ORL1F404.917
END DO ORL1F404.918
ORL1F404.919
C second contributions for each term ORL1F404.920
C no additional contributions from land points ORL1F404.921
DO I=2,IMT ORL1F404.922
IF ( KMU(I-1) .GE. KAR(K) ) THEN ORL1F404.923
FUW(I,K) = FUW(I,K) + ORL1F404.924
# 0.5 * ( UCLIN(I-1,K) + SFU(I)*HR(I-1,J) ) ORL1F404.925
END IF ORL1F404.926
END DO ORL1F404.927
FUW(1,K) = 0.0 ORL1F404.928
ORL1F404.929
IF (.NOT.(L_OBIMOM.or.L_OBIHARMGM)) THEN OOM3F405.902
DO I=1,IMT ORL1F404.930
IF ( KMUP(I) .GE. KAR(K) ) THEN ORL1F404.931
FVN(I,K) = FVN(I,K) + ORL1F404.932
# 0.5 * ( VP(I,K) + SFV(I)*HR(I,J+1) ) ORL1F404.933
END IF ORL1F404.934
END DO ORL1F404.935
ELSE OOM3F405.903
C For biharmonic runs, VCLINP becomes the baroclinic velocity OOM3F405.904
C for row j+1 OOM3F405.905
DO I=1,IMT OOM3F405.906
IF ( KMUP(I) .GE. KAR(K) ) THEN OOM3F405.907
FVN(I,K) = FVN(I,K) + OOM3F405.908
# 0.5 * ( VCLINP(I,K) + SFV(I)*HR(I,J+1) ) OOM3F405.909
END IF OOM3F405.910
END DO OOM3F405.911
ENDIF ! L_OBIMOM.or.L_OBIHARMGM OOM3F405.912
ORL1F404.936
END DO ! KM ORL1F404.937
ORL1F404.938
END IF ! L_ONOCLIN, L_FLUXD - type of flux solution ORL1F404.939
C CLINIC.135
C ADD DATA ASSIMILATION INCREMENTS CLINIC.136
C CLINIC.137
IF (LL_ASS_BTRP) THEN CLINIC.138
DO 112 K=1,KM CLINIC.139
DO 112 I=1,IMT CLINIC.140
FUW(I,K)=FUW(I,K)+(DU_ASS_BTRP(I,J)+DU_ASS_BTRP(I-1,J))*FX CLINIC.141
FVN(I,K)=FVN(I,K)+(DV_ASS_BTRP(I,J+1)+DV_ASS_BTRP(I,J))*FX CLINIC.142
112 CONTINUE CLINIC.143
END IF CLINIC.144
ORH1F305.2970
C CLINIC.146
ORH1F305.2971
C 3RD, ADD GRID WGT. FACTOR CLINIC.151
ORH1F305.2972
C CLINIC.153
FX=(DYU2R(J)*CSR(J))*CST(J+1) OOM3F405.913
ORH1F305.2973
IF ((.NOT.L_ONOCLIN).AND.(.NOT.L_FLUXD)) THEN ORL1F404.940
DO K=1,KM ORL1F404.941
DO I=1,IMT ORL1F404.942
FUW(I,K)=(FUW(I,K)+SFU(I))*CSR(J) ORL1F404.943
FVN(I,K)=(FVN(I,K)+SFV(I))*FX ORL1F404.944
ENDDO ORL1F404.945
ENDDO ORL1F404.946
ORL1F404.947
ELSE ORL1F404.948
ORL1F404.949
DO K=1,KM ORL1F404.950
DO I=1,IMT ORL1F404.951
FUW(I,K)=FUW(I,K)*CSR(J) ORL1F404.952
FVN(I,K)=FVN(I,K)*FX ORL1F404.953
ENDDO ORL1F404.954
ENDDO ORL1F404.955
ORL1F404.956
ENDIF ! (.NOT.L_ONOCLIN).AND.(L_FLUXD) ORL1F404.957
ORH1F305.2989
C--------------------------------------------------------------------- CLINIC.171
C SAVE INTERNAL MODE VELOCITIES CLINIC.172
C--------------------------------------------------------------------- CLINIC.173
C CLINIC.174
IF (.NOT.(L_OBIMOM.or.L_OBIHARMGM)) THEN OOM3F405.914
DO 140 K=1,KM CLINIC.175
DO 140 I=1,IMT CLINIC.176
USAV(I,K)=UCLIN(I,K) CLINIC.177
VSAV(I,K)=VCLIN(I,K) CLINIC.178
UCLIN(I,K)=UP(I,K) CLINIC.179
VCLIN(I,K)=VP(I,K) CLINIC.180
140 CONTINUE CLINIC.181
ELSE OOM3F405.915
C update rows J and J+1 with baroclinic velocities OOM3F405.916
DO K=1,KM OOM3F405.917
DO I=1,IMT OOM3F405.918
USAV(I,K)=UCLIN(I,K) OOM3F405.919
VSAV(I,K)=VCLIN(I,K) OOM3F405.920
UCLIN(I,K)=UCLINP(I,K) OOM3F405.921
VCLIN(I,K)=VCLINP(I,K) OOM3F405.922
UCLINP(I,K)=UPP(I,K) OOM3F405.923
VCLINP(I,K)=VPP(I,K) OOM3F405.924
ENDDO OOM3F405.925
ENDDO OOM3F405.926
ENDIF ! L_OBIMOM.or.L_OBIHARMGM OOM3F405.927
OOM3F405.928
C CLINIC.182
IF (L_OSYMM) THEN ORH1F305.2990
C IF LAST ROW, NO NEED TO PERFORM OPERATIONS ON J+1 ROW CLINIC.184
C IF LAST TWO ROWS, NO NEED TO PERFORM OPERATIONS ON J+2 ROW OOM3F405.929
C IF USING BIHARMONIC MOMENTUM DIFF OOM3F405.930
C CLINIC.185
IF ((J+J_OFFSET.EQ.JMTM1_GLOBAL-1).AND.(L_OBIMOM)) GO TO 176 OOM3F405.931
IF ((J+J_OFFSET.EQ.JMTM1_GLOBAL).AND.(.NOT.L_OBIMOM)) GO TO 176 OOM3F405.932
C CLINIC.187
ELSE IF ((J+J_OFFSET.EQ.JMTM1_GLOBAL).AND.(L_OBIMOM)) THEN OOM3F405.933
GO TO 176 OOM3F405.934
ELSE ORH1F305.2992
ORH1F305.2993
IF (.NOT.L_ONOCLIN) THEN ORH0F401.50
IF (.NOT.(L_OBIMOM.or.L_OBIHARMGM)) THEN OOM3F405.935
C--------------------------------------------------------------------- CLINIC.190
C COMPUTE EXTERNAL MODE VELOCITIES FOR ROW J+1 CLINIC.191
C--------------------------------------------------------------------- CLINIC.192
C CLINIC.193
C 1ST, COMPUTE FOR TAU-1 TIME LEVEL CLINIC.194
C CLINIC.195
ORL1F404.447
IF (L_OFREESFC) THEN ORL1F404.448
DO I=1,IMTM1 ORL1F404.449
SFUB(I) = UBTBBC(I,J+1)*HR(I,J+1) ORL1F404.450
SFVB(I) = VBTBBC(I,J+1)*HR(I,J+1) ORL1F404.451
ENDDO ! over i ORL1F404.452
ORL1F404.453
ELSE ORL1F404.454
ORL1F404.455
DO 150 I=1,IMTM1 ORH1F305.2994
DIAG1=PB(I+1,J+2)-PB(I ,J+1) ORH1F305.2995
DIAG2=PB(I ,J+2)-PB(I+1,J+1) ORH1F305.2996
SFUB(I)=-(DIAG1+DIAG2)*DYU2R(J+1)*HR(I,J+1) ORH1F305.2997
SFVB(I)= (DIAG1-DIAG2)*DXU2R(I )*HR(I,J+1)*CSR(J+1) ORH1F305.2998
150 CONTINUE ORH1F305.2999
ENDIF ! L_OFREESFC ORL1F404.456
C CLINIC.202
C 2ND, COMPUTE FOR TAU TIME LEVEL CLINIC.203
C CLINIC.204
IF (L_OFREESFC) THEN ORL1F404.457
DO I=1,IMTM1 ORL1F404.458
SFU(I) = UBT(I,J+1)*HR(I,J+1) ORL1F404.459
SFV(I) = VBT(I,J+1)*HR(I,J+1) ORL1F404.460
ENDDO ORL1F404.461
ORL1F404.462
ELSE ORL1F404.463
ORL1F404.464
DO 155 I=1,IMTM1 ORH1F305.3000
DIAG1=P (I+1,J+2)-P (I ,J+1) ORH1F305.3001
DIAG2=P (I ,J+2)-P (I+1,J+1) ORH1F305.3002
SFU (I)=-(DIAG1+DIAG2)*DYU2R(J+1)*HR(I,J+1) ORH1F305.3003
SFV (I)= (DIAG1-DIAG2)*DXU2R(I )*HR(I,J+1)*CSR(J+1) ORH1F305.3004
155 CONTINUE ORH1F305.3005
ENDIF ! L_OFREESFC ORL1F404.465
ELSE OOM3F405.936
C COMPUTE EXTERNAL MODE VELOCITIES FOR ROW J+2 AND TWO TIME LEVELS OOM3F405.937
C 1ST, COMPUTE FOR TAU-1 TIME LEVEL OOM3F405.938
OOM3F405.939
IF (L_OFREESFC) THEN OOM3F405.940
DO I=1,IMTM1 OOM3F405.941
SFUB(I) = UBTBBC(I,J+1)*HR(I,J+1) OOM3F405.942
SFVB(I) = VBTBBC(I,J+1)*HR(I,J+1) OOM3F405.943
ENDDO ! over i OOM3F405.944
OOM3F405.945
ELSE OOM3F405.946
IF (J.LT.J_JMT) THEN OOM3F405.947
DO I=1,IMTM1 OOM3F405.948
DIAG1=PB(I+1,J+3)-PB(I ,J+2) OOM3F405.949
DIAG2=PB(I ,J+3)-PB(I+1,J+2) OOM3F405.950
SFUB(I)=-(DIAG1+DIAG2)*DYU2R(J+2)*HR(I,J+2) OOM3F405.951
SFVB(I)= (DIAG1-DIAG2)*DXU2R(I )*HR(I,J+2)*CSR(J+2) OOM3F405.952
ENDDO OOM3F405.953
ELSE OOM3F405.954
DO I=1,IMTM1 OOM3F405.955
DIAG1=PBJP(I+1)-PB(I ,J+2) OOM3F405.956
DIAG2=PBJP(I)-PB(I+1,J+2) OOM3F405.957
SFUB(I)=-(DIAG1+DIAG2)*DYU2RJP*HRJP(I) OOM3F405.958
SFVB(I)= (DIAG1-DIAG2)*DXU2R(I )*HRJP(I)*CSRJP OOM3F405.959
ENDDO OOM3F405.960
ENDIF OOM3F405.961
ENDIF ! L_OFREESFC OOM3F405.962
C OOM3F405.963
C 2ND, COMPUTE FOR TAU TIME LEVEL OOM3F405.964
C OOM3F405.965
IF (L_OFREESFC) THEN OOM3F405.966
DO I=1,IMTM1 OOM3F405.967
SFU(I) = UBT(I,J+1)*HR(I,J+1) OOM3F405.968
SFV(I) = VBT(I,J+1)*HR(I,J+1) OOM3F405.969
ENDDO OOM3F405.970
OOM3F405.971
ELSE OOM3F405.972
OOM3F405.973
IF (J.LT.J_JMT) THEN OOM3F405.974
DO I=1,IMTM1 OOM3F405.975
DIAG1=P(I+1,J+3)-P(I ,J+2) OOM3F405.976
DIAG2=P(I ,J+3)-P(I+1,J+2) OOM3F405.977
SFU(I)=-(DIAG1+DIAG2)*DYU2R(J+2)*HR(I,J+2) OOM3F405.978
SFV(I)= (DIAG1-DIAG2)*DXU2R(I )*HR(I,J+2)*CSR(J+2) OOM3F405.979
ENDDO OOM3F405.980
ELSE OOM3F405.981
DO I=1,IMTM1 OOM3F405.982
DIAG1=PJP(I+1)-P(I ,J+2) OOM3F405.983
DIAG2=PJP(I)-P(I+1,J+2) OOM3F405.984
SFU(I)=-(DIAG1+DIAG2)*DYU2RJP*HRJP(I) OOM3F405.985
SFV(I)= (DIAG1-DIAG2)*DXU2R(I )*HRJP(I)*CSRJP OOM3F405.986
ENDDO OOM3F405.987
ENDIF OOM3F405.988
ENDIF ! L_OFREESFC OOM3F405.989
OOM3F405.990
ENDIF ! L_OBIMOM.or.L_OBIHARMGM OOM3F405.991
OOM3F405.992
ENDIF ! barotropic solution not selected ORH0F401.51
ENDIF ORH1F305.3006
ORH1F305.3007
IF ((.NOT.(L_ONOCLIN)).AND.L_OCYCLIC) THEN ORH1F305.3008
C CLINIC.213
C 3RD, SET CYCLIC BOUNDARY CONDITIONS CLINIC.214
C CLINIC.215
SFUB(IMT)=SFUB(2) ORH1F305.3009
SFVB(IMT)=SFVB(2) ORH1F305.3010
SFU (IMT)=SFU (2) ORH1F305.3011
SFV (IMT)=SFV (2) ORH1F305.3012
ENDIF ORH1F305.3013
ORH1F305.3014
IF (.NOT.(L_ONOCLIN)) THEN ORH1F305.3015
C CLINIC.222
C----------------------------------------------------------------------- CLINIC.223
C SAVE EXTERNAL MODE FOR USE IN TIME FILTER CLINIC.224
C----------------------------------------------------------------------- CLINIC.225
C CLINIC.226
IF (.NOT.(L_OBIMOM.or.L_OBIHARMGM)) THEN OOM3F405.993
DO 156 I=1,IMT ORH1F305.3016
SSFUBP(I)=SFUB(I) ORH1F305.3017
SSFVBP(I)=SFVB(I) ORH1F305.3018
156 CONTINUE ORH1F305.3019
ELSE OOM3F405.994
DO I=1,IMT OOM3F405.995
SSFUBPP(I)=SFUB(I) OOM3F405.996
SSFVBPP(I)=SFVB(I) OOM3F405.997
ENDDO OOM3F405.998
ENDIF ! L_OBIMOM.or.L_OBIHARMGM OOM3F405.999
OOM3F405.1000
C CLINIC.231
IF (.NOT.(L_OBIMOM.or.L_OBIHARMGM)) THEN OOM3F405.1001
C--------------------------------------------------------------------- CLINIC.232
C ADD EXTERNAL MODE TO INTERNAL MODE FOR ROW J+1 (OCEAN PTS. ONLY) CLINIC.233
C--------------------------------------------------------------------- CLINIC.234
C CLINIC.235
DO 170 K=1,KM ORH1F305.3020
DO 170 I=1,IMU ORH1F305.3021
IF(KMUP(I).GE.KAR(K)) THEN ORH1F305.3022
UBP(I,K)=UBP(I,K)+SFUB(I) ORH1F305.3023
VBP(I,K)=VBP(I,K)+SFVB(I) ORH1F305.3024
UP (I,K)=UP (I,K)+SFU (I) ORH1F305.3025
VP (I,K)=VP (I,K)+SFV (I) ORH1F305.3026
ENDIF ORH1F305.3027
170 CONTINUE ORH1F305.3028
ELSE OOM3F405.1002
C--------------------------------------------------------------------- OOM3F405.1003
C ADD EXTERNAL MODE TO INTERNAL MODE FOR ROW J+2 (OCEAN PTS. ONLY) OOM3F405.1004
C--------------------------------------------------------------------- OOM3F405.1005
DO K=1,KM OOM3F405.1006
DO I=1,IMT OOM3F405.1007
IF (KMUPP(I).GE.KAR(K)) THEN OOM3F405.1008
UBPP(I,K)=(UBPP(I,K)+SFUB(I)) OOM3F405.1009
VBPP(I,K)=(VBPP(I,K)+SFVB(I)) OOM3F405.1010
U PP(I,K)=(U PP(I,K)+SFU (I)) OOM3F405.1011
V PP(I,K)=(V PP(I,K)+SFV (I)) OOM3F405.1012
ENDIF OOM3F405.1013
ENDDO OOM3F405.1014
ENDDO OOM3F405.1015
ENDIF ! L_OBIMOM.or.L_OBIHARMGM OOM3F405.1016
OOM3F405.1017
ENDIF ORH1F305.3029
ORH1F305.3030
ORH1F305.3031
C CLINIC.247
C----------------------------------------------------------------------- CLINIC.248
C ADD DATA ASSIMILATION INCREMENTS CLINIC.249
C----------------------------------------------------------------------- CLINIC.250
C CLINIC.251
IF (LL_ASS_BTRP) THEN CLINIC.252
DO 171 K=1,KM CLINIC.253
DO 171 I=1,IMU CLINIC.254
IF (KMUP(I).GE.KAR(K)) THEN CLINIC.255
UP(I,K)=UP(I,K)+DU_ASS_BTRP(I,J+1) CLINIC.256
VP(I,K)=VP(I,K)+DV_ASS_BTRP(I,J+1) CLINIC.257
END IF CLINIC.258
171 CONTINUE CLINIC.259
END IF CLINIC.260
C CLINIC.262
C--------------------------------------------------------------------- CLINIC.263
C ACCUMULATE KINETIC ENERGY FROM ROW J+1 EVERY NTSI TIMESTEPS CLINIC.264
C--------------------------------------------------------------------- CLINIC.265
C CLINIC.266
IF(MOD(ITT,NTSI).EQ.0) THEN CLINIC.267
FX=0.25*CS(J+1)*DYU(J+1) CLINIC.268
IF (L_OSYMM) THEN ORH1F305.3032
C CLINIC.270
C WEIGHT SYMMETRY ROW BY ONE HALF CLINIC.271
C CLINIC.272
IF(J+J_OFFSET.EQ.JMTM2_GLOBAL) FX=FX*0.5 ORH3F402.33
ENDIF ORH1F305.3034
DO 173 K=1,KM CLINIC.275
DO 173 I=1,IMT CLINIC.276
UENG(I,K)=(FX*(UP(I,K)*UP(I,K)+VP(I,K)*VP(I,K))) CLINIC.277
* *C2DZQ(I,K)*DXUQ(I,K) CLINIC.278
173 CONTINUE CLINIC.279
DO 175 K=1,KM CLINIC.280
DO 175 I=2,IMUM1 CLINIC.281
EKTOT=EKTOT+UENG(I,K) CLINIC.282
175 CONTINUE CLINIC.283
ENDIF CLINIC.284
176 CONTINUE CLINIC.285
C CLINIC.286
IF (L_OSYMM) THEN ORH1F305.3035
C--------------------------------------------------------------------- CLINIC.288
C SET SYMMETRY CONDITIONS ON THE LAST ROW CLINIC.289
C--------------------------------------------------------------------- CLINIC.290
C CLINIC.291
IF (L_OBIMOM) THEN OOM3F405.1018
IF(J+J_OFFSET.EQ.JMTM1_GLOBAL) THEN OOM3F405.1019
DO K=1,KM OOM3F405.1020
DO I=1,IMT OOM3F405.1021
D2U(I,K,3)= D2U(I,K,1) OOM3F405.1022
D2V(I,K,3)= -D2V(I,K,1) OOM3F405.1023
ENDDO OOM3F405.1024
ENDDO OOM3F405.1025
ENDIF OOM3F405.1026
ENDIF ! L_OBIMOM OOM3F405.1027
OOM3F405.1028
OOM3F405.1029
IF (J+J_OFFSET.EQ.JMTM1_GLOBAL) THEN ORH3F402.34
DO 178 K=1,KM ORH1F305.3037
DO 178 I=1,IMT ORH1F305.3038
FVN(I,K)=-FVSU(I,K) ORH1F305.3039
UBP(I,K)= UBM (I,K) ORH1F305.3040
UP (I,K)= UM (I,K) ORH1F305.3041
178 CONTINUE ORH1F305.3042
C CLINIC.299
C ON 1ST PASS OF MIXING TSTEP, REPLACE TAU-1 U VEL. WITH TAU U VEL. CLINIC.300
C CLINIC.301
IF(MIX.NE.0) THEN ORH1F305.3043
DO 179 K=1,KM ORH1F305.3044
DO 179 I=1,IMT ORH1F305.3045
UBP(I,K)=UP(I,K) ORH1F305.3046
179 CONTINUE ORH1F305.3047
ENDIF ORH1F305.3048
ENDIF CLINIC.307
ENDIF CLINIC.308
IF (L_OBIMOM) THEN OOM3F405.1030
OOM3F405.1031
C--------------------------------------------------------------- OOM3F405.1032
C COMPUTE J+1 ROW OF LAPLACIANS ON U,V OOM3F405.1033
C--------------------------------------------------------------- OOM3F405.1034
C OOM3F405.1035
IF(J+J_OFFSET.LT.JMTM1_GLOBAL) THEN OOM3F405.1036
DO K=1,KM OOM3F405.1037
DO I=2,IMTM1 OOM3F405.1038
pt1=(BBUD*DXU2RQ(I,K))* OOM3F405.1039
* (DXT4RQ(I,K)*((UBP(I+1,K)-UBP(I,K))+(UBP(I-1,K)-UBP(I,K)))) OOM3F405.1040
pt2=CCUD*(UBPP(I,K)-UBP(I,K)) OOM3F405.1041
* +DDUD*(UB(I,K)-UBP(I,K)) OOM3F405.1042
pt3=GGUD*UBP(I,K) OOM3F405.1043
* -(HHUD*DXU2RQ(I,K))*(VBP(I+1,K)-VBP(I-1,K)) OOM3F405.1044
D2U(I,K,3)=pt1+pt2+pt3 OOM3F405.1045
ENDDO OOM3F405.1046
C put in cyclic condition if appropriate OOM3F405.1047
IF (L_OCYCLIC) THEN OOM3F405.1048
D2U( 1,K,3)=D2U(IMTM1,K,3) OOM3F405.1049
D2V( 1,K,3)=D2V(IMTM1,K,3) OOM3F405.1050
D2U(IMT,K,3)=D2U( 2,K,3) OOM3F405.1051
D2V(IMT,K,3)=D2V( 2,K,3) OOM3F405.1052
ELSE OOM3F405.1053
D2U( 1,K,3)=0. OOM3F405.1054
D2V( 1,K,3)=0. OOM3F405.1055
D2U(IMT,K,3)=0. OOM3F405.1056
D2V(IMT,K,3)=0. OOM3F405.1057
ENDIF OOM3F405.1058
ENDDO OOM3F405.1059
OOM3F405.1060
DO K=1,KM OOM3F405.1061
DO I=2,IMTM1 OOM3F405.1062
pt1=(BBUD*DXU2RQ(I,K))* OOM3F405.1063
* (DXT4RQ(I,K)*((VBP(I+1,K)-VBP(I,K))+(VBP(I-1,K)-VBP(I,K)))) OOM3F405.1064
pt2=CCUD*(VBPP(I,K)-VBP(I,K)) OOM3F405.1065
* +DDUD*(VB(I,K)-VBP(I,K)) OOM3F405.1066
pt3=GGUD*VBP(I,K) OOM3F405.1067
* +(HHUD*DXU2RQ(I,K))*(UBP(I+1,K)-UBP(I-1,K)) OOM3F405.1068
D2V(I,K,3)=pt1+pt2+pt3 OOM3F405.1069
ENDDO OOM3F405.1070
IF (L_OCYCLIC) THEN OOM3F405.1071
D2V( 1,K,3)=D2V(IMTM1,K,3) OOM3F405.1072
D2V(IMT,K,3)=D2V( 2,K,3) OOM3F405.1073
ELSE OOM3F405.1074
D2V( 1,K,3)=0. OOM3F405.1075
D2V(IMT,K,3)=0. OOM3F405.1076
ENDIF OOM3F405.1077
ENDDO OOM3F405.1078
C set the values to zero on the last velocity row OOM3F405.1079
ELSE OOM3F405.1080
DO K=1,KM OOM3F405.1081
DO I=1,IMT OOM3F405.1082
D2U(I,K,3)=0. OOM3F405.1083
D2V(I,K,3)=0. OOM3F405.1084
ENDDO OOM3F405.1085
ENDDO OOM3F405.1086
ENDIF OOM3F405.1087
OOM3F405.1088
ENDIF ! L_OBIMOM OOM3F405.1089
OOM3F405.1090
C CLINIC.310
C--------------------------------------------------------------------- CLINIC.311
C COMPUTE DENSITY OF ROW J+1 CLINIC.312
C--------------------------------------------------------------------- CLINIC.313
C CLINIC.314
CALL STATE
(TP(1,1,1),TP(1,1,2),RHON, ORH1F305.3057
& TDIF(1,1,1),TDIF(1,1,2),IMT,KM JA121293.80
&,J+1,JMT ORH7F404.49
&) JA121293.83
IF (L_OCYCLIC) THEN ORH1F305.3058
C CLINIC.317
C SET CYCLIC BOUNDARY CONDITIONS CLINIC.318
C CLINIC.319
DO 232 K=1,KM ORH1F305.3059
RHON(IMT,K)=RHON(2,K) ORH1F305.3060
232 CONTINUE ORH1F305.3061
ENDIF ORH1F305.3062
C CLINIC.324
C--------------------------------------------------------------------- CLINIC.325
C COMPUTE VERTICAL VELOCITY IN U,V COLUMNS CLINIC.326
C--------------------------------------------------------------------- CLINIC.327
C CLINIC.328
C 1ST, SET VERTICAL VELOCITY K=KM+1 (IE THE DEEPEST MODEL LEVEL) TO ORL1F404.466
C ZERO. GEOMETRICAL CONSIDERATIONS SHOW THAT THIS IS THE CORRECT ORL1F404.467
C CONDITION AT POINTS HAVING THE MAX DEPTH, BUT NOT AT OTHER U,V ORL1F404.468
C POINTS. ORL1F404.469
C ORL1F404.470
C SET VERTICAL VELOCITY AT THE TOP LEVEL (ZERO FOR THE RIGID LID ORL1F404.471
C SOLUTION, NON-ZERO FOR THE FREE SURFACE SOLUTION). ORL1F404.472
C CLINIC.333
FX=0.0 CLINIC.334
ORL1F404.473
IF (L_OFREESFC) THEN ORL1F404.474
DO I=2,IMTM1 ORL1F404.475
W(I,KMP1)=FX ORL1F404.476
W(I,1) = -CSR(J) ORL1F404.477
& *( DXU2R(I)*(UBT(I+1,J)-UBT(I-1,J)) ORL1F404.478
& + DYU2R(J)*( (VBT(I,J+1)+VBT(I,J))*CST(J+1) ORL1F404.479
& -(VBT(I,J)+VBT(I,J-1))*CST(J) ) ) ORL1F404.480
ENDDO ! over i ORL1F404.481
ORL1F404.482
IF (L_OCYCLIC) THEN ORL1F404.483
W(1,1)=W(IMTM1,1) ORL1F404.484
W(IMT,1)=W(2,1) ORL1F404.485
ELSE ORL1F404.486
W(1,1)=0.0 ORL1F404.487
W(IMT,1)=0.0 ORL1F404.488
ENDIF ORL1F404.489
ORL1F404.490
ELSE ORL1F404.491
ORL1F404.492
DO 240 I=1,IMT CLINIC.335
W(I,1)=FX CLINIC.336
W(I,KMP1)=FX CLINIC.337
240 CONTINUE CLINIC.338
ORL1F404.493
ENDIF ! l_ofreesfc ORL1F404.494
C CLINIC.339
C 2ND, COMPUTE CHANGE OF W BETWEEN LEVELS CLINIC.340
C CLINIC.341
DO 250 K=1,KMM1 CLINIC.342
DO 251 I=1,IMTM1 CLINIC.343
W(I,K+1)=C2DZQ(I,K)*((FUW(I+1,K)-FUW (I,K))*DXU2RQ(I,K) CLINIC.344
* +FVN(I ,K)-FVSU(I,K)) CLINIC.345
251 CONTINUE CLINIC.346
W(IMT,K+1)=0.0 CLINIC.347
250 CONTINUE CLINIC.348
C CLINIC.349
C 3RD, INTEGRATE DOWNWARD FROM THE SURFACE CLINIC.350
C CLINIC.351
DO 255 K=1,KMM1 CLINIC.352
DO 255 I=1,IMT CLINIC.353
W(I,K+1)=W(I,K)+W(I,K+1) CLINIC.354
255 CONTINUE CLINIC.355
C CLINIC.356
C--------------------------------------------------------------------- CLINIC.357
C COMPUTE HYDROSTATIC PRESSURE GRADIENT CLINIC.358
C--------------------------------------------------------------------- CLINIC.359
C CLINIC.360
C 1ST, COMPUTE IT AT THE FIRST LEVEL CLINIC.361
C CLINIC.362
FXA=GRAV*DZZ(1)*CSR(J) CLINIC.363
FXB=GRAV*DZZ(1)*DYU2R(J) CLINIC.364
DO 260 I=1,IMTM1 CLINIC.365
UDIF(I,1)=RHON(I+1,1)-RHOS(I ,1) CLINIC.366
VDIF(I,1)=RHON(I ,1)-RHOS(I+1,1) CLINIC.367
DPDX(I,1)=((UDIF(I,1)-VDIF(I,1))*FXA)*DXU2R(I) CLINIC.368
DPDY(I,1)= (UDIF(I,1)+VDIF(I,1))*FXB CLINIC.369
260 CONTINUE CLINIC.370
DPDX(IMT,1)=0.0 CLINIC.371
DPDY(IMT,1)=0.0 CLINIC.372
C CLINIC.373
C 2ND, COMPUTE THE CHANGE IN PRESSURE GRADIENT BETWEEN LEVELS CLINIC.374
C CLINIC.375
FXA=GRAV*CSR(J)*0.5 CLINIC.376
FXB=GRAV*DYU4R(J) CLINIC.377
DO 270 K=2,KM CLINIC.378
DO 270 I=1,IMT CLINIC.379
DPDX(I,K)=RHON(I,K-1)+RHON(I,K) CLINIC.380
DPDY(I,K)=RHOS(I,K-1)+RHOS(I,K) CLINIC.381
270 CONTINUE CLINIC.382
DO 273 K=2,KM CLINIC.383
DO 274 I=1,IMTM1 CLINIC.384
UDIF(I,K)=DPDX(I+1,K)-DPDY(I ,K) CLINIC.385
VDIF(I,K)=DPDX(I ,K)-DPDY(I+1,K) CLINIC.386
DPDX(I,K)=(FXA*(UDIF(I,K)-VDIF(I,K)))*DZZQ(I,K)*DXU2RQ(I,K) CLINIC.387
DPDY(I,K)=(FXB*(UDIF(I,K)+VDIF(I,K)))*DZZQ(I,K) CLINIC.388
274 CONTINUE CLINIC.389
DPDX(IMT,K)=0.0 CLINIC.390
DPDY(IMT,K)=0.0 CLINIC.391
273 CONTINUE CLINIC.392
C CLINIC.393
C 3RD, INTEGRATE DOWNWARD FROM THE FIRST LEVEL CLINIC.394
C CLINIC.395
DO 275 K=1,KMM1 CLINIC.396
DO 275 I=1,IMT CLINIC.397
DPDX(I,K+1)=DPDX(I,K)+DPDX(I,K+1) CLINIC.398
DPDY(I,K+1)=DPDY(I,K)+DPDY(I,K+1) CLINIC.399
275 CONTINUE CLINIC.400
C CLINIC.401
IF ((.NOT.(L_OIMPDIF)).AND.(.NOT.(L_OIMPADDF))) THEN ORH1F305.3063
C--------------------------------------------------------------------- CLINIC.403
C SET BOUNDARY CONDITIONS FOR THE COMPUTATION OF CLINIC.404
C VERTICAL DIFFUSION OF MOMENTUM CLINIC.405
C--------------------------------------------------------------------- CLINIC.406
C CLINIC.407
C 1ST, TRANSFER INTERIOR POINTS INTO DIFFUSION COMPUTATION ARRAYS CLINIC.408
C CLINIC.409
DO 280 K=1,KM CLINIC.410
DO 280 I=1,IMT CLINIC.411
UDIF(I,K)=UB(I,K) CLINIC.412
VDIF(I,K)=VB(I,K) CLINIC.413
280 CONTINUE CLINIC.414
C CLINIC.415
C 2ND, SET K=0 ELEMENTS OF DIFF. COMP. ARRAYS TO REFLECT WIND STRESS CLINIC.416
C CLINIC.417
C INCLUDE CONVERSION FACTOR FOR WIND STRESS. NM-2 TO DYNCM-2 CLINIC.418
CONV=10. CLINIC.419
FX=DZZ(1)*CONV/FKPM CLINIC.420
ORH1F305.3064
IF (L_ICEFREEDR) THEN ODC1F405.155
DO I=1,IMT ORH1F305.3066
UOVER(I) = UB(I,1) + XSTRESS_ICE(I)*FX ORH1F305.3067
VOVER(I) = VB(I,1) + YSTRESS_ICE(I)*FX ORH1F305.3068
ENDDO ORH1F305.3069
ELSE ORH1F305.3070
DO I=1,IMT ORH1F305.3071
UOVER(I)=UB(I,1)+WSX(I)*FX ORH1F305.3072
VOVER(I)=VB(I,1)+WSY(I)*FX ORH1F305.3073
ENDDO ORH1F305.3074
ENDIF ORH1F305.3075
ORH1F305.3076
ORH1F305.3077
C 3RD, SET FIRST LAND LEVEL IN EACH COLUMN TO REFLECT BOTTOM CONDITION CLINIC.426
C CLINIC.427
DO 295 I=1,IMT CLINIC.428
KZ=KMU(I) CLINIC.429
IF (KZ.EQ.0) THEN CLINIC.430
UDIF(I,1)=0.0 CLINIC.431
VDIF(I,1)=0.0 CLINIC.432
ELSE IF (KZ.EQ.KM) THEN CLINIC.433
UUNDER(I)=UB(I,KZ) CLINIC.434
VUNDER(I)=VB(I,KZ) CLINIC.435
ELSE CLINIC.436
UDIF(I,KZ+1)=UB(I,KZ) CLINIC.437
VDIF(I,KZ+1)=VB(I,KZ) CLINIC.438
END IF CLINIC.439
295 CONTINUE CLINIC.440
ORH1F305.3078
ENDIF ORH1F305.3079
ORH1F305.3080
IF (L_OIMPDIF.AND.(.NOT.(L_ORICHARD))) THEN ORH1F305.3081
DO K=1,KM ORH1F305.3082
DO I=1,IMT ORH1F305.3083
gnu(I,K)=FKPM ORH1F305.3084
END DO ORH1F305.3085
END DO ORH1F305.3086
ENDIF ORH1F305.3087
C CLINIC.449
C======================================================================= CLINIC.450
C END INTRODUCTORY SECTION =========================================== CLINIC.451
C======================================================================= CLINIC.452
C CLINIC.453
C======================================================================= CLINIC.454
C BEGIN COMPUTATION OF THE INTERNAL MODES. ============ CLINIC.455
C THE NEW VALUES "UA" AND "VA", WILL FIRST BE LOADED WITH ============ CLINIC.456
C THE TIME RATE OF CHANGE, AND THEN UPDATED. ============ CLINIC.457
C======================================================================= CLINIC.458
C CLINIC.459
C--------------------------------------------------------------------- CLINIC.460
C COMPUTE TOTAL ADVECTION OF MOMENTUM CLINIC.461
C--------------------------------------------------------------------- CLINIC.462
C CLINIC.463
C 1ST, COMPUTE FLUX THROUGH WEST FACE OF U,V BOX CLINIC.464
C CLINIC.465
DO 300 K=1,KM CLINIC.466
DO 301 I=2,IMT CLINIC.467
TEMPA(I,K)=FUW(I,K)*(U(I-1,K)+U(I,K)) CLINIC.468
TEMPB(I,K)=FUW(I,K)*(V(I-1,K)+V(I,K)) CLINIC.469
301 CONTINUE CLINIC.470
TEMPA(1,K)=0.0 CLINIC.471
TEMPB(1,K)=0.0 CLINIC.472
300 CONTINUE CLINIC.473
C CLINIC.474
C 2ND, COMPUTE ZONAL FLUX DIVERGENCE CLINIC.475
C CLINIC.476
DO 303 K=1,KM CLINIC.477
DO 304 I=1,IMTM1 CLINIC.478
UA(I,K)=(TEMPA(I,K)-TEMPA(I+1,K))*DXU2RQ(I,K) CLINIC.479
VA(I,K)=(TEMPB(I,K)-TEMPB(I+1,K))*DXU2RQ(I,K) CLINIC.480
304 CONTINUE CLINIC.481
UA(IMT,K)=0.0 CLINIC.482
VA(IMT,K)=0.0 CLINIC.483
303 CONTINUE CLINIC.484
C CLINIC.485
C 3RD, ADD IN MERIDIONAL FLUX DIVERGENCE CLINIC.486
C CLINIC.487
DO 305 K=1,KM CLINIC.488
DO 305 I=1,IMT CLINIC.489
UA(I,K)=UA(I,K)-FVN (I,K)*(UP(I,K)+U (I,K)) CLINIC.490
* +FVSU(I,K)*(U (I,K)+UM(I,K)) CLINIC.491
VA(I,K)=VA(I,K)-FVN (I,K)*(VP(I,K)+V (I,K)) CLINIC.492
* +FVSU(I,K)*(V (I,K)+VM(I,K)) CLINIC.493
305 CONTINUE CLINIC.494
ORH1F305.3088
IF (.NOT.(L_OIMPADDF)) THEN ORH1F305.3089
C CLINIC.496
C 4TH, COMPUTE FLUX THROUGH TOP OF U,V BOX CLINIC.497
C CLINIC.498
DO 340 K=2,KM CLINIC.499
DO 340 I=1,IMT CLINIC.500
TEMPA(I,K)=W(I,K)*(U(I,K-1)+U(I,K)) CLINIC.501
TEMPB(I,K)=W(I,K)*(V(I,K-1)+V(I,K)) CLINIC.502
340 CONTINUE CLINIC.503
DO 341 I=1,IMT CLINIC.504
TEMPA(I,KMP1)=0.0 CLINIC.507
TEMPB(I,KMP1)=0.0 CLINIC.508
ORL1F404.495
IF (L_OFREESFC) THEN ORL1F404.496
ORL1F404.497
TEMPA(I,1)=W(I,1)*2.0*U(I,1) ORL1F404.498
TEMPB(I,1)=W(I,1)*2.0*V(I,1) ORL1F404.499
ORL1F404.500
ELSE ORL1F404.501
ORL1F404.502
TEMPA(I,1)=0.0 ORL1F404.503
TEMPB(I,1)=0.0 ORL1F404.504
ORL1F404.505
ENDIF ! L_OFREESFC ORL1F404.506
341 CONTINUE CLINIC.509
C CLINIC.510
C 5TH, ADD IN VERTICAL FLUX DIVERGENCE CLINIC.511
C CLINIC.512
DO 343 K=1,KM CLINIC.513
DO 343 I=1,IMT CLINIC.514
UA(I,K)=UA(I,K)+(TEMPA(I,K+1)-TEMPA(I,K))*DZ2RQ(I,K) CLINIC.515
VA(I,K)=VA(I,K)+(TEMPB(I,K+1)-TEMPB(I,K))*DZ2RQ(I,K) CLINIC.516
343 CONTINUE CLINIC.517
OMB3F401.217
C store total flux divergence for diagnostics OMB3F401.218
IF ( L_OZVRT ) THEN OMB3F401.219
DO K=1,KM OMB3F401.220
DO I=1,IMT OMB3F401.221
UCONA(I,K,1)=UA(I,K) OMB3F401.222
VCONA(I,K,1)=VA(I,K) OMB3F401.223
END DO OMB3F401.224
END DO OMB3F401.225
END IF ! L_OZVRT OMB3F401.226
ENDIF ORH1F305.3090
C CLINIC.519
C--------------------------------------------------------------------- CLINIC.520
C ADD IN HORIZONTAL DIFFUSION OF MOMENTUM (EVAL. AT TAU-1 TSTEP) CLINIC.521
C--------------------------------------------------------------------- CLINIC.522
C CLINIC.523
C 1ST, COMPUTE SEVERAL COEFFICIENTS DEPENDENT ONLY ON LATITUDE CLINIC.524
C CLINIC.525
IF (.NOT.(L_OLATVISC)) THEN ORH1F305.3091
BBUJ=8.0*AM*CSR(J)*CSR(J) ORH1F305.3092
CCUJ=AM*CST(J+1)*DYTR(J+1)*DYUR(J)*CSR(J) ORH1F305.3093
DDUJ=AM*CST(J )*DYTR(J )*DYUR(J)*CSR(J) ORH1F305.3094
GGUJ=AM*(1.0-TNG(J)*TNG(J))/(RADIUS*RADIUS) ORH1F305.3095
HHUJ=2.0*AM*SINE(J)/(RADIUS*CS(J)*CS(J)) ORH1F305.3096
ELSE ORH1F305.3097
C CLINIC.534
C CLINIC.535
C (This code is for latitude-dependent viscosity case) CLINIC.536
C CLINIC.537
BBUJ=8.0*AMU(J)*CSR(J)*CSR(J) ORH1F305.3098
CCUJ=AMT(J+1)*CST(J+1)*DYTR(J+1)*DYUR(J)*CSR(J) ORH1F305.3099
DDUJ=AMT(J)*CST(J )*DYTR(J )*DYUR(J)*CSR(J) ORH1F305.3100
GGUJ=AMU(J)*(1.0-TNG(J)*TNG(J))/(RADIUS*RADIUS) ORH1F305.3101
HHUJ=2.0*AMU(J)*SINE(J)/(RADIUS*CS(J)*CS(J)) ORH1F305.3102
ENDIF ORH1F305.3103
C CLINIC.544
C 2ND, COMPUTE GRADIENTS AT WEST FACE OF U,V BOX CLINIC.545
C CLINIC.546
DO 320 K=1,KM CLINIC.547
DO 321 I=2,IMT CLINIC.548
TEMPA(I,K)=DXT4RQ(I,K)*(UB(I,K)-UB(I-1,K)) CLINIC.549
TEMPB(I,K)=DXT4RQ(I,K)*(VB(I,K)-VB(I-1,K)) CLINIC.550
321 CONTINUE CLINIC.551
TEMPA(1,K)=0.0 CLINIC.552
TEMPB(1,K)=0.0 CLINIC.553
320 CONTINUE CLINIC.554
IF (L_OBIMOM) THEN OOM3F405.1091
DO K=1,KM OOM3F405.1092
DO I=2,IMT OOM3F405.1093
TEMPAP(I,K)=DXT4RQ(I,K)*(D2U(I,K,2)-D2U(I-1,K,2)) OOM3F405.1094
TEMPBP(I,K)=DXT4RQ(I,K)*(D2V(I,K,2)-D2V(I-1,K,2)) OOM3F405.1095
ENDDO OOM3F405.1096
TEMPAP(1,K)=0. OOM3F405.1097
TEMPBP(1,K)=0. OOM3F405.1098
ENDDO OOM3F405.1099
OOM3F405.1100
DO K=1,KM OOM3F405.1101
DO I=2,IMTM1 OOM3F405.1102
C calculate the diffusion of momentum using biharmonic coeffs OOM3F405.1103
Uxx(I,K)=BBUB*(DXU2RQ(I,K)*(TEMPAP(I+1,K)-TEMPAP(I,K))) OOM3F405.1104
Vxx(I,K)=BBUB*(DXU2RQ(I,K)*(TEMPBP(I+1,K)-TEMPBP(I,K))) OOM3F405.1105
OOM3F405.1106
Uyy(I,K)=CCUB*(D2U(I,K,3)-D2U(I,K,2)) OOM3F405.1107
* +DDUB*(D2U(I,K,1)-D2U(I,K,2)) OOM3F405.1108
Vyy(I,K)=CCUB*(D2V(I,K,3)-D2V(I,K,2)) OOM3F405.1109
* +DDUB*(D2V(I,K,1)-D2V(I,K,2)) OOM3F405.1110
OOM3F405.1111
Umet(I,K)=GGUB*D2U(I,K,2) OOM3F405.1112
* -HHUB*DXU2RQ(I,K)*(D2V(I+1,K,2)-D2V(I-1,K,2)) OOM3F405.1113
Vmet(I,K)=GGUB*D2V(I,K,2) OOM3F405.1114
* +HHUB*DXU2RQ(I,K)*(D2U(I+1,K,2)-D2U(I-1,K,2)) OOM3F405.1115
ENDDO OOM3F405.1116
Uxx(1,K)=0. OOM3F405.1117
Uxx(IMT,K)=0. OOM3F405.1118
Vxx(1,K)=0. OOM3F405.1119
Vxx(IMT,K)=0. OOM3F405.1120
Uyy(1,K)=0. OOM3F405.1121
Uyy(IMT,K)=0. OOM3F405.1122
Vyy(1,K)=0. OOM3F405.1123
Vyy(IMT,K)=0. OOM3F405.1124
Umet(1,K)=0. OOM3F405.1125
Umet(IMT,K)=0. OOM3F405.1126
Vmet(1,K)=0. OOM3F405.1127
Vmet(IMT,K)=0. OOM3F405.1128
ENDDO OOM3F405.1129
ENDIF ! L_OBIMOM OOM3F405.1130
OOM3F405.1131
C CLINIC.555
C 3RD, ADD IN FINAL CONTRIBUTION FROM HOR. DIFF. OF MOMENTUM CLINIC.556
C CLINIC.557
DO 323 K=1,KM CLINIC.558
DO 324 I=2,IMTM1 CLINIC.559
UA(I,K)=UA(I,K)+BBUJ*(DXU2RQ(I,K)*(TEMPA(I+1,K)-TEMPA(I,K))) CLINIC.560
* +CCUJ*(UBP(I,K)-UB(I,K))+DDUJ*(UBM(I,K)-UB(I,K)) CLINIC.561
* +GGUJ*UB(I,K)-HHUJ*DXU2RQ(I,K)*(VB(I+1,K)-VB(I-1,K)) CLINIC.562
VA(I,K)=VA(I,K)+BBUJ*(DXU2RQ(I,K)*(TEMPB(I+1,K)-TEMPB(I,K))) CLINIC.563
* +CCUJ*(VBP(I,K)-VB(I,K))+DDUJ*(VBM(I,K)-VB(I,K)) CLINIC.564
* +GGUJ*VB(I,K)+HHUJ*DXU2RQ(I,K)*(UB(I+1,K)-UB(I-1,K)) CLINIC.565
324 CONTINUE CLINIC.566
UA(1,K)=0.0 CLINIC.567
UA(IMT,K)=0.0 CLINIC.568
VA(1,K)=0.0 CLINIC.569
VA(IMT,K)=0.0 CLINIC.570
323 CONTINUE CLINIC.571
IF (L_OBIMOM) THEN OOM3F405.1132
DO K=1,KM OOM3F405.1133
DO I=2,IMTM1 OOM3F405.1134
UA(I,K)=UA(I,K)+(Uxx(I,K)+Uyy(I,K)+Umet(I,K))*GM(i,k) OOM3F405.1135
VA(I,K)=VA(I,K)+(Vxx(I,K)+Vyy(I,K)+Vmet(I,K))*GM(i,k) OOM3F405.1136
ENDDO OOM3F405.1137
UA(1,K)=0.0 OOM3F405.1138
UA(IMT,K)=0.0 OOM3F405.1139
VA(1,K)=0.0 OOM3F405.1140
VA(IMT,K)=0.0 OOM3F405.1141
ENDDO OOM3F405.1142
ENDIF OOM3F405.1143
OOM3F405.1144
IF (L_OFREESFC) THEN ORL1F404.507
C--------------------------------------------------------------------- ORL1F404.508
C RECALCULATE THE HORIZONTAL DIFFUSION COMPONENTS FOR USE WITH THE ORL1F404.509
C FREE SURFACE SOLUTION. THE VERTICAL AVERAGE HORIZONTAL DIFFUSION ORL1F404.510
C COMPONENTS ARE REQUIRED TO BE REMOVED FROM THE FORCING COMPONENTS ORL1F404.511
C ZU,ZV AT THE END OF CLINIC FOR USE IN TROPIC. ORL1F404.512
C ORL1F404.513
C NOTE THAT TO ACHIEVE BIT COMPARISON FOR NON FREE SURFACE RUNS THE ORL1F404.514
C CALCULATION OF THE HORIZONTAL DIFFUSION COMPONENTS HAS TO BE ORL1F404.515
C REPEATED. THIS PART OF CODE CAN BE REORGANISED AT A LATER DATE WHEN ORL1F404.516
C BIT COMPARISON CAN BE LOST. ORL1F404.517
C--------------------------------------------------------------------- ORL1F404.518
ORL1F404.519
C INITIALISE UDFNTOT(I) ORL1F404.520
ORL1F404.521
DO I=1,IMT ORL1F404.522
ORL1F404.523
UDFNTOT(I) = 0.0 ORL1F404.524
VDFNTOT(I) = 0.0 ORL1F404.525
ORL1F404.526
ENDDO ! over i ORL1F404.527
ORL1F404.528
DO K=1,KM ORL1F404.529
DO I=2,IMTM1 ORL1F404.530
ORL1F404.531
C CALCULATE THE HORIZONTAL DIFFN COMPONENTS ORL1F404.532
ORL1F404.533
UDFN(I)=BBU(J)*(DXU2RQ(I,K)*(TEMPA(I+1,K)-TEMPA(I,K))) ORL1F404.534
* +CCU(J)*(UBP(I,K)-UB(I,K))+DDU(J)*(UBM(I,K)-UB(I,K)) ORL1F404.535
* +GGU(J)*UB(I,K)-HHU(J)*DXU2RQ(I,K)*(VB(I+1,K)-VB(I-1,K)) ORL1F404.536
VDFN(I)=BBU(J)*(DXU2RQ(I,K)*(TEMPB(I+1,K)-TEMPB(I,K))) ORL1F404.537
* +CCU(J)*(VBP(I,K)-VB(I,K))+DDU(J)*(VBM(I,K)-VB(I,K)) ORL1F404.538
* +GGU(J)*VB(I,K)+HHU(J)*DXU2RQ(I,K)*(UB(I+1,K)-UB(I-1,K)) ORL1F404.539
ORL1F404.540
C INTEGRATE THE HORIZONTAL DIFFUSION THROUGH THE DEPTH ORL1F404.541
ORL1F404.542
UDFNTOT(I) = UDFNTOT(I) + ( UDFN(I)*DZ(K)*GM(I,K) ) ORL1F404.543
VDFNTOT(I) = VDFNTOT(I) + ( VDFN(I)*DZ(K)*GM(I,K) ) ORL1F404.544
ORL1F404.545
ENDDO ! OVER I ORL1F404.546
ENDDO ! OVER K ORL1F404.547
C ORL1F404.548
C DIVIDE BY THE OCEAN DEPTH TO GET VERTICAL AVERAGE (BAROTROPIC) ORL1F404.549
C HORIZONTAL DIFFUSION COMPONENT ORL1F404.550
C ORL1F404.551
ORL1F404.552
DO I=2,IMTM1 ORL1F404.553
ORL1F404.554
UDFNTOT(I) = UDFNTOT(I)*HR(I,J) ORL1F404.555
VDFNTOT(I) = VDFNTOT(I)*HR(I,J) ORL1F404.556
ORL1F404.557
ENDDO ORL1F404.558
ORL1F404.559
ENDIF ! (L_OFREESFC) ORL1F404.560
OMB3F401.227
C store horizontal diffusion of momentum for diagnostics OMB3F401.228
IF ( L_OZVRT ) THEN OMB3F401.229
DO K=1,KM OMB3F401.230
DO I=2,IMTM1 OMB3F401.231
UCONA(I,K,2)=( UA(I,K)-UCONA(I,K,1) ) * GM(I,K) ORH0F405.24
VCONA(I,K,2)=( VA(I,K)-VCONA(I,K,1) ) * GM(I,K) ORH0F405.25
END DO ! I loop OMB3F401.234
OMB3F401.235
UCONA(1,K,2)=0.0 OMB3F401.236
UCONA(IMT,K,2)=0.0 OMB3F401.237
VCONA(1,K,2)=0.0 OMB3F401.238
VCONA(IMT,K,2)=0.0 OMB3F401.239
END DO ! K loop OMB3F401.240
END IF ! L_OZVRT OMB3F401.241
C CLINIC.572
IF ((.NOT.(L_OIMPDIF)).AND.(.NOT.(L_OIMPADDF))) THEN ORH1F305.3104
C--------------------------------------------------------------------- CLINIC.574
C ADD IN VERTICAL DIFFUSION OF MOMENTUM CLINIC.575
C--------------------------------------------------------------------- CLINIC.576
C CLINIC.577
C 1ST, COMPUTE GRADIENTS AT TOP OF U,V BOX CLINIC.578
C CLINIC.579
DO 345 K=2,KM CLINIC.580
DO 345 I=1,IMT CLINIC.581
TEMPA(I,K)=UDIF(I,K-1)-UDIF(I,K) CLINIC.582
TEMPB(I,K)=VDIF(I,K-1)-VDIF(I,K) CLINIC.583
345 CONTINUE CLINIC.584
DO 346 I=1,IMT CLINIC.585
TEMPA(I,1)=UOVER(I)-UDIF(I,1) CLINIC.586
TEMPB(I,1)=VOVER(I)-VDIF(I,1) CLINIC.587
TEMPA(I,KMP1)=UDIF(I,KM)-UUNDER(I) CLINIC.588
TEMPB(I,KMP1)=VDIF(I,KM)-VUNDER(I) CLINIC.589
346 CONTINUE CLINIC.590
C CLINIC.591
C 2ND, ADD IN FINAL CONTRIBUTION FROM VERT. DIFF. OF MOMENTUM CLINIC.592
C CLINIC.593
DO 348 K=1,KM CLINIC.594
DO 348 I=1,IMT CLINIC.595
UA(I,K)=UA(I,K)+EEMQ(I,K)*TEMPA(I,K)-FFMQ(I,K)*TEMPA(I,K+1) CLINIC.596
VA(I,K)=VA(I,K)+EEMQ(I,K)*TEMPB(I,K)-FFMQ(I,K)*TEMPB(I,K+1) CLINIC.597
348 CONTINUE CLINIC.598
OMB3F401.242
C store vertical diffusion of momentum for diagnostics OMB3F401.243
OMB3F401.244
IF ( L_OZVRT ) THEN OMB3F401.245
DO K=1,KM OMB3F401.246
DO I=1,IMT OMB3F401.247
UCONA(I,K,3)=UA(I,K)-UCONA(I,K,2) OMB3F401.248
VCONA(I,K,3)=VA(I,K)-VCONA(I,K,2) OMB3F401.249
END DO OMB3F401.250
END DO OMB3F401.251
END IF ! L_OZVRT OMB3F401.252
ORH1F305.3105
ENDIF ORH1F305.3106
C CLINIC.600
C--------------------------------------------------------------------- CLINIC.601
C ADD IN CORIOLIS FORCE (EVAL. ON TAU TSTEP FOR EXPLICIT TRTMNT; CLINIC.602
C EVAL. ON TAU-1 TSTEP FOR IMPLICIT TRTMNT CLINIC.603
C WITH REMAINDER OF TERM TO BE ADDED LATER) CLINIC.604
C--------------------------------------------------------------------- CLINIC.605
C CLINIC.606
C store UA and VA for diagnostics before calculating CORIOLIS force OMB3F401.253
OMB3F401.254
IF ( L_OZVRT ) THEN OMB3F401.255
DO K=1,KM OMB3F401.256
DO I=1,IMT OMB3F401.257
UCONA(I,K,4)=UA(I,K) OMB3F401.258
VCONA(I,K,4)=VA(I,K) OMB3F401.259
END DO OMB3F401.260
END DO OMB3F401.261
END IF ! L_OZVRT OMB3F401.262
OMB3F401.263
IF (.NOT.(L_OROTATE)) FX=2.0*OMEGA*SINE(J) ORH1F305.3107
ORH1F305.3108
IF (L_OROTATE) THEN ORH1F305.3109
IF(ACOR.EQ.0.) THEN ORH1F305.3110
DO K=1,KM ORH1F305.3111
DO I=1,IMT ORH1F305.3112
FX=CORIOLIS(I,J) ORH1F305.3113
UCOR(I,K) = FX*V(I,K) ORL1F404.561
VCOR(I,K) =-FX*U(I,K) ORL1F404.562
UA(I,K)=UA(I,K)+UCOR(I,K) ORL1F404.563
VA(I,K)=VA(I,K)+VCOR(I,K) ORL1F404.564
ENDDO ORH1F305.3116
ENDDO ORH1F305.3117
ELSE ORH1F305.3118
DO K=1,KM ORH1F305.3119
DO I=1,IMT ORH1F305.3120
FX=CORIOLIS(I,J) ORH1F305.3121
UCOR(I,K)= FX*VB(I,K) ORL1F404.565
VCOR(I,K)=-FX*UB(I,K) ORL1F404.566
UA(I,K)=UA(I,K)+UCOR(I,K) ORL1F404.567
VA(I,K)=VA(I,K)+VCOR(I,K) ORL1F404.568
ENDDO ORH1F305.3124
ENDDO ORH1F305.3125
ENDIF ORH1F305.3126
ELSE CLINIC.619
IF(ACOR.EQ.0.) THEN ORH1F305.3127
DO K=1,KM ORH1F305.3128
DO I=1,IMT ORH1F305.3129
UCOR(I,K)= FX*V(I,K) ORL1F404.569
VCOR(I,K)=-FX*U(I,K) ORL1F404.570
UA(I,K)=UA(I,K)+UCOR(I,K) ORL1F404.571
VA(I,K)=VA(I,K)+VCOR(I,K) ORL1F404.572
ENDDO ORH1F305.3132
ENDDO ORH1F305.3133
ELSE ORH1F305.3134
DO K=1,KM ORH1F305.3135
DO I=1,IMT ORH1F305.3136
UCOR(I,K)= FX*VB(I,K) ORL1F404.573
VCOR(I,K)=-FX*UB(I,K) ORL1F404.574
UA(I,K)=UA(I,K)+UCOR(I,K) ORL1F404.575
VA(I,K)=VA(I,K)+VCOR(I,K) ORL1F404.576
ENDDO ORH1F305.3139
ENDDO ORH1F305.3140
ENDIF ORH1F305.3141
ENDIF CLINIC.628
OMB3F401.264
C store CORIOLIS force for vorticity diagnostics OMB3F401.265
IF ( L_OZVRT ) THEN OMB3F401.266
DO K=1,KM OMB3F401.267
DO I=1,IMT OMB3F401.268
UCONA(I,K,4)=UA(I,K) - UCONA(I,K,4) OMB3F401.269
VCONA(I,K,4)=VA(I,K) - VCONA(I,K,4) OMB3F401.270
END DO OMB3F401.271
END DO OMB3F401.272
END IF ! L_OZVRT OMB3F401.273
OMB3F401.274
ORH1F305.3142
ORL1F404.577
IF (L_OFREESFC) THEN ORL1F404.578
C ORL1F404.579
C---------------------------------------------------------------------- ORL1F404.580
C FOR THE FREE SURFACE SOLUTION CALCULATE THE DEPTH AVERAGED CORIOLIS ORL1F404.581
C COMPONENT. THIS MUST BE REMOVED FROM THE FORCING TERMS ZU,ZV BEFORE ORL1F404.582
C THE FORCINGS ARE USED IN CLINIC. ORL1F404.583
C---------------------------------------------------------------------- ORL1F404.584
C ORL1F404.585
C CALCULATE THE DEPTH INTEGRATED CORIOLIS COMPONENT ORL1F404.586
C ORL1F404.587
DO I=1,IMT ORL1F404.588
ORL1F404.589
UCORTOT(I)=0.0 ORL1F404.590
VCORTOT(I)=0.0 ORL1F404.591
ORL1F404.592
ENDDO ORL1F404.593
ORL1F404.594
DO K=1,KM ORL1F404.595
DO I=1,IMT ORL1F404.596
UCORTOT(I) = UCORTOT(I) + ( UCOR(I,K)*DZ(K)*GM(I,K) ) ORL1F404.597
VCORTOT(I) = VCORTOT(I) + ( VCOR(I,K)*DZ(K)*GM(I,K) ) ORL1F404.598
ENDDO ! over i ORL1F404.599
ENDDO ! over k ORL1F404.600
C ORL1F404.601
C DIVIDE BY DEPTH TO GET DEPTH AVERAGED ORL1F404.602
C ORL1F404.603
DO I=1,IMT ORL1F404.604
UCORTOT(I) = UCORTOT(I)*HR(I,J) ORL1F404.605
VCORTOT(I) = VCORTOT(I)*HR(I,J) ORL1F404.606
ENDDO ! over i ORL1F404.607
ORL1F404.608
ENDIF ! L_OFREESFC ORL1F404.609
C CLINIC.629
C--------------------------------------------------------------------- CLINIC.630
C ADD IN PRESSURE TERM AND MASK OUT LAND CLINIC.631
C--------------------------------------------------------------------- CLINIC.632
C CLINIC.633
DO 360 K=1,KM CLINIC.634
DO 360 I=1,IMT CLINIC.635
UA(I,K)=GM(I,K)*(UA(I,K)-DPDX(I,K)) CLINIC.636
VA(I,K)=GM(I,K)*(VA(I,K)-DPDY(I,K)) CLINIC.637
360 CONTINUE CLINIC.638
OMB3F401.275
C store pressure term also for diagnostics; does not include surface OMB3F401.276
C pressure; land is masked out for all terms together later OMB3F401.277
OMB3F401.278
IF ( L_OZVRT ) THEN OMB3F401.279
DO K=1,KM OMB3F401.280
DO I=1,IMT OMB3F401.281
UCONA(I,K,5)= -DPDX(I,K) OMB3F401.282
VCONA(I,K,5)= -DPDY(I,K) OMB3F401.283
END DO OMB3F401.284
END DO OMB3F401.285
END IF ! L_OZVRT OMB3F401.286
OMB3F401.287
ORH1F305.3143
IF (L_ORICHARD) THEN ORH1F305.3144
C CLINIC.640
C -------------------------------------------------------------- CLINIC.641
C Call subroutine to calculate vertical coefficient of viscosity CLINIC.642
C using the "K-theory" of Philander & Pacanowski CLINIC.643
C -------------------------------------------------------------- CLINIC.644
C CLINIC.645
C CLINIC.646
IF (L_ICEFREEDR) THEN ODC1F405.156
CALL VERTCOFC
( OLA0F404.135
& J,IMT,KM,KMM1,NT, OLA0F404.136
& JMT, OLA0F404.137
& TB,TBP,UB,VB, OLA0F404.138
& DZZ2RQ,DZ2RQ, OLA0F404.139
& NERGY,GRAV_SI,GM, OLA0F404.140
& RHOSRN,RHOSRNA,RHOSRNB, OOM1F405.776
& XSTRESS_ICE, YSTRESS_ICE, OLA0F404.142
& ZDZZ,ZDZ,DZ,DZZ, OOM1F405.770
& Rim,hm,max_qLarge_depth,crit_Ri, OLA0F404.144
& L_M,MAX_LARGE_DEPTH,MAX_LARGE_LEVELS,RHO_WATER_SI, OOM1F405.771
& MLD_LARGE,MLD_LARGEP,HTN,HTNP,PME,PMEP,SOL,SOLP, OOM1F405.772
& WATERFLUX_ICE,WATERFLUX_ICEP,LAMBDA_LARGE,SPECIFIC_HEAT_SI, OOM1F405.773
& WME,WMEP,L_OWINDMIX,L_OBULKMAXMLD, OOM1F405.774
& PHI(J), OOM1F405.775
& GNU(1,1),FNU0_SI,FNUB_SI,STABLM_SI,GNUMINC_SI OOM1F405.777
&,OCEANHEATFLUX,OCEANHEATFLUXP OOM1F405.778
&,CARYHEAT,CARYHEATP OOM1F405.779
&,FLXTOICE,FLXTOICEP) OOM1F405.780
ELSE OLA0F404.146
CALL VERTCOFC
( @DYALLOC.4014
& J,IMT,KM,KMM1,NT, @DYALLOC.4015
& JMT, ORH7F404.50
& TB,TBP, UB,VB, CLINIC.649
& DZZ2RQ,DZ2RQ, OLA3F403.39
& NERGY,GRAV_SI,GM, CLINIC.651
& RHOSRN,RHOSRNA,RHOSRNB, OOM1F405.787
& WSX, WSY, OLA3F403.40
& ZDZZ,ZDZ,DZ,DZZ, OOM1F405.781
& Rim,hm,max_qLarge_depth,crit_Ri, OLA0F404.148
& L_M,MAX_LARGE_DEPTH,MAX_LARGE_LEVELS,RHO_WATER_SI, OOM1F405.782
& MLD_LARGE,MLD_LARGEP,HTN,HTNP,PME,PMEP,SOL,SOLP, OOM1F405.783
& WATERFLUX_ICE,WATERFLUX_ICEP,LAMBDA_LARGE,SPECIFIC_HEAT_SI, OOM1F405.784
& WME,WMEP,L_OWINDMIX,L_OBULKMAXMLD, OOM1F405.785
& PHI(J), OOM1F405.786
& GNU(1,1),FNU0_SI,FNUB_SI,STABLM_SI,GNUMINC_SI OOM1F405.788
&,OCEANHEATFLUX,OCEANHEATFLUXP OOM1F405.789
&,CARYHEAT,CARYHEATP OOM1F405.790
&,FLXTOICE,FLXTOICEP) OOM1F405.791
ENDIF OOM1F405.792
do k=1,KM_GNU_ARG-1 OLA3F403.43
do i=1,IMT_GNU_ARG OLA3F403.44
gnum(i,k)=gnu(i,k+1) OLA3F403.45
enddo OLA3F403.46
enddo OLA3F403.47
ENDIF ORH1F305.3145
ORH1F305.3146
IF (L_OIMPDIF) THEN ORH1F305.3147
C CLINIC.656
C CLINIC.657
C -------------------------------------------------------------- CLINIC.658
C Call subroutine to solve vertical diffusion equation for CLINIC.659
C momentum. CLINIC.660
C -------------------------------------------------------------- CLINIC.661
C CLINIC.662
C store values of UA and VA in UCONA, VCONA before the call so that OMB3F401.288
C increment to UA and VA during call can be calculated for diagnostics OMB3F401.289
IF ( L_OZVRT ) THEN OMB3F401.290
DO K = 1, KM OMB3F401.291
DO I = 1, IMT OMB3F401.292
UCONA(I,K,3)= UA(I,K) OMB3F401.293
VCONA(I,K,3)= VA(I,K) OMB3F401.294
END DO OMB3F401.295
END DO OMB3F401.296
END IF ! L_OZVRT OMB3F401.297
C OMB3F401.298
IF (L_ICEFREEDR) THEN ODC1F405.157
ORH1F305.3149
CALL VDIFCALC
CLINIC.663
& ( J,IMT,IMTM1,KM,KMP1,KMM1,NT, CLINIC.664
& UA,UB,VA,VB, CLINIC.665
& DZ,DZZ2RQ,DZ2RQ,C2DTUV, CLINIC.666
& XSTRESS_ICE,YSTRESS_ICE,GM,gnu) JT161193.364
ELSE ORH1F305.3150
CALL VDIFCALC
ORH1F305.3151
& ( J,IMT,IMTM1,KM,KMP1,KMM1,NT, ORH1F305.3152
& UA,UB,VA,VB, ORH1F305.3153
& DZ,DZZ2RQ,DZ2RQ,C2DTUV, ORH1F305.3154
& WSX,WSY,GM,gnu) CLINIC.667
ENDIF ORH1F305.3155
ORH1F305.3156
ENDIF ORH1F305.3157
ORH1F305.3158
C calculate diagnostic of vertical diffusive flux as difference between OMB3F401.299
C UA and VB after and before call to VDIFCALC OMB3F401.300
C OMB3F401.301
IF ( L_OZVRT ) THEN OMB3F401.302
DO K = 1, KM OMB3F401.303
DO I = 1, IMT OMB3F401.304
UCONA(I,K,3)= UA(I,K)-UCONA(I,K,3) OMB3F401.305
VCONA(I,K,3)= VA(I,K)-VCONA(I,K,3) OMB3F401.306
END DO OMB3F401.307
END DO OMB3F401.308
END IF ! L_OZVRT OMB3F401.309
OMB3F401.310
IF (L_OISOPYC) THEN ORH1F305.3159
fxa=4. ORH1F305.3160
fxb=1. ORH1F305.3161
ENDIF ORH1F305.3162
ORH1F305.3163
IF (L_OIMPADDF) THEN ORH1F305.3164
C CLINIC.675
C CLINIC.676
C -------------------------------------------------------------- CLINIC.677
C Call subroutine to solve vertical advection/diffusion CLINIC.678
C equation for momentum - implicitly. CLINIC.679
C -------------------------------------------------------------- CLINIC.680
C CLINIC.681
C Set up arrays used by implicit code. CLINIC.682
C CLINIC.683
scale(1) = 10.0 CLINIC.684
scale(2) = 10.0 CLINIC.685
C Use array TF to hold UB/VB contiguously CLINIC.686
DO K = 1, KM CLINIC.687
DO I = 1, IMT CLINIC.688
TF(I,K,1)=UB(I,K)+C2DTUV*UA(I,K) SF020993.3
TF(I,K,2)=VB(I,K)+C2DTUV*VA(I,K) SF020993.4
ORH1F305.3165
IF (.NOT.(L_ORICHARD))THEN ORH1F305.3166
gnu(I,K) = FKPM ORH1F305.3167
ENDIF ORH1F305.3168
ORH1F305.3169
END DO CLINIC.696
END DO CLINIC.697
C CLINIC.698
C Use aray TEMPA to hold surface fluxes (level 1= WSX) CLINIC.699
C CLINIC.700
DO I=1, IMT CLINIC.701
TEMPA(I,1) = WSX(I) CLINIC.702
TEMPA(I,2) = WSY(I) CLINIC.703
END DO CLINIC.704
C CLINIC.705
C Scaled timesteps CLINIC.706
C CLINIC.707
DO K = 1, KM CLINIC.708
tscale(K)= C2DTUV CLINIC.709
END DO CLINIC.710
C CLINIC.711
C Removed call to VERTSOLV ORH1F305.3170
C Update increments CLINIC.728
C CLINIC.729
DO K= 1, KM CLINIC.730
FXA = 1.0/tscale(K) CLINIC.731
DO I = 1, IMT CLINIC.732
UA(I,K)=UA(I,K) + FXA*(TA(I,K,1)-TF(I,K,1)) SF020993.8
VA(I,K)=VA(I,K) + FXA*(TA(I,K,2)-TF(I,K,2)) SF020993.9
END DO CLINIC.735
END DO CLINIC.736
ORH1F305.3171
ENDIF ! L_OIMPADDF = true ORH1F305.3172
C CLINIC.738
! Calculate ZU and ZV if barotropic mode included OFRAF404.69
! or the rigid-lid surface pressure diagnostic is required OFRAF404.70
IF (.NOT.(L_ONOCLIN) .OR. SF_RLIDP) THEN OFRAF404.71
C--------------------------------------------------------------------- CLINIC.740
C FORM TIME CHANGE OF VERTICALLY AVERAGED FORCING CLINIC.741
C--------------------------------------------------------------------- CLINIC.742
C CLINIC.743
C 1ST, INTEGRATE TIME CHANGE VERTICALLY CLINIC.744
C CLINIC.745
DO 380 K=1,KM CLINIC.751
IF (L_OFREESFC) THEN ORL1F404.610
FX=DZ(K) ORL1F404.611
ELSE ORL1F404.612
IF (.NOT.(L_ONOCLIN)) THEN OFRAF404.72
FX=C2DTSF*DZ(K) OFRAF404.73
ELSE OFRAF404.74
FX=C2DTUV*DZ(K) OFRAF404.75
ENDIF OFRAF404.76
ENDIF ! L_OFREESFC ORL1F404.613
DO 380 I=1,IMT CLINIC.753
ZU(I,J)=ZU(I,J)+UA(I,K)*FX ORH1F304.146
ZV(I,J)=ZV(I,J)+VA(I,K)*FX ORH1F304.147
380 CONTINUE CLINIC.756
OMB3F401.311
C form vertical integral also for diagnostics; mask out land at same OMB3F401.312
C time. Do not multiply through by C2DTSF OMB3F401.313
OMB3F401.314
IF ( L_OZVRT ) THEN OMB3F401.315
DO ID = 1,5 OMB3F401.316
DO I=1,IMT OMB3F401.317
ZCONU(I,J,ID)=0.0 OMB3F401.318
ZCONV(I,J,ID)=0.0 OMB3F401.319
END DO ! I OMB3F401.320
DO K=1,KM OMB3F401.321
FX=DZ(K) OMB3F401.322
DO I=1,IMT OMB3F401.323
ZCONU(I,J,ID) = ZCONU(I,J,ID) + UCONA(I,K,ID)*FX*GM(I,K) OMB3F401.324
ZCONV(I,J,ID) = ZCONV(I,J,ID) + VCONA(I,K,ID)*FX*GM(I,K) OMB3F401.325
END DO OMB3F401.326
END DO OMB3F401.327
END DO OMB3F401.328
END IF ! L_OZVRT OMB3F401.329
OMB3F401.330
ORH1F305.3174
IF (L_OSYMM) THEN ORH1F305.3175
C CLINIC.759
C (SET SYMMETRY ROW TO ZERO) CLINIC.760
C CLINIC.761
IF (J+J_OFFSET.EQ.JMTM1_GLOBAL) THEN ORH3F402.35
DO 382 I=1,IMT CLINIC.763
ZV(I,J)=0.0 ORH1F304.148
382 CONTINUE CLINIC.765
OMB3F401.331
IF ( L_OZVRT ) THEN OMB3F401.332
DO ID = 1,5 OMB3F401.333
DO I=1,IMT OMB3F401.334
ZCONV(I,J,ID) = 0.0 OMB3F401.335
END DO OMB3F401.336
END DO OMB3F401.337
END IF ! L_OZVRT OMB3F401.338
OMB3F401.339
ENDIF CLINIC.766
ORH1F305.3176
ENDIF ! L_OSYMM ORH1F305.3177
C OMB3F401.340
C copy integrals to second set of diagnostics OMB3F401.341
C OMB3F401.342
IF ( L_OZVRT ) THEN OMB3F401.343
DO ID = 1,4 OMB3F401.344
DO I=1,IMT OMB3F401.345
ZCONU(I,J,ID+5) = ZCONU(I,J,ID) OMB3F401.346
ZCONV(I,J,ID+5) = ZCONV(I,J,ID) OMB3F401.347
END DO OMB3F401.348
END DO OMB3F401.349
C OMB3F401.350
C put minus one times the sum of all terms other than the OMB3F401.351
C "pressure" term into the bottom pressure torque diagnostic. OMB3F401.352
C The contribution from the streamfunction tendency is added in OMB3F401.353
C (to SWZVRT) later by RELAX OMB3F401.354
C OMB3F401.355
DO I=1,IMT OMB3F401.356
ZCONU(I,J,N_ZVRT)= - ZCONU(I,J,6) OMB3F401.357
ZCONV(I,J,N_ZVRT)= - ZCONV(I,J,6) OMB2F404.18
END DO OMB3F401.358
DO ID = 7,9 OMB3F401.359
DO I=1,IMT OMB3F401.360
ZCONU(I,J,N_ZVRT)=ZCONU(I,J,N_ZVRT) - ZCONU(I,J,ID) OMB3F401.361
ZCONV(I,J,N_ZVRT)=ZCONV(I,J,N_ZVRT) - ZCONV(I,J,ID) OMB2F404.19
END DO OMB3F401.362
END DO OMB3F401.363
END IF ! L_OZVRT OMB3F401.364
OMB3F401.365
C CLINIC.769
C 2ND, FORM AVERAGE BY DIVIDING BY DEPTH CLINIC.770
C CLINIC.771
DO 390 I=1,IMT CLINIC.772
ZU(I,J)=ZU(I,J)*HR(I,J) ORH1F304.149
ZV(I,J)=ZV(I,J)*HR(I,J) ORH1F304.150
390 CONTINUE CLINIC.775
OMB3F401.366
C form vertical average for first set of 5 diagnostics OMB3F401.367
IF ( L_OZVRT ) THEN OMB3F401.368
DO ID = 1,5 OMB3F401.369
DO I=1,IMT OMB3F401.370
ZCONU(I,J,ID) = ZCONU(I,J,ID)*HR(I,J) OMB3F401.371
ZCONV(I,J,ID) = ZCONV(I,J,ID)*HR(I,J) OMB3F401.372
END DO OMB3F401.373
END DO OMB3F401.374
END IF ! L_OZVRT OMB3F401.375
ORL1F404.614
IF (L_OFREESFC) THEN ORL1F404.615
C====================================================================== ORL1F404.616
C PREPARE FORCING ARRAYS FOR INPUT TO TROPIC ORL1F404.617
C====================================================================== ORL1F404.618
C ORL1F404.619
C TROPIC REQUIRES THE FORCING TERMS TO HAVE THE HORIZONTAL DIFFUSION ORL1F404.620
C AND THE BAROTROPIC CORIOLIS TERMS CALCULATED AT EACH INDIVIDUAL ORL1F404.621
C BAROTROPIC TIMESTEP. IT IS THEREFORE NECEESSARY TO REMOVE THESE ORL1F404.622
C HORIZONTAL DIFFUSION AND CORIOLIS COMPONENTS AT THIS POINT. ORL1F404.623
C ORL1F404.624
DO I=1,IMT ORL1F404.625
ORL1F404.626
XF(I,J) = ZU(I,J) - ( UDFNTOT(I) + UCORTOT(I) ) ORL1F404.627
YF(I,J) = ZV(I,J) - ( VDFNTOT(I) + VCORTOT(I) ) ORL1F404.628
ORL1F404.629
ENDDO ORL1F404.630
ORL1F404.631
ENDIF ! (L_OFREESFC) ORL1F404.632
OMB3F401.376
ENDIF ! NOT L_ONOCLIN OR SF_RLIDP OFRAF404.77
C--------------------------------------------------------------------- CLINIC.778
C DO ANALYSIS OF INTERNAL MODE FORCING ON ENERGY TIMESTEP CLINIC.779
C ALSO, FORM VERT AVE. FOR USE LATER IN EXT. MODE ANALYSIS CLINIC.780
C--------------------------------------------------------------------- CLINIC.781
C CLINIC.782
IF(NERGY.EQ.0) GO TO 550 CLINIC.783
FX=0.0 CLINIC.784
DO 395 LL=1,8 CLINIC.785
DO 395 I=1,IMT CLINIC.786
ZUENG(I,LL,J)=FX ORH1F304.156
ZVENG(I,LL,J)=FX ORH1F304.157
395 CONTINUE CLINIC.789
C CLINIC.790
C 1ST, COMPUTE KE CHANGE DUE TO PRESSURE TERM CLINIC.791
C CLINIC.792
FX=CS(J)*DYU(J) CLINIC.793
ORH1F305.3179
IF (L_OSYMM) THEN ORH1F305.3180
C CLINIC.795
C (WEIGHT SYMMETRY ROW BY ONE HALF) CLINIC.796
C CLINIC.797
IF (J+J_OFFSET.EQ.JMTM1_GLOBAL) FX=FX*0.5 ORH3F402.36
ENDIF ORH1F305.3182
ORH1F305.3183
DO 400 K=1,KM CLINIC.800
DO 400 I=2,IMUM1 CLINIC.801
UENG(I,K)=GM(I,K)*(-DPDX(I,K)) CLINIC.802
VENG(I,K)=GM(I,K)*(-DPDY(I,K)) CLINIC.803
ENGINT(6)=ENGINT(6)+(USAV(I,K)*UENG(I,K) CLINIC.804
* +VSAV(I,K)*VENG(I,K))*FX*DXU(I)*DZ(K) CLINIC.805
ZUENG(I,6,J)=ZUENG(I,6,J)+UENG(I,K)*DZ(K)*HR(I,J) ORH1F304.158
ZVENG(I,6,J)=ZVENG(I,6,J)+VENG(I,K)*DZ(K)*HR(I,J) ORH1F304.159
400 CONTINUE CLINIC.808
C CLINIC.809
C 2ND, COMPUTE KE CHANGE DUE TO ADVECTION OF MOMENTUM CLINIC.810
C CLINIC.811
DO 430 K=1,KM CLINIC.812
DO 430 I=2,IMUM1 CLINIC.813
UENG(I,K)=GM(I,K)*((-FUW (I+1,K)*(U (I+1,K)+U (I ,K)) CLINIC.814
* +FUW (I ,K)*(U (I ,K)+U (I-1,K)))*DXU2R(I) CLINIC.815
* -FVN (I ,K)*(UP(I ,K)+U (I ,K)) CLINIC.816
* +FVSU(I ,K)*(U (I ,K)+UM(I ,K))) CLINIC.817
VENG(I,K)=GM(I,K)*((-FUW (I+1,K)*(V (I+1,K)+V (I ,K)) CLINIC.818
* +FUW (I ,K)*(V (I ,K)+V (I-1,K)))*DXU2R(I) CLINIC.819
* -FVN (I ,K)*(VP(I ,K)+V (I ,K)) CLINIC.820
* +FVSU(I ,K)*(V (I ,K)+VM(I ,K))) CLINIC.821
ENGINT(2)=ENGINT(2)+(USAV(I,K)*UENG(I,K) CLINIC.822
* +VSAV(I,K)*VENG(I,K))*FX*DXU(I)*DZ(K) CLINIC.823
ZUENG(I,2,J)=ZUENG(I,2,J)+UENG(I,K)*DZ(K)*HR(I,J) ORH1F304.160
ZVENG(I,2,J)=ZVENG(I,2,J)+VENG(I,K)*DZ(K)*HR(I,J) ORH1F304.161
430 CONTINUE CLINIC.826
ORH1F305.3184
IF (L_OIMPADDF) THEN ORH1F305.3185
DO K=1,KM ORH1F305.3186
KM1=MAX(1,K-1) ORH1F305.3187
KP1=MIN(KM,K+1) ORH1F305.3188
DO I=2,IMUM1 ORH1F305.3189
UENG(I,K)=GM(I,K)*(-(W(I,K )*(U(I,KM1)+U(I,K )+ ORH1F305.3190
* TF(I,K,1)+TF(I,KM1,1) ) CLINIC.837
* -W(I,K+1)*(U(I,K )+U(I,KP1) + CLINIC.838
* TF(I,K,1)+TF(I,KP1,1))))* CLINIC.839
* (0.5*DZ2RQ(I,K)) CLINIC.840
VENG(I,K)=GM(I,K)*(-W(I,K )*(V(I,KM1)+V(I,K )+ ORH1F305.3191
* TF(I,K,2)+TF(I,KM1,2)) CLINIC.848
* -W(I,K+1)*(V(I,K )+V(I,KP1)+ CLINIC.849
* TF(I,K,2)+TF(I,KP1,2)))* CLINIC.850
* (0.5*DZ2RQ(I,K)) CLINIC.851
ENGINT(3)=ENGINT(3)+(USAV(I,K)*UENG(I,K) ORH1F305.3192
* +VSAV(I,K)*VENG(I,K))*FX*DXU(I)*DZ(K) CLINIC.854
ZUENG(I,3,J)=ZUENG(I,3,J)+UENG(I,K)*DZ(K)*HR(I,J) ORH1F305.3193
ZVENG(I,3,J)=ZVENG(I,3,J)+VENG(I,K)*DZ(K)*HR(I,J) ORH1F305.3194
ENDDO ! over I ORH1F305.3195
ENDDO ! over K ORH1F305.3196
ELSE ORH1F305.3197
DO K=1,KM ORH1F305.3198
KM1=MAX(1,K-1) ORH1F305.3199
KP1=MIN(KM,K+1) ORH1F305.3200
DO I=2,IMUM1 ORH1F305.3201
UENG(I,K)=GM(I,K)*(-(W(I,K )*(U(I,KM1)+U(I,K )) ORH1F305.3202
* -W(I,K+1)*(U(I,K )+U(I,KP1)))*DZ2RQ(I,K)) ORH1F305.3203
VENG(I,K)=GM(I,K)*(-(W(I,K )*(V(I,KM1)+V(I,K )) ORH1F305.3204
* -W(I,K+1)*(V(I,K )+V(I,KP1)))*DZ2RQ(I,K)) ORH1F305.3205
ENGINT(3)=ENGINT(3)+(USAV(I,K)*UENG(I,K) ORH1F305.3206
* +VSAV(I,K)*VENG(I,K))*FX*DXU(I)*DZ(K) ORH1F305.3207
ZUENG(I,3,J)=ZUENG(I,3,J)+UENG(I,K)*DZ(K)*HR(I,J) ORH1F305.3208
ZVENG(I,3,J)=ZVENG(I,3,J)+VENG(I,K)*DZ(K)*HR(I,J) ORH1F305.3209
ENDDO ! over I ORH1F305.3210
ENDDO ! over K ORH1F305.3211
ENDIF ORH1F305.3212
C CLINIC.858
C 3RD, COMPUTE KE CHANGE DUE TO HOR. DIFFUSION OF MOMENTUM CLINIC.859
C CLINIC.860
DO 490 K=1,KM CLINIC.861
DO 490 I=2,IMUM1 CLINIC.862
UENG(I,K)=GM(I,K)*( CLINIC.863
* +BBUJ*DXU2R(I)*(DXT4R(I+1)*(UB(I+1,K)-UB(I,K)) CLINIC.864
* +DXT4R(I )*(UB(I-1,K)-UB(I,K))) CLINIC.865
* +CCUJ*(UBP(I,K)-UB(I,K))+DDUJ*(UBM(I,K)-UB(I,K)) CLINIC.866
* +GGUJ*UB(I,K)-HHUJ*DXU2R(I)*(VB(I+1,K)-VB(I-1,K))) CLINIC.867
VENG(I,K)=GM(I,K)*( CLINIC.868
* +BBUJ*DXU2R(I)*(DXT4R(I+1)*(VB(I+1,K)-VB(I,K)) CLINIC.869
* +DXT4R(I )*(VB(I-1,K)-VB(I,K))) CLINIC.870
* +CCUJ*(VBP(I,K)-VB(I,K))+DDUJ*(VBM(I,K)-VB(I,K)) CLINIC.871
* +GGUJ*VB(I,K)+HHUJ*DXU2R(I)*(UB(I+1,K)-UB(I-1,K))) CLINIC.872
ENGINT(4)=ENGINT(4)+(USAV(I,K)*UENG(I,K) CLINIC.873
* +VSAV(I,K)*VENG(I,K))*FX*DXU(I)*DZ(K) CLINIC.874
ZUENG(I,4,J)=ZUENG(I,4,J)+UENG(I,K)*DZ(K)*HR(I,J) ORH1F304.164
ZVENG(I,4,J)=ZVENG(I,4,J)+VENG(I,K)*DZ(K)*HR(I,J) ORH1F304.165
490 CONTINUE CLINIC.877
IF (L_OBIMOM) THEN OOM3F405.1145
DO K=1,KM OOM3F405.1146
DO I=2,IMUM1 OOM3F405.1147
UENG(I,K)=GM(I,K)*(Uxx(I,K)+Uyy(I,K)+Umet(I,K)) OOM3F405.1148
VENG(I,K)=GM(I,K)*(Vxx(I,K)+Vyy(I,K)+Vmet(I,K)) OOM3F405.1149
ENGINT(4)=ENGINT(4)+(USAV(I,K)*UENG(I,K) OOM3F405.1150
* +VSAV(I,K)*VENG(I,K))*FX*DXU(I)*DZ(K) OOM3F405.1151
ZUENG(I,4,J)=ZUENG(I,4,J)+(UENG(I,K)*DZ(K)*HR(I,J)) OOM3F405.1152
ZVENG(I,4,J)=ZVENG(I,4,J)+(VENG(I,K)*DZ(K)*HR(I,J)) OOM3F405.1153
ENDDO OOM3F405.1154
ENDDO OOM3F405.1155
ENDIF ! L_OBIMOM OOM3F405.1156
ORH1F305.3213
IF (L_OIMPDIF) THEN ORH1F305.3214
C CLINIC.879
C The energy calculation has not yet been coded for when the CLINIC.880
C implicit vertical mixing is selected without implicit advection. CLINIC.881
C gnu1z and gnu2z are set to zero here to reflect this. CLINIC.882
C CLINIC.883
DO K=1,KMP1 ORH1F305.3215
DO I=1,IMU ORH1F305.3216
gnu1z(I,K)=0. ORH1F305.3217
gnu2z(I,K)=0. ORH1F305.3218
END DO ORH1F305.3219
END DO ORH1F305.3220
ENDIF ORH1F305.3221
C CLINIC.894
C 4TH, COMPUTE KE CHANGE DUE TO WIND STRESS CLINIC.895
C CLINIC.896
ORH1F305.3222
IF (L_OIMPADDF) THEN ORH1F305.3223
ORH1F305.3224
DO I=2,IMUM1 ORH1F305.3225
UENG(I,1)=GM(I,1)*(scale(1)/DZ(1))*WSX(I) ORH1F305.3226
VENG(I,1)=GM(I,1)*(scale(2)/DZ(1))*WSY(I) ORH1F305.3227
ENGINT(7)=ENGINT(7)+(USAV(I,1)*UENG(I,1) ORH1F305.3228
* +VSAV(I,1)*VENG(I,1))*FX*DXU(I)*DZ(1) CLINIC.907
ZUENG(I,7,J)=ZUENG(I,7,J)+UENG(I,1)*DZ(1)*HR(I,J) ORH1F305.3229
ZVENG(I,7,J)=ZVENG(I,7,J)+VENG(I,1)*DZ(1)*HR(I,J) ORH1F305.3230
ENDDO ORH1F305.3231
ORH1F305.3232
ELSE ORH1F305.3233
ORH1F305.3234
IF ((.NOT.(L_ORICHARD)).AND.(.NOT.(L_OIMPDIF))) THEN ORH1F305.3235
DO I=2,IMUM1 ORH1F305.3236
UENG(I,1)=GM(I,1)*EEM(1)*(UOVER(I)-UDIF(I,1)) ORH1F305.3237
VENG(I,1)=GM(I,1)*EEM(1)*(VOVER(I)-VDIF(I,1)) ORH1F305.3238
ENGINT(7)=ENGINT(7)+(USAV(I,1)*UENG(I,1) ORH1F305.3239
* +VSAV(I,1)*VENG(I,1))*FX*DXU(I)*DZ(1) ORH1F305.3240
ZUENG(I,7,J)=ZUENG(I,7,J)+UENG(I,1)*DZ(1)*HR(I,J) ORH1F305.3241
ZVENG(I,7,J)=ZVENG(I,7,J)+VENG(I,1)*DZ(1)*HR(I,J) ORH1F305.3242
ENDDO ORH1F305.3243
ELSE ORH1F305.3244
ORH1F305.3245
! Catch all other conditions ORH1F305.3246
DO I=2,IMUM1 ORH1F305.3247
ENGINT(7)=ENGINT(7)+(USAV(I,1)*UENG(I,1) ORH1F305.3248
* +VSAV(I,1)*VENG(I,1))*FX*DXU(I)*DZ(1) ORH1F305.3249
ZUENG(I,7,J)=ZUENG(I,7,J)+UENG(I,1)*DZ(1)*HR(I,J) ORH1F305.3250
ZVENG(I,7,J)=ZVENG(I,7,J)+VENG(I,1)*DZ(1)*HR(I,J) ORH1F305.3251
ENDDO ORH1F305.3252
ENDIF ORH1F305.3253
ORH1F305.3254
ENDIF ORH1F305.3255
ORH1F305.3256
C CLINIC.911
C 5TH, COMPUTE KE CHANGE DUE TO BOTTOM DRAG CLINIC.912
C CLINIC.913
IF (L_OIMPDIF) THEN ORH1F305.3257
ORH1F305.3258
DO 524 I=2,IMUM1 ORH1F305.3259
KZ=KMU(I) ORH1F305.3260
IF(KZ.EQ.0)GO TO 524 ORH1F305.3261
UENG(I,KZ)=-GM(I,KZ)*gnu1z(I,KZ+1)/DZ(KZ) ORH1F305.3262
VENG(I,KZ)=-GM(I,KZ)*gnu2z(I,KZ+1)/DZ(KZ) ORH1F305.3263
ENGINT(8)=ENGINT(8)+(USAV(I,KZ)*UENG(I,KZ) ORH1F305.3264
* +VSAV(I,KZ)*VENG(I,KZ))*FX*DXU(I)*DZ(KZ) CLINIC.926
ZUENG(I,8,J)=ZUENG(I,8,J)+UENG(I,KZ)*DZ(KZ)*HR(I,J) ORH1F305.3265
ZVENG(I,8,J)=ZVENG(I,8,J)+VENG(I,KZ)*DZ(KZ)*HR(I,J) ORH1F305.3266
524 CONTINUE ORH1F305.3267
ORH1F305.3268
ELSE ORH1F305.3269
C ORH1F305.3270
IF ((.NOT.(L_ORICHARD)).AND.(.NOT.(L_OIMPADDF))) THEN ORH1F305.3271
DO 525 I=2,IMUM1 ORH1F305.3272
KZ=KMU(I) ORH1F305.3273
IF(KZ.EQ.0)GO TO 525 ORH1F305.3274
UENG(I,KZ)=GM(I,KZ)*FFM(KZ)*(UDIF(I,KZ+1)-UDIF(I,KZ)) ORH1F305.3275
VENG(I,KZ)=GM(I,KZ)*FFM(KZ)*(VDIF(I,KZ+1)-VDIF(I,KZ)) ORH1F305.3276
ENGINT(8)=ENGINT(8)+(USAV(I,KZ)*UENG(I,KZ) ORH1F305.3277
* +VSAV(I,KZ)*VENG(I,KZ))*FX*DXU(I)*DZ(KZ) ORH1F305.3278
ZUENG(I,8,J)=ZUENG(I,8,J)+UENG(I,KZ)*DZ(KZ)*HR(I,J) ORH1F305.3279
ZVENG(I,8,J)=ZVENG(I,8,J)+VENG(I,KZ)*DZ(KZ)*HR(I,J) ORH1F305.3280
525 CONTINUE ORH1F305.3281
ELSE ORH1F305.3282
! Catch all other conditions ORH1F305.3283
DO 526 I=2,IMUM1 ORH1F305.3284
KZ=KMU(I) ORH1F305.3285
IF(KZ.EQ.0)GO TO 526 ORH1F305.3286
ENGINT(8)=ENGINT(8)+(USAV(I,KZ)*UENG(I,KZ) ORH1F305.3287
* +VSAV(I,KZ)*VENG(I,KZ))*FX*DXU(I)*DZ(KZ) ORH1F305.3288
ZUENG(I,8,J)=ZUENG(I,8,J)+UENG(I,KZ)*DZ(KZ)*HR(I,J) ORH1F305.3289
ZVENG(I,8,J)=ZVENG(I,8,J)+VENG(I,KZ)*DZ(KZ)*HR(I,J) ORH1F305.3290
526 CONTINUE ORH1F305.3291
ENDIF ORH1F305.3292
ENDIF ORH1F305.3293
ORH1F305.3294
ORH1F305.3295
C CLINIC.930
C 6TH, COMPUTE KE CHANGE DUE TO VERT. DIFFUSION OF MOMENTUM CLINIC.931
C CLINIC.932
IF (.NOT.(L_ORICHARD)) THEN ORH1F305.3296
ORH1F305.3297
DO 540 I=2,IMUM1 ORH1F305.3298
KZ=KMU(I) ORH1F305.3299
IF(KZ.EQ.0)GO TO 540 ORH1F305.3300
DO 541 K=1,KZ ORH1F305.3301
FXA=1.0 ORH1F305.3302
FXB=1.0 ORH1F305.3303
IF(K.EQ.1) FXA=0.0 ORH1F305.3304
IF(K.EQ.KZ) FXB=0.0 ORH1F305.3305
UENG(I,K)=GM(I,K)*( FXA*EEM(K)*(UDIF(I,K-1)-UDIF(I,K )) CLINIC.942
* -FXB*FFM(K)*(UDIF(I,K )-UDIF(I,K+1))) CLINIC.943
VENG(I,K)=GM(I,K)*( FXA*EEM(K)*(VDIF(I,K-1)-VDIF(I,K )) CLINIC.944
* -FXB*FFM(K)*(VDIF(I,K )-VDIF(I,K+1))) CLINIC.945
ENGINT(5)=ENGINT(5)+(USAV(I,K)*UENG(I,K) ORH1F305.3306
* +VSAV(I,K)*VENG(I,K))*FX*DXU(I)*DZ(K) ORH1F305.3307
ZUENG(I,5,J)=ZUENG(I,5,J)+UENG(I,K)*DZ(K)*HR(I,J) ORH1F305.3308
ZVENG(I,5,J)=ZVENG(I,5,J)+VENG(I,K)*DZ(K)*HR(I,J) ORH1F305.3309
541 CONTINUE ORH1F305.3310
540 CONTINUE ORH1F305.3311
ORH1F305.3312
ELSE ORH1F305.3313
ORH1F305.3314
IF (L_OIMPADDF) THEN ORH1F305.3315
DO 542 I=2,IMUM1 ORH1F305.3316
KZ=KMU(I) ORH1F305.3317
IF(KZ.EQ.0)GO TO 542 ORH1F305.3318
DO 543 K=1,KZ ORH1F305.3319
FXA=1.0 ORH1F305.3320
FXB=1.0 ORH1F305.3321
IF(K.EQ.1) FXA=0.0 ORH1F305.3322
IF(K.EQ.KZ) FXB=0.0 ORH1F305.3323
ORH1F305.3324
UENG(I,K)=GM(I,K)*(gnu(I,KP1)*( NB151293.4
+ (UB(I,KP1) - UB(I,K)) CLINIC.949
+ + (TF(I,KP1,1) - TF(I,K,1)))*(2.0*DZZ2R(K)*DZ2R(K)) NB151293.5
+ -gnu(I,K)*( NB151293.6
+ (UB(I,K)-UB(I,KM1))+ CLINIC.952
+ (TF(I,K,1) - TF(I,KM1,1)))*(2.0*DZZ2R(KM1)*DZ2R(K))) CLINIC.953
VENG(I,K)=GM(I,K)*(gnu(I,KP1)*( - NB151293.7
+ (VB(I,KP1) -VB(I,K)) + CLINIC.955
+ (TF(I,KP1,2)-TF(I,K,2)) )*(2.0*DZZ2R(K)*DZ2R(K)) CLINIC.956
+ -gnu(I,K)*( NB151293.8
+ (VB(I,K)- VB(I,KM1)) + CLINIC.958
+ (TF(I,K,2) - TF(I,KM1,2)))*(2.0*DZZ2R(KM1)*DZ2R(K))) CLINIC.959
ENGINT(5)=ENGINT(5)+(USAV(I,K)*UENG(I,K) ORH1F305.3325
* +VSAV(I,K)*VENG(I,K))*FX*DXU(I)*DZ(K) CLINIC.962
ZUENG(I,5,J)=ZUENG(I,5,J)+UENG(I,K)*DZ(K)*HR(I,J) ORH1F305.3326
ZVENG(I,5,J)=ZVENG(I,5,J)+VENG(I,K)*DZ(K)*HR(I,J) ORH1F305.3327
543 CONTINUE ORH1F305.3328
542 CONTINUE ORH1F305.3329
ELSE ORH1F305.3330
DO 544 I=2,IMUM1 ORH1F305.3331
KZ=KMU(I) ORH1F305.3332
IF(KZ.EQ.0)GO TO 544 ORH1F305.3333
DO 545 K=1,KZ ORH1F305.3334
FXA=1.0 ORH1F305.3335
FXB=1.0 ORH1F305.3336
IF(K.EQ.1) FXA=0.0 ORH1F305.3337
IF(K.EQ.KZ) FXB=0.0 ORH1F305.3338
ENGINT(5)=ENGINT(5)+(USAV(I,K)*UENG(I,K) ORH1F305.3339
* +VSAV(I,K)*VENG(I,K))*FX*DXU(I)*DZ(K) ORH1F305.3340
ZUENG(I,5,J)=ZUENG(I,5,J)+UENG(I,K)*DZ(K)*HR(I,J) ORH1F305.3341
ZVENG(I,5,J)=ZVENG(I,5,J)+VENG(I,K)*DZ(K)*HR(I,J) ORH1F305.3342
545 CONTINUE ORH1F305.3343
544 CONTINUE ORH1F305.3344
ENDIF ORH1F305.3345
ENDIF ORH1F305.3346
550 CONTINUE CLINIC.967
C CLINIC.968
C--------------------------------------------------------------------- CLINIC.969
C COMPUTE NEW VELOCITIES (WITH INCORRECT VERTICAL MEANS) CLINIC.970
C ALSO, ADD IN REMAINDER OF CORIOLIS TERM IF TREATED IMPLICITLY CLINIC.971
C--------------------------------------------------------------------- CLINIC.972
C CLINIC.973
IF(ACOR.EQ.0.) THEN CLINIC.974
DO 560 K=1,KM CLINIC.975
DO 560 I=1,IMT CLINIC.976
UA(I,K)=UB(I,K)+C2DTUV*UA(I,K) CLINIC.977
VA(I,K)=VB(I,K)+C2DTUV*VA(I,K) CLINIC.978
560 CONTINUE CLINIC.979
ELSE CLINIC.980
IF (.NOT.(L_OROTATE))THEN ORH1F305.3347
FX=C2DTUV*ACOR*2.0*OMEGA*SINE(J) ORH1F305.3348
DETMR=1.0/(1.0+FX*FX) ORH1F305.3349
ENDIF ORH1F305.3350
DO 565 K=1,KM CLINIC.985
DO 565 I=1,IMT CLINIC.986
IF (L_OROTATE) THEN ORH1F305.3351
FX=C2DTUV*ACOR*CORIOLIS(I,J) ORH1F305.3352
DETMR=1.0/(1.0+FX*FX) ORH1F305.3353
ENDIF ORH1F305.3354
UDIF(I,K)=(UA(I,K)+FX*VA(I,K))*DETMR CLINIC.991
VDIF(I,K)=(VA(I,K)-FX*UA(I,K))*DETMR CLINIC.992
UA(I,K)=UB(I,K)+C2DTUV*UDIF(I,K) CLINIC.993
VA(I,K)=VB(I,K)+C2DTUV*VDIF(I,K) CLINIC.994
565 CONTINUE CLINIC.995
ENDIF CLINIC.996
C CLINIC.997
C--------------------------------------------------------------------- CLINIC.998
C DETERMINE THE INCORRECT VERTICAL MEANS OF THE NEW VELOCITIES CLINIC.999
C--------------------------------------------------------------------- CLINIC.1000
C CLINIC.1001
FX=0.0 CLINIC.1002
DO 575 I=1,IMT CLINIC.1003
SFU(I)=FX CLINIC.1004
SFV(I)=FX CLINIC.1005
575 CONTINUE CLINIC.1006
DO 580 K=1,KM CLINIC.1007
DO 580 I=1,IMT CLINIC.1008
SFU(I)=SFU(I)+UA(I,K)*DZ(K) CLINIC.1009
SFV(I)=SFV(I)+VA(I,K)*DZ(K) CLINIC.1010
580 CONTINUE CLINIC.1011
DO 590 I=1,IMT CLINIC.1012
SFU(I)=SFU(I)*HR(I,J) CLINIC.1013
SFV(I)=SFV(I)*HR(I,J) CLINIC.1014
590 CONTINUE CLINIC.1015
C CLINIC.1016
C--------------------------------------------------------------------- CLINIC.1017
C SUBTRACT INCORRECT VERTICAL MEAN TO GET INTERNAL MODE CLINIC.1018
C--------------------------------------------------------------------- CLINIC.1019
C CLINIC.1020
DO 600 K=1,KM CLINIC.1021
DO 600 I=1,IMT CLINIC.1022
UA(I,K)=UA(I,K)-SFU(I) CLINIC.1023
VA(I,K)=VA(I,K)-SFV(I) CLINIC.1024
600 CONTINUE CLINIC.1025
DO 602 K=1,KM CLINIC.1026
DO 602 I=1,IMT CLINIC.1027
UA(I,K)=GM(I,K)*UA(I,K) CLINIC.1028
VA(I,K)=GM(I,K)*VA(I,K) CLINIC.1029
602 CONTINUE CLINIC.1030
C CLINIC.1031
C--------------------------------------------------------------------- CLINIC.1032
C COMPUTE TOTAL CHANGE OF K.E. OF INTERNAL MODE ON ENERGY TIMESTEP CLINIC.1033
C--------------------------------------------------------------------- CLINIC.1034
C CLINIC.1035
IF(NERGY.EQ.1) THEN CLINIC.1036
DO 605 K=1,KM CLINIC.1037
FX=CS(J)*DYU(J)*DZ(K)/C2DTUV CLINIC.1038
IF (L_OSYMM) THEN ORH1F305.3355
IF (J+J_OFFSET.EQ.JMTM1_GLOBAL) FX=FX*0.5 ORH3F402.37
ENDIF ORH1F305.3357
DO 605 I=2,IMUM1 CLINIC.1042
ENGINT(1)=ENGINT(1)+(USAV(I,K)*(UA(I,K)-UB(I,K)) CLINIC.1043
* +VSAV(I,K)*(VA(I,K)-VB(I,K)))*FX*DXU(I) CLINIC.1044
605 CONTINUE CLINIC.1045
ENDIF CLINIC.1046
C CLINIC.1047
C======================================================================= CLINIC.1048
C END COMPUTATION OF INTERNAL MODES ================================== CLINIC.1049
C======================================================================= CLINIC.1050
C CLINIC.1051
IF ((.NOT.L_ONOCLIN).AND.(.NOT.L_OFREESFC)) THEN ORL1F404.633
C======================================================================= CLINIC.1053
C BEGIN COMPUTATION OF VORTICITY FOR INPUT TO "RELAX" ================ CLINIC.1054
C======================================================================= CLINIC.1055
C CLINIC.1056
IF (L_OCYCLIC) THEN ORH1F305.3359
C--------------------------------------------------------------------- CLINIC.1059
C SET CYCLIC BOUNDARY CONDITIONS ON EXT. MODE FORCING FUNCTIONS CLINIC.1060
C--------------------------------------------------------------------- CLINIC.1061
C CLINIC.1062
ZU(1,J)=ZU(IMUM1,J) ORH1F304.151
ZV(1,J)=ZV(IMUM1,J) ORH1F304.152
IF ( L_OZVRT ) THEN OMB3F401.377
DO ID = 1,N_ZVRT OMB3F401.378
ZCONU(1,J,ID)=ZCONU(IMUM1,J,ID) OMB3F401.379
ZCONV(1,J,ID)=ZCONV(IMUM1,J,ID) OMB3F401.380
END DO OMB3F401.381
END IF ! L_OZVRT OMB3F401.382
IF(NERGY.EQ.0) GO TO 613 CLINIC.1065
DO 612 LL=2,8 CLINIC.1066
ZUENG(1,LL,J)=ZUENG(IMUM1,LL,J) ORH1F304.154
ZVENG(1,LL,J)=ZVENG(IMUM1,LL,J) ORH1F304.155
612 CONTINUE CLINIC.1069
613 CONTINUE CLINIC.1070
C CLINIC.1071
ENDIF ORH1F305.3360
ORH1F305.3361
C--------------------------------------------------------------------- CLINIC.1074
C FORM CURL OF TIME CHANGE IN VERTICALLY AVERAGED EQUATIONS CLINIC.1075
C--------------------------------------------------------------------- CLINIC.1076
C CLINIC.1077
C CLINIC.1106
C--------------------------------------------------------------------- CLINIC.1107
C DO ANALYSIS OF EXTERNAL MODE FORCING ON ENERGY TIMESTEP CLINIC.1108
C--------------------------------------------------------------------- CLINIC.1109
C CLINIC.1110
C CLINIC.1138
C======================================================================= CLINIC.1139
C END COMPUTATION OF VORTICITY ======================================= CLINIC.1140
C======================================================================= CLINIC.1141
C CLINIC.1142
ENDIF ! ((.NOT.L_ONOCLIN).AND.(.NOT.L_OFREESFC)) ORL1F404.634
ORH1F305.3363
C--------------------------------------------------------------------- CLINIC.1291
C TRANSFER QUANTITIES COMPUTED TO THE NORTH OF THE PRESENT ROW CLINIC.1292
C TO BE DEFINED TO THE SOUTH IN THE COMPUTATION OF THE NEXT ROW CLINIC.1293
C--------------------------------------------------------------------- CLINIC.1294
C CLINIC.1295
! NOTE: The following calculation may appear to contain ORH3F403.223
! superfluous brackets, but they are needed to force ORH3F403.224
! the order of calculation on the t3e. ORH3F403.225
FX=(CS(J)*DYU(J))*(CSR(J+1)*DYUR(J+1)) ORH3F403.226
DO 644 K=1,KM CLINIC.1297
DO 644 I=1,IMT CLINIC.1298
FVSU(I,K)=FVN(I,K)*FX CLINIC.1299
644 CONTINUE CLINIC.1300
C CLINIC.1314
ORH1F403.90
ENDIF ! (L_OSYMM.OR.(J+J_OFFSET.NE.JMTM1_GLOBAL)) ORH1F403.91
ORH1F403.92
ENDIF ! (J.GE.J_2.AND.J.LE.J_JMTM1) ORH1F403.93
ORH1F305.3394
IF (L_OTIMER) THEN ORH1F305.3395
CALL TIMER
('CLINIC ',104) GPB8F405.87
ENDIF ORH1F305.3397
RETURN CLINIC.1345
END CLINIC.1346
*ENDIF @DYALLOC.4028