/[lmdze]/trunk/Sources/phylmd/Radlwsw/lw.f
ViewVC logotype

Annotation of /trunk/Sources/phylmd/Radlwsw/lw.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 155 - (hide annotations)
Wed Jul 8 17:03:45 2015 UTC (8 years, 11 months ago) by guez
File size: 5320 byte(s)
Do not write any longer to startphy.nc nor read from restartphy.nc the
NetCDF variable ALBLW: it was the same than ALBE. ALBE was for the
visible and ALBLW for the near infrared. In physiq, use only variables
falbe and albsol, removed falblw and albsollw. See revision 888 of
LMDZ.

Removed unused arguments pdp of SUBROUTINE lwbv, ptave of SUBROUTINE
lwv, kuaer of SUBROUTINE lwvd, nq of SUBROUTINE initphysto.

1 guez 71 module lw_m
2    
3     IMPLICIT none
4    
5     contains
6    
7 guez 145 SUBROUTINE LW(PPMB, PDP, PDT0, PEMIS, PTL, PTAVE, PWV, POZON, PAER, PCLDLD, &
8     PCLDLU, PVIEW, PCOLR, PCOLR0, PTOPLW, PSOLLW, PTOPLW0, PSOLLW0, &
9 guez 71 psollwdown, plwup, plwdn, plwup0, plwdn0)
10    
11 guez 155 use lwbv_m, only: lwbv
12 guez 71 use LWU_m, only: LWU
13     USE suphec_m, ONLY: md, rcpd, rday, rg, rmo3
14     USE raddim, ONLY: kdlon, kflev
15     USE raddimlw, ONLY: nua
16    
17     ! Method.
18    
19     ! 1. Computes the pressure and temperature weighted amounts of
20     ! absorbers.
21    
22     ! 2. Computes the planck functions on the interfaces and the
23     ! gradient of planck functions in the layers.
24    
25     ! 3. Performs the vertical integration distinguishing the con-
26     ! tributions of the adjacent and distant layers and those from the
27     ! boundaries.
28    
29     ! 4. Computes the clear-sky downward and upward emissivities.
30    
31     ! 5. Introduces the effects of the clouds on the fluxes.
32    
33     ! Reference: see radiation's part of the model's documentation and
34     ! ECMWF research department documentation of the IFS
35    
36     ! Author:
37     ! Jean-Jacques Morcrette *ECMWF*
38    
39     ! Original : 89-07-14
40    
41     DOUBLE PRECISION PCLDLD(KDLON, KFLEV) ! DOWNWARD EFFECTIVE CLOUD COVER
42     DOUBLE PRECISION PCLDLU(KDLON, KFLEV) ! UPWARD EFFECTIVE CLOUD COVER
43     DOUBLE PRECISION PDP(KDLON, KFLEV) ! LAYER PRESSURE THICKNESS (Pa)
44     DOUBLE PRECISION PDT0(KDLON) ! SURFACE TEMPERATURE DISCONTINUITY (K)
45     DOUBLE PRECISION PEMIS(KDLON) ! SURFACE EMISSIVITY
46     DOUBLE PRECISION PPMB(KDLON, KFLEV+1) ! HALF LEVEL PRESSURE (mb)
47     DOUBLE PRECISION POZON(KDLON, KFLEV) ! O3 CONCENTRATION (kg/kg)
48     DOUBLE PRECISION PTL(KDLON, KFLEV+1) ! HALF LEVEL TEMPERATURE (K)
49     DOUBLE PRECISION PAER(KDLON, KFLEV, 5) ! OPTICAL THICKNESS OF THE AEROSOLS
50     DOUBLE PRECISION PTAVE(KDLON, KFLEV) ! LAYER TEMPERATURE (K)
51     DOUBLE PRECISION PVIEW(KDLON) ! COSECANT OF VIEWING ANGLE
52     DOUBLE PRECISION PWV(KDLON, KFLEV) ! SPECIFIC HUMIDITY (kg/kg)
53    
54     DOUBLE PRECISION PCOLR(KDLON, KFLEV) ! LONG-WAVE TENDENCY (K/day)
55     DOUBLE PRECISION PCOLR0(KDLON, KFLEV) ! LONG-WAVE TENDENCY (K/day) clear-sky
56     DOUBLE PRECISION PTOPLW(KDLON) ! LONGWAVE FLUX AT T.O.A.
57     DOUBLE PRECISION PSOLLW(KDLON) ! LONGWAVE FLUX AT SURFACE
58     DOUBLE PRECISION PTOPLW0(KDLON) ! LONGWAVE FLUX AT T.O.A. (CLEAR-SKY)
59     DOUBLE PRECISION PSOLLW0(KDLON) ! LONGWAVE FLUX AT SURFACE (CLEAR-SKY)
60     ! Rajout LF
61     double precision psollwdown(kdlon) ! LONGWAVE downwards flux at surface
62     !IM
63     DOUBLE PRECISION plwup(KDLON, KFLEV+1) ! LW up total sky
64     DOUBLE PRECISION plwup0(KDLON, KFLEV+1) ! LW up clear sky
65     DOUBLE PRECISION plwdn(KDLON, KFLEV+1) ! LW down total sky
66     DOUBLE PRECISION plwdn0(KDLON, KFLEV+1) ! LW down clear sky
67    
68     DOUBLE PRECISION ZABCU(KDLON, NUA, 3*KFLEV+1)
69     DOUBLE PRECISION ZOZ(KDLON, KFLEV)
70    
71     DOUBLE PRECISION ZFLUX(KDLON, 2, KFLEV+1) ! RADIATIVE FLUXES (1:up; 2:down)
72     DOUBLE PRECISION ZFLUC(KDLON, 2, KFLEV+1) ! CLEAR-SKY RADIATIVE FLUXES
73     DOUBLE PRECISION ZBINT(KDLON, KFLEV+1) ! Intermediate variable
74     DOUBLE PRECISION ZBSUI(KDLON) ! Intermediate variable
75     DOUBLE PRECISION ZCTS(KDLON, KFLEV) ! Intermediate variable
76     DOUBLE PRECISION ZCNTRB(KDLON, KFLEV+1, KFLEV+1) ! Intermediate variable
77     SAVE ZFLUX, ZFLUC, ZBINT, ZBSUI, ZCTS, ZCNTRB
78    
79     INTEGER ilim, i, k, kpl1
80    
81     INTEGER, PARAMETER:: lw0pas = 1 ! Every lw0pas steps, clear-sky is done
82     INTEGER, PARAMETER:: lwpas = 1 ! Every lwpas steps, cloudy-sky is done
83     ! In general, lw0pas and lwpas should be 1
84    
85     INTEGER:: itaplw0 = 0, itaplw = 0
86    
87     ! ------------------------------------------------------------------
88    
89     IF (MOD(itaplw0, lw0pas) == 0) THEN
90     DO k = 1, KFLEV
91     DO i = 1, KDLON
92     ! convertir ozone de kg/kg en pa (modif MPL 100505)
93     ZOZ(i, k) = POZON(i, k)*PDP(i, k) * MD/RMO3
94     ENDDO
95     ENDDO
96 guez 139 CALL LWU(PAER, PDP, PPMB, ZOZ, PTAVE, PVIEW, PWV, ZABCU)
97 guez 155 CALL LWBV(ILIM, PDT0, PEMIS, PPMB, PTL, PTAVE, ZABCU, &
98 guez 71 ZFLUC, ZBINT, ZBSUI, ZCTS, ZCNTRB)
99     itaplw0 = 0
100     ENDIF
101     itaplw0 = itaplw0 + 1
102    
103     IF (MOD(itaplw, lwpas) == 0) THEN
104     CALL LWC(ILIM, PCLDLD, PCLDLU, PEMIS, &
105     ZFLUC, ZBINT, ZBSUI, ZCTS, ZCNTRB, &
106     ZFLUX)
107     itaplw = 0
108     ENDIF
109     itaplw = itaplw + 1
110    
111     DO k = 1, KFLEV
112     kpl1 = k+1
113     DO i = 1, KDLON
114     PCOLR(i, k) = ZFLUX(i, 1, kpl1)+ZFLUX(i, 2, kpl1) &
115     - ZFLUX(i, 1, k)- ZFLUX(i, 2, k)
116     PCOLR(i, k) = PCOLR(i, k) * RDAY*RG/RCPD / PDP(i, k)
117     PCOLR0(i, k) = ZFLUC(i, 1, kpl1)+ZFLUC(i, 2, kpl1) &
118     - ZFLUC(i, 1, k)- ZFLUC(i, 2, k)
119     PCOLR0(i, k) = PCOLR0(i, k) * RDAY*RG/RCPD / PDP(i, k)
120     ENDDO
121     ENDDO
122     DO i = 1, KDLON
123     PSOLLW(i) = -ZFLUX(i, 1, 1)-ZFLUX(i, 2, 1)
124     PTOPLW(i) = ZFLUX(i, 1, KFLEV+1) + ZFLUX(i, 2, KFLEV+1)
125    
126     PSOLLW0(i) = -ZFLUC(i, 1, 1)-ZFLUC(i, 2, 1)
127     PTOPLW0(i) = ZFLUC(i, 1, KFLEV+1) + ZFLUC(i, 2, KFLEV+1)
128     psollwdown(i) = -ZFLUX(i, 2, 1)
129    
130     !IM attention aux signes !; LWtop >0, LWdn < 0
131     DO k = 1, KFLEV+1
132     plwup(i, k) = ZFLUX(i, 1, k)
133     plwup0(i, k) = ZFLUC(i, 1, k)
134     plwdn(i, k) = ZFLUX(i, 2, k)
135     plwdn0(i, k) = ZFLUC(i, 2, k)
136     ENDDO
137     ENDDO
138    
139     END SUBROUTINE LW
140    
141     end module lw_m

  ViewVC Help
Powered by ViewVC 1.1.21