source: LMDZ4/branches/LMDZ4-dev/libf/phylmd/radlwsw.F90 @ 1226

Last change on this file since 1226 was 1220, checked in by lguez, 15 years ago

-- Replaced "integer*4" declarations by "integer", "real*8" by

"real(kind=8)" and "real*4" by "real". Note that these are the only
modifications in the files "radiation_AR4.F" and "sw_aeroAR4.F90".

-- Corrected the kind of arguments to "max" and "min".

-- Replaced "nH" edit descriptors, which is a deleted feature in

Fortran 95, by character strings.

-- "regr_lat_time_climoz" now allows the pressure coordinate in the

input file to be in descending order.

-- Replaced call to not standard function "float" by call to intrinsic

function "real".

-- Included file "radepsi.h" in "physiq" was not used. Removed it.

The following set of modifications is related to the management of time.

-- In "gcm", "leapfrog" and "sortvarc0", "day_ini" was defined as 1

plus number of days between the reference date "(annee_ref,
day_ref)" and the first day of the current simulation. Changed
definition: "(annee_ref, day_ini)" is the first day of the current
simulation. There is an accompanying modification for "day_end".

-- Corrected bug in call to "ioconf_startdate" in "gcm".

-- Added call to "ioconf_calendar" in "create_etat0_limit".

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 16.6 KB
Line 
1SUBROUTINE radlwsw( &
2   dist, rmu0, fract, &
3   paprs, pplay,tsol,alb1, alb2, &
4   t,q,wo,&
5   cldfra, cldemi, cldtaupd,&
6   ok_ade, ok_aie,&
7   tau_aero, piz_aero, cg_aero,&
8   cldtaupi, new_aod, &
9   qsat, flwc, fiwc, &
10   heat,heat0,cool,cool0,radsol,albpla,&
11   topsw,toplw,solsw,sollw,&
12   sollwdown,&
13   topsw0,toplw0,solsw0,sollw0,&
14   lwdn0, lwdn, lwup0, lwup,&
15   swdn0, swdn, swup0, swup,&
16   topswad_aero, solswad_aero,&
17   topswai_aero, solswai_aero, &
18   topswad0_aero, solswad0_aero,&
19   topsw_aero, topsw0_aero,&
20   solsw_aero, solsw0_aero)
21
22
23
24  USE DIMPHY
25
26  IMPLICIT NONE
27  !======================================================================
28  ! Auteur(s): Z.X. Li (LMD/CNRS) date: 19960719
29  ! Objet: interface entre le modele et les rayonnements
30  ! Arguments:
31  ! dist-----input-R- distance astronomique terre-soleil
32  ! rmu0-----input-R- cosinus de l'angle zenithal
33  ! fract----input-R- duree d'ensoleillement normalisee
34  ! co2_ppm--input-R- concentration du gaz carbonique (en ppm)
35  ! paprs----input-R- pression a inter-couche (Pa)
36  ! pplay----input-R- pression au milieu de couche (Pa)
37  ! tsol-----input-R- temperature du sol (en K)
38  ! alb1-----input-R- albedo du sol(entre 0 et 1) dans l'interval visible
39  ! alb2-----input-R- albedo du sol(entre 0 et 1) dans l'interval proche infra-rouge   
40  ! t--------input-R- temperature (K)
41  ! q--------input-R- vapeur d'eau (en kg/kg)
42  ! cldfra---input-R- fraction nuageuse (entre 0 et 1)
43  ! cldtaupd---input-R- epaisseur optique des nuages dans le visible (present-day value)
44  ! cldemi---input-R- emissivite des nuages dans l'IR (entre 0 et 1)
45  ! ok_ade---input-L- apply the Aerosol Direct Effect or not?
46  ! ok_aie---input-L- apply the Aerosol Indirect Effect or not?
47  ! tau_ae, piz_ae, cg_ae-input-R- aerosol optical properties (calculated in aeropt.F)
48  ! cldtaupi-input-R- epaisseur optique des nuages dans le visible
49  !                   calculated for pre-industrial (pi) aerosol concentrations, i.e. with smaller
50  !                   droplet concentration, thus larger droplets, thus generally cdltaupi cldtaupd
51  !                   it is needed for the diagnostics of the aerosol indirect radiative forcing     
52  !
53  ! heat-----output-R- echauffement atmospherique (visible) (K/jour)
54  ! cool-----output-R- refroidissement dans l'IR (K/jour)
55  ! radsol---output-R- bilan radiatif net au sol (W/m**2) (+ vers le bas)
56  ! albpla---output-R- albedo planetaire (entre 0 et 1)
57  ! topsw----output-R- flux solaire net au sommet de l'atm.
58  ! toplw----output-R- ray. IR montant au sommet de l'atmosphere
59  ! solsw----output-R- flux solaire net a la surface
60  ! sollw----output-R- ray. IR montant a la surface
61  ! solswad---output-R- ray. solaire net absorbe a la surface (aerosol dir)
62  ! topswad---output-R- ray. solaire absorbe au sommet de l'atm. (aerosol dir)
63  ! solswai---output-R- ray. solaire net absorbe a la surface (aerosol ind)
64  ! topswai---output-R- ray. solaire absorbe au sommet de l'atm. (aerosol ind)
65  !
66  ! ATTENTION: swai and swad have to be interpreted in the following manner:
67  ! ---------
68  ! ok_ade=F & ok_aie=F -both are zero
69  ! ok_ade=T & ok_aie=F -aerosol direct forcing is F_{AD} = topsw-topswad
70  !                        indirect is zero
71  ! ok_ade=F & ok_aie=T -aerosol indirect forcing is F_{AI} = topsw-topswai
72  !                        direct is zero
73  ! ok_ade=T & ok_aie=T -aerosol indirect forcing is F_{AI} = topsw-topswai
74  !                        aerosol direct forcing is F_{AD} = topswai-topswad
75  !
76 
77  !======================================================================
78 
79  ! ====================================================================
80  ! Adapte au modele de chimie INCA par Celine Deandreis & Anne Cozic -- 2009
81  ! 1 = ZERO   
82  ! 2 = AER total   
83  ! 3 = NAT   
84  ! 4 = BC   
85  ! 5 = SO4   
86  ! 6 = POM   
87  ! 7 = DUST   
88  ! 8 = SS   
89  ! 9 = NO3   
90  !
91  ! ====================================================================
92  include "YOETHF.h"
93  include "YOMCST.h"
94  include "clesphys.h"
95  include "iniprint.h"
96
97! Input arguments
98  REAL,    INTENT(in)  :: dist
99  REAL,    INTENT(in)  :: rmu0(KLON), fract(KLON)
100  REAL,    INTENT(in)  :: paprs(KLON,KLEV+1), pplay(KLON,KLEV)
101  REAL,    INTENT(in)  :: alb1(KLON), alb2(KLON), tsol(KLON)
102  REAL,    INTENT(in)  :: t(KLON,KLEV), q(KLON,KLEV)
103
104  REAL, INTENT(in)::wo(KLON,KLEV)
105  ! column-density of ozone in a layer, in kilo-Dobsons
106
107  LOGICAL, INTENT(in)  :: ok_ade, ok_aie                                 ! switches whether to use aerosol direct (indirect) effects or not
108  REAL,    INTENT(in)  :: cldfra(KLON,KLEV), cldemi(KLON,KLEV), cldtaupd(KLON,KLEV)
109  REAL,    INTENT(in)  :: tau_aero(KLON,KLEV,9,2)                        ! aerosol optical properties (see aeropt.F)
110  REAL,    INTENT(in)  :: piz_aero(KLON,KLEV,9,2)                        ! aerosol optical properties (see aeropt.F)
111  REAL,    INTENT(in)  :: cg_aero(KLON,KLEV,9,2)                         ! aerosol optical properties (see aeropt.F)
112  REAL,    INTENT(in)  :: cldtaupi(KLON,KLEV)                            ! cloud optical thickness for pre-industrial aerosol concentrations
113  LOGICAL, INTENT(in)  :: new_aod                                        ! flag pour retrouver les resultats exacts de l'AR4 dans le cas ou l'on ne travaille qu'avec les sulfates
114  REAL,    INTENT(in)  :: qsat(klon,klev) ! Variable pour iflag_rrtm=1
115  REAL,    INTENT(in)  :: flwc(klon,klev) ! Variable pour iflag_rrtm=1
116  REAL,    INTENT(in)  :: fiwc(klon,klev) ! Variable pour iflag_rrtm=1
117
118! Output arguments
119  REAL,    INTENT(out) :: heat(KLON,KLEV), cool(KLON,KLEV)
120  REAL,    INTENT(out) :: heat0(KLON,KLEV), cool0(KLON,KLEV)
121  REAL,    INTENT(out) :: radsol(KLON), topsw(KLON), toplw(KLON)
122  REAL,    INTENT(out) :: solsw(KLON), sollw(KLON), albpla(KLON)
123  REAL,    INTENT(out) :: topsw0(KLON), toplw0(KLON), solsw0(KLON), sollw0(KLON)
124  REAL,    INTENT(out) :: sollwdown(KLON)
125  REAL,    INTENT(out) :: swdn(KLON,kflev+1),swdn0(KLON,kflev+1)
126  REAL,    INTENT(out) :: swup(KLON,kflev+1),swup0(KLON,kflev+1)
127  REAL,    INTENT(out) :: lwdn(KLON,kflev+1),lwdn0(KLON,kflev+1)
128  REAL,    INTENT(out) :: lwup(KLON,kflev+1),lwup0(KLON,kflev+1)
129  REAL,    INTENT(out) :: topswad_aero(KLON), solswad_aero(KLON)         ! output: aerosol direct forcing at TOA and surface
130  REAL,    INTENT(out) :: topswai_aero(KLON), solswai_aero(KLON)         ! output: aerosol indirect forcing atTOA and surface
131  REAL, DIMENSION(klon), INTENT(out)    :: topswad0_aero
132  REAL, DIMENSION(klon), INTENT(out)    :: solswad0_aero
133  REAL, DIMENSION(kdlon,9), INTENT(out) :: topsw_aero
134  REAL, DIMENSION(kdlon,9), INTENT(out) :: topsw0_aero
135  REAL, DIMENSION(kdlon,9), INTENT(out) :: solsw_aero
136  REAL, DIMENSION(kdlon,9), INTENT(out) :: solsw0_aero
137
138! Local variables
139  REAL(KIND=8) ZFSUP(KDLON,KFLEV+1)
140  REAL(KIND=8) ZFSDN(KDLON,KFLEV+1)
141  REAL(KIND=8) ZFSUP0(KDLON,KFLEV+1)
142  REAL(KIND=8) ZFSDN0(KDLON,KFLEV+1)
143  REAL(KIND=8) ZFLUP(KDLON,KFLEV+1)
144  REAL(KIND=8) ZFLDN(KDLON,KFLEV+1)
145  REAL(KIND=8) ZFLUP0(KDLON,KFLEV+1)
146  REAL(KIND=8) ZFLDN0(KDLON,KFLEV+1)
147  REAL(KIND=8) zx_alpha1, zx_alpha2
148  INTEGER k, kk, i, j, iof, nb_gr
149  REAL(KIND=8) PSCT
150  REAL(KIND=8) PALBD(kdlon,2), PALBP(kdlon,2)
151  REAL(KIND=8) PEMIS(kdlon), PDT0(kdlon), PVIEW(kdlon)
152  REAL(KIND=8) PPSOL(kdlon), PDP(kdlon,KLEV)
153  REAL(KIND=8) PTL(kdlon,kflev+1), PPMB(kdlon,kflev+1)
154  REAL(KIND=8) PTAVE(kdlon,kflev)
155  REAL(KIND=8) PWV(kdlon,kflev), PQS(kdlon,kflev)
156  real(kind=8) POZON(kdlon,kflev) ! mass fraction of ozone
157  REAL(KIND=8) PAER(kdlon,kflev,5)
158  REAL(KIND=8) PCLDLD(kdlon,kflev)
159  REAL(KIND=8) PCLDLU(kdlon,kflev)
160  REAL(KIND=8) PCLDSW(kdlon,kflev)
161  REAL(KIND=8) PTAU(kdlon,2,kflev)
162  REAL(KIND=8) POMEGA(kdlon,2,kflev)
163  REAL(KIND=8) PCG(kdlon,2,kflev)
164  REAL(KIND=8) zfract(kdlon), zrmu0(kdlon), zdist
165  REAL(KIND=8) zheat(kdlon,kflev), zcool(kdlon,kflev)
166  REAL(KIND=8) zheat0(kdlon,kflev), zcool0(kdlon,kflev)
167  REAL(KIND=8) ztopsw(kdlon), ztoplw(kdlon)
168  REAL(KIND=8) zsolsw(kdlon), zsollw(kdlon), zalbpla(kdlon)
169  REAL(KIND=8) zsollwdown(kdlon)
170  REAL(KIND=8) ztopsw0(kdlon), ztoplw0(kdlon)
171  REAL(KIND=8) zsolsw0(kdlon), zsollw0(kdlon)
172  REAL(KIND=8) zznormcp
173  REAL(KIND=8) tauaero(kdlon,kflev,9,2)                     ! aer opt properties
174  REAL(KIND=8) pizaero(kdlon,kflev,9,2)
175  REAL(KIND=8) cgaero(kdlon,kflev,9,2)
176  REAL(KIND=8) PTAUA(kdlon,2,kflev)                         ! present-day value of cloud opt thickness (PTAU is pre-industrial value), local use
177  REAL(KIND=8) POMEGAA(kdlon,2,kflev)                       ! dito for single scatt albedo
178  REAL(KIND=8) ztopswadaero(kdlon), zsolswadaero(kdlon)     ! Aerosol direct forcing at TOAand surface
179  REAL(KIND=8) ztopswad0aero(kdlon), zsolswad0aero(kdlon)   ! Aerosol direct forcing at TOAand surface
180  REAL(KIND=8) ztopswaiaero(kdlon), zsolswaiaero(kdlon)     ! dito, indirect
181  REAL(KIND=8) ztopsw_aero(kdlon,9), ztopsw0_aero(kdlon,9)
182  REAL(KIND=8) zsolsw_aero(kdlon,9), zsolsw0_aero(kdlon,9)
183  real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2
184
185  ! initialisation
186  tauaero(:,:,:,:)=0.
187  pizaero(:,:,:,:)=0.
188  cgaero(:,:,:,:)=0.
189 
190  !
191  !-------------------------------------------
192  nb_gr = KLON / kdlon
193  IF (nb_gr*kdlon .NE. KLON) THEN
194      PRINT*, "kdlon mauvais:", KLON, kdlon, nb_gr
195      CALL abort
196  ENDIF
197  IF (kflev .NE. KLEV) THEN
198      PRINT*, "kflev differe de KLEV, kflev, KLEV"
199      CALL abort
200  ENDIF
201  !-------------------------------------------
202  DO k = 1, KLEV
203    DO i = 1, KLON
204      heat(i,k)=0.
205      cool(i,k)=0.
206      heat0(i,k)=0.
207      cool0(i,k)=0.
208    ENDDO
209  ENDDO
210  !
211  zdist = dist
212  !
213  PSCT = solaire/zdist/zdist
214  DO j = 1, nb_gr
215    iof = kdlon*(j-1)
216    DO i = 1, kdlon
217      zfract(i) = fract(iof+i)
218      zrmu0(i) = rmu0(iof+i)
219      PALBD(i,1) = alb1(iof+i)
220      PALBD(i,2) = alb2(iof+i)
221      PALBP(i,1) = alb1(iof+i)
222      PALBP(i,2) = alb2(iof+i)
223      PEMIS(i) = 1.0
224      PVIEW(i) = 1.66
225      PPSOL(i) = paprs(iof+i,1)
226      zx_alpha1 = (paprs(iof+i,1)-pplay(iof+i,2))/(pplay(iof+i,1)-pplay(iof+i,2))
227      zx_alpha2 = 1.0 - zx_alpha1
228      PTL(i,1) = t(iof+i,1) * zx_alpha1 + t(iof+i,2) * zx_alpha2
229      PTL(i,KLEV+1) = t(iof+i,KLEV)
230      PDT0(i) = tsol(iof+i) - PTL(i,1)
231    ENDDO
232    DO k = 2, kflev
233      DO i = 1, kdlon
234        PTL(i,k) = (t(iof+i,k)+t(iof+i,k-1))*0.5
235      ENDDO
236    ENDDO
237    DO k = 1, kflev
238      DO i = 1, kdlon
239        PDP(i,k) = paprs(iof+i,k)-paprs(iof+i,k+1)
240        PTAVE(i,k) = t(iof+i,k)
241        PWV(i,k) = MAX (q(iof+i,k), 1.0e-12)
242        PQS(i,k) = PWV(i,k)
243        POZON(i,k) = MAX(wo(iof+i, k), 1e-12) * RG * dobson_u * 1e3 &
244             /(paprs(iof+i, k) - paprs(iof+i, k+1)) &
245             * (paprs(iof+i, 1) / 101325.)
246        PCLDLD(i,k) = cldfra(iof+i,k)*cldemi(iof+i,k)
247        PCLDLU(i,k) = cldfra(iof+i,k)*cldemi(iof+i,k)
248        PCLDSW(i,k) = cldfra(iof+i,k)
249        PTAU(i,1,k) = MAX(cldtaupi(iof+i,k), 1.0e-05)! 1e-12 serait instable
250        PTAU(i,2,k) = MAX(cldtaupi(iof+i,k), 1.0e-05)! pour 32-bit machines
251        POMEGA(i,1,k) = 0.9999 - 5.0e-04 * EXP(-0.5 * PTAU(i,1,k))
252        POMEGA(i,2,k) = 0.9988 - 2.5e-03 * EXP(-0.05 * PTAU(i,2,k))
253        PCG(i,1,k) = 0.865
254        PCG(i,2,k) = 0.910
255        !-
256        ! Introduced for aerosol indirect forcings.
257        ! The following values use the cloud optical thickness calculated from
258        ! present-day aerosol concentrations whereas the quantities without the
259        ! "A" at the end are for pre-industial (natural-only) aerosol concentrations
260        !
261        PTAUA(i,1,k) = MAX(cldtaupd(iof+i,k), 1.0e-05)! 1e-12 serait instable
262        PTAUA(i,2,k) = MAX(cldtaupd(iof+i,k), 1.0e-05)! pour 32-bit machines
263        POMEGAA(i,1,k) = 0.9999 - 5.0e-04 * EXP(-0.5 * PTAUA(i,1,k))
264        POMEGAA(i,2,k) = 0.9988 - 2.5e-03 * EXP(-0.05 * PTAUA(i,2,k))
265      ENDDO
266    ENDDO
267    !
268    DO k = 1, kflev+1
269      DO i = 1, kdlon
270        PPMB(i,k) = paprs(iof+i,k)/100.0
271      ENDDO
272    ENDDO
273    !
274    DO kk = 1, 5
275      DO k = 1, kflev
276        DO i = 1, kdlon
277          PAER(i,k,kk) = 1.0E-15
278        ENDDO
279      ENDDO
280    ENDDO
281    DO k = 1, kflev
282      DO i = 1, kdlon
283        tauaero(i,k,:,1)=tau_aero(iof+i,k,:,1)
284        pizaero(i,k,:,1)=piz_aero(iof+i,k,:,1)
285        cgaero(i,k,:,1) =cg_aero(iof+i,k,:,1)
286        tauaero(i,k,:,2)=tau_aero(iof+i,k,:,2)
287        pizaero(i,k,:,2)=piz_aero(iof+i,k,:,2)
288        cgaero(i,k,:,2) =cg_aero(iof+i,k,:,2)
289      ENDDO
290    ENDDO
291
292!
293!===== iflag_rrtm ================================================
294!     
295    IF (iflag_rrtm == 0) THEN
296       ! Old radiation scheme, used for AR4 runs
297       CALL LW_LMDAR4(&
298            PPMB, PDP,&
299            PPSOL,PDT0,PEMIS,&
300            PTL, PTAVE, PWV, POZON, PAER,&
301            PCLDLD,PCLDLU,&
302            PVIEW,&
303            zcool, zcool0,&
304            ztoplw,zsollw,ztoplw0,zsollw0,&
305            zsollwdown,&
306            ZFLUP, ZFLDN, ZFLUP0,ZFLDN0)
307
308
309       IF (.NOT. new_aod) THEN
310          ! use old version
311          CALL SW_LMDAR4(PSCT, zrmu0, zfract,&
312               PPMB, PDP, &
313               PPSOL, PALBD, PALBP,&
314               PTAVE, PWV, PQS, POZON, PAER,&
315               PCLDSW, PTAU, POMEGA, PCG,&
316               zheat, zheat0,&
317               zalbpla,ztopsw,zsolsw,ztopsw0,zsolsw0,&
318               ZFSUP,ZFSDN,ZFSUP0,ZFSDN0,&
319               tau_aero(:,:,5,:), piz_aero(:,:,5,:), cg_aero(:,:,5,:),&
320               PTAUA, POMEGAA,&
321               ztopswadaero,zsolswadaero,&
322               ztopswaiaero,zsolswaiaero,&
323               ok_ade, ok_aie)
324         
325       ELSE ! new_aod=T         
326          CALL SW_AEROAR4(PSCT, zrmu0, zfract,&
327               PPMB, PDP,&
328               PPSOL, PALBD, PALBP,&
329               PTAVE, PWV, PQS, POZON, PAER,&
330               PCLDSW, PTAU, POMEGA, PCG,&
331               zheat, zheat0,&
332               zalbpla,ztopsw,zsolsw,ztopsw0,zsolsw0,&
333               ZFSUP,ZFSDN,ZFSUP0,ZFSDN0,&
334               tauaero, pizaero, cgaero, &
335               PTAUA, POMEGAA,&
336               ztopswadaero,zsolswadaero,&
337               ztopswad0aero,zsolswad0aero,&
338               ztopswaiaero,zsolswaiaero, &
339               ztopsw_aero,ztopsw0_aero,&
340               zsolsw_aero,zsolsw0_aero,&
341               ok_ade, ok_aie)
342         
343       ENDIF
344
345    ELSE 
346!===== iflag_rrtm=1, on passe dans SW via RECMWFL ===============
347       WRITE(lunout,*) "Option iflag_rrtm=T ne fonctionne pas encore !!!"
348       CALL abort_gcm('radlwsw','iflag_rrtm=T not valid',1)
349
350    ENDIF ! iflag_rrtm
351!======================================================================
352
353    DO i = 1, kdlon
354      radsol(iof+i) = zsolsw(i) + zsollw(i)
355      topsw(iof+i) = ztopsw(i)
356      toplw(iof+i) = ztoplw(i)
357      solsw(iof+i) = zsolsw(i)
358      sollw(iof+i) = zsollw(i)
359      sollwdown(iof+i) = zsollwdown(i)
360      DO k = 1, kflev+1
361        lwdn0 ( iof+i,k)   = ZFLDN0 ( i,k)
362        lwdn  ( iof+i,k)   = ZFLDN  ( i,k)
363        lwup0 ( iof+i,k)   = ZFLUP0 ( i,k)
364        lwup  ( iof+i,k)   = ZFLUP  ( i,k)
365      ENDDO
366      topsw0(iof+i) = ztopsw0(i)
367      toplw0(iof+i) = ztoplw0(i)
368      solsw0(iof+i) = zsolsw0(i)
369      sollw0(iof+i) = zsollw0(i)
370      albpla(iof+i) = zalbpla(i)
371
372      DO k = 1, kflev+1
373        swdn0 ( iof+i,k)   = ZFSDN0 ( i,k)
374        swdn  ( iof+i,k)   = ZFSDN  ( i,k)
375        swup0 ( iof+i,k)   = ZFSUP0 ( i,k)
376        swup  ( iof+i,k)   = ZFSUP  ( i,k)
377      ENDDO
378    ENDDO
379    !-transform the aerosol forcings, if they have
380    ! to be calculated
381    IF (ok_ade) THEN
382        DO i = 1, kdlon
383          topswad_aero(iof+i) = ztopswadaero(i)
384          topswad0_aero(iof+i) = ztopswad0aero(i)
385          solswad_aero(iof+i) = zsolswadaero(i)
386          solswad0_aero(iof+i) = zsolswad0aero(i)
387          topsw_aero(iof+i,:) = ztopsw_aero(iof+i,:)
388          topsw0_aero(iof+i,:) = ztopsw0_aero(iof+i,:)
389          solsw_aero(iof+i,:) = zsolsw_aero(iof+i,:)
390          solsw0_aero(iof+i,:) = zsolsw0_aero(iof+i,:)
391         
392        ENDDO
393    ELSE
394        DO i = 1, kdlon
395          topswad_aero(iof+i) = 0.0
396          solswad_aero(iof+i) = 0.0
397          topswad0_aero(iof+i) = 0.0
398          solswad0_aero(iof+i) = 0.0
399          topsw_aero(iof+i,:) = 0.
400          topsw0_aero(iof+i,:) =0.
401          solsw_aero(iof+i,:) = 0.
402          solsw0_aero(iof+i,:) = 0.
403        ENDDO
404    ENDIF
405    IF (ok_aie) THEN
406        DO i = 1, kdlon
407          topswai_aero(iof+i) = ztopswaiaero(i)
408          solswai_aero(iof+i) = zsolswaiaero(i)
409        ENDDO
410    ELSE
411        DO i = 1, kdlon
412          topswai_aero(iof+i) = 0.0
413          solswai_aero(iof+i) = 0.0
414        ENDDO
415    ENDIF
416    DO k = 1, kflev
417      DO i = 1, kdlon
418        !        scale factor to take into account the difference between
419        !        dry air and watter vapour scpecifi! heat capacity
420        zznormcp=1.0+RVTMP2*PWV(i,k)
421        heat(iof+i,k) = zheat(i,k)/zznormcp
422        cool(iof+i,k) = zcool(i,k)/zznormcp
423        heat0(iof+i,k) = zheat0(i,k)/zznormcp
424        cool0(iof+i,k) = zcool0(i,k)/zznormcp
425      ENDDO
426    ENDDO
427
428 ENDDO ! j = 1, nb_gr
429
430
431END SUBROUTINE radlwsw
432
433
Note: See TracBrowser for help on using the repository browser.