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

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

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

trunk/libf/phylmd/Radlwsw/radlwsw.f90 revision 72 by guez, Tue Jul 23 13:00:07 2013 UTC trunk/Sources/phylmd/Radlwsw/radlwsw.f revision 155 by guez, Wed Jul 8 17:03:45 2015 UTC
# Line 4  module radlwsw_m Line 4  module radlwsw_m
4    
5  contains  contains
6    
7    SUBROUTINE radlwsw(dist, rmu0, fract, paprs, play, tsol, albedo, alblw, &    SUBROUTINE radlwsw(dist, mu0, fract, paprs, play, tsol, albedo, &
8         t, q, wo, cldfra, cldemi, cldtaupd, heat, heat0, cool, cool0, radsol, &         t, q, wo, cldfra, cldemi, cldtaupd, heat, heat0, cool, cool0, radsol, &
9         albpla, topsw, toplw, solsw, sollw, sollwdown, topsw0, toplw0, solsw0, &         albpla, topsw, toplw, solsw, sollw, sollwdown, topsw0, toplw0, solsw0, &
10         sollw0, lwdn0, lwdn, lwup0, lwup, swdn0, swdn, swup0, swup, ok_ade, &         sollw0, lwdn0, lwdn, lwup0, lwup, swdn0, swdn, swup0, swup, ok_ade, &
# Line 35  contains Line 35  contains
35      ! aerosol indirect forcing is F_{AI} = topsw - topswai      ! aerosol indirect forcing is F_{AI} = topsw - topswai
36      ! aerosol direct forcing is F_{AD} = topswai - topswad      ! aerosol direct forcing is F_{AD} = topswai - topswad
37    
38      USE clesphys, ONLY: bug_ozone, solaire      USE clesphys, ONLY: solaire
39      USE dimphy, ONLY: klev, klon      USE dimphy, ONLY: klev, klon
40      use lw_m, only: lw      use lw_m, only: lw
41      USE raddim, ONLY: kdlon      USE raddim, ONLY: kdlon
# Line 45  contains Line 45  contains
45                    
46      ! Arguments:      ! Arguments:
47    
48      real dist, rmu0(klon), fract(klon)      real, intent(in):: dist ! distance astronomique terre-soleil
49      ! dist-----input-R- distance astronomique terre-soleil      real, intent(in):: mu0(klon) ! cosinus de l'angle zenithal
50      ! rmu0-----input-R- cosinus de l'angle zenithal      real, intent(in):: fract(klon) ! duree d'ensoleillement normalisee
51      ! fract----input-R- duree d'ensoleillement normalisee      real, intent(in):: paprs(klon, klev+1) ! pression a inter-couche (Pa)
52        real, intent(in):: play(klon, klev) ! pression au milieu de couche (Pa)
53      real, intent(in):: paprs(klon, klev+1)      real, intent(in):: tsol(klon) ! temperature du sol (en K)
54      ! paprs----input-R- pression a inter-couche (Pa)      real, intent(in):: albedo(klon) ! albedo du sol (entre 0 et 1)
55      real, intent(in):: play(klon, klev)      real, intent(in):: t(klon, klev) ! temperature (K)
     ! play----input-R- pression au milieu de couche (Pa)  
     real tsol(klon), albedo(klon), alblw(klon)  
     ! albedo---input-R- albedo du sol (entre 0 et 1)  
     ! tsol-----input-R- temperature du sol (en K)  
     real, intent(in):: t(klon, klev)  
     ! t--------input-R- temperature (K)  
56      real q(klon, klev)      real q(klon, klev)
57      ! q--------input-R- vapeur d'eau (en kg/kg)      ! q--------input-R- vapeur d'eau (en kg/kg)
58    
59      real, intent(in):: wo(klon, klev)      real, intent(in):: wo(klon, klev)
60      ! wo-------input-R- contenu en ozone (en kg/kg) correction MPL 100505      ! column-density of ozone in a layer, in kilo-Dobsons
61    
62      real cldfra(klon, klev), cldemi(klon, klev)      real cldfra(klon, klev), cldemi(klon, klev)
63      ! cldfra---input-R- fraction nuageuse (entre 0 et 1)      ! cldfra---input-R- fraction nuageuse (entre 0 et 1)
64      ! cldemi---input-R- emissivite des nuages dans l'IR (entre 0 et 1)      ! cldemi---input-R- emissivite des nuages dans l'IR (entre 0 et 1)
# Line 79  contains Line 75  contains
75      real cool0(klon, klev)      real cool0(klon, klev)
76      real radsol(klon)      real radsol(klon)
77      ! radsol---output-R- bilan radiatif net au sol (W/m**2) (+ vers le bas)      ! radsol---output-R- bilan radiatif net au sol (W/m**2) (+ vers le bas)
78      real albpla(klon)      real, intent(out):: albpla(klon) ! albedo planetaire (entre 0 et 1)
     ! albpla---output-R- albedo planetaire (entre 0 et 1)  
79      real topsw(klon)      real topsw(klon)
80      ! topsw----output-R- flux solaire net au sommet de l'atm.      ! topsw----output-R- flux solaire net au sommet de l'atm.
81    
# Line 155  contains Line 150  contains
150      DOUBLE PRECISION PPSOL(kdlon), PDP(kdlon, klev)      DOUBLE PRECISION PPSOL(kdlon), PDP(kdlon, klev)
151      DOUBLE PRECISION PTL(kdlon, klev+1), PPMB(kdlon, klev+1)      DOUBLE PRECISION PTL(kdlon, klev+1), PPMB(kdlon, klev+1)
152      DOUBLE PRECISION PTAVE(kdlon, klev)      DOUBLE PRECISION PTAVE(kdlon, klev)
153      DOUBLE PRECISION PWV(kdlon, klev), PQS(kdlon, klev), POZON(kdlon, klev)      DOUBLE PRECISION PWV(kdlon, klev), PQS(kdlon, klev)
154        DOUBLE PRECISION POZON(kdlon, klev) ! mass fraction of ozone
155      DOUBLE PRECISION PAER(kdlon, klev, 5)      DOUBLE PRECISION PAER(kdlon, klev, 5)
156      DOUBLE PRECISION PCLDLD(kdlon, klev)      DOUBLE PRECISION PCLDLD(kdlon, klev)
157      DOUBLE PRECISION PCLDLU(kdlon, klev)      DOUBLE PRECISION PCLDLU(kdlon, klev)
# Line 164  contains Line 160  contains
160      DOUBLE PRECISION POMEGA(kdlon, 2, klev)      DOUBLE PRECISION POMEGA(kdlon, 2, klev)
161      DOUBLE PRECISION PCG(kdlon, 2, klev)      DOUBLE PRECISION PCG(kdlon, 2, klev)
162    
163      DOUBLE PRECISION zfract(kdlon), zrmu0(kdlon), zdist      DOUBLE PRECISION zfract(kdlon), zrmu0(kdlon)
164    
165      DOUBLE PRECISION zheat(kdlon, klev), zcool(kdlon, klev)      DOUBLE PRECISION zheat(kdlon, klev), zcool(kdlon, klev)
166      DOUBLE PRECISION zheat0(kdlon, klev), zcool0(kdlon, klev)      DOUBLE PRECISION zheat0(kdlon, klev), zcool0(kdlon, klev)
# Line 188  contains Line 184  contains
184      ! Aerosol direct forcing at TOAand surface      ! Aerosol direct forcing at TOAand surface
185    
186      DOUBLE PRECISION ztopswai(kdlon), zsolswai(kdlon) ! dito, indirect      DOUBLE PRECISION ztopswai(kdlon), zsolswai(kdlon) ! dito, indirect
187        real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2
188    
189      !----------------------------------------------------------------------      !----------------------------------------------------------------------
190    
# Line 205  contains Line 202  contains
202      cool = 0.      cool = 0.
203      heat0 = 0.      heat0 = 0.
204      cool0 = 0.      cool0 = 0.
205      zdist = dist      PSCT = solaire / dist**2
     PSCT = solaire / zdist / zdist  
206    
207      loop_iof: DO iof = 0, klon - kdlon, kdlon      loop_iof: DO iof = 0, klon - kdlon, kdlon
208         DO i = 1, kdlon         DO i = 1, kdlon
209            zfract(i) = fract(iof+i)            zfract(i) = fract(iof+i)
210            zrmu0(i) = rmu0(iof+i)            zrmu0(i) = mu0(iof+i)
211            PALBD(i, 1) = albedo(iof+i)            PALBD(i, 1) = albedo(iof+i)
212            PALBD(i, 2) = alblw(iof+i)            PALBD(i, 2) = albedo(iof+i)
213            PALBP(i, 1) = albedo(iof+i)            PALBP(i, 1) = albedo(iof+i)
214            PALBP(i, 2) = alblw(iof+i)            PALBP(i, 2) = albedo(iof+i)
215            ! cf. JLD pour etre en accord avec ORCHIDEE il faut mettre            ! cf. JLD pour etre en accord avec ORCHIDEE il faut mettre
216            ! PEMIS(i) = 0.96            ! PEMIS(i) = 0.96
217            PEMIS(i) = 1.0            PEMIS(i) = 1.0
# Line 239  contains Line 235  contains
235               PTAVE(i, k) = t(iof+i, k)               PTAVE(i, k) = t(iof+i, k)
236               PWV(i, k) = MAX (q(iof+i, k), 1.0e-12)               PWV(i, k) = MAX (q(iof+i, k), 1.0e-12)
237               PQS(i, k) = PWV(i, k)               PQS(i, k) = PWV(i, k)
238               ! wo:    cm.atm (epaisseur en cm dans la situation standard)               POZON(i, k) = wo(iof+i, k) * RG * dobson_u * 1e3 &
239               ! POZON: kg/kg                    / (paprs(iof+i, k) - paprs(iof+i, k+1))
              IF (bug_ozone) then  
                 POZON(i, k) = MAX(wo(iof+i, k), 1.0e-12)*RG/46.6968 &  
                      /(paprs(iof+i, k)-paprs(iof+i, k+1)) &  
                      *(paprs(iof+i, 1)/101325.0)  
              ELSE  
                 ! le calcul qui suit est maintenant fait dans ozonecm (MPL)  
                 POZON(i, k) = wo(i, k)  
              ENDIF  
240               PCLDLD(i, k) = cldfra(iof+i, k)*cldemi(iof+i, k)               PCLDLD(i, k) = cldfra(iof+i, k)*cldemi(iof+i, k)
241               PCLDLU(i, k) = cldfra(iof+i, k)*cldemi(iof+i, k)               PCLDLU(i, k) = cldfra(iof+i, k)*cldemi(iof+i, k)
242               PCLDSW(i, k) = cldfra(iof+i, k)               PCLDSW(i, k) = cldfra(iof+i, k)
# Line 301  contains Line 289  contains
289            ENDDO            ENDDO
290         ENDDO         ENDDO
291    
292         CALL LW(PPMB, PDP, PPSOL, PDT0, PEMIS, PTL, PTAVE, PWV, POZON, PAER, &         CALL LW(PPMB, PDP, PDT0, PEMIS, PTL, PTAVE, PWV, POZON, PAER, PCLDLD, &
293              PCLDLD, PCLDLU, PVIEW, zcool, zcool0, ztoplw, zsollw, ztoplw0, &              PCLDLU, PVIEW, zcool, zcool0, ztoplw, zsollw, ztoplw0, zsollw0, &
294              zsollw0, zsollwdown, ZFLUP, ZFLDN, ZFLUP0, ZFLDN0)              zsollwdown, ZFLUP, ZFLDN, ZFLUP0, ZFLDN0)
295         CALL SW(PSCT, zrmu0, zfract, PPMB, PDP, PPSOL, PALBD, PALBP, PTAVE, &         CALL SW(PSCT, zrmu0, zfract, PPMB, PDP, PPSOL, PALBD, PALBP, PTAVE, &
296              PWV, PQS, POZON, PAER, PCLDSW, PTAU, POMEGA, PCG, zheat, zheat0, &              PWV, PQS, POZON, PAER, PCLDSW, PTAU, POMEGA, PCG, zheat, zheat0, &
297              zalbpla, ztopsw, zsolsw, ztopsw0, zsolsw0, ZFSUP, ZFSDN, ZFSUP0, &              zalbpla, ztopsw, zsolsw, ztopsw0, zsolsw0, ZFSUP, ZFSDN, ZFSUP0, &

Legend:
Removed from v.72  
changed lines
  Added in v.155

  ViewVC Help
Powered by ViewVC 1.1.21