source: trunk/LMDZ.GENERIC/libf/phystd/aerosol_mod.F90 @ 2613

Last change on this file since 2613 was 2297, checked in by jvatant, 5 years ago

Add a generic n-layer aerosol scheme to replace the former buggy 2-layer scheme as well as the hard-coded NH3 cloud.

It can be called using 'aeronlay=.true.' in callphys.def, and set the number of layers (up to 4) with 'nlayaero'.
Then, the following parameters are read as arrays of size nlayaero in callphys.def (separated by blank space)


*aeronlay_tauref (Optical depth of aerosol layer at ref wavelenght)
*aeronlay_lamref (Ref wavelenght (m))
*aeronlay_choice (Choice for vertical profile - 1:tau follows atm scale height btwn top and bottom - 2:tau follows it own scale height)
*aeronlay_pbot (Bottom pressure (Pa))
*aeronlay_ptop (Top pressure (Pa) - useful only if choice=1)
*aeronlay_sclhght (Ratio of aerosol layer scale height / atmospheric scale height - useful only if choice=2 )
*aeronlay_size (Particle size (m))
*optprop_aeronlay_vis File for VIS opt properties.
*optprop_aeronlay_ir File for IR opt properties.

+Extra info :

+ In addition of solving the bug from 2-layer it enables different optical properties.
+ The former scheme are left for retrocompatibility (for now) but you should use the new one.
+ See aeropacity.F90 for the calculations

+ Each layer can have different optical properties, size of particle ...
+ You have different choices for vertical profile of the aerosol layers :

  • aeronlay_choice = 1 : Layer tau is spread between ptop and pbot following atm scale height.
  • aeronlay_choice = 2 : Layer tau follows its own scale height above cloud deck (pbot).

In this case ptop is dummy and sclhght gives the ratio H_cl/H_atm.

+ The reference wavelenght for input optical depth is now read as input (aeronlay_lamref)
+ Following the last point some comment is added in suaer_corrk about the 'not-really-dummy'ness of IR lamref..

File size: 1.1 KB
RevLine 
[726]1!==================================================================
2module aerosol_mod
[747]3implicit none
4save
[726]5!==================================================================
6
[747]7!  aerosol indexes: these are initialized to be 0 if the
[726]8!                 corresponding aerosol was not activated in callphys.def
[747]9!                 -- otherwise a value is given in iniaerosol
10      integer :: iaero_co2 = 0
11      integer :: iaero_h2o = 0
12      integer :: iaero_dust = 0
13      integer :: iaero_h2so4 = 0
14      logical :: noaero = .false.
[1026]15
16! two-layer simple aerosol model
17      integer :: iaero_back2lay = 0
[1677]18 ! NH3 cloud
19      integer :: iaero_nh3 = 0
[2297]20! N-layer aerosol model (replaces the 2-layer and hard-coded clouds)
21      integer,dimension(:),allocatable,save :: iaero_nlay
22! Auroral aerosols
[1677]23      integer :: iaero_aurora = 0
[2297]24!$OMP THREADPRIVATE(iaero_co2,iaero_h2o,iaero_dust,iaero_h2so4,noaero,iaero_back2lay,iaero_nh3,iaero_nlay,iaero_aurora)
[741]25     
[726]26!==================================================================
27end module aerosol_mod
28!==================================================================
Note: See TracBrowser for help on using the repository browser.