/[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 168 - (hide annotations)
Wed Sep 9 10:41:47 2015 UTC (8 years, 9 months ago) by guez
File size: 5208 byte(s)
In order to be able to choose finer resolutions, set large memory
model in compiler options and use dynamic libraries.

Variables rlatd, rlond, cuphy and cvphy of module comgeomphy were
never used. (In LMDZ, they are used only for Orchid.)

There is a bug in PGI Fortran 13.10 that does not accept the
combination of forall, pack and spread in regr_pr_av and
regr_pr_int. In order to circumvent this bug, created the function
gr_dyn_phy.

In program test_inifilr, use a single latitude coordinate for north
and south.

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

  ViewVC Help
Powered by ViewVC 1.1.21