Skip to content

Commit 1137d06

Browse files
Vay Deposition: Add Cumulative Sums (#2958)
* Implement Cumulative Sum * Implement Subtraction of Average * Fix Bug, Remove Abort w/ Periodic Single Box * Enforce Consistency w/ Periodic Single Box * Cleaning * Cleaning * Fix Bugs * Cleaning * Compute Cumulative Sums Before Sync * Always Loop Over Full Boxes * MFIter without Tiling * Cleaning * Do Not Store Cumulative Sums * Add Two-Particle Test (3D) * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Set 3D Velocity in CI Test * Precompute Normalization Factors * Add Two-Particle Test (2D) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent afa9240 commit 1137d06

File tree

8 files changed

+399
-0
lines changed

8 files changed

+399
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/usr/bin/env python3
2+
3+
# Copyright 2019-2022
4+
#
5+
# This file is part of WarpX.
6+
#
7+
# License: BSD-3-Clause-LBNL
8+
9+
import os
10+
import sys
11+
12+
import numpy as np
13+
from scipy.constants import epsilon_0
14+
import yt
15+
16+
yt.funcs.mylog.setLevel(50)
17+
18+
sys.path.insert(1, '../../../../warpx/Regression/Checksum/')
19+
import checksumAPI
20+
21+
# Plotfile data set
22+
fn = sys.argv[1]
23+
ds = yt.load(fn)
24+
25+
# Check relative L-infinity spatial norm of rho/epsilon_0 - div(E)
26+
data = ds.covering_grid(
27+
level=0,
28+
left_edge=ds.domain_left_edge,
29+
dims=ds.domain_dimensions)
30+
rho = data[('boxlib','rho')].to_ndarray()
31+
divE = data[('boxlib','divE')].to_ndarray()
32+
error_rel = np.amax(np.abs(divE-rho/epsilon_0))/np.amax(np.abs(rho/epsilon_0))
33+
tolerance = 1e-3
34+
print("Error on charge conservation:")
35+
print("error_rel = {}".format(error_rel))
36+
print("tolerance = {}".format(tolerance))
37+
assert( error_rel < tolerance )
38+
39+
# Checksum analysis
40+
test_name = os.path.split(os.getcwd())[1]
41+
checksumAPI.evaluate_checksum(test_name, fn)
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# algo
2+
algo.charge_deposition = standard
3+
algo.current_deposition = vay
4+
algo.maxwell_solver = psatd
5+
algo.particle_pusher = vay
6+
algo.particle_shape = 3
7+
8+
# amr
9+
amr.max_level = 0
10+
amr.n_cell = 128 128
11+
12+
# boundary
13+
boundary.field_hi = periodic periodic
14+
boundary.field_lo = periodic periodic
15+
16+
# diag
17+
diag1.diag_type = Full
18+
diag1.intervals = 50
19+
diag1.fields_to_plot = By Ex Ez jx jz rho divE
20+
21+
# diagnostics
22+
diagnostics.diags_names = diag1
23+
24+
# electron
25+
electron.charge = -q_e
26+
electron.injection_style = "SingleParticle"
27+
electron.mass = 9e-22
28+
electron.single_particle_pos = 0. 0. 0.
29+
electron.single_particle_vel = 0.5 0. 0.5
30+
electron.single_particle_weight = 1.
31+
32+
# geometry
33+
geometry.coord_sys = 0
34+
geometry.dims = 2
35+
geometry.prob_hi = 45. 45.
36+
geometry.prob_lo = -45. -45.
37+
38+
# ion
39+
ion.charge = q_e
40+
ion.injection_style = "SingleParticle"
41+
ion.mass = 9e-22
42+
ion.single_particle_pos = 0. 0. 0.
43+
ion.single_particle_vel = -0.5 0. -0.5
44+
ion.single_particle_weight = 1.
45+
46+
# max_step
47+
max_step = 50
48+
49+
# particles
50+
particles.species_names = electron ion
51+
52+
# psatd
53+
psatd.nox = 4
54+
psatd.noz = 4
55+
psatd.nx_guard = 20
56+
psatd.nz_guard = 20
57+
psatd.periodic_single_box_fft = 0
58+
psatd.update_with_rho = 0
59+
60+
# warpx
61+
warpx.cfl = 0.9999
62+
warpx.do_nodal = 1
63+
warpx.serialize_initial_conditions = 1
64+
warpx.use_filter = 1
65+
warpx.verbose = 1
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
# algo
2+
algo.charge_deposition = standard
3+
algo.current_deposition = vay
4+
algo.maxwell_solver = psatd
5+
algo.particle_pusher = vay
6+
algo.particle_shape = 3
7+
8+
# amr
9+
amr.max_level = 0
10+
amr.n_cell = 64 64 64
11+
12+
# boundary
13+
boundary.field_hi = periodic periodic periodic
14+
boundary.field_lo = periodic periodic periodic
15+
16+
# diag
17+
diag1.diag_type = Full
18+
diag1.intervals = 25
19+
diag1.fields_to_plot = Bx By Bz Ex Ey Ez jx jy jz rho divE
20+
21+
# diagnostics
22+
diagnostics.diags_names = diag1
23+
24+
# electron
25+
electron.charge = -q_e
26+
electron.injection_style = "SingleParticle"
27+
electron.mass = 9e-22
28+
electron.single_particle_pos = 0. 0. 0.
29+
electron.single_particle_vel = 0.5 0.5 0.5
30+
electron.single_particle_weight = 1.
31+
32+
# geometry
33+
geometry.coord_sys = 0
34+
geometry.dims = 3
35+
geometry.prob_hi = 45. 45. 45.
36+
geometry.prob_lo = -45. -45. -45.
37+
38+
# ion
39+
ion.charge = q_e
40+
ion.injection_style = "SingleParticle"
41+
ion.mass = 9e-22
42+
ion.single_particle_pos = 0. 0. 0.
43+
ion.single_particle_vel = -0.5 -0.5 -0.5
44+
ion.single_particle_weight = 1.
45+
46+
# max_step
47+
max_step = 25
48+
49+
# particles
50+
particles.species_names = electron ion
51+
52+
# psatd
53+
psatd.nox = 4
54+
psatd.noy = 4
55+
psatd.noz = 4
56+
psatd.nx_guard = 20
57+
psatd.ny_guard = 20
58+
psatd.nz_guard = 20
59+
psatd.periodic_single_box_fft = 0
60+
psatd.update_with_rho = 0
61+
62+
# warpx
63+
warpx.cfl = 0.9999
64+
warpx.do_nodal = 1
65+
warpx.serialize_initial_conditions = 1
66+
warpx.use_filter = 1
67+
warpx.verbose = 1
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{
2+
"electron": {
3+
"particle_cpu": 0.0,
4+
"particle_id": 1.0,
5+
"particle_momentum_x": 1.349066061e-13,
6+
"particle_momentum_y": 0.0,
7+
"particle_momentum_z": 1.349066061e-13,
8+
"particle_position_x": 14.351043713724023,
9+
"particle_position_y": 14.351043713724023,
10+
"particle_weight": 1.0
11+
},
12+
"ion": {
13+
"particle_cpu": 0.0,
14+
"particle_id": 2.0,
15+
"particle_momentum_x": 1.349066061e-13,
16+
"particle_momentum_y": 0.0,
17+
"particle_momentum_z": 1.349066061e-13,
18+
"particle_position_x": 14.351043713724023,
19+
"particle_position_y": 14.351043713724023,
20+
"particle_weight": 1.0
21+
},
22+
"lev=0": {
23+
"By": 4.8850423335524976e-15,
24+
"Ex": 1.5748554237210878e-06,
25+
"Ez": 1.5745640654762762e-06,
26+
"divE": 7.364434433257197e-08,
27+
"jx": 7.96477185276095e-11,
28+
"jz": 7.971109000864354e-11,
29+
"rho": 6.481496783075554e-19
30+
}
31+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{
2+
"electron": {
3+
"particle_cpu": 0.0,
4+
"particle_id": 1.0,
5+
"particle_momentum_x": 1.349066061e-13,
6+
"particle_momentum_y": 1.349066061e-13,
7+
"particle_momentum_z": 1.349066061e-13,
8+
"particle_position_x": 13.286484722880228,
9+
"particle_position_y": 13.286484722880228,
10+
"particle_position_z": 13.286484722880228,
11+
"particle_weight": 1.0
12+
},
13+
"ion": {
14+
"particle_cpu": 0.0,
15+
"particle_id": 2.0,
16+
"particle_momentum_x": 1.349066061e-13,
17+
"particle_momentum_y": 1.349066061e-13,
18+
"particle_momentum_z": 1.349066061e-13,
19+
"particle_position_x": 13.286484722880228,
20+
"particle_position_y": 13.286484722880228,
21+
"particle_position_z": 13.286484722880228,
22+
"particle_weight": 1.0
23+
},
24+
"lev=0": {
25+
"Bx": 8.481813081143231e-16,
26+
"By": 8.481813081143229e-16,
27+
"Bz": 8.481813081143229e-16,
28+
"Ex": 3.0819459288113856e-07,
29+
"Ey": 3.0819459288113856e-07,
30+
"Ez": 3.0819459288113856e-07,
31+
"divE": 1.317737929174611e-08,
32+
"jx": 1.3111027684847054e-11,
33+
"jy": 1.311102768484716e-11,
34+
"jz": 1.3111027684847218e-11,
35+
"rho": 1.1522660947689872e-19
36+
}
37+
}

Regression/WarpX-tests.ini

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3409,3 +3409,39 @@ compileTest = 0
34093409
doVis = 0
34103410
compareParticles = 1
34113411
analysisRoutine = Examples/Tests/ion_stopping/analysis_ion_stopping.py
3412+
3413+
[VayDeposition2D]
3414+
buildDir = .
3415+
inputFile = Examples/Tests/VayDeposition/inputs_2d
3416+
runtime_params =
3417+
dim = 2
3418+
addToCompileString = USE_PSATD=TRUE
3419+
cmakeSetupOpts = -DWarpX_DIMS=2 -DWarpX_PSATD=ON
3420+
restartTest = 0
3421+
useMPI = 1
3422+
numprocs = 2
3423+
useOMP = 1
3424+
numthreads = 1
3425+
compileTest = 0
3426+
doVis = 0
3427+
compareParticles = 1
3428+
particleTypes = electron ion
3429+
analysisRoutine = Examples/Tests/VayDeposition/analysis.py
3430+
3431+
[VayDeposition3D]
3432+
buildDir = .
3433+
inputFile = Examples/Tests/VayDeposition/inputs_3d
3434+
runtime_params =
3435+
dim = 3
3436+
addToCompileString = USE_PSATD=TRUE
3437+
cmakeSetupOpts = -DWarpX_DIMS=3 -DWarpX_PSATD=ON
3438+
restartTest = 0
3439+
useMPI = 1
3440+
numprocs = 2
3441+
useOMP = 1
3442+
numthreads = 1
3443+
compileTest = 0
3444+
doVis = 0
3445+
compareParticles = 1
3446+
particleTypes = electron ion
3447+
analysisRoutine = Examples/Tests/VayDeposition/analysis.py

0 commit comments

Comments
 (0)