Skip to content

Commit 31d6550

Browse files
committed
more work on the JOSS paper
1 parent ebbc4a6 commit 31d6550

File tree

1 file changed

+47
-5
lines changed

1 file changed

+47
-5
lines changed

paper/paper.md

+47-5
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ bibliography: paper.bib
2525
The AMReX-Astrophysics Microphysics library provides a common set of
2626
microphysics routines (reaction networks, equations of state, and
2727
other transport coefficients) for astrophysical simulation codes built
28-
around the AMReX library.
28+
around the AMReX library. Several codes, including Castro, MAESTROeX,
29+
and Quokka use Microphysics to provide the physics and solvers needed
30+
to close the hydrodynamics systems that they evolve.
2931

3032
# History
3133

@@ -39,13 +41,41 @@ Microphysis were split off into the AMReX-Astrophysics Microphysics
3941
library. Today, the library is completely written in C++ and relies
4042
on the AMReX data structures.
4143

42-
# Design
44+
Several classical Fortran libraries have been converted to header-only C++
45+
implementations, including the VODE integrator and the hybrid Powell method
46+
of MINPACK.
47+
4348

44-
Porting many classic solvers from old Fortran to C++
49+
# Design
4550

46-
header-only library as much as possible
51+
Microphysics provides several different types of physics: equations of
52+
state, reaction networks and screening methods, nuclear statistical
53+
equilibrium solvers and table, conductivities, and opacities, as well
54+
as the tools needed to work with them, most notably the ODE integrators
55+
for the networks.
56+
57+
There are two ways to use Microphysics: standalone for simple investigations
58+
or as part of an (AMReX-based) application code. In both cases, the core
59+
requirement is to select a network---this defines the composition that
60+
is then used by most of the other physics routines.
61+
62+
A key design feature is the separation of the reaction network from
63+
the integrator. This allows us to easily experiment with different
64+
integration methods (such as the RKC integrator) and also support
65+
different modes of coupling reactions to a simulation code (operator
66+
splitting and spectral deferred corrections)
67+
68+
We rely on header-only implementations as much as possible, to allow
69+
for easier compiler inlining. We also leverage C++17 `if constexpr`
70+
templating to compile out unnecessary computations for performance.
71+
For example, our equations of state can compute a lot of thermodynamic
72+
quantities and derivatives, but for some operations, we only need a
73+
few of these. If we pass the general `eos_t` type into the EOS, then
74+
everything is calculated, but if we pass in to the same interface the
75+
smaller `eos_re_t` type, then only a few energy terms are computed
76+
(those that are needed when finding temperature from specific internal
77+
energy).
4778

48-
C++17
4979

5080
pynucastro integration
5181

@@ -54,8 +84,20 @@ pynucastro integration
5484

5585

5686

87+
5788
# Unit tests / examples
5889

90+
Microphysics can be used as a standalone tool through the tests
91+
in `Microphysics/unit_test/`. There are 2 types of tests here:
92+
93+
* *comprehensive tests* test performance by setting up a cube of data
94+
(with density, temperature, and composition varying in a dimension)
95+
and performing an operation on the entire cube (calling the EOS,
96+
integrating a network, ...).
97+
98+
* *one-zone tests* simply call one of the physics modules with a
99+
single thermodynamic state. This can be used to explore the physics
100+
that is implemented.
59101

60102
# References
61103

0 commit comments

Comments
 (0)