Changeset 1026 for trunk/LMDZ.GENERIC/libf
- Timestamp:
- Aug 30, 2013, 4:00:31 PM (11 years ago)
- Location:
- trunk/LMDZ.GENERIC/libf/phystd
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.GENERIC/libf/phystd/aeropacity.F90
r858 r1026 67 67 68 68 LOGICAL,SAVE :: firstcall=.true. 69 70 69 REAL CBRT 71 70 EXTERNAL CBRT … … 119 118 if (iaero_h2so4.ne.0) then 120 119 print*,'iaero_h2so4= ',iaero_h2so4 120 endif 121 if (iaero_back2lay.ne.0) then 122 print*,'iaero_back2lay= ',iaero_back2lay 121 123 endif 122 124 … … 356 358 357 359 360 ! --------------------------------------------------------- 361 !================================================================== 362 ! Two-layer aerosols (unknown composition) 363 ! S. Guerlet (2013) 364 !================================================================== 365 366 if (iaero_back2lay .ne.0) then 367 iaer=iaero_back2lay 368 ! 1. Initialization 369 aerosol(1:ngrid,1:nlayermx,iaer)=0.0 370 ! 2. Opacity calculation 371 DO ig=1,ngrid 372 DO l=1,nlayer-1 373 aerosol(ig,l,iaer) = ( pplev(ig,l) - pplev(ig,l+1) ) 374 !! 1. below tropospheric layer: no aerosols 375 IF (pplev(ig,l) .gt. pres_bottom_tropo) THEN 376 aerosol(ig,l,iaer) = 0.*aerosol(ig,l,iaer) 377 !! 2. tropo layer 378 ELSEIF (pplev(ig,l) .le. pres_bottom_tropo .and. pplev(ig,l) .ge. pres_top_tropo) THEN 379 aerosol(ig,l,iaer) = obs_tau_col_tropo*aerosol(ig,l,iaer) 380 !! 3. linear transition 381 ELSEIF (pplev(ig,l) .lt. pres_top_tropo .and. pplev(ig,l) .gt. pres_bottom_strato) THEN 382 expfactor=log(obs_tau_col_strato/obs_tau_col_tropo)/log(pres_bottom_strato/pres_top_tropo) 383 aerosol(ig,l,iaer)= obs_tau_col_tropo*((pplev(ig,l)/pres_top_tropo)**expfactor)*aerosol(ig,l,iaer) 384 !! 4. strato layer 385 ELSEIF (pplev(ig,l) .le. pres_bottom_strato .and. pplev(ig,l) .gt. pres_top_strato) THEN 386 aerosol(ig,l,iaer)= obs_tau_col_strato*aerosol(ig,l,iaer) 387 !! 5. above strato layer: no aerosols 388 ELSEIF (pplev(ig,l) .lt. pres_top_strato) THEN 389 aerosol(ig,l,iaer) = 0.*aerosol(ig,l,iaer) 390 ENDIF 391 ENDDO 392 ENDDO 393 394 ! 3. Re-normalize to observed total column 395 tau_col(:)=0.0 396 DO l=1,nlayer 397 DO ig=1,ngrid 398 tau_col(ig) = tau_col(ig) & 399 + aerosol(ig,l,iaer)/(obs_tau_col_tropo+obs_tau_col_strato) 400 ENDDO 401 ENDDO 402 403 DO ig=1,ngrid 404 DO l=1,nlayer-1 405 aerosol(ig,l,iaer)=aerosol(ig,l,iaer)/tau_col(ig) 406 ENDDO 407 ENDDO 408 409 410 end if ! if Two-layer aerosols 411 358 412 359 413 ! -------------------------------------------------------------------------- -
trunk/LMDZ.GENERIC/libf/phystd/aerosol_mod.F90
r747 r1026 13 13 integer :: iaero_h2so4 = 0 14 14 logical :: noaero = .false. 15 16 ! two-layer simple aerosol model 17 integer :: iaero_back2lay = 0 18 REAL :: obs_tau_col_tropo !! observed total optical depth in the tropospheric layer (visible) 19 REAL :: obs_tau_col_strato !! observed total optical depth in the stratospheric layer (visible) 20 REAL :: pres_bottom_tropo !! In Pa ! 21 REAL :: pres_top_tropo !! In Pa 22 REAL :: pres_bottom_strato !! In Pa 23 REAL :: pres_top_strato !! In Pa 24 REAL :: size_tropo !! particle size in the tropospheric layer 25 REAL :: size_strato !! particle size in the stratospheric layer 15 26 16 27 !================================================================== -
trunk/LMDZ.GENERIC/libf/phystd/callcorrk.F90
r1016 r1026 14 14 use ioipsl_getincom 15 15 use gases_h 16 use radii_mod, only : su_aer_radii,co2_reffrad,h2o_reffrad,dust_reffrad,h2so4_reffrad 17 use aerosol_mod, only : iaero_co2,iaero_h2o,iaero_dust,iaero_h2so4 16 use radii_mod, only : su_aer_radii,co2_reffrad,h2o_reffrad,dust_reffrad,h2so4_reffrad,back2lay_reffrad 17 use aerosol_mod, only : iaero_co2,iaero_h2o,iaero_dust,iaero_h2so4, iaero_back2lay 18 18 USE tracer_h 19 19 … … 286 286 print*,'H2SO4 particle size =',reffrad(1,1,iaer)/1.e-6,' um' 287 287 endif 288 end do !iaer=1,naerkind 288 if(iaer.eq.iaero_back2lay)then 289 call back2lay_reffrad(ngrid,reffrad(1,1,iaero_back2lay),nlayer,pplev) 290 endif 291 end do !iaer=1,naerkind 289 292 290 293 … … 302 305 reffrad,QREFvis3d,QREFir3d, & 303 306 tau_col,cloudfrac,totcloudfrac,clearsky) ! get aerosol optical depths 304 307 305 308 !----------------------------------------------------------------------- 306 309 ! Starting Big Loop over every GCM column -
trunk/LMDZ.GENERIC/libf/phystd/callkeys.h
r952 r1026 22 22 & , tracer, mass_redistrib, varactive, varfixed, satval & 23 23 & , sedimentation,water,watercond,waterrain & 24 & , aeroco2,aeroh2o,aeroh2so4 24 & , aeroco2,aeroh2o,aeroh2so4,aeroback2lay & 25 25 & , aerofixco2,aerofixh2o & 26 26 & , hydrology, sourceevol, icetstep, albedosnow & … … 58 58 logical sedimentation 59 59 logical water,watercond,waterrain 60 logical aeroco2,aeroh2o,aeroh2so4 60 logical aeroco2,aeroh2o,aeroh2so4,aeroback2lay 61 61 logical aerofixco2,aerofixh2o 62 62 logical hydrology -
trunk/LMDZ.GENERIC/libf/phystd/iniaerosol.F
r747 r1026 12 12 c (CO2 aerosols, dust, water, chemical species, ice...) 13 13 c 14 c author: Laura Kerber 14 c author: Laura Kerber, S. Guerlet 15 15 c ------ 16 16 c … … 46 46 write(*,*) '--- H2SO4 aerosol = ', iaero_h2so4 47 47 48 if (aeroback2lay) then 49 ia=ia+1 50 iaero_back2lay=ia 51 !! define aerosols parameters (should be in a .def?) 52 !! Saturn: Roman et al. Icarus 2013 2-layer scenario (ISS observations) 53 obs_tau_col_tropo=8.D0 !! observed total optical depth in the tropospheric layer (visible) 54 obs_tau_col_strato=0.08D0 !! observed total optical depth in the stratospheric layer (visible) 55 pres_bottom_tropo= 66000.0 !! In Pa ! 56 pres_top_tropo= 18000.0 !! In Pa 57 pres_bottom_strato= 10000.0 !! In Pa 58 pres_top_strato= 100.0 !! In Pa 59 size_tropo=2.e-6 !! particle size in the tropospheric layer, in meters 60 size_strato=1.e-7 !! particle size in the stratospheric layer 61 endif 62 write(*,*) '--- Two-layer aerosol = ', iaero_back2lay 63 64 48 65 write(*,*) '=== Number of aerosols= ', ia 49 66 -
trunk/LMDZ.GENERIC/libf/phystd/inifis.F
r961 r1026 431 431 call getin("aeroh2so4",aeroh2so4) 432 432 write(*,*)" aeroh2so4 = ",aeroh2so4 433 434 write(*,*)"Radiatively active two-layer aersols?" 435 aeroback2lay=.false. ! default value 436 call getin("aeroback2lay",aeroback2lay) 437 write(*,*)" aeroback2lay = ",aeroback2lay 438 433 439 434 440 write(*,*)"Cloud pressure level (with kastprof only):" -
trunk/LMDZ.GENERIC/libf/phystd/radii_mod.F90
r863 r1026 76 76 nueffrad(1:ngrid,1:nlayermx,iaer) = 0.1 77 77 endif 78 79 if(iaer.gt.4)then 80 print*,'Error in callcorrk, naerkind is too high (>4).' 78 79 if(iaer.eq.iaero_back2lay)then ! Two-layer aerosols 80 reffrad(1:ngrid,1:nlayermx,iaer) = 2.e-6 81 nueffrad(1:ngrid,1:nlayermx,iaer) = 0.1 82 endif 83 84 85 86 if(iaer.gt.5)then 87 print*,'Error in callcorrk, naerkind is too high (>5).' 81 88 print*,'The code still needs generalisation to arbitrary' 82 89 print*,'aerosol kinds and number.' … … 323 330 !================================================================== 324 331 332 !================================================================== 333 subroutine back2lay_reffrad(ngrid,reffrad,nlayer,pplev) 334 !================================================================== 335 ! Purpose 336 ! ------- 337 ! Compute the effective radii of particles in a 2-layer model 338 ! 339 ! Authors 340 ! ------- 341 ! Sandrine Guerlet (2013) 342 ! 343 !================================================================== 344 345 use aerosol_mod !! Particle sizes and boundaries of aerosol layers defined there 346 Implicit none 347 348 #include "callkeys.h" 349 #include "dimensions.h" 350 #include "dimphys.h" 351 352 integer,intent(in) :: ngrid 353 354 real, intent(out) :: reffrad(ngrid,nlayermx) ! particle radii 355 REAL,INTENT(IN) :: pplev(ngrid,nlayer+1) ! inter-layer pressure (Pa) 356 INTEGER,INTENT(IN) :: nlayer ! number of atmospheric layers 357 REAL :: expfactor 358 INTEGER l,ig 359 360 reffrad(:,:)=1e-6 !!initialization, not important 361 DO ig=1,ngrid 362 DO l=1,nlayer-1 363 IF (pplev(ig,l) .le. pres_bottom_tropo .and. pplev(ig,l) .ge. pres_top_tropo) THEN 364 reffrad(ig,l) = size_tropo 365 ELSEIF (pplev(ig,l) .lt. pres_top_tropo .and. pplev(ig,l) .gt. pres_bottom_strato) THEN 366 expfactor=log(size_strato/size_tropo) / log(pres_bottom_strato/pres_top_tropo) 367 reffrad(ig,l)= size_tropo*((pplev(ig,l)/pres_top_tropo)**expfactor) 368 ELSEIF (pplev(ig,l) .le. pres_bottom_strato) then 369 reffrad(ig,l) = size_strato 370 ENDIF 371 ENDDO 372 ENDDO 373 374 end subroutine back2lay_reffrad 375 !================================================================== 376 325 377 326 378 -
trunk/LMDZ.GENERIC/libf/phystd/suaer_corrk.F90
r804 r1026 167 167 ! added by LK 168 168 endif 169 170 if (iaer.eq.iaero_back2lay) then 171 print*, 'naerkind= back2lay', iaer 172 173 ! visible 174 file_id(iaer,1) = 'optprop_saturn_vis_n20.dat' 175 lamrefvis(iaer)=0.8E-6 ! 176 ! infrared 177 file_id(iaer,2) = 'optprop_saturn_ir_n20.dat' 178 lamrefir(iaer)=6.E-6 ! 179 ! added by SG 180 endif 181 169 182 170 183 enddo
Note: See TracChangeset
for help on using the changeset viewer.