123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330 |
- #include "tm5.inc"
- #ifdef with_budgets
- SUBROUTINE m7(kproma, kbdim, klev, & ! TM5 indices
- papp1, prelhum, ptp1, & ! " thermodynamics
- pso4g, pelvoc, psvoc, paerml, paernl, & ! M7 tracers
- prhop, pww, pm6rp, pm6dry, & ! " aerosol properties
- ptime, & ! TM5 time step
- pprocess ) ! TM5 budget processes
- #else
- SUBROUTINE m7(kproma, kbdim, klev, & ! TM5 indices
- papp1, prelhum, ptp1, & ! " thermodynamics
- pso4g, pelvoc, psvoc, paerml, paernl, & ! M7 tracers
- prhop, pww, pm6rp, pm6dry, & ! " aerosol properties
- ptime ) ! TM5 time step
- #endif
- !
- ! ****m7* Aerosol model for the system so4,bc,oc,ss,dust in 7 modes.
- !
- ! Authors:
- ! ---------
- ! E. Vignati, JRC/EI (original source) 2000
- ! P. Stier, MPI (f90-version, changes, comments) 2001
- ! E. Vignati, JRC/IES (so2 is not required in this version) 2005
- !
- ! Purpose
- ! ---------
- ! Aerosol model for the system so4,bc,oc,ss,dust in 7 modes.
- !
- ! Externals
- ! ---------
- !
- ! *m7_averageproperties*
- ! calculates the average mass for all modes and the particle
- ! dry radius and density for the insoluble modes.
- !
- ! *m7_equiz*
- ! calculates the ambient radius of sulphate particles
- !
- ! *m7_equimix*
- ! calculates the ambient radius of so4,bc,oc (dust) particles
- !
- ! *m7_equil*
- ! calculates the ambient radius of so4,ss particles
- !
- ! *m7_dgas*
- ! calculates the sulfate condensation on existing particles
- !
- ! *m7_dnum*
- ! calculates new gas phase sulfate and aerosol numbers and masses
- ! after condensation, nucleation and coagulation over one timestep
- !
- ! *m7_dconc*
- ! repartitions aerosol number and mass between the
- ! the modes to account for condensational growth and the formation
- ! of an accumulation mode from the upper tail of the aitken mode and
- ! of a coarse mode from the upper tail of the accumulation mode
- !
- USE mo_aero_m7, ONLY: lsnucl, lscoag, lscond, &
- nmod, nss, nsol, naermod
- use tracer_data, only : tracer_print
- use GO, only : gol, goErr, goPr, goBug
- use mo_aero, only : nsoa !RM
- #ifdef with_budgets
- Use M7_Data, Only: nm7procs
- #endif
- IMPLICIT NONE
- !--- Parameter list:
- !
- ! papp1 = atmospheric pressure at time t+1 [Pa]
- ! prelhum = atmospheric relative humidity [% (0-1)]
- ! ptp1 = atmospheric temperature at time t+1 [K]
- ! pso4g = mass of gas phase sulfate [molec. cm-3]
- ! paerml = total aerosol mass for each compound
- ! [molec. cm-3 for sulphate and ug m-3 for bc, oc, ss, and dust]
- ! paernl = aerosol number for each mode [cm-3]
- ! prhop = mean mode particle density [g cm-3]
- ! pm6rp = mean mode actual radius (wet radius for soluble modes
- ! and dry radius for insoluble modes) [cm]
- ! pm6dry = dry radius for soluble modes [cm]
- ! pww = aerosol water content for each mode [kg(water) m-3(air)]
- !
- !--- Local variables:
- !
- ! zttn = average mass for single compound in each mode
- ! [in molec. for sulphate and in ug for bc, oc, ss, and dust]
- ! zhplus = number of h+ in mole [???] (kg water)-1
- ! zso4_x = mass of sulphate condensed on insoluble mode x [molec. cm-3]
- ! (calculated in dgas used in concoag)
- ! Parameters:
- INTEGER :: kproma, kbdim, klev
- REAL :: ptime
- REAL :: prelhum(kbdim,klev), papp1(kbdim,klev), &
- ptp1(kbdim,klev), &
- pso4g(kbdim,klev), pelvoc(kbdim,klev), psvoc(kbdim,klev) !RM
-
- REAL :: paerml(kbdim,klev,naermod), paernl(kbdim,klev,nmod), &
- pm6rp(kbdim,klev,nmod), pm6dry(kbdim,klev,nsol), &
- prhop(kbdim,klev,nmod), pww(kbdim,klev,nmod)
- #ifdef with_budgets
- Real :: pprocess(kbdim,klev,nm7procs)
- #endif
- ! Local variables:
- !--- m7_box:
- INTEGER :: i
- LOGICAL :: lofirst=.TRUE.
- !--- END m7_box
- REAL :: zso4_5(kbdim,klev), zso4_6(kbdim,klev), &
- zso4_7(kbdim,klev)
- REAL :: zhplus(kbdim,klev,nss)
- REAL :: zttn(kbdim,klev,naermod)
- !
- !--- 0) Initialisations: -------------------------------------------------
- !
- zhplus(:,:,:) = 0.
- pm6dry(:,:,:) = 0.
- pm6rp(:,:,:) = 0.
- zttn(:,:,:) = 0.
- prhop(:,:,:) = 0.
- pww(:,:,:) = 0.
- zso4_5(:,:) = 0.
- zso4_6(:,:) = 0.
- zso4_7(:,:) = 0.
- #ifdef with_budgets
- pprocess(:,:,:) = 0.0
- #endif
-
- ! write(*,*) 'in2', 'h2so4= ', pso4g(2100,1), 'num1= ', paernl(2100,1,1)
- ! write(*,*) 'in2', 'BCsol= ', paerml(2100,1,5),'BCins= ', paerml(2100,1,8)
- ! write(*,*) 'in2', 'POsol= ', paerml(2100,1,9),'POins= ', paerml(2100,1,12)
- ! write(*,*) 'in2', 'num2= ', paernl(2100,1,2), 'num5= ', paernl(2100,1,5)
- !
- ! write(*,*) 'in2', 'BCtot= ', paerml(2100,1,5)+ paerml(2100,1,8)+paerml(2100,1,6)+paerml(2100,1,7)
- !
- !--- 1) Calculation of particle properties under ambient conditions: -----
- !
- !--- 1.1) Calculate mean particle mass for all modes
- ! and dry radius and density for the insoluble modes.
- !
- CALL m7_averageproperties(kproma, kbdim, klev, paernl, paerml, zttn, pm6rp, prhop)
- !
- !--- 1.2) Calculate ambient count median radii and density
- ! for lognormal distribution of particles.
- !
- ! Sulfate particles:
- !
- CALL m7_equiz(kproma, kbdim, klev, &
- papp1, zttn, ptp1, &
- prelhum, pm6rp, pm6dry, &
- prhop, pww, paernl )
- !
- ! Mixed particles with sulfate, b/o carbon and dust:
- !
- CALL m7_equimix(kproma, kbdim, klev, &
- papp1, zttn, ptp1, &
- prelhum, pm6rp, pm6dry, &
- prhop, pww, paernl )
- !
- ! Accumulation and coarse mode particles in presence of
- ! sea salt particles:
- !
- CALL m7_equil(kproma, kbdim, klev, prelhum, paerml, paernl, &
- pm6rp, pm6dry, zhplus, pww, prhop, ptp1 )
- !
- !--- m7_box: Write initial particle distribution -------------------------
- IF (lofirst) THEN
- lofirst=.FALSE.
- !AJS: for debugging only ?
- !WRITE(16,FMT='(8(1x,e12.4))') 0.0, (pm6rp(1,1,i), i=1,7)
- !WRITE(20,FMT='(1x,f5.1,7x,7(1x,e12.4))') 0.0, (pm6dry(1,1,i), i=1,4), (pm6rp(1,1,i), i=5,7)
- END IF
- !--- END m7_box ----------------------------------------------------------
- !
- !--- 2) Calculate changes in aerosol mass and gas phase sulfate ----------
- ! due to sulfate condensation:
- ! No change in particle mass/number relationships.
- !
- #ifdef with_budgets
- IF (lscond) CALL m7_dgas(kproma, kbdim, klev, pso4g, paerml, paernl, &
- ptp1, papp1, pm6rp, zso4_5, zso4_6, zso4_7, &
- ptime,pprocess)
- #else
- IF (lscond) CALL m7_dgas(kproma, kbdim, klev, pso4g, paerml, paernl, &
- ptp1, papp1, pm6rp, zso4_5, zso4_6, zso4_7, &
- ptime)
- #endif
- !--- 2b) Calculate changes in aerosol mass ----------
- ! due to organic condensation:
- ! No change in particle mass/number relationships.
- !
- IF (nsoa .GT. 0 .AND. lscond) THEN
- #ifdef with_budgets
- CALL m7_dgas_org(kproma, kbdim, klev, pelvoc, psvoc, paerml, paernl, &
- ptp1, papp1, pm6rp, &
- ptime,pprocess)
- #else
- CALL m7_dgas_org(kproma, kbdim, klev, pelvoc, psvoc, paerml, paernl, &
- ptp1, papp1, pm6rp, &
- ptime)
- #endif
- END IF
- !
- !
- !--- 3) Calculate change in particle number concentrations ---------------
- ! due to nucleation and coagulation:
- ! Change particle mass/number relationships.
- !
- ! JadB: Removed "If (lsnucl .OR. lscoag)".
- ! If only lscond is set, the m7_dnum is required for storing sulfuric acid on insoluble aerosols (making the soluble).
- ! Without m7_dnum, the sulfuric acid condensed on insoluble particles is turned into void.
- ! IF (lsnucl.OR.lscoag) CALL m7_dnum(kproma, kbdim, klev, &
- ! pso4g, paerml, paernl, ptp1, &
- ! papp1, prelhum, pm6rp, prhop, &
- ! zso4_5, zso4_6, zso4_7, ptime )
- #ifdef with_budgets
- CALL m7_dnum(kproma, kbdim, klev, &
- pso4g, pelvoc, paerml, paernl, ptp1, &
- papp1, prelhum, pm6rp, prhop, &
- zso4_5, zso4_6, zso4_7, ptime,pprocess )
- #else
- CALL m7_dnum(kproma, kbdim, klev, &
- pso4g, pelvoc, paerml, paernl, ptp1, &
- papp1, prelhum, pm6rp, prhop, &
- zso4_5, zso4_6, zso4_7, ptime )
- #endif
- !
- !
- !--- 4) Recalculation of particle properties under ambient conditions: ---
- !
- !--- 4.1) Recalculate mean masses for all modes
- ! and dry radius and density for the insoluble modes.
- !
- CALL m7_averageproperties(kproma, kbdim, klev, paernl, paerml, zttn, pm6rp, prhop)
- !
- !--- 4.2) Calculate ambient count median radii and density
- ! for lognormal distribution of particles.
- !
- ! Sulfate particles:
- !
- CALL m7_equiz(kproma, kbdim, klev, &
- papp1, zttn, ptp1, &
- prelhum, pm6rp, pm6dry, &
- prhop, pww, paernl )
- !
- ! Mixed particles with sulfate, b/o carbon and dust:
- !
- CALL m7_equimix(kproma, kbdim, klev, &
- papp1, zttn, ptp1, &
- prelhum, pm6rp, pm6dry, &
- prhop, pww, paernl )
- !
- ! Accumulation and coarse mode particles in presence of
- ! sea salt particles:
- !
- CALL m7_equil(kproma, kbdim, klev, prelhum, paerml, paernl, &
- pm6rp, pm6dry, zhplus, pww, prhop, ptp1 )
- !
- !--- 5) Repartitition particles among the modes: -------------------------
- !
- IF (lscond.OR.lscoag) THEN
-
- #ifdef with_budgets
- CALL m7_dconc(kproma, kbdim, klev, paerml, paernl, pm6dry, pprocess)
- #else
- CALL m7_dconc(kproma, kbdim, klev, paerml, paernl, pm6dry)
- #endif
-
- END IF
- !
- !--- 6) Recalculation of particle properties under ambient conditions: ---
- !
- !--- 6.1) Calculate mean particle mass for all modes
- ! and dry radius and density for the insoluble modes:
- !
- CALL m7_averageproperties(kproma, kbdim, klev, paernl, paerml, zttn, pm6rp, prhop)
- !
- !--- 6.2) Calculate ambient count median radii and density
- ! for lognormal distribution of particles.
- !
- ! Sulfate particles:
- !
- CALL m7_equiz(kproma, kbdim, klev, &
- papp1, zttn, ptp1, &
- prelhum, pm6rp, pm6dry, &
- prhop, pww, paernl )
- !
- ! Mixed particles with sulfate, b/o carbon and dust:
- !
- CALL m7_equimix(kproma, kbdim, klev, &
- papp1, zttn, ptp1, &
- prelhum, pm6rp, pm6dry, &
- prhop, pww, paernl )
- !
- ! Accumulation and coarse mode particles in presence of
- ! sea salt particles:
- !
- CALL m7_equil(kproma, kbdim, klev, prelhum, paerml, paernl, &
- pm6rp, pm6dry, zhplus, pww, prhop, ptp1 )
- ! write(*,*) 'ou2', 'h2so4= ', pso4g(2100,1),'num1= ',paernl(2100,1,1)
- ! write(*,*) 'ou2', 'BCsol= ', paerml(2100,1,5),'BCins= ', paerml(2100,1,8)
- ! write(*,*) 'ou2', 'POsol= ', paerml(2100,1,9),'POins= ', paerml(2100,1,12)
- ! write(*,*) 'ou2', 'num2= ', paernl(2100,1,2), 'num5= ', paernl(2100,1,5)
- ! write(*,*) 'ou2', 'BCtot= ', paerml(2100,1,5)+ paerml(2100,1,8)+paerml(2100,1,6)+paerml(2100,1,7)
- ! write(*,*) 'ou2', 'cond5= ', zso4_5(2100,1), '6= ',zso4_6(2100,1), '7= ',zso4_7(2100,1)
- !
- END SUBROUTINE m7
|