Plots#
Plot 1D Density#
input deck:
datasets/1_1_drifting_bunch/input.deckPython File:
plotting/plot_1D_density.py
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
import sdf_xarray as sdfxr
input_dir = Path("datasets/1_1_drifting_bunch")
ds = sdfxr.open_dataset(input_dir / "0000.sdf")
ds = ds.epoch.rescale_coords(1e6, "µm", ["X_Grid_mid"])
ds["Derived_Number_Density"].epoch.plot()
plt.tight_layout()
plt.savefig(input_dir / "number_density.png", dpi=300)
np.savetxt(input_dir / "number_density_vals.txt", ds["Derived_Number_Density"].values)
np.savetxt(input_dir / "number_density_x.txt", ds["X_Grid_mid"].values)
Plot 1D Poynting Flux#
input deck:
datasets/3_3_Gaussian_1d_laser/input.deckPython File:
plotting/plot_1D_poynting_flux.py
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
import sdf_xarray as sdfxr
input_dir = Path("datasets/3_3_Gaussian_1d_laser")
ds = sdfxr.open_dataset(input_dir / "0020.sdf")
# Convert the x and y coords to microns
ds = ds.epoch.rescale_coords(1e6, "µm", ["X_Grid_mid"])
# Calculate Poynting flux magnitude
flux_magnitude = np.sqrt(
ds["Derived_Poynting_Flux_x"] ** 2
+ ds["Derived_Poynting_Flux_y"] ** 2
+ ds["Derived_Poynting_Flux_z"] ** 2
)
# convert to W/cm^2
I_Wcm2 = flux_magnitude * 1e-4
I_Wcm2.attrs["long_name"] = "Poynting Flux Magnitude"
I_Wcm2.attrs["units"] = "W/cm$^2$"
I_Wcm2.epoch.plot()
plt.tight_layout()
plt.savefig(input_dir / "intensity.png", dpi=300)
np.savetxt(input_dir / "intensity_vals.txt", I_Wcm2.values)
np.savetxt(input_dir / "intensity_x.txt", ds["X_Grid_mid"].values)
Plot 2D Density#
input deck:
datasets/4_3_basic_target/input.deckPython File:
plotting/plot_2D_density.py
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
import sdf_xarray as sdfxr
input_dir = Path("datasets/4_3_basic_target")
ds = sdfxr.open_dataset(input_dir / "0000.sdf")
ds = ds.epoch.rescale_coords(1e6, "µm", ["X_Grid_mid", "Y_Grid_mid"])
ds["Derived_Number_Density"].epoch.plot()
plt.tight_layout()
plt.savefig(input_dir / "number_density.png", dpi=300)
np.savetxt(input_dir / "number_density_vals.txt", ds["Derived_Number_Density"].values)
np.savetxt(input_dir / "number_density_x.txt", ds["X_Grid_mid"].values)
Plot 2D Distribution Function Multispecies#
input deck:
datasets/2_1_two_stream_instability/input.deckPython File:
plotting/plot_2D_dist_fn_multispecies.py
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
import sdf_xarray as sdfxr
input_dir = Path("datasets/2_1_two_stream_instability")
ds = sdfxr.open_dataset(input_dir / "0000.sdf")
ds = ds.epoch.rescale_coords(1e-3, "km", ["X_x_px_Left"])
# Sum phase-space of species "Left" and "Right" in "x_px" distribution function
# NOTE: We only use the values from the right distribution function as if we inherit
# the coords we from the right we end up with 4 coords instead of 2
total_phase_space = ds["dist_fn_x_px_Left"] + ds["dist_fn_x_px_Right"].values
total_phase_space.attrs["long_name"] = "Summed Particle Weight Per Bin"
total_phase_space.attrs["units"] = ""
total_phase_space.epoch.plot()
plt.tight_layout()
plt.savefig(input_dir / "phase_space.png", dpi=300)
np.savetxt(input_dir / "phase_space_vals.txt", total_phase_space.values)
np.savetxt(input_dir / "phase_space_x.txt", ds["X_x_px_Left"].values)
np.savetxt(input_dir / "phase_space_y.txt", ds["Px_x_px_Left"].values)
Plot 2D Poynting Flux#
input deck:
datasets/3_5_Gaussian_beam/input.deckPython File:
plotting/plot_2D_poynting_flux.py
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
import sdf_xarray as sdfxr
input_dir = Path("datasets/3_5_Gaussian_beam")
ds = sdfxr.open_dataset(input_dir / "0001.sdf")
# Convert the x and y coords to microns
ds = ds.epoch.rescale_coords(1e6, "µm", ["X_Grid_mid", "Y_Grid_mid"])
# Calculate Poynting flux magnitude
flux_magnitude = np.sqrt(
ds["Derived_Poynting_Flux_x"] ** 2
+ ds["Derived_Poynting_Flux_y"] ** 2
+ ds["Derived_Poynting_Flux_z"] ** 2
)
# convert to W/cm^2
I_Wcm2 = flux_magnitude * 1e-4
I_Wcm2.attrs["long_name"] = "Poynting Flux Magnitude"
I_Wcm2.attrs["units"] = "W/cm$^2$"
I_Wcm2.epoch.plot()
plt.tight_layout()
plt.savefig(input_dir / "intensity.png", dpi=300)
np.savetxt(input_dir / "intensity_vals.txt", I_Wcm2.values)
np.savetxt(input_dir / "intensity_x.txt", ds["X_Grid_mid"].values)
np.savetxt(input_dir / "intensity_y.txt", ds["Y_Grid_mid"].values)
Plot Time vs Temperature#
input deck:
datasets/4_2_self_heating/input.deckPython File:
plotting/plot_time_temperature.py
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
import sdf_xarray as sdfxr
# Constants
kB = 1.380649e-23
q0 = 1.60217663e-19
input_dir = Path("datasets/4_2_self_heating")
ds = sdfxr.open_mfdataset(input_dir)
# Convert the time to femtoseconds
ds = ds.epoch.rescale_coords(1e15, "fs", "time")
# Averate temperature over all spatial cells at each time-step
kB = 1.380649e-23
q0 = 1.60217663e-19
temp_ev = ds["Derived_Temperature"].mean(dim=("X_Grid_mid", "Y_Grid_mid")) * kB / q0
temp_ev.epoch.plot()
plt.tight_layout()
plt.savefig(input_dir / "temperature_time.png", dpi=300)
np.savetxt(input_dir / "temperature_time_time.txt", temp_ev["time"].values)
np.savetxt(input_dir / "temperature_time_temperature.txt", temp_ev.values)
Plot X vs Px Scatter#
input deck:
datasets/5_2_subsets/input.deckPython File:
plotting/plot_x_px_scatter.py
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
import sdf_xarray as sdfxr
input_dir = Path("datasets/5_2_subsets")
ds = sdfxr.open_dataset(input_dir / "0000.sdf", keep_particles=True)
ds = ds.epoch.rescale_coords(
1e6, "µm", ["X_Particles_subset_Refluxers_Electron", "Y_Target_mid"]
)
x = ds["X_Particles_subset_Refluxers_Electron"]
px = ds["Particles_Px_subset_Refluxers_Electron"]
plt.scatter(x, px)
plt.xlabel("x [µm]")
plt.ylabel("Px [kg.m/s]")
plt.savefig(input_dir / "x_px.png", dpi=300)
np.savetxt(input_dir / "x_px_vals.txt", px.values)
np.savetxt(input_dir / "x_px_x.txt", x.values)