source: LMDZ5/branches/testing/libf/phylmd/readaerosol_optic.F90 @ 1910

Last change on this file since 1910 was 1910, checked in by Laurent Fairhead, 11 years ago

Merged trunk changes r1860:1909 into testing branch

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
File size: 9.5 KB
RevLine 
[1179]1! $Id$
2!
[1237]3SUBROUTINE readaerosol_optic(debut, new_aod, flag_aerosol, itap, rjourvrai, &
4     pdtphys, pplay, paprs, t_seri, rhcl, presnivs, &
[1183]5     mass_solu_aero, mass_solu_aero_pi, &
[1181]6     tau_aero, piz_aero, cg_aero, &
7     tausum_aero, tau3d_aero )
[1179]8
9! This routine will :
10! 1) recevie the aerosols(already read and interpolated) corresponding to flag_aerosol
11! 2) calculate the optical properties for the aerosols
12!
[1150]13 
14  USE dimphy
[1183]15  USE aero_mod
[1337]16  USE phys_local_var_mod, only: sconcso4,sconcoa,sconcbc,sconcss,sconcdust, &
17      concso4,concoa,concbc,concss,concdust,loadso4,loadoa,loadbc,loadss,loaddust, &
18      load_tmp1,load_tmp2,load_tmp3,load_tmp4,load_tmp5,load_tmp6,load_tmp7
[1150]19  IMPLICIT NONE
20
21! Input arguments
[1179]22!****************************************************************************************
[1150]23  LOGICAL, INTENT(IN)                      :: debut
24  LOGICAL, INTENT(IN)                      :: new_aod
25  INTEGER, INTENT(IN)                      :: flag_aerosol
[1237]26  INTEGER, INTENT(IN)                      :: itap
[1150]27  REAL, INTENT(IN)                         :: rjourvrai
28  REAL, INTENT(IN)                         :: pdtphys
29  REAL, DIMENSION(klon,klev), INTENT(IN)   :: pplay
30  REAL, DIMENSION(klon,klev+1), INTENT(IN) :: paprs
31  REAL, DIMENSION(klon,klev), INTENT(IN)   :: t_seri
32  REAL, DIMENSION(klon,klev), INTENT(IN)   :: rhcl   ! humidite relative ciel clair
[1221]33  REAL, DIMENSION(klev), INTENT(IN)        :: presnivs
[1150]34
35! Output arguments
[1179]36!****************************************************************************************
[1183]37  REAL, DIMENSION(klon,klev), INTENT(OUT)     :: mass_solu_aero    ! Total mass for all soluble aerosols
38  REAL, DIMENSION(klon,klev), INTENT(OUT)     :: mass_solu_aero_pi !     -"-     preindustrial values
[1181]39  REAL, DIMENSION(klon,klev,naero_grp,nbands), INTENT(OUT) :: tau_aero    ! Aerosol optical thickness
40  REAL, DIMENSION(klon,klev,naero_grp,nbands), INTENT(OUT) :: piz_aero    ! Single scattering albedo aerosol
41  REAL, DIMENSION(klon,klev,naero_grp,nbands), INTENT(OUT) :: cg_aero     ! asymmetry parameter aerosol
42  REAL, DIMENSION(klon,nwave,naero_spc), INTENT(OUT)       :: tausum_aero
43  REAL, DIMENSION(klon,klev,nwave,naero_spc), INTENT(OUT)  :: tau3d_aero
[1150]44
45! Local variables
[1179]46!****************************************************************************************
[1150]47  REAL, DIMENSION(klon)        :: aerindex ! POLDER aerosol index
48  REAL, DIMENSION(klon,klev)   :: sulfate  ! SO4 aerosol concentration [ug/m3]
49  REAL, DIMENSION(klon,klev)   :: bcsol    ! BC soluble concentration [ug/m3]
50  REAL, DIMENSION(klon,klev)   :: bcins    ! BC insoluble concentration [ug/m3]
51  REAL, DIMENSION(klon,klev)   :: pomsol   ! POM soluble concentration [ug/m3]
52  REAL, DIMENSION(klon,klev)   :: pomins   ! POM insoluble concentration [ug/m3]
[1181]53  REAL, DIMENSION(klon,klev)   :: cidust    ! DUST aerosol concentration  [ug/m3]
54  REAL, DIMENSION(klon,klev)   :: sscoarse  ! SS Coarse concentration [ug/m3]
55  REAL, DIMENSION(klon,klev)   :: sssupco   ! SS Super Coarse concentration [ug/m3]
56  REAL, DIMENSION(klon,klev)   :: ssacu     ! SS Acumulation concentration [ug/m3]
[1150]57  REAL, DIMENSION(klon,klev)   :: sulfate_pi
58  REAL, DIMENSION(klon,klev)   :: bcsol_pi
59  REAL, DIMENSION(klon,klev)   :: bcins_pi
60  REAL, DIMENSION(klon,klev)   :: pomsol_pi
61  REAL, DIMENSION(klon,klev)   :: pomins_pi
[1181]62  REAL, DIMENSION(klon,klev)   :: cidust_pi
63  REAL, DIMENSION(klon,klev)   :: sscoarse_pi
64  REAL, DIMENSION(klon,klev)   :: sssupco_pi
65  REAL, DIMENSION(klon,klev)   :: ssacu_pi
[1150]66  REAL, DIMENSION(klon,klev)   :: pdel
[1181]67  REAL, DIMENSION(klon,klev,naero_spc) :: m_allaer
[1246]68  REAL, DIMENSION(klon,klev,naero_spc) :: m_allaer_pi !RAF 
69!  REAL, DIMENSION(klon,naero_tot)      :: fractnat_allaer !RAF delete??
[1150]70
[1179]71  INTEGER :: k, i
[1150]72 
[1179]73!****************************************************************************************
74! 1) Get aerosol mass
75!   
76!****************************************************************************************
77! Read and interpolate sulfate
[1150]78  IF ( flag_aerosol .EQ. 1 .OR. &
79       flag_aerosol .EQ. 6 ) THEN
80
[1337]81     CALL readaerosol_interp(id_ASSO4M, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sulfate, sulfate_pi,loadso4)
[1179]82  ELSE
83     sulfate(:,:) = 0. ; sulfate_pi(:,:) = 0.
[1337]84     loadso4=0.
[1179]85  END IF
[1150]86
[1179]87! Read and interpolate bcsol and bcins
[1150]88  IF ( flag_aerosol .EQ. 2 .OR. &
[1181]89       flag_aerosol .EQ. 6 ) THEN
[1150]90
91     ! Get bc aerosol distribution
[1337]92     CALL readaerosol_interp(id_ASBCM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, bcsol, bcsol_pi, load_tmp1 )
93     CALL readaerosol_interp(id_AIBCM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, bcins, bcins_pi, load_tmp2 )
94     loadbc(:)=load_tmp1(:)+load_tmp2(:)
[1179]95  ELSE
96     bcsol(:,:) = 0. ; bcsol_pi(:,:) = 0.
97     bcins(:,:) = 0. ; bcins_pi(:,:) = 0.
[1337]98     loadbc=0.
[1179]99  END IF
[1150]100
101
[1179]102! Read and interpolate pomsol and pomins
[1150]103  IF ( flag_aerosol .EQ. 3 .OR. &
104       flag_aerosol .EQ. 6 ) THEN
105
[1337]106     CALL readaerosol_interp(id_ASPOMM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomsol, pomsol_pi, load_tmp3)
107     CALL readaerosol_interp(id_AIPOMM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomins, pomins_pi, load_tmp4)
108     loadoa(:)=load_tmp3(:)+load_tmp4(:)
[1179]109  ELSE
110     pomsol(:,:) = 0. ; pomsol_pi(:,:) = 0.
111     pomins(:,:) = 0. ; pomins_pi(:,:) = 0.
[1337]112     loadoa=0.
[1179]113  END IF
[1150]114
115
[1181]116! Read and interpolate csssm, ssssm, assssm
117  IF (flag_aerosol .EQ. 4 .OR. &
118      flag_aerosol .EQ. 6 ) THEN
119
[1337]120      CALL readaerosol_interp(id_SSSSM ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sssupco, sssupco_pi, load_tmp5)
121      CALL readaerosol_interp(id_CSSSM ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sscoarse,sscoarse_pi, load_tmp6)
122      CALL readaerosol_interp(id_ASSSM ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, ssacu, ssacu_pi, load_tmp7)
123     loadss(:)=load_tmp5(:)+load_tmp6(:)+load_tmp7(:)
[1181]124  ELSE
125     sscoarse(:,:) = 0. ; sscoarse_pi(:,:) = 0.
[1221]126     ssacu(:,:)    = 0. ; ssacu_pi(:,:) = 0.
127     sssupco(:,:)  = 0. ; sssupco_pi = 0.
[1337]128     loadss=0.
[1181]129  ENDIF
130
131! Read and interpolate cidustm
132  IF (flag_aerosol .EQ. 5 .OR.  &
133      flag_aerosol .EQ. 6 ) THEN
134
[1337]135      CALL readaerosol_interp(id_CIDUSTM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, cidust, cidust_pi, loaddust)
[1181]136
137  ELSE
138      cidust(:,:) = 0. ; cidust_pi(:,:) = 0.
[1337]139      loaddust=0.
[1181]140  ENDIF
141
142!
[1179]143! Store all aerosols in one variable
[1150]144!
[1221]145  m_allaer(:,:,id_ASBCM)  = bcsol(:,:)        ! ASBCM
146  m_allaer(:,:,id_ASPOMM) = pomsol(:,:)       ! ASPOMM
147  m_allaer(:,:,id_ASSO4M) = sulfate(:,:)      ! ASSO4M (= SO4)
148  m_allaer(:,:,id_CSSO4M) = 0.                ! CSSO4M
149  m_allaer(:,:,id_SSSSM)  = sssupco(:,:)      ! SSSSM
150  m_allaer(:,:,id_CSSSM)  = sscoarse(:,:)     ! CSSSM
151  m_allaer(:,:,id_ASSSM)  = ssacu(:,:)        ! ASSSM
152  m_allaer(:,:,id_CIDUSTM)= cidust(:,:)       ! CIDUSTM
153  m_allaer(:,:,id_AIBCM)  = bcins(:,:)        ! AIBCM
154  m_allaer(:,:,id_AIPOMM) = pomins(:,:)       ! AIPOMM
[1150]155
[1246]156!RAF
157  m_allaer_pi(:,:,1)  = bcsol_pi(:,:)        ! ASBCM pre-ind
158  m_allaer_pi(:,:,2)  = pomsol_pi(:,:)       ! ASPOMM pre-ind
159  m_allaer_pi(:,:,3)  = sulfate_pi(:,:)      ! ASSO4M (= SO4) pre-ind
160  m_allaer_pi(:,:,4)  = 0.                ! CSSO4M pre-ind
161  m_allaer_pi(:,:,5)  = sssupco_pi(:,:)      ! SSSSM pre-ind
162  m_allaer_pi(:,:,6)  = sscoarse_pi(:,:)     ! CSSSM pre-ind
163  m_allaer_pi(:,:,7)  = ssacu_pi(:,:)        ! ASSSM pre-ind
164  m_allaer_pi(:,:,8)  = cidust_pi(:,:)       ! CIDUSTM pre-ind
165  m_allaer_pi(:,:,9)  = bcins_pi(:,:)        ! AIBCM pre-ind
166  m_allaer_pi(:,:,10) = pomins_pi(:,:)       ! AIPOMM pre-ind
167
[1150]168!
[1183]169! Calculate the total mass of all soluble aersosols
[1150]170!
[1246]171  mass_solu_aero(:,:)    = sulfate(:,:)    + bcsol(:,:)    + pomsol(:,:) !   + &
172!       sscoarse(:,:)    + ssacu(:,:)    + sssupco(:,:)
173  mass_solu_aero_pi(:,:) = sulfate_pi(:,:) + bcsol_pi(:,:) + pomsol_pi(:,:) ! + &
174!       sscoarse_pi(:,:) + ssacu_pi(:,:) + sssupco_pi(:,:)
[1179]175
176!****************************************************************************************
177! 2) Calculate optical properties for the aerosols
178!
179!****************************************************************************************
[1150]180  DO k = 1, klev
[1179]181     DO i = 1, klon
182        pdel(i,k) = paprs(i,k) - paprs (i,k+1)
183     END DO
[1150]184  END DO
185
[1179]186  IF (new_aod) THEN
187
[1246]188! RAF delete??     fractnat_allaer(:,:) = 0.
189! RAF fractnat_allaer -> m_allaer_pi
190
191     CALL aeropt_2bands( &
[1150]192          pdel, m_allaer, pdtphys, rhcl, &
193          tau_aero, piz_aero, cg_aero,   &
[1246]194          m_allaer_pi, flag_aerosol, &
[1221]195          pplay, t_seri, presnivs)
[1179]196     
197     ! aeropt_5wv only for validation and diagnostics.
[1237]198     CALL aeropt_5wv(                    &
199          pdel, m_allaer,                &
200          pdtphys, rhcl, aerindex,       &
201          flag_aerosol, pplay, t_seri,   &
[1221]202          tausum_aero, tau3d_aero, presnivs)
[1179]203  ELSE
[1150]204
[1179]205     CALL aeropt(pplay, paprs, t_seri, sulfate, rhcl, &
[1221]206          tau_aero(:,:,id_ASSO4M,:), piz_aero(:,:,id_ASSO4M,:), cg_aero(:,:,id_ASSO4M,:), aerindex)
[1179]207     
208  END IF
209
[1337]210
211! Diagnostics calculation for CMIP5 protocol
212  sconcso4(:)=m_allaer(:,1,id_ASSO4M)*1.e-9
213  sconcoa(:)=(m_allaer(:,1,id_ASPOMM)+m_allaer(:,1,id_AIPOMM))*1.e-9
214  sconcbc(:)=(m_allaer(:,1,id_ASBCM)+m_allaer(:,1,id_AIBCM))*1.e-9
215  sconcss(:)=(m_allaer(:,1,id_ASSSM)+m_allaer(:,1,id_CSSSM)+m_allaer(:,1,id_SSSSM))*1.e-9
216  sconcdust(:)=m_allaer(:,1,id_CIDUSTM)*1.e-9
217  concso4(:,:)=m_allaer(:,:,id_ASSO4M)*1.e-9
218  concoa(:,:)=(m_allaer(:,:,id_ASPOMM)+m_allaer(:,:,id_AIPOMM))*1.e-9
219  concbc(:,:)=(m_allaer(:,:,id_ASBCM)+m_allaer(:,:,id_AIBCM))*1.e-9
220  concss(:,:)=(m_allaer(:,:,id_ASSSM)+m_allaer(:,:,id_CSSSM)+m_allaer(:,:,id_SSSSM))*1.e-9
221  concdust(:,:)=m_allaer(:,:,id_CIDUSTM)*1.e-9
222
223
[1179]224END SUBROUTINE readaerosol_optic
Note: See TracBrowser for help on using the repository browser.