/[lmdze]/trunk/libf/phylmd/Radlwsw/lw.f90
ViewVC logotype

Contents of /trunk/libf/phylmd/Radlwsw/lw.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 71 - (show annotations)
Mon Jul 8 18:12:18 2013 UTC (10 years, 9 months ago) by guez
File size: 5370 byte(s)
No reason to call inidissip in ce0l.

In inidissip, set random seed to 1 beacuse PGI compiler does not
accept all zeros.

dq was computed needlessly in caladvtrac. Arguments masse and dq of
calfis not used.

Replaced real*8 by double precision.

Pass arrays with inverted order of vertical levels to conflx instead
of creating local variables for this inside conflx.

1 module lw_m
2
3 IMPLICIT none
4
5 contains
6
7 SUBROUTINE LW(PPMB, PDP, PPSOL, PDT0, PEMIS, PTL, PTAVE, PWV, POZON, PAER, &
8 PCLDLD, PCLDLU, PVIEW, PCOLR, PCOLR0, PTOPLW, PSOLLW, PTOPLW0, PSOLLW0, &
9 psollwdown, plwup, plwdn, plwup0, plwdn0)
10
11 use LWU_m, only: LWU
12 USE suphec_m, ONLY: md, rcpd, rday, rg, rmo3
13 USE raddim, ONLY: kdlon, kflev
14 USE raddimlw, ONLY: nua
15
16 ! Method.
17
18 ! 1. Computes the pressure and temperature weighted amounts of
19 ! absorbers.
20
21 ! 2. Computes the planck functions on the interfaces and the
22 ! gradient of planck functions in the layers.
23
24 ! 3. Performs the vertical integration distinguishing the con-
25 ! tributions of the adjacent and distant layers and those from the
26 ! boundaries.
27
28 ! 4. Computes the clear-sky downward and upward emissivities.
29
30 ! 5. Introduces the effects of the clouds on the fluxes.
31
32 ! Reference: see radiation's part of the model's documentation and
33 ! ECMWF research department documentation of the IFS
34
35 ! Author:
36 ! Jean-Jacques Morcrette *ECMWF*
37
38 ! Original : 89-07-14
39
40 DOUBLE PRECISION PCLDLD(KDLON, KFLEV) ! DOWNWARD EFFECTIVE CLOUD COVER
41 DOUBLE PRECISION PCLDLU(KDLON, KFLEV) ! UPWARD EFFECTIVE CLOUD COVER
42 DOUBLE PRECISION PDP(KDLON, KFLEV) ! LAYER PRESSURE THICKNESS (Pa)
43 DOUBLE PRECISION PDT0(KDLON) ! SURFACE TEMPERATURE DISCONTINUITY (K)
44 DOUBLE PRECISION PEMIS(KDLON) ! SURFACE EMISSIVITY
45 DOUBLE PRECISION PPMB(KDLON, KFLEV+1) ! HALF LEVEL PRESSURE (mb)
46 DOUBLE PRECISION PPSOL(KDLON) ! SURFACE PRESSURE (Pa)
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, PPSOL, ZOZ, PTAVE, PVIEW, PWV, ZABCU)
97 CALL LWBV(ILIM, PDP, 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