wind_ae 2.0.0__tar.gz → 2.0.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {wind_ae-2.0.0/wind_ae.egg-info → wind_ae-2.0.2}/PKG-INFO +8 -8
- {wind_ae-2.0.0 → wind_ae-2.0.2}/README.md +7 -7
- {wind_ae-2.0.0 → wind_ae-2.0.2}/docs/conf.py +3 -2
- {wind_ae-2.0.0 → wind_ae-2.0.2}/pyproject.toml +1 -1
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/setup.py +1 -1
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/wrapper/relax_wrapper.py +14 -13
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/wrapper/wrapper_utils/plots.py +7 -3
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/wrapper/wrapper_utils/windsoln.py +28 -18
- {wind_ae-2.0.0 → wind_ae-2.0.2/wind_ae.egg-info}/PKG-INFO +8 -8
- {wind_ae-2.0.0 → wind_ae-2.0.2}/LICENSE +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/MANIFEST.in +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/setup.cfg +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/tests/__init__.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/tests/test_bcs.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/tests/test_load_planet.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/tests/test_metals.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/tests/test_misc.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/tests/test_physics.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/tests/test_polish_bcs.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/tests/test_ramp_to.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/tests/test_run_wind.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/tests/test_spectrum.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/tests/test_system.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/tests/test_windsoln.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/__init__.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/atoms/Lodders.dat +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/atoms/Verner.csv +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/atoms/__init__.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/atoms/atomic_masses.csv +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/atoms/atomic_species.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/atoms/atomic_table.txt +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/atoms/solarZ_mass_fracs.csv +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/planets/Ballistic.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/planets/__init__.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/planets/atmosphere.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/planets/insolation/euv.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/planets/insolation/glq_rates.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/planets/insolation/glq_spectrum.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/planets/insolation/stellar_euv.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/radiation/__init__.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/radiation/image_plane.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/radiation/imaging.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/radiation/lines/CII_1.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/radiation/lines/chiantiline.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/radiation/lines/lyman_alpha.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/radiation/radiative_transfer.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/radiation/ray_generators/relax_ray.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/radiation/ray_generators/yt_ray.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/radiation/ray_trace.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/radiation/rtw.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/__init__.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/classification/mass_classification.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/relations/colour_relation.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/relations/colour_relation_models/Mamajek2008.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/relations/mass_relation.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/relations/mass_relation_models/Eker2018.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/relations/temperature_relation.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/relations/temperature_relation_models/Ballesteros2012.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/relations/temperature_relation_models/Sung2013.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/spectrum/black_body.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/spectrum/high_energy.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/spectrum/high_energy_models/Chadney2015.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/spectrum/high_energy_models/Jackson2012.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/spectrum/high_energy_models/Linsky2014.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/spectrum/high_energy_models/SanzForcada2011.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/spectrum/high_energy_models/Tu2015.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/spectrum/high_energy_models/Wright2018.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/spectrum/lisird.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/spectrum/phoenix.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/winds/isentropic.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/winds/polytropic.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/utils/__init__.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/utils/constants.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/utils/data_download.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/utils/fetch_core_data.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/utils/timedate.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/__init__.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/bin/relaxed_ae +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/inputs/add_params.inp +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/inputs/bcs.inp +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/inputs/goal_spectrum.inp +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/inputs/guess.inp +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/inputs/phys_params.inp +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/inputs/planet_params.inp +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/inputs/spectrum.inp +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/inputs/tech_params.inp +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/inputs/term_ind.inp +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/saves/temp.csv +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/saves/test.csv +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/saves/test_easy_output.csv +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/saves/test_save.csv +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/saves/windsoln.csv +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/src/Makefile +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/src/defs-master.h +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/src/defs.h +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/src/difeq.c +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/src/globals.h +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/src/glq_rates.c +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/src/intode.c +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/src/io.c +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/src/ion_pots.h +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/src/line_cooling_coeffs.h +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/src/main.c +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/src/prototypes.h +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/src/rate_coeffs.h +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/src/recombo_vars.h +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/src/relax.c +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/src/soe.c +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/src/utils.c +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/src/wind.h +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/wrapper/__init__.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/wrapper/wrapper_utils/__init__.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/wrapper/wrapper_utils/atmosphere.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/wrapper/wrapper_utils/constants.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/wrapper/wrapper_utils/constants_compare.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/wrapper/wrapper_utils/dere_table29.dat +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/wrapper/wrapper_utils/inputs.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/wrapper/wrapper_utils/ion_pots.dat +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/wrapper/wrapper_utils/line_cooling_coeffs.dat +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/wrapper/wrapper_utils/metals.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/wrapper/wrapper_utils/observations.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/wrapper/wrapper_utils/physics.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/wrapper/wrapper_utils/recombo_vars.dat +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/wrapper/wrapper_utils/spectrum.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/wrapper/wrapper_utils/system.py +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae.egg-info/SOURCES.txt +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae.egg-info/dependency_links.txt +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae.egg-info/requires.txt +0 -0
- {wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wind_ae
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.2
|
|
4
4
|
Summary: 1D relaxation Parker wind model with metal and X-ray physics based on Murray-Clay et al. (2009)
|
|
5
5
|
Author: Madelyn Broome, John McCann, Ruth Murray-Clay
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -35,7 +35,7 @@ I <img src="docs/windae_logo_blue_light.png" alt="Wind-AE Logo" width="350"/>
|
|
|
35
35
|
`Wind-AE` updates [Murray-Clay et al. (2009)](https://ui.adsabs.harvard.edu/abs/2009ApJ...693...23M/abstract) to allow for the modeling of atomic metals and multifrequency XUV stellar spectra (Broome et al. 2025). If you use `Wind-AE`, please cite [Broome et al. (2025)](https://ui.adsabs.harvard.edu/abs/2025ApJ...995..198B/abstract).
|
|
36
36
|
|
|
37
37
|
|
|
38
|
-
Take advantage of `Notebooks/Quickstart.ipynb` to get a quick orientation to `Wind-AE` and please report any bugs via [Github](https://github.com/
|
|
38
|
+
Take advantage of `Notebooks/Quickstart.ipynb` to get a quick orientation to `Wind-AE` and please report any bugs via [Github](https://github.com/mibroome/wind-ae/issues) or via email to broome.astro@gmail.com.
|
|
39
39
|
|
|
40
40
|

|
|
41
41
|
[](https://coveralls.io/github/mibroome/wind-ae?branch=main)
|
|
@@ -53,7 +53,7 @@ Take advantage of `Notebooks/Quickstart.ipynb` to get a quick orientation to `Wi
|
|
|
53
53
|
|
|
54
54
|
Is Wind-AE the right tool for me?
|
|
55
55
|
----------------------
|
|
56
|
-
`Wind-AE` is well-suited for users interested in **quickly estimating mass loss rates** or outflow structure. Outflow structure includes bulk temperature and per-species ionization fractions as a function of radius, so can be easily translated into approximating and **predicting observables and transits**, including metastable helium (He 10830
|
|
56
|
+
`Wind-AE` is well-suited for users interested in **quickly estimating mass loss rates** or outflow structure. Outflow structure includes bulk temperature and per-species ionization fractions as a function of radius, so can be easily translated into approximating and **predicting observables and transits**, including metastable helium (He 10830 Å) transits, though a He transit module is not yet included. Precise modeling of lower atmosphere (< ~100 $\mu$bar) is considered necessary for highly accurate transit models, but Wind-AE can be easily coupled to lower atmosphere photochemistry models whose outputs can (e.g., radius, temperature, abundances, ionization fractions, etc. at 1 $\mu$bar) can be fed into Wind-AE as inputs.
|
|
57
57
|
|
|
58
58
|
>*If you are interested in outflow structure:* Past the Coriolis turning radius (a few planetary radii) 3D physics dominates, so `Wind-AE` does not integrate past that point. `Wind-AE` also makes simplifying assumptions about the region below the region below the wind-launch radius (~10 nanobars).
|
|
59
59
|
|
|
@@ -64,11 +64,11 @@ Because `Wind-AE` runs on the order of seconds to minutes, it can be (and has be
|
|
|
64
64
|
- Multiple ionization states of the same species (e.g., simultaneously tracking C I and C II as a linked ionization chain)
|
|
65
65
|
- X-ray physics (secondary ionizations and K-shell ionization cross-sections for relevant metals)
|
|
66
66
|
- Both low and high stellar XUV flux
|
|
67
|
-
- **Heating & Cooling**: Ionization heating, bolometric heating & cooling (negligible in wind), PdV cooling (work done due to expansion of gas), radiative / atomic line cooling (Lyman
|
|
67
|
+
- **Heating & Cooling**: Ionization heating, bolometric heating & cooling (negligible in wind), PdV cooling (work done due to expansion of gas), radiative / atomic line cooling (Lyman-alpha; O, C, Fe, Mg, Ca, and Ne lines), recombination cooling, free-free (bremsstrahlung) cooling, and, optionally, self-consistent conductive cooling (see note below)
|
|
68
68
|
#### `Wind-AE` does not (currently) include:
|
|
69
69
|
- **Magnetic fields**
|
|
70
70
|
- **Time dependence**
|
|
71
|
-
- **
|
|
71
|
+
- **Fractionation/diffusion/drag** - the atomic species set by the user are assumed to be entrained in the outflow and in thermal equilibrium. This is an appropriate assumption for species below the [crossover mass](https://ui.adsabs.harvard.edu/abs/1987Icar...69..532H) and a warning will be raised.
|
|
72
72
|
- **Heating & Cooling**: H3+ line cooling (not planned)
|
|
73
73
|
|
|
74
74
|
> **Note (v2.0+):** Conductive, recombination, and free-free cooling are each independently toggleable via flags. Turning on conduction (`sim.turn_on_conduction()`) introduces numerically stiff ODEs and should only be done after all other ramping is complete. The temperature dependence of free-free and recombination cooling can make ramping to higher metallicities numerically unstable — if so, try ramping with them off and turning them back on afterwards.
|
|
@@ -85,7 +85,7 @@ See [Broome et al. (2025)](https://ui.adsabs.harvard.edu/abs/2025ApJ...995..198B
|
|
|
85
85
|
- Just want a grid of mass loss rates for pure-Hydrogen, low-flux-EUV-irradiated planets? See [Kubyshkina & Fossati](https://ui.adsabs.harvard.edu/abs/2021RNAAS...5...74K/abstract)
|
|
86
86
|
- Want a grid of mass loss rates for pure-Hydrogen, high-flux-XUV-irradiated planets? See [Owen & Jackson (2012)](https://ui.adsabs.harvard.edu/abs/2012MNRAS.425.2931O/abstract)
|
|
87
87
|
|
|
88
|
-
>Want your model added to this list or to update the short bio? Email
|
|
88
|
+
>Want your model added to this list or to update the short bio? Email broome.astro@gmail.com
|
|
89
89
|
|
|
90
90
|
Requirements
|
|
91
91
|
------------
|
|
@@ -199,8 +199,8 @@ sim.ramp_molecular_erfc(v_drop=erf_loc, rate=erf_rate)
|
|
|
199
199
|
- **(v2.0)** Ramping to high metallicity with recombination and/or free-free cooling on can be numerically unstable in some cases — see the cooling-flags note above.
|
|
200
200
|
|
|
201
201
|
--------
|
|
202
|
-
### Check out the [open issues](https://github.com/
|
|
202
|
+
### Check out the [open issues](https://github.com/mibroome/wind-ae/issues).
|
|
203
203
|
|
|
204
204
|
--------
|
|
205
205
|
## AI Use Statement
|
|
206
|
-
|
|
206
|
+
Claude web (primarily model Sonnet 5.0) was used in `Wind-AE`'s v2.0 development to assist with refactoring `Wind-AE` for runtime improvements, with the implementation of the conductive cooling scheme in the code, and updating the docs for v2.0 release. All scientific content, methodology, and interpretations are the authors' own. The authors have reviewed and verified all code, outputs, and text, and take full responsibility for the integrity and accuracy of the work.
|
|
@@ -8,7 +8,7 @@ I <img src="docs/windae_logo_blue_light.png" alt="Wind-AE Logo" width="350"/>
|
|
|
8
8
|
`Wind-AE` updates [Murray-Clay et al. (2009)](https://ui.adsabs.harvard.edu/abs/2009ApJ...693...23M/abstract) to allow for the modeling of atomic metals and multifrequency XUV stellar spectra (Broome et al. 2025). If you use `Wind-AE`, please cite [Broome et al. (2025)](https://ui.adsabs.harvard.edu/abs/2025ApJ...995..198B/abstract).
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
Take advantage of `Notebooks/Quickstart.ipynb` to get a quick orientation to `Wind-AE` and please report any bugs via [Github](https://github.com/
|
|
11
|
+
Take advantage of `Notebooks/Quickstart.ipynb` to get a quick orientation to `Wind-AE` and please report any bugs via [Github](https://github.com/mibroome/wind-ae/issues) or via email to broome.astro@gmail.com.
|
|
12
12
|
|
|
13
13
|

|
|
14
14
|
[](https://coveralls.io/github/mibroome/wind-ae?branch=main)
|
|
@@ -26,7 +26,7 @@ Take advantage of `Notebooks/Quickstart.ipynb` to get a quick orientation to `Wi
|
|
|
26
26
|
|
|
27
27
|
Is Wind-AE the right tool for me?
|
|
28
28
|
----------------------
|
|
29
|
-
`Wind-AE` is well-suited for users interested in **quickly estimating mass loss rates** or outflow structure. Outflow structure includes bulk temperature and per-species ionization fractions as a function of radius, so can be easily translated into approximating and **predicting observables and transits**, including metastable helium (He 10830
|
|
29
|
+
`Wind-AE` is well-suited for users interested in **quickly estimating mass loss rates** or outflow structure. Outflow structure includes bulk temperature and per-species ionization fractions as a function of radius, so can be easily translated into approximating and **predicting observables and transits**, including metastable helium (He 10830 Å) transits, though a He transit module is not yet included. Precise modeling of lower atmosphere (< ~100 $\mu$bar) is considered necessary for highly accurate transit models, but Wind-AE can be easily coupled to lower atmosphere photochemistry models whose outputs can (e.g., radius, temperature, abundances, ionization fractions, etc. at 1 $\mu$bar) can be fed into Wind-AE as inputs.
|
|
30
30
|
|
|
31
31
|
>*If you are interested in outflow structure:* Past the Coriolis turning radius (a few planetary radii) 3D physics dominates, so `Wind-AE` does not integrate past that point. `Wind-AE` also makes simplifying assumptions about the region below the region below the wind-launch radius (~10 nanobars).
|
|
32
32
|
|
|
@@ -37,11 +37,11 @@ Because `Wind-AE` runs on the order of seconds to minutes, it can be (and has be
|
|
|
37
37
|
- Multiple ionization states of the same species (e.g., simultaneously tracking C I and C II as a linked ionization chain)
|
|
38
38
|
- X-ray physics (secondary ionizations and K-shell ionization cross-sections for relevant metals)
|
|
39
39
|
- Both low and high stellar XUV flux
|
|
40
|
-
- **Heating & Cooling**: Ionization heating, bolometric heating & cooling (negligible in wind), PdV cooling (work done due to expansion of gas), radiative / atomic line cooling (Lyman
|
|
40
|
+
- **Heating & Cooling**: Ionization heating, bolometric heating & cooling (negligible in wind), PdV cooling (work done due to expansion of gas), radiative / atomic line cooling (Lyman-alpha; O, C, Fe, Mg, Ca, and Ne lines), recombination cooling, free-free (bremsstrahlung) cooling, and, optionally, self-consistent conductive cooling (see note below)
|
|
41
41
|
#### `Wind-AE` does not (currently) include:
|
|
42
42
|
- **Magnetic fields**
|
|
43
43
|
- **Time dependence**
|
|
44
|
-
- **
|
|
44
|
+
- **Fractionation/diffusion/drag** - the atomic species set by the user are assumed to be entrained in the outflow and in thermal equilibrium. This is an appropriate assumption for species below the [crossover mass](https://ui.adsabs.harvard.edu/abs/1987Icar...69..532H) and a warning will be raised.
|
|
45
45
|
- **Heating & Cooling**: H3+ line cooling (not planned)
|
|
46
46
|
|
|
47
47
|
> **Note (v2.0+):** Conductive, recombination, and free-free cooling are each independently toggleable via flags. Turning on conduction (`sim.turn_on_conduction()`) introduces numerically stiff ODEs and should only be done after all other ramping is complete. The temperature dependence of free-free and recombination cooling can make ramping to higher metallicities numerically unstable — if so, try ramping with them off and turning them back on afterwards.
|
|
@@ -58,7 +58,7 @@ See [Broome et al. (2025)](https://ui.adsabs.harvard.edu/abs/2025ApJ...995..198B
|
|
|
58
58
|
- Just want a grid of mass loss rates for pure-Hydrogen, low-flux-EUV-irradiated planets? See [Kubyshkina & Fossati](https://ui.adsabs.harvard.edu/abs/2021RNAAS...5...74K/abstract)
|
|
59
59
|
- Want a grid of mass loss rates for pure-Hydrogen, high-flux-XUV-irradiated planets? See [Owen & Jackson (2012)](https://ui.adsabs.harvard.edu/abs/2012MNRAS.425.2931O/abstract)
|
|
60
60
|
|
|
61
|
-
>Want your model added to this list or to update the short bio? Email
|
|
61
|
+
>Want your model added to this list or to update the short bio? Email broome.astro@gmail.com
|
|
62
62
|
|
|
63
63
|
Requirements
|
|
64
64
|
------------
|
|
@@ -172,8 +172,8 @@ sim.ramp_molecular_erfc(v_drop=erf_loc, rate=erf_rate)
|
|
|
172
172
|
- **(v2.0)** Ramping to high metallicity with recombination and/or free-free cooling on can be numerically unstable in some cases — see the cooling-flags note above.
|
|
173
173
|
|
|
174
174
|
--------
|
|
175
|
-
### Check out the [open issues](https://github.com/
|
|
175
|
+
### Check out the [open issues](https://github.com/mibroome/wind-ae/issues).
|
|
176
176
|
|
|
177
177
|
--------
|
|
178
178
|
## AI Use Statement
|
|
179
|
-
|
|
179
|
+
Claude web (primarily model Sonnet 5.0) was used in `Wind-AE`'s v2.0 development to assist with refactoring `Wind-AE` for runtime improvements, with the implementation of the conductive cooling scheme in the code, and updating the docs for v2.0 release. All scientific content, methodology, and interpretations are the authors' own. The authors have reviewed and verified all code, outputs, and text, and take full responsibility for the integrity and accuracy of the work.
|
|
@@ -35,5 +35,6 @@ exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
|
|
|
35
35
|
|
|
36
36
|
html_theme = 'sphinx_rtd_theme'
|
|
37
37
|
html_static_path = ['_static']
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
html_css_files = ['custom.css',]
|
|
39
|
+
html_logo = 'windae_logo_blue_light.png'
|
|
40
|
+
html_favicon = 'windae_logo_blue_favicon_48x48.png'
|
|
@@ -13,7 +13,7 @@ setup(
|
|
|
13
13
|
name="wind_ae",
|
|
14
14
|
version="1.0",
|
|
15
15
|
author='Madelyn Broome',
|
|
16
|
-
author_email='
|
|
16
|
+
author_email='broome.astro@gmail.com',
|
|
17
17
|
description="1D relaxation Parker wind model based on Murray-Clay et al. (2009)",
|
|
18
18
|
install_requires=[line.strip() for line in
|
|
19
19
|
open('requirements.txt', 'r').readlines()],
|
|
@@ -485,7 +485,7 @@ class wind_simulation:
|
|
|
485
485
|
sub = Popen(self.path+'bin/relaxed_ae',cwd=self.workdir, stdout=PIPE, stderr=PIPE,bufsize=1, universal_newlines=True)
|
|
486
486
|
output, error_output = sub.communicate()
|
|
487
487
|
if error_output:
|
|
488
|
-
if verbose:
|
|
488
|
+
if verbose is True:
|
|
489
489
|
print(output)
|
|
490
490
|
print(error_output)
|
|
491
491
|
if error_output[0:55] == 'Numerical Recipes run-time error...\nstep size underflow':
|
|
@@ -573,7 +573,7 @@ class wind_simulation:
|
|
|
573
573
|
return self.run_wind(expedite,calc_postfacto,verbose)
|
|
574
574
|
|
|
575
575
|
def ramp_to(self, system=None, intermediate_converge_bcs=False, final_polish=False,
|
|
576
|
-
integrate_out=True, static_bcs=False, make_plot=False):
|
|
576
|
+
integrate_out=True, static_bcs=False, make_plot=False,verbose=False):
|
|
577
577
|
"""
|
|
578
578
|
Ramps the current wind solution to a new system. Wrapper for ramp_Ftot(), ramp_grav(), ramp_star().
|
|
579
579
|
|
|
@@ -611,7 +611,7 @@ class wind_simulation:
|
|
|
611
611
|
result = self.ramp_var("Ftot", system.value("Ftot"),
|
|
612
612
|
converge_bcs=intermediate_converge_bcs, make_plot=make_plot,
|
|
613
613
|
expedite=True,static_bcs=static_bcs,
|
|
614
|
-
integrate_out=False)
|
|
614
|
+
integrate_out=False,verbose=verbose)
|
|
615
615
|
fail = result
|
|
616
616
|
|
|
617
617
|
if (fail != 0) and (fail != 5):
|
|
@@ -620,7 +620,7 @@ class wind_simulation:
|
|
|
620
620
|
# Ramps Mp and Rp simultaneously, ~constant surface gravity
|
|
621
621
|
result = self.ramp_grav(system, converge_bcs=intermediate_converge_bcs,
|
|
622
622
|
make_plot=make_plot, expedite=True,static_bcs=static_bcs,
|
|
623
|
-
integrate_out=False)
|
|
623
|
+
integrate_out=False,verbose=verbose)
|
|
624
624
|
fail = result
|
|
625
625
|
|
|
626
626
|
if (fail != 0) and (fail != 5):
|
|
@@ -629,7 +629,7 @@ class wind_simulation:
|
|
|
629
629
|
# Ramps Mstar and semimajor simultaneously, ~constant Hill radius
|
|
630
630
|
result = self.ramp_star(system, converge_bcs=intermediate_converge_bcs,
|
|
631
631
|
make_plot=make_plot, expedite=True,static_bcs=static_bcs,
|
|
632
|
-
integrate_out=False)
|
|
632
|
+
integrate_out=False,verbose=verbose)
|
|
633
633
|
fail = result
|
|
634
634
|
|
|
635
635
|
if final_polish == True:
|
|
@@ -666,7 +666,7 @@ class wind_simulation:
|
|
|
666
666
|
|
|
667
667
|
def ramp_var(self, var, var_end, var_class=None, delta=0.02,
|
|
668
668
|
delta_additive=False, converge_bcs=False, make_plot=True,
|
|
669
|
-
expedite=False, integrate_out=True, static_bcs=False):
|
|
669
|
+
expedite=False, integrate_out=True, static_bcs=False,verbose=False):
|
|
670
670
|
"""
|
|
671
671
|
Ramps a variable in the system or physics class to a target value with adaptive stepsizes.
|
|
672
672
|
|
|
@@ -880,7 +880,7 @@ class wind_simulation:
|
|
|
880
880
|
self.inputs.write_flags(*expedite_flag_tuple,integrate_out) #user defined integrate out will override
|
|
881
881
|
if integrate_out == True:
|
|
882
882
|
self.inputs.write_flags(*self.windsoln.flags_tuple,integrate_out)
|
|
883
|
-
result = self.run_wind(verbose=
|
|
883
|
+
result = self.run_wind(verbose=verbose,calc_postfacto=False)
|
|
884
884
|
|
|
885
885
|
if result == 0:
|
|
886
886
|
if converge_bcs:
|
|
@@ -901,6 +901,7 @@ class wind_simulation:
|
|
|
901
901
|
|
|
902
902
|
|
|
903
903
|
def ramp_grav(self, system, delta=0.02, converge_bcs=False, make_plot=True,
|
|
904
|
+
verbose=False,
|
|
904
905
|
expedite=False, integrate_out=True, static_bcs=False):
|
|
905
906
|
"""
|
|
906
907
|
Ramps planet mass and radius along lines of constant surface gravity with adaptive stepsizes.
|
|
@@ -1140,7 +1141,7 @@ class wind_simulation:
|
|
|
1140
1141
|
expedite_flag_tuple[3] = self.windsoln.bolo_heat_cool
|
|
1141
1142
|
expedite_flag_tuple[0] = 1
|
|
1142
1143
|
self.inputs.write_flags(*expedite_flag_tuple,integrate_out) #user defined integrate out will override
|
|
1143
|
-
result = self.run_wind(verbose=
|
|
1144
|
+
result = self.run_wind(verbose=verbose,calc_postfacto=False)
|
|
1144
1145
|
|
|
1145
1146
|
if result == 0:
|
|
1146
1147
|
if converge_bcs:
|
|
@@ -1161,7 +1162,7 @@ class wind_simulation:
|
|
|
1161
1162
|
|
|
1162
1163
|
|
|
1163
1164
|
def ramp_star(self, system, delta=0.02, converge_bcs=True, make_plot=True,
|
|
1164
|
-
expedite=False, integrate_out=True, static_bcs=False):
|
|
1165
|
+
expedite=False, integrate_out=True, static_bcs=False,verbose=False):
|
|
1165
1166
|
"""
|
|
1166
1167
|
Ramps stellar mass (Mstar), semimajor axis (semimajor), and stellar bolometric luminosity (Lstar).
|
|
1167
1168
|
If Mstar and semimajor axis change, ramps linearly along Hill radius rate of change.
|
|
@@ -1403,7 +1404,7 @@ class wind_simulation:
|
|
|
1403
1404
|
return 1
|
|
1404
1405
|
# Write ramped variables to input file and try updating relaxation
|
|
1405
1406
|
self.inputs.write_planet_params(*temp.system_tuple())
|
|
1406
|
-
result = self.run_wind(expedite=True,verbose=
|
|
1407
|
+
result = self.run_wind(expedite=True,verbose=verbose,calc_postfacto=False)
|
|
1407
1408
|
fail=0
|
|
1408
1409
|
while result == 4:
|
|
1409
1410
|
fail+=1
|
|
@@ -3594,7 +3595,7 @@ class wind_simulation:
|
|
|
3594
3595
|
|
|
3595
3596
|
#Spectrum tools
|
|
3596
3597
|
def flux_norm(self,goal_flux_in_range,eV_range=[13.6,100],ramp=False,plot=True,
|
|
3597
|
-
integrate_out=True,converge_bcs=True):
|
|
3598
|
+
integrate_out=True,converge_bcs=True,verbose=False):
|
|
3598
3599
|
"""
|
|
3599
3600
|
Computes the total flux (across the loaded spectrum range) necessary to achieve the goal_flux_in_range in the eV_range identified. If ramp=True, also ramps the solution to that Ftot.
|
|
3600
3601
|
|
|
@@ -3619,7 +3620,7 @@ class wind_simulation:
|
|
|
3619
3620
|
if ramp == True:
|
|
3620
3621
|
if abs(goal_total_flux-self.windsoln.Ftot)/self.windsoln.Ftot > 0.01:
|
|
3621
3622
|
return self.ramp_var("Ftot",goal_total_flux,make_plot=plot,
|
|
3622
|
-
converge_bcs=converge_bcs,integrate_out=integrate_out)
|
|
3623
|
+
converge_bcs=converge_bcs,integrate_out=integrate_out,verbose=verbose)
|
|
3623
3624
|
else:
|
|
3624
3625
|
self._normal_print(" Flux ramping already done.")
|
|
3625
3626
|
return 0
|
|
@@ -3631,7 +3632,7 @@ class wind_simulation:
|
|
|
3631
3632
|
def ramp_spectrum(self,Fnorm=0.0,norm_spec_range=[],
|
|
3632
3633
|
goal_spec_range=[],units='eV',normalize=True,plot=False):
|
|
3633
3634
|
"""
|
|
3634
|
-
Ramps stellar spectrum wavelength/energy range to new wavelength/energy range. To change to a monofrequncy spectrum, e.g., at 20 eV, set goal_spec_range=[20] or [20,20] and kind='mono'. (Note: for numerical reason, a
|
|
3635
|
+
Ramps stellar spectrum wavelength/energy range to new wavelength/energy range. To change to a monofrequncy spectrum, e.g., at 20 eV, set goal_spec_range=[20] or [20,20] and kind='mono'. (Note: for numerical reason, a ``monofrequency`` spectrum is actually two wavelength bins with the same wavelength and the appropriately normalized wPhi_wl/Ftot.)
|
|
3635
3636
|
|
|
3636
3637
|
Args:
|
|
3637
3638
|
Fnorm (float, optional): Flux in ergs/s/cm2 AT SEMIMAJOR AXIS OF PLANET. If 0.0, flux is normalized to the current value in norm_spec_range. Otherwise, ramps to given Fnorm. Defaults to 0.0.
|
|
@@ -605,13 +605,17 @@ def energy_plot(windsoln, ax=None, alpha=1, plot_dom_lines=True, N_top_lines=2,
|
|
|
605
605
|
r = windsoln.soln_norm['r']
|
|
606
606
|
|
|
607
607
|
profiles = {}
|
|
608
|
-
for species in ['OI', 'OII', 'CI', 'CII', 'FeI', 'MgI','CaII',
|
|
608
|
+
for species in ['OI', 'OII', 'CI', 'CII', 'FeI','FeII', 'MgI','MgII','CaI','CaII','NeII','NeIII']:
|
|
609
609
|
if species in windsoln.species_list_unspaced:
|
|
610
610
|
species_spaced = McAtom.formatting_species_list([species])[0]
|
|
611
611
|
element_name, lowest_state = species_spaced.split()
|
|
612
612
|
highest_state = McAtom.arabic_to_roman(McAtom.roman_to_arabic(lowest_state) + 1)
|
|
613
|
-
|
|
614
|
-
|
|
613
|
+
lower_ion = element_name + lowest_state
|
|
614
|
+
higher_ion = element_name + highest_state
|
|
615
|
+
if lower_ion in coeff_table['Species'].values:
|
|
616
|
+
ion_name = lower_ion
|
|
617
|
+
else:
|
|
618
|
+
ion_name = higher_ion
|
|
615
619
|
lines = coeff_table.loc[coeff_table['Species'] == ion_name, 'Line'].astype(int).tolist()
|
|
616
620
|
for line_num in lines:
|
|
617
621
|
key = f'cool_{ion_name}_{line_num:.0f}A'
|
|
@@ -368,7 +368,7 @@ class wind_solution:
|
|
|
368
368
|
self.R_exo = np.nan
|
|
369
369
|
# Skip unnecessary calculations when users is expediting windsoln
|
|
370
370
|
if calc_postfacto:
|
|
371
|
-
self.add_user_vars(expedite = expedite_postfacto)
|
|
371
|
+
self.add_user_vars(expedite = expedite_postfacto, print_warnings=print_warnings)
|
|
372
372
|
|
|
373
373
|
|
|
374
374
|
def _rate_coeff_interpolater(self,species):
|
|
@@ -881,8 +881,12 @@ class wind_solution:
|
|
|
881
881
|
highest_state = McAtom.arabic_to_roman(
|
|
882
882
|
McAtom.roman_to_arabic(lowest_state) + 1
|
|
883
883
|
)
|
|
884
|
-
|
|
885
|
-
|
|
884
|
+
lower_ion = element_name + lowest_state
|
|
885
|
+
higher_ion = element_name + highest_state
|
|
886
|
+
if lower_ion in coeff_table['Species'].values:
|
|
887
|
+
ion_name = lower_ion
|
|
888
|
+
else:
|
|
889
|
+
ion_name = higher_ion
|
|
886
890
|
mask = (coeff_table['Species'] == ion_name)
|
|
887
891
|
line, A, T_line, nc = (
|
|
888
892
|
coeff_table[mask]["Line"],
|
|
@@ -892,6 +896,7 @@ class wind_solution:
|
|
|
892
896
|
)
|
|
893
897
|
nIONj = self.soln["n_"+ion_name]
|
|
894
898
|
for idx in range(len(A.T)):
|
|
899
|
+
# print(ion_name)
|
|
895
900
|
line_cool_cols[f'cool_{ion_name}_{line.iloc[idx]:.0f}A'] = (
|
|
896
901
|
-nIONj
|
|
897
902
|
* n_e
|
|
@@ -900,8 +905,9 @@ class wind_solution:
|
|
|
900
905
|
/ (n_e * (1 + nc.iloc[idx] / n_e))
|
|
901
906
|
)
|
|
902
907
|
|
|
903
|
-
for species in ['OI', 'OII', 'CI', 'CII', 'FeI', 'MgI', 'CaI', 'NeII']:
|
|
908
|
+
for species in ['OI', 'OII', 'CI', 'CII', 'FeI', 'FeII', 'MgI', 'MgII', 'CaI', 'CaII', 'NeII', 'NeIII']:
|
|
904
909
|
if species in self.species_list_unspaced:
|
|
910
|
+
# print(f"Computing line cooling for species: {species}")
|
|
905
911
|
compute_line_cool(species)
|
|
906
912
|
|
|
907
913
|
_assign_soln_cols(line_cool_cols)
|
|
@@ -1212,9 +1218,12 @@ class wind_solution:
|
|
|
1212
1218
|
def calc_mu(self):
|
|
1213
1219
|
'''Calculates mean molecular weight (mu in physical units, grams).
|
|
1214
1220
|
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1221
|
+
::
|
|
1222
|
+
|
|
1223
|
+
1/mu = sum_roots[mr_root * HX_root] (one atom per atom, roots only)
|
|
1224
|
+
+ n_e * m_H / rho (one entry per free electron)
|
|
1225
|
+
|
|
1226
|
+
Mirrors the refactored ``get_mu()`` in ``soe.c`` exactly.
|
|
1218
1227
|
'''
|
|
1219
1228
|
if (self.species_list[0]).replace(" ", "") != "HI":
|
|
1220
1229
|
if self.print_warnings is True:
|
|
@@ -1472,20 +1481,21 @@ class wind_solution:
|
|
|
1472
1481
|
|
|
1473
1482
|
|
|
1474
1483
|
def calc_R_exo(self, Kn="Kn_mx_HI"):
|
|
1475
|
-
'''Calculating exosphere radius in Rp and index.
|
|
1476
|
-
DEPRECATED, requires updated Knudsen number calculations for all species.
|
|
1477
|
-
|
|
1484
|
+
'''Calculating exosphere radius in Rp and index.
|
|
1485
|
+
DEPRECATED, requires updated Knudsen number calculations for all species.
|
|
1486
|
+
|
|
1478
1487
|
Args:
|
|
1479
|
-
Kn (str): Knudsen collision number for a given species.
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1488
|
+
Kn (str): Knudsen collision number for a given species.
|
|
1489
|
+
Default: "Kn_mx_HI", which is a weighted mix of hardbody and Coulomb
|
|
1490
|
+
Kn for HI. A Kn > 1 indicates that the flow is collisionless for
|
|
1491
|
+
that species and a fluid solution is no longer valid.
|
|
1483
1492
|
|
|
1484
1493
|
Returns:
|
|
1485
|
-
float: R_exo: exosphere radius in Rp.
|
|
1486
|
-
If Kn always < 1, then R_exo = NaN (R_exo is outside of the range
|
|
1487
|
-
|
|
1488
|
-
|
|
1494
|
+
float: R_exo: exosphere radius in Rp.
|
|
1495
|
+
If Kn always < 1, then R_exo = NaN (R_exo is outside of the range
|
|
1496
|
+
of the simulation).
|
|
1497
|
+
If R_exo > R_sp, then R_exo = Rmax.
|
|
1498
|
+
int: exo_index: index of exosphere radius in soln.
|
|
1489
1499
|
'''
|
|
1490
1500
|
try:
|
|
1491
1501
|
index = self.soln[self.soln[Kn] > 1].index[0]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wind_ae
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.2
|
|
4
4
|
Summary: 1D relaxation Parker wind model with metal and X-ray physics based on Murray-Clay et al. (2009)
|
|
5
5
|
Author: Madelyn Broome, John McCann, Ruth Murray-Clay
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -35,7 +35,7 @@ I <img src="docs/windae_logo_blue_light.png" alt="Wind-AE Logo" width="350"/>
|
|
|
35
35
|
`Wind-AE` updates [Murray-Clay et al. (2009)](https://ui.adsabs.harvard.edu/abs/2009ApJ...693...23M/abstract) to allow for the modeling of atomic metals and multifrequency XUV stellar spectra (Broome et al. 2025). If you use `Wind-AE`, please cite [Broome et al. (2025)](https://ui.adsabs.harvard.edu/abs/2025ApJ...995..198B/abstract).
|
|
36
36
|
|
|
37
37
|
|
|
38
|
-
Take advantage of `Notebooks/Quickstart.ipynb` to get a quick orientation to `Wind-AE` and please report any bugs via [Github](https://github.com/
|
|
38
|
+
Take advantage of `Notebooks/Quickstart.ipynb` to get a quick orientation to `Wind-AE` and please report any bugs via [Github](https://github.com/mibroome/wind-ae/issues) or via email to broome.astro@gmail.com.
|
|
39
39
|
|
|
40
40
|

|
|
41
41
|
[](https://coveralls.io/github/mibroome/wind-ae?branch=main)
|
|
@@ -53,7 +53,7 @@ Take advantage of `Notebooks/Quickstart.ipynb` to get a quick orientation to `Wi
|
|
|
53
53
|
|
|
54
54
|
Is Wind-AE the right tool for me?
|
|
55
55
|
----------------------
|
|
56
|
-
`Wind-AE` is well-suited for users interested in **quickly estimating mass loss rates** or outflow structure. Outflow structure includes bulk temperature and per-species ionization fractions as a function of radius, so can be easily translated into approximating and **predicting observables and transits**, including metastable helium (He 10830
|
|
56
|
+
`Wind-AE` is well-suited for users interested in **quickly estimating mass loss rates** or outflow structure. Outflow structure includes bulk temperature and per-species ionization fractions as a function of radius, so can be easily translated into approximating and **predicting observables and transits**, including metastable helium (He 10830 Å) transits, though a He transit module is not yet included. Precise modeling of lower atmosphere (< ~100 $\mu$bar) is considered necessary for highly accurate transit models, but Wind-AE can be easily coupled to lower atmosphere photochemistry models whose outputs can (e.g., radius, temperature, abundances, ionization fractions, etc. at 1 $\mu$bar) can be fed into Wind-AE as inputs.
|
|
57
57
|
|
|
58
58
|
>*If you are interested in outflow structure:* Past the Coriolis turning radius (a few planetary radii) 3D physics dominates, so `Wind-AE` does not integrate past that point. `Wind-AE` also makes simplifying assumptions about the region below the region below the wind-launch radius (~10 nanobars).
|
|
59
59
|
|
|
@@ -64,11 +64,11 @@ Because `Wind-AE` runs on the order of seconds to minutes, it can be (and has be
|
|
|
64
64
|
- Multiple ionization states of the same species (e.g., simultaneously tracking C I and C II as a linked ionization chain)
|
|
65
65
|
- X-ray physics (secondary ionizations and K-shell ionization cross-sections for relevant metals)
|
|
66
66
|
- Both low and high stellar XUV flux
|
|
67
|
-
- **Heating & Cooling**: Ionization heating, bolometric heating & cooling (negligible in wind), PdV cooling (work done due to expansion of gas), radiative / atomic line cooling (Lyman
|
|
67
|
+
- **Heating & Cooling**: Ionization heating, bolometric heating & cooling (negligible in wind), PdV cooling (work done due to expansion of gas), radiative / atomic line cooling (Lyman-alpha; O, C, Fe, Mg, Ca, and Ne lines), recombination cooling, free-free (bremsstrahlung) cooling, and, optionally, self-consistent conductive cooling (see note below)
|
|
68
68
|
#### `Wind-AE` does not (currently) include:
|
|
69
69
|
- **Magnetic fields**
|
|
70
70
|
- **Time dependence**
|
|
71
|
-
- **
|
|
71
|
+
- **Fractionation/diffusion/drag** - the atomic species set by the user are assumed to be entrained in the outflow and in thermal equilibrium. This is an appropriate assumption for species below the [crossover mass](https://ui.adsabs.harvard.edu/abs/1987Icar...69..532H) and a warning will be raised.
|
|
72
72
|
- **Heating & Cooling**: H3+ line cooling (not planned)
|
|
73
73
|
|
|
74
74
|
> **Note (v2.0+):** Conductive, recombination, and free-free cooling are each independently toggleable via flags. Turning on conduction (`sim.turn_on_conduction()`) introduces numerically stiff ODEs and should only be done after all other ramping is complete. The temperature dependence of free-free and recombination cooling can make ramping to higher metallicities numerically unstable — if so, try ramping with them off and turning them back on afterwards.
|
|
@@ -85,7 +85,7 @@ See [Broome et al. (2025)](https://ui.adsabs.harvard.edu/abs/2025ApJ...995..198B
|
|
|
85
85
|
- Just want a grid of mass loss rates for pure-Hydrogen, low-flux-EUV-irradiated planets? See [Kubyshkina & Fossati](https://ui.adsabs.harvard.edu/abs/2021RNAAS...5...74K/abstract)
|
|
86
86
|
- Want a grid of mass loss rates for pure-Hydrogen, high-flux-XUV-irradiated planets? See [Owen & Jackson (2012)](https://ui.adsabs.harvard.edu/abs/2012MNRAS.425.2931O/abstract)
|
|
87
87
|
|
|
88
|
-
>Want your model added to this list or to update the short bio? Email
|
|
88
|
+
>Want your model added to this list or to update the short bio? Email broome.astro@gmail.com
|
|
89
89
|
|
|
90
90
|
Requirements
|
|
91
91
|
------------
|
|
@@ -199,8 +199,8 @@ sim.ramp_molecular_erfc(v_drop=erf_loc, rate=erf_rate)
|
|
|
199
199
|
- **(v2.0)** Ramping to high metallicity with recombination and/or free-free cooling on can be numerically unstable in some cases — see the cooling-flags note above.
|
|
200
200
|
|
|
201
201
|
--------
|
|
202
|
-
### Check out the [open issues](https://github.com/
|
|
202
|
+
### Check out the [open issues](https://github.com/mibroome/wind-ae/issues).
|
|
203
203
|
|
|
204
204
|
--------
|
|
205
205
|
## AI Use Statement
|
|
206
|
-
|
|
206
|
+
Claude web (primarily model Sonnet 5.0) was used in `Wind-AE`'s v2.0 development to assist with refactoring `Wind-AE` for runtime improvements, with the implementation of the conductive cooling scheme in the code, and updating the docs for v2.0 release. All scientific content, methodology, and interpretations are the authors' own. The authors have reviewed and verified all code, outputs, and text, and take full responsibility for the integrity and accuracy of the work.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/relations/mass_relation_models/Eker2018.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/spectrum/high_energy_models/Chadney2015.py
RENAMED
|
File without changes
|
{wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/spectrum/high_energy_models/Jackson2012.py
RENAMED
|
File without changes
|
{wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/spectrum/high_energy_models/Linsky2014.py
RENAMED
|
File without changes
|
{wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/spectrum/high_energy_models/SanzForcada2011.py
RENAMED
|
File without changes
|
|
File without changes
|
{wind_ae-2.0.0 → wind_ae-2.0.2}/wind_ae/McAstro/stars/spectrum/high_energy_models/Wright2018.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|