iagapov / ocelot

Main repository moved to https://github.com/ocelot-collab/ocelot
GNU General Public License v3.0
8 stars 11 forks source link

speed up calculations #29

Closed sergey-tomin closed 9 years ago

sergey-tomin commented 9 years ago

scipy.weave is unsupported now. We need to choose standard tool for speeding up some calculations. Maybe cython? Replace scipy.weave in code.

iagapov commented 9 years ago

c/c++ code will probably be needed when introducing space charge. At the same time, for most of the present applications the calculation speed is not critical. I propose to postpone this question for some time. When/if we will be introducing mesh methods, this shall be reconsidered. Probably the best way is to interface c++ code with cython, swig, ect. The problem is that python classes (element, transfer map, particle_array maybe some others) will need to be wrapped, which is lots of code and will impede introduction of new python features. I would not start doing that before more performance bottlenecks start appearing.

zagorodnov commented 9 years ago

Привет Илья,

Меня интересует элемент „undulator“. Что такое Kx и Ky?

Функция write_lattice из модуля io не сохраняет этот элемент в файл. Можешь ли ты изменить эту функцию для сохранения undulator?

Игорь

Вот как этот элемент определен в элеганте

http://www.aps.anl.gov/Accelerator_Systems_Division/Accelerator_Operations_Physics/manuals/elegant_latest/node207.html

sergey-tomin commented 9 years ago

Привет Игорь! насчет сохранения это мой косяк, забыл добавить ондулятор. Уже сделал. Kx, Ky - deflection parameters (в Элеганте K-Dimensionless strength parameter.). В обычном пленарном однуляторе используй просто Kx .

Сергей.

zagorodnov commented 9 years ago

Привет Сергей,

  1. Как реализована фокусировка андулятора? Тестировалась ли она?
  2. Почему при сохранении элемента cavity не сохраняется фаза?
  3. Можно ли ввести в cavity параметер который включал бы и отключал бы rf-focusing?

Игорь

From: sergey-tomin [mailto:notifications@github.com] Sent: Sunday, December 07, 2014 8:05 PM To: iagapov/ocelot Cc: Zagorodnov, Igor Subject: Re: [ocelot] speed up calculations (#29)

Привет Игорь! насчет сохранения это мой косяк, забыл добавить ондулятор. Уже сделал. Kx, Ky - deflection parameters (в Элеганте K-Dimensionless strength parameter.). В обычном пленарном однуляторе используй просто Kx .

Сергей.

— Reply to this email directly or view it on GitHub https://github.com/iagapov/ocelot/issues/29#issuecomment-65948969 . https://github.com/notifications/beacon/AISyP38xwVNaogk37TlSg6q74px8QrV4ks5nVJxygaJpZM4C_lwU.gif

iagapov commented 9 years ago

iii. делать не надо. Если что-то тестировать, то можно отключить в коде.

iagapov commented 9 years ago

please open another issue for this discussion.

sergey-tomin commented 9 years ago
  1. коэффициент фокусировки K = 1/(2*r^2) для вертикали, по горизонтали прямой промежуток (для twiss). Но для трекинга кроме линейного члена еще включены более высокие порядки.
  2. поправил.
zagorodnov commented 9 years ago

Я застрял с ускорительными элементами. Для ускорения on-crest чему должна быть равна фаза? 0 или 90 градусов? В элеганте это 90 градусов.

Я пытаюсь увидеть рост энергии используя

Energy = np.array(map(lambda p: p.E, tws)).

Но энергия остается постоянной. Что я делаю не так?

Это оптика

DRIFT_0.646679650799 = Drift(l = 0.646679650799, id = 'DRIFT_0.646679650799')

DRIFT_0.525731 = Drift(l = 0.525731, id = 'DRIFT_0.525731')

DRIFT_0.963 = Drift(l = 0.963, id = 'DRIFT_0.963')

DRIFT_0.4476 = Drift(l = 0.4476, id = 'DRIFT_0.4476')

DRIFT_0.3232 = Drift(l = 0.3232, id = 'DRIFT_0.3232')

DRIFT_0.6732 = Drift(l = 0.6732, id = 'DRIFT_0.6732')

DRIFT_0.8863 = Drift(l = 0.8863, id = 'DRIFT_0.8863')

DRIFT_0.2954 = Drift(l = 0.2954, id = 'DRIFT_0.2954')

DRIFT_1.736106 = Drift(l = 1.736106, id = 'DRIFT_1.736106')

DRIFT_0.348 = Drift(l = 0.348, id = 'DRIFT_0.348')

DRIFT_0.3485 = Drift(l = 0.3485, id = 'DRIFT_0.3485')

DRIFT_0.35955 = Drift(l = 0.35955, id = 'DRIFT_0.35955')

DRIFT_0.065 = Drift(l = 0.065, id = 'DRIFT_0.065')

DRIFT_0.64355 = Drift(l = 0.64355, id = 'DRIFT_0.64355')

DRIFT_2.7713 = Drift(l = 2.7713, id = 'DRIFT_2.7713')

DRIFT_0.1954 = Drift(l = 0.1954, id = 'DRIFT_0.1954')

DRIFT_1.588744 = Drift(l = 1.588744, id = 'DRIFT_1.588744')

quadrupoles

Q1DBC2.U = Quadrupole(l = 0.1384, k1 = -5.986955, id = 'Q1DBC2.U')

Q1DBC2.D = Quadrupole(l = 0.1384, k1 = -5.986955, id = 'Q1DBC2.D')

Q1.1DBC2 = Quadrupole(l = 0.2768, k1 = 6.114656, id = 'Q1.1DBC2')

Q2DBC2 = Quadrupole(l = 0.2768, k1 = -3.462379, id = 'Q2DBC2')

Q2.2DBC2 = Quadrupole(l = 0.2768, k1 = 1.401877, id = 'Q2.2DBC2')

Q3DBC2.U = Quadrupole(l = 0.1384, k1 = 0.88379, id = 'Q3DBC2.U')

Q3DBC2.D = Quadrupole(l = 0.1384, k1 = 0.88379, id = 'Q3DBC2.D')

Q4DBC2 = Quadrupole(l = 0.2768, k1 = -3.2434, id = 'Q4DBC2')

Q5DBC2.U = Quadrupole(l = 0.1384, k1 = 3.2434, id = 'Q5DBC2.U')

Q5DBC2.D = Quadrupole(l = 0.1384, k1 = 3.2434, id = 'Q5DBC2.D')

Q6DBC2 = Quadrupole(l = 0.2768, k1 = -3.2434, id = 'Q6DBC2')

Q7DBC2.U = Quadrupole(l = 0.1384, k1 = 3.2434, id = 'Q7DBC2.U')

Q7DBC2.D = Quadrupole(l = 0.1384, k1 = 3.2434, id = 'Q7DBC2.D')

Q8DBC2 = Quadrupole(l = 0.2768, k1 = -3.2434, id = 'Q8DBC2')

Q9DBC2.U = Quadrupole(l = 0.1384, k1 = 3.2434, id = 'Q9DBC2.U')

Q9DBC2.D = Quadrupole(l = 0.1384, k1 = 3.2434, id = 'Q9DBC2.D')

Q10DBC2 = Quadrupole(l = 0.2768, k1 = -3.2434, id = 'Q10DBC2')

Q10.3DBC2 = Quadrupole(l = 0.3046, k1 = -5.49855, id = 'Q10.3DBC2')

Q11DBC2.U = Quadrupole(l = 0.1523, k1 = 6.360868, id = 'Q11DBC2.U')

Q11DBC2.D = Quadrupole(l = 0.1523, k1 = 6.360868, id = 'Q11DBC2.D')

Q12DBC2 = Quadrupole(l = 0.3046, k1 = -4.717402, id = 'Q12DBC2')

Q9ACC2.U = Quadrupole(l = 0.0925, k1 = 2.988514, id = 'Q9ACC2.U')

Q9ACC2.D = Quadrupole(l = 0.0925, k1 = 2.988514, id = 'Q9ACC2.D')

Q10ACC2.U = Quadrupole(l = 0.0925, k1 = -2.988514, id = 'Q10ACC2.U')

Q10ACC2.D = Quadrupole(l = 0.0925, k1 = -2.988514, id = 'Q10ACC2.D')

Q9ACC3.U = Quadrupole(l = 0.0925, k1 = 2.374885, id = 'Q9ACC3.U')

Q9ACC3.D = Quadrupole(l = 0.0925, k1 = 2.374885, id = 'Q9ACC3.D')

Q10ACC3.U = Quadrupole(l = 0.0925, k1 = -2.908592, id = 'Q10ACC3.U')

Q10ACC3.D = Quadrupole(l = 0.0925, k1 = -2.908592, id = 'Q10ACC3.D')

Q1UBC3.U = Quadrupole(l = 0.1523, k1 = 0.442439, id = 'Q1UBC3.U')

Q1UBC3.D = Quadrupole(l = 0.1523, k1 = 0.442439, id = 'Q1UBC3.D')

Q2UBC3 = Quadrupole(l = 0.3046, k1 = 0, id = 'Q2UBC3')

bending magnets

D1BC2 = Bend(l = 0.50832, angle = -0.314159, e1 = 0, e2 = -0.314159, tilt = 0, id = 'D1BC2')

D2BC2 = Bend(l = 0.50832, angle = 0.314159, e1 = 0.314159, e2 = 0, tilt = 0, id = 'D2BC2')

D3BC2 = Bend(l = 0.50832, angle = 0.314159, e1 = 0, e2 = 0.314159, tilt = 0, id = 'D3BC2')

D4BC2 = Bend(l = 0.50832, angle = -0.314159, e1 = -0.314159, e2 = 0, tilt = 0, id = 'D4BC2')

D1BC3 = Bend(l = 0.500367, angle = -0.066323, e1 = 0, e2 = -0.066323, tilt = 0, id = 'D1BC3')

markers

monitor

sextupoles

octupole

undulator

cavity

C1.M1.ACC23 = Cavity(l = 1.0363, volt = 16534700.3937, delta_e = 0.0, freq = 1300000000, phi = 0, volterr = 0.0, id = 'C1.M1.ACC23')

C2.M1.ACC23 = Cavity(l = 1.0363, volt = 13042900.0854, delta_e = 0.0, freq = 1300000000, phi = 0, volterr = 0.0, id = 'C2.M1.ACC23')

C3.M1.ACC23 = Cavity(l = 1.0363, volt = 18794099.8077, delta_e = 0.0, freq = 1300000000, phi = 0, volterr = 0.0, id = 'C3.M1.ACC23')

C4.M1.ACC23 = Cavity(l = 1.0363, volt = 19410299.3011, delta_e = 0.0, freq = 1300000000, phi = 0, volterr = 0.0, id = 'C4.M1.ACC23')

C5.M1.ACC23 = Cavity(l = 1.0363, volt = 18588699.3408, delta_e = 0.0, freq = 1300000000, phi = 0, volterr = 0.0, id = 'C5.M1.ACC23')

C6.M1.ACC23 = Cavity(l = 1.0363, volt = 15507699.9664, delta_e = 0.0, freq = 1300000000, phi = 0, volterr = 0.0, id = 'C6.M1.ACC23')

C7.M1.ACC23 = Cavity(l = 1.0363, volt = 19102199.5544, delta_e = 0.0, freq = 1300000000, phi = 0, volterr = 0.0, id = 'C7.M1.ACC23')

C8.M1.ACC23 = Cavity(l = 1.0363, volt = 19718399.0479, delta_e = 0.0, freq = 1300000000, phi = 0, volterr = 0.0, id = 'C8.M1.ACC23')

C1.M2.ACC23 = Cavity(l = 1.0363, volt = 18662622.4518, delta_e = 0.0, freq = 1300000000, phi = 0, volterr = 0.0, id = 'C1.M2.ACC23')

C2.M2.ACC23 = Cavity(l = 1.0363, volt = 18662622.4518, delta_e = 0.0, freq = 1300000000, phi = 0, volterr = 0.0, id = 'C2.M2.ACC23')

C3.M2.ACC23 = Cavity(l = 1.0363, volt = 18662622.4518, delta_e = 0.0, freq = 1300000000, phi = 0, volterr = 0.0, id = 'C3.M2.ACC23')

C4.M2.ACC23 = Cavity(l = 1.0363, volt = 18662622.4518, delta_e = 0.0, freq = 1300000000, phi = 0, volterr = 0.0, id = 'C4.M2.ACC23')

C5.M2.ACC23 = Cavity(l = 1.0363, volt = 18662622.4518, delta_e = 0.0, freq = 1300000000, phi = 0, volterr = 0.0, id = 'C5.M2.ACC23')

C6.M2.ACC23 = Cavity(l = 1.0363, volt = 18662622.4518, delta_e = 0.0, freq = 1300000000, phi = 0, volterr = 0.0, id = 'C6.M2.ACC23')

C7.M2.ACC23 = Cavity(l = 1.0363, volt = 18662622.4518, delta_e = 0.0, freq = 1300000000, phi = 0, volterr = 0.0, id = 'C7.M2.ACC23')

C8.M2.ACC23 = Cavity(l = 1.0363, volt = 18662622.4518, delta_e = 0.0, freq = 1300000000, phi = 0, volterr = 0.0, id = 'C8.M2.ACC23')

rfcavity

Matrices

Solenoids

lattice

lattice = (DRIFT_0.646679650799, D1BC2, DRIFT_0.525731, D2BC2, DRIFT_0.963, D3BC2, DRIFT_0.525731,

D4BC2, DRIFT_0.4476, Q1DBC2.U, Q1DBC2.D, DRIFT_0.3232, Q1.1DBC2, DRIFT_0.3232, Q2DBC2,

DRIFT_0.3232, Q2.2DBC2, DRIFT_0.3232, Q3DBC2.U, Q3DBC2.D, DRIFT_0.3232, Q4DBC2, DRIFT_0.6732,

Q5DBC2.U, Q5DBC2.D, DRIFT_0.6732, Q6DBC2, DRIFT_0.6732, Q7DBC2.U, Q7DBC2.D, DRIFT_0.6732,

Q8DBC2, DRIFT_0.6732, Q9DBC2.U, Q9DBC2.D, DRIFT_0.6732, Q10DBC2, DRIFT_0.8863, Q10.3DBC2,

DRIFT_0.2954, Q11DBC2.U, Q11DBC2.D, DRIFT_0.2954, Q12DBC2, DRIFT_1.736106, C1.M1.ACC23, DRIFT_0.348,

C2.M1.ACC23, DRIFT_0.3485, C3.M1.ACC23, DRIFT_0.3485, C4.M1.ACC23, DRIFT_0.3485, C5.M1.ACC23, DRIFT_0.3485,

C6.M1.ACC23, DRIFT_0.3485, C7.M1.ACC23, DRIFT_0.3485, C8.M1.ACC23, DRIFT_0.35955, Q9ACC2.U, Q9ACC2.D,

DRIFT_0.065, Q10ACC2.U, Q10ACC2.D, DRIFT_0.64355, C1.M2.ACC23, DRIFT_0.3485, C2.M2.ACC23, DRIFT_0.3485,

C3.M2.ACC23, DRIFT_0.3485, C4.M2.ACC23, DRIFT_0.3485, C5.M2.ACC23, DRIFT_0.3485, C6.M2.ACC23, DRIFT_0.3485,

C7.M2.ACC23, DRIFT_0.3485, C8.M2.ACC23, DRIFT_0.35955, Q9ACC3.U, Q9ACC3.D, DRIFT_0.065, Q10ACC3.U,

Q10ACC3.D, DRIFT_2.7713, Q1UBC3.U, Q1UBC3.D, DRIFT_0.1954, Q2UBC3, DRIFT_1.588744, D1BC3)

zagorodnov commented 9 years ago

Оптика без ускорения совпадает. С ускорением нет. Прерывистой линией показаны данные из элеганта.

From: sergey-tomin [mailto:notifications@github.com] Sent: Monday, December 08, 2014 11:04 AM To: iagapov/ocelot Cc: Zagorodnov, Igor Subject: Re: [ocelot] speed up calculations (#29)

  1. коэффициент фокусировки K = 1/(2*r^2) для вертикали, по горизонтали прямой промежуток (для twiss). Но для трекинга кроме линейного члена еще включены более высокие порядки.
  2. поправил.

— Reply to this email directly or view it on GitHub https://github.com/iagapov/ocelot/issues/29#issuecomment-66048664 . https://github.com/notifications/beacon/AISyP8FuImvJP02O8NWQiA3FUvrSJ_ikks5nVW8BgaJpZM4C_lwU.gif

zagorodnov commented 9 years ago

Я задал изменение энергии в ускорительном модуле через delta_e (через v не работает), но RF фокусировка не работает. Где в коде я могу найти как реализована RF фокусировка?

zagorodnov commented 9 years ago

Корректоры Hcor и Vcor не сохраняются в файл.

Функция write_lattice из модуля io.

sergey-tomin commented 9 years ago

fixed

zagorodnov commented 9 years ago

Я посылаю пример. Расхождение оптики из- за RF фокусировки показано на рисунке. Пример разархивировать с поддерикторией, которая содержит файлы из элеганта. Запускать twiss_s2e.py.

From: sergey-tomin [mailto:notifications@github.com] Sent: Tuesday, December 09, 2014 12:58 PM To: iagapov/ocelot Cc: Zagorodnov, Igor Subject: Re: [ocelot] speed up calculations (#29)

fixed

— Reply to this email directly or view it on GitHub https://github.com/iagapov/ocelot/issues/29#issuecomment-66272174 . https://github.com/notifications/beacon/AISyP5uOoEeDBUAka0AwDI5Kdw2laKFVks5nVtsugaJpZM4C_lwU.gif

sergey-tomin commented 9 years ago

куда посылаешь?

zagorodnov commented 9 years ago

Куда то послал. Дай твой прямой адрес.

From: sergey-tomin [mailto:notifications@github.com] Sent: Tuesday, December 09, 2014 1:29 PM To: iagapov/ocelot Cc: Zagorodnov, Igor Subject: Re: [ocelot] speed up calculations (#29)

куда посылаешь?

— Reply to this email directly or view it on GitHub https://github.com/iagapov/ocelot/issues/29#issuecomment-66275413 . https://github.com/notifications/beacon/AISyPx9az_ba5BJaUy2EtLBYgM2EyXRFks5nVuJ9gaJpZM4C_lwU.gif

sergey-tomin commented 9 years ago

Мне Илья уже переслал, но вот на всякий случай tominsi@mail.ru

iagapov commented 9 years ago

Igor, I see in your input file something like:

C1.M1.ACC23 = Cavity(l = 1.0363, volt = 16534700.3937, delta_e = 0.018, freq = 1300000000, phi = 0, volterr = 0.0, id = 'C1.M1.ACC23') C2.M1.ACC23 = Cavity(l = 1.0363, volt = 13042900.0854, delta_e = 0.018, freq = 1300000000, phi = 0, volterr = 0.0, id = 'C2.M1.ACC23')

so the cavities have different voltages but same delta_e and phi=0. Are you converting it right?

sergey-tomin commented 9 years ago

done