GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: phylmd/rrtm/suphec.F90 Lines: 29 54 53.7 %
Date: 2023-06-30 12:56:34 Branches: 23 38 60.5 %

Line Branch Exec Source
1
2
SUBROUTINE SUPHEC(KULOUT)
2
3
!**** *SUPHEC - INITIALISES PHYSICAL CONSTANTS OF UNCERTAIN VALUE.
4
!               WITHIN THE E.C.M.W.F. PHYSICS PACKAGE
5
6
!     PURPOSE.
7
!     --------
8
9
!          THIS ROUTINE SETS THE VALUES FOR THE PHYSICAL CONSTANTS USED
10
!     IN THE PARAMETERIZATION ROUTINES WHENEVER THESE VALUES ARE NOT
11
!     KNOWN WELL ENOUGH TO FORBID ANY TUNING OR WHENEVER THEY ARE
12
!     SUBJECT TO AN ARBITRARY CHOICE OF THE MODELLER. THESE CONSTANTS
13
!     ARE DISTRIBUTED IN COMMON DECKS *YOEXXXX* WHERE XXXX CORRESPONDS
14
!     TO THE INDIVIDUAL PHYSICAL PARAMETRIZATION
15
16
!**   INTERFACE.
17
!     ----------
18
19
!          *SUPHEC* IS CALLED FROM *SUPHY*
20
21
!     METHOD.
22
!     -------
23
24
!          NONE.
25
26
!     EXTERNALS.
27
!     ----------
28
29
!          *SUECRAD*, *SUCUMF*, *SUCUMF2*,*SUVDFS*, *SUSURF*
30
!          *SUECRAD15*, *SUCLOP15*
31
!          *SUGWD*, *SUCLD*, *SUCOND*, *SUPHLI*, *SUMETHOX*
32
33
!     REFERENCE.
34
!     ----------
35
36
!          SEE PHYSICAL ROUTINES FOR AN EXACT DEFINITION OF THE
37
!     CONSTANTS.
38
39
!     AUTHOR.
40
!     -------
41
!          J.-J. MORCRETTE  E.C.M.W.F.    91/06/15  ADAPTATION TO I.F.S.
42
43
!     MODIFICATIONS
44
!     -------------
45
!          MAY 1997 : M. Deque  - Frozen FMR
46
!          APRIL 1998: C. JAKOB - ADD METHANE OXIDATION
47
!        M.Hamrud      01-Oct-2003 CY28 Cleaning
48
!        P.Viterbo     24-May-2004 surf library
49
!        P.Viterbo     03-Dec-2004 Include user-defined RTHRFRTI
50
!        M.Ko"hler     03-Dec-2004 cp,moist=cp,dry
51
!        P.Viterbo     10-Jun-2005 Externalise surf
52
!        R. El Khatib & J-F Estrade  20-Jan-2005 Default PRSUN for FMR15
53
!        D.Salmond     22-Nov-2005 Mods for coarser/finer physics
54
!        P. Lopez      21-Aug-2006 Added call to SUCUMF2
55
!                                 (new linearized convec)
56
!        JJMorcrette   20060525    MODIS albedo
57
!     ------------------------------------------------------------------
58
59
USE PARKIND1  ,ONLY : JPIM     ,JPRB
60
USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
61
62
USE YOMDPHY  , ONLY : NTILES
63
USE SURFACE_FIELDS, ONLY : YSP_SBD
64
USE YOELW    , ONLY : NSIL     ,TSTAND   ,XP
65
USE YOESW    , ONLY : RSUN
66
USE YOMSW15  , ONLY : RSUN15
67
USE YOMDIM   , ONLY : NFLEVG   ,NSMAX, NGPBLKS, NPROMA
68
USE YOMGEM   , ONLY : VBH      ,VAH      ,VP00, VAF   , VBF
69
USE YOMCST   , ONLY : RD       ,RV       ,RCPD     ,&
70
 & RLVTT    ,RLSTT    ,RLMLT    ,RTT      ,RATM
71
!USE YOETHF   , ONLY : R2ES     ,R3LES    ,R3IES    ,R4LES    ,&
72
! & R4IES    ,R5LES    ,R5IES    ,RVTMP2   ,RHOH2O   ,&
73
! & R5ALVCP  ,R5ALSCP  ,RALVDCP  ,RALSDCP  ,RALFDCP  ,&
74
! & RTWAT    ,RTBER    ,RTBERCU  ,RTICE    ,RTICECU  ,&
75
! & RTWAT_RTICE_R      ,RTWAT_RTICECU_R    ,&
76
! & RKOOP1   ,RKOOP2
77
USE YOMPHY   , ONLY : LRAYFM15
78
!USE YOERAD   , ONLY : NSW      ,NTSW     ,&
79
! NSW mis dans .def MPL 20140211
80
USE YOERAD   , ONLY : NTSW     ,&
81
 & LCCNL    ,LCCNO    ,&
82
 & RCCNSEA  ,RCCNLND
83
USE YOE_TILE_PROP, ONLY : RUSTRTI, RVSTRTI, RAHFSTI, REVAPTI, RTSKTI
84
USE YOEPHY   , ONLY : RTHRFRTI ,LEOCWA   ,LEOCCO   ,LEOCSA, LE4ALB
85
USE YOEVDF   , ONLY : NVTYPES
86
USE YOMCOAPHY   , ONLY : NPHYINT
87
USE YOM_PHYS_GRID ,ONLY : PHYS_GRID
88
USE YOMCT0  , ONLY  : LSCMEC   ,LROUGH   ,REXTZ0M  ,REXTZ0H
89
USE vertical_layers_mod, ONLY: ap,bp
90
91
IMPLICIT NONE
92
include "YOETHF.h"
93
include "clesphys.h"
94
95
INTEGER(KIND=JPIM),INTENT(IN)    :: KULOUT
96
INTERFACE
97
#include "susurf.h"
98
#include "surf_inq.h"
99
END INTERFACE
100
101
#include "gppre.intfb.h"
102
#include "sucld.intfb.h"
103
#include "sucldp.intfb.h"
104
#include "suclop.intfb.h"
105
#include "suclop15.intfb.h"
106
#include "sucond.intfb.h"
107
#include "sucumf.intfb.h"
108
#include "sucumf2.intfb.h"
109
#include "suecrad.intfb.h"
110
#include "suecrad15.intfb.h"
111
#include "sugwd.intfb.h"
112
#include "sumethox.intfb.h"
113
#include "suphli.intfb.h"
114
#include "suvdf.intfb.h"
115
#include "suvdfs.intfb.h"
116
#include "suwcou.intfb.h"
117
118
!     ------------------------------------------------------------------
119
120
2
REAL(KIND=JPRB) :: ZPRES(0:NFLEVG),ZPRESF(NFLEVG), ZETA(NFLEVG),ZETAH(0:NFLEVG)
121
122
INTEGER(KIND=JPIM) :: JK,ISMAX,JLEV
123
REAL(KIND=JPRB) :: ZHOOK_HANDLE
124
125
!     ------------------------------------------------------------------
126
127
!*         0.2    DEFINING DERIVED CONSTANTS FROM UNIVERSAL CONSTANTS
128
!                 ---------------------------------------------------
129
130
1
IF (LHOOK) CALL DR_HOOK('SUPHEC',0,ZHOOK_HANDLE)
131
!
132
1
  IF (OK_BAD_ECMWF_THERMO) THEN
133
!
134
     ! Modify constants defined in suphel.F90 and set RVTMP2 to 0.
135
     ! CALL GSTATS(1811,0) ! MPL 28.11.08
136
     ! RVTMP2=RCPV/RCPD-1.0_JPRB   !use cp,moist
137
     RVTMP2=0.0_JPRB              !neglect cp,moist
138
     RHOH2O=RATM/100._JPRB
139
     R2ES=611.21_JPRB*RD/RV
140
     R3LES=17.502_JPRB
141
     R3IES=22.587_JPRB
142
     R4LES=32.19_JPRB
143
     R4IES=-0.7_JPRB
144
     R5LES=R3LES*(RTT-R4LES)
145
     R5IES=R3IES*(RTT-R4IES)
146
     R5ALVCP=R5LES*RLVTT/RCPD
147
     R5ALSCP=R5IES*RLSTT/RCPD
148
     RALVDCP=RLVTT/RCPD
149
     RALSDCP=RLSTT/RCPD
150
     RALFDCP=RLMLT/RCPD
151
     RTWAT=RTT
152
     RTBER=RTT-5._JPRB
153
     RTBERCU=RTT-5.0_JPRB
154
     RTICE=RTT-23._JPRB
155
     RTICECU=RTT-23._JPRB
156
157
     RTWAT_RTICE_R=1.0_JPRB/(RTWAT-RTICE)
158
     RTWAT_RTICECU_R=1.0_JPRB/(RTWAT-RTICECU)
159
     IF(NPHYINT == 0) THEN
160
       ISMAX=NSMAX
161
     ELSE
162
       ISMAX=PHYS_GRID%NSMAX
163
     ENDIF
164
165
     RKOOP1=2.583_JPRB
166
     RKOOP2=0.48116E-2_JPRB
167
168
  ELSE
169
     ! Keep constants defined in suphel.F90
170
1
     RTICE=RTT-23._JPRB
171
!
172
  ENDIF  ! (OK_BAD_ECMWF_THERMO)
173
174
!     ------------------------------------------------------------------
175
!*         0.5    DEFINE STANDARD ATMOSPHERE VERTICAL CONFIGURATION
176
!                 -------------------------------------------------
177
!ALLOCATE(VBH    (0:MAX(JPMXLE,NFLEVG)))  from suallo.F90
178
!!
179

1
ALLOCATE(VAH    (0:NFLEVG))  ! Ajout ALLOCATE MPL 200509
180

1
ALLOCATE(VBH    (0:NFLEVG))
181

1
ALLOCATE(VAF    (NFLEVG))
182

1
ALLOCATE(VBF    (NFLEVG))
183
! Commente par MPL 28.11.08, puis decommente le 19.05.09
184
1
VP00=101325.     !!!!! A REVOIR (MPL)
185
1
ZPRES(NFLEVG)=VP00
186
! on recupere ap et bp de dyn3d (vertical_layers_mod) MPL 19.05.09
187
! Attention, VAH et VBH sont inverses, comme les niveaux
188
! plev(l)=PAPRS(klon,nlayer+1-l) de 1 a nlayer (apllmd.F)
189
41
DO JLEV = 0, NFLEVG
190
!  VAH(JLEV)=ap(JLEV+1)ap(JLEV+1)
191
!  VBH(JLEV)=bp(JLEV+1)
192
!  print *,'SUPHEC: jlev ap bp',JLEV,ap(JLEV+1),bp(JLEV+1)
193
40
   VAH(JLEV)=ap(NFLEVG+1-JLEV)
194
41
   VBH(JLEV)=bp(NFLEVG+1-JLEV)
195
ENDDO
196
! Calcul de VAF et VBF, analogues de VAH et VBH mais aux niveaux pleins
197
40
DO JLEV = 1, NFLEVG
198
39
   VAF(JLEV)=(VAH(JLEV)+VAH(JLEV-1))/2.
199
40
   VBF(JLEV)=(VBH(JLEV)+VBH(JLEV-1))/2.
200
ENDDO
201
202
! Appel a GPPRE commente par MPL 28.11.08, puis decommente le 19.05.09
203
1
CALL GPPRE ( 1 ,1, 1, NFLEVG, VAH, VBH, ZPRES, ZPRESF )
204
205
41
DO JK=0,NFLEVG
206
41
  ZETAH(JK)= ZPRES(JK)/ZPRES(NFLEVG)
207
ENDDO
208
40
DO JK=1,NFLEVG
209
40
  ZETA(JK)= ZPRESF(JK)/ZPRES(NFLEVG)
210
ENDDO
211
212
!     ------------------------------------------------------------------
213
!*         1.     SETTING CONSTANTS FOR DIAGNOSTIC CLOUD SCHEME
214
!                 ---------------------------------------------
215
216
!CALL SUCLD ( NFLEVG , ZETA ) ! MPL 28.11.08
217
218
!     ------------------------------------------------------------------
219
220
!*         2.     SETTING CONSTANTS FOR LARGE-SCALE CONDENSATION SCHEME
221
!                 -----------------------------------------------------
222
223
!CALL SUCOND ( KULOUT , NFLEVG , ZETA ) ! MPL 28.11.08
224
225
!     ------------------------------------------------------------------
226
227
!*         3.     SETTING CONSTANTS FOR CONVECTION SCHEME
228
!                 ---------------------------------------
229
230
!CALL SUCUMF(ISMAX)     ! MPL 28.11.08
231
232
!     ------------------------------------------------------------------
233
234
!*         3.     SETTING CONSTANTS FOR NEW LINEARIZED CONVECTION SCHEME
235
!                 ------------------------------------------------------
236
237
!CALL SUCUMF2(ISMAX)  ! MPL 28.11.08
238
239
!     ------------------------------------------------------------------
240
!*         4.     SETTING CONSTANTS FOR GRAVITY WAVE DRAG SCHEME
241
!                 ----------------------------------------------
242
243
!CALL SUGWD (KULOUT, NFLEVG, VAH, VBH )   ! MPL 28.11.08
244
245
!     ------------------------------------------------------------------
246
247
!*         5.     SETTING CONSTANTS FOR VERTICAL DIFFUSION
248
!                 ----------------------------------------
249
250
!CALL SUVDFS     ! MPL 28.11.08
251
252
!CALL SUVDF      ! MPL 28.11.08
253
254
!cccc CALL SUVDFD ( NABLPFR, ABLPLL ) cccccccccccccccccccccccccccccccccc
255
256
!     ------------------------------------------------------------------
257
258
!*         6.     SETTING CONSTANTS FOR RADIATION SCHEME
259
!                 --------------------------------------
260
261
1
IF (LRAYFM15) THEN
262
  CALL SUECRAD15 (KULOUT, NFLEVG, ZETAH )
263
ELSE
264
1
  CALL SUECRAD (KULOUT, NFLEVG, ZETAH )
265
ENDIF
266
267
!     ------------------------------------------------------------------
268
!*         7.     SETTING CONSTANTS FOR SURFACE SCHEME
269
!                 ------------------------------------
270
271
!IF (LRAYFM15) THEN
272
!   CALL SUSURF(KSW=NSW,KCSS=YSP_SBD%NLEVS,KSIL=NSIL,KTILES=NTILES,KTSW=NTSW,&
273
!    & LD_LLCCNL=LCCNL,LD_LLCCNO=LCCNO,&
274
!    & LD_LEOCWA=LEOCWA,LD_LEOCCO=LEOCCO,LD_LEOCSA=LEOCSA,LD_LLE4ALB=LE4ALB,&
275
!    & LD_LSCMEC=LSCMEC,LD_LROUGH=LROUGH,PEXTZ0M=REXTZ0M,PEXTZ0H=REXTZ0H,&
276
!    & PTHRFRTI=RTHRFRTI,PTSTAND=TSTAND,PXP=XP,PRCCNSEA=RCCNSEA,PRCCNLND=RCCNLND,&
277
!    & PRSUN=RSUN15)
278
!ELSE
279
!   CALL SUSURF(KSW=NSW,KCSS=YSP_SBD%NLEVS,KSIL=NSIL,KTILES=NTILES,KTSW=NTSW,&
280
!    & LD_LLCCNL=LCCNL,LD_LLCCNO=LCCNO,&
281
!    & LD_LEOCWA=LEOCWA,LD_LEOCCO=LEOCCO,LD_LEOCSA=LEOCSA,LD_LLE4ALB=LE4ALB,&
282
!    & LD_LSCMEC=LSCMEC,LD_LROUGH=LROUGH,PEXTZ0M=REXTZ0M,PEXTZ0H=REXTZ0H,&
283
!    & PTHRFRTI=RTHRFRTI,PTSTAND=TSTAND,PXP=XP,PRCCNSEA=RCCNSEA,PRCCNLND=RCCNLND,&
284
!    & PRSUN=RSUN)
285
!ENDIF
286
287
288
!CALL SURF_INQ(KNVTYPES=NVTYPES)
289
290
291
!          7.1    Allocate working arrays
292
!ALLOCATE(RUSTRTI(NPROMA,NTILES,NGPBLKS))
293
!ALLOCATE(RVSTRTI(NPROMA,NTILES,NGPBLKS))
294
!ALLOCATE(RAHFSTI(NPROMA,NTILES,NGPBLKS))
295
!ALLOCATE(REVAPTI(NPROMA,NTILES,NGPBLKS))
296
!ALLOCATE(RTSKTI (NPROMA,NTILES,NGPBLKS))
297
!RUSTRTI(:,:,:) = 0.0_JPRB
298
!RVSTRTI(:,:,:) = 0.0_JPRB
299
!RAHFSTI(:,:,:) = 0.0_JPRB
300
!REVAPTI(:,:,:) = 0.0_JPRB
301
!RTSKTI (:,:,:) = 0.0_JPRB
302
!CALL GSTATS(1811,1)
303
304
!     ------------------------------------------------------------------
305
306
!*         8.     SETTING CONSTANTS FOR CLOUD OPTICAL PROPERTIES
307
!                 ----------------------------------------------
308
309
1
IF (LRAYFM15) THEN
310
  CALL SUCLOP15
311
ELSE
312
1
  CALL SUCLOP
313
ENDIF
314
315
!     ------------------------------------------------------------------
316
317
!*         9.     SETTING CONSTANTS FOR PROGNOSTIC CLOUD SCHEME
318
!                 ----------------------------------------------
319
320
!CALL SUCLDP
321
322
!     ------------------------------------------------------------------
323
324
!*        10.     SETTING CONSTANTS FOR WAVE COUPLING
325
!                 -----------------------------------
326
327
!CALL SUWCOU
328
329
!     ------------------------------------------------------------------
330
!*         11.   SETTING CONSTANTS FOR LINEARIZED PHYSICS
331
!                ----------------------------------------
332
333
!CALL SUPHLI
334
335
!     ------------------------------------------------------------------
336
!*         12.   SETTING CONSTANTS FOR METHANE OXIDATION
337
!                ---------------------------------------
338
339
!CALL SUMETHOX
340
341
!     ------------------------------------------------------------------
342
343
1
WRITE(UNIT=KULOUT,FMT='('' SUPHEC IS OVER '')')
344
345
!     ------------------------------------------------------------------
346
347
1
IF (LHOOK) CALL DR_HOOK('SUPHEC',1,ZHOOK_HANDLE)
348
1
END SUBROUTINE SUPHEC