Changeset 5717 for LMDZ6/branches/contrails/libf/phylmd/Dust
- Timestamp:
- Jun 18, 2025, 5:12:20 PM (5 weeks ago)
- Location:
- LMDZ6/branches/contrails
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/contrails
- Property svn:mergeinfo changed
/LMDZ6/trunk merged: 5603,5605,5607,5610-5612,5614,5617,5620,5622,5627-5630,5633,5635-5636,5638,5640,5645-5653
- Property svn:mergeinfo changed
-
LMDZ6/branches/contrails/libf/phylmd/Dust/coarsemission.f90
r5337 r5717 5 5 xlat,xlon,debutphy, & 6 6 zu10m,zv10m,wstar,ale_bl,ale_wake, & 7 nsurfwind,wind10ms,probu, & 7 8 scale_param_ssacc,scale_param_sscoa, & 8 9 scale_param_dustacc,scale_param_dustcoa, & … … 54 55 REAL, intent(in) :: xlat(klon) ! latitudes pour chaque point 55 56 REAL, intent(in) :: xlon(klon) ! longitudes pour chaque point 57 INTEGER, intent(in) :: nsurfwind 56 58 REAL,DIMENSION(klon),INTENT(IN) :: zu10m 57 59 REAL,DIMENSION(klon),INTENT(IN) :: zv10m 58 60 REAL,DIMENSION(klon),INTENT(IN) :: wstar,Ale_bl,ale_wake 61 REAL,DIMENSION(klon,nsurfwind),INTENT(IN) :: wind10ms 62 REAL,DIMENSION(klon,nsurfwind),INTENT(IN) :: probu 59 63 60 64 ! … … 190 194 param_wstarWAKE(i)=param_wstarWAKEperregion(iregion_wstardust(i)) 191 195 ENDDO 192 193 194 CALL dustemission( debutphy, xlat, xlon, pctsrf, &196 197 198 CALL dustemission( debutphy, xlat, xlon, nsurfwind, pctsrf, & 195 199 zu10m,zv10m,wstar,ale_bl,ale_wake, & 196 200 param_wstarBL, param_wstarWAKE, & 201 wind10ms, probu, & 197 202 dustsourceacc,dustsourcecoa, & 198 203 dustsourcesco,maskd) -
LMDZ6/branches/contrails/libf/phylmd/Dust/dustemission_mod.f90
r5337 r5717 11 11 INTEGER, PARAMETER :: nmode=3 ! number of soil-dust modes 12 12 INTEGER, PARAMETER :: ntyp=5 ! number of soil types 13 INTEGER, PARAMETER :: nwb=12 ! number of points for the 10m wind13 !INTEGER, PARAMETER :: nwb=12 ! number of points for the 10m wind 14 14 ! speed weibull distribution (>=2) 15 15 real ,parameter :: z10m=1000. !10m in cm … … 165 165 END SUBROUTINE dustemis_out_init 166 166 167 SUBROUTINE dustemission( debutphy, xlat, xlon, & !Input167 SUBROUTINE dustemission( debutphy, xlat, xlon, nsurfwind, & !Input 168 168 pctsrf,zu10m,zv10m,wstar, & !Input 169 169 ale_bl,ale_wake, & !Input 170 param_wstarBL, param_wstarWAKE, & !Input 170 param_wstarBL, param_wstarWAKE, & !Input 171 wind10ms, probu, & !Input 171 172 emdustacc,emdustcoa,emdustsco,maskdust) !Output 172 173 USE dimphy … … 182 183 ! first: 183 184 ! Model grid parameters 185 INTEGER, INTENT(IN) :: nsurfwind 184 186 REAL,DIMENSION(klon), INTENT(IN) :: xlat 185 187 REAL,DIMENSION(klon), INTENT(IN) :: xlon … … 190 192 REAL,DIMENSION(klon),INTENT(IN) :: ale_bl 191 193 REAL,DIMENSION(klon),INTENT(IN) :: ale_wake 194 !REAL,DIMENSION(klon),INTENT(IN) :: wake_s 195 !REAL,DIMENSION(klon),INTENT(IN) :: wake_Cstar 196 !REAL,DIMENSION(klon),INTENT(IN) :: zustar 192 197 REAL,DIMENSION(klon), INTENT(IN) :: param_wstarWAKE 193 198 REAL,DIMENSION(klon), INTENT(IN) :: param_wstarBL 194 199 195 200 201 REAL,DIMENSION(klon,nsurfwind), INTENT(IN) :: wind10ms 202 REAL,DIMENSION(klon,nsurfwind), INTENT(IN) :: probu 203 196 204 LOGICAL :: debutphy ! First physiqs run or not 197 205 ! Intermediate variable: 12 bins emissions 198 REAL,DIMENSION(:,:), ALLOCATABLE,SAVE :: emisbinloc ! vertical emission fluxes 206 !REAL,DIMENSION(:,:), ALLOCATABLE,SAVE :: emisbinloc ! vertical emission fluxes 207 REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: emisbinloc 199 208 200 209 !OUT variables … … 206 215 ! REAL,DIMENSION(klon_glo) :: raux_klon_glo ! auxiliar 207 216 208 !$OMP THREADPRIVATE(emisbinloc) 217 INTEGER :: nwb 218 nwb = nsurfwind 219 !!!$OMP THREADPRIVATE(emisbinloc) 209 220 !!!!!!$OMP THREADPRIVATE(maskdust) 210 221 IF (debutphy) THEN … … 217 228 218 229 !JE20141124 CALL calcdustemission(debutphy,zu10m,zv10m,wstar,ale_bl,ale_wake,emisbinloc) 219 CALL calcdustemission(debutphy, zu10m,zv10m,wstar,ale_bl,ale_wake,param_wstarBL,param_wstarWAKE, & !I220 emisbinloc) !O230 CALL calcdustemission(debutphy,nsurfwind,zu10m,zv10m,wstar,ale_bl,ale_wake,param_wstarBL,param_wstarWAKE, & !I 231 wind10ms,probu,emisbinloc) !O 221 232 222 233 CALL makemask(maskdust) … … 654 665 varname='A' 655 666 CALL read_surface(varname,Aini) 656 print *,'beforewritephy',mpi_rank,omp_rank667 !print *,'beforewritephy',mpi_rank,omp_rank 657 668 CALL writefield_phy("SOLinit",solini,5) 658 669 CALL writefield_phy("Pinit",Pini,5) … … 662 673 CALL writefield_phy("Dinit",Dini,5) 663 674 CALL writefield_phy("Ainit",Aini,5) 664 print *,'afterwritephy',mpi_rank,omp_rank675 !print *,'afterwritephy',mpi_rank,omp_rank 665 676 666 677 DO i=1,klon … … 765 776 enddo 766 777 30 continue 767 print*,'IK5'778 ! print*,'IK5' 768 779 ncl=i-1 769 770 780 ! print*,' soil size classes used ',ncl,' / ',nclass 781 ! print*,' soil size min: ',sizeclass(1),' soil size max: ',sizeclass(ncl) 771 782 if(ncl.gt.nclass)stop 772 783 … … 775 786 !if (.true.) then 776 787 !c 0: Iversen and White 1982 777 print *,'Using Iversen and White 1982 Uth'788 ! print *,'Using Iversen and White 1982 Uth' 778 789 do i=1,ncl 779 790 bb=adust*(sizeclass(i)**xdust)+bdust … … 1107 1118 !-------------------------------------------------------------------------------------- 1108 1119 1109 SUBROUTINE calcdustemission(debutphy, zu10m,zv10m,wstar, &1120 SUBROUTINE calcdustemission(debutphy,nsurfwind,zu10m,zv10m,wstar, & 1110 1121 ale_bl,ale_wake,param_wstarBL,param_wstarWAKE, & 1122 wind10ms, probu, & 1111 1123 emisbin) 1112 1124 ! emisions over 12 dust bin … … 1117 1129 ! Input 1118 1130 LOGICAL, INTENT(IN) :: debutphy ! First physiqs run or not 1131 INTEGER, INTENT(IN) :: nsurfwind ! First physiqs run or not 1119 1132 REAL,DIMENSION(klon),INTENT(IN) :: zu10m ! 10m zonal wind 1120 1133 REAL,DIMENSION(klon),INTENT(IN) :: zv10m ! meridional 10m wind … … 1122 1135 REAL,DIMENSION(klon),INTENT(IN) :: ale_bl 1123 1136 REAL,DIMENSION(klon),INTENT(IN) :: ale_wake 1137 REAL,DIMENSION(klon,nsurfwind),INTENT(IN) :: wind10ms 1138 REAL,DIMENSION(klon,nsurfwind),INTENT(IN) :: probu 1124 1139 1125 1140 ! Local variables … … 1130 1145 REAL,DIMENSION(klon), INTENT(IN) :: param_wstarBL 1131 1146 REAL,DIMENSION(:,:), ALLOCATABLE,SAVE :: fluxdust ! horizonal emission fluxes in UNITS for the nmod soil aerosol modes 1132 REAL,DIMENSION(:), ALLOCATABLE,SAVE :: wind10ms ! 10m wind distribution in m/s1133 REAL,DIMENSION(:), ALLOCATABLE,SAVE :: wind10cm ! 10m wind distribution in cm/s1147 !REAL,DIMENSION(:), ALLOCATABLE,SAVE :: wind10ms ! 10m wind distribution in m/s 1148 !REAL,DIMENSION(:), ALLOCATABLE,SAVE :: wind10cm ! 10m wind distribution in cm/s 1134 1149 REAL,DIMENSION(klon) :: zwstar 1135 REAL,DIMENSION(nwb) :: probu1150 !REAL,DIMENSION(nwb) :: probu 1136 1151 ! REAL, DIMENSION(nmode) :: fluxN,ftN,adN,fdpN,pN,eN ! in the original code N=1,2,3 1137 1152 REAL :: flux1,flux2,flux3,ft1,ft2,ft3 … … 1147 1162 REAL :: dfec1,dfec2,dfec3,t1,t2,t3,p1,p2,p3,dec,ec 1148 1163 ! auxiliar counters 1149 INTEGER :: kwb 1164 INTEGER :: kwb, nwb 1150 1165 INTEGER :: i,j,k,l,n 1151 1166 INTEGER :: kfin,ideb,ifin,kfin2,istep … … 1155 1170 !REAL,DIMENSION(:,:), ALLOCATABLE,SAVE :: emisbin ! vertical emission fluxes in UNITS for the 12 bins 1156 1171 REAL,DIMENSION(klon,nbins) :: emisbin ! vertical emission fluxes in UNITS for the 12 bins 1157 !$OMP THREADPRIVATE(fluxdust) 1158 !$OMP THREADPRIVATE(wind10ms) 1159 !$OMP THREADPRIVATE(wind10cm) 1172 !$OMP THREADPRIVATE(fluxdust) 1173 !!!$OMP THREADPRIVATE(wind10ms) 1174 !!!$OMP THREADPRIVATE(wind10cm) 1175 1160 1176 1161 1177 !---------------------------------------------------- … … 1165 1181 ! ALLOCATE( emisbin(klon,nbins) ) 1166 1182 ALLOCATE( fluxdust(klon,nmode) ) 1167 ALLOCATE( wind10ms(nwb) )1168 ALLOCATE( wind10cm(nwb) )1183 ! ALLOCATE( wind10ms(klon,nsurfwind) ) 1184 !ALLOCATE( wind10cm(nwb) ) 1169 1185 ENDIF !debutphy 1170 1186 … … 1190 1206 ! 1191 1207 DO i=1,klon ! main loop 1192 zwstar(i)=sqrt(2.*(param_wstarBL(i)*ale_bl(i)+param_wstarWAKE(i)*ale_wake(i))) 1193 U10mMOD=MAX(woff,sqrt(zu10m(i)*zu10m(i)+zv10m(i)*zv10m(i))) 1194 pdfcum=0. 1208 ! zwstar(i)=sqrt(2.*(param_wstarBL(i)*ale_bl(i)+param_wstarWAKE(i)*ale_wake(i))) 1209 zwstar(i)=sqrt(2.*(param_wstarBL(i)*ale_bl(i))) 1195 1210 ! Wind weibull distribution: 1196 1211 nwb = nsurfwind 1212 ! print*,'GGGGGGGGGGGGGGGGGGGGGGGGG nwb=',nwb 1197 1213 DO kwb=1,nwb 1198 1214 flux1=0. … … 1204 1220 ! lambda=U10mMOD/gamma(1+1/kref) 1205 1221 ! gamma function estimated with stirling formula 1206 auxreal=1.+1./kref1207 weilambda = U10mMOD/exp(auxreal*log(auxreal)-auxreal &1208 - 0.5*log(auxreal/(2.*pi))+1./(12.*auxreal) &1209 -1./(360.*(auxreal**3.))+1./(1260.*(auxreal**5.)))1210 IF(nwb.gt.1)THEN1211 wind10ms(kwb)=kwb*2.*U10mMOD/nwb1212 !original1213 ! pdfu=(kref/U10mMOD)*(wind10ms(kwb)/U10mMOD)**(kref-1) &1214 ! *exp(-(wind10ms(kwb)/U10mMOD)**kref)1215 pdfu=(kref/weilambda)*(wind10ms(kwb)/weilambda)**(kref-1) &1216 *exp(-(wind10ms(kwb)/weilambda)**kref)1217 ! !print *,'JEdbg U10mMOD weilambda ',U10mMOD,weilambda1218 !JE20141205>>1219 1220 probu(kwb)=pdfu*2.*U10mMOD/nwb1221 pdfcum=pdfcum+probu(kwb)1222 IF(probu(kwb).le.1.e-2)GOTO 701223 ELSE1224 wind10ms(kwb)=U10mMOD1225 probu(kwb)=1.1226 ENDIF1227 wind10cm(kwb)=wind10ms(kwb)*100.1228 1222 DO n=1,ntyp 1229 1223 ft1=0. … … 1268 1262 ! Cas ou wsta=0. 1269 1263 cdnms=vkarm/(log(z10m/z0salt)) 1270 modwm=sqrt((wind10ms( kwb)**2)+(1.2*zwstar(i))**2)1264 modwm=sqrt((wind10ms(i,kwb)**2)+(1.2*zwstar(i))**2) 1271 1265 ustarns=cdnms*modwm*100. 1272 1266 ustarsalt=ustarns 1273 1267 ! print*,'LAAAAAAAAAAAAAAAAAA modwm=',modwm 1274 1268 1275 1269 IF(ustarsalt.lt.umin/ceff)GOTO 80 … … 1327 1321 ENDDO !n=1,ntyp 1328 1322 70 CONTINUE 1329 fluxdust(i,1)=fluxdust(i,1)+flux1*probu( kwb)1330 fluxdust(i,2)=fluxdust(i,2)+flux2*probu( kwb)1331 fluxdust(i,3)=fluxdust(i,3)+flux3*probu( kwb)1323 fluxdust(i,1)=fluxdust(i,1)+flux1*probu(i,kwb) 1324 fluxdust(i,2)=fluxdust(i,2)+flux2*probu(i,kwb) 1325 fluxdust(i,3)=fluxdust(i,3)+flux3*probu(i,kwb) 1332 1326 ENDDO !kwb=1,nwb 1333 1327 m1dflux(i)=10.*fluxdust(i,1) … … 1410 1404 enddo 1411 1405 if(kfin.ge.nclass)then 1412 1406 ! print*,'$$$$ Tables dimension problem:',kfin,'>',nclass 1413 1407 endif 1414 1408 !--------------- -
LMDZ6/branches/contrails/libf/phylmd/Dust/phytracr_spl_mod.F90
r5618 r5717 804 804 beta_fisrt,beta_v1, & ! I 805 805 zu10m,zv10m,wstar,ale_bl,ale_wake, & ! I 806 nsurfwind,wind10ms,probu, & ! I 806 807 d_tr_dyn,tr_seri) ! O 807 808 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 847 848 ! divers: 848 849 ! ------- 849 ! 850 INTEGER, intent(in) :: nsurfwind 851 REAL,DIMENSION(klon,nsurfwind),INTENT(IN) :: wind10ms 852 REAL,DIMENSION(klon,nsurfwind),INTENT(IN) :: probu 850 853 real,intent(in) :: pdtphys ! pas d'integration pour la physique (seconde) 851 854 REAL, intent(in):: jD_cur, jH_cur … … 2153 2156 rlat,rlon,debutphy, & 2154 2157 zu10m,zv10m,wstar,ale_bl,ale_wake, & 2158 nsurfwind,wind10ms,probu, & 2155 2159 scale_param_ssacc,scale_param_sscoa, & 2156 2160 scale_param_dustacc,scale_param_dustcoa, &
Note: See TracChangeset
for help on using the changeset viewer.