uEMEP_Romberg_NO2 Subroutine

private subroutine uEMEP_Romberg_NO2(nox_bg, no2_bg, nox_loc, o3_bg, f_no2_loc, nox_out, no2_out, o3_out, romberg_params)

Arguments

Type IntentOptional Attributes Name
real, intent(in) :: nox_bg
real, intent(in) :: no2_bg
real, intent(in) :: nox_loc
real, intent(in) :: o3_bg
real, intent(in) :: f_no2_loc
real, intent(out) :: nox_out
real, intent(out) :: no2_out
real, intent(out) :: o3_out
real, intent(in) :: romberg_params(3)

Called by

proc~~uemep_romberg_no2~~CalledByGraph proc~uemep_romberg_no2 uEMEP_Romberg_NO2 proc~uemep_chemistry uEMEP_chemistry proc~uemep_chemistry->proc~uemep_romberg_no2 proc~uemep_source_fraction_chemistry uEMEP_source_fraction_chemistry proc~uemep_source_fraction_chemistry->proc~uemep_romberg_no2 proc~uemep_save_netcdf_control uEMEP_save_netcdf_control proc~uemep_save_netcdf_control->proc~uemep_source_fraction_chemistry program~uemep uEMEP program~uemep->proc~uemep_chemistry program~uemep->proc~uemep_save_netcdf_control

Source Code

    subroutine uEMEP_Romberg_NO2(nox_bg, no2_bg, nox_loc, o3_bg, f_no2_loc, nox_out, no2_out, o3_out, romberg_params)
        ! From Norwegian obs fit
        ! real :: a_rom=20
        ! real :: b_rom=30
        ! From model fit
        ! real :: a_rom=30
        ! real :: b_rom=35
        ! real :: c_rom=0.20
        ! Gral values 30 35 0.18
        ! B�chlin and B�singer (2008) 29 35 0.217
        real, intent(in) :: nox_bg, no2_bg, nox_loc, o3_bg, f_no2_loc
        real, intent(in) :: romberg_params(3)
        real, intent(out) :: nox_out, no2_out, o3_out

        ! Local variables
        real :: a_rom = 30.0
        real :: b_rom = 35.0
        real :: c_rom = 0.20
        real :: ox_init, no2_init, no2_equ
        
        ! If available, use custom parameter values
        if (abs(romberg_params(1)) > epsilon0) then
            a_rom = romberg_params(1)
            b_rom = romberg_params(2)
            c_rom = romberg_params(3)
        end if

        nox_out = nox_bg + nox_loc
        no2_equ = a_rom*nox_bg/(nox_bg+b_rom) + nox_bg*c_rom
        no2_out = a_rom*nox_out/(nox_out+b_rom) + nox_out*c_rom
        no2_out = no2_out - no2_equ + no2_bg
        no2_out = max(no2_bg, no2_out)
        no2_init = no2_bg + f_no2_loc*nox_loc

        ! Small adjustments for molecular weights
        ox_init = no2_init*47.0/46.0 + o3_bg*47.0/48.0
        o3_out = ox_init*48.0/47.0 - no2_out*48.0/46.0
    end subroutine uEMEP_Romberg_NO2