Support RMS diffusion/mass-transfer interfaces (`ConstantReservoirDiffusion`, `FickDiffusionInternalInterface`) in `liquidSurfaceReactor`
I maintainer di solito rispondono entro 9 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 38/100
Direzione di ricerca
Start with ConstantTLiquidSurfaceReactor.generate_reactor, then trace how selectobjects and getkeyselectioninds handle domains and interfaces; inspect EdgeAnalysis.jl and Domain.jl for existing RMS diffusion handling. The issue proposes constant-reservoir and finite-bulk modes, with core and edge reactors both supporting the added domain and interface. Done means both modes work and are documented in input.rst with an electrocatalysis example.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Note: This issue was drafted by Claude (Anthropic's AI assistant, via Claude Code), based on its diagnosis of the run described below, and posted at Richard West's request.
Context
Torrie Asifor's CO2RR-on-Cu(111) run (liquidSurfaceReactor, RMS backend, echem branch of RMS) slowed to ~4.4 h per iteration after 3 days. 67 of its 69 edge simulations ended with CVODE "corrector convergence test failed repeatedly or with |h| = hmin", most at t ≈ 1e-11 s with h ≈ 1e-19 s. Each failure takes RMS's "resurrect" branch, which adds the edge species with the largest rate, so the model was being grown by solver crashes, not by flux criteria (and the RMG log never says so).
ConstantTLiquidSurfaceReactor.generate_reactor builds the liquid phase with IdealDiluteSolution(..., diffusionlimited=True). That only limits liquid-phase bimolecular reactions. When the mechanism has no liquid-phase reactions, as in typical electrocatalysis models where everything happens at the interface, it does nothing. Interface reactions such as proton + adsorbate or adsorption have no transport limit at all.
For example, at pH 7 (1e-4 mol/m³ H⁺, D ≈ 9e-9 m²/s, film thickness about 100 µm) mass transfer caps the proton supply at about 10⁻⁸ mol/m²/s. That's about 3×10⁻⁴ turnovers per site per second, orders of magnitude below the kinetic rates RMS now uses.
RMS already has the pieces:
ConstantReservoirDiffusion(domain, conddict, A, layer_thickness)onechem/for_rmg(ReactionMechanismGenerator/ReactionMechanismSimulator.jl@a814423e): couples a domain to a constant-composition bulk through a film.FickDiffusionInternalInterface, RMS PR 279, open and not yet reviewed: Fickian transfer between two finite domains, so the bulk can deplete or accumulate.
Proposal:
- New
liquidSurfaceReactorkeywords, e.g.diffusionLayerThickness=(100,'um'), plus eitherbulkConcentrations={...}(constant reservoir) or a bulkliquidVolume(finite bulk, using PR 279). - In
generate_reactor, split the liquid into a near-surface domain and the bulk, add the diffusion interface, and build both the core and edge reactors the same way. - Make sure
selectobjects/getkeyselectionindshandle the extra domain and non-reactive interface, and that edge species get diffusivities.EdgeAnalysis.jlonly special-cases the reactive interfaces now;Domain.jlhandlesConstantReservoirDiffusion. - Document it in
input.rst, with an electrocatalysis example.
Related: for buffered electrolytes, constantSpecies=["proton"] is the cheap alternative. Without either, a 1 m³ reactor at pH 7 holds 10⁻⁴ mol H⁺ against about 0.3 mol of sites, and the protons run out almost at once.
See also: #3034 (linear solver) and ReactionMechanismGenerator/ReactionMechanismSimulator.jl#280 (rate caps), which came out of the same diagnosis.
🤖 Generated with Claude Code
- Lingua principale
- Python
- Stelle
- 541
- Fork
- 265
- Merge medio
- 8h 49m
- PR unite (30g)
- 1
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di ReactionMechanismGenerator/RMG-Py
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 88/100
ReactionMechanismGenerator/RMG-Py#3014 ·
I maintainer di solito rispondono entro 9 giorni
-
RMS reactors: hard-coded unpreconditioned GMRES linear solver makes stiff surface/electrochemical edge simulations failForse già presa @rwest l’ha presa oggi. Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
ReactionMechanismGenerator/RMG-Py#3034 ·
I maintainer di solito rispondono entro 9 giorni
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 57/100
ReactionMechanismGenerator/RMG-Py#3030 ·
I maintainer di solito rispondono entro 9 giorni
-
Check the Georgievskii CSE variant for round-off-limited eigenvalues, and add CI tests for itAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
ReactionMechanismGenerator/RMG-Py#3029 ·
I maintainer di solito rispondono entro 9 giorni
-
Eckart.calculate_tunneling_function: cancellation in 1 - ratio and missing cos branch for small barriersForse già presa @sectio-aurea-q l’ha presa 17 giorni fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 42/100
ReactionMechanismGenerator/RMG-Py#3019 ·
I maintainer di solito rispondono entro 9 giorni
Tutte le issue di ReactionMechanismGenerator/RMG-Py
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
micropython/micropython#19906 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
FinanceFlash/unvibecode#597 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
TomAnthony/YourOwnWeigh#21 ·
I maintainer di solito rispondono entro 1 giorno
-
[BUG]: Compliance rules never see Unity Catalog views as viewsForse già presa @wagnercsantos l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
databrickslabs/ontos#1348 ·
I maintainer di solito rispondono entro 3 giorni
-
Deprecated datetime.utcnow() is called on every log line (DeprecationWarning on Python 3.12+)Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 2 giorni