LMDZ
suphec.F90
Go to the documentation of this file.
1 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
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 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 IF (lhook) CALL dr_hook('SUPHEC',0,zhook_handle)
131 !CALL GSTATS(1811,0) ! MPL 28.11.08
132 !RVTMP2=RCPV/RCPD-1.0_JPRB !use cp,moist
133 rvtmp2=0.0_jprb !neglect cp,moist
134 rhoh2o=ratm/100._jprb
135 r2es=611.21_jprb*rd/rv
136 r3les=17.502_jprb
137 r3ies=22.587_jprb
138 r4les=32.19_jprb
139 r4ies=-0.7_jprb
140 r5les=r3les*(rtt-r4les)
141 r5ies=r3ies*(rtt-r4ies)
142 r5alvcp=r5les*rlvtt/rcpd
143 r5alscp=r5ies*rlstt/rcpd
144 ralvdcp=rlvtt/rcpd
145 ralsdcp=rlstt/rcpd
146 ralfdcp=rlmlt/rcpd
147 rtwat=rtt
148 rtber=rtt-5._jprb
149 rtbercu=rtt-5.0_jprb
150 rtice=rtt-23._jprb
151 rticecu=rtt-23._jprb
152 
153 rtwat_rtice_r=1.0_jprb/(rtwat-rtice)
154 rtwat_rticecu_r=1.0_jprb/(rtwat-rticecu)
155 IF(nphyint == 0) THEN
156  ismax=nsmax
157 ELSE
158  ismax=phys_grid%NSMAX
159 ENDIF
160 
161 rkoop1=2.583_jprb
162 rkoop2=0.48116e-2_jprb
163 
164 ! ------------------------------------------------------------------
165 !* 0.5 DEFINE STANDARD ATMOSPHERE VERTICAL CONFIGURATION
166 ! -------------------------------------------------
167 !ALLOCATE(VBH (0:MAX(JPMXLE,NFLEVG))) from suallo.F90
168 !!
169 ALLOCATE(vah(0:nflevg)) ! Ajout ALLOCATE MPL 200509
170 ALLOCATE(vbh(0:nflevg))
171 ALLOCATE(vaf(nflevg))
172 ALLOCATE(vbf(nflevg))
173 ! Commente par MPL 28.11.08, puis decommente le 19.05.09
174 vp00=101325. !!!!! A REVOIR (MPL)
175 zpres(nflevg)=vp00
176 ! on recupere ap et bp de dyn3d (vertical_layers_mod) MPL 19.05.09
177 ! Attention, VAH et VBH sont inverses, comme les niveaux
178 ! plev(l)=PAPRS(klon,nlayer+1-l) de 1 a nlayer (apllmd.F)
179 DO jlev = 0, nflevg
180 ! VAH(JLEV)=ap(JLEV+1)ap(JLEV+1)
181 ! VBH(JLEV)=bp(JLEV+1)
182 ! print *,'SUPHEC: jlev ap bp',JLEV,ap(JLEV+1),bp(JLEV+1)
183  vah(jlev)=ap(nflevg+1-jlev)
184  vbh(jlev)=bp(nflevg+1-jlev)
185 ENDDO
186 ! Calcul de VAF et VBF, analogues de VAH et VBH mais aux niveaux pleins
187 DO jlev = 1, nflevg
188  vaf(jlev)=(vah(jlev)+vah(jlev-1))/2.
189  vbf(jlev)=(vbh(jlev)+vbh(jlev-1))/2.
190 ENDDO
191 
192 ! Appel a GPPRE commente par MPL 28.11.08, puis decommente le 19.05.09
193 CALL gppre ( 1 ,1, 1, nflevg, vah, vbh, zpres, zpresf )
194 
195 DO jk=0,nflevg
196  zetah(jk)= zpres(jk)/zpres(nflevg)
197 ENDDO
198 DO jk=1,nflevg
199  zeta(jk)= zpresf(jk)/zpres(nflevg)
200 ENDDO
201 
202 ! ------------------------------------------------------------------
203 !* 1. SETTING CONSTANTS FOR DIAGNOSTIC CLOUD SCHEME
204 ! ---------------------------------------------
205 
206 !CALL SUCLD ( NFLEVG , ZETA ) ! MPL 28.11.08
207 
208 ! ------------------------------------------------------------------
209 
210 !* 2. SETTING CONSTANTS FOR LARGE-SCALE CONDENSATION SCHEME
211 ! -----------------------------------------------------
212 
213 !CALL SUCOND ( KULOUT , NFLEVG , ZETA ) ! MPL 28.11.08
214 
215 ! ------------------------------------------------------------------
216 
217 !* 3. SETTING CONSTANTS FOR CONVECTION SCHEME
218 ! ---------------------------------------
219 
220 !CALL SUCUMF(ISMAX) ! MPL 28.11.08
221 
222 ! ------------------------------------------------------------------
223 
224 !* 3. SETTING CONSTANTS FOR NEW LINEARIZED CONVECTION SCHEME
225 ! ------------------------------------------------------
226 
227 !CALL SUCUMF2(ISMAX) ! MPL 28.11.08
228 
229 ! ------------------------------------------------------------------
230 !* 4. SETTING CONSTANTS FOR GRAVITY WAVE DRAG SCHEME
231 ! ----------------------------------------------
232 
233 !CALL SUGWD (KULOUT, NFLEVG, VAH, VBH ) ! MPL 28.11.08
234 
235 ! ------------------------------------------------------------------
236 
237 !* 5. SETTING CONSTANTS FOR VERTICAL DIFFUSION
238 ! ----------------------------------------
239 
240 !CALL SUVDFS ! MPL 28.11.08
241 
242 !CALL SUVDF ! MPL 28.11.08
243 
244 !cccc CALL SUVDFD ( NABLPFR, ABLPLL ) cccccccccccccccccccccccccccccccccc
245 
246 ! ------------------------------------------------------------------
247 
248 !* 6. SETTING CONSTANTS FOR RADIATION SCHEME
249 ! --------------------------------------
250 
251 IF (lrayfm15) THEN
252  CALL suecrad15 (kulout, nflevg, zetah )
253 ELSE
254  CALL suecrad (kulout, nflevg, zetah )
255 ENDIF
256 
257 ! ------------------------------------------------------------------
258 !* 7. SETTING CONSTANTS FOR SURFACE SCHEME
259 ! ------------------------------------
260 
261 !IF (LRAYFM15) THEN
262 ! CALL SUSURF(KSW=NSW,KCSS=YSP_SBD%NLEVS,KSIL=NSIL,KTILES=NTILES,KTSW=NTSW,&
263 ! & LD_LLCCNL=LCCNL,LD_LLCCNO=LCCNO,&
264 ! & LD_LEOCWA=LEOCWA,LD_LEOCCO=LEOCCO,LD_LEOCSA=LEOCSA,LD_LLE4ALB=LE4ALB,&
265 ! & LD_LSCMEC=LSCMEC,LD_LROUGH=LROUGH,PEXTZ0M=REXTZ0M,PEXTZ0H=REXTZ0H,&
266 ! & PTHRFRTI=RTHRFRTI,PTSTAND=TSTAND,PXP=XP,PRCCNSEA=RCCNSEA,PRCCNLND=RCCNLND,&
267 ! & PRSUN=RSUN15)
268 !ELSE
269 ! CALL SUSURF(KSW=NSW,KCSS=YSP_SBD%NLEVS,KSIL=NSIL,KTILES=NTILES,KTSW=NTSW,&
270 ! & LD_LLCCNL=LCCNL,LD_LLCCNO=LCCNO,&
271 ! & LD_LEOCWA=LEOCWA,LD_LEOCCO=LEOCCO,LD_LEOCSA=LEOCSA,LD_LLE4ALB=LE4ALB,&
272 ! & LD_LSCMEC=LSCMEC,LD_LROUGH=LROUGH,PEXTZ0M=REXTZ0M,PEXTZ0H=REXTZ0H,&
273 ! & PTHRFRTI=RTHRFRTI,PTSTAND=TSTAND,PXP=XP,PRCCNSEA=RCCNSEA,PRCCNLND=RCCNLND,&
274 ! & PRSUN=RSUN)
275 !ENDIF
276 
277 
278 !CALL SURF_INQ(KNVTYPES=NVTYPES)
279 
280 
281 ! 7.1 Allocate working arrays
282 !ALLOCATE(RUSTRTI(NPROMA,NTILES,NGPBLKS))
283 !ALLOCATE(RVSTRTI(NPROMA,NTILES,NGPBLKS))
284 !ALLOCATE(RAHFSTI(NPROMA,NTILES,NGPBLKS))
285 !ALLOCATE(REVAPTI(NPROMA,NTILES,NGPBLKS))
286 !ALLOCATE(RTSKTI (NPROMA,NTILES,NGPBLKS))
287 !RUSTRTI(:,:,:) = 0.0_JPRB
288 !RVSTRTI(:,:,:) = 0.0_JPRB
289 !RAHFSTI(:,:,:) = 0.0_JPRB
290 !REVAPTI(:,:,:) = 0.0_JPRB
291 !RTSKTI (:,:,:) = 0.0_JPRB
292 !CALL GSTATS(1811,1)
293 
294 ! ------------------------------------------------------------------
295 
296 !* 8. SETTING CONSTANTS FOR CLOUD OPTICAL PROPERTIES
297 ! ----------------------------------------------
298 
299 IF (lrayfm15) THEN
300  CALL suclop15
301 ELSE
302  CALL suclop
303 ENDIF
304 
305 ! ------------------------------------------------------------------
306 
307 !* 9. SETTING CONSTANTS FOR PROGNOSTIC CLOUD SCHEME
308 ! ----------------------------------------------
309 
310 !CALL SUCLDP
311 
312 ! ------------------------------------------------------------------
313 
314 !* 10. SETTING CONSTANTS FOR WAVE COUPLING
315 ! -----------------------------------
316 
317 !CALL SUWCOU
318 
319 ! ------------------------------------------------------------------
320 !* 11. SETTING CONSTANTS FOR LINEARIZED PHYSICS
321 ! ----------------------------------------
322 
323 !CALL SUPHLI
324 
325 ! ------------------------------------------------------------------
326 !* 12. SETTING CONSTANTS FOR METHANE OXIDATION
327 ! ---------------------------------------
328 
329 !CALL SUMETHOX
330 
331 ! ------------------------------------------------------------------
332 
333 WRITE(unit=kulout,fmt='('' SUPHEC IS OVER '')')
334 
335 ! ------------------------------------------------------------------
336 
337 IF (lhook) CALL dr_hook('SUPHEC',1,zhook_handle)
338 END SUBROUTINE suphec
Definition: yoephy.F90:1
real(kind=jprb) rextz0h
Definition: yomct0.F90:440
logical leocsa
Definition: yoephy.F90:44
real(kind=jprb) tstand
Definition: yoelw.F90:36
real(kind=jprb), dimension(:), allocatable vbf
Definition: yomgem.F90:174
real(kind=jprb), dimension(2) rsun15
Definition: yomsw15.F90:17
logical le4alb
Definition: yoephy.F90:40
subroutine suclop
Definition: suclop.F90:2
Definition: yoesw.F90:1
subroutine suecrad15(KULOUT, KLEV, PETAH)
Definition: suecrad15.F90:3
integer(kind=jpim) ntsw
Definition: yoerad.F90:30
real(kind=jprb) rd
Definition: yomcst.F90:39
Definition: yoelw.F90:1
integer(kind=jpim) nsil
Definition: yoelw.F90:14
logical leocco
Definition: yoephy.F90:43
subroutine suphec(KULOUT)
Definition: suphec.F90:2
real(kind=jprb) rextz0m
Definition: yomct0.F90:439
logical lrayfm15
Definition: yomphy.F90:371
real(kind=jprb) rlstt
Definition: yomcst.F90:61
logical lccno
Definition: yoerad.F90:66
real(kind=jprb), dimension(:), allocatable rsun
Definition: yoesw.F90:16
real(kind=jprb) ratm
Definition: yomcst.F90:66
subroutine suclop15
Definition: suclop15.F90:3
logical lscmec
Definition: yomct0.F90:434
integer(kind=jpim) nproma
Definition: yomdim.F90:87
real(kind=jprb) rtt
Definition: yomcst.F90:65
integer(kind=jpim) nvtypes
Definition: yoevdf.F90:13
Definition: yomct0.F90:1
integer(kind=jpim) nflevg
Definition: yomdim.F90:112
subroutine gppre(KPROMA, KSTART, KPROF, KFLEV, PVAH, PVBH, PRESH, PRESF)
Definition: gppre.F90:2
real(kind=jprb) rlvtt
Definition: yomcst.F90:60
real(kind=jprb) rccnsea
Definition: yoerad.F90:69
Definition: yomgem.F90:1
real(kind=jprb), dimension(:), allocatable vbh
Definition: yomgem.F90:161
real(kind=jprb), dimension(6, 6) xp
Definition: yoelw.F90:39
integer(kind=jpim) nsmax
Definition: yomdim.F90:187
integer, parameter jprb
Definition: parkind1.F90:31
logical leocwa
Definition: yoephy.F90:42
Definition: yoerad.F90:1
real(kind=jprb), dimension(:), allocatable vah
Definition: yomgem.F90:169
subroutine suecrad(KULOUT, KLEV, PETAH)
Definition: suecrad.F90:5
real(kind=jprb), dimension(:,:,:), allocatable revapti
logical lrough
Definition: yomct0.F90:438
real(kind=jprb) rcpd
Definition: yomcst.F90:41
Definition: yomdim.F90:1
real(kind=jprb) vp00
Definition: yomgem.F90:159
real(kind=jprb), dimension(:,:,:), allocatable rustrti
integer(kind=jpim) nphyint
Definition: yomcoaphy.F90:16
real(kind=jprb) rthrfrti
Definition: yoephy.F90:45
real, dimension(:), allocatable, save ap
real(kind=jprb) rccnlnd
Definition: yoerad.F90:69
logical lhook
Definition: yomhook.F90:12
real(kind=jprb) rlmlt
Definition: yomcst.F90:64
Definition: yoevdf.F90:1
real(kind=jprb), dimension(:,:,:), allocatable rvstrti
logical lccnl
Definition: yoerad.F90:65
real(kind=jprb) rv
Definition: yomcst.F90:40
real(kind=jprb), dimension(:,:,:), allocatable rtskti
subroutine dr_hook(CDNAME, KSWITCH, PKEY)
Definition: yomhook.F90:17
Definition: yomphy.F90:1
type(type_surf_gen) ysp_sbd
integer, parameter jpim
Definition: parkind1.F90:13
real(kind=jprb), dimension(:), allocatable vaf
Definition: yomgem.F90:173
integer(kind=jpim) ngpblks
Definition: yomdim.F90:97
type(phys_grid_struct), public phys_grid
real, dimension(:), allocatable, save bp
integer(kind=jpim) ntiles
Definition: yomdphy.F90:50
Definition: yomcst.F90:1
!$Header!integer nvarmx s s unit
Definition: gradsdef.h:20
real(kind=jprb), dimension(:,:,:), allocatable rahfsti