Skip to content

ERF-Hazard: 2D Dust Emission Module, Fire–Dust Coupling, and Health/Regulatory Diagnostics (For information not merging) - #3529

Open
hgopalan wants to merge 461 commits into
erf-model:developmentfrom
hgopalan:ERF-Hazard
Open

ERF-Hazard: 2D Dust Emission Module, Fire–Dust Coupling, and Health/Regulatory Diagnostics (For information not merging)#3529
hgopalan wants to merge 461 commits into
erf-model:developmentfrom
hgopalan:ERF-Hazard

Conversation

@hgopalan

@hgopalan hgopalan commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Overview

This PR adds a two-way-coupled 2D dust emission, transport, and deposition module to ERF, along with fire–dust interaction pathways and occupational/regulatory health-exposure diagnostics. It builds on the ERF-Fire branch, reusing its coupling patterns. The module targets fugitive dust from critical-mineral extraction sites (open pits, tailings, haul roads, evaporation ponds).

New CMake option ERF_ENABLE_DUST (default OFF); all dust code is guarded by #ifdef ERF_USE_DUST. ERF_ENABLE_FIRE is also enabled (default ON) so the fire–dust tests build.

Part 1: ERF-Dust Module

The dust layer runs on a refined 2D horizontal grid (erf.dust.grid_ratio) sharing the atmospheric distribution mapping. Capabilities:

  • Threshold friction velocity — Bagnold (1941) with crust, efflorescence, moisture (Fecan 1999), and suppression modifiers.
  • Emission — Marticorena & Bergametti (1995) saltation + sandblasting flux; timed blasting and haul-road sources (EPA AP-42).
  • Surface & geochemistry inputs — ESRI ASCII / FARSITE LCP maps; offline PHREEQC crust/efflorescence/silt read at prescribed intervals.
  • Two-way atmospheric coupling — wind/u*/T_sfc/PBLH extraction, surface flux injection, Stokes settling with Cunningham correction, Zhang et al. (2001) dry deposition, Shao (2001) loading feedback, and MRF nonlocal diffusion of the dust scalar.
  • Multi-site support and Lagrangian super-particle source–receptor tracking (ERF_USE_PARTICLES).

Parameters use the erf.dust.* prefix (enable defaults false). Full list and defaults in Docs/sphinx_doc/theory/DustModule.rst.

Part 2: Fire–Dust Coupling

Three composable pathways (require fire_dust_coupling = true, dust.grid_ratio == fire.grid_ratio): crust reduction in burned cells, fire-wind contribution to dust u*, and heat-flux emission lofting. Fire smoke injection is also supported.

Part 3: Health & Regulatory Diagnostics

EPA NAAQS PM2.5/PM10, MSHA 8-hour TWA, DOE critical-material flux, plus visibility (Koschmieder), respirable silica (OSHA), and 15-min STEL diagnostics.

Testing & Docs

New canonical suites in Exec/CanonicalTests/Dust/ and Exec/CanonicalTests/Hazard/ (per-phase regression cases with documented expected results, including Gaussian hill/pit terrain and smoke transport). Theory docs added for the dust and fire modules.

References

Bagnold (1941) · Marticorena & Bergametti (1995) · Owen (1964) · Shao & Lu (2000) · Shao (2001) · Fecan et al. (1999) · Zhang et al. (2001) · Parkhurst & Appelo (2013) · Hong & Pan (1996). Regulatory: EPA NAAQS (40 CFR 50), MSHA (30 CFR 56/57), OSHA silica (29 CFR 1910.1053), EPA AP-42, DOE Critical Materials Assessment.

Copilot AI and others added 30 commits July 13, 2026 23:24
Phase 10: Implement one-way dust aerosol injection into 3D atmosphere
- Updated all Dust input files to use neutral_abl atmospheric configuration
- Increased domain height from 1000m to 1024m
- Updated grid from 16x16 to 64x64 cells in z-direction
- Changed erf.use_gravity from false to true
- Updated erf.most.zref from 50.0 to 24.0
- Updated erf.fixed_dt from 1.0 to 0.5
- Added sounding_dust_abl files with appropriate height profile
- Added Phase 1 debug statement to track prerequisite verification
- Added unconditional Phase 4 debug statement for PHREEQC reader
…ebug-statements

Standardize Dust test configurations to realistic neutral ABL with complete debug instrumentation
- Add m_dust_flux_atm member variable to ERF.H
- Allocate m_dust_flux_atm[0] during DustLayer initialization in ERF.cpp
- Add coarsen_dust_flux_to_atm call in ERF.cpp after DustLayer::advance
- Replace apply_to_cc_source call with direct apply_dust_tendency_to_cc_source call in ERF_Advance.cpp
- This implements one-step explicit lag: flux from step n is coarsened at end of step n, injected at beginning of step n+1
- ERF.H: Add m_dust_flux_atm member variable (Vector of unique_ptr MultiFab)
- ERF.cpp: Allocate m_dust_flux_atm[0] during DustLayer initialization
- ERF.cpp: After DustLayer::advance, sum emission flux bins and coarsen to atm grid
- ERF_Advance.cpp: Replace apply_to_cc_source with direct apply_dust_tendency_to_cc_source call
- Implements one-step explicit lag: flux from step n coarsened at end of step n, injected at beginning of step n+1
- Follows exact Fire module pattern as specified in task
Wire dust emission flux coupling into ERF_Advance.cpp with one-step explicit lag
Implement Phase 11: Stokes settling and per-bin scalar transport for dust module
Fix dust scalar transport in dycore — enable Phase 11 settling accumulation
- Change 1: Update NSCALARS definition in ERF_IndexDefines.H to increase from 1 to 2 when ERF_USE_DUST is defined
- Change 2: Update m_dust_scalar_comp in ERF_DustLayer.cpp to use RhoScalar_comp + 1 instead of RhoAdv_comp
- Change 3: Add dust zeroing code in ERF.cpp InitData_post() method to zero dust scalars after initialization"
…component

Give Dust its own dedicated conserved scalar component
Copilot AI and others added 30 commits July 23, 2026 16:09
…ction

Merge PBL terrain correction (PBLDerivativeDzInv) from development into ERF-Hazard
…zard

# Conflicts:
#	Source/DataStructs/ERF_TurbStruct.H
#	Source/Diffusion/ERF_ComputeTurbulentViscosity.cpp
#	Source/PBL/ERF_ComputeDiffusivityMRF.cpp
#	Source/PBL/ERF_ComputeDiffusivityMYNN25.cpp
#	Source/PBL/ERF_ComputeDiffusivityMYNNEDMF.cpp
#	Source/PBL/ERF_ComputeDiffusivityYSUNew.cpp
#	Source/PBL/ERF_PBLModels.H
Merge `development` into `ERF-Hazard` and preserve Fire/Dust + new PBL/IO integrations
…, Dust, and Hazard canonical tests

- Added standardized header comment blocks to all canonical test input files (42 Fire, 23 Dust, 24 Hazard) explaining test purpose, physics features, and expected outcomes
- Created 78 README.md files for all sub-folders and leaf test cases under Fire, Dust, and Hazard with Purpose, Physics/Model Features, Expected Results, Key Parameters, and References sections
- Created Exec/CanonicalTests/Dust/inputs_dust_master_reference documenting all dust module parameters, defaults, and configuration options
- Created Exec/CanonicalTests/Hazard/inputs_hazard_master_reference documenting fire-dust interaction and combined hazard scenario parameters
- Created top-level README files for Fire/, Dust/, and Hazard/ directories listing test cases and scientific scope

Total changes: 90 input files updated, 78 new README files, 2 new master reference files

Co-authored-by: hgopalan <1108371+hgopalan@users.noreply.github.com>
Document canonical test cases for Fire, Dust, and Hazard modules
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants