Changeset 6185


Ignore:
Timestamp:
Apr 22, 2026, 8:39:28 PM (12 days ago)
Author:
asima
Message:

Simplification of aod calculations for 443 and 865nm wavelengths
by adding a specific routine for this type of diagnostic

Location:
LMDZ6/trunk/libf/phylmd
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/macv2sp.f90

    r6162 r6185  
    1515  !ASima : *_allaer arguments and non-SP "aer" diagnostics arrive from rrtm/aeropt_5wv_rrtm.F90 with values for inca1850 aerosols
    1616
    17   USE mo_simple_plumes, ONLY: sp_aod550_profile, sp_aop_profile, sp_setup       ! subroutines
     17  USE mo_simple_plumes, ONLY: sp_aod550_profile, sp_aop_profile, sp_aod_diag, sp_setup       ! subroutines
    1818  USE mo_simple_plumes, ONLY: nplumes, sp_initialized, aerosols_SP_forcing_year ! variables
    1919  USE phys_cal_mod, ONLY : year_cur, year_len, days_elapsed
     
    4343  REAL,DIMENSION(klon,klev,nplumes) :: aod550
    4444  REAL,DIMENSION(klon,klev) :: aod_prof, ssa_prof, asy_prof
     45  REAL,DIMENSION(klon)      :: aod_diag
    4546  REAL,DIMENSION(klon,klev) :: z, dz
    4647  REAL,DIMENSION(klon)      :: oro, zrho, zt
     
    113114  !--AOD550 calculations for diagnostics
    114115  !
    115   ! aod550 profile = sum over the 'nplumes' dimension
     116  ! AOD profile = sum over the 'nplumes' dimension
    116117  od550SPaer_prof(:,:)=SUM(aod550(:,:,:),dim=3)
    117118  !
     
    135136  !--call to sp routine -- 443 nm
    136137  !
    137   CALL sp_aop_profile                                    ( &
     138  CALL sp_aod_diag                    ( &
    138139       klev     ,klon ,  l443         , &
    139        aod550   ,aod_prof ,ssa_prof  , &
    140        asy_prof )
    141 
    142   od443aer(:)= od443aer(:)+SUM(aod_prof(:,:),dim=2)
     140       aod550   ,aod_diag )
     141
     142  od443aer(:)= od443aer(:)+aod_diag(:)
    143143
    144144  !--call to sp routine -- 865 nm
    145145  !
    146   CALL sp_aop_profile                                    ( &
     146  CALL sp_aod_diag                    ( &
    147147       klev     ,klon ,  l865         , &
    148        aod550   ,aod_prof ,ssa_prof  , &
    149        asy_prof )
    150 
    151   od865aer(:)=od865aer(:)+SUM(aod_prof(:,:),dim=2)
     148       aod550   ,aod_diag )
     149
     150  od865aer(:)= od865aer(:)+aod_diag(:)   
    152151
    153152  !
  • LMDZ6/trunk/libf/phylmd/mo_simple_plumes.f90

    r6162 r6185  
    8080       time_weight_bg (nfeatures,nplumes)        !< as time_weight but for natural background in Twomey effect
    8181
    82   PUBLIC sp_aod550_profile, sp_aop_profile, sp_setup
     82  PUBLIC sp_aod550_profile, sp_aop_profile, sp_aod_diag, sp_setup
    8383
    8484CONTAINS
     
    622622    RETURN
    623623  END SUBROUTINE sp_aop_profile
    624  
    625 END MODULE mo_simple_plumes
     624
     625  ! ------------------------------------------------------------------------------------------------------------------------
     626  ! sp_aod_diag:  This subroutine for Simple Plume aerosols is a simplified version of sp_aop_prof
     627  !    to be used for diagnostic of aod at a given wavelength "lambda".
     628  !    It uses aod550(ncol,nlevels,nplumes) output by the subroutine sp_aod550_profile.
     629  ! ------------------------------------------------------------------------------------------------------------------------
     630
     631  SUBROUTINE sp_aod_diag                                    ( &
     632       nlevels        ,ncol           ,lambda                , &
     633       aod550         ,aod_diag       )
     634    !
     635    ! ----------
     636    !
     637    INTEGER, INTENT(IN)        :: &
     638         nlevels,                 & !< number of levels
     639         ncol                       !< number of columns
     640
     641    REAL, INTENT(IN)           :: &
     642         lambda,                  & !< wavelength
     643         aod550(ncol,nlevels,nplumes) !< anthropogenic aod550 profiles by individual plumes
     644
     645    REAL, INTENT(OUT)          :: &
     646         aod_diag(ncol)             !< aerosol optical depth, diagnostic for wavelength "lambda"
     647
     648    INTEGER                    :: iplume, icol, k
     649
     650    REAL                       ::  &
     651         lextinct                    !< anthropogenic aerosol extinction (function of wavelenth and aerosol type/plume)
     652
     653    ! initialize variables, including output
     654    !
     655      DO icol=1,ncol
     656        aod_diag(icol) = 0.0
     657      ENDDO
     658
     659    ! sum contribution from plumes to construct composite profiles of aerosol optical properties
     660    !
     661    DO iplume=1,nplumes
     662      !
     663      ! distribute plume optical properties across its vertical profile weighting by optical depth and scaling for
     664      ! wavelength using the angstrom parameter.
     665      !
     666      !   lextinct = factor for aerosol extiction, eq(10) in Stevens et al 2017
     667      !    Depends on 'iplume' via 'angstrom' (Note : angstrom=2. is prescribed for all plumes)
     668      lextinct = EXP(-angstrom(iplume) * LOG(lambda/550.0))
     669
     670      ! Vertical sum of aod550(icol,k,,iplume) profile to 2D (icol,plume)
     671      !  multipled by lextinct(iplume) to get aod for "lambda" wavelength from aod550
     672      ! version 1 compact
     673      !aod_diag(:) = aod_diag(:) + SUM(aod550(:,:,iplume),dim=2) * lextinct
     674      ! version 2, loops
     675      DO k=1,nlevels
     676        DO icol = 1,ncol
     677           aod_diag(icol)         = aod_diag(icol)+ aod550(icol,k,iplume) * lextinct
     678        ENDDO ! k (levels)
     679      ENDDO ! icol
     680    ENDDO ! iplume
     681
     682    RETURN
     683  END SUBROUTINE sp_aod_diag
     684                                                                                                                           END MODULE mo_simple_plumes
Note: See TracChangeset for help on using the changeset viewer.