GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: phylmd/rrtm/sutoph.F90 Lines: 53 72 73.6 %
Date: 2023-06-30 12:56:34 Branches: 9 26 34.6 %

Line Branch Exec Source
1
!OPTIONS XOPT(NOEVAL)
2
1
SUBROUTINE SUTOPH(KULOUT)
3
4
!**** *SUTOPH*   - Initialize common YOMTOPH top parameterization
5
6
!     Purpose.
7
!     --------
8
!           Initialize YOMTOPH, the common that contains the top pressure
9
!           and the first level of parameterization
10
!           it also contains mesospheric drag vertical profil
11
12
!**   Interface.
13
!     ----------
14
!        *CALL* *SUTOPH(KULOUT)
15
16
!        Explicit arguments :
17
!        --------------------
18
!        KULOUT : Logical unit for the output
19
20
!        Implicit arguments :
21
!        --------------------
22
!        COMMON YOMTOPH, YOMSTA
23
24
!     Method.
25
!     -------
26
!        See documentation
27
28
!     Externals.
29
!     ----------
30
31
!     Reference.
32
!     ----------
33
!        Documentation ARPEGE
34
35
!     Author.
36
!     -------
37
!        A. Lasserre-Bigorry
38
39
!     Modifications.
40
!     --------------
41
!        Original : 91-06-10
42
!        Modified 92-02-22 by M. Deque (test of consistency between phys. para.)
43
!        Modified by R. EL Khatib : 93-04-02 Set-up defaults controled by LECMWF
44
!        Modified 93-11-17 by Ph. Dandin : FMR scheme with MF physics
45
!        Modified 97-05-17 by M. Deque   : frozen FMR
46
!        M.Hamrud      01-Oct-2003 CY28 Cleaning
47
!        F.Bouyssel 04-11-22 : NTCOET,ETCOET
48
!        P. Marquet 05-09-12 : NTAJUC
49
!        M. Deque   05-09-12 : default RCLX
50
!        M. Deque   05-09-12 : default TPSCLIM
51
!     ------------------------------------------------------------------
52
53
USE PARKIND1  ,ONLY : JPIM     ,JPRB
54
USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
55
56
USE YOMDIM   , ONLY : NFLEVG
57
! Ce qui concerne NULNAM commente par MPL le 15.04.09
58
!USE YOMLUN   , ONLY : NULNAM
59
USE YOMCT0B  , ONLY : LECMWF
60
USE YOMSTA   , ONLY : STPRE
61
USE YOMTOPH  , ONLY : RMESOU   ,RMESOT   ,NTQSAT   ,NTDIFU   ,&
62
 & NTCOEF   ,NTDRAG   ,NTCVIM   ,NTPLUI   ,NTRADI   ,&
63
 & NTNEBU   ,NTOZON   ,NTDRME   ,ETQSAT   ,ETDIFU   ,&
64
 & ETCOEF   ,ETDRAG   ,ETCVIM   ,ETPLUI   ,ETRADI   ,&
65
 & ETNEBU   ,ETOZON   ,ETDRME   ,XDRMUK   ,XDRMUX   ,XDRMUP   ,&
66
 & XDRMTK   ,XDRMTX   ,XDRMTP   ,NTCOET   ,ETCOET   ,&
67
 & RMESOQ   ,XDRMQK   ,XDRMQP   ,RFMESOQ  ,RCLX     ,&
68
 & NTAJUC   ,ETAJUC   ,TPSCLIM
69
USE YOMPHY   , ONLY : LRAY     ,LRAYFM   ,LRAYFM15 ,LRRMES
70
USE YOEPHY   , ONLY : LAGPHY
71
72
!     ------------------------------------------------------------------
73
74
IMPLICIT NONE
75
76
INTEGER(KIND=JPIM),INTENT(IN)    :: KULOUT
77
78
!     ------------------------------------------------------------------
79
80
INTEGER(KIND=JPIM) :: JLEV
81
82
REAL(KIND=JPRB) :: PAP, PAPX, ZMEST, ZMESU, ZMESQ
83
84
REAL(KIND=JPRB) :: PMESQF
85
REAL(KIND=JPRB) :: PMESTF
86
REAL(KIND=JPRB) :: PMESUF
87
REAL(KIND=JPRB) :: ZHOOK_HANDLE
88
89
!     ------------------------------------------------------------------
90
91
#include "namtoph.h"
92
93
!     ------------------------------------------------------------------
94
95
!*    Mesospheric drag shape function
96
97
!     PMESUF(PAP,PAPX) = MAX( (PAPX-PAP)/MAX(PAP**1.5,1.E-10),0. )
98
PMESUF(PAP,PAPX) = MAX( (PAPX-PAP)/MAX(PAP,1.E-10_JPRB),0.0_JPRB )
99
PMESTF(PAP,PAPX) = MAX( (PAPX-PAP)/MAX(PAP,1.E-10_JPRB),0.0_JPRB )
100
PMESQF(PAP,PAPX) = MAX( (PAPX-PAP)/MAX(PAP,1.E-10_JPRB),0.0_JPRB )
101
102
!     ------------------------------------------------------------------
103
104
#include "abor1.intfb.h"
105
#include "posnam.intfb.h"
106
#include "seapre.intfb.h"
107
108
!     ------------------------------------------------------------------
109
110
1
IF (LHOOK) CALL DR_HOOK('SUTOPH',0,ZHOOK_HANDLE)
111
112
!     ------------------------------------------------------------------
113
114
!*       1.    Set default values.
115
!              -------------------
116
117
!        1.1 Set implicit default values
118
119
1
ETQSAT=0._JPRB
120
1
ETDIFU=0._JPRB
121
1
ETCOEF=0._JPRB
122
1
ETDRAG=0._JPRB
123
1
ETCVIM=0._JPRB
124
1
ETPLUI=0._JPRB
125
1
ETRADI=0._JPRB
126
1
ETNEBU=0._JPRB
127
1
ETOZON=0._JPRB
128
1
ETDRME=0._JPRB
129
1
ETCOET=0._JPRB
130
1
ETAJUC=0._JPRB
131
1
NTQSAT=1
132
1
NTDIFU=1
133
1
NTCOEF=1
134
1
NTDRAG=1
135
1
NTCVIM=1
136
1
NTPLUI=1
137
1
NTRADI=1
138
1
NTNEBU=1
139
1
NTOZON=1
140
1
NTDRME=1
141
1
NTCOET=1
142
1
NTAJUC=1
143
144
1
XDRMUK=0._JPRB
145
1
XDRMUX=0._JPRB
146
1
XDRMUP=0._JPRB
147
1
XDRMTK=0._JPRB
148
1
XDRMTX=0._JPRB
149
1
XDRMTP=0._JPRB
150
1
XDRMQK=0._JPRB
151
1
XDRMQP=0._JPRB
152
153
1
RFMESOQ=3.725E-06_JPRB
154
1
RCLX=0.0_JPRB
155
1
TPSCLIM=197._JPRB
156
157
!        1.2 Modify default values according to LECMWF
158
159
IF (LECMWF) THEN
160
ELSE
161
ENDIF
162
163
!     ------------------------------------------------------------------
164
165
!*       2.    Modify default values.
166
!              ----------------------
167
168
! Ce qui concerne NAMTOPH commente par MPL le 15.04.09
169
!CALL POSNAM(NULNAM,'NAMTOPH')
170
!READ(NULNAM,NAMTOPH)
171
172
!*       2.1  Search corresponding level, to pressure in NAMTOPH
173
!             for each parameterization
174
175
IF(ETQSAT /= 0.0_JPRB) CALL SEAPRE (ETQSAT,NTQSAT,STPRE,NFLEVG)
176
IF(ETDIFU /= 0.0_JPRB) CALL SEAPRE (ETDIFU,NTDIFU,STPRE,NFLEVG)
177
IF(ETCOEF /= 0.0_JPRB) CALL SEAPRE (ETCOEF,NTCOEF,STPRE,NFLEVG)
178
IF(ETDRAG /= 0.0_JPRB) CALL SEAPRE (ETDRAG,NTDRAG,STPRE,NFLEVG)
179
IF(ETCVIM /= 0.0_JPRB) CALL SEAPRE (ETCVIM,NTCVIM,STPRE,NFLEVG)
180
IF(ETPLUI /= 0.0_JPRB) CALL SEAPRE (ETPLUI,NTPLUI,STPRE,NFLEVG)
181
IF(ETRADI /= 0.0_JPRB) THEN
182
  IF (LRAY) THEN
183
    CALL SEAPRE (ETRADI,NTRADI,STPRE,NFLEVG)
184
  ENDIF
185
  IF (LRAYFM.OR.LRAYFM15) THEN
186
    ETRADI=0._JPRB
187
    NTRADI=1
188
  ENDIF
189
ENDIF
190
IF(ETNEBU /= 0.0_JPRB) CALL SEAPRE (ETNEBU,NTNEBU,STPRE,NFLEVG)
191
IF(ETOZON /= 0.0_JPRB) CALL SEAPRE (ETOZON,NTOZON,STPRE,NFLEVG)
192
IF(ETDRME /= 0.0_JPRB) CALL SEAPRE (ETDRME,NTDRME,STPRE,NFLEVG)
193
IF(ETCOET /= 0.0_JPRB) CALL SEAPRE (ETCOET,NTCOET,STPRE,NFLEVG)
194
IF(ETAJUC /= 0.0_JPRB) CALL SEAPRE (ETAJUC,NTAJUC,STPRE,NFLEVG)
195
!     ------------------------------------------------------------------
196
197
!*       3.    Print final values.
198
!              -------------------
199
200
1
WRITE(UNIT=KULOUT,FMT='('' COMMON YOMTOPH '')')
201
WRITE(UNIT=KULOUT,FMT='('' ETQSAT = '',E10.4,'' NTQSAT = '',I10 &
202
 & ,'' ETDIFU = '',E10.4,'' NTDIFU = '',I10 &
203
 & ,/,'' ETCOEF = '',E10.4,'' NTCOEF = '',I10 &
204
 & ,'' ETDRAG = '',E10.4,'' NTDRAG = '',I10 &
205
 & ,/,'' ETCVIM = '',E10.4,'' NTCVIM = '',I10 &
206
 & ,'' ETPLUI = '',E10.4,'' NTPLUI = '',I10 &
207
 & ,/,'' ETRADI = '',E10.4,'' NTRADI = '',I10 &
208
 & ,'' ETNEBU = '',E10.4,'' NTNEBU = '',I10 &
209
 & ,/,'' ETOZON = '',E10.4,'' NTOZON = '',I10 &
210
 & ,'' ETDRME = '',E10.4,'' NTDRME = '',I10 &
211
 & ,/,'' ETCOET = '',E10.4,'' NTCOET = '',I10 &
212
 & ,/,'' ETAJUC = '',E10.4,'' NTAJUC = '',I10 &
213
 & ,/,'' XDRMUK = '',E10.4,'' XDRMUP = '',E10.4 &
214
 & ,'' XDRMUX = '',E10.4,'' XDRMTK = '',E10.4 &
215
 & ,'' XDRMTP = '',E10.4,'' XDRMTX = '',E10.4 &
216
 & ,'' XDRMQK = '',E11.4,'' XDRMQP = '',E11.4 &
217
 & ,/,'' RFMESOQ= '',E11.4,'' RCLX   = '',E11.4 &
218
 & )')&
219
1
 & ETQSAT,NTQSAT,ETDIFU,NTDIFU &
220
1
 & ,ETCOEF,NTCOEF,ETDRAG,NTDRAG &
221
1
 & ,ETCVIM,NTCVIM,ETPLUI,NTPLUI &
222
1
 & ,ETRADI,NTRADI,ETNEBU,NTNEBU &
223
1
 & ,ETOZON,NTOZON,ETDRME,NTDRME &
224
1
 & ,ETCOET,NTCOET &
225
1
 & ,ETAJUC,NTAJUC &
226
1
 & ,XDRMUK,XDRMUP,XDRMUX,XDRMTK,XDRMTP,XDRMTX &
227
2
 & ,XDRMQK,XDRMQP,RFMESOQ,RCLX
228
229
!     VERIFICATION OF CONSISTENCY BETWEEN PHYSICAL PARAMETERIZATION
230
231

1
IF (ETCOEF > ETDIFU.OR.ETCOEF > ETDRAG)THEN
232
  WRITE(UNIT=KULOUT,FMT='('' ETCOEF TOO LOW '')')
233
  CALL ABOR1('SUTOPH')
234
ENDIF
235

1
IF (ETQSAT > ETNEBU.OR.ETQSAT > ETPLUI.OR.ETQSAT > ETCVIM)THEN
236
  WRITE(UNIT=KULOUT,FMT='('' ETQSAT TOO LOW '')')
237
  CALL ABOR1('SUTOPH')
238
ENDIF
239
1
IF (ETCVIM > ETNEBU)THEN
240
  WRITE(UNIT=KULOUT,FMT='('' ETCVIM TOO LOW '')')
241
  CALL ABOR1('SUTOPH')
242
ENDIF
243
244
!     ------------------------------------------------------------------
245
246
!*       4.    INITIALIZE MESOSPHERIC DRAG FOR U,V AND T
247
!              -----------------------------------------
248
249

1
IF (LRRMES.AND..NOT.LAGPHY) THEN
250
  WRITE (UNIT=KULOUT,FMT='('' PROFIL VERTICAL DE DRAG MESO'',/&
251
   & ,'' LEV'',T15,''VITESSE'',T45,''TEMPERATURE'' &
252
   & , T65, ''HUMIDITE'' )')
253
  DO JLEV=1,NFLEVG
254
    RMESOU(JLEV)=XDRMUK*PMESUF(STPRE(JLEV),XDRMUP)
255
    RMESOT(JLEV)=XDRMTK*PMESTF(STPRE(JLEV),XDRMTP)
256
    RMESOQ(JLEV)=XDRMQK*PMESQF(STPRE(JLEV),XDRMQP)
257
    IF (XDRMUX /= 0.0_JPRB) RMESOU(JLEV)=MIN(RMESOU(JLEV),XDRMUX)
258
    IF (XDRMTX /= 0.0_JPRB) RMESOT(JLEV)=MIN(RMESOT(JLEV),XDRMTX)
259
    ZMESU=1.0_JPRB/MAX(1.E-8_JPRB,RMESOU(JLEV)*3600._JPRB*24._JPRB)
260
    ZMEST=1.0_JPRB/MAX(1.E-8_JPRB,RMESOT(JLEV)*3600._JPRB*24._JPRB)
261
    ZMESQ=1.0_JPRB/MAX(1.E-8_JPRB,RMESOQ(JLEV)*3600._JPRB*24._JPRB)
262
    WRITE (UNIT=KULOUT,FMT='(I3,T10,E9.3,T20,G9.3,T40,E9.3,T50 &
263
     & ,G9.3, T70,E9.3, T80,G9.3)') JLEV,RMESOU(JLEV),ZMESU, &
264
     & RMESOT(JLEV),ZMEST, &
265
     & RMESOQ(JLEV),ZMESQ
266
  ENDDO
267
ENDIF
268
269
!     ------------------------------------------------------------------
270
271
1
IF (LHOOK) CALL DR_HOOK('SUTOPH',1,ZHOOK_HANDLE)
272
1
END SUBROUTINE SUTOPH