/[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

revision 82 by guez, Wed Mar 5 14:57:53 2014 UTC revision 118 by guez, Thu Dec 18 17:30:24 2014 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, alblw, &
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)  
     ! paprs----input-R- pression a inter-couche (Pa)  
     real, intent(in):: play(klon, klev)  
     ! play----input-R- pression au milieu de couche (Pa)  
54      real tsol(klon), albedo(klon), alblw(klon)      real tsol(klon), albedo(klon), alblw(klon)
55      ! albedo---input-R- albedo du sol (entre 0 et 1)      ! albedo---input-R- albedo du sol (entre 0 et 1)
56      ! tsol-----input-R- temperature du sol (en K)      ! tsol-----input-R- temperature du sol (en K)
# Line 61  contains Line 58  contains
58      ! t--------input-R- temperature (K)      ! t--------input-R- temperature (K)
59      real q(klon, klev)      real q(klon, klev)
60      ! q--------input-R- vapeur d'eau (en kg/kg)      ! q--------input-R- vapeur d'eau (en kg/kg)
61    
62      real, intent(in):: wo(klon, klev)      real, intent(in):: wo(klon, klev)
63      ! wo-------input-R- contenu en ozone (en kg/kg) correction MPL 100505      ! column-density of ozone in a layer, in kilo-Dobsons
64    
65      real cldfra(klon, klev), cldemi(klon, klev)      real cldfra(klon, klev), cldemi(klon, klev)
66      ! cldfra---input-R- fraction nuageuse (entre 0 et 1)      ! cldfra---input-R- fraction nuageuse (entre 0 et 1)
67      ! 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 155  contains Line 154  contains
154      DOUBLE PRECISION PPSOL(kdlon), PDP(kdlon, klev)      DOUBLE PRECISION PPSOL(kdlon), PDP(kdlon, klev)
155      DOUBLE PRECISION PTL(kdlon, klev+1), PPMB(kdlon, klev+1)      DOUBLE PRECISION PTL(kdlon, klev+1), PPMB(kdlon, klev+1)
156      DOUBLE PRECISION PTAVE(kdlon, klev)      DOUBLE PRECISION PTAVE(kdlon, klev)
157      DOUBLE PRECISION PWV(kdlon, klev), PQS(kdlon, klev), POZON(kdlon, klev)      DOUBLE PRECISION PWV(kdlon, klev), PQS(kdlon, klev)
158        DOUBLE PRECISION POZON(kdlon, klev) ! mass fraction of ozone
159      DOUBLE PRECISION PAER(kdlon, klev, 5)      DOUBLE PRECISION PAER(kdlon, klev, 5)
160      DOUBLE PRECISION PCLDLD(kdlon, klev)      DOUBLE PRECISION PCLDLD(kdlon, klev)
161      DOUBLE PRECISION PCLDLU(kdlon, klev)      DOUBLE PRECISION PCLDLU(kdlon, klev)
# Line 164  contains Line 164  contains
164      DOUBLE PRECISION POMEGA(kdlon, 2, klev)      DOUBLE PRECISION POMEGA(kdlon, 2, klev)
165      DOUBLE PRECISION PCG(kdlon, 2, klev)      DOUBLE PRECISION PCG(kdlon, 2, klev)
166    
167      DOUBLE PRECISION zfract(kdlon), zrmu0(kdlon), zdist      DOUBLE PRECISION zfract(kdlon), zrmu0(kdlon)
168    
169      DOUBLE PRECISION zheat(kdlon, klev), zcool(kdlon, klev)      DOUBLE PRECISION zheat(kdlon, klev), zcool(kdlon, klev)
170      DOUBLE PRECISION zheat0(kdlon, klev), zcool0(kdlon, klev)      DOUBLE PRECISION zheat0(kdlon, klev), zcool0(kdlon, klev)
# Line 188  contains Line 188  contains
188      ! Aerosol direct forcing at TOAand surface      ! Aerosol direct forcing at TOAand surface
189    
190      DOUBLE PRECISION ztopswai(kdlon), zsolswai(kdlon) ! dito, indirect      DOUBLE PRECISION ztopswai(kdlon), zsolswai(kdlon) ! dito, indirect
191        real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2
192    
193      !----------------------------------------------------------------------      !----------------------------------------------------------------------
194    
# Line 205  contains Line 206  contains
206      cool = 0.      cool = 0.
207      heat0 = 0.      heat0 = 0.
208      cool0 = 0.      cool0 = 0.
209      zdist = dist      PSCT = solaire / dist**2
     PSCT = solaire / zdist / zdist  
210    
211      loop_iof: DO iof = 0, klon - kdlon, kdlon      loop_iof: DO iof = 0, klon - kdlon, kdlon
212         DO i = 1, kdlon         DO i = 1, kdlon
213            zfract(i) = fract(iof+i)            zfract(i) = fract(iof+i)
214            zrmu0(i) = rmu0(iof+i)            zrmu0(i) = mu0(iof+i)
215            PALBD(i, 1) = albedo(iof+i)            PALBD(i, 1) = albedo(iof+i)
216            PALBD(i, 2) = alblw(iof+i)            PALBD(i, 2) = alblw(iof+i)
217            PALBP(i, 1) = albedo(iof+i)            PALBP(i, 1) = albedo(iof+i)
# Line 239  contains Line 239  contains
239               PTAVE(i, k) = t(iof+i, k)               PTAVE(i, k) = t(iof+i, k)
240               PWV(i, k) = MAX (q(iof+i, k), 1.0e-12)               PWV(i, k) = MAX (q(iof+i, k), 1.0e-12)
241               PQS(i, k) = PWV(i, k)               PQS(i, k) = PWV(i, k)
242               ! wo:    cm.atm (epaisseur en cm dans la situation standard)               POZON(i, k) = wo(iof+i, k) * RG * dobson_u * 1e3 &
243               ! 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  
244               PCLDLD(i, k) = cldfra(iof+i, k)*cldemi(iof+i, k)               PCLDLD(i, k) = cldfra(iof+i, k)*cldemi(iof+i, k)
245               PCLDLU(i, k) = cldfra(iof+i, k)*cldemi(iof+i, k)               PCLDLU(i, k) = cldfra(iof+i, k)*cldemi(iof+i, k)
246               PCLDSW(i, k) = cldfra(iof+i, k)               PCLDSW(i, k) = cldfra(iof+i, k)

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

  ViewVC Help
Powered by ViewVC 1.1.21