/[lmdze]/trunk/phylmd/Radlwsw/radlwsw.f
ViewVC logotype

Diff of /trunk/phylmd/Radlwsw/radlwsw.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/libf/phylmd/Radlwsw/radlwsw.f revision 52 by guez, Fri Sep 23 12:28:01 2011 UTC trunk/phylmd/Radlwsw/radlwsw.f revision 82 by guez, Wed Mar 5 14:57:53 2014 UTC
# Line 1  Line 1 
1  !  module radlwsw_m
2  ! $Header: /home/cvsroot/LMDZ4/libf/phylmd/radlwsw.F,v 1.4 2005/06/06 13:16:33 fairhead Exp $  
3  !    IMPLICIT none
4        SUBROUTINE radlwsw(dist, rmu0, fract,  
5       .                  paprs, pplay,tsol,albedo, alblw, t,q,wo,  contains
6       .                  cldfra, cldemi, cldtaupd,  
7       .                  heat,heat0,cool,cool0,radsol,albpla,    SUBROUTINE radlwsw(dist, rmu0, fract, paprs, play, tsol, albedo, alblw, &
8       .                  topsw,toplw,solsw,sollw,         t, q, wo, cldfra, cldemi, cldtaupd, heat, heat0, cool, cool0, radsol, &
9       .                  sollwdown,         albpla, topsw, toplw, solsw, sollw, sollwdown, topsw0, toplw0, solsw0, &
10       .                  topsw0,toplw0,solsw0,sollw0,         sollw0, lwdn0, lwdn, lwup0, lwup, swdn0, swdn, swup0, swup, ok_ade, &
11       .                  lwdn0, lwdn, lwup0, lwup,         ok_aie, tau_ae, piz_ae, cg_ae, topswad, solswad, cldtaupi, topswai, &
12       .                  swdn0, swdn, swup0, swup,         solswai)
13       .                  ok_ade, ok_aie,  
14       .                  tau_ae, piz_ae, cg_ae,      ! From LMDZ4/libf/phylmd/radlwsw.F, version 1.4 2005/06/06 13:16:33
15       .                  topswad, solswad,      ! Author: Z. X. Li (LMD/CNRS)
16       .                  cldtaupi, topswai, solswai)      ! Date: 1996/07/19
17  c        
18        use dimphy      ! Objet : interface entre le modèle et les rayonnements solaire et
19        use clesphys      ! infrarouge
20        use SUPHEC_M  
21        use raddim, only: kflev, kdlon      ! ATTENTION: swai and swad have to be interpreted in the following manner:
22        use yoethf_m  
23        IMPLICIT none      ! not ok_ade and not ok_aie
24  c======================================================================      ! both are zero
25  c Auteur(s): Z.X. Li (LMD/CNRS) date: 19960719  
26  c Objet: interface entre le modele et les rayonnements      ! ok_ade and not ok_aie
27  c Arguments:      ! aerosol direct forcing is F_{AD} = topsw - topswad
28  c dist-----input-R- distance astronomique terre-soleil      ! indirect is zero
29  c rmu0-----input-R- cosinus de l'angle zenithal  
30  c fract----input-R- duree d'ensoleillement normalisee      ! not ok_ade and ok_aie
31  c co2_ppm--input-R- concentration du gaz carbonique (en ppm)      ! aerosol indirect forcing is F_{AI} = topsw - topswai
32  c solaire--input-R- constante solaire (W/m**2)      ! direct is zero
33  c paprs----input-R- pression a inter-couche (Pa)  
34  c pplay----input-R- pression au milieu de couche (Pa)      ! ok_ade and ok_aie
35  c tsol-----input-R- temperature du sol (en K)      ! aerosol indirect forcing is F_{AI} = topsw - topswai
36  c albedo---input-R- albedo du sol (entre 0 et 1)      ! aerosol direct forcing is F_{AD} = topswai - topswad
37  c t--------input-R- temperature (K)  
38  c q--------input-R- vapeur d'eau (en kg/kg)      USE clesphys, ONLY: bug_ozone, solaire
39  c wo-------input-R- contenu en ozone (en kg/kg) correction MPL 100505      USE dimphy, ONLY: klev, klon
40  c cldfra---input-R- fraction nuageuse (entre 0 et 1)      use lw_m, only: lw
41  c cldtaupd---input-R- epaisseur optique des nuages dans le visible (present-day value)      USE raddim, ONLY: kdlon
42  c cldemi---input-R- emissivite des nuages dans l'IR (entre 0 et 1)      USE suphec_m, ONLY: rg
43  c ok_ade---input-L- apply the Aerosol Direct Effect or not?      use sw_m, only: sw
44  c ok_aie---input-L- apply the Aerosol Indirect Effect or not?      USE yoethf_m, ONLY: rvtmp2
45  c tau_ae, piz_ae, cg_ae-input-R- aerosol optical properties (calculated in aeropt.F)          
46  c cldtaupi-input-R- epaisseur optique des nuages dans le visible      ! Arguments:
47  c                   calculated for pre-industrial (pi) aerosol concentrations, i.e. with smaller  
48  c                   droplet concentration, thus larger droplets, thus generally cdltaupi cldtaupd      real dist, rmu0(klon), fract(klon)
49  c                   it is needed for the diagnostics of the aerosol indirect radiative forcing            ! dist-----input-R- distance astronomique terre-soleil
50  c      ! rmu0-----input-R- cosinus de l'angle zenithal
51  c heat-----output-R- echauffement atmospherique (visible) (K/jour)      ! fract----input-R- duree d'ensoleillement normalisee
52  c cool-----output-R- refroidissement dans l'IR (K/jour)  
53  c radsol---output-R- bilan radiatif net au sol (W/m**2) (+ vers le bas)      real, intent(in):: paprs(klon, klev+1)
54  c albpla---output-R- albedo planetaire (entre 0 et 1)      ! paprs----input-R- pression a inter-couche (Pa)
55  c topsw----output-R- flux solaire net au sommet de l'atm.      real, intent(in):: play(klon, klev)
56  c toplw----output-R- ray. IR montant au sommet de l'atmosphere      ! play----input-R- pression au milieu de couche (Pa)
57  c solsw----output-R- flux solaire net a la surface      real tsol(klon), albedo(klon), alblw(klon)
58  c sollw----output-R- ray. IR montant a la surface      ! albedo---input-R- albedo du sol (entre 0 et 1)
59  c solswad---output-R- ray. solaire net absorbe a la surface (aerosol dir)      ! tsol-----input-R- temperature du sol (en K)
60  c topswad---output-R- ray. solaire absorbe au sommet de l'atm. (aerosol dir)      real, intent(in):: t(klon, klev)
61  c solswai---output-R- ray. solaire net absorbe a la surface (aerosol ind)      ! t--------input-R- temperature (K)
62  c topswai---output-R- ray. solaire absorbe au sommet de l'atm. (aerosol ind)      real q(klon, klev)
63  c      ! q--------input-R- vapeur d'eau (en kg/kg)
64  c ATTENTION: swai and swad have to be interpreted in the following manner:      real, intent(in):: wo(klon, klev)
65  c ---------      ! wo-------input-R- contenu en ozone (en kg/kg) correction MPL 100505
66  c ok_ade=F & ok_aie=F -both are zero      real cldfra(klon, klev), cldemi(klon, klev)
67  c ok_ade=T & ok_aie=F -aerosol direct forcing is F_{AD} = topsw-topswad      ! cldfra---input-R- fraction nuageuse (entre 0 et 1)
68  c                        indirect is zero      ! cldemi---input-R- emissivite des nuages dans l'IR (entre 0 et 1)
69  c ok_ade=F & ok_aie=T -aerosol indirect forcing is F_{AI} = topsw-topswai  
70  c                        direct is zero      real cldtaupd(klon, klev)
71  c ok_ade=T & ok_aie=T -aerosol indirect forcing is F_{AI} = topsw-topswai      ! input-R- epaisseur optique des nuages dans le visible (present-day value)
72  c                        aerosol direct forcing is F_{AD} = topswai-topswad  
73  c      real, intent(out):: heat(klon, klev)
74              ! échauffement atmosphérique (visible) (K/jour)
75  c======================================================================  
76  c      real heat0(klon, klev)
77        real rmu0(klon), fract(klon), dist      real cool(klon, klev)
78  cIM   real co2_ppm      ! cool-----output-R- refroidissement dans l'IR (K/jour)
79  cIM   real solaire      real cool0(klon, klev)
80  c      real radsol(klon)
81        real, intent(in):: paprs(klon,klev+1)      ! radsol---output-R- bilan radiatif net au sol (W/m**2) (+ vers le bas)
82        real, intent(in):: pplay(klon,klev)      real albpla(klon)
83        real albedo(klon), alblw(klon), tsol(klon)      ! albpla---output-R- albedo planetaire (entre 0 et 1)
84        real, intent(in):: t(klon,klev)      real topsw(klon)
85        real q(klon,klev)      ! topsw----output-R- flux solaire net au sommet de l'atm.
86        real, intent(in):: wo(klon,klev)  
87        real cldfra(klon,klev), cldemi(klon,klev), cldtaupd(klon,klev)      real, intent(out):: toplw(klon)
88        real heat(klon,klev), cool(klon,klev)      ! rayonnement infrarouge montant au sommet de l'atmosphère
89        real heat0(klon,klev), cool0(klon,klev)  
90        real radsol(klon), topsw(klon), toplw(klon)      real, intent(out):: solsw(klon) ! flux solaire net à la surface
91        real solsw(klon), sollw(klon), albpla(klon)  
92        real topsw0(klon), toplw0(klon), solsw0(klon), sollw0(klon)      real, intent(out):: sollw(klon)
93        real sollwdown(klon)      ! rayonnement infrarouge montant à la surface
94  cIM output 3D  
95        REAL*8 ZFSUP(KDLON,KFLEV+1)      real, intent(out):: sollwdown(klon)
96        REAL*8 ZFSDN(KDLON,KFLEV+1)      real topsw0(klon)
97        REAL*8 ZFSUP0(KDLON,KFLEV+1)      real, intent(out):: toplw0(klon)
98        REAL*8 ZFSDN0(KDLON,KFLEV+1)      real solsw0(klon), sollw0(klon)
99  c      !IM output 3D: SWup, SWdn, LWup, LWdn
100        REAL*8 ZFLUP(KDLON,KFLEV+1)      REAL lwdn0(klon, klev+1), lwdn(klon, klev+1)
101        REAL*8 ZFLDN(KDLON,KFLEV+1)      REAL lwup0(klon, klev+1), lwup(klon, klev+1)
102        REAL*8 ZFLUP0(KDLON,KFLEV+1)      REAL swdn0(klon, klev+1), swdn(klon, klev+1)
103        REAL*8 ZFLDN0(KDLON,KFLEV+1)      REAL swup0(klon, klev+1), swup(klon, klev+1)
104  c  
105        REAL*8 zx_alpha1, zx_alpha2      logical ok_ade, ok_aie
106  c      ! switches whether to use aerosol direct (indirect) effects or not
107  c      ! ok_ade---input-L- apply the Aerosol Direct Effect or not?
108        INTEGER k, kk, i, j, iof, nb_gr      ! ok_aie---input-L- apply the Aerosol Indirect Effect or not?
109        EXTERNAL lw, sw  
110  c      real tau_ae(klon, klev, 2), piz_ae(klon, klev, 2), cg_ae(klon, klev, 2)
111  cIM ctes ds clesphys.h  REAL*8 RCO2, RCH4, RN2O, RCFC11, RCFC12      ! input-R- aerosol optical properties (calculated in aeropt.F)
112        REAL*8 PSCT  
113  c      real topswad(klon), solswad(klon)
114        REAL*8 PALBD(kdlon,2), PALBP(kdlon,2)      ! output: aerosol direct forcing at TOA and surface
115        REAL*8 PEMIS(kdlon), PDT0(kdlon), PVIEW(kdlon)      ! topswad---output-R- ray. solaire absorbe au sommet de l'atm. (aerosol dir)
116        REAL*8 PPSOL(kdlon), PDP(kdlon,klev)      ! solswad---output-R- ray. solaire net absorbe a la surface (aerosol dir)
117        REAL*8 PTL(kdlon,kflev+1), PPMB(kdlon,kflev+1)  
118        REAL*8 PTAVE(kdlon,kflev)      real cldtaupi(klon, klev)
119        REAL*8 PWV(kdlon,kflev), PQS(kdlon,kflev), POZON(kdlon,kflev)      ! cloud optical thickness for pre-industrial aerosol concentrations
120        REAL*8 PAER(kdlon,kflev,5)      ! (i.e. with a smaller droplet concentration and thus larger droplet radii)
121        REAL*8 PCLDLD(kdlon,kflev)      ! -input-R- epaisseur optique des nuages dans le visible
122        REAL*8 PCLDLU(kdlon,kflev)      ! calculated for pre-industrial (pi) aerosol concentrations,
123        REAL*8 PCLDSW(kdlon,kflev)      ! i.e. with smaller droplet concentration, thus larger droplets,
124        REAL*8 PTAU(kdlon,2,kflev)      ! thus generally cdltaupi cldtaupd it is needed for the
125        REAL*8 POMEGA(kdlon,2,kflev)      ! diagnostics of the aerosol indirect radiative forcing
126        REAL*8 PCG(kdlon,2,kflev)  
127  c      real topswai(klon), solswai(klon)
128        REAL*8 zfract(kdlon), zrmu0(kdlon), zdist      ! output: aerosol indirect forcing atTOA and surface
129  c      ! topswai---output-R- ray. solaire absorbe au sommet de l'atm. (aerosol ind)
130        REAL*8 zheat(kdlon,kflev), zcool(kdlon,kflev)      ! solswai---output-R- ray. solaire net absorbe a la surface (aerosol ind)
131        REAL*8 zheat0(kdlon,kflev), zcool0(kdlon,kflev)  
132        REAL*8 ztopsw(kdlon), ztoplw(kdlon)      ! Local:
133        REAL*8 zsolsw(kdlon), zsollw(kdlon), zalbpla(kdlon)  
134  cIM      double precision tauae(kdlon, klev, 2) ! aer opt properties
135        REAL*8 zsollwdown(kdlon)      double precision pizae(kdlon, klev, 2)
136  c      double precision cgae(kdlon, klev, 2)
137        REAL*8 ztopsw0(kdlon), ztoplw0(kdlon)  
138        REAL*8 zsolsw0(kdlon), zsollw0(kdlon)      !IM output 3D
139        REAL*8 zznormcp      DOUBLE PRECISION ZFSUP(KDLON, KLEV+1)
140  cIM output 3D : SWup, SWdn, LWup, LWdn      DOUBLE PRECISION ZFSDN(KDLON, KLEV+1)
141        REAL swdn(klon,kflev+1),swdn0(klon,kflev+1)      DOUBLE PRECISION ZFSUP0(KDLON, KLEV+1)
142        REAL swup(klon,kflev+1),swup0(klon,kflev+1)      DOUBLE PRECISION ZFSDN0(KDLON, KLEV+1)
143        REAL lwdn(klon,kflev+1),lwdn0(klon,kflev+1)  
144        REAL lwup(klon,kflev+1),lwup0(klon,kflev+1)      DOUBLE PRECISION ZFLUP(KDLON, KLEV+1)
145  c-OB      DOUBLE PRECISION ZFLDN(KDLON, KLEV+1)
146  cjq the following quantities are needed for the aerosol radiative forcings      DOUBLE PRECISION ZFLUP0(KDLON, KLEV+1)
147        DOUBLE PRECISION ZFLDN0(KDLON, KLEV+1)
148        real topswad(klon), solswad(klon) ! output: aerosol direct forcing at TOA and surface  
149        real topswai(klon), solswai(klon) ! output: aerosol indirect forcing atTOA and surface      DOUBLE PRECISION zx_alpha1, zx_alpha2
150        real tau_ae(klon,klev,2), piz_ae(klon,klev,2), cg_ae(klon,klev,2) ! aerosol optical properties (see aeropt.F)      INTEGER k, kk, i, iof, nb_gr
151        real cldtaupi(klon,klev)  ! cloud optical thickness for pre-industrial aerosol concentrations      DOUBLE PRECISION PSCT
152                                  ! (i.e., with a smaller droplet concentrationand thus larger droplet radii)  
153        logical ok_ade, ok_aie    ! switches whether to use aerosol direct (indirect) effects or not      DOUBLE PRECISION PALBD(kdlon, 2), PALBP(kdlon, 2)
154        real*8 tauae(kdlon,kflev,2) ! aer opt properties      DOUBLE PRECISION PEMIS(kdlon), PDT0(kdlon), PVIEW(kdlon)
155        real*8 pizae(kdlon,kflev,2)      DOUBLE PRECISION PPSOL(kdlon), PDP(kdlon, klev)
156        real*8 cgae(kdlon,kflev,2)      DOUBLE PRECISION PTL(kdlon, klev+1), PPMB(kdlon, klev+1)
157        REAL*8 PTAUA(kdlon,2,kflev) ! present-day value of cloud opt thickness (PTAU is pre-industrial value), local use      DOUBLE PRECISION PTAVE(kdlon, klev)
158        REAL*8 POMEGAA(kdlon,2,kflev) ! dito for single scatt albedo      DOUBLE PRECISION PWV(kdlon, klev), PQS(kdlon, klev), POZON(kdlon, klev)
159        REAL*8 ztopswad(kdlon), zsolswad(kdlon) ! Aerosol direct forcing at TOAand surface      DOUBLE PRECISION PAER(kdlon, klev, 5)
160        REAL*8 ztopswai(kdlon), zsolswai(kdlon) ! dito, indirect      DOUBLE PRECISION PCLDLD(kdlon, klev)
161  cjq-end      DOUBLE PRECISION PCLDLU(kdlon, klev)
162  !rv      DOUBLE PRECISION PCLDSW(kdlon, klev)
163        tauae(:,:,:)=0.      DOUBLE PRECISION PTAU(kdlon, 2, klev)
164        pizae(:,:,:)=0.      DOUBLE PRECISION POMEGA(kdlon, 2, klev)
165        cgae(:,:,:)=0.      DOUBLE PRECISION PCG(kdlon, 2, klev)
166  !rv  
167              DOUBLE PRECISION zfract(kdlon), zrmu0(kdlon), zdist
168  c  
169  c-------------------------------------------      DOUBLE PRECISION zheat(kdlon, klev), zcool(kdlon, klev)
170        nb_gr = klon / kdlon      DOUBLE PRECISION zheat0(kdlon, klev), zcool0(kdlon, klev)
171        IF (nb_gr*kdlon .NE. klon) THEN      DOUBLE PRECISION ztopsw(kdlon), ztoplw(kdlon)
172           PRINT*, "kdlon mauvais:", klon, kdlon, nb_gr      DOUBLE PRECISION zsolsw(kdlon), zsollw(kdlon), zalbpla(kdlon)
173           stop 1      DOUBLE PRECISION zsollwdown(kdlon)
174        ENDIF  
175        IF (kflev .NE. klev) THEN      DOUBLE PRECISION ztopsw0(kdlon), ztoplw0(kdlon)
176            PRINT*, "kflev differe de klev, kflev, klev"      DOUBLE PRECISION zsolsw0(kdlon), zsollw0(kdlon)
177            stop 1      DOUBLE PRECISION zznormcp
178        ENDIF  
179  c-------------------------------------------      !jq the following quantities are needed for the aerosol radiative forcings
180        DO k = 1, klev  
181        DO i = 1, klon      DOUBLE PRECISION PTAUA(kdlon, 2, klev)
182           heat(i,k)=0.      ! present-day value of cloud opt thickness (PTAU is pre-industrial
183           cool(i,k)=0.      ! value), local use
184           heat0(i,k)=0.  
185           cool0(i,k)=0.      DOUBLE PRECISION POMEGAA(kdlon, 2, klev) ! dito for single scatt albedo
186        ENDDO  
187        ENDDO      DOUBLE PRECISION ztopswad(kdlon), zsolswad(kdlon)
188  c      ! Aerosol direct forcing at TOAand surface
189        zdist = dist  
190  c      DOUBLE PRECISION ztopswai(kdlon), zsolswai(kdlon) ! dito, indirect
191  cIM anciennes valeurs  
192  c     RCO2 = co2_ppm * 1.0e-06  * 44.011/28.97      !----------------------------------------------------------------------
193  c  
194  cIM : on met RCO2, RCH4, RN2O, RCFC11 et RCFC12 dans clesphys.h /lecture ds conf_phys.F90      tauae = 0.
195  c     RCH4 = 1.65E-06* 16.043/28.97      pizae = 0.
196  c     RN2O = 306.E-09* 44.013/28.97      cgae = 0.
197  c     RCFC11 = 280.E-12* 137.3686/28.97  
198  c     RCFC12 = 484.E-12* 120.9140/28.97      nb_gr = klon / kdlon
199  cIM anciennes valeurs      IF (nb_gr * kdlon /= klon) THEN
200  c     RCH4 = 1.72E-06* 16.043/28.97         PRINT *, "kdlon mauvais :", klon, kdlon, nb_gr
201  c     RN2O = 310.E-09* 44.013/28.97         stop 1
202  c      ENDIF
203  c     PRINT*,'IMradlwsw : solaire, co2= ', solaire, co2_ppm      
204        PSCT = solaire/zdist/zdist      heat = 0.
205  c      cool = 0.
206        DO 99999 j = 1, nb_gr      heat0 = 0.
207        iof = kdlon*(j-1)      cool0 = 0.
208  c      zdist = dist
209        DO i = 1, kdlon      PSCT = solaire / zdist / zdist
210           zfract(i) = fract(iof+i)  
211           zrmu0(i) = rmu0(iof+i)      loop_iof: DO iof = 0, klon - kdlon, kdlon
212           PALBD(i,1) = albedo(iof+i)         DO i = 1, kdlon
213  !         PALBD(i,2) = albedo(iof+i)            zfract(i) = fract(iof+i)
214           PALBD(i,2) = alblw(iof+i)            zrmu0(i) = rmu0(iof+i)
215           PALBP(i,1) = albedo(iof+i)            PALBD(i, 1) = albedo(iof+i)
216  !         PALBP(i,2) = albedo(iof+i)            PALBD(i, 2) = alblw(iof+i)
217           PALBP(i,2) = alblw(iof+i)            PALBP(i, 1) = albedo(iof+i)
218  cIM cf. JLD pour etre en accord avec ORCHIDEE il faut mettre PEMIS(i) = 0.96            PALBP(i, 2) = alblw(iof+i)
219           PEMIS(i) = 1.0            ! cf. JLD pour etre en accord avec ORCHIDEE il faut mettre
220           PVIEW(i) = 1.66            ! PEMIS(i) = 0.96
221           PPSOL(i) = paprs(iof+i,1)            PEMIS(i) = 1.0
222           zx_alpha1 = (paprs(iof+i,1)-pplay(iof+i,2))            PVIEW(i) = 1.66
223       .             / (pplay(iof+i,1)-pplay(iof+i,2))            PPSOL(i) = paprs(iof+i, 1)
224           zx_alpha2 = 1.0 - zx_alpha1            zx_alpha1 = (paprs(iof+i, 1)-play(iof+i, 2))  &
225           PTL(i,1) = t(iof+i,1) * zx_alpha1 + t(iof+i,2) * zx_alpha2                 / (play(iof+i, 1)-play(iof+i, 2))
226           PTL(i,klev+1) = t(iof+i,klev)            zx_alpha2 = 1.0 - zx_alpha1
227           PDT0(i) = tsol(iof+i) - PTL(i,1)            PTL(i, 1) = t(iof+i, 1) * zx_alpha1 + t(iof+i, 2) * zx_alpha2
228        ENDDO            PTL(i, klev+1) = t(iof+i, klev)
229        DO k = 2, kflev            PDT0(i) = tsol(iof+i) - PTL(i, 1)
230        DO i = 1, kdlon         ENDDO
231           PTL(i,k) = (t(iof+i,k)+t(iof+i,k-1))*0.5         DO k = 2, klev
232        ENDDO            DO i = 1, kdlon
233        ENDDO               PTL(i, k) = (t(iof+i, k)+t(iof+i, k-1))*0.5
234        DO k = 1, kflev            ENDDO
235        DO i = 1, kdlon         ENDDO
236           PDP(i,k) = paprs(iof+i,k)-paprs(iof+i,k+1)         DO k = 1, klev
237           PTAVE(i,k) = t(iof+i,k)            DO i = 1, kdlon
238           PWV(i,k) = MAX (q(iof+i,k), 1.0e-12)               PDP(i, k) = paprs(iof+i, k)-paprs(iof+i, k+1)
239           PQS(i,k) = PWV(i,k)               PTAVE(i, k) = t(iof+i, k)
240  c wo:    cm.atm (epaisseur en cm dans la situation standard)               PWV(i, k) = MAX (q(iof+i, k), 1.0e-12)
241  c POZON: kg/kg               PQS(i, k) = PWV(i, k)
242           IF (bug_ozone) then               ! wo:    cm.atm (epaisseur en cm dans la situation standard)
243             POZON(i,k) = MAX(wo(iof+i,k),1.0e-12)*RG/46.6968               ! POZON: kg/kg
244       .               /(paprs(iof+i,k)-paprs(iof+i,k+1))               IF (bug_ozone) then
245       .               *(paprs(iof+i,1)/101325.0)                  POZON(i, k) = MAX(wo(iof+i, k), 1.0e-12)*RG/46.6968 &
246           ELSE                       /(paprs(iof+i, k)-paprs(iof+i, k+1)) &
247  c le calcul qui suit est maintenant fait dans ozonecm (MPL)                       *(paprs(iof+i, 1)/101325.0)
248             POZON(i,k) = wo(i,k)               ELSE
249           ENDIF                  ! le calcul qui suit est maintenant fait dans ozonecm (MPL)
250           PCLDLD(i,k) = cldfra(iof+i,k)*cldemi(iof+i,k)                  POZON(i, k) = wo(i, k)
251           PCLDLU(i,k) = cldfra(iof+i,k)*cldemi(iof+i,k)               ENDIF
252           PCLDSW(i,k) = cldfra(iof+i,k)               PCLDLD(i, k) = cldfra(iof+i, k)*cldemi(iof+i, k)
253           PTAU(i,1,k) = MAX(cldtaupi(iof+i,k), 1.0e-05)! 1e-12 serait instable               PCLDLU(i, k) = cldfra(iof+i, k)*cldemi(iof+i, k)
254           PTAU(i,2,k) = MAX(cldtaupi(iof+i,k), 1.0e-05)! pour 32-bit machines               PCLDSW(i, k) = cldfra(iof+i, k)
255           POMEGA(i,1,k) = 0.9999 - 5.0e-04 * EXP(-0.5 * PTAU(i,1,k))               PTAU(i, 1, k) = MAX(cldtaupi(iof+i, k), 1.0e-05)
256           POMEGA(i,2,k) = 0.9988 - 2.5e-03 * EXP(-0.05 * PTAU(i,2,k))               ! (1e-12 serait instable)
257           PCG(i,1,k) = 0.865               PTAU(i, 2, k) = MAX(cldtaupi(iof+i, k), 1.0e-05)
258           PCG(i,2,k) = 0.910               ! (pour 32-bit machines)
259  c-OB               POMEGA(i, 1, k) = 0.9999 - 5.0e-04 * EXP(-0.5 * PTAU(i, 1, k))
260  cjq Introduced for aerosol indirect forcings.               POMEGA(i, 2, k) = 0.9988 - 2.5e-03 * EXP(-0.05 * PTAU(i, 2, k))
261  cjq The following values use the cloud optical thickness calculated from               PCG(i, 1, k) = 0.865
262  cjq present-day aerosol concentrations whereas the quantities without the               PCG(i, 2, k) = 0.910
263  cjq "A" at the end are for pre-industial (natural-only) aerosol concentrations  
264  cjq               ! Introduced for aerosol indirect forcings.  The
265           PTAUA(i,1,k) = MAX(cldtaupd(iof+i,k), 1.0e-05)! 1e-12 serait instable               ! following values use the cloud optical thickness
266           PTAUA(i,2,k) = MAX(cldtaupd(iof+i,k), 1.0e-05)! pour 32-bit machines               ! calculated from present-day aerosol concentrations
267           POMEGAA(i,1,k) = 0.9999 - 5.0e-04 * EXP(-0.5 * PTAUA(i,1,k))               ! whereas the quantities without the "A" at the end are
268           POMEGAA(i,2,k) = 0.9988 - 2.5e-03 * EXP(-0.05 * PTAUA(i,2,k))               ! for pre-industial (natural-only) aerosol concentrations
269  cjq-end               PTAUA(i, 1, k) = MAX(cldtaupd(iof+i, k), 1.0e-05)
270        ENDDO               ! (1e-12 serait instable)
271        ENDDO               PTAUA(i, 2, k) = MAX(cldtaupd(iof+i, k), 1.0e-05)
272  c               ! (pour 32-bit machines)
273        DO k = 1, kflev+1               POMEGAA(i, 1, k) = 0.9999 - 5.0e-04 * EXP(-0.5 * PTAUA(i, 1, k))
274        DO i = 1, kdlon               POMEGAA(i, 2, k) = 0.9988 - 2.5e-03 * EXP(-0.05 * PTAUA(i, 2, k))
275           PPMB(i,k) = paprs(iof+i,k)/100.0               !jq-end
276        ENDDO            ENDDO
277        ENDDO         ENDDO
278  c  
279        DO kk = 1, 5         DO k = 1, klev+1
280        DO k = 1, kflev            DO i = 1, kdlon
281        DO i = 1, kdlon               PPMB(i, k) = paprs(iof+i, k)/100.0
282           PAER(i,k,kk) = 1.0E-15            ENDDO
283        ENDDO         ENDDO
284        ENDDO  
285        ENDDO         DO kk = 1, 5
286  c-OB            DO k = 1, klev
287        DO k = 1, kflev               DO i = 1, kdlon
288        DO i = 1, kdlon                  PAER(i, k, kk) = 1.0E-15
289          tauae(i,k,1)=tau_ae(iof+i,k,1)               ENDDO
290          pizae(i,k,1)=piz_ae(iof+i,k,1)            ENDDO
291          cgae(i,k,1) =cg_ae(iof+i,k,1)         ENDDO
292          tauae(i,k,2)=tau_ae(iof+i,k,2)  
293          pizae(i,k,2)=piz_ae(iof+i,k,2)         DO k = 1, klev
294          cgae(i,k,2) =cg_ae(iof+i,k,2)            DO i = 1, kdlon
295        ENDDO               tauae(i, k, 1) = tau_ae(iof+i, k, 1)
296        ENDDO               pizae(i, k, 1) = piz_ae(iof+i, k, 1)
297  c               cgae(i, k, 1) =cg_ae(iof+i, k, 1)
298  c======================================================================               tauae(i, k, 2) = tau_ae(iof+i, k, 2)
299  cIM ctes ds clesphys.h   CALL LW(RCO2,RCH4,RN2O,RCFC11,RCFC12,               pizae(i, k, 2) = piz_ae(iof+i, k, 2)
300        CALL LW(               cgae(i, k, 2) =cg_ae(iof+i, k, 2)
301       .        PPMB, PDP,            ENDDO
302       .        PPSOL,PDT0,PEMIS,         ENDDO
303       .        PTL, PTAVE, PWV, POZON, PAER,  
304       .        PCLDLD,PCLDLU,         CALL LW(PPMB, PDP, PPSOL, PDT0, PEMIS, PTL, PTAVE, PWV, POZON, PAER, &
305       .        PVIEW,              PCLDLD, PCLDLU, PVIEW, zcool, zcool0, ztoplw, zsollw, ztoplw0, &
306       .        zcool, zcool0,              zsollw0, zsollwdown, ZFLUP, ZFLDN, ZFLUP0, ZFLDN0)
307       .        ztoplw,zsollw,ztoplw0,zsollw0,         CALL SW(PSCT, zrmu0, zfract, PPMB, PDP, PPSOL, PALBD, PALBP, PTAVE, &
308       .        zsollwdown,              PWV, PQS, POZON, PAER, PCLDSW, PTAU, POMEGA, PCG, zheat, zheat0, &
309       .        ZFLUP, ZFLDN, ZFLUP0,ZFLDN0)              zalbpla, ztopsw, zsolsw, ztopsw0, zsolsw0, ZFSUP, ZFSDN, ZFSUP0, &
310  cIM ctes ds clesphys.h   CALL SW(PSCT, RCO2, zrmu0, zfract,              ZFSDN0, tauae, pizae, cgae, PTAUA, POMEGAA, ztopswad, zsolswad, &
311        CALL SW(PSCT, zrmu0, zfract,              ztopswai, zsolswai, ok_ade, ok_aie)
312       S        PPMB, PDP,  
313       S        PPSOL, PALBD, PALBP,         DO i = 1, kdlon
314       S        PTAVE, PWV, PQS, POZON, PAER,            radsol(iof+i) = zsolsw(i) + zsollw(i)
315       S        PCLDSW, PTAU, POMEGA, PCG,            topsw(iof+i) = ztopsw(i)
316       S        zheat, zheat0,            toplw(iof+i) = ztoplw(i)
317       S        zalbpla,ztopsw,zsolsw,ztopsw0,zsolsw0,            solsw(iof+i) = zsolsw(i)
318       S        ZFSUP,ZFSDN,ZFSUP0,ZFSDN0,            sollw(iof+i) = zsollw(i)
319       S        tauae, pizae, cgae, ! aerosol optical properties            sollwdown(iof+i) = zsollwdown(i)
320       s        PTAUA, POMEGAA,  
321       s        ztopswad,zsolswad,ztopswai,zsolswai, ! diagnosed aerosol forcing            DO k = 1, klev+1
322       J        ok_ade, ok_aie) ! apply aerosol effects or not?               lwdn0 ( iof+i, k)   = ZFLDN0 ( i, k)
323                 lwdn  ( iof+i, k)   = ZFLDN  ( i, k)
324  c======================================================================               lwup0 ( iof+i, k)   = ZFLUP0 ( i, k)
325        DO i = 1, kdlon               lwup  ( iof+i, k)   = ZFLUP  ( i, k)
326           radsol(iof+i) = zsolsw(i) + zsollw(i)            ENDDO
327           topsw(iof+i) = ztopsw(i)  
328           toplw(iof+i) = ztoplw(i)            topsw0(iof+i) = ztopsw0(i)
329           solsw(iof+i) = zsolsw(i)            toplw0(iof+i) = ztoplw0(i)
330           sollw(iof+i) = zsollw(i)            solsw0(iof+i) = zsolsw0(i)
331           sollwdown(iof+i) = zsollwdown(i)            sollw0(iof+i) = zsollw0(i)
332  cIM            albpla(iof+i) = zalbpla(i)
333           DO k = 1, kflev+1  
334           lwdn0 ( iof+i,k)   = ZFLDN0 ( i,k)            DO k = 1, klev+1
335           lwdn  ( iof+i,k)   = ZFLDN  ( i,k)               swdn0 ( iof+i, k)   = ZFSDN0 ( i, k)
336           lwup0 ( iof+i,k)   = ZFLUP0 ( i,k)               swdn  ( iof+i, k)   = ZFSDN  ( i, k)
337           lwup  ( iof+i,k)   = ZFLUP  ( i,k)               swup0 ( iof+i, k)   = ZFSUP0 ( i, k)
338           ENDDO               swup  ( iof+i, k)   = ZFSUP  ( i, k)
339  c            ENDDO
340           topsw0(iof+i) = ztopsw0(i)         ENDDO
341           toplw0(iof+i) = ztoplw0(i)         ! transform the aerosol forcings, if they have to be calculated
342           solsw0(iof+i) = zsolsw0(i)         IF (ok_ade) THEN
343           sollw0(iof+i) = zsollw0(i)            DO i = 1, kdlon
344           albpla(iof+i) = zalbpla(i)               topswad(iof+i) = ztopswad(i)
345  cIM               solswad(iof+i) = zsolswad(i)
346           DO k = 1, kflev+1            ENDDO
347           swdn0 ( iof+i,k)   = ZFSDN0 ( i,k)         ELSE
348           swdn  ( iof+i,k)   = ZFSDN  ( i,k)            DO i = 1, kdlon
349           swup0 ( iof+i,k)   = ZFSUP0 ( i,k)               topswad(iof+i) = 0.0
350           swup  ( iof+i,k)   = ZFSUP  ( i,k)               solswad(iof+i) = 0.0
351           ENDDO !k=1, kflev+1            ENDDO
352        ENDDO         ENDIF
353  cjq-transform the aerosol forcings, if they have         IF (ok_aie) THEN
354  cjq to be calculated            DO i = 1, kdlon
355        IF (ok_ade) THEN               topswai(iof+i) = ztopswai(i)
356        DO i = 1, kdlon               solswai(iof+i) = zsolswai(i)
357           topswad(iof+i) = ztopswad(i)            ENDDO
358           solswad(iof+i) = zsolswad(i)         ELSE
359        ENDDO            DO i = 1, kdlon
360        ELSE               topswai(iof+i) = 0.0
361        DO i = 1, kdlon               solswai(iof+i) = 0.0
362           topswad(iof+i) = 0.0            ENDDO
363           solswad(iof+i) = 0.0         ENDIF
364        ENDDO  
365        ENDIF         DO k = 1, klev
366        IF (ok_aie) THEN            DO i = 1, kdlon
367        DO i = 1, kdlon               ! scale factor to take into account the difference
368           topswai(iof+i) = ztopswai(i)               ! between dry air and water vapour specific heat capacity
369           solswai(iof+i) = zsolswai(i)               zznormcp = 1. + RVTMP2 * PWV(i, k)
370        ENDDO               heat(iof+i, k) = zheat(i, k) / zznormcp
371        ELSE               cool(iof+i, k) = zcool(i, k)/zznormcp
372        DO i = 1, kdlon               heat0(iof+i, k) = zheat0(i, k)/zznormcp
373           topswai(iof+i) = 0.0               cool0(iof+i, k) = zcool0(i, k)/zznormcp
374           solswai(iof+i) = 0.0            ENDDO
375        ENDDO         ENDDO
376        ENDIF      end DO loop_iof
377  cjq-end  
378        DO k = 1, kflev    END SUBROUTINE radlwsw
379  c      DO i = 1, kdlon  
380  c         heat(iof+i,k) = zheat(i,k)  end module radlwsw_m
 c         cool(iof+i,k) = zcool(i,k)  
 c         heat0(iof+i,k) = zheat0(i,k)  
 c         cool0(iof+i,k) = zcool0(i,k)  
 c      ENDDO  
       DO i = 1, kdlon  
 C        scale factor to take into account the difference between  
 C        dry air and watter vapour scpecific heat capacity  
          zznormcp=1.0+RVTMP2*PWV(i,k)  
          heat(iof+i,k) = zheat(i,k)/zznormcp  
          cool(iof+i,k) = zcool(i,k)/zznormcp  
          heat0(iof+i,k) = zheat0(i,k)/zznormcp  
          cool0(iof+i,k) = zcool0(i,k)/zznormcp  
       ENDDO  
       ENDDO  
 c  
 99999 CONTINUE  
       RETURN  
       END  

Legend:
Removed from v.52  
changed lines
  Added in v.82

  ViewVC Help
Powered by ViewVC 1.1.21