diff --git a/pyaerocom/aeroval/config/emep/reporting_base.py b/pyaerocom/aeroval/config/emep/reporting_base.py index 7e30e5850..f6406de1c 100644 --- a/pyaerocom/aeroval/config/emep/reporting_base.py +++ b/pyaerocom/aeroval/config/emep/reporting_base.py @@ -390,12 +390,16 @@ def get_CFG(reportyear, year, model_dir) -> dict: "concpm25", "concno3pm10", "concno3pm25", + "concno3pm1", "concnh4pm25", + "concnh4pm1", "concso4pm25", + "concso4pm1", "concCecpm10", "concCecpm25", "concCocpm10", # SURF_ugC_PM_OMCOARSE missing in model-output "concCocpm25", + "concom1", "concsspm10", "concsspm25", # Depositions @@ -488,14 +492,18 @@ def get_CFG(reportyear, year, model_dir) -> dict: "concNno", "concCecpm25", "concCocpm25", + "concom1", "concCecpm10", "concCocpm10", # "concnh4pm10", # no output in the model "concnh4pm25", + "concnh4pm1", # "concso4pm10", # no output in the model "concso4pm25", + "concso4pm1", "concno3pm10", "concno3pm25", + "concno3pm1", "concsspm10", "concsspm25", "concso4t", @@ -840,14 +848,18 @@ def get_CFG(reportyear, year, model_dir) -> dict: obs_vars=[ "concCecpm25", "concCocpm25", + "concom1", "concCecpm10", "concCocpm10", # "concnh4pm10", "concnh4pm25", + "concnh4pm1", # "concso4pm10", "concso4pm25", + "concso4pm1", "concno3pm10", "concno3pm25", + "concno3pm1", "concsspm10", "concsspm25", ], @@ -863,14 +875,18 @@ def get_CFG(reportyear, year, model_dir) -> dict: obs_vars=[ "concCecpm25", "concCocpm25", + "concom1", "concCecpm10", "concCocpm10", # "concnh4pm10", "concnh4pm25", + "concnh4pm1", # "concso4pm10", "concso4pm25", + "concso4pm1", "concno3pm10", "concno3pm25", + "concno3pm1", "concsspm10", "concsspm25", ], diff --git a/pyaerocom/aeroval/data/var_web_info.ini b/pyaerocom/aeroval/data/var_web_info.ini index 5e11947a6..fbdf17585 100644 --- a/pyaerocom/aeroval/data/var_web_info.ini +++ b/pyaerocom/aeroval/data/var_web_info.ini @@ -369,6 +369,11 @@ menu_name = NO3 PM25 vertical_type = 3D category = Particle concentrations +[concNno3pm1] +menu_name = NO3 PM1 +vertical_type = 3D +category = Particle concentrations + [concno3pm10] menu_name = NO3 PM10 vertical_type = 3D @@ -379,6 +384,11 @@ menu_name = NO3 PM25 vertical_type = 3D category = Particle concentrations +[concno3pm1] +menu_name = NO3 PM1 +vertical_type = 3D +category = Particle concentrations + [concnh4pm10] menu_name = NH4 PM10 vertical_type = 3D @@ -389,6 +399,11 @@ menu_name = NH4 PM2.5 vertical_type = 3D category = Particle concentrations +[concnh4pm1] +menu_name = NH4 PM1 +vertical_type = 3D +category = Particle concentrations + [concso4t] menu_name = SO4 total vertical_type = 3D @@ -409,6 +424,11 @@ menu_name = SO4 PM2.5 vertical_type = 3D category = Particle concentrations +[concso4pm1] +menu_name = SO4 PM1 +vertical_type = 3D +category = Particle concentrations + [concss10] menu_name = SS PM10 vertical_type = 3D @@ -459,6 +479,11 @@ menu_name = OC PM2.5 vertical_type = 3D category = Particle concentrations +[concom1] +menu_name = OM PM1 +vertical_type = 3D +category = Particle concentrations + [concom25] menu_name = OM PM2.5 vertical_type = 3D diff --git a/pyaerocom/data/ebas_config.ini b/pyaerocom/data/ebas_config.ini index c2fe4b8f2..5d70d5528 100644 --- a/pyaerocom/data/ebas_config.ini +++ b/pyaerocom/data/ebas_config.ini @@ -126,6 +126,11 @@ component=sulphate_corrected,sulphate_total # after discussion with Wenche matrix=pm25, pm1 +[concso4pm1] +component=sulphate_corrected,sulphate_total +matrix=pm1_non_refractory + + [SO4ugSm3] component=sulphate_corrected,sulphate_total # after discussion with Wenche @@ -248,6 +253,10 @@ matrix=pm10,aerosol component=nitrate matrix=pm25,pm1 +[concNno3pm1] +component=nitrate +matrix=pm1_non_refractory + [concno3pm10] component=nitrate matrix=pm10,aerosol @@ -256,6 +265,10 @@ matrix=pm10,aerosol component=nitrate matrix=pm25,pm1 +[concno3pm1] +component=nitrate +matrix=pm1_non_refractory + [concnh4] component=ammonium matrix=pm10,aerosol,pm25 @@ -268,6 +281,10 @@ matrix=pm10,aerosol component=ammonium matrix=pm25,pm1 +[concnh4pm1] +component=ammonium +matrix=pm1_non_refractory + [concNnh4] component=ammonium matrix=pm10,aerosol,pm25 @@ -454,6 +471,9 @@ matrix=pm25,pm1 component=organic_mass matrix=pm25,pm1 +[concom1] +component=organic_mass +matrix=pm1_non_refractory [concsscoarse] component=sodium @@ -622,4 +642,4 @@ requires=concprcpoxs ; [conclevoglucosan] ; component=levoglucosan, C6H10O5, LVG, levo_ng/m3, Levoglucosan -; matrix=pm10,aerosol,pm25 \ No newline at end of file +; matrix=pm10,aerosol,pm25 diff --git a/pyaerocom/data/variables.ini b/pyaerocom/data/variables.ini index 16764b9e0..26d2fff90 100644 --- a/pyaerocom/data/variables.ini +++ b/pyaerocom/data/variables.ini @@ -2780,6 +2780,10 @@ unit = ug m-3 description=Mass concentration of sulphate in PM25 unit = ug m-3 +[concso4pm1] +description=Mass concentration of sulphate in PM1 +unit = ug m-3 + [SO4ugSm3] description=Mass concentration of sulphate unit = ug S m-3 @@ -2970,6 +2974,10 @@ unit = ug m-3 description=Mass concentration of ammonium unit = ug m-3 +[concnh4pm1] +description=Mass concentration of ammonium in PM1 +unit = ug m-3 + [concnh4pm25] description=Mass concentration of ammonium in PM25 unit = ug m-3 @@ -3008,6 +3016,10 @@ unit = ug N m-3 description=Mass concentration of nitrate PM25 unit = ug N m-3 +[concNno3pm1] +description=Mass concentration of nitrate PM1 +unit = ug N m-3 + [concno3pm10] description=Mass concentration of nitrate PM10 unit = ug m-3 @@ -3016,6 +3028,10 @@ unit = ug m-3 description=Mass concentration of nitrate PM25 unit = ug m-3 +[concno3pm1] +description=Mass concentration of nitrate PM1 +unit = ug m-3 + [concNtnh] description=Mass concentration of ammonium and ammonia unit = ug N m-3 @@ -3070,7 +3086,7 @@ unit = ug C m-3 minimum = 0 [concCocpm10] -description=Mass concentration of organic carbon in PM2.5 +description=Mass concentration of organic carbon in PM10 unit = ug C m-3 [conctc] @@ -5638,6 +5654,10 @@ description=Mass concentration of organic carbon in PM2.5 unit = ug C m-3 minimum = 0 +[concom1] +description=Mass concentration of organic matter in PM1 +unit = ug m-3 + [concom25] description=Mass concentration of organic matter in PM2.5 unit = ug m-3 @@ -6012,4 +6032,4 @@ var_type = vertical column density unit = mol m-2 minimum = 0 maximum = 100000000 -dimensions = time,lat,lon \ No newline at end of file +dimensions = time,lat,lon diff --git a/pyaerocom/io/mscw_ctm/emep_variables.toml b/pyaerocom/io/mscw_ctm/emep_variables.toml index 48e1b0337..4b6d38182 100644 --- a/pyaerocom/io/mscw_ctm/emep_variables.toml +++ b/pyaerocom/io/mscw_ctm/emep_variables.toml @@ -56,13 +56,18 @@ conchno3 = "SURF_ug_HNO3" concnh3 = "SURF_ug_NH3" concnh4 = "SURF_ug_NH4_F" concnh4pm25 = "SURF_ug_NH4_F" +# comparing nh4 pm25 also against pm1_non_refractory +concnh4pm1 = "SURF_ug_NH4_F" concno2 = "SURF_ug_NO2" concno3c = "SURF_ug_NO3_C" concno3f = "SURF_ug_NO3_F" +concno3pm1 = "SURF_ug_NO3_F" concno = "SURF_ug_NO" conco3 = "SURF_ug_O3" concoac = "SURF_ug_PM_OMCOARSE" concoaf = "SURF_ug_PM_OM25" +# comparing OM25 pm1_non_refractory +concom1 = "SURF_ug_PM_OM25" concpm10 = "SURF_ug_PM10_rh50" concpm25 = "SURF_ug_PM25_rh50" concrdn = "SURF_ugN_RDN" @@ -70,6 +75,8 @@ concso2 = "SURF_ug_SO2" concso4 = "SURF_ug_SO4" concso4c = "SURF_ug_SO4" concso4pm25 = "SURF_ug_SO4" +# comparing SO4 also against pm1_non_refractory +concso4pm1 = "SURF_ug_SO4" concss = "SURF_ug_SS" # concsspm25=SURF_ug_SEASALT_F concssf = "SURF_ug_SEASALT_F" diff --git a/tests/io/test_read_ebas.py b/tests/io/test_read_ebas.py index 205764d20..508766a9d 100644 --- a/tests/io/test_read_ebas.py +++ b/tests/io/test_read_ebas.py @@ -246,6 +246,7 @@ def test_PROVIDES_VARIABLES(reader: ReadEbas): "SO4ugSm3", "concso4pm10", "concso4pm25", + "concso4pm1", "concso2", "vmrso2", "concpm10", @@ -270,6 +271,10 @@ def test_PROVIDES_VARIABLES(reader: ReadEbas): "concno3", "concNno3pm10", "concNno3pm25", + "concNno3pm1", + "concno3pm10", + "concno3pm25", + "concno3pm1", "concnh4", "concNnh4", "concNhno3", @@ -300,16 +305,13 @@ def test_PROVIDES_VARIABLES(reader: ReadEbas): "wetoxn", "pr", "prmm", + "concnh4pm10", "concnh4pm25", + "concnh4pm1", "concCocpm10", "concNno", "concCecpm10", - "concno3pm10", "concSso2", - "concso4pm25", - "concso4pm10", - "concnh4pm10", - "concno3pm25", "vmrnh3", "proxydryoxn", "proxywetpm25", @@ -318,6 +320,7 @@ def test_PROVIDES_VARIABLES(reader: ReadEbas): "concprcpso4", "concCoc25", "concom25", + "concom1", "concprcpnh4", "concsscoarse", "proxydryhno3", diff --git a/tests/io/test_readgridded.py b/tests/io/test_readgridded.py index 08e6c3d75..7e4735e6d 100644 --- a/tests/io/test_readgridded.py +++ b/tests/io/test_readgridded.py @@ -37,7 +37,11 @@ def reader_tm5(): dict( var_name="od550aer", ts_type="monthly", - constraints={"var_name": "od550aer", "operator": "<", "filter_val": 0.1}, + constraints={ + "var_name": "od550aer", + "operator": "<", + "filter_val": 0.1, + }, ), 0.2054, ), @@ -45,7 +49,11 @@ def reader_tm5(): dict( var_name="od550aer", ts_type="monthly", - constraints={"var_name": "od550aer", "operator": ">", "filter_val": 1000}, + constraints={ + "var_name": "od550aer", + "operator": ">", + "filter_val": 1000, + }, ), 0.0983, ), @@ -202,9 +210,9 @@ def test_file_info(reader_reanalysis: ReadGridded): @lustre_unavail def test_years_available(reader_reanalysis: ReadGridded): - # go up to 2023 because 2022 is now available. Will likely need to be updated in the future - years = list(range(2003, 2025)) - assert reader_reanalysis.years_avail == years + # reanalysis years in database will increase every year, only checking for some years in tests + years = set(range(2003, 2024)) + assert set(reader_reanalysis.years_avail) >= years @lustre_unavail diff --git a/tests/test_varcollection.py b/tests/test_varcollection.py index cc15caf66..2b16d54c7 100644 --- a/tests/test_varcollection.py +++ b/tests/test_varcollection.py @@ -86,7 +86,7 @@ def test_VarCollection_get_var_error(collection: VarCollection): ("*blaaaaaaa*", 0), ("dep*", 9), ("od*", 26), - ("conc*", 99), + ("conc*", 104), ], ) def test_VarCollection_find(collection: VarCollection, search_pattern: str, num: int):