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

Last change on this file since 1255 was 1246, checked in by Laurent Fairhead, 15 years ago
  • En deconnectant les aérosols (ok_ade=ok_aie=n) on a les mêmes

résultats avant et après les modifs.

  • preindustrial readin fields are used to compute natural aerosol fields

to allow for clean double calls to radiation

  • full forcing diagnostics (NAT, ANT, ZERO, Cloud forcing, CS,AS) are

activated with lev_histmth 4, If lev_histmth is not 4, the call to the
radiation is minimized, for efficiency, but ade and aie are computed and
applied (however for species wise forcing one would need to do
difference runs) (still quite a bit new forcing info, requires probably

some more explanation)

  • there is a hardcoded key in sw_aeroAR4.F90 which lets you choose to use the zero aerosol, or natural aerosol perturbation acting on the meteorology, but still would put out the full forcing diagnostics.
  • aod fields from offline aerosol fields are also output in histmth for

all aerosol tracers read in and available for evaluation

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