MICM Chemistry
A unique chemistry module that can be implemented in any atmosphere model used at NCAR.
https://github.com/ncar/micm
Category: Atmosphere
Sub Category: Atmospheric Chemistry and Aerosol
Keywords
atmospheric-chemistry atmospheric-modeling atmospheric-science cuda gpu gpu-acceleration hpc ode-solver
Keywords from Contributors
route climate reporting page simulator transformers dependencies agent climate-model cloud-computing
Last synced: about 17 hours ago
JSON representation
Repository metadata
A model-independent chemistry module for atmosphere models
- Host: GitHub
- URL: https://github.com/ncar/micm
- Owner: NCAR
- License: apache-2.0
- Created: 2020-09-10T18:37:15.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2025-04-18T16:03:45.000Z (9 days ago)
- Last Synced: 2025-04-20T08:39:04.923Z (7 days ago)
- Topics: atmospheric-chemistry, atmospheric-modeling, atmospheric-science, cuda, gpu, gpu-acceleration, hpc, ode-solver
- Language: C++
- Homepage: https://ncar.github.io/micm/
- Size: 46.5 MB
- Stars: 6
- Watchers: 10
- Forks: 6
- Open Issues: 11
- Releases: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Citation: CITATION.cff
README.md
MICM Chemistry
Model Independent Chemical Module. MICM can be used to configure and solve atmospheric chemistry systems.
Copyright (C) 2018-2025 National Center for Atmospheric Research
Note
MICM 3.x.x is part of a refactor and may include breaking changes across minor revision numbers
and partially implemented features
Getting Started
Installing MICM locally
To build and install MICM locally, you must have CMake installed on your machine.
Open a terminal window, navigate to a folder where you would like the MICM files to exist,
and run the following commands:
git clone https://github.com/NCAR/micm.git
cd micm
mkdir build
cd build
ccmake ..
sudo make install -j 8
To run the tests:
make test
If you would later like to uninstall MICM, you can run
sudo make uninstall
from the build/
directory.
Options
There are multiple options for running micm. You can use json
to configure a solver, llvm to JIT-compile
solvers on CPUs or cuda-based solvers to solve chemistry on GPUs.
Please read our docs
to learn how to enable these options.
Running a MICM Docker container
You must have Docker Desktop installed and running.
With Docker Desktop running, open a terminal window.
To build the latest MICM release, run the following command to start the MICM container:
docker run -it ghcr.io/ncar/micm:release bash
To build the latest pre-release version of MICM, instead run:
git clone https://github.com/NCAR/micm.git
cd micm
docker build -t micm -f docker/Dockerfile .
docker run -it micm bash
Inside the container, you can run the MICM tests from the /build/
folder:
cd /build/
make test
Using the MICM API
The following example solves the fictitious chemical system:
foo --k1--> 0.8 bar + 0.2 baz
foo + bar --k2--> baz
The k1
and k2
rate constants are for Arrhenius reactions. See the MICM documentation for details on the types of reactions available in MICM and how to configure them.
To solve this system save the following code in a file named foo_chem.cpp
:
#include <micm/process/arrhenius_rate_constant.hpp>
#include <micm/solver/rosenbrock.hpp>
#include <micm/solver/solver_builder.hpp>
#include <iomanip>
#include <iostream>
using namespace micm;
int main(const int argc, const char *argv[])
{
auto foo = Species{ "Foo" };
auto bar = Species{ "Bar" };
auto baz = Species{ "Baz" };
Phase gas_phase{ std::vector<Species>{ foo, bar, baz } };
System chemical_system{ SystemParameters{ .gas_phase_ = gas_phase } };
Process r1 = Process::Create()
.SetReactants({ foo })
.SetProducts({ Yield(bar, 0.8), Yield(baz, 0.2) })
.SetRateConstant(ArrheniusRateConstant({ .A_ = 1.0e-3 }))
.SetPhase(gas_phase);
Process r2 = Process::Create()
.SetReactants({ foo, bar })
.SetProducts({ Yield(baz, 1) })
.SetRateConstant(ArrheniusRateConstant({ .A_ = 1.0e-5, .C_ = 110.0 }))
.SetPhase(gas_phase);
std::vector<Process> reactions{ r1, r2 };
auto solver = micm::CpuSolverBuilder<micm::RosenbrockSolverParameters>(micm::RosenbrockSolverParameters::ThreeStageRosenbrockParameters())
.SetSystem(chemical_system)
.SetReactions(reactions)
.Build();
State state = solver.GetState();
state.conditions_[0].temperature_ = 287.45; // K
state.conditions_[0].pressure_ = 101319.9; // Pa
state.conditions_[0].CalculateIdealAirDensity();
state.SetConcentration(foo, 20.0); // mol m-3
state.PrintHeader();
for (int i = 0; i < 10; ++i)
{
solver.CalculateRateConstants(state);
auto result = solver.Solve(500.0, state);
state.PrintState(i * 500);
}
return 0;
}
To build and run the example using GNU (assuming the default install location):
g++ -o foo_chem foo_chem.cpp -I/usr/local/micm-3.8.0/include -std=c++20
./foo_chem
Output:
time, Bar, Baz, Foo
0, 5.90e+00, 1.91e+00, 1.18e+01
500, 9.05e+00, 3.32e+00, 6.79e+00
1000, 1.07e+01, 4.21e+00, 3.83e+00
1500, 1.17e+01, 4.74e+00, 2.14e+00
2000, 1.22e+01, 5.04e+00, 1.19e+00
2500, 1.24e+01, 5.21e+00, 6.58e-01
3000, 1.26e+01, 5.31e+00, 3.64e-01
3500, 1.27e+01, 5.36e+00, 2.01e-01
4000, 1.27e+01, 5.39e+00, 1.11e-01
4500, 1.28e+01, 5.41e+00, 6.13e-02
Citation
MICM is part of the MUSICA project and can be cited by reference to the MUSICA vision paper. The BibTeX entry below can be used to generate a citation for this.
@Article { acom.software.musica-vision,
author = "Gabriele G. Pfister and Sebastian D. Eastham and Avelino F. Arellano and Bernard Aumont and Kelley C. Barsanti and Mary C. Barth and Andrew Conley and Nicholas A. Davis and Louisa K. Emmons and Jerome D. Fast and Arlene M. Fiore and Benjamin Gaubert and Steve Goldhaber and Claire Granier and Georg A. Grell and Marc Guevara and Daven K. Henze and Alma Hodzic and Xiaohong Liu and Daniel R. Marsh and John J. Orlando and John M. C. Plane and Lorenzo M. Polvani and Karen H. Rosenlof and Allison L. Steiner and Daniel J. Jacob and Guy P. Brasseur",
title = "The Multi-Scale Infrastructure for Chemistry and Aerosols (MUSICA)",
journal = "Bulletin of the American Meteorological Society",
year = "2020",
publisher = "American Meteorological Society",
address = "Boston MA, USA",
volume = "101",
number = "10",
doi = "10.1175/BAMS-D-19-0331.1",
pages= "E1743 - E1760",
url = "https://journals.ametsoc.org/view/journals/bams/101/10/bamsD190331.xml"
}
Community and contributions
We welcome contributions and feedback from anyone, everything from updating
the content or appearance of the documentation to new and
cutting edge science.
-
- Anyone interested in scientific collaboration
which would add new software functionality should read the MUSICA software development plan.
- Anyone interested in scientific collaboration
-
- Before submiitting a PR, please thouroughly read this to you understand our expectations. We reserve the right to reject any PR not meeting our guidelines.
Documentation
Please see the MICM documentation for detailed
installation and usage instructions.
License
Copyright (C) 2018-2025 National Center for Atmospheric Research
Citation (CITATION.cff)
cff-version: 1.2.0 message: If you use this software, please cite it as below. title: Model Independent Chemistry Model (MICM) version: v3.7.0 doi: "10.5281/zenodo.10472189" authors: - family-names: Dawson given-names: Matthew - family-names: Sun given-names: Jian - family-names: Shores given-names: Kyle - family-names: Fillmore given-names: David - family-names: Tan given-names: Qina - family-names: Craig given-names: Cheryl - family-names: Gim given-names: Jiwon - family-names: Waxmonsky given-names: Michael - family-names: Vitt given-names: Francis - family-names: Conley given-names: Andrew - family-names: Karsenti given-names: Aharon license: Apache-2.0 url: "https://github.com/NCAR/micm"
Owner metadata
- Name: NSF National Center for Atmospheric Research
- Login: NCAR
- Email:
- Kind: organization
- Description: NSF NCAR is sponsored by the U.S. National Science Foundation and managed by the University Corporation for Atmospheric Research.
- Website: http://ncar.ucar.edu
- Location: Boulder, CO
- Twitter:
- Company:
- Icon url: https://avatars.githubusercontent.com/u/2007542?v=4
- Repositories: 934
- Last ynced at: 2024-04-16T05:55:57.342Z
- Profile URL: https://github.com/NCAR
GitHub Events
Total
- Create event: 67
- Release event: 2
- Issues event: 45
- Watch event: 2
- Delete event: 60
- Issue comment event: 77
- Push event: 367
- Pull request review comment event: 77
- Pull request event: 122
- Pull request review event: 159
- Fork event: 2
Last Year
- Create event: 67
- Release event: 2
- Issues event: 45
- Watch event: 2
- Delete event: 60
- Issue comment event: 77
- Push event: 367
- Pull request review comment event: 77
- Pull request event: 122
- Pull request review event: 159
- Fork event: 2
Committers metadata
Last synced: 7 days ago
Total Commits: 1,300
Total Committers: 17
Avg Commits per committer: 76.471
Development Distribution Score (DDS): 0.692
Commits in past year: 188
Committers in past year: 7
Avg Commits per committer in past year: 26.857
Development Distribution Score (DDS) in past year: 0.638
Name | Commits | |
---|---|---|
Kyle Shores | k****4@g****m | 401 |
David Fillmore | f****e@u****u | 187 |
Matt Dawson | m****n@u****u | 175 |
Qina Tan | q****n@h****m | 147 |
github-actions[bot] | 4****] | 112 |
Jiwon Gim | j****m@u****u | 77 |
Cheryl Craig | c****g@u****u | 74 |
Jian Sun | s****n@u****u | 50 |
Francis Vitt | f****t@u****u | 22 |
GitHub Actions | a****s@g****m | 17 |
Andrew Conley | a****y@m****u | 11 |
AndrewJConley | a****y@u****u | 10 |
mwaxmonsky | 1****y | 10 |
Montek Thind | m****d@u****u | 4 |
David Fillmore | f****w@g****m | 1 |
Cheryl Craig | c****g@m****u | 1 |
aharon karsenti | a****9@g****m | 1 |
Committer domains:
- ucar.edu: 8
- modeling2.acom.ucar.edu: 2
- github.com: 1
Issue and Pull Request metadata
Last synced: 1 day ago
Total issues: 290
Total pull requests: 459
Average time to close issues: about 2 months
Average time to close pull requests: 2 days
Total issue authors: 6
Total pull request authors: 9
Average comments per issue: 0.56
Average comments per pull request: 0.86
Merged pull request: 429
Bot issues: 0
Bot pull requests: 150
Past year issues: 132
Past year pull requests: 228
Past year average time to close issues: about 2 months
Past year average time to close pull requests: 2 days
Past year issue authors: 5
Past year pull request authors: 7
Past year average comments per issue: 0.4
Past year average comments per pull request: 0.83
Past year merged pull request: 208
Past year bot issues: 0
Past year bot pull requests: 82
Top Issue Authors
- mattldawson (110)
- K20shores (85)
- sjsprecious (46)
- mwaxmonsky (20)
- boulderdaze (15)
- dwfncar (14)
Top Pull Request Authors
- github-actions[bot] (150)
- K20shores (118)
- mattldawson (66)
- sjsprecious (54)
- boulderdaze (32)
- mwaxmonsky (17)
- dwfncar (11)
- qinatan (7)
- montythind (4)
Top Issue Labels
- enhancement (102)
- bug (35)
- good first issue (23)
- question (16)
- documentation (13)
- Stale (8)
- list issue (6)
- invalid (1)
- help wanted (1)
Top Pull Request Labels
- enhancement (54)
- bug (14)
Dependencies
- fedora 29 build
- actions/checkout v2 composite
- actions/checkout v3 composite
- peter-evans/create-pull-request v3 composite
- actions/checkout v3 composite
- peaceiris/actions-gh-pages v3 composite
- breathe *
- sphinx *
- sphinx-book-theme *
- sphinx-design *
Score: 5.666426688112432