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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 155 - (show 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 module lw_m
2
3 IMPLICIT none
4
5 contains
6
7 SUBROUTINE LW(PPMB, PDP, PDT0, PEMIS, PTL, PTAVE, PWV, POZON, PAER, PCLDLD, &
8 PCLDLU, PVIEW, PCOLR, PCOLR0, PTOPLW, PSOLLW, PTOPLW0, PSOLLW0, &
9 psollwdown, plwup, plwdn, plwup0, plwdn0)
10
11 use lwbv_m, only: lwbv
12 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 CALL LWU(PAER, PDP, PPMB, ZOZ, PTAVE, PVIEW, PWV, ZABCU)
97 CALL LWBV(ILIM, PDT0, PEMIS, PPMB, PTL, PTAVE, ZABCU, &
98 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