*IF DEF,CONTROL,AND,DEF,ATMOS,AND,DEF,OCEAN TRANA2O1.2
C ******************************COPYRIGHT****************************** GTS2F400.10495
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.10496
C GTS2F400.10497
C Use, duplication or disclosure of this code is subject to the GTS2F400.10498
C restrictions as set forth in the contract. GTS2F400.10499
C GTS2F400.10500
C Meteorological Office GTS2F400.10501
C London Road GTS2F400.10502
C BRACKNELL GTS2F400.10503
C Berkshire UK GTS2F400.10504
C RG12 2SZ GTS2F400.10505
C GTS2F400.10506
C If no contract has been raised with this copy of the code, the use, GTS2F400.10507
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.10508
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.10509
C Modelling at the above address. GTS2F400.10510
C ******************************COPYRIGHT****************************** GTS2F400.10511
C GTS2F400.10512
C*LL TRANA2O1.3
CLL SUBROUTINE TRANSA2O TRANA2O1.4
CLL ------------------- TRANA2O1.5
CLL TRANA2O1.6
CLL THIS ROUTINE FORMS PART OF SYSTEM COMPONENT D87 (TASK D2), TRANA2O1.7
CLL AND IS CALLED BY SWAP_A2O. IT TRANSFERS DATA NEEDED FOR TRANA2O1.8
CLL COUPLING FROM THE ATMOSPHERE TO THE OCEAN, PERFORMING VARIOUS TRANA2O1.9
CLL MANIPULATIONS ON THE WAY. IT CAN BE COMPILED BY CFT77, BUT DOES TRANA2O1.10
CLL NOT CONFORM TO THE ANSI FORTRAN77 STANDARDS, BECAUSE OF THE TRANA2O1.11
CLL INLINE COMMENTS. THREE CODE SWITCHES: TRANGRID, SEAICE AND TRANA2O1.12
CLL RIVERS, ACTIVATE CODE FOR USE WHEN SPATIAL INTERPOLATION IS TRANA2O1.13
CLL REQUIRED, WHEN SEAICE IS PRESENT AND WHEN RIVER RUNOFF IS TO BE TRANA2O1.14
CLL FED INTO THE OCEAN, RESPECTIVELY. TRANA2O1.15
CLL TRANA2O1.16
CLL J.M.Gregory/T.C.Johns TRANA2O1.17
CLL TRANA2O1.18
CLL MODEL MODIFICATION HISTORY FROM MODEL VERSION 3.0: TRANA2O1.19
CLL VERSION DATE TRANA2O1.20
CLL 3.1 04/01/93 Correct call to POST_H_INT for river runoff (NKT). NT040193.1
! 4.0 01/09/95 Replace calls to H_INT with calls to H_INT_BL UDG1F400.358
! Authorr D.M. Goddard UDG1F400.359
CLL 4.1 23.5.96 J.M.Gregory Use FKMP and FKMQ to deduce masks, CJG6F401.26
CLL instead of surface ocean fields. Support area- CJG6F401.27
CLL averaging for the T grid, under DEF,AVER_TAO. CJG6F401.28
CLL 4.1 13/06/96 Replace calls to H_INT_BL to correct the order CCC1F401.1
CLL and naming of variables in the call. CCC1F401.2
CLL 4.3 19.3.97 Added extra code, under *DEF,CADJ_UAO, OOM3F403.1
CLL to enable masking out of atmos land points when OOM3F403.2
CLL calculating ocean windstress OOM3F403.3
CLL 4.5 1/07/98 Include code to pass atmospheric surface CO2 CCN1F405.177
CLL C.D.Jones CCN1F405.178
CLL TRANA2O1.21
CLL FOLLOWS DOCUMENTATION PAPER 3, VERSION 1 FOR STANDARDS. TRANA2O1.22
CLLEND TRANA2O1.23
C*L TRANA2O1.24
C----------------------------------------------------------------- TRANA2O1.25
SUBROUTINE TRANSA2O(USTRSIN,USTRSOUT,VSTRSIN, 2,80CJG6F401.29
+ VSTRSOUT,WMIXIN,WMIXOUT,SOLARIN,BLUEIN,BLUEOUT,EVAP,LONGWAVE, TRANA2O1.27
+ SENSIBLE,HEATFLUX,SNOWLS,SNOWCONV,RAINLS,RAINCONV,PMINUSE,RMDI, TRANA2O1.28
+ LC, TRANA2O1.29
*IF DEF,SEAICE TRANA2O1.30
+ AICE,SUBLMIN,BTMLTIN,TPMLTIN, TRANA2O1.31
+ SNOWOUT,SUBLMOUT,BTMLTOUT,TPMLTOUT, TRANA2O1.32
*ENDIF TRANA2O1.33
*IF DEF,TRANGRID TRANA2O1.34
& XUO,XTO,YUO,YTO,XTA,XUA,YTA,YUA, TRANA2O1.35
*ENDIF TRANA2O1.36
*IF DEF,TRANGRID,OR,DEF,RIVERS TRANA2O1.37
& AMASKTP, TRANA2O1.38
*ENDIF TRANA2O1.39
*IF DEF,RIVERS TRANA2O1.40
+ RUNOFFIN,OCENTPTS,RIVEROUT,LAND_FIELD, TRANA2O1.41
+ COS_P_LATITUDE, TRANA2O1.42
*ENDIF TRANA2O1.43
& ATMCO2, ATMCO2_OUT, CO2_ICOLS, CO2_JROWS, CO2_IMT, CO2_JMT, CCN1F405.179
+ IMT,JMT,JMTM1,ICOLS,JROWS,JROWSM1 CJG6F401.30
&,maxl,fkmp,fkmq,INVERT,CYCLIC,GLOBAL CJG6F401.31
& ,icode,cmessage) CJG6F401.32
C TRANA2O1.45
C THIS ROUTINE DEALS IN TURN WITH THE VARIOUS FIELDS TO BE TRANS- TRANA2O1.46
C FERRED FROM ATMOSPHERE TO OCEAN. THOSE ON THE U GRIDS (THE WIND TRANA2O1.47
C STRESSES) COME FIRST, FOLLOWED BY THOSE ON THE T GRIDS. TRANA2O1.48
C SECTIONS 9 TO 12 ARE ONLY PRESENT WHEN THE SEAICE SWITCH IS ON. TRANA2O1.49
C SECTION 8 IS ONLY PRESENT WHEN THE RIVERS SWITCH IS TURNED ON. TRANA2O1.50
C THE FLOW OF CONTROL IS STRAIGHTFORWARD. TRANA2O1.51
C TRANA2O1.52
IMPLICIT NONE TRANA2O1.53
C TRANA2O1.54
*CALL CNTLATM
CCN1F405.180
*CALL CCARBON
CCN1F405.181
INTEGER TRANA2O1.55
+ IMT, ! IN NO. OF COLUMNS IN OCEAN TRANA2O1.56
+ JMT, ! IN NO. OF ROWS IN OCEAN (TS GRID) TRANA2O1.57
+ JMTM1, ! IN NO. OF ROWS IN OCEAN (UV GRID) TRANA2O1.58
+ ICOLS, ! IN NO. OF COLUMNS IN ATMOSPHERE TRANA2O1.59
+ JROWS, ! IN NO. OF ROWS IN ATMOSPHERE (TP GRID) TRANA2O1.60
+ JROWSM1 ! IN NO. OF ROWS IN ATMOSPHERE (UV GRID) TRANA2O1.61
&,MAXL ! IN max. list length for area-averaging CJG6F401.33
&,CO2_ICOLS,CO2_JROWS ! IN CO2 array dimensions CCN1F405.182
&,CO2_IMT, CO2_JMT CCN1F405.183
C TRANA2O1.62
LOGICAL TRANA2O1.63
+ INVERT, ! IN TRUE WHEN ROW INVERSION IS REQUIRED TRANA2O1.64
+ CYCLIC ! IN TRUE WHEN THE OCEAN MODEL HAS CYCLIC TRANA2O1.65
+ ! BOUNDARY CONDITIONS AT EW BOUNDARIES. TRANA2O1.66
&,GLOBAL ! IN TRUE when ocean is global TRANA2O1.67
C TRANA2O1.68
REAL TRANA2O1.69
+ USTRSIN(ICOLS,JROWSM1),! IN ZONAL WIND STRESS FROM ATMOSPHERE TRANA2O1.72
+ VSTRSIN(ICOLS,JROWSM1),! IN MERID WIND STRESS FROM ATMOSPHERE TRANA2O1.73
+ WMIXIN(ICOLS,JROWS), ! IN WIND MIXING POWER FROM ATMOSPHERE TRANA2O1.74
+ SOLARIN(ICOLS,JROWS), ! IN NET DOWNWARD SHORTWAVE FLUX FROM THE TRANA2O1.75
+ ! ATMOSPHERE (ALL FREQUENCIES). TRANA2O1.76
+ BLUEIN(ICOLS,JROWS), ! IN NET DOWNWARD SHORTWAVE FLUX IN TRANA2O1.77
+ ! 'BLUE' FREQUENCY BAND ONLY. (SEE SECT4) TRANA2O1.78
+ EVAP(ICOLS,JROWS), ! IN SURFACE EVAPORATION FROM THE WATER TRANA2O1.79
+ ! FRACTION OF ALL OCEAN POINTS. AT SEA-ICE TRANA2O1.80
+ ! POINTS, THIS IS WEIGHTED BY THE TRANA2O1.81
+ ! FRACTIONAL LEAD AREA. TRANA2O1.82
+ LONGWAVE(ICOLS,JROWS),! IN NET DOWNWARD LONGWAVE HEAT FLUX. TRANA2O1.83
+ SENSIBLE(ICOLS,JROWS),! IN SENSIBLE HEAT FLUX (+VE UPWARD) FOR TRANA2O1.84
+ ! THE WATER FRACTION OF ALL OCEAN POINTS. TRANA2O1.85
+ ! AREA-WEIGHTED AT SEA-ICE POINTS. TRANA2O1.86
+ SNOWLS(ICOLS,JROWS), ! IN LARGE-SCALE SNOWFALL RATE TRANA2O1.87
+ SNOWCONV(ICOLS,JROWS),! IN CONVECTIVE SNOWFALL RATE TRANA2O1.88
+ RAINLS(ICOLS,JROWS), ! IN LARGE-SCALE RAINFALL RATE TRANA2O1.89
+ RAINCONV(ICOLS,JROWS),! IN CONVECTIVE RAINFALL RATE TRANA2O1.90
+ RMDI, ! IN MISSING DATA INDICATOR TRANA2O1.91
+ LC ! IN LATENT HEAT OF CONDENSATION TRANA2O1.92
&,FKMP(IMT,JMT) ! IN number of levels at ocean T points CJG6F401.34
&,FKMQ(IMT,JMT) ! IN number of levels at ocean U points CJG6F401.35
*IF DEF,SEAICE TRANA2O1.93
REAL TRANA2O1.94
+ AICE(ICOLS,JROWS), ! IN SEAICE CONCENTRATION TRANA2O1.95
+ SUBLMIN(ICOLS,JROWS), ! IN SUBLIMATION TRANA2O1.96
+ BTMLTIN(ICOLS,JROWS), ! IN DIFFUSIVE HEAT FLUX THROUGH ICE TRANA2O1.97
+ ! (POSITIVE DOWNWARDS) TRANA2O1.98
+ TPMLTIN(ICOLS,JROWS) ! IN SEAICE TOP MELTING HEAT FLUX TRANA2O1.99
*ENDIF TRANA2O1.100
*IF DEF,TRANGRID TRANA2O1.101
REAL TRANA2O1.102
& XUO(0:IMT) ! Ocean UV longitude coordinates TRANA2O1.103
&,XTO(IMT) ! Ocean TS longitude coordinates TRANA2O1.104
&,YUO(0:JMT) ! Ocean UV latitude coordinates TRANA2O1.105
&,YTO(JMT) ! Ocean TS latitude coordinates TRANA2O1.106
&,XTA(ICOLS+1) ! Atmosphere TP longitude coordinates TRANA2O1.107
&,XUA(0:ICOLS) ! Atmosphere UV longitude coordinates TRANA2O1.108
&,YTA(JROWS) ! Atmosphere TP latitude coordinates TRANA2O1.109
&,YUA(0:JROWS) ! Atmosphere UV latitude coordinates TRANA2O1.110
*ENDIF TRANA2O1.111
*IF DEF,TRANGRID,OR,DEF,RIVERS TRANA2O1.112
LOGICAL TRANA2O1.113
+ AMASKTP(ICOLS,JROWS) ! IN ATMOS MODEL LAND-SEA MASK FOR TP GRID. TRANA2O1.114
*ENDIF TRANA2O1.115
*IF DEF,RIVERS TRANA2O1.116
INTEGER TRANA2O1.117
+ LAND_FIELD ! IN NUMBER OF LAND POINTS IN ATMOS FIELD TRANA2O1.118
+,OCENTPTS(LAND_FIELD) ! IN COORDINATE INDEX TO OUTFLOW POINT (2D) TRANA2O1.119
REAL TRANA2O1.120
+ RUNOFFIN(ICOLS,JROWS) ! IN TOTAL RATE OF RUNOFF AT LAND POINTS TRANA2O1.121
C FOR EACH LAND POINT (KG M-2 S-1) TRANA2O1.122
C (THIS IS ZERO AT SEA POINTS) TRANA2O1.123
+,COS_P_LATITUDE(ICOLS,JROWS) ! IN COSINE OF LATITUDE AT P POINTS TRANA2O1.124
*ENDIF TRANA2O1.125
&,ATMCO2(CO2_ICOLS,CO2_JROWS) ! IN ATMOS CO2 CONC CCN1F405.184
integer CJG6F401.36
& icode ! OUT error code CJG6F401.37
C CJG6F401.38
character*80 cmessage ! OUT error message CJG6F401.39
C CJG6F401.40
REAL TRANA2O1.126
+ USTRSOUT(IMT,JMTM1), ! OUT ZONAL WIND STRESS FOR OCEAN TRANA2O1.127
+ VSTRSOUT(IMT,JMTM1), ! OUT MERID WIND STRESS FOR OCEAN TRANA2O1.128
+ WMIXOUT(IMT,JMT), ! OUT WIND MIXING POWER FOR OCEAN TRANA2O1.129
+ BLUEOUT(IMT,JMT), ! OUT PENETRATING COMPONENT OF SOLAR HEAT TRANA2O1.130
+ ! FLUX FOR OCEAN. TRANA2O1.131
+ HEATFLUX(IMT,JMT), ! OUT NON-PENETRATIVE HEAT FLUX TRANA2O1.132
+ PMINUSE(IMT,JMT) ! OUT PRECIPITATION LESS EVAPORATION TRANA2O1.133
*IF DEF,SEAICE TRANA2O1.134
REAL TRANA2O1.135
+ SNOWOUT(IMT,JMT), ! OUT SNOWFALL RATE FOR OCEAN TRANA2O1.136
+ SUBLMOUT(IMT,JMT), ! OUT SUBLIMATION RATE TRANA2O1.137
+ BTMLTOUT(IMT,JMT), ! OUT DIFFUSIVE HEAT FLUX THROUGH ICE TRANA2O1.138
+ ! (POSITIVE DOWNWARDS) TRANA2O1.139
+ TPMLTOUT(IMT,JMT) ! OUT SEAICE TOP MELTING HEAT FLUX TRANA2O1.140
*ENDIF TRANA2O1.141
*IF DEF,RIVERS TRANA2O1.142
REAL TRANA2O1.143
+ RIVEROUT(IMT,JMT) ! OUT TOTAL RIVER OUTFLOW AT COASTAL PTS. TRANA2O1.144
C INTEGRATED OVER RIVER BASINS (KG M-2 S-1) TRANA2O1.145
*ENDIF TRANA2O1.146
&,ATMCO2_OUT(CO2_IMT,CO2_JMT) ! OUT ATMOS CO2 CONC CCN1F405.185
CCN1F405.186
C* TRANA2O1.147
C EXTERNAL SUBPROGRAMS CALLED TRANA2O1.148
C TRANA2O1.149
EXTERNAL ROWSWAP,CYCLICBC,PRE_AREAVER,DO_AREAVER CJG6F401.41
*IF DEF,TRANGRID TRANA2O1.151
EXTERNAL H_INT_CO,H_INT_BL,COAST_AJ,POST_H_INT UDG1F400.360
*ELSE TRANA2O1.153
EXTERNAL COPYA2O TRANA2O1.154
external chk1box OJG1F403.56
*ENDIF TRANA2O1.155
C TRANA2O1.156
C LOCAL VARIABLES TRANA2O1.157
C TRANA2O1.158
INTEGER TRANA2O1.159
+ I,J,K,L,LANDPT, ! LOOP COUNTERS TRANA2O1.160
+ IJMT, ! NUMBER OF POINTS ON OCEAN TS GRID. TRANA2O1.161
+ IJMTM1, ! NUMBER OF POINTS ON OCEAN UV GRID. TRANA2O1.162
+ IRT,IRU ! NUMBER OF COLUMNS OF DISTINCT VALUES TRANA2O1.163
+ ! on ocean TS and UV grids TRANA2O1.164
C TRANA2O1.165
LOGICAL OMASK(IMT,JMT) ! FALSE IF POINT IS SEA IN OCEAN MODEL TRANA2O1.166
REAL TRANA2O1.167
+ WORK(IMT,JMT), ! WORK ARRAY (ON OCEAN GRID). TRANA2O1.168
+ WORKA(ICOLS,JROWS) ! WORK ARRAY (ON ATMOSPHERE GRID). TRANA2O1.169
*IF DEF,TRANGRID TRANA2O1.170
C TRANA2O1.171
C N.B. THE NEXT 8 ARRAYS ARE USED FOR BOTH TYPES OF GRID POINT. TRANA2O1.172
C THEY ARE FIRST FILLED WITH THE COORDINATES OF UV POINTS, AND TRANA2O1.173
C THE INTERPOLATION WEIGHTS THAT APPLY TO THEM. AFTER SECTION 1 TRANA2O1.174
C THEY ARE REUSED TO STORE THE CORRESPONDING INFORMATION ABOUT TRANA2O1.175
C THE TS GRID. TRANA2O1.176
C TRANA2O1.177
REAL TRANA2O1.178
+ ATLAMBDA(ICOLS), ! LONGITUDE COORDS OF COLUMNS IN ATMOSPHERIC TRANA2O1.179
+ ! GRID, IN DEGREES. TRANA2O1.180
+ ATPHI(JROWS), ! LATITUDE COORDS OF ROWS IN ATMOSPHERIC TRANA2O1.181
+ ! GRID, IN DEGREES. TRANA2O1.182
+ OCLAMBDA(IMT*JMT), ! LONGITUDE OF SEA POINTS ON OCEAN GRID TRANA2O1.183
+ OCPHI(IMT*JMT), ! LATITUDE OF SEA POINTS ON OCEAN GRID TRANA2O1.184
+ WEIGHTTR(IMT,JMT), ! WEIGHTS OF 'TOP RIGHT' CORNERS TRANA2O1.185
+ WEIGHTTL(IMT,JMT), ! WEIGHTS OF 'TOP LEFT' CORNERS TRANA2O1.186
+ WEIGHTBR(IMT,JMT), ! WEIGHTS OF 'BOTTOM RIGHT' CORNERS TRANA2O1.187
+ WEIGHTBL(IMT,JMT) ! WEIGHTS OF 'BOTTOM LEFT' CORNERS TRANA2O1.188
C TRANA2O1.189
INTEGER TRANA2O1.190
+ INDEXO(IMT*JMT), ! INDEX OF COASTAL POINTS (FROM COAST_AJ). TRANA2O1.191
+ INDEXA(IMT*JMT), ! INDEX OF CORRESPONDING ATMOSPHERE POINTS. TRANA2O1.192
+ NCOASTAL ! NUMBER OF COASTAL POINTS DETECTED. TRANA2O1.193
&,OMINT(IMT*JMT) ! INTEGER LAND-SEA MASK ON OCEAN GRID TRANA2O1.194
&,AMINT(ICOLS,JROWS) ! INTEGER LAND-SEA MASK ON ATMOSPHERE GRID TRANA2O1.195
&,SEAPOINTS ! NUMBER OF SEA POINTS IN OCEAN MASK TRANA2O1.196
&,OCPOINTS ! NUMBER OF POINTS IN OCEAN GRID TRANA2O1.197
&,OCPOINT(IMT*JMT) ! LIST OF SEA POINTS IN OCEAN GRID TRANA2O1.198
&,ATPOINTS ! NUMBER OF POINTS IN ATMOSPHERE GRID TRANA2O1.199
C TRANA2O1.200
C THE NEXT FOUR VARIABLES ARE NECESSARY TO SATISFY THE ARGUMENT TRANA2O1.201
C LIST OF COAST_AJ. THEY ARE NOT USED FOR ANYTHING IN THIS ROUTINE. TRANA2O1.202
C TRANA2O1.203
INTEGER TRANA2O1.204
+ IDUMMY1(IMT,JMT), ! DUMMY ARGUMENT FOR CALL TO COAST_AJ. TRANA2O1.205
+ IDUMMY2(IMT,JMT), ! DUMMY ARGUMENT FOR CALL TO COAST_AJ. TRANA2O1.206
+ N1, ! DUMMY ARGUMENT FOR CALL TO COAST_AJ. TRANA2O1.207
+ N2 ! DUMMY ARGUMENT FOR CALL TO COAST_AJ. TRANA2O1.208
C TRANA2O1.209
INTEGER TRANA2O1.210
+ INDEXBL(IMT,JMT), ! GATHER INDICES FOR INTERPOLATION. TRANA2O1.211
+ INDEXBR(IMT,JMT) ! GATHER INDICES FOR INTERPOLATION. TRANA2O1.212
*IF DEF,AVER_TAO,OR,DEF,CSRV_TAO OJG1F403.57
C CJG6F401.43
C Local arrays required for area-averaging CJG6F401.44
C CJG6F401.45
integer CJG6F401.46
& lenl ! length of lists on the target grid CJG6F401.47
&,index_arav(maxl) ! list of source boxes for target boxes OJG1F403.58
real CJG6F401.51
& weight(maxl) ! weights for source boxes OJG1F403.59
&,ocyd(jmt+1) ! O latitudes in decreasing order CJG6F401.53
logical CJG6F401.54
& omaskd(imt,jmt) ! O mask with lats in decreasing order CJG6F401.55
*IF DEF,AVER_TAO OJG1F403.60
integer OJG1F403.61
& count_o(imt*jmt) ! number of A boxes per O box OJG1F403.62
&,base_o(imt*jmt) ! first index in A box list OJG1F403.63
*ELSE OJG1F403.64
integer OJG1F403.65
& count_a(icols*jrows) ! number of O boxes per A box OJG1F403.66
&,base_a(icols*jrows) ! first index in O box list OJG1F403.67
*ENDIF CJG6F401.56
*ENDIF TRANA2O1.213
*ENDIF OJG1F403.68
LOGICAL AMASKUV(ICOLS,JROWSM1) ! ATMOSPHERE MASK ON UV GRID OOM3F403.4
C TRANA2O1.214
C ---------------------------------------------------------- TRANA2O1.215
C TRANA2O1.216
CL Section 0: No. of distinct columns in ocean TRANA2O1.217
C TRANA2O1.218
IF (CYCLIC) THEN TRANA2O1.219
IRT=IMT-2 TRANA2O1.220
IRU=IRT TRANA2O1.221
ELSE TRANA2O1.222
IRT=IMT TRANA2O1.223
IRU=IMT-1 TRANA2O1.224
ENDIF TRANA2O1.225
C TRANA2O1.226
CL SECTION 1: Preparation for U grids TRANA2O1.227
C TRANA2O1.228
C USE THE OCEAN NUMBER OF UV LEVELS TO IDENTIFY THE CJG6F401.57
C GRID POINTS WHERE WIND STRESSES ARE REQUIRED, AND SET THE TRANA2O1.230
C MASK ARRAY TO .FALSE. AT THOSE POINTS, AND .TRUE. ELSEWHERE. TRANA2O1.231
C (THIS CONVENTION IS CHOSEN IN ORDER TO BE CONSISTENT WITH TRANA2O1.232
C THE CONVENTION IN THE ATMOSPHERIC MODEL.) TRANA2O1.233
C TRANA2O1.234
DO 30 J = 1,JMTM1 TRANA2O1.235
DO 25 I = 1,IMT TRANA2O1.236
OMASK(I,J) = FKMQ(I,J).LT.0.1 CJG6F401.58
25 CONTINUE TRANA2O1.238
30 CONTINUE TRANA2O1.239
C OOM3F403.5
*IF DEF,CADJ_UAO OOM3F403.6
C set up logical land/sea mask on atmosphere UV grid OOM3F403.7
DO J=1,JROWSM1 OOM3F403.8
DO I=1,ICOLS-1 OOM3F403.9
AMASKUV(I,J)=AMASKTP(I,J).OR.AMASKTP(I+1,J) OOM3F403.10
+ .OR.AMASKTP(I,J+1).OR.AMASKTP(I+1,J+1) OOM3F403.11
ENDDO OOM3F403.12
AMASKUV(ICOLS,J)=AMASKTP(ICOLS,J).OR.AMASKTP(1,J) OOM3F403.13
+ .OR.AMASKTP(ICOLS,J+1).OR.AMASKTP(1,J+1) OOM3F403.14
ENDDO OOM3F403.15
*ENDIF OOM3F403.16
C TRANA2O1.240
*IF DEF,TRANGRID TRANA2O1.241
C TRANA2O1.242
C SET UP THE ARRAYS OF COORDINATES AND INDICES FOR INTERPOLATION TRANA2O1.243
C TRANA2O1.244
OCPOINTS=0 TRANA2O1.245
SEAPOINTS=0 TRANA2O1.246
DO 1010 J=1,JMTM1 TRANA2O1.247
DO 1020 I=1,IMT TRANA2O1.248
OCPOINTS=OCPOINTS+1 TRANA2O1.249
IF (.NOT.OMASK(I,J).AND.I.LE.IRU) THEN TRANA2O1.250
SEAPOINTS=SEAPOINTS+1 TRANA2O1.251
OCLAMBDA(SEAPOINTS)=XUO(I) TRANA2O1.252
OCPHI(SEAPOINTS)=YUO(J) TRANA2O1.253
OCPOINT(SEAPOINTS)=OCPOINTS TRANA2O1.254
*IF DEF,CADJ_UAO OOM3F403.17
OMINT(SEAPOINTS)=0 OOM3F403.18
*ENDIF OOM3F403.19
ENDIF TRANA2O1.255
1020 CONTINUE TRANA2O1.256
1010 CONTINUE TRANA2O1.257
DO 1030 I=1,ICOLS TRANA2O1.258
ATLAMBDA(I)=XUA(I) TRANA2O1.259
1030 CONTINUE TRANA2O1.260
DO 1040 J=1,JROWSM1 TRANA2O1.261
ATPHI(J)=YUA(J) TRANA2O1.262
1040 CONTINUE TRANA2O1.263
ATPOINTS=ICOLS*JROWSM1 TRANA2O1.264
C TRANA2O1.265
*IF DEF,CADJ_UAO OOM3F403.20
C CONSTRUCT AN INTEGER LAND-SEA MASK ON THE ATMOSPHERE UV GRID OOM3F403.21
C OOM3F403.22
DO J=1,JROWSM1 OOM3F403.23
DO I=1,ICOLS OOM3F403.24
IF (AMASKUV(I,J)) THEN OOM3F403.25
AMINT(I,J)=1 OOM3F403.26
ELSE OOM3F403.27
AMINT(I,J)=0 OOM3F403.28
ENDIF OOM3F403.29
ENDDO OOM3F403.30
ENDDO OOM3F403.31
*ENDIF OOM3F403.32
C FIND THE ARRAYS OF INTERPOLATION WEIGHTS AND GATHER INDICES TRANA2O1.266
C TRANA2O1.267
CALL H_INT_CO
(INDEXBL,INDEXBR,WEIGHTTR,WEIGHTBR,WEIGHTTL, TRANA2O1.268
+ WEIGHTBL,ATLAMBDA,ATPHI,OCLAMBDA,OCPHI,ICOLS,JROWSM1, TRANA2O1.269
+ SEAPOINTS,.TRUE.) TRANA2O1.270
C TRANA2O1.271
*IF DEF,CADJ_UAO OOM3F403.33
C OOM3F403.34
C FIND THE GATHER INDICES FOR RESETTING VALUES NEAR THE OOM3F403.35
C COASTLINES, AFTER INTERPOLATIONS. OOM3F403.36
C OOM3F403.37
CALL COAST_AJ
(INDEXBL,INDEXBR,WEIGHTTR,WEIGHTBR,WEIGHTTL, OOM3F403.38
+ WEIGHTBL,ICOLS,JROWSM1,SEAPOINTS,AMINT,OMINT,INDEXO,INDEXA, OOM3F403.39
+ NCOASTAL,.TRUE.,IDUMMY1,N1,IDUMMY2,N2) OOM3F403.40
*ENDIF OOM3F403.41
*IF -DEF,CADJ_UAO OOM3F403.42
C Set number of coastal points to zero for calls to POST_H_INT OOM3F403.43
NCOASTAL=0 OOM3F403.44
*ENDIF OOM3F403.45
*ENDIF TRANA2O1.272
C TRANA2O1.273
CL SECTION 2: Transfer of wind stress TRANA2O1.274
*IF DEF,TRANGRID TRANA2O1.275
C NOTE THAT THE COMPONENTS OF WIND STRESS ARE INTERPOLATED AS IF TRANA2O1.276
C THEY WERE SCALARS, WHICH IS NOT QUITE CORRECT. TRANA2O1.277
C NOTE THAT WIND STRESS VALUES ARE NOT RESET NEAR COASTS USING TRANA2O1.278
C COAST_AJ. THIS MAY HAVE TO BE RECONSIDERED IF POOR RESULTS TRANA2O1.279
C ARE OBTAINED. The first part of POST_H_INT is effectively TRANA2O1.280
C switched off by specifying 0 coastal points. TRANA2O1.281
*ENDIF TRANA2O1.282
C TRANA2O1.283
CL Section 2.1: ZONAL COMPONENT. TRANA2O1.284
C TRANA2O1.285
*IF DEF,TRANGRID TRANA2O1.286
CALL H_INT_BL
(JROWSM1,ICOLS,SEAPOINTS,INDEXBL,INDEXBR,USTRSIN CCC1F401.3
&, WEIGHTBL,WEIGHTBR,WEIGHTTL,WEIGHTTR,WORK) UDG1F400.362
C perform coastal adjustment with land points masked out OOM3F403.46
CALL POST_H_INT
(NCOASTAL,INDEXA,INDEXO,ATPOINTS,USTRSIN,AMINT OOM3F403.47
&,SEAPOINTS,WORK,OCPOINT,RMDI,OCPOINTS,USTRSOUT) OOM3F403.48
OOM3F403.49
*ELSE TRANA2O1.291
CALL COPYA2O
(ICOLS,JROWSM1,USTRSIN,INVERT,IMT,.FALSE.,OMASK TRANA2O1.292
&,USTRSOUT) TRANA2O1.293
*ENDIF TRANA2O1.294
IF (CYCLIC) CALL CYCLICBC
(USTRSOUT,IMT,JMTM1) TRANA2O1.295
C TRANA2O1.296
C Section 2.2: MERIDIONAL COMPONENT. TRANA2O1.297
C TRANA2O1.298
*IF DEF,TRANGRID TRANA2O1.299
CALL H_INT_BL
(JROWSM1,ICOLS,SEAPOINTS,INDEXBL,INDEXBR,VSTRSIN CCC1F401.4
&, WEIGHTBL,WEIGHTBR,WEIGHTTL,WEIGHTTR,WORK) UDG1F400.364
C perform coastal adjustment with land points masked out OOM3F403.50
CALL POST_H_INT
(NCOASTAL,INDEXA,INDEXO,ATPOINTS,VSTRSIN,AMINT OOM3F403.51
&,SEAPOINTS,WORK,OCPOINT,RMDI,OCPOINTS,VSTRSOUT) OOM3F403.52
OOM3F403.53
*ELSE TRANA2O1.304
CALL COPYA2O
(ICOLS,JROWSM1,VSTRSIN,INVERT,IMT,.FALSE.,OMASK TRANA2O1.305
&,VSTRSOUT) TRANA2O1.306
*ENDIF TRANA2O1.307
IF (CYCLIC) CALL CYCLICBC
(VSTRSOUT,IMT,JMTM1) TRANA2O1.308
C TRANA2O1.309
CL SECTION 3: PREPARATIONS FOR T GRIDS TRANA2O1.310
C TRANA2O1.311
C USE THE OCEAN MODEL NUMBER OF TS LEVELS TO IDENTIFY THE CJG6F401.59
C GRID POINTS WHERE HEAT FLUXES ETC ARE REQUIRED, AND SET THE TRANA2O1.313
C MASK ARRAY TO .FALSE. AT THOSE POINTS, AND .TRUE. ELSEWHERE. TRANA2O1.314
C TRANA2O1.315
DO 210 J = 1,JMT TRANA2O1.316
DO 205 I = 1,IMT TRANA2O1.317
OMASK(I,J) = FKMP(I,J).LT.0.1 CJG6F401.60
205 CONTINUE TRANA2O1.319
210 CONTINUE TRANA2O1.320
C TRANA2O1.321
*IF DEF,TRANGRID TRANA2O1.322
*IF -DEF,AVER_TAO CJG6F401.61
C TRANA2O1.323
C SET UP THE ARRAYS OF COORDINATES AND INDICES FOR INTERPOLATION TRANA2O1.324
C CONSTRUCT AN INTEGER LAND-SEA MASK ON THE OCEAN GRID TRANA2O1.325
C TRANA2O1.326
OCPOINTS=0 TRANA2O1.327
SEAPOINTS=0 TRANA2O1.328
DO 1050 J=1,JMT TRANA2O1.329
DO 1060 I=1,IMT TRANA2O1.330
OCPOINTS=OCPOINTS+1 TRANA2O1.331
IF (.NOT.OMASK(I,J).AND.I.LE.IRT) THEN TRANA2O1.332
SEAPOINTS=SEAPOINTS+1 TRANA2O1.333
OCLAMBDA(SEAPOINTS)=XTO(I) TRANA2O1.334
OCPHI(SEAPOINTS)=YTO(J) TRANA2O1.335
OCPOINT(SEAPOINTS)=OCPOINTS TRANA2O1.336
OMINT(SEAPOINTS)=0 TRANA2O1.337
ENDIF TRANA2O1.338
1060 CONTINUE TRANA2O1.339
1050 CONTINUE TRANA2O1.340
DO 1070 I=1,ICOLS TRANA2O1.341
ATLAMBDA(I)=XTA(I) TRANA2O1.342
1070 CONTINUE TRANA2O1.343
DO 1080 J=1,JROWS TRANA2O1.344
ATPHI(J)=YTA(J) TRANA2O1.345
1080 CONTINUE TRANA2O1.346
ATPOINTS=ICOLS*JROWS TRANA2O1.347
C TRANA2O1.348
C CONSTRUCT AN INTEGER LAND-SEA MASK ON THE ATMOSPHERE GRID TRANA2O1.349
C TRANA2O1.350
DO J=1,JROWS TRANA2O1.351
DO I=1,ICOLS TRANA2O1.352
IF (AMASKTP(I,J)) THEN TRANA2O1.353
AMINT(I,J)=1 TRANA2O1.354
ELSE TRANA2O1.355
AMINT(I,J)=0 TRANA2O1.356
ENDIF TRANA2O1.357
ENDDO TRANA2O1.358
ENDDO TRANA2O1.359
C TRANA2O1.360
C FIND THE ARRAYS OF INTERPOLATION WEIGHTS AND GATHER INDICES TRANA2O1.361
C TRANA2O1.362
CALL H_INT_CO
(INDEXBL,INDEXBR,WEIGHTTR,WEIGHTBR,WEIGHTTL, TRANA2O1.363
+ WEIGHTBL,ATLAMBDA,ATPHI,OCLAMBDA,OCPHI,ICOLS, TRANA2O1.364
+ JROWS,SEAPOINTS,.TRUE.) TRANA2O1.365
C TRANA2O1.366
C FIND THE GATHER INDICES FOR RESETTING VALUES NEAR THE TRANA2O1.367
C COASTLINES, AFTER INTERPOLATIONS. TRANA2O1.368
C TRANA2O1.369
CALL COAST_AJ
(INDEXBL,INDEXBR,WEIGHTTR,WEIGHTBR,WEIGHTTL, TRANA2O1.370
+ WEIGHTBL,ICOLS,JROWS,SEAPOINTS,AMINT,OMINT,INDEXO,INDEXA, TRANA2O1.371
+ NCOASTAL,.TRUE.,IDUMMY1,N1,IDUMMY2,N2) TRANA2O1.372
C TRANA2O1.373
*ENDIF OJG1F403.69
*IF DEF,AVER_TAO,OR,DEF,CSRV_TAO OJG1F403.70
C CJG6F401.63
C Fill array OCYD with the y-coordinates of the box boundaries CJG6F401.64
C in decreasing order, and OMASKD with the ocean mask with CJG6F401.65
C corresponding row order. CJG6F401.66
C CJG6F401.67
if (invert) then CJG6F401.68
do j=1,jmt+1 CJG6F401.69
ocyd(j)=yuo(jmt+1-j) CJG6F401.70
enddo CJG6F401.71
do j=1,jmt CJG6F401.72
do i=1,imt CJG6F401.73
omaskd(i,j)=omask(i,jmt+1-j) CJG6F401.74
enddo CJG6F401.75
enddo CJG6F401.76
else CJG6F401.77
do j=1,jmt+1 CJG6F401.78
ocyd(j)=yuo(j) CJG6F401.79
enddo CJG6F401.80
do j=1,jmt CJG6F401.81
do i=1,imt CJG6F401.82
omaskd(i,j)=omask(i,j) CJG6F401.83
enddo CJG6F401.84
enddo CJG6F401.85
endif CJG6F401.86
lenl=maxl CJG6F401.87
*IF DEF,AVER_TAO OJG1F403.71
call pre_areaver
(icols,xua,jrows,yua,.true.,icols,.false. CJG6F401.88
&,amasktp,irt,xuo,jmt,ocyd,global,.true. CJG6F401.89
&,lenl,count_o,base_o,index_arav,weight,icode,cmessage) OJG1F403.72
*ELSE OJG1F403.73
call pre_areaver
(irt,xuo,jmt,ocyd,global,imt,.false. OJG1F403.74
&,omaskd,icols,xua,jrows,yua,.true.,.true. OJG1F403.75
&,lenl,count_a,base_a,index_arav,weight,icode,cmessage) OJG1F403.76
call chk1box
(lenl,index_arav,irt,jmt,icode,cmessage) OJG1F403.77
if (icode.ne.0) return OJG1F403.78
*ENDIF OJG1F403.79
*ENDIF CJG6F401.91
*ENDIF TRANA2O1.374
C TRANA2O1.375
CL SECTION 4: WIND MIXING POWER. TRANA2O1.376
C TRANA2O1.377
*IF DEF,TRANGRID TRANA2O1.378
*IF -DEF,AVER_TAO CJG6F401.92
CALL H_INT_BL
(JROWS,ICOLS,SEAPOINTS,INDEXBL,INDEXBR,WMIXIN CCC1F401.5
&, WEIGHTBL,WEIGHTBR,WEIGHTTL,WEIGHTTR,WORK) UDG1F400.366
CALL POST_H_INT
(NCOASTAL,INDEXA,INDEXO,ATPOINTS,WMIXIN,AMINT TRANA2O1.381
&,SEAPOINTS,WORK,OCPOINT,RMDI,OCPOINTS,WMIXOUT) TRANA2O1.382
*IF DEF,CSRV_TAO OJG1F403.80
call do_areaver
(irt,jmt,imt,invert,wmixout,icols,jrows OJG1F403.81
&,count_a,base_a,icols,.false.,amasktp,index_arav,weight,2 OJG1F403.82
&,wmixin,icode,cmessage) OJG1F403.83
*ENDIF OJG1F403.84
*ELSE TRANA2O1.383
call do_areaver
(icols,jrows,icols,.false.,wmixin,irt,jmt OJG1F403.85
&,count_o,base_o,imt,.false.,omaskd,index_arav,weight,0 OJG1F403.86
&,work,icode,cmessage) CJG6F401.95
call copya2o
(imt,jmt,work,invert,imt,.false.,omask,wmixout) CJG6F401.96
*ENDIF CJG6F401.97
*ELSE CJG6F401.98
CALL COPYA2O
(ICOLS,JROWS,WMIXIN,INVERT,IMT,.FALSE.,OMASK TRANA2O1.384
&,WMIXOUT) TRANA2O1.385
*ENDIF TRANA2O1.386
IF (CYCLIC) CALL CYCLICBC
(WMIXOUT,IMT,JMT) TRANA2O1.387
C TRANA2O1.388
CL SECTION 5: PENETRATING COMPONENT OF SHORTWAVE RADIATION. TRANA2O1.389
C TRANA2O1.390
C BECAUSE BLUE LIGHT PENETRATES FURTHEST, THE VARIABLES INVOLVED TRANA2O1.391
C ARE CALLED BLUEIN AND BLUEOUT. HOWEVER, AT PRESENT (V1.1) TRANA2O1.392
C THEY ACTUALLY EMBRACE ALL THE VISIBLE SPECTRUM AS WELL AS TRANA2O1.393
C THE NEAR ULTRA-VIOLET AND THE VERY NEAR INFRA-RED. TRANA2O1.394
C THIS IS ALLOWED FOR IN THE OCEAN MODEL. TRANA2O1.395
C TRANA2O1.396
C *** NB: WHEN RUNNING COUPLED AT PRESENT (11/09/91), OR WITH ANCILLARY TRANA2O1.397
C *** FIELDS WHICH ONLY INCLUDE PENETR. SOLAR IN THE "SOL" FIELD, TRANA2O1.398
C *** THE INPUT NAMELIST CONSTANT "RSOL" SHOULD BE SET TO 0.0 AND TRANA2O1.399
C *** ETA2 SET TO THE PENETRATION SCALE FOR THE DEEPLY PENTRATING TRANA2O1.400
C *** RADIATION. TRANA2O1.401
C TRANA2O1.402
*IF DEF,TRANGRID TRANA2O1.403
*IF -DEF,AVER_TAO CJG6F401.99
CALL H_INT_BL
(JROWS,ICOLS,SEAPOINTS,INDEXBL,INDEXBR,BLUEIN CCC1F401.6
&, WEIGHTBL,WEIGHTBR,WEIGHTTL,WEIGHTTR,WORK) UDG1F400.368
CALL POST_H_INT
(NCOASTAL,INDEXA,INDEXO,ATPOINTS,BLUEIN,AMINT TRANA2O1.406
&,SEAPOINTS,WORK,OCPOINT,RMDI,OCPOINTS,BLUEOUT) TRANA2O1.407
*IF DEF,CSRV_TAO OJG1F403.87
call do_areaver
(irt,jmt,imt,invert,blueout,icols,jrows OJG1F403.88
&,count_a,base_a,icols,.false.,amasktp,index_arav,weight,2 OJG1F403.89
&,bluein,icode,cmessage) OJG1F403.90
*ENDIF OJG1F403.91
*ELSE TRANA2O1.408
call do_areaver
(icols,jrows,icols,.false.,bluein,irt,jmt OJG1F403.92
&,count_o,base_o,imt,.false.,omaskd,index_arav,weight,0 OJG1F403.93
&,work,icode,cmessage) CJG6F401.102
call copya2o
(imt,jmt,work,invert,imt,.false.,omask,blueout) CJG6F401.103
*ENDIF CJG6F401.104
*ELSE CJG6F401.105
CALL COPYA2O
(ICOLS,JROWS,BLUEIN,INVERT,IMT,.FALSE.,OMASK TRANA2O1.409
&,BLUEOUT) TRANA2O1.410
*ENDIF TRANA2O1.411
IF (CYCLIC) CALL CYCLICBC
(BLUEOUT,IMT,JMT) TRANA2O1.412
C TRANA2O1.413
CL SECTION 6: NON-PENETRATIVE SURFACE HEAT FLUXES. TRANA2O1.414
C TRANA2O1.415
C NOTICE THAT THE BLUE END OF THE SOLAR SPECTRUM HAS TO BE TRANA2O1.416
C SUBTRACTED OUT HERE. IT SHOULD ALSO BE POINTED OUT THAT AT TRANA2O1.417
C SEA-ICE POINTS (IF THEY EXIST), THE SENSIBLE HEAT FLUX AND TRANA2O1.418
C THE EVAPORATION WERE ALREADY WEIGHTED BY THE FRACTIONAL AREA TRANA2O1.419
C OF LEADS WHEN THEY WERE DIAGNOSED, SO NO SPECIAL CODE IS TRANA2O1.420
C NECESSARY HERE. TRANA2O1.421
C TRANA2O1.422
DO 510 J = 1,JROWS TRANA2O1.423
DO 505 I = 1,ICOLS TRANA2O1.424
WORKA(I,J) = SOLARIN(I,J) - BLUEIN(I,J) + LONGWAVE(I,J) TRANA2O1.425
+ - ( SENSIBLE(I,J) + LC*EVAP(I,J) ) TRANA2O1.426
505 CONTINUE TRANA2O1.427
510 CONTINUE TRANA2O1.428
*IF DEF,TRANGRID TRANA2O1.429
*IF -DEF,AVER_TAO CJG6F401.106
CALL H_INT_BL
(JROWS,ICOLS,SEAPOINTS,INDEXBL,INDEXBR,WORKA CCC1F401.7
&, WEIGHTBL,WEIGHTBR,WEIGHTTL,WEIGHTTR,WORK) UDG1F400.370
CALL POST_H_INT
(NCOASTAL,INDEXA,INDEXO,ATPOINTS,WORKA,AMINT TRANA2O1.432
&,SEAPOINTS,WORK,OCPOINT,RMDI,OCPOINTS,HEATFLUX) TRANA2O1.433
*IF DEF,CSRV_TAO OJG1F403.94
call do_areaver
(irt,jmt,imt,invert,heatflux,icols,jrows OJG1F403.95
&,count_a,base_a,icols,.false.,amasktp,index_arav,weight,1 OJG1F403.96
&,worka,icode,cmessage) OJG1F403.97
*ENDIF OJG1F403.98
*ELSE TRANA2O1.434
call do_areaver
(icols,jrows,icols,.false.,worka,irt,jmt OJG1F403.99
&,count_o,base_o,imt,.false.,omaskd,index_arav,weight,0 OJG1F403.100
&,work,icode,cmessage) CJG6F401.109
call copya2o
(imt,jmt,work,invert,imt,.false.,omask,heatflux) CJG6F401.110
*ENDIF CJG6F401.111
*ELSE CJG6F401.112
CALL COPYA2O
(ICOLS,JROWS,WORKA,INVERT,IMT,.FALSE.,OMASK TRANA2O1.435
&,HEATFLUX) TRANA2O1.436
*ENDIF TRANA2O1.437
IF (CYCLIC) CALL CYCLICBC
(HEATFLUX,IMT,JMT) TRANA2O1.438
C TRANA2O1.439
CL SECTION 7: PRECIPITATION MINUS EVAPORATION. TRANA2O1.440
C TRANA2O1.441
DO 610 J = 1,JROWS TRANA2O1.442
DO 605 I = 1,ICOLS TRANA2O1.443
WORKA(I,J) = SNOWLS(I,J) + SNOWCONV(I,J) TRANA2O1.444
*IF DEF,SEAICE TRANA2O1.445
C TRANA2O1.446
C SEA-ICE INTERCEPTS SNOWFALL, SO MULTIPLY THE SNOW CONTRIBUTION TRANA2O1.447
C TO 'P-E' BY THE AREAL FRACTION OF LEADS. NOTE THAT THIS IS NOT TRANA2O1.448
C DONE FOR RAINFALL, WHICH IS ASSUMED TO RUN OFF. ALSO, EVAPORATION TRANA2O1.449
C IS WEIGHTED BY THE LEAD AREA WHEN DIAGNOSED, SO THERE IS NO NEED TRANA2O1.450
C TO DO IT AGAIN HERE. TRANA2O1.451
C TRANA2O1.452
WORKA(I,J) = WORKA(I,J)*(1.0 - AICE(I,J)) TRANA2O1.453
*ENDIF TRANA2O1.454
WORKA(I,J) = WORKA(I,J) + RAINLS(I,J) + RAINCONV(I,J) TRANA2O1.455
+ - EVAP(I,J) TRANA2O1.456
605 CONTINUE TRANA2O1.457
610 CONTINUE TRANA2O1.458
C TRANA2O1.459
*IF DEF,TRANGRID TRANA2O1.460
*IF -DEF,AVER_TAO CJG6F401.113
CALL H_INT_BL
(JROWS,ICOLS,SEAPOINTS,INDEXBL,INDEXBR,WORKA CCC1F401.8
&, WEIGHTBL,WEIGHTBR,WEIGHTTL,WEIGHTTR,WORK) UDG1F400.372
CALL POST_H_INT
(NCOASTAL,INDEXA,INDEXO,ATPOINTS,WORKA,AMINT TRANA2O1.463
&,SEAPOINTS,WORK,OCPOINT,RMDI,OCPOINTS,PMINUSE) TRANA2O1.464
*IF DEF,CSRV_TAO OJG1F403.101
call do_areaver
(irt,jmt,imt,invert,pminuse,icols,jrows OJG1F403.102
&,count_a,base_a,icols,.false.,amasktp,index_arav,weight,1 OJG1F403.103
&,worka,icode,cmessage) OJG1F403.104
*ENDIF OJG1F403.105
*ELSE TRANA2O1.465
call do_areaver
(icols,jrows,icols,.false.,worka,irt,jmt OJG1F403.106
&,count_o,base_o,imt,.false.,omaskd,index_arav,weight,0 OJG1F403.107
&,work,icode,cmessage) CJG6F401.116
call copya2o
(imt,jmt,work,invert,imt,.false.,omask,pminuse) CJG6F401.117
*ENDIF CJG6F401.118
*ELSE CJG6F401.119
CALL COPYA2O
(ICOLS,JROWS,WORKA,INVERT,IMT,.FALSE.,OMASK TRANA2O1.466
&,PMINUSE) TRANA2O1.467
*ENDIF TRANA2O1.468
IF (CYCLIC) CALL CYCLICBC
(PMINUSE,IMT,JMT) TRANA2O1.469
*IF DEF,RIVERS TRANA2O1.470
C TRANA2O1.471
CL SECTION 8: RIVER OUTFLOW TRANA2O1.472
C TRANA2O1.473
C SUM THE RUNOFF FOR EACH OCEAN ENTRY POINT (K,L) :- TRANA2O1.474
C FOR EVERY LAND POINT (I,J) GET THE COORDINATES OF THE OCEAN ENTRY TRANA2O1.475
C POINT (K,L) FROM ARRAY OCENTPTS AND ADD THE RUNOFF FOR POINT (I,J) TRANA2O1.476
C TO POINT (K,L) - MULTIPLY BY THE RATIO OF AREAS OF SOURCE TO TARGET TRANA2O1.477
C GRIDBOX IN FORMING SUM; THIS GIVES A MASS FLUX PER UNIT AREA. TRANA2O1.478
C TRANA2O1.479
DO J=1,JROWS TRANA2O1.480
DO I=1,ICOLS TRANA2O1.481
WORKA(I,J)=0.0 TRANA2O1.482
ENDDO TRANA2O1.483
ENDDO TRANA2O1.484
LANDPT=0 TRANA2O1.485
DO J=1,JROWS TRANA2O1.486
DO I=1,ICOLS TRANA2O1.487
IF (AMASKTP(I,J)) THEN TRANA2O1.488
LANDPT=LANDPT+1 TRANA2O1.489
K=OCENTPTS(LANDPT)/100000 TRANA2O1.490
L=MOD(OCENTPTS(LANDPT),100000) TRANA2O1.491
WORKA(K,L)=WORKA(K,L)+RUNOFFIN(I,J)* TRANA2O1.492
& COS_P_LATITUDE(I,J)/COS_P_LATITUDE(K,L) TRANA2O1.493
ENDIF TRANA2O1.494
ENDDO TRANA2O1.495
ENDDO TRANA2O1.496
*IF DEF,TRANGRID TRANA2O1.497
*IF -DEF,AVER_TAO CJG6F401.120
CALL H_INT_BL
(JROWS,ICOLS,SEAPOINTS,INDEXBL,INDEXBR,WORKA CCC1F401.9
&, WEIGHTBL,WEIGHTBR,WEIGHTTL,WEIGHTTR,WORK) UDG1F400.374
CALL POST_H_INT
(NCOASTAL,INDEXA,INDEXO,ATPOINTS,WORKA,AMINT NT040193.2
&,SEAPOINTS,WORK,OCPOINT,RMDI,OCPOINTS,RIVEROUT) TRANA2O1.501
*IF DEF,CSRV_TAO OJG1F403.108
call do_areaver
(irt,jmt,imt,invert,riverout,icols,jrows OJG1F403.109
&,count_a,base_a,icols,.false.,amasktp,index_arav,weight,2 OJG1F403.110
&,worka,icode,cmessage) OJG1F403.111
*ENDIF OJG1F403.112
*ELSE TRANA2O1.502
call do_areaver
(icols,jrows,icols,.false.,worka,irt,jmt OJG1F403.113
&,count_o,base_o,imt,.false.,omaskd,index_arav,weight,0 OJG1F403.114
&,work,icode,cmessage) CJG6F401.123
call copya2o
(imt,jmt,work,invert,imt,.false.,omask,riverout) CJG6F401.124
*ENDIF CJG6F401.125
*ELSE CJG6F401.126
CALL COPYA2O
(ICOLS,JROWS,WORKA,INVERT,IMT,.FALSE.,OMASK TRANA2O1.503
&,RIVEROUT) TRANA2O1.504
*ENDIF TRANA2O1.505
IF (CYCLIC) CALL CYCLICBC
(RIVEROUT,IMT,JMT) TRANA2O1.506
*ELSE TRANA2O1.507
C TRANA2O1.508
C NO RIVER OUTFLOW IN THIS MODEL, BECAUSE THE RIVERS TRANA2O1.509
C CODE SWITCH WAS NOT ENABLED. TRANA2O1.510
C TRANA2O1.511
*ENDIF TRANA2O1.512
*IF DEF,SEAICE TRANA2O1.513
C TRANA2O1.514
CL SECTION 9: SNOWFALL TRANA2O1.515
C TRANA2O1.516
DO 810 J = 1,JROWS TRANA2O1.517
DO 805 I = 1,ICOLS TRANA2O1.518
WORKA(I,J) = SNOWLS(I,J) + SNOWCONV(I,J) TRANA2O1.519
805 CONTINUE TRANA2O1.520
810 CONTINUE TRANA2O1.521
*IF DEF,TRANGRID TRANA2O1.522
*IF -DEF,AVER_TAO CJG6F401.127
CALL H_INT_BL
(JROWS,ICOLS,SEAPOINTS,INDEXBL,INDEXBR,WORKA CCC1F401.10
&, WEIGHTBL,WEIGHTBR,WEIGHTTL,WEIGHTTR,WORK) UDG1F400.376
CALL POST_H_INT
(NCOASTAL,INDEXA,INDEXO,ATPOINTS,WORKA,AMINT TRANA2O1.525
&,SEAPOINTS,WORK,OCPOINT,RMDI,OCPOINTS,SNOWOUT) TRANA2O1.526
*IF DEF,CSRV_TAO OJG1F403.115
call do_areaver
(irt,jmt,imt,invert,snowout,icols,jrows OJG1F403.116
&,count_a,base_a,icols,.false.,amasktp,index_arav,weight,2 OJG1F403.117
&,worka,icode,cmessage) OJG1F403.118
*ENDIF OJG1F403.119
*ELSE CJG6F401.128
call do_areaver
(icols,jrows,icols,.false.,worka,irt,jmt OJG1F403.120
&,count_o,base_o,imt,.false.,omaskd,index_arav,weight,0 OJG1F403.121
&,work,icode,cmessage) CJG6F401.131
call copya2o
(imt,jmt,work,invert,imt,.false.,omask,snowout) CJG6F401.132
*ENDIF CJG6F401.133
*ELSE TRANA2O1.527
CALL COPYA2O
(ICOLS,JROWS,WORKA,INVERT,IMT,.FALSE.,OMASK TRANA2O1.528
&,SNOWOUT) TRANA2O1.529
*ENDIF TRANA2O1.530
IF (CYCLIC) CALL CYCLICBC
(SNOWOUT,IMT,JMT) TRANA2O1.531
C TRANA2O1.532
CL SECTION 10: SUBLIMATION TRANA2O1.533
C TRANA2O1.534
*IF DEF,TRANGRID TRANA2O1.535
*IF -DEF,AVER_TAO CJG6F401.134
CALL H_INT_BL
(JROWS,ICOLS,SEAPOINTS,INDEXBL,INDEXBR,SUBLMIN CCC1F401.11
&, WEIGHTBL,WEIGHTBR,WEIGHTTL,WEIGHTTR,WORK) UDG1F400.378
CALL POST_H_INT
(NCOASTAL,INDEXA,INDEXO,ATPOINTS,SUBLMIN,AMINT TRANA2O1.538
&,SEAPOINTS,WORK,OCPOINT,RMDI,OCPOINTS,SUBLMOUT) TRANA2O1.539
*IF DEF,CSRV_TAO OJG1F403.122
call do_areaver
(irt,jmt,imt,invert,sublmout,icols,jrows OJG1F403.123
&,count_a,base_a,icols,.false.,amasktp,index_arav,weight,1 OJG1F403.124
&,sublmin,icode,cmessage) OJG1F403.125
*ENDIF OJG1F403.126
*ELSE CJG6F401.135
call do_areaver
(icols,jrows,icols,.false.,sublmin,irt,jmt OJG1F403.127
&,count_o,base_o,imt,.false.,omaskd,index_arav,weight,0 OJG1F403.128
&,work,icode,cmessage) CJG6F401.138
call copya2o
(imt,jmt,work,invert,imt,.false.,omask,sublmout) CJG6F401.139
*ENDIF CJG6F401.140
*ELSE TRANA2O1.540
CALL COPYA2O
(ICOLS,JROWS,SUBLMIN,INVERT,IMT,.FALSE.,OMASK TRANA2O1.541
&,SUBLMOUT) TRANA2O1.542
*ENDIF TRANA2O1.543
IF (CYCLIC) CALL CYCLICBC
(SUBLMOUT,IMT,JMT) TRANA2O1.544
C TRANA2O1.545
CL SECTION 11: SEA ICE DIFFUSIVE HEAT FLUX TRANA2O1.546
C TRANA2O1.547
*IF DEF,TRANGRID TRANA2O1.548
*IF -DEF,AVER_TAO CJG6F401.141
CALL H_INT_BL
(JROWS,ICOLS,SEAPOINTS,INDEXBL,INDEXBR,BTMLTIN CCC1F401.12
&, WEIGHTBL,WEIGHTBR,WEIGHTTL,WEIGHTTR,WORK) UDG1F400.380
CALL POST_H_INT
(NCOASTAL,INDEXA,INDEXO,ATPOINTS,BTMLTIN,AMINT TRANA2O1.551
&,SEAPOINTS,WORK,OCPOINT,RMDI,OCPOINTS,BTMLTOUT) TRANA2O1.552
*IF DEF,CSRV_TAO OJG1F403.129
call do_areaver
(irt,jmt,imt,invert,btmltout,icols,jrows OJG1F403.130
&,count_a,base_a,icols,.false.,amasktp,index_arav,weight,1 OJG1F403.131
&,btmltin,icode,cmessage) OJG1F403.132
*ENDIF OJG1F403.133
*ELSE CJG6F401.142
call do_areaver
(icols,jrows,icols,.false.,btmltin,irt,jmt OJG1F403.134
&,count_o,base_o,imt,.false.,omaskd,index_arav,weight,0 OJG1F403.135
&,work,icode,cmessage) CJG6F401.145
call copya2o
(imt,jmt,work,invert,imt,.false.,omask,btmltout) CJG6F401.146
*ENDIF CJG6F401.147
*ELSE TRANA2O1.553
CALL COPYA2O
(ICOLS,JROWS,BTMLTIN,INVERT,IMT,.FALSE.,OMASK TRANA2O1.554
&,BTMLTOUT) TRANA2O1.555
*ENDIF TRANA2O1.556
IF (CYCLIC) CALL CYCLICBC
(BTMLTOUT,IMT,JMT) TRANA2O1.557
C TRANA2O1.558
CL SECTION 12: SEA ICE TOP MELT HEAT FLUX TRANA2O1.559
C TRANA2O1.560
*IF DEF,TRANGRID TRANA2O1.561
*IF -DEF,AVER_TAO CJG6F401.148
CALL H_INT_BL
(JROWS,ICOLS,SEAPOINTS,INDEXBL,INDEXBR,TPMLTIN CCC1F401.13
&, WEIGHTBL,WEIGHTBR,WEIGHTTL,WEIGHTTR,WORK) UDG1F400.382
CALL POST_H_INT
(NCOASTAL,INDEXA,INDEXO,ATPOINTS,TPMLTIN,AMINT TRANA2O1.564
&,SEAPOINTS,WORK,OCPOINT,RMDI,OCPOINTS,TPMLTOUT) TRANA2O1.565
*IF DEF,CSRV_TAO OJG1F403.136
call do_areaver
(irt,jmt,imt,invert,tpmltout,icols,jrows OJG1F403.137
&,count_a,base_a,icols,.false.,amasktp,index_arav,weight,2 OJG1F403.138
&,tpmltin,icode,cmessage) OJG1F403.139
*ENDIF OJG1F403.140
*ELSE CJG6F401.149
call do_areaver
(icols,jrows,icols,.false.,tpmltin,irt,jmt OJG1F403.141
&,count_o,base_o,imt,.false.,omaskd,index_arav,weight,0 OJG1F403.142
&,work,icode,cmessage) CJG6F401.152
call copya2o
(imt,jmt,work,invert,imt,.false.,omask,tpmltout) CJG6F401.153
*ENDIF CJG6F401.154
*ELSE TRANA2O1.566
CALL COPYA2O
(ICOLS,JROWS,TPMLTIN,INVERT,IMT,.FALSE.,OMASK TRANA2O1.567
&,TPMLTOUT) TRANA2O1.568
*ENDIF TRANA2O1.569
IF (CYCLIC) CALL CYCLICBC
(TPMLTOUT,IMT,JMT) TRANA2O1.570
*ELSE TRANA2O1.571
C TRANA2O1.572
C NO SNOWFALL, SUBLIMATION OR SEA ICE HEAT FLUXES IN THIS MODEL, TRANA2O1.573
C BECAUSE THE SEAICE CODE SWITCH WAS NOT ENABLED. TRANA2O1.574
C TRANA2O1.575
*ENDIF TRANA2O1.576
C TRANA2O1.577
*IF -DEF,TRANGRID CCN1F405.187
C CCN1F405.188
CL SECTION 13: SURFACE ATMOSPHERIC CO2 CONCENTRATION. CCN1F405.189
C CCN1F405.190
C Only implement the COPYA2O call, because CCN1F405.191
C the carbon cycle is only being run in HaDCM3L where the grids CCN1F405.192
C are congruent. CCN1F405.193
C CCN1F405.194
C Note: units are converted from kg/kg to ppmv CCN1F405.195
C CCN1F405.196
IF (L_CO2_INTERACTIVE) THEN CCN1F405.197
CCN1F405.198
CALL COPYA2O
(ICOLS,JROWS,ATMCO2,INVERT,IMT,.FALSE.,OMASK CCN1F405.199
& ,ATMCO2_OUT) CCN1F405.200
CCN1F405.201
IF (CYCLIC) CALL CYCLICBC
(ATMCO2_OUT,IMT,JMT) CCN1F405.202
CCN1F405.203
do j=1,jmt CCN1F405.204
do i=1,imt CCN1F405.205
if (.not.OMASK(I,J)) then CCN1F405.206
ATMCO2_OUT(i,j) = ATMCO2_OUT(i,j) * CO2CONV_A2O CCN1F405.207
endif CCN1F405.208
enddo CCN1F405.209
enddo CCN1F405.210
ENDIF ! L_CO2_INTERACTIVE CCN1F405.211
*ENDIF CCN1F405.212
RETURN TRANA2O1.578
END TRANA2O1.579
*ENDIF TRANA2O1.580