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.
Files changed (181) hide show
  1. {xfields-0.22.0/xfields.egg-info → xfields-0.22.2}/PKG-INFO +1 -1
  2. xfields-0.22.2/xfields/_version.py +1 -0
  3. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/waketracker/convolution.py +19 -37
  4. {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/bigaussian_src/bigaussian.h +4 -2
  5. {xfields-0.22.0 → xfields-0.22.2/xfields.egg-info}/PKG-INFO +1 -1
  6. {xfields-0.22.0 → xfields-0.22.2}/xfields.egg-info/SOURCES.txt +0 -69
  7. xfields-0.22.0/.gitignore +0 -13
  8. xfields-0.22.0/contributors_and_credits.txt +0 -16
  9. xfields-0.22.0/examples/000_sphere/.gitignore +0 -1
  10. xfields-0.22.0/examples/000_sphere/000_sphere_xfields3D.py +0 -167
  11. xfields-0.22.0/examples/000_sphere/001_sphere_xfields2p5D.py +0 -170
  12. xfields-0.22.0/examples/001_spacecharge/000_spacecharge_example.py +0 -152
  13. xfields-0.22.0/examples/001_spacecharge/001_shared_fieldmap.py +0 -152
  14. xfields-0.22.0/examples/001_spacecharge/002_spacecharge_with_losses.py +0 -33
  15. xfields-0.22.0/examples/002_beambeam/000_beambeam.py +0 -191
  16. xfields-0.22.0/examples/002_beambeam/001_beambeam3d.py +0 -165
  17. xfields-0.22.0/examples/002_beambeam/002_beambeam3d_old_interface.py +0 -136
  18. xfields-0.22.0/examples/002_beambeam/003_beambeam3d_strongstrong_track.py +0 -188
  19. xfields-0.22.0/examples/002_beambeam/004_beambeam2d_strongstrong_pyheadtail.py +0 -215
  20. xfields-0.22.0/examples/002_beambeam/005_beambeam6d_strongstrong_pipeline.py +0 -201
  21. xfields-0.22.0/examples/002_beambeam/006_beambeam6d_strongstrong_pipeline_MPI2Procs.py +0 -221
  22. xfields-0.22.0/examples/002_beambeam/007_beambeam3d_beamstrahlung.py +0 -381
  23. xfields-0.22.0/examples/002_beambeam/008_beambeam6d_collective_beamstrahlung.py +0 -392
  24. xfields-0.22.0/examples/002_beambeam/009_constant_charge_slicing.py +0 -46
  25. xfields-0.22.0/examples/002_beambeam/010_beambeam2d_strongstrong_pipeline.py +0 -167
  26. xfields-0.22.0/examples/002_beambeam/010_beambeam2d_weakstrong.py +0 -115
  27. xfields-0.22.0/examples/002_beambeam/011a_inspect_kick_vs_zeta_hirata.py +0 -98
  28. xfields-0.22.0/examples/002_beambeam/011b_lhc_one_bb.py +0 -65
  29. xfields-0.22.0/examples/002_beambeam/011c_dev_pic.py +0 -313
  30. xfields-0.22.0/examples/002_beambeam/011d_pic_pipeline.py +0 -152
  31. xfields-0.22.0/examples/002_beambeam/011e_multiple_kicks_multiple_turns.py +0 -232
  32. xfields-0.22.0/examples/002_beambeam/011g_pic_pipeline_gpu.py +0 -164
  33. xfields-0.22.0/examples/003_electronlens/electronlens_interpolated_ideal.py +0 -88
  34. xfields-0.22.0/examples/004_fadeeva/000_check_fadeeva.py +0 -139
  35. xfields-0.22.0/examples/005_ibs/000_growth_rates_from_parameters_no_vdisp.py +0 -118
  36. xfields-0.22.0/examples/005_ibs/001_growth_rates_from_parameters_with_vdisp.py +0 -75
  37. xfields-0.22.0/examples/005_ibs/002_growth_rates_from_particles.py +0 -118
  38. xfields-0.22.0/examples/005_ibs/003_tracking_with_kicks.py +0 -66
  39. xfields-0.22.0/examples/005_ibs/004_tracking_with_kicks_tbt_emittances.py +0 -94
  40. xfields-0.22.0/examples/longitudinal_kick_in_spacecharge/000_gaussian_3d.py +0 -140
  41. xfields-0.22.0/examples/longitudinal_kick_in_spacecharge/001_dev_spacecharge.py +0 -96
  42. xfields-0.22.0/examples/longitudinal_kick_in_spacecharge/002_sps_ion.py +0 -124
  43. xfields-0.22.0/examples/longitudinal_kick_in_spacecharge/003_sps_ion_with_builtin_z_kick.py +0 -118
  44. xfields-0.22.0/examples/longitudinal_kick_in_spacecharge/004_qgaussian_derivative.py +0 -63
  45. xfields-0.22.0/examples/longitudinal_kick_in_spacecharge/sps_ion_2021.json +0 -1
  46. xfields-0.22.0/examples/slicer/000_dev.py +0 -876
  47. xfields-0.22.0/examples/slicer/001_slicer_operations.py +0 -29
  48. xfields-0.22.0/examples/slicer/002a_example_slicer.py +0 -142
  49. xfields-0.22.0/examples/slicer/002b_example_slicer_gpu.py +0 -145
  50. xfields-0.22.0/examples/slicer/003_multilog.py +0 -22
  51. xfields-0.22.0/examples/slicer/004_log_moments.py +0 -151
  52. xfields-0.22.0/examples/slicer/005a_moment_profile.py +0 -75
  53. xfields-0.22.0/examples/slicer/005b_moment_profile_gpu.py +0 -89
  54. xfields-0.22.0/examples/slicer/005c_moment_profile_from_wake.py +0 -53
  55. xfields-0.22.0/examples/slicer/005d_moment_profile_from_wake_gpu.py +0 -59
  56. xfields-0.22.0/mktest +0 -1
  57. xfields-0.22.0/release.sh +0 -20
  58. xfields-0.22.0/requirements.txt +0 -2
  59. xfields-0.22.0/test_data/HLLHC_wake.dat +0 -2801
  60. xfields-0.22.0/test_data/pyecloud_pinch/Pinch_creation/.gitignore +0 -4
  61. xfields-0.22.0/test_data/pyecloud_pinch/Pinch_creation/000_buildup.py +0 -4
  62. xfields-0.22.0/test_data/pyecloud_pinch/Pinch_creation/001_pinch.py +0 -131
  63. xfields-0.22.0/test_data/pyecloud_pinch/Pinch_creation/beam.beam +0 -33
  64. xfields-0.22.0/test_data/pyecloud_pinch/Pinch_creation/filemanager.py +0 -54
  65. xfields-0.22.0/test_data/pyecloud_pinch/Pinch_creation/machine_parameters.input +0 -51
  66. xfields-0.22.0/test_data/pyecloud_pinch/Pinch_creation/secondary_emission_parameters.input +0 -16
  67. xfields-0.22.0/test_data/pyecloud_pinch/Pinch_creation/simulation_parameters.input +0 -81
  68. xfields-0.22.0/test_data/pyecloud_pinch/README.md +0 -35
  69. xfields-0.22.0/test_data/pyecloud_pinch/eclouds.json +0 -5838
  70. xfields-0.22.0/test_data/pyecloud_pinch/refined_Pinch_MTI1.0_MLI1.0_DTO2.0_DLO1.0.h5 +0 -0
  71. xfields-0.22.0/test_data/test_beamstrahlung/README.txt +0 -3
  72. xfields-0.22.0/test_data/test_beamstrahlung/test_beamstrahlung_guineapig_ttbar2_beamstrahlung_photon_hist.txt +0 -9
  73. xfields-0.22.0/tests/ibs_conftest.py +0 -158
  74. xfields-0.22.0/tests/pytest_onebyone.sh +0 -7
  75. xfields-0.22.0/update_cprght_statement.py +0 -48
  76. xfields-0.22.0/xfields/_version.py +0 -1
  77. {xfields-0.22.0 → xfields-0.22.2}/LICENSE +0 -0
  78. {xfields-0.22.0 → xfields-0.22.2}/MANIFEST.in +0 -0
  79. {xfields-0.22.0 → xfields-0.22.2}/README.md +0 -0
  80. {xfields-0.22.0 → xfields-0.22.2}/pyproject.toml +0 -0
  81. {xfields-0.22.0 → xfields-0.22.2}/setup.cfg +0 -0
  82. {xfields-0.22.0 → xfields-0.22.2}/setup.py +0 -0
  83. {xfields-0.22.0 → xfields-0.22.2}/tests/test_beambeam2d.py +0 -0
  84. {xfields-0.22.0 → xfields-0.22.2}/tests/test_beambeam3d_part1.py +0 -0
  85. {xfields-0.22.0 → xfields-0.22.2}/tests/test_beambeam3d_part2.py +0 -0
  86. {xfields-0.22.0 → xfields-0.22.2}/tests/test_beambeam_pic.py +0 -0
  87. {xfields-0.22.0 → xfields-0.22.2}/tests/test_beambeamstrongstrong2d.py +0 -0
  88. {xfields-0.22.0 → xfields-0.22.2}/tests/test_beambeamstrongstrong2d_pi.py +0 -0
  89. {xfields-0.22.0 → xfields-0.22.2}/tests/test_beambeamstrongstrong3d.py +0 -0
  90. {xfields-0.22.0 → xfields-0.22.2}/tests/test_beambeamstrongstrong3d_pi.py +0 -0
  91. {xfields-0.22.0 → xfields-0.22.2}/tests/test_beamstrahlung.py +0 -0
  92. {xfields-0.22.0 → xfields-0.22.2}/tests/test_bhabha.py +0 -0
  93. {xfields-0.22.0 → xfields-0.22.2}/tests/test_cerrf.py +0 -0
  94. {xfields-0.22.0 → xfields-0.22.2}/tests/test_compressed_profile_interp_result.py +0 -0
  95. {xfields-0.22.0 → xfields-0.22.2}/tests/test_constant_charge_slicing.py +0 -0
  96. {xfields-0.22.0 → xfields-0.22.2}/tests/test_electroncloud.py +0 -0
  97. {xfields-0.22.0 → xfields-0.22.2}/tests/test_electronlens_interpolated.py +0 -0
  98. {xfields-0.22.0 → xfields-0.22.2}/tests/test_element_with_slicer_filling_scheme.py +0 -0
  99. {xfields-0.22.0 → xfields-0.22.2}/tests/test_ibs_growth_rates.py +0 -0
  100. {xfields-0.22.0 → xfields-0.22.2}/tests/test_ibs_kicks.py +0 -0
  101. {xfields-0.22.0 → xfields-0.22.2}/tests/test_iptocp_strongstrong.py +0 -0
  102. {xfields-0.22.0 → xfields-0.22.2}/tests/test_lumi.py +0 -0
  103. {xfields-0.22.0 → xfields-0.22.2}/tests/test_mean_std.py +0 -0
  104. {xfields-0.22.0 → xfields-0.22.2}/tests/test_profiles.py +0 -0
  105. {xfields-0.22.0 → xfields-0.22.2}/tests/test_slicer.py +0 -0
  106. {xfields-0.22.0 → xfields-0.22.2}/tests/test_spacecharge.py +0 -0
  107. {xfields-0.22.0 → xfields-0.22.2}/tests/test_temp_slicer.py +0 -0
  108. {xfields-0.22.0 → xfields-0.22.2}/xfields/__init__.py +0 -0
  109. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/__init__.py +0 -0
  110. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/beambeam2d.py +0 -0
  111. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/beambeam3d.py +0 -0
  112. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/beambeam3dpic.py +0 -0
  113. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/beambeam_src/beambeam.h +0 -0
  114. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/beambeam_src/beambeam2d.h +0 -0
  115. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/beambeam_src/beambeam3d.h +0 -0
  116. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/beambeam_src/beambeam3d_methods_for_strongstrong.h +0 -0
  117. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/beambeam_src/beambeam3d_ref_frame_changes.h +0 -0
  118. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/beambeam_src/beambeam3d_transport_sigmas.h +0 -0
  119. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/beambeam_src/beambeampic_methods.h +0 -0
  120. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/electroncloud.py +0 -0
  121. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/electroncloud_src/electroncloud.h +0 -0
  122. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/electronlens_interpolated.py +0 -0
  123. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/electronlens_src/electronlens_interpolated.h +0 -0
  124. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/element_with_slicer.py +0 -0
  125. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/spacecharge.py +0 -0
  126. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/spacecharge_src/spacecharge3d.h +0 -0
  127. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/spacecharge_src/spacechargebigaussian.h +0 -0
  128. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/temp_slicer.py +0 -0
  129. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/waketracker/__init__.py +0 -0
  130. {xfields-0.22.0 → xfields-0.22.2}/xfields/beam_elements/waketracker/waketracker.py +0 -0
  131. {xfields-0.22.0 → xfields-0.22.2}/xfields/config_tools/__init__.py +0 -0
  132. {xfields-0.22.0 → xfields-0.22.2}/xfields/config_tools/beambeam_config_tools/__init__.py +0 -0
  133. {xfields-0.22.0 → xfields-0.22.2}/xfields/config_tools/beambeam_config_tools/_madpoint.py +0 -0
  134. {xfields-0.22.0 → xfields-0.22.2}/xfields/config_tools/beambeam_config_tools/config_tools.py +0 -0
  135. {xfields-0.22.0 → xfields-0.22.2}/xfields/config_tools/beambeam_config_tools/orbit_dependent_configuration_tools.py +0 -0
  136. {xfields-0.22.0 → xfields-0.22.2}/xfields/config_tools/electroncloud_config_tools.py +0 -0
  137. {xfields-0.22.0 → xfields-0.22.2}/xfields/config_tools/spacecharge_config_tools.py +0 -0
  138. {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/__init__.py +0 -0
  139. {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/bigaussian.py +0 -0
  140. {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/bigaussian_src/bigaussian_fieldmap.h +0 -0
  141. {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/bigaussian_src/compute_gx_gy.h +0 -0
  142. {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/bigaussian_src/faddeeva.h +0 -0
  143. {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/bigaussian_src/faddeeva_cernlib.h +0 -0
  144. {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/bigaussian_src/faddeeva_mit.h +0 -0
  145. {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/interpolated.py +0 -0
  146. {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/interpolated_src/central_diff.h +0 -0
  147. {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/interpolated_src/charge_deposition.h +0 -0
  148. {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/interpolated_src/cubic_interpolators.h +0 -0
  149. {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/interpolated_src/linear_interpolators.h +0 -0
  150. {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/interpolated_src/tricubic_coefficients.h +0 -0
  151. {xfields-0.22.0 → xfields-0.22.2}/xfields/fieldmaps/tricubicinterpolated.py +0 -0
  152. {xfields-0.22.0 → xfields-0.22.2}/xfields/general.py +0 -0
  153. {xfields-0.22.0 → xfields-0.22.2}/xfields/headers/beamstrahlung_spectrum.h +0 -0
  154. {xfields-0.22.0 → xfields-0.22.2}/xfields/headers/bhabha_spectrum.h +0 -0
  155. {xfields-0.22.0 → xfields-0.22.2}/xfields/headers/compressed_profile.h +0 -0
  156. {xfields-0.22.0 → xfields-0.22.2}/xfields/headers/compute_slice_moments.h +0 -0
  157. {xfields-0.22.0 → xfields-0.22.2}/xfields/headers/constants.h +0 -0
  158. {xfields-0.22.0 → xfields-0.22.2}/xfields/headers/particle_states.h +0 -0
  159. {xfields-0.22.0 → xfields-0.22.2}/xfields/headers/power_n.h +0 -0
  160. {xfields-0.22.0 → xfields-0.22.2}/xfields/headers/sincos.h +0 -0
  161. {xfields-0.22.0 → xfields-0.22.2}/xfields/ibs/__init__.py +0 -0
  162. {xfields-0.22.0 → xfields-0.22.2}/xfields/ibs/_analytical.py +0 -0
  163. {xfields-0.22.0 → xfields-0.22.2}/xfields/ibs/_api.py +0 -0
  164. {xfields-0.22.0 → xfields-0.22.2}/xfields/ibs/_formulary.py +0 -0
  165. {xfields-0.22.0 → xfields-0.22.2}/xfields/ibs/_kicks.py +0 -0
  166. {xfields-0.22.0 → xfields-0.22.2}/xfields/longitudinal_profiles/__init__.py +0 -0
  167. {xfields-0.22.0 → xfields-0.22.2}/xfields/longitudinal_profiles/coasting.py +0 -0
  168. {xfields-0.22.0 → xfields-0.22.2}/xfields/longitudinal_profiles/qgaussian.py +0 -0
  169. {xfields-0.22.0 → xfields-0.22.2}/xfields/longitudinal_profiles/qgaussian_src/qgaussian.h +0 -0
  170. {xfields-0.22.0 → xfields-0.22.2}/xfields/slicers/__init__.py +0 -0
  171. {xfields-0.22.0 → xfields-0.22.2}/xfields/slicers/compressed_profile.py +0 -0
  172. {xfields-0.22.0 → xfields-0.22.2}/xfields/slicers/slicers_src/uniform_bin_slicer.h +0 -0
  173. {xfields-0.22.0 → xfields-0.22.2}/xfields/slicers/uniform.py +0 -0
  174. {xfields-0.22.0 → xfields-0.22.2}/xfields/solvers/__init__.py +0 -0
  175. {xfields-0.22.0 → xfields-0.22.2}/xfields/solvers/base.py +0 -0
  176. {xfields-0.22.0 → xfields-0.22.2}/xfields/solvers/fftsolvers.py +0 -0
  177. {xfields-0.22.0 → xfields-0.22.2}/xfields/test_support/__init__.py +0 -0
  178. {xfields-0.22.0 → xfields-0.22.2}/xfields/test_support/temp_makepart.py +0 -0
  179. {xfields-0.22.0 → xfields-0.22.2}/xfields.egg-info/dependency_links.txt +0 -0
  180. {xfields-0.22.0 → xfields-0.22.2}/xfields.egg-info/requires.txt +0 -0
  181. {xfields-0.22.0 → xfields-0.22.2}/xfields.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xfields
3
- Version: 0.22.0
3
+ Version: 0.22.2
4
4
  Summary: Field Maps and Particle In Cell
5
5
  Home-page: https://xsuite.readthedocs.io/
6
6
  Download-URL: https://pypi.python.org/pypi/xfields
@@ -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
- from typing import Tuple
4
+ import xobjects as xo
14
5
 
15
6
 
16
- class _ConvData(xt.BeamElement):
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
- **kwargs):
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
- if type(self.context) == xo.ContextPyopencl:
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.context) == xo.ContextCpu:
76
- return np.fft.rfft(data, **kwargs)
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.context) == xo.ContextCpu:
87
- return np.fft.irfft(data, **kwargs)
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._arr2ctx(self.component.function_vs_zeta(
123
- zeta=self.z_wake, beta0=float(beta0), dzeta=moments_data.dz))
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._arr2ctx(np.exp(
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.context.nplike_lib.ones(
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
- if (r2<1e-20) temp = sqrt(r2)/(2.*PI*EPSILON_0*sigma); //linearised
43
- else temp = (1-exp(-0.5*r2/(sigma*sigma)))/(2.*PI*EPSILON_0*r2);
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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xfields
3
- Version: 0.22.0
3
+ Version: 0.22.2
4
4
  Summary: Field Maps and Particle In Cell
5
5
  Home-page: https://xsuite.readthedocs.io/
6
6
  Download-URL: https://pypi.python.org/pypi/xfields
@@ -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,13 +0,0 @@
1
- *.DS_Store
2
- *.swp
3
- *.so
4
- *.pyc
5
- .project
6
- .pydevproject
7
- *.png
8
- norepository_*
9
- *~
10
- build
11
- CyFPPS.cpp
12
- *.egg-info
13
- .idea/**
@@ -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()