Changeset 2738 for LMDZ5/trunk/libf/phylmd/rrtm/aeropt_lw_rrtm.F90
- Timestamp:
- Jan 2, 2017, 11:24:30 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/rrtm/aeropt_lw_rrtm.F90
r2504 r2738 2 2 ! aeropt_lw_rrtm.F90 2014-05-13 C. Kleinschmitt 3 3 ! 2016-05-03 O. Boucher 4 ! 2016-12-17 O. Boucher 4 5 ! 5 6 ! This routine feeds aerosol LW properties to RRTM 6 7 ! we only consider absorption (not scattering) 8 ! we only consider dust for now 7 9 8 SUBROUTINE AEROPT_LW_RRTM( aerosol_couple,paprs,tr_seri)10 SUBROUTINE AEROPT_LW_RRTM(ok_alw, pdel, zrho, flag_aerosol, m_allaer, m_allaer_pi) 9 11 10 12 USE dimphy 11 13 USE aero_mod 12 USE infotrac_phy13 14 USE phys_state_var_mod, ONLY : tau_aero_lw_rrtm 14 15 USE YOERAD, ONLY : NLW 16 USE YOMCST 15 17 16 18 IMPLICIT NONE 17 19 18 INCLUDE "YOMCST.h"19 20 INCLUDE "clesphys.h" 20 21 ! 21 22 ! Input arguments: 22 23 ! 23 LOGICAL, INTENT(IN) :: aerosol_couple 24 REAL, DIMENSION(klon,klev+1), INTENT(in) :: paprs 25 REAL, DIMENSION(klon,klev,nbtr), INTENT(in) :: tr_seri 26 ! 27 REAL, DIMENSION(klon,klev) :: zdp, mass_temp 28 ! 24 LOGICAL, INTENT(IN) :: ok_alw 25 INTEGER, INTENT(IN) :: flag_aerosol 26 REAL, DIMENSION(klon,klev), INTENT(in) :: pdel, zrho 27 REAL, DIMENSION(klon,klev,naero_tot), INTENT(in) :: m_allaer, m_allaer_pi 29 28 ! 30 29 INTEGER inu, i, k 31 INTEGER :: id_ASBCM, id_ASPOMM, id_ASSO4M, id_ASMSAM, id_CSSO4M, id_CSMSAM, id_SSSSM 32 INTEGER :: id_CSSSM, id_ASSSM, id_CIDUSTM, id_AIBCM, id_AIPOMM, id_ASNO3M, id_CSNO3M, id_CINO3M 33 30 REAL :: zdh(klon,klev) 31 REAL :: tmp_var, tmp_var_pi 34 32 ! 35 33 !--absorption coefficient for CIDUST 36 34 REAL:: alpha_abs_CIDUST_16bands(nbands_lw_rrtm) !--unit m2/g 37 35 DATA alpha_abs_CIDUST_16bands / & 38 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, &39 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0/36 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, & 37 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / 40 38 ! 41 39 IF (NLW.NE.nbands_lw_rrtm) THEN 42 print*,'Erreur NLW doit etre egal a 16 pour cette routine'43 stop40 PRINT *,'Erreur NLW doit etre egal a 16 pour cette routine' 41 STOP 44 42 ENDIF 45 43 ! 46 IF (aerosol_couple) THEN 47 ! 48 do i=1,nbtr 49 select case(trim(solsym(i))) 50 case ("ASBCM") 51 id_ASBCM = i 52 case ("ASPOMM") 53 id_ASPOMM = i 54 case ("ASSO4M") 55 id_ASSO4M = i 56 case ("ASMSAM") 57 id_ASMSAM = i 58 case ("CSSO4M") 59 id_CSSO4M = i 60 case ("CSMSAM") 61 id_CSMSAM = i 62 case ("SSSSM") 63 id_SSSSM = i 64 case ("CSSSM") 65 id_CSSSM = i 66 case ("ASSSM") 67 id_ASSSM = i 68 case ("CIDUSTM") 69 id_CIDUSTM = i 70 case ("AIBCM") 71 id_AIBCM = i 72 case ("AIPOMM") 73 id_AIPOMM = i 74 case ("ASNO3M") 75 id_ASNO3M = i 76 case ("CSNO3M") 77 id_CSNO3M = i 78 case ("CINO3M") 79 id_CINO3M = i 80 end select 81 enddo 44 IF (ok_alw) THEN !--aerosol LW effects 45 ! 46 IF (flag_aerosol.EQ.5.OR.flag_aerosol.EQ.6) THEN !--Dust 47 ! 48 zdh(:,:)=pdel(:,:)/(RG*zrho(:,:)) !-- m 82 49 ! 83 50 DO k=1, klev 84 zdp(:,k) = (paprs(:,k)-paprs(:,k+1))/RG !--kg/m2 85 ENDDO 86 ! 87 !--for now only consider dust 88 mass_temp(:,:)=tr_seri(:,:,id_CIDUSTM) !--kg/kg 89 ! 90 DO inu=1,NLW 91 ! 92 !--total aerosol 93 tau_aero_lw_rrtm(:,:,2,inu) = mass_temp(:,:)*zdp(:,:)*1000.*alpha_abs_CIDUST_16bands(inu) 94 !--no aerosol at all 95 tau_aero_lw_rrtm(:,:,1,inu) = 0.0 51 DO i=1, klon 52 ! 53 tmp_var =m_allaer(i,k,id_CIDUSTM_phy) /1.e6*zdh(i,k) !-- g/m2 54 tmp_var_pi=m_allaer_pi(i,k,id_CIDUSTM_phy)/1.e6*zdh(i,k) !-- g/m2 55 ! 56 DO inu=1, NLW 57 ! 58 !--total aerosol 59 tau_aero_lw_rrtm(i,k,2,inu) = MAX(1.e-15,tmp_var*alpha_abs_CIDUST_16bands(inu)) 60 !--natural aerosol 61 tau_aero_lw_rrtm(i,k,1,inu) = MAX(1.e-15,tmp_var_pi*alpha_abs_CIDUST_16bands(inu)) 62 ! 63 ENDDO 64 ENDDO 96 65 ! 97 66 ENDDO 98 67 ! 99 !--avoid very small values 100 tau_aero_lw_rrtm = MAX(tau_aero_lw_rrtm,1.e-15) 101 ! 102 ELSE !--not aerosol_couple 68 ENDIF 69 ! 70 ELSE !--no aerosol LW effects 103 71 ! 104 !--no LW effects if not coupled to INCA105 72 tau_aero_lw_rrtm = 1.e-15 106 73 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.