Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions joss/paper.bib
Original file line number Diff line number Diff line change
Expand Up @@ -212,3 +212,34 @@ @book{press_numerical_1992
publisher = {Cambridge University Press},
address = {Cambridge, UK ; New York}
}

@article{barnes_understanding_2019,
title = {Understanding {{Heating}} in {{Active Region Cores}} through {{Machine Learning}}. {{I}}. {{Numerical Modeling}} and {{Predicted Observables}}},
author = {Barnes, W. T. and Bradshaw, S. J. and Viall, N. M.},
year = 2019,
month = jul,
journal = {The Astrophysical Journal},
volume = {880},
number = {1},
pages = {56},
doi = {10.3847/1538-4357/ab290c},
url = {https://ui.adsabs.harvard.edu/abs/2019ApJ...880...56B/abstract},
urldate = {2019-08-06},
copyright = {All rights reserved},
langid = {english}
}

@article{marsh_hard_2018,
title = {Hard {{X-Ray Constraints}} on {{Small-scale Coronal Heating Events}}},
author = {Marsh, Andrew J. and Smith, David M. and Glesener, Lindsay and Klimchuk, James A. and Bradshaw, Stephen J. and Vievering, Juliana and Hannah, Iain G. and Christe, Steven and Ishikawa, Shin-nosuke and Krucker, S{\"a}m},
year = 2018,
month = sep,
journal = {The Astrophysical Journal},
volume = {864},
number = {1},
pages = {5},
doi = {10.3847/1538-4357/aad380},
url = {https://ui.adsabs.harvard.edu/#abs/2018ApJ...864....5M/abstract},
urldate = {2018-09-27},
langid = {english}
}
64 changes: 42 additions & 22 deletions joss/paper.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ affiliations:
index: 8
- name: Department of Physics and Astronomy, Rice University, Houston, TX 77005, USA
index: 9
date: 18 October 2025
date: 12 February 2026
bibliography: paper.bib
---

Expand All @@ -64,8 +64,7 @@ As such, the explicit dependence on the magnetic field can be neglected and the
However, the large range of spatial and temporal scales necessary to resolve this system, in particular the severe time step limitations imposed by thermal conduction, mean that even field-aligned models are computationally expensive enough to make large parameter explorations prohibitive.
The enthalpy-based thermal evolution of loops (EBTEL) model [@klimchuk_highly_2008;@cargill_enthalpy-based_2012] was originally developed in order to provide a simple and efficient way to study the coronal plasma response to time-dependent plasma heating.
EBTEL accomplishes this by computing spatial integrals of the aforementioned field-aligned hydrodynamic equations.
Comparisons to spatially-averaged results from field-aligned hydrodynamic models show very good agreement [@cargill_enthalpy-based_2012].
Because of its relative simplicity and computational efficiency, EBTEL has been widely used since its initial development [e.g. @qiu_heating_2012;@ugarte-urra_determining_2014] with @klimchuk_highly_2008 and @cargill_enthalpy-based_2012 having nearly 400 citations combined according to the Astrophysics Data System.
The `ebtelplusplus` software package is a Python and C++ implementation of the EBTEL model and includes effects due to cross-sectional coronal loop expansion, electron-ion coupling, and variable elemental abundances.

# Statement of Need

Expand All @@ -75,12 +74,11 @@ EBTEL equates an enthalpy flux with an imbalance between the heat flux out of th
If TR radiation cannot balance the downward heat flux, this drives an upflow of material into the corona and if the TR is radiating away more energy than the coronal heat flux can supply this drives a downflow.
This approximation is valid for bulk velocities below the local sound speed [@klimchuk_highly_2008].

The original software implementation of the EBTEL model of @klimchuk_highly_2008 was in the proprietary Interactive Data Language (IDL).
The EBTEL model was originally developed by @klimchuk_highly_2008.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My only comment is that I think (if space allows) it is worth mentioning that the original is in IDL. Being open-source (both language and model) is an excellent improvement that allows students and non-experts to pick it up and use it readily.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree. I've just moved that discussion to the "Software Design" section. There is also some discussion of it in the "State of the Field" section.

Subsequent improvements to the gravitational stratification and radiative losses by @cargill_enthalpy-based_2012 gave better agreement with field-aligned hydrodynamic models[^ebtel2].
@barnes_inference_2016 modified the EBTEL model to relax the single-fluid assumption and treat electrons and ions separately, allowing for differential heating between the two species and implemented these modifications in C++.
@barnes_inference_2016 modified the EBTEL model to relax the single-fluid assumption and treat electrons and ions separately, allowing for differential heating between the two species.
@cargill_static_2021 later extended EBTEL to include effects due to cross-sectional area expansion and @reep_modeling_2024 added the ability to vary the abundance model for the radiative losses as a function of time.

`ebtelplusplus` unifies all of the aforementioned features into a single set of equations and C++ and Python software implementation.
`ebtelplusplus` unifies all of the aforementioned features into a single set of equations.
In particular, `ebtelplusplus` solves the following equations for the spatially-averaged electron pressure ($p_e$), ion pressure ($p_i$), and number density ($n$) of a semi-circular coronal loop of half-length $L$,

\begin{eqnarray*}
Expand All @@ -91,31 +89,24 @@ In particular, `ebtelplusplus` solves the following equations for the spatially-

where $Q_{e,i}$ are the user-specified heating terms for the electrons and ions, $\psi_{c,TR}$ denote integrals of the electron-ion coupling terms over the TR and corona, respectively, $A_{c,TR,0}$ are the cross-sectional area averaged over the corona and TR and at the TR/corona boundary, respectively, $R_c$ is the energy lost to radiation in the corona, $c_1$ is the ratio of energy lost to radiation in the TR and corona, $\xi=T_e/T_i$ is the ratio between the electron and ion temperatures, $F_{e,0;i,0}$ are the conductive heat fluxes at the TR/corona boundary for the electrons and ions, $L_{c,TR}$ are the lengths of the corona and TR such that $L=L_c+L_{TR}$, and $L_*=L_c + (A_{TR}/A_c)L_{TR}$.
The remaining terms are fixed constants.

This set of equations is closed by an ideal gas law for the electrons and ions: $p_e=k_BnT_e,p_i=k_BnT_i$ and $n_e=n_i=n$ due to the assumption of a fully-ionized hydrogen plasma.
These equations and their derivations are explained more fully in the aforementioned publications and the [`ebtelplusplus` documentation](https://ebtelplusplus.readthedocs.io/en/stable/topic_guides/derivation.html).

`ebtelplusplus` solves the above equations using a Runge-Kutta Cash-Karp integration method [see section 16.2 of @press_numerical_1992] and an (optional) adaptive time-stepping scheme to ensure the principal physical timescales are resolved at each phase of the loop evolution[^boost].
Where appropriate, all inputs and outputs are expressed as `astropy.units.Quantity` objects [@astropy_collaboration_astropy_2022].
Additionally, `ebtelplusplus` is very fast (a single run modeling $10^4$ seconds of simulation time takes only a few milliseconds) and nearly two orders of magnitude faster than the previous IDL implementation because it is implemented in C++ and due to its use of an adaptive time-stepping scheme.
\autoref{fig:figure1} shows example output from `ebtelplusplus` with different model parameters for the same time-dependent heating function.

`ebtelplusplus` is implemented in C++ for computational efficiency and is wrapped in Python using `pybind11` [@wenzel_jakob_2025_16929811] to enable easier installation and a user-friendly API.
Precompiled binary wheels are built using [`cibuildwheel`](https://cibuildwheel.pypa.io/en/stable/) run on GitHub Actions[^oatemplates] and distributed via [PyPI](https://pypi.org/project/ebtelplusplus/) at every release.
These wheels are provided for all major operating systems and the versions of Python recommended by SPEC 0[^spec0].
This alleviates the need for a user to compile the C++ code locally.
`ebtelplusplus` is openly-developed on [GitHub](https://github.com/rice-solar-physics/ebtelplusplus).
Documentation, including an example gallery and a guide to contributing to the package, is hosted online on [Read the Docs](https://ebtelplusplus.readthedocs.io).
`ebtelplusplus` also includes a comprehensive test suite built on the [`pytest` testing framework](https://docs.pytest.org/) that is run on GitHub Actions at each check-in.
Test coverage is assessed using [Codecov](https://about.codecov.io/).

![Temperature (top right), density (bottom left), and temperature-density phase space (bottom right) of a coronal loop with half-length $L=40$ Mm for five different cases with the same heating input (top left panel). In the nominal case (blue), the electron and ion populations are kept in equilibrium, the cross-sectional area of the loop is constant, and the radiative losses are determined by a power-law function. If the electrons (solid) and ions (dashed) are allowed to evolve separately, heating only the electrons (orange) causes the ions to take about 250 s to fully equilibrate with the electrons while heating only the ions (green) causes the ions to become over three times hotter than the electrons due to the relative inefficiency of ion thermal conduction. Incorporating area expansion through the corona (red) leads to a higher peak temperature and a more delayed peak in the density while calculating the radiative losses using a time-varying abundance (purple) leads to a slightly higher peak density.\label{fig:figure1}](figure.pdf)

# Other Implementations
# State of the Field

The aforementioned IDL implementation, which includes features described in @cargill_enthalpy-based_2012 and @cargill_static_2021, is referred to as [`EBTEL-IDL`](https://github.com/rice-solar-physics/EBTEL) [@cargill_2024_13351770].
There are currently three separate implementations of the EBTEL model.
The original software implementation of the EBTEL model was in the proprietary Interactive Data Language (IDL).
This implementation, which includes features described in @cargill_enthalpy-based_2012 and @cargill_static_2021, is referred to as [`EBTEL-IDL`](https://github.com/rice-solar-physics/EBTEL) [@cargill_2024_13351770].
Comparisons between `EBTEL-IDL` and spatially-averaged results from field-aligned hydrodynamic models show very good agreement [@cargill_enthalpy-based_2012].
@rajhans_flows_2022 relaxed the assumption of subsonic flows in EBTEL such that the Mach numbers and velocities produced are in better agreement with field-aligned hydrodynamic simulations for some heating scenarios.
The IDL software implementation of this model is referred to as `EBTEL3-IDL`.
As such, there are currently three separate though slightly different implementations of the EBTEL model.
The initial C++ implementation of `ebtelplusplus` was developed by @barnes_inference_2016 with modifications later made by @reep_modeling_2024 and the Python interface added later.
This is the software implementation described in this paper.
The table below summarizes the features included in each implementation.

| Feature | Citation | `EBTEL-IDL` | `EBTEL3-IDL` | `ebtelplusplus` |
Expand All @@ -126,6 +117,35 @@ The table below summarizes the features included in each implementation.
| Supersonic flows | @rajhans_flows_2022 | no | yes | no |
| Time-variable abundances | @reep_modeling_2024 | no | no | yes |

# Software Design

The design of the `ebtelplusplus` software is motivated by two primary needs: 1. computational efficiency and 2. a high-level, intuitive interface.
Both are essential for exploratory analysis of time-dependent heating of the coronal plasma, including large-scale parameter explorations.
`ebtelplusplus` is implemented in C++ for computational efficiency and is wrapped in Python using `pybind11` [@wenzel_jakob_2025_16929811] to enable easier installation and a user-friendly API.
As a result, `ebtelplusplus` is very fast (a single run modeling $10^4$ seconds of simulation time takes only a few milliseconds) and nearly two orders of magnitude faster than previous IDL implementations.
Where appropriate, all inputs and outputs are expressed as `astropy.units.Quantity` objects [@astropy_collaboration_astropy_2022] to maximize flexibility and avoid ambiguity.
As an example, two of the primary inputs for configuring an `ebtelplusplus` simulation are the total simulation time and the loop length.
These inputs can be expressed in any units provided they can be converted to seconds and centimeters, respectively.
High-level Python objects are provided for configuring additional inputs, including the time-dependent heating, and include default values to avoid overly-verbose input configurations.

To make the installation process easier for users, precompiled binary wheels are built using [`cibuildwheel`](https://cibuildwheel.pypa.io/en/stable/) run on GitHub Actions[^oatemplates] and distributed via [PyPI](https://pypi.org/project/ebtelplusplus/) at every release.
These wheels are provided for all major operating systems and the versions of Python recommended by SPEC 0[^spec0].
This alleviates the need to compile the C++ code locally and allows new users to start using the software more quickly.
`ebtelplusplus` is openly-developed on [GitHub](https://github.com/rice-solar-physics/ebtelplusplus).
Documentation, including an example gallery and a guide to contributing to the package, is hosted online on [Read the Docs](https://ebtelplusplus.readthedocs.io).
`ebtelplusplus` also includes a comprehensive test suite built on the [`pytest` testing framework](https://docs.pytest.org/) that is run on GitHub Actions at each check-in.
Test coverage is assessed using [Codecov](https://about.codecov.io/).

# Research Impact Statement

Because of its relative simplicity and computational efficiency, EBTEL has been widely used since its initial development [e.g. @qiu_heating_2012;@ugarte-urra_determining_2014] with @klimchuk_highly_2008 and @cargill_enthalpy-based_2012 having nearly 400 citations combined according to the Astrophysics Data System (ADS).
@barnes_inference_2016, which describes the original implementation of the `ebtelplusplus` model, has over 50 citations per ADS.
In particular, `ebtelplusplus` has been used to model thousands of impulsively-heated loops in coronal active regions [@barnes_understanding_2019] and constrain properties of microflares via comparisons with hard x-ray observations [@marsh_hard_2018].

# AI Usage Disclosure

No generative AI tools were used in the development of this software, the writing of this manuscript, or the preparation of supporting materials.

# References

[^stellar]: This also applies to the coronae of F, G, K, and M dwarf stars.
Expand Down
Loading