Changeset 5099 for LMDZ6/branches/Amaury_dev/libf/phylmd/macv2sp.F90
- Timestamp:
- Jul 22, 2024, 9:29:09 PM (4 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Amaury_dev/libf/phylmd/macv2sp.F90
r5082 r5099 1 1 SUBROUTINE MACv2SP(pphis,pplay,paprs,xlon,xlat,tau_allaer,piz_allaer,cg_allaer) 2 ! 2 3 3 !--routine to read the MACv2SP plume and compute optical properties 4 4 !--requires flag_aerosol = 7 … … 7 7 !--pre-ind aerosols (index=1) are not changed, present-day aerosols (index=2) are incremented 8 8 !--uses model year so year_cur needs to be correct in the model simulation 9 ! 9 10 10 !--aod_prof = AOD per layer 11 11 !--ssa_prof = SSA 12 12 !--asy_prof = asymetry parameter 13 13 !--dNovrN = enhancement factor for CDNC 14 ! 14 15 15 USE mo_simple_plumes, ONLY: sp_aop_profile 16 16 USE phys_cal_mod, ONLY : year_cur, day_cur, year_len … … 19 19 USE phys_local_var_mod, ONLY: t_seri, od443aer, od550aer, od865aer, ec550aer, dryod550aer, od550lt1aer, dNovrN 20 20 !!USE YOMCST, ONLY : RD, RG 21 ! 21 22 22 IMPLICIT NONE 23 ! 23 24 24 include "YOMCST.h" 25 ! 25 26 26 REAL,DIMENSION(klon),INTENT(IN) :: pphis ! Geopotentiel de surface 27 27 REAL,DIMENSION(klon,klev),INTENT(IN) :: pplay ! pression pour le mileu de chaque couche (en Pa) … … 29 29 REAL,DIMENSION(klon),INTENT(IN) :: xlat ! latitudes pour chaque point 30 30 REAL,DIMENSION(klon),INTENT(IN) :: xlon ! longitudes pour chaque point 31 ! 31 32 32 REAL, DIMENSION(klon,klev,2,nbands_sw_rrtm), INTENT(OUT) :: tau_allaer ! epaisseur optique aerosol 33 33 REAL, DIMENSION(klon,klev,2,nbands_sw_rrtm), INTENT(OUT) :: piz_allaer ! single scattering albedo aerosol 34 34 REAL, DIMENSION(klon,klev,2,nbands_sw_rrtm), INTENT(OUT) :: cg_allaer ! asymmetry parameter aerosol 35 ! 35 36 36 REAL,DIMENSION(klon,klev) :: aod_prof, ssa_prof, asy_prof 37 37 REAL,DIMENSION(klon,klev) :: z, dz 38 38 REAL,DIMENSION(klon) :: oro, zrho, zt 39 ! 39 40 40 INTEGER, PARAMETER :: nmon = 12 41 ! 41 42 42 REAL, PARAMETER :: l443 = 443.0, l550 = 550.0, l865 = 865.0 !--wavelengths in nm 43 ! 43 44 44 INTEGER, PARAMETER :: Nwvmax=25 45 45 REAL, DIMENSION(0:Nwvmax), PARAMETER :: lambda=(/ 240.0, & !--this one is for band 1 … … 49 49 1100.0, 1190.0, 1280.0, 1530.0, 1640.0, & 50 50 2130.0, 2380.0, 2910.0, 3420.0, 4000.0 /) 51 ! 51 52 52 REAL, DIMENSION(1:Nwvmax-1), PARAMETER :: weight =(/ & !--and the weights to be given to the bands 53 53 0.01, 4.05, 9.51, 15.99, 26.07, 33.10, & !--corresponding to a typical solar spectrum … … 55 55 42.22, 40.12, 32.70, 14.44, 19.48, 14.23, & 56 56 13.43, 16.42, 8.33, 0.95, 0.65, 2.76 /) 57 ! 57 58 58 REAL :: zlambda, zweight 59 59 REAL :: year_fr 60 ! 60 61 61 INTEGER band, i, k, Nwv 62 ! 62 63 63 ! define the height and dheight arrays 64 ! 64 65 65 oro(:) = pphis(:)/RG ! surface height in m 66 ! 66 67 67 DO k = 1, klev 68 68 zrho(:) = pplay(:,k)/t_seri(:,k)/RD ! air density in kg/m3 … … 76 76 ENDIF 77 77 ENDDO 78 ! 78 79 79 !--fractional year 80 ! 80 81 81 year_fr = FLOAT(year_cur) + (FLOAT(day_cur)-0.5) / FLOAT(year_len) 82 82 IF (year_fr<1850.0.OR.year_fr>=2017.0) THEN 83 83 CALL abort_physic ('macv2sp','year not supported by plume model',1) 84 84 ENDIF 85 ! 85 86 86 !--call to sp routine -- 443 nm 87 ! 87 88 88 CALL sp_aop_profile ( & 89 89 klev ,klon ,l443 ,oro ,xlon ,xlat , & 90 90 year_fr ,z ,dz ,dNovrN ,aod_prof ,ssa_prof , & 91 91 asy_prof ) 92 ! 92 93 93 !--AOD calculations for diagnostics 94 94 od443aer(:)= od443aer(:)+SUM(aod_prof(:,:),dim=2) 95 ! 95 96 96 !--call to sp routine -- 550 nm 97 ! 97 98 98 CALL sp_aop_profile ( & 99 99 klev ,klon ,l550 ,oro ,xlon ,xlat , & 100 100 year_fr ,z ,dz ,dNovrN ,aod_prof ,ssa_prof , & 101 101 asy_prof ) 102 ! 102 103 103 !--AOD calculations for diagnostics 104 104 od550aer(:)=od550aer(:)+SUM(aod_prof(:,:),dim=2) 105 ! 105 106 106 !--dry AOD calculation for diagnostics 107 107 dryod550aer(:)=dryod550aer(:)+od550aer(:) 108 ! 108 109 109 !--fine-mode AOD calculation for diagnostics 110 110 od550lt1aer(:)=od550lt1aer(:)+od550aer(:) 111 ! 111 112 112 !--extinction coefficient for diagnostic 113 113 ec550aer(:,:)=ec550aer(:,:)+aod_prof(:,:)/dz(:,:) 114 ! 114 115 115 !--call to sp routine -- 865 nm 116 ! 116 117 117 CALL sp_aop_profile ( & 118 118 klev ,klon ,l865 ,oro ,xlon ,xlat , & 119 119 year_fr ,z ,dz ,dNovrN ,aod_prof ,ssa_prof , & 120 120 asy_prof ) 121 ! 121 122 122 !--AOD calculations for diagnostics 123 123 od865aer(:)=od865aer(:)+SUM(aod_prof(:,:),dim=2) 124 ! 124 125 125 !--re-weighting of piz and cg arrays before adding the anthropogenic aerosols 126 126 !--index 2 = all natural + anthropogenic aerosols 127 127 piz_allaer(:,:,2,:)=piz_allaer(:,:,2,:)*tau_allaer(:,:,2,:) 128 128 cg_allaer(:,:,2,:) =cg_allaer(:,:,2,:)*piz_allaer(:,:,2,:) 129 ! 129 130 130 !--now computing the same at many wavelengths to fill the model bands 131 ! 131 132 132 DO Nwv=0,Nwvmax-1 133 133 … … 157 157 band=6 158 158 ENDIF 159 ! 159 160 160 CALL sp_aop_profile ( & 161 161 klev ,klon ,zlambda ,oro ,xlon ,xlat , & 162 162 year_fr ,z ,dz ,dNovrN ,aod_prof ,ssa_prof , & 163 163 asy_prof ) 164 ! 164 165 165 !--adding up the quantities tau, piz*tau and cg*piz*tau 166 166 tau_allaer(:,:,2,band)=tau_allaer(:,:,2,band)+zweight*MAX(aod_prof(:,:),1.e-15) 167 167 piz_allaer(:,:,2,band)=piz_allaer(:,:,2,band)+zweight*MAX(aod_prof(:,:),1.e-15)*ssa_prof(:,:) 168 168 cg_allaer(:,:,2,band) =cg_allaer(:,:,2,band) +zweight*MAX(aod_prof(:,:),1.e-15)*ssa_prof(:,:)*asy_prof(:,:) 169 ! 169 170 170 ENDDO 171 ! 171 172 172 !--renpomalizing cg and piz now that MACv2SP increments have been added 173 173 cg_allaer(:,:,2,:) =cg_allaer(:,:,2,:) /piz_allaer(:,:,2,:) 174 174 piz_allaer(:,:,2,:)=piz_allaer(:,:,2,:)/tau_allaer(:,:,2,:) 175 ! 175 176 176 END SUBROUTINE MACv2SP
Note: See TracChangeset
for help on using the changeset viewer.