Changeset 6149 for LMDZ6/trunk/libf/phylmd/mo_simple_plumes.f90
- Timestamp:
- Apr 1, 2026, 6:36:00 PM (9 days ago)
- File:
-
- 1 edited
-
LMDZ6/trunk/libf/phylmd/mo_simple_plumes.f90 (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/mo_simple_plumes.f90
r6128 r6149 21 21 !! @par Copyright 22 22 !! 23 !! 2026-03, A.Sima (LMD): for calculation optimisation, the main subroutine sp_aop_profile is split in 2 subroutines : 23 !! 2026-03 24 !! A.Sima (LMD): for calculation optimisation, the main subroutine sp_aop_profile is split in 2 subroutines : 24 25 !! sp_aod550_profile : calculates aod550um profile from macv2sp data (which are for 550um themselves), and dNovrN factor 25 26 !! at each timestep is only called in macv2sp once ; … … 28 29 !! - aod diagnostics at 443 and 865um, 29 30 !! - optical properties (aod, ssa, asy) for the Nwvmax=25 wavelengths filling the 6 RRTM bands 31 !! ASima, FH : bug corrected in aod vertical profile calculation, concerning the impact of orography 30 32 ! 31 33 MODULE mo_simple_plumes … … 37 39 INTEGER, PARAMETER, PUBLIC :: nplumes = 9 !< Number of plumes 38 40 39 ! INTEGER, PARAMETER :: &40 ! nplumes = 9 ,& !< Number of plumes41 41 INTEGER, PARAMETER :: & 42 42 nfeatures = 2 ,& !< Number of features per plume … … 73 73 !$OMP THREADPRIVATE(sig_lon_E,sig_lon_W,sig_lat_E,sig_lat_W,theta,ftr_weight,year_weight,ann_cycle) 74 74 75 REAL, SAVE :: beta_sum (nplumes) ! numerically calculated integral of beta function (ASima,FH) 76 !$OMP THREADPRIVATE(beta_sum) 77 75 78 REAL :: & 76 79 time_weight (nfeatures,nplumes) ,& !< Time weights … … 85 88 ! climatology. The information needs to be either read by each processor or distributed to processors. 86 89 ! 90 ! (ASima,FH : added call to sp_beta_sup to compute the integral of beta profile by plume, only once at initialisation 91 ! 87 92 SUBROUTINE sp_setup 88 93 ! … … 290 295 CALL bcast(ann_cycle) 291 296 ! 297 !(ASima,FH) Calculate beta function integral for the 9 plumes 298 CALL sp_beta_sum 299 ! 292 300 sp_initialized = .TRUE. 293 301 ! … … 295 303 ! 296 304 END SUBROUTINE sp_setup 305 ! 306 ! ------------------------------------------------------------------------------------------------------------------------ 307 ! (ASima, FH) sp_beta_sum : numerically calculates the integral of beta function for each of the 9 plumes : 308 ! B(p_i, q_i) in eq.(8) of Stevens et al (2017) 309 ! To be only called once in the beginning of an integration period, same as (and just after) sp_setup. 310 ! The beta-function vertical profiles of optical properties apply from 0 (sea level) to zmax=15 km. 311 ! They only depend of plume caracteristics read in SP aerosol file. 312 ! 313 SUBROUTINE sp_beta_sum 314 ! 315 ! ---------- 316 ! 317 ! 318 INTEGER, PARAMETER :: nmax=1000 ! nb. of layers for discretisation of 0 to 1 interval 319 320 !REAL, DIMENSION(nplumes) :: beta_sum ! numerically calculated integral of beta function 321 322 INTEGER :: iplume, k 323 324 REAL :: eta, d_eta ! normalised height and thickness of a discretisation layer 325 REAL :: beta_eta ! beta function value at relative height eta 326 327 328 d_eta = 1/float(nmax) ! = layer thickness in discretisation of 0 to 1 interval 329 330 ! For each plume, sum over beta function values at the middle of each d_eta layer 331 DO iplume=1,nplumes 332 333 beta_sum(iplume) = 0. ! initialisation 334 335 DO k=1,nmax 336 eta = (k - 0.5)/float(nmax) 337 beta_eta = eta**(beta_a(iplume)-1.) * (1.-eta)**(beta_b(iplume)-1.) 338 beta_sum(iplume) = beta_sum(iplume) + beta_eta * d_eta 339 ENDDO 340 ENDDO 341 ! DO iplume=1,nplumes 342 ! print*,'beta_sum(',iplume,') = ', beta_sum(iplume) 343 ! ENDDO 344 ! 345 RETURN 346 ! 347 END SUBROUTINE sp_beta_sum 297 348 ! 298 349 ! ------------------------------------------------------------------------------------------------------------------------ … … 339 390 ! It also computes the dNovrN factor used to mimic Twomey (aci) effect by multiplying preind. cloud droplet number 340 391 ! 341 SUBROUTINE sp_aod550_profile ( &342 nlevels ,ncol , oro ,lon ,lat , &392 SUBROUTINE sp_aod550_profile ( & 393 nlevels ,ncol ,lon ,lat , & 343 394 decimal_year ,z ,dz ,dNovrN , aod550 ) 344 395 … … 352 403 REAL, INTENT(IN) :: & 353 404 decimal_year, & !< Fractional Year (1903.0 is the 0Z on the first of January 1903, Gregorian) 354 oro(ncol), & !< orographic height (m)355 405 lon(ncol), & !< longitude 356 406 lat(ncol), & !< latitude … … 363 413 364 414 INTEGER :: iplume, icol, k 415 416 REAL, PARAMETER :: zmax = 15000 ! max altitude up to which beta-function profiles apply 365 417 366 418 REAL :: & 367 eta (ncol,nlevels), & !< normalized height (by 15 km)368 z_beta(ncol,nlevels), & !< profile for scaling column optical depth419 eta_lmdz(ncol,nlevels), & !< normalized height (by zmax = 15 km) 420 d_eta_lmdz(ncol,nlevels), & !< normalized height (by zmax = 15 km) 369 421 prof(ncol,nlevels), & !< scaled profile (by beta function) 370 beta_sum(ncol), & !< vertical sum of beta function371 422 cw_an(ncol), & !< column weight for simple plume (anthropogenic) AOD at 550 nm 372 423 cw_bg(ncol), & !< column weight for fine-mode natural background AOD at 550 nm … … 401 452 DO k=1,nlevels 402 453 DO icol=1,ncol 403 z_beta(icol,k) = MERGE(1.0, 0.0, z(icol,k) >= oro(icol))404 eta(icol,k) = MAX(0.0,MIN(1.0,z(icol,k)/15000.))454 eta_lmdz(icol,k) = MIN(1.0,z(icol,k)/15000.) 455 d_eta_lmdz(icol,k) = dz(icol,k)/15000. 405 456 ENDDO 406 457 ENDDO … … 411 462 ENDDO 412 463 ! 464 ! DO iplume=1,nplumes 465 ! print*,'IN sp_aod550 : beta_sum(',iplume,') = ', beta_sum(iplume) 466 ! ENDDO 467 413 468 ! sum contribution from plumes to construct composite profiles of aerosol optical properties 414 469 ! … … 417 472 ! calculate vertical distribution function from parameters of beta distribution 418 473 ! 419 DO icol=1,ncol420 beta_sum(icol) = 0.421 ENDDO422 474 DO k=1,nlevels 423 475 DO icol=1,ncol 424 prof(icol,k) = (eta(icol,k)**(beta_a(iplume)-1.) * (1.-eta(icol,k))**(beta_b(iplume)-1.)) * dz(icol,k) 425 beta_sum(icol) = beta_sum(icol) + prof(icol,k) 426 ENDDO 427 ENDDO 428 DO k=1,nlevels 429 DO icol=1,ncol 430 prof(icol,k) = ( prof(icol,k) / beta_sum(icol) ) * z_beta(icol,k) 476 prof(icol,k) = (eta_lmdz(icol,k)**(beta_a(iplume)-1.) * (1.-eta_lmdz(icol,k))**(beta_b(iplume)-1.)) * d_eta_lmdz(icol,k)/beta_sum(iplume) 431 477 ENDDO 432 478 ENDDO … … 495 541 ! ------------------------------------------------------------------------------------------------------------------------ 496 542 497 SUBROUTINE sp_aop_profile ( & 498 nlevels ,ncol ,lambda , & 499 aod550 ,aod_prof ,ssa_prof , & 500 asy_prof ) 543 SUBROUTINE sp_aop_profile ( & 544 nlevels ,ncol ,lambda , & 545 aod550 ,aod_prof ,ssa_prof ,asy_prof ) 501 546 ! 502 547 ! ----------
Note: See TracChangeset
for help on using the changeset viewer.
