*IF DEF,RECON TH_TO_T1.2
C ******************************COPYRIGHT****************************** GTS2F400.10315
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.10316
C GTS2F400.10317
C Use, duplication or disclosure of this code is subject to the GTS2F400.10318
C restrictions as set forth in the contract. GTS2F400.10319
C GTS2F400.10320
C Meteorological Office GTS2F400.10321
C London Road GTS2F400.10322
C BRACKNELL GTS2F400.10323
C Berkshire UK GTS2F400.10324
C RG12 2SZ GTS2F400.10325
C GTS2F400.10326
C If no contract has been raised with this copy of the code, the use, GTS2F400.10327
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.10328
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.10329
C Modelling at the above address. GTS2F400.10330
C ******************************COPYRIGHT****************************** GTS2F400.10331
C GTS2F400.10332
CLL TH_TO_T1.3
CLL SUBROUTINE TH_TO_THL:---------------------------------------- TH_TO_T1.4
CLL TH_TO_T1.5
CLL Purpose: Convert TH & Q to THL & QT. Done only if input TH_TO_T1.6
CLL file contains TH (& therefore Q) but not THL. TH_TO_T1.7
CLL Data on input file is overwritten. TH_TO_T1.8
CLL TH_TO_T1.9
CLL Written by A. Dickinson 27/02/92 TH_TO_T1.10
CLL TH_TO_T1.11
CLL Model Modification history from model version 3.0: TH_TO_T1.12
CLL version date TH_TO_T1.13
CLL 3.3 08/12/93 Extra argument for READ/WRITFLDS. D. Robinson DR081293.123
! 4.1 1 8/06/96 Changes to cope with changes in STASH addressing GDG0F401.1433
! Author D.M. Goddard. GDG0F401.1434
! 4.2 Oct. 96 T3E migration: *DEF CRAY removed GSS9F402.86
! S.J.Swarbrick GSS9F402.87
! 4.4 15/10/97 Correct pointer for reading potential temperature UDG8F404.4
! Author: D.M. Goddard. UDG8F404.5
CLL TH_TO_T1.14
CLL Modification History: TH_TO_T1.15
CLL TH_TO_T1.16
CLL Logical component number: S1 TH_TO_T1.17
CLL TH_TO_T1.18
CLL Documentation: Formula presented in UM Doc Paper 10 TH_TO_T1.19
CLL--------------------------------------------------------------- TH_TO_T1.20
C*L Arguments:---------------------------------------------------- TH_TO_T1.21
SUBROUTINE TH_TO_THL( 1,14GDG0F401.1435
*CALL ARGPPX
GDG0F401.1436
& FIXHD,LOOKUP,LEVDEPC, ! GDG0F401.1437
& PP_ITEMC,PP_POS,N_TYPES,NFTIN, ! Intent (In) GDG0F401.1438
& P_FIELD,P_LEVELS,Q_LEVELS, ! GDG0F401.1439
& BL_LEVELS) GDG0F401.1440
TH_TO_T1.25
IMPLICIT NONE TH_TO_T1.26
TH_TO_T1.27
INTEGER TH_TO_T1.28
& N_TYPES !IN No of different section/item codes TH_TO_T1.29
&,BL_LEVELS !IN No of b.l. levels TH_TO_T1.30
&,P_LEVELS !IN No of model levels TH_TO_T1.31
&,Q_LEVELS !IN No of moist levels TH_TO_T1.32
&,P_FIELD !IN No of points on p-grid TH_TO_T1.33
&,NFTIN !IN Unit number TH_TO_T1.34
&,LOOKUP(*) !IN Lookup header TH_TO_T1.35
&,FIXHD(*) !IN Fixed length header TH_TO_T1.36
&,PP_ITEMC(N_TYPES) !IN Item codes on file TH_TO_T1.37
&,PP_POS(N_TYPES) !IN Position on file TH_TO_T1.38
TH_TO_T1.39
REAL TH_TO_T1.40
& LEVDEPC(P_LEVELS*2) !IN Level dependent consts TH_TO_T1.41
TH_TO_T1.42
C Local arrays:-------------------------------------------------------- TH_TO_T1.43
REAL TH_TO_T1.44
& PSTAR(P_FIELD) ! PSTAR - surface pressure TH_TO_T1.45
&,TH(P_FIELD) ! TH/THL - potential temperature TH_TO_T1.46
&,Q(P_FIELD) ! Q/QT - specific humidity TH_TO_T1.47
&,QCL(P_FIELD) ! QCL - Cloud water TH_TO_T1.48
&,QCF(P_FIELD) ! QCF - Cloud ice TH_TO_T1.49
&,T(P_FIELD) ! T - Temperature TH_TO_T1.50
&,TEMP(P_FIELD) ! Temporary space TH_TO_T1.51
TH_TO_T1.52
C*L External subroutines called:--------------------------------------- TH_TO_T1.53
EXTERNAL LOCATE,ABORT_IO,READFLDS,INITQLCF TH_TO_T1.54
C*--------------------------------------------------------------------- TH_TO_T1.59
C Local variables:----------------------------------------------------- TH_TO_T1.60
TH_TO_T1.61
INTEGER TH_TO_T1.62
& POSTH,POS,POSQ,POSQCL,POSQCF ! Position indicators TH_TO_T1.63
&,POSTHL ! Position indicators TH_TO_T1.64
&,ICODE ! Return code TH_TO_T1.65
&,K,I ! Loop index TH_TO_T1.66
TH_TO_T1.67
REAL TH_TO_T1.68
& PR ! Pressure TH_TO_T1.69
&,P_EXNER_FULL ! Exner pressure TH_TO_T1.70
TH_TO_T1.71
CHARACTER*80 TH_TO_T1.72
& CMESSAGE ! Message TH_TO_T1.73
C --------------------------------------------------------------------- TH_TO_T1.74
! Comdecks:--------------------------------------------------------- GDG0F401.1441
*CALL CSUBMODL
GDG0F401.1442
*CALL CPPXREF
GDG0F401.1443
*CALL PPXLOOK
GDG0F401.1444
*CALL C_R_CP
TH_TO_T1.75
*CALL C_LHEAT
TH_TO_T1.76
C---------------------------------------------------------------------- TH_TO_T1.77
TH_TO_T1.78
CALL LOCATE
(4,PP_ITEMC,N_TYPES,POSTH) TH_TO_T1.79
CALL LOCATE
(5,PP_ITEMC,N_TYPES,POSTHL) TH_TO_T1.80
IF(POSTH.NE.0.AND.POSTHL.EQ.0)THEN TH_TO_T1.81
C Locate PSTAR TH_TO_T1.82
CALL LOCATE
(1,PP_ITEMC,N_TYPES,POS) TH_TO_T1.83
C Locate Q, QCF and QCL TH_TO_T1.84
CALL LOCATE
(10,PP_ITEMC,N_TYPES,POSQ) TH_TO_T1.85
CALL LOCATE
(11,PP_ITEMC,N_TYPES,POSQCL) TH_TO_T1.86
CALL LOCATE
(12,PP_ITEMC,N_TYPES,POSQCF) TH_TO_T1.87
TH_TO_T1.88
C Read in PSTAR TH_TO_T1.89
CALL READFLDS
(NFTIN,1,PP_POS(POS),LOOKUP,64, GDG0F401.1445
& PSTAR,P_FIELD,FIXHD, GDG0F401.1446
*CALL ARGPPX
GDG0F401.1447
& ICODE,CMESSAGE) GDG0F401.1448
IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTIN) TH_TO_T1.92
TH_TO_T1.93
TH_TO_T1.94
DO K=1,Q_LEVELS TH_TO_T1.95
TH_TO_T1.96
C Read in TH TH_TO_T1.97
CALL READFLDS
(NFTIN,1,PP_POS(POSTH)+K-1,LOOKUP,64, UDG8F404.6
& TH,P_FIELD,FIXHD, GDG0F401.1450
*CALL ARGPPX
GDG0F401.1451
& ICODE,CMESSAGE) GDG0F401.1452
IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTIN) TH_TO_T1.100
TH_TO_T1.101
C Read in Q TH_TO_T1.102
CALL READFLDS
(NFTIN,1,PP_POS(POSQ)+K-1,LOOKUP,64, GDG0F401.1453
& Q,P_FIELD,FIXHD, GDG0F401.1454
*CALL ARGPPX
GDG0F401.1455
& ICODE,CMESSAGE) GDG0F401.1456
IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTIN) TH_TO_T1.105
TH_TO_T1.106
C Either read in QCL and QCF from input file or estimate from T, Q & P TH_TO_T1.107
TH_TO_T1.108
IF(POSQCL.NE.0)THEN TH_TO_T1.109
C Read in QCL TH_TO_T1.110
CALL READFLDS
(NFTIN,1,PP_POS(POSQCL)+K-1,LOOKUP,64, GDG0F401.1457
& QCL,P_FIELD,FIXHD, GDG0F401.1458
*CALL ARGPPX
GDG0F401.1459
& ICODE,CMESSAGE) GDG0F401.1460
IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTIN) TH_TO_T1.113
TH_TO_T1.114
C Read in QCF TH_TO_T1.115
CALL READFLDS
(NFTIN,1,PP_POS(POSQCF)+K-1,LOOKUP,64, GDG0F401.1461
& QCF,P_FIELD,FIXHD, GDG0F401.1462
*CALL ARGPPX
GDG0F401.1463
& ICODE,CMESSAGE) GDG0F401.1464
IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTIN) TH_TO_T1.118
TH_TO_T1.119
ELSE TH_TO_T1.120
TH_TO_T1.121
C Convert TH to T TH_TO_T1.122
DO I=1,P_FIELD TH_TO_T1.123
PR=LEVDEPC(K)+PSTAR(I)*LEVDEPC(K+P_LEVELS) TH_TO_T1.124
T(I)=TH(I)*(PR/PREF)**KAPPA GSS9F402.88
ENDDO TH_TO_T1.130
TH_TO_T1.131
C Estimate QCL and QCF from T, Q & P TH_TO_T1.132
CALL INITQLCF
TH_TO_T1.133
* (LEVDEPC,LEVDEPC(1+P_LEVELS),PSTAR,Q,T,P_LEVELS,P_FIELD TH_TO_T1.134
* ,TEMP,QCF,QCL,BL_LEVELS,K) TH_TO_T1.135
TH_TO_T1.136
ENDIF TH_TO_T1.137
TH_TO_T1.138
C Convert TH to THL and Q to QT TH_TO_T1.139
DO I=1,P_FIELD TH_TO_T1.140
P_EXNER_FULL=((LEVDEPC(K) TH_TO_T1.145
* +LEVDEPC(K+P_LEVELS)*PSTAR(I))/PREF)**KAPPA TH_TO_T1.146
TH(I)=TH(I)-(LC*QCL(I)+(LC+LF)*QCF(I))/(CP*P_EXNER_FULL) TH_TO_T1.148
Q(I)=Q(I)+QCL(I)+QCF(I) TH_TO_T1.149
ENDDO TH_TO_T1.150
TH_TO_T1.151
TH_TO_T1.152
C Write out THL TH_TO_T1.153
CALL WRITFLDS
(NFTIN,1,PP_POS(POSTH)+K-1, GDG0F401.1465
& LOOKUP,64,TH,P_FIELD,FIXHD, GDG0F401.1466
*CALL ARGPPX
GDG0F401.1467
& ICODE,CMESSAGE) GDG0F401.1468
IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE TH_TO_T1.156
* ,ICODE,NFTIN) TH_TO_T1.157
TH_TO_T1.158
C Write out QT TH_TO_T1.159
CALL WRITFLDS
(NFTIN,1,PP_POS(POSQ)+K-1, GDG0F401.1469
& LOOKUP,64,Q,P_FIELD,FIXHD, GDG0F401.1470
*CALL ARGPPX
GDG0F401.1471
& ICODE,CMESSAGE) GDG0F401.1472
IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE TH_TO_T1.162
* ,NFTIN) TH_TO_T1.163
TH_TO_T1.164
TH_TO_T1.165
ENDDO TH_TO_T1.166
TH_TO_T1.167
C Change item codes from TH -> THL and Q -> QT TH_TO_T1.168
PP_ITEMC(POSTH)=5 TH_TO_T1.169
PP_ITEMC(POSQ)=11 TH_TO_T1.170
TH_TO_T1.171
ENDIF TH_TO_T1.172
TH_TO_T1.173
RETURN TH_TO_T1.174
END TH_TO_T1.175
*ENDIF TH_TO_T1.176