1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
#!/usr/bin/env python3
#
# Copyright 2021 Remi Lehe
#
# This file is part of WarpX.
#
# License: BSD-3-Clause-LBNL
"""
This script tests the continuous injection of particles in
the azimuthal direction, in RZ geometry.
In this tests, relativistic electrons are continuously injected
in a uniform Bz field, at a radius that corresponds to their
Larmor radius. Therefore, throughout the simulations, these
electrons always stay at the same radius, while gyrating
around the z axis.
This script tests that:
- At the end of the simulation, the electrons are all at
the correct radius. (This indirectly checks that the
electrons were injected with the correct velocity
throughout the simulation, and in particular that this
velocity was along the azimuthal direction.)
- The total number of electrons corresponds to the expected flux.
"""
import os
import re
import sys
import numpy as np
import yt
sys.path.insert(1, '../../../../warpx/Regression/Checksum/')
import checksumAPI
yt.funcs.mylog.setLevel(0)
# Open plotfile specified in command line
fn = sys.argv[1]
ds = yt.load( fn )
t_max = ds.current_time.item() # time of simulation
# Total number of electrons expected:
flux = 1. # in m^-2.s^-1, from the input script
emission_surface = 0.8 # in m^2,
# given that xmin = 1.5, xmax = 1.9, zmin = -1.0, zmax = 1.
n_tot = flux * emission_surface * t_max
# Read particle data
ad = ds.all_data()
r = ad['particle_position_x'].to_ndarray() # Corresponds to the radial coordinate in RZ
w = ad['particle_weight'].to_ndarray()
# Check that the number of particles matches the expected one
assert np.allclose( w.sum(), n_tot, rtol=0.05 )
# Check that the particles are at the right radius
assert np.all( (r >= 1.48) & (r <=1.92) )
test_name = os.path.split(os.getcwd())[1]
if re.search( 'single_precision', fn ):
checksumAPI.evaluate_checksum(test_name, fn, rtol=1.e-3)
else:
checksumAPI.evaluate_checksum(test_name, fn)
|