xfields 0.22.0__tar.gz → 0.22.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {xfields-0.22.0/xfields.egg-info → xfields-0.22.2}/PKG-INFO +1 -1
- xfields-0.22.2/xfields/_version.py +1 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/waketracker/convolution.py +19 -37
- {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/bigaussian_src/bigaussian.h +4 -2
- {xfields-0.22.0 → xfields-0.22.2/xfields.egg-info}/PKG-INFO +1 -1
- {xfields-0.22.0 → xfields-0.22.2}/xfields.egg-info/SOURCES.txt +0 -69
- xfields-0.22.0/.gitignore +0 -13
- xfields-0.22.0/contributors_and_credits.txt +0 -16
- xfields-0.22.0/examples/000_sphere/.gitignore +0 -1
- xfields-0.22.0/examples/000_sphere/000_sphere_xfields3D.py +0 -167
- xfields-0.22.0/examples/000_sphere/001_sphere_xfields2p5D.py +0 -170
- xfields-0.22.0/examples/001_spacecharge/000_spacecharge_example.py +0 -152
- xfields-0.22.0/examples/001_spacecharge/001_shared_fieldmap.py +0 -152
- xfields-0.22.0/examples/001_spacecharge/002_spacecharge_with_losses.py +0 -33
- xfields-0.22.0/examples/002_beambeam/000_beambeam.py +0 -191
- xfields-0.22.0/examples/002_beambeam/001_beambeam3d.py +0 -165
- xfields-0.22.0/examples/002_beambeam/002_beambeam3d_old_interface.py +0 -136
- xfields-0.22.0/examples/002_beambeam/003_beambeam3d_strongstrong_track.py +0 -188
- xfields-0.22.0/examples/002_beambeam/004_beambeam2d_strongstrong_pyheadtail.py +0 -215
- xfields-0.22.0/examples/002_beambeam/005_beambeam6d_strongstrong_pipeline.py +0 -201
- xfields-0.22.0/examples/002_beambeam/006_beambeam6d_strongstrong_pipeline_MPI2Procs.py +0 -221
- xfields-0.22.0/examples/002_beambeam/007_beambeam3d_beamstrahlung.py +0 -381
- xfields-0.22.0/examples/002_beambeam/008_beambeam6d_collective_beamstrahlung.py +0 -392
- xfields-0.22.0/examples/002_beambeam/009_constant_charge_slicing.py +0 -46
- xfields-0.22.0/examples/002_beambeam/010_beambeam2d_strongstrong_pipeline.py +0 -167
- xfields-0.22.0/examples/002_beambeam/010_beambeam2d_weakstrong.py +0 -115
- xfields-0.22.0/examples/002_beambeam/011a_inspect_kick_vs_zeta_hirata.py +0 -98
- xfields-0.22.0/examples/002_beambeam/011b_lhc_one_bb.py +0 -65
- xfields-0.22.0/examples/002_beambeam/011c_dev_pic.py +0 -313
- xfields-0.22.0/examples/002_beambeam/011d_pic_pipeline.py +0 -152
- xfields-0.22.0/examples/002_beambeam/011e_multiple_kicks_multiple_turns.py +0 -232
- xfields-0.22.0/examples/002_beambeam/011g_pic_pipeline_gpu.py +0 -164
- xfields-0.22.0/examples/003_electronlens/electronlens_interpolated_ideal.py +0 -88
- xfields-0.22.0/examples/004_fadeeva/000_check_fadeeva.py +0 -139
- xfields-0.22.0/examples/005_ibs/000_growth_rates_from_parameters_no_vdisp.py +0 -118
- xfields-0.22.0/examples/005_ibs/001_growth_rates_from_parameters_with_vdisp.py +0 -75
- xfields-0.22.0/examples/005_ibs/002_growth_rates_from_particles.py +0 -118
- xfields-0.22.0/examples/005_ibs/003_tracking_with_kicks.py +0 -66
- xfields-0.22.0/examples/005_ibs/004_tracking_with_kicks_tbt_emittances.py +0 -94
- xfields-0.22.0/examples/longitudinal_kick_in_spacecharge/000_gaussian_3d.py +0 -140
- xfields-0.22.0/examples/longitudinal_kick_in_spacecharge/001_dev_spacecharge.py +0 -96
- xfields-0.22.0/examples/longitudinal_kick_in_spacecharge/002_sps_ion.py +0 -124
- xfields-0.22.0/examples/longitudinal_kick_in_spacecharge/003_sps_ion_with_builtin_z_kick.py +0 -118
- xfields-0.22.0/examples/longitudinal_kick_in_spacecharge/004_qgaussian_derivative.py +0 -63
- xfields-0.22.0/examples/longitudinal_kick_in_spacecharge/sps_ion_2021.json +0 -1
- xfields-0.22.0/examples/slicer/000_dev.py +0 -876
- xfields-0.22.0/examples/slicer/001_slicer_operations.py +0 -29
- xfields-0.22.0/examples/slicer/002a_example_slicer.py +0 -142
- xfields-0.22.0/examples/slicer/002b_example_slicer_gpu.py +0 -145
- xfields-0.22.0/examples/slicer/003_multilog.py +0 -22
- xfields-0.22.0/examples/slicer/004_log_moments.py +0 -151
- xfields-0.22.0/examples/slicer/005a_moment_profile.py +0 -75
- xfields-0.22.0/examples/slicer/005b_moment_profile_gpu.py +0 -89
- xfields-0.22.0/examples/slicer/005c_moment_profile_from_wake.py +0 -53
- xfields-0.22.0/examples/slicer/005d_moment_profile_from_wake_gpu.py +0 -59
- xfields-0.22.0/mktest +0 -1
- xfields-0.22.0/release.sh +0 -20
- xfields-0.22.0/requirements.txt +0 -2
- xfields-0.22.0/test_data/HLLHC_wake.dat +0 -2801
- xfields-0.22.0/test_data/pyecloud_pinch/Pinch_creation/.gitignore +0 -4
- xfields-0.22.0/test_data/pyecloud_pinch/Pinch_creation/000_buildup.py +0 -4
- xfields-0.22.0/test_data/pyecloud_pinch/Pinch_creation/001_pinch.py +0 -131
- xfields-0.22.0/test_data/pyecloud_pinch/Pinch_creation/beam.beam +0 -33
- xfields-0.22.0/test_data/pyecloud_pinch/Pinch_creation/filemanager.py +0 -54
- xfields-0.22.0/test_data/pyecloud_pinch/Pinch_creation/machine_parameters.input +0 -51
- xfields-0.22.0/test_data/pyecloud_pinch/Pinch_creation/secondary_emission_parameters.input +0 -16
- xfields-0.22.0/test_data/pyecloud_pinch/Pinch_creation/simulation_parameters.input +0 -81
- xfields-0.22.0/test_data/pyecloud_pinch/README.md +0 -35
- xfields-0.22.0/test_data/pyecloud_pinch/eclouds.json +0 -5838
- xfields-0.22.0/test_data/pyecloud_pinch/refined_Pinch_MTI1.0_MLI1.0_DTO2.0_DLO1.0.h5 +0 -0
- xfields-0.22.0/test_data/test_beamstrahlung/README.txt +0 -3
- xfields-0.22.0/test_data/test_beamstrahlung/test_beamstrahlung_guineapig_ttbar2_beamstrahlung_photon_hist.txt +0 -9
- xfields-0.22.0/tests/ibs_conftest.py +0 -158
- xfields-0.22.0/tests/pytest_onebyone.sh +0 -7
- xfields-0.22.0/update_cprght_statement.py +0 -48
- xfields-0.22.0/xfields/_version.py +0 -1
- {xfields-0.22.0 → xfields-0.22.2}/LICENSE +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/MANIFEST.in +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/README.md +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/pyproject.toml +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/setup.cfg +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/setup.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_beambeam2d.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_beambeam3d_part1.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_beambeam3d_part2.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_beambeam_pic.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_beambeamstrongstrong2d.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_beambeamstrongstrong2d_pi.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_beambeamstrongstrong3d.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_beambeamstrongstrong3d_pi.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_beamstrahlung.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_bhabha.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_cerrf.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_compressed_profile_interp_result.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_constant_charge_slicing.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_electroncloud.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_electronlens_interpolated.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_element_with_slicer_filling_scheme.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_ibs_growth_rates.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_ibs_kicks.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_iptocp_strongstrong.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_lumi.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_mean_std.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_profiles.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_slicer.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_spacecharge.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/tests/test_temp_slicer.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/__init__.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/__init__.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/beambeam2d.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/beambeam3d.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/beambeam3dpic.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/beambeam_src/beambeam.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/beambeam_src/beambeam2d.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/beambeam_src/beambeam3d.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/beambeam_src/beambeam3d_methods_for_strongstrong.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/beambeam_src/beambeam3d_ref_frame_changes.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/beambeam_src/beambeam3d_transport_sigmas.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/beambeam_src/beambeampic_methods.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/electroncloud.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/electroncloud_src/electroncloud.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/electronlens_interpolated.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/electronlens_src/electronlens_interpolated.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/element_with_slicer.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/spacecharge.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/spacecharge_src/spacecharge3d.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/spacecharge_src/spacechargebigaussian.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/temp_slicer.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/waketracker/__init__.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/waketracker/waketracker.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/config_tools/__init__.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/config_tools/beambeam_config_tools/__init__.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/config_tools/beambeam_config_tools/_madpoint.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/config_tools/beambeam_config_tools/config_tools.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/config_tools/beambeam_config_tools/orbit_dependent_configuration_tools.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/config_tools/electroncloud_config_tools.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/config_tools/spacecharge_config_tools.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/__init__.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/bigaussian.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/bigaussian_src/bigaussian_fieldmap.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/bigaussian_src/compute_gx_gy.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/bigaussian_src/faddeeva.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/bigaussian_src/faddeeva_cernlib.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/bigaussian_src/faddeeva_mit.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/interpolated.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/interpolated_src/central_diff.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/interpolated_src/charge_deposition.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/interpolated_src/cubic_interpolators.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/interpolated_src/linear_interpolators.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/interpolated_src/tricubic_coefficients.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/tricubicinterpolated.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/general.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/headers/beamstrahlung_spectrum.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/headers/bhabha_spectrum.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/headers/compressed_profile.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/headers/compute_slice_moments.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/headers/constants.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/headers/particle_states.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/headers/power_n.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/headers/sincos.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/ibs/__init__.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/ibs/_analytical.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/ibs/_api.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/ibs/_formulary.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/ibs/_kicks.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/longitudinal_profiles/__init__.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/longitudinal_profiles/coasting.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/longitudinal_profiles/qgaussian.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/longitudinal_profiles/qgaussian_src/qgaussian.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/slicers/__init__.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/slicers/compressed_profile.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/slicers/slicers_src/uniform_bin_slicer.h +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/slicers/uniform.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/solvers/__init__.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/solvers/base.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/solvers/fftsolvers.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/test_support/__init__.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields/test_support/temp_makepart.py +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields.egg-info/dependency_links.txt +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields.egg-info/requires.txt +0 -0
- {xfields-0.22.0 → xfields-0.22.2}/xfields.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.22.2"
|
|
@@ -1,20 +1,11 @@
|
|
|
1
1
|
import numpy as np
|
|
2
|
-
import xtrack as xt
|
|
3
|
-
import xobjects as xo
|
|
4
|
-
|
|
5
|
-
try:
|
|
6
|
-
import cupy
|
|
7
|
-
cupy_imported = True
|
|
8
|
-
except ImportError:
|
|
9
|
-
cupy_imported = False
|
|
10
|
-
|
|
11
2
|
from scipy.constants import e as qe
|
|
12
3
|
|
|
13
|
-
|
|
4
|
+
import xobjects as xo
|
|
14
5
|
|
|
15
6
|
|
|
16
|
-
class _ConvData
|
|
17
|
-
|
|
7
|
+
class _ConvData:
|
|
8
|
+
"""
|
|
18
9
|
This class is used to perform the convolution of the wakefields with the
|
|
19
10
|
beam. It is not meant to be used directly by the user, but only by the
|
|
20
11
|
WakeTracker class.
|
|
@@ -24,10 +15,10 @@ class _ConvData(xt.BeamElement):
|
|
|
24
15
|
which was originally developed for PyHEADTAIL by J. Komppula
|
|
25
16
|
(https://indico.cern.ch/event/735184/contributions/3032237/attachments/1668727/2676169/Multibunch_pyheadtail_algorithms.pdf)
|
|
26
17
|
and N. Mounet (https://indico.cern.ch/event/735184/contributions/3032242/attachments/1668613/2676354/20180615_PyHEADTAIL_convolution_algorithm.pdf).
|
|
27
|
-
|
|
18
|
+
"""
|
|
28
19
|
def __init__(self, component, waketracker=None, _flatten=False, log_moments=None,
|
|
29
|
-
|
|
30
|
-
|
|
20
|
+
_context=xo.context_default):
|
|
21
|
+
"""
|
|
31
22
|
Parameters:
|
|
32
23
|
-----------
|
|
33
24
|
component: xfields.beam_elements.waketracker.WakeField
|
|
@@ -36,13 +27,13 @@ class _ConvData(xt.BeamElement):
|
|
|
36
27
|
The WakeTracker object that will use this ConvData object
|
|
37
28
|
log_moments: list of str
|
|
38
29
|
List of moments to be logged in the moments_data object
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
self.xoinitialize(**kwargs)
|
|
30
|
+
"""
|
|
42
31
|
|
|
43
32
|
# for now we do not support Pyopencl to avoid complications with the
|
|
44
33
|
# rfft and irfft below
|
|
45
|
-
|
|
34
|
+
self._context = _context
|
|
35
|
+
|
|
36
|
+
if type(self._context) == xo.ContextPyopencl:
|
|
46
37
|
raise NotImplementedError('Pyopencl not implemented yet')
|
|
47
38
|
|
|
48
39
|
self._flatten = _flatten
|
|
@@ -72,24 +63,14 @@ class _ConvData(xt.BeamElement):
|
|
|
72
63
|
raise NotImplementedError('Higher order moments not implemented yet')
|
|
73
64
|
|
|
74
65
|
def my_rfft(self, data, **kwargs):
|
|
75
|
-
if type(self.
|
|
76
|
-
return
|
|
77
|
-
elif type(self.context) == xo.ContextCupy:
|
|
78
|
-
if cupy_imported:
|
|
79
|
-
return cupy.fft.rfft(data, **kwargs)
|
|
80
|
-
else:
|
|
81
|
-
raise ImportError('Cupy not installed')
|
|
66
|
+
if type(self._context) in (xo.ContextCpu, xo.ContextCupy):
|
|
67
|
+
return self._context.nplike_lib.fft.rfft(data, **kwargs)
|
|
82
68
|
else:
|
|
83
69
|
raise NotImplementedError('Waketacker implemented only for CPU and Cupy')
|
|
84
70
|
|
|
85
71
|
def my_irfft(self, data, **kwargs):
|
|
86
|
-
if type(self.
|
|
87
|
-
return
|
|
88
|
-
elif type(self.context) == xo.ContextCupy:
|
|
89
|
-
if cupy_imported:
|
|
90
|
-
return cupy.fft.irfft(data, **kwargs)
|
|
91
|
-
else:
|
|
92
|
-
raise ImportError('Cupy not installed')
|
|
72
|
+
if type(self._context) in (xo.ContextCpu, xo.ContextCupy):
|
|
73
|
+
return self._context.nplike_lib.fft.irfft(data, **kwargs)
|
|
93
74
|
else:
|
|
94
75
|
raise NotImplementedError('Waketacker implemented only for CPU and Cupy')
|
|
95
76
|
|
|
@@ -119,11 +100,12 @@ class _ConvData(xt.BeamElement):
|
|
|
119
100
|
assert beta0 is not None
|
|
120
101
|
# here below I had to add float() to beta0 because when using Cupy
|
|
121
102
|
# context particles.beta0[0] turns out to be a 0d array. To be checked
|
|
122
|
-
self.G_aux = self.
|
|
123
|
-
|
|
103
|
+
self.G_aux = self._context.nparray_to_context_array(
|
|
104
|
+
self.component.function_vs_zeta(
|
|
105
|
+
zeta=self.z_wake, beta0=float(beta0), dzeta=moments_data.dz))
|
|
124
106
|
|
|
125
107
|
# only positive frequencies because we are using rfft
|
|
126
|
-
phase_term = self.
|
|
108
|
+
phase_term = self._context.nparray_to_context_array(np.exp(
|
|
127
109
|
1j * 2 * np.pi * np.arange(self._M_aux//2 + 1) *
|
|
128
110
|
((self._N_S - 1) * self._N_aux + self._N_1) / self._M_aux))
|
|
129
111
|
|
|
@@ -204,7 +186,7 @@ class _ConvData(xt.BeamElement):
|
|
|
204
186
|
if isinstance(moment_names, str):
|
|
205
187
|
moment_names = [moment_names]
|
|
206
188
|
|
|
207
|
-
rho_aux = self.
|
|
189
|
+
rho_aux = self._context.nplike_lib.ones(
|
|
208
190
|
shape=moments_data['result'].shape, dtype=np.float64)
|
|
209
191
|
|
|
210
192
|
for nn in moment_names:
|
|
@@ -39,8 +39,10 @@ void get_transv_field_gauss_round(
|
|
|
39
39
|
double r2, temp;
|
|
40
40
|
|
|
41
41
|
r2 = (x-Delta_x)*(x-Delta_x)+(y-Delta_y)*(y-Delta_y);
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
double const inv_sig2 = 1./(sigma*sigma);
|
|
43
|
+
double const r2_sig2 = r2 * inv_sig2;
|
|
44
|
+
if (r2_sig2<1e-10) temp = inv_sig2/(4.*PI*EPSILON_0); //linearised
|
|
45
|
+
else temp = inv_sig2 * (1-exp(-0.5*r2_sig2))/(2.*PI*EPSILON_0*r2_sig2);
|
|
44
46
|
|
|
45
47
|
(*Ex) = temp * (x-Delta_x);
|
|
46
48
|
(*Ey) = temp * (y-Delta_y);
|
|
@@ -1,77 +1,8 @@
|
|
|
1
|
-
.gitignore
|
|
2
1
|
LICENSE
|
|
3
2
|
MANIFEST.in
|
|
4
3
|
README.md
|
|
5
|
-
contributors_and_credits.txt
|
|
6
|
-
mktest
|
|
7
4
|
pyproject.toml
|
|
8
|
-
release.sh
|
|
9
|
-
requirements.txt
|
|
10
5
|
setup.py
|
|
11
|
-
update_cprght_statement.py
|
|
12
|
-
examples/000_sphere/.gitignore
|
|
13
|
-
examples/000_sphere/000_sphere_xfields3D.py
|
|
14
|
-
examples/000_sphere/001_sphere_xfields2p5D.py
|
|
15
|
-
examples/001_spacecharge/000_spacecharge_example.py
|
|
16
|
-
examples/001_spacecharge/001_shared_fieldmap.py
|
|
17
|
-
examples/001_spacecharge/002_spacecharge_with_losses.py
|
|
18
|
-
examples/002_beambeam/000_beambeam.py
|
|
19
|
-
examples/002_beambeam/001_beambeam3d.py
|
|
20
|
-
examples/002_beambeam/002_beambeam3d_old_interface.py
|
|
21
|
-
examples/002_beambeam/003_beambeam3d_strongstrong_track.py
|
|
22
|
-
examples/002_beambeam/004_beambeam2d_strongstrong_pyheadtail.py
|
|
23
|
-
examples/002_beambeam/005_beambeam6d_strongstrong_pipeline.py
|
|
24
|
-
examples/002_beambeam/006_beambeam6d_strongstrong_pipeline_MPI2Procs.py
|
|
25
|
-
examples/002_beambeam/007_beambeam3d_beamstrahlung.py
|
|
26
|
-
examples/002_beambeam/008_beambeam6d_collective_beamstrahlung.py
|
|
27
|
-
examples/002_beambeam/009_constant_charge_slicing.py
|
|
28
|
-
examples/002_beambeam/010_beambeam2d_strongstrong_pipeline.py
|
|
29
|
-
examples/002_beambeam/010_beambeam2d_weakstrong.py
|
|
30
|
-
examples/002_beambeam/011a_inspect_kick_vs_zeta_hirata.py
|
|
31
|
-
examples/002_beambeam/011b_lhc_one_bb.py
|
|
32
|
-
examples/002_beambeam/011c_dev_pic.py
|
|
33
|
-
examples/002_beambeam/011d_pic_pipeline.py
|
|
34
|
-
examples/002_beambeam/011e_multiple_kicks_multiple_turns.py
|
|
35
|
-
examples/002_beambeam/011g_pic_pipeline_gpu.py
|
|
36
|
-
examples/003_electronlens/electronlens_interpolated_ideal.py
|
|
37
|
-
examples/004_fadeeva/000_check_fadeeva.py
|
|
38
|
-
examples/005_ibs/000_growth_rates_from_parameters_no_vdisp.py
|
|
39
|
-
examples/005_ibs/001_growth_rates_from_parameters_with_vdisp.py
|
|
40
|
-
examples/005_ibs/002_growth_rates_from_particles.py
|
|
41
|
-
examples/005_ibs/003_tracking_with_kicks.py
|
|
42
|
-
examples/005_ibs/004_tracking_with_kicks_tbt_emittances.py
|
|
43
|
-
examples/longitudinal_kick_in_spacecharge/000_gaussian_3d.py
|
|
44
|
-
examples/longitudinal_kick_in_spacecharge/001_dev_spacecharge.py
|
|
45
|
-
examples/longitudinal_kick_in_spacecharge/002_sps_ion.py
|
|
46
|
-
examples/longitudinal_kick_in_spacecharge/003_sps_ion_with_builtin_z_kick.py
|
|
47
|
-
examples/longitudinal_kick_in_spacecharge/004_qgaussian_derivative.py
|
|
48
|
-
examples/longitudinal_kick_in_spacecharge/sps_ion_2021.json
|
|
49
|
-
examples/slicer/000_dev.py
|
|
50
|
-
examples/slicer/001_slicer_operations.py
|
|
51
|
-
examples/slicer/002a_example_slicer.py
|
|
52
|
-
examples/slicer/002b_example_slicer_gpu.py
|
|
53
|
-
examples/slicer/003_multilog.py
|
|
54
|
-
examples/slicer/004_log_moments.py
|
|
55
|
-
examples/slicer/005a_moment_profile.py
|
|
56
|
-
examples/slicer/005b_moment_profile_gpu.py
|
|
57
|
-
examples/slicer/005c_moment_profile_from_wake.py
|
|
58
|
-
examples/slicer/005d_moment_profile_from_wake_gpu.py
|
|
59
|
-
test_data/HLLHC_wake.dat
|
|
60
|
-
test_data/pyecloud_pinch/README.md
|
|
61
|
-
test_data/pyecloud_pinch/eclouds.json
|
|
62
|
-
test_data/pyecloud_pinch/refined_Pinch_MTI1.0_MLI1.0_DTO2.0_DLO1.0.h5
|
|
63
|
-
test_data/pyecloud_pinch/Pinch_creation/.gitignore
|
|
64
|
-
test_data/pyecloud_pinch/Pinch_creation/000_buildup.py
|
|
65
|
-
test_data/pyecloud_pinch/Pinch_creation/001_pinch.py
|
|
66
|
-
test_data/pyecloud_pinch/Pinch_creation/beam.beam
|
|
67
|
-
test_data/pyecloud_pinch/Pinch_creation/filemanager.py
|
|
68
|
-
test_data/pyecloud_pinch/Pinch_creation/machine_parameters.input
|
|
69
|
-
test_data/pyecloud_pinch/Pinch_creation/secondary_emission_parameters.input
|
|
70
|
-
test_data/pyecloud_pinch/Pinch_creation/simulation_parameters.input
|
|
71
|
-
test_data/test_beamstrahlung/README.txt
|
|
72
|
-
test_data/test_beamstrahlung/test_beamstrahlung_guineapig_ttbar2_beamstrahlung_photon_hist.txt
|
|
73
|
-
tests/ibs_conftest.py
|
|
74
|
-
tests/pytest_onebyone.sh
|
|
75
6
|
tests/test_beambeam2d.py
|
|
76
7
|
tests/test_beambeam3d_part1.py
|
|
77
8
|
tests/test_beambeam3d_part2.py
|
xfields-0.22.0/.gitignore
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
The following people contributed to the development of this package:
|
|
2
|
-
|
|
3
|
-
CERN contributors:
|
|
4
|
-
- H. Bartosik
|
|
5
|
-
- X. Buffat
|
|
6
|
-
- R. De Maria
|
|
7
|
-
- L. Giacomel
|
|
8
|
-
- G. Iadarola
|
|
9
|
-
- P. Kicsiny
|
|
10
|
-
- S. Lopaciuk
|
|
11
|
-
- K. Paraschou
|
|
12
|
-
- M. Schwinzerl
|
|
13
|
-
- F. Soubelet
|
|
14
|
-
- E. Waagaard
|
|
15
|
-
|
|
16
|
-
The Particle In Cell implementation is largely based on the PyPIC package (https://github.com/pycomplete/pypic)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
picsphere.pkl
|
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
# copyright ################################# #
|
|
2
|
-
# This file is part of the Xfields Package. #
|
|
3
|
-
# Copyright (c) CERN, 2021. #
|
|
4
|
-
# ########################################### #
|
|
5
|
-
|
|
6
|
-
import time
|
|
7
|
-
|
|
8
|
-
import numpy as np
|
|
9
|
-
from numpy.random import rand
|
|
10
|
-
from scipy.constants import epsilon_0
|
|
11
|
-
from numpy import pi
|
|
12
|
-
|
|
13
|
-
from xobjects import ContextCpu, ContextCupy, ContextPyopencl
|
|
14
|
-
from xfields import TriLinearInterpolatedFieldMap
|
|
15
|
-
|
|
16
|
-
context = ContextCpu()
|
|
17
|
-
context = ContextCupy(default_block_size=256)
|
|
18
|
-
#context = ContextPyopencl()
|
|
19
|
-
|
|
20
|
-
print(repr(context))
|
|
21
|
-
|
|
22
|
-
import matplotlib.pyplot as plt
|
|
23
|
-
plt.close('all')
|
|
24
|
-
|
|
25
|
-
center_xyz = np.array([0.1, 0.2, -0.3])
|
|
26
|
-
radius = .5
|
|
27
|
-
n_part_cube = 10000000
|
|
28
|
-
|
|
29
|
-
x_cube = radius*(2. * rand(n_part_cube) - 1.) + center_xyz[0]
|
|
30
|
-
y_cube = radius*(2. * rand(n_part_cube) - 1.) + center_xyz[1]
|
|
31
|
-
z_cube = radius*(2. * rand(n_part_cube) - 1.) + center_xyz[2]
|
|
32
|
-
|
|
33
|
-
mask_sphere = ((x_cube - center_xyz[0])**2
|
|
34
|
-
+ (y_cube - center_xyz[1])**2
|
|
35
|
-
+ (z_cube - center_xyz[2])**2) < radius**2
|
|
36
|
-
x = x_cube[mask_sphere]
|
|
37
|
-
y = y_cube[mask_sphere]
|
|
38
|
-
z = z_cube[mask_sphere]
|
|
39
|
-
pweights = 1. + 0*x
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
# PIC
|
|
43
|
-
x_lim = (-1.1, 1.)
|
|
44
|
-
y_lim = (-1.2, 1.)
|
|
45
|
-
z_lim = (-1.3, 1.)
|
|
46
|
-
|
|
47
|
-
nx = 128
|
|
48
|
-
ny = 128
|
|
49
|
-
nz = 200
|
|
50
|
-
|
|
51
|
-
theta_test = 70. * np.pi/360
|
|
52
|
-
phi_test = 300 * np.pi/360.
|
|
53
|
-
r_test = 2.5*radius*np.linspace(-1, 1., 1000)
|
|
54
|
-
|
|
55
|
-
x0_test = r_test * np.sin(theta_test) * np.cos(phi_test)
|
|
56
|
-
y0_test = r_test * np.sin(theta_test) * np.sin(phi_test)
|
|
57
|
-
z0_test = r_test * np.cos(theta_test)
|
|
58
|
-
|
|
59
|
-
x_test = center_xyz[0] + x0_test
|
|
60
|
-
y_test = center_xyz[1] + y0_test
|
|
61
|
-
z_test = center_xyz[2] + z0_test
|
|
62
|
-
|
|
63
|
-
# Moving particles and test coordinates to GPU (if needed)
|
|
64
|
-
np2platf = context.nparray_to_context_array
|
|
65
|
-
x_dev = np2platf(x)
|
|
66
|
-
y_dev = np2platf(y)
|
|
67
|
-
z_dev = np2platf(z)
|
|
68
|
-
pweights_dev = np2platf(pweights)
|
|
69
|
-
x_test_dev = np2platf(x_test)
|
|
70
|
-
y_test_dev = np2platf(y_test)
|
|
71
|
-
z_test_dev = np2platf(z_test)
|
|
72
|
-
|
|
73
|
-
###############
|
|
74
|
-
# Actual test #
|
|
75
|
-
###############
|
|
76
|
-
|
|
77
|
-
# Build fieldmap object
|
|
78
|
-
fmap = TriLinearInterpolatedFieldMap(
|
|
79
|
-
_context=context,
|
|
80
|
-
x_range=x_lim, nx=nx,
|
|
81
|
-
y_range=y_lim, ny=ny,
|
|
82
|
-
z_range=z_lim, nz=nz,
|
|
83
|
-
solver='FFTSolver3D')
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
# Compute potential
|
|
87
|
-
n_rep = 4
|
|
88
|
-
for _ in range(n_rep):
|
|
89
|
-
t1 = time.time()
|
|
90
|
-
fmap.update_from_particles(x_p=x_dev, y_p=y_dev, z_p=z_dev,
|
|
91
|
-
ncharges_p=pweights_dev, q0_coulomb=1.)
|
|
92
|
-
|
|
93
|
-
# Check on the x axis
|
|
94
|
-
(rho_test_dev, phi_test_dev, dx_test_dev, dy_test_dev,
|
|
95
|
-
dz_test_dev) = fmap.get_values_at_points(
|
|
96
|
-
x=x_test_dev, y=y_test_dev, z=z_test_dev)
|
|
97
|
-
context.synchronize()
|
|
98
|
-
t2 = time.time()
|
|
99
|
-
print(f'Time: {t2-t1:.2e}')
|
|
100
|
-
|
|
101
|
-
# Copy back for plotting
|
|
102
|
-
platf2np = context.nparray_from_context_array
|
|
103
|
-
rho_test = platf2np(rho_test_dev)
|
|
104
|
-
phi_test = platf2np(phi_test_dev)
|
|
105
|
-
dx_test = platf2np(dx_test_dev)
|
|
106
|
-
dy_test = platf2np(dy_test_dev)
|
|
107
|
-
dz_test = platf2np(dz_test_dev)
|
|
108
|
-
|
|
109
|
-
# pickle for other tests
|
|
110
|
-
import pickle
|
|
111
|
-
# with open('picsphere.pkl', 'wb') as fid:
|
|
112
|
-
# pickle.dump({
|
|
113
|
-
# 'fmap': fmap,
|
|
114
|
-
# 'x_test': x_test,
|
|
115
|
-
# 'y_test': y_test,
|
|
116
|
-
# 'z_test': z_test,
|
|
117
|
-
# }, fid)
|
|
118
|
-
|
|
119
|
-
####################
|
|
120
|
-
# Plots and checks #
|
|
121
|
-
####################
|
|
122
|
-
|
|
123
|
-
ex_test = -dx_test
|
|
124
|
-
ey_test = -dy_test
|
|
125
|
-
ez_test = -dz_test
|
|
126
|
-
|
|
127
|
-
plt.figure(100)
|
|
128
|
-
plt.plot(r_test, rho_test)
|
|
129
|
-
plt.axhline(y=len(x)/(4/3*np.pi*radius**3))
|
|
130
|
-
|
|
131
|
-
plt.figure(101)
|
|
132
|
-
plt.plot(r_test, phi_test)
|
|
133
|
-
|
|
134
|
-
e_ref = len(x)/(4*pi*epsilon_0) * (
|
|
135
|
-
r_test/radius**3*(np.abs(r_test)<radius)
|
|
136
|
-
+ np.sign(r_test)/r_test**2*(np.abs(r_test)>=radius))
|
|
137
|
-
plt.figure(102)
|
|
138
|
-
plt.plot(r_test, ex_test*x0_test/r_test
|
|
139
|
-
+ ey_test*y0_test/r_test + ez_test*z0_test/r_test)
|
|
140
|
-
plt.plot(r_test, e_ref)
|
|
141
|
-
plt.grid(True)
|
|
142
|
-
|
|
143
|
-
# Check integral
|
|
144
|
-
int_rho = np.sum(platf2np(fmap.rho))*fmap.dx*fmap.dy*fmap.dz
|
|
145
|
-
assert np.isclose(int_rho, len(x))
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
fig1 = plt.figure(1)
|
|
149
|
-
ax1 = fig1.add_subplot(111)
|
|
150
|
-
ax1.pcolormesh(fmap.x_grid, fmap.y_grid,
|
|
151
|
-
np.sum(platf2np(fmap.rho), axis=2).T, shading='gouraud')
|
|
152
|
-
ax1.set_aspect('equal')
|
|
153
|
-
ax1.add_patch(plt.Circle((center_xyz[0], center_xyz[1]), radius,
|
|
154
|
-
color='w', fill=False))
|
|
155
|
-
ax1.set_xlabel('x')
|
|
156
|
-
ax1.set_ylabel('y')
|
|
157
|
-
|
|
158
|
-
fig2 = plt.figure(2)
|
|
159
|
-
ax2 = fig2.add_subplot(111)
|
|
160
|
-
ax2.pcolormesh(fmap.y_grid, fmap.z_grid,
|
|
161
|
-
np.sum(platf2np(fmap.rho), axis=0).T, shading='gouraud')
|
|
162
|
-
ax2.set_aspect('equal')
|
|
163
|
-
ax2.add_patch(plt.Circle((center_xyz[1], center_xyz[2]), radius,
|
|
164
|
-
color='w', fill=False))
|
|
165
|
-
ax2.set_xlabel('y')
|
|
166
|
-
ax2.set_ylabel('z')
|
|
167
|
-
plt.show()
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
# copyright ################################# #
|
|
2
|
-
# This file is part of the Xfields Package. #
|
|
3
|
-
# Copyright (c) CERN, 2021. #
|
|
4
|
-
# ########################################### #
|
|
5
|
-
|
|
6
|
-
import time
|
|
7
|
-
|
|
8
|
-
import numpy as np
|
|
9
|
-
from numpy.random import rand
|
|
10
|
-
from scipy.constants import epsilon_0
|
|
11
|
-
from numpy import pi
|
|
12
|
-
|
|
13
|
-
from xobjects import ContextCpu, ContextCupy, ContextPyopencl
|
|
14
|
-
from xfields import TriLinearInterpolatedFieldMap
|
|
15
|
-
|
|
16
|
-
context = ContextCpu()
|
|
17
|
-
#context = ContextCupy(default_block_size=256)
|
|
18
|
-
#context = ContextPyopencl()
|
|
19
|
-
|
|
20
|
-
print(repr(context))
|
|
21
|
-
|
|
22
|
-
import matplotlib.pyplot as plt
|
|
23
|
-
plt.close('all')
|
|
24
|
-
|
|
25
|
-
center_xyz = np.array([0.1, 0.2, -0.3])
|
|
26
|
-
radius = .5
|
|
27
|
-
n_part_cube = 10000000
|
|
28
|
-
|
|
29
|
-
x_cube = radius*(2. * rand(n_part_cube) - 1.) + center_xyz[0]
|
|
30
|
-
y_cube = radius*(2. * rand(n_part_cube) - 1.) + center_xyz[1]
|
|
31
|
-
z_cube = radius*(2. * rand(n_part_cube) - 1.) + center_xyz[2]
|
|
32
|
-
|
|
33
|
-
mask_sphere = ((x_cube - center_xyz[0])**2
|
|
34
|
-
+ (y_cube - center_xyz[1])**2
|
|
35
|
-
+ (z_cube - center_xyz[2])**2) < radius**2
|
|
36
|
-
x = x_cube[mask_sphere]
|
|
37
|
-
y = y_cube[mask_sphere]
|
|
38
|
-
z = z_cube[mask_sphere]
|
|
39
|
-
pweights = 1. + 0*x
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
# PIC
|
|
43
|
-
x_lim = (-1.1, 1.)
|
|
44
|
-
y_lim = (-1.2, 1.)
|
|
45
|
-
z_lim = (-1.3, 1.)
|
|
46
|
-
|
|
47
|
-
nx = 256
|
|
48
|
-
ny = 256
|
|
49
|
-
nz = 50
|
|
50
|
-
|
|
51
|
-
theta_test = 70. * np.pi/360
|
|
52
|
-
r_test = 2.5*radius*np.linspace(-1, 1., 1000)
|
|
53
|
-
z_test = 0.4
|
|
54
|
-
|
|
55
|
-
x0_test = r_test * np.cos(theta_test)
|
|
56
|
-
y0_test = r_test * np.sin(theta_test)
|
|
57
|
-
z0_test = z_test + 0*r_test
|
|
58
|
-
|
|
59
|
-
x_test = center_xyz[0] + x0_test
|
|
60
|
-
y_test = center_xyz[1] + y0_test
|
|
61
|
-
z_test = center_xyz[2] + z0_test
|
|
62
|
-
|
|
63
|
-
# Moving particles and test coordinates to GPU (if needed)
|
|
64
|
-
np2platf = context.nparray_to_context_array
|
|
65
|
-
x_dev = np2platf(x)
|
|
66
|
-
y_dev = np2platf(y)
|
|
67
|
-
z_dev = np2platf(z)
|
|
68
|
-
pweights_dev = np2platf(pweights)
|
|
69
|
-
x_test_dev = np2platf(x_test)
|
|
70
|
-
y_test_dev = np2platf(y_test)
|
|
71
|
-
z_test_dev = np2platf(z_test)
|
|
72
|
-
|
|
73
|
-
###############
|
|
74
|
-
# Actual test #
|
|
75
|
-
###############
|
|
76
|
-
|
|
77
|
-
# Build fieldmap object
|
|
78
|
-
fmap = TriLinearInterpolatedFieldMap(
|
|
79
|
-
_context=context,
|
|
80
|
-
x_range=x_lim, nx=nx,
|
|
81
|
-
y_range=y_lim, ny=ny, z_range=z_lim, nz=nz,
|
|
82
|
-
solver='FFTSolver2p5D')
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
# Compute potential
|
|
86
|
-
n_rep = 10
|
|
87
|
-
for _ in range(n_rep):
|
|
88
|
-
t1 = time.time()
|
|
89
|
-
fmap.update_from_particles(x_p=x_dev, y_p=y_dev, z_p=z_dev,
|
|
90
|
-
ncharges_p=pweights_dev, q0_coulomb=1.)
|
|
91
|
-
|
|
92
|
-
# Check on the x axis
|
|
93
|
-
(rho_test_dev, phi_test_dev, dx_test_dev, dy_test_dev,
|
|
94
|
-
dz_test_dev) = fmap.get_values_at_points(
|
|
95
|
-
x=x_test_dev, y=y_test_dev, z=z_test_dev)
|
|
96
|
-
context.synchronize()
|
|
97
|
-
t2 = time.time()
|
|
98
|
-
print(f'Time: {t2-t1:.2e}')
|
|
99
|
-
|
|
100
|
-
# Copy back for plotting
|
|
101
|
-
platf2np = context.nparray_from_context_array
|
|
102
|
-
rho_test = platf2np(rho_test_dev)
|
|
103
|
-
phi_test = platf2np(phi_test_dev)
|
|
104
|
-
dx_test = platf2np(dx_test_dev)
|
|
105
|
-
dy_test = platf2np(dy_test_dev)
|
|
106
|
-
dz_test = platf2np(dz_test_dev)
|
|
107
|
-
|
|
108
|
-
# pickle for other tests
|
|
109
|
-
import pickle
|
|
110
|
-
# with open('picsphere.pkl', 'wb') as fid:
|
|
111
|
-
# pickle.dump({
|
|
112
|
-
# 'fmap': fmap,
|
|
113
|
-
# 'x_test': x_test,
|
|
114
|
-
# 'y_test': y_test,
|
|
115
|
-
# 'z_test': z_test,
|
|
116
|
-
# }, fid)
|
|
117
|
-
|
|
118
|
-
####################
|
|
119
|
-
# Plots and checks #
|
|
120
|
-
####################
|
|
121
|
-
|
|
122
|
-
ex_test = -dx_test
|
|
123
|
-
ey_test = -dy_test
|
|
124
|
-
ez_test = -dz_test
|
|
125
|
-
|
|
126
|
-
plt.figure(100)
|
|
127
|
-
plt.plot(r_test, rho_test)
|
|
128
|
-
plt.axhline(y=len(x)/(4/3*np.pi*radius**3))
|
|
129
|
-
|
|
130
|
-
plt.figure(101)
|
|
131
|
-
plt.plot(r_test, phi_test)
|
|
132
|
-
|
|
133
|
-
assert z0_test[0]<radius
|
|
134
|
-
r_loc = np.sqrt(radius**2 - z0_test[0]**2)
|
|
135
|
-
rho_ref = len(x)/(4/3*pi*radius**3)
|
|
136
|
-
lam_loc = rho_ref*pi*r_loc**2
|
|
137
|
-
e_ref = rho_ref/(epsilon_0) * (
|
|
138
|
-
r_test/2*(np.abs(r_test)<r_loc)
|
|
139
|
-
+ r_loc**2/r_test/2*(np.abs(r_test)>=r_loc))
|
|
140
|
-
plt.figure(102)
|
|
141
|
-
plt.plot(r_test, ex_test*x0_test/r_test
|
|
142
|
-
+ ey_test*y0_test/r_test)
|
|
143
|
-
plt.plot(r_test, e_ref)
|
|
144
|
-
plt.grid(True)
|
|
145
|
-
|
|
146
|
-
# Check integral
|
|
147
|
-
int_rho = np.sum(platf2np(fmap.rho))*fmap.dx*fmap.dy*fmap.dz
|
|
148
|
-
assert np.isclose(int_rho, len(x))
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
fig1 = plt.figure(1)
|
|
152
|
-
ax1 = fig1.add_subplot(111)
|
|
153
|
-
ax1.pcolormesh(fmap.x_grid, fmap.y_grid,
|
|
154
|
-
np.sum(platf2np(fmap.rho), axis=2).T, shading='gouraud')
|
|
155
|
-
ax1.set_aspect('equal')
|
|
156
|
-
ax1.add_patch(plt.Circle((center_xyz[0], center_xyz[1]), radius,
|
|
157
|
-
color='w', fill=False))
|
|
158
|
-
ax1.set_xlabel('x')
|
|
159
|
-
ax1.set_ylabel('y')
|
|
160
|
-
|
|
161
|
-
fig2 = plt.figure(2)
|
|
162
|
-
ax2 = fig2.add_subplot(111)
|
|
163
|
-
ax2.pcolormesh(fmap.y_grid, fmap.z_grid,
|
|
164
|
-
np.sum(platf2np(fmap.rho), axis=0).T, shading='gouraud')
|
|
165
|
-
ax2.set_aspect('equal')
|
|
166
|
-
ax2.add_patch(plt.Circle((center_xyz[1], center_xyz[2]), radius,
|
|
167
|
-
color='w', fill=False))
|
|
168
|
-
ax2.set_xlabel('y')
|
|
169
|
-
ax2.set_ylabel('z')
|
|
170
|
-
plt.show()
|