Changeset 6205


Ignore:
Timestamp:
Apr 24, 2026, 12:15:21 PM (10 days ago)
Author:
asima
Message:

Follow-up of r6184 : further simplification of diagnostic aod calculations at 443 and 865nm

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

Legend:

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

    r6185 r6205  
    4242  !
    4343  REAL,DIMENSION(klon,klev,nplumes) :: aod550
     44  REAL,DIMENSION(klon,nplumes) :: aod550_pl
    4445  REAL,DIMENSION(klon,klev) :: aod_prof, ssa_prof, asy_prof
    4546  REAL,DIMENSION(klon)      :: aod_diag
     
    132133  ec550aer(:,:)=ec550aer(:,:)+od550SPaer_prof(:,:)/dz(:,:)
    133134  !
    134 
    135   ! Diagnostic AOD calculations for other wavelengths : 443 and 865 nm 
     135  !
     136  ! AOD calculations for diagnostics at other wavelengths : 443 and 865 nm 
     137  !   using AOD550(icol,iplume) :
     138  aod550_pl(:,:)=SUM(aod550(:,:,:),dim=2)
     139  !
    136140  !--call to sp routine -- 443 nm
    137141  !
    138142  CALL sp_aod_diag                    ( &
    139        klev     ,klon ,  l443         , &
    140        aod550   ,aod_diag )
     143       klon ,  l443         , &
     144       aod550_pl   ,aod_diag )
    141145
    142146  od443aer(:)= od443aer(:)+aod_diag(:)
    143 
     147  !
    144148  !--call to sp routine -- 865 nm
    145149  !
    146150  CALL sp_aod_diag                    ( &
    147        klev     ,klon ,  l865         , &
    148        aod550   ,aod_diag )
     151       klon ,  l865         , &
     152       aod550_pl   ,aod_diag )
    149153
    150154  od865aer(:)= od865aer(:)+aod_diag(:)   
  • LMDZ6/trunk/libf/phylmd/mo_simple_plumes.f90

    r6185 r6205  
    630630
    631631  SUBROUTINE sp_aod_diag                                    ( &
    632        nlevels        ,ncol           ,lambda                , &
    633        aod550         ,aod_diag       )
     632       ncol           ,lambda                , &
     633       aod550_pl      ,aod_diag       )
    634634    !
    635635    ! ----------
    636636    !
    637637    INTEGER, INTENT(IN)        :: &
    638          nlevels,                 & !< number of levels
    639638         ncol                       !< number of columns
    640639
    641640    REAL, INTENT(IN)           :: &
    642641         lambda,                  & !< wavelength
    643          aod550(ncol,nlevels,nplumes) !< anthropogenic aod550 profiles by individual plumes
     642         aod550_pl(ncol,nplumes) !< anthropogenic aod550 map by individual plumes
    644643
    645644    REAL, INTENT(OUT)          :: &
    646645         aod_diag(ncol)             !< aerosol optical depth, diagnostic for wavelength "lambda"
    647646
    648     INTEGER                    :: iplume, icol, k
     647    INTEGER                    :: iplume, icol
    649648
    650649    REAL                       ::  &
    651650         lextinct                    !< anthropogenic aerosol extinction (function of wavelenth and aerosol type/plume)
    652651
    653     ! initialize variables, including output
    654     !
    655       DO icol=1,ncol
    656         aod_diag(icol) = 0.0
    657       ENDDO
     652    ! initialize output
     653    DO icol=1,ncol
     654      aod_diag(icol) = 0.0
     655    ENDDO
    658656
    659657    ! sum contribution from plumes to construct composite profiles of aerosol optical properties
     
    661659    DO iplume=1,nplumes
    662660      !
    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)
     661      ! lextinct = factor for aerosol extiction, eq(10) in Stevens et al 2017
     662      !   Depends on 'iplume' via 'angstrom' (Note : angstrom=2. is prescribed for all plumes)
    668663      lextinct = EXP(-angstrom(iplume) * LOG(lambda/550.0))
    669664
    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
     665      ! aod550_pl(icol,iplume) multiplied by lextinct(iplume) to get aod for "lambda" wavelength
    672666      ! version 1 compact
    673       !aod_diag(:) = aod_diag(:) + SUM(aod550(:,:,iplume),dim=2) * lextinct
     667      !aod_diag(:) = aod_diag(:) + aod550_pl(:,iplume) * lextinct
    674668      ! 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)
     669      DO icol = 1,ncol
     670         aod_diag(icol) = aod_diag(icol)+ aod550_pl(icol,iplume) * lextinct
    679671      ENDDO ! icol
    680672    ENDDO ! iplume
Note: See TracChangeset for help on using the changeset viewer.