Changeset 6128 for LMDZ6/trunk/libf/phylmd/macv2sp.f90
- Timestamp:
- Mar 26, 2026, 7:09:02 PM (9 days ago)
- File:
-
- 1 edited
-
LMDZ6/trunk/libf/phylmd/macv2sp.f90 (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/macv2sp.f90
r6102 r6128 1 SUBROUTINE MACv2SP(pphis,pplay,paprs,xlon,xlat,tau_allaer,piz_allaer,cg_allaer)1 SUBROUTINE macv2sp(pphis,pplay,paprs,xlon,xlat,tau_allaer,piz_allaer,cg_allaer,dNovrN) 2 2 ! 3 3 !--routine to read the MACv2SP plume and compute optical properties … … 13 13 !--dNovrN = enhancement factor for CDNC 14 14 ! 15 USE mo_simple_plumes, ONLY: sp_aop_profile, sp_setup, sp_initialized, aerosols_SP_forcing_year 15 USE mo_simple_plumes, ONLY: sp_aod550_profile, sp_aop_profile, sp_setup ! subroutines 16 USE mo_simple_plumes, ONLY: nplumes, sp_initialized, aerosols_SP_forcing_year ! variables 16 17 USE phys_cal_mod, ONLY : year_cur, year_len, days_elapsed 17 18 USE dimphy 18 19 USE aero_mod 19 USE phys_local_var_mod, ONLY: t_seri, od443aer, od550aer, od865aer, ec550aer, dryod550aer, od550lt1aer, od550SPaer, dNovrN 20 !!USE YOMCST, ONLY : RD, RG 20 USE phys_local_var_mod, ONLY: t_seri, od443aer, od550aer, od865aer, ec550aer, dryod550aer, od550lt1aer, od550SPaer 21 21 ! 22 22 USE yomcst_mod_h … … 35 35 REAL, DIMENSION(klon,klev,2,nbands_sw_rrtm), INTENT(INOUT) :: cg_allaer ! asymmetry parameter aerosol 36 36 ! 37 REAL,DIMENSION(klon),INTENT(OUT) :: dNovrN !< anthropogenic increase in cloud drop number concentration (factor) 38 ! 39 REAL,DIMENSION(klon,klev,nplumes) :: aod550 37 40 REAL,DIMENSION(klon,klev) :: aod_prof, ssa_prof, asy_prof 38 41 REAL,DIMENSION(klon,klev) :: z, dz 39 42 REAL,DIMENSION(klon) :: oro, zrho, zt 40 43 ! 41 INTEGER, PARAMETER :: nmon = 12 42 ! 43 REAL, PARAMETER :: l443 = 443.0, l550 = 550.0, l865 = 865.0 !--wavelengths in nm 44 REAL, PARAMETER :: l443 = 443.0, l865 = 865.0 !--wavelengths in nm for diagnostics (other than 550 nm calculated by default) 44 45 ! 45 46 INTEGER, PARAMETER :: Nwvmax=25 … … 58 59 ! 59 60 REAL :: zlambda, zweight 60 ! REAL :: year_fr ! also a dimension name in SP aerosol file ; renamed more properly "decimal_year"61 61 REAL :: decimal_year 62 62 ! … … 83 83 IF (.NOT.sp_initialized) CALL sp_setup 84 84 85 !--fractional year 86 ! 87 ! Original version, bugged : 88 ! year_fr = FLOAT(year_cur) + (FLOAT(day_cur)-0.5) / FLOAT(year_len) 89 ! Correction ASima & FH : 90 ! year_fr= float(year_cur) + float(days_elapsed)/float(year_len) 91 ! Choice between yearly vs fixed_year forcing, depending on 'aerosols_SP_forcing_year' 85 !--fractional year : 86 ! Original version, bugged : year_fr = FLOAT(year_cur) + (FLOAT(day_cur)-0.5) / FLOAT(year_len) 87 ! Correction 2026-03, FH & ASima : year_fr= float(year_cur) + float(days_elapsed)/float(year_len) 88 ! Name changed in decimal_year ; choice between yearly vs fixed_year forcing, depending on 'aerosols_SP_forcing_year' 92 89 IF (aerosols_SP_forcing_year.EQ.-9999) THEN 93 90 decimal_year= float(year_cur) + float(days_elapsed)/float(year_len) … … 99 96 CALL abort_physic ('macv2sp','year not supported by plume model',1) 100 97 ENDIF 101 ! 102 !--call to sp routine -- 443 nm 103 ! 104 CALL sp_aop_profile ( & 105 klev ,klon ,l443 ,oro ,xlon ,xlat , & 106 decimal_year ,z ,dz ,dNovrN ,aod_prof ,ssa_prof , & 107 asy_prof ) 108 ! 109 !--AOD calculations for diagnostics 110 od443aer(:)= od443aer(:)+SUM(aod_prof(:,:),dim=2) 111 ! 112 !--call to sp routine -- 550 nm 113 ! 114 CALL sp_aop_profile ( & 115 klev ,klon ,l550 ,oro ,xlon ,xlat , & 116 decimal_year ,z ,dz ,dNovrN ,aod_prof ,ssa_prof , & 117 asy_prof ) 118 ! 119 !--AOD calculations for diagnostics 120 ! (ASima : new diagnostic od550SPaer; corrected od550lt1aer and dryod550aer) 121 !--a/ AOD of SP aerosols = vertical sum of SP aod profile 98 99 ! 100 !--call SUBROUTINE sp_aod550_profile once ; all the wavelength-dependent profiles and 2D diagnostics will use aod550 profile 101 ! 102 CALL sp_aod550_profile ( & 103 klev ,klon ,oro ,xlon ,xlat , & 104 decimal_year ,z ,dz ,dNovrN , aod550 ) 105 106 !--AOD550 calculations for diagnostics 107 ! 108 ! aod550 profile = sum over the 'nplumes' dimension 109 aod_prof(:,:)=SUM(aod550(:,:,:),dim=3) 110 ! 111 !--a/ AOD of SP anthropic aerosols = vertical sum of SP aod profile 122 112 od550SPaer(:)=SUM(aod_prof(:,:),dim=2) 123 113 ! … … 126 116 ! 127 117 !--c/ fine-mode AOD = Inca1850(fine mode) + SP 128 ! original, bugged : includes od550aer of Inca1850129 !od550lt1aer(:)=od550lt1aer(:)+od550aer(:)130 118 od550lt1aer(:)=od550lt1aer(:)+od550SPaer(:) 131 119 ! 132 120 !--d/ dry AOD 133 ! original, bugged : includes od550aer of Inca1850134 !dryod550aer(:)=dryod550aer(:)+od550aer(:)135 121 dryod550aer(:)=dryod550aer(:)+od550SPaer(:) 136 !137 122 ! 138 123 !--extinction coefficient for diagnostic 139 124 ec550aer(:,:)=ec550aer(:,:)+aod_prof(:,:)/dz(:,:) 140 125 ! 126 127 ! Diagnostic AOD calculations for other wavelengths : 443 and 865 nm 128 !--call to sp routine -- 443 nm 129 ! 130 CALL sp_aop_profile ( & 131 klev ,klon , l443 , & 132 aod550 ,aod_prof ,ssa_prof , & 133 asy_prof ) 134 135 od443aer(:)= od443aer(:)+SUM(aod_prof(:,:),dim=2) 136 141 137 !--call to sp routine -- 865 nm 142 138 ! 143 139 CALL sp_aop_profile ( & 144 klev ,klon , l865 ,oro ,xlon ,xlat, &145 decimal_year ,z ,dz ,dNovrN,aod_prof ,ssa_prof , &140 klev ,klon , l865 , & 141 aod550 ,aod_prof ,ssa_prof , & 146 142 asy_prof ) 147 ! 148 !--AOD calculations for diagnostics 143 149 144 od865aer(:)=od865aer(:)+SUM(aod_prof(:,:),dim=2) 145 150 146 ! 151 147 !--re-weighting of piz and cg arrays before adding the anthropogenic aerosols … … 184 180 ENDIF 185 181 ! 186 CALL sp_aop_profile ( & 187 klev ,klon ,zlambda ,oro ,xlon ,xlat , & 188 decimal_year ,z ,dz ,dNovrN ,aod_prof ,ssa_prof , & 189 asy_prof ) 182 CALL sp_aop_profile ( & 183 klev ,klon , zlambda , & 184 aod550 ,aod_prof ,ssa_prof , & 185 asy_prof ) 186 187 190 188 ! 191 189 !--adding up the quantities tau, piz*tau and cg*piz*tau … … 200 198 piz_allaer(:,:,2,:)=piz_allaer(:,:,2,:)/tau_allaer(:,:,2,:) 201 199 ! 202 END SUBROUTINE MACv2SP200 END SUBROUTINE macv2sp
Note: See TracChangeset
for help on using the changeset viewer.
