*IF DEF,BCRECONF BCABCAL1.2 C ******************************COPYRIGHT****************************** BCABCAL1.3 C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved. BCABCAL1.4 C BCABCAL1.5 C Use, duplication or disclosure of this code is subject to the BCABCAL1.6 C restrictions as set forth in the contract. BCABCAL1.7 C BCABCAL1.8 C Meteorological Office BCABCAL1.9 C London Road BCABCAL1.10 C BRACKNELL BCABCAL1.11 C Berkshire UK BCABCAL1.12 C RG12 2SZ BCABCAL1.13 C BCABCAL1.14 C If no contract has been raised with this copy of the code, the use, BCABCAL1.15 C duplication or disclosure of it is strictly prohibited. Permission BCABCAL1.16 C to do so must first be obtained in writing from the Head of Numerical BCABCAL1.17 C Modelling at the above address. BCABCAL1.18 C BCABCAL1.19 C ********************************************************************* BCABCAL1.20SUBROUTINE BC_ABCALC (AK,BK,AKH,BKH,P_LEVELS_OUT, 1,1BCABCAL1.21 & ICODE,CMESSAGE) BCABCAL1.22 IMPLICIT NONE BCABCAL1.23 BCABCAL1.24 INTEGER BCABCAL1.25 & P_LEVELS_OUT BCABCAL1.26 & ,ICODE BCABCAL1.27 BCABCAL1.28 REAL BCABCAL1.29 & AK(P_LEVELS_OUT) BCABCAL1.30 & ,BK(P_LEVELS_OUT) BCABCAL1.31 & ,AKH(P_LEVELS_OUT+1) BCABCAL1.32 & ,BKH(P_LEVELS_OUT+1) BCABCAL1.33 BCABCAL1.34 CHARACTER*80 CMESSAGE BCABCAL1.35 BCABCAL1.36 *CALL C_MDI
BCABCAL1.37 *CALL C_VERT_MAX
BCABCAL1.38 *CALL C_VERT_NL
BCABCAL1.39 *CALL C_ECMWF_19
BCABCAL1.40 *CALL C_ECMWF_31
BCABCAL1.41 BCABCAL1.42 INTEGER I,J BCABCAL1.43 BCABCAL1.44 ! Read in VERTICAL Namelist BCABCAL1.45 READ (5,VERTICAL,ERR=101,END=102) BCABCAL1.46 GO TO 100 BCABCAL1.47 BCABCAL1.48 101 CONTINUE BCABCAL1.49 WRITE (6,*) ' Error trying to read VERTICAL namelist.' BCABCAL1.50 CMESSAGE = 'BCABCALC : Error trying to read VERTICAL namelist.' BCABCAL1.51 ICODE = 101 BCABCAL1.52 GO TO 9999 ! Return BCABCAL1.53 BCABCAL1.54 102 CONTINUE BCABCAL1.55 WRITE (6,*) ' VERTICAL namelist not found ??' BCABCAL1.56 CMESSAGE = 'BCABCALC : VERTICAL namelist not found ??' BCABCAL1.57 ICODE = 102 BCABCAL1.58 GO TO 9999 ! Return BCABCAL1.59 BCABCAL1.60 100 CONTINUE BCABCAL1.61 WRITE(6,VERTICAL) BCABCAL1.62 BCABCAL1.63 ! Add checks on nlevs,nlevels19,nlevels31 BCABCAL1.64 ! BCABCAL1.65 ! Calculate AK,BK,AKH,BKH from ETAH BCABCAL1.66 ! BCABCAL1.67 IF (METH_LEV_CALC.EQ.9 .AND. P_LEVELS_OUT.EQ.NLEVELS19) THEN BCABCAL1.68 ! BCABCAL1.69 ! Use preset values of AK, BK, AKH and BKH (19 levels) BCABCAL1.70 ! BCABCAL1.71 DO I=1,NLEVELS19 BCABCAL1.72 AK(I)=AK_ECMWF_19(I) BCABCAL1.73 BK(I)=BK_ECMWF_19(I) BCABCAL1.74 END DO BCABCAL1.75 DO I=1,NLEVELS19+1 BCABCAL1.76 AKH(I)=AKH_ECMWF_19(I) BCABCAL1.77 BKH(I)=BKH_ECMWF_19(I) BCABCAL1.78 END DO BCABCAL1.79 BCABCAL1.80 ELSEIF (METH_LEV_CALC.EQ.9 .AND. P_LEVELS_OUT.EQ.NLEVELS31) THEN BCABCAL1.81 ! BCABCAL1.82 ! Use preset values of AK, BK, AKH and BKH (31 levels) BCABCAL1.83 ! BCABCAL1.84 DO I=1,NLEVELS31 BCABCAL1.85 AK(I)=AK_ECMWF_31(I) BCABCAL1.86 BK(I)=BK_ECMWF_31(I) BCABCAL1.87 END DO BCABCAL1.88 DO I=1,NLEVELS31+1 BCABCAL1.89 AKH(I)=AKH_ECMWF_31(I) BCABCAL1.90 BKH(I)=BKH_ECMWF_31(I) BCABCAL1.91 END DO BCABCAL1.92 BCABCAL1.93 ELSEIF (METH_LEV_CALC.NE.9) THEN BCABCAL1.94 ! BCABCAL1.95 ! Calculate AK, BK, AKH and BKH from ETAH BCABCAL1.96 ! BCABCAL1.97 CALL ABCALC
(METH_LEV_CALC,1,1,P_LEVELS_OUT, BCABCAL1.98 & ETAH(MIN_PRS_HLEV),ETAH(MAX_SIG_HLEV),ETAH, BCABCAL1.99 & AK,BK,AKH,BKH,ICODE) BCABCAL1.100 BCABCAL1.101 IF (ICODE.NE.0) THEN BCABCAL1.102 CMESSAGE = 'Error in ABCALC in BC_ABCALC' BCABCAL1.103 WRITE (6,*) 'Error code from ABCALC = ',ICODE BCABCAL1.104 WRITE (6,*) 'Check your level specification for Model' BCABCAL1.105 GO TO 9999 ! Return BCABCAL1.106 END IF BCABCAL1.107 BCABCAL1.108 ELSE BCABCAL1.109 BCABCAL1.110 CMESSAGE = 'Invalid METH_LEV_CALC in VERTICAL Namleist' BCABCAL1.111 WRITE(6,*) CMESSAGE BCABCAL1.112 ICODE = 101 BCABCAL1.113 GO TO 9999 ! Return BCABCAL1.114 BCABCAL1.115 ENDIF BCABCAL1.116 BCABCAL1.117 WRITE(6,*) 'Vertical levels for Boundary Dataset fields./' BCABCAL1.118 WRITE(6,*) 'AK=' BCABCAL1.119 WRITE(6,'(3(E22.15,'',''))')(AK(J),J=1,P_LEVELS_OUT) BCABCAL1.120 WRITE(6,*) 'BK=' BCABCAL1.121 WRITE(6,'(3(E22.15,'',''))')(BK(J),J=1,P_LEVELS_OUT) BCABCAL1.122 WRITE(6,*) 'AKH=' BCABCAL1.123 WRITE(6,'(3(E22.15,'',''))')(AKH(J),J=1,P_LEVELS_OUT+1) BCABCAL1.124 WRITE(6,*) 'BKH=' BCABCAL1.125 WRITE(6,'(3(E22.15,'',''))')(BKH(J),J=1,P_LEVELS_OUT+1) BCABCAL1.126 BCABCAL1.127 9999 RETURN BCABCAL1.128 END BCABCAL1.129 *ENDIF BCABCAL1.130