#include RADMKA.spc
#include RADMKA.eqn

#include ../boxmox/wrapper
#include ../boxmox/setup

#LOOKATALL

#INLINE F90_GLOBAL
  ! global variables used by special rate constants of this mechanism

  ! air concentration (molecules/cm3)
  REAL(KIND=dp)      :: c_m
  REAL(KIND=dp), ALLOCATABLE :: HET(:)

#ENDINLINE

#INLINE F90_INIT

  ! 1E-03 * (1.0/28.97) * 6.022e23 * air density
  c_m    = 2.078702e+19 * 1.25

  ALLOCATE(HET(1))
  HET(:) = 0.0

#ENDINLINE

#INLINE F90_RATES

!C
!C*********************************************************************
!C Die Funktion TROE bestimmt die Werte der Troefunktion
!C nach Stockwell et al. [2],
!C die die Druckabhaengigkeit von Reaktionskonstanten durch eine
!C quasi-bimolekulare Reaktionskonstante beschreibt.
!C*********************************************************************
!C
!
!~~~> Simplified Arrhenius, with two arguments
!~~~> Note: The argument B0 has a changed sign when compared to ARR
! EMPA, original KPP style
   REAL FUNCTION ARR2E( A0,B0 )
      REAL(dp) A0,B0
      ARR2E =  DBLE(A0) * EXP( DBLE(B0)/TEMP )
   END FUNCTION ARR2E
!
REAL FUNCTION TROE_EMPA( K0300, Q, KU300, R, M, T )
!C CALCULATION OF RATE CONSTANTS FOR TROE REACTIONS
!      IMPLICIT REAL(dp) (A-Z)
      REAL(dp) :: K0300, Q, KU300, R, M, T
      REAL(dp) :: tt, k0, ku, k0m, kk, lgkk, e, f
      TT= T / 3.D2
      K0= K0300 / TT**Q
      KU= KU300 / TT**R
      K0M= K0 * M
      KK= K0M / KU
      LGKK=0.434294481D0 * LOG(KK)
      E=1.D0 / ( 1.D0 + LGKK*LGKK )
      F=0.6D0 ** E
      TROE_EMPA= F * K0M / ( 1.D0 + KK )
END FUNCTION TROE_EMPA
!C
!C**********************************************************************
!C Die Funktion EQT [2] bestimmt die Reaktionskonstanten fuer
!C HNO4 --> H2O + NO2 und N2O5 --> NO2 + NO3
!C**********************************************************************
!C
FUNCTION EQT( K0300, Q, KU300, R, M, T, A, B )
      !IMPLICIT REAL(dp) (A-Z)
      REAL(dp) :: K0300, Q, KU300, R, M, T, A, B, EQT
      REAL(dp) :: kh
      KH= TROE_EMPA( K0300, Q, KU300, R, M, T )
      EQT= KH * A *DEXP( -B / T )
END FUNCTION EQT
!C
!C**********************************************************************
!C Die Funktion SPEZ bestimmt die Reaktionskonstante fuer
!C HNO3 + HO --> H2O + NO3
!C**********************************************************************
!C
FUNCTION SPEZ(A0,B0,A2,B2,A3,B3,M,T)
!C SPECIAL RATE CONSTANTS
      !IMPLICIT REAL(dp) (A-Z)
      REAL(dp) :: A0,B0,A2,B2,A3,B3,M,T, SPEZ
      REAL(dp) :: k0, k2, k3
      K0=A0*DEXP(B0/T)
      K2=A2*DEXP(B2/T)
      K3=A3*M*DEXP(B3/T)
      SPEZ= K0 + K3 / ( 1D0 + K3/K2 )
END FUNCTION SPEZ

#ENDINLINE
