| Line |
Branch |
Exec |
Source |
| 1 |
|
|
! $Id: readaerosol_optic.F90 3630 2020-02-10 10:04:40Z fairhead $ |
| 2 |
|
|
! |
| 3 |
|
✗ |
SUBROUTINE readaerosol_optic(debut, flag_aerosol, itap, rjourvrai, & |
| 4 |
|
✗ |
pdtphys, pplay, paprs, t_seri, rhcl, presnivs, & |
| 5 |
|
|
mass_solu_aero, mass_solu_aero_pi, & |
| 6 |
|
✗ |
tau_aero, piz_aero, cg_aero, & |
| 7 |
|
✗ |
tausum_aero, tau3d_aero ) |
| 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 |
|
|
! |
| 13 |
|
|
|
| 14 |
|
|
USE dimphy |
| 15 |
|
|
USE aero_mod |
| 16 |
|
|
USE phys_local_var_mod, only: sconcso4,sconcno3,sconcoa,sconcbc,sconcss,sconcdust, & |
| 17 |
|
|
concso4,concno3,concoa,concbc,concss,concdust,loadso4,loadoa,loadbc,loadss,loaddust, & |
| 18 |
|
|
load_tmp1,load_tmp2,load_tmp3,load_tmp4,load_tmp5,load_tmp6,load_tmp7 |
| 19 |
|
|
IMPLICIT NONE |
| 20 |
|
|
|
| 21 |
|
|
! Input arguments |
| 22 |
|
|
!**************************************************************************************** |
| 23 |
|
|
LOGICAL, INTENT(IN) :: debut |
| 24 |
|
|
INTEGER, INTENT(IN) :: flag_aerosol |
| 25 |
|
|
INTEGER, INTENT(IN) :: itap |
| 26 |
|
|
REAL, INTENT(IN) :: rjourvrai |
| 27 |
|
|
REAL, INTENT(IN) :: pdtphys |
| 28 |
|
|
REAL, DIMENSION(klon,klev), INTENT(IN) :: pplay |
| 29 |
|
|
REAL, DIMENSION(klon,klev+1), INTENT(IN) :: paprs |
| 30 |
|
|
REAL, DIMENSION(klon,klev), INTENT(IN) :: t_seri |
| 31 |
|
|
REAL, DIMENSION(klon,klev), INTENT(IN) :: rhcl ! humidite relative ciel clair |
| 32 |
|
|
REAL, DIMENSION(klev), INTENT(IN) :: presnivs |
| 33 |
|
|
|
| 34 |
|
|
! Output arguments |
| 35 |
|
|
!**************************************************************************************** |
| 36 |
|
|
REAL, DIMENSION(klon,klev), INTENT(OUT) :: mass_solu_aero ! Total mass for all soluble aerosols |
| 37 |
|
|
REAL, DIMENSION(klon,klev), INTENT(OUT) :: mass_solu_aero_pi ! -"- preindustrial values |
| 38 |
|
|
REAL, DIMENSION(klon,klev,naero_grp,nbands), INTENT(OUT) :: tau_aero ! Aerosol optical thickness |
| 39 |
|
|
REAL, DIMENSION(klon,klev,naero_grp,nbands), INTENT(OUT) :: piz_aero ! Single scattering albedo aerosol |
| 40 |
|
|
REAL, DIMENSION(klon,klev,naero_grp,nbands), INTENT(OUT) :: cg_aero ! asymmetry parameter aerosol |
| 41 |
|
|
! REAL, DIMENSION(klon,nwave,naero_spc), INTENT(OUT) :: tausum_aero |
| 42 |
|
|
! REAL, DIMENSION(klon,klev,nwave,naero_spc), INTENT(OUT) :: tau3d_aero |
| 43 |
|
|
!--correction mini bug OB |
| 44 |
|
|
REAL, DIMENSION(klon,nwave,naero_tot), INTENT(OUT) :: tausum_aero |
| 45 |
|
|
REAL, DIMENSION(klon,klev,nwave,naero_tot), INTENT(OUT) :: tau3d_aero |
| 46 |
|
|
|
| 47 |
|
|
! Local variables |
| 48 |
|
|
!**************************************************************************************** |
| 49 |
|
✗ |
REAL, DIMENSION(klon) :: aerindex ! POLDER aerosol index |
| 50 |
|
✗ |
REAL, DIMENSION(klon,klev) :: sulfate ! SO4 aerosol concentration [ug/m3] |
| 51 |
|
✗ |
REAL, DIMENSION(klon,klev) :: bcsol ! BC soluble concentration [ug/m3] |
| 52 |
|
✗ |
REAL, DIMENSION(klon,klev) :: bcins ! BC insoluble concentration [ug/m3] |
| 53 |
|
✗ |
REAL, DIMENSION(klon,klev) :: pomsol ! POM soluble concentration [ug/m3] |
| 54 |
|
✗ |
REAL, DIMENSION(klon,klev) :: pomins ! POM insoluble concentration [ug/m3] |
| 55 |
|
✗ |
REAL, DIMENSION(klon,klev) :: cidust ! DUST aerosol concentration [ug/m3] |
| 56 |
|
✗ |
REAL, DIMENSION(klon,klev) :: sscoarse ! SS Coarse concentration [ug/m3] |
| 57 |
|
✗ |
REAL, DIMENSION(klon,klev) :: sssupco ! SS Super Coarse concentration [ug/m3] |
| 58 |
|
✗ |
REAL, DIMENSION(klon,klev) :: ssacu ! SS Acumulation concentration [ug/m3] |
| 59 |
|
✗ |
REAL, DIMENSION(klon,klev) :: sulfate_pi |
| 60 |
|
✗ |
REAL, DIMENSION(klon,klev) :: bcsol_pi |
| 61 |
|
✗ |
REAL, DIMENSION(klon,klev) :: bcins_pi |
| 62 |
|
✗ |
REAL, DIMENSION(klon,klev) :: pomsol_pi |
| 63 |
|
✗ |
REAL, DIMENSION(klon,klev) :: pomins_pi |
| 64 |
|
✗ |
REAL, DIMENSION(klon,klev) :: cidust_pi |
| 65 |
|
✗ |
REAL, DIMENSION(klon,klev) :: sscoarse_pi |
| 66 |
|
✗ |
REAL, DIMENSION(klon,klev) :: sssupco_pi |
| 67 |
|
✗ |
REAL, DIMENSION(klon,klev) :: ssacu_pi |
| 68 |
|
✗ |
REAL, DIMENSION(klon,klev) :: pdel |
| 69 |
|
✗ |
REAL, DIMENSION(klon,klev,naero_tot) :: m_allaer |
| 70 |
|
✗ |
REAL, DIMENSION(klon,klev,naero_tot) :: m_allaer_pi !RAF |
| 71 |
|
|
! REAL, DIMENSION(klon,naero_tot) :: fractnat_allaer !RAF delete?? |
| 72 |
|
|
|
| 73 |
|
|
INTEGER :: k, i |
| 74 |
|
|
|
| 75 |
|
|
!**************************************************************************************** |
| 76 |
|
|
! 1) Get aerosol mass |
| 77 |
|
|
! |
| 78 |
|
|
!**************************************************************************************** |
| 79 |
|
|
! Read and interpolate sulfate |
| 80 |
|
✗ |
IF ( flag_aerosol .EQ. 1 .OR. & |
| 81 |
|
|
flag_aerosol .EQ. 6 ) THEN |
| 82 |
|
|
|
| 83 |
|
✗ |
CALL readaerosol_interp(id_ASSO4M_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sulfate, sulfate_pi,loadso4) |
| 84 |
|
|
ELSE |
| 85 |
|
✗ |
sulfate(:,:) = 0. ; sulfate_pi(:,:) = 0. |
| 86 |
|
✗ |
loadso4=0. |
| 87 |
|
|
END IF |
| 88 |
|
|
|
| 89 |
|
|
! Read and interpolate bcsol and bcins |
| 90 |
|
✗ |
IF ( flag_aerosol .EQ. 2 .OR. & |
| 91 |
|
|
flag_aerosol .EQ. 6 ) THEN |
| 92 |
|
|
|
| 93 |
|
|
! Get bc aerosol distribution |
| 94 |
|
✗ |
CALL readaerosol_interp(id_ASBCM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, bcsol, bcsol_pi, load_tmp1) |
| 95 |
|
✗ |
CALL readaerosol_interp(id_AIBCM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, bcins, bcins_pi, load_tmp2) |
| 96 |
|
✗ |
loadbc(:)=load_tmp1(:)+load_tmp2(:) |
| 97 |
|
|
ELSE |
| 98 |
|
✗ |
bcsol(:,:) = 0. ; bcsol_pi(:,:) = 0. |
| 99 |
|
✗ |
bcins(:,:) = 0. ; bcins_pi(:,:) = 0. |
| 100 |
|
✗ |
loadbc=0. |
| 101 |
|
|
END IF |
| 102 |
|
|
|
| 103 |
|
|
|
| 104 |
|
|
! Read and interpolate pomsol and pomins |
| 105 |
|
✗ |
IF ( flag_aerosol .EQ. 3 .OR. & |
| 106 |
|
|
flag_aerosol .EQ. 6 ) THEN |
| 107 |
|
|
|
| 108 |
|
✗ |
CALL readaerosol_interp(id_ASPOMM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomsol, pomsol_pi, load_tmp3) |
| 109 |
|
✗ |
CALL readaerosol_interp(id_AIPOMM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomins, pomins_pi, load_tmp4) |
| 110 |
|
✗ |
loadoa(:)=load_tmp3(:)+load_tmp4(:) |
| 111 |
|
|
ELSE |
| 112 |
|
✗ |
pomsol(:,:) = 0. ; pomsol_pi(:,:) = 0. |
| 113 |
|
✗ |
pomins(:,:) = 0. ; pomins_pi(:,:) = 0. |
| 114 |
|
✗ |
loadoa=0. |
| 115 |
|
|
END IF |
| 116 |
|
|
|
| 117 |
|
|
|
| 118 |
|
|
! Read and interpolate csssm, ssssm, assssm |
| 119 |
|
✗ |
IF (flag_aerosol .EQ. 4 .OR. & |
| 120 |
|
|
flag_aerosol .EQ. 6 ) THEN |
| 121 |
|
|
|
| 122 |
|
✗ |
CALL readaerosol_interp(id_SSSSM_phy ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sssupco, sssupco_pi, load_tmp5) |
| 123 |
|
✗ |
CALL readaerosol_interp(id_CSSSM_phy ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sscoarse,sscoarse_pi, load_tmp6) |
| 124 |
|
✗ |
CALL readaerosol_interp(id_ASSSM_phy ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, ssacu, ssacu_pi, load_tmp7) |
| 125 |
|
✗ |
loadss(:)=load_tmp5(:)+load_tmp6(:)+load_tmp7(:) |
| 126 |
|
|
ELSE |
| 127 |
|
✗ |
sscoarse(:,:) = 0. ; sscoarse_pi(:,:) = 0. |
| 128 |
|
✗ |
ssacu(:,:) = 0. ; ssacu_pi(:,:) = 0. |
| 129 |
|
✗ |
sssupco(:,:) = 0. ; sssupco_pi = 0. |
| 130 |
|
✗ |
loadss=0. |
| 131 |
|
|
ENDIF |
| 132 |
|
|
|
| 133 |
|
|
! Read and interpolate cidustm |
| 134 |
|
✗ |
IF (flag_aerosol .EQ. 5 .OR. & |
| 135 |
|
|
flag_aerosol .EQ. 6 ) THEN |
| 136 |
|
|
|
| 137 |
|
✗ |
CALL readaerosol_interp(id_CIDUSTM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, cidust, cidust_pi, loaddust) |
| 138 |
|
|
ELSE |
| 139 |
|
✗ |
cidust(:,:) = 0. ; cidust_pi(:,:) = 0. |
| 140 |
|
✗ |
loaddust=0. |
| 141 |
|
|
ENDIF |
| 142 |
|
|
|
| 143 |
|
|
! |
| 144 |
|
|
! Store all aerosols in one variable |
| 145 |
|
|
! |
| 146 |
|
✗ |
m_allaer(:,:,id_ASBCM_phy) = bcsol(:,:) ! ASBCM |
| 147 |
|
✗ |
m_allaer(:,:,id_ASPOMM_phy) = pomsol(:,:) ! ASPOMM |
| 148 |
|
✗ |
m_allaer(:,:,id_ASSO4M_phy) = sulfate(:,:) ! ASSO4M (= SO4) |
| 149 |
|
✗ |
m_allaer(:,:,id_CSSO4M_phy) = 0. ! CSSO4M |
| 150 |
|
✗ |
m_allaer(:,:,id_SSSSM_phy) = sssupco(:,:) ! SSSSM |
| 151 |
|
✗ |
m_allaer(:,:,id_CSSSM_phy) = sscoarse(:,:) ! CSSSM |
| 152 |
|
✗ |
m_allaer(:,:,id_ASSSM_phy) = ssacu(:,:) ! ASSSM |
| 153 |
|
✗ |
m_allaer(:,:,id_CIDUSTM_phy)= cidust(:,:) ! CIDUSTM |
| 154 |
|
✗ |
m_allaer(:,:,id_AIBCM_phy) = bcins(:,:) ! AIBCM |
| 155 |
|
✗ |
m_allaer(:,:,id_AIPOMM_phy) = pomins(:,:) ! AIPOMM |
| 156 |
|
✗ |
m_allaer(:,:,id_ASNO3M_phy) = 0.0 |
| 157 |
|
✗ |
m_allaer(:,:,id_CSNO3M_phy) = 0.0 |
| 158 |
|
✗ |
m_allaer(:,:,id_CINO3M_phy) = 0.0 |
| 159 |
|
|
|
| 160 |
|
|
!RAF |
| 161 |
|
✗ |
m_allaer_pi(:,:,id_ASBCM_phy) = bcsol_pi(:,:) ! ASBCM pre-ind |
| 162 |
|
✗ |
m_allaer_pi(:,:,id_ASPOMM_phy) = pomsol_pi(:,:) ! ASPOMM pre-ind |
| 163 |
|
✗ |
m_allaer_pi(:,:,id_ASSO4M_phy) = sulfate_pi(:,:) ! ASSO4M (= SO4) pre-ind |
| 164 |
|
✗ |
m_allaer_pi(:,:,id_CSSO4M_phy) = 0. ! CSSO4M pre-ind |
| 165 |
|
✗ |
m_allaer_pi(:,:,id_SSSSM_phy) = sssupco_pi(:,:) ! SSSSM pre-ind |
| 166 |
|
✗ |
m_allaer_pi(:,:,id_CSSSM_phy) = sscoarse_pi(:,:) ! CSSSM pre-ind |
| 167 |
|
✗ |
m_allaer_pi(:,:,id_ASSSM_phy) = ssacu_pi(:,:) ! ASSSM pre-ind |
| 168 |
|
✗ |
m_allaer_pi(:,:,id_CIDUSTM_phy) = cidust_pi(:,:) ! CIDUSTM pre-ind |
| 169 |
|
✗ |
m_allaer_pi(:,:,id_AIBCM_phy) = bcins_pi(:,:) ! AIBCM pre-ind |
| 170 |
|
✗ |
m_allaer_pi(:,:,id_AIPOMM_phy) = pomins_pi(:,:) ! AIPOMM pre-ind |
| 171 |
|
✗ |
m_allaer_pi(:,:,id_ASNO3M_phy) = 0.0 |
| 172 |
|
✗ |
m_allaer_pi(:,:,id_CSNO3M_phy) = 0.0 |
| 173 |
|
✗ |
m_allaer_pi(:,:,id_CINO3M_phy) = 0.0 |
| 174 |
|
|
! |
| 175 |
|
|
! Calculate the total mass of all soluble aersosols |
| 176 |
|
|
! |
| 177 |
|
✗ |
mass_solu_aero(:,:) = sulfate(:,:) + bcsol(:,:) + pomsol(:,:) + ssacu(:,:) |
| 178 |
|
✗ |
mass_solu_aero_pi(:,:) = sulfate_pi(:,:) + bcsol_pi(:,:) + pomsol_pi(:,:) + ssacu_pi(:,:) |
| 179 |
|
|
|
| 180 |
|
|
!**************************************************************************************** |
| 181 |
|
|
! 2) Calculate optical properties for the aerosols |
| 182 |
|
|
! |
| 183 |
|
|
!**************************************************************************************** |
| 184 |
|
✗ |
DO k = 1, klev |
| 185 |
|
✗ |
DO i = 1, klon |
| 186 |
|
✗ |
pdel(i,k) = paprs(i,k) - paprs (i,k+1) |
| 187 |
|
|
END DO |
| 188 |
|
|
END DO |
| 189 |
|
|
|
| 190 |
|
|
! RAF delete?? fractnat_allaer(:,:) = 0. |
| 191 |
|
|
! RAF fractnat_allaer -> m_allaer_pi |
| 192 |
|
|
|
| 193 |
|
|
CALL aeropt_2bands( & |
| 194 |
|
|
pdel, m_allaer, pdtphys, rhcl, & |
| 195 |
|
|
tau_aero, piz_aero, cg_aero, & |
| 196 |
|
|
m_allaer_pi, flag_aerosol, & |
| 197 |
|
✗ |
pplay, t_seri, presnivs) |
| 198 |
|
|
|
| 199 |
|
|
! aeropt_5wv only for validation and diagnostics. |
| 200 |
|
|
CALL aeropt_5wv( & |
| 201 |
|
|
pdel, m_allaer, & |
| 202 |
|
|
pdtphys, rhcl, aerindex, & |
| 203 |
|
|
flag_aerosol, pplay, t_seri, & |
| 204 |
|
✗ |
tausum_aero, tau3d_aero, presnivs) |
| 205 |
|
|
|
| 206 |
|
|
! Diagnostics calculation for CMIP5 protocol |
| 207 |
|
✗ |
sconcso4(:)=m_allaer(:,1,id_ASSO4M_phy)*1.e-9 |
| 208 |
|
✗ |
sconcno3(:)=m_allaer(:,1,id_ASNO3M_phy)*1.e-9 |
| 209 |
|
✗ |
sconcoa(:)=(m_allaer(:,1,id_ASPOMM_phy)+m_allaer(:,1,id_AIPOMM_phy))*1.e-9 |
| 210 |
|
✗ |
sconcbc(:)=(m_allaer(:,1,id_ASBCM_phy)+m_allaer(:,1,id_AIBCM_phy))*1.e-9 |
| 211 |
|
✗ |
sconcss(:)=(m_allaer(:,1,id_ASSSM_phy)+m_allaer(:,1,id_CSSSM_phy)+m_allaer(:,1,id_SSSSM_phy))*1.e-9 |
| 212 |
|
✗ |
sconcdust(:)=m_allaer(:,1,id_CIDUSTM_phy)*1.e-9 |
| 213 |
|
✗ |
concso4(:,:)=m_allaer(:,:,id_ASSO4M_phy)*1.e-9 |
| 214 |
|
✗ |
concno3(:,:)=m_allaer(:,:,id_ASNO3M_phy)*1.e-9 |
| 215 |
|
✗ |
concoa(:,:)=(m_allaer(:,:,id_ASPOMM_phy)+m_allaer(:,:,id_AIPOMM_phy))*1.e-9 |
| 216 |
|
✗ |
concbc(:,:)=(m_allaer(:,:,id_ASBCM_phy)+m_allaer(:,:,id_AIBCM_phy))*1.e-9 |
| 217 |
|
✗ |
concss(:,:)=(m_allaer(:,:,id_ASSSM_phy)+m_allaer(:,:,id_CSSSM_phy)+m_allaer(:,:,id_SSSSM_phy))*1.e-9 |
| 218 |
|
✗ |
concdust(:,:)=m_allaer(:,:,id_CIDUSTM_phy)*1.e-9 |
| 219 |
|
|
|
| 220 |
|
✗ |
END SUBROUTINE readaerosol_optic |
| 221 |
|
|
|