Ignore:
Timestamp:
Jan 30, 2017, 5:54:45 PM (8 years ago)
Author:
Laurent Fairhead
Message:

Merged trunk changes r2727:2785 into testing branch

Location:
LMDZ5/branches/testing
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/branches/testing

  • LMDZ5/branches/testing/libf/phylmd/rrtm/aeropt_lw_rrtm.F90

    r2542 r2787  
    22! aeropt_lw_rrtm.F90 2014-05-13 C. Kleinschmitt
    33!                    2016-05-03 O. Boucher
     4!                    2016-12-17 O. Boucher
    45!
    56! This routine feeds aerosol LW properties to RRTM
    67! we only consider absorption (not scattering)
     8! we only consider dust for now
    79
    8 SUBROUTINE AEROPT_LW_RRTM(aerosol_couple,paprs,tr_seri)
     10SUBROUTINE AEROPT_LW_RRTM(ok_alw, pdel, zrho, flag_aerosol, m_allaer, m_allaer_pi)
    911
    1012  USE dimphy
    1113  USE aero_mod
    12   USE infotrac_phy
    13   USE phys_state_var_mod, ONLY : tau_aero_lw_rrtm
    14   USE YOERAD, ONLY : NLW
     14  USE phys_state_var_mod, ONLY: tau_aero_lw_rrtm
     15  USE YOERAD, ONLY: NLW
     16  USE YOMCST, ONLY: RG
    1517
    1618  IMPLICIT NONE
    1719
    18   INCLUDE "YOMCST.h"
    1920  INCLUDE "clesphys.h"
    2021  !
    2122  ! Input arguments:
    2223  !
    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
    2928  !
    3029  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
     32  CHARACTER*20 modname
    3433  !
    3534  !--absorption coefficient for CIDUST
    3635  REAL:: alpha_abs_CIDUST_16bands(nbands_lw_rrtm)   !--unit m2/g
    37   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  DATA alpha_abs_CIDUST_16bands /                         &
     37  0.001, 0.003, 0.005, 0.006, 0.012, 0.030, 0.148, 0.098, &
     38  0.017, 0.053, 0.031, 0.008, 0.010, 0.011, 0.013, 0.015  /
     39  !
     40  modname='aeropt_lw_rrtm'
    4041  !
    4142  IF (NLW.NE.nbands_lw_rrtm) THEN
    42      print *,'Erreur NLW doit etre egal a 16 pour cette routine'
    43      stop
     43    CALL abort_physic(modname,'Erreur NLW doit etre egal a 16 pour cette routine',1)
    4444  ENDIF
    4545  !
    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
     46  IF (ok_alw) THEN                                   !--aerosol LW effects
     47   !
     48   IF (flag_aerosol.EQ.5.OR.flag_aerosol.EQ.6) THEN  !-Dust
     49    !
     50    zdh(:,:)=pdel(:,:)/(RG*zrho(:,:))      ! m
    8251    !
    8352    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
     53      DO i=1, klon
     54         !
     55         tmp_var   =m_allaer(i,k,id_CIDUSTM_phy)   /1.e6*zdh(i,k)  !--g/m2
     56         tmp_var_pi=m_allaer_pi(i,k,id_CIDUSTM_phy)/1.e6*zdh(i,k)  !--g/m2
     57         !
     58         DO inu=1, NLW
     59           !
     60           !--total aerosol
     61           tau_aero_lw_rrtm(i,k,2,inu) = MAX(1.e-15,tmp_var*alpha_abs_CIDUST_16bands(inu))
     62           !--natural aerosol
     63!           tau_aero_lw_rrtm(:,:,1,inu) = MAX(1.e-15,tmp_var_pi*alpha_abs_CIDUST_16bands(inu))
     64           tau_aero_lw_rrtm(i,k,1,inu) = 1.e-15  !--test
     65           !
     66         ENDDO
     67      ENDDO
    9668      !
    9769    ENDDO
     70    !
     71   ENDIF
     72   !
     73  ELSE !--no aerosol LW effects
    9874    !
    99     !--avoid very small values
    100     tau_aero_lw_rrtm = MAX(tau_aero_lw_rrtm,1.e-15)
    101     !
    102   ELSE !--not aerosol_couple
    103     !
    104     !--no LW effects if not coupled to INCA
    10575    tau_aero_lw_rrtm = 1.e-15
    10676  ENDIF
Note: See TracChangeset for help on using the changeset viewer.