WRF-Chem at KIT

WRF-Chem version used: 3.4.1 with adaptations with Special adaptations for AQMEII2.

Many adaptations are related to special output for AQMEII. Some of these addions follow the description of 'WRF-Chem at University of L'Aquila' if not mentioned otherwise below.

The RADM2 gas phase chemistry with MADE/Sorgam and some aqueous rections (chem_opt=41) was applied for the simulations.

In addition to the modifications related to the output, a modifcation was made to module_radm.F, in order to improve the titration of ozone for high NOx at night time:

      SUBROUTINE integ1n
...
!*******[NO]:
!       VC(J,1,LNO)  = VCL(J,LNOX) - VC(J,1,LNO2)
!       VC(J,1,LNO)  = MAX(CMIN(LNO),VC(J,1,LNO))
! 8/31/00 Calculate steady state NO from NO2,O3 ...etc., renormalize NO,
!23456789 123456789 123456789 123456789 123456789 123456789 123456789 12
!          jprod(j) = rj(j,1)*vc(j,1,lno2) + rj(j,4)*vc(j,1,lhono) + &
!            rj(j,8)*vc(j,1,lno3)
!          jloss(j) = rk(j,6)*vc(j,1,lo3) + rk(j,9)*vc(j,1,lho2) + &
!            rk(j,15)*vc(j,1,lho) + rk(j,16)*vc(j,1,lno) + &
!            rk(j,18)*vc(j,1,lno3) + rk(j,57)*dvc(j,lmo2) + &
!            rk(j,58)*dvc(j,lhc3p) + rk(j,60)*dvc(j,lhc5p) + &
!            rk(j,62)*dvc(j,lhc8p) + rk(j,64)*dvc(j,lol2p) + &
!            rk(j,65)*dvc(j,loltp) + rk(j,66)*dvc(j,lolip) + &
!            rk(j,67)*dvc(j,ltco3) + rk(j,68)*dvc(j,ltco3) + &
!            rk(j,69)*dvc(j,ltolp) + rk(j,70)*dvc(j,lxylp) + &
!            rk(j,71)*dvc(j,lethp) + rk(j,72)*dvc(j,lketp) + &
!            rk(j,73)*dvc(j,loln) + rk(j,131)*dvc(j,lxo2)
!          eqno = max(cmin(lno),jprod(j)/max(epsilc,jloss(j)))
!          EQNO=MAX(1.e-6,JPROD(J)/MAX(EPSILC,JLOSS(J)))
!*******[NO]:
          vc(j,1,lno) = max(1.e-6,eqno*vcl(j,lnox)/(eqno+vc(j,1,lno2)))
          vc(j,1,lno2) = vc(j,1,lno2)*vcl(j,lnox)/(eqno+vc(j,1,lno2))

Output of VOC reactivities was adapted to the RADM solver within module_radm.F (Univ. of L'Aquila is using a KPP solver here):

     subroutine radm_driver
...
! .. Local Arrays ..
      REAL :: p(kts:kte), rh(kts:kte), rj(kts:kte,nreacj),       &
        t(kts:kte), vcinp(kts:kte,numchem),wlc(kts:kte)
      real :: vdrog1(kts:kte,ldrog)
      real :: vc_vocr_nmvoc(kts:kte)
      real :: vc_nume(kts:kte)
      real :: vc_den(kts:kte)

...
        vcinp(k,Lho2)  =  max(chem(i,k,j,p_ho2),epsilc)
        vc_vocr_nmvoc(k)  = 0.0
        vc_nume(k)  = 0.0
        vc_den(k)  = 0.0
!       if(iprt.eq.2)then
!        print *,k,chem(i,k,j,p_sulf),vcinp(k,lsulf)
!       endif
        enddo
!--- now do chemistry, need some input here

...
      CALL radm(rj,wlc,vcinp,t,p,rh,vc_vocr_nmvoc,vc_nume,vc_den,xtime,xtimin,kts,kte,            &
                iprt,dt60,dtcmax,dtcmin,vdrog1,iaerosol_sorgam)
...
        chem(i,k,j,p_ho)     = max(vcinp(k,Lho),epsilc)
        chem(i,k,j,p_ho2)     = max(vcinp(k,Lho2),epsilc)
        chem(i,k,j,p_vocr_nmvoc) = vc_vocr_nmvoc(k)
        chem(i,k,j,p_nume)     = vc_nume(k)
        chem(i,k,j,p_den)     = vc_den(k)
        if(p_nu0.gt.1)then
...
END SUBROUTINE radm_driver

      SUBROUTINE radm(rjj,wlcc,vcinp,tinp,pinp,rhinp,                       &
                 vc_vocr_nmvoc,vc_nume,vc_den,tstart,timemx,                &
                 jcs,jce,iprt,dt60,dtcmax,dtcmin,vdrog,iaerosol_sorgam)

...
         REAL,INTENT(IN) :: rjj(jcs:jce,nreacj),                       &
              wlcc(jcs:jce), tinp(jcs:jce),pinp(jcs:jce),rhinp(jcs:jce), &
              vc_vocr_nmvoc(jcs:jce),vc_nume(jcs:jce),vc_den(jcs:jce)

...
        IF (iprt==1) PRINT *, ' radm', lho2, vc(jcs:jce,1,3), vc(jcs:jce,1,7), &
          vc(jcs:jce,1,lho2)
          DO j = jcs, jce
          vc_vocr_nmvoc(j)=0.
          vc_nume(j)=0.
          vc_den(j)=0.
          END DO
        DO l = 1, lpred
...
          DO j = jcs, jce
          vc_vocr_nmvoc(j)=(crk(j,31)+crk(j,32)+crk(j,33)+crk(j,34)+crk(j,35)+    &
                            crk(j,36)+crk(j,37)+crk(j,38)+crk(j,39)+crk(j,40)+    &
                            crk(j,41)+crk(j,42)+crk(j,43)+crk(j,44)+crk(j,45)+    &
                            crk(j,46)+crk(j,47)+crk(j,48)+crk(j,49)+crk(j,50)+    &
                            crk(j,51)+crk(j,52))/ vcinp(j,lho)

          vc_nume(j)      =(crk(j, 9)+crk(j,58)+crk(j,60)+crk(j,62)+crk(j,64)+    &
                            crk(j,65)+crk(j,66)+crk(j,67)+crk(j,68)+crk(j,69)+    &
                            crk(j,70)+crk(j,71)+crk(j,72)+crk(j,73)+crk(j,57)+    &
                            crk(j,131) +                                          &
                            crk(j,20))                                               !NO3

          vc_den(j)       =(crk(j,12)+crk(j,13)+crk(j,88)+crk(j,90)+crk(j,91)+    &
                            crk(j,92)+crk(j,93)+crk(j,95)+crk(j,95)+crk(j,96)+    &
                            crk(j,97)+crk(j,98)+crk(j,99)+crk(j,100)+crk(j,101)+    &
                            crk(j,115)+crk(j,116)+crk(j,117)+crk(j,118)+crk(j,119)+    &
                            crk(j,120)+crk(j,121)+crk(j,122)+crk(j,113)+crk(j,124)+    &
                            crk(j,125)+crk(j,126)+crk(j,127)+crk(j,129)+crk(j,133)+    &
                            crk(j,135)+crk(j,138)+crk(j,139)+crk(j, 88)+crk(j,102)+    &
                            crk(j,103)+crk(j,104)+crk(j,105)+crk(j,106)+crk(j,107)+    &
                            crk(j,103)+crk(j,109)+crk(j,110)+crk(j,111)+crk(j,112)+    &
                            crk(j,114)+crk(j,128)+crk(j,134))

! convert vc_vocr_nmvoc from ppm/min to 1/sec
          vc_vocr_nmvoc(j)=vc_vocr_nmvoc(j)/60./1.e6
!  Please note that die division by 1.e6 is wrong!!!!!! Results must by multiplied by thois value again in postprocessing!
! ####################################################################

          END DO

        RETURN
END SUBROUTINE radm

registry.chem

# GC 20130326 VOC-OH reactivity
state   real   vocr_nmvoc  ikjftb   chem        1         -   i0{12}rhusdf=(bdy_interp:dt)  "vocr_nmvoc"  "total NMVOC reactivity against OH"  "s-1"
state   real   vocr_co     ikjftb   chem        1         -   i0{12}rhusdf=(bdy_interp:dt)  "vocr_co"     "CO reactivity against OH"           "s-1"

# GC 20130326 RO2 family
state   real   sumro2     ikjftb   chem        1         -   i0{12}rhusdf=(bdy_interp:dt)  "sumro2"     "Sum of all RO2 species"           "ppmv"

....
package   radm2         chem_opt==1                  -             chem:so2,sulf,no2,no,o3,hno3,h2o2,ald,hcho,op1,op2,paa,ora1,ora2,nh3,n2o5,no3,pan,hc3,hc5,hc8,eth,co,ol2,olt,oli,tol,xyl,aco3,tpan,hono,hno4,ket,gly,mgly,dcb,onit,csl,iso,hcl,ho,ho2,nume,den,sumro2,vocr_co,vocr_nmvoc

package   radm2sorg     chem_opt==2                  -             chem:so2,sulf,no2,no,o3,hno3,h2o2,ald,hcho,op1,op2,paa,ora1,ora2,nh3,n2o5,no3,pan,hc3,hc5,hc8,eth,co,ol2,olt,oli,tol,xyl,aco3,tpan,hono,hno4,ket,gly,mgly,dcb,onit,csl,iso,hcl,ho,ho2,nume,den,sumro2,vocr_co,vocr_nmvoc,so4aj,so4ai,nh4aj,nh4ai,no3aj,no3ai,naaj,naai,claj,clai,orgaro1j,orgaro1i,orgaro2j,orgaro2i,orgalk1j,orgalk1i,orgole1j,orgole1i,orgba1j,orgba1i,orgba2j,orgba2i,orgba3j,orgba3i,orgba4j,orgba4i,orgpaj,orgpai,ecj,eci,p25j,p25i,antha,seas,soila,nu0,ac0,corn

package   radm2sorg_aq chem_opt==11                  -             chem:so2,sulf,no2,no,o3,hno3,h2o2,ald,hcho,op1,op2,paa,ora1,ora2,nh3,n2o5,no3,pan,hc3,hc5,hc8,eth,co,ol2,olt,oli,tol,xyl,aco3,tpan,hono,hno4,ket,gly,mgly,dcb,onit,csl,iso,hcl,ho,ho2,nume,den,sumro2,vocr_co,vocr_nmvoc,so4aj,so4ai,nh4aj,nh4ai,no3aj,no3ai,naaj,naai,claj,clai,orgaro1j,orgaro1i,orgaro2j,orgaro2i,orgalk1j,orgalk1i,orgole1j,orgole1i,orgba1j,orgba1i,orgba2j,orgba2i,orgba3j,orgba3i,orgba4j,orgba4i,orgpaj,orgpai,ecj,eci,p25j,p25i,antha,seas,soila,nu0,ac0,corn,so4cwj,so4cwi,nh4cwj,nh4cwi,no3cwj,no3cwi,nacwj,nacwi,clcwj,clcwi,orgaro1cwj,orgaro1cwi,orgaro2cwj,orgaro2cwi,orgalk1cwj,orgalk1cwi,orgole1cwj,orgole1cwi,orgba1cwj,orgba1cwi,orgba2cwj,orgba2cwi,orgba3cwj,orgba3cwi,orgba4cwj,orgba4cwi,orgpacwj,orgpacwi,eccwj,eccwi,p25cwj,p25cwi,anthcw,seascw,soilcw,nu0cw,ac0cw,corncw
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License