*IF DEF,CONTROL,AND,DEF,ATMOS,AND,DEF,OCEAN,AND,-DEF,MPP GRR0F402.54
C ******************************COPYRIGHT****************************** GTS2F400.9919
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.9920
C GTS2F400.9921
C Use, duplication or disclosure of this code is subject to the GTS2F400.9922
C restrictions as set forth in the contract. GTS2F400.9923
C GTS2F400.9924
C Meteorological Office GTS2F400.9925
C London Road GTS2F400.9926
C BRACKNELL GTS2F400.9927
C Berkshire UK GTS2F400.9928
C RG12 2SZ GTS2F400.9929
C GTS2F400.9930
C If no contract has been raised with this copy of the code, the use, GTS2F400.9931
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.9932
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.9933
C Modelling at the above address. GTS2F400.9934
C ******************************COPYRIGHT****************************** GTS2F400.9935
C GTS2F400.9936
CLL Routine: SWAP_O2A ------------------------------------------------- SWAPO2A1.3
CLL SWAPO2A1.4
CLL Purpose: 2nd level control routine to control the interchange of SWAPO2A1.5
CLL data when swapping from ocean to atmosphere in a coupled SWAPO2A1.6
CLL model. Fields required from the completed ocean SWAPO2A1.7
CLL phase are copied to workspace from D1 addresses worked SWAPO2A1.8
CLL out by INIT_A2O; ocean data is written from D1 to disk; SWAPO2A1.9
CLL atmosphere data read from disk to overlay D1; and finally SWAPO2A1.10
CLL routine TRANSO2A is called to perform the data processing SWAPO2A1.11
CLL required to complete the coupling. SWAPO2A1.12
CLL SWAPO2A1.13
CLL Tested under compiler: cft77 SWAPO2A1.14
CLL Tested under OS version: UNICOS 5.1 SWAPO2A1.15
CLL SWAPO2A1.16
CLL Author: T.C.Johns SWAPO2A1.17
CLL SWAPO2A1.18
CLL Model Modification history from model version 3.0: SWAPO2A1.19
CLL version date SWAPO2A1.20
CLL 3.2 18/06/93 Changes for dynamic allocation (TCJ). @DYALLOC.3531
CLL 3.4 03/08/94 Safer treatment of RMDI in dump. (JFT) CJT0F304.6
CLL 4.2 22/11/96 Allow uncompressed ocean dumps. S Ineson GSI0F402.30
CLL 4.2 11/10/96 : Enable atmos-ocean coupling for MPP. GRR0F402.55
CLL (1): Coupled fields. Disable this deck for MPP GRR0F402.56
CLL running (a separate deck SWAPO2A2 introduced for GRR0F402.57
CLL MPP). Add global size arguments for consistency GRR0F402.58
CLL with SWAPO2A2. R. Rawlins GRR0F402.59
CLL 4.2 11/10/96 : Enable atmos-ocean coupling for MPP. GRR1F402.312
CLL (2): Swap D1 memory. New argument in TRANSIN, GRR1F402.313
CLL TRANSOUT routines. R. Rawlins GRR1F402.314
CLL 4.5 1/07/98 Include code to pass ocean CO2 flux. C.D.Jones CCN1F405.373
CLL SWAPO2A1.21
CLL Programming standard: UM Doc Paper 3, version 2 (7/9/90) SWAPO2A1.22
CLL SWAPO2A1.23
CLL Logical components covered: C12 SWAPO2A1.24
CLL SWAPO2A1.25
CLL Project task: C0 SWAPO2A1.26
CLL SWAPO2A1.27
CLL External documentation: SWAPO2A1.28
CLL Unified Model Doc Paper C2 - Atmosphere-Ocean coupling: overview CCN1F405.374
CLL SWAPO2A1.30
CLL ------------------------------------------------------------------- SWAPO2A1.31
C*L Interface and arguments: ------------------------------------------ SWAPO2A1.32
C SWAPO2A1.33
SUBROUTINE SWAP_O2A (G_P_FIELD,G_IMTJMT,CO2_DIMA,CO2_DIMO, 2,49CCN1F405.375
& CO2_DIMO2, CCN1F405.376
*CALL ARGSIZE
@DYALLOC.3533
*CALL ARGD1
@DYALLOC.3534
*CALL ARGDUMO
@DYALLOC.3535
*CALL ARGPTRA
@DYALLOC.3536
*CALL ARGPTRO
@DYALLOC.3537
*CALL ARGCONO
CJG6F401.5
*CALL ARGAOCPL
@DYALLOC.3538
* ICODE,CMESSAGE ) @DYALLOC.3539
C SWAPO2A1.35
IMPLICIT NONE SWAPO2A1.36
C SWAPO2A1.37
*CALL TYPSIZE
@DYALLOC.3540
*CALL TYPD1
@DYALLOC.3541
*CALL TYPDUMO
@DYALLOC.3542
*CALL TYPPTRA
@DYALLOC.3543
*CALL TYPPTRO
@DYALLOC.3544
*CALL TYPCONO
CJG6F401.6
*CALL TYPAOCPL
@DYALLOC.3545
C @DYALLOC.3546
INTEGER G_P_FIELD, ! IN Not used: required for GRR0F402.61
& G_IMTJMT ! IN consistency with MPP GRR0F402.62
& ,CO2_DIMA ! IN : dimension of atmos CO2 array CCN1F405.377
& ,CO2_DIMO ! IN : dimension of ocean CO2 array CCN1F405.378
& ,CO2_DIMO2 ! IN : dimension of ocean CO2 diagnostic CCN1F405.379
& ,CO2_ICOLS,CO2_JROWS ! OUT: CO2 array dimensions CCN1F405.380
& ,CO2_IMT, CO2_JMT CCN1F405.381
INTEGER SWAPO2A1.38
& ICODE ! OUT - Error return code SWAPO2A1.40
CHARACTER*(*) CMESSAGE ! OUT - Error return message SWAPO2A1.41
C*---------------------------------------------------------------------- SWAPO2A1.42
C Common blocks SWAPO2A1.43
C SWAPO2A1.44
*CALL CMAXSIZE
GDR3F305.3
*CALL CSUBMODL
GDR3F305.4
*CALL CTIME
SWAPO2A1.47
*CALL CAOPTR
SWAPO2A1.48
*CALL C_0_DG_C
SWAPO2A1.49
*CALL C_MDI
SWAPO2A1.50
*CALL TYPOCDPT
CJG6F401.7
*CALL CNTLATM
CCN1F405.382
*CALL CNTLOCN
GSI0F402.31
C @DYALLOC.3547
C Subroutines called SWAPO2A1.53
C SWAPO2A1.54
EXTERNAL TRANSOUT,TRANSIN,TRANSO2A,UNPACK SWAPO2A1.55
C SWAPO2A1.56
C Local variables SWAPO2A1.57
C SWAPO2A1.58
INTEGER SWAPO2A1.59
& NFTASWAP,NFTOSWAP, ! FT units for swap files SWAPO2A1.60
& I, J ! Loop indeces CCN1F405.383
REAL SWAPO2A1.62
& AMDI, ! Missing data indicator SWAPO2A1.63
& SST(IMT*JMT), ! SST from ocean model @DYALLOC.3548
& UCURR(IMT*JMT),VCURR(IMT*JMT) ! Surface currents in ocean @DYALLOC.3549
& ,CO2FLUX(CO2_DIMO2) ! diagnostic co2 flux CCN1F405.384
& ,O_CO2FLUX(CO2_DIMO) ! co2 flux on ocean grid CCN1F405.385
*IF DEF,SEAICE SWAPO2A1.66
&, AICE(IMT*JMT), ! Seaice fraction @DYALLOC.3550
& ICEDEPTH(IMT*JMT), ! Ice depth @DYALLOC.3551
& SNOWDEPTH(IMT*JMT) ! Snowdepth @DYALLOC.3552
*ENDIF SWAPO2A1.70
CL---------------------------------------------------------------------- SWAPO2A1.71
CL 1. Copy coupling fields from ocean D1 addresses to workspace SWAPO2A1.72
CL NB: SST and currents (handled first) need decompression SWAPO2A1.73
CL ** Currents return JMT rows until ocean changes grid ** SWAPO2A1.74
CL SWAPO2A1.77
C SWAPO2A1.83
IF (L_OCOMP) THEN GSI0F402.32
GSI0F402.33
CALL UNPACK
(1,JMT, 1,1,JMT,KM, IMT,JMT,1, SWAPO2A1.84
& O_CFI1,O_CFI2,joc_no_segs,O_CFI3,joc_no_seapts, SWAPO2A1.85
& D1(joc_tracer(1,2)),SST, RMDI,CYCLIC_OCEAN) CJT0F304.7
CALL UNPACK
(1,JMT, 1,1,JMT,KM, IMT,JMT,1, SWAPO2A1.87
& O_CFI1,O_CFI2,joc_no_segs,O_CFI3,joc_no_seapts, SWAPO2A1.88
& D1(joc_u(2)),UCURR, RMDI,CYCLIC_OCEAN) CJT0F304.8
CALL UNPACK
(1,JMT, 1,1,JMT,KM, IMT,JMT,1, SWAPO2A1.90
& O_CFI1,O_CFI2,joc_no_segs,O_CFI3,joc_no_seapts, SWAPO2A1.91
& D1(joc_v(2)),VCURR, RMDI,CYCLIC_OCEAN) CJT0F304.9
GSI0F402.34
ELSE GSI0F402.35
GSI0F402.36
DO I=1,IMT*JMT GSI0F402.37
SST(I)=D1(JO_TSTAR+I-1) GSI0F402.38
ENDDO GSI0F402.39
DO I=1,IMT*JMTM1 GSI0F402.40
UCURR(I)=D1(JO_UCURR+I-1) GSI0F402.41
VCURR(I)=D1(JO_VCURR+I-1) GSI0F402.42
ENDDO GSI0F402.43
GSI0F402.44
ENDIF GSI0F402.45
GSI0F402.46
*IF DEF,SEAICE SWAPO2A1.93
DO I=1,IMT*JMT @DYALLOC.3553
AICE(I)=D1(JO_AICE+I-1) SWAPO2A1.95
ICEDEPTH(I)=D1(JO_ICEDEPTH+I-1) SWAPO2A1.96
SNOWDEPTH(I)=D1(JO_SNOWDEPTH+I-1) SWAPO2A1.97
ENDDO SWAPO2A1.98
*ENDIF SWAPO2A1.99
! read data from D1 to CO2FLUX, without cyclic points CCN1F405.386
IF (L_CO2_INTERACTIVE) THEN CCN1F405.387
DO I=1,CO2_DIMO2 CCN1F405.388
CO2FLUX(I)=D1(JO_CO2FLUX+I-1) CCN1F405.389
ENDDO CCN1F405.390
! copy data to O_CO2FLUX on full grid CCN1F405.391
DO J=1,JMT CCN1F405.392
DO I=1,IMT-2 CCN1F405.393
O_CO2FLUX(I+(J-1)*IMT) = CO2FLUX(I+(J-1)*(IMT-2)) CCN1F405.394
ENDDO ! I CCN1F405.395
ENDDO ! J CCN1F405.396
! copy data into cyclic points CCN1F405.397
CALL CYCLICBC
(O_CO2FLUX,IMT,JMT) CCN1F405.398
ENDIF ! L_CO2_INTERACTIVE CCN1F405.399
SWAPO2A1.100
CL---------------------------------------------------------------------- SWAPO2A1.101
CL 2. Perform IO to swap data in D1 from ocean to atmosphere SWAPO2A1.102
CL SWAPO2A1.103
NFTASWAP=18 SWAPO2A1.104
NFTOSWAP=19 SWAPO2A1.105
C SWAPO2A1.106
CALL TRANSOUT
( @DYALLOC.3554
*CALL ARGD1
@DYALLOC.3555
& O_LEN_DATA+O_LEN_DUALDATA, GSI0F402.47
& NFTOSWAP,ocean_sm,ICODE,CMESSAGE) GRR1F402.315
IF (ICODE.GT.0) GOTO 999 SWAPO2A1.109
C SWAPO2A1.110
CALL TRANSIN
( @DYALLOC.3557
*CALL ARGD1
@DYALLOC.3558
& A_LEN_DATA+(P_LEVELS+1+2*Q_LEVELS)*P_FIELD, @DYALLOC.3559
& NFTASWAP,atmos_sm,ICODE,CMESSAGE) GRR1F402.316
IF (ICODE.GT.0) GOTO 999 SWAPO2A1.113
SWAPO2A1.114
CL---------------------------------------------------------------------- SWAPO2A1.115
CL 3. Perform the coupling calculations SWAPO2A1.116
CL SWAPO2A1.117
IF (L_CO2_INTERACTIVE) THEN CCN1F405.400
CO2_ICOLS = ROW_LENGTH CCN1F405.401
CO2_JROWS = P_ROWS CCN1F405.402
CO2_IMT = IMT CCN1F405.403
CO2_JMT = JMT CCN1F405.404
ELSE CCN1F405.405
O_CO2FLUX(1) = 0.0 CCN1F405.406
CO2_ICOLS = 1 CCN1F405.407
CO2_JROWS = 1 CCN1F405.408
CO2_IMT = 1 CCN1F405.409
CO2_JMT = 1 CCN1F405.410
ENDIF CCN1F405.411
CALL TRANSO2A
( SWAPO2A1.118
& SST,D1(JA_TSTAR),UCURR,D1(JA_UCURR),VCURR,D1(JA_VCURR), SWAPO2A1.119
*IF DEF,SEAICE SWAPO2A1.120
& AICE,D1(JA_AICE),ICEDEPTH,D1(JA_ICEDEPTH), SWAPO2A1.121
& SNOWDEPTH,D1(JA_SNOWDEPTH), SWAPO2A1.122
*ENDIF SWAPO2A1.123
& O_CO2FLUX,D1(JA_CO2FLUX),CO2_ICOLS,CO2_JROWS,CO2_IMT,CO2_JMT, CCN1F405.412
*IF DEF,TRANGRID SWAPO2A1.124
& XUO,XTO,YUO,YTO,XTA,XUA,YTA,YUA,LD1(JLAND), SWAPO2A1.125
*ENDIF SWAPO2A1.126
+ IMT,JMT,JMTM1,ROW_LENGTH,P_ROWS,U_ROWS, SWAPO2A1.127
C *** Note that current arrays actually have JMT rows for the moment, SWAPO2A1.128
C *** but TRANSO2A will simply ignore the extra row SWAPO2A1.129
+ (IMT+ROW_LENGTH)*(JMT+P_ROWS), SWAPO2A1.130
& O_FLDDEPC,O_SPCON(jocp_fkmq), CJG6F401.8
+ INVERT_OCEAN,CYCLIC_OCEAN,GLOBAL_OCEAN SWAPO2A1.131
&,ZERODEGC,TFS,ICODE,CMESSAGE) CJT0F304.10
C SWAPO2A1.133
999 CONTINUE SWAPO2A1.134
RETURN SWAPO2A1.135
CL---------------------------------------------------------------------- SWAPO2A1.136
END SWAPO2A1.137
*ENDIF SWAPO2A1.138