xfields 0.23.0__tar.gz → 0.23.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.23.0/xfields.egg-info → xfields-0.23.2}/PKG-INFO +1 -1
- xfields-0.23.2/xfields/_version.py +1 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/spacecharge_src/spacechargebigaussian.h +1 -1
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/temp_slicer.py +8 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/config_tools/electroncloud_config_tools.py +3 -1
- {xfields-0.23.0 → xfields-0.23.2}/xfields/fieldmaps/interpolated.py +4 -2
- {xfields-0.23.0 → xfields-0.23.2}/xfields/fieldmaps/tricubicinterpolated.py +7 -0
- {xfields-0.23.0 → xfields-0.23.2/xfields.egg-info}/PKG-INFO +1 -1
- {xfields-0.23.0 → xfields-0.23.2}/xfields.egg-info/SOURCES.txt +0 -69
- xfields-0.23.0/.gitignore +0 -13
- xfields-0.23.0/contributors_and_credits.txt +0 -16
- xfields-0.23.0/examples/000_sphere/.gitignore +0 -1
- xfields-0.23.0/examples/000_sphere/000_sphere_xfields3D.py +0 -167
- xfields-0.23.0/examples/000_sphere/001_sphere_xfields2p5D.py +0 -170
- xfields-0.23.0/examples/001_spacecharge/000_spacecharge_example.py +0 -152
- xfields-0.23.0/examples/001_spacecharge/001_shared_fieldmap.py +0 -152
- xfields-0.23.0/examples/001_spacecharge/002_spacecharge_with_losses.py +0 -33
- xfields-0.23.0/examples/002_beambeam/000_beambeam.py +0 -191
- xfields-0.23.0/examples/002_beambeam/001_beambeam3d.py +0 -165
- xfields-0.23.0/examples/002_beambeam/002_beambeam3d_old_interface.py +0 -136
- xfields-0.23.0/examples/002_beambeam/003_beambeam3d_strongstrong_track.py +0 -188
- xfields-0.23.0/examples/002_beambeam/004_beambeam2d_strongstrong_pyheadtail.py +0 -215
- xfields-0.23.0/examples/002_beambeam/005_beambeam6d_strongstrong_pipeline.py +0 -201
- xfields-0.23.0/examples/002_beambeam/006_beambeam6d_strongstrong_pipeline_MPI2Procs.py +0 -221
- xfields-0.23.0/examples/002_beambeam/007_beambeam3d_beamstrahlung.py +0 -381
- xfields-0.23.0/examples/002_beambeam/008_beambeam6d_collective_beamstrahlung.py +0 -392
- xfields-0.23.0/examples/002_beambeam/009_constant_charge_slicing.py +0 -46
- xfields-0.23.0/examples/002_beambeam/010_beambeam2d_strongstrong_pipeline.py +0 -167
- xfields-0.23.0/examples/002_beambeam/010_beambeam2d_weakstrong.py +0 -115
- xfields-0.23.0/examples/002_beambeam/011a_inspect_kick_vs_zeta_hirata.py +0 -98
- xfields-0.23.0/examples/002_beambeam/011b_lhc_one_bb.py +0 -65
- xfields-0.23.0/examples/002_beambeam/011c_dev_pic.py +0 -313
- xfields-0.23.0/examples/002_beambeam/011d_pic_pipeline.py +0 -152
- xfields-0.23.0/examples/002_beambeam/011e_multiple_kicks_multiple_turns.py +0 -232
- xfields-0.23.0/examples/002_beambeam/011g_pic_pipeline_gpu.py +0 -164
- xfields-0.23.0/examples/003_electronlens/electronlens_interpolated_ideal.py +0 -88
- xfields-0.23.0/examples/004_fadeeva/000_check_fadeeva.py +0 -139
- xfields-0.23.0/examples/005_ibs/000_growth_rates_no_vdisp.py +0 -119
- xfields-0.23.0/examples/005_ibs/001_growth_rates_with_vdisp.py +0 -76
- xfields-0.23.0/examples/005_ibs/002_growth_rates_conventions.py +0 -79
- xfields-0.23.0/examples/005_ibs/003_tracking_with_kicks.py +0 -66
- xfields-0.23.0/examples/005_ibs/004_tracking_with_kicks_tbt_emittances.py +0 -94
- xfields-0.23.0/examples/longitudinal_kick_in_spacecharge/000_gaussian_3d.py +0 -140
- xfields-0.23.0/examples/longitudinal_kick_in_spacecharge/001_dev_spacecharge.py +0 -96
- xfields-0.23.0/examples/longitudinal_kick_in_spacecharge/002_sps_ion.py +0 -124
- xfields-0.23.0/examples/longitudinal_kick_in_spacecharge/003_sps_ion_with_builtin_z_kick.py +0 -118
- xfields-0.23.0/examples/longitudinal_kick_in_spacecharge/004_qgaussian_derivative.py +0 -63
- xfields-0.23.0/examples/longitudinal_kick_in_spacecharge/sps_ion_2021.json +0 -1
- xfields-0.23.0/examples/slicer/000_dev.py +0 -876
- xfields-0.23.0/examples/slicer/001_slicer_operations.py +0 -29
- xfields-0.23.0/examples/slicer/002a_example_slicer.py +0 -142
- xfields-0.23.0/examples/slicer/002b_example_slicer_gpu.py +0 -145
- xfields-0.23.0/examples/slicer/003_multilog.py +0 -22
- xfields-0.23.0/examples/slicer/004_log_moments.py +0 -151
- xfields-0.23.0/examples/slicer/005a_moment_profile.py +0 -75
- xfields-0.23.0/examples/slicer/005b_moment_profile_gpu.py +0 -89
- xfields-0.23.0/examples/slicer/005c_moment_profile_from_wake.py +0 -53
- xfields-0.23.0/examples/slicer/005d_moment_profile_from_wake_gpu.py +0 -59
- xfields-0.23.0/mktest +0 -1
- xfields-0.23.0/release.sh +0 -20
- xfields-0.23.0/requirements.txt +0 -2
- xfields-0.23.0/test_data/HLLHC_wake.dat +0 -2801
- xfields-0.23.0/test_data/pyecloud_pinch/Pinch_creation/.gitignore +0 -4
- xfields-0.23.0/test_data/pyecloud_pinch/Pinch_creation/000_buildup.py +0 -4
- xfields-0.23.0/test_data/pyecloud_pinch/Pinch_creation/001_pinch.py +0 -131
- xfields-0.23.0/test_data/pyecloud_pinch/Pinch_creation/beam.beam +0 -33
- xfields-0.23.0/test_data/pyecloud_pinch/Pinch_creation/filemanager.py +0 -54
- xfields-0.23.0/test_data/pyecloud_pinch/Pinch_creation/machine_parameters.input +0 -51
- xfields-0.23.0/test_data/pyecloud_pinch/Pinch_creation/secondary_emission_parameters.input +0 -16
- xfields-0.23.0/test_data/pyecloud_pinch/Pinch_creation/simulation_parameters.input +0 -81
- xfields-0.23.0/test_data/pyecloud_pinch/README.md +0 -35
- xfields-0.23.0/test_data/pyecloud_pinch/eclouds.json +0 -5838
- xfields-0.23.0/test_data/pyecloud_pinch/refined_Pinch_MTI1.0_MLI1.0_DTO2.0_DLO1.0.h5 +0 -0
- xfields-0.23.0/test_data/test_beamstrahlung/README.txt +0 -3
- xfields-0.23.0/test_data/test_beamstrahlung/test_beamstrahlung_guineapig_ttbar2_beamstrahlung_photon_hist.txt +0 -9
- xfields-0.23.0/tests/ibs_conftest.py +0 -168
- xfields-0.23.0/tests/pytest_onebyone.sh +0 -7
- xfields-0.23.0/update_cprght_statement.py +0 -48
- xfields-0.23.0/xfields/_version.py +0 -1
- {xfields-0.23.0 → xfields-0.23.2}/LICENSE +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/MANIFEST.in +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/README.md +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/pyproject.toml +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/setup.cfg +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/setup.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_alpha_pi_setter.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_beambeam2d.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_beambeam3d_part1.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_beambeam3d_part2.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_beambeam_pic.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_beambeamstrongstrong2d.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_beambeamstrongstrong2d_pi.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_beambeamstrongstrong3d.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_beambeamstrongstrong3d_pi.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_beamstrahlung.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_beamstrahlung_pic.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_bhabha.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_cerrf.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_compressed_profile_interp_result.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_constant_charge_slicing.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_electroncloud.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_electronlens_interpolated.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_element_with_slicer_filling_scheme.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_ibs_growth_rates.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_ibs_kicks.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_iptocp_strongstrong.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_lumi.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_mean_std.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_profiles.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_slicer.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_spacecharge.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/tests/test_temp_slicer.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/__init__.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/__init__.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/beambeam2d.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/beambeam3d.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/beambeam3dpic.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/beambeam_src/beambeam.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/beambeam_src/beambeam2d.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/beambeam_src/beambeam3d.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/beambeam_src/beambeam3d_methods_for_strongstrong.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/beambeam_src/beambeam3d_ref_frame_changes.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/beambeam_src/beambeam3d_transport_sigmas.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/beambeam_src/beambeampic_methods.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/electroncloud.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/electroncloud_src/electroncloud.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/electronlens_interpolated.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/electronlens_src/electronlens_interpolated.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/element_with_slicer.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/spacecharge.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/spacecharge_src/spacecharge3d.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/waketracker/__init__.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/waketracker/convolution.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/waketracker/waketracker.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/config_tools/__init__.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/config_tools/beambeam_config_tools/__init__.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/config_tools/beambeam_config_tools/_madpoint.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/config_tools/beambeam_config_tools/config_tools.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/config_tools/beambeam_config_tools/orbit_dependent_configuration_tools.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/config_tools/spacecharge_config_tools.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/fieldmaps/__init__.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/fieldmaps/bigaussian.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/fieldmaps/bigaussian_src/bigaussian.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/fieldmaps/bigaussian_src/bigaussian_fieldmap.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/fieldmaps/bigaussian_src/compute_gx_gy.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/fieldmaps/bigaussian_src/faddeeva.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/fieldmaps/bigaussian_src/faddeeva_cernlib.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/fieldmaps/bigaussian_src/faddeeva_mit.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/fieldmaps/interpolated_src/central_diff.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/fieldmaps/interpolated_src/charge_deposition.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/fieldmaps/interpolated_src/cubic_interpolators.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/fieldmaps/interpolated_src/linear_interpolators.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/fieldmaps/interpolated_src/tricubic_coefficients.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/general.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/headers/beamstrahlung_spectrum.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/headers/beamstrahlung_spectrum_pic.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/headers/bhabha_spectrum.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/headers/compressed_profile.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/headers/compute_slice_moments.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/headers/constants.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/headers/particle_states.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/headers/power_n.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/headers/sincos.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/ibs/__init__.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/ibs/_analytical.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/ibs/_api.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/ibs/_formulary.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/ibs/_kicks.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/longitudinal_profiles/__init__.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/longitudinal_profiles/coasting.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/longitudinal_profiles/qgaussian.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/longitudinal_profiles/qgaussian_src/qgaussian.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/slicers/__init__.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/slicers/compressed_profile.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/slicers/slicers_src/uniform_bin_slicer.h +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/slicers/uniform.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/solvers/__init__.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/solvers/base.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/solvers/fftsolvers.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/test_support/__init__.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields/test_support/temp_makepart.py +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields.egg-info/dependency_links.txt +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields.egg-info/requires.txt +0 -0
- {xfields-0.23.0 → xfields-0.23.2}/xfields.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.23.2"
|
{xfields-0.23.0 → xfields-0.23.2}/xfields/beam_elements/spacecharge_src/spacechargebigaussian.h
RENAMED
|
@@ -67,7 +67,7 @@ void SpaceChargeBiGaussian_track_local_particle(
|
|
|
67
67
|
const double dy = fabs(y / (n_integ - 1));
|
|
68
68
|
|
|
69
69
|
double phi = 0.0;
|
|
70
|
-
double dphi_integ;
|
|
70
|
+
double dphi_integ = 0.0;
|
|
71
71
|
for (int ii=0; ii<n_integ; ii++){
|
|
72
72
|
double const x_integ = ii*dx;
|
|
73
73
|
double const y_integ = ii*dy;
|
|
@@ -2,6 +2,7 @@ import numpy as np
|
|
|
2
2
|
from scipy import special
|
|
3
3
|
import xobjects as xo
|
|
4
4
|
import xpart as xp
|
|
5
|
+
import xtrack as xt
|
|
5
6
|
from ..general import _pkg_root
|
|
6
7
|
|
|
7
8
|
_digitize_kernel = xo.Kernel(
|
|
@@ -106,6 +107,13 @@ class TempSlicer(xo.HybridClass):
|
|
|
106
107
|
|
|
107
108
|
self.compile_kernels(only_if_needed=False)
|
|
108
109
|
|
|
110
|
+
def compile_kernels(self, *args, **kwargs):
|
|
111
|
+
extra_compile_args = kwargs.pop('extra_compile_args', [])
|
|
112
|
+
extra_compile_args.append(f'-I{xt.__path__[0]}')
|
|
113
|
+
kwargs['extra_compile_args'] = extra_compile_args
|
|
114
|
+
|
|
115
|
+
return super().compile_kernels(*args, **kwargs)
|
|
116
|
+
|
|
109
117
|
def rho(self, z):
|
|
110
118
|
"""
|
|
111
119
|
Gaussian charge density.
|
|
@@ -171,7 +171,9 @@ def full_electroncloud_setup(line=None, ecloud_info=None, filenames=None, contex
|
|
|
171
171
|
zeta_max=None, subtract_dipolar_kicks=True, shift_to_closed_orbit=True,
|
|
172
172
|
steps_r_matrix=None):
|
|
173
173
|
|
|
174
|
-
|
|
174
|
+
line.build_tracker(compile=False) # To move all elements to the same buffer
|
|
175
|
+
buffer = line._buffer
|
|
176
|
+
line.discard_tracker()
|
|
175
177
|
fieldmaps = {
|
|
176
178
|
ecloud_type: get_electroncloud_fieldmap_from_h5(
|
|
177
179
|
filename=filename,
|
|
@@ -215,7 +215,10 @@ class TriLinearInterpolatedFieldMap(xo.HybridClass):
|
|
|
215
215
|
dphi_dy = nelem,
|
|
216
216
|
dphi_dz = nelem)
|
|
217
217
|
|
|
218
|
-
self.compile_kernels(
|
|
218
|
+
self.compile_kernels(
|
|
219
|
+
only_if_needed=True,
|
|
220
|
+
extra_compile_args=[f"-I{xt.__path__[0]}"],
|
|
221
|
+
)
|
|
219
222
|
|
|
220
223
|
if isinstance(solver, str):
|
|
221
224
|
self.solver = self.generate_solver(solver, fftplan)
|
|
@@ -237,7 +240,6 @@ class TriLinearInterpolatedFieldMap(xo.HybridClass):
|
|
|
237
240
|
def _assert_updatable(self):
|
|
238
241
|
assert self.updatable, 'This FieldMap is not updatable!'
|
|
239
242
|
|
|
240
|
-
#@profile
|
|
241
243
|
def get_values_at_points(self,
|
|
242
244
|
x, y, z,
|
|
243
245
|
return_rho=True,
|
|
@@ -233,6 +233,13 @@ class TriCubicInterpolatedFieldMap(xo.HybridClass):
|
|
|
233
233
|
if solver is not None and rho is not None:
|
|
234
234
|
self.update_phi_from_rho()
|
|
235
235
|
|
|
236
|
+
def compile_kernels(self, *args, **kwargs):
|
|
237
|
+
extra_compile_args = kwargs.pop('extra_compile_args', [])
|
|
238
|
+
extra_compile_args.append(f'-I{xt.__path__[0]}')
|
|
239
|
+
kwargs['extra_compile_args'] = extra_compile_args
|
|
240
|
+
|
|
241
|
+
return super().compile_kernels(*args, **kwargs)
|
|
242
|
+
|
|
236
243
|
def _assert_updatable(self):
|
|
237
244
|
assert self.updatable, 'This FieldMap is not updatable!'
|
|
238
245
|
|
|
@@ -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_no_vdisp.py
|
|
39
|
-
examples/005_ibs/001_growth_rates_with_vdisp.py
|
|
40
|
-
examples/005_ibs/002_growth_rates_conventions.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_alpha_pi_setter.py
|
|
76
7
|
tests/test_beambeam2d.py
|
|
77
8
|
tests/test_beambeam3d_part1.py
|
xfields-0.23.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()
|