/[lmdze]/trunk/Sources/phylmd/aeropt.f
ViewVC logotype

Diff of /trunk/Sources/phylmd/aeropt.f

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

trunk/libf/phylmd/aeropt.f revision 38 by guez, Thu Jan 6 17:52:19 2011 UTC trunk/libf/phylmd/aeropt.f90 revision 68 by guez, Wed Nov 14 16:59:30 2012 UTC
# Line 1  Line 1 
1  !  module aeropt_m
2  ! $Header: /home/cvsroot/LMDZ4/libf/phylmd/aeropt.F,v 1.1.1.1 2004/05/19 12:53:09 lmdzadmin Exp $  
3  !    IMPLICIT none
4        SUBROUTINE aeropt(pplay, paprs, t_seri, msulfate, RHcl,  
5       .            tau_ae, piz_ae, cg_ae, ai        )  contains
6  c  
7        use dimens_m    SUBROUTINE aeropt(pplay, paprs, t_seri, msulfate, RHcl, tau_ae, piz_ae, &
8        use dimphy         cg_ae, ai)
9        use SUPHEC_M  
10        IMPLICIT none      ! From LMDZ4/libf/phylmd/aeropt.F, v 1.1.1.1 2004/05/19 12:53:09
11  c  
12  c      ! Author: Olivier Boucher
13  c          ! Calculate aerosol optical properties.
14  c  
15  c Arguments:      USE dimphy, ONLY: klev, klon
16  c      USE suphec_m, ONLY: rd, rg
17        REAL, intent(in):: paprs(klon,klev+1)  
18        REAL, intent(in):: pplay(klon,klev), t_seri(klon,klev)      REAL, intent(in):: pplay(klon, klev), paprs(klon, klev + 1)
19        REAL msulfate(klon,klev) ! masse sulfate ug SO4/m3  [ug/m^3]      REAL, intent(in):: t_seri(klon, klev)
20        REAL RHcl(klon,klev)     ! humidite relative ciel clair  
21        REAL tau_ae(klon,klev,2) ! epaisseur optique aerosol      REAL, intent(in):: msulfate(klon, klev)
22        REAL piz_ae(klon,klev,2) ! single scattering albedo aerosol      ! masse sulfate ug SO4 / m3 (ug / m^3)
23        REAL cg_ae(klon,klev,2)  ! asymmetry parameter aerosol  
24        REAL ai(klon)            ! POLDER aerosol index      REAL, intent(in):: RHcl(klon, klev) ! humidité relative ciel clair
25  c  
26  c Local      REAL, intent(out):: tau_ae(klon, klev, 2) ! épaisseur optique aérosols
27  c      REAL, intent(out):: piz_ae(klon, klev, 2) ! single scattering albedo aerosol
28        INTEGER i, k, inu      REAL, intent(out):: cg_ae(klon, klev, 2) ! asymmetry parameter aerosol
29        INTEGER RH_num, nbre_RH      REAL, intent(out):: ai(klon) ! POLDER aerosol index
30        PARAMETER (nbre_RH=12)  
31        REAL RH_tab(nbre_RH)      ! Local:
32        REAL RH_MAX, DELTA, rh  
33        PARAMETER (RH_MAX=95.)      INTEGER i, k, inu
34        DATA RH_tab/0.,10.,20.,30.,40.,50.,60.,70.,80.,85.,90.,95./      INTEGER RH_num
35        REAL zrho, zdz      INTEGER, PARAMETER:: nbre_RH = 12
36        REAL taue670(klon)       ! epaisseur optique aerosol absorption 550 nm  
37        REAL taue865(klon)       ! epaisseur optique aerosol extinction 865 nm      REAL:: RH_tab(nbre_RH) = (/0., 10., 20., 30., 40., 50., 60., 70., 80., &
38        REAL alpha_aer_sulfate(nbre_RH,5)   !--unit m2/g SO4           85., 90., 95./)
39        REAL alphasulfate        
40  c      REAL DELTA, rh
41  c Proprietes optiques      REAL, PARAMETER:: RH_MAX = 95.
42  c      REAL zrho, zdz
43        REAL alpha_aer(nbre_RH,2)   !--unit m2/g SO4      REAL taue670(klon) ! épaisseur optique aerosol absorption 550 nm
44        REAL cg_aer(nbre_RH,2)      REAL taue865(klon) ! épaisseur optique aerosol extinction 865 nm
45        DATA alpha_aer/.500130E+01,  .500130E+01,  .500130E+01,        REAL alpha_aer_sulfate(nbre_RH, 5) ! unit m2 / g SO4
46       .               .500130E+01,  .500130E+01,  .616710E+01,        REAL alphasulfate
47       .               .826850E+01,  .107687E+02,  .136976E+02,    
48       .               .162972E+02,  .211690E+02,  .354833E+02,        ! Propriétés optiques
49       .               .139460E+01,  .139460E+01,  .139460E+01,    
50       .               .139460E+01,  .139460E+01,  .173910E+01,        REAL alpha_aer(nbre_RH, 2) ! unit m2 / g SO4
51       .               .244380E+01,  .332320E+01,  .440120E+01,        REAL cg_aer(nbre_RH, 2)
52       .               .539570E+01,  .734580E+01,  .136038E+02 /      DATA alpha_aer/.500130E+01, .500130E+01, .500130E+01, &
53        DATA cg_aer/.619800E+00,  .619800E+00,  .619800E+00,             .500130E+01, .500130E+01, .616710E+01, &
54       .            .619800E+00,  .619800E+00,  .662700E+00,             .826850E+01, .107687E+02, .136976E+02, &
55       .            .682100E+00,  .698500E+00,  .712500E+00,             .162972E+02, .211690E+02, .354833E+02, &
56       .            .721800E+00,  .734600E+00,  .755800E+00,             .139460E+01, .139460E+01, .139460E+01, &
57       .            .545600E+00,  .545600E+00,  .545600E+00,             .139460E+01, .139460E+01, .173910E+01, &
58       .            .545600E+00,  .545600E+00,  .583700E+00,             .244380E+01, .332320E+01, .440120E+01, &
59       .            .607100E+00,  .627700E+00,  .645800E+00,             .539570E+01, .734580E+01, .136038E+02 /
60       .            .658400E+00,  .676500E+00,  .708500E+00 /      DATA cg_aer/.619800E+00, .619800E+00, .619800E+00, &
61        DATA alpha_aer_sulfate/           .619800E+00, .619800E+00, .662700E+00, &
62       . 4.910,4.910,4.910,4.910,6.547,7.373,           .682100E+00, .698500E+00, .712500E+00, &
63       . 8.373,9.788,12.167,14.256,17.924,28.433,           .721800E+00, .734600E+00, .755800E+00, &
64       . 1.453,1.453,1.453,1.453,2.003,2.321,           .545600E+00, .545600E+00, .545600E+00, &
65       . 2.711,3.282,4.287,5.210,6.914,12.305,           .545600E+00, .545600E+00, .583700E+00, &
66       . 4.308,4.308,4.308,4.308,5.753,6.521,           .607100E+00, .627700E+00, .645800E+00, &
67       . 7.449,8.772,11.014,12.999,16.518,26.772,           .658400E+00, .676500E+00, .708500E+00 /
68       . 3.265,3.265,3.265,3.265,4.388,5.016,      DATA alpha_aer_sulfate/ &
69       . 5.775,6.868,8.745,10.429,13.457,22.538,           4.910, 4.910, 4.910, 4.910, 6.547, 7.373, &
70       . 2.116,2.116,2.116,2.116,2.882,3.330,           8.373, 9.788, 12.167, 14.256, 17.924, 28.433, &
71       . 3.876,4.670,6.059,7.327,9.650,16.883/           1.453, 1.453, 1.453, 1.453, 2.003, 2.321, &
72  c           2.711, 3.282, 4.287, 5.210, 6.914, 12.305, &
73        DO i=1, klon           4.308, 4.308, 4.308, 4.308, 5.753, 6.521, &
74           taue670(i)=0.0           7.449, 8.772, 11.014, 12.999, 16.518, 26.772, &
75           taue865(i)=0.0           3.265, 3.265, 3.265, 3.265, 4.388, 5.016, &
76        ENDDO           5.775, 6.868, 8.745, 10.429, 13.457, 22.538, &
77  c                 2.116, 2.116, 2.116, 2.116, 2.882, 3.330, &
78        DO k=1, klev           3.876, 4.670, 6.059, 7.327, 9.650, 16.883/
79        DO i=1, klon  
80           if (t_seri(i,k).eq.0) write (*,*) 'aeropt T ',i,k,t_seri(i,k)      !----------------------------------------------------------------------
81           if (pplay(i,k).eq.0) write (*,*) 'aeropt p ',i,k,pplay(i,k)          
82          zrho=pplay(i,k)/t_seri(i,k)/RD                  ! kg/m3      taue670 = 0.
83          zdz=(paprs(i,k)-paprs(i,k+1))/zrho/RG           ! m      taue865 = 0.
84          rh=MIN(RHcl(i,k)*100.,RH_MAX)  
85          RH_num = INT( rh/10. + 1.)      DO k = 1, klev
86          IF (rh.LT.0.) STOP 'aeropt: RH < 0 not possible'         DO i = 1, klon
87          IF (rh.gt.85.) RH_num=10            if (t_seri(i, k).eq.0) write (*, *) 'aeropt T ', i, k, t_seri(i, k)
88          IF (rh.gt.90.) RH_num=11            if (pplay(i, k).eq.0) write (*, *) 'aeropt p ', i, k, pplay(i, k)
89          DELTA=(rh-RH_tab(RH_num))/(RH_tab(RH_num+1)-RH_tab(RH_num))            zrho = pplay(i, k) / t_seri(i, k) / RD ! kg / m3
90  c                            zdz = (paprs(i, k) - paprs(i, k + 1)) / zrho / RG ! m
91          inu=1            rh = MIN(RHcl(i, k) * 100., RH_MAX)
92          tau_ae(i,k,inu)=alpha_aer(RH_num,inu) +            RH_num = INT(rh / 10. + 1.)
93       .             DELTA*(alpha_aer(RH_num+1,inu)-alpha_aer(RH_num,inu))            IF (rh < 0.) then
94          tau_ae(i,k,inu)=tau_ae(i,k,inu)*msulfate(i,k)*zdz*1.e-6               print *, 'aeropt: RH < 0 not possible'
95          piz_ae(i,k,inu)=1.0               STOP 1
96          cg_ae(i,k,inu)=cg_aer(RH_num,inu) +            end IF
97       .                 DELTA*(cg_aer(RH_num+1,inu)-cg_aer(RH_num,inu))            IF (rh > 85.) RH_num = 10
98  c            IF (rh > 90.) RH_num = 11
99          inu=2            DELTA = (rh - RH_tab(RH_num)) / (RH_tab(RH_num + 1) - RH_tab(RH_num))
100          tau_ae(i,k,inu)=alpha_aer(RH_num,inu) +  
101       .             DELTA*(alpha_aer(RH_num+1,inu)-alpha_aer(RH_num,inu))            do inu = 1, 2
102          tau_ae(i,k,inu)=tau_ae(i,k,inu)*msulfate(i,k)*zdz*1.e-6               tau_ae(i, k, inu) = alpha_aer(RH_num, inu) + DELTA &
103          piz_ae(i,k,inu)=1.0                    * (alpha_aer(RH_num + 1, inu) - alpha_aer(RH_num, inu))
104          cg_ae(i,k,inu)=cg_aer(RH_num,inu) +               tau_ae(i, k, inu) = tau_ae(i, k, inu) * msulfate(i, k) * zdz * 1e-6
105       .                 DELTA*(cg_aer(RH_num+1,inu)-cg_aer(RH_num,inu))               piz_ae(i, k, inu) = 1.
106  cjq               cg_ae(i, k, inu) = cg_aer(RH_num, inu) &
107  cjq for aerosol index                    + DELTA * (cg_aer(RH_num + 1, inu) - cg_aer(RH_num, inu))
108  c            end do
109          alphasulfate=alpha_aer_sulfate(RH_num,4) +  
110       .       DELTA*(alpha_aer_sulfate(RH_num+1,4)-            alphasulfate = alpha_aer_sulfate(RH_num, 4) + DELTA &
111       .       alpha_aer_sulfate(RH_num,4)) !--m2/g                 * (alpha_aer_sulfate(RH_num + 1, 4) &
112  c                     - alpha_aer_sulfate(RH_num, 4)) ! m2 / g
113          taue670(i)=taue670(i)+  
114       .       alphasulfate*msulfate(i,k)*zdz*1.e-6            taue670(i) = taue670(i) + alphasulfate * msulfate(i, k) * zdz * 1e-6
115  c  
116          alphasulfate=alpha_aer_sulfate(RH_num,5) +            alphasulfate = alpha_aer_sulfate(RH_num, 5) + DELTA &
117       .       DELTA*(alpha_aer_sulfate(RH_num+1,5)-                 * (alpha_aer_sulfate(RH_num + 1, 5) &
118       .       alpha_aer_sulfate(RH_num,5)) !--m2/g                 - alpha_aer_sulfate(RH_num, 5)) ! m2 / g
119  c  
120          taue865(i)=taue865(i)+            taue865(i) = taue865(i) + alphasulfate * msulfate(i, k) * zdz * 1e-6
121       .         alphasulfate*msulfate(i,k)*zdz*1.e-6         ENDDO
122                ENDDO
123        ENDDO  
124        ENDDO      DO i = 1, klon
125  c               ai(i) = (- log(MAX(taue670(i), 0.0001) / MAX(taue865(i), 0.0001)) &
126        DO i=1, klon              / log(670. / 865.)) * taue865(i)
127          ai(i)=(-log(MAX(taue670(i),0.0001)/      ENDDO
128       .                MAX(taue865(i),0.0001))/log(670./865.)) *  
129       .        taue865(i)    END SUBROUTINE aeropt
130        ENDDO      
131  c  end module aeropt_m
       RETURN  
       END  

Legend:
Removed from v.38  
changed lines
  Added in v.68

  ViewVC Help
Powered by ViewVC 1.1.21