source: LMDZ6/trunk/libf/phylmd/StratAer/calcaerosolstrato_rrtm.f90 @ 5924

Last change on this file since 5924 was 5605, checked in by lebasn, 8 months ago

StratAer?: add new diags (4 new longwaves for ext+AOD and SO2 chem loss) + update field/file_def.

  • Property svn:keywords set to Id
File size: 4.5 KB
Line 
1!
2! $Id: calcaerosolstrato_rrtm.f90 5605 2025-04-07 14:05:50Z lebasn $
3!
4SUBROUTINE calcaerosolstrato_rrtm(pplay,t_seri,paprs,debut)
5
6  USE clesphys_mod_h
7  USE iniprint_mod_h
8  USE phys_state_var_mod, ONLY: tau_aero_sw_rrtm, piz_aero_sw_rrtm, cg_aero_sw_rrtm, tau_aero_lw_rrtm
9  USE phys_local_var_mod, ONLY: mdw, tausum_aero, tausum_strat, tau_strat_443, tau_strat_550, &
10       tau_strat_670, tau_strat_765, tau_strat_1020, tau_strat_10um, stratomask
11  USE aero_mod
12  USE dimphy
13!  USE temps_mod
14  USE yomcst_mod_h
15
16!USE paramet_mod_h
17IMPLICIT NONE
18
19
20
21
22! Variable input
23  REAL,DIMENSION(klon,klev),INTENT(IN)   :: t_seri  ! Temperature
24  REAL,DIMENSION(klon,klev),INTENT(IN)   :: pplay   ! pression pour le mileu de chaque couche (en Pa)
25  LOGICAL,INTENT(IN)                     :: debut   ! le flag de l'initialisation de la physique
26  REAL,DIMENSION(klon,klev+1),INTENT(IN) :: paprs   ! pression pour chaque inter-couche (en Pa)
27
28! Stratospheric aerosols optical properties
29  REAL, DIMENSION(klon,klev,nbands_sw_rrtm) :: tau_strat, piz_strat, cg_strat
30  REAL, DIMENSION(klon,klev,nwave_sw+nwave_lw) :: tau_strat_wave
31  REAL, DIMENSION(klon,klev,nbands_lw_rrtm) :: tau_lw_abs_rrtm
32
33  INTEGER k, band, wave, i
34  REAL zrho, zdz
35
36!--calculate optical properties of the aerosol size distribution from tr_seri
37  tau_strat=0.0
38  piz_strat=0.0
39  cg_strat=0.0
40  tau_strat_wave=0.0
41  tau_lw_abs_rrtm=0.0
42 
43!-- init tau_strat vars
44  tau_strat_550(:,:) =0.0
45  tau_strat_1020(:,:)=0.0
46 
47  CALL miecalc_aer(tau_strat, piz_strat, cg_strat, tau_strat_wave, tau_lw_abs_rrtm, paprs, debut)
48
49!--total vertical aod at the 5 SW + 1 LW wavelengths
50  DO wave=1, nwave_sw+nwave_lw
51    DO k=1, klev
52      tausum_aero(:,wave,id_STRAT_phy)=tausum_aero(:,wave,id_STRAT_phy)+tau_strat_wave(:,k,wave)
53    ENDDO
54  ENDDO
55
56!--weighted average for cg, piz and tau, adding strat aerosols on top of tropospheric ones
57  DO band=1, nbands_sw_rrtm
58    !--no stratospheric aerosol in index 1
59    cg_aero_sw_rrtm(:,:,1,band)  =  cg_aero_sw_rrtm(:,:,2,band)
60    piz_aero_sw_rrtm(:,:,1,band)  = piz_aero_sw_rrtm(:,:,2,band)
61    tau_aero_sw_rrtm(:,:,1,band)  = tau_aero_sw_rrtm(:,:,2,band)
62
63    !--tropospheric and stratospheric aerosol in index 2
64    cg_aero_sw_rrtm(:,:,2,band) = ( cg_aero_sw_rrtm(:,:,2,band)*piz_aero_sw_rrtm(:,:,2,band)*tau_aero_sw_rrtm(:,:,2,band) + &
65                                cg_strat(:,:,band)*piz_strat(:,:,band)*tau_strat(:,:,band) ) /                              &
66                                MAX( piz_aero_sw_rrtm(:,:,2,band)*tau_aero_sw_rrtm(:,:,2,band) +                            &
67                                piz_strat(:,:,band)*tau_strat(:,:,band), 1.e-15 )
68    piz_aero_sw_rrtm(:,:,2,band)= ( piz_aero_sw_rrtm(:,:,2,band)*tau_aero_sw_rrtm(:,:,2,band) +                             &
69                                piz_strat(:,:,band)*tau_strat(:,:,band) ) /                                                 &
70                                MAX( tau_aero_sw_rrtm(:,:,2,band) + tau_strat(:,:,band), 1.e-15 )
71    tau_aero_sw_rrtm(:,:,2,band)= tau_aero_sw_rrtm(:,:,2,band) + tau_strat(:,:,band)
72  ENDDO
73
74  DO band=1, nbands_lw_rrtm
75    !--no stratospheric aerosols in index 1
76    tau_aero_lw_rrtm(:,:,1,band)  = tau_aero_lw_rrtm(:,:,2,band)
77    !--tropospheric and stratospheric aerosol in index 2
78    tau_aero_lw_rrtm(:,:,2,band)  = tau_aero_lw_rrtm(:,:,2,band) + tau_lw_abs_rrtm(:,:,band)
79  ENDDO
80
81  WHERE (tau_aero_sw_rrtm .LT. 1.e-14) piz_aero_sw_rrtm=1.0
82  WHERE (tau_aero_sw_rrtm .LT. 1.e-14) tau_aero_sw_rrtm=1.e-15
83  WHERE (tau_aero_lw_rrtm .LT. 1.e-14) tau_aero_lw_rrtm=1.e-15
84
85  tausum_strat(:,:)=0.0
86  DO i=1,klon
87  DO k=1,klev
88    IF (stratomask(i,k).GT.0.5) THEN
89      tausum_strat(i,1)=tausum_strat(i,1)+tau_strat_wave(i,k,1)  !--443 nm
90      tausum_strat(i,2)=tausum_strat(i,2)+tau_strat_wave(i,k,2)  !--550 nm
91      tausum_strat(i,3)=tausum_strat(i,3)+tau_strat_wave(i,k,3)  !--670 nm
92      tausum_strat(i,4)=tausum_strat(i,4)+tau_strat_wave(i,k,4)  !--765 nm
93      tausum_strat(i,5)=tausum_strat(i,5)+tau_strat_wave(i,k,5)  !--1020 nm
94      tausum_strat(i,6)=tausum_strat(i,6)+tau_strat_wave(i,k,6)  !--10 um
95    ENDIF
96  ENDDO
97  ENDDO
98
99  DO i=1,klon
100  DO k=1,klev
101    zrho=pplay(i,k)/t_seri(i,k)/RD            !air density in kg/m3
102    zdz=(paprs(i,k)-paprs(i,k+1))/zrho/RG     !thickness of layer in m
103        tau_strat_443(i,k)=tau_strat_wave(i,k,1)/zdz
104        tau_strat_550(i,k)=tau_strat_wave(i,k,2)/zdz
105        tau_strat_670(i,k)=tau_strat_wave(i,k,3)/zdz
106        tau_strat_765(i,k)=tau_strat_wave(i,k,4)/zdz
107        tau_strat_1020(i,k)=tau_strat_wave(i,k,5)/zdz
108        tau_strat_10um(i,k)=tau_strat_wave(i,k,6)/zdz
109  ENDDO
110  ENDDO
111
112END SUBROUTINE calcaerosolstrato_rrtm
Note: See TracBrowser for help on using the repository browser.