*IF DEF,CONTROL,AND,DEF,ATMOS AC_CTL1.2
C ******************************COPYRIGHT****************************** GTS2F400.145
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.146
C GTS2F400.147
C Use, duplication or disclosure of this code is subject to the GTS2F400.148
C restrictions as set forth in the contract. GTS2F400.149
C GTS2F400.150
C Meteorological Office GTS2F400.151
C London Road GTS2F400.152
C BRACKNELL GTS2F400.153
C Berkshire UK GTS2F400.154
C RG12 2SZ GTS2F400.155
C GTS2F400.156
C If no contract has been raised with this copy of the code, the use, GTS2F400.157
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.158
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.159
C Modelling at the above address. GTS2F400.160
C ******************************COPYRIGHT****************************** GTS2F400.161
C GTS2F400.162
CLL Subroutine AC_CTL ----------------------------------------------- AC_CTL1.3
CLL AC_CTL1.4
CLL Level 2 control routine AC_CTL1.5
CLL version for CRAY YMP AC_CTL1.6
CLL AC_CTL1.7
CLL Model Modification history from model version 3.0: AC_CTL1.8
CLL version Date AC_CTL1.9
CLL 3.1 9/12/92 F3 always passed to AC.(Phil Andrews) SB230293.243
CLL 3.1 3/02/93 : added comdeck CHSUNITS to define NUNITS for i/o RS030293.132
CLL 3.2 19/04/93 : code for new real missing data indicator (TCJ). TJ050593.5
CLL 3.2 08/04/93 Dynamic allocation of main arrays. R T H Barnes @DYALLOC.191
CLL 3.3 1/12/93 : Orog passed to AC (Nigel R) SB151293.1
CLL 3.3 1/12/93 : Rain passed to AC (Bruce M) SB151293.2
CLL 3.4 03/08/94 : Tracer data and pointers passed to AC (Richard S) ARSAF304.3
CLL 3.4 29/11/94 : TR_VARSDA added to arg.list for portable compile. ANF1F304.4
CLL 3.4 10/08/94 : Visibility passed to AC (Pete Clark) ABM1F304.1
CLL 3.4 7/09/94 : Remove cloud water/ice from call to AC ABM1F304.2
CLL : Remove cloud water/ice,RHCRIT from call to STRATQ ABM1F304.3
CLL : Surface run-off amount passed to AC ABM1F304.4
CLL : Convective cloud amount passed to AC ABM1F304.5
CLL : Pass cloud regime boundaries to AC from CCONSTS ABM1F304.6
CLL : B Macpherson ABM1F304.7
CLL 4.0 10/03/95 : Correct placement of test on JVS1P5M ABM1F400.1
CLL : B Macpherson ABM1F400.2
CLL 3.5 04/04/95 : Sub-model changes - Remove run time constants ADR1F305.1
CLL : from Atmos dump headers. D. Robinson. ADR1F305.2
CLL 4.0 14/6/95 : retrieve various extra moisture/temperature ABM3F400.46
CLL : fields from dump, calculate large-scale latent ABM3F400.47
CLL : heating rate and pass to AC, along with convective ABM3F400.48
CLL : heating rate. B Macpherson ABM3F400.49
CLL 4.0 05/01/96: Redefine dynamic allocated arrays. (N Farnon) ABM3F400.50
CLL 4.1 23/05/96: Code to cope with single or multi-level hydrology, AFF2F401.1
CLL or MOSES/Penman Monteith (Bruce Macpherson) AFF2F401.2
! 4.1 18/06/96 Changes to cope with changes in STASH addressing GDG0F401.8
! Author D.M. Goddard. GDG0F401.9
! 4.3 26/2/97 Add SWAPBOUNDS. Stuart Bell ASB1F403.3
! 4.4 3/7/97 Change ICODE test after AC to avoid timer abort. DS AAM1F404.13
CLL 4.4 24/06/97 Use non-shmem swapbounds for visibility ARB0F404.7
CLL to fill in superpolar rows. RTHBarnes. ARB0F404.8
CLL 4.4 02/12/97 Also add swapbounds for p_exner after AC scheme ARB0F404.9
CLL to ensure bit reproducibility in LAM & Mes. RTHB. ARB0F404.10
! 4.4 Sept 97 Mixed phase precip scheme uses zero array ADM2F404.11
! instead of QCF in call to THETL_QT. ADM2F404.12
! Damian Wilson. ADM2F404.13
! 4.5 Feb 98 Add code to re-balance thermodynamic fields AFF2F405.5
! after AC when doing latent heat nudging. AFF2F405.6
! Bruce Macpherson. AFF2F405.7
! 4.5 Mar 98 Pass QCL and QCF to AC for new microphysics AFF1F405.1
! Bruce Macpherson AFF1F405.2
CLL 4.5 01/05/98 Restrict murk aerosol calculations to aerosol APC0F405.802
CLL levels=boundary levels. P.Clark APC0F405.803
! 4.5 June 98 Modified call to GLUE_CLD. S.Cusack ASK1F405.80
CLL 4.5 19/01/98 Replace JVEG_FLDS(6) with JSURF_CAP. D. Robinson. GDR6F405.83
CLL AC_CTL1.10
CLL programming standard : unified model documentation paper No 3 AC_CTL1.11
CLL AC_CTL1.12
CLL Logical components covered : P1 AC_CTL1.13
CLL AC_CTL1.14
CLL Project task : P0 AC_CTL1.15
CLLEND ----------------------------------------------------------------- AC_CTL1.16
C*L Arguments AC_CTL1.17
SUBROUTINE AC_CTL(INT18,TR_VARSDA,P_FIELDDA,Q_LEVELSDA, 1,34ABM3F400.51
*CALL ARGSIZE
@DYALLOC.193
*CALL ARGD1
@DYALLOC.194
*CALL ARGDUMA
@DYALLOC.195
*CALL ARGDUMO
@DYALLOC.196
*CALL ARGDUMW
GKR1F401.163
*CALL ARGSTS
@DYALLOC.197
*CALL ARGPTRA
@DYALLOC.198
*CALL ARGPTRO
@DYALLOC.199
*CALL ARGCONA
@DYALLOC.200
*CALL ARGPPX
GKR0F305.874
& ICODE, CMESSAGE) @DYALLOC.201
IMPLICIT NONE AC_CTL1.19
@DYALLOC.202
*CALL CMAXSIZE
@DYALLOC.203
*CALL CSUBMODL
GSS2F305.94
*CALL TYPSIZE
@DYALLOC.204
*CALL TYPD1
@DYALLOC.205
*CALL TYPDUMA
@DYALLOC.206
*CALL TYPDUMO
@DYALLOC.207
*CALL TYPDUMW
GKR1F401.164
*CALL TYPSTS
@DYALLOC.208
*CALL TYPPTRA
@DYALLOC.209
*CALL TYPPTRO
@DYALLOC.210
*CALL TYPCONA
@DYALLOC.211
*CALL PPXLOOK
GKR0F305.875
AC_CTL1.20
INTEGER INT18 ! Dummy variable for STASH_MAXLEN(18) AC_CTL1.21
INTEGER TR_VARSDA ! Copy of TR_VARS for dynamic allocn. ANF1F304.6
INTEGER P_FIELDDA,Q_LEVELSDA ABM3F400.52
INTEGER ICODE ! Return code : 0 Normal Exit AC_CTL1.22
c ! : > 0 Error AC_CTL1.23
AC_CTL1.24
CHARACTER*(*) CMESSAGE ! Error message if return code >0 AC_CTL1.25
AC_CTL1.26
*CALL C_MDI
TJ050593.6
*CALL CHSUNITS
RS030293.133
*CALL CCONTROL
AC_CTL1.28
*CALL CTIME
@DYALLOC.212
*CALL CSIZEOBS
AC_CTL1.33
*CALL CHISTORY
GDR3F305.5
*CALL CTRACERA
ARSAF304.4
*CALL CRUNTIMC
ADR1F305.3
AC_CTL1.35
*CALL C_LHEAT
ABM3F400.53
*CALL C_R_CP
ABM3F400.54
*CALL ACPARM
ABM3F400.55
*CALL COMACP
ABM3F400.56
CL External subroutines called AC_CTL1.36
EXTERNAL AC, TIMER, STASH ,STRATQ , FINDPTR AC_CTL1.37
EXTERNAL THETL_QT,GLUE_CLD ABM3F400.57
*IF DEF,MPP ASB1F403.4
EXTERNAL SWAPBOUNDS_shmem,SWAPBOUNDS ARB0F404.11
*ENDIF ASB1F403.6
AC_CTL1.38
CL Dynamically allocated area for stash processing AC_CTL1.39
REAL STASHWORK(INT18) AC_CTL1.40
ARSAF304.5
CL Dynamically allocated area for tracer pointers ARSAF304.6
INTEGER TR_SIZE ! Full size of tracer data ARSAF304.7
! no. tracers * levels * fields ARSAF304.8
! (set to 1 if no tracers) ARSAF304.9
INTEGER I_TRACER_ADDRESS (TR_VARSDA+1) ARSAF304.10
! Addresses in full tracer array ARSAF304.11
! for each tracer variable in ARSAF304.12
! use (add 1 to length to avoid ARSAF304.13
! null array) ARSAF304.14
INTEGER I_TRACER_ITEM (TR_VARSDA+1) ARSAF304.15
! STASH item code for each ARSAF304.16
! tracer variable in use ARSAF304.17
! (add 1 to length to avoid ARSAF304.18
! null array) ARSAF304.19
AC_CTL1.41
INTEGER AC_CTL1.42
& STASHMACRO_TAG, ! STASHmacro tag number AC_CTL1.43
& MDI, ! Missing data indicator AC_CTL1.44
& JU10M,JV10M,JT1P5M ! addresses returned from FINDPTR AC_CTL1.45
& ,JRH1P5M ! address returned from FINDPTR AC_CTL1.46
& ,JLSRR,JLSSR,JCVRR,JCVSR ! addresses returned from FINDPTR SB151293.3
& ,JSRA,JCONVCC,JVS1P5M ! addresses returned from FINDPTR ABM1F304.8
& ,JTIC ! addresses returned from FINDPTR ABM3F400.58
& ,JQCL_P,JQCF_P ! addresses returned from FINDPTR ABM3F400.59
& ,JQCL_BL,JQCF_BL ! addresses returned from FINDPTR ABM3F400.60
& ,JQCL_BD,JQCF_BD ! addresses returned from FINDPTR ABM3F400.61
& ,JQCL_DC,JQCF_DC ! addresses returned from FINDPTR ABM3F400.62
& ,JT_BL,JT_P ! addresses returned from FINDPTR ABM3F400.63
& ,K, ERROR ! do loop variable/ error ABM3F400.64
AC_CTL1.47
INTEGER J ! DO Loop Variable. AC_CTL1.48
INTEGER I, IIND ! temporary scalars ARSAF304.20
INTEGER im_index ! Internal model index GSS2F305.95
INTEGER IADDR_SMC, IADDR_TSURF, LEN_TSURF AFF2F401.3
REAL WORK(P_FIELDDA,Q_LEVELSDA) ! array for large-scale ABM3F400.65
! latent heating ABM3F400.66
!(first used for glue_cld output not reqd later) ABM3F400.67
REAL WORK2(P_FIELDDA,Q_LEVELSDA) ! arrays for output ABM3F400.68
REAL WORK3(P_FIELDDA,Q_LEVELSDA) ! from glue_cld ABM3F400.69
REAL ZERO_FIELD(P_FIELDDA,Q_LEVELSDA) ! use if mixed phase precip ADM2F404.14
REAL PU,PL ! temporary variables in exner calculations ABM3F400.70
*CALL P_EXNERC
ABM3F400.71
CL AC_CTL1.49
CL 1.0 Get address for each field from its STASH section/item code AC_CTL1.50
CL and STASHmacro tag (searching only on STASHmacro tag) AC_CTL1.51
MDI = IMDI TJ050593.7
STASHMACRO_TAG = 30 AC_CTL1.53
AC_CTL1.54
C Initialise STASHWORK for section 18. AC_CTL1.55
DO J = 1, INT18 AC_CTL1.56
STASHWORK(J) = RMDI TJ050593.8
AC_CTL1.58
END DO AC_CTL1.59
AC_CTL1.60
CL 1.1 U10m AC_CTL1.61
CALL FINDPTR
(A_IM,3, 225, GSS2F305.96
& MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI, AC_CTL1.63
& STASHMACRO_TAG,MDI,JU10M, @DYALLOC.213
*CALL ARGSIZE
@DYALLOC.214
*CALL ARGSTS
@DYALLOC.215
& ICODE,CMESSAGE) @DYALLOC.216
AC_CTL1.67
IF (JU10M .EQ. 0) THEN AC_CTL1.68
ICODE = 3225 AC_CTL1.69
CMESSAGE = "AC_CTL: 10m U-wind not available for use by AC" AC_CTL1.70
AC_CTL1.71
END IF AC_CTL1.72
AC_CTL1.73
IF (ICODE .GT. 0) GOTO 999 AC_CTL1.74
AC_CTL1.75
CL 1.2 V10m AC_CTL1.76
CALL FINDPTR
(A_IM,3, 226, GSS2F305.97
& MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI, AC_CTL1.78
& STASHMACRO_TAG,MDI,JV10M, @DYALLOC.217
*CALL ARGSIZE
@DYALLOC.218
*CALL ARGSTS
@DYALLOC.219
& ICODE,CMESSAGE) @DYALLOC.220
AC_CTL1.82
IF (JV10M .EQ. 0) THEN AC_CTL1.83
ICODE = 3226 AC_CTL1.84
CMESSAGE = "AC_CTL: 10m V-wind not available for use by AC" AC_CTL1.85
AC_CTL1.86
END IF AC_CTL1.87
AC_CTL1.88
IF (ICODE .GT. 0) GOTO 999 AC_CTL1.89
AC_CTL1.90
CL 1.3 T1.5m AC_CTL1.91
CALL FINDPTR
(A_IM, 3,236, GSS2F305.98
& MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI, AC_CTL1.93
& STASHMACRO_TAG,MDI,JT1P5M, @DYALLOC.221
*CALL ARGSIZE
@DYALLOC.222
*CALL ARGSTS
@DYALLOC.223
& ICODE,CMESSAGE) @DYALLOC.224
AC_CTL1.97
IF (JT1P5M .EQ. 0) THEN AC_CTL1.98
ICODE = 3236 AC_CTL1.99
CMESSAGE = "AC_CTL: 1.5m temp not available for use by AC" AC_CTL1.100
AC_CTL1.101
END IF AC_CTL1.102
AC_CTL1.103
IF (ICODE .GT. 0) GOTO 999 AC_CTL1.104
AC_CTL1.105
CL 1.4 RH1.5m SB151293.4
CALL FINDPTR
(A_IM,3, 245, GSS2F305.99
& MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI, AC_CTL1.108
& STASHMACRO_TAG,MDI,JRH1P5M, @DYALLOC.225
*CALL ARGSIZE
@DYALLOC.226
*CALL ARGSTS
@DYALLOC.227
& ICODE,CMESSAGE) @DYALLOC.228
AC_CTL1.112
IF (JRH1P5M .EQ. 0) THEN AC_CTL1.113
ICODE = 3245 AC_CTL1.114
CMESSAGE = "AC_CTL: 1.5m rh not available for use by AC" AC_CTL1.115
AC_CTL1.116
END IF AC_CTL1.117
AC_CTL1.118
IF (ICODE .GT. 0) GOTO 999 AC_CTL1.119
AC_CTL1.120
CL 1.5 large scale rainfall rate SB151293.5
CALL FINDPTR
(A_IM, 4,203, GSS2F305.100
& MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI, SB151293.7
& STASHMACRO_TAG,MDI,JLSRR, SB151293.8
*CALL ARGSIZE
SB151293.9
*CALL ARGSTS
SB151293.10
& ICODE,CMESSAGE) SB151293.11
SB151293.12
IF (JLSRR .EQ. 0) THEN SB151293.13
ICODE = 4203 SB151293.14
CMESSAGE = "AC_CTL: large scale rainfall rate not available" SB151293.15
SB151293.16
END IF SB151293.17
SB151293.18
IF (ICODE .GT. 0) GOTO 999 SB151293.19
SB151293.20
CL 1.6 large scale snowfall rate SB151293.21
CALL FINDPTR
(A_IM, 4,204, GSS2F305.101
& MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI, SB151293.23
& STASHMACRO_TAG,MDI,JLSSR, SB151293.24
*CALL ARGSIZE
SB151293.25
*CALL ARGSTS
SB151293.26
& ICODE,CMESSAGE) SB151293.27
SB151293.28
IF (JLSSR .EQ. 0) THEN SB151293.29
ICODE = 4204 SB151293.30
CMESSAGE = "AC_CTL: large scale snowfall rate not available" SB151293.31
SB151293.32
END IF SB151293.33
SB151293.34
IF (ICODE .GT. 0) GOTO 999 SB151293.35
SB151293.36
CL 1.7 convective rainfall rate SB151293.37
CALL FINDPTR
(A_IM, 5,205, GSS2F305.102
& MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI, SB151293.39
& STASHMACRO_TAG,MDI,JCVRR, SB151293.40
*CALL ARGSIZE
SB151293.41
*CALL ARGSTS
SB151293.42
& ICODE,CMESSAGE) SB151293.43
SB151293.44
IF (JCVRR .EQ. 0) THEN SB151293.45
ICODE = 5205 SB151293.46
CMESSAGE = "AC_CTL: convective rainfall rate not available" SB151293.47
SB151293.48
END IF SB151293.49
SB151293.50
IF (ICODE .GT. 0) GOTO 999 SB151293.51
SB151293.52
CL 1.8 convective snowfall rate SB151293.53
CALL FINDPTR
(A_IM, 5,206, GSS2F305.103
& MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI, SB151293.55
& STASHMACRO_TAG,MDI,JCVSR, SB151293.56
*CALL ARGSIZE
SB151293.57
*CALL ARGSTS
SB151293.58
& ICODE,CMESSAGE) SB151293.59
SB151293.60
IF (JCVSR .EQ. 0) THEN SB151293.61
ICODE = 5206 SB151293.62
CMESSAGE = "AC_CTL: convective snowfall rate not available" SB151293.63
SB151293.64
END IF SB151293.65
SB151293.66
IF (ICODE .GT. 0) GOTO 999 SB151293.67
SB151293.68
CL 1.9 surface run-off amount ABM1F304.9
CALL FINDPTR
(A_IM, 8,204, GSS2F305.104
& MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI, ABM1F304.11
& STASHMACRO_TAG,MDI,JSRA, ABM1F304.12
*CALL ARGSIZE
ABM1F304.13
*CALL ARGSTS
ABM1F304.14
& ICODE,CMESSAGE) ABM1F304.15
ABM1F304.16
IF (JSRA .EQ. 0) THEN ABM1F304.17
ICODE = 8204 ABM1F304.18
CMESSAGE = "AC_CTL: surface runoff amount not available" ABM1F304.19
ABM1F304.20
END IF ABM1F304.21
ABM1F304.22
IF (ICODE .GT. 0) GOTO 999 ABM1F304.23
ABM1F304.24
CL 1.10 convective cloud cover on each model level ABM1F304.25
CALL FINDPTR
(A_IM, 5,212, GSS2F305.105
& MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI, ABM1F304.27
& STASHMACRO_TAG,MDI,JCONVCC, ABM1F304.28
*CALL ARGSIZE
ABM1F304.29
*CALL ARGSTS
ABM1F304.30
& ICODE,CMESSAGE) ABM1F304.31
ABM1F304.32
IF (JCONVCC .EQ. 0) THEN ABM1F304.33
ICODE = 5212 ABM1F304.34
CMESSAGE = "AC_CTL: convective cloud amount not available" ABM1F304.35
ABM1F304.36
END IF ABM1F304.37
ABM1F304.38
IF (ICODE .GT. 0) GOTO 999 ABM1F304.39
ABM1F304.40
CL 1.11 VIS1.5m ABM1F304.41
CALL FINDPTR
(A_IM, 3,247, GSS2F305.106
& MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI, ABM1F304.43
& STASHMACRO_TAG,MDI,JVS1P5M, ABM1F304.44
*CALL ARGSIZE
ABM1F304.45
*CALL ARGSTS
ABM1F304.46
& ICODE,CMESSAGE) ABM1F304.47
ABM1F304.48
IF (JVS1P5M .EQ. 0) THEN ABM1F400.3
ICODE = 3247 ABM1F400.4
CMESSAGE = "AC_CTL: 1.5m vis not available for use by AC" ABM1F400.5
ABM1F400.6
END IF ABM1F400.7
ABM1F400.8
IF (ICODE .GT. 0) GOTO 999 ABM1F400.9
ABM1F400.10
CL 1.12 tracers ARSAF304.21
ARSAF304.22
C If there are no tracers (TR_VARS=0), TR_SIZE (size of tracer ARSAF304.23
C array) is set to 1. ARSAF304.24
C Also, the pointers are set to dummy values (see later). ARSAF304.25
ARSAF304.26
IF (TR_VARS.EQ.0) THEN ARSAF304.27
TR_SIZE=1 ARSAF304.28
ARSAF304.29
ELSE ARSAF304.30
TR_SIZE=TR_VARS*TR_LEVELS*P_FIELD ARSAF304.31
ARSAF304.32
C For each tracer in use, set up tracer address and item code ARSAF304.33
I=0 ! count tracers in use ARSAF304.34
im_index=internal_model_index(A_IM) GSS2F305.107
DO J = A_TRACER_FIRST, A_TRACER_LAST ARSAF304.35
IF(SI(J,0,im_index).NE.1) THEN ! tracer in use GSS2F305.108
I=I+1 ARSAF304.37
IIND=J-A_TRACER_FIRST+1 ARSAF304.38
I_TRACER_ADDRESS(I)=JTRACER(1,A_TR_INDEX(IIND)) ARSAF304.39
I_TRACER_ITEM(I)=J ARSAF304.40
END IF ARSAF304.41
END DO ARSAF304.42
ARSAF304.43
C Number of tracers should correspond to TR_VARS ARSAF304.44
IF (I.NE.TR_VARS) THEN ARSAF304.45
ICODE=4600 ARSAF304.46
CMESSAGE = 'AC_CTL: tracers in use is not TR_VARS' ARSAF304.47
GO TO 999 ARSAF304.48
END IF ARSAF304.49
ARSAF304.50
C Tracer addresses are now relative to start of D1; make them ARSAF304.51
C relative to start of tracer array ARSAF304.52
DO J=1,TR_VARS ARSAF304.53
I_TRACER_ADDRESS(J)=I_TRACER_ADDRESS(J)-JTRACER(1,1)+1 ARSAF304.54
END DO ARSAF304.55
END IF ARSAF304.56
ARSAF304.57
C Set last (or only) values in tracer pointer arrays ARSAF304.58
I_TRACER_ADDRESS(TR_VARS+1)=1 ARSAF304.59
I_TRACER_ITEM (TR_VARS+1)=MDI ARSAF304.60
ARSAF304.61
IF( L_LHN ) THEN ABM3F400.72
! seek convective heating rate and ABM3F400.73
! diagnostics for calculating large-scale latent heating rate ABM3F400.74
ABM3F400.75
CL 1.13 theta increments from convection ABM3F400.76
CALL FINDPTR
( A_IM,5,203, ABM3F400.77
& MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI, ABM3F400.78
& STASHMACRO_TAG,MDI,JTIC, ABM3F400.79
*CALL ARGSIZE
ABM3F400.80
*CALL ARGSTS
ABM3F400.81
& ICODE,CMESSAGE) ABM3F400.82
ABM3F400.83
IF (JTIC .EQ. 0) THEN ABM3F400.84
ICODE = 5203 ABM3F400.85
CMESSAGE = "AC_CTL: theta incrs from conv'n not available" ABM3F400.86
ABM3F400.87
END IF ABM3F400.88
ABM3F400.89
IF (ICODE .GT. 0) GOTO 999 ABM3F400.90
ABM3F400.91
CL 1.14 cloud liquid water after large-scale precipitation ABM3F400.92
CALL FINDPTR
( A_IM,4,205, ABM3F400.93
& MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI, ABM3F400.94
& STASHMACRO_TAG,MDI,JQCL_P, ABM3F400.95
*CALL ARGSIZE
ABM3F400.96
*CALL ARGSTS
ABM3F400.97
& ICODE,CMESSAGE) ABM3F400.98
ABM3F400.99
IF (JQCL_P .EQ. 0) THEN ABM3F400.100
ICODE = 4205 ABM3F400.101
CMESSAGE = "AC_CTL: cld lqd wtr after ls_ppn not available" ABM3F400.102
ABM3F400.103
END IF ABM3F400.104
ABM3F400.105
IF (ICODE .GT. 0) GOTO 999 ABM3F400.106
ABM3F400.107
CL 1.15 cloud ice after large-scale precipitation ABM3F400.108
CALL FINDPTR
( A_IM,4,206, ABM3F400.109
& MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI, ABM3F400.110
& STASHMACRO_TAG,MDI,JQCF_P, ABM3F400.111
*CALL ARGSIZE
ABM3F400.112
*CALL ARGSTS
ABM3F400.113
& ICODE,CMESSAGE) ABM3F400.114
ABM3F400.115
IF (JQCF_P .EQ. 0) THEN ABM3F400.116
ICODE = 4206 ABM3F400.117
CMESSAGE = "AC_CTL: cld ice after ls_ppn not available" ABM3F400.118
ABM3F400.119
END IF ABM3F400.120
ABM3F400.121
IF (ICODE .GT. 0) GOTO 999 ABM3F400.122
ABM3F400.123
CL 1.16 temp after large-scale precipitation ABM3F400.124
CALL FINDPTR
( A_IM,4,004, ABM3F400.125
& MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI, ABM3F400.126
& STASHMACRO_TAG,MDI,JT_P, ABM3F400.127
*CALL ARGSIZE
ABM3F400.128
*CALL ARGSTS
ABM3F400.129
& ICODE,CMESSAGE) ABM3F400.130
ABM3F400.131
IF (JT_P .EQ. 0) THEN ABM3F400.132
ICODE = 4004 ABM3F400.133
CMESSAGE = "AC_CTL: temp after ls_ppn not available" ABM3F400.134
ABM3F400.135
END IF ABM3F400.136
ABM3F400.137
IF (ICODE .GT. 0) GOTO 999 ABM3F400.138
ABM3F400.139
CL 1.17 cloud liquid water after boundary layer ABM3F400.140
CALL FINDPTR
( A_IM,3,239, ABM3F400.141
& MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI, ABM3F400.142
& STASHMACRO_TAG,MDI,JQCL_BL, ABM3F400.143
*CALL ARGSIZE
ABM3F400.144
*CALL ARGSTS
ABM3F400.145
& ICODE,CMESSAGE) ABM3F400.146
ABM3F400.147
IF (JQCL_BL.EQ. 0) THEN ABM3F400.148
ICODE = 3239 ABM3F400.149
CMESSAGE = "AC_CTL: cld lqd wtr after b_lyr not available" ABM3F400.150
ABM3F400.151
END IF ABM3F400.152
ABM3F400.153
IF (ICODE .GT. 0) GOTO 999 ABM3F400.154
ABM3F400.155
CL 1.18 cloud ice after boundary layer ABM3F400.156
CALL FINDPTR
( A_IM,3,240, ABM3F400.157
& MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI, ABM3F400.158
& STASHMACRO_TAG,MDI,JQCF_BL, ABM3F400.159
*CALL ARGSIZE
ABM3F400.160
*CALL ARGSTS
ABM3F400.161
& ICODE,CMESSAGE) ABM3F400.162
ABM3F400.163
IF (JQCF_BL.EQ. 0) THEN ABM3F400.164
ICODE = 3240 ABM3F400.165
CMESSAGE = "AC_CTL: cld ice after b_lyr not available" ABM3F400.166
ABM3F400.167
END IF ABM3F400.168
ABM3F400.169
IF (ICODE .GT. 0) GOTO 999 ABM3F400.170
ABM3F400.171
CL 1.19 temp after boundary layer ABM3F400.172
CALL FINDPTR
( A_IM,3,004, ABM3F400.173
& MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI, ABM3F400.174
& STASHMACRO_TAG,MDI,JT_BL, ABM3F400.175
*CALL ARGSIZE
ABM3F400.176
*CALL ARGSTS
ABM3F400.177
& ICODE,CMESSAGE) ABM3F400.178
ABM3F400.179
IF (JT_BL.EQ. 0) THEN ABM3F400.180
ICODE = 3004 ABM3F400.181
CMESSAGE = "AC_CTL: temp after b_lyr not available" ABM3F400.182
ABM3F400.183
END IF ABM3F400.184
ABM3F400.185
IF (ICODE .GT. 0) GOTO 999 ABM3F400.186
ABM3F400.187
CL 1.20 cloud liquid water after dynamic cloud ABM3F400.188
CALL FINDPTR
( A_IM,9,206, ABM3F400.189
& MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI, ABM3F400.190
& STASHMACRO_TAG,MDI,JQCL_DC, ABM3F400.191
*CALL ARGSIZE
ABM3F400.192
*CALL ARGSTS
ABM3F400.193
& ICODE,CMESSAGE) ABM3F400.194
ABM3F400.195
IF (JQCL_DC.EQ. 0) THEN ABM3F400.196
ICODE = 9206 ABM3F400.197
CMESSAGE = "AC_CTL: cld lqd wtr after dyn_cld not available" ABM3F400.198
ABM3F400.199
END IF ABM3F400.200
ABM3F400.201
IF (ICODE .GT. 0) GOTO 999 ABM3F400.202
ABM3F400.203
CL 1.21 cloud ice after dynamic cloud ABM3F400.204
CALL FINDPTR
( A_IM,9,207, ABM3F400.205
& MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI, ABM3F400.206
& STASHMACRO_TAG,MDI,JQCF_DC, ABM3F400.207
*CALL ARGSIZE
ABM3F400.208
*CALL ARGSTS
ABM3F400.209
& ICODE,CMESSAGE) ABM3F400.210
ABM3F400.211
IF (JQCF_DC.EQ. 0) THEN ABM3F400.212
ICODE = 9207 ABM3F400.213
CMESSAGE = "AC_CTL: cld ice after dyn_cld not available" ABM3F400.214
ABM3F400.215
END IF ABM3F400.216
ABM3F400.217
CL 1.22 cloud liquid water before dynamics ABM3F400.218
CALL FINDPTR
( A_IM,10,229, ABM3F400.219
& MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI, ABM3F400.220
& STASHMACRO_TAG,MDI,JQCL_BD, ABM3F400.221
*CALL ARGSIZE
ABM3F400.222
*CALL ARGSTS
ABM3F400.223
& ICODE,CMESSAGE) ABM3F400.224
ABM3F400.225
IF (JQCL_BD.EQ. 0) THEN ABM3F400.226
ICODE =10229 ABM3F400.227
CMESSAGE = "AC_CTL: cld lqd wtr before dynamics not available" ABM3F400.228
ABM3F400.229
END IF ABM3F400.230
ABM3F400.231
IF (ICODE .GT. 0) GOTO 999 ABM3F400.232
ABM3F400.233
CL 1.23 cloud ice before dynamics ABM3F400.234
CALL FINDPTR
( A_IM,10,230, ABM3F400.235
& MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI,MDI, ABM3F400.236
& STASHMACRO_TAG,MDI,JQCF_BD, ABM3F400.237
*CALL ARGSIZE
ABM3F400.238
*CALL ARGSTS
ABM3F400.239
& ICODE,CMESSAGE) ABM3F400.240
ABM3F400.241
IF (JQCF_BD.EQ. 0) THEN ABM3F400.242
ICODE =10230 ABM3F400.243
CMESSAGE = "AC_CTL: cld ice before dynamics not available" ABM3F400.244
ABM3F400.245
END IF ABM3F400.246
ABM3F400.247
IF (ICODE .GT. 0) GOTO 999 ABM3F400.248
ABM3F400.249
! 1.24 Get 'balanced' qcl,qcf at end of physics/start of assimilation ABM3F400.250
! -------------------------------------------------------------- ABM3F400.251
! 1.24.1 calculate thetal and qt from theta,q,qc ABM3F400.252
! If using mixed phase precip scheme then do not want ice in the call ADM2F404.15
! to THETL_QT. ADM2F404.16
IF (L_LSPICE) THEN ADM2F404.17
! Mixed phase precip scheme. Define an array of zeros instead ADM2F404.18
! of using QCF. ADM2F404.19
DO K=1,Q_LEVELS ADM2F404.20
DO J=1,P_FIELD ADM2F404.21
ZERO_FIELD(J,K)=0.0 ADM2F404.22
END DO ADM2F404.23
END DO ADM2F404.24
! Now call THETL_QT with the zero field ADM2F404.25
CALL THETL_QT
( ADM2F404.26
& D1(JPSTAR),D1(JTHETA(1)),D1(JQ(1)),D1(JQCL(1)),ZERO_FIELD, ADM2F404.27
& D1(JP_EXNER(1)),AKH,BKH,P_FIELD,P_LEVELS,Q_LEVELS) ADM2F404.28
! Else the call to THETL_QT does contain the QCF field ADM2F404.29
ELSE ADM2F404.30
CALL THETL_QT
( ABM3F400.253
& D1(JPSTAR),D1(JTHETA(1)),D1(JQ(1)),D1(JQCL(1)),D1(JQCF(1)), ABM3F400.254
& D1(JP_EXNER(1)),AKH,BKH,P_FIELD,P_LEVELS,Q_LEVELS) ABM3F400.255
! END IF for L_LSPICE ADM2F404.31
END IF ADM2F404.32
! 1.24.2 convert thetal to tl ABM3F400.256
DO K=1,Q_LEVELS ABM3F400.257
DO J=1,P_FIELD ABM3F400.258
PU=D1(JPSTAR+J-1)*BKH(K+1)+AKH(K+1) ABM3F400.259
PL=D1(JPSTAR+J-1)*BKH(K)+AKH(K) ABM3F400.260
D1(JTHETA(K)+J-1)=D1(JTHETA(K)+J-1) * ABM3F400.261
& P_EXNER_C(D1(JP_EXNER(K+1)+J-1),D1(JP_EXNER(K)+J-1), ABM3F400.262
& PU,PL,KAPPA) ABM3F400.263
END DO ABM3F400.264
END DO ABM3F400.265
! 1.24.3 call glue_cld to convert tl and qt to t,q,qc ABM3F400.266
CALL GLUE_CLD
(A_LEVDEPC(JAK),A_LEVDEPC(JBK),D1(JPSTAR), ABM3F400.267
& RHCRIT,Q_LEVELS,D1(JRHC(1)),P_FIELD,P_FIELD,D1(JTHETA(1)), ASK1F405.81
& WORK,D1(JQ(1)),D1(JQCF(1)),D1(JQCL(1)),WORK2,WORK3,ERROR) ABM3F400.269
! 1.24.4 convert t back to theta for assimilation ABM3F400.270
DO K=1,Q_LEVELS ABM3F400.271
DO J=1,P_FIELD ABM3F400.272
PU=D1(JPSTAR+J-1)*BKH(K+1)+AKH(K+1) ABM3F400.273
PL=D1(JPSTAR+J-1)*BKH(K)+AKH(K) ABM3F400.274
D1(JTHETA(K)+J-1)=D1(JTHETA(K)+J-1) / ABM3F400.275
& P_EXNER_C(D1(JP_EXNER(K+1)+J-1),D1(JP_EXNER(K)+J-1), ABM3F400.276
& PU,PL,KAPPA) ABM3F400.277
END DO ABM3F400.278
END DO ABM3F400.279
ABM3F400.280
! 1.25 Calculate 'large-scale' latent heating contributions ABM3F400.281
! (equation 1 in FR Working Paper 171) ABM3F400.282
! ---------------------------------------------------- ABM3F400.283
DO K=1,Q_LEVELS ABM3F400.284
DO J=1,P_FIELD ABM3F400.285
WORK(J,K)= ABM3F400.286
& LC/CP*(D1(JQCL(K)+J-1)- ABM3F400.287
& D1(JQCL_P+J-1+(K-1)*P_FIELD) + ABM3F400.288
& D1(JQCL_DC+J-1+(K-1)*P_FIELD) - ABM3F400.289
& D1(JQCL_BD+J-1+(K-1)*P_FIELD) ) + ABM3F400.290
& (LC+LF)/CP*( D1(JQCF(K)+J-1)- ABM3F400.291
& D1(JQCF_P+J-1+(K-1)*P_FIELD) + ABM3F400.292
& D1(JQCF_DC+J-1+(K-1)*P_FIELD) - ABM3F400.293
& D1(JQCF_BD+J-1+(K-1)*P_FIELD) ) + ABM3F400.294
& D1(JT_P+J-1+(K-1)*P_FIELD) - ABM3F400.295
& D1(JT_BL+J-1+(K-1)*P_FIELD) ABM3F400.296
END DO ABM3F400.297
ABM3F400.298
! deal with boundary layer latent heating term ABM3F400.299
IF(K.LE.BL_LEVELS) THEN ABM3F400.300
DO J=1,P_FIELD ABM3F400.301
WORK(J,K) = WORK(J,K) + ABM3F400.302
& LC/CP*(D1(JQCL_BL+J-1+(K-1)*P_FIELD) - ABM3F400.303
& D1(JQCL_DC+J-1+(K-1)*P_FIELD)) + ABM3F400.304
& (LC+LF)/CP*(D1(JQCF_BL+J-1+(K-1)*P_FIELD) - ABM3F400.305
& D1(JQCF_DC+J-1+(K-1)*P_FIELD)) ABM3F400.306
ABM3F400.307
END DO ABM3F400.308
ENDIF ABM3F400.309
END DO ABM3F400.310
! large scale latent heating currently dT/dt in K/timestep ABM3F400.311
! convert to dtheta/dt in K/s, same unit as for convective heating ABM3F400.312
DO K=1,Q_LEVELS ABM3F400.313
DO J=1,P_FIELD ABM3F400.314
PU=D1(JPSTAR+J-1)*BKH(K+1)+AKH(K+1) ABM3F400.315
PL=D1(JPSTAR+J-1)*BKH(K)+AKH(K) ABM3F400.316
WORK(J,K) = WORK(J,K) / ABM3F400.317
& P_EXNER_C(D1(JP_EXNER(K+1)+J-1),D1(JP_EXNER(K)+J-1), ABM3F400.318
& PU,PL,KAPPA) ABM3F400.319
WORK(J,K) = WORK(J,K) / SECS_PER_STEPim(atmos_im) ABM3F400.320
END DO ABM3F400.321
END DO ABM3F400.322
ABM3F400.323
ELSE ! if LHN not selected ABM3F400.324
! initialise dummy heating rate array to pass to AC ABM3F400.325
DO K=1,Q_LEVELS ABM3F400.326
DO J=1,P_FIELD ABM3F400.327
WORK(J,K) = 0.0 ABM3F400.328
END DO ABM3F400.329
END DO ABM3F400.330
ABM3F400.331
END IF ! L_LHN ABM3F400.332
ABM3F400.333
CL---------------------------------------------------------------------- AC_CTL1.121
CL 2. --- Section 18 Data Assimilation ------ AC_CTL1.122
AC_CTL1.123
IF (LTIMER) THEN AC_CTL1.124
CALL TIMER
('AC ', 3) AC_CTL1.125
AC_CTL1.126
END IF AC_CTL1.127
AC_CTL1.128
im_index=internal_model_index(A_IM) ABM3F400.334
IF (LSINGLE_HYDROL) THEN AFF2F401.4
IADDR_SMC = JSMC AFF2F401.5
IADDR_TSURF = JTSTAR AFF2F401.6
LEN_TSURF = P_FIELD AFF2F401.7
ELSE ! multi-level or MOSES/PENMAN MONTEITH scheme AFF2F401.8
IADDR_SMC = JSMCL(1) AFF2F401.9
IADDR_TSURF = J_DEEP_SOIL_TEMP(1) AFF2F401.10
LEN_TSURF = LAND_FIELD AFF2F401.11
ENDIF AFF2F401.12
ABM3F400.335
*IF DEF,MPP ASB1F403.7
! Update Haloes ASB1F403.8
CALL SWAPBOUNDS_shmem(
D1(JT1P5M), ASB1F403.9
& ROW_LENGTH,P_ROWS,1,1,1) ASB1F403.10
CALL SWAPBOUNDS_shmem(
D1(JRH1P5M), ASB1F403.11
& ROW_LENGTH,P_ROWS,1,1,1) ASB1F403.12
! Use non-shmem swapbounds for visibility to set superpolar rows. ARB0F404.12
CALL SWAPBOUNDS
(D1(JVS1P5M), ARB0F404.13
& ROW_LENGTH,P_ROWS,1,1,1) ASB1F403.14
CALL SWAPBOUNDS_shmem(
D1(JU10M), ASB1F403.15
& ROW_LENGTH,U_ROWS,1,1,1) ASB1F403.16
CALL SWAPBOUNDS_shmem(
D1(JV10M), ASB1F403.17
& ROW_LENGTH,U_ROWS,1,1,1) ASB1F403.18
CALL SWAPBOUNDS_shmem(
D1(JLSRR), ASB1F403.19
& ROW_LENGTH,P_ROWS,1,1,1) ASB1F403.20
CALL SWAPBOUNDS_shmem(
D1(JLSSR), ASB1F403.21
& ROW_LENGTH,P_ROWS,1,1,1) ASB1F403.22
CALL SWAPBOUNDS_shmem(
D1(JCVRR), ASB1F403.23
& ROW_LENGTH,P_ROWS,1,1,1) ASB1F403.24
CALL SWAPBOUNDS_shmem(
D1(JCVSR), ASB1F403.25
& ROW_LENGTH,P_ROWS,1,1,1) ASB1F403.26
CALL SWAPBOUNDS_shmem(
D1(JCONVCC), ASB1F403.27
& ROW_LENGTH,P_ROWS,1,1,Q_LEVELS) ASB1F403.28
*ENDIF ASB1F403.29
ASB1F403.30
IF( L_LHN ) THEN ABM3F400.336
ABM3F400.337
CALL AC (
P_LEVELS, Q_LEVELS, ROW_LENGTH, P_ROWS, U_ROWS, AC_CTL1.129
& BL_LEVELS, APC0F405.804
& A_MAX_OBS_SIZE, A_MAX_NO_OBS, P_FIELD, U_FIELD, !tracer ARSAF304.62
& TR_SIZE, TR_VARS, TR_LEVELS, STEPim(atmos_im), GDR5F305.1
& SECS_PER_STEPim(atmos_im), ADR1F305.4
& A_LEVDEPC(JAK), A_LEVDEPC(JBK), AKH, BKH, ADR1F305.5
& D1(JP_EXNER(1)), D1(JPSTAR), D1(JTHETA(1)), D1(JQ(1)), SB230293.246
& D1(JQCL(1)), D1(JQCF(1)), AFF1F405.3
& D1(JU(1)), D1(JV(1)), D1(JMURK(1)), ABM1F304.57
& D1(JCANOPY_WATER), D1(JSURF_CAP), D1(IADDR_SMC), D1(JSNODEP), GDR6F405.84
& LAND_LIST, LAND_FIELD, D1(JSRA), D1(JCONVCC), ABM1F304.59
& D1(JLSRR), D1(JLSSR), D1(JCVRR), D1(JCVSR), AFF2F401.14
& D1(IADDR_TSURF),LEN_TSURF, AFF2F401.15
& D1(JLAND), D1(JU10M), D1(JV10M), D1(JT1P5M), D1(JRH1P5M), @DYALLOC.229
& D1(JVS1P5M), D1(JOROG), ABM1F304.60
& D1(JTIC),WORK, ABM3F400.338
& LOW_BOT_LEVEL, LOW_TOP_LEVEL, ABM1F304.61
& MED_BOT_LEVEL, MED_TOP_LEVEL, ABM1F304.62
& HIGH_BOT_LEVEL, HIGH_TOP_LEVEL, ABM1F304.63
& D1(JTRACER(1,1)), !tracer ARSAF304.64
& RHCRIT, I_TRACER_ADDRESS, I_TRACER_ITEM, ADR1F305.6
& IFAX, TRIGS, F3, F3_P, STINDEX(1,1,18,im_index), GSS2F305.110
& STLIST, LEN_STLIST, SI(1,18,im_index), SF(1,18), GSS2F305.111
& STASHWORK, STASH_LEVELS, GSS2F305.112
& NUM_STASH_LEVELS, STASH_PSEUDO_LEVELS, NUM_STASH_PSEUDO, SB230293.251
& MODEL_STATUS, COS_U_LATITUDE, COS_P_LATITUDE, SEC_U_LATITUDE, SB230293.252
& SEC_P_LATITUDE, COS_LONGITUDE, SIN_LONGITUDE, SB230293.253
& A_LEVDEPC(JDELTA_AK), A_LEVDEPC(JDELTA_BK), GDG0F401.10
*CALL ARGPPX
GDG0F401.11
& ICODE, CMESSAGE) GDG0F401.12
AC_CTL1.149
! repeat section 1.24 to re-balance thermodynamic fields after AC AFF2F405.8
! "1.24.1" calculate thetal and qt from theta,q,qc AFF2F405.9
! If using mixed phase precip scheme then do not want ice in the call AFF2F405.10
! to THETL_QT. AFF2F405.11
IF (L_LSPICE) THEN AFF2F405.12
! Mixed phase precip scheme. Define an array of zeros instead AFF2F405.13
! of using QCF. AFF2F405.14
DO K=1,Q_LEVELS AFF2F405.15
DO J=1,P_FIELD AFF2F405.16
ZERO_FIELD(J,K)=0.0 AFF2F405.17
END DO AFF2F405.18
END DO AFF2F405.19
! Now call THETL_QT with the zero field AFF2F405.20
CALL THETL_QT
( AFF2F405.21
& D1(JPSTAR),D1(JTHETA(1)),D1(JQ(1)),D1(JQCL(1)),ZERO_FIELD, AFF2F405.22
& D1(JP_EXNER(1)),AKH,BKH,P_FIELD,P_LEVELS,Q_LEVELS) AFF2F405.23
! Else the call to THETL_QT does contain the QCF field AFF2F405.24
ELSE AFF2F405.25
CALL THETL_QT
( AFF2F405.26
& D1(JPSTAR),D1(JTHETA(1)),D1(JQ(1)),D1(JQCL(1)),D1(JQCF(1)), AFF2F405.27
& D1(JP_EXNER(1)),AKH,BKH,P_FIELD,P_LEVELS,Q_LEVELS) AFF2F405.28
! END IF for L_LSPICE AFF2F405.29
END IF AFF2F405.30
! "1.24.2" convert thetal to tl AFF2F405.31
DO K=1,Q_LEVELS AFF2F405.32
DO J=1,P_FIELD AFF2F405.33
PU=D1(JPSTAR+J-1)*BKH(K+1)+AKH(K+1) AFF2F405.34
PL=D1(JPSTAR+J-1)*BKH(K)+AKH(K) AFF2F405.35
D1(JTHETA(K)+J-1)=D1(JTHETA(K)+J-1) * AFF2F405.36
& P_EXNER_C(D1(JP_EXNER(K+1)+J-1),D1(JP_EXNER(K)+J-1), AFF2F405.37
& PU,PL,KAPPA) AFF2F405.38
END DO AFF2F405.39
END DO AFF2F405.40
! "1.24.3" call glue_cld to convert tl and qt to t,q,qc AFF2F405.41
CALL GLUE_CLD
(A_LEVDEPC(JAK),A_LEVDEPC(JBK),D1(JPSTAR), AFF2F405.42
& RHCRIT,Q_LEVELS,D1(JRHC(1)),P_FIELD,P_FIELD,D1(JTHETA(1)), AFF2F405.43
& WORK,D1(JQ(1)),D1(JQCF(1)),D1(JQCL(1)),WORK2,WORK3,ERROR) AFF2F405.44
! "1.24.4" convert t back to theta AFF2F405.45
DO K=1,Q_LEVELS AFF2F405.46
DO J=1,P_FIELD AFF2F405.47
PU=D1(JPSTAR+J-1)*BKH(K+1)+AKH(K+1) AFF2F405.48
PL=D1(JPSTAR+J-1)*BKH(K)+AKH(K) AFF2F405.49
D1(JTHETA(K)+J-1)=D1(JTHETA(K)+J-1) / AFF2F405.50
& P_EXNER_C(D1(JP_EXNER(K+1)+J-1),D1(JP_EXNER(K)+J-1), AFF2F405.51
& PU,PL,KAPPA) AFF2F405.52
END DO AFF2F405.53
END DO AFF2F405.54
AFF2F405.55
AFF2F405.56
ELSE ! if LHN not selected ABM3F400.339
ABM3F400.340
CALL AC (
P_LEVELS, Q_LEVELS, ROW_LENGTH, P_ROWS, U_ROWS, ABM3F400.341
& BL_LEVELS, APC0F405.805
& A_MAX_OBS_SIZE, A_MAX_NO_OBS, P_FIELD, U_FIELD, !tracer ABM3F400.342
& TR_SIZE, TR_VARS, TR_LEVELS, STEPim(atmos_im), !tracer ABM3F400.343
& SECS_PER_STEPim(atmos_im), ABM3F400.344
& A_LEVDEPC(JAK), A_LEVDEPC(JBK), AKH, BKH, ABM3F400.345
& D1(JP_EXNER(1)), D1(JPSTAR), D1(JTHETA(1)), D1(JQ(1)), ABM3F400.346
& D1(JQCL(1)), D1(JQCF(1)), AFF1F405.4
& D1(JU(1)), D1(JV(1)), D1(JMURK(1)), ABM3F400.347
& D1(JCANOPY_WATER), D1(JSURF_CAP), D1(IADDR_SMC), D1(JSNODEP), GDR6F405.85
& LAND_LIST, LAND_FIELD, D1(JSRA), D1(JCONVCC), ABM3F400.349
& D1(JLSRR), D1(JLSSR), D1(JCVRR), D1(JCVSR), AFF2F401.17
& D1(IADDR_TSURF), LEN_TSURF, AFF2F401.18
& D1(JLAND), D1(JU10M), D1(JV10M), D1(JT1P5M), D1(JRH1P5M), ABM3F400.351
& D1(JVS1P5M), D1(JOROG), ABM3F400.352
& WORK,WORK, ABM3F400.353
& LOW_BOT_LEVEL, LOW_TOP_LEVEL, ABM3F400.354
& MED_BOT_LEVEL, MED_TOP_LEVEL, ABM3F400.355
& HIGH_BOT_LEVEL, HIGH_TOP_LEVEL, ABM3F400.356
& D1(JTRACER(1,1)), !tracer ABM3F400.357
& RHCRIT, I_TRACER_ADDRESS, I_TRACER_ITEM, ABM3F400.358
& IFAX, TRIGS, F3, F3_P, STINDEX(1,1,18,im_index), ABM3F400.359
& STLIST, LEN_STLIST, SI(1,18,im_index), SF(1,18), ABM3F400.360
& STASHWORK, STASH_LEVELS, ABM3F400.361
& NUM_STASH_LEVELS, STASH_PSEUDO_LEVELS, NUM_STASH_PSEUDO, ABM3F400.362
& MODEL_STATUS, COS_U_LATITUDE, COS_P_LATITUDE, SEC_U_LATITUDE, ABM3F400.363
& SEC_P_LATITUDE, COS_LONGITUDE, SIN_LONGITUDE, ABM3F400.364
& A_LEVDEPC(JDELTA_AK), A_LEVDEPC(JDELTA_BK), GDG0F401.13
*CALL ARGPPX
GDG0F401.14
& ICODE, CMESSAGE) GDG0F401.15
ABM3F400.366
END IF ! L_LHN ABM3F400.367
ABM3F400.368
*IF DEF,MPP ARB0F404.14
! This swapbounds on p_exner was found necessary to get bit ARB0F404.15
! reproducibility in LAM & Mes runs with assimilation. ARB0F404.16
CALL SWAPBOUNDS
(D1(JP_EXNER(1)), ARB0F404.17
& ROW_LENGTH,P_ROWS,1,1,P_LEVELS+1) ARB0F404.18
*ENDIF ARB0F404.19
ARB0F404.20
IF (LTIMER) THEN AC_CTL1.152
CALL TIMER
('AC ', 4) AC_CTL1.153
AC_CTL1.154
END IF AC_CTL1.155
AAM1F404.14
IF (ICODE.GT.0) GOTO 999 AAM1F404.15
AC_CTL1.156
CALL STASH
(a_sm, a_im, 18, STASHWORK, GKR0F305.876
*CALL ARGSIZE
@DYALLOC.231
*CALL ARGD1
@DYALLOC.232
*CALL ARGDUMA
@DYALLOC.233
*CALL ARGDUMO
@DYALLOC.234
*CALL ARGDUMW
GKR1F401.165
*CALL ARGSTS
@DYALLOC.235
*CALL ARGPPX
GKR0F305.877
& ICODE, CMESSAGE) @DYALLOC.239
AC_CTL1.158
IF (ICODE.GT.0) GOTO 999 AC_CTL1.159
AC_CTL1.160
CL---------------------------------------------------------------------- AC_CTL1.161
CL 3.0 Overwrite stratospheric humidities with climatology AC_CTL1.162
C call at A_ASSIM_END_HR and A_ASSIM_START_HR + MODEL_ANALYSIS_HRS AC_CTL1.163
IF (STEPim(atmos_im) .EQ. GDR5F305.2
& ASSIM_FIRSTSTEPim(atmos_im)+ASSIM_STEPSim(atmos_im) GDR5F305.3
& .OR. GDR5F305.4
& STEPim(atmos_im) .EQ. ASSIM_FIRSTSTEPim(atmos_im) + GDR5F305.5
& ASSIM_STEPSim(atmos_im) + ASSIM_EXTRASTEPSim(atmos_im)) GDR5F305.6
& THEN AC_CTL1.166
CALL STRATQ
(D1(JPSTAR), D1(JQ(1)), D1(JTHETA(1)), D1(JOROG), AC_CTL1.167
& D1(JP_EXNER(1)), P_LEVELS, ABM1F304.64
& Q_LEVELS, P_FIELD, A_LEVDEPC(JAK), A_LEVDEPC(JBK), AKH, AC_CTL1.169
& BKH, BL_LEVELS+1, ICODE, CMESSAGE) ABM1F304.65
AC_CTL1.171
IF (ICODE.GT.0) GOTO 999 AC_CTL1.172
AC_CTL1.173
END IF AC_CTL1.174
AC_CTL1.175
999 CONTINUE AC_CTL1.176
RETURN AC_CTL1.177
END AC_CTL1.178
*ENDIF AC_CTL1.179