LMDZ
olwbv.F90
Go to the documentation of this file.
1 SUBROUTINE olwbv &
2  & ( kidia, kfdia, klon , klev &
3  & , pdp , pdt0 , pemis, pth &
4  & , pt &
5  & , pcolc, pfluc &
6  & , pabcu, pbint, pbsui, pcntrb, pfdn, pfup )
7 !
8 !**** *LWBV* - COMPUTE PLANCK FUNC., PERF. VERT. INTEGRATION
9 !
10 ! PURPOSE.
11 ! --------
12 ! TO COMPUTE THE PLANCK FUNCTION AND PERFORM THE
13 ! VERTICAL INTEGRATION. SPLIT OUT FROM LW FOR MEMORY
14 ! SAVING
15 !
16 !** INTERFACE.
17 ! ----------
18 !
19 ! *LWVB* IS CALLED FROM *LW*
20 !
21 ! EXPLICIT ARGUMENTS :
22 ! --------------------
23 ! PDP : (KLON,KLEV) ; LAYER PRESSURE THICKNESS
24 ! PDT0 : (KLON) ; SURFACE TEMPERATURE DISCONTINUITY
25 ! PEMIS : (KLON) ; SURFACE EMISSIVITY
26 ! PT : (KLON,KLEV) ; TEMPERATURE
27 ! PTH : (KLON,KLEV+1) ; HALF LEVEL TEMPERATURE
28 ! ==== OUTPUTS ===
29 !
30 ! IMPLICIT ARGUMENTS : NONE
31 ! --------------------
32 !
33 ! METHOD.
34 ! -------
35 !
36 ! 1. COMPUTES THE PLANCK FUNCTIONS ON THE INTERFACES AND THE
37 ! GRADIENT OF PLANCK FUNCTIONS IN THE LAYERS.
38 ! 2. PERFORMS THE VERTICAL INTEGRATION DISTINGUISHING THE CON-
39 ! TRIBUTIONS OF THE ADJACENT AND DISTANT LAYERS AND THOSE FROM THE
40 ! BOUNDARIES.
41 ! 3. COMPUTES THE CLEAR-SKY COOLING RATES.
42 !
43 ! EXTERNALS.
44 ! ----------
45 !
46 ! *LWB*, *LWV*
47 !
48 ! REFERENCE.
49 ! ----------
50 !
51 ! SEE RADIATION'S PART OF THE MODEL'S DOCUMENTATION AND
52 ! ECMWF RESEARCH DEPARTMENT DOCUMENTATION OF THE IFS
53 !
54 ! AUTHOR.
55 ! -------
56 ! JEAN-JACQUES MORCRETTE *ECMWF*
57 !
58 ! MODIFICATIONS.
59 ! --------------
60 ! ORIGINAL : 89-07-14
61 ! MODIFICATION : 93-10-15 M.HAMRUD (SPLIT OUT FROM LW TO SAVE
62 ! MEMORY)
63 !-----------------------------------------------------------------------
64 
65 #include "tsmbkind.h"
66 
67 USE yoeolw , ONLY : nisp ,nipd ,nua
68 USE yoerdu , ONLY : nuaer ,ntraer ,rcday
69 USE yoedbug , ONLY : ldebug
70 
71 IMPLICIT NONE
72 
73 
74 ! DUMMY INTEGER SCALARS
75 integer_m :: kfdia
76 integer_m :: kidia
77 integer_m :: klev
78 integer_m :: klon
79 
80 !-----------------------------------------------------------------------
81 !
82 !* 0.1 ARGUMENTS
83 ! ---------
84 !
85 real_b :: pdp(klon,klev) &
86  & , pdt0(klon) ,pemis(klon) &
87  & , pth(klon,klev+1) &
88  & , pt(klon,klev)
89 !
90 real_b :: pcolc(klon,klev), pfluc(klon,2,klev+1)
91 !
92 real_b :: pabcu(klon,nua,3*klev+1) &
93  & , pbint(klon,klev+1) &
94  & , pbsui(klon) &
95  & , pcntrb(klon,klev+1,klev+1) &
96  & , pfdn(klon,klev+1) &
97  & , pfup(klon,klev+1)
98 !
99 !-------------------------------------------------------------------------
100 !
101 !* 0.2 LOCAL ARRAYS
102 ! ------------
103 real_b :: zb(klon,nisp,klev+1) &
104  & , zbsur(klon,nisp), zbtop(klon,nisp) &
105  & , zdbsl(klon,nisp,klev*2) &
106  & , zga(klon,8,2,klev), zgb(klon,8,2,klev) &
107  & , zgasur(klon,8,2) , zgbsur(klon,8,2) &
108  & , zgatop(klon,8,2) , zgbtop(klon,8,2)
109 
110 real_b :: zdfnet
111 !
112 ! LOCAL INTEGER SCALARS
113 integer_m :: jk, jkl, jl, jlw
114 
115 ! ------------------------------------------------------------------
116 !
117 !* 2. COMPUTES PLANCK FUNCTIONS
118 ! -------------------------
119 !
120 if (ldebug) print *, 'CALL OLWB'
121 CALL olwb ( kidia, kfdia, klon , klev &
122  & , pdt0 , pt , pth &
123  & , zb , pbint, pbsui , zbsur , zbtop , zdbsl &
124  & , zga , zgb , zgasur, zgbsur, zgatop, zgbtop )
125 !
126 ! ------------------------------------------------------------------
127 !
128 !* 3. PERFORMS THE VERTICAL INTEGRATION
129 ! ---------------------------------
130 !
131 if (ldebug) print *, 'CALL OLWV'
132 CALL olwv ( kidia, kfdia, klon , klev , nuaer, ntraer &
133  & , pabcu, zb , pbint, pbsui, zbsur, zbtop, zdbsl &
134  & , pemis &
135  & , zga , zgb , zgasur,zgbsur,zgatop,zgbtop &
136  & , pcntrb,pcolc, pfluc )
137 !
138 DO jk = 1 , klev+1
139  DO jl = kidia,kfdia
140  pfdn(jl,jk) = pfluc(jl,2,jk)
141  pfup(jl,jk) = pfluc(jl,1,jk)
142  END DO
143 END DO
144 !
145 !
146 DO jkl = 1 , klev
147  jk = klev+1 - jkl
148  DO jl = kidia,kfdia
149  zdfnet = pfluc(jl,1,jk+1) + pfluc(jl,2,jk+1) &
150  & -pfluc(jl,1,jk ) - pfluc(jl,2,jk )
151  pcolc(jl,jk) = rcday * zdfnet / pdp(jl,jkl)
152  END DO
153 END DO
154 !
155 ! ------------------------------------------------------------------
156 !
157 RETURN
158 END SUBROUTINE olwbv
INTERFACE SUBROUTINE RRTM_ECRT_140GP pth
subroutine olwbv(KIDIA, KFDIA, KLON, KLEV, PDP, PDT0, PEMIS, PTH, PT, PCOLC, PFLUC, PABCU, PBINT, PBSUI, PCNTRB, PFDN, PFUP)
Definition: olwbv.F90:7
subroutine olwv(KIDIA, KFDIA, KLON, KLEV, KUAER, KTRAER, PABCU, PB, PBINT, PBSUIN, PBSUR, PBTOP, PDBSL, PEMIS, PGA, PGB, PGASUR, PGBSUR, PGATOP, PGBTOP, PCNTRB, PCOLC, PFLUC)
Definition: olwv.F90:6
integer, save kidia
Definition: dimphy.F90:6
integer, save klon
Definition: dimphy.F90:3
integer, save klev
Definition: dimphy.F90:7
integer, save kfdia
Definition: dimphy.F90:5
subroutine olwb(KIDIA, KFDIA, KLON, KLEV, PDT0, PT, PTH, PB, PBINT, PBSUIN, PBSUR, PBTOP, PDBSL, PGA, PGB, PGASUR, PGBSUR, PGATOP, PGBTOP)
Definition: olwb.F90:6
logical ldebug
Definition: yoedbug.F90:14
integer(kind=jpim) nuaer
Definition: yoerdu.F90:13
real(kind=jprb) rcday
Definition: yoerdu.F90:17
INTERFACE SUBROUTINE RRTM_ECRT_140GP pt
Definition: yoeolw.F90:1
integer(kind=jpim) ntraer
Definition: yoerdu.F90:14
Definition: yoerdu.F90:1