Changeset 6185
- Timestamp:
- Apr 22, 2026, 8:39:28 PM (12 days ago)
- Location:
- LMDZ6/trunk/libf/phylmd
- Files:
-
- 2 edited
-
macv2sp.f90 (modified) (4 diffs)
-
mo_simple_plumes.f90 (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/macv2sp.f90
r6162 r6185 15 15 !ASima : *_allaer arguments and non-SP "aer" diagnostics arrive from rrtm/aeropt_5wv_rrtm.F90 with values for inca1850 aerosols 16 16 17 USE mo_simple_plumes, ONLY: sp_aod550_profile, sp_aop_profile, sp_ setup ! subroutines17 USE mo_simple_plumes, ONLY: sp_aod550_profile, sp_aop_profile, sp_aod_diag, sp_setup ! subroutines 18 18 USE mo_simple_plumes, ONLY: nplumes, sp_initialized, aerosols_SP_forcing_year ! variables 19 19 USE phys_cal_mod, ONLY : year_cur, year_len, days_elapsed … … 43 43 REAL,DIMENSION(klon,klev,nplumes) :: aod550 44 44 REAL,DIMENSION(klon,klev) :: aod_prof, ssa_prof, asy_prof 45 REAL,DIMENSION(klon) :: aod_diag 45 46 REAL,DIMENSION(klon,klev) :: z, dz 46 47 REAL,DIMENSION(klon) :: oro, zrho, zt … … 113 114 !--AOD550 calculations for diagnostics 114 115 ! 115 ! aod550profile = sum over the 'nplumes' dimension116 ! AOD profile = sum over the 'nplumes' dimension 116 117 od550SPaer_prof(:,:)=SUM(aod550(:,:,:),dim=3) 117 118 ! … … 135 136 !--call to sp routine -- 443 nm 136 137 ! 137 CALL sp_ao p_profile( &138 CALL sp_aod_diag ( & 138 139 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(:) 143 143 144 144 !--call to sp routine -- 865 nm 145 145 ! 146 CALL sp_ao p_profile( &146 CALL sp_aod_diag ( & 147 147 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(:) 152 151 153 152 ! -
LMDZ6/trunk/libf/phylmd/mo_simple_plumes.f90
r6162 r6185 80 80 time_weight_bg (nfeatures,nplumes) !< as time_weight but for natural background in Twomey effect 81 81 82 PUBLIC sp_aod550_profile, sp_aop_profile, sp_ setup82 PUBLIC sp_aod550_profile, sp_aop_profile, sp_aod_diag, sp_setup 83 83 84 84 CONTAINS … … 622 622 RETURN 623 623 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.
