*IF DEF,CONTROL,AND,DEF,ATMOS,AND,DEF,OCEAN TRANO2A1.2
C ******************************COPYRIGHT****************************** GTS2F400.10513
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.10514
C GTS2F400.10515
C Use, duplication or disclosure of this code is subject to the GTS2F400.10516
C restrictions as set forth in the contract. GTS2F400.10517
C GTS2F400.10518
C Meteorological Office GTS2F400.10519
C London Road GTS2F400.10520
C BRACKNELL GTS2F400.10521
C Berkshire UK GTS2F400.10522
C RG12 2SZ GTS2F400.10523
C GTS2F400.10524
C If no contract has been raised with this copy of the code, the use, GTS2F400.10525
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.10526
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.10527
C Modelling at the above address. GTS2F400.10528
C ******************************COPYRIGHT****************************** GTS2F400.10529
C GTS2F400.10530
C*LL TRANO2A1.3
CLL SUBROUTINE TRANSO2A TRANO2A1.4
CLL ------------------- TRANO2A1.5
CLL TRANO2A1.6
CLL THIS ROUTINE FORMS PART OF SYSTEM COMPONENT D89 (TASK D2), TRANO2A1.7
CLL AND IS CALLED BY SWAP_O2A. IT TRANSFERS DATA NEEDED FOR TRANO2A1.8
CLL COUPLING FROM THE OCEAN TO THE ATMOSPHERE, PERFORMING VARIOUS TRANO2A1.9
CLL MANIPULATIONS ON THE WAY. IT CAN BE COMPILED BY CFT77, BUT DOES TRANO2A1.10
CLL NOT CONFORM TO THE ANSI FORTRAN77 STANDARDS, BECAUSE OF THE TRANO2A1.11
CLL INLINE COMMENTS. THE CODE SWITCH SEAICE SHOULD BE TURNED ON IF TRANO2A1.12
CLL THE OCEAN INCLUDES A PROGNOSTIC SEAICE MODEL. THE CODE SWITCH TRANO2A1.13
CLL TRANGRID SHOULD BE ENABLED IF THE OCEAN AND ATMOSPHERE GRIDS ARE TRANO2A1.14
CLL DIFFERENT. THE DEFAULT METHOD OF TRANSFERRING INFORMATION IN TRANO2A1.15
CLL THIS CASE IS INTERPOLATION. TO USE AREA-AVERAGING INSTEAD FOR TRANO2A1.16
CLL THE U/T GRIDS, ENABLE SWITCHES AVER_U/AVER_T RESPECTIVELY. TRANO2A1.17
CLL TRANO2A1.18
CLL T C JOHNS & J M GREGORY TRANO2A1.19
CLL TRANO2A1.20
CLL MODEL MODIFICATION HISTORY FROM MODEL VERSION 3.0: TRANO2A1.21
CLL VERSION DATE TRANO2A1.22
CLL 3.4 03/08/94 Safer treatment of RMDI in dump. (JFT) CJT0F304.11
! 4.0 01/09/95 Replace calls to H_INT with calls to H_INT_BL UDG1F400.383
! Author D.M. Goddard UDG1F400.384
CLL 4.1 23.5.96 J.M.Gregory Use FKMP and FKMQ to deduce masks, CJG6F401.9
CLL instead of SST and current fields. CJG6F401.10
CLL 4.1 13/06/96 Replace calls to H_INT_BL to correct an CCC1F401.14
CLL error introduced at 4.0 (C.Cooper) CCC1F401.15
CLL 4.3 30/01/97 Ensure U,V ocean currents (from ocean prognostic GRR0F403.316
CLL fields) re-set to zero if =RMDI at ocean points. GRR0F403.317
CLL R.Rawlins GRR0F403.318
CLL 4.4 14/10/97 Correct check for RMDI on valid ocean points and GRR0F404.9
CLL include check for UIN as well as VIN. R.Rawlins GRR0F404.10
CLL 4.5 28/08/98 Model aborts if missing data found at active UV CJG1F405.1
CLL points, instead of zeroing them. Jonathan Gregory CJG1F405.2
CLL 4.5 1/07/98 Include code to pass ocean CO2 flux. C.D.Jones CCN1F405.316
CLL TRANO2A1.23
CLL FOLLOWS DOCUMENTATION PAPER 3, VERSION 1 FOR STANDARDS. TRANO2A1.24
CLL TRANO2A1.25
CLLEND TRANO2A1.26
C*L TRANO2A1.27
C----------------------------------------------------------------- TRANO2A1.28
SUBROUTINE TRANSO2A(TSTARIN,TSTAROUT,UIN,UOUT,VIN,VOUT, 2,40TRANO2A1.29
*IF DEF,SEAICE TRANO2A1.30
+ AICEIN,AICEOUT,HICEIN,HICEOUT,HSNOWIN,HSNOWOUT, TRANO2A1.31
*ENDIF TRANO2A1.32
& CO2FLUXIN, CO2FLUXOUT, CO2_ICOLS, CO2_JROWS, CO2_IMT, CO2_JMT, CCN1F405.317
*IF DEF,TRANGRID TRANO2A1.33
& XUO,XTO,YUO,YTO,XTA,XUA,YTA,YUA,AMASKTP, TRANO2A1.34
*ENDIF TRANO2A1.35
+ IMT,JMT,JMTM1,ICOLS,JROWS,JROWSM1,MAXL,FKMP,FKMQ, CJG6F401.11
+ INVERT,CYCLIC,GLOBAL,ZERODEGC,TFS,ICODE,CMESSAGE) CJT0F304.12
C TRANO2A1.38
C THIS ROUTINE CONSISTS OF UP TO 5 SECTIONS, ONE FOR EACH FIELD TRANO2A1.39
C TRANSFERRED FROM OCEAN TO ATMOSPHERE (COUNTING THE TWO COMPONENTS TRANO2A1.40
C OF THE SURFACE CURRENT AS ONE FIELD). SECTIONS 2,3 AND 4 ARE ONLY TRANO2A1.41
C PRESENT WHEN THE SEAICE SWITCH IS TURNED ON. TRANO2A1.42
C THE FLOW OF CONTROL IS STRAIGHTFORWARD. TRANO2A1.43
C TRANO2A1.44
IMPLICIT NONE TRANO2A1.45
C TRANO2A1.46
INTEGER TRANO2A1.47
+ IMT, ! IN NO. OF COLUMNS IN OCEAN TRANO2A1.48
+ JMT, ! IN NO. OF ROWS IN OCEAN (TS GRID) TRANO2A1.49
+ JMTM1, ! IN NO. OF ROWS IN OCEAN (UV GRID) TRANO2A1.50
+ ICOLS, ! IN NO. OF COLUMNS IN ATMOSPHERE TRANO2A1.51
+ JROWS, ! IN NO. OF ROWS IN ATMOSPHERE (TP GRID) TRANO2A1.52
+ JROWSM1, ! IN NO. OF ROWS IN ATMOSPHERE (UV GRID) TRANO2A1.53
& MAXL, ! IN max. list length for area-averaging TRANO2A1.54
+ ICODE ! IN OUT ERROR RETURN CODE. TRANO2A1.55
&,CO2_ICOLS,CO2_JROWS ! IN CO2 array dimensions CCN1F405.318
&,CO2_IMT, CO2_JMT CCN1F405.319
C TRANO2A1.56
LOGICAL TRANO2A1.57
+ INVERT, ! IN TRUE WHEN ROW INVERSION IS REQUIRED TRANO2A1.58
+ CYCLIC ! IN TRUE WHEN OCEAN HAS CYCLIC EW BOUNDS. TRANO2A1.59
&,GLOBAL ! IN TRUE WHEN OCEAN is global TRANO2A1.60
C TRANO2A1.61
REAL TRANO2A1.62
+ TSTARIN(IMT,JMT), ! IN TEMPERATURE OF OCEAN SURFACE LAYER TRANO2A1.63
+ TSTAROUT(ICOLS,JROWS),! INOUT SURFACE TEMPERATURE OF ATMOSPHERE TRANO2A1.64
+ UIN(IMT,JMTM1), ! IN ZONAL SURFACE CURRENT FROM OCEAN TRANO2A1.65
+ UOUT(ICOLS,JROWSM1), ! IN OUT ZONAL SURFACE CURRENT IN ATMOS TRANO2A1.66
+ VIN(IMT,JMTM1), ! IN MERID SURFACE CURRENT FROM OCEAN TRANO2A1.67
+ VOUT(ICOLS,JROWSM1), ! IN OUT MERID SURF CURRENT IN ATMOSPHERE TRANO2A1.68
+ ZERODEGC, ! IN KELVIN EQUIVALENT OF ZERO DEGREES C TRANO2A1.70
+ TFS ! IN FREEZING POINT OF SEAWATER IN K. TRANO2A1.71
&,FKMP(IMT,JMT) ! IN number of levels at ocean T points CJG6F401.12
&,FKMQ(IMT,JMT) ! IN number of levels at ocean U points CJG6F401.13
&,CO2FLUXIN(CO2_IMT,CO2_JMT) ! IN ocean co2 flux (mol/m2/yr) CCN1F405.322
&,CO2FLUXOUT(CO2_ICOLS,CO2_JROWS) ! INOUT ocean co2 flux CCN1F405.323
! (Kg CO2/m2/s) CCN1F405.324
CCN1F405.325
C TRANO2A1.72
CHARACTER*(*) CMESSAGE ! IN OUT TEXT OF ERROR MESSAGE. TRANO2A1.73
C TRANO2A1.74
*CALL CNTLATM
CCN1F405.320
*CALL CCARBON
CCN1F405.321
*CALL C_MDI
CJT0F304.13
C CJT0F304.14
*IF DEF,SEAICE TRANO2A1.75
REAL TRANO2A1.76
+ AICEIN(IMT,JMT), ! INOUT ICE CONCENTRATION FROM OCEAN TRANO2A1.77
+ AICEOUT(ICOLS,JROWS), ! INOUT ICE CONCENTRATION IN ATMOS TRANO2A1.78
+ HICEIN(IMT,JMT), ! INOUT ICE DEPTH FROM OCEAN TRANO2A1.79
+ HICEOUT(ICOLS,JROWS), ! INOUT ICE DEPTH IN ATMOSPHERE TRANO2A1.80
+ HSNOWIN(IMT,JMT), ! INOUT SNOW DEPTH FROM OCEAN TRANO2A1.81
+ HSNOWOUT(ICOLS,JROWS) ! INOUT SNOW DEPTH IN ATMOSPHERE TRANO2A1.82
*ENDIF TRANO2A1.83
*IF DEF,TRANGRID TRANO2A1.84
REAL TRANO2A1.85
& XUO(0:IMT) ! Ocean UV longitude coordinates TRANO2A1.86
&,XTO(IMT) ! Ocean TS longitude coordinates TRANO2A1.87
&,YUO(0:JMT) ! Ocean UV latitude coordinates TRANO2A1.88
&,YTO(JMT) ! Ocean TS latitude coordinates TRANO2A1.89
&,XTA(ICOLS+1) ! Atmosphere TP longitude coordinates TRANO2A1.90
&,XUA(0:ICOLS) ! Atmosphere UV longitude coordinates TRANO2A1.91
&,YTA(JROWS) ! Atmosphere TP latitude coordinates TRANO2A1.92
&,YUA(0:JROWS) ! Atmosphere UV latitude coordinates TRANO2A1.93
LOGICAL TRANO2A1.94
+ AMASKTP(ICOLS,JROWS) ! IN ATMOS MODEL LAND-SEA MASK FOR TP GRID. TRANO2A1.95
*ENDIF TRANO2A1.96
C TRANO2A1.97
C EXTERNAL SUBPROGRAMS CALLED TRANO2A1.98
C TRANO2A1.99
EXTERNAL COPYO2A TRANO2A1.100
*IF DEF,TRANGRID TRANO2A1.101
*IF -DEF,AVER_U,OR,-DEF,AVER_T TRANO2A1.102
EXTERNAL H_INT_CO,H_INT_BL UDG1F400.385
*ENDIF TRANO2A1.104
*IF -DEF,AVER_T TRANO2A1.105
&,COAST_AJ,POST_H_INT TRANO2A1.106
*ENDIF TRANO2A1.107
*IF DEF,AVER_T TRANO2A1.108
&,ROWSWAP TRANO2A1.109
*ENDIF TRANO2A1.110
*IF DEF,AVER_U,OR,DEF,AVER_T TRANO2A1.111
&,PRE_AREAVER,DO_AREAVER TRANO2A1.112
*ENDIF TRANO2A1.113
*ENDIF TRANO2A1.114
C TRANO2A1.115
C LOCAL VARIABLES TRANO2A1.116
C TRANO2A1.117
LOGICAL TRANO2A1.118
& OMASK(IMT,JMT) ! Ocean land/sea mask (.T. for land) TRANO2A1.119
C TRANO2A1.120
REAL TRANO2A1.121
+ WORK_A(ICOLS,JROWS), ! WORK ARRAY ON ATMOSPHERE GRID. TRANO2A1.122
+ WORK_O(IMT,JMT) ! WORK ARRAY ON OCEAN GRID. TRANO2A1.123
C NB WORK_O is sometimes passed to subroutines as if (IR,*), TRANO2A1.124
C where IR=IRU,IRT is the number of truly distinct columns TRANO2A1.125
&,RCMPM ! reciprocal of cm per m TRANO2A1.126
*IF DEF,SEAICE TRANO2A1.127
+,AICEREF(ICOLS,JROWS) ! STORAGE FOR OLD VALUES OF AICEOUT TRANO2A1.128
+,CONRATIO ! RATIO OF CONDUCTIVITIES (ICE/SNOW) TRANO2A1.129
+,RHOSNOW ! DENSITY OF SNOW IN KG/M**3 TRANO2A1.130
+,AICEMIN ! MINIMUM ICE CONCENTRATION IF ICE PRESENT TRANO2A1.131
PARAMETER (CONRATIO = 6.5656) TRANO2A1.132
PARAMETER (RHOSNOW = 300.0) TRANO2A1.133
PARAMETER (AICEMIN = 0.001) TRANO2A1.134
*ENDIF TRANO2A1.135
PARAMETER(RCMPM=0.01) TRANO2A1.136
C* TRANO2A1.137
INTEGER TRANO2A1.138
& IRT,IRU ! No. of distinct cols. in ocean T/U grid TRANO2A1.139
+,I,J ! Working indices TRANO2A1.140
&,count ! counter for checking lsm at u,v points GRR0F403.319
C TRANO2A1.141
*IF DEF,TRANGRID TRANO2A1.142
*IF -DEF,AVER_T,OR,-DEF,AVER_U TRANO2A1.143
C TRANO2A1.144
C THE FOLLOWING OBJECTS ARE NEEDED FOR INTERPOLATION AND COASTAL TRANO2A1.145
C ADJUSTMENT. IF INTER_U IS ENABLED, THEY ARE USED IN SECTION 1 TRANO2A1.146
C FOR U GRIDS; IF INTER_T IS ENABLED, THEY ARE (RE)USED IN LATER TRANO2A1.147
C SECTIONS FOR T GRIDS. TRANO2A1.148
C TRANO2A1.149
REAL TRANO2A1.150
+ OCLAMBDA(IMT), ! LONGITUDE COORDS OF COLUMNS IN OCEAN TRANO2A1.151
+ ! GRID, IN DEGREES. TRANO2A1.152
+ ATLAMBDA(ICOLS*JROWS), ! LAMBDA COORDS OF ATMOSPHERE POINTS TRANO2A1.153
+ ATPHI(ICOLS*JROWS), ! PHI COORDS OF ATMOSPHERE POINTS TRANO2A1.154
+ WEIGHTTR(ICOLS*JROWS), ! WEIGHTS OF 'TOP RIGHT' CORNERS TRANO2A1.155
+ WEIGHTTL(ICOLS*JROWS), ! WEIGHTS OF 'TOP LEFT' CORNERS TRANO2A1.156
+ WEIGHTBR(ICOLS*JROWS), ! WEIGHTS OF 'BOTTOM RIGHT' CORNERS TRANO2A1.157
+ WEIGHTBL(ICOLS*JROWS) ! WEIGHTS OF 'BOTTOM LEFT' CORNERS TRANO2A1.158
&,OCWEST,OCEAST,OCNORTH,OCSOUTH TRANO2A1.159
C ! limits of the ocean domain TRANO2A1.160
C TRANO2A1.161
INTEGER TRANO2A1.162
+ ATPOINTS, ! NUMBER OF POINTS IN ATMOSPHERE GRID TRANO2A1.163
+ INDEXBL(ICOLS*JROWS), ! GATHER INDICES FOR INTERPOLATION. TRANO2A1.164
+ INDEXBR(ICOLS*JROWS) ! GATHER INDICES FOR INTERPOLATION. TRANO2A1.165
*ENDIF TRANO2A1.166
*IF -DEF,AVER_T TRANO2A1.167
C TRANO2A1.168
C These entities are required for coastal adjustment. The last four TRANO2A1.169
C are not used, but are declared simply to satisfy COAST_AJ. TRANO2A1.170
C TRANO2A1.171
INTEGER TRANO2A1.172
& SEAPOINTS, ! number of sea points in AMASKTP TRANO2A1.173
& ATPOINT(ICOLS*JROWS), ! list of these sea points TRANO2A1.174
+ IJMT, ! number of points in the ocean grid TRANO2A1.175
+ OMINT(IMT*JMT), ! integer land-sea mask on ocean grid TRANO2A1.176
+ AMINT(ICOLS*JROWS), ! integer land-sea mask on atmosphere grid TRANO2A1.177
+ INDEXI(ICOLS*JROWS), ! INDEX OF COASTAL POINTS (FROM COAST_AJ). TRANO2A1.178
+ INDEXO(ICOLS*JROWS), ! INDEX OF CORRESPONDING OCEAN POINTS. TRANO2A1.179
+ NCOASTAL, ! NUMBER OF COASTAL POINTS DETECTED. TRANO2A1.180
+ IDUMMY1(ICOLS,JROWS), ! DUMMY ARGUMENT FOR CALL TO COAST_AJ. TRANO2A1.181
+ IDUMMY2(ICOLS,JROWS), ! DUMMY ARGUMENT FOR CALL TO COAST_AJ. TRANO2A1.182
+ N1, ! DUMMY ARGUMENT FOR CALL TO COAST_AJ. TRANO2A1.183
+ N2 ! DUMMY ARGUMENT FOR CALL TO COAST_AJ. TRANO2A1.184
C TRANO2A1.185
REAL TRANO2A1.186
& WORK_I(ICOLS*JROWS) ! Working field at atmosphere seapoints TRANO2A1.187
&,WORK_O2(IMT*JMT) ! Working field on ocean grid TRANO2A1.188
*ENDIF TRANO2A1.189
*IF DEF,AVER_U,OR,DEF,AVER_T TRANO2A1.190
C TRANO2A1.191
C THE FOLLOWING OBJECTS ARE NEEDED FOR AREA-AVERAGING. IF AVER_U TRANO2A1.192
C IS ENABLED, THEY ARE USED IN SECTIONS 1&2 FOR U GRIDS; IF AVER_T TRANO2A1.193
C IS ENABLED, THEY ARE (RE)USED IN LATER SECTIONS FOR T GRIDS. TRANO2A1.194
C TRANO2A1.195
INTEGER TRANO2A1.196
& LENL ! Length of lists TRANO2A1.197
&,COUNT_A(ICOLS,JROWS) ! No. of ocean boxes in atmosphere box TRANO2A1.198
&,BASE_A(ICOLS,JROWS) ! First index in list for atmosphere box TRANO2A1.199
&,POINT_O(MAXL) ! List of ocean box indices TRANO2A1.200
REAL TRANO2A1.201
& WEIGHT(MAXL) ! List of weights for ocean boxes TRANO2A1.202
*ENDIF TRANO2A1.203
*IF DEF,AVER_U TRANO2A1.204
LOGICAL AMASKUV(ICOLS,JROWSM1) TRANO2A1.205
C ! Dummy mask on atmosphere UV grid TRANO2A1.206
*ENDIF TRANO2A1.207
REAL TRANO2A1.208
+ OCPHI(JMT+1) ! LATITUDE ROWS IN OCEAN GRID TRANO2A1.209
*ENDIF TRANO2A1.210
C TRANO2A1.211
CL SECTION 0: No. of distinct columns in ocean TRANO2A1.212
C TRANO2A1.213
IF (CYCLIC) THEN TRANO2A1.214
IRU=IMT-2 TRANO2A1.215
IRT=IRU TRANO2A1.216
ELSE TRANO2A1.217
IRU=IMT-1 TRANO2A1.218
IRT=IMT TRANO2A1.219
ENDIF TRANO2A1.220
C TRANO2A1.221
CL SECTION 1: Set up for U grids TRANO2A1.222
C TRANO2A1.223
C OCPHI contains the point coordinates for interpolation, or the TRANO2A1.224
C box limits for area-averaging, going from N to S. In the latter TRANO2A1.225
C case, OCPHI(1) is the N limit of the northernmost box, OCPHI(JMT) TRANO2A1.226
C the S limit of the southernmost box. TRANO2A1.227
C TRANO2A1.228
IF (INVERT) THEN TRANO2A1.229
DO J=1,JMTM1 TRANO2A1.230
*IF DEF,TRANGRID TRANO2A1.231
*IF -DEF,AVER_U TRANO2A1.232
OCPHI(JMTM1-J+1)=YUO(J) TRANO2A1.233
*ELSE TRANO2A1.234
OCPHI(JMTM1-J+1)=YTO(J+1) TRANO2A1.235
*ENDIF TRANO2A1.236
*ENDIF TRANO2A1.237
DO I=1,IRU TRANO2A1.238
OMASK(I,JMTM1-J+1)=FKMQ(I,J).LT.0.1 CJG6F401.14
ENDDO TRANO2A1.240
ENDDO TRANO2A1.241
*IF DEF,TRANGRID,AND,DEF,AVER_U TRANO2A1.242
OCPHI(JMT)=YTO(1) TRANO2A1.243
*ENDIF TRANO2A1.244
ELSE TRANO2A1.245
DO J=1,JMTM1 TRANO2A1.246
*IF DEF,TRANGRID TRANO2A1.247
*IF -DEF,AVER_U TRANO2A1.248
OCPHI(J)=YUO(J) TRANO2A1.249
*ELSE TRANO2A1.250
OCPHI(J)=YTO(J) TRANO2A1.251
*ENDIF TRANO2A1.252
*ENDIF TRANO2A1.253
DO I=1,IRU TRANO2A1.254
OMASK(I,J)=FKMQ(I,J).LT.0.1 CJG6F401.15
ENDDO TRANO2A1.256
ENDDO TRANO2A1.257
*IF DEF,TRANGRID,AND,DEF,AVER_U TRANO2A1.258
OCPHI(JMT)=YTO(JMT) TRANO2A1.259
*ENDIF TRANO2A1.260
ENDIF TRANO2A1.261
*IF DEF,TRANGRID GRR0F404.12
*IF -DEF,AVER_U TRANO2A1.263
C TRANO2A1.264
C FIND THE ARRAYS OF INTERPOLATION WEIGHTS AND GATHER INDICES TRANO2A1.265
C FOR THE U GRIDS. TRANO2A1.266
C Note that no coastal adjustment is done for currents. TRANO2A1.267
C If ocean not global, exclude atmosphere points whose boxes are TRANO2A1.268
C entirely outside the ocean domain. The ocean domain is defined TRANO2A1.269
C by the outside limits of the boxes at its edges, and the con- TRANO2A1.270
C dition tested amounts to accepting the atmosphere box... TRANO2A1.271
C IF ((distance E of E edge of box from W edge of ocean TRANO2A1.272
C < width of box TRANO2A1.273
C OR W edge of box is W of E edge of ocean) TRANO2A1.274
C AND S edge of box is S of N edge of ocean TRANO2A1.275
C AND N edge of box is N of S edge of ocean) TRANO2A1.276
C The E-W tests are written in such a way that the A and O grids TRANO2A1.277
C are not assumed to have the same base of longitude. The E and W TRANO2A1.278
C tests differ in form because one edge of the ocean, the W edge TRANO2A1.279
C in fact, has been taken as the base of longitude. It is therefore TRANO2A1.280
C no good to test whether the E edge of the box is E of the W edge TRANO2A1.281
C of the ocean, as this will be true for all longitudes. There is TRANO2A1.282
C no complexity N-S as there is no wrap-round. TRANO2A1.283
C TRANO2A1.284
DO I=1,IRU TRANO2A1.285
OCLAMBDA(I)=XUO(I) TRANO2A1.286
ENDDO TRANO2A1.287
IF (.NOT.GLOBAL) THEN TRANO2A1.288
OCWEST=XTO(1)-720. TRANO2A1.289
OCEAST=XTO(IRU+1)-XTO(1) TRANO2A1.290
IF (INVERT) THEN TRANO2A1.291
OCNORTH=YTO(JMT) TRANO2A1.292
OCSOUTH=YTO(1) TRANO2A1.293
ELSE TRANO2A1.294
OCNORTH=YTO(1) TRANO2A1.295
OCSOUTH=YTO(JMT) TRANO2A1.296
ENDIF TRANO2A1.297
ENDIF TRANO2A1.298
ATPOINTS=0 TRANO2A1.299
DO J=1,JROWSM1 TRANO2A1.300
DO I=1,ICOLS TRANO2A1.301
IF (GLOBAL.OR.((MOD(XTA(I+1)-OCWEST,360.).LE.XTA(I+1)-XTA(I) TRANO2A1.302
& .OR.MOD(XTA(I)-OCWEST,360.).LE.OCEAST) TRANO2A1.303
& .AND.YTA(J+1).LE.OCNORTH.AND.YTA(J).GE.OCSOUTH)) THEN TRANO2A1.304
ATPOINTS=ATPOINTS+1 TRANO2A1.305
ATLAMBDA(ATPOINTS)=XUA(I) TRANO2A1.306
ATPHI(ATPOINTS)=YUA(J) TRANO2A1.307
ENDIF TRANO2A1.308
ENDDO TRANO2A1.309
ENDDO TRANO2A1.310
CALL H_INT_CO
(INDEXBL,INDEXBR,WEIGHTTR,WEIGHTBR,WEIGHTTL,WEIGHTBL TRANO2A1.311
&,OCLAMBDA,OCPHI,ATLAMBDA,ATPHI,IRU,JMTM1,ATPOINTS,CYCLIC) TRANO2A1.312
*ELSE TRANO2A1.313
C TRANO2A1.314
C Fill atmosphere mask and calculate weights and indices for TRANO2A1.315
C area-averaging between the U grids TRANO2A1.316
C TRANO2A1.317
DO J=1,JROWSM1 TRANO2A1.318
DO I=1,ICOLS TRANO2A1.319
AMASKUV(I,J)=.FALSE. TRANO2A1.320
ENDDO TRANO2A1.321
ENDDO TRANO2A1.322
LENL=MAXL TRANO2A1.323
CALL PRE_AREAVER
(IRU,XTO,JMTM1,OCPHI,GLOBAL,IMT,.FALSE. TRANO2A1.324
&,OMASK,ICOLS,XTA,JROWSM1,YTA,.TRUE.,.TRUE. CJG1F401.48
&,LENL,COUNT_A,BASE_A,POINT_O,WEIGHT,ICODE,CMESSAGE) CJG1F401.49
*ENDIF TRANO2A1.327
*ENDIF TRANO2A1.328
C TRANO2A1.329
! Check ocean currents for missing data at active points and abort CJG1F405.3
! if any are found CJG1F405.4
! CJG1F405.5
count=0 GRR0F403.339
DO J=1,JMTM1 GRR0F403.340
DO I=1,IRU GRR0F403.341
IF(FKMQ(I,J).GT.0.1 CJG1F405.6
& .AND.(UIN(I,J).EQ.RMDI.OR.VIN(I,J).EQ.RMDI)) THEN CJG1F405.7
count=count + 1 GRR0F403.343
ENDIF GRR0F403.345
ENDDO ! I GRR0F403.346
ENDDO ! J GRR0F403.347
IF(count.NE.0) THEN GRR0F403.348
WRITE(6,'(''TRANSO2A: Missing data in ocean UV fields at'' CJG1F405.8
& ,I6,''active ocean points'')') count CJG1F405.9
CMESSAGE='TRANSO2A: Missing data in ocean UV fields' CJG1F405.10
ICODE=84 CJG1F405.11
RETURN CJG1F405.12
ENDIF GRR0F403.353
C CJG1F405.13
CL SECTION 2.1: Zonal component of surface current CJG1F405.14
C CJG1F405.15
*IF DEF,TRANGRID TRANO2A1.332
C IT IS IMPORTANT TO ZERO CURRENTS OVER LAND BEFORE TRANSFERRING TRANO2A1.333
C THEM TO THE ATMOSPHERE GRID. THIS, TOGETHER WITH THE OCEAN MODEL TRANO2A1.334
C BOUNDARY CONDITION (ZERO CURRENT AT THE COASTS) SHOULD ENSURE TRANO2A1.335
C THAT THE INTERPOLATED FIELD CONTAINS NO NONZERO VALUES OVER LAND. TRANO2A1.336
C This is done as part of COPYO2A. TRANO2A1.337
C TRANO2A1.338
*IF -DEF,AVER_U TRANO2A1.339
CALL COPYO2A
(IMT,JMTM1,UIN,.FALSE.,OMASK TRANO2A1.340
&,.TRUE.,INVERT,IRU,WORK_O) TRANO2A1.341
CALL H_INT_BL
(JMTM1,IRU,ATPOINTS,INDEXBL,INDEXBR,WORK_O CCC1F401.16
&, WEIGHTBL,WEIGHTBR,WEIGHTTL,WEIGHTTR,UOUT) CCC1F401.17
*ELSE TRANO2A1.344
CALL COPYO2A
(IMT,JMTM1,UIN,.FALSE.,OMASK TRANO2A1.345
&,.TRUE.,INVERT,IRU,WORK_O) TRANO2A1.346
CALL DO_AREAVER
(IRU,JMTM1,IRU,.false. OJG1F403.143
&,WORK_O,ICOLS,JROWSM1,COUNT_A OJG1F403.144
&,BASE_A,ICOLS,.FALSE.,AMASKUV,POINT_O,WEIGHT OJG1F403.145
&,0,UOUT,ICODE,CMESSAGE) OJG1F403.146
*ENDIF TRANO2A1.349
*ELSE TRANO2A1.350
C If grids are congruent we assume that JMTM1=JROWSM1, IRU=ICOLS TRANO2A1.351
C TRANO2A1.352
CALL COPYO2A
(IMT,JMTM1,UIN,.FALSE.,OMASK,.TRUE.,INVERT,IRU,UOUT) TRANO2A1.353
*ENDIF TRANO2A1.354
C TRANO2A1.355
CL SECTION 2.2: Meridional component of surface current TRANO2A1.356
C TRANO2A1.357
*IF DEF,TRANGRID TRANO2A1.358
*IF -DEF,AVER_U TRANO2A1.359
CALL COPYO2A
(IMT,JMTM1,VIN,.FALSE.,OMASK TRANO2A1.360
&,.TRUE.,INVERT,IRU,WORK_O) TRANO2A1.361
CALL H_INT_BL
(JMTM1,IRU,ATPOINTS,INDEXBL,INDEXBR,WORK_O CCC1F401.18
&, WEIGHTBL,WEIGHTBR,WEIGHTTL,WEIGHTTR,VOUT) CCC1F401.19
*ELSE TRANO2A1.364
CALL COPYO2A
(IMT,JMTM1,VIN,.FALSE.,OMASK TRANO2A1.365
&,.TRUE.,INVERT,IRU,WORK_O) TRANO2A1.366
CALL DO_AREAVER
(IRU,JMTM1,IRU,.false. OJG1F403.147
&,WORK_O,ICOLS,JROWSM1,COUNT_A OJG1F403.148
&,BASE_A,ICOLS,.FALSE.,AMASKUV,POINT_O,WEIGHT OJG1F403.149
&,0,VOUT,ICODE,CMESSAGE) OJG1F403.150
*ENDIF TRANO2A1.369
*ELSE TRANO2A1.370
CALL COPYO2A
(IMT,JMTM1,VIN,.FALSE.,OMASK,.TRUE.,INVERT,IRU,VOUT) TRANO2A1.371
*ENDIF TRANO2A1.372
C TRANO2A1.373
C Rescale surface currents from ocean (cm/s) to atmosphere (m/s) units TRANO2A1.374
C TRANO2A1.375
DO J=1,JROWSM1 TRANO2A1.376
DO I=1,ICOLS TRANO2A1.377
IF (UOUT(I,J).NE.RMDI) THEN TRANO2A1.378
UOUT(I,J)=UOUT(I,J)*RCMPM TRANO2A1.379
VOUT(I,J)=VOUT(I,J)*RCMPM TRANO2A1.380
ENDIF TRANO2A1.381
ENDDO TRANO2A1.382
ENDDO TRANO2A1.383
C TRANO2A1.384
CL SECTION 3: Set up for T grids TRANO2A1.385
C TRANO2A1.386
IF (INVERT) THEN TRANO2A1.387
DO J=1,JMT TRANO2A1.388
*IF DEF,TRANGRID TRANO2A1.389
*IF -DEF,AVER_T TRANO2A1.390
OCPHI(JMT-J+1)=YTO(J) TRANO2A1.391
*ELSE TRANO2A1.392
OCPHI(JMT-J+1)=YUO(J) TRANO2A1.393
*ENDIF TRANO2A1.394
*ENDIF TRANO2A1.395
DO I=1,IRT TRANO2A1.396
OMASK(I,JMT-J+1)=FKMP(I,J).LT.0.1 CJG6F401.16
ENDDO TRANO2A1.398
ENDDO TRANO2A1.399
*IF DEF,TRANGRID,AND,DEF,AVER_T TRANO2A1.400
OCPHI(JMT+1)=YUO(0) TRANO2A1.401
*ENDIF TRANO2A1.402
ELSE TRANO2A1.403
DO J=1,JMT TRANO2A1.404
*IF DEF,TRANGRID TRANO2A1.405
*IF -DEF,AVER_T TRANO2A1.406
OCPHI(J)=YTO(J) TRANO2A1.407
*ELSE TRANO2A1.408
OCPHI(J)=YUO(J-1) TRANO2A1.409
*ENDIF TRANO2A1.410
*ENDIF TRANO2A1.411
DO I=1,IRT TRANO2A1.412
OMASK(I,J)=FKMP(I,J).LT.0.1 CJG6F401.17
ENDDO TRANO2A1.414
ENDDO TRANO2A1.415
*IF DEF,TRANGRID,AND,DEF,AVER_T TRANO2A1.416
OCPHI(JMT+1)=YUO(JMT) TRANO2A1.417
*ENDIF TRANO2A1.418
ENDIF TRANO2A1.419
*IF DEF,TRANGRID TRANO2A1.420
*IF -DEF,AVER_T TRANO2A1.421
C TRANO2A1.422
C FIND THE ARRAYS OF INTERPOLATION WEIGHTS AND GATHER INDICES TRANO2A1.423
C FOR THE T GRIDS, and the indices for coastal adjustment TRANO2A1.424
C TRANO2A1.425
DO I=1,IRT TRANO2A1.426
OCLAMBDA(I)=XTO(I) TRANO2A1.427
ENDDO TRANO2A1.428
IF (.NOT.GLOBAL) THEN TRANO2A1.429
OCWEST=XUO(0)-720. TRANO2A1.430
OCEAST=XUO(IRT)-XUO(0) TRANO2A1.431
IF (INVERT) THEN TRANO2A1.432
OCNORTH=YUO(JMT) TRANO2A1.433
OCSOUTH=YUO(0) TRANO2A1.434
ELSE TRANO2A1.435
OCNORTH=YUO(0) TRANO2A1.436
OCSOUTH=YUO(JMT) TRANO2A1.437
ENDIF TRANO2A1.438
ENDIF TRANO2A1.439
IJMT=0 TRANO2A1.440
DO J=1,JMT TRANO2A1.441
DO I=1,IRT TRANO2A1.442
IJMT=IJMT+1 TRANO2A1.443
IF (OMASK(I,J)) THEN TRANO2A1.444
OMINT(IJMT)=1 TRANO2A1.445
ELSE TRANO2A1.446
OMINT(IJMT)=0 TRANO2A1.447
ENDIF TRANO2A1.448
ENDDO TRANO2A1.449
ENDDO TRANO2A1.450
ATPOINTS=0 TRANO2A1.451
SEAPOINTS=0 TRANO2A1.452
DO J=1,JROWS TRANO2A1.453
DO I=1,ICOLS TRANO2A1.454
ATPOINTS=ATPOINTS+1 TRANO2A1.455
IF (.NOT.AMASKTP(I,J).AND.(GLOBAL TRANO2A1.456
& .OR.((MOD(XUA(I)-OCWEST,360.).LE.XUA(I)-XUA(I-1) TRANO2A1.457
& .OR.MOD(XUA(I-1)-OCWEST,360.).LE.OCEAST) TRANO2A1.458
& .AND.YTA(J).LE.OCNORTH.AND.YTA(J-1).GE.OCSOUTH))) THEN TRANO2A1.459
SEAPOINTS=SEAPOINTS+1 TRANO2A1.460
ATLAMBDA(SEAPOINTS)=XTA(I) TRANO2A1.461
ATPHI(SEAPOINTS)=YTA(J) TRANO2A1.462
ATPOINT(SEAPOINTS)=ATPOINTS TRANO2A1.463
AMINT(SEAPOINTS)=0 TRANO2A1.464
ENDIF TRANO2A1.465
ENDDO TRANO2A1.466
ENDDO TRANO2A1.467
CALL H_INT_CO
(INDEXBL,INDEXBR,WEIGHTTR,WEIGHTBR,WEIGHTTL,WEIGHTBL TRANO2A1.468
&,OCLAMBDA,OCPHI,ATLAMBDA,ATPHI,IRT,JMT,SEAPOINTS,CYCLIC) TRANO2A1.469
CALL COAST_AJ
(INDEXBL,INDEXBR,WEIGHTTR,WEIGHTBR,WEIGHTTL,WEIGHTBL TRANO2A1.470
&,IRT,JMT,SEAPOINTS,OMINT,AMINT,INDEXI,INDEXO,NCOASTAL,.TRUE. TRANO2A1.471
&,IDUMMY1,N1,IDUMMY2,N2) TRANO2A1.472
*ELSE TRANO2A1.473
C TRANO2A1.474
C Calculate weights and indices for area-averaging for the T grids TRANO2A1.475
C TRANO2A1.476
LENL=MAXL TRANO2A1.477
CALL PRE_AREAVER
(IRT,XUO,JMT,OCPHI,GLOBAL,IMT,.FALSE. TRANO2A1.478
&,OMASK,ICOLS,XUA,JROWS,YUA,.TRUE.,.TRUE. CJG1F401.50
&,LENL,COUNT_A,BASE_A,POINT_O,WEIGHT,ICODE,CMESSAGE) CJG1F401.51
*ENDIF TRANO2A1.481
*ENDIF TRANO2A1.482
C TRANO2A1.483
C WORK_A initialised with RMDI so that we may see where the TRANO2A1.484
C atmosphere field is going to be updated by the ocean (used TRANO2A1.485
C in sections 5 and 7) TRANO2A1.486
C TRANO2A1.487
DO J=1,JROWS TRANO2A1.488
DO I=1,ICOLS TRANO2A1.489
WORK_A(I,J)=RMDI TRANO2A1.490
ENDDO TRANO2A1.491
ENDDO TRANO2A1.492
*IF DEF,SEAICE TRANO2A1.493
C TRANO2A1.494
CL SECTION 4: ICE CONCENTRATION. TRANO2A1.495
C TRANO2A1.496
C COPY THE VALUES CURRENTLY IN THE ATMOSPHERE TO A LOCAL ARRAY TRANO2A1.497
C FOR REFERENCE DURING SECTION 7. TRANO2A1.498
C TRANO2A1.499
DO J=1,JROWS TRANO2A1.500
DO I=1,ICOLS TRANO2A1.501
AICEREF(I,J)=AICEOUT(I,J) TRANO2A1.502
ENDDO TRANO2A1.503
ENDDO TRANO2A1.504
C TRANO2A1.505
*IF DEF,TRANGRID TRANO2A1.506
*IF -DEF,AVER_T TRANO2A1.507
CALL COPYO2A
(IMT,JMT,AICEIN,.FALSE.,OMASK TRANO2A1.508
&,.TRUE.,INVERT,IRT,WORK_O) TRANO2A1.509
CALL H_INT_BL
(JMT,IRT,SEAPOINTS,INDEXBL,INDEXBR,WORK_O CCC1F401.20
&, WEIGHTBL,WEIGHTBR,WEIGHTTL,WEIGHTTR,WORK_I) UDG1F400.391
CALL POST_H_INT
(NCOASTAL,INDEXO,INDEXI,IJMT,WORK_O,OMINT TRANO2A1.512
&,SEAPOINTS,WORK_I,ATPOINT,RMDI,ATPOINTS,AICEOUT) TRANO2A1.513
*ELSE TRANO2A1.514
CALL COPYO2A
(IMT,JMT,AICEIN,.FALSE.,OMASK TRANO2A1.515
&,.FALSE.,INVERT,IMT,WORK_O) TRANO2A1.516
CALL DO_AREAVER
(IRT,JMT,IMT,.false. OJG1F403.151
&,WORK_O,ICOLS,JROWS,COUNT_A,BASE_A OJG1F403.152
&,ICOLS,.FALSE.,AMASKTP,POINT_O,WEIGHT OJG1F403.153
&,0,AICEOUT,ICODE,CMESSAGE) OJG1F403.154
*ENDIF TRANO2A1.519
*ELSE TRANO2A1.520
C If grids are congruent we assume that JMT=JROWS, IRT=ICOLS TRANO2A1.521
C TRANO2A1.522
CALL COPYO2A
(IMT,JMT,AICEIN,.FALSE.,OMASK TRANO2A1.523
&,.FALSE.,INVERT,IRT,AICEOUT) TRANO2A1.524
*ENDIF TRANO2A1.525
C TRANO2A1.526
CL SECTION 5: ICE DEPTH. TRANO2A1.527
C TRANO2A1.528
C BEGIN BY CONVERTING FROM THE GRID BOX MEAN ACTUAL ICE DEPTH TRANO2A1.529
C TO THE EQUIVALENT ICE DEPTH AVERAGED OVER THICK ICE. TRANO2A1.530
C THIS PROCESS USES THE ICE CONCENTRATION AND SNOW DEPTH FIELDS. TRANO2A1.531
C Neglect sea-ice in boxes with less than the minimum ice fraction TRANO2A1.532
C TRANO2A1.533
DO 210 J = 1,JMT TRANO2A1.534
DO 205 I = 1,IRT TRANO2A1.535
IF (TSTARIN(I,J).NE.RMDI) THEN TRANO2A1.536
IF (AICEIN(I,J).LT.AICEMIN) THEN TRANO2A1.537
WORK_O(I,J)=0. TRANO2A1.538
ELSE TRANO2A1.539
WORK_O(I,J)=HICEIN(I,J)/AICEIN(I,J) TRANO2A1.540
& + CONRATIO*HSNOWIN(I,J) TRANO2A1.541
ENDIF TRANO2A1.542
ENDIF TRANO2A1.543
205 CONTINUE TRANO2A1.544
210 CONTINUE TRANO2A1.545
C TRANO2A1.546
*IF DEF,TRANGRID TRANO2A1.547
*IF -DEF,AVER_T TRANO2A1.548
CALL COPYO2A
(IMT,JMT,WORK_O,.FALSE.,OMASK TRANO2A1.549
&,.TRUE.,INVERT,IRT,WORK_O2) TRANO2A1.550
CALL H_INT_BL
(JMT,IRT,SEAPOINTS,INDEXBL,INDEXBR,WORK_O2 CCC1F401.21
&, WEIGHTBL,WEIGHTBR,WEIGHTTL,WEIGHTTR,WORK_I) UDG1F400.393
CALL POST_H_INT
(NCOASTAL,INDEXO,INDEXI,IJMT,WORK_O2,OMINT TRANO2A1.553
&,SEAPOINTS,WORK_I,ATPOINT,RMDI,ATPOINTS,WORK_A) TRANO2A1.554
*ELSE TRANO2A1.555
IF (INVERT) CALL ROWSWAP
(WORK_O,WORK_O,IMT,JMT) TRANO2A1.556
CALL DO_AREAVER
(IRT,JMT,IMT,.false. OJG1F403.155
&,WORK_O,ICOLS,JROWS,COUNT_A,BASE_A OJG1F403.156
&,ICOLS,.FALSE.,AMASKTP,POINT_O,WEIGHT OJG1F403.157
&,0,WORK_A,ICODE,CMESSAGE) OJG1F403.158
*ENDIF TRANO2A1.559
*ELSE TRANO2A1.560
CALL COPYO2A
(IMT,JMT,WORK_O,.FALSE.,OMASK TRANO2A1.561
&,.FALSE.,INVERT,IRT,WORK_A) TRANO2A1.562
*ENDIF TRANO2A1.563
C TRANO2A1.564
C Remove sea-ice at boxes with less than the minimum ice fraction; TRANO2A1.565
C set icedepth to zero at ice-free boxes TRANO2A1.566
C TRANO2A1.567
DO J=1,JROWS TRANO2A1.568
DO I=1,ICOLS TRANO2A1.569
IF (WORK_A(I,J).NE.RMDI) THEN TRANO2A1.570
IF (AICEOUT(I,J).LT.AICEMIN) AICEOUT(I,J)=0. TRANO2A1.571
IF (AICEOUT(I,J).EQ.0.) WORK_A(I,J)=0. TRANO2A1.572
HICEOUT(I,J)=WORK_A(I,J) TRANO2A1.573
ENDIF TRANO2A1.574
ENDDO TRANO2A1.575
ENDDO TRANO2A1.576
C TRANO2A1.577
CL SECTION 6: SNOW DEPTH. TRANO2A1.578
C TRANO2A1.579
C NOTE THAT THIS HAS TO BE CONVERTED FROM M TO KG/M**2. TRANO2A1.580
C TRANO2A1.581
DO J=1,JMT TRANO2A1.582
DO I=1,IRT TRANO2A1.583
IF (TSTARIN(I,J).NE.RMDI) TRANO2A1.584
& WORK_O(I,J)=HSNOWIN(I,J)*RHOSNOW TRANO2A1.585
ENDDO TRANO2A1.586
ENDDO TRANO2A1.587
*IF DEF,TRANGRID TRANO2A1.588
*IF -DEF,AVER_T TRANO2A1.589
CALL COPYO2A
(IMT,JMT,WORK_O,.FALSE.,OMASK TRANO2A1.590
&,.TRUE.,INVERT,IRT,WORK_O2) TRANO2A1.591
CALL H_INT_BL
(JMT,IRT,SEAPOINTS,INDEXBL,INDEXBR,WORK_O2 CCC1F401.22
&, WEIGHTBL,WEIGHTBR,WEIGHTTL,WEIGHTTR,WORK_I) UDG1F400.395
CALL POST_H_INT
(NCOASTAL,INDEXO,INDEXI,IJMT,WORK_O2,OMINT TRANO2A1.594
&,SEAPOINTS,WORK_I,ATPOINT,RMDI,ATPOINTS,HSNOWOUT) TRANO2A1.595
*ELSE TRANO2A1.596
IF (INVERT) CALL ROWSWAP
(WORK_O,WORK_O,IMT,JMT) TRANO2A1.597
CALL DO_AREAVER
(IRT,JMT,IMT,.false. OJG1F403.159
&,WORK_O,ICOLS,JROWS,COUNT_A,BASE_A OJG1F403.160
&,ICOLS,.FALSE.,AMASKTP,POINT_O,WEIGHT OJG1F403.161
&,0,HSNOWOUT,ICODE,CMESSAGE) OJG1F403.162
*ENDIF TRANO2A1.600
*ELSE TRANO2A1.601
CALL COPYO2A
(IMT,JMT,WORK_O,.FALSE.,OMASK TRANO2A1.602
&,.FALSE.,INVERT,IRT,HSNOWOUT) TRANO2A1.603
*ENDIF TRANO2A1.604
*ENDIF TRANO2A1.605
C TRANO2A1.606
CL SECTION 7: SEA SURFACE TEMPERATURE. TRANO2A1.607
C TRANO2A1.608
C NOTE THAT THIS HAS TO BE CONVERTED FROM CELSIUS TO KELVIN. TRANO2A1.609
C TRANO2A1.610
*IF DEF,TRANGRID TRANO2A1.611
*IF -DEF,AVER_T TRANO2A1.612
CALL COPYO2A
(IMT,JMT,TSTARIN,.FALSE.,OMASK TRANO2A1.613
&,.TRUE.,INVERT,IRT,WORK_O) TRANO2A1.614
CALL H_INT_BL
(JMT,IRT,SEAPOINTS,INDEXBL,INDEXBR,WORK_O CCC1F401.23
CCC1F401.24
&, WEIGHTBL,WEIGHTBR,WEIGHTTL,WEIGHTTR,WORK_I) UDG1F400.397
UDG1F400.398
CALL POST_H_INT
(NCOASTAL,INDEXO,INDEXI,IJMT,WORK_O,OMINT TRANO2A1.617
&,SEAPOINTS,WORK_I,ATPOINT,RMDI,ATPOINTS,WORK_A) TRANO2A1.618
*ELSE TRANO2A1.619
CALL COPYO2A
(IMT,JMT,TSTARIN,.FALSE.,OMASK TRANO2A1.620
&,.FALSE.,INVERT,IMT,WORK_O) TRANO2A1.621
CALL DO_AREAVER
(IRT,JMT,IMT,.false. OJG1F403.163
&,WORK_O,ICOLS,JROWS,COUNT_A,BASE_A OJG1F403.164
&,ICOLS,.FALSE.,AMASKTP,POINT_O,WEIGHT OJG1F403.165
&,0,WORK_A,ICODE,CMESSAGE) OJG1F403.166
*ENDIF TRANO2A1.624
*ELSE TRANO2A1.625
CALL COPYO2A
(IMT,JMT,TSTARIN,.FALSE.,OMASK TRANO2A1.626
&,.FALSE.,INVERT,IRT,WORK_A) TRANO2A1.627
*ENDIF TRANO2A1.628
C TRANO2A1.629
*IF DEF,SEAICE TRANO2A1.630
C AT SEA-ICE POINTS, THE GRID BOX MEAN SURFACE TEMPERATURE IS TRANO2A1.631
C ALTERED IN SUCH A WAY THAT THE SURFACE TEMPERATURE OF THE ICY TRANO2A1.632
C PORTION OF THE BOX IS THE SAME AS IT WAS AT THE END OF THE LAST TRANO2A1.633
C ATMOSPHERIC PHASE. HOWEVER, IF ICE APPEARED DURING THE TRANO2A1.634
C MOST RECENT OCEAN PHASE, ITS TEMPERATURE IS INITIALISED AT THE TRANO2A1.635
C FREEZING POINT OF SEAWATER. TRANO2A1.636
C THIS CODE USES THE OLD VALUES OF ICE CONCENTRATION, WHICH WERE TRANO2A1.637
C STORED DURING SECTION 2 IN AICEREF. TRANO2A1.638
C TRANO2A1.639
DO 420 J = 1,JROWS TRANO2A1.640
DO 415 I = 1,ICOLS TRANO2A1.641
IF (WORK_A(I,J) .NE. RMDI) THEN TRANO2A1.642
IF (AICEOUT(I,J) .EQ. 0.0) THEN TRANO2A1.643
TSTAROUT(I,J) = WORK_A(I,J) + ZERODEGC TRANO2A1.644
ELSEIF (AICEREF(I,J) .GE. AICEMIN) THEN TRANO2A1.645
TSTAROUT(I,J) = TFS + ( AICEOUT(I,J)/AICEREF(I,J) ) TRANO2A1.646
+ *( TSTAROUT(I,J) - TFS ) TRANO2A1.647
ELSE TRANO2A1.648
TSTAROUT(I,J) = TFS TRANO2A1.649
ENDIF TRANO2A1.650
ENDIF TRANO2A1.651
415 CONTINUE TRANO2A1.652
420 CONTINUE TRANO2A1.653
*ELSE TRANO2A1.654
DO 430 J = 1,JROWS TRANO2A1.655
DO 425 I = 1,ICOLS TRANO2A1.656
IF (WORK_A(I,J) .NE. RMDI) THEN TRANO2A1.657
TSTAROUT(I,J) = WORK_A(I,J) + ZERODEGC TRANO2A1.658
ENDIF TRANO2A1.659
425 CONTINUE TRANO2A1.660
430 CONTINUE TRANO2A1.661
*ENDIF TRANO2A1.662
*IF -DEF,TRANGRID CCN1F405.326
C CCN1F405.327
CL SECTION 8: ocean co2 flux CCN1F405.328
C CCN1F405.329
CCN1F405.330
IF (L_CO2_INTERACTIVE) THEN CCN1F405.331
CALL COPYO2A
(IMT,JMT,CO2FLUXIN,.FALSE.,OMASK CCN1F405.332
& ,.TRUE.,INVERT,IRT,CO2FLUXOUT) CCN1F405.333
CCN1F405.334
DO J=1,JROWS CCN1F405.335
DO I=1,ICOLS CCN1F405.336
IF (CO2FLUXOUT(i,j) .ne. RMDI) THEN CCN1F405.337
CO2FLUXOUT(i,j) = CO2FLUXOUT(i,j) * CO2CONV_O2A CCN1F405.338
ENDIF CCN1F405.339
ENDDO CCN1F405.340
ENDDO CCN1F405.341
ENDIF CCN1F405.342
*ENDIF CCN1F405.343
C TRANO2A1.663
999 CONTINUE TRANO2A1.664
RETURN TRANO2A1.665
END TRANO2A1.666
*ENDIF TRANO2A1.667