*IF DEF,OCEAN @DYALLOC.4186
C ******************************COPYRIGHT****************************** GTS2F400.7111
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.7112
C GTS2F400.7113
C Use, duplication or disclosure of this code is subject to the GTS2F400.7114
C restrictions as set forth in the contract. GTS2F400.7115
C GTS2F400.7116
C Meteorological Office GTS2F400.7117
C London Road GTS2F400.7118
C BRACKNELL GTS2F400.7119
C Berkshire UK GTS2F400.7120
C RG12 2SZ GTS2F400.7121
C GTS2F400.7122
C If no contract has been raised with this copy of the code, the use, GTS2F400.7123
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.7124
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.7125
C Modelling at the above address. GTS2F400.7126
C ******************************COPYRIGHT****************************** GTS2F400.7127
C GTS2F400.7128
C*LL OSETCON.2
CLL Subroutine SET_CONSTANTS_OCEAN OSETCON.3
CLL Can run on any FORTRAN 77 compiler with long lower case variables OSETCON.4
CLL OSETCON.5
CLL The code must be pre-compiled by the UPDOC system. OSETCON.6
CLL Option A indicates that the Unified Model version is to be used. OSETCON.7
CLL OSETCON.8
CLL Author: S Ineson OSETCON.9
CLL OSETCON.15
CLL Sets up variables derived from basic model configuration OSETCON.16
CLL OSETCON.17
CLL OSETCON.18
CLL Model Modification history from model version 3.2: MB061293.1
CLL version MB061293.2
CLL 3.3 CORIOLIS array assigned values when OROTATE or MB061293.3
CLL OCNASSM is on. CORIOLIS array set to agree with MB061293.4
CLL non-rotated case when PHI_POLE is close to 90.0 MB061293.5
CLL Model Modification history from model version 3.4: ONF0F304.5
CLL version Date ONF0F304.6
CLL 3.4 16/6/94 : Change CHARACTER*(*) to CHARACTER*(80) N.Farnon ONF0F304.7
CLL 3.4 SUMDX is declared if OROTATE or OCNASSM turned on OFR1F304.97
CLL 3.4 06/06/94: N Farnon: Redimension Character Array ABT from IMT to ONF1F304.1
CLL 2000. ONF1F304.2
CLL 3.5 01/02/95: R. Hill : Remove *IF DEF dependencies. ORH1F305.14
CLL 4.0 27/03/95 : Add RHOWATER and remove ice constants. C.Cooper OCC0F400.22
! 4.3 01/02/97 Remove duplicate TIMER calls. Fix bug in MPP ORH6F404.1
! code - computation of FKMZ_GLOBAL. Tidy GC_BCASTS ORH6F404.2
! and correct syntax to allow shmem use. R. Hill ORH6F404.3
! 4.4 12/08/97 Tidy up code generally - indentation and ORH6F404.4
! layout plus rearrange FKMP, FKMQ, FKMZ calculations ORH6F404.5
! for consistency and efficiency. Remove STOP ORH6F404.6
! command and introduce proper error handling. ORH6F404.7
! R.Hill ORH6F404.8
! 4.4 9/97 : Remove dependency on O_SOLARAL of call OJP0F404.619
! to MIXSET (to run either/both light models), JRPalmer OJP0F404.620
! 4.4 30/07/97 Replace PRINTS with WRITES for consistency of ORH4F404.27
! output file contents. R. Hill ORH4F404.28
CLL 4.4 15/06/97: Calculte indicies and constants to be used with ORL1F404.188
CLL the Free Surface solution. R.Lenton ORL1F404.189
CLL 4.5 3/11/98 Calculate and send/receive various arrays remote OOM3F405.85
CLL from this PE (HRJP etc) M. Roberts OOM3F405.86
CLL 4.5 3.11.98 Set variables for Med/Hud outflow M. Roberts OOM2F405.35
CLL 4.5 10/11/98 Add L_OISOGM option and change number of levels used OOM1F405.70
CLL by Visbeck scheme dependent on version. M. Roberts OOM1F405.71
! 4.5 10/08/97 C. Sherlock Calculate coriolis array for free ODC1F405.382
! drift ice model ODC1F405.383
! 4.5 30/03/98 Include initialisation of land mask array ORH2F405.1
! for use in STASH masking of diagnostics. ORH2F405.2
CLL OSETCON.20
CLL OSETCON.21
CLL OSETCON.22
CLLEND --------------------------------------------------------------- OSETCON.23
SUBROUTINE SET_CONSTANTS_OCEAN( 1,41@DYALLOC.4187
*CALL ARGSIZE
@DYALLOC.4188
*CALL ARGOCALL
@DYALLOC.4189
& ICODE, CMESSAGE, @DYALLOC.4190
& SWLDEG,O_LEVDEPC,O_ROWDEPC @DYALLOC.4191
&,PHI_POLE,WEDGEDEG OSETCON.25
&,O_COLDEPC,FKMP_GLOBAL,L_STASH_LAND ORH2F405.3
&,IMT_CLN_ARG,JMT_CLN_ARG,IMT_BIO_ARG ORH2F405.4
&,LTIMER_ARG) ORH1F305.16
C OSETCON.27
C Common blocks, following COX but adapted for UM and minus OSETCON.28
C those variables appearing in the argument list OSETCON.29
C OSETCON.30
C RH141293.47
IMPLICIT NONE RH141293.48
C RH141293.49
INTEGER I, ! Grid point index (Zonal) RH141293.50
& J, ! Grid point index (Meridional) RH141293.51
& K, ! Grid point index (Vertical) RH141293.52
& L, ! Ocean segment loop control RH141293.53
& IBK, ! Index counter.. topography map printing RH141293.54
& IEPT, ! Index counter " " " RH141293.55
& IEPU, ! Index counter " " " RH141293.56
& ISP, ! Index counter " " " RH141293.57
& JREV, ! Index counter (reverse order of J) RH141293.58
& LSEGP ! LSEG + 1 (vorticity indices) RH141293.59
& ,JJ,J1,J2 ! local loop counters ORL1F404.190
& ,SEG_COUNT ! local segment counter for filter ORL1F404.191
C RH141293.60
REAL RADIUS_SI, ! Radius of Earth (metres) RH141293.61
& FIMAX, ! Maximum latitude value RH141293.62
& FIMIN, ! Minimum latitute value RH141293.63
& FIAVE ! Average latitude RH141293.64
LOGICAL LTIMER_ARG ORH1F305.17
C RH141293.65
*CALL OARRYSIZ
ORH6F401.13
*CALL TYPSIZE
@DYALLOC.4192
*CALL COCNINDX
PXORDER.36
*CALL TYPOCALL
@DYALLOC.4193
*CALL UMSCALAR
OSETCON.33
*CALL CNTLOCN
ORH1F305.18
*CALL OTIMER
ORH1F305.20
*CALL PARVARS
ORH7F402.300
*CALL GCCOM
ORH7F402.302
C OSETCON.39
C Argument list OSETCON.40
C OSETCON.41
REAL OSETCON.42
& FKMP_GLOBAL(IMT,JMT_GLOBAL) ! IN no. of vert levels at T pts ORH6F402.31
&,FKMZ_GLOBAL(IMT,JMT_GLOBAL) ! No. of vert levels at ORH6F402.32
& ! interior T points ORH6F402.33
&,O_LEVDEPC(*) ! IN vertical grid spacing across U,V,T boxes OSETCON.44
&,O_ROWDEPC(*) ! IN meridional grid spacing across T boxes OSETCON.45
&,O_COLDEPC(*) ! IN zonal grid spacing across T boxes OSETCON.46
&,SWLDEG ! IN latitude in degrees of southern wall OSETCON.47
&,PHI_POLE ! IN LATITUDE IN DEGREES OF NEW NORTH POLE OSETCON.48
&,WEDGEDEG ! IN LONGITUDE IN DEGREES OF WESTERN EDGE OSETCON.49
ORH2F405.5
LOGICAL L_STASH_LAND(ICOL_CYC,JMT) ORH2F405.6
c @DYALLOC.4194
INTEGER @DYALLOC.4195
& ICODE ! OUT Error code @DYALLOC.4196
&,IMT_CLN_ARG ! IMT_CLN passed through arg list - avoids ORH1F305.21
&,JMT_CLN_ARG ! JMT_CLN dynamic allocation problems ORH1F305.22
&,IMT_BIO_ARG ! IMT_BIO with portable model. ORH1F305.23
C OSETCON.50
CHARACTER*(80) ONF0F304.8
& CMESSAGE ! OUT Error message @DYALLOC.4198
C @DYALLOC.4199
C Local parameters MB061293.6
REAL TOL_POLE ! used to check whether PHI_POLE is close to 90.0 MB061293.7
PARAMETER ( TOL_POLE = 0.0001 ) MB061293.8
C MB061293.9
C Locally defined arrays OSETCON.51
C OSETCON.52
REAL DYT_GLOBAL(JMT_GLOBAL) ! Full array of DYT - all PEs ORH3F402.443
&, CST_GLOBAL(JMT_GLOBAL) ! Full array of CST - all PEs. ORH3F402.444
*IF DEF,MPP ORH3F402.445
REAL HR_TMP(IMT) ! Temporary array for HR values ORH3F402.446
& ,DAYLEN_TMP(360) ! Temporary array for DAYLEN vals ORH3F402.447
ORH3F402.448
INTEGER PE_SEND ! Pe of sending proc (msg passing) ORH3F402.449
& , PE_RECV ! Pe of recving proc (msg passing) ORH3F402.450
& , INFO ORH3F402.451
& , IPROC ! Loop index ORH3F402.452
*ENDIF ORH3F402.453
ORH1F305.24
REAL SN260893.2
& FKMZ(IMT_CLN_ARG,JMT_CLN_ARG) ! no. of vert. levels at ORH1F305.25
! interior T points ORH1F305.26
ORH1F305.27
*IF DEF,MPP ORH9F402.1
INTEGER J_PE_IND(JMT_GLOBAL) ORH9F402.2
*ENDIF ORH9F402.3
REAL SN260893.4
& SUMDY ! summation of DYT SN260893.5
&,SUMDX ! SUMMATION OF DXT ORH1F305.28
&,FI ! REFERENCE LATITUDE @DYALLOC.4201
&,FI1 ! MIN REFERENCE LATITUDE @DYALLOC.4202
&,FI2 ! MAX REFERENCE LATITUDE @DYALLOC.4203
&,FIA ! LATITUDE OF FIRST ROW @DYALLOC.4204
&,FIB ! LATITUDE OF LAST ROW @DYALLOC.4205
&,FX,FXA,FXB,FXC ! Temporary scalars NT080993.38
&,PHI_1 ! } ORH3F402.454
&,PHI_JMT ! } Temporary scalars ORH3F402.455
&,PHIT_1 ! } ORH3F402.456
&,DYT_1 ! } ORH3F402.457
ORH3F402.458
REAL PHI_GLOBAL(JMT_GLOBAL), ORH3F402.459
& PHIT_GLOBAL(JMT_GLOBAL) ORH3F402.460
ORH3F402.461
INTEGER J_INDEX ORH3F402.462
INTEGER PE_BCAST ORH3F403.188
ORH1F305.29
REAL NT080993.40
& DECLIN(360) ! Declination angle (radians) for each day of the yea NT080993.41
&,CS_HOUR_ANG(IMT_BIO_ARG) ORH1F305.30
&,DLCOA,DLCOB,DLCOC,DLCOD ! Intermediates in calc. of light NT080993.43
&,DLCOBP,DLCOCP,DLCODP ! model layer constants NT080993.44
C NT080993.45
C Note that the 360 in the dimensioning of DECLIN refers to NT080993.46
C number of days in a climatological year - ie 360-day year is NT080993.47
C assumed as biological model would only be using for climate NT080993.48
C runs. NT080993.49
C NT080993.50
REAL med_vol ! hardwired volume flux into/out of Med OOM2F405.36
& ,hud_vol ! hardwired volume flux into/out Hudson Bay OOM2F405.37
OOM2F405.38
ORH1F305.31
INTEGER @DYALLOC.4207
& IS,IB,JCOUNT ! local loop counters @DYALLOC.4208
&,LD,LSGCM1 ! local loop counters RH141293.66
&,OPEN_STATUS @DYALLOC.4209
CHARACTER*80 FILENAME ! local for open statement @DYALLOC.4210
ORH1F305.32
CHARACTER*1 DOT,BLK,ABT(2000) ONF1F304.3
INTEGER KPR(IMT) OSETCON.65
DATA DOT/'.'/,BLK/' '/ OSETCON.66
C OSETCON.67
C OSETCON.68
C--------------------------------------------------------------------- OSETCON.69
C BEGIN EXECUTABLE CODE OSETCON.70
C--------------------------------------------------------------------- OSETCON.71
C OSETCON.72
C======================================================================= OSETCON.73
C BEGIN INTRODUCTORY SECTION WHICH IS NEEDED FOR EACH RUN ============ OSETCON.74
C (INCLUDING RESTARTS) ============ OSETCON.75
C======================================================================= OSETCON.76
C OSETCON.77
C OSETCON.79
L_OTIMER = LTIMER_ARG ORH1F305.33
ORH1F305.34
ORH1F305.36
IF (IMT .GT. 2000) THEN ONF1F304.4
WRITE(6,*)'Error:ABT array in Subroutine SET_CONSTANTS_OCEAN GIE0F403.454
& is too small' ONF1F304.6
CALL ABORT
ONF1F304.7
ENDIF ONF1F304.8
ORH6F404.9
LABS(1)=13 OSETCON.82
LABS(2)=14 OSETCON.83
LABS(3)=15 OSETCON.84
PI=3.1415927 OSETCON.85
OMEGA=3.1415927/43082. OSETCON.86
RADIUS_SI=6370.E3 ! radius of earth m OSETCON.87
RADIUS=RADIUS_SI*100. ! radius of earth cm OSETCON.88
RADIAN=57.29578 OSETCON.89
GRAV_SI=9.806 ! MS-2 OSETCON.90
GRAV=GRAV_SI*100. ! CMS-2 OSETCON.91
RHO_WATER_SI=1026. ! KgM-3 OSETCON.92
SPECIFIC_HEAT_SI=3988. ! JKg-1K-1 OSETCON.93
ORH1F305.37
! The following are required when L_SEAICE = true ORH1F305.38
TFREEZE=-1.8 ! Freezing point of seawater in Celsius OSETCON.95
QFUSION=3.3352E+5 ! latent heat of fusion of ice Jkg-1 OCC0F400.23
RHOICE=900.0 ! Density of ice, in kg/m**3. OSETCON.104
RHOSNOW=300.0 ! Density of snow, in kg/m**3. OSETCON.105
RHOWATER=1000.0 ! Density of water, in kg/m**3. OCC0F400.24
ORH1F305.39
! The following are required when L_OPSEUDIC = true ORH1F305.40
TFREEZ=-1.8 !Freezing point of seawater OSETCON.108
TCHECK=TFREEZ + 1.E-5 !Value for .LE. test OSETCON.109
ORH1F305.41
ORH1F305.42
! The following are required when L_ORICHARD = true ORH1F305.43
GNUMINC_SI=1.E-3 !Min. vert. viscosity between top 2 levels OSETCON.112
GNUMINT_SI=1.E-3 !Min. vert. diffusivity " " " " OSETCON.113
ORH6F404.10
DO J = 1 , JMT ORH6F404.11
DO I = 1, IMT ORH6F404.12
FKMP(I,J) = 0.0 ORH6F404.13
ENDDO ORH6F404.14
ENDDO ORH6F404.15
*IF DEF,MPP ORH9F402.4
! Populate the portion of the PE index array which applies to ORH9F402.5
! the rows handled by this PE. ORH9F402.6
DO J = JST, JFIN ORH9F402.7
J_PE_IND(J)=O_MYPE ORH9F402.8
ENDDO ORH9F402.9
ORH9F402.10
ORH9F402.11
ORH9F402.12
CALL O_SMARTPASS
(J_PE_IND(JST),J_PE_IND(1),1.0,1.0 ORH9F402.13
& ,JFIN-JST+1,JMT_GLOBAL,JST,1) ORH9F402.14
ORH9F402.15
! Now set up J_PE_xxx values for use later in the model. ORH9F402.16
J_PE_JSTM1=-1 ORH9F402.17
J_PE_JSTM2=-1 ORH9F402.18
J_PE_JFINP1=-1 ORH9F402.19
J_PE_JFINP2=-1 ORH9F402.20
ORH9F402.21
IF (JST.GT.1) J_PE_JSTM1=J_PE_IND(JST-1) ORH9F402.22
IF (JST.GT.2) J_PE_JSTM2=J_PE_IND(JST-2) ORH9F402.23
IF (JFIN.LT.JMT_GLOBAL) J_PE_JFINP1=J_PE_IND(JFIN+1) ORH9F402.24
IF (JFIN.LT.JMT_GLOBAL-1) J_PE_JFINP2=J_PE_IND(JFIN+2) ORH9F402.25
ORH9F402.26
*ENDIF ORH9F402.27
IF ((L_OMEDOUT).AND.(.NOT.L_OMEDADV)) THEN OOM2F405.39
C OJG1F404.8
C Set i and j indices, number of levels and fraction mixed for points OJG1F404.9
C involved in the Med outflow calculation. OJG1F404.10
C **NB** tendfrc is very different for the 288x144 and 96x73 oceans. OJG1F404.11
C This is a difference of parametrisation rather than resolution. In OJG1F404.12
C HADCM2, mixing is complete; in HADCM3, it is limited. OJG1F404.13
C OJG1F404.14
if (jmt_global.eq.144.and.imt.eq.290) then OJG1F404.15
C These points refer to the HADCM3 1.25 degree ocean configuration OJG1F404.16
imout(1) = 282 OJG1F404.17
imout(2) = 282 OJG1F404.18
imout(3) = 288 OJG1F404.19
imout(4) = 288 OJG1F404.20
jmout(1) = 100 OJG1F404.21
jmout(2) = 101 OJG1F404.22
jmout(3) = 102 OJG1F404.23
jmout(4) = 103 OJG1F404.24
NMEDLEV = 13 OJG1F404.25
tendfrc =9.6e-5 OJG1F404.26
elseif (jmt_global.eq.73.and.imt.eq.98) then OJG1F404.27
C These points refer to the 3.75 x 2.5 configuration e.g. HADCM2 OJG1F404.28
imout(1)=95 OJG1F404.29
imout(2)=3 OJG1F404.30
imout(3)=0 OJG1F404.31
imout(4)=0 OJG1F404.32
jmout(1)=51 OJG1F404.33
jmout(2)=52 OJG1F404.34
jmout(3)=0 OJG1F404.35
jmout(4)=0 OJG1F404.36
nmedlev=13 OJG1F404.37
tendfrc=1.0 OJG1F404.38
else OJG1F404.39
write(*,'(a/a)') OJG1F404.40
& 'OSETCON: Mediterranean outflow requested '// OJG1F404.41
& 'for an unsupported grid' OJG1F404.42
call abort
OJG1F404.43
endif OJG1F404.44
C Initialise values of variable to avoid passing unset values around OJG1F404.45
do i=1,4 OJG1F404.46
J_PE_IND_MED(i)=1 OJG1F404.47
enddo OJG1F404.48
*IF DEF,MPP OJG1F404.49
C Set PE number for each processor involved in Med outflow OJG1F404.50
do i=1,4 OJG1F404.51
if (jmout(i).ne.0) J_PE_IND_MED(i)=J_PE_IND(jmout(i)) OJG1F404.52
enddo OJG1F404.53
*ENDIF OJG1F404.54
ENDIF ! L_OMEDOUT = true OJG1F404.55
IF (L_OMEDADV) THEN OOM2F405.40
C This is an alternative Mediterranean outflow param, which OOM2F405.41
C is advective rather than diffusive. It seems to give a better OOM2F405.42
C representation of the salinity tongue, and uses different points from OOM2F405.43
C the above scheme OOM2F405.44
if (jmt_global.eq.144.and.imt.eq.290) then OOM2F405.45
C these are the points involved for standard 1.25 resolution models OOM2F405.46
imout(1)=281 OOM2F405.47
imout(2)=281 OOM2F405.48
imout(3)=288 OOM2F405.49
imout(4)=288 OOM2F405.50
jmout(1)=102 OOM2F405.51
jmout(2)=103 OOM2F405.52
jmout(3)=102 OOM2F405.53
jmout(4)=103 OOM2F405.54
nmedlev=12 OOM2F405.55
tendfrc=9.6e-5 OOM2F405.56
C med_vol is the hard-wired transport (in cm**3/s) of water being OOM2F405.57
C exchanged between the Atlantic and the Mediterranean OOM2F405.58
med_vol=0.3e12 OOM2F405.59
lev_med=12 ! outflow at level lev_med OOM2F405.60
med_topflow=7 ! inflow at levels 1 to med_topflow OOM2F405.61
c first is in Hudson, second in Atlantic OOM2F405.62
imout_hud(1)=233 OOM2F405.63
imout_hud(2)=233 OOM2F405.64
imout_hud(3)=234 OOM2F405.65
imout_hud(4)=234 OOM2F405.66
jmout_hud(1)=122 OOM2F405.67
jmout_hud(2)=123 OOM2F405.68
jmout_hud(3)=120 OOM2F405.69
jmout_hud(4)=121 OOM2F405.70
C hud_vol is the hard-wired transport (in cm**3/s) of water being OOM2F405.71
C exchanged between the Atlantic and the Hudson Bay OOM2F405.72
hud_vol=0.4e12 OOM2F405.73
lev_hud=8 ! inflow at level lev_hud for Hudson Bay OOM2F405.74
OOM2F405.75
elseif (jmt_global.eq.73.and.imt.eq.98) then OOM2F405.76
C these are the points for standard 2.5x3.75 models OOM2F405.77
imout(1)=94 OOM2F405.78
imout(2)=94 OOM2F405.79
imout(3)=2 OOM2F405.80
imout(4)=2 OOM2F405.81
jmout(1)=52 OOM2F405.82
jmout(2)=53 OOM2F405.83
jmout(3)=53 OOM2F405.84
jmout(4)=54 OOM2F405.85
nmedlev=11 OOM2F405.86
tendfrc=1.0 OOM2F405.87
med_vol=0.3e12 OOM2F405.88
lev_med=11 ! outflow at level lev_med OOM2F405.89
med_topflow=7 ! inflow at levels 1 to med_topflow OOM2F405.90
c first is in Hudson, second in Atlantic OOM2F405.91
imout_hud(1)=76 ! 8 levels OOM2F405.92
imout_hud(2)=76 ! 5 levels OOM2F405.93
imout_hud(3)=80 ! 8 levels OOM2F405.94
imout_hud(4)=80 ! 5 levels OOM2F405.95
jmout_hud(1)=60 OOM2F405.96
jmout_hud(2)=61 OOM2F405.97
jmout_hud(3)=62 OOM2F405.98
jmout_hud(4)=63 OOM2F405.99
hud_vol=0.4e12 OOM2F405.100
lev_hud=5 ! inflow at level lev_hud for Hudson Bay OOM2F405.101
else OOM2F405.102
write(*,'(a/a)') OOM2F405.103
& 'OSETCON: Mediterranean outflow requested '// OOM2F405.104
& 'for an unsupported grid' OOM2F405.105
call abort
OOM2F405.106
endif OOM2F405.107
C Initialise values of variable to avoid passing unset values around OOM2F405.108
do i=1,4 OOM2F405.109
J_PE_IND_MED(i)=1 OOM2F405.110
J_PE_IND_HUD(i)=1 OOM2F405.111
enddo OOM2F405.112
*IF DEF,MPP OOM2F405.113
C Set PE number for each processor involved in Med outflow OOM2F405.114
do i=1,4 OOM2F405.115
if (jmout(i).ne.0) J_PE_IND_MED(i)=J_PE_IND(jmout(i)) OOM2F405.116
if (jmout_hud(i).ne.0) OOM2F405.117
& J_PE_IND_HUD(i)=J_PE_IND(jmout_hud(i)) OOM2F405.118
enddo OOM2F405.119
*ENDIF OOM2F405.120
ENDIF ! L_OMEDADV = true OOM2F405.121
OOM2F405.122
C OSETCON.115
C--------------------------------------------------------------------- OSETCON.116
C SET Y DIMENSION OF BOXES IN DEGREES AND CONVERT TO CENTIMETERS OSETCON.117
C--------------------------------------------------------------------- OSETCON.118
C OSETCON.119
ORH3F402.463
DO J=2,JMTM1_GLOBAL ORH6F404.16
DYT_GLOBAL(J)=O_ROWDEPC(J)*RADIUS/RADIAN ORH3F402.465
IF (JST.LE.J.AND.JFIN.GE.J) THEN ORH3F402.466
! Set up local versions of DYT ORH3F402.467
DYT(J-J_OFFSET) = DYT_GLOBAL(J) ORH3F402.468
ENDIF ORH3F402.469
ENDDO ORH6F404.17
DYT_GLOBAL(1) = DYT_GLOBAL(2) ORH3F402.470
DYT_GLOBAL(JMT_GLOBAL) = DYT_GLOBAL(JMTM1_GLOBAL) ORH3F402.471
DYT_1 = DYT_GLOBAL(1) ORH3F402.472
ORH3F402.473
ORH3F402.474
IF (JST.EQ.1) THEN ORH3F402.475
DYT(J_1)=DYT_GLOBAL(1) ORH3F402.476
ENDIF ORH3F402.477
ORH3F402.478
IF (JFIN.EQ.JMT_GLOBAL) THEN ORH3F402.479
DYT(J_JMT)=DYT_GLOBAL(JMT_GLOBAL) ORH3F402.480
ENDIF ORH3F402.481
ORH3F402.482
*IF DEF,MPP ORH3F402.483
ORH3F402.484
! We need DYT at J-1 for all processes ORH3F402.485
CALL SWAPBOUNDS
(DYT,1,JMT,O_EW_Halo,O_NS_Halo,1) ORH3F402.486
ORH3F402.487
ORH3F402.494
*ENDIF ORH3F402.495
C OSETCON.125
C--------------------------------------------------------------------- OSETCON.126
C SET X DIMENSION OF BOXES IN DEGREES AND CONVERT TO CENTIMETERS OSETCON.127
C--------------------------------------------------------------------- OSETCON.128
C OSETCON.129
DO I=2,IMTM1 ORH6F404.18
DXT(I)=O_COLDEPC(I)*RADIUS/RADIAN OSETCON.131
ENDDO ORH6F404.19
DXT(1)=DXT(2) OSETCON.133
DXT(IMT)=DXT(IMTM1) OSETCON.134
ORH1F305.44
IF (L_OCYCLIC) THEN ORH1F305.45
C OSETCON.136
C SET CYCLIC CONDITIONS ON DXT OSETCON.137
C OSETCON.138
DXT(1)=DXT(IMTM1) ORH1F305.46
DXT(IMT)=DXT(2) ORH1F305.47
ENDIF ORH1F305.48
C OSETCON.142
C--------------------------------------------------------------------- OSETCON.143
C SET Z DIMENSION OF BOXES (IN CENTIMETERS) OSETCON.144
C--------------------------------------------------------------------- OSETCON.145
C OSETCON.146
DO K=1,KM OSETCON.147
DZ(K)=O_LEVDEPC(K)*100. OSETCON.148
END DO OSETCON.149
C OSETCON.150
C--------------------------------------------------------------------- OSETCON.151
C COMPUTE AUXILIARY ARRAYS BASED UPON THE SPACING SPECIFIED ABOVE OSETCON.152
C--------------------------------------------------------------------- OSETCON.153
C OSETCON.154
DO K=1,KM ORH6F404.20
C2DZ(K)=2.0*DZ(K) OSETCON.156
DZ2R(K)=1.0/C2DZ(K) OSETCON.157
ENDDO ORH6F404.21
DZZ(1)=0.5*DZ(1) OSETCON.159
ZDZ(1)=DZ(1) OSETCON.160
DO K=2,KM ORH6F404.22
DZZ(K)=0.5*(DZ(K-1)+DZ(K)) OSETCON.162
ZDZ(K)=ZDZ(K-1)+DZ(K) OSETCON.163
ENDDO ORH6F404.23
DZZ(KM+1)=0.5*DZ(KM) OSETCON.165
DZZ2R(KMP1)=0.5/DZZ(KMP1) OSETCON.166
ZDZZ(1)=DZZ(1) OSETCON.167
DO K=1,KM ORH6F404.24
DZZ2R(K)=.5/DZZ(K) OSETCON.169
ZDZZ(K+1)=ZDZZ(K)+DZZ(K+1) OSETCON.170
ORH1F305.49
IF (.NOT.L_ORICHARD) THEN ORH1F305.50
EEH(K)=FKPH/(DZ(K)*DZZ(K)) ORH1F305.51
FFH(K)=FKPH/(DZ(K)*DZZ(K+1)) ORH1F305.52
EEM(K)=FKPM/(DZ(K)*DZZ(K)) ORH1F305.53
FFM(K)=FKPM/(DZ(K)*DZZ(K+1)) ORH1F305.54
ENDIF ORH1F305.55
KAR(K)=K OSETCON.177
ENDDO ORH6F404.25
IF (L_OMEDADV) THEN OOM2F405.123
med_in=med_vol/(dyt(1)*zdz(med_topflow)) OOM2F405.124
med_out=-med_vol/(dyt(1)*(dz(lev_med))) OOM2F405.125
C _in is just the near-surface flow, which is not necessarily inflow OOM2F405.126
hud_in=hud_vol/(dyt(1)*zdz(lev_hud-1)) OOM2F405.127
hud_out=-hud_vol/(dyt(1)*dz(lev_hud)) OOM2F405.128
ENDIF OOM2F405.129
OOM2F405.130
C RW071293.4
C Set up depth-dependent background vertical diffusivity KAPPA_B_SI. RW071293.5
C Taken to be a linear increase with depth from KAPPA0_SI at the RW071293.6
C surface,increasing with depth at a rate DKAPPA_DZ_SI. Setting RW071293.7
C KAPPA0_SI=1.E-5 m2/s, DKAPPA_DZ_SI=2.8E-8 m/s gives a good fit to the RW071293.8
C theoretical/observational profile shown by Krauss (Climate-Ocean RW071293.9
C Interaction, ed. Schlesinger, 1990). Note that KAPPA_B_SI(K) is the RW071293.10
C diffusivity at the TOP of box K. RW071293.11
C RW071293.12
KAPPA_B_SI(1)=KAPPA0_SI RW071293.13
DO K=2,KM RW071293.14
KAPPA_B_SI(K)= KAPPA0_SI + (ZDZ(K-1)*.01)*DKAPPA_DZ_SI RW071293.15
END DO RW071293.16
ORH1F305.56
IF (L_OVARYT) THEN ORH1F305.57
C OSETCON.180
C Set up scaled box thicknesses, etc. when using 'variable OSETCON.181
C timestep with depth' option OSETCON.182
C OSETCON.183
DO K=1,KM ORH6F404.26
RZ(K)=DZ(K)/RAT(K) ORH6F404.27
C2RZ(K)=2.0*RZ(K) ORH6F404.28
ENDDO ORH6F404.29
ORH6F404.30
RZZ(1)=0.5*RZ(1) ORH6F404.31
DO K=2,KM ORH6F404.32
RZZ(K)=0.5*(RZ(K-1)+RZ(K)) ORH6F404.33
ENDDO ORH6F404.34
ORH6F404.35
RZZ(KM+1)=0.5*RZ(KM) ORH6F404.36
RZZ2R(KMP1)=0.5/RZZ(KMP1) ORH6F404.37
DO K=1,KM ORH6F404.38
RZZ2R(K)=0.5/RZZ(K) ORH6F404.39
ENDDO ORH6F404.40
C OSETCON.197
ENDIF ORH1F305.58
ORH3F402.496
PHI_1=SWLDEG/RADIAN ORH3F402.497
PHIT_1=PHI_1-.5*DYT_1/RADIUS ORH3F402.498
ORH3F402.499
SUMDY=PHI_1 ORH3F402.500
IF (JST.EQ.1) THEN ORH3F402.501
PHI(J_1) = PHI_1 ORH3F402.503
PHIT(J_1) = PHIT_1 ORH3F402.504
ENDIF ORH3F402.505
*IF DEF,MPP ORH3F402.506
ORH3F402.507
IF (JFIN.EQ.JMT_GLOBAL) DYU(J_JMT)=DYT(J_JMT) ORH3F402.508
*ELSE ORH3F402.509
DYU(JMT)=DYT(JMT) OSETCON.202
*ENDIF ORH3F402.510
ORH3F402.511
DO J=J_1,J_JMT ORH6F404.41
IF(J+J_OFFSET.NE.JMT_GLOBAL) DYU(J)=.5*(DYT(J)+DYT(J+1)) ORH6F404.42
DYTR(J)=1./DYT(J) ORH6F404.43
DYT2R(J)=.5/DYT(J) ORH6F404.44
DYT4R(J)=.25/DYT(J) ORH6F404.45
DYUR(J)=1./DYU(J) ORH6F404.46
DYU2R(J)=.5/DYU(J) ORH6F404.47
DYU4R(J)=.25/DYU(J) ORH6F404.48
ENDDO ORH6F404.49
ORH3F402.514
! We have a full copy of DYT_GLOBAL, so we can set about ORH3F402.515
! calculating SUMDY and PHI. This is a completely ORH3F402.516
! un parallel calculation which HAS to be duplicated ORH3F402.517
! on all processes! Be careful when analysing the ORH3F402.518
! indexing of this loop.. remember the loop control ORH3F402.519
! is the global JMT value! ORH3F402.520
PHIT_GLOBAL(1) = PHIT_1 ORH3F402.521
PHI_GLOBAL(1) = PHI_1 ORH3F402.522
ORH3F402.523
DO J = 1, JMT_GLOBAL ORH3F402.524
ORH3F402.525
J_INDEX = J - J_OFFSET ORH3F402.526
ORH3F402.527
! Calculate the progressive global sum ORH3F402.530
IF(J.NE.JMT_GLOBAL) SUMDY = SUMDY + DYT_GLOBAL(J+1)/RADIUS ORH3F402.531
ORH6F404.50
! If this row refers to a row which this processor ORH3F402.535
! has responsibility for, then save the value of ORH3F402.536
! PHI and perform all the subsequent calculations ORH3F402.537
! dependent upon PHI ORH3F402.538
ORH3F402.539
IF(J.NE.JMT_GLOBAL) PHI_GLOBAL(J+1) = SUMDY ORH3F402.540
IF(J.NE.1) PHIT_GLOBAL(J)= ORH3F402.541
& .5*(PHI_GLOBAL(J-1)+PHI_GLOBAL(J)) ORH3F402.542
ORH3F402.543
IF (J.GE.JST-1.AND.J.LE.JFIN) THEN ORH3F402.544
! In this instance, the outer J loop works over ORH3F402.545
! the full global range, so when we store data ORH3F402.546
! we must index locally by subtracting J_OFFSET. ORH3F402.547
IF(J.NE.JMT_GLOBAL) PHI(J_INDEX+1) = SUMDY ORH3F402.548
IF(J.NE.1) PHIT(J_INDEX)=PHIT_GLOBAL(J) ORH3F402.549
ORH3F402.550
CST(J_INDEX)=COS(PHIT_GLOBAL(J)) ORH3F402.551
CS (J_INDEX)=COS(PHI_GLOBAL (J)) ORH3F402.552
SINE(J_INDEX)=SIN(PHI_GLOBAL(J)) ORH3F402.553
CSTR(J_INDEX)=1.0/CST(J_INDEX) ORH3F402.554
CSR(J_INDEX)=1.0/CS(J_INDEX) ORH3F402.555
TNG(J_INDEX)=SINE(J_INDEX)/CS(J_INDEX) ORH3F402.556
ENDIF ORH3F402.557
ENDDO ORH3F402.558
IF (L_OFILTER) THEN ORH0F404.42
! Only bother with CSR_JFU0 and CSTR_JFT0 for filtering ORH0F404.43
*IF DEF,MPP ORH3F402.559
! All processes need to know about CSR(JFU0) for filtering, ORH3F402.560
! so pass this from the appropriate process to everyone else. ORH3F402.561
IF (JFU0.GE.JST.AND.JFU0.LE.JFIN) THEN ORH3F403.189
CSR_JFU0 = CSR(JFU0-J_OFFSET) ORH3F403.190
ENDIF ORH3F403.191
PE_BCAST = J_PE_IND(JFU0) ORH3F403.192
CALL GC_RBCAST (
1,1,PE_BCAST,nproc,info,CSR_JFU0) ORH3F403.193
ORH3F403.194
IF (JFT0.GE.JST.AND.JFT0.LE.JFIN) THEN ORH3F403.195
CSTR_JFT0 = CSTR(JFT0-J_OFFSET) ORH3F403.196
ENDIF ORH3F403.197
PE_BCAST = J_PE_IND(JFT0) ORH3F403.198
CALL GC_RBCAST (
2,1,PE_BCAST,nproc,info,CSTR_JFT0) ORH3F403.199
*ELSE ORH3F402.575
CSR_JFU0 = CSR(JFU0) ORH3F402.576
CSTR_JFT0 = CSTR(JFT0) ORH3F402.577
*ENDIF ORH3F402.578
ENDIF ORH0F404.44
DXU(IMT)=DXT(IMT) OSETCON.221
IF (L_OCYCLIC) THEN ORH1F305.59
DXU(IMT)=.5*(DXT(2)+DXT(3)) ORH1F305.60
ENDIF ORH1F305.61
DO I=1,IMT ORH6F404.51
IF(I.NE.IMT) DXU(I)=.5*(DXT(I)+DXT(I+1)) OSETCON.226
DXTR(I)=1./DXT(I) OSETCON.227
DXT2R(I)=.5/DXT(I) OSETCON.228
DXT4R(I)=.25/DXT(I) OSETCON.229
DXUR(I)=1./DXU(I) OSETCON.230
DXU2R(I)=.5/DXU(I) OSETCON.231
DXU4R(I)=.25/DXU(I) OSETCON.232
ENDDO ORH6F404.52
ORH1F305.62
IF (L_OROTATE.OR.L_OCNASSM.OR.L_ICEFREEDR) THEN ODC1F405.384
ORH1F305.64
RLAMBDA(1)=WEDGEDEG/RADIAN ORH6F404.53
SUMDX=RLAMBDA(1) ORH6F404.54
DO I=2,IMT ORH6F404.55
SUMDX=SUMDX+DXT(I)/RADIUS ORH6F404.56
RLAMBDA(I)=SUMDX ORH6F404.57
ENDDO ORH6F404.58
ORH3F402.580
DO I=1,IMT ORH6F404.59
COSINE(I)=COS(RLAMBDA(I)) ORH6F404.60
ENDDO ORH6F404.61
IF ( ABS (PHI_POLE-90.0) .LT. TOL_POLE ) THEN ORH6F404.62
DO J=J_1,J_JMT ORH6F404.63
DO I=1,IMT ORH6F404.64
CORIOLIS(I,J)=2.0*OMEGA*SINE(J) ORH6F404.65
ENDDO ORH6F404.66
ENDDO ORH6F404.67
ELSE ORH6F404.68
ORH6F404.69
DO J=J_1,J_JMT ORH6F404.70
DO I=1,IMT ORH6F404.71
CORIOLIS(I,J)=2.0*OMEGA*(COS(PI*PHI_POLE/180.0)* ORH6F404.72
& COSINE(I)*CS(J)+SIN(PI*PHI_POLE/180.0)*SINE(J)) ORH6F404.73
ENDDO ORH6F404.74
ENDDO ORH6F404.75
ENDIF ! condition on PHI_POLE ORH6F404.76
ELSE ORL1F404.192
DO J=J_1,J_JMT ORL1F404.193
DO I=1,IMT ORL1F404.194
CORIOLIS(I,J)=2.0*OMEGA*SINE(J) ORL1F404.195
ENDDO ORL1F404.196
ENDDO ORL1F404.197
ENDIF ORH1F305.65
ORH1F305.66
! IMT_ROT is assigned here rather than in DERVSIZE ORH1F305.67
! because L_OROTATE cannot be assigned until the FLH ORH1F305.68
! has been read from the dump. ORH1F305.69
IF (L_OROTATE) THEN ORH1F305.70
IMT_ROT = IMT ORH1F305.71
ELSE ORH1F305.72
IMT_ROT = 1 ORH1F305.73
ENDIF ORH1F305.74
ORH1F305.75
IF (L_OFILTER) THEN ORH1F305.76
C--------------------------------------------------------------------- OSETCON.252
C COMPUTE SIN AND COS VALUES FOR VECTOR CORRECTION BEFORE FILTER OSETCON.253
C--------------------------------------------------------------------- OSETCON.254
C OSETCON.255
FX=1.0E-10 ORH6F404.77
FXA=DXT(1)/RADIUS ORH6F404.78
DO I=2,IMUM1 ORH6F404.79
FXB=FXA*FLOAT(I-2) ORH6F404.80
SPSIN(I)=SIN(FXB) ORH6F404.81
SPCOS(I)=COS(FXB) ORH6F404.82
IF(ABS(SPSIN(I)).LT.FX)SPSIN(I)=0.0 ORH6F404.83
IF(ABS(SPCOS(I)).LT.FX)SPCOS(I)=0.0 ORH6F404.84
ENDDO ORH6F404.85
SPSIN(1)=0.0 ORH6F404.86
SPCOS(1)=0.0 ORH6F404.87
SPSIN(IMU)=0.0 ORH6F404.88
SPCOS(IMU)=0.0 ORH6F404.89
ENDIF ORH1F305.77
C OSETCON.270
C---------------------------------------------------------- OSETCON.271
C-- SET UP POLYNOMIAL COEFICIENTS FOR THE EQUATION OF STATE OSETCON.272
C---------------------------------------------------------- OSETCON.273
C CALCULATE AVERAGE LATITUDE OSETCON.274
IF (.NOT.L_OROTATE) THEN ORH1F305.78
*IF DEF,MPP ORH3F402.582
! The processes with PHI(1) and PHI(JMT) must send them ORH6F404.90
! to all other processes. ORH3F402.584
IF (JST.EQ.1) THEN ORH3F403.200
PHI_1 = PHI(J_1) ORH3F403.201
ENDIF ORH3F403.202
PE_BCAST = J_PE_IND(1) ORH3F403.203
CALL GC_RBCAST (
1,1,PE_BCAST,nproc,info,PHI_1) ORH3F403.204
ORH3F403.205
IF (JFIN.EQ.JMT_GLOBAL) THEN ORH3F403.206
PHI_JMT = PHI(J_JMT) ORH3F403.207
ENDIF ORH3F403.208
PE_BCAST = J_PE_IND(JMT_GLOBAL) ORH3F403.209
CALL GC_RBCAST (
1,1,PE_BCAST,nproc,info,PHI_JMT) ORH3F403.210
ORH3F403.211
ORH3F403.212
*ELSE ORH3F402.598
PHI_1 = PHI(1) ORH6F404.91
PHI_JMT = PHI(JMT) ORH6F404.92
*ENDIF ORH3F402.601
ORH3F402.602
FIA = PHI_1*RADIAN ORH6F404.93
FIB = PHI_JMT*RADIAN ORH6F404.94
FI1=MIN(FIA,FIB) ORH6F404.95
FI2=MAX(FIA,FIB) ORH6F404.96
ORH1F305.79
ELSE ORH1F305.80
ORH1F305.81
FI1=90.0 ORH6F404.97
FI2=-90.0 ORH6F404.98
DO J=J_1,J_JMT ORH6F404.99
DO I=1,IMT ORH6F404.100
FI=ASIN(COS(PI*PHI_POLE/180.0)*COSINE(I)*CS(J) ORH6F404.101
& +SIN(PI*PHI_POLE/180.0)*SINE(J)) ORH6F404.102
FI=FI*RADIAN ORH6F404.103
FI1=MIN(FI1,FI) ORH6F404.104
FI2=MAX(FI2,FI) ORH6F404.105
ENDDO ORH6F404.106
ENDDO ORH6F404.107
*IF DEF,MPP ORH0F405.29
! Ensure global values of FI1 and FI2 are used. ORH0F405.30
CALL GC_RMAX (
1,O_NPROC,INFO,FI1) ORH0F405.31
CALL GC_RMAX (
1,O_NPROC,INFO,FI2) ORH0F405.32
*ENDIF ORH0F405.33
OSETCON.294
ENDIF ORH1F305.82
ORH1F305.83
FIMIN=MIN(ABS(FI1),ABS(FI2)) OSETCON.295
FIMAX=MAX(ABS(FI1),ABS(FI2)) OSETCON.296
OSETCON.297
IF (FI1.LT.0.0.AND.FI2.GT.0.0 OSETCON.298
& .OR.FI1.GT.0.0.AND.FI2.LT.0.0) FIMIN=0.0 OSETCON.299
OSETCON.300
FIAVE=0.5*(FIMIN+FIMAX) OSETCON.301
OSETCON.302
CALL DENSCOEF
( @DYALLOC.4213
*CALL ARGSIZE
SF011193.47
* ZDZZ,FIAVE) ! ################################# @DYALLOC.4214
OSETCON.304
CALL STINIT
(KM,ICODE,CMESSAGE) @DYALLOC.4215
OSETCON.306
IF (L_OPRINT) THEN ORH2F401.4
C--------------------------------------------------------------------- OSETCON.307
C PRINT GRID GEOMETRY ARRAYS OSETCON.308
C--------------------------------------------------------------------- OSETCON.309
C OSETCON.310
WRITE(6,9701) ORH4F404.29
9701 FORMAT(50H0 GRID BOX THICKNESS 'DZ' ) ORH4F404.30
WRITE(6,970) DZ ORH4F404.31
WRITE(6,9702) ORH4F404.32
9702 FORMAT(50H0 GRID POINT SEPARATION 'DZZ' ) ORH4F404.33
WRITE(6,970) DZZ ORH4F404.34
WRITE(6,9703) ORH4F404.35
9703 FORMAT(50H0 DEPTH OF BOX BOTTOM 'ZDZ' ) ORH4F404.36
WRITE(6,970) ZDZ ORH4F404.37
WRITE(6,9704) ORH4F404.38
9704 FORMAT(50H0 DEPTH OF GRID POINT 'ZDZZ' ) ORH4F404.39
WRITE(6,970) ZDZZ ORH4F404.40
WRITE(6,9705) ORH4F404.41
9705 FORMAT(50H0 LATITUDE OF T,S POINTS (RADIANS) 'PHIT' ) ORH4F404.42
WRITE(6,970) PHIT ORH4F404.43
WRITE(6,9706) ORH4F404.44
9706 FORMAT(50H0 LATITUDE OF U,V POINTS (RADIANS) 'PHI' ) ORH4F404.45
WRITE(6,970) PHI ORH4F404.46
WRITE(6,9707) ORH4F404.47
9707 FORMAT(50H0 COSINE OF T,S LATITUDE 'CST' ) ORH4F404.48
WRITE(6,970) CST ORH4F404.49
WRITE(6,9708) ORH4F404.50
9708 FORMAT(50H0 COSINE OF U,V LATITUDE 'CS' ) ORH4F404.51
WRITE(6,970) CS ORH4F404.52
WRITE(6,9709) ORH4F404.53
9709 FORMAT(50H0 SINE OF U,V LATITUDE 'SINE' ) ORH4F404.54
WRITE(6,970) SINE ORH4F404.55
970 FORMAT(1X,10E13.5) ORH4F404.56
ENDIF ORH2F401.33
C OSETCON.339
C--------------------------------------------------------------------- OSETCON.340
C SET MAXIMUM LEVEL INDICATORS FOR TOPOGRAPHY OSETCON.341
C--------------------------------------------------------------------- OSETCON.342
DO J = 1,JMT_GLOBAL ORH3F402.606
DO I = 1, IMT ORH3F402.607
FKMQ_GLOBAL(I,J)=0 ORH3F402.608
IF (.NOT.L_ONOCLIN) THEN ORH3F402.609
FKMZ_GLOBAL(I,J)=0 ORH3F402.610
ENDIF ORH3F402.611
ENDDO ORH3F402.612
ENDDO ORH3F402.613
C OSETCON.343
DO J=J_1,J_JMT ORH6F404.108
DO I=1,IMT ORH6F404.109
FKMQ(I,J)=0 ORH6F404.110
IF ((.NOT.L_ONOCLIN).AND.(.NOT.L_OFREESFC)) THEN ORH6F404.111
FKMZ(I,J)=0 ORH6F404.112
ENDIF ORH6F404.113
ENDDO ORH6F404.114
ENDDO ORH6F404.115
C OSETCON.351
C 1ST, NUMBER OF VERTICAL LEVELS FOR T POINTS OSETCON.352
IF (L_OCYCLIC) THEN ORH1F305.87
C SET CYCLIC BOUNDARY CONDITIONS OSETCON.354
DO J = 1, JMT_GLOBAL ORH6F404.116
FKMP_GLOBAL( 1,J)=FKMP_GLOBAL(IMTM1,J) ORH6F404.117
FKMP_GLOBAL(IMT,J)=FKMP_GLOBAL( 2,J) ORH6F404.118
ENDDO ORH6F404.119
ORH6F402.38
ENDIF ORH1F305.88
ORH6F404.120
! Assign local values of FKMP ORH6F402.39
DO J = J_1, J_JMT ORH6F402.40
DO I = 1, IMT ORH6F402.41
FKMP(I,J) = FKMP_GLOBAL(I,J+J_OFFSET) ORH6F402.42
ENDDO ORH6F402.43
ENDDO ORH6F402.44
C OSETCON.361
*IF DEF,MPP ORH3F402.615
CALL SWAPBOUNDS
(FKMP,IMT,JMT,O_EW_HALO,O_NS_HALO,1) ORH3F402.616
*ENDIF ORH3F402.617
ORH6F404.121
! Set up logical land sea mask for STASH. ORH2F405.7
DO J = 1, JMT ORH2F405.8
DO I = 1, ICOL_CYC ORH2F405.9
L_STASH_LAND(I,J)=.FALSE. ORH2F405.10
IF (FKMP(I,J).EQ.0.0) L_STASH_LAND(I,J) = .TRUE. ORH2F405.11
ENDDO ORH2F405.12
ENDDO ORH2F405.13
C 2ND, COMPUTE NUMBER OF VERTICAL LEVELS AT EACH U,V POINT OSETCON.362
DO J=1,JMTM1_GLOBAL ORH3F402.618
DO I=1,IMTM1 ORH3F402.619
FKMQ_GLOBAL(I,J)=MIN(FKMP_GLOBAL(I,J), ORH3F402.620
& FKMP_GLOBAL(I+1,J),FKMP_GLOBAL(I,J+1), ORH3F402.621
& FKMP_GLOBAL(I+1,J+1)) ORH3F402.622
ENDDO ORH3F402.623
ENDDO ORH3F402.624
C OSETCON.363
IF (L_OCYCLIC) THEN ORH1F305.90
C OSETCON.369
C SET CYCLIC CONDITIONS OSETCON.370
DO J=1,JMT_GLOBAL ORH6F404.122
FKMQ_GLOBAL(IMT,J)=FKMQ_GLOBAL(2,J) ORH6F404.123
ENDDO ORH6F404.124
ENDIF ORH6F404.125
ORH6F404.126
! Assign local values of FKMQ ORH6F404.127
DO J = J_1, J_JMT ORH6F404.128
DO I = 1, IMT ORH6F404.129
FKMQ(I,J) = FKMQ_GLOBAL(I,J+J_OFFSET) ORH6F404.130
ENDDO ORH6F404.131
ENDDO ORH3F402.628
ORH6F404.132
*IF DEF,MPP ORH3F402.630
CALL SWAPBOUNDS
(FKMQ,IMT,JMT,O_EW_HALO,O_NS_HALO,1) ORH3F402.631
*ENDIF ORH3F402.632
ORH6F404.133
IF ((.NOT.L_ONOCLIN).AND.(.NOT.L_OFREESFC)) THEN ORL1F404.248
C 3RD, COMPUTE AN ARRAY TO INDICATE "INTERIOR" GRID BOXES OSETCON.378
DO J=2,JMTM1_GLOBAL ORH6F404.134
DO I=2,IMU ORH6F404.135
FKMZ_GLOBAL(I,J)=MIN(FKMQ_GLOBAL(I-1,J-1), ORH6F404.136
& FKMQ_GLOBAL(I,J-1), ORH3F402.636
& FKMQ_GLOBAL(I-1,J),FKMQ_GLOBAL(I,J)) ORH3F402.637
ENDDO ORH6F404.137
ENDDO ORH3F402.638
ORH1F305.93
IF (L_OCYCLIC) THEN ORH6F404.138
C OSETCON.386
C SET CYCLIC CONDITIONS OSETCON.387
DO J= 1,JMT_GLOBAL ORH6F404.139
FKMZ_GLOBAL(1,J)=FKMZ_GLOBAL(IMTM1,J) ORH6F404.140
ENDDO ORH6F404.141
ENDIF ORH6F404.142
ORH6F404.143
DO J=J_1,J_JMT ORH6F404.144
DO I=1,IMU ORH6F404.145
FKMZ(I,J)=FKMZ_GLOBAL(I,J+J_OFFSET) ORH6F404.146
ENDDO ORH6F404.147
ENDDO ORH6F404.148
ORH6F404.149
*IF DEF,MPP ORH3F402.645
CALL SWAPBOUNDS
(FKMZ,IMT,JMT,O_EW_HALO,O_NS_HALO,1) ORH6F404.150
*ENDIF ORH3F402.647
ORH1F305.96
C OSETCON.394
C--------------------------------------------------------------------- OSETCON.395
C COMPUTE START & END INDICES FOR STREAM FUNCTION CALCULATIONS OSETCON.396
C--------------------------------------------------------------------- OSETCON.397
C OSETCON.398
LSEGP=LSEG+1 ORH6F404.151
DO J=J_3,JSCAN ORH6F404.152
ORH3F402.649
ORH3F402.650
L=1 ORH6F404.153
DO I=2,IMUM1 ORH6F404.154
IF(FKMZ(I-1,J).EQ.0. .AND. FKMZ(I,J).NE.0.) ISZ(J,L)=I ORH6F404.155
IF(I.EQ.2 .AND. FKMZ(IMT,J).NE.0.) ISZ(J,L)=2 ORH6F404.156
IF(FKMZ(I,J).NE.0. .AND. FKMZ(I+1,J).EQ.0.) IEZ(J,L)=I ORH6F404.157
IF(I.EQ.IMUM1 .AND. FKMZ(I+1,J).NE.0.) IEZ(J,L)=I ORH6F404.158
IF(FKMZ(I,J).NE.0. .AND. FKMZ(I+1,J).EQ.0.) L=L+1 ORH6F404.159
IF(L.GT.LSEGP) THEN ORH6F404.160
WRITE(6,*) "SET_CONSTANTS_OCEAN : strmfn index calc" ORH6F404.161
WRITE(6,*) "L =",L," is greater than LSEGP = ",LSEGP ORH6F404.162
ICODE = 102 ORH6F404.163
CMESSAGE = "OSETCON: Error in streamfunction indices" ORH6F404.164
GOTO 9999 ORH6F404.165
ENDIF ORH6F404.166
ENDDO ! Over I ORH6F404.167
ENDDO ! Over J ORH6F404.168
ENDIF !(.NOT.L_ONOCLIN).AND.(.NOT.L_OFREESFC) ORL1F404.249
ORL1F404.250
IF ((.NOT.L_ONOCLIN).AND.(L_OFREESFC)) THEN ORL1F404.251
ORL1F404.252
C----------------------------------------------------------------------- ORL1F404.253
C CALCULATE DO LOOP INDICES FOR ETA AND EXTERNAL MODE. ORL1F404.254
C----------------------------------------------------------------------- ORL1F404.255
C ORL1F404.256
ORL1F404.257
DO J=J_2,J_JMTM1 ORL1F404.258
ORL1F404.259
L=0 ORL1F404.260
IF ( FKMP(1,J).GT.0 .AND. FKMP(2,J).GT.0 ) THEN ORL1F404.261
L=L+1 ORL1F404.262
ISE(J,L)=2 ORL1F404.263
ENDIF ORL1F404.264
ORL1F404.265
DO I=2,IMTM1 ORL1F404.266
ORL1F404.267
IF ( FKMP(I-1,J).EQ.0 .AND. FKMP(I,J).GT.0 ) THEN ORL1F404.268
L=L+1 ORL1F404.269
ISE(J,L)=I ORL1F404.270
ENDIF ORL1F404.271
IF ( FKMP(I,J).GT.0 .AND. FKMP(I+1,J).EQ.0 ) IEE(J,L)=I ORL1F404.272
ORL1F404.273
ENDDO ! OVER I ORL1F404.274
ORL1F404.275
IF ( FKMP(IMTM1,J).GT.0 .AND. FKMP(IMT,J).GT.0 ) IEE(J,L)=IMTM1 ORL1F404.276
LSE(J)=L ORL1F404.277
ORL1F404.278
ENDDO ! OVER J ORL1F404.279
C ORL1F404.280
DO J=J_2,J_JMTM1 ORL1F404.281
ORL1F404.282
L=0 ORL1F404.283
IF ( FKMQ(1,J).GT.0 .AND. FKMQ(2,J).GT.0 ) THEN ORL1F404.284
L=L+1 ORL1F404.285
ISU(J,L)=2 ORL1F404.286
ENDIF ORL1F404.287
ORL1F404.288
DO I=2,IMUM1 ORL1F404.289
ORL1F404.290
IF ( FKMQ(I-1,J).EQ.0 .AND. FKMQ(I,J).GT.0 ) THEN ORL1F404.291
L=L+1 ORL1F404.292
ISU(J,L)=I ORL1F404.293
ENDIF ORL1F404.294
IF ( FKMQ(I,J).GT.0 .AND. FKMQ(I+1,J).EQ.0 ) IEU(J,L)=I ORL1F404.295
ORL1F404.296
ENDDO ! OVER I ORL1F404.297
ORL1F404.298
IF ( FKMQ(IMUM1,J).GT.0 .AND. FKMQ(IMU,J).GT.0 ) IEU(J,L)=IMUM1 ORL1F404.299
LSU(J)=L ORL1F404.300
ENDDO ! OVER J ORL1F404.301
ORL1F404.302
C ORL1F404.303
C----------------------------------------------------------------------- ORL1F404.304
C CALCULATE MASK FIELD AT ETA POINTS. ORL1F404.305
C----------------------------------------------------------------------- ORL1F404.306
C ORL1F404.307
DO J=J_1,J_JMT ORL1F404.308
DO I=1,IMT ORL1F404.309
ORL1F404.310
IF ( FKMP(I,J).GT.0 ) THEN ORL1F404.311
EM(I,J)=1. ORL1F404.312
ELSE ORL1F404.313
EM(I,J)=0. ORL1F404.314
ENDIF ORL1F404.315
ORL1F404.316
ENDDO ! OVER I ORL1F404.317
ENDDO ! OVER J ORL1F404.318
ORL1F404.319
ENDIF ! (.NOT.L_ONOCLIN).AND.(L_OFREESFC) ORL1F404.320
ORH1F305.98
IF (L_OFILTER) THEN ORH1F305.99
C OSETCON.412
C--------------------------------------------------------------------- OSETCON.413
C INITILISE SWITCH FOR CALCULATION OF FILTERING COEFFICIENTS @DYALLOC.4216
C--------------------------------------------------------------------- @DYALLOC.4217
C @DYALLOC.4218
INITDN=.FALSE. ORH6F404.174
C @DYALLOC.4220
C--------------------------------------------------------------------- @DYALLOC.4221
C FIND AND PRINT START & END INDICES FOR FILTERING OSETCON.414
C--------------------------------------------------------------------- OSETCON.415
C OSETCON.416
IF (L_OPRINT) WRITE(6,833) ORH6F404.175
IF (LSEGF.GT.11) WRITE(6,834) ORH6F404.176
IF (L_OPRINT) WRITE(6,835) ORH6F404.177
CALL FINDEX
( ORH6F404.178
*CALL ARGOCPAR
@DYALLOC.4223
*CALL ARGOINDX
ORH7F402.303
& FKMP_GLOBAL,NJTBFT,KM,JFT1,JFT2,IMT,ISTF,IETF) ORH8F402.62
ORH6F404.179
IF (L_OPRINT) WRITE(6,836) ORH6F404.180
CALL FINDEX
( ORH6F404.181
*CALL ARGOCPAR
@DYALLOC.4226
*CALL ARGOINDX
ORH7F402.304
& FKMQ_GLOBAL,NJTBFU,KM,JFU1,JFU2,IMU,ISUF,IEUF) ORH8F402.63
ORH6F404.182
IF ((.NOT.L_ONOCLIN).AND.(.NOT.L_OFREESFC)) THEN ORH6F404.183
IF (L_OPRINT) WRITE(6,837) ORH6F404.184
CALL FINDEX
( ORH6F404.185
*CALL ARGOCPAR
@DYALLOC.4229
*CALL ARGOINDX
ORH7F402.305
& FKMZ_GLOBAL,NJTBFU, 1,JFU1,JFU2,IMT,ISZF,IEZF) ORH6F404.186
ORH8F402.65
ENDIF ! L_ONOCLIN and L_OFREESFC = false ORH6F404.187
ORH1F305.102
*IF DEF,MPP,AND,DEF,T3E ORH1F405.77
! Call routine to calculate certain values needed when ORH1F405.78
! we distribute filtering over the whole range of pes. ORH1F405.79
! This can only currently be done using shmem calls. ORH1F405.80
CALL DECOMP_FILTR
( ORH1F405.81
*CALL ARGSIZE
ORH1F405.82
*CALL ARGOCALL
ORH1F405.83
& L_OSYMM,L_OFREESFC) ORH1F405.84
*ELSE ORH1F405.85
MAX_ROW_INDEX = JMTM1 ORH1F405.86
*ENDIF ORH1F405.87
ORH1F405.88
833 FORMAT (1H1,'START AND END INDICES FOR FOURIER FILTERING:'/) OSETCON.429
834 FORMAT (1X,'ONLY 11 SETS OF INDICES FIT ACCROSS THE PAGE.', OSETCON.430
* ' OTHERS WILL NOT BE PRINTED.'/) OSETCON.431
835 FORMAT (///1X,'FILTERING INDICES FOR T,S:') OSETCON.432
836 FORMAT (///1X,'FILTERING INDICES FOR U,V:') OSETCON.433
837 FORMAT (///1X,'FILTERING INDICES FOR STREAM FUNCTION:') OSETCON.436
ORH1F305.103
ENDIF ! L_OFILTER = true ORH1F305.104
C OSETCON.438
C--------------------------------------------------------------------- OSETCON.439
C COMPUTE FIELD OF RECIPROCAL DEPTH OSETCON.440
C--------------------------------------------------------------------- OSETCON.441
C OSETCON.442
DO J=J_1,J_JMT ORH6F404.188
DO I=1,IMT ORH6F404.189
HR(I,J)=0.0 ORH6F404.190
IF(FKMQ(I,J).NE.0) HR(I,J)=1./ZDZ(INT(FKMQ(I,J))) ORH6F404.191
ENDDO ORH6F404.192
ENDDO ORH6F404.193
ORH6F404.194
IF (L_OSYMM) THEN ORH1F305.105
C OSETCON.449
C SET SYMMETRY CONDITIONS OSETCON.450
C OSETCON.451
*IF DEF,MPP ORH3F402.652
ORH3F402.653
IF (J_PE_IND(JMT_GLOBAL).NE.J_PE_IND(JMT_GLOBAL-2)) THEN ORH6F404.195
ORH3F402.655
! ROW JMT_GLOBAL -2 must be sent to row JMT_GLOBAL. ORH6F404.196
IF (JST.GE.JMT_GLOBAL-2.AND.JFIN.LE.JMT_GLOBAL-2) THEN ORH6F404.197
DO I = 1, IMT ORH6F404.198
HR_TMP(I) = HR(I,J_JMTM2) ORH6F404.199
ENDDO ORH6F404.200
ORH3F402.661
! Information is to be received by the PE handling ORH6F404.201
! the final row. ORH6F404.202
PE_RECV = J_PE_IND(JMT_GLOBAL) ORH6F404.203
CALL GC_RSEND(
2001,IMT,PE_RECV,INFO,HR_TMP,HR_TMP) ORH6F404.204
ENDIF ORH6F404.205
ENDIF ORH3F402.666
ORH3F402.667
CALL GC_GSYNC(
O_NPROC,INFO) ORH6F404.206
ORH6F404.207
IF (J_PE_IND(JMT_GLOBAL).NE.J_PE_IND(JMT_GLOBAL-2)) THEN ORH6F404.208
IF (JFIN.EQ.JMT_GLOBAL) THEN ORH6F404.209
PE_SEND = J_PE_IND(JMT_GLOBAL-2) ORH6F404.210
CALL GC_RRECV(
2001,IMT,PE_SEND,INFO,HR_TMP,HR_TMP) ORH6F404.211
ENDIF ORH6F404.212
ENDIF ORH6F404.213
ORH6F404.214
CALL GC_GSYNC(
O_NPROC,INFO) ORH6F404.215
ORH6F404.216
IF (J_PE_IND(JMT_GLOBAL).NE.J_PE_IND(JMT_GLOBAL-2)) THEN ORH6F404.217
IF (JFIN.EQ.JMT_GLOBAL) THEN ORH6F404.218
DO I = 1, IMT ORH6F404.219
HR(I,J_JMT) = HR_TMP(I) ORH6F404.220
ENDDO ORH6F404.221
ENDIF ORH6F404.222
ELSE ORH6F404.223
IF (O_MYPE.EQ.O_NPROC-1) THEN ORH6F404.224
DO I = 1, IMT ORH6F404.225
HR(I,J_JMT) = HR(I,J_JMTM2) ORH6F404.226
ENDDO ORH6F404.227
ENDIF ORH6F404.228
ENDIF ORH6F404.229
ORH6F404.230
*ELSE ORH3F402.680
DO I=1,IMT ORH6F404.231
HR(I,JMT)=HR(I,JMTM2) ORH6F404.232
ENDDO ORH6F404.233
*ENDIF ORH3F402.681
ENDIF ORH1F305.106
C OSETCON.456
C--------------------------------------------------------------------- OSETCON.457
C COMPUTE THE SURFACE AREA AND VOLUME OF THE OCEAN OSETCON.458
C--------------------------------------------------------------------- OSETCON.459
C OSETCON.460
AREA=0.0 OSETCON.461
VOLUME=0.0 OSETCON.462
*IF DEF,MPP ORH3F402.682
! Now compile a full global copy of CST ORH3F402.683
! Note: replace this with GATHER_FIELD ORH3F402.684
CALL O_SMARTPASS
(1,1,CST(J_1),CST_GLOBAL ORH3F402.685
& ,JFIN-JST+1,JMT_GLOBAL,JST,2) ORH3F402.686
*ELSE ORH3F402.687
! Set up CST_GLOBAL for non mpp code. ORH3F402.688
DO J = J_1, J_JMT ORH3F402.689
CST_GLOBAL(J)=CST(J) ORH3F402.690
ENDDO ORH3F402.691
*ENDIF ORH3F402.692
! The calculation of AREA and VOLUME use global values ORH3F402.693
! for bit reproducibilty ORH3F402.694
DO J=2,JMTM1_GLOBAL ORH3F402.695
DO I=2,IMTM1 ORH3F402.696
IF (FKMP_GLOBAL(I,J).GT.0) THEN ORH3F402.697
AREA=AREA+CST_GLOBAL(J)*DXT(I)*DYT_GLOBAL(J) ORH3F402.698
VOLUME=VOLUME+CST_GLOBAL(J)*DXT(I)*DYT_GLOBAL(J)* ORH3F402.699
& ZDZ(INT(FKMP_GLOBAL(I,J))) ORH3F402.700
ENDIF ORH3F402.701
ENDDO ORH3F402.702
ENDDO ORH3F402.703
*IF DEF,MPP ORH3F402.704
ORH3F402.705
WRITE (6,*) "AREA FOR PE",O_MYPE,AREA ORH3F402.706
WRITE (6,*) "VOLUME FOR PE",O_MYPE,VOLUME ORH3F402.707
ORH3F402.708
*ENDIF ORH3F402.709
IF (L_SEAICE) THEN ORH1F305.107
C OSETCON.471
C______________________________________________________________________ OSETCON.472
C Set arrays for EDDYDIFF and AMX OSETCON.473
C______________________________________________________________________ OSETCON.474
C OSETCON.475
DO J=J_1,J_JMT ORH6F404.234
IF (PHIT(J).LT.0.0) THEN ORH6F404.235
AMX(J)=AMXSOUTH ORH6F404.236
EDDYDIFF(J)=EDDYDIFFS ORH6F404.237
ELSE ORH6F404.238
AMX(J)=AMXNORTH ORH6F404.239
EDDYDIFF(J)=EDDYDIFFN ORH6F404.240
ENDIF ORH6F404.241
END DO ORH6F404.242
ENDIF ORH1F305.108
C OSETCON.486
IF (L_OPRINT) THEN ORH2F401.38
C--------------------------------------------------------------------- OSETCON.487
C PRINT TOPOGRAPHY MAP OSETCON.488
C (..NOTE.. THE NUMBER OF LEVELS ARE PRINTED IN HEX; OSETCON.489
C A DOT SUPERIMPOSED ===> ADD AN ADDITIONAL 16) OSETCON.490
C--------------------------------------------------------------------- OSETCON.491
C OSETCON.492
WRITE(6,950) ORH6F404.243
950 FORMAT(50H1 NUMBER OF LEVELS AT T,S POINTS AND U,V POINTS ) ORH6F404.244
DO IBK=1,IMT,65 ORH6F404.245
WRITE(6,960) ORH6F404.246
960 FORMAT(/) ORH6F404.247
ISP=IBK ORH6F404.248
IEPT=IBK+64 ORH6F404.249
IEPU=IBK+64 ORH6F404.250
IF(IEPT.GT.IMT) IEPT=IMT ORH6F404.251
IF(IEPU.GT.IMU) IEPU=IMU ORH6F404.252
DO JREV=J_1,J_JMT ORH6F404.253
J=J_JMT-JREV+1 ORH6F404.254
IF(J+J_OFFSET.NE.JMT_GLOBAL) THEN ORH6F404.255
DO I=1,IMT ORH6F404.256
KPR(I)=FKMQ(I,J) ORH6F404.257
ENDDO ORH6F404.258
WRITE(6,972) (KPR(I),I=ISP,IEPU) ORH6F404.259
972 FORMAT(2X,65(1X,Z1)) ORH6F404.260
ORH6F404.261
DO I=1,IMT ORH6F404.262
ABT(I)=BLK ORH6F404.263
ENDDO ORH6F404.264
DO I=ISP,IEPU ORH6F404.265
IF(KPR(I).GT.15)ABT(I)=DOT ORH6F404.266
ENDDO ORH6F404.267
WRITE(6,971) (ABT(I),I=ISP,IEPU) ORH6F404.268
971 FORMAT(2H+ ,65(1X,A1)) ORH6F404.269
ENDIF ORH6F404.270
DO I=1,IMT ORH6F404.271
KPR(I)=FKMP(I,J) ORH6F404.272
ENDDO ORH6F404.273
WRITE(6,982) (KPR(I),I=ISP,IEPT) ORH6F404.274
982 FORMAT(1X,65(1X,Z1)) ORH6F404.275
DO I=1,IMT ORH6F404.276
ABT(I)=BLK ORH6F404.277
ENDDO ORH6F404.278
DO I=ISP,IEPT ORH6F404.279
IF(KPR(I).GT.15)ABT(I)=DOT ORH6F404.280
ENDDO ORH6F404.281
WRITE(6,981) (ABT(I),I=ISP,IEPT) ORH6F404.282
981 FORMAT(1H+,65(1X,A1)) ORH6F404.283
ENDDO ! Over JREV ORH6F404.284
ENDDO ! Over IBK ORH6F404.285
C OSETCON.534
C--------------------------------------------------------------------- OSETCON.535
C PRINT AREA AND VOLUME OF THE OCEAN, AS WELL AS START & END OSETCON.536
C INDICES FOR THE STREAM FUNCTION CALCULATION OSETCON.537
C--------------------------------------------------------------------- OSETCON.538
C OSETCON.539
WRITE(6,940) AREA,VOLUME ORH6F404.286
940 FORMAT(//,15H SURFACE AREA =,1PE13.6,5X,9H VOLUME =,1PE13.6) ORH6F404.287
ORH1F305.109
IF ((.NOT.L_ONOCLIN).AND.(.NOT.L_OFREESFC)) THEN ORH6F404.288
ORH1F305.111
WRITE(6,9502) ORH6F404.289
9502 FORMAT(43H1 START AND END INDICES FOR STREAM FUNCTION) ORH6F404.290
DO JREV=J_1,J_JMT ORH6F404.291
J=J_JMT-JREV+1 ORH6F404.292
WRITE(6,930) J,(ISZ(J,L),IEZ(J,L),L=1,LSEG) ORH6F404.293
930 FORMAT(' J=',I3,5X,5(2I5,10X)) ORH6F404.294
ENDDO ORH6F404.295
ENDIF ORH6F404.296
ENDIF ORH2F401.39
ORH1F305.113
IF (L_OSOLAR) THEN ORH1F305.114
CL Calculates the solar penetration for a water type OSETCON.552
OSETCON.553
CALL SOLSET
(SOL_PEN, RSOL, ETA1_SI, ETA2_SI, KFIX, ORH6F404.297
+ KM, OSETCON.555
+ DZ, ZDZ OSETCON.556
+ ) OSETCON.557
ORH1F305.116
IF (L_OMIXLAY) THEN ORH1F305.119
C OSETCON.560
C Set constants for mixed layer code OSETCON.561
ORH1F305.120
IF (L_OVARYT) THEN ORH1F305.121
CALL MIXSET
(DELPSF, DELPSL, DECAY, ORH6F404.298
+ GRAV_SI, DZ, ZDZ, ZDZZ, OSETCON.564
+ RZ, ORH1F305.122
+ KM, OSETCON.573
+ KFIX, RSOL, ETA1_SI, ETA2_SI, DELTA_SI OSETCON.574
+ ) OSETCON.575
ORH1F305.123
ELSE ORH1F305.124
ORH1F305.125
CALL MIXSET
(DELPSF, DELPSL, DECAY, ORH6F404.299
+ GRAV_SI, DZ, ZDZ, ZDZZ, ORH1F305.127
+ DZ, ORH1F305.128
+ KM, ORH1F305.129
+ KFIX, RSOL, ETA1_SI, ETA2_SI, DELTA_SI ORH1F305.130
+ ) ORH1F305.131
ENDIF ORH1F305.132
ENDIF ! L_OMIXLAY = true ORH1F305.134
ENDIF ! L_OSOLAR = true OJP0F404.621
ORH1F305.136
IF (L_OISOPYC) THEN ORH1F305.137
C OSETCON.578
C Set along-isopycnal diffusivity as a function of depth. AHI is OSETCON.579
C AI in eqn. (1.4). Note AHI in cm2/s, hence conversion factors. OSETCON.580
C OSETCON.581
DO k=1,KM ORH6F404.300
AHI(k) = AHI2_SI*1.E4 + (AHI1_SI-AHI2_SI)*1.E4* ORH6F404.301
* EXP(-ZDZZ(k)/(AHI3_SI*1.E2)) OSETCON.584
ENDDO ORH6F404.302
ENDIF ! L_OISOPYC = true ORH6F404.303
ORH1F305.138
IF (L_OISOTAPER) THEN OLA0F401.49
C The following are required when L_OISOTAPER = true OLA0F401.50
dslope=0.001 ! Values required for tapering of isopycnals ORH6F404.304
slopec=0.004 ! ORH6F404.305
ENDIF OLA0F401.53
ORH6F404.306
IF (L_OISOPYCGM.OR.L_OISOGM) THEN OOM1F405.72
IF (L_OVISBECK) THEN ORH6F404.308
C Hard wire level number to depth average Richardson number over for OLA2F403.42
C Visbeck scheme. OLA2F403.43
kri(1)=7 ORH6F404.309
IF (L_OVISHADCM4) THEN OOM1F405.73
kri(2)=13 OOM1F405.74
ELSE OOM1F405.75
kri(2)=15 OOM1F405.76
ENDIF OOM1F405.77
ELSE ORH6F404.311
c Calculate value for thickness diffusion used in GM90 scheme OLA0F401.55
do k=1,km ORH6F404.312
ATHKDF(k) = ATHKDF2_SI*1.E4 + (ATHKDF1_SI-ATHKDF2_SI)* ORH6F404.313
* 1.E4*EXP(-ZDZZ(k)/(ATHKDF3_SI*1.E2)) OLA0F401.58
enddo ORH6F404.314
write(6,*) 'ATHKDF ',athkdf ORH6F404.315
write(6,*) 'AHI ',ahi ORH6F404.316
ENDIF ORH6F404.317
ENDIF OLA0F401.62
IF (L_OFULARGE) THEN OOM1F405.427
C OOM1F405.428
C CALCULATE LEVEL WITHIN WHICH MAX_LARGE_DEPTH IS CONTAINED OOM1F405.429
DO K=1,KM OOM1F405.430
IF (ZDZ(K).LT.MAX_LARGE_DEPTH*100.) MAX_LARGE_LEVELS=K+1 OOM1F405.431
ENDDO OOM1F405.432
C OOM1F405.433
C HARD WIRE NO OF LEVELS IN EACH LAYER CONSIDERED IN OOM1F405.434
C CALCULATING MLD OOM1F405.435
NO_LAYERS_IN_LEV=5 OOM1F405.436
ENDIF OOM1F405.437
ORH1F305.140
IF (L_OHMEAD) THEN ORH1F305.141
C @DYALLOC.4231
C====================================================================== @DYALLOC.4232
C READ BASIN INDICES @DYALLOC.4233
C====================================================================== @DYALLOC.4234
C @DYALLOC.4235
@DYALLOC.4242
! In MPP mode, all pes do a complete read of the basin ORH6F404.318
! indices file and discard the information they do not ORH6F404.319
! require. I/O being what it is, this is probably not ORH6F404.320
! as efficient as reading all data to one PE and distributing ORH6F404.321
! but it's a small overhead since this routine is only ORH6F404.322
! called once. ORH6F404.323
CALL GET_FILE
(58,FILENAME,80,ICODE) ORH6F404.324
OPEN(58,FILE=FILENAME,STATUS='OLD',IOSTAT=OPEN_STATUS) ORH6F404.325
IF (OPEN_STATUS.NE.0) THEN ORH6F404.326
WRITE(6,*)'error opening basin indices file ',FILENAME ORH6F404.327
ICODE=OPEN_STATUS ORH6F404.328
CMESSAGE=' OSETCON: ERROR OPENING BASIN INDICES FILE' ORH6F404.329
RETURN ORH6F404.330
ENDIF ORH6F404.331
ORH6F404.332
DO J=1,3 ORH6F404.333
READ(58,4360) ! skip three records ORH6F404.334
ENDDO ORH6F404.335
4360 FORMAT(A80) ORH6F404.336
DO J=JMT_GLOBAL,1,-1 ORH6F404.337
IF (J.GE.JST.AND.J.LE.JFIN) THEN ORH6F404.338
JREV=J-J_OFFSET ORH6F404.339
READ(58,*) JCOUNT,((ISHT(JREV,IB,IS), ORH6F404.340
& IEHT(JREV,IB,IS),IS=1,LDIV), ORH3F402.720
& IB=1,LSEGC) @DYALLOC.4249
IF (J.NE.JCOUNT) THEN ORH6F404.341
ICODE=101 ORH6F404.342
CMESSAGE=' OSETCON: ERROR IN READING BASIN' // ORH6F404.343
& ' INDICES FILE' ORH6F404.344
GOTO 9999 ORH6F404.345
ENDIF ORH6F404.346
ELSE ORH6F404.347
WRITE (6,*) "READING DUMMY BASIN RECORD",J ORH6F404.348
READ(58,*) JCOUNT ORH6F404.349
ENDIF ORH6F404.350
ENDDO ORH6F404.351
C @DYALLOC.4255
C====================================================================== OSETCON.588
C PRINT ARRAYS OF BASIN INDICES OSETCON.589
C====================================================================== OSETCON.590
C OSETCON.591
LSGCM1=LSEGC-1 ORH6F404.352
WRITE(6,4370) ORH6F404.353
4370 FORMAT(50H1 START AND STOP INDICES FOR OCEAN BASINS ) ORH6F404.354
DO J=J_JMT,J_1,-1 ORH6F404.355
JREV = J+J_OFFSET ORH6F404.356
WRITE(6,4380)JREV,((ISHT(J,L,LD),LD=1,LDIV),L=1,LSGCM1) ORH6F404.357
WRITE(6,4390) ((IEHT(J,L,LD),LD=1,LDIV),L=1,LSGCM1) ORH6F404.358
4380 FORMAT(1H ,'J=',I3,5X,10(I5,5X)) ORH6F404.359
4390 FORMAT(1H+,10X,10(5X,I5)) ORH6F404.360
ENDDO ORH6F404.361
ORH1F305.142
ENDIF ! L_OHMEAD = true ORH1F305.143
ORH1F305.144
IF (L_OLATVISC) THEN ORH1F305.145
C OSETCON.603
C Set latitude-dependent viscosity. This goes like OSETCON.604
C AM= AM0 + AM1*cos(latitude). OSETCON.605
C OSETCON.606
DO J=J_1,J_JMTM1 ORH6F404.362
AMT(J)= AM0 + AM1*CST(J) ORH6F404.363
AMU(J)= AM0 + AM1*CS(J) ORH6F404.364
ENDDO ORH6F404.365
*IF DEF,MPP ORH3F402.730
! There's little to be gained by restricting the calculation ORH3F402.731
! of AMT(JMT) to the appropriate process since it's only ORH3F402.732
! a single calculation, but it does serve as a reminder about ORH3F402.733
! how data is distributed and to leave the calculation ORH3F402.734
! unprotected for all PEs to perform would be inconsistent ORH3F402.735
! with the rest of the code and possibly confusing for future ORH3F402.736
! developers. ORH3F402.737
IF (JFIN.EQ.JMT_GLOBAL) THEN ORH6F404.366
*ENDIF ORH3F402.739
AMT(J_JMT) = AM0 + AM1*CST(J_JMT) ORH6F404.367
*IF DEF,MPP ORH3F402.741
ENDIF ORH6F404.368
*ENDIF ORH3F402.743
IF (L_OPRINT) THEN ORH6F404.369
ORH1F305.146
WRITE(6,*)'0 Viscosity on T,S points AMT' ORH6F404.370
WRITE(6,970) AMT ORH6F404.371
WRITE(6,*)'0 Viscosity on U,V points AMU' ORH6F404.372
WRITE(6,970) AMU ORH6F404.373
ENDIF ORH6F404.374
ORH6F404.375
ENDIF ! L_OLATVISC = false ORH1F305.147
ORH1F305.148
*IF DEF,MPP ORL1F404.198
C ORL1F404.199
C===================================================================== ORL1F404.200
C CALL TO SWAPBOUNDS FOR HALO UPDATE IN MPP VERSION ORL1F404.201
C===================================================================== ORL1F404.202
ORL1F404.203
CALL SWAPBOUNDS
(CST,1,JMT,O_EW_HALO,O_NS_HALO,1) ORL1F404.204
CALL SWAPBOUNDS
(DYTR,1,JMT,O_EW_HALO,O_NS_HALO,1) ORL1F404.205
ORL1F404.206
IF (L_OLATVISC) THEN ORL1F404.207
CALL SWAPBOUNDS
(AMT,1,JMT,O_EW_HALO,O_NS_HALO,1) ORL1F404.208
ENDIF ORL1F404.209
ORL1F404.210
*ENDIF ORL1F404.211
ORL1F404.212
C---------------------------------------------------------------------- ORL1F404.213
C CALCULATE CONSTANTS USED IN CLINIC AND TROPIC FOR THE CALCULATION ORL1F404.214
C OF THE HORIZONTAL DIFFUSION COMPONENTS. ORL1F404.215
C---------------------------------------------------------------------- ORL1F404.216
IF (L_OSYMM) THEN ORL1F404.217
ORL1F404.218
JCOUNT = J_JMTM1 ORL1F404.219
ORL1F404.220
ELSE ORL1F404.221
ORL1F404.222
JCOUNT = J_JMTM2 ORL1F404.223
ORL1F404.224
ENDIF ! (L_OSYMM) ORL1F404.225
ORL1F404.226
DO J=J_2,JCOUNT ORL1F404.227
IF (L_OLATVISC) THEN ORL1F404.228
ORL1F404.229
BBU(J) = 8.0*AMU(J)*CSR(J)*CSR(J) ORL1F404.230
CCU(J) = AMT(J+1)*CST(J+1)*DYTR(J+1)*DYUR(J)*CSR(J) ORL1F404.231
DDU(J) = AMT(J)*CST(J)*DYTR(J)*DYUR(J)*CSR(J) ORL1F404.232
GGU(J) = AMU(J)*(1.0-TNG(J)*TNG(J))/(RADIUS*RADIUS) ORL1F404.233
HHU(J) = 2.0*AMU(J)*SINE(J)/(RADIUS*CS(J)*CS(J)) ORL1F404.234
ORL1F404.235
ELSE ORL1F404.236
ORL1F404.237
BBU(J) = 8.0*AM*CSR(J)*CSR(J) ORL1F404.238
CCU(J) = AM*CST(J+1)*DYTR(J+1)*DYUR(J)*CSR(J) ORL1F404.239
DDU(J) = AM*CST(J)*DYTR(J)*DYUR(J)*CSR(J) ORL1F404.240
GGU(J) = AM*(1.0-TNG(J)*TNG(J))/(RADIUS*RADIUS) ORL1F404.241
HHU(J) = 2.0*AM*SINE(J)/(RADIUS*CS(J)*CS(J)) ORL1F404.242
ORL1F404.243
ENDIF ! O_LATVISC ORL1F404.244
ORL1F404.245
END DO ORL1F404.246
ORL1F404.247
IF (L_OBIOLOGY.AND.L_OSOLARAL.AND.L_OCARBON) THEN ORH1F305.149
C NT080993.53
C Compute Declination Angle and Daylength for each NT080993.54
C row for every day of the year (assumed 360 - ie climate mode) NT080993.55
C Ensure COS of HOUR ANGLE does not exceed + or - 1, and set DAY NT080993.56
C LENGTH of 1st & last rows to be the same as that of adjacent rows NT080993.57
C to avoid possible problems at the poles (tan(90)=infinity). NT080993.58
C NT080993.59
FXA=2.0*PI/360.0 ORH6F404.376
FXB=23.45/RADIAN ORH6F404.377
FXC=2.0*12.0/PI ORH6F404.378
DO I = 1,360 ORH6F404.379
DECLIN(I) = FXB * SIN(FXA*(266.0+I)) ORH6F404.380
DO J = J_2,J_JMTM1 ORH6F404.381
CS_HOUR_ANG(J) = -TAN(PHIT(J)) * TAN(DECLIN(I)) ORH6F404.382
IF (CS_HOUR_ANG(J).LT.-1.0) CS_HOUR_ANG(J)=-1.0 ORH6F404.383
IF (CS_HOUR_ANG(J).GT.1.0) CS_HOUR_ANG(J)=1.0 ORH6F404.384
DAYLEN(J,I) = FXC * ACOS(CS_HOUR_ANG(J)) ORH6F404.385
ENDDO ORH6F404.386
*IF DEF,MPP ORH3F402.745
! If rows 1 and 2 are both on the same processor ORH6F404.387
! which they will be. ORH6F404.388
IF (JST.EQ.1) THEN ORH6F404.389
DAYLEN(J_1,I) = DAYLEN(J_2,I) ORH6F404.390
ENDIF ORH6F404.391
ORH3F402.751
ORH3F402.752
! If the final row and final row-1 are both on the ORH6F404.392
! same processor, then no problem ORH6F404.393
IF (JST.LE.JMTM1_GLOBAL.AND.JFIN.GE.JMT_GLOBAL) THEN ORH6F404.394
DAYLEN(J_JMT,I) = DAYLEN(J_JMTM1,I) ORH6F404.395
ELSE ORH6F404.396
IF (JST.LE.JMTM1_GLOBAL.AND. ORH6F404.397
& JFIN.EQ.JMTM1_GLOBAL) THEN ORH6F404.398
! Load temporary array ready for sending to PE ORH6F404.399
! handling row JMT_GLOBAL ORH6F404.400
DAYLEN_TMP(I) = DAYLEN(J_JMTM1,I) ORH6F404.401
ENDIF ORH6F404.402
ENDIF ORH6F404.403
*ELSE ORH3F402.764
DAYLEN(1,I) = DAYLEN(2,I) ORH6F404.404
DAYLEN(JMT,I) = DAYLEN(JMTM1,I) ORH6F404.405
*ENDIF ORH3F402.765
ENDDO ORH6F404.406
ORH6F404.407
*IF DEF,MPP ORH3F402.766
IF (JST.LE.JMTM1_GLOBAL.AND.JFIN.EQ.JMTM1_GLOBAL) THEN ORH6F404.408
! Information is to be received by the PE handling ORH3F402.768
! the final row. ORH3F402.769
PE_RECV = J_PE_IND(JMT_GLOBAL) ORH3F402.770
CALL GC_RSEND(
2002,360,PE_RECV,INFO,DAYLEN_TMP,DAYLEN_TMP) ORH3F402.771
ENDIF ORH6F404.409
ORH3F402.773
CALL GC_GSYNC(
O_NPROC,INFO) ORH6F404.410
ORH6F404.411
IF (JST.EQ.JMT_GLOBAL) THEN ORH6F404.412
PE_SEND = J_PE_IND(JMT_GLOBAL-1) ORH6F404.413
CALL GC_RRECV(
2002,IMT,PE_SEND,INFO,DAYLEN_TMP,DAYLEN_TMP) ORH6F404.414
DO I = 1, 360 ORH6F404.415
DAYLEN(J_JMT,I) = DAYLEN_TMP(I) ORH6F404.416
ENDDO ORH6F404.417
ENDIF ORH6F404.418
CALL GC_GSYNC(
O_NPROC,INFO) ORH6F404.419
*ENDIF ORH3F402.781
ORH3F402.782
IF (L_OPRINT) THEN ORH6F404.420
C NT080993.74
WRITE(6,*)'0 Day Length (in hours) at T,S points DAYLEN' ORH6F404.421
WRITE(6,*)'0 Day,1 Rows 1 to JMT' ORH6F404.422
WRITE(6,980) (DAYLEN(J,1),J=J_1,J_JMT) ORH6F404.423
WRITE(6,*)'0 Day 90,Rows 1 to JMT' ORH6F404.424
WRITE(6,980) (DAYLEN(J,90),J=J_1,J_JMT) ORH6F404.425
WRITE(6,*)'0 Day 180,Rows 1 to JMT' ORH6F404.426
WRITE(6,980) (DAYLEN(J,180),J=J_1,J_JMT) ORH6F404.427
WRITE(6,*)'0 Day 270,Rows 1 to JMT' ORH6F404.428
WRITE(6,980) (DAYLEN(J,270),J=J_1,J_JMT) ORH6F404.429
WRITE(6,*)'0 Day 360, Rows 1 to JMT' ORH6F404.430
WRITE(6,980) (DAYLEN(J,360),J=J_1,J_JMT) ORH6F404.431
WRITE(6,*)' ' ORH6F404.432
980 FORMAT(1X,20F7.2) ORH6F404.433
ENDIF ORH6F404.434
C NT080993.88
C ====================================================================== NT080993.89
C Set up layer coefficient terms for calculation of chlorophyll NT080993.90
C cross section, a*, in routine SPECTRAL NT080993.91
C DZ must be converted from cms to metres before use NT080993.92
C NT080993.93
DLCOA = 1.0 ORH6F404.435
DLCOB = -DLCOA ORH6F404.436
DLCOC = -2.0*DLCOB ORH6F404.437
DLCOD = -3.0*DLCOC ORH6F404.438
C NT080993.98
DO K = 1,KM ORH6F404.439
DLCOBP = DLCOB ORH6F404.440
DLCOCP = DLCOC ORH6F404.441
DLCODP = DLCOD ORH6F404.442
C NT080993.103
DLCOA = DLCOA + DZ(K)*0.01 ORH6F404.443
DLCOD = DLCOA * LOG(DLCOA) ORH6F404.444
DLCOB = DLCOD - DLCOA ORH6F404.445
DLCOD = DLCOD * LOG(DLCOA) ORH6F404.446
DLCOC = DLCOD - 2.0 * DLCOB ORH6F404.447
DLCOD = DLCOD * LOG(DLCOA) - 3.0 * DLCOC ORH6F404.448
C NT080993.110
DLCO(K,1) = DLCOB -DLCOBP ORH6F404.449
DLCO(K,2) = DLCOC -DLCOCP ORH6F404.450
DLCO(K,3) = DLCOD -DLCODP ORH6F404.451
ENDDO ORH6F404.452
C NT080993.115
ENDIF ! L_OBIOLOGY, L_OSOLARAL, L_OCARBON = true ORH1F305.150
*IF DEF,MPP ORH4F402.1
ORH3F403.269
! The following variables are needed for initialisation ORH6F404.453
! purposes at block boundaries, but are outside the scope of ORH6F404.454
! our standard mpp halo. We therefore set up special variables ORH6F404.455
! to handle them. It's a bit of a drag in terms of shuffling ORH6F404.456
! more data around in argument lists, but it does ensure ORH6F404.457
! that the necessary communications (which is te main ORH6F404.458
! performance overhead) are only performed once per run. ORH6F404.459
ORH3F403.275
IF (J_PE_JFINP1.GE.0) THEN ORH6F404.460
! We must send row J_JMT-1 ORH6F404.461
PE_RECV=J_PE_JFINP1 ORH6F404.462
CALL GC_RSEND (
5002,IMT,PE_RECV,INFO,HRJ,HR(1,J_JMT-1)) ORH6F404.463
ENDIF ORH6F404.464
ORH3F403.277
CALL GC_GSYNC(
O_NPROC,INFO) ORH6F404.465
ORH3F403.284
IF (J_PE_JSTM1.GE.0) THEN ORH6F404.466
! We're expecting to receive a message: ORH6F404.467
PE_SEND = J_PE_JSTM1 ORH6F404.468
CALL GC_RRECV (
5002,IMT,PE_SEND,INFO,HRJ,HR) ORH6F404.469
ENDIF ORH6F404.470
ORH3F403.296
CALL GC_GSYNC(
O_NPROC,INFO) ORH6F404.471
ORH6F404.472
IF (J_PE_JFINP1.GE.0) THEN ORH6F404.473
! We must send row J_JMT-1 ORH6F404.474
PE_RECV=J_PE_JFINP1 ORH6F404.475
CALL GC_RSEND (
5003,1,PE_RECV,INFO,CSRJ,CSR(J_JMT-1)) ORH6F404.476
ENDIF ORH6F404.477
ORH6F404.478
CALL GC_GSYNC(
O_NPROC,INFO) ORH6F404.479
ORH6F404.480
IF (J_PE_JSTM1.GE.0) THEN ORH6F404.481
! We're expecting to receive a message: ORH6F404.482
PE_SEND = J_PE_JSTM1 ORH6F404.483
CALL GC_RRECV (
5003,1,PE_SEND,INFO,CSRJ,CSR) ORH6F404.484
ENDIF ORH6F404.485
ORH6F404.486
CALL GC_GSYNC(
O_NPROC,INFO) ORH6F404.487
ORH6F404.488
IF (J_PE_JFINP1.GE.0) THEN ORH6F404.489
! We must send row J_JMT-1 ORH6F404.490
PE_RECV=J_PE_JFINP1 ORH6F404.491
CALL GC_RSEND(
5004,1,PE_RECV,INFO,DYU2RJ,DYU2R(J_JMT-1)) ORH6F404.492
ENDIF ORH6F404.493
ORH6F404.494
CALL GC_GSYNC(
O_NPROC,INFO) ORH6F404.495
ORH6F404.496
IF (J_PE_JSTM1.GE.0) THEN ORH6F404.497
! We're expecting to receive a message: ORH6F404.498
PE_SEND = J_PE_JSTM1 ORH6F404.499
CALL GC_RRECV(
5004,1,PE_SEND,INFO,DYU2RJ,DYU2R) ORH6F404.500
ENDIF ORH6F404.501
ORH6F404.502
CALL GC_GSYNC(
O_NPROC,INFO) ORH6F404.503
C Need to communicate various values to different PE's OOM3F405.87
OOM3F405.88
C Send value of HR(J_1+1) back to previous PE, to be HRJP OOM3F405.89
IF (L_OBIMOM.or.L_OBIHARMGM) THEN OOM3F405.90
OOM3F405.91
IF (J_PE_JSTM1.GE.0) THEN OOM3F405.92
c ! We must send row J_1+1 OOM3F405.93
PE_RECV=J_PE_JSTM1 OOM3F405.94
CALL GC_RSEND(
5020,IMT,PE_RECV,INFO,HRJP,HR(1,J_1+1)) OOM3F405.95
ENDIF OOM3F405.96
OOM3F405.97
CALL GC_GSYNC(
O_NPROC,INFO) OOM3F405.98
OOM3F405.99
IF (J_PE_JFINP1.GE.0) THEN OOM3F405.100
c ! We're expecting to receive a message: OOM3F405.101
PE_SEND = J_PE_JFINP1 OOM3F405.102
CALL GC_RRECV(
5020,IMT,PE_SEND,INFO,HRJP,HR) OOM3F405.103
ENDIF OOM3F405.104
OOM3F405.105
CALL GC_GSYNC(
O_NPROC,INFO) OOM3F405.106
OOM3F405.107
C Send value of CSR(J_1+1) back to previous PE, to be CSRJP OOM3F405.108
IF (J_PE_JSTM1.GE.0) THEN OOM3F405.109
c ! We must send row J_1+1 OOM3F405.110
PE_RECV=J_PE_JSTM1 OOM3F405.111
CALL GC_RSEND(
5021,1,PE_RECV,INFO,CSRJP,CSR(J_1+1)) OOM3F405.112
ENDIF OOM3F405.113
OOM3F405.114
CALL GC_GSYNC(
O_NPROC,INFO) OOM3F405.115
OOM3F405.116
IF (J_PE_JFINP1.GE.0) THEN OOM3F405.117
c ! We're expecting to receive a message: OOM3F405.118
PE_SEND = J_PE_JFINP1 OOM3F405.119
CALL GC_RRECV(
5021,1,PE_SEND,INFO,CSRJP,CSR) OOM3F405.120
ENDIF OOM3F405.121
OOM3F405.122
CALL GC_GSYNC(
O_NPROC,INFO) OOM3F405.123
OOM3F405.124
C Send value of DYU2R(J_1+1) back to previous PE, to be DYU2RJP OOM3F405.125
IF (J_PE_JSTM1.GE.0) THEN OOM3F405.126
c ! We must send row J_1+1 OOM3F405.127
PE_RECV=J_PE_JSTM1 OOM3F405.128
CALL GC_RSEND(
5022,1,PE_RECV,INFO,DYU2RJP,DYU2R(J_1+1)) OOM3F405.129
ENDIF OOM3F405.130
OOM3F405.131
CALL GC_GSYNC(
O_NPROC,INFO) OOM3F405.132
OOM3F405.133
IF (J_PE_JFINP1.GE.0) THEN OOM3F405.134
c ! We're expecting to receive a message: OOM3F405.135
PE_SEND = J_PE_JFINP1 OOM3F405.136
CALL GC_RRECV(
5022,1,PE_SEND,INFO,DYU2RJP,DYU2R) OOM3F405.137
ENDIF OOM3F405.138
OOM3F405.139
CALL GC_GSYNC(
O_NPROC,INFO) OOM3F405.140
OOM3F405.141
C Send value of CST(J_1+1) back to previous PE, to be CSTJP OOM3F405.142
IF (J_PE_JSTM1.GE.0) THEN OOM3F405.143
c ! We must send row J_1+1 OOM3F405.144
PE_RECV=J_PE_JSTM1 OOM3F405.145
CALL GC_RSEND(
5023,1,PE_RECV,INFO,CSTJP,CST(J_1+1)) OOM3F405.146
ENDIF OOM3F405.147
OOM3F405.148
CALL GC_GSYNC(
O_NPROC,INFO) OOM3F405.149
OOM3F405.150
IF (J_PE_JFINP1.GE.0) THEN OOM3F405.151
c ! We're expecting to receive a message: OOM3F405.152
PE_SEND = J_PE_JFINP1 OOM3F405.153
CALL GC_RRECV(
5023,1,PE_SEND,INFO,CSTJP,CST) OOM3F405.154
ENDIF OOM3F405.155
OOM3F405.156
C Send value of DYTR(J_1+1) back to previous PE, to be DYTRJP OOM3F405.157
CALL GC_GSYNC(
O_NPROC,INFO) OOM3F405.158
IF (J_PE_JSTM1.GE.0) THEN OOM3F405.159
c ! We must send row J_1+1 OOM3F405.160
PE_RECV=J_PE_JSTM1 OOM3F405.161
CALL GC_RSEND(
5024,1,PE_RECV,INFO,DYTRJP,DYTR(J_1+1)) OOM3F405.162
ENDIF OOM3F405.163
OOM3F405.164
CALL GC_GSYNC(
O_NPROC,INFO) OOM3F405.165
OOM3F405.166
IF (J_PE_JFINP1.GE.0) THEN OOM3F405.167
c ! We're expecting to receive a message: OOM3F405.168
PE_SEND = J_PE_JFINP1 OOM3F405.169
CALL GC_RRECV(
5024,1,PE_SEND,INFO,DYTRJP,DYTR) OOM3F405.170
ENDIF OOM3F405.171
OOM3F405.172
CALL GC_GSYNC(
O_NPROC,INFO) OOM3F405.173
OOM3F405.174
ENDIF ! L_OBIMOM.or.L_OBIHARMGM OOM3F405.175
OOM3F405.176
C Send value of CS(J_JMT) forward to next PE, to be CSJM OOM3F405.177
IF (J_PE_JFINP1.GE.0) THEN OOM3F405.178
c ! We must send row J_JMT-1 OOM3F405.179
PE_RECV=J_PE_JFINP1 OOM3F405.180
CALL GC_RSEND(
5025,1,PE_RECV,INFO,CSJM,CS(J_JMT-1)) OOM3F405.181
ENDIF OOM3F405.182
OOM3F405.183
CALL GC_GSYNC(
O_NPROC,INFO) OOM3F405.184
OOM3F405.185
IF (J_PE_JSTM1.GE.0) THEN OOM3F405.186
c ! We're expecting to receive a message: OOM3F405.187
PE_SEND = J_PE_JSTM1 OOM3F405.188
CALL GC_RRECV(
5025,1,PE_SEND,INFO,CSJM,CS) OOM3F405.189
ENDIF OOM3F405.190
OOM3F405.191
C Send value of DYUR(J_JMT) forward to next PE, to be DYURJM OOM3F405.192
CALL GC_GSYNC(
O_NPROC,INFO) OOM3F405.193
IF (J_PE_JFINP1.GE.0) THEN OOM3F405.194
c ! We must send row J_JMT-1 OOM3F405.195
PE_RECV=J_PE_JFINP1 OOM3F405.196
CALL GC_RSEND(
5026,1,PE_RECV,INFO,DYURJM,DYUR(J_JMT-1)) OOM3F405.197
ENDIF OOM3F405.198
OOM3F405.199
CALL GC_GSYNC(
O_NPROC,INFO) OOM3F405.200
OOM3F405.201
IF (J_PE_JSTM1.GE.0) THEN OOM3F405.202
c ! We're expecting to receive a message: OOM3F405.203
PE_SEND = J_PE_JSTM1 OOM3F405.204
CALL GC_RRECV(
5026,1,PE_SEND,INFO,DYURJM,DYUR) OOM3F405.205
ENDIF OOM3F405.206
OOM3F405.207
CALL GC_GSYNC(
O_NPROC,INFO) OOM3F405.208
OOM3F405.209
c ENDIF ! L_OBIMOM.or.L_OBIHARMGM OOM3F405.210
OOM3F405.211
ORH3F403.310
!===================================================================== ORH4F402.2
! POPULATE HALO REGIONS WITH DATA ORH4F402.3
!===================================================================== ORH4F402.4
ORH4F402.5
CALL SWAPBOUNDS
(AMT,1,JMT,O_EW_HALO,O_NS_HALO,1) ORH4F402.6
ORH4F402.7
CALL SWAPBOUNDS
(PHI,1,JMT,O_EW_HALO,O_NS_HALO,1) ORH4F402.8
ORH4F402.9
CALL SWAPBOUNDS
(FKMP,IMT,JMT,O_EW_HALO,O_NS_HALO,1) ORH4F402.10
ORH4F402.11
CALL SWAPBOUNDS
(FKMQ,IMT,JMT,O_EW_HALO,O_NS_HALO,1) ORH4F402.12
ORH4F402.13
CALL SWAPBOUNDS
(CS,1,JMT,O_EW_HALO,O_NS_HALO,1) ORH4F402.14
ORH4F402.15
CALL SWAPBOUNDS
(SINE,1,JMT,O_EW_HALO,O_NS_HALO,1) ORH4F402.16
ORH4F402.17
CALL SWAPBOUNDS
(CSR,1,JMT,O_EW_HALO,O_NS_HALO,1) ORH4F402.18
ORH4F402.19
CALL SWAPBOUNDS
(CSTR,1,JMT,O_EW_HALO,O_NS_HALO,1) ORH4F402.20
ORH4F402.21
CALL SWAPBOUNDS
(CST,1,JMT,O_EW_HALO,O_NS_HALO,1) ORH4F402.22
ORH4F402.23
CALL SWAPBOUNDS
(DYTR,1,JMT,O_EW_HALO,O_NS_HALO,1) ORH4F402.24
ORH4F402.25
CALL SWAPBOUNDS
(DYT4R,1,JMT,O_EW_HALO,O_NS_HALO,1) ORH4F402.26
ORH4F402.27
CALL SWAPBOUNDS
(DYU,1,JMT,O_EW_HALO,O_NS_HALO,1) ORH4F402.28
ORH4F402.29
CALL SWAPBOUNDS
(DYUR,1,JMT,O_EW_HALO,O_NS_HALO,1) ORH4F402.30
ORH4F402.31
CALL SWAPBOUNDS
(DYU2R,1,JMT,O_EW_HALO,O_NS_HALO,1) ORH4F402.32
ORH4F402.33
CALL SWAPBOUNDS
(CORIOLIS,IMT,JMT,O_EW_HALO,O_NS_HALO,1) ORH4F402.34
ORH4F402.35
CALL SWAPBOUNDS
(HR,IMT,JMT,O_EW_HALO,O_NS_HALO,1) ORH4F402.36
CALL SWAPBOUNDS
(TNG,1,JMT,O_EW_HALO,O_NS_HALO,1) OOM3F405.212
ORH4F402.37
CALL SWAPBOUNDS
(PHIT,1,JMT,O_EW_HALO,O_NS_HALO,1) ODC1F405.470
*IF DEF,MPP ORL1F404.392
C ORL1F404.393
C===================================================================== ORL1F404.394
C CALL TO SWAPBOUNDS FOR HALO UPDATE IN MPP VERSION ORL1F404.395
C===================================================================== ORL1F404.396
ORL1F404.397
CALL SWAPBOUNDS
(EM,IMT,JMT,O_EW_HALO,O_NS_HALO,1) ORL1F404.398
ORL1F404.399
*ENDIF ORL1F404.400
*ENDIF ORH4F402.38
ORH4F402.39
ORH1F305.151
ORH1F305.153
9999 CONTINUE ORH6F404.504
ORH6F404.505
RETURN OSETCON.621
END OSETCON.622
*ENDIF @DYALLOC.4257