xfields 0.22.1__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.1/xfields.egg-info → xfields-0.22.2}/PKG-INFO +1 -1
- xfields-0.22.2/xfields/_version.py +1 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/fieldmaps/bigaussian_src/bigaussian.h +4 -2
- {xfields-0.22.1 → xfields-0.22.2/xfields.egg-info}/PKG-INFO +1 -1
- {xfields-0.22.1 → xfields-0.22.2}/xfields.egg-info/SOURCES.txt +0 -69
- xfields-0.22.1/.gitignore +0 -13
- xfields-0.22.1/contributors_and_credits.txt +0 -16
- xfields-0.22.1/examples/000_sphere/.gitignore +0 -1
- xfields-0.22.1/examples/000_sphere/000_sphere_xfields3D.py +0 -167
- xfields-0.22.1/examples/000_sphere/001_sphere_xfields2p5D.py +0 -170
- xfields-0.22.1/examples/001_spacecharge/000_spacecharge_example.py +0 -152
- xfields-0.22.1/examples/001_spacecharge/001_shared_fieldmap.py +0 -152
- xfields-0.22.1/examples/001_spacecharge/002_spacecharge_with_losses.py +0 -33
- xfields-0.22.1/examples/002_beambeam/000_beambeam.py +0 -191
- xfields-0.22.1/examples/002_beambeam/001_beambeam3d.py +0 -165
- xfields-0.22.1/examples/002_beambeam/002_beambeam3d_old_interface.py +0 -136
- xfields-0.22.1/examples/002_beambeam/003_beambeam3d_strongstrong_track.py +0 -188
- xfields-0.22.1/examples/002_beambeam/004_beambeam2d_strongstrong_pyheadtail.py +0 -215
- xfields-0.22.1/examples/002_beambeam/005_beambeam6d_strongstrong_pipeline.py +0 -201
- xfields-0.22.1/examples/002_beambeam/006_beambeam6d_strongstrong_pipeline_MPI2Procs.py +0 -221
- xfields-0.22.1/examples/002_beambeam/007_beambeam3d_beamstrahlung.py +0 -381
- xfields-0.22.1/examples/002_beambeam/008_beambeam6d_collective_beamstrahlung.py +0 -392
- xfields-0.22.1/examples/002_beambeam/009_constant_charge_slicing.py +0 -46
- xfields-0.22.1/examples/002_beambeam/010_beambeam2d_strongstrong_pipeline.py +0 -167
- xfields-0.22.1/examples/002_beambeam/010_beambeam2d_weakstrong.py +0 -115
- xfields-0.22.1/examples/002_beambeam/011a_inspect_kick_vs_zeta_hirata.py +0 -98
- xfields-0.22.1/examples/002_beambeam/011b_lhc_one_bb.py +0 -65
- xfields-0.22.1/examples/002_beambeam/011c_dev_pic.py +0 -313
- xfields-0.22.1/examples/002_beambeam/011d_pic_pipeline.py +0 -152
- xfields-0.22.1/examples/002_beambeam/011e_multiple_kicks_multiple_turns.py +0 -232
- xfields-0.22.1/examples/002_beambeam/011g_pic_pipeline_gpu.py +0 -164
- xfields-0.22.1/examples/003_electronlens/electronlens_interpolated_ideal.py +0 -88
- xfields-0.22.1/examples/004_fadeeva/000_check_fadeeva.py +0 -139
- xfields-0.22.1/examples/005_ibs/000_growth_rates_from_parameters_no_vdisp.py +0 -118
- xfields-0.22.1/examples/005_ibs/001_growth_rates_from_parameters_with_vdisp.py +0 -75
- xfields-0.22.1/examples/005_ibs/002_growth_rates_from_particles.py +0 -118
- xfields-0.22.1/examples/005_ibs/003_tracking_with_kicks.py +0 -66
- xfields-0.22.1/examples/005_ibs/004_tracking_with_kicks_tbt_emittances.py +0 -94
- xfields-0.22.1/examples/longitudinal_kick_in_spacecharge/000_gaussian_3d.py +0 -140
- xfields-0.22.1/examples/longitudinal_kick_in_spacecharge/001_dev_spacecharge.py +0 -96
- xfields-0.22.1/examples/longitudinal_kick_in_spacecharge/002_sps_ion.py +0 -124
- xfields-0.22.1/examples/longitudinal_kick_in_spacecharge/003_sps_ion_with_builtin_z_kick.py +0 -118
- xfields-0.22.1/examples/longitudinal_kick_in_spacecharge/004_qgaussian_derivative.py +0 -63
- xfields-0.22.1/examples/longitudinal_kick_in_spacecharge/sps_ion_2021.json +0 -1
- xfields-0.22.1/examples/slicer/000_dev.py +0 -876
- xfields-0.22.1/examples/slicer/001_slicer_operations.py +0 -29
- xfields-0.22.1/examples/slicer/002a_example_slicer.py +0 -142
- xfields-0.22.1/examples/slicer/002b_example_slicer_gpu.py +0 -145
- xfields-0.22.1/examples/slicer/003_multilog.py +0 -22
- xfields-0.22.1/examples/slicer/004_log_moments.py +0 -151
- xfields-0.22.1/examples/slicer/005a_moment_profile.py +0 -75
- xfields-0.22.1/examples/slicer/005b_moment_profile_gpu.py +0 -89
- xfields-0.22.1/examples/slicer/005c_moment_profile_from_wake.py +0 -53
- xfields-0.22.1/examples/slicer/005d_moment_profile_from_wake_gpu.py +0 -59
- xfields-0.22.1/mktest +0 -1
- xfields-0.22.1/release.sh +0 -20
- xfields-0.22.1/requirements.txt +0 -2
- xfields-0.22.1/test_data/HLLHC_wake.dat +0 -2801
- xfields-0.22.1/test_data/pyecloud_pinch/Pinch_creation/.gitignore +0 -4
- xfields-0.22.1/test_data/pyecloud_pinch/Pinch_creation/000_buildup.py +0 -4
- xfields-0.22.1/test_data/pyecloud_pinch/Pinch_creation/001_pinch.py +0 -131
- xfields-0.22.1/test_data/pyecloud_pinch/Pinch_creation/beam.beam +0 -33
- xfields-0.22.1/test_data/pyecloud_pinch/Pinch_creation/filemanager.py +0 -54
- xfields-0.22.1/test_data/pyecloud_pinch/Pinch_creation/machine_parameters.input +0 -51
- xfields-0.22.1/test_data/pyecloud_pinch/Pinch_creation/secondary_emission_parameters.input +0 -16
- xfields-0.22.1/test_data/pyecloud_pinch/Pinch_creation/simulation_parameters.input +0 -81
- xfields-0.22.1/test_data/pyecloud_pinch/README.md +0 -35
- xfields-0.22.1/test_data/pyecloud_pinch/eclouds.json +0 -5838
- xfields-0.22.1/test_data/pyecloud_pinch/refined_Pinch_MTI1.0_MLI1.0_DTO2.0_DLO1.0.h5 +0 -0
- xfields-0.22.1/test_data/test_beamstrahlung/README.txt +0 -3
- xfields-0.22.1/test_data/test_beamstrahlung/test_beamstrahlung_guineapig_ttbar2_beamstrahlung_photon_hist.txt +0 -9
- xfields-0.22.1/tests/ibs_conftest.py +0 -158
- xfields-0.22.1/tests/pytest_onebyone.sh +0 -7
- xfields-0.22.1/update_cprght_statement.py +0 -48
- xfields-0.22.1/xfields/_version.py +0 -1
- {xfields-0.22.1 → xfields-0.22.2}/LICENSE +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/MANIFEST.in +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/README.md +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/pyproject.toml +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/setup.cfg +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/setup.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_beambeam2d.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_beambeam3d_part1.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_beambeam3d_part2.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_beambeam_pic.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_beambeamstrongstrong2d.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_beambeamstrongstrong2d_pi.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_beambeamstrongstrong3d.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_beambeamstrongstrong3d_pi.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_beamstrahlung.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_bhabha.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_cerrf.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_compressed_profile_interp_result.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_constant_charge_slicing.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_electroncloud.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_electronlens_interpolated.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_element_with_slicer_filling_scheme.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_ibs_growth_rates.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_ibs_kicks.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_iptocp_strongstrong.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_lumi.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_mean_std.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_profiles.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_slicer.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_spacecharge.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/tests/test_temp_slicer.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/__init__.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/__init__.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/beambeam2d.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/beambeam3d.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/beambeam3dpic.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/beambeam_src/beambeam.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/beambeam_src/beambeam2d.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/beambeam_src/beambeam3d.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/beambeam_src/beambeam3d_methods_for_strongstrong.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/beambeam_src/beambeam3d_ref_frame_changes.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/beambeam_src/beambeam3d_transport_sigmas.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/beambeam_src/beambeampic_methods.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/electroncloud.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/electroncloud_src/electroncloud.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/electronlens_interpolated.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/electronlens_src/electronlens_interpolated.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/element_with_slicer.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/spacecharge.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/spacecharge_src/spacecharge3d.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/spacecharge_src/spacechargebigaussian.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/temp_slicer.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/waketracker/__init__.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/waketracker/convolution.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/beam_elements/waketracker/waketracker.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/config_tools/__init__.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/config_tools/beambeam_config_tools/__init__.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/config_tools/beambeam_config_tools/_madpoint.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/config_tools/beambeam_config_tools/config_tools.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/config_tools/beambeam_config_tools/orbit_dependent_configuration_tools.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/config_tools/electroncloud_config_tools.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/config_tools/spacecharge_config_tools.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/fieldmaps/__init__.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/fieldmaps/bigaussian.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/fieldmaps/bigaussian_src/bigaussian_fieldmap.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/fieldmaps/bigaussian_src/compute_gx_gy.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/fieldmaps/bigaussian_src/faddeeva.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/fieldmaps/bigaussian_src/faddeeva_cernlib.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/fieldmaps/bigaussian_src/faddeeva_mit.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/fieldmaps/interpolated.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/fieldmaps/interpolated_src/central_diff.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/fieldmaps/interpolated_src/charge_deposition.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/fieldmaps/interpolated_src/cubic_interpolators.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/fieldmaps/interpolated_src/linear_interpolators.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/fieldmaps/interpolated_src/tricubic_coefficients.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/fieldmaps/tricubicinterpolated.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/general.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/headers/beamstrahlung_spectrum.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/headers/bhabha_spectrum.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/headers/compressed_profile.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/headers/compute_slice_moments.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/headers/constants.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/headers/particle_states.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/headers/power_n.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/headers/sincos.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/ibs/__init__.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/ibs/_analytical.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/ibs/_api.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/ibs/_formulary.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/ibs/_kicks.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/longitudinal_profiles/__init__.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/longitudinal_profiles/coasting.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/longitudinal_profiles/qgaussian.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/longitudinal_profiles/qgaussian_src/qgaussian.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/slicers/__init__.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/slicers/compressed_profile.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/slicers/slicers_src/uniform_bin_slicer.h +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/slicers/uniform.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/solvers/__init__.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/solvers/base.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/solvers/fftsolvers.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/test_support/__init__.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields/test_support/temp_makepart.py +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields.egg-info/dependency_links.txt +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields.egg-info/requires.txt +0 -0
- {xfields-0.22.1 → xfields-0.22.2}/xfields.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.22.2"
|
|
@@ -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.1/.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()
|
|
@@ -1,152 +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
|
-
|
|
10
|
-
from xobjects import ContextCpu, ContextCupy, ContextPyopencl
|
|
11
|
-
import xtrack as xt
|
|
12
|
-
import xpart as xp
|
|
13
|
-
|
|
14
|
-
###################
|
|
15
|
-
# Choose context #
|
|
16
|
-
###################
|
|
17
|
-
|
|
18
|
-
context = ContextCpu(omp_num_threads=0) # no omp
|
|
19
|
-
#context = ContextCpu(omp_num_threads=48) # omp
|
|
20
|
-
#context = ContextCupy(default_block_size=256)
|
|
21
|
-
#context = ContextPyopencl('0.0')
|
|
22
|
-
|
|
23
|
-
print(repr(context))
|
|
24
|
-
|
|
25
|
-
#################################
|
|
26
|
-
# Generate particles and probes #
|
|
27
|
-
#################################
|
|
28
|
-
|
|
29
|
-
n_macroparticles = int(1e6)
|
|
30
|
-
bunch_intensity = 2.5e11
|
|
31
|
-
sigma_x = 3e-3
|
|
32
|
-
sigma_y = 2e-3
|
|
33
|
-
sigma_z = 30e-2
|
|
34
|
-
p0c = 25.92e9
|
|
35
|
-
mass = xp.pmass
|
|
36
|
-
theta_probes = 30 * np.pi/180
|
|
37
|
-
r_max_probes = 2e-2
|
|
38
|
-
z_probes = 1.2*sigma_z
|
|
39
|
-
n_probes = 1000
|
|
40
|
-
|
|
41
|
-
from xfields.test_support.temp_makepart import generate_particles_object
|
|
42
|
-
(particles_dtk, r_probes, x_probes,
|
|
43
|
-
y_probes, z_probes) = generate_particles_object(
|
|
44
|
-
n_macroparticles,
|
|
45
|
-
bunch_intensity,
|
|
46
|
-
sigma_x,
|
|
47
|
-
sigma_y,
|
|
48
|
-
sigma_z,
|
|
49
|
-
p0c,
|
|
50
|
-
mass,
|
|
51
|
-
n_probes,
|
|
52
|
-
r_max_probes,
|
|
53
|
-
z_probes,
|
|
54
|
-
theta_probes)
|
|
55
|
-
particles = xp.Particles(
|
|
56
|
-
_context=context, **particles_dtk.to_dict())
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
######################
|
|
60
|
-
# Space charge (PIC) #
|
|
61
|
-
######################
|
|
62
|
-
|
|
63
|
-
x_lim = 5.*sigma_x
|
|
64
|
-
y_lim = 5.*sigma_y
|
|
65
|
-
z_lim = 5.*sigma_z
|
|
66
|
-
|
|
67
|
-
from xfields import SpaceCharge3D
|
|
68
|
-
spcharge = SpaceCharge3D(
|
|
69
|
-
_context=context,
|
|
70
|
-
length=1, update_on_track=True, apply_z_kick=False,
|
|
71
|
-
x_range=(-x_lim, x_lim),
|
|
72
|
-
y_range=(-y_lim, y_lim),
|
|
73
|
-
z_range=(-z_lim, z_lim),
|
|
74
|
-
nx=256, ny=256, nz=100,
|
|
75
|
-
# solver='FFTSolver2p5D',
|
|
76
|
-
solver='FFTSolver2p5DAveraged',
|
|
77
|
-
gamma0=particles_dtk.gamma0[0])
|
|
78
|
-
|
|
79
|
-
spcharge.track(particles)
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
#############################
|
|
83
|
-
# Compare against ducktrack #
|
|
84
|
-
#############################
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
p2np = context.nparray_from_context_array
|
|
88
|
-
|
|
89
|
-
from ducktrack import SCQGaussProfile, TestParticles
|
|
90
|
-
scdtk = SCQGaussProfile(
|
|
91
|
-
number_of_particles = bunch_intensity,
|
|
92
|
-
bunchlength_rms=sigma_z,
|
|
93
|
-
sigma_x=sigma_x,
|
|
94
|
-
sigma_y=sigma_y,
|
|
95
|
-
length=spcharge.length,
|
|
96
|
-
x_co=0.,
|
|
97
|
-
y_co=0.)
|
|
98
|
-
|
|
99
|
-
p_dtk = TestParticles(p0c=p0c,
|
|
100
|
-
mass=mass,
|
|
101
|
-
x=x_probes.copy(),
|
|
102
|
-
y=y_probes.copy(),
|
|
103
|
-
zeta=z_probes.copy())
|
|
104
|
-
|
|
105
|
-
scdtk.track(p_dtk)
|
|
106
|
-
|
|
107
|
-
mask_inside_grid = ((np.abs(x_probes)<0.9*x_lim) &
|
|
108
|
-
(np.abs(y_probes)<0.9*y_lim))
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
import matplotlib.pyplot as plt
|
|
112
|
-
plt.close('all')
|
|
113
|
-
plt.figure(1)
|
|
114
|
-
plt.subplot(211)
|
|
115
|
-
plt.plot(r_probes, p_dtk.px, color='red')
|
|
116
|
-
plt.plot(r_probes, p2np(particles.px[:n_probes]), color='blue',
|
|
117
|
-
linestyle='--')
|
|
118
|
-
plt.subplot(212)
|
|
119
|
-
plt.plot(r_probes, p_dtk.py, color='red')
|
|
120
|
-
plt.plot(r_probes, p2np(particles.py[:n_probes]), color='blue',
|
|
121
|
-
linestyle='--')
|
|
122
|
-
|
|
123
|
-
plt.figure(2)
|
|
124
|
-
plt.subplot(111)
|
|
125
|
-
tr_profile = spcharge.fieldmap.rho.sum(axis=0)
|
|
126
|
-
for ii in range(tr_profile.shape[1]):
|
|
127
|
-
tr_profile[:,ii] = tr_profile[:,ii]/tr_profile[:,ii].max()
|
|
128
|
-
tr_profile = context.nparray_from_context_array(tr_profile)
|
|
129
|
-
plt.plot(tr_profile)
|
|
130
|
-
|
|
131
|
-
###########
|
|
132
|
-
# Time it #
|
|
133
|
-
###########
|
|
134
|
-
|
|
135
|
-
n_rep = 5
|
|
136
|
-
|
|
137
|
-
for _ in range(n_rep):
|
|
138
|
-
t1 = time.time()
|
|
139
|
-
spcharge.track(particles)
|
|
140
|
-
context.synchronize()
|
|
141
|
-
t2 = time.time()
|
|
142
|
-
print(f'Time (full PIC): {(t2-t1)*1e3:.2f} ms')
|
|
143
|
-
|
|
144
|
-
spcharge.update_on_track = False
|
|
145
|
-
for _ in range(n_rep):
|
|
146
|
-
t1 = time.time()
|
|
147
|
-
spcharge.track(particles)
|
|
148
|
-
context.synchronize()
|
|
149
|
-
t2 = time.time()
|
|
150
|
-
print(f'Time (interp only): {(t2-t1)*1e3:.2f} ms')
|
|
151
|
-
|
|
152
|
-
plt.show()
|