diff --git a/pyaerocom/aeroval/glob_defaults.py b/pyaerocom/aeroval/glob_defaults.py index 00f57cd62..0780163cf 100644 --- a/pyaerocom/aeroval/glob_defaults.py +++ b/pyaerocom/aeroval/glob_defaults.py @@ -158,6 +158,14 @@ "scale": [0, 0.75, 1.5, 2.25, 3.0, 3.75, 4.5, 5.25, 6.0, 6.75, 7.5, 8.25], "colmap": "coolwarm", }, + "vmrno": { + "scale": [0, 0.75, 1.5, 2.25, 3.0, 3.75, 4.5, 5.25, 6.0, 6.75, 7.5, 8.25], + "colmap": "coolwarm", + }, + "vmrso2": { + "scale": [0, 0.75, 1.5, 2.25, 3.0, 3.75, 4.5, 5.25, 6.0, 6.75, 7.5, 8.25], + "colmap": "coolwarm", + }, "concpm10": {"scale": [0, 10, 20, 30, 40, 50, 60, 70, 80], "colmap": "coolwarm"}, "concpm25": {"scale": [0, 5, 10, 15, 20, 25, 30, 35, 40, 45], "colmap": "coolwarm"}, "conco3": {"scale": [0, 15, 30, 45, 60, 75, 90, 105, 120], "colmap": "coolwarm"}, @@ -166,57 +174,97 @@ "vmrno2": {"scale": [0, 5, 10, 15, 20, 25, 30, 35, 40], "colmap": "coolwarm"}, "vmro3max": {"scale": [0, 7.5, 15, 22.5, 30, 37.5, 45, 52.5, 60], "colmap": "coolwarm"}, "concNhno3": { - "scale": [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5], + "scale": [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 1], "colmap": "coolwarm", }, "concNno3pm10": { - "scale": [0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1], + "scale": [0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1, 1.5, 2, 5, 10], "colmap": "coolwarm", }, "concNno3pm25": { - "scale": [0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1], + "scale": [0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1, 1.5, 2, 5, 10], "colmap": "coolwarm", }, "concNnh3": { - "scale": [0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0], + "scale": [0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 7.5, 10.0, 20], + "colmap": "coolwarm", + }, + "concNnh4": { + "scale": [ + 0, + 0.25, + 0.5, + 0.75, + 1.0, + 1.25, + 1.5, + 1.75, + 2.0, + 2.5, + 3.0, + 3.5, + 4.0, + 4.5, + 5.0, + 7.5, + 10.0, + 20, + ], "colmap": "coolwarm", }, - "concNnh4": {"scale": [0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0], "colmap": "coolwarm"}, "concNtno3": { - "scale": [0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1.0], + "scale": [0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1.0, 1.5, 2, 5], "colmap": "coolwarm", }, "concNtnh": { - "scale": [0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0], + "scale": [0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 7.5, 10.0, 20, 50], + "colmap": "coolwarm", + }, + "concsspm25": { + "scale": [0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 5, 10], "colmap": "coolwarm", }, - "concsspm25": {"scale": [0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0], "colmap": "coolwarm"}, "concsspm10": { - "scale": [0, 0.75, 1.5, 2.25, 3.0, 3.75, 4.5, 5.25, 6.0, 6.75, 7.5, 8.25], + "scale": [0, 0.75, 1.5, 2.25, 3.0, 3.75, 4.5, 5.25, 6.0, 6.75, 7.5, 8.25, 10, 15, 20, 50], "colmap": "coolwarm", }, "concCecpm25": {"scale": [0, 1.25, 2.5, 3.75, 5, 6.25, 7.5, 8.75, 10], "colmap": "coolwarm"}, + "concCec25": {"scale": [0, 1.25, 2.5, 3.75, 5, 6.25, 7.5, 8.75, 10], "colmap": "coolwarm"}, "concCocpm25": { + "scale": [0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 10], + "colmap": "coolwarm", + }, + "concCoc25": { + "scale": [0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 10], + "colmap": "coolwarm", + }, + "concom25": { "scale": [0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0], "colmap": "coolwarm", }, - "wetoxs": {"scale": [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 1, 1.5], "colmap": "coolwarm"}, - "wetna": {"scale": [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 1, 1.5], "colmap": "coolwarm"}, - "wetoxn": {"scale": [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 1, 1.5], "colmap": "coolwarm"}, + "wetoxs": {"scale": [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 1, 1.5, 2, 5], "colmap": "coolwarm"}, + "wetna": { + "scale": [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 1, 1.5, 2, 5, 10, 20, 50, 100], + "colmap": "coolwarm", + }, + "wetoxn": {"scale": [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 1, 1.5, 2, 5], "colmap": "coolwarm"}, "wetrdn": { - "scale": [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 1, 1.5], + "scale": [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 1, 1.5, 2, 5, 10], "colmap": "coolwarm", }, - "wetoxsf": {"scale": [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 1, 1.5], "colmap": "coolwarm"}, - "wetoxnf": {"scale": [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 1, 1.5], "colmap": "coolwarm"}, + "wetoxsf": {"scale": [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 1, 1.5, 2, 5], "colmap": "coolwarm"}, + "wetoxnf": {"scale": [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 1, 1.5, 2, 5], "colmap": "coolwarm"}, "wetrdnf": { - "scale": [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 1, 1.5], + "scale": [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 1, 1.5, 2, 5, 10], "colmap": "coolwarm", }, "prmm": {"scale": [0, 1.25, 2.5, 3.75, 5, 6.25, 7.5, 8.75, 10], "colmap": "coolwarm"}, - "dryoxs": {"scale": [0, 1.25, 2.5, 3.75, 5, 6.25, 7.5, 8.75, 10], "colmap": "coolwarm"}, - "dryoxn": {"scale": [0, 1.25, 2.5, 3.75, 5, 6.25, 7.5, 8.75, 10], "colmap": "coolwarm"}, - "dryrdn": {"scale": [0, 1.25, 2.5, 3.75, 5, 6.25, 7.5, 8.75, 10], "colmap": "coolwarm"}, + "dryoxs": { + "scale": [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 1, 1.5, 2, 5], + "colmap": "coolwarm", + }, + "dryoxn": {"scale": [0, 0.1, 0.2, 0.5, 1, 2.0, 5, 10, 20, 50], "colmap": "coolwarm"}, + "dryrdn": {"scale": [0, 0.1, 0.2, 0.5, 1, 2.0, 5, 10, 20, 50], "colmap": "coolwarm"}, "depdust": { "scale": [0.0, 0.2, 0.5, 1.0, 2.0, 5.0, 10.0, 20.0, 50.0, 100.0, 200.0, 500.0, 1000.0], "colmap": "coolwarm", @@ -263,38 +311,103 @@ "colmap": "coolwarm", }, "ts": {"scale": [265, 270, 275, 280, 285, 290, 300, 305, 310, 315, 320], "colmap": "coolwarm"}, - "proxydryo3": {"scale": [0, 0.5, 1, 15, 20, 25, 0.30, 40, 50], "colmap": "coolwarm"}, + "proxydryo3": {"scale": [0, 0.5, 1, 5, 10, 15, 20, 25, 30, 40, 50], "colmap": "coolwarm"}, + "dryo3": {"scale": [0, 0.5, 1, 5, 10, 15, 20, 25, 30, 40, 50], "colmap": "coolwarm"}, "proxydrypm10": {"scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2], "colmap": "coolwarm"}, - "proxydrypm25": {"scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2], "colmap": "coolwarm"}, + "drypm10": { + "scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 5, 10, 20, 50, 100], + "colmap": "coolwarm", + }, + "proxydrypm25": { + "scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 5, 10, 20, 50, 100], + "colmap": "coolwarm", + }, + "drypm25": {"scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 5, 10], "colmap": "coolwarm"}, + "proxydryss": {"scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2], "colmap": "coolwarm"}, + "dryss": {"scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2], "colmap": "coolwarm"}, + "proxydryna": { + "scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 5, 10, 20, 50, 100, 200], + "colmap": "coolwarm", + }, + "dryna": { + "scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 5, 10, 20, 50, 100, 200], + "colmap": "coolwarm", + }, "proxydryno2": { - "scale": [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4], + "scale": [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.5, 1.0, 2], + "colmap": "coolwarm", + }, + "dryno2": { + "scale": [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.5, 1.0, 2], + "colmap": "coolwarm", + }, + "proxydryhono": { + "scale": [0.0, 0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.008, 0.01, 0.02], + "colmap": "coolwarm", + }, + "dryhono": { + "scale": [0.0, 0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.008, 0.01, 0.02], + "colmap": "coolwarm", + }, + "proxydryn2o5": { + "scale": [0.0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.1, 0.2], + "colmap": "coolwarm", + }, + "dryn2o5": { + "scale": [0.0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.1, 0.2], "colmap": "coolwarm", }, - "proxydryhono": {"scale": [0.001, 0.002, 0.003, 0.004, 0.005, 0.006], "colmap": "coolwarm"}, - "proxydryn2o5": {"scale": [0.01, 0.02, 0.03, 0.04, 0.05], "colmap": "coolwarm"}, "proxydryhno3": { - "scale": [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4], + "scale": [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.5, 1.0, 2.0, 5.0], + "colmap": "coolwarm", + }, + "dryhno3": { + "scale": [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.5, 1.0, 2.0, 5.0], "colmap": "coolwarm", }, "proxydryno3c": { - "scale": [0.01, 0.02, 0.03, 0.04, 0.05], + "scale": [0.0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.1, 0.2, 0.5], "colmap": "coolwarm", }, - "proxydryno3f": {"scale": [0.01, 0.02, 0.03, 0.04, 0.05], "colmap": "coolwarm"}, + "dryno3c": { + "scale": [0.0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.1, 0.2, 0.5], + "colmap": "coolwarm", + }, + "proxydryno3f": { + "scale": [0.0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.1, 0.2, 0.5], + "colmap": "coolwarm", + }, + "dryno3f": {"scale": [0.0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.1, 0.2, 0.5], "colmap": "coolwarm"}, "proxydrynh3": { - "scale": [0, 0.10, 0.20, 0.30, 0.40, 0.50, 0.60, 0.70, 0.80], + "scale": [0, 0.10, 0.20, 0.30, 0.40, 0.50, 0.60, 0.70, 0.80, 1, 2, 5], + "colmap": "coolwarm", + }, + "drynh3": { + "scale": [0, 0.10, 0.20, 0.30, 0.40, 0.50, 0.60, 0.70, 0.80, 1, 2, 5], "colmap": "coolwarm", }, "proxydrynh4": { - "scale": [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4], + "scale": [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.5, 1.0], + "colmap": "coolwarm", + }, + "drynh4": { + "scale": [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.5, 1.0], "colmap": "coolwarm", }, "proxydryso2": { - "scale": [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4], + "scale": [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.5, 1.0, 2, 5], + "colmap": "coolwarm", + }, + "dryso2": { + "scale": [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.5, 1.0, 2, 5], "colmap": "coolwarm", }, "proxydryso4": { - "scale": [0.01, 0.02, 0.03, 0.04, 0.05], + "scale": [0.0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.2, 0.5], + "colmap": "coolwarm", + }, + "dryso4": { + "scale": [0.0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.2, 0.5], "colmap": "coolwarm", }, "proxydryoxs": { @@ -309,12 +422,38 @@ "scale": [0, 0.10, 0.20, 0.30, 0.40, 0.50, 0.60, 0.70, 0.80], "colmap": "coolwarm", }, - "depoxs": {"scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2], "colmap": "coolwarm"}, - "depoxn": {"scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2], "colmap": "coolwarm"}, - "deprdn": {"scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2], "colmap": "coolwarm"}, - "depoxsf": {"scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2], "colmap": "coolwarm"}, - "depoxnf": {"scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2], "colmap": "coolwarm"}, - "deprdnf": {"scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2], "colmap": "coolwarm"}, + "depoxs": { + "scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 5, 10, 20], + "colmap": "coolwarm", + }, + "depna": { + "scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 5, 10, 20, 50, 100, 200], + "colmap": "coolwarm", + }, + "depoxn": { + "scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 5, 10, 20], + "colmap": "coolwarm", + }, + "deprdn": { + "scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 5, 10, 20, 50, 100, 200], + "colmap": "coolwarm", + }, + "depoxsf": { + "scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 5, 10, 20], + "colmap": "coolwarm", + }, + "depnaf": { + "scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 5, 10, 20], + "colmap": "coolwarm", + }, + "depoxnf": { + "scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 5, 10, 20], + "colmap": "coolwarm", + }, + "deprdnf": { + "scale": [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 5, 10, 20, 50, 100, 200], + "colmap": "coolwarm", + }, } #: Default information for statistical parameters @@ -609,18 +748,32 @@ concsspm25=["SS PM25", "3D", "Particle concentration"], concCecpm25=["EC PM2.5", "3D", "Particle concentration"], concCocpm25=["OC PM2.5", "3D", "Particle concentration"], + concCec25=["EC PM2.5", "3D", "Particle concentration"], + concCoc25=["OC PM2.5", "3D", "Particle concentration"], + concom25=["OM PM2.5", "3D", "Particle concentration"], concCecpm10=["EC PM10", "3D", "Particle concentration"], concCocpm10=["OC PM10", "3D", "Particle concentration"], concdust=["Dust concentration", "3D", "Particle concentration"], # Depositions + depoxs=["TotDepOXS", "3D", "Deposition"], + deprdn=["TotDepRDN", "3D", "Deposition"], + depoxn=["TotDepOXN", "3D", "Deposition"], + depoxsf=["TotDepOXSforr", "3D", "Deposition"], + deprdnf=["TotDepRDNforr", "3D", "Deposition"], + depoxnf=["TotDepOXNforr", "3D", "Deposition"], + depss=["TotDepSS", "3D", "Deposition"], + depssf=["TotDepSSforr", "3D", "Deposition"], + depna=["TotDepNa", "3D", "Deposition"], + depnaf=["TotDepNaforr", "3D", "Deposition"], drysox=["DryOXS", "3D", "Deposition"], - dryoxs=["FakeDryOXS", "3D", "Deposition"], - dryoxn=["FakeDryOXN", "3D", "Deposition"], - dryrdn=["FakeDryRDN", "3D", "Deposition"], + dryoxs=["DryOXS", "3D", "Deposition"], + dryoxn=["DryOXN", "3D", "Deposition"], + dryrdn=["DryRDN", "3D", "Deposition"], depdust=["TotDustDep", "3D", "Deposition"], drydust=["DryDustDep", "3D", "Deposition"], wetdust=["WetDustDep", "3D", "Deposition"], wetoxs=["WetOXS", "3D", "Deposition"], + wetna=["WetNa", "3D", "Deposition"], wetoxsc=["WetOXScorr", "3D", "Deposition"], wetoxst=["WetOXStot", "3D", "Deposition"], wetoxn=["WetOXN", "3D", "Deposition"], @@ -630,6 +783,8 @@ ts=["Surface Temperature", "3D", "Temperature"], # proxy drydep proxydryoxs=["proxyDryOXS", "3D", "Deposition"], + proxydryss=["proxyDrySS", "3D", "Deposition"], + proxydryna=["proxyDryNa", "3D", "Deposition"], proxydryso2=["proxyDrySO2", "3D", "Deposition"], proxydryso4=["proxyDrySO4", "3D", "Deposition"], proxydryoxn=["proxyDryOXN", "3D", "Deposition"], diff --git a/pyaerocom/aeroval/modelmaps_engine.py b/pyaerocom/aeroval/modelmaps_engine.py index 025d349ce..43ad08f2f 100644 --- a/pyaerocom/aeroval/modelmaps_engine.py +++ b/pyaerocom/aeroval/modelmaps_engine.py @@ -11,6 +11,7 @@ from pyaerocom.exceptions import ( DataCoverageError, DataDimensionError, + DataQueryError, TemporalResolutionError, VariableDefinitionError, VarNotAvailableError, @@ -84,7 +85,12 @@ def _run_model(self, model_name: str, var_list): _files = self._process_map_var(model_name, var, self.reanalyse_existing) files.extend(_files) - except (TemporalResolutionError, DataCoverageError, VariableDefinitionError) as e: + except ( + TemporalResolutionError, + DataCoverageError, + VariableDefinitionError, + DataQueryError, + ) as e: if self.raise_exceptions: raise logger.warning(f"Failed to process maps for {model_name} {var} data. Reason: {e}.") diff --git a/pyaerocom/data/ebas_config.ini b/pyaerocom/data/ebas_config.ini index 79e8ab710..0e323a68c 100644 --- a/pyaerocom/data/ebas_config.ini +++ b/pyaerocom/data/ebas_config.ini @@ -505,6 +505,12 @@ requires=concprcpso4 [proxydryoxs] requires=concprcpoxs +[proxydryss] +requires=concprcpna + +[proxydryna] +requires=concprcpna + [proxydryso2] requires=concprcpoxs diff --git a/pyaerocom/data/variables.ini b/pyaerocom/data/variables.ini index dbe323b4b..354342745 100644 --- a/pyaerocom/data/variables.ini +++ b/pyaerocom/data/variables.ini @@ -1589,7 +1589,8 @@ var_name = dryhno3 description = Dry deposition of HNO3 standard_name = tendency_of_atmosphere_mass_content_of_nitric_acid_due_to_dry_deposition var_type = dry deposition flux -unit = kg m-2 s-1 +;unit = kg m-2 s-1 +unit = mg N m-2 d-1 minimum = 0 maximum = 10000 dimensions = time,lat,lon @@ -1606,6 +1607,28 @@ maximum = 10000 dimensions = time,lat,lon comments_and_purpose = Verification of nitrogen budget. Verification of aerosol budget and speciation. +[dryno3c] +var_name = dryno3c +description = Dry deposition of nitrate aerosol in total PM coarse +var_type = dry deposition flux +;unit = kg m-2 s-1 +unit = mg N m-2 d-1 +minimum = 0 +maximum = 10000 +dimensions = time,lat,lon +comments_and_purpose = Verification of nitrogen budget. Verification of aerosol budget and speciation. + +[dryno3f] +var_name = dryno3f +description = Dry deposition of nitrate aerosol in total PM fine +var_type = dry deposition flux +;unit = kg m-2 s-1 +unit = mg N m-2 d-1 +minimum = 0 +maximum = 10000 +dimensions = time,lat,lon +comments_and_purpose = Verification of nitrogen budget. Verification of aerosol budget and speciation. + [dryno2] var_name = dryno2 description = Dry deposition of NO2 @@ -1939,7 +1962,9 @@ var_name = drypm10 description = Dry deposition of PM10 standard_name = tendency_of_atmosphere_mass_content_of_pm10_dry_aerosol_particles_due_to_dry_deposition var_type = dry deposition flux -unit = kg m-2 s-1 +# the following is CF's unit, but we want to perform a comparison based on obs units +# unit = kg m-2 s-1 +unit = mg m-2 d-1 minimum = 0 maximum = 10000 dimensions = time,lat,lon @@ -2964,6 +2989,7 @@ unit = ug C m-3 [concCocpm25] description=Mass concentration of organic carbon in PM2.5 unit = ug C m-3 +minimum = 0 [concCocpm10] description=Mass concentration of organic carbon in PM2.5 @@ -5504,6 +5530,7 @@ maximum = 1000 [concCoc25] description=Mass concentration of organic carbon in PM2.5 unit = ug C m-3 +minimum = 0 [concom25] description=Mass concentration of organic matter in PM2.5 @@ -5555,6 +5582,18 @@ description=Total deposition in forest of total sulphur mass unit = mg S m-2 d-1 minimum=0 +[depna] +description=Total deposition of total sodium mass +unit = mg m-2 d-1 +minimum=0 + +[depnaf] +description=Total deposition in forest of total sodium mass +unit = mg m-2 d-1 +minimum=0 + + + [wetno2] var_name = wetno2 description = Wet deposition of nitrogen oxide in total PM @@ -5665,6 +5704,21 @@ description=proxy dry deposition of total sulphur mass unit = mg S m-2 d-1 minimum=0 +[proxydryss] +description=proxy dry deposition of sea salt mass +unit = mg m-2 d-1 +minimum=0 + +[proxydryna] +description=proxy dry deposition of sodium mass +unit = mg m-2 d-1 +minimum=0 + +[dryna] +description=proxy dry deposition of sodium mass +unit = mg m-2 d-1 +minimum=0 + [proxydryso2] description=proxy dry deposition of SO2 unit = mg S m-2 d-1 diff --git a/pyaerocom/io/read_ebas.py b/pyaerocom/io/read_ebas.py index ae36bf358..44a93dc1b 100644 --- a/pyaerocom/io/read_ebas.py +++ b/pyaerocom/io/read_ebas.py @@ -187,7 +187,7 @@ class ReadEbas(ReadUngriddedBase): """ #: version log of this class (for caching) - __version__ = "0.51_" + ReadUngriddedBase.__baseversion__ + __version__ = "0.52_" + ReadUngriddedBase.__baseversion__ #: Name of dataset (OBS_ID) DATA_ID = const.EBAS_MULTICOLUMN_NAME @@ -249,6 +249,8 @@ class ReadEbas(ReadUngriddedBase): # proxy drydep # Suphar based "proxydryoxs": ["concprcpoxs", "pr"], + "proxydryss": ["concprcpna", "pr"], + "proxydryna": ["concprcpna", "pr"], "proxydryso2": ["concprcpoxs", "pr"], "proxydryso4": ["concprcpoxs", "pr"], # Oxidized nitrogen based @@ -319,6 +321,8 @@ class ReadEbas(ReadUngriddedBase): # proxy dry dep # Suphar based "proxydryoxs": compute_wetoxs_from_concprcpoxs, + "proxydryss": compute_wetna_from_concprcpna, + "proxydryna": compute_wetna_from_concprcpna, "proxydryso2": compute_wetoxs_from_concprcpoxs, "proxydryso4": compute_wetoxs_from_concprcpoxs, # Oxidized nitrogen based diff --git a/pyaerocom/molmasses.py b/pyaerocom/molmasses.py index 9c4dae73f..699dfb229 100644 --- a/pyaerocom/molmasses.py +++ b/pyaerocom/molmasses.py @@ -1,4 +1,17 @@ -VAR_PREFIXES = ["vmr", "mmr", "conc", "sconc", "wet", "dry"] +VAR_PREFIXES = [ + "vmr", + "mmr", + "conc", + "sconc", + "wet", + "dry", + "concNt", + "concN", + "concC", + "proxydry", + "proxywet", + "dep", +] # in g/mol MOLMASSES = { @@ -8,8 +21,10 @@ "so4": 96.06, "no": 30.01, "no2": 46.0055, + "no3": 62.0045, "hno3": 63.01, "nh3": 17.031, + "nh4": 18.039, "co": 28.010, "isop": 68.12, "glyoxal": 58.036, diff --git a/pyaerocom/plugins/ipcforests/reader.py b/pyaerocom/plugins/ipcforests/reader.py index 18f9678d3..265a7fde0 100644 --- a/pyaerocom/plugins/ipcforests/reader.py +++ b/pyaerocom/plugins/ipcforests/reader.py @@ -21,7 +21,7 @@ class ReadIPCForest(ReadUngriddedBase): #: version log of this class (for caching) - __version__ = "0.4_" + ReadUngriddedBase.__baseversion__ + __version__ = "0.5_" + ReadUngriddedBase.__baseversion__ #: Name of dataset (OBS_ID) DATA_ID = const.IPCFORESTS_NAME @@ -57,9 +57,11 @@ class ReadIPCForest(ReadUngriddedBase): "depoxs": 20, "depoxn": 19, "deprdn": 17, + "depna": 16, "depoxsf": 20, "depoxnf": 19, "deprdnf": 17, + "depnaf": 16, "wetso4": 20, "wetno3": 19, "wetnh4": 17, @@ -86,6 +88,8 @@ class ReadIPCForest(ReadUngriddedBase): "wetnh4": "mg N m-2 d-1", "wetno2": "mg N m-2 d-1", "wetna": "mg m-2 d-1", + "depna": "mg m-2 d-1", + "depnaf": "mg m-2 d-1", # unverified "wetcl": "mg m-2 d-1", } diff --git a/tests/fixtures/data_access.py b/tests/fixtures/data_access.py index fc93fc9d0..4365b0453 100644 --- a/tests/fixtures/data_access.py +++ b/tests/fixtures/data_access.py @@ -14,11 +14,12 @@ from pyaerocom import const, io from pyaerocom.io.readungriddedbase import ReadUngriddedBase from pyaerocom.plugins.ghost.reader import ReadGhost +from pyaerocom.plugins.ipcforests.reader import ReadIPCForest logger = logging.getLogger(__name__) #: tarfile to download -TESTATA_FILE = "testdata-minimal.tar.gz.20231019" +TESTATA_FILE = "testdata-minimal.tar.gz.20231116" minimal_dataset = pooch.create( path=const.OUTPUTDIR, # ~/MyPyaerocom/ @@ -30,6 +31,7 @@ "testdata-minimal.tar.gz.20231013": "md5:f3e311c28e341a5c54d5bbba6f9849d2", "testdata-minimal.tar.gz.20231017": "md5:705d91e01ca7647b4c93dfe67def661f", "testdata-minimal.tar.gz.20231019": "md5:f8912ee83d6749fb2a9b1eda1d664ca2", + "testdata-minimal.tar.gz.20231116": "md5:5da747f6596817295ba7affe3402b722", }, ) @@ -84,6 +86,7 @@ def register_ungridded(self, name: str): "G.EEA.hourly.Subset": DataForTests("obsdata/GHOST/data/EEA_AQ_eReporting/hourly", ReadGhost), "G.EBAS.daily.Subset": DataForTests("obsdata/GHOST/data/EBAS/daily", ReadGhost), "G.EBAS.hourly.Subset": DataForTests("obsdata/GHOST/data/EBAS/hourly", ReadGhost), + "IPCFORESTS.Subset": DataForTests("obsdata/ipc-forests/dep", ReadIPCForest), "EEA_AQeRep.v2.Subset": DataForTests("obsdata/EEA_AQeRep.v2/renamed", io.ReadEEAAQEREP_V2), "Earlinet-test": DataForTests("obsdata/Earlinet", io.ReadEarlinet), } diff --git a/tests/io/test_read_ebas.py b/tests/io/test_read_ebas.py index c5acbdb2b..75cc653f1 100644 --- a/tests/io/test_read_ebas.py +++ b/tests/io/test_read_ebas.py @@ -331,6 +331,8 @@ def test_PROVIDES_VARIABLES(reader: ReadEbas): "proxydryno3f", "proxydryo3", "proxydryoxs", + "proxydryss", + "proxydryna", "proxydrypm10", "proxydrypm25", "proxydryrdn", diff --git a/tests/plugins/ipcforests/test_reader.py b/tests/plugins/ipcforests/test_reader.py index 2033fb05d..8fb680b8f 100644 --- a/tests/plugins/ipcforests/test_reader.py +++ b/tests/plugins/ipcforests/test_reader.py @@ -7,36 +7,28 @@ from pyaerocom import const from pyaerocom.plugins.ipcforests.metadata import MetadataReader as ReadIPCForestMeta from pyaerocom.plugins.ipcforests.reader import ReadIPCForest -from tests.conftest import lustre_unavail +from tests.fixtures.data_access import TEST_DATA, DataForTests -try: - IPC_PATH = Path(const.OBSLOCS_UNGRIDDED[const.IPCFORESTS_NAME]) -except KeyError: - pytest.mark.skip(reason=f"IPCForests path not initialised due to non existence in CI") - -# stationnames are not consistent between variables! -# wetoxn -STATION_NAMES = ("DE-604-2", "NO-7-2", "UK-718-2") -# fakedrypm10 -# STATION_NAMES = ("Birkenes II", "La Coulonche", "Jarczew") +# station names are not consistent between variables! +# Station names are kind of limited since we took only the last 5000 lines from the data file for the test data set +STATION_NAMES = ("BG-1-1", "LV-15-2", "BG-4-3") VARS_DEFAULT = {"wetoxn"} VARS_PROVIDED = VARS_DEFAULT +IPC_PATH = DataForTests(TEST_DATA["IPCFORESTS.Subset"].relpath).path + -@lustre_unavail @pytest.fixture(scope="module") -def reader() -> ReadIPCForest: - return ReadIPCForest(data_dir=str(IPC_PATH)) +def reader(): + return ReadIPCForest("IPCFORESTS.Subset") -@lustre_unavail @pytest.fixture(scope="module") def meta_reader() -> ReadIPCForestMeta: return ReadIPCForestMeta(str(IPC_PATH)) -@lustre_unavail @pytest.fixture() def station_files(station: str) -> list[Path]: p = IPC_PATH.glob("dp_dem.csv") @@ -46,27 +38,22 @@ def station_files(station: str) -> list[Path]: return files -@lustre_unavail def test_DATASET_NAME(reader: ReadIPCForest): assert reader.DATA_ID == const.IPCFORESTS_NAME -@lustre_unavail def test_DEFAULT_VARS(reader: ReadIPCForest): assert set(reader.DEFAULT_VARS) >= VARS_DEFAULT -@lustre_unavail def test_METADATA(meta_reader: ReadIPCForestMeta): assert len(meta_reader.deposition_type) >= 3, "found less deposition types than expected" -@lustre_unavail def test_PROVIDES_VARIABLES(reader: ReadIPCForest): return set(reader.PROVIDES_VARIABLES) >= VARS_PROVIDED -@lustre_unavail def test_read_file( reader: ReadIPCForest, ): @@ -74,12 +61,9 @@ def test_read_file( assert set(data.contains_vars) == VARS_DEFAULT -@lustre_unavail def test_read_station( reader: ReadIPCForest, ): - # IPCForest reader does not support partial read of stations at this time - # not easy to implement due to being a single file dataset data = reader.read( vars_to_retrieve=VARS_DEFAULT, ) @@ -87,6 +71,5 @@ def test_read_station( assert station in data.unique_station_names -@lustre_unavail def test_reader_gives_correct_IPC_PATH(reader: ReadIPCForest): assert str(IPC_PATH) == reader.data_dir diff --git a/tests/test_molmasses.py b/tests/test_molmasses.py index 758277fbe..4100ccd32 100644 --- a/tests/test_molmasses.py +++ b/tests/test_molmasses.py @@ -12,6 +12,11 @@ ("vmro3", "o3"), ("mmro3", "o3"), ("wetso4", "so4"), + ("concNnh4", "nh4"), + ("concNnh3", "nh3"), + ("concNtno3", "no3"), + ("proxydryno2", "no2"), + ("proxywetno2", "no2"), ], ) def test_get_species(var_name: str, species: str): @@ -27,6 +32,10 @@ def test_get_species(var_name: str, species: str): ("vmro3", 48), ("mmro3", 48), ("wetso4", 96.06), + ("concNnh4", 18.039), + ("concNnh3", 17.031), + ("concNtno3", 62.0045), + ("proxydryno2", 46.0055), ], ) def test_get_molmass(var_name: str, molmass: float): diff --git a/tests/test_varcollection.py b/tests/test_varcollection.py index fff03d390..71f4b1e2f 100644 --- a/tests/test_varcollection.py +++ b/tests/test_varcollection.py @@ -81,7 +81,7 @@ def test_VarCollection_get_var_error(collection: VarCollection): "search_pattern,num", [ ("*blaaaaaaa*", 0), - ("dep*", 7), + ("dep*", 9), ("od*", 26), ("conc*", 90), ],