Data and code from: "Evolution of lunar wake potentials: structure, energy conversion, and their imprints on velocity distributions"
Data files
Aug 21, 2026 version files 95.74 GB
-
Archive-artemis.zip
3.07 MB
-
Archive-notebooks.zip
2.09 MB
-
Archive-vpic.zip
95.74 GB
-
README.md
12.58 KB
Abstract
This dataset comprises two components supporting a study of electric potential structure and particle energization in the lunar wake: (1) output from a one-dimensional particle-in-cell (PIC) simulation of the lunar wake, performed with VPIC, and (2) ARTEMIS spacecraft observations of a lunar wake crossing on October 26, 2011.
The simulation component includes electromagnetic field data (Ex), particle moment (hydrodynamic) quantities including density, momentum density, current, and pressure, separately resolved for electrons originating from the left and right sides of the simulation domain, and reduced ion and electron velocity distribution functions (phase space density as a function of position and parallel velocity). The simulation spans a domain of 600 electron inertial lengths (60 ion inertial lengths) resolved with 300,000 grid cells, and 12,000 output time steps. Field and particle quantities are stored in VPIC's native binary output format and are read using the accompanying ReadFile Python module.
The observational component consists of IDL save files (.sav) containing ARTEMIS P1 and P2 fluxgate magnetometer data, electrostatic analyzer moments (density, bulk velocity, temperature) for ions and electrons, spacecraft position, and reduced ion and electron parallel velocity distribution functions, along with a precomputed inferred electric potential and separatrix velocity, covering the interval 11:43-12:43 UT on October 26, 2011.
Four Jupyter notebooks are included to demonstrate how to read, process, and visualize both components, reproducing the primary figures of the associated study: the spatiotemporal evolution of the wake electric potential, the electron force-balance verification, the two-scale energy conversion and electron velocity distribution signatures, and the comparison with ARTEMIS observations.
This dataset may be reused to study electric potential structure, electron and ion kinetic dynamics, and energy conversion processes in the lunar wake, or as a reference dataset for validating other lunar wake or plasma expansion simulations. The dataset contains no human subjects data, personally identifiable information, or other legal/ethical concerns; the ARTEMIS spacecraft data are derived from public NASA mission observations.
Dataset DOI: 10.5061/dryad.dv41ns2dd
Description of the data and file structure
This dataset supports a study of the two-scale electric potential structure in the lunar wake, its role in mediating energy conversion between ions and electrons, and its imprints on ion and electron velocity distributions, using a one-dimensional particle-in-cell (PIC) simulation performed with VPIC and ARTEMIS spacecraft observations of a lunar wake crossing on October 26, 2011.
Files and variables
The dataset is organized into three compressed archives: Archive-vpic.zip (PIC simulation output), Archive-artemis.zip (ARTEMIS spacecraft observations), and Archive-notebooks.zip (Jupyter notebooks that read the data and reproduce the manuscript figures).
Archive-vpic.zip
Output from a one-dimensional PIC simulation of the lunar wake. The simulation domain spans -30 to 30 ion inertial lengths (d_i), resolved with 300,000 grid cells for field and hydrodynamic (moment) quantities. Electron quantities are split into two populations by origin: el denotes electrons originating from the left boundary of the domain, and er denotes electrons originating from the right boundary, consistent with the left/right particle tracking described in the manuscript.
| File | Description | Format | Units |
|---|---|---|---|
ex.gda |
Electric field Ex(x), time series over all output steps | Binary (.gda), little-endian 32-bit float |
normalized (VPIC units) |
rhoel.gda |
Electron number density, left-originating population | Binary (.gda) |
normalized |
rhoer.gda |
Electron number density, right-originating population | Binary (.gda) |
normalized |
pelx.gda |
Electron momentum density (x component), left-originating population | Binary (.gda) |
normalized |
perx.gda |
Electron momentum density (x component), right-originating population | Binary (.gda) |
normalized |
jelx.gda |
Electron current density (x component), left-originating population | Binary (.gda) |
normalized |
jerx.gda |
Electron current density (x component), right-originating population | Binary (.gda) |
normalized |
tel-xx.gda |
Electron pressure (xx component), left-originating population | Binary (.gda) |
normalized |
ter-xx.gda |
Electron pressure (xx component), right-originating population | Binary (.gda) |
normalized |
elxvx.50500000.bin |
Left-originating electron reduced phase space density f_left(x, vx) at t*omega_pi ~ 10,000 | Binary (.bin), little-endian 32-bit float |
a.u. |
erxvx.50500000.bin |
Right-originating electron reduced phase space density f_right(x, vx) at t*omega_pi ~ 10,000 | Binary (.bin), little-endian 32-bit float |
a.u. |
Hxvx.50500000.bin |
Ion (proton) reduced phase space density f_i(x, vx) at t*omega_pi ~ 10,000 | Binary (.bin), little-endian 32-bit float |
a.u. |
The .gda files are raw binary files containing a time series of 1D field/hydro snapshots (output every delta-t * omega_pi = 1, for 12,000 steps total). They require the helper function read_xyz provided in ReadFile.py, included in Archive-notebooks.zip. A minimal example to read the electric field at time index it:
import numpy as np
import ReadFile
nx = 300000
it = 10000 # any integer from 0 to 12000
ex = (ReadFile.read_xyz(nx, 1, 1, it, 'ex', datadir))[:, 0, 0]
print(ex)
To obtain the electric potential phi(x) at a given time step, integrate Ex along x (note: phi = -integral of Ex dx). To reduce particle noise, we recommend averaging Ex over a window of ~150-200 consecutive time steps before integrating, as done in the associated notebooks.
The .bin phase space files each contain a single 2D array of shape (400, 3000), with vx along the first axis (400 cells spanning -11.07 cs to 11.07 cs for ions, -184.57 cs to 184.57 cs for electrons, where cs is the ion acoustic speed) and x along the second axis (3000 cells spanning -30 d_i to 30 d_i, resolution 0.02 d_i). A minimal example to read the ion phase space density:
import numpy as np
nvx, nx = 400, 3000
fxvx = np.fromfile('Hxvx.50500000.bin', dtype=np.float32)
fxvx = np.reshape(fxvx, (nvx, nx), order='C')
print(fxvx)
Other .bin files can be read the same way by substituting the filename.
Archive-artemis.zip
ARTEMIS P1/P2 spacecraft observations of a lunar wake crossing on October 26, 2011 (interval 11:43-12:43 UT). ARTEMIS (Acceleration, Reconnection, Turbulence and Electrodynamics of the Moon's Interaction with the Sun) consists of two spacecraft orbiting the Moon. Data are provided in IDL save format (.sav), readable in Python with scipy.io.readsav or in IDL with restore.
| File | Description | Format |
|---|---|---|
efpara-2011-10-26-11:43:00.sav |
Electron reduced phase space density f_e(t, v_parallel) along the P1 trajectory | IDL save (.sav) |
ifpara-2011-10-26-11:43:00.sav |
Ion reduced phase space density f_i(t, v_parallel) along the P1 trajectory | IDL save (.sav) |
fgm-mom-pos-2011-10-26-11:43:00.sav |
Magnetic field (FGM), plasma moments (density, bulk velocity, temperature for ions and electrons), and spacecraft position | IDL save (.sav) |
vsep_pot_2011-10-26.npz |
Inferred electric potential and separatrix velocity along the P1 trajectory (used to overlay the inferred potential and separatrix on the ARTEMIS figure) | NumPy archive (.npz) |
A minimal example to read a .sav file:
from scipy.io import readsav
sav_data = readsav('efpara-2011-10-26-11:43:00.sav')
print(sav_data.keys())
Key variables in efpara-*.sav and ifpara-*.sav:
| Variable | Description | Units |
|---|---|---|
tarr |
Time array (Unix time) | seconds |
freduce1ds.fpara |
Reduced phase space density f(t, v_parallel) | s/(km*cm^3) |
freduce1ds.vpara |
Parallel velocity grid | km/s |
Key variables in fgm-mom-pos-*.sav:
| Variable | Description | Units |
|---|---|---|
bdata |
Magnetic field components and magnitude vs. time | nT |
nedata |
Electron number density vs. time | cm^-3 |
uidata, uedata |
Ion and electron bulk velocity components vs. time | km/s |
ti3data, te3data |
Ion and electron temperature vs. time | eV |
pdata |
Spacecraft position (SSE coordinates) vs. time | km |
The .npz file can be read with numpy.load('vsep_pot_2011-10-26.npz'); use .files to list the arrays it contains.
Archive-notebooks.zip
Four Jupyter notebooks, each reading data from the archives above and reproducing the corresponding figure(s) in the manuscript. All notebooks depend on the helper module ReadFile.py, included in this archive, for reading the .gda field/hydro files.
Users should update the file paths in the Jupyter notebooks to refer to the directory where they saved this repository.
plots4_pot.ipynb
Computes the time-averaged electric potential phi(x) across the simulation domain at 150 evenly spaced times (from t*omega_pi = 150 to 12,000), and renders its spatiotemporal evolution as a 3D surface. Reproduces the two-scale potential structure figure (macroscale potential well and microscale shock enhancements).
Required data: Archive-vpic.zip: ex.gda
plots4_te.ipynb
Computes the cumulative electric force F_E and cumulative electron pressure difference F_p from the left boundary, and compares their spatiotemporal evolution and line profiles at three representative times, to verify electron force balance. Reproduces the force-balance verification figure (Supporting Information).
Required data: Archive-vpic.zip: ex.gda, rhoel.gda, rhoer.gda, pelx.gda, perx.gda, jelx.gda, jerx.gda, tel-xx.gda, ter-xx.gda
plots4_ps.ipynb
Reads the ion and electron reduced phase space density files at t*omega_pi ~ 10,000 and produces (1) the electric field, ion/electron phase portraits, and energy-density snapshot figure illustrating two-scale energy conversion, and (2) the panel of 14 electron parallel velocity distribution cuts spanning the wake, showing reflection, penetration, and flat-top heating signatures. The bulk kinetic and thermal energy densities shown in the energy-density panel are computed directly from the reduced phase space density files (as velocity moments), rather than from the .gda hydrodynamic moment files.
Required data: Archive-vpic.zip: elxvx.50500000.bin, erxvx.50500000.bin, Hxvx.50500000.bin, ex.gda (for the potential/separatrix overlay)
plots4_artemis.ipynb
Reads ARTEMIS P1 magnetic field, plasma moment, and reduced phase space density data for the October 26, 2011 wake crossing, together with the precomputed inferred potential and separatrix, and reproduces the eight-panel ARTEMIS observation figure (magnetic field, density and inferred potential, ion bulk velocity, ion and electron phase space density, energy densities, spacecraft trajectory, and electron velocity distribution cuts).
Required data: Archive-artemis.zip: efpara-2011-10-26-11:43:00.sav, ifpara-2011-10-26-11:43:00.sav, fgm-mom-pos-2011-10-26-11:43:00.sav, vsep_pot_2011-10-26.npz
Sharing/Access information
The ARTEMIS spacecraft data are derived from the publicly available ARTEMIS mission archive, accessed and processed using SPEDAS (Space Physics Environment Data Analysis Software).
Links to other publicly accessible locations of the data:
Code/Software
- Python 3.x
- Jupyter Notebook or JupyterLab
- Required Python packages:
numpy,scipy,matplotlib,pyvista,joblib,tqdm scipy.io.readsavfor reading.savfiles (included inscipy)ReadFile.py(included inArchive-notebooks.zip) for reading.gdabinary field/hydro files
References
- Bowers, K. J. et al. (2008). Ultrahigh performance three-dimensional electromagnetic relativistic kinetic plasma simulation. Physics of Plasmas, 15, 055703. https://doi.org/10.1063/1.2840133
- Angelopoulos, V. et al. (2019). The Space Physics Environment Data Analysis System (SPEDAS). Space Science Reviews, 215, 9. https://doi.org/10.1007/s11214-018-0576-4
