Skip to content

Commit ce5914f

Browse files
EZoniax3l
andauthored
Add PICMI Scripts for LWFA Tests (#2700)
* Add PICMI Script for 2D Case * Add PICMI Script for 3D Case * Cleaning * Add PICMI Script for 1D Case * Add PICMI Script for RZ Case * Remove Old PICMI Script * Remove Old Test Python_LaserAccelerationMR * inputs_3d: Move Inputs From runtime_params * inputs_2d: Move Inputs From runtime_params * Update PICMI Script for 2D Case * Update PICMI Script for 3D Case * inputs_1d: Move Inputs From runtime_params * inputs_2d_rz: Move Inputs From runtime_params * Rename inputs_2d_rz as inputs_rz * Update PICMI Script for 1D Case * Update PICMI Script for RZ Case * inputs_rz: Fix Diagnostic Interval * Fix Diagnostic Interval For All Inputs * Add New Test For Each PICMI Script * Remove Old PICMI Script From Workflow yml Files * Dump RZ Modes for RZ Case * LWFA PICMI: Add Shellbang Add missing shellbang lines. Co-authored-by: Axel Huebl <[email protected]>
1 parent cf42f7e commit ce5914f

File tree

18 files changed

+822
-198
lines changed

18 files changed

+822
-198
lines changed

.github/workflows/intel.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ jobs:
9393
source /opt/intel/oneapi/setvars.sh
9494
set -e
9595
export OMP_NUM_THREADS=2
96-
Examples/Physics_applications/laser_acceleration/PICMI_inputs_laser_acceleration.py
96+
Examples/Physics_applications/laser_acceleration/PICMI_inputs_3d.py
9797
9898
build_dpcc:
9999
name: oneAPI DPC++ SP

.github/workflows/macos.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,4 @@ jobs:
6060
- name: run pywarpx
6161
run: |
6262
export OMP_NUM_THREADS=1
63-
mpirun -n 2 Examples/Physics_applications/laser_acceleration/PICMI_inputs_laser_acceleration.py
63+
mpirun -n 2 Examples/Physics_applications/laser_acceleration/PICMI_inputs_3d.py

.github/workflows/ubuntu.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,4 @@ jobs:
8686
- name: run pywarpx
8787
run: |
8888
export OMP_NUM_THREADS=1
89-
mpirun -n 2 Examples/Physics_applications/laser_acceleration/PICMI_inputs_laser_acceleration.py
89+
mpirun -n 2 Examples/Physics_applications/laser_acceleration/PICMI_inputs_3d.py

Docs/source/usage/examples.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ AMReX ``inputs``:
3838

3939
PICMI files:
4040

41-
* :download:`Without mesh refinement<../../../Examples/Physics_applications/laser_acceleration/PICMI_inputs_laser_acceleration.py>`
41+
* :download:`Without mesh refinement<../../../Examples/Physics_applications/laser_acceleration/PICMI_inputs_3d.py>`
4242

4343
Plasma mirror
4444
-------------
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
#!/usr/bin/env python3
2+
3+
from pywarpx import picmi
4+
5+
# Physical constants
6+
c = picmi.constants.c
7+
q_e = picmi.constants.q_e
8+
9+
# Number of time steps
10+
max_steps = 100
11+
12+
# Number of cells
13+
nz = 256
14+
15+
# Physical domain
16+
zmin = -56e-06
17+
zmax = 12e-06
18+
19+
# Domain decomposition
20+
max_grid_size = 64
21+
blocking_factor = 32
22+
23+
# Create grid
24+
grid = picmi.Cartesian1DGrid(
25+
number_of_cells = [nz],
26+
lower_bound = [zmin],
27+
upper_bound = [zmax],
28+
lower_boundary_conditions = ['dirichlet'],
29+
upper_boundary_conditions = ['dirichlet'],
30+
lower_boundary_conditions_particles = ['absorbing'],
31+
upper_boundary_conditions_particles = ['absorbing'],
32+
moving_window_velocity = [0., 0., c],
33+
warpx_max_grid_size = max_grid_size,
34+
warpx_blocking_factor = blocking_factor)
35+
36+
# Particles: plasma electrons
37+
plasma_density = 2e23
38+
plasma_xmin = None
39+
plasma_ymin = None
40+
plasma_zmin = 10e-06
41+
plasma_xmax = None
42+
plasma_ymax = None
43+
plasma_zmax = None
44+
uniform_distribution = picmi.UniformDistribution(
45+
density = plasma_density,
46+
lower_bound = [plasma_xmin, plasma_ymin, plasma_zmin],
47+
upper_bound = [plasma_xmax, plasma_ymax, plasma_zmax],
48+
fill_in = True)
49+
electrons = picmi.Species(
50+
particle_type = 'electron',
51+
name = 'electrons',
52+
initial_distribution = uniform_distribution)
53+
54+
# Laser
55+
e_max = 16e12
56+
position_z = 9e-06
57+
profile_t_peak = 30.e-15
58+
profile_focal_distance = 100e-06
59+
laser = picmi.GaussianLaser(
60+
wavelength = 0.8e-06,
61+
waist = 5e-06,
62+
duration = 15e-15,
63+
focal_position = [0, 0, profile_focal_distance + position_z],
64+
centroid_position = [0, 0, position_z - c*profile_t_peak],
65+
propagation_direction = [0, 0, 1],
66+
polarization_direction = [0, 1, 0],
67+
E0 = e_max,
68+
fill_in = False)
69+
laser_antenna = picmi.LaserAntenna(
70+
position = [0., 0., position_z],
71+
normal_vector = [0, 0, 1])
72+
73+
# Electromagnetic solver
74+
solver = picmi.ElectromagneticSolver(
75+
grid = grid,
76+
method = 'Yee',
77+
cfl = 0.9,
78+
divE_cleaning = 0)
79+
80+
# Diagnostics
81+
diag_field_list = ['B', 'E', 'J', 'rho']
82+
field_diag = picmi.FieldDiagnostic(
83+
name = 'diag1',
84+
grid = grid,
85+
period = 100,
86+
data_list = diag_field_list,
87+
write_dir = '.',
88+
warpx_file_prefix = 'Python_LaserAcceleration_1d_plt')
89+
90+
# Set up simulation
91+
sim = picmi.Simulation(
92+
solver = solver,
93+
max_steps = max_steps,
94+
verbose = 1,
95+
particle_shape = 'cubic',
96+
warpx_use_filter = 1,
97+
warpx_serialize_ics = 1,
98+
warpx_do_dynamic_scheduling = 0)
99+
100+
# Add plasma electrons
101+
sim.add_species(
102+
electrons,
103+
layout = picmi.GriddedLayout(grid = grid, n_macroparticle_per_cell = [10]))
104+
105+
# Add laser
106+
sim.add_laser(
107+
laser,
108+
injection_method = laser_antenna)
109+
110+
# Add diagnostics
111+
sim.add_diagnostic(field_diag)
112+
113+
# Write input file that can be used to run with the compiled version
114+
sim.write_input_file(file_name = 'inputs_1d_picmi')
115+
116+
# Initialize inputs and WarpX instance
117+
sim.initialize_inputs()
118+
sim.initialize_warpx()
119+
120+
# Advance simulation until last time step
121+
sim.step(max_steps)
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
#!/usr/bin/env python3
2+
3+
from pywarpx import picmi
4+
5+
# Physical constants
6+
c = picmi.constants.c
7+
q_e = picmi.constants.q_e
8+
9+
# Number of time steps
10+
max_steps = 200
11+
12+
# Number of cells
13+
nx = 64
14+
nz = 512
15+
16+
# Physical domain
17+
xmin = -30e-06
18+
xmax = 30e-06
19+
zmin = -56e-06
20+
zmax = 12e-06
21+
xmin_refined = -5e-06
22+
xmax_refined = 5e-06
23+
zmin_refined = -35e-06
24+
zmax_refined = -25e-06
25+
26+
# Domain decomposition
27+
max_grid_size = 64
28+
blocking_factor = 32
29+
30+
# Create grid
31+
grid = picmi.Cartesian2DGrid(
32+
number_of_cells = [nx, nz],
33+
lower_bound = [xmin, zmin],
34+
upper_bound = [xmax, zmax],
35+
lower_boundary_conditions = ['open', 'open'],
36+
upper_boundary_conditions = ['open', 'open'],
37+
lower_boundary_conditions_particles = ['absorbing', 'absorbing'],
38+
upper_boundary_conditions_particles = ['absorbing', 'absorbing'],
39+
moving_window_velocity = [0., c],
40+
warpx_max_grid_size = max_grid_size,
41+
warpx_blocking_factor = blocking_factor,
42+
refined_regions = [[1, [xmin_refined, zmin_refined], [xmax_refined, zmax_refined]]])
43+
44+
# Particles: plasma electrons
45+
plasma_density = 2e23
46+
plasma_xmin = -20e-06
47+
plasma_ymin = None
48+
plasma_zmin = 10e-06
49+
plasma_xmax = 20e-06
50+
plasma_ymax = None
51+
plasma_zmax = None
52+
uniform_distribution = picmi.UniformDistribution(
53+
density = plasma_density,
54+
lower_bound = [plasma_xmin, plasma_ymin, plasma_zmin],
55+
upper_bound = [plasma_xmax, plasma_ymax, plasma_zmax],
56+
fill_in = True)
57+
electrons = picmi.Species(
58+
particle_type = 'electron',
59+
name = 'electrons',
60+
initial_distribution = uniform_distribution)
61+
62+
# Particles: beam electrons
63+
q_tot = 1e-12
64+
x_m = 0.
65+
y_m = 0.
66+
z_m = -28e-06
67+
x_rms = 0.5e-06
68+
y_rms = 0.5e-06
69+
z_rms = 0.5e-06
70+
ux_m = 0.
71+
uy_m = 0.
72+
uz_m = 500.
73+
ux_th = 2.
74+
uy_th = 2.
75+
uz_th = 50.
76+
gaussian_bunch_distribution = picmi.GaussianBunchDistribution(
77+
n_physical_particles = q_tot / q_e,
78+
rms_bunch_size = [x_rms, y_rms, z_rms],
79+
rms_velocity = [c*ux_th, c*uy_th, c*uz_th],
80+
centroid_position = [x_m, y_m, z_m],
81+
centroid_velocity = [c*ux_m, c*uy_m, c*uz_m])
82+
beam = picmi.Species(
83+
particle_type = 'electron',
84+
name = 'beam',
85+
initial_distribution = gaussian_bunch_distribution)
86+
87+
# Laser
88+
e_max = 16e12
89+
position_z = 9e-06
90+
profile_t_peak = 30.e-15
91+
profile_focal_distance = 100e-06
92+
laser = picmi.GaussianLaser(
93+
wavelength = 0.8e-06,
94+
waist = 5e-06,
95+
duration = 15e-15,
96+
focal_position = [0, 0, profile_focal_distance + position_z],
97+
centroid_position = [0, 0, position_z - c*profile_t_peak],
98+
propagation_direction = [0, 0, 1],
99+
polarization_direction = [0, 1, 0],
100+
E0 = e_max,
101+
fill_in = False)
102+
laser_antenna = picmi.LaserAntenna(
103+
position = [0., 0., position_z],
104+
normal_vector = [0, 0, 1])
105+
106+
# Electromagnetic solver
107+
solver = picmi.ElectromagneticSolver(
108+
grid = grid,
109+
method = 'Yee',
110+
cfl = 1.,
111+
divE_cleaning = 0)
112+
113+
# Diagnostics
114+
diag_field_list = ['B', 'E', 'J', 'rho']
115+
field_diag = picmi.FieldDiagnostic(
116+
name = 'diag1',
117+
grid = grid,
118+
period = 200,
119+
data_list = diag_field_list,
120+
write_dir = '.',
121+
warpx_file_prefix = 'Python_LaserAccelerationMR_plt')
122+
123+
# Set up simulation
124+
sim = picmi.Simulation(
125+
solver = solver,
126+
max_steps = max_steps,
127+
verbose = 1,
128+
particle_shape = 'cubic',
129+
warpx_use_filter = 1,
130+
warpx_serialize_ics = 1)
131+
132+
# Add plasma electrons
133+
sim.add_species(
134+
electrons,
135+
layout = picmi.GriddedLayout(grid = grid, n_macroparticle_per_cell = [1, 1, 1]))
136+
137+
# Add beam electrons
138+
sim.add_species(
139+
beam,
140+
layout = picmi.PseudoRandomLayout(grid = grid, n_macroparticles = 100))
141+
142+
# Add laser
143+
sim.add_laser(
144+
laser,
145+
injection_method = laser_antenna)
146+
147+
# Add diagnostics
148+
sim.add_diagnostic(field_diag)
149+
150+
# Write input file that can be used to run with the compiled version
151+
sim.write_input_file(file_name = 'inputs_2d_picmi')
152+
153+
# Initialize inputs and WarpX instance
154+
sim.initialize_inputs()
155+
sim.initialize_warpx()
156+
157+
# Advance simulation until last time step
158+
sim.step(max_steps)

0 commit comments

Comments
 (0)