PLUME writes output solutions to the /data directory, to the subdirectory specified by dataName.
All output file names will have the outputName string included in the name to distinguish between distinct calculations.
Numeric output columns contain values in the convention selected by
the input normalization parameter.
The first four columns of roots, modes, and tensor files are
kperp, kpar, betap, and vtp in input units:
rho_ref,d_ref.Species tauS columns likewise contain the selected temperature definition.
The complex frequency always uses $\Omega_R$.
A d_ref run also writes normalization_<outputName>.txt beside its numeric outputs;
its absence in older outputs indicates the legacy rho_ref convention.
Reusing an output name with rho_ref removes a stale d_ref metadata file.
Existing numeric file column order and formatting are unchanged.
For the gyrotropic and Cartesian FPC files, velocities and fields continue to use the kinetic solver's thermal velocity convention; their headers describe those derived quantities. The normalization metadata identifies the input convention used to generate the run.
Value of the dispersion tensor $\mathcal{\Lambda}(\omega_{\textrm{r}},\gamma)$ on a defined complex frequency grid.
Solutions to the dispersion relation satisfy $|\mathcal{\Lambda}| =0$.
This file is generated from the map_search subroutine in disprels.f90,
and invoked when use_map =.true.
The data is ordered in columns as
1. $\omega_r$
2. $\gamma$
3. $\log_{10} |\mathcal{\Lambda}|$
4. Re $[|\mathcal{\Lambda}|]$
5. Im $[|\mathcal{\Lambda}|]$
The &maps namelist in filename.in determines the structure of filename.map.
The range of $\omega_{\textrm{r}}/\Omega_p$ is from omi to omf with nr steps.
Logorithmic or linear spacing is selected with loggridw.
The range of $\gamma_{\textrm{r}}/\Omega_p$ is from gami to gamf with ni steps. Logorithmic or linear spacing is selected with loggridg.
nr and ni are set to 128 as a default which can be replaced by user defined parameters;
see [input.md].
Identified solutions to the dispersion relation $|\mathcal{D}| =0$, calculated using refine_guess in disprels.f90.
The data is ordered in columns as: 1. $k_\perp \rho_{ref}$ 2. $k_\parallel \rho_{ref}$ 3. $\beta_{ref,\parallel}$ 4. $v_{t,ref,\parallel}/c$ 5. $\omega_{r}/\Omega_{ref}$ 6. $\gamma/\Omega_{ref}$
This will be followed by 6nspec columns containing the parameter lists $\mathcal{P}j$ for each species or component.
- $T/T_{j,\parallel}$.
- $m_{ref}/m_{j}$.
- $T_{j,\perp}/T_{j,\parallel}$.
- $q_{ref}/q_{j}$.
- $n_{j}/n_{ref}$.
- $v_{j,drift}/v_{A,ref}$.
Only the first nroot_max solutions will be identified and written to file.
The dispersion relation calculated from om_scan will have different formats based upon the number of species as well as the suplementary calculations invoked.
The param name will be assigned based on the kind of parameter scan performed, specifically:
scan_style=-1:
k for scan from $\textbf{k}0 \rho$ to $\textbf{k}1 \rho$ (scan_type=0).theta for scan from $\theta_0$ to $\theta_1$ with fixed $|k|\rho_{ref}$ (scan_type=1).k_fixed_theta for scan from $|k|1\rho$ to $|k|1\rho$ with a fixed value of $\theta$ (scan_type=2).scan_style=0:
kperp for scan of $k_\perp \rho_{ref}$ (scan_type=0).kpar for scan of $k_\parallel \rho_{ref}$ (scan_type=1).beta for scan of $\beta_{ref,\parallel}$ (scan_type=2).vtp for scan of $v_{t,ref,\parallel}/c$ (scan_type=3).scan_style=1-nspec:
tauS for scan of $T_{ref,\parallel}/T_{j,\parallel}$ (scan_type=0).muS for scan of $m_{ref}/m_{j}$ (scan_type=1).alphS for scan of $T_{j,\perp}/T_{j,\parallel}$ (scan_type=2).qs for scan of $q_{ref}/q_{j}$ (scan_type=3).Ds for scan of $n_{j}/n_{ref}$ (scan_type=4).Vs for scan of $v_{j,drift}/v_{A,ref}$ (scan_type=5).The initial and final values of the parameter scanned over will be reflected in the range portion of the file name.
One file for each mode followed will be produced.
The first six columns are the same regardless of supplemental calculations,
normalized to the appropriate convention.
They are ordered as
1. $k_\perp L_{ref}$
2. $k_\parallel L_{ref}$
3. $\beta_{ref,\parallel}$
4. $v_{t,ref,\parallel}/c$ or $v_{A,ref}/c$
5. $\omega_{\textrm{r}}/\Omega_{ref}$
6. $\gamma/\Omega_{ref}$
If eigen is set to true, the next set of columns will be the eigenfluctuations, with fields normalized to $E_x$, velocity normalized to $c E_x/B_0$ and density normalized to $n_{0s} E_x/B_0$,
nspec)+2(j-1)] Re $[\delta n_{j}]$ nspec)+2(j-1)] Im $[\delta n_{j}]$ where j ranges from 1 to nspec.
The normalization follows Eqns. 33-37 in Klein, K. G., Howes, G. G.,
and Brown, C. R., 2025
If heat is set to true, the next set of columns will be the power absorption or emission from each component. If low_n is set to true, additional terms associated with Landau, Transit time, and Cyclotron heating will be output. If eigen is false, this data will start in the 7th column. If eigen is true, this data will start in the 18+8 nspec+1st column.
If low_n is true, the ordering is:
1) All total powers P_j for j=1..nspec, then
2) For each species j, the six sub-terms (yy, yz, zy, zz, n=0, n=±1) consecutively.
Concretely (1-based column numbers; {!eigen}=1 if eigen is false, else 0):
Let afterP = 18 + (8 - 6{!eigen})*nspec + nspec. Then for species j in {1,..,nspec}:
Here, {!eigen} (negation of the eigen boolean) equals 1 if eigen is false and 0 if eigen is true.
This will be followed by 6nspec columns containing the parameter lists $\mathcal{P}j$ for each species or component.
- 19+noutperspec nspec+6(j-1)-12({!eigen}). $T/T_{j,\parallel}$.
- 20+noutperspec nspec+6(j-1)-12({!eigen}). $m_{ref}/m_{j}$.
- 21+noutperspec nspec+6(j-1)-12({!eigen}). $T_{j,\perp}/T_{j,\parallel}$.
- 22+noutperspec nspec+6(j-1)-12({!eigen}). $q_{ref}/q_{j}$.
- 23+noutperspec nspec+6(j-1)-12({!eigen}). $n_{j}/n_{ref}$.
- 24+noutperspec nspec+6(j-1)-12({!eigen}). $v_{j,drift}/v_{A,ref}$.
Here, noutperspec = 0 is the number of additional outputs created by setting heating or eigen to true. If eigen and heating are false, then noutperspec = 8, if eigen is false and heating is true, then noutperspec = 8, and if eigen is true and if eigen and heating are true, then noutperspec=16. Note that {!eigen} (negation of eigen boolean) is equal to 1 if eigen is false and 0 if eigen is true.
For ease of reference, consider the below tables for column numbers for two and three component calculations.
This same data structure is preserved for the output from om_double_scan.
The file naming convention will include a value of param from both of the two parameters scanned, and the code will not output information about the range of parameters in the file name.