*IF DEF,CONTROL CHKLKBA1.2
*IF DEF,ATMOS,AND,-DEF,GLOBAL GSH1F403.30
C ******************************COPYRIGHT****************************** GTS2F400.865
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.866
C GTS2F400.867
C Use, duplication or disclosure of this code is subject to the GTS2F400.868
C restrictions as set forth in the contract. GTS2F400.869
C GTS2F400.870
C Meteorological Office GTS2F400.871
C London Road GTS2F400.872
C BRACKNELL GTS2F400.873
C Berkshire UK GTS2F400.874
C RG12 2SZ GTS2F400.875
C GTS2F400.876
C If no contract has been raised with this copy of the code, the use, GTS2F400.877
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.878
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.879
C Modelling at the above address. GTS2F400.880
C ******************************COPYRIGHT****************************** GTS2F400.881
C GTS2F400.882
CLL SUBROUTINE CHK_LOOK_BOUNDA-------------------------------- CHKLKBA1.4
CLL CHKLKBA1.5
CLL Purpose: Cross checks values in LOOKUP records of boundary data CHKLKBA1.6
CLL with model run values CHKLKBA1.7
CLL CHKLKBA1.8
CLL Written by C. Wilson CHKLKBA1.9
CLL CHKLKBA1.10
CLL Model Modification history from model version 3.0: CHKLKBA1.11
CLL version Date CHKLKBA1.12
CLL 3.2 13/07/93 Changed CHARACTER*(*) to CHARACTER*(80) for TS150793.228
CLL portability. Author Tracey Smith. TS150793.229
CLL 3.2 26/05/93 Dynamic allocation changes. R.T.H.Barnes @DYALLOC.708
! 4.1 16/01/96 MPP code additions P.Burton APB4F401.83
! 4.1 18/06/96 Changes to cope with changes in STASH addressing GDG0F401.84
! Author D.M. Goddard. GDG0F401.85
!LL 4.4 04/08/97 Generalise for mixed phase precipitation scheme. ARB1F404.73
!LL ITEM_BOUNDA passed in from IN_BOUND. RTHBarnes. ARB1F404.74
CLL CHKLKBA1.13
CLL Programming standard: Unified Model Documentation Paper No 3 CHKLKBA1.14
CLL Version No 1 15/1/90 CHKLKBA1.15
CLL CHKLKBA1.16
CLL Logical components covered: C720 (part) CHKLKBA1.17
CLL CHKLKBA1.18
CLL Project task: C72 (part) CHKLKBA1.19
CLL CHKLKBA1.20
CLL Documentation: Unified Model Documentation Paper No C7 CHKLKBA1.21
CLL Version No 11 12/09/91 CHKLKBA1.22
CLL CHKLKBA1.23
CLLEND--------------------------------------------------------- CHKLKBA1.24
C*L Arguments:------------------------------------------------- CHKLKBA1.25
SUBROUTINE CHK_LOOK_BOUNDA(ITEM_BOUNDA,RIM_LOOKUPSA_DA, 1,13ARB1F404.75
*CALL ARGSIZE
@DYALLOC.709
*CALL ARGBND
@DYALLOC.710
*CALL ARGPPX
GDG0F401.86
* ICODE,CMESSAGE) CHKLKBA1.27
CHKLKBA1.28
IMPLICIT NONE CHKLKBA1.29
@DYALLOC.711
*CALL CMAXSIZE
@DYALLOC.712
*CALL TYPSIZE
@DYALLOC.713
*CALL TYPBND
@DYALLOC.714
*CALL CSUBMODL
GDG0F401.87
*CALL CPPXREF
GDG0F401.88
*CALL PPXLOOK
GDG0F401.89
CHKLKBA1.30
INTEGER CHKLKBA1.31
& RIM_LOOKUPSA_DA, !IN length of ITEM_BOUNDA ARB1F404.76
& ITEM_BOUNDA(RIM_LOOKUPSA_DA), !IN STASH codes of update vars. ARB1F404.77
* ICODE !OUT Return code; successful=0 CHKLKBA1.32
* ! error > 0 CHKLKBA1.33
CHKLKBA1.34
CHARACTER *(80) TS150793.230
* CMESSAGE !OUT Error message if ICODE > 0 CHKLKBA1.36
CHKLKBA1.37
*CALL CLOOKADD
CHKLKBA1.41
@DYALLOC.715
C ------------------------------------------------------------- CHKLKBA1.44
C Workspace usage:--------------------------------------------- CHKLKBA1.45
C None CHKLKBA1.46
C ------------------------------------------------------------- CHKLKBA1.47
C*L External subroutines called:------------------------------- CHKLKBA1.48
EXTERNAL PR_LOOK CHKLKBA1.49
C-------------------------------------------------------------- CHKLKBA1.50
C Local variables:--------------------------------------------- CHKLKBA1.51
INTEGER CHKLKBA1.52
* VAR ! Loop count for variable CHKLKBA1.53
*,CODE ! ITEM_CODE for variable CHKLKBA1.54
*,EXPVAL ! expected value in lookup CHKLKBA1.55
&, RIMLENA ! copy of LENRIMA or global_LENRIMA APB4F401.84
C-------------------------------------------------------------- CHKLKBA1.56
CHKLKBA1.57
CL Internal structure: None CHKLKBA1.58
CHKLKBA1.59
ICODE=0 CHKLKBA1.60
CMESSAGE=' ' CHKLKBA1.61
*IF DEF,MPP APB4F401.85
! Use size of global LBCs to compare against file values APB4F401.86
RIMLENA=global_LENRIMA APB4F401.87
*ELSE APB4F401.88
RIMLENA=LENRIMA APB4F401.89
*ENDIF APB4F401.90
CHKLKBA1.62
CL First check for expected number of variables for each time. ARB1F404.78
C I.e. that Item_code for variable 1 and RIM_LOOKUPSA+1 are the same. ARB1F404.79
IF (LOOKUP_BOUNDA(ITEM_CODE,1).ne. ARB1F404.80
& LOOKUP_BOUNDA(ITEM_CODE,RIM_LOOKUPSA+1)) THEN ARB1F404.81
! Print message for special case suggesting use of L_LSPICE_BDY=false ARB1F404.82
IF (ITEM_BOUNDA(RIM_LOOKUPSA).eq.12 .and. ARB1F404.83
& LOOKUP_BOUNDA(ITEM_CODE,RIM_LOOKUPSA).eq.1) THEN ARB1F404.84
WRITE(6,*)' **********************************************' ARB1F404.85
WRITE(6,*)' Boundary data does not have ice cloud present' ARB1F404.86
WRITE(6,*)' - try rerunning with L_LSPICE_BDY=.FALSE.' ARB1F404.87
WRITE(6,*)' - see umui window atmos_InFiles_OtherAncil_LBC' ARB1F404.88
WRITE(6,*)' **********************************************' ARB1F404.89
ELSE ARB1F404.90
WRITE(6,*)' CHK_LOOK_BOUNDA; wrong no.of variables for each time' ARB1F404.91
WRITE(6,*)' Expecting STASH item ',LOOKUP_BOUNDA(ITEM_CODE,1), ARB1F404.92
&' but found item ',LOOKUP_BOUNDA(ITEM_CODE,RIM_LOOKUPSA+1) ARB1F404.93
WRITE(6,*)' Lateral Boundary Conditions file is inconsistent with ARB1F404.94
&contents of Start Dump' ARB1F404.95
END IF ARB1F404.96
ICODE=1 ARB1F404.97
CMESSAGE='CHKLKBA : Item_Code Consistency check' ARB1F404.98
RETURN ARB1F404.99
END IF ARB1F404.100
CHKLKBA1.64
CL Now check header for each required variable ARB1F404.101
ARB1F404.102
DO 20 VAR=1,RIM_LOOKUPSA CHKLKBA1.65
CHKLKBA1.66
C Set STASHCODE for variable required for interfacing CHKLKBA1.67
CHKLKBA1.68
CODE=ITEM_BOUNDA(VAR) CHKLKBA1.69
CHKLKBA1.70
CL Check Item_code CHKLKBA1.71
IF(LOOKUP_BOUNDA(ITEM_CODE,VAR).NE.CODE) THEN CHKLKBA1.72
WRITE(6,101) LOOKUP_BOUNDA(ITEM_CODE,VAR),VAR ARB1F404.103
101 FORMAT(' *ERROR* Wrong value of',I9,' in LOOKUP_BOUNDA(ITEM_', CHKLKBA1.74
& 'CODE,',I4,')') CHKLKBA1.75
WRITE(6,*)' Expected value=',CODE GIE0F403.104
CHKLKBA1.77
CALL PR_LOOK
( GDG0F401.90
*CALL ARGPPX
GDG0F401.91
& LOOKUP_BOUNDA,LOOKUP_BOUNDA,LEN1_LOOKUP,VAR) GDG0F401.92
ICODE=1 CHKLKBA1.79
CMESSAGE='CHKLKBA : Item_Code Consistency check' CHKLKBA1.80
IF (CODE.eq.12 .and. LOOKUP_BOUNDA(ITEM_CODE,VAR).eq.1) THEN ARB1F404.104
WRITE(6,*)' **********************************************' ARB1F404.105
WRITE(6,*)' Boundary data does not have ice cloud present' ARB1F404.106
WRITE(6,*)' - try rerunning with L_LSPICE_BDY=.FALSE.' ARB1F404.107
WRITE(6,*)' - see umui window atmos_InFiles_OtherAncil_LBC' ARB1F404.108
WRITE(6,*)' **********************************************' ARB1F404.109
END IF ARB1F404.110
RETURN CHKLKBA1.81
ENDIF CHKLKBA1.82
CHKLKBA1.83
CL Check Length CHKLKBA1.84
IF(VAR.EQ.1.AND. CHKLKBA1.85
& LOOKUP_BOUNDA(LBLREC,VAR).NE.RIMLENA) THEN APB4F401.91
WRITE(6,102) LOOKUP_BOUNDA(LBLREC,VAR),VAR ARB1F404.111
102 FORMAT(' *ERROR* Wrong value of',I9,' in LOOKUP_BOUNDA(LBLREC', CHKLKBA1.88
& ',',I4,')') CHKLKBA1.89
WRITE(6,*)' Expected value=',RIMLENA,' for Pstar variable' ARB1F404.112
CALL PR_LOOK
( GDG0F401.93
*CALL ARGPPX
GDG0F401.94
& LOOKUP_BOUNDA,LOOKUP_BOUNDA,LEN1_LOOKUP,VAR) GDG0F401.95
ICODE=2 CHKLKBA1.92
CHKLKBA1.93
ELSE IF((VAR.EQ.2.OR.VAR.EQ.3).AND. CHKLKBA1.94
& LOOKUP_BOUNDA(LBLREC,VAR).NE.(RIMLENA-4*RIMWIDTHA)*P_LEVELS) APB4F401.93
& THEN CHKLKBA1.96
WRITE(6,102) LOOKUP_BOUNDA(LBLREC,VAR),VAR ARB1F404.113
EXPVAL= (RIMLENA-4*RIMWIDTHA)*P_LEVELS APB4F401.94
WRITE(6,*)' Expected value=',EXPVAL,' for wind variables' ARB1F404.114
CALL PR_LOOK
( GDG0F401.96
*CALL ARGPPX
GDG0F401.97
& LOOKUP_BOUNDA,LOOKUP_BOUNDA,LEN1_LOOKUP,VAR) GDG0F401.98
ICODE=2 CHKLKBA1.101
CHKLKBA1.102
ELSE IF(VAR.EQ.4.AND. CHKLKBA1.103
& LOOKUP_BOUNDA(LBLREC,VAR).NE.RIMLENA*P_LEVELS) THEN APB4F401.95
WRITE(6,102) LOOKUP_BOUNDA(LBLREC,VAR),VAR ARB1F404.115
EXPVAL= RIMLENA*P_LEVELS APB4F401.96
WRITE(6,*)' Expected value=',EXPVAL,' for thetal variable' ARB1F404.116
CALL PR_LOOK
( GDG0F401.99
*CALL ARGPPX
GDG0F401.100
& LOOKUP_BOUNDA,LOOKUP_BOUNDA,LEN1_LOOKUP,VAR) GDG0F401.101
ICODE=2 CHKLKBA1.109
CHKLKBA1.110
ELSE IF(VAR.EQ.5.AND. CHKLKBA1.111
& LOOKUP_BOUNDA(LBLREC,VAR).NE.RIMLENA*Q_LEVELS) THEN APB4F401.97
WRITE(6,102) LOOKUP_BOUNDA(LBLREC,VAR),VAR ARB1F404.117
EXPVAL= RIMLENA*Q_LEVELS APB4F401.98
WRITE(6,*)' Expected value=',EXPVAL,' for qt variable' ARB1F404.118
CALL PR_LOOK
( GDG0F401.102
*CALL ARGPPX
GDG0F401.103
& LOOKUP_BOUNDA,LOOKUP_BOUNDA,LEN1_LOOKUP,VAR) GDG0F401.104
ICODE=2 CHKLKBA1.117
CHKLKBA1.118
ELSE IF(VAR.GT.5 .AND. CODE.gt.60 .AND. ARB1F404.119
& LOOKUP_BOUNDA(LBLREC,VAR).NE.RIMLENA*TR_LEVELS) THEN APB4F401.99
WRITE(6,102) LOOKUP_BOUNDA(LBLREC,VAR),VAR ARB1F404.120
EXPVAL= RIMLENA*TR_LEVELS APB4F401.100
WRITE(6,*)' Expected value=',EXPVAL,' for tracer variables' ARB1F404.121
CALL PR_LOOK
( GDG0F401.105
*CALL ARGPPX
GDG0F401.106
& LOOKUP_BOUNDA,LOOKUP_BOUNDA,LEN1_LOOKUP,VAR) GDG0F401.107
ICODE=2 CHKLKBA1.125
CHKLKBA1.126
ELSE IF(VAR.GT.5 .AND. CODE.eq.12 .AND. ARB1F404.122
& LOOKUP_BOUNDA(LBLREC,VAR).NE.RIMLENA*Q_LEVELS) THEN ARB1F404.123
WRITE(6,102) LOOKUP_BOUNDA(LBLREC,VAR),VAR ARB1F404.124
EXPVAL= RIMLENA*TR_LEVELS ARB1F404.125
WRITE(6,*)' Expected value=',EXPVAL,' for qcf variable' ARB1F404.126
CALL PR_LOOK
( ARB1F404.127
*CALL ARGPPX
ARB1F404.128
& LOOKUP_BOUNDA,LOOKUP_BOUNDA,LEN1_LOOKUP,VAR) ARB1F404.129
ICODE=2 ARB1F404.130
ARB1F404.131
END IF CHKLKBA1.127
IF(ICODE.EQ.2) THEN CHKLKBA1.128
CMESSAGE='CHKLKBA : Length Consistency check' CHKLKBA1.129
RETURN CHKLKBA1.130
END IF CHKLKBA1.131
CHKLKBA1.132
CL Check LBCODE CHKLKBA1.133
IF(VAR.EQ.2.OR.VAR.EQ.3) THEN CHKLKBA1.134
IF(LOOKUP_BOUNDA(LBCODE,VAR).NE.2) THEN CHKLKBA1.135
CHKLKBA1.136
WRITE(6,103) LOOKUP_BOUNDA(LBCODE,VAR),VAR ARB1F404.132
103 FORMAT(' *ERROR* Wrong value of',I9,' in LOOKUP_BOUNDA(LBCODE', CHKLKBA1.138
& ',',I4,')') CHKLKBA1.139
WRITE(6,*)' Expected value=2' GIE0F403.110
CALL PR_LOOK
( GDG0F401.108
*CALL ARGPPX
GDG0F401.109
& LOOKUP_BOUNDA,LOOKUP_BOUNDA,LEN1_LOOKUP,VAR) GDG0F401.110
ICODE=3 CHKLKBA1.142
CMESSAGE='CHKLKBA : LBCODE Consistency check' CHKLKBA1.143
RETURN CHKLKBA1.144
ENDIF CHKLKBA1.145
ELSE IF(LOOKUP_BOUNDA(LBCODE,VAR).NE.1) THEN CHKLKBA1.146
WRITE(6,103) LOOKUP_BOUNDA(LBCODE,VAR),VAR ARB1F404.133
WRITE(6,*)' Expected value=1' GIE0F403.111
CALL PR_LOOK
( GDG0F401.111
*CALL ARGPPX
GDG0F401.112
& LOOKUP_BOUNDA,LOOKUP_BOUNDA,LEN1_LOOKUP,VAR) GDG0F401.113
ICODE=3 CHKLKBA1.150
CMESSAGE='CHKLKBA : LBCODE Consistency check' CHKLKBA1.151
RETURN CHKLKBA1.152
END IF CHKLKBA1.153
CHKLKBA1.154
CL Check boundary rim indicator CHKLKBA1.155
IF(LOOKUP_BOUNDA(LBHEM,VAR).NE.99) THEN CHKLKBA1.156
WRITE(6,104) LOOKUP_BOUNDA(LBHEM,VAR),VAR ARB1F404.134
104 FORMAT(' *ERROR* Wrong value of',I9,' in LOOKUP_BOUNDA(LBHEM', CHKLKBA1.158
& ',',I4,')') CHKLKBA1.159
WRITE(6,*)' Expected value=99' GIE0F403.112
CALL PR_LOOK
( GDG0F401.114
*CALL ARGPPX
GDG0F401.115
& LOOKUP_BOUNDA,LOOKUP_BOUNDA,LEN1_LOOKUP,VAR) GDG0F401.116
ICODE=4 CHKLKBA1.162
CMESSAGE='CHKLKBA : LBHEM Consistency check' CHKLKBA1.163
RETURN CHKLKBA1.164
END IF CHKLKBA1.165
CHKLKBA1.166
CL Check LBROW CHKLKBA1.167
IF(LOOKUP_BOUNDA(LBROW,VAR).NE.RIMWIDTHA) THEN CHKLKBA1.168
WRITE(6,105) LOOKUP_BOUNDA(LBROW,VAR),VAR ARB1F404.135
105 FORMAT(' *ERROR* Wrong value of',I9,' in LOOKUP_BOUNDA(LBROW', CHKLKBA1.170
& ',',I4,')') CHKLKBA1.171
WRITE(6,*)' Expected value=',RIMWIDTHA GIE0F403.113
CALL PR_LOOK
( GDG0F401.117
*CALL ARGPPX
GDG0F401.118
& LOOKUP_BOUNDA,LOOKUP_BOUNDA,LEN1_LOOKUP,VAR) GDG0F401.119
ICODE=5 CHKLKBA1.174
CMESSAGE='CHKLKBA : LBROW Consistency check' CHKLKBA1.175
RETURN CHKLKBA1.176
END IF CHKLKBA1.177
CHKLKBA1.178
CL Check LBNPT CHKLKBA1.179
IF(VAR.EQ.2.OR.VAR.EQ.3) THEN CHKLKBA1.180
IF(LOOKUP_BOUNDA(LBNPT,VAR).NE. CHKLKBA1.181
& ((RIMLENA-4*RIMWIDTHA)/RIMWIDTHA)) THEN APB4F401.101
WRITE(6,106) LOOKUP_BOUNDA(LBNPT,VAR),VAR ARB1F404.136
106 FORMAT(' *ERROR* Wrong value of',I9,' in LOOKUP_BOUNDA(LBNPT', CHKLKBA1.184
& ',',I4,')') CHKLKBA1.185
EXPVAL= (RIMLENA-4*RIMWIDTHA)/RIMWIDTHA APB4F401.102
WRITE(6,*)' Expected value=',EXPVAL GIE0F403.114
CALL PR_LOOK
( GDG0F401.120
*CALL ARGPPX
GDG0F401.121
& LOOKUP_BOUNDA,LOOKUP_BOUNDA,LEN1_LOOKUP,VAR) GDG0F401.122
ICODE=6 CHKLKBA1.189
CMESSAGE='CHKLKBA : LBNPT Consistency check' CHKLKBA1.190
RETURN CHKLKBA1.191
ENDIF CHKLKBA1.192
ELSEIF(LOOKUP_BOUNDA(LBNPT,VAR).NE.RIMLENA/RIMWIDTHA) THEN APB4F401.103
WRITE(6,106) LOOKUP_BOUNDA(LBNPT,VAR),VAR ARB1F404.137
EXPVAL= RIMLENA/RIMWIDTHA APB4F401.104
WRITE(6,*)' Expected value=',EXPVAL GIE0F403.115
CALL PR_LOOK
( GDG0F401.123
*CALL ARGPPX
GDG0F401.124
& LOOKUP_BOUNDA,LOOKUP_BOUNDA,LEN1_LOOKUP,VAR) GDG0F401.125
ICODE=6 CHKLKBA1.198
CMESSAGE='CHKLKBA : LBNPT Consistency check' CHKLKBA1.199
RETURN CHKLKBA1.200
END IF CHKLKBA1.201
CHKLKBA1.202
20 CONTINUE CHKLKBA1.203
CHKLKBA1.204
CHKLKBA1.205
RETURN CHKLKBA1.206
END CHKLKBA1.207
*ENDIF CHKLKBA1.208
*ENDIF CHKLKBA1.209