From ad449946a78677c73ad4a26cea3b911171cdcc1a Mon Sep 17 00:00:00 2001 From: David Sagan Date: Mon, 16 Oct 2023 23:05:40 -0400 Subject: [PATCH 1/3] Fix crab_cavity gradient param now not dependent. --- bmad/doc/charged-tracking.tex | 6 +++--- bmad/doc/lattice-file.tex | 6 +++++- bmad/modules/attribute_mod.f90 | 8 ++++---- bmad/parsing/bmad_parser.f90 | 22 +--------------------- bmad/parsing/bmad_parser_mod.f90 | 2 ++ regression_tests/scripts/svn_regression.py | 2 +- tao/version/tao_version_mod.f90 | 2 +- 7 files changed, 17 insertions(+), 31 deletions(-) diff --git a/bmad/doc/charged-tracking.tex b/bmad/doc/charged-tracking.tex index 0fe6ab3068..62a07ef62f 100644 --- a/bmad/doc/charged-tracking.tex +++ b/bmad/doc/charged-tracking.tex @@ -48,7 +48,7 @@ \section{Relative Versus Absolute Time Tracking} upstream end of the element. $t_\text{eff}$ is defined such that a particle entering an element with $z = 0$ has $t_\text{eff} = 0$. -With \vn{absolute time tracking}, and \vn{bmad_com%absolute_time_ref_shift} set to True (the +With \vn{absolute time tracking}, and \vn{bmad_com[absolute_time_ref_shift]} set to True (the default), $t_\text{eff}$ is defined by \begin{equation} t_\text{eff}(s) = t(s) - t_0(s_\text{ent}) @@ -58,7 +58,7 @@ \section{Relative Versus Absolute Time Tracking} reference particle at the entrance end of the element on the first pass. For absolute time tracking, it is important to keep in mind that $t_0(s_\text{ent})$ is a property of the element independent of how tracking is done. Thus, if a particle goes through a particular element multiple times, the -value of $t_\text{ent}$ will be the same for each transit. If \vn{bmad_com%absolute_time_ref_shift} +value of $t_\text{ent}$ will be the same for each transit. If \vn{bmad_com[absolute_time_ref_shift]} set to True, $t_\text{eff}$ is simply \begin{equation} t_\text{eff}(s) = t(s) @@ -67,7 +67,7 @@ \section{Relative Versus Absolute Time Tracking} To understand the difference between relative and absolute time tracking, consider a particle traveling on the reference orbit along side the reference particle in a circular ring with one RF cavity. This particle always has $z = 0$ and thus, with \vn{relative time tracking}, $t_\text{eff}$ -will always be zero (assuming \vn{bmad_com%absolute_time_ref_shift} is set to True) at the entrance +will always be zero (assuming \vn{bmad_com[absolute_time_ref_shift] is set to True) at the entrance to the cavity. With \vn{absolute time tracking}, the particle, on the first turn, will have $t_\text{eff}$ equal to zero. However, on subsequent turns (or subsequent passes if using multipass), the time will increase by the revolution time $t_\text{C}$ on each turn. If the RF diff --git a/bmad/doc/lattice-file.tex b/bmad/doc/lattice-file.tex index f0eb905488..b97de6135b 100644 --- a/bmad/doc/lattice-file.tex +++ b/bmad/doc/lattice-file.tex @@ -698,7 +698,8 @@ \section{Particle Species Names} The curly brackets \{...\} denote optional prefixes and suffixes. \vn{AA} here is the atomic symbol, \vn{\#nnn} is the number of nucleons, and \vn{ccc} is the charge. Examples: \begin{example} - parameter[particle] = \#12C+3 ! Triply charged carbon-12 + parameter[particle] = \#12C+3 ! Triply charged carbon-12. + parameter[p0c] = 12 * 500e6 ! Reference momentum is total momentum for particle. parameter[particle] = He-- ! Doubly charged He. \end{example} If the number of nucleons is given, the appropriate weight for that isotope is used. If the number @@ -714,6 +715,9 @@ \section{Particle Species Names} mass shifts due to finite electron binding energies. This shift is small typically being well less than 1\% of the mass of the electron. +Note: When setting the reference momentum \vn{parameter[p0c]}, or reference total energy +\vn{parameter[E_tot]}, the total for the whole particle is used. {\em Not} the value per nucleon. + Another group of particles are the ``known'' molecules. The syntax for these are: \begin{example} BBB\{@Mxxxx\}\{ccc\} diff --git a/bmad/modules/attribute_mod.f90 b/bmad/modules/attribute_mod.f90 index 3386ead67b..7facc6bc05 100644 --- a/bmad/modules/attribute_mod.f90 +++ b/bmad/modules/attribute_mod.f90 @@ -1405,14 +1405,14 @@ subroutine init_attribute_name_array () call init_attribute_name1 (crab_cavity$, cylindrical_map$, 'CYLINDRICAL_MAP') call init_attribute_name1 (crab_cavity$, gen_grad_map$, 'GEN_GRAD_MAP') call init_attribute_name1 (crab_cavity$, grid_field$, 'GRID_FIELD') -call init_attribute_name1 (crab_cavity$, gradient$, 'GRADIENT', dependent$) +call init_attribute_name1 (crab_cavity$, gradient$, 'GRADIENT') call init_attribute_name1 (crab_cavity$, rf_frequency$, 'RF_FREQUENCY') call init_attribute_name1 (crab_cavity$, rf_wavelength$, 'RF_WAVELENGTH', dependent$) call init_attribute_name1 (crab_cavity$, rf_clock_harmonic$, 'rf_clock_harminic', private$) -call init_attribute_name1 (crab_cavity$, field_autoscale$, 'FIELD_AUTOSCALE', private$) ! Not yet used -call init_attribute_name1 (crab_cavity$, phi0_autoscale$, 'PHI0_AUTOSCALE', private$) ! Not yet used +call init_attribute_name1 (crab_cavity$, field_autoscale$, 'FIELD_AUTOSCALE', private$) ! Not yet used +call init_attribute_name1 (crab_cavity$, phi0_autoscale$, 'PHI0_AUTOSCALE', private$) ! Not yet used call init_attribute_name1 (crab_cavity$, autoscale_amplitude$, 'AUTOSCALE_AMPLITUDE', private$) ! Not yet used -call init_attribute_name1 (crab_cavity$, autoscale_phase$, 'AUTOSCALE_PHASE', private$) ! Not yet used +call init_attribute_name1 (crab_cavity$, autoscale_phase$, 'AUTOSCALE_PHASE', private$) ! Not yet used call init_attribute_name1 (crab_cavity$, field_master$, 'FIELD_MASTER') call init_attribute_name1 (rfcavity$, longitudinal_mode$, 'LONGITUDINAL_MODE') diff --git a/bmad/parsing/bmad_parser.f90 b/bmad/parsing/bmad_parser.f90 index 32cecd0f0a..e756a20fd4 100644 --- a/bmad/parsing/bmad_parser.f90 +++ b/bmad/parsing/bmad_parser.f90 @@ -1081,7 +1081,7 @@ subroutine bmad_parser (lat_file, lat, make_mats6, digested_read_ok, use_line, e call drift_multipass_name_correction(lat) !------------------------------------- -! If a girder elements refer to a line then must expand that line. +! If a girder element refers to a line then must expand that line. do i = 1, n_max lord => in_lat%ele(i) @@ -1114,26 +1114,6 @@ subroutine bmad_parser (lat_file, lat, make_mats6, digested_read_ok, use_line, e enddo enddo -! Check for misspellings of superposition reference elements. - -if (bp_com%do_superimpose) then - do i = 1, n_max - if (in_lat%ele(i)%lord_status /= super_lord$) cycle - pele => plat%ele(i) - if (pele%ref_name == blank_name$) cycle - - call lat_ele_locator (pele%ref_name, lat, eles, n_loc, err) - if (err) cycle ! this error already handled by parser_add_superimpose - if (n_loc /= 0) cycle - - call lat_ele_locator (pele%ref_name, in_lat, eles, n_loc, err) - if (n_loc /= 0) cycle - - call parser_error ('NO MATCH FOR REFERENCE ELEMENT: ' // pele%ref_name, & - 'FOR SUPERPOSITION OF: ' // in_lat%ele(i)%name, pele = pele) - enddo -endif - ! PTC stuff. ! Use arbitrary energy above the rest mass energy since when tracking individual elements the ! true reference energy is used. diff --git a/bmad/parsing/bmad_parser_mod.f90 b/bmad/parsing/bmad_parser_mod.f90 index c331ef71f6..6d22c5713b 100644 --- a/bmad/parsing/bmad_parser_mod.f90 +++ b/bmad/parsing/bmad_parser_mod.f90 @@ -7154,6 +7154,8 @@ subroutine settable_dep_var_bookkeeping (ele) else ele%value(gradient$) = ele%value(voltage$) / ele%value(l$) endif + else + ele%value(voltage$) = ele%value(gradient$) * ele%value(l$) endif !------------------ diff --git a/regression_tests/scripts/svn_regression.py b/regression_tests/scripts/svn_regression.py index e1543aa6cf..ee2dcaa35a 100755 --- a/regression_tests/scripts/svn_regression.py +++ b/regression_tests/scripts/svn_regression.py @@ -17,7 +17,7 @@ "https://accserv.classe.cornell.edu/svn/packages/lapack95" : "53051", "https://accserv.classe.cornell.edu/svn/packages/openmpi" : "51988", "https://accserv.classe.cornell.edu/svn/packages/plplot" : "55075", # Change from 54925 - "https://accserv.classe.cornell.edu/svn/packages/xraylib" : "54916", # Change from 53181 + "https://accserv.classe.cornell.edu/svn/packages/xraylib" : "55246", # Change from 54916 } all_pass = True diff --git a/tao/version/tao_version_mod.f90 b/tao/version/tao_version_mod.f90 index bdfec2ce40..e5e0740966 100644 --- a/tao/version/tao_version_mod.f90 +++ b/tao/version/tao_version_mod.f90 @@ -6,5 +6,5 @@ !- module tao_version_mod -character(*), parameter :: tao_version_date = "2023/10/10 11:50:30" +character(*), parameter :: tao_version_date = "2023/10/10 15:26:13" end module From 55882da10b259263889f9b2104bc716e9755483f Mon Sep 17 00:00:00 2001 From: David Sagan Date: Sun, 22 Oct 2023 21:27:51 -0400 Subject: [PATCH 2/3] Added set_tune_via_group_knobs routine. --- .gitignore | 25 +- bmad-doc/other_manuals/sodom2.pdf | Bin 162351 -> 162262 bytes bmad-doc/other_manuals/tune_scan.pdf | Bin 1324267 -> 1333100 bytes bmad/code/set_tune.f90 | 3 +- bmad/code/set_tune_via_group_knobs.f90 | 189 + bmad/modules/bmad_routine_interface.f90 | 11 + bmad/multiparticle/beam_file_io.f90 | 145 +- bmad/searchf.namelist | 3481 +++++++++ bsim/code/bsim_interface.f90 | 3 +- bsim/code/set_tune_3d.f90 | 33 +- .../doc/long_term_tracking.tex | 44 +- .../long_term_tracking/long_term_tracking.f90 | 7 +- .../long_term_tracking_mpi.f90 | 132 +- bsim/modules/lt_tracking_mod.f90 | 88 +- bsim/modules/ts_mod.f90 | 52 +- bsim/searchf.namelist | 590 ++ bsim/tune_scan/doc/tune_scan.tex | 82 +- bsim/tune_scan/tune_scan.f90 | 2 +- bsim/tune_scan/tune_scan_mpi.f90 | 2 +- code_examples/searchf.namelist | 60 + forest/searchf.namelist | 6677 +++++++++++++++++ sim_utils/searchf.namelist | 1492 ++++ tao/searchf.namelist | 835 +++ tao/version/tao_version_mod.f90 | 2 +- util_programs/searchf.namelist | 190 + 25 files changed, 14015 insertions(+), 130 deletions(-) create mode 100644 bmad/code/set_tune_via_group_knobs.f90 create mode 100644 bmad/searchf.namelist create mode 100644 bsim/searchf.namelist create mode 100644 code_examples/searchf.namelist create mode 100644 forest/searchf.namelist create mode 100644 sim_utils/searchf.namelist create mode 100644 tao/searchf.namelist create mode 100644 util_programs/searchf.namelist diff --git a/.gitignore b/.gitignore index b83a1f6d2d..019e3dc856 100644 --- a/.gitignore +++ b/.gitignore @@ -34,18 +34,21 @@ bmad-doc/cookbook_bmad_tao/doc/cookbook_bmad_tao.pdf bmad-doc/cookbook_bmad_tao/doc/cookbook_bmad_tao.toc bmad-doc/tao_examples/csr_beam_tracking/csr_wake.dat -bmad/doc/*aux -bmad/doc/bmad.idx -bmad/doc/bmad.ilg -bmad/doc/bmad.ind -bmad/doc/bmad.lof -bmad/doc/bmad.log -bmad/doc/bmad.lot -bmad/doc/bmad.out bmad/doc/bmad.pdf -bmad/doc/bmad.rdx -bmad/doc/bmad.rnd -bmad/doc/bmad.toc +bsim/**/doc/*.pdf + +**/doc/*.idx +**/doc/*.ilg +**/doc/*.ind +**/doc/*.lof +**/doc/*.log +**/doc/*.lot +**/doc/*.out +**/doc/*.rdx +**/doc/*.rnd +**/doc/*.toc +**/doc/*.aux +**/2www.pl regression_tests/*/output.now regression_tests/*/lat.bmad diff --git a/bmad-doc/other_manuals/sodom2.pdf b/bmad-doc/other_manuals/sodom2.pdf index df01d9b99133cf9e4f1d1591cc0f2d156d3937fb..cb0c2b60937d42a8f6698f22871a82660ecc0f36 100644 GIT binary patch delta 18906 zcmV(wK=DSz!+OOx9+628x`;BBdjiQo+)TRCht>y*9aa>ky^ zmhA&A(IeJUq#{!Bh7<@i8vXpbF*vzRaPrd?o;`oLBJjis zNfb>amxwBvtan#tj7xW-Vm4AdGp4@Db zSLw^=KR$n!(N#uOp8kATQJl87hhn#SbMy4-Z#UtNB9};Da&gBw%Z>w;Xrv{Th5@c5 zB1|NLYs86T<5|)7j)#}kZPOmgx~>chNd~OuQo)lTErgr>eBHNi%Y$1$^dt8|F=b}W z{J`q#J#-uY0k4GNEr%LBf_<#K+LwBr%#&x z&~A?FzG@pwZ8&=JDq~EiXq5?!zt)56uf4;Ue9Xi{ILLFviD^vRyv+ZDm-!Tj+yJ=s0S{C6ctdS5|$H)39p&wq-pAH3;Fvp;%I zd|cJ#d><~zAErA>oITKV`Cz)`yA{J}c_^E8*_{bFCx1kXJ0#D8(X)_0#A{9v%TM8& zV4!EhwM}!AkUh^(66KUbv}Z^&Jxi2~(zNQ#lch!Dei!v^3l2m?TJ_tV`(`z4MyW`5 zCIB7lqAxdY!CS+@M}PPJcjOlQV?{Wu_@`ygEdFTT3ODJMKQD0>=3b12y_&^O7D{+(Uo~#}Ym8}Gd$wO=fuFp53=g}hHSbAY zwrj9-V!)#=T)jGbju`o&H_Za*qj+HG62`n~;` zr(1Ah_rVy2dG>`>Vd>{LrI&8~(XA*AZy$%*?$GYs+XXGtGc6ml0fV`*nGfiK zVnRj=H{R{bb$?aV&dw>G*f}$BMpK~Z6RVrTrmg_k?lj>wW+dV+5@9BXIoW;?T)U~( zUSw98=54Sh3+;e=L`f+2ep~qT)3vn~ec8=2{LQxA6%eij%5rc5ppC(d64QvO{ zgX6!qQ+J6%lAC39@^UCR0!FEzNB{{?KjQRGnbC8Zk^9Na(jywoQ7aSljhZl2Eg3;v zd-K9k6MyGYCzDBMf)9v-%U}^DiZ2t5?o20k6xB00px}X;@36HdZfnhg+&;s+f3K=q zlya_4nt+WdhT!VN3P3?<_Wu=40!cwMAxb(?@num-By*NbCVc~909+8u96(ZYex5pJ z1Tj+!L2OP>B1Ocxm6QJ&E2m#e?4yP9xrGLaSbs@GwV0lXoS<69agHDi2dVJ!fKeIn z$bK}>JgqASSLsL1RQiOduvs=;LYJHJ&b*#nV_~#b|W%?+r#&OXfiYB*|cFm_UQ5 zCVxyFG11(UXjBsr`zDjT(ZndiDnVxyGgG(6zz<|*{@HXhrB2iXIZ^OObq}iy;^rf7 zjDSR>;34*V@31rnC|?%qZRA7(3Nv<>z(sJ3D&{8$Y--B6LCkz8Ke#D6TxnHos6K0o_`WVvVQBRwcWa^>tfi()PFRa(w8L)yz=ClRvfNm*zIdO1)R{-zyo82 zr*Lf6?GdJI+^~1C=Jrv9Z7>9iBx9il?hvU6Z5Rh46*Neq(GU)Mz&9 zX0}G8xwa(_gr^`b{b?m|+C|t=7-6gjc48X|B=yO3vvu1ZHdSLQX|q`sBMM?wV}D8Y zA)0q4L>Cj!#Amu_N|5ussnsBKGQ<3WX$S^P`!3Y}yt&U9qz*vmlwm}2bqVjY9I(zM zz<;6znMP=O&)V{i@EKY|7!(jDGQ@9$N2y5`wXK}=1*9PZ^A5!4 z?vgyc;^5hCcU5ougod5B<+?a_<;bM#omozY1#959FUF=;yeYIUe8cK(>3=WQ6ooK4 zBmmFmL^$OTQah)G!u>S898ggVH$j|Gla2%-OR$MRjF}tzIcN*Mgt*Oox}!Y;uyDGG zh&Qg(2pt{zi1?;PV)TUnLfsKL>^TEVljv`eTQsv6XR})MtHdNUQGqCga)u=Fh7`r> zkp1%{o6G`!*rM{;vhrEHlz$Xc};RD-rbQ`CO+*bK@ZbY}}``!>{*U}Dm zFgt(gQkZ?*O`g3>vnT|{_uHcLQ!L&B{1itA_Md%DUizfzSG7O#3F#CWLK2%}Kriu-r8KQkL#mgOZR3e}Pj{~3)gH@3~C+$q47 z5qJfq7*y~a5r1;(v|)TQk#U~1W*)Yp0`CD6=lOX{es&XMnqxCRof3i5bD<-CN^C_> zm{YHm)=w#(RYp)p88Ko$A9ivL#%HW?lv8v4aH2U;>y$%^R7|NPx28p9w% z1@&do$rrkPe<9iDTa7>g!bZ{Hv7K0K=&0%#kY8I3C#?5wr^!Dq#w7&Zrr&iAZXT7F zL>&WQ-XJa_jUOI}VAw$qb}xNU)KxX> zg@D9BS$#dM4Yfs_^dSRnx*it3+p($&d$;#4we9u}e~^C+gJ4a9b2fS)tgo|8!(i$3 z!$7>SqvVI-g~h|R27(57qj=CA^<7ZU?d-UtzS}{0>aMt&OKz&~jzSf}9+%a3g8&ZQ zI1t7TCmc$QU*pP>y6nngx``{>N;c-f+hG^<`lz@U)_5cYdLS%F$!Qp@4zSySG=Q~% zXg!>ce=@_!^~phEW*BUQ^HOdYY%t<_2f-rm(rK95JiM4OaTqM}I1>iS3|Aii41!g$ zw!>Jn5O0W|A(tM>^2iV|BD!I)5uQokIHNhVtq)~7eK+&fTc1(l(%#Sc%hH&fzAkaO zRFx!CLmD359-P~ZILTY@>gfE9s{o!w4s}eIe_)HvI3&RVS{MdwVT*bwW@H~Q^kKj@ zqJqC1RBvWtL!#GEvqD~)5s)+r);zUW|39vJUO2R)|^vwyNg2 z2ojIVF{Nl*f+X)Z&kB;#=d+=|cDA%ByV|u_OW*5U`zoS*vb(J^pdkW=^#mD#af90S zsf=4t?mG-93Hi2)BRR&++_vpuEBzg8e=@i9`L<+pQ`!J8Y510k^5uK0(i0{ML@N~P zA`q=h#8LWQ7P3~fLy^d+!EDbrY8({>l#x_4Rc3CWOKXJ=9(P7LZZu^ax{t!JDQrtC zJM&U+NUPO$E8k$+0Ho6FAMMuLj`V=H_eEu;-3w~?R!ks8ilt4Wi_$WR6up(Ue?YWe ztTtWSBeFGG zhb%imwq$aVlZq+v6iJE!l0bXSsVpT184``txDAsB+n&gHB;oe7o%F4UsI+2AFf5iX zK?;~4W@hS)Ys!X@HrIT=YGmK}f4%)7t=6*R%CwtK9)!BR9DdSYd-uuC)ZMYDL<`bh zGs(iqy3L%B#U!#Aw)O-r7s*B)4Xm^UrWJ>!v9)cFiL!RqbnDUEnk6A>78pA{B1=BL zM^7A2N&F%WmH1(QiKd<+ok^5Hp?PGEe8SQIv!dxGg|bFQG7M0Q>x4DCe`1QI&4pp# zu0upSF0UU!G=5u9Ih!%U&!#Tgs|OLtmb~ zbz$XN&hW5niyIY(p>^>-*Ie?RS>mS(x~n6uxOHiZL%G`a_cZ4+-bcCx20uPVFB<_d z;-N5R$x=Xs$>KJ^Fuw-TfAmD&vZYsoUKwR%uCvs3^m=QrdoM+}R~7IzZ6D_$mlCw1 zk%>AJPk>=?+*{c?Nn>c-bc$X!fNL$8r-qi&0H@?P^0bd%S_p^|ryay@A!#m1(WF4X z7nK$_?j#%}ntpVmz32o#WgDWFc))GeH_+1VO3oD|MF-eROn)SWf5~*^-Z4v$68U56 z=2IK#X&(GYgyR-bpNWblBN6N|5h&SDYOOd(QsG3={Ln?yi=&X|$%=Rpn22jPvX7Jm zOHx|Bb3q~lTb|AGiyD4|MDM~QhTQhcv#)7eoV}JSc~N6&d7oU#_mafPk|HVbEK$-l ziYp~6p_hJEK@kydN3w$r2yFi5{6gRA}i z2oduXC--{Rm*lN`-p-QI!1tByNbz4XZv$JNw_5UsIlJ_?&k7r*U)r*2!O=y$ts>}4 zg6tG{^w^~aJOh-H9}X%rV4#*1BE`_67@Y_?C?O)d7TQNee@v~Ram>h3nw7)CBuP!= zS56YHj9?D(v>0ZRoEat;Buy8gT*~&OF}<9(SAP!rna||Q+&nNY`Am%}h?@H|nPPIX zhouIHDYW6)iuVk1ltUY$A1ldIj^ed=9>QEu0z40$#KCxh(^jPEBv6Z27s+PlT8Vfm zY=S%uJBeCpf45R`rMfdoin+4+1*0ULPV~&zq-eR>M31(FAw;hNhgu{j*^a3*wiY^5*N=oC!GrFwA8~R?QQu6G=Wj`NJQcab%Xs4~L_UMq>*(R|4 z%$@gHiaha=x$2ikTZ1XfYTBXm}+zDr|{&Z*y@k zm245Sl=h{_-13PH))x7Kr;N$m7JFNYO8Hvw`y$TPOLn)VY}hh-xz`hcAZxYJ>-V%L zqdPh^TO6$_{4R8Xu#%iwIV@-u(tFxkQZH57+C;y$q?7BaOn$Q39&YiVi+w8}O37$) zaxSb(e@)b$0;&Ule6I8M(9QCr&-SnkNr)WE_1CcSMXjs;d&2nTCyapM7u4li)WyG! z0#S+Tk+2yEt>We8vKHm%RV&R_^&1P~O?G7|qEQ%{i8wq|VF z;BnFI*jlIJ+p@I|Pv6!^YmRs>oJ_f52em%Z3N z>wY4i-aMhV%z4{;)x-A?4<@UV<@9{LSeEw^KaD@)$^9RnK6>%^FZZ8)|4J)7n2pa? zl`9bU|*OQOGLgl08RXYPoJrH~tFZmMVn`Svaot}(m@1|$X>f+-^`M~6Kx;meY zKYd$BdN>6tt#kk7_Gejq{p9(*Ct&f}<3lW>u)1R;csL0iTMk2ZeHKHqJtj3D_L;n+ zUB_lL2id&aJZXMzj+%Fq^|(1%fYD~se@vTMGjHY>&3SV^Sxy(H&H0BZf4VuJHmhbe zJpe30cAt7&u6@O!XXvuMuw3VJqqzb?HcXEf)tixo|H@^N~ym@Veb zdOACuH0ysYcBK$+B88(zzdU+Q&voPvD83VdRqiuFP=kb!4hvy1-^0$0ywvNTUj2Oh zfb1NwW7F+P{>RI0=rkT?XRj7Fe@biqJz4IuYH#Fze*ESB)9-%f zXZdYzgSo@HJRP5%O*;NcXd%AIa)J=EoPM0_@_Hjrboc1)FR#A;%hPAaUE}#mt2_4= zv(p0}DR4LD$glZ$%xv9Z`{nHb`_(q|nD(j9^uy+-=4CT(P7zt(Pn)ylWDJfa$j&A! z=owylu?@9Lc&D|P_C<3sKb16~M#J$u7Xo2>?0)fS#7NY=4E+@^S?JO>+Ey1)GDd{CpfCjsR(Dg@B~Em#J?|Ma8+aRpfd z0rdYCi4i*w`r+@~-CgAWLzujs3rW+5~cu0eJ$g)IhG5w*L^uKX7fZ)!#P` zs0MKX{dH#nEF3%>|G{b5f-LR8Ko^%c_5Do&!B+nfQW|Utu>yf@0Gh6E`ZIU7`WNsQ zZRzIh{MMeo59n?0KiAfvw*-MePoO38@&d&2L-5D?;Lf``abgda-3hJ%UhSJ#H*#)& zsJEy3;(WeoS9LLfOh2RE|-Wlv4IH|%DlT{X0 zBdH!NFbLp1d_Gf^v-ejQgr6JfmSX>Z`1wmJib7BG^gW$|0ZQ}9Ep~Mmmf8HmpadFE zz+9*-vTOZs3u66pKEdws9?l2bE=93!=w9aHh&;OeOSUnTmyHp|IaGLp#CXzQsP72~ zCIfkt96l^tA`)lJ7Yuey(~qF?FR_S&&5kWyA?OL$DqC%kwK}G1VCyNKf4P@uX3`BD&U32DkV^V_)4z?3%PP6nOB>=#aNCT$G+zMc^5xjVEs)Ed8O3)`_ z;Zw%&$YIg18Munq?pSqPW(rr{Wfp0|Dq|`zI&@zXp4YqG8g3m#zBn@fLLJl$1dEk2 z+T0-4_aTtlR`A-3(%uj#jhZ&1&%pnhObJQHiEqO<`(z{hK4S40>pNS``}Z*jUIr$C z7`0!-i9Y6qH_<6gLA0GVir0=)CY#Avoa&8ouRDMhe2L7qm{2Nz3CL00;_~vQ40U>k zq3V{ghB~&@@qBt~8!NU~S4S}X19g{he;gpE`*-KqlwoPNeo(OfR}_=RF&rw>n3YLA zE$`#%WmPdd5{KkJ>g5SRQTxzywQL{gv0{wjxoC%Ul{ZhWSTP@LmFWUa#|5Bj)+e&d z5@*$&Mi0~kv(!+3B_kH}FQ5;R?~n<~o*x&WVoI*IpRExOu#5GZ#;hB~illuOs56y;J1x^s{^=ST# zb@;F)_i_AJ_I-PTWCh3KPoZiGb+gdYt;2-5j06@ax}i#c=OZWIQTUvx-*u}M+%zN+ zNtHA39W@A?9H%A4-a9|3nkz{ANtexIxBO_a7Y&F@z#JIDM*TX9t#CHzn@icmq>V_A zHieJFRKoUiu0rkQIr@<-HC~XwPTmsY7Ix>*5|-d3>y{0FZde@bnn<%ceEB1^#%knt9O5@xLx!U@UPV$Y_`mS ztdx$jaq|I>As$xc!Ek{_hFZ?VA0$58I*<5v!wf2Ca}V!6;66iZBh;dx=UGe3_?&x} zdebNk5O8%K&*ffSnK$16mH4+RDR{49#|#AGdMYS?gMTwkldruu%tsiCl)ppiB|4&~ ztWu76_4?y#hf}o*`7SKow)|x+;-gS15e#R*iRPax0c?5}zh#IgT;9ZDKbX2M!&Ii1 z-lJx;lfQfjD;hi{HiDPCJjI{}Z+`it7DtCcVXkDkQ5D$KOA z)#w|4&aoVFPSMyRnvKb86TkN&eS>jm)@=~#Hlvx(D}1hq`l76Mf(DHvb#guh3I&$t zC(H&?lhj=H_Mv;&OSFwi+!j=?(CngH2aNd9a@8U7rRlcN`r{gH1ixTI8m6xTLHrM8 zGaHj?USkFfBy%^yYqYj@Rx)_)ykmxtE$gs<*-{bKBjhYPmhrlJ;jGn($6GMJb9?OP zcM{sP1<5C#nS6S(w=_A*-MW+3;=^mEw3V^Fgz5#Xsm+l>5NDw!?IIt3?a!7eR~QQN zd6b{R65H29cT|YWe?)tiYbQNB(uozWxXuc8H#4hg*8N;A=~?0VzYm5);_U%{ zdhL(gKu*K4&o!!+nT#PU+D+!svnq&k#IsWyN`n%WK@L@NurN^9Y~ca?E`lavEo(+; z1<-s<^<{k{H!4Cdb&=%?KPfZNpmlKi(0X^<&&MYvwDMkBl4@lh<{(!raSsaE`?$m( z?YrY~@|I(5pH{iml&&;7oA>h_vD2h~{*ZN~H?XS&Vq-K|;7%r(xG=*xTVspMk!qj!E#>k+03?o0ju>8(i%z!bj4u zGAtOc2H$lq>>ovd@w+om6S<=K3cZWpQsCT6jqhl;TDa8Z~v0pAK33MZ(G;^4(bUbCQuT(U%F2`o%dMMbZR=U9yeP2;!*f z%Ih<_-9N^8#gtP6rZ0#^nEyb3&onicxUR;hFR$%~9ISs&^<~Vdugzvi%cg<{y?23g z#a6d&=Pki=hJzM_9mz3P6Z1hz$-{Y}`3Xf@Y{C8IoIO&C@43u-g0tUlXP!_uvmUk~ z65aHSw#An#g7?K!V-FoiXryPV5HNp-Fn>X8ezT9(jnRgx97FIb`)a~}-G+eLl5gH- zmv*+OtEPBf4+uaUa%)0^CsRJm&d;MS&Xe>w#u$n{?YC)wy4rN!b6hD@kRxmvH;t3nm z3iBVQ9nYf3v3prnbVU65{zh-3LjJ+AdZd%yJ`%CG7Nb7;q{`fkP<^pD3i>(3f_ z*<8A|>(qA)v(EE>deuN`KJ9&$ay3U`if~D_Urb4;n&6*%36gBe9KYpP-Rv5;p~*Y? zi+}h)6pCK8ecDr3(~~NYytNgA)if7xM6ePZxN-$xYM$?iYol%a5$q2KEb+3BO7~G5 zHa+~}QasSnb?Bd$wrpB8MGi;SZ1%e%QUUXYnN-4x6RS~w(bQhudYCI>uX062Fkqp4 z0JYxplnG{B$#@`d-&SMo$CFVkERN{jC=}FIQ)qnnO&SI&I?7ov35Ql^lwGhzh>q}V zTY+QgjoJnhc=nU=ue$mWCcFxOacRx4oFVt*q+= zlUijK^gcgpw1tJ5M!>mE8Cy0#;NBXOj}?A8pV?<0-n-X;tZbEq?xcD%hvMs+e5M#-3`d3Ijz=7q#e z5(gqBr|A0+@O{kl5$n5-ye-(WP8ufC@XUOFrhizz9;mf{3N7i(Sv*0nFe-|}F!#cS z!bdX{ra3%Pb|ptu>-?I~=D%qWrfJb+MG)_xwJR8g)t} zrc*f}Gzi!RwQ7Uc=k$4_M`sO3>)=IyH;^iNG(8Wc>B6AQSCuIQb2WsDKhbc<)n+;P zc$Wi0Q6%U3-4C&Q$acPawe!O|I{wQsD?RufBn$W)aP7XBS5Ti)AmwDl|-uh!lsri+5l3;rksux?pB6puh z@fJlnj>w~Ehk(0TTsQyGJ2+JILgNt?9|6hzKCs)iD#g#KG9N-x2=V$G@@ukuWN^JyuA zX>qG_2VM#bj*7Wbe!8h`n0E=Q3nCfhhbf zp9rkWP?D4BObO(gl4lZs&GiF+$7}aCsTPmVx_M@y+e}WEHh9^aR>KpfF&A>17@C^6 zdcAud5_f$SJg;PI7{;|K>K0TH4r~{6G|DP*5wJa60>^TX2gUAi3e~H1_y9;N_p@2k z$UdggTt7h25>d}Be<@6#*~M4Q-tXKqj0qg&Il~K@eHq{?>20llfoye-s^@fcnbB4I z$<^)e8#~P*l<>Y13WMezwX2U)*R8m09kxjir@VXF5}F)mjyy|PjHZGY5%5NZi`tro~65^ph_@lRqjKIwXp)S1viSXj1Z8)OQulXIGwkn-eNfaM=a@PINpU2 zF!X0-)5v??_YAQ@AZJK)FZXLY&Qi1xML`c?T<@AFZP;Qx#%MmVtV& z#wcYQ5Oq%)v_);bKr^qKn>p@nghz~P{z?-w-U+s8g{cTnH-5#361?D8c@ZEwYAHHyj8JT{CzvGAH}Q%$7laMm=EB6RKX=YxU#} zyiqQHHSrAq6U=1=ftYHIbbQy*FW^>zVv7v*huD0t#sVBN50!Vm%kw}AWNQg;@h4PV zpnp%=hv<(ovvHzHo`|jmWpr4umCoD(Gw}+^K3|`9CoWKQwsMJO9nVBBfO}6xmmgd{ z4^^@pt4EHCzqlWZKz1)euh5M7i5-$pD}$7O%EUYZMNi$o3#pbr%xsq>{R;bvwVot) zX%^VeXR)ppv=}<-Ebc=}1F8w4D5K+lj6x3sQ=U3tKZIOiF|d^=m#F8YkF40=jO+F2 zYb#_Cpi9Dw)I?1i56{O<>%9y5vcDQ0dOg3{Knd%27cg0#;bPPWC3FfBC>rVfknEs; z`E2Uc8o&9zi=wCkN?Z*cXP5^_f_cdDHF{^dKCJ+^cAB(vpM=wdx1C4^CO9lo&XF1B zh57l9z3mAj2e){VVz$PKFxwTB`OILiu7Al&IQf<*ykfeSG}P+}oJ~L3CS*%PNns33 zU^YSXfxjL_)465jtOr$`+l`8*6s7EcRiWQoP6NFcNtXI<{T;y9XU2&p4kfVO1xt(4 z{tAJ{67g5?Aa-W@Lrh5StQ8~?7j{>h*rC7w!N=*goJLU>m-?l{=Hcu@Q3x#ZXo<=l zqR6trB8ajsW$^1)?u#99royJnYtIdRYym+KwygztR9H=7k~Zx|VjsJ2-2L@`d(p>M z%_f;Y7laiR$4K-9Vmt)YH%=ZhHNu46p!vfpf}e&I)UQm?6=v(8o@NAkZ^!+431Q;d z(2q|t)rg_Cc0%x46zh$Y+dRL-FG|DEU|YPsWqReO*RVfTN#1eMSDre>%-F4ml!7at z#6i4u#$Q$h;Y$?hVlBB{k0SnO2#P_OK4kzEy^Qor2o@74HQKJ37p@h z8|vAI2p?xO9(d)e9#)Qyk9RBEWItT*1#7v;+Ht2RoVE1aoLW4JR}`*Q;q+WJD?PXt`LK91Qz~E5 zdh_*bwTz20H(IEwniV*!EkY4oIm8>u_K*GP9!z?g@rYBMxLIYa9nP5%EcU4#>mnP0)e~87 zrk>b-l7a|v!k?MU7c=mc&bp)YircNZ_p2zf&oHSseST+7lz(RM`KCi(+WTi*v;9LB z9)(9w6&f{v=D386D(9m^Drode9Oqs($%&ryW1rg{gDjOm1WoL~Ty9*qaTzEI>bXEF(Eb#6mCPqzp6nOW@M$XV zQnyh^7q~4O#L8Rd^l1K0J#hMmfXAI1AA+i-bBqOl!(Hc0)vW`}%?l3lJM45>v2T4SU5IG|%jzKWN7m64+UcaS0rLIHOWSkBo$0Yb;b4MW|@tdtG zAk;g#HL3}vj1`8KPAdP!@qBgU+$mg4ZeW1xLQ1L|>`eTuQ|3%cGXt;txD~MY8?alihfqMLTl3dDwG`6WXAE$(Y$@N2VK6W&k#3NjSjL&lqnyVmRkOCH=gi%KX&W6D8CknqRe7Qa!df*kbW+C+VIV?LB;IYt>7cV}zy< z9`q;%g{{`-_VDt}?8v8k4wc1$g}ecUImhTHD_CSECtOOu!!}j9XF;AULLX-3pU1H- zlzb^L+S#dPTnq14e#EtsePEVL%H#Tfj*HP-Ges=n!9jAqP%!-3+ftK#-{vj)1wy;0 zsoD4#yYMAR)c6v&1^-8+pC(G6F6@#}R7^<>L3UR?##gh7WO~H;jzx^ZzIK8o(!+;7 z{u~YMBAi60Mc#?3T%I=j@%9Cz1H^Gr4DH8G^7?1CpI8Pi1hFokBF1Uq;E4@?@THi) z(P53KHUxgYwqGAQRuzCzSGD z=zg}tR=!(&2^dNCV9AY?fBfw*;lDPvRi;QFLctOs`{j5QL9Sb5@6s{c}5_GPAYTu(n;k=EE z^ur)Q5yXtfUdTfYXTFIhm@|tb>EEf?L7K~-SF%9GBzD=iJQGM}m_tHBQByhJy1J+g z@7P?npe^}+qPgg7m58w0NN~#hsaM}RbNKB2buM%}GIL9HzAY}?omx+_*-hD8D~bYL z@-DxlVz;hqLdUQm#cRla5e&;zI`Pk)+dDFw+fR-(D)-fyMNGpA=^qcB&$D8Gi}k#o zEgV~J`It?0z*aRRHtB&V6*HZemlOHAj%hLhvaynvQW(VVH+wT!C%Cd^d0e;Xg{?Qg zrtD2Wp79}6Kk7dB&7DneE$wZV;Qt=+JGqEB@W9j~f`XCS+co%qBlE67p~f!DAyuvH zjAJMnumt^EU`91zZ(|WH&p*hwIZ9i8nfU5g7bg98T`ihKI9z9kCrk#glG=zxm%Rof zQYr!71$Fb5rkX)ovW!k!?e}!H=xTl>pPrOd@^Yaud-)&=1{4J9c#T`ST2lhPk}5RI z?D_IJ&$h}JO*|ui>oB3|JCwZfFB+Q(*@j{@4mW90n7!4Mi-}E!{#jd+#3fLJ6vj3J z+Flp81K$+T%Tos!*1dwg;M+^+w?-3kbIN~Pc{4DJJRs6nm|8C=3Vw?W6O`@YD`4o) z;(pm4)U^mfoc++xM4%|9s7*i^Gmuryc;Lu{=5NRLL+H|f?ZPCf58G?T0p-1y67UwHoyHYPH`TkecWodm#&tCCZQfeK%|RQ6;hK=j#OGZ_Gwb zpv7(mvMKbgGIC0B((P9SKgWo{)+SvC5-WL;olqAg$BQ3L%DuAV5vv`=9$H0|m>^+c z6Y9yxfv+%sHG6%!$y|PykMoHdlkc*`3ejH_$F{?ZM^8w|f-U2y`mYDDrE^@0J&PxL z*wEDQUBYOARv7a2jYFdRoef?FLw%f3Y%)(Pjt2J)RjhlZx%>!0edqlK6_>`J#5{83 zup(q|)8mkHt&EYY76u&)@ss3-0+rpEY1OMe@Jfe&NehQxxwMWvzc2gri&!oEcpY(Y z!iH*qqkR&Ft;YYF`M@+2ltK%AfUD2=ndJaPgt19DzM4B^_4|*~>x(mTFemmM;LpoG@NE!-sRy>5t9v;Xg?|r z;)d{l)-nsMyyv>F;dcau6d{&2^t;`eBHcvHU0?5p96T5X6DcT9^a)niucuL}n{>YV z`R^d)>F%@o?0&BVRn`R#(%MMo4LB(Hwv@5fNQzw61|570rP#lKGfCxCqq3(Z8{RMW zrN7#x49uqSThBv@{8;ZUmv{H_>0X!5O)Q>&$@Q$(Z_gTFu4}$1-48Xg<*ZxSj960n zo&&kETYFK=kjAq1q_2SC3c~8}QB4}Tyf>;z*OyhQsYjG~;zqZA0KNf}U36N{i3!TA zy2zJc!L&){F(Itpl1r?x2dyt}UcI5_Q{#q>&Z0w%5Wne8#TYpm*0K6WWjYHeZr;#; zyRyN(sMTaU-KtKsIwKh9Yu{*Z=Aax(=qKV~BA0czEr&5RXtTMbxkSshZ$aTb97SU- zF~NTAI7&4EAClm|$;fyrBe;lw##`EqmR7oI)}Q)(80)eM=>Bw6iuIN$Rg)H6E~m(R ziqGH**ipXt8I(Vw+#>*I$!qPzSK4rY-o{ZIa#PNJ7Q(Vjj{B}fpqY5unqC@xhcfvD zqFRr0$t9~Kl!pYwU_@4Ly$H9XP_++dmV17hX!fKoa+$XVH%{Q=C1 ze1&{ze!x@oL%KZefI_;{IIbG6HTo`5&JL?&03rItNlk+UCoRd<2e&_Is zoinT+QB7;v22#z@vb(zSY?61e>NC!;EQ5gtq=hDL)7gzxFHVB2I$UXI#0m*Y|HjP! z3IO>@hnXo5$tiE5wuKTQrw;n?^&x@oq3!G+0;tc#Dh?|Z`H4PL?y@g0~bWH~?Xxj9w; z!DHuu->DS#=kT91A!c2kMkigBT1oM2pO-f9Ws4%y{6Okz=Z`IwS%joFYSj~O=Gf)5 zP2T5xo_#a&TP~tpp63fIXCK-?=D_b6)9nvUZpIe<9YnMN_mp6d+~CZATjT)-I2a}7 zAW2;ljEJU@3SQ8Z7p^S6#u9Z@fKS?%(0Hr0UMq(e?K*zaDbGfe+K-NPsjAbxUEwDW zbI?FPSV_KMC9%QUYF;(gT0XjNj;)8Sur*Mo^8l5=Hk0p5X5khmM+f1du2)!(xt%B5 zw?2~JKxV8=B?+g=Bv*cabplyxvsvSFDNOC?R)!rrXpLWM%ubhMX}6S6F-HCSBs40B zie0Isql)Hh$OQ3zFZePle)HW#ubK`)1rn-V$OGmDa3Wi4@nkbIW zsW^PBV2n|weyl}TPIRpNvV!?f`>J$;M>3QNe|}21B%_CSS#k$|Qdabd2-4axrR37= ztLJN(5^~y23fZ$|^QF)b-KmyzWo#X8jzAAVCm$D%hH6-#F9q;cBc{L;>gIo zAMXunQQeE1b+kRV7?|4gjV~~Uosxq%(PFNSo2mr9J5tO!{MHCe+=fz`kO#+4C?Aee zMtkh{ezW=Hp<-j==DoQfqD3veB8??~#Sz3R;8t7v5?JGZfTcPIb19EP2K6pw{=h^@ zP5OW_ysx3=W8!NDZQ1S?QDwczo+jUj#qBvAev=Ph5RX`M@sNgajO3I@^NUqhi)?ZB zcW3``#^^;Q+OEE(S0Azr*)ZY&x|h7l$LJ}kr@WEO>-=i+kwh2E=ywUfL8k|K4QSzq zGpki7-&gN{l=L!h7Yjsx_*YZ#q>-c89oJO_kSDL#$us4jd(04xkPCT#HsH)Jh{ptG zeDgV=c%EOQU;(U-OAu{uqkF#p>PuP_jr|+vaiaKGJ)}Niji)mO$g_5DzjdkwzKvF6ZCj@ew&}NjO;INs*V|zg*UrK5wOC*Lm^Ey4 z>b0dq-6N~&hFH+-!oc{s&zccxU(oB&-IXZcm0VzA$kU#t(iifmt=+ALioDn!lpLc@ z*0}8Y3YRM68`Y+r6bs*w4>?%BCqsUaW-&e&+Hoz94H-{osu);X=F!*HTJ|tzb#dtg<+mg_Hj_^3+DX9GXLpKNB!j)^e}a%r9Wbe zcz`;Dax3>Loy{bJojuc27s>Nr=Y4RS%UE@4KxcI2{0MBYM4?!U+05j_ixwlOb{w zw}~kNz(g%EFflnXF)=nWGc7PQConK4DGD!5Z)8MabY&nYL^?7sGBYtSF*z|YF*Y(Y zmv(Lf!vZullc3)yf2CPlQ{%W2e$TJaAJomo=aT8vD_!Fr&Lb};wslA5>H=B0s+JcJN8T5aeo4WSI#_6Jcn>M z@QDlv7s4g*&n3fpM!52gd%^=x5rrwnMGs4as{+C#1l(8`fa);fI(SMzgb$Cqz)LU` z1Q4b22(%QmnKaNGqXr2!&|}gg9)lYONFIkOlh}sm8)ct($~Vpe;sx-?K!#*4NKlMO zm%$EzNe(|ualF77Q-1=xmmJ}ZA{qaYSetCP=gdQbvcA(SIJbKQOc`qMdgfqj zhRp9#l7-V~v=>jNnm9c=%=GLl@nQb1Tq7idiGQbXKGYfcjULfY^pt+4 zU+7mF(s1^y=V=&^=>vV3ha)}Jk6H0HH>>H0j*{6dq+_aSZjb68i*QQy>u4Iz=p%iM zUNoK1$y|q-p3^7#^!EIuV;a%#bV{c>P3errG>&3T&;?z@V;CPLb4_39Px?yV z=s$X%d?=Vcia-$K0ZQPy_vfGQ3f$S?>~3)I@gkZ%EYe{Z4|e*=ble?6lOsFaL9RI{ zq(B6#AfiUmyuabHP_;jz9C}2QPcP7dK}KVTBv3Ror<&Oso?gB&f3+=Sxu`bw%`Pb< z@ZurMhen9z&<|5>W(eIs8ysJqeB3`jykkzURe`uKIe8w^qiCLHCg1Za7=-13nd-QW z#@SP9-V5C?$xR%A4wJ@ycad*Ibbor;KYs?2^Isl0_ASG&m%wUPfvG91#_IUcA4*PreIUd!4N4D{pvuX`N+y=z92Q)nW^7Zx> zfUY|u=C=U_4Lq`jN7{JY?eSb6-yC0>q`vNm7q?Pc)bV)E3XT)laQOCc?l0~>4}T8~ zoQ`mDE1!k4mL6f_5!>TAyV)Nceg>Z5eOJ7=mCy}9P7RRb+km|70o`3*4=!(WKwS*U zjd)yEBZ%2}uJ>;44nGdgannedQ(fNMxU9T(n`fh{5v2;1+NCt?wYcrDO`mUo#GOlEZ`pdJ&VTX#*=eFiUmaF%$uu= zdA6=5my2wQyJA|RA|*2h6sekOVO=g4Mz|0Xw*{HYxy5Gr??1(Ou76*M+hnm= z%BrPRmUk|#`p|`bU1Dk2sqzkX#3nm#-A)IdssY1}v%!vEGsC29CaA2)4Ms%Wh-({J zvdX%R^RZ@$eC^WXN7ZBR{j*#}a@AEFmM|F0t)lO{&a3;97Z+8JiyJcGn9M58Fv zyAS_KpQCv9DS3SSK#Cr+oPYV5Ow;cX#IhlNOTH&>A;h9cE;@*2QP#%O(*D-QZhnowLvO-q>099I)4-{? z?FB%UXN!T?;8|-nZ3qg6Q_D214E^1fz9P0mN{j7 z%g^=SbH71L2H&Es2Y>&9H)LihV@(lO79W>&l$G zi&!%06_*fFev~b56t$j})6UegNl)}SZZz~J)vN2r<+G0WatrswT{hSM0iqy~Y-tt_o9tt_*0YiEg>ocCw* zn$Pq6e&6$)XP#qbwpy4K=KgNpNTnq9k{k-y!yXhBum<+Ax0|#U)BlQ<}7 zBWO2t+5r-shRXND01U!GI0OyQ4E1hRFVw+dKGPMBkaUHkaEztyQHJ9zb%iE40Vm-U zKj?xzaN4c3q{=OD7FyvPoQF2J02iShE^x| zq_lhB&QKawIOKT9@jedu?P)wXLvX;6WbGz#l8eXzfkvaBUpIu4`vfOHo#DyzmooxS zoRCD(L~@C!lF4FyX2!Twi1Iw4Nas4)mdV}O_1OIZA(D&`q~U4jUKu8L^(Qx<@(cfhDKkr^ z=gm0I5z$E|L0q|VH2&N+ec6BXojs;I;r2dpFRy=^ax4i_GEXw95#icVAZAz2(-%#@ zZI`=6U$u>;HXJ;;%^1@uI?n{gU+cm3*WTevJ|^NJ9OOfS(PLG>-;5|kq;ztpUhc1V zO;a`ZPWSz)^wwj{d2h|_{W-zu*8K4nJ=#6T{P!op6N03V6{L3~<^_NGvgrD9>qPdV z+3dU@URHHE-G>YEKWDQiB+i~_x_mI*^6s4BwA_}>qU?@@oRj}Yiw7jngVCdiKg4TJ z5X<-BnqZ)3!nI9uqmVt#PZH&nL$qf|Gd)R@jMB8~%#)=><9-+QeG3jmL|XN$wfkl@ zY(}X_*Cqh%>Y^`~Zoz+h!@(!_{#WD{{Oz1@Sn+quoLT(IycKTJtv@eu7Uo`zh22i# zCk(uE^!nB}g?(K(Hr9VVt=>K{S{1u-0qUqhYZc{aG`df@?S$nqMVu4@0xrB$^ z)SCAwFWWU(I5-O=*?_^^ z*vtoXK`|jCg&TkGHszu!YG>yZkL;WoIHM_0^oi9?VPjVSWVfI27BdoY7l|;F!<=k0 z2(DdL3okOOO!GEalM%S#9#ImCyoQP-gU4X5?`)v-AMwOQe+v`bJF{ zYL<*3uDySG;i!posgu#9Bf$qm!DX)%Oc0yWlSmP9Y~|!X#>(l}68phI`P6?xgG8((qFRj4MD|e4HbEc^2dVIK zz^Dv(WIvi`p4OFvEM{!LT=42J*9H904wb^##>@i@(pQVR99ElzZPzyL=`bC9ngyI@ zlE=?Gzj#?1sL)uv3`;#|jA)1n#KazbT*Y1EYQ`+CVu=-_gPVVEFru0>4>+`R;22fRPY~GDm~(@e`A~jvQ*^k}&<j`RVH21zs;!ojt$e5C$7osUud z?jm zp``j4%{wEavx#TqGhH+#$Z6ixY7jb^V1B_g1Oujh7ix3d+Gh+>2cUDxFe14+h4)zw zSmzYr-_wFjBQ$+vZTUd>46Pvy3J4P!;y1#h)Fg}A)V24r$04q#*)CGCRd4%*hMo82qS$rifl1dpvz!hK7Qk;`9GY73rqH7B4Xc0muHBUp zMInq13Ba>C5>7dU)Xr(4a6e5i2UHZpO%Ny4s3Sqh9Bd*GW2VM_4BCP(A#O9D9%zpM zEF5nl;*BeHfQ}A*M0`^taqxtHL){TM>@fp#ljv`eTQsv6XR})MtHdZYQGqCga)u=F zh7`r>kp1%{8_fcK*sSu|yz+lpyp$AUu~P*{Af z+|7dlos_ZEwAv4M9w8Wl^;{k|qr!`kaWl%?x^tRB>>0q8<%-d?=wp9r+SFD2*=`>d zEIn{l+_}35-1O9L!m7=+?{YD3b z*hMk7!A|)Eb5G9uOi8dqL0Y)G@6tBVxr7vG%>dpU>s-!OF-8F-<2i@61+P)3-<;4&%Akb+V+Tw2G z?^@d74rc8yT?(_0yUDYcX{rC`o6V}|{1l6~06)dif&EvXy_bLfBjz3eg5@YcP!$2e z90{Qf2o{orh>PS_$W$E>xZ?30?Pq3#)3Q8;M1}q5vVVz2=NsGR zQf?pM$_TuIQVf48c#a6!ciJ%Co5*3Fv}PW*q5|&$6X*GHOMY?_W13?VKOGZ+({rIC zeoAabPnc7$l-5rvo>WFqM;S3BN!y&p!R2U} z`Jkx4l#DASI?y`$A5(~D{{#hJ&jEv83b$Sg0Y9MuFq2^;D7VI|0XqbLi!`T(7;X)g zdl1I2)i9Jc8n}t;VU4obOvvmaYz7(EwXhy0&Wy{sI$Q#M2;VR2edw5_wt>PSv(#-L zDVcL!A3n^teJt*}z+%W?Hx8KGjWf^e`lvRF=f~2`i{;|vcmnf75PI;iYFf1mQFtm#0xu0ei&X@JZx(qXn;402i;NM1@+v{jyvkR9h9f;imSQgruyzER3Yqf zS$#JM;Lwc&VeD|ip~Uz#t}Lm`t}LdTxU#KeV;;O6c0sR?ihE&=M?#5(jt3=t!u8wMNUne>e_nnTL=NisF0;o2&*60(w>5~S+;W@8d z|1yIViahUs=Aj?kIqmQ5=#6Iz@ZaD6=Z{i{Pe)27ZOXciZR@d3YzXYdScfX>(2i<_ zs0CoFYMzTA@u(bAinb+4@_zHIASr!58~ST!OPjK*U5mB!z0S3-BFZPb+bRPZB4Aig zkP#R+sBNFhxCQ0D!+?^IZ>ucC>zPBnp zVWL2^LZL1K(Yiz&rSD}SYehR0iHsV|_I#tpQBgn{Nkvm-<_5a7R_NeyXO!bcQ^ukD zC=8pzwzRS{FZG7BT5Y%T4WJny=fG zB8X99msEYovJ+%WCKoxWm=aHsq!=IxwAY-bPvCNqY}C=fN?TxBaabB#+xD0!YiCWj9=)wu5~5~- zvC|{6M7EhLUEDbO#nqE>UYh)zD0JXSIShFjC zrdZls820U2!`<=I;oR<7j?54*OwQE?br7w>b;CGVLfeyX6mI^v33m$o>Rt8ITzb1vh3q+4L{ z<74!)5fCFD3S*Wm1w@!EZUYSSYY{&=w$=A){=Q@XekYFN`50x`}n1WfGBa=LF^Wi z=7JPW3iNwXX>sFD!a<_xM;S+-7|PE$y!4TtQNFfW1`SYzg)$x7%Yq|+3XPwXdu`3{MkAk`(S1%znJbXh?BbFjKYUtpxw+N z@5tb4zdu66JjKbqp7kYp>z=o>WHj)7Wjj**m(1J1mglXOykX8R{q3{DM(LNftXgn% z5pSyq`jQ|!1s*+isR7RbrR0Z$$_yB&C51>av?xX=LJmrZ$gYLgMQ{S`7$>Tj7vUKqY9$t z{!FHroa|w#0b&Ymc(&p_gB<11hUmvi@|2@^EuM!k7nA_cLnm=CUf{G9X*vni;?+g6 z*|}CCUJ9EaPs2{4R@$w9R9vadY;Pf8raZjp=EQi-)qMMv06md}OZr<Wa=S&zIgHM+ik>Gk7(D;^qN$&CtI z;@#U^+)E`}#4M$KDKfWwVuQ6szThciGPlLvmZDO=7W}@5v-OhQZ7CbJj9%{bL?Fmo zZS?v*?aAnlPR$las|vphT_CI^r&bONT7~qUwwBaOm9{p~uPy21x+;^OthR?+Jm_NI z%7;=inw*>q>rxYcwWomUz#pIMyghWY{OGeiEJG3^hjRTjtb9@Hs{fuae)$O_VE6@f zxfXTtucJUzqIx83212WNxw))G`FYh!vsL}Zf_Rf%S&C@X#)5XV6J$Q?W-V3s#@0Hq zeXXq-n>Kh{bUU`zsra^Rt;5r|HPV`+-J_FnbyJ;Z~_>SQ@RUoV#By~I!Bk9czb$ES~8JpRl5XWzfl z3J+%EvsL8^#65Y%bjP^rj>&9n%eOOnx;Uau+hadSj zkJsbb^yKb;{A@Pi!{hbj0}GpPQrR-DEv(P8MLanKaXXX4cG``9*WyoKKe1#c6Z?ValIw z&Zo_)SxwIXxBkF6e>R_*fA2`d=$lC7*T>KQ_R|j{5x-X;Hn#GxF5i+ovN|Y_C%dfJ zo3L{4hwty*eJ!lS{kqjHEBsLIc34UJAS;hWwMD1X=I_lP8?E+~xkr8eCOjWMdHL&a zzk%m}qeJ%WRA_j4`NeA5oHYC%Y}PEAbH0L}P2R6dZ^;?W`Rrmv6P|pW zo-AgId9$9*PAAR!UyEHS#G6Rr=+Q5ap3`$3`2&jYgkY8Xj1bfyA*91XSj_jZb0aVH z`lnYvA3q>F2kh8%dy@b0avM60huPVy#f{Q`ntxB0yR6z9xt||@x&QS0pTX+!>w_^T zS9c`j@V|g!^jl`Z`Iqflch~{F8!wxW(>aXvN1)91elcZWQZ z2XmhPoa9-4o7-USur5!>XJ?a+zYq#4M*DC%e4f$P?W?y8Fwk@Bi}j+3|Q= zzS8Q>y~XVGfJX}4jXCmbJ{~h$ci4V;JHURm4LzoP>NEYY`Kfu?jGI$L*7wuqY&jW& zV+pde$qIUgS6*yG?GoN;Ev9|ZT+B}=%hkzZc}XxE=k&kkTE)$mu^0gqw_LjcIYa_D zIG2ID0Tl%?Fg7(bm$Cl=D1UclR9suSEf(B85TI}f5Zv8@ySo-pNMVJ$ySux)y95XX zcbDJ<0zm=<=W$NI?tZuXzEMB+T62DDezN8sdlWUfvKo`9xxFdyvppEX#QKSa51n@2miEdj}6Ekfjv_K&PRqMbE&%_-}-jmzNh{>hVtoAOUm+S%LvH zZwptTt-ZrvncgI%fPY}1(_7Kzf5j?Wm`Iv~Ab+(BptFKN9Qc@-9V|?MZ`dbii%(!6 zgqi-WP)V@4xV_z90?x>P%}fI11T=eV%7gho=Vk-8cLRI<7i<9noB!RCxr+m{1{mb% z0+f;Xzrk-1^1m@lAOyh4!p6eO!Uh030)XyjR?L5;RQGTI{(nuf{so(W&3(Ka>>U6W zCbrH%ACLv`?Sbs&Y~l(8K%88FK3@MX@jrLStgHZYkQoGE3bcH?hJUNS!9a_D>=jHP zP9S%H9?K^d7FGbuU%!8?4Bjr(+#YP}@$Ya&6FVS)Sy4(`RzaTOKYRaIl$e z)w`{U(|?7V*nw<4{+9#)8K?#PhtK~%Ix-LwTacM3*niUYUt$^2iyU$mKvlhfOH{=T5Mv;W*%fZhrO0^NaT$g4~CX8gg{jltb_^`gXXOb1i! zgIpT7uYWFN9LO=Y(0iX?1{4WxDu_7>Zg^61B$UUkglhF*6=0!5xZP}c#d^f!$?OEoqlQ(P~=0sK%|?wWEmt%h$c+SI~MmCmOdx1y49f;5}(9Y3$@4dBe~N( z`r)VqPfS`>RD-1SV~L&@{~_>~lC-U_3LpH!Xn(H+i*;aF8j5UR>+C(PtS(CH=^vb$ z9&F>qr6DmiPQQgvDP&0Fg(e`o2cl7gwp|>@^<{IW{AX@i-kiyvvi}VJS$A1VB?>rb#4@qTb>oU`ILk%@(5Df zyMOC-Q!iWGv;_F)M~B0r7Sbw071t#ZavZ(X3Jv&i*?(4P zB~!>NNPPa@>(cbcPAJTQ zaT9e&EdVT1_R;bdvGEH6iB%<+tuW0kq5QZ}GsYbJ=5%UE25v$Jfw8}(AbRBTPwa2Z zwdm-v2p+nI0ho1RqD0pD5zXZ@&wt+i^{B|D&_|*(h!MLHLf1!ZlcFyDVmf?cmfUqq zsyK|D6hE&BmT+0yGRE75c~B8_6Wu;_60&gS;5BtLY{7bXHoJN9{z|k~Ik)X-6FiFg zlpEHPb`<>MMRB8^v)cnMVBT8Vi4SeRgZ#DYjKOj`4!35z!s8BL4qy6tPk%%p?E}a` z)b#i7+j7*|efsJ@A8V=N+8xekclWU4`n5FqBKWC#1P9^)xxE+N6Ek{cy*fd`It?g> z%@eqkMzL$t+UlM^YgUy+Y(ChfT&h$g21Or1FVr#f(_zONz_Zf~YborUUVp-Ruu`B6 zFq-6rs{KBdQ=T-h;yC_8nSU=^8C5)TN#_ds82JvFu>ARP2`U!FV>GR!^W1bz31Rv- z=?PR0fyI@JUMHNx^YdI`8RgPM09^xn_Z`LFA2=Pp)xjDe=f3zBieLCfWdy2rdkjCfNri*;x-ni&{C%0WQ(?KUk*52oZ2Yk zdIFgfwB|joJDJJ&fq#MIt>0c9?Lq8Hs*$=68TgXp+F!M=2zM#$_7`X(h1c&ct2vx? z5(#cp9xQiFfS)KFq~aI-9z)#BD}vtz={Tj+@ZsjeqZ}qzJxXm?hgn*DF96 zj*_`U=_fj&qo`JheD%15*x**L+kX?3>{t!kinJC;BZ6h~J5{^9=Eb37@>#Waf0sYC zJOHMu&ouhnPv=%U-px}nj2#1>5gEl#dad7%>+CxdHeDumYlRA5*P4PS__Rso(bN7u z6`$^dNp-kUcYnM7SKOb{$hpN6%V?H{uPr>D%XCc!q1k_eQ1?C>d%eQv38^egX(Xyr zJ5Z$*kfV@etNCL!kr<}sv2+gK!~I6vp2llK^$5)={$q!kFkYcFOtv!H5!(2(Rs+E& zSdW^afj5Zfp?q$8TG?Ylm;S@Tt>6}om5upl{7$Y3J%9UMi}3j}p-(5s*|bcP^^Jnr z>r;<^z&uW!ae**m8Z?C|r|wzY+ERb0a}|2ErY%HAwv1@1;`-mK6n;u;jS{eT5?IkF z_Tte9G)uk4l$FV+@DESw{2scmNL(=%<5{7R{Omw0QnUt{=j&}{R936sSS{^aCKX z{CJ%C3`N?u^wSHWxfvSEzl`203OLtCRmg5oWTHW9;(kHvKj=K4oEB5he`!mu`~0wA zf6WyCAd7Q^M{I4|n}D0Y8fW#i&Y>)St=ipsRDa-rlP+;d+Lh77q8NaK*<^}0ooMLH z_|C}!M|h*@Ja{VQ=t2}qFiAa@CB)0-p7Xu#SE)}v+F!yxM^!2va1rJj1~-g0w4U#n zEoyJGceV+hNWy()!hF^Jrg>%iCvnN}pU!Pj8M#mJ9(T=06RG8v!NZ zn6pO#o4a+Bfh~%7+Jv%R-3#xLeA>~hriuJ?{AoZayxd-<7n^QDJPJ1EcjBW?NiJ)# zB;inxR5LV!D5{FW_c^WJu}Llwg*3m}D}Q1k#!KkAmex|pdP2tP)=|ih@88nAKjt>p z<!lR4h8VO7WfELG!_l<{BuAcp;_c_AnBC4YRC zdNt(eKtOFPFzK*K|Fx{8EO*`r@IxGSX+eW0RXENm$fqmG7k4}6!SRw|b9X%Pzg$7! zs$&e}6YCfhVO_C#iur;d^io?h{|w7r~;R-%d_Q%u{Mnwk)m z!ruA^LR*qw1}??FvZWzGC}ee#rr8FQ$(CuRO&q>ay=@zt3VRPI*8AiQVhf1|SmRi4- zvo1HPq<`?n7c`&|*`n|p2d&O0gFqD29+NRXg}L^ zTnsYl9)H$;e^$-UVb`+yPJeYrKku}tT?3@z);MCSP<9X`j}TYhWJpF;18*EAiZd&) zUdXJw*feoKlXVT0jCtA17QbqEb*8OnBv&GNYRCpFt1aIOVJF(L=kdbUKHm}7#aQ|x z*d7m>;pd!`9iiCmxcS7Vx?x~w(mk*2TDGeR9gl8V9`!_~0Tzq0D1Qazrq-ils62YL zvDQRhrHhMU!2$&UD(&YPL#+7H$pEe|yUlghr{mbztTFx3D5&j5&;;;1)by0J6!Tz` z*Ff0LLja9KmoUMXY&`P+yIcIya?J@4j?tlkP6NH%sH-B}R&2Fa_K6=7bM~sW5 zn|&{1LVPc6)#;oERV7nOE!lZb#z&&m#`ejlB=LtM8$NGtZ?+1w3A_lia|#Bz7SJf` zj?XLmd7XkByk&|O??5~Re!QNEA2mN&EdA_M6Npwru=S#o6t&cQ!j-+_7x~ix-$b41 z%pwmLRZM)-Tz?cH*64e-@1Djh<8OFbY&=Xt#rcAZlz=o8p{g>Ul>hgrvu8^*!(os%Cw5J~V7)#Rs5YF_qJSvRnDdOG{%PhRc5zit36v>`~# zUwy@to%eKJ-9{bvi~k)TG`TfnH%+@W@5DtMN#m*hq<i8Ehg94G3T zH%EClQ~jd7obQLh6)8*dRlkNf99H*-0v#=E21&C*3H6&JQXVs8X_7tB3%?)rZIj!M zBF-6jq0&`dIr#3ssgm zXI|0Lrhgp!d}+v;DTO#DSPDtrV`db2!ni6nel5Ny;kvSp+3M z$-)+WsE;}Con)O@BwX0)I?8-zhqb3rpcW*UxXT(gqOokRo}L7Xzo%oZ7cY*%|6{Y| zH~0-Tu%&DXxOo#ofKd-?VuDuE<5js@&3{EkUNC6cio-tl$*6iQ^7{H9?#t1o%jfMH zzehxxDYpbUGzRr`IC{1qw~@4iyC;n;q42k%2s0r z_jT>QmmK4prr!{+FS{UZ3@i$rCvBlKt^zFNj`-e}GTJo3p>Tb5a(~|axP5slcz=l} zX?2PCj&(qy8m(+Zu`?3}D`zKi&f^5MhspB$Q7q8b5~-2UmegI|OaqEUk2L}PW$JUS z;ZpUx!s7fZDW@M)W_FF>AH+1C8zlH6QoNrV5Ddvqk+FB-8}<18Cp+iqlz;3_FW*%x zW)f+YVSSDuVj@7MGWi<*o$g%FI)9{H5P4LEVfw&Rn3qC8AOFfat&NJrj^N?||Fda% zP}N`y#Y8k*!aIm)+3%e!gp0ITv!Nj2OWo-}#o22za`P0D1=1r-CXC2wPneLrRyhZR z1MX3;Gssp%$LZ%_SqOef9lHh;y6q!QnhRDz=zDA_qTsectIbwR*zRq}7Jo1tX}h1% zhnJYOQMz9JtJI1Dk8y;6@{xg~7;Ma960lksZ35N^UWx^{Z{Ui0_n=Ch+UR(Sb#qJQ zGk5E%-fr-bV&`*Ql+LZ~#u9hUC`>adFd2g>u$4JDJL|U~*MM6=EBLjM^j;ZE=&gaPRMXMel7{?g0!k6CZOAQj-OR;baXAICx8fN_X*389zpHVn)d?*iJ z8uau@5FaP;tF;GbY0HT9>f-FD>H&v>(hv?L9O{b7+3iRFr9#c_(wI|+qVb4_oz8Qf z{+)=`;$8E^;s{CCY=4%BP22{5-nl`y%PJc;_aykmxjN;|p`WSoaCm_gjjUiHnZ`yI zjvwQwYU9b!&{U}J3HhsKfD>%IAw`&wcRAOYn2u66_ln`ZG*aR$yE8`|zb5UsIMC|n zFs@a0q#dfi>Evt^)<#gc#*Lnnmo^22R%vE$F(OH+*v8#aR)0S;uARr>D4}>*0S#D-@UYoojsiK5n$6$oE-%xVvmGmKT>- zG^&_Zx+4hwv?+$>^)fRA)tO!?yT^Rd_ew6_=TTT?0!KdEE?azKe%11wI`)7ut%`b# z()#$%pjFe9x_=INm7LH!kYsaroGTAbo?KV6&-{UfSk#)WWa$J`k*O%-*{0$>Ds6Uh z@B29DACMTkY~6Mb8}E13_-=Cf$7C_16(8qQHSxumUhJVJ&F}8+V|k07gp1YS;u=-5 z0>(1=mvCalE(gxihv6=3e40E`TMV`@La?cnSWk9wY3%k?sDllLAa-^BvWh& zI_A}F83-eAfUPlMOj5re1vcU8?hlPef_klt8CmP-gvp;!z7w zVZ3ct8^~Yac?#$3=wZg4vHd5fX1sm;DAAhq?0gLB-bWM~p>R3!_qDYEnXySi{`Zg7TaRRq z?tg#g)(R<^QvEKU7yA*ZVd))h?#2DgV)5d~@PhPhOqQ{`jD@;>dEuV$3ildf;f6aV zB&Xeo#9h{sN^Y3?bk}xy-Ul`hXZ(ou2YgTrpAL68jeFuF3`&8f4Fi`CP(INUUD9z6 z9|G2SpOc3Jifl~|E9H4<_@R$gl_2!EgMSf%?QG8aX18x zUkHYII2R1A910&~9g*+fH$YE)Xj5sek;P zx6aS%)`Q@;kCRoK%s+H)cydC?a7pSYbL!qj91i5!bl*?#YdNV)rHy98SRaew^ghSl zYD^!nqAKO|rDx-A=$`w+UUqdmh)bl*HsdWrB{$b?k;6YrJrf-!_;adM>{`z2FQ?xn zkwHI=Qne1Xf*AbH0|#ko$1KO9XMeOW6qvL{hrJT}WTXCenT(A$O*~!ffJ@9Mg?6QfnR%_c!t!RZ#i`G^~g_A=ST{ zl!hkKaCR27;<&R{C4CUoSAY8RewyHpaS%1+er?-4OHmLRb+(%(5R@Dijz}u$BLl4; zz0W_!%?&;s1JE?}s}ClGAc&M@jAi-Z>@msgX`b(W)>3eXKuRScGu%^2?9ZYa9AO8q zZpr+LaD~w{885FRnhBj+TWVMAl0_$H=@CU;W+OXh=N7VJ9J8%WW`BA%>=xC^(U9Hm z9|SqSS5YAxyM`q6GgvAeIm9+!{Q+@mNW*$WRyLz3zZ})H;^AjUE zJd-lG*KTw)CZ9k%&VSiSk8f^G%1JU`I;g0J@kJQb#YL@9MT=rb`Pb2YjWf%|&-y)s zs=2(k!ERU>EJX3diV4d|Jc$=X88RM9L#R;up#@E#r&$|oNq>yeXyQ&h5YsXfnG?wx zn<00oxz=|r9H*2Y_V=Zo-8+?7JuVDID{=q^)iz(jOu_53y~%stY4Vp@=&v9?na(r* zz)@6Lg+$o23^=kjEQ)~m*KC-wD9`N*#!yB99B!`kk3LfEh%)6fpd3}I&y<#X9CCvIL;B76{PLCT$ z!Q3rGY_=D_s<%QCg%i4Y5dxOJ9(*3RB^cTKc{3@>#24PH72m9m}JSyN?750T-2bwmWVqoWUUH7R*GUJ)(GAME8)CtheQmB62$4 zxeA?^R8>BTI+8S9Xc$Hm6lj9`NtbMr9!vUquCjLsy=cd8`q#=m=a0i&R$U?$;16(`-aB0-u!!wFj7X5<#Pbl>XN2!V%k|um#=+#dQa_Ay2o9;H z{tChj2_RTp#WET#nZAt!kCZ648xH1ASw@E6XcF_W5rc_4%yPQQyCD*H&~6rC-;);W zuA&`c12Bdci=!zj@!PEn*0h&)j1zN{~`Hurs-Zz_N0S?2{Gbkeqz=S+N_k;;{XUZ6q<%Ys7HKgDB%RrMAE>M3x)3rSrO%8y?fPbyz zVUNgIW+_p!)<6!;K5x(weZF7+i7vTMG-sP}(l#GOexUc5VA{V$5KkjSk!~3FI@u$; z()wr`xKEb%xT-5{T$WcCH~U1zXt`egql?z@9`LKePBVOTJ6=*pI@B9WXWr~yklsMn z$RmV4%|#yJrHIOYq2@II$tYdd(R$VHQ#D5s{nOb-Rj#x>UNE}%^6f9~Z*+_W4SzpYjByV^ zC%Z>uQK;4RA1;h&0r8*B`Q{_j+$0JK&5D?kelT%JF;414#fG!Ad3uOi{>CB^Xthlt zu|>2=z1*o;>*4{L{}i9~zCzCI_=7F(Ze`z#i_vi!q`k4r%}1q_cuxYy(zlcASK86_ z(&ybf?8o=JMv5V&2^LugU4IX9tff0DiZ*g;wd(uccZ(!}sVyflS6b_8eA_TA0MX<} zz2y`BH`E-t)}gV}Kl3*~$#@&qAg{;_hAZDX*)%0IBOGT=!N05zn3d31efOF?2QDT@ z$BN}jexBA<80u>q<1i8^}XjY`}OJ?frVPkqDcx8QGb*xmpoOW|Ii>e z)qKI9`MD-bhdFz}*niN4>6nWXB|NApY*o{Dc3_ z=0hO-f%e_R-6HP-Q~6FSC6U3iP_fin14atE1w_I|c3lc=b7Fn?;6Q%%KXRTbl8AycqC zDp5HXY(ej^b6MTQ;uFFi(f&?gSXP7Vbip-lCj#9p;kXWqJ(hq7H4uB(ZCC&GML5w09U3#X6?{|f8`daqc3)7^7oBy&S3a=;k|g=?l@S}J&ked;JXij}b`n?GaH-%t zG*LLH`&k z6UZn(uF*jv9gbuYMq};pBInplA)nZLVyD|4C4Xw+EJPosmn{3(7eMzbpAD^MIDM4BjT&)H?z)L&yQF$ccnrLvxBP zxrC89RE;mCl;M;8Hd*gOr!OBi`z6umIe)*v+1Bkt#d0y$oUyU9ns0uhaUBb&@FpsRbYBwhF4TpqUkz!oaD~ead+8c0rU;0ueSbOE zN6T}V-7FB|cuxhQ#H2)jq*24-TW-4Ljdpf;TMZ{S>8i-dDdTo;N0BVjj1Q=5cYMJ; zC4On!J;n<}UD&jq#vq`-&q*y-QZK%`Mx(aJysN)~kVI-ZFOGZJFO2dQpv&{f35s;}E}uJkgY2%1fq}-xV(` z33F2lqN{nAb!#dI^KF_q#}(sv^E38A6z@)C;gcjfh)(mnyI5nn`(dxtK7h4ljW)Wj_&r8l>Yme{q$7h>le z4i80Q@DktXha_pg_bMRo-|#^@umV#+v@yQ#)Co+e#9*LtHnVVrDvH|52OBdbVnhSf zcgB&-9^ka`CFJEaXP%Vc7Ch{=7!9tXkHta6<>*^mYgkkLTnV8V0$@Ih!rbj)z)j>M z0ElW~tUI%tdyuM0BUJo{h<}J#ylu}CWTwD6zvr-%A=Vp{5HB@nsU|QlIJh~ygMOQ& zK&d(_G9b?_)sHlZvX9A57O~_l!*T^sc%_-Q98@tfM(fJ-<>a#-%X+WI^NaDQM>+W37Ujm|I0o0LhA`QQIACDLb>E9o^ z*{T{Ic0QW26lrLGT7N;6t||64P*X9=0^R}IUh$rfwY1srCHon!mt*iCb=YueNs17X(C4YA9RG@jbH8c&_9vVJ% zYB@N!bqT64@|2*|0N@h?S z`?@?piL+RnA~xZ7Tt=Wig#1q?hTX7L7UD}|mfR$f{|B_&B`&zbip6*su4)RJUu+X2 zWO&|+)i2rCq<_L}!I}O>jVo~JZb0&gZ!(DCIVHGH0fYOq$kQfzDU`GNX@?6oOjO}L z#B#l@xnDxi4jcRra(z0MwDS@i5hqIBBOxDA=&u4kPC@fZIlr1mnyARhjc%W3*Ip-wPPJ0xw$K+b4Zl8y z;mLECuE-sIz1w)=1o5j?uBh>l_}QW|LyHiW&Y%d^OSKpxUo;@F^v?t>u;LUcJ{l(3 zdjx@VHkLTXgCoM(DHq zFgG$ZFfcPQGc+wQG$$}HCn*XqO>bmGVRU66C`39kFfubRH!?IZFf%bTG?y7}0>c6` zIg?={D1W6{*>c-D5`EWK;PGZsHi(4)Id$t+c}u*=ORPAy=T07I36@!rNk^ms4+`-0 z9DBZg4!B4pL2Inc6TwEK``~mp8kCsyh)0+dL`sIIPqeo0nlK)6!aPBkuLBGeVPWVI z84_No`-Jl#Bt9ox3ZKY;a9@W5DGAqH5`|}=0s>3IV~l?&MFjJG;(J60&m$@%LP8n- zg<@FGh|qzCdm=(VB$`7c)WC-;9srtxKu85|fC^X~SR{l@0gI5pOQZryxKuC#Ee&m^ zus-mt8YI}jfGL1rI)p?KUqF>9O?*GF$^pS1tTSvZ#0my76yrVy*aC+S24G59HnhM1 zOPRL26?}idw2y%=27mrJpkH5~456RWB;PmLcpg9H>3mSUpGA+Dxf<<`_KrX1>?O}3 zpGDJ*$Wmc<0Z~0`41(tq~k%05>1GC6ysKu5WG{6+$pzp2(p#bDwgnvZ`>PX3^u=x2INztFGr8;xl6_+;i; zluYOyy_-j4Gc)&jIhxzmbWF$T<6}f8)X>5nH9r^8jGCA6EPAB(^gezzbV{dl6Xj-3 zALzsD(}PK9On=ZBotZ47k2Il4oEVxc9`E2To+dPkG4u38$@Hff z1Thh!1TF`E{q?TEoeWQIhWj7S;>Wv1Hj0wr)^0kR^oP*q$d>SsBOWp~l;J9fn)7B5 zi`QikIeROJOtMuJeZiYi+@t%5?KJ?WvR>CSTSH#;a9vg)<=r6_*t>OSf!@D%B-ma+g+y3SPO9~0RxXX)ID@1$PjWT0r z2;Dmw9$p-M+&ewEVcwuqfw(bwMIO>m@jT0Iz86(6jH(xAtK&MJ; zHjRV+B43N>_V|4F7>G`fdJ%u|E+UIzg@`v1`7WYxb41^c&i{4xxj^Li0FqrmS~dXL zmn9z0!Q*?IIak9M9$9)#15K>dT&Z2`8mx6OZq$;CP`6M{Ew~_Uz`%Xy3x=373Cx@>zOs(j#3w za&tTpqul{;rVp|sE;AF77u3)f|!d(ZH{N> za_8#i;N$QVH;s&W_4U1r%gJlrJ{xs|C|&B-eWLhUcA)Cth~-<~8Xd4wIAB{OHnN@t z4%VJy;x|tAH?Q+utp0ymtg68))9=Ch8)yF73uhOvc1l>jb>e#R9e~wuG=6{_TxW+j?eyTO8!+s6YwQFKGfcT=!rF>jV?;KMaM#F^Rn~8$SlB9i`)!7p z|FMT`gKDHYl& zQudJL%&&Bo{fK`dRxR;s`XhafAeLov(P8`;=UqG9cg27j zuC&V^-r%_iEOX@ClA|5^JE*!V`gT#z3rnn4jwiXzJRpA#`zC-b^!g^?J7j$m@DcL9 z39u51p6#^YIcwH!2nv={+2hTIK=jC=AN1)f$o(Fwg6S8*aN{mjQPIaZyD!L^U!oI5|Qw zFhoW&LOC=uI5{^&H$^f=K{7%^MMgd#JViD{H8L?cIYKcoL`E_~IW#jkIX6T%MKVS~ zGD1T|Mm}8%FHB`_XLM*FG&M7q;Z*`De;v{}Pn1y<#_@CBam599M_fQrWL$6oaTjp} zMMp4 z18bof*1>w%02^Tww7OZdI^7JaLiylC=!ClB3BhflUUrhWC}<;SH+0)B5}k(1UxgvK z2D@Pow8If-b8C934)$_PPuNG&6FOi&OTD842UzL}2jLJLhAw{41FLY2|W-zSwO+!iL3Cf&=Ql&0K! z{wY0nAO4~A#QozKDa?zRQqJyIl?r!XoK?!n e=dAZ?+WrFtMpEIIt$6|;3N|z{3MC~)PeuyK=LiY_ diff --git a/bmad-doc/other_manuals/tune_scan.pdf b/bmad-doc/other_manuals/tune_scan.pdf index 1ee736229fb603ef70a65ab3fc4decc531bb5568..27958d4607bd5a055589b48ed64125763afda755 100644 GIT binary patch delta 53914 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 delta 45279 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 set_tune + +implicit none + +type (branch_struct), target :: branch +type (ele_struct), pointer :: group1, group2 +type (ele_struct) :: ave +type (ele_struct), pointer :: ele +type (coord_struct), allocatable :: orb(:) + +real(rp) phi_set(2), dphi_a, dphi_b, dQ_max +real(rp) phi_a, phi_b, d_a1, d_a2, d_b1, d_b2, det +real(rp) d1, d2, del0 +real(rp) :: phi_array(2) +real(rp), allocatable :: deriv1(:), deriv2(:), kinit(:) + +integer i, j, status, n_loc + +logical, optional :: print_err +logical ok, err, rf_on, master_saved + +character(*) group_knobs(2) +character(*), parameter :: r_name = 'set_tune_via_group_knobs' + +! Init + +dQ_max = 0.001 +del0 = 0.001 +ok = .false. +rf_on = rf_is_on(branch) + +allocate(kinit(branch%n_ele_track), deriv1(branch%n_ele_track), deriv2(branch%n_ele_track)) +deriv1 = 0; deriv2 = 0 + +group1 => find_group(group_knobs(1), branch, del0, kinit, deriv1, err); if (err) return +group2 => find_group(group_knobs(2), branch, del0, kinit, deriv2, err); if (err) return + +! Q tune + +do i = 1, 10 + call lattice_bookkeeper(branch%lat) + + if (rf_on) then + call closed_orbit_calc (branch%lat, orb, 6, 1, branch%ix_branch, err, print_err) + else + call closed_orbit_calc (branch%lat, orb, 4, 1, branch%ix_branch, err, print_err) + endif + + if (err) return + + call lat_make_mat6 (branch%lat, -1, orb, branch%ix_branch) + + call twiss_at_start(branch%lat, status, branch%ix_branch, print_err) + if (status /= ok$) return + + call twiss_propagate_all (branch%lat, branch%ix_branch, err) + if (err) return + + phi_a = branch%ele(branch%n_ele_track)%a%phi + phi_b = branch%ele(branch%n_ele_track)%b%phi + dphi_a = phi_set(1) - phi_a + dphi_b = phi_set(2) - phi_b + if (abs(dphi_a) < dQ_max .and. abs(dphi_b) < dQ_max) then + ok = .true. + return + endif + + d_a1 = 0 + d_a2 = 0 + d_b1 = 0 + d_b2 = 0 + + do j = 1, branch%n_ele_track + if (deriv1(j) == 0 .and. deriv2(j) == 0) cycle + ele => branch%ele(j) + call twiss_at_element (ele, average = ave) + + if (deriv1(j) /= 0) then + d_a1 = d_a1 + deriv1(j) * ave%a%beta * ave%value(l$) / 2 + d_b1 = d_b1 - deriv1(j) * ave%b%beta * ave%value(l$) / 2 + endif + + if (deriv2(j) /= 0) then + d_a2 = d_a2 + deriv2(j) * ave%a%beta * ave%value(l$) / 2 + d_b2 = d_b2 - deriv2(j) * ave%b%beta * ave%value(l$) / 2 + endif + enddo + + det = d_a1 * d_b2 - d_a2 * d_b1 + d1 = (d_b2 * dphi_a - d_b1 * dphi_b) / det + d2 = (d_a1 * dphi_b - d_a2 * dphi_a) / det + + ! Put in the changes + + group1%control%var(1)%value = group1%control%var(1)%value + d1 + group2%control%var(1)%value = group2%control%var(1)%value + d2 + + call set_flags_for_changed_attribute (group1) + call set_flags_for_changed_attribute (group2) +enddo + +phi_array(1) = phi_a/twopi +phi_array(2) = phi_b/twopi +phi_array(1) = phi_set(1)/twopi +phi_array(2) = phi_set(2)/twopi +call out_io (s_error$, r_name, 'CANNOT GET TUNE RIGHT.', & + 'CURRENT TUNE: \2f\ ', & + 'SET TUNE: \2f\ ', & + r_array = [phi_a/twopi, phi_b/twopi, phi_set(1)/twopi, phi_set(2)/twopi ]) + +!-------------------------------------------------------------------------------- +contains + +function find_group(name, branch, del0, kinit, deriv, err) result (group_ele) + +type (branch_struct) branch +type (ele_struct), pointer :: group_ele, ele +type (ele_pointer_struct), allocatable ::eles(:) +character(*) name +real(rp) del0, kinit(:), deriv(:) +integer i, j, n_loc +logical err + +! + +call lat_ele_locator(name, branch%lat, eles, n_loc, err, ix_dflt_branch = branch%ix_branch) +if (err) return +err = .true. + +if (n_loc == 0) then + call out_io(s_error$, r_name, 'Group element not found: ' // ele%name) + return +endif + +if (n_loc > 1) then + call out_io(s_error$, r_name, 'Multiple lattice elements match group name: ' // ele%name) + return +endif + +group_ele => eles(1)%ele +if (group_ele%key /= group$) then + call out_io(s_error$, r_name, 'Element is not a group type element which is needed for tune variation: ' // ele%name) + return +endif + +! + +kinit = branch%ele(1:branch%n_ele_track)%value(k1$) + +group_ele%control%var(1)%value = group_ele%control%var(1)%value + del0 +call control_bookkeeper(branch%lat, group_ele) + +do i = 1, branch%n_ele_track + ele => branch%ele(i) + if (ele%key /= quadrupole$) cycle + if (ele%value(tilt$) /= 0) cycle + if (ele%value(k1$) == kinit(i)) cycle + deriv(i) = (ele%value(k1$) - kinit(i)) / del0 +enddo + +group_ele%control%var(1)%value = group_ele%control%var(1)%value - del0 +call control_bookkeeper(branch%lat, group_ele) + +err = .false. + +end function find_group + +end function diff --git a/bmad/modules/bmad_routine_interface.f90 b/bmad/modules/bmad_routine_interface.f90 index 7fba77e8db..237782e031 100644 --- a/bmad/modules/bmad_routine_interface.f90 +++ b/bmad/modules/bmad_routine_interface.f90 @@ -2163,6 +2163,17 @@ function set_tune (phi_a_set, phi_b_set, dk1, eles, branch, orb, print_err) resu logical ok end function +function set_tune_via_group_knobs (phi_set, branch, group_knobs, orb, print_err) result (ok) + import + implicit none + type (branch_struct), target :: branch + type (coord_struct), allocatable :: orb(:) + character(*) group_knobs(2) + real(rp) phi_set(2) + logical, optional :: print_err + logical ok +end function + function significant_difference (value1, value2, abs_tol, rel_tol) result (is_different) import implicit none diff --git a/bmad/multiparticle/beam_file_io.f90 b/bmad/multiparticle/beam_file_io.f90 index d512ce4ef1..24215505a7 100644 --- a/bmad/multiparticle/beam_file_io.f90 +++ b/bmad/multiparticle/beam_file_io.f90 @@ -188,9 +188,11 @@ subroutine read_beam_file (file_name, beam, beam_init, err_flag, ele, print_mom_ return endif +! Note: BIN type files no longer generated by Bmad (HDF5 is always used instead). + read (iu, '(a80)') line if (index(line, '!BINARY') /= 0) then - call out_io (s_error$, r_name, 'IN FILE: ' // trim(file_name), 'OLD STYLE BEAM0 FILE NOT SUPPORTED...') + call out_io (s_error$, r_name, 'IN FILE: ' // trim(file_name), 'OLD STYLE BEAM FILE NOT SUPPORTED...') return elseif (index(line, '!BIN::2') /= 0) then file_type = 'BIN::2' @@ -199,8 +201,20 @@ subroutine read_beam_file (file_name, beam, beam_init, err_flag, ele, print_mom_ elseif (index(line, '!ASCII::3') /= 0) then file_type = 'ASCII::3' else - file_type = 'ASCII::3' + do + if (len_trim(line) /= 0) exit + read (iu, '(a)') line + enddo + + if (line(1:1) == '#') then + file_type = 'ASCII::4' + else + file_type = 'ASCII::3' + endif + rewind (iu) + call read_beam_ascii4(iu, file_name, beam, beam_init, err_flag, ele, print_mom_shift_warning, conserve_momentum) + return endif if (file_type(1:3) == 'BIN') then @@ -214,8 +228,9 @@ subroutine read_beam_file (file_name, beam, beam_init, err_flag, ele, print_mom_ read (iu, *, iostat = ios, err = 9000) ix_ele read (iu, *, iostat = ios, err = 9000) n_bunch read (iu, *, iostat = ios, err = 9000) n_particle + else - read (iu) line(1:7) ! read "!BINARY" line + read (iu) line(1:7) ! Read "!BIN::" line read (iu, iostat = ios, err = 9000) ix_ele, n_bunch, n_particle endif @@ -529,4 +544,128 @@ end function remove_first_number end subroutine read_beam_file +!----------------------------------------------------------------------------- +!----------------------------------------------------------------------------- +!----------------------------------------------------------------------------- +!+ +! Subroutine read_beam_ascii4 (iu, file_name, beam, beam_init, err_flag, ele, print_mom_shift_warning, conserve_momentum) +! +! Subroutine to read in a beam definition file. +! If non_zero, the following components of beam_init are used to rescale the beam: +! %n_bunch +! %n_particle +! %bunch_charge +! +! If the beam file has '.h5' or '.hdf5' suffix then the file is taken to be an HDF5 file. +! Otherwise the file is assumed to be ASCII. +! +! Input: +! iu -- integer: File unit number +! file_name -- character(*): Name of beam file. +! beam_init -- beam_init_struct: See above. +! ele -- ele_struct, optional: Element with reference energy, etc. +! print_mom_shift_warning -- logical, optional: Default is True. See hdf5_read_beam doc. Only used when reading hdf5 file. +! shift_momentum -- logical, optional: Default is True. See hdf5_read_beam doc. Only used when reading hdf5 file. +! +! Output: +! beam -- Beam_struct: Structure holding the beam information. +! err_flag -- Logical: Set True if there is an error. False otherwise. +!+ + +subroutine read_beam_ascii4 (iu, file_name, beam, beam_init, err_flag, ele, print_mom_shift_warning, conserve_momentum) + +type (beam_struct), target :: beam +type (beam_init_struct) beam_init +type (ele_struct), optional :: ele +type (bunch_struct), pointer :: bunch +type (coord_struct), pointer :: p + +real(rp) bunch_charge, z_center, t_center + +integer iu, ip, ix, ios, n_particle, n_bunch + +character(*) file_name +character(*), parameter :: r_name = 'read_beam_ascii4' +character(200) cols, line + +logical err_flag +logical, optional :: print_mom_shift_warning, conserve_momentum + +! + + +cols = '' +n_bunch = 0 +do + do + read (iu, '(a)', iostat = ios) line + if (line(1:1) /= '#') exit + call string_trim(line(2:), line, ix) + + select case (line(:ix)) + case ('n_bunch'); n_bunch = nint(read_param(line)) + case ('n_particle'); n_particle = nint(read_param(line)) + case ('bunch_charge'); bunch_charge = read_param(line) + case ('z_center'); z_center = read_param(line) + case ('t_center'); t_center = read_param(line) + case ('columns'); cols = read_string(line) + end select + enddo + + call reallocate_beam(beam, n_bunch, n_particle) + + do ip = 1, n_particle + p => beam%bunch(ip)%particle(ip) + read (iu, *, iostat = ios, err = 9000) p%vec, p%p0c + enddo + + n_bunch = n_bunch + 1 + !!call reallocate_bunch( + + +enddo + + +9000 continue +stop + +!--------------------------------------------------------------------------------------------------- +contains + +function read_param(line) result (param) +character(*) line +real(rp) param +integer ix, ios + +! + +ix = index(line, '=') +read(line(ix+1:), *, iostat = ios) param +if (ios /= 0 .or. ix == 0) then + call out_io (s_error$, r_name, 'ERROR READING BEAM FILE PARAMETER!') +endif + +end function read_param + +!--------------------------------------------------------------------------------------------------- +! contains + +function read_string(line) result (str) +character(*) line +character(200) str +integer ix, ios + +! + +ix = index(line, '=') +if (ix == 0) then + call out_io (s_error$, r_name, 'ERROR READING BEAM FILE PARAMETER!') + return +endif +str = unquote(trim(line(ix+1:))) + +end function read_string + +end subroutine read_beam_ascii4 + end module diff --git a/bmad/searchf.namelist b/bmad/searchf.namelist new file mode 100644 index 0000000000..fd128fddac --- /dev/null +++ b/bmad/searchf.namelist @@ -0,0 +1,3481 @@ + +File: code/add_lattice_control_structs.f90 +add_lattice_control_structs + +File: code/angle_to_canonical_coords.f90 +angle_to_canonical_coords + +File: code/apply_all_rampers.f90 +apply_all_rampers + +File: code/apply_rampers_to_slave.f90 +apply_rampers_to_slave + +File: code/at_this_ele_end.f90 +at_this_ele_end + +File: code/attribute_bookkeeper.f90 +attribute_bookkeeper + +File: code/attribute_set_bookkeeping.f90 +attribute_set_bookkeeping + +File: code/bend_exact_multipole_field.f90 +bend_exact_multipole_field +convert_bend_exact_multipole + +File: code/branch_name.f90 +branch_name + +File: code/c_to_cbar.f90 +c_to_cbar + +File: code/calc_z_tune.f90 +calc_z_tune + +File: code/canonical_to_angle_coords.f90 +canonical_to_angle_coords + +File: code/cbar_to_c.f90 +cbar_to_c + +File: code/check_if_s_in_bounds.f90 +check_if_s_in_bounds + +File: code/choose_quads_for_set_tune.f90 +choose_quads_for_set_tune + +File: code/chrom_calc.f90 +chrom_calc + +File: code/chrom_tune.f90 +chrom_tune + +File: code/classical_radius.f90 +classical_radius + +File: code/clear_lat_1turn_mats.f90 +clear_lat_1turn_mats + +File: code/clear_taylor_maps_from_elements.f90 +clear_taylor_maps_from_elements + +File: code/closed_orbit_calc.f90 +closed_orbit_calc + +File: code/closed_orbit_from_tracking.f90 +closed_orbit_from_tracking + +File: code/combine_consecutive_elements.f90 +combine_consecutive_elements + +File: code/control_bookkeeper.f90 +control_bookkeeper + +File: code/convert_coords.f90 +convert_coords + +File: code/convert_particle_coordinates_s_to_t.f90 +convert_particle_coordinates_s_to_t + +File: code/convert_particle_coordinates_t_to_s.f90 +convert_particle_coordinates_t_to_s + +File: code/convert_pc_to.f90 +convert_pc_to + +File: code/convert_total_energy_to.f90 +convert_total_energy_to + +File: code/create_element_slice.f90 +create_element_slice + +File: code/create_lat_ele_nametable.f90 +create_lat_ele_nametable + +File: code/create_unique_ele_names.f90 +create_unique_ele_names + +File: code/default_tracking_species.f90 +default_tracking_species + +File: code/do_mode_flip.f90 +do_mode_flip + +File: code/e_accel_field.f90 +e_accel_field + +File: code/ele_full_name.f90 +ele_full_name + +File: code/ele_has_nonzero_kick.f90 +ele_has_nonzero_kick + +File: code/ele_has_nonzero_offset.f90 +ele_has_nonzero_offset + +File: code/ele_loc_name.f90 +ele_loc_name + +File: code/ele_order_calc.f90 +ele_order_calc + +File: code/ele_unique_name.f90 +ele_unique_name + +File: code/ele_value_has_changed.f90 +ele_value_has_changed + +File: code/element_slice_iterator.f90 +element_slice_iterator + +File: code/em_field_calc.f90 +em_field_calc + +File: code/equivalent_taylor_attributes.f90 +equivalent_taylor_attributes + +File: code/find_element_ends.f90 +find_element_ends + +File: code/find_matching_fieldmap.f90 +find_matching_fieldmap + +File: code/fringe_here.f90 +fringe_here + +File: code/g_bending_strength_from_em_field.f90 +g_bending_strength_from_em_field + +File: code/gamma_ref.f90 +gamma_ref + +File: code/get_slave_list.f90 +get_slave_list + +File: code/insert_element.f90 +insert_element + +File: code/ion_kick.f90 +ion_kick + +File: code/key_name_to_key_index.f90 +key_name_to_key_index + +File: code/lat_compute_reference_energy.f90 +lat_compute_ref_energy_and_time +ele_compute_ref_energy_and_time + +File: code/lat_ele_locator.f90 +lat_ele_locator + +File: code/lat_make_mat6.f90 +lat_make_mat6 + +File: code/lat_sanity_check.f90 +lat_sanity_check + +File: code/lattice_bookkeeper.f90 +lattice_bookkeeper + +File: code/lord_edge_aligned.f90 +lord_edge_aligned + +File: code/low_energy_z_correction.f90 +low_energy_z_correction + +File: code/make_g_mats.f90 +make_g_mats + +File: code/make_hybrid_lat.f90 +make_hybrid_lat + +File: code/make_mat6.f90 +make_mat6 + +File: code/make_v_mats.f90 +make_v_mats + +File: code/map_to_angle_coords.f90 +map_to_angle_coords + +File: code/momentum_compaction.f90 +momentum_compaction + +File: code/multi_turn_tracking_analysis.f90 +multi_turn_tracking_analysis + +File: code/multi_turn_tracking_to_mat.f90 +multi_turn_tracking_to_mat + +File: code/multipass_all_info.f90 +multipass_all_info + +File: code/multipass_chain.f90 +multipass_chain + +File: code/multipole_ele_to_ab.f90 +multipole_ele_to_ab + +File: code/multipole_init.f90 +multipole_init + +File: code/new_control.f90 +new_control + +File: code/num_lords.f90 +num_lords + +File: code/offset_particle.f90 +offset_particle + +File: code/one_turn_mat_at_ele.f90 +one_turn_mat_at_ele + +File: code/orbit_amplitude_calc.f90 +orbit_amplitude_calc + +File: code/order_super_lord_slaves.f90 +order_super_lord_slaves + +File: code/particle_is_moving_backwards.f90 +particle_is_moving_backwards + +File: code/particle_is_moving_forward.f90 +particle_is_moving_forward + +File: code/particle_rf_time.f90 +particle_rf_time + +File: code/pointer_to_attribute.f90 +pointer_to_attribute + +File: code/pointer_to_ele_multipole.f90 +pointer_to_ele_multipole + +File: code/pointer_to_girder.f90 +pointer_to_girder + +File: code/pointer_to_lord.f90 +pointer_to_lord + +File: code/pointer_to_multipass_lord.f90 +pointer_to_multipass_lord + +File: code/pointer_to_next_ele.f90 +pointer_to_next_ele + +File: code/pointer_to_wake_ele.f90 +pointer_to_wake_ele + +File: code/pointers_to_attribute.f90 +pointers_to_attribute + +File: code/radiation_integrals.f90 +radiation_integrals + +File: code/reference_energy_correction.f90 +reference_energy_correction + +File: code/rel_tracking_charge_to_mass.f90 +rel_tracking_charge_to_mass + +File: code/relative_mode_flip.f90 +relative_mode_flip + +File: code/remove_eles_from_lat.f90 +remove_eles_from_lat + +File: code/reverse_lat.f90 +reverse_lat + +File: code/rf_clock_setup.f90 +rf_clock_setup + +File: code/rf_is_on.f90 +rf_is_on + +File: code/s_calc.f90 +s_calc + +File: code/save_a_step.f90 +save_a_step + +File: code/set_ele_attribute.f90 +set_ele_attribute + +File: code/set_ele_name.f90 +set_ele_name + +File: code/set_ele_real_attribute.f90 +set_ele_real_attribute + +File: code/set_ele_status_stale.f90 +set_ele_status_stale + +File: code/set_fringe_on_off.f90 +set_fringe_on_off + +File: code/set_on_off.f90 +set_on_off + +File: code/set_orbit_to_zero.f90 +set_orbit_to_zero + +File: code/set_particle_from_rf_time.f90 +set_particle_from_rf_time + +File: code/set_status_flags.f90 +set_status_flags + +File: code/set_tune.f90 +set_tune + +File: code/set_z_tune.f90 +set_z_tune + +File: code/significant_difference.f90 +significant_difference + +File: code/slice_lattice.f90 +slice_lattice + +File: code/spline_fit_orbit.f90 +spline_fit_orbit + +File: code/split_lat.f90 +split_lat + +File: code/start_branch_at.f90 +start_branch_at + +File: code/stream_ele_end.f90 +stream_ele_end + +File: code/taper_mag_strengths.f90 +taper_mag_strengths + +File: code/tilt_coords.f90 +tilt_coords + +File: code/track1.f90 +track1 + +File: code/track_all.f90 +track_all + +File: code/track_from_s_to_s.f90 +track_from_s_to_s + +File: code/track_many.f90 +track_many + +File: code/tracking_rad_map_setup.f90 +tracking_rad_map_setup + +File: code/transfer_map_calc.f90 +transfer_map_calc + +File: code/transfer_mat_from_twiss.f90 +transfer_mat_from_twiss + +File: code/transfer_matrix_calc.f90 +transfer_matrix_calc + +File: code/twiss_and_track_from_s_to_s.f90 +twiss_and_track_from_s_to_s + +File: code/twiss_and_track_intra_ele.f90 +twiss_and_track_intra_ele + +File: code/twiss_at_element.f90 +twiss_at_element + +File: code/twiss_at_start.f90 +twiss_at_start + +File: code/twiss_from_mat6.f90 +twiss_from_mat6 + +File: code/twiss_from_tracking.f90 +twiss_from_tracking + +File: code/twiss_propagate1.f90 +twiss_propagate1 +twiss1_propagate + +File: code/twiss_propagate_all.f90 +twiss_propagate_all + +File: code/type_coord.f90 +type_coord + +File: code/type_ele.f90 +type_ele + +File: code/type_twiss.f90 +type_twiss + +File: code/valid_field_calc.f90 +valid_field_calc + +File: code/valid_fringe_type.f90 +valid_fringe_type + +File: code/valid_mat6_calc_method.f90 +valid_mat6_calc_method + +File: code/valid_tracking_method.f90 +valid_tracking_method + +File: code/value_of_attribute.f90 +value_of_attribute + +File: code/write_bmad_lattice_file.f90 +write_bmad_lattice_file + +File: code/zero_ele_kicks.f90 +zero_ele_kicks + +File: code/zero_ele_offsets.f90 +zero_ele_offsets + +File: code/write_lattice_in_foreign_format.f90 +write_lattice_in_foreign_format + +File: code/set_tune_via_group_knobs.f90 +set_tune_via_group_knobs + +File: custom/apply_element_edge_kick_hook.f90 +apply_element_edge_kick_hook + +File: custom/check_aperture_limit_custom.f90 +check_aperture_limit_custom + +File: custom/distance_to_aperture_custom.f90 +distance_to_aperture_custom + +File: custom/ele_geometry_hook.f90 +ele_geometry_hook + +File: custom/ele_to_fibre_hook.f90 +ele_to_fibre_hook + +File: custom/em_field_custom.f90 +em_field_custom + +File: custom/init_custom.f90 +init_custom + +File: custom/make_mat6_custom.f90 +make_mat6_custom + +File: custom/radiation_integrals_custom.f90 +radiation_integrals_custom + +File: custom/time_runge_kutta_periodic_kick_hook.f90 +time_runge_kutta_periodic_kick_hook + +File: custom/track1_bunch_hook.f90 +track1_bunch_hook + +File: custom/track1_custom.f90 +track1_custom + +File: custom/track1_postprocess.f90 +track1_postprocess + +File: custom/track1_preprocess.f90 +track1_preprocess + +File: custom/track1_spin_custom.f90 +track1_spin_custom + +File: custom/track1_wake_hook.f90 +track1_wake_hook + +File: custom/track_many_hook.f90 +track_many_hook + +File: custom/wall_hit_handler_custom.f90 +wall_hit_handler_custom + +File: dummy_routines/xraylib_dummy.f90 +xraylib +crystal_struct +compounddatanist +r_e +crystal_getcrystal +crystal_f_h_structurefactor +atomicnumbertosymbol +atomicweight +atomicdensity +atomic_factors +elementdensity +getcompounddatanistbyindex +crystal_dspacing +freecompounddatanist + +File: geometry/bend_shift.f90 +bend_shift + +File: geometry/coords_body_to_local.f90 +coords_body_to_local + +File: geometry/coords_body_to_rel_exit.f90 +coords_body_to_rel_exit + +File: geometry/coords_curvilinear_to_floor.f90 +coords_curvilinear_to_floor + +File: geometry/coords_floor_to_curvilinear.f90 +coords_floor_to_curvilinear + +File: geometry/coords_floor_to_local_curvilinear.f90 +coords_floor_to_local_curvilinear + +File: geometry/coords_floor_to_relative.f90 +coords_floor_to_relative + +File: geometry/coords_local_curvilinear_to_body.f90 +coords_local_curvilinear_to_body + +File: geometry/coords_local_curvilinear_to_floor.f90 +coords_local_curvilinear_to_floor + +File: geometry/coords_relative_to_floor.f90 +coords_relative_to_floor + +File: geometry/ele_geometry.f90 +ele_geometry + +File: geometry/ele_geometry_with_misalignments.f90 +ele_geometry_with_misalignments + +File: geometry/ele_misalignment_L_S_calc.f90 +ele_misalignment_l_s_calc + +File: geometry/floor_angles_to_w_mat.f90 +floor_angles_to_w_mat + +File: geometry/floor_w_mat_to_angles.f90 +floor_w_mat_to_angles + +File: geometry/lat_geometry.f90 +lat_geometry + +File: geometry/orbit_to_floor_phase_space.f90 +orbit_to_floor_phase_space + +File: geometry/orbit_to_local_curvilinear.f90 +orbit_to_local_curvilinear + +File: geometry/patch_flips_propagation_direction.f90 +patch_flips_propagation_direction + +File: geometry/s_body_calc.f90 +s_body_calc + +File: geometry/update_floor_angles.f90 +update_floor_angles + +File: geometry/w_mat_for_bend_angle.f90 +w_mat_for_bend_angle + +File: geometry/w_mat_for_tilt.f90 +w_mat_for_tilt + +File: geometry/w_mat_for_x_pitch.f90 +w_mat_for_x_pitch + +File: geometry/w_mat_for_y_pitch.f90 +w_mat_for_y_pitch + +File: hdf5/hdf5_interface.f90 +hdf5_interface +h5o_type_attribute_f +hdf5_info_struct +hdf5_read_dataset_int +procedure +procedure +procedure +procedure +hdf5_read_dataset_real +procedure +procedure +procedure +procedure +hdf5_read_attribute_real +procedure +procedure +hdf5_read_attribute_int +procedure +procedure +hdf5_write_dataset_int +procedure +procedure +procedure +procedure +hdf5_write_dataset_real +procedure +procedure +procedure +procedure +hdf5_write_attribute_real +procedure +procedure +hdf5_write_attribute_int +procedure +procedure +hdf5_write_attribute_string +procedure +procedure +hdf5_write_attribute_string_rank0 +hdf5_write_attribute_string_rank1 +hdf5_write_attribute_int_rank0 +hdf5_write_attribute_int_rank1 +hdf5_write_attribute_real_rank0 +hdf5_write_attribute_real_rank1 +hdf5_open_file +hdf5_open_object +hdf5_close_object +hdf5_exists +hdf5_open_group +hdf5_group_n_links +hdf5_get_object_by_index +hdf5_open_dataset +hdf5_num_attributes +hdf5_get_attribute_by_index +hdf5_attribute_info +hdf5_object_info +hdf5_read_attribute_int_rank0 +hdf5_read_attribute_int_rank1 +hdf5_read_attribute_real_rank0 +hdf5_read_attribute_real_rank1 +hdf5_read_attribute_alloc_string +hdf5_read_attribute_string +hdf5_write_dataset_real_rank0 +hdf5_write_dataset_real_rank1 +hdf5_write_dataset_real_rank2 +hdf5_write_dataset_real_rank3 +hdf5_write_dataset_int_rank0 +hdf5_write_dataset_int_rank1 +hdf5_write_dataset_int_rank2 +hdf5_write_dataset_int_rank3 +hdf5_read_dataorder +hdf5_check_open +hdf5_read_dataset_real_rank0 +hdf5_read_dataset_real_rank1 +hdf5_read_dataset_real_rank2 +hdf5_read_dataset_real_rank3 +hdf5_read_dataset_int_rank0 +hdf5_read_dataset_int_rank1 +hdf5_read_dataset_int_rank2 +hdf5_read_dataset_int_rank3 + +File: hdf5/hdf5_openpmd_mod.f90 +hdf5_openpmd_mod +pmd_unit_struct +dim_1 +dim_length +dim_mass +dim_time +dim_current +dim_temperture +dim_mol +dim_luminous +dim_charge +dim_electric_field +dim_velocity +dim_energy +dim_momentum +dim_tesla +dim_hbar +pmd_write_int_to_dataset +procedure +procedure +procedure +pmd_write_real_to_dataset +procedure +procedure +procedure +pmd_write_complex_to_dataset +procedure +procedure +procedure +pmd_read_int_dataset +procedure +procedure +procedure +pmd_read_real_dataset +procedure +procedure +procedure +pmd_read_complex_dataset +procedure +procedure +procedure +pmd_init_compound_complex +pmd_kill_compound_complex +pmd_write_int_to_dataset_rank1 +pmd_write_int_to_dataset_rank2 +pmd_write_int_to_dataset_rank3 +pmd_write_int_to_pseudo_dataset +pmd_write_real_to_dataset_rank1 +pmd_write_real_to_dataset_rank2 +pmd_write_real_to_dataset_rank3 +pmd_write_real_to_pseudo_dataset +pmd_write_complex_to_dataset_rank1 +pmd_write_complex_to_dataset_rank2 +pmd_write_complex_to_dataset_rank3 +pmd_write_complex_to_pseudo_dataset +my_h5ltset_attribute_complex +pmd_write_units_to_dataset +pmd_read_int_dataset_rank1 +pmd_read_int_dataset_rank2 +pmd_read_int_dataset_rank3 +pmd_read_real_dataset_rank1 +pmd_read_real_dataset_rank2 +pmd_read_real_dataset_rank3 +pmd_read_complex_dataset_rank1 +pmd_read_complex_dataset_rank2 +pmd_read_complex_dataset_rank3 + +File: hdf5/hdf5_read_beam.f90 +hdf5_read_beam + +File: hdf5/hdf5_read_grid_field.f90 +hdf5_read_grid_field + +File: hdf5/hdf5_write_beam.f90 +hdf5_write_beam + +File: hdf5/hdf5_write_grid_field.f90 +hdf5_write_grid_field + +File: interface/astra_interface_mod.f90 +astra_interface_mod +astra_lattice_param_struct +write_astra_lattice_file +write_astra_ele +write_astra_bend +rotate3 +get_astra_fieldgrid_name_and_scaling +write_astra_field_grid_file +write_astra_field_grid_file_3d +astra_max_field_reference + +File: interface/blender_interface_mod.f90 +blender_interface_mod +write_blender_lat_layout +skip_ele_blender +write_blender_ele + +File: interface/gpt_interface_mod.f90 +gpt_interface_mod +gpt_lat_param_struct +gpt_to_particle_bunch +write_gpt_lattice_file +write_gpt_ele +get_gpt_fieldgrid_name_and_scaling +gpt_field_grid_scaling +write_gpt_field_grid_file_1d +write_gpt_field_grid_file_2d +write_gpt_field_grid_file_3d +gpt_max_field_reference +rotate_field_zx +convert_local_curvilinear_to_local_cartesian +convert_local_cartesian_to_local_curvilinear + +File: interface/opal_interface_mod.f90 +opal_interface_mod +write_opal_lattice_file +get_opal_fieldgrid_name_and_scaling +write_opal_field_grid_file +write_opal_line + +File: interface/xraylib_interface.f90 +xraylib_interface +xraylib_z_max$ +photon_absorption_and_phase_shift +multilayer_type_to_multilayer_params +crystal_type_to_crystal_params +xraylib_nist_compound + +File: low_level/absolute_time_tracking.f90 +absolute_time_tracking + +File: low_level/ac_kicker_amp.f90 +ac_kicker_amp + +File: low_level/allocate_branch_array.f90 +allocate_branch_array + +File: low_level/allocate_element_array.f90 +allocate_element_array + +File: low_level/allocate_lat_ele_array.f90 +allocate_lat_ele_array + +File: low_level/apply_element_edge_kick.f90 +apply_element_edge_kick + +File: low_level/apply_energy_kick.f90 +apply_energy_kick + +File: low_level/autoscale_phase_and_amp.f90 +autoscale_phase_and_amp + +File: low_level/average_twiss.f90 +average_twiss + +File: low_level/bbi_slice_calc.f90 +bbi_slice_calc + +File: low_level/c_multi.f90 +c_multi + +File: low_level/calc_next_fringe_edge.f90 +calc_next_fringe_edge + +File: low_level/calc_super_slave_key.f90 +calc_super_slave_key + +File: low_level/check_aperture_limit.f90 +check_aperture_limit + +File: low_level/create_wiggler_cartesian_map.f90 +create_wiggler_cartesian_map + +File: low_level/deallocate_ele_array_pointers.f90 +deallocate_ele_array_pointers + +File: low_level/deallocate_ele_pointers.f90 +deallocate_ele_pointers + +File: low_level/deallocate_lat_pointers.f90 +deallocate_lat_pointers + +File: low_level/diffraction_plate_or_mask_hit_spot.f90 +diffraction_plate_or_mask_hit_spot + +File: low_level/distance_to_aperture.f90 +distance_to_aperture + +File: low_level/ele_has_constant_ds_dt_ref.f90 +ele_has_constant_ds_dt_ref + +File: low_level/ele_loc.f90 +ele_loc + +File: low_level/ele_nametable_index.f90 +ele_nametable_index + +File: low_level/entering_element.f90 +entering_element + +File: low_level/g_integrals_calc.f90 +g_integrals_calc + +File: low_level/gen_grad1_to_em_taylor.f90 +gen_grad1_to_em_taylor + +File: low_level/gen_grad_at_s_to_em_taylor.f90 +gen_grad_at_s_to_em_taylor + +File: low_level/gradient_shift_sr_wake.f90 +gradient_shift_sr_wake + +File: low_level/init_bmad.f90 +init_bmad + +File: low_level/init_ele.f90 +init_ele + +File: low_level/init_fringe_info.f90 +init_fringe_info + +File: low_level/init_lat.f90 +init_lat + +File: low_level/knot_interpolate.f90 +knot_interpolate + +File: low_level/make_g2_mats.f90 +make_g2_mats + +File: low_level/make_mat6_bmad.f90 +make_mat6_bmad + +File: low_level/make_mat6_symp_lie_ptc.f90 +make_mat6_symp_lie_ptc + +File: low_level/make_mat6_taylor.f90 +make_mat6_taylor + +File: low_level/make_mat6_tracking.f90 +make_mat6_tracking + +File: low_level/master_parameter_value.f90 +master_parameter_value + +File: low_level/mat4_multipole.f90 +mat4_multipole + +File: low_level/mat6_add_offsets.f90 +mat6_add_offsets + +File: low_level/mat6_add_pitch.f90 +mat6_add_pitch + +File: low_level/mat_symp_decouple.f90 +mat_symp_decouple + +File: low_level/match_ele_to_mat6.f90 +match_ele_to_mat6 + +File: low_level/mexp.f90 +mexp + +File: low_level/multipole_kick_mat.f90 +multipole_kick_mat + +File: low_level/orbit_too_large.f90 +orbit_too_large + +File: low_level/patch_length.f90 +patch_length + +File: low_level/physical_ele_end.f90 +physical_ele_end + +File: low_level/pointer_to_branch.f90 +pointer_to_branch_given_name +pointer_to_branch_given_ele + +File: low_level/pointer_to_indexed_attribute.f90 +pointer_to_indexed_attribute + +File: low_level/quad_mat2_calc.f90 +quad_mat2_calc + +File: low_level/re_allocate_eles.f90 +re_allocate_eles + +File: low_level/reallocate_control.f90 +reallocate_control + +File: low_level/reallocate_expression_stack.f90 +reallocate_expression_stack + +File: low_level/remove_lord_slave_link.f90 +remove_lord_slave_link + +File: low_level/rf_coupler_kick.f90 +rf_coupler_kick + +File: low_level/rf_ref_time_offset.f90 +rf_ref_time_offset + +File: low_level/set_lords_status_stale.f90 +set_lords_status_stale + +File: low_level/sol_quad_mat6_calc.f90 +sol_quad_mat6_calc + +File: low_level/solenoid_track_and_mat.f90 +solenoid_track_and_mat + +File: low_level/strong_beam_sigma_calc.f90 +strong_beam_sigma_calc + +File: low_level/strong_beam_strength.f90 +strong_beam_strength + +File: low_level/symp_lie_bmad.f90 +symp_lie_bmad + +File: low_level/tilt_mat6.f90 +tilt_mat6 + +File: low_level/track1_bmad.f90 +track1_bmad + +File: low_level/track1_linear.f90 +track1_linear + +File: low_level/track1_runge_kutta.f90 +track1_runge_kutta + +File: low_level/track1_spin.f90 +track1_spin + +File: low_level/track1_spin_bmad.f90 +track1_spin_bmad + +File: low_level/track1_spin_taylor.f90 +track1_spin_taylor + +File: low_level/track1_symp_lie_ptc.f90 +track1_symp_lie_ptc + +File: low_level/track1_taylor.f90 +track1_taylor + +File: low_level/track1_time_runge_kutta.f90 +track1_time_runge_kutta + +File: low_level/track_a_beambeam.f90 +track_a_beambeam + +File: low_level/track_a_bend.f90 +track_a_bend +sbend_body_with_k1_map + +File: low_level/track_a_converter.f90 +track_a_converter + +File: low_level/track_a_crab_cavity.f90 +track_a_crab_cavity + +File: low_level/track_a_drift.f90 +track_a_drift + +File: low_level/track_a_foil.f90 +track_a_foil + +File: low_level/track_a_gkicker.f90 +track_a_gkicker + +File: low_level/track_a_lcavity.f90 +track_a_lcavity + +File: low_level/track_a_mask.f90 +track_a_mask + +File: low_level/track_a_match.f90 +track_a_match + +File: low_level/track_a_patch.f90 +track_a_patch + +File: low_level/track_a_quadrupole.f90 +track_a_quadrupole + +File: low_level/track_a_rfcavity.f90 +track_a_rfcavity + +File: low_level/track_a_sad_mult.f90 +track_a_sad_mult + +File: low_level/track_a_sol_quad.f90 +track_a_sol_quad + +File: low_level/track_a_thick_multipole.f90 +track_a_thick_multipole + +File: low_level/track_a_wiggler.f90 +track_a_wiggler + +File: low_level/track_a_zero_length_element.f90 +track_a_zero_length_element + +File: low_level/transfer_ac_kick.f90 +transfer_ac_kick + +File: low_level/transfer_branch.f90 +transfer_branch + +File: low_level/transfer_branch_parameters.f90 +transfer_branch_parameters + +File: low_level/transfer_branches.f90 +transfer_branches + +File: low_level/transfer_ele.f90 +transfer_ele + +File: low_level/transfer_ele_taylor.f90 +transfer_ele_taylor + +File: low_level/transfer_eles.f90 +transfer_eles + +File: low_level/transfer_fieldmap.f90 +transfer_fieldmap + +File: low_level/transfer_lat.f90 +transfer_lat + +File: low_level/transfer_lat_parameters.f90 +transfer_lat_parameters + +File: low_level/transfer_mat2_from_twiss.f90 +transfer_mat2_from_twiss + +File: low_level/transfer_twiss.f90 +transfer_twiss + +File: low_level/transfer_wake.f90 +transfer_wake + +File: low_level/transfer_wall3d.f90 +transfer_wall3d + +File: low_level/twiss_from_mat2.f90 +twiss_from_mat2 + +File: low_level/twiss_to_1_turn_mat.f90 +twiss_to_1_turn_mat + +File: low_level/unlink_fieldmap.f90 +unlink_fieldmap + +File: low_level/unlink_wall3d.f90 +unlink_wall3d + +File: modules/bmad.f90 +bmad + +File: modules/bmad_interface.f90 +bmad_interface + +File: modules/bmad_routine_interface.f90 +bmad_routine_interface +pointer_to_branch +pointer_to_branch_given_name +pointer_to_branch_given_ele + +File: modules/changed_attribute_bookkeeper.f90 +changed_attribute_bookkeeper +set_flags_for_changed_attribute +procedure +procedure +procedure +procedure +procedure +set_flags_for_changed_all_attribute +set_flags_for_changed_integer_attribute +set_flags_for_changed_logical_attribute +set_flags_for_changed_lat_attribute +set_flags_for_changed_real_attribute + +File: modules/complex_taylor_mod.f90 +complex_taylor_mod +complex_taylor_coef +procedure +procedure +complex_taylor_clean +complex_taylor_coef1 +complex_taylor_coef2 +type_complex_taylors +complex_taylor_make_unit +add_complex_taylor_term1 +add_complex_taylor_term2 +kill_complex_taylor +sort_complex_taylor_terms +complex_taylor_exponent_index +complex_taylor_to_mat6 +mat6_to_complex_taylor +track_complex_taylor +truncate_complex_taylor_to_order + +File: modules/coord_mod.f90 +coord_mod +reallocate_coord +procedure +procedure +init_coord +procedure +procedure +procedure +reallocate_coord_n +reallocate_coord_lat +reallocate_coord_array +init_coord1 +init_coord2 +init_coord3 + +File: modules/dynamic_aperture_mod.f90 +dynamic_aperture_mod +dynamic_aperture_scan +set_branch_and_ele_for_omp +dynamic_aperture_point + +File: modules/element_at_s_mod.f90 +element_at_s_mod +element_at_s +procedure +procedure +element_at_s_branch +element_at_s_lat +pointer_to_element_at_s + +File: modules/element_modeling_mod.f90 +element_modeling_mod +wiggler_modeling_common_struct +create_sol_quad_model +create_planar_wiggler_model +wig_func +yfit_calc +mat_flatten + +File: modules/em_field_mod.f90 +em_field_mod +g_bend_from_em_field +to_fieldmap_coords +rotate_em_field +grid_field_interpolate +field_interpolate_3d +em_field_derivatives +gen_grad_field + +File: modules/equal_mod.f90 +equal_mod +assignment +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +operator +procedure +map1_times_map1 +em_field_plus_em_field +ele_equal_ele +ele_equals_ele +ele_vec_equal_ele_vec +lat_equal_lat +lat_vec_equal_lat_vec +branch_equal_branch +coord_equal_coord +taylor_equal_taylor +taylors_equal_taylors +init_taylor_series +em_taylor_equal_em_taylor +em_taylors_equal_em_taylors +init_em_taylor_series +complex_taylor_equal_complex_taylor +complex_taylors_equal_complex_taylors +init_complex_taylor_series +bunch_equal_bunch +beam_equal_beam + +File: modules/equality_mod.f90 +equality_mod +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +eq_spline +eq_spin_polar +eq_surface_orientation +eq_ac_kicker_time +eq_ac_kicker_freq +eq_ac_kicker +eq_interval1_coef +eq_photon_reflect_table +eq_photon_reflect_surface +eq_coord +eq_coord_array +eq_bpm_phase_coupling +eq_expression_atom +eq_wake_sr_mode +eq_wake_sr +eq_wake_lr_mode +eq_wake_lr +eq_lat_ele_loc +eq_wake +eq_taylor_term +eq_taylor +eq_em_taylor_term +eq_em_taylor +eq_cartesian_map_term1 +eq_cartesian_map_term +eq_cartesian_map +eq_cylindrical_map_term1 +eq_cylindrical_map_term +eq_cylindrical_map +eq_grid_field_pt1 +eq_grid_field_pt +eq_grid_field +eq_floor_position +eq_high_energy_space_charge +eq_xy_disp +eq_twiss +eq_mode3 +eq_bookkeeping_state +eq_rad_map +eq_rad_map_ele +eq_gen_grad1 +eq_gen_grad_map +eq_surface_grid_pt +eq_surface_grid +eq_target_point +eq_surface_curvature +eq_photon_target +eq_photon_material +eq_pixel_pt +eq_pixel_detec +eq_photon_element +eq_wall3d_vertex +eq_wall3d_section +eq_wall3d +eq_control +eq_controller_var1 +eq_controller +eq_ellipse_beam_init +eq_kv_beam_init +eq_grid_beam_init +eq_beam_init +eq_lat_param +eq_mode_info +eq_pre_tracker +eq_anormal_mode +eq_linac_normal_mode +eq_normal_modes +eq_em_field +eq_strong_beam +eq_track_point +eq_track +eq_space_charge_common +eq_bmad_common +eq_rad_int1 +eq_rad_int_branch +eq_rad_int_all_ele +eq_ele +eq_complex_taylor_term +eq_complex_taylor +eq_branch +eq_lat +eq_bunch +eq_bunch_params +eq_beam +eq_aperture_point +eq_aperture_param +eq_aperture_scan + +File: modules/expression_mod.f90 +expression_mod +expression_string_to_stack +pushit +expression_value +expression_stack_value +expression_stack_to_string +split_expression_string +linear_coef + +File: modules/fringe_mod.f90 +fringe_mod +bend_edge_kick +linear_bend_edge_kick +hwang_bend_edge_kick +sad_mult_hard_bend_edge_kick +soft_quadrupole_edge_kick +hard_multipole_edge_kick +sad_soft_bend_edge_kick +ptc_wedger +ptc_fringe_dipoler +ptc_rot_xz +exact_bend_edge_kick + +File: modules/integration_timer_mod.f90 +integration_timer_mod +integration_timer +procedure +procedure +integration_timer_ele +integration_timer_fibre +get_taylor +diff +term_diff + +File: modules/mad_mod.f90 +mad_mod +mad_energy_struct +mad_map_struct +make_mat6_mad +make_mad_map +mad_add_offsets_and_multipoles +mad_drift +mad_elsep +mad_sextupole +mad_sbend +mad_sbend_fringe +mad_sbend_body +mad_tmfoc +mad_quadrupole +mad_rfcavity +mad_solenoid +mad_tmsymm +mad_tmtilt +mad_concat_map2 +mad_track1 +track1_mad +mad_map_to_taylor +taylor_to_mad_map +make_unit_mad_map + +File: modules/measurement_mod.f90 +measurement_mod +ele_is_monitor +compute_measurement_distortion_mat +to_orbit_reading +to_eta_reading +to_phase_and_coupling_reading + +File: modules/mode3_mod.f90 +mode3_mod +m +o +l +t6_to_b123 +normal_mode3_calc +make_hvbp +xyz_to_action +action_to_xyz +eigen_decomp_6mat +mytan +order_evecs_by_n_similarity +order_evecs_by_plane_dominance +order_evecs_by_tune +make_n +get_emit_from_sigma_mat +beam_tilts +make_smat_from_abc +normalize_evecs +project_emit_to_xyz +twiss3_propagate_all +twiss3_propagate1 +twiss3_from_twiss2 +twiss3_at_start + +File: modules/multipole_mod.f90 +multipole_mod +multipole_ab_to_kt +multipole1_ab_to_kt +multipole_ele_to_kt +multipole_kt_to_ab +multipole1_kt_to_ab +multipole_kicks +ab_multipole_kicks +multipole_kick +ab_multipole_kick +elec_multipole_field + +File: modules/pointer_to_ele_mod.f90 +pointer_to_ele_mod +pointer_to_ele +procedure +procedure +procedure +procedure +pointer_to_ele1 +pointer_to_ele2 +pointer_to_ele3 +pointer_to_ele4 +pointer_to_field_ele +num_field_eles + +File: modules/rad_6d_mod.f90 +rad_6d_mod +emit_6d +rad_damp_and_stoc_mats +rad1_damp_and_stoc_mats +rad_g_integrals + +File: modules/rad_int_common.f90 +rad_int_common +no_cache$ +cache_no_misalign$ +rad_int_track_point_struct +rad_int_cache1_struct +rad_int_cache_struct +rad_int_info_struct +qromb_rad_int +propagate_part_way +calc_wiggler_g_params + +File: modules/runge_kutta_mod.f90 +runge_kutta_mod +runge_kutta_common_struct +odeint_bmad +rk_adaptive_step +rk_step1 +kick_vector_calc + +File: modules/srdt_mod.f90 +srdt_mod +summation_rdt_struct +srdt_first +srdt_second +sliced_eles_struct +srdt_calc +srdt_calc_with_cache +make_srdt_cache +make_slices +srdt_lsq_solution + +File: modules/superimpose_mod.f90 +superimpose_mod +add_superimpose +split_this_lat +delete_underscore +adjust_super_slave_names +adjust_drift_names + +File: modules/taylor_mod.f90 +taylor_mod +taylor_clean +taylor_coef +taylor_expn +type_taylors +taylor_make_quaternion_unit +taylor_make_unit +taylor_term_index +add_taylor_term +remove_taylor_term +kill_taylor +taylor_extract_zeroth_order_part +sort_taylor_terms +taylor_exponent_index +taylor_to_mat6 +mat6_to_taylor +track_taylor +truncate_taylor_to_order +evaluate_em_taylor +add_em_taylor_term + +File: modules/time_tracker_mod.f90 +time_tracker_mod +odeint_bmad_time +rk_adaptive_time_step +rk_time_step1 +em_field_kick_vector_time +particle_in_global_frame +drift_orbit_time +write_time_particle_distribution +track_until_dead + +File: modules/transfer_map_mod.f90 +transfer_map_mod +transfer_map_from_s_to_s +transfer_this_map +mat6_from_s_to_s +transfer_this_mat +concat_transfer_mat + +File: modules/tune_tracker.f90 +tune_tracker_mod +max_tt +tt_param_struct +tt_state_struct +init_dtt +reset_dtt +dest_dtt +tt_update +get_dtt +modulator +check_id + +File: modules/twiss_and_track_mod.f90 +twiss_and_track_mod +twiss_and_track +procedure +procedure +twiss_and_track_branch +twiss_and_track_all +twiss_and_track1 +twiss_and_track_at_s + +File: modules/wall3d_mod.f90 +wall3d_mod +re_allocate +procedure +procedure +re_allocate_wall3d_vertex_array +re_allocate_wall3d_section_array +wall3d_initializer +wall3d_section_initializer +calc_wall_radius +wall3d_d_radius +pointer_to_wall3d +wall3d_to_position +create_concatenated_wall3d +mark_patch_regions + +File: modules/write_lat_file_mod.f90 +write_lat_file_mod +write_line_element +re_str +array_re_str +cmplx_re_str +rchomp +write_lat_line +value_to_line +write_lat_in_sad_format + +File: modules/bookkeeper_mod.f90 +bookkeeper_mod +makeup_group_lord +makeup_multipass_slave +makeup_super_slave +makeup_super_slave1 +compute_slave_coupler +makeup_control_slave +aperture_bookkeeper +attributes_need_bookkeeping + +File: modules/attribute_mod.f90 +attribute_mod +does_not_exist$ +is_free$ +quasi_free$ +dependent$ +private$ +overlay_slave$ +field_master_dependent$ +ele_attribute_struct +attribute_free +procedure +procedure +procedure +attribute_index +procedure +procedure +attribute_name +procedure +procedure +attribute_index1 +attribute_index2 +attribute_name1 +attribute_name2 +attribute_info +init_attribute_name_array +init_short_attrib_array +init_attribute_name1 +has_orientation_attributes +attribute_type +attribute_units +string_attrib +switch_attrib_value_name +n_attrib_string_max_len +has_attribute +custom_attribute_ubound_index +set_custom_attribute_name +custom_ele_attrib_name_list +attribute_free1 +attribute_free2 +attribute_free3 +check_this_attribute_free +field_attribute_free + +File: modules/bmad_struct.f90 +bmad_struct +bmad_inc_version$ +none$ +fringe_field_info_struct +n_pole_maxx +old_control_var_offset$ +var_offset$ +n_var_max$ +taylor_offset$ +expression_atom_struct +bmad_standard$ +symp_lie_ptc$ +runge_kutta$ +linear$ +tracking$ +time_runge_kutta$ +fixed_step_runge_kutta$ +symp_lie_bmad$ +auto$ +sprint$ +fixed_step_time_runge_kutta$ +mad$ +n_methods$ +tracking_method_name +spin_tracking_method_name +mat6_calc_method_name +drift_kick$ +matrix_kick$ +ripken_kick$ +ptc_integration_type_name +sub_key_name +sector$ +straight$ +ptc_field_geometry_name +fieldmap$ +planar_model$ +refer_to_lords$ +no_field$ +helical_model$ +soft_edge$ +field_calc_name +uniform$ +gaussian$ +spherical$ +curve$ +distribution_name +ix_slice_slave$ +minor_slave$ +super_slave$ +free$ +group_lord$ +super_lord$ +overlay_lord$ +girder_lord$ +multipass_lord$ +multipass_slave$ +not_a_lord$ +slice_slave$ +control_lord$ +ramper_lord$ +control_name +set$ +unset$ +auto_aperture$ +rectangular$ +elliptical$ +wall3d$ +custom_aperture$ +aperture_type_name +soft_edge_only$ +hard_edge_only$ +full$ +sad_full$ +linear_edge$ +basic_bend$ +fringe_type_name +standing_wave$ +traveling_wave$ +ptc_standard$ +cavity_type_name +x_invariant$ +multipole_symmetry$ +ptc_fringe_geometry_name +control_var$ +old_control_var$ +all_control_var$ +elec_multipole$ +ok$ +in_stop_band$ +non_symplectic$ +unstable$ +unstable_a$ +unstable_b$ +xfer_mat_calc_failure$ +twiss_propagate_failure$ +no_closed_orbit$ +twiss_struct +include_kicks$ +short$ +user_set$ +first_pass$ +multipass_ref_energy_name +interval1_coef_struct +photon_reflect_table_struct +photon_reflect_surface_struct +incoherent$ +coherent$ +photon_type_name +ascii$ +binary$ +hdf5$ +one_file$ +num_ele_attrib$ +off$ +on$ +save_state$ +restore_state$ +off_and_save$ +horizontally_pure$ +vertically_pure$ +exact_multipoles_name +one_dim$ +steady_state_3d$ +csr_method_name +slice$ +fft_3d$ +cathode_fft_3d$ +space_charge_method_name +pauli_struct +spin_eigen_struct +spin_axis_struct +spin_matching_struct +spin_polar_struct +spin_orbit_map1_struct +linear_isf1_struct +linear_ele_isf_struct +x_unit_vec +y_unit_vec +z_unit_vec +magnetic$ +electric$ +mixed$ +em_field_type_name +bragg_diffracted$ +forward_diffracted$ +undiffracted$ +ref_orbit_follows_name +reflection$ +transmission$ +mode_name +anchor_beginning$ +anchor_center$ +anchor_end$ +anchor_pt_name +entrance_end$ +exit_end$ +both_ends$ +no_end$ +no_aperture$ +nowhere$ +continuous$ +surface$ +wall_transition$ +upstream_end$ +downstream_end$ +inside$ +center_pt$ +start_end$ +first_track_edge$ +second_track_edge$ +in_between$ +aperture_at_name +end_at_name +ref_coords_name +ref_pt_name +location_name +normal$ +clear$ +opaque$ +wall_start$ +wall_end$ +wall3d_section_type_name +wall3d_vertex_struct +absolute$ +relative$ +shifted_to_relative$ +wall3d_section_struct +chamber_wall$ +mask_plate$ +wall3d_name +wall3d_struct +taylor_term_struct +complex_taylor_term_struct +taylor_struct +complex_taylor_struct +x_plane$ +y_plane$ +z_plane$ +n_plane$ +s_plane$ +plane_name +field_plane_name +moving_forward$ +pre_born$ +alive$ +lost$ +lost_neg_x_aperture$ +lost_pos_x_aperture$ +lost_neg_y_aperture$ +lost_pos_y_aperture$ +lost_pz_aperture$ +lost_z_aperture$ +vec0$ +coord_struct +coord_array_struct +bpm_phase_coupling_struct +x_polarization$ +y_polarization$ +sr_transverse_polarization_name +leading$ +trailing$ +x_leading$ +y_leading$ +x_trailing$ +y_trailing$ +sr_transverse_position_dep_name +sr_longitudinal_position_dep_name +wake_sr_mode_struct +wake_sr_struct +wake_lr_mode_struct +wake_lr_struct +wake_struct +ac_kicker_time_struct +ac_kicker_freq_struct +ac_kicker_struct +family_y$ +family_x$ +family_qu$ +family_sq$ +hyper_y$ +hyper_xy$ +hyper_x$ +cartesian_map_family_name +cartesian_map_form_name +cartesian_map_term1_struct +cartesian_map_term_struct +cartesian_map_struct +cylindrical_map_term1_struct +cylindrical_map_term_struct +cylindrical_map_struct +gen_grad1_struct +gen_grad_map_struct +grid_field_pt1_struct +grid_field_pt_struct +grid_field_struct +em_taylor_term_struct +em_taylor_struct +vec3_zero$ +vec6_zero$ +floor_position_struct +high_energy_space_charge_struct +xy_disp_struct +lat_ele_loc_struct +lat_ele_order1_struct +lat_ele_order_array_struct +lat_ele_order_struct +ele_pointer_struct +branch_pointer_struct +lat_pointer_struct +mode3_struct +super_ok$ +stale$ +attribute_group$ +control_group$ +floor_position_group$ +s_position_group$ +ref_energy_group$ +mat6_group$ +rad_int_group$ +all_groups$ +s_and_floor_position_group$ +bookkeeping_state_struct +multipole_cache_struct +rad_map_struct +rad_map_ele_struct +surface_orientation_struct +surface_grid_pt_struct +surface_grid_struct +segmented$ +h_misalign$ +displacement$ +surface_grid_type_name +pixel_pt_struct +pixel_detec_struct +surface_curvature_struct +target_point_struct +photon_target_struct +photon_material_struct +polarized$ +unpolarized$ +polarization_name +photon_element_struct +bunch_struct +beam_struct +ellipse_beam_init_struct +kv_beam_init_struct +grid_beam_init_struct +beam_init_struct +random_engine_name +random_gauss_converter_name +beam_distribution_type_name +bunch_params_struct +bunch_track_struct +converter_prob_pc_r_struct +converter_dir_1d_struct +converter_dir_2d_struct +converter_dir_coef_struct +converter_direction_out_struct +converter_sub_distribution_struct +converter_distribution_struct +converter_struct +control_struct +controller_var1_struct +cubic$ +interpolation_name +controller_struct +ele_struct +lat_param_struct +ptc_layout_pointer_struct +ptc_branch1_struct +mode_info_struct +resonance_h_struct +bmad_normal_form_struct +ptc_normal_form_struct +branch_struct +opal$ +impactt$ +pre_tracker_struct +lat_struct +coord_name +coord_name_cap +drift$ +sbend$ +quadrupole$ +group$ +sextupole$ +overlay$ +custom$ +taylor$ +rfcavity$ +elseparator$ +beambeam$ +wiggler$ +sol_quad$ +marker$ +kicker$ +hybrid$ +octupole$ +rbend$ +multipole$ +def_bmad_com$ +def_mad_beam$ +ab_multipole$ +solenoid$ +patch$ +lcavity$ +def_parameter$ +null_ele$ +beginning_ele$ +def_line$ +match$ +monitor$ +instrument$ +hkicker$ +vkicker$ +rcollimator$ +ecollimator$ +girder$ +converter$ +def_particle_start$ +photon_fork$ +fork$ +mirror$ +crystal$ +pipe$ +capillary$ +multilayer_mirror$ +e_gun$ +em_field$ +floor_shift$ +fiducial$ +undulator$ +diffraction_plate$ +photon_init$ +sample$ +detector$ +sad_mult$ +mask$ +ac_kicker$ +lens$ +def_space_charge_com$ +crab_cavity$ +ramper$ +def_ptc_com$ +rf_bend$ +gkicker$ +foil$ +n_key$ +key_name +val1$ +val2$ +val3$ +val4$ +val5$ +beta_a0$ +alpha_a0$ +beta_b0$ +alpha_b0$ +beta_a1$ +alpha_a1$ +beta_b1$ +alpha_b1$ +dphi_a$ +dphi_b$ +eta_x0$ +etap_x0$ +eta_y0$ +etap_y0$ +eta_x1$ +etap_x1$ +eta_y1$ +etap_y1$ +c11_mat0$ +c12_mat0$ +c21_mat0$ +c22_mat0$ +mode_flip0$ +c11_mat1$ +c12_mat1$ +c21_mat1$ +c22_mat1$ +mode_flip1$ +x0$ +px0$ +y0$ +py0$ +z0$ +pz0$ +x1$ +px1$ +y1$ +py1$ +z1$ +pz1$ +phase_trombone_input$ +phase_trombone$ +match_end_input$ +match_end$ +match_end_orbit_input$ +match_end_orbit$ +delta_time$ +x$ +px$ +y$ +py$ +z$ +pz$ +t$ +field_x$ +field_y$ +phase_x$ +phase_y$ +e_photon$ +e1$ +e2$ +fint$ +fintx$ +hgap$ +hgapx$ +h1$ +h2$ +radius$ +focal_strength$ +l$ +tilt$ +roll$ +n_part$ +inherit_from_fork$ +ref_tilt$ +direction$ +repetition_frequency$ +kick$ +x_gain_err$ +taylor_order$ +r_solenoid$ +k1$ +kx$ +harmon$ +h_displace$ +y_gain_err$ +final_charge$ +critical_angle_factor$ +tilt_corr$ +ref_coords$ +dt_max$ +graze_angle$ +k2$ +b_max$ +v_displace$ +gradient_tot$ +ks$ +flexible$ +crunch$ +ref_orbit_follows$ +pc_out_min$ +gradient$ +k3$ +noise$ +new_branch$ +ix_branch$ +g_max$ +g$ +symmetry$ +field_scale_factor$ +pc_out_max$ +dg$ +bbi_const$ +osc_amplitude$ +ix_to_branch$ +angle_out_max$ +gradient_err$ +critical_angle$ +bragg_angle_in$ +spin_dn_dpz_x$ +delta_e_ref$ +interpolation$ +bragg_angle_out$ +k1x$ +spin_dn_dpz_y$ +charge$ +x_gain_calib$ +ix_to_element$ +voltage$ +g_tot$ +rho$ +voltage_err$ +bragg_angle$ +k1y$ +n_particle$ +spin_dn_dpz_z$ +fringe_type$ +dbragg_angle_de$ +fringe_at$ +gang$ +darwin_width_sigma$ +darwin_width_pi$ +spin_fringe_on$ +pendellosung_period_sigma$ +sig_x$ +exact_multipoles$ +pendellosung_period_pi$ +sig_y$ +graze_angle_in$ +r0_elec$ +rf_frequency$ +sig_z$ +graze_angle_out$ +r0_mag$ +rf_wavelength$ +sig_vx$ +static_linear_map$ +sig_vy$ +autoscale_amplitude$ +sig_e$ +autoscale_phase$ +sig_pz$ +d1_thickness$ +default_tracking_species$ +n_slice$ +y_gain_calib$ +constant_ref_energy$ +longitudinal_mode$ +sig_e2$ +fb1$ +polarity$ +crunch_calib$ +alpha_angle$ +d2_thickness$ +beta_a_strong$ +beta_a_out$ +e_loss$ +gap$ +spin_x$ +e_center$ +fb2$ +x_offset_calib$ +v1_unitcell$ +psi_angle$ +cavity_type$ +emit_fraction$ +beta_b_strong$ +beta_b_out$ +spin_y$ +e2_center$ +n_period$ +y_offset_calib$ +v_unitcell$ +v2_unitcell$ +spin_z$ +l_period$ +fq1$ +alpha_a_strong$ +alpha_a_out$ +e2_probability$ +phi0_max$ +fq2$ +phi0$ +tilt_calib$ +e_center_relative_to_ref$ +direction_particle_start$ +alpha_b_strong$ +alpha_b_out$ +is_mosaic$ +px_aperture_width2$ +phi0_err$ +current$ +mosaic_thickness$ +px_aperture_center$ +time_dir_particle_start$ +eta_x_out$ +quad_tilt$ +de_eta_meas$ +spatial_distribution$ +species_strong$ +eta_y_out$ +bend_tilt$ +mode$ +velocity_distribution$ +py_aperture_width2$ +phi0_multipass$ +n_sample$ +origin_ele_ref_pt$ +mosaic_angle_rms_in_plane$ +eps_step_scale$ +e_tot_strong$ +etap_x_out$ +phi0_autoscale$ +dx_origin$ +energy_distribution$ +x_quad$ +ds_photon_slice$ +mosaic_angle_rms_out_plane$ +py_aperture_center$ +x_dispersion_err$ +etap_y_out$ +dy_origin$ +y_quad$ +e_field_x$ +b_field_tot$ +y_dispersion_err$ +z_aperture_width2$ +user_sets_length$ +rf_clock_harmonic$ +upstream_coord_dir$ +dz_origin$ +mosaic_diffraction_num$ +z_aperture_center$ +cmat_11$ +field_autoscale$ +l_sagitta$ +e_field_y$ +x_dispersion_calib$ +cmat_12$ +dtheta_origin$ +b_param$ +l_chord$ +scale_field_to_one$ +downstream_coord_dir$ +pz_aperture_width2$ +y_dispersion_calib$ +voltage_tot$ +cmat_21$ +l_active$ +dphi_origin$ +split_id$ +ref_cap_gamma$ +l_soft_edge$ +transverse_sigma_cut$ +pz_aperture_center$ +cmat_22$ +dpsi_origin$ +t_offset$ +ds_slice$ +use_reflectivity_table$ +angle$ +n_cell$ +mode_flip$ +z_crossing$ +x_kick$ +x_pitch$ +px_kick$ +y_pitch$ +y_kick$ +x_offset$ +py_kick$ +y_offset$ +z_kick$ +z_offset$ +pz_kick$ +hkick$ +d_spacing$ +x_offset_mult$ +emittance_a$ +crab_x1$ +vkick$ +y_offset_mult$ +p0c_ref_init$ +emittance_b$ +crab_x2$ +bl_hkick$ +e_tot_ref_init$ +emittance_z$ +crab_x3$ +bl_vkick$ +crab_tilt$ +bl_kick$ +b_field$ +e_field$ +high_energy_space_charge_on$ +crab_x4$ +photon_type$ +coupler_phase$ +db_field$ +crab_x5$ +lattice_type$ +b1_gradient$ +e1_gradient$ +coupler_angle$ +live_branch$ +b2_gradient$ +e2_gradient$ +coupler_strength$ +geometry$ +coupler_at$ +e_tot_offset$ +ptc_canonical_coords$ +b3_gradient$ +e3_gradient$ +ptc_fringe_geometry$ +e_tot_set$ +bs_field$ +p0c_set$ +ptc_field_geometry$ +delta_ref_time$ +p0c_start$ +e_tot_start$ +p0c$ +e_tot$ +x_pitch_tot$ +no_end_marker$ +y_pitch_tot$ +x_offset_tot$ +y_offset_tot$ +z_offset_tot$ +tilt_tot$ +roll_tot$ +ref_tilt_tot$ +multipass_ref_energy$ +ref_time_start$ +thickness$ +integrator_order$ +num_steps$ +ds_step$ +csr_ds_step$ +lord_pad1$ +lord_pad2$ +ref_wavelength$ +x1_limit$ +x2_limit$ +y1_limit$ +y2_limit$ +check_sum$ +g_err$ +b_field_err$ +spherical_curvature$ +distribution$ +tt$ +x_knot$ +alias$ +max_fringe_order$ +eta_x$ +electric_dipole_moment$ +lr_self_wake_on$ +x_ref$ +species_out$ +y_knot$ +eta_y$ +lr_wake_file$ +px_ref$ +elliptical_curvature_x$ +etap_x$ +slave$ +lr_freq_spread$ +y_ref$ +elliptical_curvature_y$ +etap_y$ +lattice$ +phi_a$ +multipoles_on$ +py_ref$ +elliptical_curvature_z$ +aperture_type$ +eta_z$ +machine$ +taylor_map_includes_offsets$ +pixel$ +p88$ +csr_method$ +var$ +z_ref$ +p89$ +pz_ref$ +space_charge_method$ +p90$ +mat6_calc_method$ +tracking_method$ +s_long$ +ref_time$ +ptc_integration_type$ +spin_tracking_method$ +eta_a$ +aperture$ +etap_a$ +x_limit$ +absolute_time_tracking$ +eta_b$ +y_limit$ +etap_b$ +offset_moves_aperture$ +aperture_limit_on$ +alpha_a$ +reflectivity_table$ +energy_probability_curve$ +exact_misalign$ +physical_source$ +sr_wake_file$ +alpha_b$ +term$ +frequencies$ +old_integrator$ +curvature$ +x_position$ +exact_model$ +symplectify$ +y_position$ +n_slice_spline$ +z_position$ +amp_vs_time$ +is_on$ +theta_position$ +vertical_kick$ +field_calc$ +phi_position$ +psi_position$ +wall$ +aperture_at$ +beta_a$ +ran_seed$ +origin_ele$ +beta_b$ +to_line$ +field_overlaps$ +field_master$ +to_element$ +descrip$ +scale_multipoles$ +sr_wake$ +ref_orbit$ +lr_wake$ +phi_b$ +crystal_type$ +material_type$ +type$ +ref_origin$ +ele_origin$ +superimpose$ +super_offset$ +reference$ +cartesian_map$ +cylindrical_map$ +grid_field$ +gen_grad_map$ +create_jumbo_slave$ +accordion_edge$ +start_edge$ +end_edge$ +s_position$ +ref_species$ +particle$ +wrap_superimpose$ +a0$ +a21$ +b0$ +b21$ +k0l$ +k21l$ +t0$ +t21$ +k0sl$ +k21sl$ +a0_elec$ +a21_elec$ +b0_elec$ +b21_elec$ +custom_attribute0$ +custom_attribute_num$ +num_ele_attrib_extended$ +blank_name$ +open$ +closed$ +lattice_type_name +geometry_name +anormal_mode_struct +linac_normal_mode_struct +normal_modes_struct +bends$ +wigglers$ +all$ +upstream$ +downstream$ +radians$ +degrees$ +cycles$ +radians_over_2pi$ +angle_units_name +short_angle_units_name +em_field_struct +rotationally_symmetric_rz$ +xyz$ +grid_field_geometry_name +grid_field_dimension +strong_beam_struct +track_point_struct +track_struct +multipass_lord_info_struct +multipass_ele_info_struct +multipass_branch_info_struct +multipass_all_info_struct +aperture_point_struct +aperture_param_struct +aperture_scan_struct +space_charge_common_struct +time_runge_kutta_common_struct +invalid_name$ +is_logical$ +is_integer$ +is_real$ +is_switch$ +is_string$ +is_struct$ +unknown$ +patch_problem$ +outside$ +cannot_find$ +extra_parsing_info_struct +bmad_common_struct +bmad_private_struct +ptc_common_struct +ptc_private_struct +small_rel_change$ +rad_int1_struct +rad_int_branch_struct +rad_int_all_ele_struct +pmd_header_struct +end_stack$ +plus$ +minus$ +times$ +divide$ +l_parens$ +r_parens$ +power$ +unary_minus$ +unary_plus$ +no_delim$ +sin$ +cos$ +tan$ +asin$ +acos$ +atan$ +abs$ +sqrt$ +log$ +exp$ +ran$ +ran_gauss$ +atan2$ +factorial$ +int$ +nint$ +floor$ +ceiling$ +numeric$ +variable$ +mass_of$ +charge_of$ +anomalous_moment_of$ +species$ +species_const$ +sinc$ +constant$ +comma$ +rms$ +average$ +sum$ +l_func_parens$ +arg_count$ +antiparticle$ +cot$ +sec$ +csc$ +sign$ +sinh$ +cosh$ +tanh$ +coth$ +asinh$ +acosh$ +atanh$ +acoth$ +min$ +max$ +modulo$ +expression_op_name +expression_eval_level +next_in_branch +coord_state_name +is_attribute +pointer_to_slave +ele_finalizer + +File: modules/radiation_mod.f90 +radiation_mod +release_rad_int_cache +track1_radiation +radiation_map_setup +track1_radiation_center + +File: multiparticle/bbi_kick.f90 +bbi_kick + +File: multiparticle/calc_emit_from_beam_init.f90 +calc_emit_from_beam_init + +File: multiparticle/envelope_mod.f90 +envelope_mod +eps7 +limit +o +l +make_ykick_mat +make_sr_mats +diffusion_matrix_b +damping_matrix_d +transport_with_sr +transport_with_sr_and_ibs +make_v +integrated_mats +envelope_radints_ibs +envelope_radints +make_pbrh +ibs_matrix_c +beam_envelope_ibs +kubo_integrand +eigensys +ety +etyt +ety2 +etdiv + +File: multiparticle/ibs_mod.f90 +ibs_mod +ibs_sim_param_struct +ibs_lifetime_struct +ibs_maxratio_struct +eps_7 +space_limit +ibs_equib_rlx +ibs_equib_der +ibs_lifetime +ibs_delta_calc +ibs_rates1turn +ibs_blowup1turn +ibs1 +multi_coulomb_log +rclog_integrand +bl_via_vlassov +bl_via_mat + +File: multiparticle/ibs_rates_mod.f90 +ibs_rates_mod +ibs_struct +eps7 +limit +bjmt1 +bjmt_integrand +bane1 +integrand +mpxx1 +mpxx_integrand +mpzt1 +zot_integrand +cimp1 + +File: multiparticle/init_wake.f90 +init_wake + +File: multiparticle/longitudinal_profile_mod.f90 +longitudinal_profile_mod +limit +psi_prime +psi_prime_sca +jac +solve_psi_adaptive +solve_psi_fixed_steps +integrate_psi +find_normalization +find_fwhm +get_bl_from_fwhm +set_pwd_ele +pwd_mat + +File: multiparticle/reallocate_beam.f90 +reallocate_beam + +File: multiparticle/reallocate_bunch.f90 +reallocate_bunch + +File: multiparticle/save_a_beam_step.f90 +save_a_beam_step + +File: multiparticle/save_a_bunch_step.f90 +save_a_bunch_step + +File: multiparticle/touschek_mod.f90 +touschek_mod +momentum_aperture_struct +eps7 +limit +touschek_lifetime +touschek_lifetime_ele_by_ele +touschek_lifetime_with_aperture +touschek_rate1_zap +integrand_zap +touschek_rate1 +integrand_base +integrand_base_cov +exp_bessi0 + +File: multiparticle/track_bunch_time.f90 +track_bunch_time + +File: multiparticle/wake_mod.f90 +wake_mod +randomize_lr_wake_frequencies +zero_lr_wakes_in_lat +track1_lr_wake +sr_longitudinal_wake_particle +sr_transverse_wake_particle +order_particles_in_z +track1_sr_wake + +File: multiparticle/write_beam_floor_positions.f90 +write_beam_floor_positions + +File: multiparticle/beam_mod.f90 +beam_mod +track_beam +track_bunch +track1_bunch + +File: multiparticle/beam_utils.f90 +beam_utils +track1_bunch_hom +init_beam_distribution +init_bunch_distribution +init_random_distribution +init_grid_distribution +init_ellipse_distribution +init_kv_distribution +combine_bunch_distributions +init_spin_distribution +calc_bunch_params_slice +calc_bunch_params_z_slice +calc_bunch_params +calc_emittances_and_twiss_from_sigma_matrix +calc_spin_params +calc_bunch_sigma_matrix_etc +bunch_init_end_calc + +File: multiparticle/beam_file_io.f90 +beam_file_io +write_beam_file +read_beam_file +read_beam_ascii4 + +File: parsing/binary_parser_mod.f90 +binary_parser_mod +write_binary_cartesian_map +read_binary_cartesian_map +write_binary_cylindrical_map +read_binary_cylindrical_map +write_binary_grid_field +read_binary_grid_field +open_binary_file + +File: parsing/bmad_parser.f90 +bmad_parser + +File: parsing/bmad_parser2.f90 +bmad_parser2 + +File: parsing/bmad_parser_mod.f90 +bmad_parser_mod +parser_set_attribute +get_called_file +add_this_taylor_term +parser_call_check +get_next_word +parser_file_stack +load_parse_line +evaluate_array_index +evaluate_logical +parse_evaluate_value +word_to_value +parser_add_constant +bmad_parser_string_attribute_set +parser_read_sr_wake +parser_read_lr_wake +parser_read_old_format_lr_wake +parser_read_old_format_sr_wake +get_list_of_names +get_overlay_group_names +verify_valid_name +parser_error +add_this_multipass +drift_multipass_name_correction +reallocate_bp_com_const +parser_add_superimpose +parser2_add_superimpose +compute_super_lord_s +check_for_superimpose_problem +get_sequence_args +parse_line_or_list +allocate_plat +parser_add_lord +drift_and_pipe_track_methods_adjustment +settable_dep_var_bookkeeping +form_digested_bmad_file_name +parser_add_branch +parser_identify_fork_to_element +parser_expand_line +bp_set_ran_status +parser_debug_print_info +parse_cartesian_map +parse_cylindrical_map +parse_grid_field +parse_gen_grad_map +parse_integer_list +parse_integer_list2 +parse_real_list +parse_real_lists +parse_real_list2 +parser_get_integer +parser_get_logical +expect_this +get_switch +expect_one_of +equal_sign_here +parser_print_line +parser_init_custom_elements +reallocate_sequence +parse_superimpose_command +init_surface_segment +parser_transfer_control_struct +parser_fast_integer_read +parser_fast_complex_read +parser_fast_real_read + +File: parsing/bmad_parser_struct.f90 +bmad_parser_struct +n_parse_line +n_parse_line_extended +seq_ele_struct +base_line_ele_struct +seq_struct +f_maxx +stack_file_struct +parser_controller_struct +parser_ele_struct +parser_lat_struct +line$ +list$ +element$ +replacement_line$ +def$ +redef$ +bp_const_struct +bp_common_struct +bp_common2_struct + +File: parsing/check_controller_controls.f90 +check_controller_controls + +File: parsing/converter_distribution_parser.f90 +converter_distribution_parser + +File: parsing/create_field_overlap.f90 +create_field_overlap + +File: parsing/create_girder.f90 +create_girder + +File: parsing/create_group.f90 +create_group + +File: parsing/create_overlay.f90 +create_overlay + +File: parsing/create_ramper.f90 +create_ramper + +File: parsing/init_bmad_parser_common.f90 +init_bmad_parser_common + +File: parsing/read_digested_bmad_file.f90 +read_digested_bmad_file + +File: parsing/write_digested_bmad_file.f90 +write_digested_bmad_file + +File: parsing/set_ele_defaults.f90 +set_ele_defaults + +File: photon/capillary_mod.f90 +capillary_mod +photon_coord_struct +photon_track_struct +track_a_capillary +capillary_track_photon_to_wall +capillary_propagate_photon_a_step +capillary_photon_hit_spot_calc +capillary_reflect_photon + +File: photon/crystal_attribute_bookkeeper.f90 +crystal_attribute_bookkeeper + +File: photon/init_a_photon_from_a_photon_init_ele.f90 +init_a_photon_from_a_photon_init_ele + +File: photon/make_mat6_bmad_photon.f90 +make_mat6_bmad_photon + +File: photon/offset_photon.f90 +offset_photon + +File: photon/photon_init_mod.f90 +photon_init_mod +photon_init_spline_pt_struct +photon_init_spline_struct +gen_poly_spline$ +end_spline$ +absolute_photon_position +bend_photon_init +bend_photon_energy_integ_prob +bend_vert_angle_integ_prob +bend_photon_polarization_init +bend_photon_vert_angle_init +bend_photon_e_rel_init +bend_photon_energy_normalized_probability +photon_init_spline_coef_calc +photon_init_spline_eval +e_crit_photon +init_photon_integ_prob + +File: photon/photon_init_spline_mod.f90 +photon_init_spline_mod +photon_init_x_angle_spline_struct +photon_init_y_angle_spline_struct +photon_init_splines_struct +photon_read_spline + +File: photon/photon_reflection_mod.f90 +photon_reflection_mod +cheb_diffuse_struct +converge +gmin +gmax +maxsum +ismax +bmax +diffuse_common_struct +photon_reflection_std_surface_init +finalize_reflectivity_table +read_surface_reflection_file +photon_reflectivity +photon_reflection +photon_diffuse_scattering +prob_x_diffuse +ptwo +zmmax +cos_phi +zzfi +zzfp +hzz +zbessi +zbessi1 +zbessi0 +zzexp +output_specular_reflection_input_params + +File: photon/photon_target_mod.f90 +photon_target_mod +photon_target_setup +photon_target_corner_calc +photon_add_to_detector_statistics +detector_pixel_pt +to_photon_angle_coords +to_surface_coords + +File: photon/photon_utils_mod.f90 +photon_utils_mod +has_curvature +photon_type +z_at_surface +pointer_to_surface_grid_pt +surface_grid_displacement +crystal_diffraction_field_calc + +File: photon/rotate_for_curved_surface.f90 +rotate_for_curved_surface + +File: photon/tilt_coords_photon.f90 +tilt_coords_photon + +File: photon/track1_bmad_photon.f90 +track1_bmad_photon + +File: photon/track1_photon_mod.f90 +track1_photon_mod +track1_lens +track_a_patch_photon +track1_diffraction_plate_or_mask +track1_sample +point_photon_emission +track1_mirror +track1_multilayer_mirror +track1_mosaic_crystal +track1_crystal +crystal_h_misalign +target_rot_mats +target_min_max_calc +track_a_bend_photon + +File: photon/track_a_drift_photon.f90 +track_a_drift_photon + +File: photon/track_to_surface.f90 +track_to_surface + +File: ptc/ele_to_taylor.f90 +ele_to_taylor + +File: ptc/fibre_to_ele.f90 +fibre_to_ele + +File: ptc/kill_ptc_layouts.f90 +kill_ptc_layouts + +File: ptc/lat_to_ptc_layout.f90 +lat_to_ptc_layout + +File: ptc/pointer_to_fibre.f90 +pointer_to_fibre + +File: ptc/ptc_bookkeeper.f90 +ptc_bookkeeper + +File: ptc/ptc_interface_mod.f90 +ptc_interface_mod +assignment +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +operator +procedure +ptc_set_taylor_order_if_needed +taylor_plus_taylor +taylor_minus_taylor +map_coef +type_map1 +type_ptc_internal_state +type_ptc_fibre +type_end_stuff +kind_name +set_ptc_com_pointers +bmad_taylor_equal_damap +damap_equal_bmad_taylor +bmad_taylor_equal_real_8 +real_8_equal_bmad_taylor +ptc_taylor_equal_bmad_taylor +sigma_mat_ptc_to_bmad +universal_equal_universal +universal_to_bmad_taylor +complex_taylor_equal_c_taylor +complex_taylors_equal_c_taylors +bmad_taylor_equal_ptc_taylor +bmad_taylors_equal_ptc_taylors +form_complex_taylor +concat_real_8 +taylor_to_genfield +remove_constant_taylor +taylor_inverse +concat_taylor +concat_ele_taylor +taylor_to_real_8 +real_8_to_taylor +taylor_propagate1 +type_real_8_taylors +sort_universal_terms +type_map +beambeam_fibre_setup +misalign_ptc_fibre +bmad_patch_parameters_to_ptc +ele_to_ptc_magnetic_an_bn +apply_patch_to_ptc_fibre +set_ptc_quiet + +File: ptc/ptc_layout_mod.f90 +ptc_layout_mod +type_ptc_layout +branch_to_ptc_m_u +add_ptc_layout_to_list +ptc_setup_tracking_with_damping_and_excitation +ptc_one_turn_mat_and_closed_orbit_calc +ptc_emit_calc +ptc_spin_calc +ptc_track_all +ptc_closed_orbit_calc +ptc_one_turn_map_at_ele +ptc_map_to_normal_form +normal_form_taylors +normal_form_complex_taylors +normal_form_rd_terms +set_ptc_verbose +update_ele_from_fibre +ptc_calculate_tracking_step_size +ptc_layouts_resplit +ptc_check_for_lost_particle + +File: ptc/ptc_linear_isf_calc.f90 +ptc_linear_isf_calc + +File: ptc/ptc_map_with_radiation_mod.f90 +ptc_map_with_radiation_mod +ptc_rad_map_struct +ptc_setup_map_with_radiation +ptc_track_map_with_radiation +ptc_write_map_with_radiation +ptc_read_map_with_radiation +ptc_kill_map_with_radiation + +File: ptc/ptc_ran_seed_put.f90 +ptc_ran_seed_put + +File: ptc/ptc_read_flat_file.f90 +ptc_read_flat_file + +File: ptc/ptc_set_rf_state_for_c_normal.f90 +ptc_set_rf_state_for_c_normal + +File: ptc/ptc_spin_matching_calc.f90 +ptc_spin_matching_calc + +File: ptc/ptc_transfer_map_with_spin.f90 +ptc_transfer_map_with_spin + +File: ptc/set_ptc.f90 +set_ptc + +File: ptc/set_ptc_base_state.f90 +set_ptc_base_state + +File: ptc/update_fibre_from_ele.f90 +update_fibre_from_ele + +File: ptc/ele_to_fibre.f90 +ele_to_fibre + +File: space_charge/csr3d_mod.f90 +csr3d_mod +csr3d_steady_state_solver +calc_density_derivative_complex +get_cgrn_csr3d +write_2d +ellipinc_test + +File: space_charge/csr_and_space_charge_mod.f90 +csr_and_space_charge_mod +csr_ele_info_struct +csr_bunch_slice_struct +csr_kick1_struct +csr_particle_position_struct +csr_struct +track1_bunch_csr +csr_bin_particles +csr_bin_kicks +s_source_calc +lsc_kick_params_calc +i_csr +image_charge_kick_calc +csr_and_sc_apply_kicks +dspline_len +s_ref_to_s_chord +track1_bunch_csr3d + +File: space_charge/fast_fourier_am.f90 +fast_fourier_am +ccfftam +fft1 +mfft1 +sfft + +File: space_charge/fft_interface_mod.f90 +fft_interface_mod +ccfft3d +mccfft1d + +File: space_charge/high_energy_space_charge_mod.f90 +high_energy_space_charge_mod +setup_high_energy_space_charge_calc +track1_high_energy_space_charge +make_mat6_high_energy_space_charge + +File: space_charge/open_spacecharge_core_mod.f90 +open_spacecharge_core_mod +osc_freespace_solver +osc_alloc_freespace_array +coulombfun +igfcoulombfun +lafun +igfexfun +igfeyfun +igfezfun +xlafun +ylafun +zlafun +getrhotilde +osc_getgrnfree +conv3d +osc_rectpipe_solver +osc_getgrnpipe +rfun +fftconvcorr3d +osc_read_rectpipe_grn +osc_write_rectpipe_grn +osc_alloc_rectpipe_arrays +osc_cathodeimages_solver +osc_alloc_image_array +osc_getgrnimageshift +osc_getgrnimageconvcorr +imageconvcorr3d + +File: space_charge/open_spacecharge_mod.f90 +open_spacecharge_mod +mesh3d_struct +print_mesh3d +space_charge_freespace +space_charge_cathodeimages +space_charge_rectpipe +deposit_particles +interpolate_field +space_charge_3d +osc_freespace_solver2 +osc_get_cgrn_freespace + +File: space_charge/space_charge_mod.f90 +space_charge_mod +sc_field_calc +sc_step +sc_adaptive_step +track_bunch_to_s +track_bunch_to_t +drift_particle_to_s +drift_particle_to_t + +File: space_charge/track1_bunch_space_charge.f90 +track1_bunch_space_charge + +File: spin/angle_between_polars.f90 +angle_between_polars + +File: spin/map1_inverse.f90 +map1_inverse + +File: spin/map1_make_unit.f90 +map1_make_unit + +File: spin/multipole_spin_tracking.f90 +multipole_spin_tracking + +File: spin/polar_to_spinor.f90 +polar_to_spinor + +File: spin/polar_to_vec.f90 +polar_to_vec + +File: spin/rotate_spin.f90 +rotate_spin + +File: spin/rotate_spin_a_step.f90 +rotate_spin_a_step + +File: spin/rotate_spin_given_field.f90 +rotate_spin_given_field + +File: spin/spin_concat_linear_maps.f90 +spin_concat_linear_maps + +File: spin/spin_depolarization_rate.f90 +spin_depolarization_rate + +File: spin/spin_dn_dpz_from_mat8.f90 +spin_dn_dpz_from_mat8 + +File: spin/spin_dn_dpz_from_qmap.f90 +spin_dn_dpz_from_qmap + +File: spin/spin_map1_normalize.f90 +spin_map1_normalize + +File: spin/spin_mat8_resonance_strengths.f90 +spin_mat8_resonance_strengths + +File: spin/spin_mat_to_eigen.f90 +spin_mat_to_eigen + +File: spin/spin_omega.f90 +spin_omega + +File: spin/spin_quat_resonance_strengths.f90 +spin_quat_resonance_strengths + +File: spin/spin_taylor_to_linear.f90 +spin_taylor_to_linear + +File: spin/spinor_to_polar.f90 +spinor_to_polar + +File: spin/spinor_to_vec.f90 +spinor_to_vec + +File: spin/sprint_spin_taylor_map.f90 +sprint_spin_taylor_map + +File: spin/valid_spin_tracking_method.f90 +valid_spin_tracking_method + +File: spin/vec_to_polar.f90 +vec_to_polar + +File: spin/vec_to_spinor.f90 +vec_to_spinor diff --git a/bsim/code/bsim_interface.f90 b/bsim/code/bsim_interface.f90 index f12310b1dd..0f6693832b 100644 --- a/bsim/code/bsim_interface.f90 +++ b/bsim/code/bsim_interface.f90 @@ -4,7 +4,7 @@ module bsim_interface interface -function set_tune_3d (branch, target_tunes, mask, use_phase_trombone, z_tune_set, print_err) result (everything_ok) +function set_tune_3d (branch, target_tunes, mask, use_phase_trombone, z_tune_set, group_knobs, print_err) result (everything_ok) import implicit none type (branch_struct), target :: branch @@ -12,6 +12,7 @@ function set_tune_3d (branch, target_tunes, mask, use_phase_trombone, z_tune_set logical everything_ok logical, optional :: use_phase_trombone, z_tune_set, print_err character(*), optional :: mask + character(*), optional :: group_knobs(2) end function subroutine insert_phase_trombone(branch) diff --git a/bsim/code/set_tune_3d.f90 b/bsim/code/set_tune_3d.f90 index 24132a738c..d6970b78dc 100644 --- a/bsim/code/set_tune_3d.f90 +++ b/bsim/code/set_tune_3d.f90 @@ -1,5 +1,5 @@ !+ -! function set_tune_3d (branch, target_tunes, use_phase_trombone, quad_mask, z_tune_set, print_err) result (everything_ok) +! function set_tune_3d (branch, target_tunes, use_phase_trombone, quad_mask, z_tune_set, group_knobs, print_err) result (everything_ok) ! ! Wrapper for set_tune and set_z_tune together. ! @@ -10,6 +10,7 @@ ! use_phase_trombone -- logical, optional: Default False. If true, use a match element in phase trombone mode to adjust the tunes. ! The match element must be the first element in the lattice. Use insert_phase_trombone to insert one. ! z_tune_set -- logical, optional: Default True. If false, do not try to set the synch tune. +! group_knobs(2) -- character(*), optional: If set non-blank, use these group elements for tuning. ! print_err -- logical, optional: Print error message if there is a problem? Default is True. ! ! Output: @@ -17,7 +18,7 @@ ! everything_ok -- logical: Returns true or false if set was successful. !- -function set_tune_3d (branch, target_tunes, quad_mask, use_phase_trombone, z_tune_set, print_err) result (everything_ok) +function set_tune_3d (branch, target_tunes, quad_mask, use_phase_trombone, z_tune_set, group_knobs, print_err) result (everything_ok) use bmad @@ -31,9 +32,9 @@ function set_tune_3d (branch, target_tunes, quad_mask, use_phase_trombone, z_tun real(rp), allocatable :: dk1(:) integer n, status logical, optional :: use_phase_trombone, z_tune_set, print_err -logical everything_ok, err +logical everything_ok, err, use_groups -character(*), optional :: quad_mask +character(*), optional :: quad_mask, group_knobs(2) character(*), parameter :: r_name = 'set_tune_3d' ! @@ -68,15 +69,25 @@ function set_tune_3d (branch, target_tunes, quad_mask, use_phase_trombone, z_tun ! -allocate(dk1(branch%n_ele_max)) -call choose_quads_for_set_tune(branch, dk1, eles, quad_mask, err) -if (err) then - call out_io (s_error$, r_name, & - 'CANNOT FIND A QUAD WITH BETA_A < BETA_B AND A QUAD WITH BETA_A > BETA_B (BOTH WITH NO TILT).') - return +use_groups = .false. +if (present(group_knobs)) use_groups = (group_knobs(1) /= '') + +if (use_groups) then + everything_ok = set_tune_via_group_knobs(twopi*target_tunes, branch, group_knobs, co, print_err) + +else + allocate(dk1(branch%n_ele_max)) + call choose_quads_for_set_tune(branch, dk1, eles, quad_mask, err) + if (err) then + call out_io (s_error$, r_name, & + 'CANNOT FIND A QUAD WITH BETA_A < BETA_B AND A QUAD WITH BETA_A > BETA_B (BOTH WITH NO TILT).') + return + endif + + everything_ok = set_tune(twopi*target_tunes(1), twopi*target_tunes(2), dk1, eles, branch, co, print_err) endif -everything_ok = set_tune(twopi*target_tunes(1), twopi*target_tunes(2), dk1, eles, branch, co, print_err) +! if (logic_option(.true., z_tune_set)) call set_z_tune(branch, twopi*target_tunes(3)) diff --git a/bsim/long_term_tracking/doc/long_term_tracking.tex b/bsim/long_term_tracking/doc/long_term_tracking.tex index 53fe5e3656..87d3669446 100644 --- a/bsim/long_term_tracking/doc/long_term_tracking.tex +++ b/bsim/long_term_tracking/doc/long_term_tracking.tex @@ -99,7 +99,7 @@ \Section{Introduction} \label{s:intro} -The \ltt program is for long term (over many turns) tracking of a particle or a beam in a ring. The +The \ltt program is for long term (over many turns) tracking of a particle or a beam in a ring. The \ltt program can track spin as well as simulate such things as element misalignments, wake fields, higher order mode cavity resonances, energy ramping, beta squeezing, etc. The output of the program will be such things as turn-by-turn particle tracks or beam statistics including beam sizes and @@ -197,10 +197,11 @@ simulation mode is set by the \vn{ltt%simulation_mode} parameter in the master input file (\sref{s:input}). Possible settings of \vn{ltt%simulation_mode} are: \begin{code} -"CHECK" ! Quick tracking check. -"SINGLE" ! Single particle tracking. -"BEAM" ! Beam tracking. -"STAT" ! Lattice statistics. +"CHECK" ! Quick tracking check. +"SINGLE" ! Tracking a single particle. +"INDIVIDUAL" ! Tracking a set of particles one at a time. +"BEAM" ! Beam (multi-particle) tracking. +"STAT" ! Lattice statistics (no tracking done). \end{code} \begin{description} @@ -231,15 +232,24 @@ % \item["SINGLE"] \Newline -In this mode a single particle is tracked for \vn{ltt%n_turns} turns. The starting coordinates are determined -in the same way as is done with the \vn{"CHECK"} mode. +In this mode a single particle is tracked for \vn{ltt%n_turns} turns. The starting coordinates are +determined in the same way as is done with the \vn{"CHECK"} mode. The name of the data file is set by the \vn{ltt%phase_space_output_file} parameter (\sref{s:input}). The particle position will be output every \vn{ltt%particle_output_every_n_turns} turns. If this parameter is zero or negative, the position will be outputted at every element. % +\item["INDIVIDUAL"] \Newline +A set of particles are tracked one-by-one until lost (or until the maximum number of turns set by +the user is reached). Unlike \vn{"BEAM"} mode, no statistics are recorded. Rather the output is the +final position of the particles. The \vn{"INDIVIDUAL"} mode is useful for the situation when there +is ramping (\sref{s:ramp}) and individual are seeing different guide fields due to the time +separation between particles. Specifically, the \vn{"INDIVIDUAL"} mode is useful for simulating +resonant slow extraction. +% \item["BEAM"] \Newline -In this mode a particle beam is tracked for \vn{ltt%n_turns} turns. +In this mode a particle beam is tracked for \vn{ltt%n_turns} turns. Beam statistics are recorded +periodically as set by the user. % \item["STAT"] \Newline In this mode statistics about the lattice are calculated. No long term tracking is done. @@ -272,8 +282,8 @@ amplitude is too large. Only the \vn{BMAD} method is able to handle a machine that is being ramped (\sref{s:ramp}). That is, -when \vn{ltt%ramping_on} set to True. The program will detect if there is a conflict and issue an error -message and stop. +when \vn{ltt%ramping_on} set to True. The program will detect if there is a conflict and issue an +error message and stop. %------------------------------------------------------------------ \Section{Map Tracking} @@ -454,11 +464,12 @@ \vn{ltt%ramp_update_each_particle} is set to True, rampers are applied to a given lattice element as each particle of the beam passes through the element using the time the particle would pass through the center of the element. This is appropriate if ramping is fast on the time scale of a bunch -passage. If set to False (the default), rampers are applied to a given element only once per beam -passage using the time of the center of the bunch passing the center of the element. This is -appropriate for parameters that vary slowly on the time scale of a bunch passage. For example if -ramping magnet strengths with energy ramping which occurs over many turns, calculating once per beam -passage should be a good approximation. +passage or if in \vn{"INDIVIDUAL"} or \vn{"SINGLE"} mode. If set to False, rampers are applied to a +given element only once per beam passage using the time of the center of the bunch passing the +center of the element. This is appropriate for parameters that vary slowly on the time scale of a +bunch passage. For example if ramping magnet strengths with energy ramping which occurs over many +turns, calculating once per beam passage should be a good approximation. The default setting of +\vn{ltt%ramp_update_each_particle} is False for \vn{"BEAM"} mode and True for all other modes. Before a simulation, individual ramper elements may be toggled on or off by setting the element's \vn{is_on} attribute in the lattice file: @@ -939,7 +950,8 @@ \subsection{Output File Parameters} \item[ltt\%particle_output_every_n_turns] \Newline Sets the number of turns between particle position data files. If set to -1 (the default), a file will only be generated at the last turn. If set to 0, a file will be generated at the beginning turn -(turn 0) and at the last turn. +(turn 0) and at the last turn. With the \vn{ltt%simulation_mode} set to \vn{"INDIVIDUAL"}, there is +no periodic output and this parameter will be ignored. % \item[ltt\%per_particle_output_file] \Newline Used with \vn{ltt%simulation_mode} set to \vn{"BEAM"}. The name of the ASCII files diff --git a/bsim/long_term_tracking/long_term_tracking.f90 b/bsim/long_term_tracking/long_term_tracking.f90 index 6f8e9adf54..7b06d6bb1d 100644 --- a/bsim/long_term_tracking/long_term_tracking.f90 +++ b/bsim/long_term_tracking/long_term_tracking.f90 @@ -25,9 +25,10 @@ program long_term_tracking case ('BEAM') call ltt_init_beam_distribution(lttp, ltt_com, beam) call ltt_run_beam_mode(lttp, ltt_com, lttp%ix_turn_start, lttp%ix_turn_stop, beam) ! Beam tracking -case ('CHECK'); call ltt_run_check_mode(lttp, ltt_com) ! A single turn tracking check -case ('SINGLE'); call ltt_run_single_mode(lttp, ltt_com) ! Single particle tracking -case ('STAT'); call ltt_run_stat_mode(lttp, ltt_com) ! Lattice statistics (radiation integrals, etc.). +case ('CHECK'); call ltt_run_check_mode(lttp, ltt_com) ! A single turn tracking check +case ('INDIVIDUAL'); call ltt_run_individual_mode(lttp, ltt_com) ! Particle-by-particle tracking. +case ('SINGLE'); call ltt_run_single_mode(lttp, ltt_com) ! Single particle tracking. +case ('STAT'); call ltt_run_stat_mode(lttp, ltt_com) ! Lattice statistics (radiation integrals, etc.). case default print *, 'BAD SIMULATION_MODE: ' // lttp%simulation_mode end select diff --git a/bsim/long_term_tracking/long_term_tracking_mpi.f90 b/bsim/long_term_tracking/long_term_tracking_mpi.f90 index c8b43d40b7..c9e5d9a761 100644 --- a/bsim/long_term_tracking/long_term_tracking_mpi.f90 +++ b/bsim/long_term_tracking/long_term_tracking_mpi.f90 @@ -22,7 +22,7 @@ program long_term_tracking integer, parameter :: base_tag$ = 1000 logical am_i_done, err_flag, ok, too_many_dead -logical, allocatable :: stop_here(:) +logical, allocatable :: stop_here(:), slave_working(:) character(200) pwd character(100) line, path, basename @@ -118,21 +118,126 @@ program long_term_tracking case ('CHECK'); call ltt_run_check_mode(lttp, ltt_com) ! A single turn tracking check case ('SINGLE'); call ltt_run_single_mode(lttp, ltt_com) ! Single particle tracking case ('STAT'); call ltt_run_stat_mode(lttp, ltt_com) ! Lattice statistics (radiation integrals, etc.). -case ('BEAM'); ! Handled below. Only the BEAM simulation mode uses mpi. -case default; print *, 'BAD SIMULATION_MODE: ' // lttp%simulation_mode +case ('BEAM') + if (.not. ltt_com%using_mpi) then + print '(a, i0)', 'Number of threads is one! (Need to use mpirun or mpiexec if on a single machine.)' + call ltt_init_beam_distribution(lttp, ltt_com, beam) + call ltt_run_beam_mode(lttp, ltt_com, lttp%ix_turn_start, lttp%ix_turn_stop, beam) + stop + endif + +case ('INDIVIDUAL') + if (.not. ltt_com%using_mpi) then + print '(a, i0)', 'Number of threads is one! (Need to use mpirun or mpiexec if on a single machine.)' + call ltt_run_individual_mode(lttp, ltt_com, lttp%ix_turn_start, lttp%ix_turn_stop, beam) + stop + endif + +case default + print *, 'BAD SIMULATION_MODE: ' // lttp%simulation_mode end select ! Not using mpi if there is only one thread. -if (.not. ltt_com%using_mpi) then - print '(a, i0)', 'Number of threads is one! (Need to use mpirun or mpiexec if on a single machine.)' - call ltt_init_beam_distribution(lttp, ltt_com, beam) - call ltt_run_beam_mode(lttp, ltt_com, lttp%ix_turn_start, lttp%ix_turn_stop, beam) - stop + +!----------------------------------------------------------------------------------------------------------------- +!----------------------------------------------------------------------------------------------------------------- +! INDIVIDUAL simulation + +if (lttp%simulation_mode == 'INDIVIDUAL') then + dat_size = storage_size(beam%bunch(1)%particle(1)) / 8 + + if (ltt_com%mpi_rank == master_rank$) then + print '(a, i0)', 'Number of processes (including Master): ', mpi_n_proc + call ltt_print_mpi_info (lttp, ltt_com, 'Master: Initial Ramper Ran State: ' // int_str(ltt_com%ramper_ran_state%ix)) + + call ltt_init_beam_distribution(lttp, ltt_com, beam) + n_particle = size(beam%bunch(1)%particle) + + allocate (slave_working(num_slaves), ixp_slave(num_slaves)) + slave_working = .false. + + do ib = 1, size(beam%bunch) + do ip = 1, size(beam%bunch(ib)%particle) + particle => beam%bunch(ib)%particle(ip) + + if (all(slave_working)) then + slave_rank = MPI_ANY_SOURCE + call ltt_print_mpi_info (lttp, ltt_com, 'Master: Waiting for data.') + call mpi_recv (orbit, dat_size, MPI_BYTE, slave_rank, base_tag$+3, MPI_COMM_WORLD, stat, ierr) + if (ierr /= MPI_SUCCESS) call ltt_print_mpi_info (lttp, ltt_com, 'MPI ERROR!', .true.) + slave_rank = stat(MPI_SOURCE) ! Slave rank + nn = ixp_slave(slave_rank) + beam%bunch(ib)%particle(nn) = orbit + slave_working(slave_rank) = .false. + call ltt_print_mpi_info (lttp, ltt_com, 'Master: Got data from slave: ' // int_str(slave_rank)) + endif + + ix = findloc(slave_working, .false.) + call ltt_print_mpi_info (lttp, ltt_com, 'Master: Tell slave ' // int_str(ix)) // ' to be ready to track using Slave') + call mpi_send (1, 1, MPI_INTEGER, ix, base_tag$+1, MPI_COMM_WORLD, ierr) + if (ierr /= MPI_SUCCESS) call ltt_print_mpi_info (lttp, ltt_com, 'MPI ERROR #2!', .true.) ! Tell slave more tracking needed. + call ltt_print_mpi_info (lttp, ltt_com, 'Master: Starting particle ' // int_str(ip) // ' using Slave: ' // int_str(ix)) + call mpi_send (particle, dat_size, MPI_BYTE, ix, base_tag$+2, MPI_COMM_WORLD, ierr) + if (ierr /= MPI_SUCCESS) call ltt_print_mpi_info (lttp, ltt_com, 'MPI ERROR #3!', .true.) + ixp_slave(ix) = ip + slave_working(ix) = .true. + enddo + enddo + + ! Finish getting data + + call ltt_print_mpi_info (lttp, ltt_com, 'Master: Finished broadcasting particle runs. Now collecting final data.') + do + if (all(.not. slave_working)) exit + call mpi_recv (orbit, dat_size, MPI_BYTE, slave_rank, base_tag$+3, MPI_COMM_WORLD, stat, ierr) + if (ierr /= MPI_SUCCESS) call ltt_print_mpi_info (lttp, ltt_com, 'MPI ERROR!', .true.) + slave_rank = stat(MPI_SOURCE) ! Slave rank + nn = ixp_slave(slave_rank) + beam%bunch(ib)%particle(nn) = orbit + slave_working(slave_rank) = .false. + enddo + + ! Tell slaves we are done. + + do i = 1, num_slaves + if (.not. slave_working(i)) cycle + call ltt_print_mpi_info (lttp, ltt_com, 'Slave: Waiting for init position info.') + call mpi_send (0, 1, MPI_INTEGER, ix, base_tag$+2, MPI_COMM_WORLD, ierr) ! No more tracking. + enddo + + ! And write data. + + call ltt_write_particle_data (lttp, ltt_com, 0, beam) + call mpi_finalize(ierr) + + !--------------------------------------------------------- + ! INDIVIDUAL Slave + + else + call ltt_print_mpi_info (lttp, ltt_com, 'Slave Starting...', .true.) + call ltt_print_mpi_info (lttp, ltt_com, 'Slave: Initial Ramper Ran State: ' // int_str(ltt_com%ramper_ran_state%ix)) + + do + call ltt_print_mpi_info (lttp, ltt_com, 'Slave: Waiting for Master command.') + call mpi_recv (nn, 1, MPI_INTEGER, master_rank$, base_tag$+1, MPI_COMM_WORLD, stat, ierr) + if (nn == 0) exit + call ltt_print_mpi_info (lttp, ltt_com, 'Slave: Waiting for particle info...') + call mpi_recv (particle, dat_size, MPI_BYTE, master_rank$, base_tag$+2, MPI_COMM_WORLD, stat, ierr) + call ltt_print_mpi_info (lttp, ltt_com, 'Slave: Starting tracking.') + call ltt_run_single_mode(lttp, ltt_com, particle) + call mpi_send (particle, dat_size, MPI_BYTE, master_rank$, base_tag$+3, MPI_COMM_WORLD, ierr) + enddo + + call ltt_print_mpi_info (lttp, ltt_com, 'Slave: Master says all done!') + call mpi_finalize(ierr) + stop + endif endif -!----------------------------------------- -! MPI BEAM simulation +!----------------------------------------------------------------------------------------------------------------- +!----------------------------------------------------------------------------------------------------------------- +! BEAM simulation ! Init beam distribution in master @@ -205,10 +310,8 @@ program long_term_tracking if (lttp%debug .and. ltt_com%mpi_rank == master_rank$) print *, 'ix_stop:', n, ix_stop_turn(n) enddo - -!------------------------------------------------------------------------------------------ !------------------------------------------------------------------------------------------ -! Master: +! BEAM Master: if (ltt_com%mpi_rank == master_rank$) then print '(a, i0)', 'Number of processes (including Master): ', mpi_n_proc @@ -301,8 +404,7 @@ program long_term_tracking call mpi_finalize(ierr) !------------------------------------------------------------------------------------------ -!------------------------------------------------------------------------------------------ -else ! Is a slave +else ! BEAM slave call ltt_print_mpi_info (lttp, ltt_com, 'Slave Starting...', .true.) call ltt_print_mpi_info (lttp, ltt_com, 'Slave: Initial Ramper Ran State: ' // int_str(ltt_com%ramper_ran_state%ix)) diff --git a/bsim/modules/lt_tracking_mod.f90 b/bsim/modules/lt_tracking_mod.f90 index f4667285e1..9db9019c92 100644 --- a/bsim/modules/lt_tracking_mod.f90 +++ b/bsim/modules/lt_tracking_mod.f90 @@ -38,7 +38,7 @@ module lt_tracking_mod ! User settable parameters type ltt_params_struct - character(20) :: simulation_mode = '' ! CHECK, SINGLE, BEAM, STAT + character(20) :: simulation_mode = '' ! CHECK, SINGLE, BEAM, STAT, INDIVIDUAL character(20) :: tracking_method = 'BMAD' ! MAP, PTC, BMAD character(100) :: exclude_from_maps = 'beambeam::*' character(40) :: ele_start = '' @@ -319,7 +319,7 @@ subroutine ltt_init_params(ltt, ltt_com) select case (ltt%simulation_mode) case ('BEAM', 'STAT') -case ('CHECK', 'SINGLE') +case ('CHECK', 'SINGLE', 'INDIVIDUAL') ltt%ramp_update_each_particle = .true. case ('BUNCH') print '(a)', '"BUNCH" SETTING FOR LTT%SIMULATION_MODE HAS BEEN CHANGED TO "BEAM"' @@ -961,7 +961,38 @@ end subroutine ltt_run_check_mode !------------------------------------------------------------------------------------------- !------------------------------------------------------------------------------------------- -subroutine ltt_run_single_mode (lttp, ltt_com) +subroutine ltt_run_individual_mode (lttp, ltt_com) + +type (ltt_params_struct) lttp +type (ltt_com_struct), target :: ltt_com +type (beam_struct), target :: beam +type (coord_struct), pointer :: particle +type (coord_struct) orbit + +integer ib, ip + +! + +call ltt_init_beam_distribution(lttp, ltt_com, beam) + +do ib = 1, size(beam%bunch) + do ip = 1, size(beam%bunch(ib)%particle) + particle => beam%bunch(ib)%particle(ip) + call ltt_run_single_mode(lttp, ltt_com, particle) + enddo +enddo + +if (.not. ltt_com%using_mpi) then + call ltt_write_particle_data (lttp, ltt_com, 0, beam) +endif + +end subroutine + +!------------------------------------------------------------------------------------------- +!------------------------------------------------------------------------------------------- +!------------------------------------------------------------------------------------------- + +subroutine ltt_run_single_mode (lttp, ltt_com, orb_in) type (ltt_params_struct) lttp type (ltt_com_struct), target :: ltt_com @@ -969,13 +1000,14 @@ subroutine ltt_run_single_mode (lttp, ltt_com) type (lat_struct), pointer :: lat type (coord_struct), allocatable :: orb(:) type (coord_struct) :: orbit +type (coord_struct), optional :: orb_in type (ele_struct), pointer :: ele_start, ele0, ele1 type (probe) prb real(rp) average(6), sigma(6,6), dt integer i, n_sum, iu_part, i_turn, ix_branch -! Run serial in single mode. +! Run a single particle in single mode. lat => ltt_com%tracking_lat @@ -990,7 +1022,9 @@ subroutine ltt_run_single_mode (lttp, ltt_com) if (lttp%tracking_method == 'BMAD') call reallocate_coord (orb, lat) -if (ltt_com%beam_init%use_particle_start) then +if (present(orb_in)) then + call init_coord (orbit, orb_in, ele_start, downstream_end$, lat%param%particle) +elseif (ltt_com%beam_init%use_particle_start) then call init_coord (orbit, ltt_com%lat%particle_start, ele_start, downstream_end$, lat%param%particle) else call init_coord (orbit, ltt_com%beam_init%center, ele_start, downstream_end$, lat%param%particle, spin = ltt_com%beam_init%spin) @@ -1006,14 +1040,19 @@ subroutine ltt_run_single_mode (lttp, ltt_com) ! -iu_part = lunget() -if (lttp%phase_space_output_file == '') lttp%phase_space_output_file = 'single.dat' -open(iu_part, file = lttp%phase_space_output_file, recl = 300) -call ltt_write_params_header(lttp, ltt_com, iu_part, 1) -write (iu_part, '(a)') '## Turn ix_ele | x px y py z pz pc p0c time | spin_x spin_y spin_z | Element' -write (iu_part, ltt_com%ps_fmt) 0, ele_start%ix_ele, orbit%vec, (1.0_rp+orbit%vec(6))*orbit%p0c, orbit%p0c, orbit%t, orbit%spin, trim(ele_start%name) +if (lttp%simulation_mode == 'INDIVIDUAL') then + iu_part = -1 +else + iu_part = lunget() + if (lttp%phase_space_output_file == '') lttp%phase_space_output_file = 'single.dat' + open(iu_part, file = lttp%phase_space_output_file, recl = 300) + call ltt_write_params_header(lttp, ltt_com, iu_part, 1) + write (iu_part, '(a)') '## Turn ix_ele | x px y py z pz pc p0c time | spin_x spin_y spin_z | Element' + write (iu_part, ltt_com%ps_fmt) 0, ele_start%ix_ele, orbit%vec, (1.0_rp+orbit%vec(6))*orbit%p0c, orbit%p0c, orbit%t, orbit%spin, trim(ele_start%name) + if (lttp%custom_output_file /= '') call ltt_write_custom (lttp, ltt_com, 0, orbit = orbit) +endif -if (lttp%custom_output_file /= '') call ltt_write_custom (lttp, ltt_com, 0, orbit = orbit) +! do i_turn = lttp%ix_turn_start+1, lttp%ix_turn_stop select case (lttp%tracking_method) @@ -1052,17 +1091,23 @@ subroutine ltt_run_single_mode (lttp, ltt_com) ! + if (orbit%state /= alive$) then + if (lttp%simulation_mode == 'INDIVIDUAL') then + orb_in = orbit + return + endif + print '(a, i0, 8a)', 'Particle lost at turn: ', i_turn + exit + endif + + if (lttp%simulation_mode == 'INDIVIDUAL') cycle + if (lttp%particle_output_every_n_turns > 0) then if (modulo(i_turn, lttp%particle_output_every_n_turns) == 0) then write (iu_part, ltt_com%ps_fmt) i_turn, ele_start%ix_ele, orbit%vec, (1.0_rp+orbit%vec(6))*orbit%p0c, orbit%p0c, orbit%t, orbit%spin, trim(ele_start%name) endif endif - if (orbit%state /= alive$) then - print '(a, i0, 8a)', 'Particle lost at turn: ', i_turn - exit - endif - if (lttp%averages_output_file /= '') then average = average + orbit%vec sigma = sigma + outer_product(orbit%vec, orbit%vec) @@ -1072,6 +1117,11 @@ subroutine ltt_run_single_mode (lttp, ltt_com) if (lttp%custom_output_file /= '') call ltt_write_custom (lttp, ltt_com, i_turn, orbit = orbit) enddo +if (lttp%simulation_mode == 'INDIVIDUAL') then + orb_in = orbit + return +endif + print '(2a)', 'Particle output file: ', trim(lttp%phase_space_output_file) close(iu_part) @@ -2649,7 +2699,9 @@ subroutine ltt_track_bmad_single (lttp, ltt_com, ele_start, ele_stop, orbit, i_t call track1 (orbit, ele, ele%branch%param, orbit, err_flag = err_flag) endif - if (present(iu_part) .and. lttp%particle_output_every_n_turns < 1) then + if (orbit%state /= alive$) return + + if (integer_option(-1, iu_part) > 0 .and. lttp%particle_output_every_n_turns < 1) then write (iu_part, ltt_com%ps_fmt) i_turn, ele%ix_ele, orbit%vec, (1.0_rp+orbit%vec(6))*orbit%p0c, orbit%p0c, orbit%t, orbit%spin, trim(ele%name) endif diff --git a/bsim/modules/ts_mod.f90 b/bsim/modules/ts_mod.f90 index 5db584b530..ffeb475990 100644 --- a/bsim/modules/ts_mod.f90 +++ b/bsim/modules/ts_mod.f90 @@ -12,6 +12,8 @@ module ts_mod type ts_params_struct character(100) :: lat_file = '', dat_out_file = '', quad_mask = '' + character(40) :: group_knobs(2) = ["", ""] + character(40) :: test = "" real(rp) :: Q_a0 = 0, Q_a1 = 0, dQ_a = 0 real(rp) :: Q_b0 = 0, Q_b1 = 0, dQ_b = 0 real(rp) :: Q_z0 = 0, Q_z1 = 0, dQ_z = 0 @@ -61,7 +63,7 @@ subroutine ts_init_params (ts, ts_com) type (ele_struct), pointer :: ele integer n_arg -logical err +logical err, rf_on namelist / params / bmad_com, ts @@ -70,8 +72,8 @@ subroutine ts_init_params (ts, ts_com) n_arg = command_argument_count() if (n_arg > 1) then - print *, 'Usage: tune_scan ' - print *, 'Default: = tune_scan.init' + print '(a)', 'Usage: tune_scan ' + print '(a)', 'Default: = tune_scan.init' stop endif @@ -88,6 +90,16 @@ subroutine ts_init_params (ts, ts_com) if (ts%dat_out_file == '') call file_suffixer(ts_com%master_input_file, ts%dat_out_file, 'dat', .true.) +if (ts%group_knobs(1) == '' .xor. ts%group_knobs(2) == '') then + print '(a)', 'Error: Both ts%group_knobs(1) and ts%group_knobs(2) strings must be non-blank or both must be non-blank' + stop +endif + +if (ts%use_phase_trombone .and. ts%group_knobs(1) /= '') then + print '(a)', 'Error: ts%use_phase_trombone and ts%group_knobs cannot both be used at the same time.' + stop +endif + !--------------------------------------------- ! Calculate number of steps to take from range and step size @@ -123,7 +135,21 @@ subroutine ts_init_params (ts, ts_com) call bmad_parser(ts%lat_file, ts_com%ring, err_flag = err) if (err) stop -if (.not. ts%rf_on) call set_on_off(rfcavity$, ts_com%ring, off$) +rf_on = rf_is_on(ts_com%ring%branch(0)) +if (ts%rf_on .neqv. rf_on) then + if (ts%rf_on) then + call set_on_off(rfcavity$, ts_com%ring, on$) + else + call set_on_off(rfcavity$, ts_com%ring, off$) + endif +endif + +rf_on = rf_is_on(ts_com%ring%branch(0)) +if (ts%rf_on .neqv. rf_on) then + print '(a)', 'Cannot turn RF on. Will stop here.' + stop +endif + if (ts%use_phase_trombone) call insert_phase_trombone(ts_com%ring%branch(0)) allocate(ts_com%closed_orb(0:ts_com%ring%n_ele_max)) @@ -164,7 +190,7 @@ end subroutine ts_init_params !------------------------------------------------------------------------------------------- !------------------------------------------------------------------------------------------- -recursive subroutine ts_track_particle(ts, ts_com, ja, jb, jz, ts_dat) +recursive subroutine ts_track_particle(ts, ts_com, jtune, ts_dat) type (ts_params_struct) ts type (ts_com_struct) ts_com @@ -175,27 +201,27 @@ recursive subroutine ts_track_particle(ts, ts_com, ja, jb, jz, ts_dat) type (ele_struct), pointer :: ele real(rp) Jvec0(1:6), Jvec(1:6), init_vec(6), amp(3), r(3), v_mat(4,4) -integer ja, jb, jz, nt, track_state, status +integer jtune(3), nt, track_state, status logical ok, error ! ts_dat = ts_data_struct() -ts_dat%ix_q = [ja, jb, jz] +ts_dat%ix_q = jtune -ts_dat%tune(1) = ts_com%int_Qa + ts%Q_a0 + ja*ts%dQ_a -ts_dat%tune(2) = ts_com%int_Qb + ts%Q_b0 + jb*ts%dQ_b +ts_dat%tune(1) = ts_com%int_Qa + ts%Q_a0 + jtune(1)*ts%dQ_a +ts_dat%tune(2) = ts_com%int_Qb + ts%Q_b0 + jtune(2)*ts%dQ_b if (ts%rf_on) then - ts_dat%tune(3) = -(ts%Q_z0 + jz*ts%dQ_z) + ts_dat%tune(3) = -(ts%Q_z0 + jtune(3)*ts%dQ_z) else - ts_dat%tune(3) = ts%pz0 + jz*ts%dpz + ts_dat%tune(3) = ts%pz0 + jtune(3)*ts%dpz endif ring = ts_com%ring ! Use copy in case tune setting fails, which may garble the lattice closed_orb = ts_com%closed_orb ! Use copy in case tune setting fails, which may garble the closed orbit ele => ring%ele(0) -ok = set_tune_3d (ring%branch(0), ts_dat%tune, ts%quad_mask, ts%use_phase_trombone, ts%rf_on) ! Tunes in radians. +ok = set_tune_3d (ring%branch(0), ts_dat%tune, ts%quad_mask, ts%use_phase_trombone, ts%rf_on, ts%group_knobs) ! Tunes in radians. if (.not. ok) return ! Tunes could not be set, probably on a resonance. if (ts%rf_on) then @@ -247,7 +273,7 @@ recursive subroutine ts_track_particle(ts, ts_com, ja, jb, jz, ts_dat) amp = [sqrt(Jvec(1)**2 + Jvec(2)**2)/sqrt(ts_com%a_emit), sqrt(Jvec(3)**2 + Jvec(4)**2)/sqrt(ts_com%b_emit), & sqrt(Jvec(5)**2 + Jvec(6)**2)/ts_com%sig_pz] if (error) then - print *, "BAD: xyz_to_action returned error." + print '(a)', "BAD: xyz_to_action returned error." endif else coords%vec(6) = 0 ! The dispersion has already been subtracted off diff --git a/bsim/searchf.namelist b/bsim/searchf.namelist new file mode 100644 index 0000000000..9aae2e52e0 --- /dev/null +++ b/bsim/searchf.namelist @@ -0,0 +1,590 @@ + +File: aperture_by_tracking/aperture_by_tracking.f90 +aperture_by_tracking + +File: aperture_by_tracking/aperture_by_tracking_mod.f90 +aperture_by_tracking_mod +progress_indicator +prep_lat_ring +make_slices +check_if_lost_ring +check_if_lost_linac +binary_search + +File: aperture_by_tracking/aperture_by_tracking_mpi_mod.f90 +aperture_by_tracking_mpi_mod +aperture_by_tracking_mpi_mod_max_apertures +aperturejob_struct +apertureresult_struct +mympi_initialize +mympi_bmad_parser +mympi_register_derived_types +mympi_check_mailbox_with_timeout +mympi_receive_result +mympi_send_result +mympi_receive_job +mympi_send_job +mympi_shutdown + +File: apisa/nsga2/nsga2.cpp +main +check_sel +if +if + +File: apisa/nsga2/nsga2_functions.cpp +initialize +chk_malloc +create_pop +create_ind +free_memory +free_pop +free_ind +selection +mergeOffspring +calcFitnesses +calcDistances +environmentalSelection +matingSelection +select_initial +select_normal +irand +read_ini +read_var +write_sel +write_arc +check_sel +check_arc + +File: apisa/nsga2/nsga2_io.cpp +read_pop + +File: apisa/spea2/spea2.cpp +main + +File: apisa/spea2/spea2_functions.cpp +initialize +chk_malloc +create_pop +create_ind +free_memory +free_pop +free_ind +selection +mergeOffspring +calcFitnesses +calcDistances +environmentalSelection +truncate_nondominated +truncate_dominated + +File: apisa/spea2/spea2_io.cpp +read_pop + +File: bbu/bbu_program.f90 +bbu_program + +File: code/adjust_optics.f90 +adjust_optics + +File: code/bbu_track_mod.f90 +bbu_track_mod +bbu_stage_struct +bbu_beam_struct +bbu_current_variation_struct +bbu_param_struct +bbu_setup +bbu_track_all +bbu_track_a_stage +bbu_add_a_bunch +bbu_remove_head_bunch +bbu_hom_voltage_calc +rf_cav_names +check_rf_freq +write_bunch_by_bunch_info +hom_voltage +logical_to_python + +File: code/bsim_interface.f90 +bsim_interface + +File: code/count_lines_in_file.f90 +count_lines_in_file_mod +count_lines_in_file + +File: code/insert_phase_trombone.f90 +insert_phase_trombone + +File: code/longitudinal_beta.f90 +longitudinal_beta + +File: code/set_tune_3d.f90 +set_tune_3d + +File: code/slice_mod.f90 +slice_mod +track_s_to_s + +File: code_synrad/break_wall_into_segments.f90 +break_wall_into_segments + +File: code_synrad/calculate_synrad_power.f90 +calculate_synrad_power + +File: code_synrad/check_end.f90 +check_end + +File: code_synrad/check_wall.f90 +check_wall + +File: code_synrad/ele_synrad_power.f90 +ele_synrad_power + +File: code_synrad/get_initial_wall_pt.f90 +get_initial_wall_pt + +File: code_synrad/init_ray.f90 +init_ray + +File: code_synrad/outline_concat.f90 +outline_concat + +File: code_synrad/outline_reverse.f90 +outline_reverse + +File: code_synrad/ray_is_outside_wall.f90 +ray_is_outside_wall + +File: code_synrad/seg_power_calc.f90 +seg_power_calc + +File: code_synrad/set_wall_eles.f90 +set_wall_eles + +File: code_synrad/synrad_adjust_wall_points.f90 +synrad_adjust_wall_points + +File: code_synrad/synrad_custom_seg_calc.f90 +synrad_custom_seg_calc + +File: code_synrad/synrad_interface.f90 +synrad_interface + +File: code_synrad/synrad_mod.f90 +synrad_mod + +File: code_synrad/synrad_read_vac_wall_geometry.f90 +synrad_read_vac_wall_geometry + +File: code_synrad/synrad_setup_walls.f90 +synrad_setup_walls + +File: code_synrad/synrad_struct.f90 +synrad_struct +wall_pt_struct +source_struct +seg_power_struct +wall_seg_struct +wall_struct +walls_struct +ray_struct +ele_power_struct +synrad_param_struct +synrad_mode_struct +outline_pt_struct +outline_struct +wall_list_struct +concat_part_struct +concat_struct +negative_x$ +positive_x$ +start_side$ +exit_side$ +synrad_significant_length + +File: code_synrad/synrad_write_power_mod.f90 +synrad_write_power_mod +write_power_header +write_power_results +write_header +write_results + +File: code_synrad/theta_floor.f90 +theta_floor + +File: code_synrad/track_ray_to_wall.f90 +track_ray_to_wall + +File: code_synrad3d/synrad3d_output_mod.f90 +synrad3d_output_mod +sr3d_write_hit_points +sr3d_write_photon_start_file +sr3d_record_photon_position + +File: code_synrad3d/synrad3d_parse_wall.f90 +synrad3d_parse_wall +sr3d_section_struct +sr3d_multi_section_struct +sr3d_wall_struct +sr3d_section_input +surface_input +old_wall_section_input +sr3d_read_wall_file +sr3d_old_wall_file_format +sr3d_associate_surface +sr3d_read_wall_multi_section + +File: code_synrad3d/synrad3d_plot_mod.f90 +synrad3d_plot_mod +sr3d_plot_diffuse_probability +sr3d_plot_reflection_probability +sr3d_plot_wall_vs_s +sr3d_plot_wall_cross_sections +sr3d_find_wall_point + +File: code_synrad3d/synrad3d_struct.f90 +synrad3d_struct +sr3d_photon_wall_hit_struct +sr3d_coord_struct +sr3d_photon_track_struct +sr3d_params_struct +sr3d_fast_struct +sr3d_branch_overlap_struct +sr3d_branch_com_struct +sr3d_common_struct +is_through_wall$ +at_wall_end$ +inside_the_wall$ +at_transverse_wall$ +sr3d_plot_param_struct + +File: code_synrad3d/synrad3d_test_mod.f90 +synrad3d_test_mod +sr3d_diffuse_probability_test +sr3d_monte_carlo_reflection_test +sr3d_specular_reflection_test + +File: code_synrad3d/synrad3d_track_mod.f90 +synrad3d_track_mod +sr3d_track_photon +sr3d_track_photon_to_wall +sr3d_check_if_photon_init_coords_outside_wall +sr3d_photon_status_calc +sr3d_propagate_photon_a_step +sr3d_photon_hit_spot_calc +sr3d_reflect_photon + +File: code_synrad3d/synrad3d_utils.f90 +synrad3d_utils +sr3d_get_emission_pt_params +sr3d_emit_photon +sr3d_photon_d_radius +sr3d_get_section_index +sr3d_print_photon_info +i0_eff_calc + +File: code_synrad3d/synrad3d_wall_to_synrad_walls_mod.f90 +synrad3d_wall_to_synrad_walls_mod +synrad3d_wall_to_synrad_walls +calc_this_side +add_this_point +calc_this_x + +File: custom_tracking/track1_preprocess.f90 +track1_preprocess + +File: dark_current_tracker/dark_current_mod.f90 +dark_current_mod +dark_current_param_struct +dark_current_tally_struct +plot_particle_track +plot_wall +write_particle_track +wall_position_from_s_to_s +import_time_distribution +dark_current_tracker_parse_command_args + +File: dark_current_tracker/dark_current_tracker.f90 +dark_current_tracker + +File: dynamic_aperture/da_program_mod.f90 +da_program_mod + +File: dynamic_aperture/dynamic_aperture.f90 +dynamic_aperture_program + +File: dynamic_aperture/track_many_hook.f90 +track_many_hook + +File: envelope_ibs/envelope_ibs.f90 +envelope_ibs + +File: frequency_map/frequency_map.f90 +frequency_map + +File: ibs_linac/ibs_linac.f90 +ibs_linac + +File: ibs_ring/ibs_ring.f90 +ibs_ring +param_bomb + +File: long_term_tracking/long_term_tracking.f90 +long_term_tracking + +File: long_term_tracking/long_term_tracking_mpi.f90 +long_term_tracking + +File: long_term_tracking/track1_bunch_hook.f90 +track1_bunch_hook + +File: modules/adts_mod.f90 +adts_mod +tune_ele_by_ele +accumulate_phase_advance + +File: modules/crm_mod.f90 +crm_mod +numerical_delta +crm_struct +crm_alloc +crm_build + +File: modules/custom_dynamic_aperture_mod.f90 +custom_dynamic_aperture_mod +custom_aperture_data_struct +custom_aperture_param_struct +custom_aperture_scan_struct +custom_dynamic_aperture_scan +custom_dynamic_aperture +local_cosphi +local_sinphi + +File: modules/dynap_mod.f90 +dynap_mod +get_magnet_strengths +set_magnet_strengths +is_linear_ele +frac +read_initial_population +k2_to_omega +omega_to_k2 +count_feasible_in_pop +write_population + +File: modules/four_mod.f90 +four_mod +xy_to_action + +File: modules/linear_aperture_mod.f90 +linear_aperture_mod +linear_aperture + +File: modules/lt_tracking_mod.f90 +lt_tracking_mod +master_rank$ +in_map$ +not_in_map$ +core_max$ +ltt_column_struct +ltt_params_struct +map$ +ele$ +ltt_section_struct +ltt_com_struct +new$ +valid$ +written$ +ltt_bunch_data_struct +ltt_read_params +ltt_init_params +ltt_init_tracking +ltt_print_per_particle_file_header +ltt_per_particle_file_name +ltt_print_inital_info +ltt_write_line +ltt_run_check_mode +ltt_run_individual_mode +ltt_run_single_mode +ltt_init_beam_distribution +ltt_run_beam_mode +ltt_run_stat_mode +ltt_track1_radiation_center +ltt_setup_high_energy_space_charge +ltt_write_particle_data +ltt_write_custom +ltt_write_beam_binary_file +ltt_write_params_header +ltt_calc_bunch_data +ltt_averages_file_name +ltt_write_averages_data +ltt_write_single_mode_sigma_file +ltt_read_map +ltt_write_map +ltt_map_file_name +ltt_make_map +ltt_make_tracking_lat +ltt_pointer_to_map_ends +ltt_track_bmad_single +ltt_track_bmad_bunch +ltt_track_map +ltt_print_mpi_info +ltt_bunch_time_sum +ltt_apply_rampers_to_slave + +File: modules/moga_struct_mod.f90 +moga_struct_mod +mag_struct + +File: modules/namelist_da.f90 +namelist_da +max_de + +File: modules/namelist_general.f90 +namelist_general + +File: modules/namelist_moga.f90 +namelist_moga +max_mags + +File: modules/pisa_mod.f90 +pisa_mod +pool_struct +pop_struct +breeder_params_struct +find_empty_pop_slot +delete_the_dead +pisa_cfg_parser +increment_ptr +name_to_ix +read_pisa_indexes +write_pop_pisa +write_objective_report +write_constraint_report +block_on_pisa_status +poll_state +write_state +kangal_breeder +niave_breeder + +File: modules/ts_mod.f90 +ts_mod +master_rank$ +job_tag$ +have_data_tag$ +results_tag$ +ts_params_struct +ts_com_struct +ts_data_struct +ts_init_params +ts_track_particle +ts_write_results +ts_print_mpi_info + +File: moga/moga.f90 +moga + +File: sodom2/sodom2.f90 +sodom2 + +File: sodom2/sodom2_mod.f90 +sodom2_mod +master_rank$ +a_mode$ +b_mode$ +c_mode$ +j_tol$ +angle_max$ +sodom2_params_struct +sodom2_com_struct +sodom2_read_params +sodom2_init_params +sodom2_init_bunch +sodom2_track_bunch +quat_to_su2 +sodom2_construct_quaternions +sodom2_fft +sodom2_construct_mat +sodom2_deallocate_memory +sodom2_eig +sodom2_determine_adst +sodom2_write_n +sodom2_write_particles +sodom2_check_n + +File: spin_stroboscope/spin_stroboscope.f90 +spin_stroboscope + +File: spin_stroboscope/track1_custom.f90 +track1_custom + +File: srdt_lsq_soln/srdt_lsq_soln.f90 +srdt_lsq_soln + +File: synrad/synrad.f90 +synrad + +File: synrad/synrad_plot_mod.f90 +synrad_plot_mod +plot_param_struct +synrad_plot_sx + +File: synrad3d/synrad3d.f90 +synrad3d + +File: synrad3d/custom/synrad3d_photon_init_custom.f90 +synrad3d_photon_init_custom + +File: synrad_aperture_to_wall/synrad_aperture_to_wall.f90 +synrad_aperture_to_wall + +File: touschek_background/special_collimate_lattice.f90 +special_collimate_lattice_mod +collimator_struct +special_collimate_lattice + +File: touschek_background/touschek_background.f90 +touschek_background + +File: touschek_background/touschek_background_mod.f90 +touschek_background_mod +orbit_data_struct +raw_touschek_analysis + +File: touschek_background/touschek_background_mpi_mod.f90 +touschek_background_mpi_mod +trackjob_struct +jobdesc_struct +trackresult_struct +jobresults_struct +mympi_initialize +mympi_register_derived_types +mympi_bmad_parser +mympi_bcast_sigmap +mympi_check_mailbox_with_timeout +mympi_send_job_desc +mympi_recv_job_desc +mympi_receive_results +mympi_send_results +mympi_shutdown + +File: tune_plane_res_plot/tune_plane_res_mod.f90 +tune_plane_res_mod +res_params_struct +res_line_struct +res_struct +res_line_calc +res_line_write_list +res_line_plot + +File: tune_plane_res_plot/tune_plane_res_plot.f90 +tune_plane_res_plot + +File: tune_scan/tune_scan.f90 +tune_scan + +File: tune_scan/tune_scan_mpi.f90 +tune_scan_mpi + +File: wall_generator/wall_generator.f90 +wall_generator diff --git a/bsim/tune_scan/doc/tune_scan.tex b/bsim/tune_scan/doc/tune_scan.tex index bf05146a2f..fd504da2b9 100644 --- a/bsim/tune_scan/doc/tune_scan.tex +++ b/bsim/tune_scan/doc/tune_scan.tex @@ -75,7 +75,7 @@ \title{Tune Scan Program} \author{} -\date{David Sagan \\ April 26, 2022} +\date{David Sagan \\ October 22, 2023} \begin{document} \maketitle @@ -141,9 +141,9 @@ bsim/tune_scan/example \end{code} -When running the MPI version threaded over multiple computers, the details of how to start the process will -vary depending upon the installation. See your local Guru for details. When running on a single machine, -the typical command will look like +When running the MPI version threaded over multiple computers, the details of how to start the +process will vary depending upon the installation. See your local Guru for details. When running on +a single machine, the typical command will look like \begin{code} mpiexec -n tune_scan_mpi {} \end{code} @@ -171,27 +171,23 @@ ... / \end{code} -The tag \vn{"\&"} starts the namelist where -\vn{} is the name of the namelist. The namelist ends -with the slash \vn{"/"} tag. Anything outside of this is -ignored. Within the namelist, anything after an exclamation mark -\vn{"!"} is ignored including the exclamation mark. \vn{}, -\vn{}, etc. are variable names. Example: +The tag \vn{"\&"} starts the namelist where \vn{} is the name of the +namelist. The namelist ends with the slash \vn{"/"} tag. Anything outside of this is ignored. Within +the namelist, anything after an exclamation mark \vn{"!"} is ignored including the exclamation +mark. \vn{}, \vn{}, etc. are variable names. Example: \begin{code} &place section = 0.0, "arc_std", "elliptical", 0.045, 0.025 / \end{code} -here \vn{place} is the namelist name and \vn{section} is a -variable name. Notice that here \vn{section} is a ``structure'' which -has five components -- a real number, followed by two strings, +here \vn{place} is the namelist name and \vn{section} is a variable name. Notice that here +\vn{section} is a ``structure'' which has five components -- a real number, followed by two strings, followed by two real numbers. Everything is case insensitive except for quoted strings. -Logical values are specified by \vn{True} or \vn{False} or can be -abbreviated \vn{T} or \vn{F}. Avoid using the dots (periods) that one -needs in Fortran code. +Logical values are specified by \vn{True} or \vn{False} or can be abbreviated \vn{T} or +\vn{F}. Avoid using the dots (periods) that one needs in Fortran code. %------------------------------------------------------------------ \Section{Master Input File} @@ -214,6 +210,7 @@ ts%use_phase_trombone = F ! Use phase trombone ele to adjust transverse tunes? ts%quad_mask = "" ! Quadrupole mask used with quadrupole variation. + ts%group_knobs = "", "" ! Tune variation can optionally be done using group elements. ts%Q_z0 = 0.066 ! Q_z range (when RF is on) is [Q_z0, Q_z1]. ts%Q_z1 = 0.067 ! Units are rad/2pi. @@ -246,7 +243,16 @@ \item[ts\%dat_out_file] \Newline Data output file name. Default if blank or not present is \vn{tune_scan.dat}. % -\item[ts\%] \Newline +\item[ts\%group_knobs] \Newline +If \vn{ts%group_knobs} is set, tune variation can be done by variation of two \vn{group} elements +whose names are given by \vn{ts%group_knobs}. Example: +\begin{code} + ts%group_knobs = "qtune1", "qtune2" +\end{code} +% +%\item[ts\%test] \Newline +%If non-blank, instead of a tune scan, a test is run. Currently the only test is is \vn{"TUNE"} +%which tests how accurately the program is setting the tune. % \item[ts\%Q_a0, ts\%Q_a1, ts\%dQ_a] \Newline \vn{[ts%Q_a0, ts%Q_a1]} is the range of the tune plane grid along the $Q_a$ axis and \vn{ts%dQ_a} is @@ -336,22 +342,30 @@ } The units are in radians/2$\pi$. Only the fractional part of the tune should be given. -The transverse $(Q_x, Q_y)$ tunes are set by either varying quadrupole strengths in the lattice or -by varying the phase advance through a \vn{match} element set in phase trombone mode. Which strategy -is used is determined by the setting of \vn{ts%use_phase_trombone}. If set to True, a \vn{match} -element in phase trombone mode is added to the lattice and the phase advance in the element is -adjusted as needed. This gives a ``smooth'' tune variation in the sense that the Twiss parameters do -not change around the ring. It is somewhat unrealistic though when trying to simulate an actual -machine. When not using a phase trombone element, lattice tune variation is achieved by varying -quadrupole strengths. The general algorithm is to exclude any quadrupoles that are tilted and then -divide the upright quadrupoles into two groups. One group were $\beta_a > \beta_b$ at the quadrupole -and the other group with $\beta_a < \beta_b$. The $k_1$ quadrupole strength of the quadrupoles of -each group are varied in unison. The two groups represent two variables which can be used to match -the two tune conditions. It may be desirable to not vary selected quadrupoles. For example, the -quadrupoles in an interaction region. - -To exclude quadrupoles from being varied the \vn{ts%quad_mask} string can be set appropriately. See -the Bmad manual for details about element selection. For example: +The transverse $(Q_x, Q_y)$ tunes can be veried in one of three ways: +\begin{description} +\item +If \vn{ts%use_phase_trombone} is set to True, a \vn{match} element in phase trombone mode is added +to the lattice and the phase advance in the element is adjusted as needed. This gives a ``smooth'' +tune variation in the sense that the Twiss parameters do not change around the ring. It is somewhat +unrealistic though when trying to simulate an actual machine. +% +\item +If \vn{ts%group_knobs} (which is a vector of two strings) is set to non-blank values, the +group elements in the lattice matching the names will be used to vary the tune. +\begin{code} + ts%group_knobs = "qtune1", "qtune2" +\end{code} +% +\item +If none of the above methods are used, the lattice tune variation is achieved by varying quadrupole +strengths. The general algorithm is to exclude any quadrupoles that are tilted and then divide the +upright quadrupoles into two groups. One group were $\beta_a > \beta_b$ at the quadrupole and the +other group with $\beta_a < \beta_b$. The $k_1$ quadrupole strength of the quadrupoles of each group +are varied in unison. The two groups represent two variables which can be used to match the two tune +conditions. It may be desirable to not vary selected quadrupoles. For example, the quadrupoles in an +interaction region. To exclude quadrupoles from being varied, the \vn{ts%quad_mask} string can be +set appropriately. See the Bmad manual for details about element selection. For example: \begin{code} ts%quad_mask = "QT* IP:M34" \end{code} @@ -363,7 +377,7 @@ In this example all quadrupole elements are vetoed except for quadrupoles whose name begins with ``\vn{QT}'' and has three letters. That is, only quadrupoles whose name begins with ``\vn{QT}'' and has three letters will be varied. - +\end{description} There are two modes of operation. In the \vn{RF off} mode, \vn{ts%rf_on} is set to False (the default). In the \vn{RF on} mode, \vn{ts%rf_on} is set to True. In the \vn{RF off} mode, tune plane diff --git a/bsim/tune_scan/tune_scan.f90 b/bsim/tune_scan/tune_scan.f90 index 5f63cdcf9e..5be755e9e1 100644 --- a/bsim/tune_scan/tune_scan.f90 +++ b/bsim/tune_scan/tune_scan.f90 @@ -25,7 +25,7 @@ program tune_scan do ja = 0, ts_com%n_a do jb = 0, ts_com%n_b do jz = 0, ts_com%n_z - call ts_track_particle (ts, ts_com, ja, jb, jz, ts_dat(ja,jb,jz)) + call ts_track_particle (ts, ts_com, [ja, jb, jz], ts_dat(ja,jb,jz)) call run_timer ('READ', del_time) if (del_time - time0 > ts%timer_print_dtime) then diff --git a/bsim/tune_scan/tune_scan_mpi.f90 b/bsim/tune_scan/tune_scan_mpi.f90 index dc1dbee75e..b551961a2a 100644 --- a/bsim/tune_scan/tune_scan_mpi.f90 +++ b/bsim/tune_scan/tune_scan_mpi.f90 @@ -65,7 +65,7 @@ program tune_scan_mpi do ja = 0, ts_com%n_a do jb = 0, ts_com%n_b do jz = 0, ts_com%n_z - call ts_track_particle (ts, ts_com, ja, jb, jz, ts_dat(ja,jb,jz)) + call ts_track_particle (ts, ts_com, [ja, jb, jz], ts_dat(ja,jb,jz)) enddo enddo enddo diff --git a/code_examples/searchf.namelist b/code_examples/searchf.namelist new file mode 100644 index 0000000000..964cd6c7dc --- /dev/null +++ b/code_examples/searchf.namelist @@ -0,0 +1,60 @@ + +File: beam_track_example/beam_track_example.f90 +beam_track_example + +File: bmad_to_opal_example/bmad_to_opal_example.f90 +bmad_to_opal_example + +File: coarray_example/coarray_example.f90 +coarray_example + +File: construct_taylor_map/construct_taylor_map.f90 +construct_taylor_map + +File: csr_example/csr_example.f90 +csr_example + +File: dispersion_simulation/dispersion_simulation.f90 +dispersion_simulation + +File: em_field_query_example/em_field_query_example.f90 +em_field_query_example + +File: lapack_examples/lapack_examples.f90 +lapack_examples + +File: lattice_geometry_example/lattice_geometry_example.f90 +lattice_geometry_example + +File: mpi_mp/mpi_mp.f90 +mpi_mp + +File: multi_turn_tracking_example/multi_turn_tracking_example.f90 +multi_turn_tracking_example + +File: parallel_track_example/parallel_track_example.f90 +parallel_track_example + +File: particle_track_example/particle_track_example.f90 +particle_track_example + +File: plot_example/plot_example.f90 +example_plot + +File: ptc_layout_example/ptc_layout_example.f90 +ptc_layout_example + +File: ptc_spin_orbital_normal_form/ptc_spin_orbital_normal_form.f90 +ptc_spin_orbital_normal_form + +File: simple_bmad_program/simple_bmad_program.f90 +test + +File: spin_amplitude_dependent_tune/spin_amplitude_dependent_tune.f90 +spin_phase_advance_isf + +File: spin_matching/spin_matching.f90 +spin_matching + +File: tune_tracker/TT_example.f90 +tune_tracker_driver diff --git a/forest/searchf.namelist b/forest/searchf.namelist new file mode 100644 index 0000000000..460ab2f35f --- /dev/null +++ b/forest/searchf.namelist @@ -0,0 +1,6677 @@ + +File: code/Sa_extend_poly.f90 +s_extend_poly +operator +procedure +procedure +procedure +procedure +assignment +procedure +procedure +procedure +procedure +scdadd +daddsc +daddsco +scdaddo +equal_real8_cmap +equal_cmap_real8 +equal_c_map_ray8 +equal_ray8_c_map +prtp1 +prtp +analyse_aperture_flag + +File: code/Sb_sagan_pol_arbitrary.f90 +s_pol_sagan +assignment +procedure +blpol2_0 + +File: code/Sc_euclidean.f90 +s_euclidean +trans +procedure +procedure +rot_xz +procedure +procedure +rot_yz +procedure +procedure +rot_xy +procedure +procedure +r_xy +r_z +t_xyz +e_general +init +procedure +procedure +procedure +procedure +procedure +print_e_general +zero_r_xy +zero_r_z +zero_t_xyz +zero_e_general +zero_e_general_s +trans_dl +track_e_general_s +track_e_general +recombine +commute_e +rot_yzr +rot_yzp +transr +transp +rot_xyr +rot_xyp +rot_xzr +rot_xzp + +File: code/Sd_frame.f90 +s_frame +assignment +procedure +procedure +equal +procedure +procedure +copy +procedure +procedure +geo_rot +procedure +procedure +procedure +procedure +compute_angle +procedure +find_patch +procedure +find_patch_bmad +procedure +assignment +procedure +null_f +alloc_f +null_af +null_gs +alloc_af +kill_af +kill_f +equal_f +copy_patch +copy_chart +copy_chart1 +copy_patch1 +zero_patch +zero_chart +copy_vector +change_basis +geo_tra +print_triad +geo_rota_no_vec +geo_rota +geo_rotab_no_vec +rotate_frame +translate_frame +translate_point +make_rot_x +make_rot_y +make_rot_z +geo_rotb +check_frame +make_normal +compute_distance +compute_entrance_angle +compute_entrance_angle_mengyu +find_patch_mengyu +find_patch_from_mengyu_to_ptc +compute_entrance_angle_bmad +convert_patch_mengyu_to_etienne +print33 +convert_patch_etienne_to_mengyu +compute_scalar +find_patch_bmad0 +find_patch_b +find_patch_bmad_marker +inverse_find_patch +inverse_find_patch_bmad + +File: code/Sf_def_all_kinds.f90 +s_def_all_kinds +get_length + +File: code/Sg_sagan_wiggler.f90 +sagan_wiggler +hyper_y_family_y +hyper_xy_family_y +hyper_x_family_y +hyper_y_family_x +hyper_xy_family_x +hyper_x_family_x +hyper_y_family_qu +hyper_xy_family_qu +hyper_x_family_qu +hyper_y_family_sq +hyper_xy_family_sq +hyper_x_family_sq +conv_to_xp +procedure +procedure +adjust_px_exi +procedure +procedure +adjust_px_ent +procedure +procedure +conv_to_px +procedure +procedure +feval_sagan +procedure +procedure +rk2_sagan +procedure +procedure +rk4_sagan +procedure +procedure +rk6_sagan +procedure +procedure +get_z_wi +procedure +procedure +driftsagan +procedure +procedure +kickpath +procedure +procedure +kick +procedure +procedure +compx +procedure +procedure +compy +procedure +procedure +compz +procedure +procedure +b_field +procedure +procedure +e_field +procedure +procedure +e_potential +procedure +procedure +track +procedure +procedure +alloc +procedure +procedure +pointers_sagan +procedure +procedure +pointers_w +procedure +procedure +kill +procedure +procedure +copy +procedure +procedure +procedure +procedure +procedure +procedure +scale_sagan +procedure +procedure +print_user +procedure +read_user +procedure +assignment +procedure +procedure +procedure +procedure +track_slice +procedure +procedure +adjust_like_abell +procedure +procedure +adjust_wi +procedure +procedure +kick_integral +procedure +procedure +gen_conv_to_px +procedure +procedure +gen_conv_to_xp +procedure +procedure +conv_to_xp +procedure +procedure +procedure +procedure +conv_to_px +procedure +procedure +procedure +procedure +b_e_field +procedure +procedure +fx_new +procedure +procedure +adjust_wir +adjust_wip +kick_integral_r +kick_integral_p +intr +get_z_wir +get_z_wip +int_saganr +intp +int_saganp +zero_saganr +zero_saganp +zero_wr +zero_wp +copy_el_elp +copy_elp_el +copy_el_el +copy_w_w +copy_w_wp +copy_wp_w +pointers_saganr +pointers_saganp +pointers_wr +pointers_wp +alloc_sagan +alloc_wiggler +kill_sagan +kill_wiggler +reset_wi +reset_wig +elp_pol_sagan +scale_saganr +scale_saganp +driftsaganr +driftsaganp +kickpathr +kickpathp +compx_r +compx_p +compy_r +compy_p +compz_r +eval_thin_q +compz_p +e_potentialr +e_potentialp +e_fieldr +e_fieldp +k_normal +b_fieldr +b_fieldp +kickr +kickp +print_ +read_ +feval_saganr +feval_saganp +rk2saganr +rk4saganr +rk6saganr +rk2saganp +rk4saganp +rk6saganp +adjust_like_abellr +adjust_like_abellp +adjust_px_entr +adjust_px_entp +adjust_px_exir +adjust_px_exip +conv_to_xprsagan +conv_to_xppsagan +conv_to_pxrsagan +conv_to_pxpsagan +gen_conv_to_xpr +gen_conv_to_xpp +gen_conv_to_pxr +gen_conv_to_pxp +conv_to_xprabell +conv_to_xppabell +conv_to_pxrabell +conv_to_pxpabell +conv_to_xpr +conv_to_xpp +conv_to_pxr +conv_to_pxp +b_e_fieldr +b_e_fieldp +fx_newr +fx_newp + +File: code/Sh_def_kind.f90 +s_def_kind +n_enge +radiate_2_force +procedure +procedure +rad_spin_qua_probe +procedure +procedure +rad_spin_force_probe +procedure +procedure +track_slice_sol5 +procedure +procedure +track_slice_dkd2 +procedure +procedure +track_slice_dkd2_old +procedure +procedure +track_slice_tktf +procedure +procedure +track_slice_sagan +procedure +procedure +track_slice_cav4 +procedure +procedure +track_slice_pancake +procedure +procedure +feval_cav_bmad_probe +procedure +procedure +feval_sagan_probe +procedure +procedure +rk2_sagan_probe +procedure +procedure +rk4_sagan_probe +procedure +procedure +rk6_sagan_probe +procedure +procedure +rk2bmad_cav_probe +procedure +procedure +rk4bmad_cav_probe +procedure +procedure +rk6bmad_cav_probe +procedure +procedure +track_slice_cav4_old +procedure +procedure +track_slice_teapot +procedure +procedure +track_slice_teapot_old +procedure +procedure +track_slice_strex +procedure +procedure +track_slice_strex_old +procedure +procedure +track_slice +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +fake_shift +procedure +procedure +fringe_hel +procedure +procedure +patch_drift +procedure +procedure +get_z_ab +procedure +procedure +adjust_abell +procedure +procedure +adjust_pancake +procedure +procedure +track_fringe +procedure +procedure +fringe_teapot +procedure +procedure +fringe_strex +procedure +procedure +get_z_cav +procedure +procedure +track +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +drift +procedure +procedure +sympintex +procedure +procedure +monti +procedure +procedure +rcollimatori +procedure +procedure +ecollimatori +procedure +procedure +kickcav +procedure +procedure +abmad_trans +procedure +procedure +a_trans +procedure +procedure +procedure +feval_cav +procedure +procedure +feval_cav_imp +procedure +rk1bmad_cav_imp +procedure +feval_cav_bmad +procedure +procedure +feval_teapot +procedure +procedure +feval_abell +procedure +procedure +rk2_abell +procedure +procedure +rk4_abell +procedure +procedure +rk6_abell +procedure +procedure +rk2_cav_trav +procedure +procedure +rk2bmad_cav +procedure +procedure +rk4_cav_trav +procedure +procedure +rk4bmad_cav +procedure +procedure +rk6_cav_trav +procedure +procedure +rk6bmad_cav +procedure +procedure +rk2_teapot +procedure +procedure +feval_teapot_qua +procedure +procedure +rk2_teapot_probe +procedure +procedure +rk4_teapot_probe +procedure +procedure +rk6_teapot_probe +procedure +procedure +rk4_teapot +procedure +procedure +rk6_teapot +procedure +procedure +fringecav +procedure +procedure +adjust_time_cav4 +procedure +procedure +adjust_time_cav_trav_out +procedure +procedure +fringecav_trav +procedure +procedure +fringe_cav_trav +procedure +procedure +cavity +procedure +procedure +multipole_fringe +procedure +procedure +fringe_dipole +procedure +procedure +face +procedure +procedure +procedure +procedure +edge +procedure +procedure +kick +procedure +procedure +kickex +procedure +procedure +elliptical_b +procedure +procedure +inte +procedure +procedure +inte_strex +procedure +procedure +kick_sol +procedure +procedure +fringe2quad +procedure +procedure +getmulb_sol +procedure +procedure +getnewb +procedure +procedure +kickmul +procedure +procedure +intesol +procedure +procedure +septtrack +procedure +procedure +copy +procedure +procedure +procedure +procedure +procedure +procedure +pointers_abell +procedure +procedure +pointers_pancake +procedure +procedure +assignment +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +alloc +procedure +procedure +procedure +kill +procedure +procedure +procedure +expcosy6 +procedure +procedure +getmat +procedure +procedure +intktk +procedure +procedure +pushktk +procedure +procedure +kickktk +procedure +procedure +expcosy +procedure +procedure +expcosy7 +procedure +procedure +getmat7 +procedure +procedure +pushtkt7 +procedure +procedure +kicktkt7 +procedure +procedure +kickpath +procedure +procedure +procedure +procedure +procedure +procedure +inttkt7 +procedure +procedure +getanbn +procedure +procedure +getaebe +procedure +procedure +getelectric +procedure +procedure +procedure +procedure +getmagnetic +procedure +procedure +sprot +procedure +procedure +ssec +procedure +procedure +ssech1 +procedure +procedure +spar +procedure +procedure +skick +procedure +procedure +sinte +procedure +procedure +wedge +procedure +procedure +wedge_int +procedure +procedure +fx +procedure +procedure +fx_newc +procedure +procedure +fxc +procedure +procedure +step_symp_p_pancake +procedure +procedure +feval_pancake +procedure +procedure +feval_pancake_probe +procedure +procedure +rk4_pancake_probe +procedure +procedure +rk6_pancake_probe +procedure +procedure +rk4_pancake +procedure +procedure +rk6_pancake +procedure +procedure +rks_pancake +procedure +procedure +compute_f4 +procedure +procedure +compute_f4e +procedure +procedure +compute_f4s +procedure +procedure +drift +procedure +procedure +kick_he +procedure +procedure +get_field +procedure +procedure +get_bfield_fringe +procedure +procedure +get_bz_fringe +procedure +procedure +get_bfield +procedure +procedure +b_pancake +procedure +procedure +get_be_cav +procedure +procedure +b_para_perp +procedure +procedure +direction_v +procedure +procedure +push_quaternion +procedure +procedure +get_omega_spin +procedure +procedure +radiate_2 +procedure +procedure +radiate_2_probe +procedure +procedure +makeso3 +procedure +procedure +patch_driftr +patch_driftp +inter_drift1 +intep_drift1 +inter_superdrift +intep_superdrift +super_drift_p +super_drift_r +drift_inter +drift_intep +fringe_straightr +fringe_straightp +adjust_time_cav4r +adjust_time_cav4p +track_slice4r +inte_cav4r +inte_cav4p +track_slice4p +caver +check_symplectic_bmad_cavity +cavep +cavityr +cavityp +abmad_transr +abmad_transp +feval_cav_bmadr +feval_cav_bmadp +get_z_abr +get_z_abp +inter_abell_slice +intep_abell_slice +interabell +intepabell +rk2abellr +rk4abellr +rk6abellr +rk2abellp +rk4abellp +rk6abellp +rk2bmad_cavr +rk4bmad_cavr +rk6bmad_cavr +rk2bmad_cavp +rk4bmad_cavp +rk6bmad_cavp +inte_cavbmad4r +inte_cavbmad4p +fringecavr +fringecavp +kickcavr +kickcavp +driftr +driftp +kicktr +kicktp +multipole_fringer +multipole_fringep +newfacer +newfacep +facer +facep +fringe_dipoler +fringe_dipolep +fringe2quadr +fringe2quadp +edger +edgep +kickr +kickp +inter_dkd2 +intep_dkd2 +inter +intep +sympintr +sympintp +kick_solr +kick_solp +getnewbr +getnewbp +getmulb_solr +getmulb_solp +kickmulr +kickmulp +inter_sol5 +intep_sol5 +intesolr +intesolp +sympintsolr +sympintsolp +getmatr +getmatd +expr +expd +expcosy6r +expcosy6d +inter_ktk +intep_ktk +intktkr +intktkd +pushktkr +pushktkd +kickktkr +kickktkp +sympintktkr +sympintktkd +getmat7r +getmat7d +pushtkt7r +pushtkt7d +kicktkt7r +kicktkt7p +kickpath6r +kickpath6p +kickpathr +kickpathd +inte_tktfr +inte_tktfp +inttkt7r +inttkt7d +sympinttkt7r +sympinttkt7d +expr7 +expd7 +push_nsmi_r +push_nsmi_d +push_ssmi_r +push_ssmi_d +getanbnr +getanbnp +getaeber +getaebep +getmagneticr +getmagneticp +getelectricr +getelectricp +feval_teapotr +feval_teapotp +rk2_teapotr +rk2_teapotp +rk4_teapotr +rk4_teapotp +rk6_teapotr +rk6_teapotp +ssech1r +ssech1p +sprotr +sprotp +ssecr +ssecp +skickr +skickp +inter_teapot +intep_teapot +sinter +sintep +checkpotknob +makepotknob +makepotknob_elec +unmakepotknob +unmakepotknob_elec +fringe_teapotr +fringe_teapotp +ssympintr +ssympintp +montr +montp +montir +montip +rcollimatorr +rcollimatorp +rcollimatorir +rcollimatorip +ecollimatorr +ecollimatorp +ecollimatorir +ecollimatorip +electric_field_septumr +electric_field_septump +sepr +sepp +sympsepr +sympsepp +f_prof +set_f_in_k16 +kickexr +kickexp +inte_strexr +inte_strexp +inteexr +inteexp +fringe_strexr +fringe_strexp +sympintexr +sympintexp +sparr +sparp +check_root_drift +wedger +wedge_intr +wedge_intp +wedgep +adjust_time_cav_trav_outr +adjust_time_cav_trav_outp +get_z_cavr +get_z_cavp +inter_cav_trav +intep_cav_trav +caver_trav +cavep_trav +fringecav_travr +fringecav_travp +fringe_cav_travr +fringe_cav_travp +zeror_cav_trav +zerop_cav_trav +zeror_mon +zerop_mon +zeror_rcol +zerop_rcol +zeror_ecol +zerop_ecol +zeror_dkd2 +zerop_dkd2 +zeror_sol5 +zerop_sol5 +zeror_ktk +zerop_ktk +allocktk +killktk +zeror_tkt7 +zerop_tkt7 +alloctkt7 +killtkt7 +zeror_teapot +zerop_teapot +zero_cav4r +zero_cav4p +zero_abellr +feval_abellr +feval_abellp +zero_abellp +zeror_superdrift +zerop_superdrift +zeror_ramp +alloc_acceleration +alloc_tableau +kill_tableau +kill_acceleration +nullify_acceleration +copy_tableau +copy_acceleration +lecture_fichier +alloc_ramping +alloc_table +kill_table +kill_ramping +nullify_ramping +copy_table +copy_ramping +reading_file +zeror_kickt3 +zerop_kickt3 +zeror_strex +zerop_strex +allocteapot +killteapot +fx_newcr +fx_newcp +fxr_canonical +fxp_canonical +fxr +fxp +zeror_pancake +zerop_pancake +pointers_pancaker +pointers_pancakep +pointers_abellr +pointers_abellp +copyabell_el_elp +copyabell_el_el +copyabell_elp_el +copypancake_el_elp +copypancake_el_el +copypancake_elp_el +reset_pa +reset_abell +step_symp_p_pancaker +step_symp_p_pancakep +feval_pancaker +feval_pancakep +rks_pancaker +rks_pancakep +rk4_pancaker +rk4_pancakep +rk6_pancakep +rk6_pancaker +adjust_abellr +adjust_abellp +adjust_pancaker +adjust_pancakep +inter_pancake +intep_pancake +intpancaker +intpancakep +feval_cav_impr +rk1bmad_cav_impr +feval_cavr +feval_cavp +a_transl +a_transr +a_transp +rk2_cavr +rk2_cavp +rk4_cavr +rk4_cavp +rk6_cavr +rk6_cavp +zeror_he22 +zerop_he22 +compute_f4gr +compute_f4gp +compute_f4r +compute_f4p +compute_f4rold +compute_f4pold +kickr_he +kickp_he +intr_he +intp_he +fake_shiftr +fringe_helr +fringe_help +fake_shiftp +intr_he_tot +intp_he_tot +kickpathr_he +kickpathr_he_exact_nonsymp +kickpathp_he_exact_nonsymp +kickpathp_he +driftr_he +driftp_he +enge_f +zeror_enge +zerop_enge +elliptical_b_r +elliptical_b_p +get_fieldr +get_fieldp +get_bfield_fringer +get_bfield_fringep +get_bz_fringer +get_bz_fringep +get_bfieldr +get_bfieldp +b_pancaker +b_pancakep +get_be_cavr +get_be_cavp +b_para_perpr +b_para_perpp +direction_vr +direction_vp +get_omega_spinr +get_omega_spinp +radiate_2_forcer +radiate_2_forcep +radiate_2_prober +radiate_2_probep +radiate_2r +radiate_2p +crossp +quaternion_r_to_matrix +quaternion_8_to_matrix +feval_sagan_prober +feval_sagan_probep +rk2_sagan_prober +rk2_sagan_probep +rk4_sagan_prober +rk4_sagan_probep +rk6_sagan_prober +rk6_sagan_probep +feval_cav_bmad_prober +feval_cav_bmad_probep +rk2bmad_cav_prober +rk2bmad_cav_probep +rk4bmad_cav_prober +rk4bmad_cav_probep +rk6bmad_cav_prober +rk6bmad_cav_probep +feval_teapot_quar +feval_teapot_quap +rk2_teapot_prober +rk4_teapot_prober +rk6_teapot_prober +rk2_teapot_probep +rk4_teapot_probep +rk6_teapot_probep +inte_pancake_prober +inte_pancake_probep +rk4_pancake_prober +rk4_pancake_probep +rk6_pancake_prober +rk6_pancake_probep +feval_pancake_prober +feval_pancake_probep +inte_cav4_prober +inte_cav4_probep +inte_teapot_prober +inte_teapot_probep +inte_tktf_prober +inte_tktf_probep +inte_strex_prober +inte_strex_probep +inte_sol5_prober +inte_sol5_probep +inte_dkd2_prober +rad_spin_force_prober +rad_spin_force_probep +radiate_envelope +rad_spin_qua_prober +rad_spin_qua_probep +kick_stochastic_before +kick_stochastic_after +clear_compute_stoch_kick +inte_dkd2_probep +push_quaternionr +push_quaternionp +int_sagan_prober +int_sagan_probep + +File: code/Sk_link_list.f90 +s_fibre_bundle +it0 +it1 +it2 +it3 +it4 +it5 +it6 +it7 +it8 +it9 +kill +procedure +procedure +procedure +procedure +procedure +procedure +super_kill +procedure +alloc +procedure +procedure +procedure +copy +procedure +append +procedure +append_empty +procedure +move_to +procedure +procedure +procedure +procedure +find_patch +procedure +find_patch_bmad +procedure +find_pos +procedure +procedure +assignment +procedure +alloc_info +copy_info +kill_info +append_mad_like +kill_layout +append_fibre +append_clone +move_to_p +move_to_p_safe +move_to_name_old +move_to_partial +move_to_name_firstname +move_to_names +move_to_i +set_up +de_set_up +nullify_layout +line_l +ring_l +append_point +append_empty_fibre +append_not_so_empty_fibre +null_fibre +allocate_fibre +allocate_data_fibre +alloc_fibre +zero_fibre +super_zero_fibre +dealloc_fibre +super_dealloc_fibre +append_flat +check_need_patch +remove_patch +find_patch_p_new +find_patch_0 +find_patch_bmad_0 +set_up_universe +kill_last_layout +kill_universe +kill_layout_in_universe +find_pos_in_universe +move_to_layout_i +move_to_layout_name +de_set_up_universe +nullify_universe +append_empty_layout +locate_in_universe +find_pos_in_layout +unify_mad_universe +tie_mad_universe +guniverse_max_n +guniverse_max_node_n +move_to_name +null_thin +allocate_thin +nullify_node_layout +set_up_node_layout +append_empty_thin +allocate_node_frame +line_l_thin +ring_l_thin +dealloc_integration_node +kill_node_layout +de_set_up_orbit_lattice +kill_orbit_node1 +alloc_orbit_node1 +set_up_orbit_lattice +de_set_up_node_layout +move_to_integration_node +alloc_beam_beam_node +kill_beam_beam_node +assign_aperture +assign_one_aperture +toggle_one_aperture +turn_off_one_aperture +toggle_aperture +turn_off_aperture +turn_on_aperture + +File: code/Sl_family.f90 +s_family +el_to_elp +procedure +elp_to_el +procedure +copy +procedure +kill_para +procedure +add +procedure +put_aperture +procedure +procedure +remove_aperture +procedure +assignment +procedure +procedure +procedure +procedure +procedure +procedure +procedure +equal +procedure +copy +procedure +procedure +trans +procedure +procedure +procedure +translate +procedure +procedure +procedure +rotate +procedure +procedure +procedure +procedure +rotation +procedure +procedure +procedure +locate_mid_frame +locate_fibre +get_freq +get_loss +get_all +get_all_mad_like +locate_next_cav +locate_all_cav +set_freq +add_freq +addp_anbn +put_aperture_fib +put_aperture_fibt +remove_aperture_fib +layout_work +fibre_work +work_fibre +alloc_s_aperture +kill_s_aperture +copy_fibre +find_affine_siamese +find_frame_siamese +find_affine_girder +find_frame_girder +extract_girder_frame +translate_girder +translate_siamese +translate_magnet +rotate_magnet +rotate_siamese +rotate_girder +translate_layout +translate_fibre +rotate_layout +rotate_fibre +fibre_bl +bl_fibre +copy_layout +copy_layout_ij +copy_layout_i +kill_para_l +fibre_pol +el_pol_force +scan_for_polymorphs +el_to_elp_l +elp_to_el_l + +File: code/Sm_tracking.f90 +s_tracking +compute +track +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +track_fibre_single +procedure +procedure +track_flag +procedure +procedure +procedure +procedure +patch_fib +procedure +procedure +mis_fib +procedure +procedure +track_layout_flag_r1f +track_layout_flag_p1f +track_layout_flag_r1 +track_layout_flag_p1 +track_layout_flag_rf +track_layout_flag_pf +track_fibre_based_r +track_fibre_based_p +track_layout_flag_r +track_layout_flag_p +track_fibre_r +track_fibre_p +patch_fibr +patch_fibp +mis_fibr +mis_fibp + +File: code/Sma0_beam_beam_ptc.f90 +beam_beam_ptc +ccperrf +procedure +procedure +bbkickx +procedure +procedure +bbkickn +procedure +procedure +bbkick +procedure +procedure +patch_bb +procedure +procedure +bbpatch_spin +procedure +procedure +rad_spin_bb_probe +procedure +procedure +patch_bbx +procedure +procedure +get_field_bb +procedure +procedure +rot_spin_x +procedure +procedure +rot_spin_y +procedure +procedure +rot_spin_z +procedure +procedure +get_omega_spin_bb +procedure +procedure +rot_spin_yr +rot_spin_xr +rot_spin_zr +rot_spin_yp +rot_spin_xp +rot_spin_zp +patch_bbr +patch_bbp +bbpatch_spinr +bbpatch_spinp +patch_bbxr +patch_bbxp +bbkickr +bbkickp +get_field_bbr +get_field_bbp +get_omega_spin_bb_r +get_omega_spin_bb_p +rad_spin_bb_prober +rad_spin_bb_probep +bbkicknr +ccperrfr +bbkicknp +ccperrfp +bbkickxr +bbkickxp + +File: code/Sma_multiparticle.f90 +ptc_multiparticle +dobb +assignment +procedure +track_node_single_qua +procedure +procedure +track_node_single +procedure +procedure +track_node_single +procedure +convert_bmad_to_ptc +procedure +procedure +procedure +procedure +convert_ptc_to_bmad +procedure +procedure +procedure +procedure +drift_back_to_position +procedure +procedure +track_fibre_front +procedure +procedure +track_fibre_back +procedure +procedure +operator +procedure +operator +procedure +modulate +procedure +procedure +track_modulation +procedure +procedure +three_d_info +survey +procedure +procedure +procedure +find_patch_with_survey +procedure +modulate_r +do_ramping_r +do_ramping_p +set_all_ramp +set_ramp +modulate_p +track_modulation_r +track_modulation_p +fuzzy_eq +fuzzy_neq +move_to_s +track_fibre_frontr +track_fibre_frontp +track_fibre_backr +track_fibre_backp +track_node_singlev +track_node_single_quar +track_node_single_quap +track_node_singler +track_node_singlep +track_node_single_newr +track_node_single_newp +make_node_layout +sum_ds_ac +make_node_layout_2 +stat_node_layout +drift_to_time +driftr_back_to_position +driftp_back_to_position +alloc_three_d_info +s_locate_beam_beam +locate_beam_beam +convert_bmad_to_ptcar +convert_bmad_to_ptcap +convert_ptc_to_bmadar +convert_ptc_to_bmadap +convert_bmad_to_ptcr +convert_bmad_to_ptcp +convert_ptc_to_bmadr +convert_ptc_to_bmadp +in_noncanonical_units +in_canonical_units +survey_exist_planar_ij_new +survey_integration_layout +survey_fibre_new +survey_exist_planar_l_new +survey_integration_fibre +survey_integration_node_p +survey_integration_fringe +survey_integration_node_case0 +survey_integration_special_superdrift +adjust_cav_frame +adjust_pancake_frame +adjust_abell_frame +mis_survey +set_aperture_all_case0 +misalign_fibre_equal +move_frames +misalign_fibre +print_magnet_framet +mad_misalign_fibre +misalign_girder +misalign_siamese +find_patch_0_survey +convert_mis_to_patch + +File: code/Sn_mad_like.f90 +mad_like +el_list +operator +procedure +procedure +procedure +procedure +operator +procedure +procedure +operator +procedure +procedure +assignment +procedure +procedure +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +el_q_for_madx +procedure +octupole +procedure +sextupole +procedure +quadrupole +procedure +helical +procedure +solenoid +procedure +smisixtract +procedure +single_lens +procedure +multipole_block +procedure +superdrift +procedure +multipole +procedure +hkicker +procedure +vkicker +procedure +kicker +procedure +rbend +procedure +sbend +procedure +gbend +procedure +drift +procedure +marker +procedure +rcollimator +procedure +ecollimator +procedure +monitor +procedure +hmonitor +procedure +vmonitor +procedure +instrument +procedure +rfcavity +procedure +twcavity +procedure +elseparator +procedure +wiggler +procedure +pancake +procedure +abell_dragt +procedure +set_madx_ +r_r +checksmi +a10 +b10 +a9 +b9 +a8 +b8 +a7 +b7 +a6 +b6 +a5 +b5 +a4 +b4 +a3 +b3 +a2 +b2 +a1 +b1 +el_0 +smitilt +bltilt +hkicktilt +vkicktilt +gkicktilt +quadtilt +multipoletilt +helicaltilt +soltilt +sexttilt +octutilt +sbtilt +abelltilt +pottilt +gbtilt +recttilt +rectaetilt +drft +superdrft +rcolit +ecolit +monit +hmonit +vmonit +instrumen +mark +changeref +rfcavityl +twcavityl +elsestilt +wigglerl +nullify_for_madx +el_q +clean_up +set_pointers +set_mad +set_madx +get_energy +get_gam +get_one +set_mad_v +set_pancake_constants +set_abell_constants +set_metc_for_pancake +pancake_tilt +pancake_bmad +pancake_bmad_empty +set_tree_g_pancake +allocate_for_pancake +kill_for_pancake +equal_l +set_up_mad +equal_l_l +add_ee +add_eb +add_be +add_bb +sub_bb +mul_b +mul_e +unary_subb +makeitc +makeits + +File: code/So_fitting.f90 +s_fitting +find_orbit +procedure +lattice_get_chrom +lattice_get_tune +compute_a_4d +compute_map_general +compute_map_4d +fill_beta +comp_longitudinal_accel +comp_linear2 +lattice_fit_tune_gmap_auto +lattice_fit_tune_gmap +lattice_fit_chrom_gmap +lattice_fit_chrom_gmap2 +lattice_fit_chrom_gmap1 +c_lattice_fit_chrom_gmap1 +lattice_print_res_from_a +lattice_random_error_new +toggle_verbose +find_orbit_layout +find_orbit_layout_noda +fit_all_bends +fit_bare_bend +track_aperture +point_m_u +thin_lens_resplit +recut_kind7_one +recut_kind7 +dipole_check_step +skickt +prot_drift +check_bend +thin_lens_restart +print_bn_an +read_bn_an +reverse_beam_line +putfringe +putbend_fringe +mess_up_alignment +mess_up_alignment_name +sigma_of_alignment +dyn_aper +dyn_aperalex + +File: code/Sp_keywords.f90 +madx_keywords +keywords +madx_survey +create_fibre_append +change_method_in_create_fibre +create_fibre +zero_key +print_pancake_field +print_pancake_field_integer +read_pancake_new +read_pancake_new_integer +track_g_pancake +switch_layout_to_cavity +switch_to_cavity +switch_to_kind7 +print_new_flat +print_universe +print_universe_girders +read_universe_girders +print_universe_siamese +read_universe_siamese +read_universe_database +read_lattice_append +read_lattice +against_the_method +check_mis_presence +read_elementlist +fib_fib0 +patch_patch0 +chart_chart0 +mc_mc0 +el_el0 +print_elementlist +cav4_cav40 +hel_hel0 +wig_wig0 +tcav4_tcav40 +sol5_sol50 +thin3_thin30 +tp10_tp100 +ab_ab0 +k16_k160 +ap_aplist +r_ap_aplist +print_universe_pointed +read_universe_pointed +print_initial_chart +read_initial_chart +create_dna +zero_ele0 +zero_fib0 +zero_chart0 +zero_magl0 +zero_patch0 +specify_element_type + +File: code/Spb_fake_gino_sub.f90 +call_gino +open_gino_graphics +close_gino_graphics + +File: code/Sra_fitting.f90 +s_fitting_new +fibre_monitor_data +find_orbit_tpsa_x +procedure +procedure +find_orbit_probe_tpsa_x +procedure +procedure +find_orbit_x +procedure +procedure +find_orbit_probe_x +procedure +procedure +lattice_fit_tune_chrom_gmap_new +lattice_fit_tune_gmap_rad +find_time_patch +compute_linear_one_magnet_maps +compute_linear_one_turn_maps +special_alex_main_ring +special_alex_main_ring_auto +special_alex_main_ring1 +lattice_linear_res_gmap +special_alex_main_ring_removal +alex_track_monitors +invert_monitors +alex_mom_monitors +alex_apply_a_on_data +alex_count_monitors +alex_count_jparc_monitors +alex_read_r_jparc +scale_bpm +alex_average_r_jparc +alloc_fibre_monitor_data +kill_fibre_monitor_data +alex_mom_real_monitors +alex_print_xf +alex_read_r +lattice_fit_bump_rcs +lattice_fit_bump_min_rcs +find_orbit_layout_da +find_orbit_layout_da_object +find_orbit_layout_noda +find_orbit_layout_noda_object +find_orbit_layout_noda_object_orig +find_orbit_tapering +taper +untaper +gettot +is_orbit_stable + +File: code/Ss_fake_mad.f90 +madx_ptc_module +ptc_ini +ptc_ini_no_append +ptc_end + +File: code/St_pointers.f90 +pointer_lattice +script +procedure +hermite +set_lattice_pointers +read_ptc_command +locate_b_b +compute_polarisation +get_polarisation +radia_new +totalpath_cavity +power_cavity +zero_sex +charge_dir +remove_drifts +print_frames +print_frame +printframes +universe_max_n +universe_max_node_n +read_ptc_rays +eval_new +interpolate +interpolate_2d +eval_g +track_hermite +track_hermite_invert2 +alloc_hermite +compute_hermite +compute_partially_inverted_location +track_hermite_linear_inv +track_hermite_linear +track_hermite_linear_inv_8 +fill_hermite +fill_hermite_gen +kill_hermite +symplectify_for_oleksii +phase_advance +read_ptc_command77 +gino_ptc_command77 +read_mad_command77 +my_user_routine1 + +File: code/b_da_arrays_all_pancake.f90 +da_arrays_pancake +alloc_all +alloc_ +dealloc_all +danum +danum0 + +File: code/c_dabnew_pancake.f90 +dabnew_pancake +dapri_pancake +dapri77_pancake +darea77_pancake +darea_pancake +dacmu_pancake +damul_pancake +daadd_pancake +dapok_pancake +davar_pancake +alloc_pancake +daall0_pancake +dadal1_pancake +kill_pancake +init_pancake +mtree_pancake +ppushgetn_pancake +dacon_pancake +dacop_pancake +dacdi_pancake +daini +dallsta +daallno1 +daall +daall1 +daall0 +dadal +dadal1 +count_da +davar +dacon +danot +daeps +dapek +dapok +daclr +dacop +daadd +datrunc +dasub +damul +damult +dadiv +dasqr +dasqrt +dacad +dacsu +dasuc +dacmu +dacmut +dacdi +dadic +dacma +dalin +dalint +dafun +dafunt +daabs +dacct +dacctt +mtree +ppushprint +ppushstore_pancake +ppushgetn +ppush +ppush1 +dainv +dainvt +dapin +dapint +dader +dadert +dacfur +dacfurt +dacfu +dacfui +dacfuit +dacfut +dapri +dapri77 +dashift +darea +darea77 +dadeb +dainf +dapac +dachk +damch +dadcd +dancd +datra +hash +dehash +daran +dacycle +daclean + +File: code/d_lielib.f90 +lielib_yang_berz +lieinit +flowpara +pertpeek +inputres +respoke +liepeek +etallnom +etall +etall1 +etcct +getcct +trx +gtrx +trxflo +simil +etini +etinv +etpin +getinv +dapokzer +davar0 +comcfu +take +taked +daclrd +dacopd +datruncd +dacmud +dalind +daread +daprid +daflo +daflod +intd +difd +expflo +expflod +facflo +facflod +fexpo +etcom +etpoi +exp1d +expnd2 +flofacg +flofac +liefact +mapnorm +gettura +setidpr +mapnormf +get_flip_info +flip +flip_real_array +flip_resonance +flipflo +flip_i +gofix +orderflo +nuanaflo +dhdjflo +h2pluflo +rotflo +rotiflo +hyper +ctor +rtoc +ctorflo +rtocflo +ctord +rtocd +resvec +reelflo +midbflo +mapflol +mulnd2 +movearou +movemul +initpert +cpart +ctoi +itoc +etrtc +etctr +etcjg +eig6 +ety +etyt +ety2 +etdiv +sympl3 +diagonalise_envelope_a +mapflol6s +eig6s +movearous +movemuls + +File: code/h_definition.f90 +definition +i_ +kind +i_ +kind +case1 +case2 +case0 +casep1 +casep2 +caset +casetf1 +casetf2 +wiggler_suntao +ndim2t +sub_taylor +taylor +universal_taylor +c_universal_taylor +complextaylor +real_8 +quaternion +complex_quaternion +quaternion_8 +complex_8 +spinor +spinor_8 +dascratch +dalevel +damap +gmap +vecfield +pbfield +tree +dragtfinn +reversedragtfinn +onelieexponent +normalform +genfield +pbresonance +vecresonance +taylorresonance +tree_element +rf_phasor +rf_phasor_8 +probe +probe_8 +temporal_probe +temporal_beam +c_taylor +c_dascratch +c_dalevel +c_spinmatrix +c_spinor +c_yu_w +c_quaternion +c_damap +c_vector_field +c_vector_field_fourier +c_factored_lie +c_normal_form +c_ray +fibre_array +node_array +in_bmad_units +in_ptc_units +alloc_fibre_array +kill_fibre_array +reset_aperture_flag +produce_aperture_flag + +File: code/i_tpsa.f90 +tpsa +i4b +dp +nbi +procedure +procedure +procedure +procedure +nbi_etienne +procedure +procedure +procedure +procedure +nbi_david +procedure +procedure +procedure +procedure +assignment +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +clean +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +print_for_bmad_parser +procedure +print +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +operator +procedure +procedure +operator +procedure +operator +procedure +operator +procedure +procedure +procedure +operator +procedure +procedure +operator +procedure +operator +procedure +procedure +procedure +operator +procedure +operator +procedure +operator +procedure +abs +procedure +procedure +procedure +abs_square +procedure +procedure +dabs +procedure +exp +procedure +procedure +dexp +procedure +cexp +procedure +cdexp +procedure +cos +procedure +cdcos +procedure +dcos +procedure +ccos +procedure +cosh +procedure +dcosh +procedure +sin +procedure +cdsin +procedure +ccsin +procedure +dsin +procedure +sinh +procedure +dsinh +procedure +log +procedure +dlog +procedure +cdlog +procedure +clog +procedure +sqrt +procedure +dsqrt +procedure +atanh +procedure +tan +procedure +tanh +procedure +dtan +procedure +pek +procedure +pok +procedure +shiftda +procedure +cfu +procedure +full_abs +procedure +alloc +procedure +procedure +procedure +procedure +kill +procedure +procedure +procedure +procedure +alloctpsa +procedure +killtpsa +procedure +ass +procedure +set_1 +change_default_tpsa +set_in_tpsa +count_taylor +unaryaddq +unarysubq +invq +absq +absq2 +cunaryaddq +cunarysubq +cinvq +cabsq +cabsq2 +log_complex_quaternion +c_exp_quaternion +unaryadd +unarysub +maketree +allocda +a_opt +k_opt +allocdas +killda +killdas +equal +equalq +equalcq +equalcq_q +equalq_cq +equalqr +cequalqr +equalqi +cequalqi +dequal +requal +daabsequal +dequaldacon +equaldacon +iequaldacon +dexpt +full_abst +dtant +datanht +dcost +dsint +dsinht +dcosht +dtanht +dlogt +dsqrtt +mul +pbbra +getorder +cutorder +dputchar +dputint +dputint0 +getcharnd2s +getintnd2s +getintk +getchar +getint +getdiff +getintegrate +check_gtpsa +getdatra +powq +cpowq +pow +powr8 +powr +dmulsc +mulsc +imulsc +dscmul +scmul +iscmul +div +dscdiv +scdiv +iscdiv +ddivsc +divsc +idivsc +add +addq +subq +mulq +divq +caddq +csubq +cmulq +cmulqc +ccmulq +cmulqr +rcmulq +cdivq +daddsc +addsc +iaddsc +dscadd +scadd +iscadd +subs +dsubsc +subsc +isubsc +dscsub +scsub +iscsub +varf +varf001 +shift000 +pek0 +pok0 +pek000 +pok000 +taylor_ran +cfu000 +dacfu_gtpsa +cfu000_new +taylor_eps +getcharnd2 +getintnd2 +getintnd2t +taylor_cycle +taylor_cycle_dabnew +taylor_cycle_gtpsa +check_snake +charint +check_j +filter +filter_part +printq +cprintq +print_for_bmad_parse +pri +rea +kill_uni +null_uni +alloc_u +fill_uni_r +fill_uni +refill_uni +printunitaylor +crap1 +real_stop +ndum_warning_user +set_up +de_set_up +null_it +line_l +ring_l +append_da +insert_da +alloc_da +kill_dalevel +dealloc_dascratch +set_up_level +report_level +assign +deassign +asstaylor +ass0 +clean_taylor +clean_pbfield +clean_pbresonance +clean_damap +clean_vecfield +clean_vecresonance +clean_onelieexponent +clean_complextaylor +clean_gmap +etienne_bessel_ir +etienne_bessel_it +etienne_bessel_itr +etienne_bessel_irt +norm_bessel_ir +factorial +bessel_i0 +bessel_i1 +bessel_i +poly_eval +nbittaylortr +nbittaylorrt +nbittaylor +nbitreal +nbit +nbitrt +nbittr + +File: code/j_tpsalie.f90 +tpsalie +assignment +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +operator +procedure +operator +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +operator +procedure +dainput +procedure +procedure +procedure +procedure +procedure +read +procedure +procedure +procedure +procedure +procedure +daprint +procedure +procedure +procedure +procedure +procedure +procedure +print +procedure +procedure +procedure +procedure +procedure +procedure +checksymp +procedure +print_for_bmad +procedure +texp +procedure +procedure +procedure +procedure +exp +procedure +procedure +procedure +procedure +full_abs +procedure +alloc +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +alloctpsa +procedure +procedure +procedure +procedure +kill +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +killtpsa +procedure +procedure +procedure +procedure +assdamap +procedure +procedure +procedure +procedure +procedure +checkdamap +procedure +procedure +procedure +procedure +set_2 +mul_pbf_t +mul_vecf_t +mul_vecf_map +mul_pbf_map +set_in_tpsalie +alloctree +allocmap +allocgmap +allocvec +allocpb +killtree +killmap +killgmap +killvec +killpb +a_opt_damap +k_opt_damap +a_opt_gmap +k_opt_gmap +a_opt_vecfield +k_opt_vecfield +a_opt_pbfield +k_opt_pbfield +a_opt_tree +k_opt_tree +dareadtaylors +dareadtaylor +dareadmap +dareadvec +dareapb +daprintmap +print_for_bmad_parsem +daprintgmap +daprinttaylors +daprintvec +daprintpb +daprinttaylor +dabsmap +dpekmap +dpekgmap +dpokmap +dpokgmap +treemap +matrixtmapr +matrixmapr +mapmatrixr +maptaylors +taylorsmap +equalmap +equalgmap +equalgmapdamap +equaldamapgmap +identityequalmap +identityequalgmap +zeroequalmap +equalvec +equalvecpb +difd +equalpbvec +intd +equalpbpb +equalpbda +equaldapb +cutorder +cutorderg +cutorderpb +cutordervec +getordermap +getordergmap +getordervec +getorderpb +pushtree +pushmatrixr +pushmap +push1pol +push1polslow +concat +concatg +fpp_mad_tpsa_compose +concator +concatorg +trxflow +trxflo_g +trxpb +trxtaylor +trxgtaylor +trxtaylorc +trxgtaylorc +texpdf +texpdft +explieflo +expflot +expliepb +exppb +addmap +submap +dmulmapsc +mulmapsc +imulmapsc +scdmulmap +scmulmap +scimulmap +fpp_mad_tpsa_minv +fpp_mad_tpsa_pminv +powmap +gpowmap +gpowmaptpsa +powmap_inv +checksympo +checkmap +checkvec +checkpb +checktaylor +asspb +asstaylor +assvec +assmap +assgmap +daflo_g +daflod_g +expflo_g +facflod_g +facflo_g +taked_g +dacmud_g +expflod_g +dacopd_g + +File: code/k_tpsalie_analysis.f90 +tpsalie_analysis +init_tpsalie +procedure +procedure +assignment +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +alloc +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +kill +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +daprint +procedure +procedure +procedure +procedure +procedure +print +procedure +procedure +procedure +procedure +procedure +dainput +procedure +procedure +procedure +procedure +procedure +read +procedure +procedure +procedure +procedure +procedure +set_3 +df_map +map_df +fd_map +map_fd +go_to_fix_point +normalmap +mapnormal +oneexpmap +maponeexp +revdfmap +dfmap +resovec +vecreso +respb +pbres +resta +tares +mapdf +maprevdf +allocgen +killgen +equalgenmap +equalmapgen +pushgen +allocpbres +alloctares +allocvecres +allocdf +alloconelie +allocnormal +allocfd +killnormal +killonelie +killpbres +killtares +killvecres +killdf +killrevdf +daprintonelie +dareadonelie +daprintvecres +dareadvecres +daprintdf +dareaddf +daprintrevdf +dareadrevdf +daprintpbres +dareadpbres +init_map +kill_fpp +init_tpsa +daterminate +mapnormf_g +orderflo_g +nuanaflo_g +comcfu +reelflo_g +ctord_g +ctor_g +ctoi_g +etctr_g +dalin_g +etcjg_g +dacop_g +trx_g +rtoc_g +itoc_g +cpart_g +etrtc_g +dalind_g +etini_g +ctorflo_g +rtocflo_g +daclrd_g +simil_g +gofix_g +datruncd_g +rotiflo_g +rtocd_g +h2pluflo_g +resvec_g +midbflo_g +dhdjflo_g + +File: code/l_complex_taylor.f90 +complex_taylor +assignment +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +operator +procedure +procedure +operator +procedure +procedure +operator +procedure +operator +procedure +operator +procedure +procedure +procedure +operator +procedure +operator +procedure +procedure +operator +procedure +procedure +procedure +aimag +procedure +dimag +procedure +dble +procedure +dreal +procedure +cmplx +procedure +dcmplx +procedure +conjg +procedure +abs +procedure +dabs +procedure +log +procedure +dlog +procedure +clog +procedure +cdlog +procedure +atan +procedure +procedure +datan +procedure +procedure +asin +procedure +procedure +dasin +procedure +procedure +acos +procedure +procedure +dacos +procedure +procedure +tan +procedure +dtan +procedure +cos +procedure +cdcos +procedure +ccos +procedure +dcos +procedure +sin +procedure +cdsin +procedure +csin +procedure +dsin +procedure +exp +procedure +dexp +procedure +cexp +procedure +cdexp +procedure +cosh +procedure +dcosh +procedure +sinh +procedure +dsinh +procedure +tanh +procedure +dtanh +procedure +sqrt +procedure +dsqrt +procedure +cdsqrt +procedure +pok +procedure +pek +procedure +full_abs +procedure +read +procedure +dainput +procedure +alloc +procedure +procedure +procedure +kill +procedure +procedure +procedure +ass +procedure +set_4 +dimagt +drealt +getcharnd2 +getintnd2 +getcharnd2s +getintnd2s +dputchar +dputint +varco +varco1 +getorder +cutorder +getchar +getint +pow +powr +powr8 +getdiff +getdatra +alloccomplex +alloccomplexn +a_opt +k_opt +inputcomplex +killcomplex +killcomplexn +mul +div +cscdiv +dscdiv +scdiv +iscdiv +idivsc +divsc +ddivsc +cdivsc +cscmul +ctmul +cmult +caddt +ctadd +csubt +ctsub +cdivt +ctdiv +dscmul +scmul +iscmul +cmulsc +dmulsc +mulsc +imulsc +equal +ctequal +tcequal +cequal +dequal +requal +cequaldacon +dequaldacon +equaldacon +iequaldacon +add +tadd +addt +tsub +subt +tmul +mult +tdiv +divt +csubsc +dsubsc +subsc +isubsc +cscsub +dscsub +scsub +iscsub +unarysub +subs +cscadd +caddsc +daddsc +addsc +iaddsc +dscadd +scadd +iscadd +unaryadd +inv +logtpsat +logtpsa +full_abstpsat +abstpsat +dcmplxt +conjgt +datant +datantt +dasintt +dasint +dacostt +dacost +tant +dtanht +dcost +dcosht +dsint +dsinht +exptpsat +dsqrtt +exptpsa +assc +kill_tpsa +init_map_c +init_tpsa_c +set_in_complex +getintk +pekc +pokc + +File: code/m_real_polymorph.f90 +polymorphic_taylor +i4b +arcsin_x +procedure +procedure +assignment +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +operator +procedure +operator +procedure +procedure +exp +procedure +invqq +procedure +dexp +procedure +cexp +procedure +cdexp +procedure +cos +procedure +ccos +procedure +cdcos +procedure +dcos +procedure +atanh +procedure +tan +procedure +dtan +procedure +tand +procedure +dtand +procedure +cosd +procedure +dcosd +procedure +sin +procedure +cdsin +procedure +ccsin +procedure +dsin +procedure +sind +procedure +dsind +procedure +norm_bessel_i +procedure +nbi +procedure +log +procedure +dlog +procedure +cdlog +procedure +clog +procedure +sqrt +procedure +dsqrt +procedure +abs +procedure +procedure +abs_square +procedure +dabs +procedure +atan +procedure +datan +procedure +atan2 +procedure +procedure +datan2 +procedure +procedure +atan2d +procedure +datan2d +procedure +atand +procedure +datand +procedure +asin +procedure +dasin +procedure +acos +procedure +dacos +procedure +cosh +procedure +dcosh +procedure +sinh +procedure +dsinh +procedure +tanh +procedure +dtanh +procedure +full_abs +procedure +morph +procedure +sinhx_x +procedure +procedure +sinx_x +procedure +procedure +cos_quaternion +procedure +procedure +sin_quaternion +procedure +procedure +daprint +procedure +procedure +procedure +procedure +procedure +print +procedure +procedure +procedure +procedure +procedure +alloc +procedure +procedure +procedure +procedure +kill +procedure +procedure +procedure +procedure +procedure +procedure +reset +procedure +procedure +make_it_knob +procedure +kill_knob +procedure +ass +procedure +set_5 +make_it_knobr +kill_knobr +polymorpht +getcharnd2 +getintnd2 +getchar +getint +getorder +cutorder +greatereq +dgreatereqsc +dscgreatereq +greatereqsc +scgreatereq +igreatereqsc +iscgreatereq +greaterthan +igreatersc +iscgreater +dgreatersc +dscgreater +greatersc +scgreater +lessthan +dlessthansc +dsclessthan +lessthansc +sclessthan +ilessthansc +isclessthan +lesseq +dlesseqsc +dsclesseq +lesseqsc +sclesseq +ilesseqsc +isclesseq +eq +deqsc +dsceq +eqsc +sceq +ieqsc +isceq +neq +dneqsc +dscneq +neqsc +scneq +ineqsc +iscneq +dexpt +arcsin_xr +arcsin_xt +arcsin_xp +asin_coeff_set +abst +pabs +full_abst +dtant +dtandt +absoftdtandr +dcost +dcosdt +absoftdcosdr +dsint +dsindt +absoftdsindr +dlogt +dsqrtt +pow +powr +powr8 +unaryadd +unarysub +nbip +add +addq +absq2 +absq +subq +invq +powq +mulq +subs +daddsc +dscadd +dsubsc +dscsub +addsc +scadd +subsc +scsub +iaddsc +iscadd +isubsc +iscsub +mul +div +dmulmapconcat +dmulsc +dscmul +ddivsc +dscdiv +mulsc +scmul +divsc +scdiv +imulsc +iscmul +idivsc +iscdiv +printpolyq +printpoly +print6 +printdouble +printsingle +resetpoly +resetpolyn +resetpoly_r +resetpoly_rn +resetpoly_r31 +resetpoly_r31n +resetpoly0 +k_opt +resetpolyn0 +allocpoly +allocquaternion +killquaternion +allocquaternionn +killquaternionn +a_opt_quaternion +k_opt_quaternion +a_opt +allocpolyn +init_map_p +init_tpsa_p +set_in_polyp +equal2d +equal1d +equalq +equalq_r_8 +equalq_8_r +equalq_r +equal +complexreal_8 +realequal +singleequal +taylorequal +equaltaylor +real_8univ +univreal_8 +mequaldacon +dequaldacon +iequaldaconn +equaldacon +iequaldacon +assp +assp_no_master +datant +datanht +datandt +absoftdatandr +datan2t +datan2tt +datan2dt +absoftdatan2dr +dasint +dacost +dcosht +dsinht +dtanht +mapreal_8 +normal_p +real_8map +varfk1 +varfk2 +sinh_hr +sin_hr +sinx_xt +sin_quaternionr +sin_quaternionp +cos_quaternionr +cos_quaternionp +sinhx_xt +clean_real_8 + +File: code/n_complex_polymorph.f90 +polymorphic_complextaylor +init +procedure +procedure +assignment +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +operator +procedure +procedure +procedure +operator +procedure +operator +procedure +procedure +aimag +procedure +dimag +procedure +real +procedure +dreal +procedure +dble +procedure +cmplx +procedure +dcmplx +procedure +exp +procedure +dexp +procedure +cexp +procedure +cdexp +procedure +cos +procedure +cdcos +procedure +dcos +procedure +ccos +procedure +sin +procedure +cdsin +procedure +ccsin +procedure +dsin +procedure +log +procedure +dlog +procedure +cdlog +procedure +clog +procedure +sqrt +procedure +dsqrt +procedure +cdsqrt +procedure +abs +procedure +dabs +procedure +morph +procedure +conjg +procedure +alloc +procedure +procedure +kill +procedure +procedure +procedure +procedure +reset +procedure +procedure +make_it_knob +procedure +kill_knob +procedure +ass +procedure +set_6 +polymorpht +set_da_pointers +init_map_cp +init_tpsa_cp +set_in_poly +resetpoly +resetpolyn +resetpoly0 +getcharnd2 +getintnd2 +getchar +getint +getorder +cutorder +a_opt +k_opt +resetpolyn0 +resetpoly_r +resetpoly_rn +allocpoly +allocpolyn +equal +equalrp +rpequal +drealt +dimagt +dcmplxt +complexequal +equalcomplext +complextequal +dequaldacon +equaldacon +iequaldacon +cequaldacon +add +unaryadd +daddsc +caddsc +dscadd +cscadd +addsc +scadd +iaddsc +iscadd +subs +unarysub +dsubsc +dscsub +csubsc +cscsub +subsc +scsub +isubsc +iscsub +mul +pmul +mulp +padd +addp +psub +subp +pdiv +divp +cmulsc +cscmul +cpmulsc +cpscmul +cpaddsc +cpscadd +cpsubsc +cpscsub +cpdivsc +cpscdiv +dmulsc +dscmul +mulsc +scmul +imulsc +iscmul +div +ddivsc +dscdiv +cdivsc +cscdiv +divsc +scdiv +idivsc +iscdiv +pow +powr +powr8 +dexpt +conjgt +dcost +dsint +dlogt +dsqrtt +abst +asscp +make_it_knobc +kill_knobc +varck1 +varck2 +clean_complex_8 + +File: code/o_tree_element.f90 +tree_element_module +nfac +assignment +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +probe_quaternion_to_matrix +procedure +procedure +operator +procedure +procedure +procedure +operator +procedure +operator +procedure +procedure +procedure +operator +procedure +procedure +operator +procedure +print +procedure +procedure +procedure +procedure +procedure +read +procedure +procedure +alloc +procedure +procedure +procedure +procedure +procedure +kill +procedure +procedure +procedure +procedure +track +procedure +procedure +trackg +procedure +procedure +kill +procedure +procedure +average +procedure +daddsco +scdaddo +real6real_8 +real_8real_8 +real_8real6 +copy_tree +copy_tree_n +null_tree +alloc_tree +set_tree +set_tree_g +track_tree_g +track_treep_g +kill_tree +kill_tree_n +track_tree +track_treep +dainput_special6 +equal_identity_spinor_8 +equal_identity_spinor_8_r3 +equal_identity_spinor +equal_probe_real6 +equal_probe8_real6 +equal_probe8_probe8 +equal_rf8_rf8 +equal_rf8_rf +equal_rf_rf8 +equal_probe8_probe +equal_probe_probe8 +equal_probe_probe +equal_identity_probe +equal_identity_probe_8 +equal_spinor8_spinor8 +equal_spinor_spinor8 +equal_spinor8_spinor +equal_damap_ray8 +probe_quaternion_to_matrixr +probe_quaternion_to_matrixp +print_probe +print_probe8 +print_rf_phasor_8 +print_rf_phasor +print_spinor_8 +read_spinor_8 +read_probe8 +norm_spinor_8 +alloc_spinor_8 +alloc_probe_8 +alloc_rf_phasor_8 +kill_spinor_8 +kill_probes_8 +alloc_probes_8 +kill_probe_8 +kill_rf_phasor_8 +dot_spinor +dot_real +make_spinor_basis +realdp_spinor +sub_spinor +cross_spinor +cross_real +cross_spinor8 +dot_spinor_8 +check_rad +r_average +clean_spinor_8 +number_mon +mul_fac +make_fac +pos_mon +pos_no +find_exp + +File: code/Ci_tpsa.f90 +c_tpsa +ndim2t +compute_lattice_functions +procedure +procedure +abs_square +procedure +abs +procedure +assignment +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +assignment +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +operator +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +operator +procedure +procedure +operator +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +operator +procedure +procedure +operator +procedure +operator +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +operator +procedure +procedure +checksymp +procedure +q_part +procedure +c_phasor +procedure +ci_phasor +procedure +clean +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +c_simil +procedure +procedure +texp_inv +procedure +exp_inv +procedure +real +procedure +aimag +procedure +cget_field_c_universal_taylor +procedure +get_field_c_universal_taylor +procedure +exp +procedure +procedure +procedure +procedure +procedure +procedure +procedure +makequaternion +procedure +makeso3 +procedure +procedure +average +procedure +iexp +procedure +texp +procedure +procedure +procedure +procedure +procedure +procedure +procedure +abs +procedure +dabs +procedure +exp +procedure +dexp +procedure +cexp +procedure +cdexp +procedure +log +procedure +procedure +procedure +procedure +cos +procedure +cdcos +procedure +dcos +procedure +ccos +procedure +sin +procedure +cdsin +procedure +ccsin +procedure +dsin +procedure +sqrt +procedure +tan +procedure +dtan +procedure +c_pek +procedure +c_pok +procedure +shiftda +procedure +cfu +procedure +full_abs +procedure +daread +procedure +procedure +procedure +procedure +procedure +procedure +read +procedure +procedure +procedure +procedure +procedure +procedure +daprint +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +print +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +daprint +procedure +procedure +procedure +print +procedure +procedure +procedure +alloc +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +alloc_nn +procedure +kill_nn +procedure +matmul_nn +procedure +matmulr_nn +procedure +procedure +kill +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +alloctpsa +procedure +killtpsa +procedure +ass +procedure +alloc +procedure +procedure +kill +procedure +procedure +get_rf +c_get_indices +locally_set_da_pointers +c_count_taylor +unaryadd +unarysub +unarysub_vec +unarysub_q +unarysub_spinor +normalise_spinor +orthogonalise_spin_matrix +dotc_spinor +c_maketree +c_allocda +alloc_c_quaternion +kill_c_quaternion +c_a_opt +k_opt +a_opt_c_damap +k_opt_c_damap +a_opt_c_vector +k_opt_c_vector +c_allocdas +c_killda +c_killdas +alloc_c_damap +alloc_c_damaps +alloc_c_yu_w +kill_c_yu_w +alloc_c_vector_field +alloc_c_factored_lie +alloc_c_normal_form +kill_c_normal_form +kill_c_factored_lie +kill_c_damap +kill_c_damaps +kill_c_vector_field +alloc_c_spinmatrix +alloc_c_spinor +kill_c_spinor +kill_c_spinmatrix +c_real +c_aimag +equalc_t +equalt_c +equalc_ray_ray +equalc_ray_r6 +equalc_ray_r6r +equalc_r6_ray +equalc_t_ct +equalc_ct_c +equalc_cmap_map +equalc_map_cmap +equal_c_spinmatrix_probe +equal_probe_c_spinmatrix +equal_c_spinmatrix_3_by_3 +equal_3_by_3_c_spinmatrix +equal_3_by_3_probe +equal_probe_3_by_3 +equalc_cvec_vec +equalc_cspinor_cspinor +equalc_spinor_c_quaternion +equalc_quaternion_c_spinor +equalc_spinor_cspinor +equalc_cspinor_spinor +c_dpekmap +c_dpokmap +equal +equal_map_real8 +equal_map_complex8 +equal_real8_map +equal_complex8_map +equal_c_tayls +equalspinmatrix +cdequal +dequal +requal +daabsequal +cdequaldacon +dequaldacon +dequaldacons +equaldacon +iequaldacon +dexpt +c_logt +flatten_c_factored_lie_r +flatten_c_factored_lie +c_logf_spin +c_logf +c_logc +get_log +full_abst +dtant +dcost +dsint +sqrtt +mul +pbbra +cpbbra +liebraquaternion +liebra +getorder +getordermap +getorderquaternion +getorderspinmatrix +from_phasor +to_phasor +cutorder +cutordermap +cutordervec +cutorderspin +cutorderquaternion +cutorderspinor +dputchar +dputcharr +dputint +dputintr +c_dputint0 +c_dputint0r +getcharnd2s +getintnd2s +getintk +getchar +getint +getintmat +getdiff +getdiff_universal +getintegrate +getpb +cgetpb +getpb_from_transverse +derive +getvectorfield +getvectorfield_universal +cgetvectorfield_universal +cgetvectorfield +getdatra +pow +cdmulsc +dmulsc +mulsc +imulsc +cdscmul +dscmul +scmul +iscmul +div +cdscdiv +dscdiv +scdiv +iscdiv +cddivsc +ddivsc +divsc +idivsc +add +addq +absq2 +absq +mulq +mulcq +subq +c_invq +powq +powql +equalq +equalq_c_r +equalq_r_c +equalql_i +equalql_r +qua_ql +equal_c_l_f +compute_lattice_functions_2 +compute_lattice_functions_1 +equalql_c_spin +equalql_q +equalql_cmap +equalcmap_ql +equalq_ql +equal_c_quaternion_complex_quaternion +equal_complex_quaternion_c_quaternion +equalql_ql +print_ql +inv_symplectic66 +inv_c_linear_map +inv_c_linear_map_symplectic +mulqdiv +mul_ql_m +mul_ql_cm +addql +mulql +subql +equalq_c_8 +equalq_8_c +equalq_r +equalq_i +matrix_to_quaternion_in_c_damap +quaternion_to_matrix_in_c_damap +c_linear_map_to_matrix +cdaddsc +daddsca +addsc +iaddsc +cdscadd +dscadd +scadd +iscadd +subs +cdsubsc +dsubsc +subsc +isubsc +cdscsub +dscsub +scsub +iscsub +varf +varf001 +shift000 +c_pek000 +c_pok000 +c_taylor_ran +c_cfu000 +c_taylor_eps +getcharnd2 +getintnd2 +getintnd2t +c_taylor_cycle +c_cycle +c_check_snake +check_j +check_harmonic_order +filter +c_filter_part +c_pri_c_ray +c_pri_map +print_e_ij +c_pri_quaternion +c_read_quaternion +c_read_map +c_pri_vec +c_pri_factored_lie +c_pri_spinmatrix +c_read_spinmatrix +c_full_norm_spin +c_norm_spin +c_pri_spinor +c_read_spinor +c_pri +printcomplex +printpoly +print6 +daprinttaylors +c_rea +dareadtaylors +c_crap1 +c_real_stop +c_ndum_warning_user +set_up +de_set_up +null_it +line_l +ring_l +append_da +insert_da +c_alloc_da +kill_dalevel +dealloc_dascratch +set_up_level +c_report_level +c_assign +c_deassign +c_asstaylor +c_ass0 +c_assmap +c_ass_quaternion +c_ass_spinmatrix +c_ass_spinor +c_ass_vector_field +c_norm +c_clean_yu_w +clean_matrix_complex +clean_vector_complex +clean_matrix +clean_vector +c_clean_taylor +c_clean_linear_map +c_clean_spinmatrix +c_clean_quaternion +c_clean_spinor +c_clean_damap +c_clean_cm +c_clean_c_factored_lie +c_clean_vector_field +clean_c_universal_taylor +c_bmad_reinit +c_init +init_map_all +c_init_all +c_etcct +c_etinv +c_etpin +transform_vector_field_by_map +c_concat +c_concat_tpsa +maketpsa +makeda +c_adjoint +c_adjoint_vec +c_spinmatrix_spinmatrix +c_spinmatrix_mul_cray +c_quaternion_mul_cray +c_spinmatrix_spinor +c_transpose +c_spinor_cmap +c_spinor_cmap_tpsa +c_complex_spinmatrix +c_spinmatrix_add_spinmatrix +c_spinmatrix_sub_spinmatrix +c_spinor_add_spinor +c_spinor_sub_spinor +c_taylor_spinor +c_complex_spinor +c_real_spinor +c_spinor_spinor +c_trxspinmatrix +c_trxquaternion +c_trxquaternion_tpsa +c_trxspinmatrixda +c_trxtaylor +c_trxtaylor_da +c_concat_spinor_ray +c_concat_spinmatrix_ray +c_concat_quaternion_ray +c_concat_c_ray +c_concat_map_ray +c_concat_vector_field_ray +c_bra_v_ct +c_bra_v_q +c_bra_v_dm +powmap +powmap_inv +pow_tpsamap +powmaps +c_equalmap +c_map_vec +c_equalvec +c_equalcray +c_identityequalmap +c_zero_constant_in_map +c_identityequalspin +c_identityequalspinor +c_identityequalvec +c_identityequalfactored +matrixmapr +r_matrixmapr +mapmatrixr +r_mapmatrixr +c_linear_a +c_linear_a_stoch +c_locate_planes +c_locate_modulated_magnet_planes +c_linear_ac_longitudinal +c_gofix +c_factor_map +c_canonise +c_full_factor_map +c_full_canonise +c_identify_resonance +c_full_factorise +c_normal_spin_linear_quaternion +c_normal_spin_linear +c_convert_spin +coast +c_normal_radiation +c_stochastic_kick +check_kernel +check_kernel_spin +check_resonance +check_resonance_spin +c_kernel +c_average +c_expflo_fac +c_expflo_fac_inv +c_add_map +c_sub_map +c_1_vf_q +c_1_map +c_add_vf +c_sub_vf +real_mul_map +real_mul_vec +complex_mul_vec +map_mul_vec_q +map_mul_vec +exp_ad +iexp_ad +c_expflo_map +c_expflo +c_flofacg +c_find_n0 +c_n0_to_nr +c_nr_to_n0 +c_q0_to_qr +c_qr_to_q0 +c_find_om_da +c_find_as +c_inv_as +c_find_spin_angle +c_log_spinmatrix +c_vector_field_quaternion +c_exp_spinmatrix +c_exp_quaternion +c_exp_vectorfield_on_quaternion +c_full_norm_damap +c_full_norm_spin_map +c_full_norm_spinmatrix +c_full_norm_quaternion +c_norm_spinmatrix +c_full_norm_vector_field +c_full_norm_spinor +c_full_norm_fourier +c_check_rad +c_check_rad_spin +exp_mat +norm_matrix +c_eig6 +ety +etyt +ety2 +etdiv +ohmi_factor +get_4d_disp0 +get_6d_disp +get_6d_ohmi +teng_edwards_a1 +c_int_partial +copy_damap_matrix +invert_22 +dagger_22 +matmulr_33 +matmult_33 +matmul_33 +alloc_33t +prin_33t +kill_33t +copy_matrix_matrix +extract_linear_from_normalised +extract_a0 +extract_only_a0 +extract_a1 +extract_only_a1 +extract_a2 +factor_ely_rest +c_remove_y_rot +produce_orthogonal +orthogonalise_ray +c_identityequalvecfourier +equal_c_vector_field_fourier +alloc_c_vector_field_fourier +kill_c_vector_field_fourier +transform_vector_field_fourier_by_map +exp_vector_field_fourier +ddt_vector_field_fourier +print_vector_field_fourier +print_poisson_bracket_fourier +bra_vector_field_fourier +add_vector_field_fourier +mulc_vector_field_fourier +c_clean_vector_field_fourier +c_clean_taylors +c_evaluate_vector_field_fourier +normalise_vector_field_fourier +check_resonance_ham +normalise_vector_field_fourier_factored +symplectify_for_sethna +nth_root +alloc_node_array_tpsa +kill_node_array_tpsa +kill_node_array +alloc_node_array +get_c_yu_w +transform_c_yu_w +c_fast_canonise +canonize_damping +extract_a0_mat +c_normal +set_tree_g_complex_zhe +set_tree_g_complex_zhe_as_is +fill_tree_element_line_zhe_outside_map +compute_lie_map_matrix_complex +compute_lie_map_matrix +create_taylor_vector +init_moment_map +create_moment_map_one +create_vector_field +create_moment_map_one_complex +create_moment_map +create_yu_map +norm_moment_matrix +matinvn +ludcmp_nr0n +lubksb_nr0n +copy_tree_into_tree_zhe +print_tree_element +print_tree_elements +read_tree_element +read_tree_elements +symplectify_for_zhe +furman_symp +furman_step +checksympn +cholesky_dt +c_kill_uni +c_kill_unis +c_null_uni +c_alloc_u +c_alloc_us +c_get_coeff +c_fill_uni_r +c_fill_uni +c_fill_uni_complextaylor +c_concat_c_uni_ray +c_concat_c_uni_rays +c_equal_uni +c_refill_uni +c_printunitaylors +c_printunitaylor_old +r_field_for_demin +d_field_for_demin +c_uni_reorder +d_mod_demin +check_re +c_normalf +c_normalg +c_normal_usual + +File: code/Se_status.f90 +s_status +kind0 +kind1 +kind2 +kind3 +kind4 +kind5 +kind6 +kind7 +kind8 +kind9 +kind10 +kind11 +kind12 +kind13 +kind14 +kind15 +kind16 +kind17 +kind18 +kind19 +kind20 +kind21 +kind22 +kind23 +kindfitted +kinduser1 +kinduser2 +kindhel +kindwiggler +kindmu +kindpa +kindsuperdrift +kindabell +drift_kick_drift +matrix_kick_matrix +kick_sixtrack_kick +b_cyl +operator +procedure +assignment +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +operator +procedure +make_states +procedure +procedure +check_aperture +procedure +procedure +check_s_aperture +procedure +procedure +check_s_aperture_out +procedure +procedure +init +procedure +print +procedure +alloc +procedure +procedure +procedure +kill +procedure +procedure +procedure +b2perp +procedure +procedure +orthonormalise +procedure +procedure +dtiltd +procedure +procedure +track_tree_g_complex +procedure +procedure +track_tree_probe_complex +procedure +procedure +null_a +alloc_a +dealloc_a +null_p +alloc_p +dealloc_p +kill_s_aperture +alloc_s_aperture +check_s_aperture_r +check_s_aperture_p +check_s_aperture_out_r +check_s_aperture_out_p +equal_a +equal_p +check_aperture_r +check_aperture_p +chkaperpolygon +minu +equaltilt +make_states_0 +print_curv +print_curv_elec +make_set_coef +clear_states +print_s +conv +make_states_m +update_states +equalt +equali +add +sub +para_rema +init_all +s_init +kill_map_cp +init_default +b2perpr +b2perpp +dtiltr_external +dtiltp_external +dd_p +set_s_b +set_s_e +set_s_b_mcmillan +set_s_e_mcmillan +get_bend_electric_coeff +get_bend_magnetic_potential +invert_laplace +make_coef +nul_coef +set_tree_g_complex +track_tree_probe_complexr +orthonormaliser +track_tree_probe_complexp_new +orthonormalisep +furman_rrt +track_tree_g_complexr +track_tree_g_complexp + +File: code/Si_def_element.f90 +s_def_element +equal +procedure +procedure +procedure +copy +procedure +procedure +procedure +procedure +add +procedure +procedure +zero_anbn +procedure +procedure +operator +procedure +operator +procedure +print +procedure +setfamily +procedure +procedure +null_element +procedure +procedure +put_aperture +procedure +procedure +assignment +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +track +procedure +procedure +trackr +trackp +work_0 +work_r +print_work +unaryw_w +elp_work +el_work +work_el +work_elp +mod_n +bl_0 +blpol_0 +bl_el +bl_elp +el_bl +elp_bl +elp_pol +elp_pol_force +elp_pol_print +copy_bl +unaryp_bl +setfamilyr +setfamilyp +zero_anbn_r +zero_anbn_p +transfer_anbn +restore_anbn +restore_anbn_single +force_restore_anbn_single +force_restore_anbn +change_settings_fibre +change_settings_magnetr +change_settings_magnetp +add_anbnr +add_anbnp +null_el +null_elp +zero_el +zero_elp +cop_el_elp +cop_elp_el +cop_el_el +copy_el_elp +copy_elp_el +copy_el_el +reset31 +find_energy +put_aperture_el +put_aperture_elp +remove_aperture_el +remove_aperture_elp +decode_element + +File: code/Sr_spin.f90 +ptc_spin +assignment +procedure +alloc +procedure +procedure +track_probe2 +procedure +procedure +track_probe +procedure +procedure +procedure +procedure +track_node_probe_old +procedure +procedure +track_node_probe +procedure +procedure +track_node_x +procedure +procedure +track_node_v +procedure +track_probe_x +procedure +procedure +procedure +procedure +propagate +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +patch_spin +procedure +procedure +mis_spin +procedure +procedure +dtilt_spin +procedure +procedure +track_spin_front +procedure +procedure +track_spin_back +procedure +procedure +track_rotate_spin +procedure +procedure +track_wedge_spin +procedure +procedure +track_fringe_spin_multipole +procedure +procedure +track_fringe_spin +procedure +procedure +superdrift_spin +procedure +procedure +push_spin +procedure +procedure +push_spin_fake_fringe +procedure +procedure +fluc_spin +push_spin_fake_fringer +push_spin_fake_fringep +push_spinr +push_spinp +quaternion_to_damps +track_node_layout_flag_pr_t12_r +track_node_layout_flag_pr_t12_p +track_node_layout_flag_pr_s12_r +track_node_layout_flag_pr_s12_p +track_layout_flag_probe_spin12r +track_layout_flag_probe_spin12p +track_layout_flag_spin12r_x +track_layout_flag_spin12p_x +track_layout_flag_spint12r_x +track_layout_flag_spint12p_x +track_fill_ref +track_node_layout_flag_spin_v +track_node_layout_flag_spinr_x +track_node_layout_flag_spinp_x +track_node_flag_probe_quar +track_node_flag_probe_quap +track_node_flag_probe_wrap_r +track_node_flag_probe_wrap_p +track_node_flag_probe_r +track_node_flag_probe_p +track_fringe_spinr +track_fringe_spinp +track_wedge_spinr +track_wedge_spinp +track_rotate_spin_r +track_rotate_spin_p +track_fringe_spin_multipole_r +track_fringe_spin_multipole_p +track_spin_frontr +track_spin_frontp +track_spin_backr +track_spin_backp +superdrift_spinr +superdrift_spinp +patch_spinr +patch_spinp +mis_spinr +mis_spinp +dtilt_spinr +dtilt_spinp +stroboscopic_average +track_time +ptc_global_x_p +locate_temporal_probe +fit_temporal_probe +fit_temporal_probe_nocav +fit_temporal_probe_cav +ptc_print +find_frac_r +find_as +find_n0 +equal_temporal +alloc_temporal_beam +alloc_temporal_probe +track_temporal_beam +fill_tree_element +fill_tree_element_line +fill_tree_element_line_zhe0 +fill_tree_element_line_zhe0_node +fill_tree_element_line_zhe +set_tree_g_complex_zhe0 +symplectify_for_zhe0 +extract_moments +checksympglobal + +File: code/Su_duan_zhe_map.f90 +duan_zhe_map +i_ +kind +bunch +internal_state +tree_element +spinor +quaternion +probe +operator +procedure +assignment +procedure +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +operator +procedure +procedure +operator +procedure +operator +procedure +print +procedure +procedure +operator +procedure +abs +procedure +abs_square +procedure +print +procedure +track_tree_probe_complex_ptc +procedure +alloc_tree +kill_tree +print_probe_zhe +equal_probe_real6_zhe +equal_probe_real6_bunch +alloc_bunch +kill_bunch +minu_zhe +print_s +conv +equalt_zhe +equali_zhe +add_zhe +sub_zhe +para_rema_zhe +track_tree_g_complex +print_tree_element +print_tree_elements_zhe +read_tree_element +read_tree_elements +track_tree_probe_complexr +orthonormaliser +track_tree_g_complexr +orthonormalise +track_tree_probe_complex_zhe +track_tree_probe_simple_zhe +track_miyajima_zhe +track_tree_probe_complex_zhe_no_orbital +track_tree_probe_complex_zhe_no_orbital_quaternion +change_ntot +gaussian_seed_zhe +nrmax_zhe +nrmax_used_zhe +get_seed +set_seed +matinv +ludcmp_nr +lubksb_nr +kanalnummer +reportopenfiles +zhe_ini +read_tree_zhe +kill_tree_zhe +unaryaddq +unarysubq +invq +absq +absq2 +equalq +equalqr +equalqi +powq +addq +subq +mulq +divq +printq + +File: code/a_scratch_size.f90 +precision_constants +no_e +read +procedure +procedure +procedure +procedure +control +read_int +read_int_a +read_d +read_d_a +mat_norm +make_yoshida +input_sector +get_ncar +dofma +c_matinv +ludcmp_nr +lubksb_nr +matinv +ludcmp_nr0 +lubksb_nr0 +scratch_size +file_handler +file_ +file_k +assignment +procedure +procedure +intfile +intfile_k +zerofile +kanalnummer +reportopenfiles +context +create_name +my_own_1d_tpsa +n_my_1d_taylor +my_1d_taylor +assignment +procedure +procedure +operator +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +operator +procedure +exp +procedure +log +procedure +sqrt +procedure +cos +procedure +sin +procedure +set_my_taylor_no +add +daddsc +dscadd +unaryadd +subs +unarysub +dsubsc +dscsub +mul +dmulsc +dscmul +ddivsc +idivsc +pow +inv +div +dscdiv +input_real_in_my_1d_taylor +input_my_1d_taylor_in_real +dexpt +dlogt +dsqrtt +dcost +dsint +gauss_dis +gaussian_seed +grnf +my_own_linear_tpsa +i_ +my_linear_taylor +assignment +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +procedure +procedure +procedure +procedure +operator +procedure +procedure +exp +procedure +tpsa_exp +procedure +log +procedure +sqrt +procedure +cos +procedure +sin +procedure +tan +procedure +atan +procedure +atan2 +procedure +operator +procedure +alloc +procedure +kill +procedure +morph +procedure +clean +procedure +init_linear_taylor +clean_taylor +clean_taylor_print +alloc_my_linear_taylor +morpht +monot +add +daddsc +dscadd +daddscc +dscaddc +unaryadd +subs +unarysub +dsubsc +dscsub +dsubscc +dscsubc +mul +dmulsc +dscmul +dmulscc +dscmulc +ddivsc +ddivscc +idivsc +pow +powr +inv +div +dscdiv +input_real_in_my_linear_taylor +input_real_in_my_linear_taylors +input_comp_in_my_linear_taylor +input_my_linear_taylor_in_comp +input_my_linear_taylor_in_my_linear_taylor +input_my_linear_taylor_in_real +dexpt +dlogt +dsqrtt +dcost +atant +dtant +atan2t +dsint +tpsa_expt +mypause +mypauses + +File: code/b_da_arrays_all.f90 +da_arrays +alloc_all +alloc_ +dealloc_all +danum +danum0 + +File: code/c_dabnew.f90 +dabnew +change_package +daini +dallsta +daallno1 +daall +daall1 +daall0 +dadal +dadal1 +count_da +davar +dacon +danot +daeps +dapek +dapok +daclr +dacop +daadd +datrunc +dasub +damul +damult +dadiv +dasqr +dasqrt +dacad +dacsu +dasuc +dacmu +dacmut +dacdi +dadic +dacma +dalin +dalint +dafun +dafunt +daabs +dacctt1 +dacctt2da +dacctt2tpsa +dacct +dacctt +mtree +ppushprint +ppushstore +ppushgetn +ppush +ppush1 +dainvt1 +dainv +dainvt2 +dainvt +dapin +dapint +dader +dadert +dacfu +dacfut +dapri +dapri77 +dashift +darea +darea77 +dadeb +dainf +dapac +dachk +damch +dadcd +dancd +datra +hash +dehash +daran +dacycle + +File: code/cb_da_arrays_all.f90 +c_da_arrays +alloc_all_c +alloc_c +dealloc_all_c +danum_c +danum0_c + +File: code/cc_dabnew.f90 +c_dabnew +c_daall1 +c_daall +c_daall0 +c_dadal +c_dadal1 +c_davar +c_dacma +c_daini +dalc_lsta +daalc_lno1 +daall +daall1 +c_print_c_nda_dab_c_lda +c_etall1 +c_daall0 +dadal +c_dadal1 +c_count_da +c_davar +c_dacon +c_danot +c_daeps +c_print_eps +c_dapek +c_dapok +daclr +c_dacop +c_daadd +c_datrunc +c_dasub +c_damul +damult +c_dadiv +dasqr +dasqrt +c_dacad +c_dacsu +c_dasuc +c_dacmu +dacmut +c_dacdi +c_dadic +dacma +dalin +dalint +c_daabs +dacctt1 +dacctt2tpsa +dacctt2da +c_dacctt2datest +c_dacct +dacctt +c_mtree +ppushprint +ppushstore +ppushgetn +ppush +ppush1 +dainvt1 +dainvt2 +c_dainv +dainvt +dapin +c_dapint +c_dader +dadert +c_dacfu +dacfut +c_dapri +c_clean_complex +c_dapri77 +c_dashift +c_darea +c_darea77 +dadeb +dainf +dapac +dachk +damch +dadcd +dancd +c_datra +hash +dehash +c_dacycle +c_dafun +dafunt +c_take +c_daran +c_dapek0 +c_dapok0 +c_etcom + +File: examples/ndpt_bmad.f90 +one_turn_orbital_map_phase_ad +build_lattice_als0 + +File: examples/radiation_bmad.f90 +program_als +build_als + +File: fpp_manual/programs/real_8_example.f90 +real_8_example + +File: include/a_def_all_kind.inc +temps_energie +acceleration +drift1 +drift1p +superdrift +superdriftp +dkd2 +dkd2p +kickt3 +kickt3p +abell +abellp +cav4 +cav4p +cav_trav +cav_travp +sol5 +sol5p +ktk +ktkp +tktf +tktfp +nsmi +nsmip +ssmi +ssmip +teapot +teapotp +mon +monp +rcol +rcolp +ecol +ecolp +eseptum +eseptump +strex +strexp +enge +engep +pancake +pancakep +helical_dipole +helical_dipolep + +File: include/a_def_element_fibre_layout.inc +c_linear_map +c_lattice_function +girder +girder_info +girder_list +mul_block +work +internal_state +pol_block +pol_block_inicond +madx_aperture +s_aperture +magnet_chart +tilting +time_energy +ramping +element +elementp +fibre_appearance +info +integration_node +fibre +layout +layout_array +girder_siamese +mad_universe +beam_location +node_layout +orbit_node +orbit_lattice +beam_beam_node +extra_work +e_beam + +File: include/a_def_frame_patch_chart.inc +affine_frame +magnet_frame +patch +chart + +File: include/a_def_sagan.inc +pol_sagan +pol_block_sagan +undu_r +undu_p +sagan +saganp + +File: include/a_def_worm.inc +inner_frame +worm + +File: include/a_namelists.inc +fibrelist +patchlist +chartlist +magnet_chartlist +ele_list +cav_list +hel_list +thin3_list +sol5_list +tp10_list +ab_list +k16_list +ap_list +tcav_list +siam_list +track_list +wig_list + +File: papers/from_tracking_code_to_analysis_examples/hamiltonian_guignard.f90 +guignard_hamiltonian + +File: papers/from_tracking_code_to_analysis_examples/hamiltonian_guignard_1df.f90 +guignard_normal_form + +File: papers/from_tracking_code_to_analysis_examples/hamiltonian_guignard_1df_x.f90 +guignard_normal_form_average_x + +File: papers/from_tracking_code_to_analysis_examples/hamiltonian_guignard_cs.f90 +guignard_hamiltonian_cs + +File: papers/from_tracking_code_to_analysis_examples/modulated_map.f90 +modulated_map + +File: papers/from_tracking_code_to_analysis_examples/modulated_map_jordan.f90 +modulated_map + +File: papers/from_tracking_code_to_analysis_examples/one_resonance_map.f90 +one_resonance_map + +File: papers/from_tracking_code_to_analysis_examples/one_turn_cavity_map.f90 +one_turn_cavity_map +clean_mat + +File: papers/from_tracking_code_to_analysis_examples/one_turn_orbital_map.f90 +program_one_turn_map + +File: papers/from_tracking_code_to_analysis_examples/one_turn_orbital_map_normal_form_2d.f90 +one_turn_orbital_map_normal_form_2d + +File: papers/from_tracking_code_to_analysis_examples/one_turn_orbital_map_phase_ad.f90 +one_turn_orbital_map_phase_ad + +File: papers/from_tracking_code_to_analysis_examples/pendulum.f90 +pendulum + +File: papers/from_tracking_code_to_analysis_examples/radiation_map.f90 +radiation_map + +File: papers/from_tracking_code_to_analysis_examples/spin_phase_advance_isf.f90 +spin_phase_advance_isf + +File: papers/from_tracking_code_to_analysis_examples/standard_map.f90 +standard_map + +File: papers/from_tracking_code_to_analysis_examples/very_damped_map.f90 +very_damped_map + +File: papers/from_tracking_code_to_analysis_examples/als/z_als_lattice.f90 +build_lattice_als diff --git a/sim_utils/searchf.namelist b/sim_utils/searchf.namelist new file mode 100644 index 0000000000..cbc9aac6ee --- /dev/null +++ b/sim_utils/searchf.namelist @@ -0,0 +1,1492 @@ + +File: file/calc_file_number.f90 +calc_file_number + +File: file/change_file_number.f90 +change_file_number + +File: file/directory_mod.f90 +directory_mod +dir_list +dir_open +dir_read +dir_close + +File: file/file_directorizer.f90 +file_directorizer + +File: file/file_get.f90 +file_get + +File: file/file_get_open.f90 +file_get_open + +File: file/file_suffixer.f90 +file_suffixer + +File: file/filename_mod.f90 +filename_mod +fullfilename +splitfilename +file_name_is_relative +simplify_path +append_subdirectory + +File: file/get_file_number.f90 +get_file_number + +File: file/get_file_time_stamp.f90 +get_file_time_stamp + +File: file/increment_file_number.f90 +increment_file_number + +File: file/object_model_mod.f90 +object_model_mod +temp_struct +object_struct +object_document_parse +object_print +subobject_reallocate +object_deallocate +subobject_number +pointer_to_subobject +object_tree_name +object_root + +File: file/read_dir.cpp +close_dir_ +open_dir_ +read_dir_ + +File: file/real_path.f90 +real_path + +File: file/skip_header.f90 +skip_header + +File: file/type_this_file.f90 +type_this_file + +File: geodesic_lm/accept.f90 +acceptance + +File: geodesic_lm/converge.f90 +convergence_check + +File: geodesic_lm/fdavv.f90 +fdavv + +File: geodesic_lm/fdjac.f90 +fdjac + +File: geodesic_lm/geodesic_lm.f90 +geodesic_lm +geodesic_lm_param_struct +type_geodesic_lm +run_geodesic_lm + +File: geodesic_lm/lambda.f90 +trustregion +updatelam_factor +updatelam_nelson +updatelam_umrigar +updatedelta_factor +updatedelta_more + +File: geodesic_lm/leastsq.f90 +geolevmar_module +geodesiclm + +File: geodesic_lm/updatejac.f90 +updatejac + +File: geodesic_lm/user_signal.f90 +user_signal + +File: interfaces/parallel_mod.f90 +parallel_mod + +File: interfaces/physical_constants.f90 +physical_constants +pi +twopi +fourpi +sqrt_2 +sqrt_3 +m_electron +m_proton +m_neutron +m_muon +m_helion +e_mass +p_mass +m_pion_0 +m_pion_charged +m_deuteron +atomic_mass_unit +c_light +r_e +r_p +e_charge +h_planck +h_bar_planck +mu_0_vac +eps_0_vac +classical_radius_factor +n_avogadro +fine_structure_constant +anomalous_mag_moment_electron +anomalous_mag_moment_proton +anomalous_mag_moment_muon +anomalous_mag_moment_deuteron +anomalous_mag_moment_neutron +anomalous_mag_moment_he3 + +File: interfaces/precision_def.f90 +precision_def +rp +sp +dp +i4_b +global_common_struct +named_number_struct + +File: interfaces/sim_utils.f90 +sim_utils + +File: interfaces/sim_utils_interface.f90 +sim_utils_interface +set_parameter +set_parameter_real +set_parameter_int +set_parameter_logic +inverse_prob +is_alphabetic +is_decreasing_sequence +is_increasing_sequence +is_integer +is_logical +is_real +isatty +j_bessel +linear_fit +linear_fit_2d +location_decode +logic_str +lunget +match_reg +milli_sleep +make_legal_comment +match_wild +mat_pseudoinverse +mat_eigen +mat_inverse +mat_rotation +mat_scale_p0 +mat_symp_conj +mat_symp_conj_i +mat_symp_error +mat_symplectify +mat_type +mat_make_unit +match_word +max_nonzero +n_choose_k +n_spline_create +nametable_add +nametable_bracket_indexx +nametable_change1 +nametable_init +nametable_remove +node_put +ordinal_str +outer_product +parse_fortran_format +pointer_to_locations +poly_eval +probability_funct +query_string +quote +quoten +real_to_string +reals_to_string +reals_to_table_row +all_pointer_to_string +unquote +real_num_fortran_format +str_set +svd_fit +real_path +real_str +rms_value +rot_2d +run_timer +sinc +sincc +sinhx_x +skip_header +sqrt_one +str_first_in_set +str_first_not_in_set +str_last_in_set +str_last_not_in_set +string_to_int +string_to_real +string_trim2 +substr +test_tune_tracker_lock +to_str +type_this_file +upcase +upcase_string +word_len +word_read +str_substitute +str_match_wild +str_upcase +str_downcase +system_command +string_trim +virtual_memory_usage + +File: interfaces/sim_utils_struct.f90 +sim_utils_struct +var_length_string_struct +str_index_struct +nametable_struct +all_pointer_struct +i_imaginary +i_imag +int_garbage$ +real_garbage$ +null_name$ +str_garbage$ +lf$ +invalid$ +not_set$ +invalid_name +x_axis$ +y_axis$ +z_axis$ +true$ +false$ +true_int$ +false_int$ +yes$ +no$ +maybe$ +provisional$ +rl_prompt_start_ignore +rl_prompt_end_ignore +black_color +red_color +green_color +yellow_color +blue_color +magenta_color +cyan_color +gray_color +dark_gray_color +peach_color +light_green_color +light_yellow_color +light_blue_color +pink_color +aqua_color +white_color +blink_color +bold_color +reset_color +int_logic +is_true +is_false +value_of_all_ptr + +File: interfaces/particle_species_mod.f90 +particle_species_mod +pion_0$ +helion$ +ref_particle$ +neutron$ +deuteron$ +pion_plus$ +antimuon$ +proton$ +positron$ +photon$ +electron$ +antiproton$ +muon$ +pion_minus$ +anti_deuteron$ +anti_neutron$ +anti_ref_particle$ +anti_helion$ +lb_subatomic +ub_subatomic +subatomic_species_name +openpmd_subatomic_species_name +charge_of_subatomic +mass_of_subatomic +anomalous_moment_of_subatomic +antiparticle_of_subatomic +spin_of_subatomic +atomic_name +atom_struct +mean_excitation_energy_over_z +molecular_name +antiparticle +species_of +species_id +species_name +species_id_from_openpmd +openpmd_species_name +anomalous_moment_of +spin_of +charge_of +mass_of +charge_to_mass_of +set_species_charge +x0_radiation_length +atomic_number +is_subatomic_species + +File: io/command_line_mod.f90 +command_line_mod +cesr_iargc +cesr_getarg + +File: io/get_tty_char_c.c +init_tty_char_ +get_tty_char_c_ +init_tty_char_ +get_tty_char_c_ + +File: io/input_mod.f90 +input_mod +get_tty_char +get_a_char +read_a_line +readline_read_history +readline_write_history + +File: io/lunget.f90 +lunget + +File: io/out_io_called.f90 +out_io_called + +File: io/out_io_end.f90 +out_io_end + +File: io/out_io_line.f90 +out_io_line + +File: io/output_mod.f90 +output_mod +s_nooutput$ +s_blank$ +s_info$ +s_dinfo$ +s_success$ +s_warn$ +s_dwarn$ +s_error$ +s_fatal$ +s_abort$ +s_important$ +out_io_output_direct_struct +out_io_mod_com_struct +out_io +procedure +procedure +procedure +procedure +procedure +output_direct +out_io_line_out +out_io_real +out_io_int +out_io_logical +out_io_line12 +out_io_lines +insert_numbers +find_format +header_io +out_io_print_and_capture_setup +out_io_buffer_reset +out_io_buffer_num_lines +out_io_buffer_get_line + +File: io/read_line.c +read_line_ +read_history_ +write_history_ + +File: io/system_command.f90 +system_command + +File: io/ttychr.f90 +ttychr + +File: math/all_phase_fft.f90 +all_phase_fft +apfft_corr +apfft +apfft_ext +hanhan +han + +File: math/bin_mod.f90 +bin_mod +bin_struct +general_bin_struct +bin_data_density +bin_data +bin_data_density_2d +bin_2d +bin_index +bin_x_center +count_at_index +n_bins_automatic +general_bin_index +general_bin_count +general_bin_index_in_bounds + +File: math/bit_set_mod.f90 +bit_mod +bit_set + +File: math/bracket_index.f90 +bracket_index + +File: math/bracket_index2.f90 +bracket_index2 + +File: math/bracket_index_int.f90 +bracket_index_int + +File: math/cross_product.f90 +cross_product + +File: math/cubic_interpolation_mod.f90 +cubic_interpolation_mod +field1_at_2d_pt_struct +field_at_2d_box_struct +bicubic_coef_struct +cmplx_field1_at_2d_pt_struct +cmplx_field_at_2d_box_struct +bicubic_cmplx_coef_struct +field1_at_3d_pt_struct +field_at_3d_box_struct +tricubic_coef_struct +cmplx_field1_at_3d_pt_struct +cmplx_field_at_3d_box_struct +tricubic_cmplx_coef_struct +m16_row_struct +m16_matrix_struct +m64_row_struct +m64_matrix_struct +bicubic_compute_field_at_2d_box +bicubic_interpolation_coefs +bicubic_eval +tricubic_compute_field_at_3d_box +tricubic_interpolation_coefs +tricubic_eval +bicubic_compute_cmplx_field_at_2d_box +bicubic_interpolation_cmplx_coefs +bicubic_cmplx_eval +tricubic_compute_cmplx_field_at_3d_box +tricubic_interpolation_cmplx_coefs +tricubic_cmplx_eval + +File: math/da2_mod.f90 +da2_mod +da2_mult +da2_div +da2_inverse +da2_evaluate + +File: math/fft_1d.f90 +fft_1d + +File: math/fourier_mod.f90 +fourier_mod +coarse_frequency_estimate +fine_frequency_estimate +fourier_amplitude + +File: math/inverse.f90 +inverse + +File: math/is_decreasing_sequence.f90 +is_decreasing_sequence + +File: math/is_increasing_sequence.f90 +is_increasing_sequence + +File: math/linear_fit.f90 +linear_fit + +File: math/linear_fit_2d.f90 +linear_fit_2d + +File: math/max_nonzero.f90 +max_nonzero + +File: math/n_spline_create.f90 +n_spline_create + +File: math/naff.f90 +naff_mod +naff +projdd +ed +maximize_projection +interpolated_fft_gsl +interpolated_fft + +File: math/outer_product.f90 +outer_product + +File: math/poly_eval.f90 +poly_eval + +File: math/probability_funct.f90 +probability_funct + +File: math/random_mod.f90 +random_mod +kr4b +im_nr_ran +sobseq_maxbit +sobseq_maxdim +ran_engine_name +ran_gauss_converter_name +pseudo_random$ +quasi_random$ +quick_gaussian$ +exact_gaussian$ +random_state_struct +ran_gauss +procedure +procedure +ran_uniform +procedure +procedure +ran_gauss_scalar +ran_gauss_vector +ran_engine +ran_gauss_converter +ran_seed_put +ran_seed_get +ran_default_state +ran_uniform_scalar +ran_uniform_vector +super_sobseq +pointer_to_ran_state +allocate_thread_states + +File: math/rms_value.f90 +rms_value + +File: math/rot_2d.f90 +rot_2d + +File: math/rotation_3d_mod.f90 +rotation_3d_mod +quat_conj +procedure +procedure +quat_mul +procedure +procedure +quat_rotate +procedure +procedure +w_mat_to_axis_angle +w_mat_to_quat +quat_to_w_mat +axis_angle_to_w_mat +quat_to_omega +omega_to_quat +quat_to_axis_angle +axis_angle_to_quat +quat_conj_real +quat_conj_complex +quat_inverse +quat_mul_real +quat_mul_complex +quat_rotate_real +quat_rotate_complex +rotate_vec_given_axis_angle +rotate_vec +rotate_mat + +File: math/sign_of_mod.f90 +sign_of_mod +sign_of +procedure +procedure +sign_of_real +sign_of_int + +File: math/spline_mod.f90 +spline_mod +spline_struct +reallocate_spline +create_a_spline +spline_akima_interpolate +spline_evaluate +bracket_index_for_spline +spline1 +spline_akima +end_akima_spline_calc +akima_spline_slope_calc +akima_spline_coef23_calc + +File: math/super_recipes_mod.f90 +super_recipes_mod +super_mrqmin_storage_struct +super_bicubic_interpolation +super_bicubic_coef +super_sort +super_rtsafe +super_mnbrak +shft +super_brent +shft +super_dbrent +mov3 +super_zbrent +super_mrqmin +super_mrqcof +super_gaussj +super_ludcmp +super_qromb +super_polint +super_trapzd +super_qromb_2d +trapzd_2d +super_poly +covar_expand + +File: math/windowLS.f90 +windowls_mod +max_wls +wls_struct +initfixedwindowls +destfixedwindowls +fixedwindowls +shortfactorial + +File: matrix/cplx_mat_inverse.f90 +cplx_mat_inverse + +File: matrix/cplx_mat_make_unit.f90 +cplx_mat_make_unit + +File: matrix/determinant.f90 +determinant + +File: matrix/mat_eigen.f90 +mat_eigen + +File: matrix/mat_inverse.f90 +mat_inverse + +File: matrix/mat_make_unit.f90 +mat_make_unit + +File: matrix/mat_pseudoinverse.f90 +mat_pseudoinverse + +File: matrix/mat_rotation.f90 +mat_rotation + +File: matrix/mat_scale_p0.f90 +mat_scale_p0 + +File: matrix/mat_symp_conj.f90 +mat_symp_conj + +File: matrix/mat_symp_conj_i.f90 +mat_symp_conj_i + +File: matrix/mat_symp_error.f90 +mat_symp_error + +File: matrix/mat_symplectify.f90 +mat_symplectify + +File: matrix/mat_type.f90 +mat_type + +File: matrix/qr_mod.f90 +qr_mod +qr +thin_qr +twonorm2 +house +rbacks +print_mat + +File: matrix/svd_fit.f90 +svd_fit + +File: misc/assert_equal.f90 +assert_equal + +File: misc/cpp_fortran_utils.cpp +bool_to_int +int_to_bool + +File: misc/csr_bell.f90 +csr_bell + +File: misc/err_exit.f90 +err_exit + +File: misc/fortran_cpp_utils.f90 +fortran_cpp_utils +c_dummy_struct +vec2fvec +procedure +fscalar2scalar +procedure +fvec2vec +procedure +procedure +procedure +procedure +mat2vec +procedure +procedure +procedure +procedure +tensor2vec +procedure +procedure +procedure +procedure +vec2mat +procedure +procedure +procedure +procedure +vec2tensor +procedure +procedure +procedure +procedure +remove_null_in_string +procedure +procedure +f_logic +procedure +procedure +c_logic +procedure +procedure +f_logic_int +f_logic_bool +r_size +i_size +remove_null_in_string_arr +remove_null_in_string_char +to_f_str +bool_fscalar2scalar +real_fvec2vec +int_fvec2vec +cmplx_fvec2vec +bool_fvec2vec +real_mat2vec +int_mat2vec +bool_mat2vec +cmplx_mat2vec +real_tensor2vec +int_tensor2vec +cmplx_tensor2vec +bool_tensor2vec +bool_vec2fvec +real_vec2mat +int_vec2mat +bool_vec2mat +cmplx_vec2mat +real_vec2tensor +int_vec2tensor +cmplx_vec2tensor +bool_vec2tensor +set_fortran_string + +File: misc/logical_is_garbage.f90 +logical_is_garbage + +File: misc/milli_sleep.f90 +milli_sleep + +File: misc/program_sleep.cpp +program_sleep_ + +File: misc/re_allocate_mod.f90 +re_allocate_mod +re_allocate +procedure +procedure +procedure +procedure +procedure +procedure +procedure +procedure +re_allocate2 +procedure +procedure +procedure +procedure +procedure +procedure +procedure +re_allocate2d +procedure +procedure +procedure +procedure +procedure +re_associate +procedure +procedure +procedure +procedure +procedure +re_allocate_string +re_allocate_var_string +re_allocate_var_string1 +re_allocate_integer +re_allocate_complex +re_allocate_real +re_allocate_all_pointer +re_allocate_logical +re_allocate2_string +re_allocate2_var_string +re_allocate2_integer +re_allocate2_complex +re_allocate2_real +re_allocate2_all_pointer +re_allocate2_logical +re_allocate_string2d +re_allocate_var_string2d +re_allocate_integer2d +re_allocate_real2d +re_allocate_logical2d +re_associate_string +re_associate_var_string +re_associate_integer +re_associate_real +re_associate_logical + +File: misc/run_timer.f90 +run_timer + +File: misc/set_logical_to_garbage.f90 +set_logical_to_garbage + +File: misc/set_parameter.f90 +set_parameter_real +set_parameter_int +set_parameter_logic + +File: misc/swap_mod.f90 +swap_mod +swap +procedure +procedure +procedure +procedure +procedure +procedure +swap_i +swap_r +swap_rv +swap_c +swap_cv +swap_cm + +File: misc/transfer_logical.f90 +transfer_logical + +File: misc/userex.c +userex_ + +File: misc/utilities_mod.f90 +utilities_mod +integer_option +logic_option +real_option +string_option +eval_logical +on_off_logic + +File: misc/virtual_memory_usage.f90 +virtual_memory_usage + +File: mpi/opti_de_mpi_mod.f90 +opti_de_mpi_mod +solution_struct +opti_de_mpi +this_merit_calc + +File: optimizers/lmdif_mod.f90 +lmdif_mod +opti_lmdif +initial_lmdif +suggest_lmdif +lmdif +fdjac2 +lmpar +qrfac +qrsolv + +File: optimizers/opti.cpp +RandInt +UniRand + +File: optimizers/opti_de_mod.f90 +opti_de_mod +opti_de_param_struct +opti_de +solution_struct + +File: optimizers/opti_de_openmp_mod.f90 +opti_de_openmp_mod +opti_de_openmp +solution_struct + +File: plot/display_size_and_resolution.c +display_size_and_res +display_size_and_res + +File: plot/display_size_and_resolution.f90 +display_size_and_resolution + +File: plot/noplot_interface.f90 +noplot_interface +qp_set_graph_position_basic +qp_set_symbol_size_basic +qp_paint_rectangle_basic +qp_set_symbol_fill_basic +qp_set_line_width_basic +qp_set_line_pattern_basic +qp_set_clip_basic +qp_set_char_size_basic +qp_set_text_background_color_basic +qp_text_len_basic +qp_draw_text_basic +qp_draw_arrow_basic +qp_draw_symbol_basic +qp_save_state_basic +qp_restore_state_basic +qp_set_color_basic +qp_clear_page_basic +qp_clear_box_basic +qp_draw_polyline_basic +qp_open_page_basic +qp_select_page_basic +qp_close_page_basic +qp_end_basic + +File: plot/pgplot_interface.f90 +pgplot_interface +pg_interface_struct +qp_set_graph_position_basic +qp_set_symbol_size_basic +qp_set_symbol_fill_basic +qp_set_line_width_basic +qp_set_line_pattern_basic +qp_set_clip_basic +qp_set_char_size_basic +qp_set_text_background_color_basic +qp_text_len_basic +qp_draw_text_basic +qp_draw_arrow_basic +qp_draw_symbol_basic +qp_save_state_basic +qp_restore_state_basic +qp_wait_to_flush_basic +qp_set_color_basic +qp_clear_page_basic +qp_paint_rectangle_basic +qp_draw_polyline_basic +qp_open_page_basic +qp_select_page_basic +qp_close_page_basic +qp_end_basic + +File: plot/pgsubs.f90 +palett + +File: plot/plplot_interface.f90 +plplot_interface +viewport_size +pl_interface_struct +qp_set_graph_position_basic +qp_set_symbol_size_basic +qp_paint_rectangle_basic +qp_set_symbol_fill_basic +qp_set_line_width_basic +qp_set_line_pattern_basic +qp_set_clip_basic +qp_set_char_size_basic +qp_set_text_background_color_basic +qp_text_len_basic +qp_draw_text_basic +qp_draw_arrow_basic +qp_draw_symbol_basic +qp_save_state_basic +qp_restore_state_basic +qp_wait_to_flush_basic +qp_set_color_basic +qp_clear_page_basic +qp_clear_box_basic +qp_draw_polyline_basic +qp_open_page_basic +qp_select_page_basic +qp_close_page_basic +qp_end_basic + +File: plot/quick_plot.f90 +quick_plot +qp_base_library +qp_base_library +qp_base_library +qp_set_layout +qp_get_layout_attrib +qp_wait_to_flush +qp_init_com_struct +qp_save_state +qp_restore_state +qp_pointer_to_axis +qp_use_axis +qp_set_axis +qp_get_axis_attrib +qp_calc_and_set_axis +qp_calc_axis_params +qp_calc_axis_scale +qp_axis_niceness +qp_calc_axis_places +qp_set_graph_limits +qp_clear_page +qp_clear_box +qp_paint_rectangle +qp_set_box +qp_set_page_border_to_box +qp_set_page_border +qp_from_inch_rel +qp_from_inch_abs +qp_to_inch_rel +qp_to_inches_rel +qp_to_inch_abs +qp_to_inches_abs +qp_convert_point_rel +qp_convert_point_abs +qp_convert_rectangle_rel +qp_join_units_string +qp_split_units_string +qp_set_graph_placement +qp_set_margin +qp_draw_rectangle +qp_draw_arrow +qp_draw_symbol +qp_draw_symbols +qp_set_graph +qp_draw_graph +qp_draw_data +qp_draw_axes +qp_draw_graph_title +qp_draw_histogram +qp_draw_text_legend +qp_draw_curve_legend +qp_draw_ellipse +qp_draw_circle +qp_draw_polyline +qp_draw_polyline_no_set +qp_draw_line +qp_open_page +qp_select_page +qp_close_page +qp_draw_text +qp_draw_text_no_set +qp_justify +qp_draw_main_title +qp_set_arrow +qp_set_symbol +qp_set_arrow_attrib +qp_set_symbol_attrib +qp_get_arrow_attrib +qp_get_symbol_attrib +qp_set_line +qp_get_line_attrib +qp_set_line_attrib +qp_set_clip +qp_subset_box +qp_get_text_attrib +qp_set_text_attrib +qp_draw_x_axis +qp_draw_y_axis +qp_to_axis_number_text +qp_text_len +qp_set_graph_attrib +qp_draw_grid +qp_calc_minor_div +qp_get_parameters +qp_set_parameters +qp_text_height_to_inches +qp_read_data +qp_eliminate_xy_distortion +qp_continuous_color +qp_continuous_color_inverse +qp_end + +File: plot/quick_plot_struct.f90 +quick_plot_struct +white$ +black$ +red$ +green$ +blue$ +cyan$ +magenta$ +yellow$ +orange$ +yellow_green$ +light_green$ +navy_blue$ +purple$ +reddish_purple$ +dark_grey$ +light_grey$ +transparent$ +qp_color_name +solid$ +dashed$ +dash_dot$ +dotted$ +dash_dot3$ +qp_line_pattern_name +solid_fill$ +no_fill$ +hatched$ +cross_hatched$ +qp_symbol_fill_pattern_name +square_sym$ +dot_sym$ +plus_sym$ +times_sym$ +circle_sym$ +x_symbol_sym$ +triangle_sym$ +circle_plus_sym$ +circle_dot_sym$ +square_concave_sym$ +diamond_sym$ +star5_sym$ +triangle_filled_sym$ +red_cross_sym$ +star_of_david_sym$ +square_filled_sym$ +circle_filled_sym$ +star5_filled_sym$ +qp_symbol_type_name +dflt_draw$ +dflt_set$ +print_page_long_len +print_page_short_len +filled_arrow_head$ +outline_arrow_head$ +qp_arrow_head_type_name +qp_axis_struct +qp_plot_struct +qp_point_struct +qp_rect_struct +qp_text_struct +qp_line_struct +qp_symbol_struct +qp_arrow_struct +qp_state_struct +qp_string_to_enum +qp_enum_to_string + +File: special_functions/asinc.f90 +asinc + +File: special_functions/complex_error_function.f90 +complex_error_function + +File: special_functions/cos_one.f90 +cos_one + +File: special_functions/cosc.f90 +cosc + +File: special_functions/dj_bessel.f90 +dj_bessel + +File: special_functions/elliptic_integral_mod.f90 +elliptic_integral_mod +ellipinc +test_xgelbd +gelbd +rgelbd +elbd +elsbd +elcbd +celbd +serbd +relbd +relsbd +relcbd +rcelbd +rserbd + +File: special_functions/factorial.f90 +factorial + +File: special_functions/gen_complete_elliptic.f90 +gen_complete_elliptic + +File: special_functions/i_bessel.f90 +i_bessel + +File: special_functions/i_bessel_extended.f90 +i_bessel_extended + +File: special_functions/j_bessel.f90 +j_bessel + +File: special_functions/modulo2_mod.f90 +modulo2_mod +modulo2 +procedure +procedure +procedure +modulo2_sp +modulo2_dp +modulo2_int + +File: special_functions/n_choose_k.f90 +n_choose_k + +File: special_functions/sinc.f90 +sinc + +File: special_functions/sincc.f90 +sincc + +File: special_functions/sinhx_x.f90 +sinhx_x + +File: special_functions/sqrt_one.f90 +sqrt_one + +File: string/all_pointer_to_string.f90 +all_pointer_to_string + +File: string/date_and_time_stamp.f90 +date_and_time_stamp + +File: string/djb_hash.f90 +djb_hash + +File: string/djb_str_hash.f90 +djb_str_hash + +File: string/doubleup_quotes.f90 +doubleup_quotes + +File: string/downcase.f90 +downcase + +File: string/downcase_string.f90 +downcase_string + +File: string/index_nocase.f90 +index_nocase + +File: string/indexer_mod.f90 +indexer_mod +indexer +procedure +procedure +procedure +procedure +find_index +procedure +procedure +procedure +procedure +init_str_index_struct +find_index0 +find_index1 +find_index2 +find_index3 +indexer_str +indexer_var_str +indexer_real +indexer_int + +File: string/int_str.f90 +int_str + +File: string/is_alphabetic.f90 +is_alphabetic + +File: string/is_integer.f90 +is_integer + +File: string/is_logical.f90 +is_logical + +File: string/is_real.f90 +is_real + +File: string/location_decode.f90 +location_decode + +File: string/location_encode_mod.f90 +location_encode_mod +location_encode +procedure +procedure +location_encode2 +location_encode1 + +File: string/logic_str.f90 +logic_str + +File: string/make_legal_comment.f90 +make_legal_comment + +File: string/match_reg.f90 +match_reg + +File: string/match_reg_c.c +match_reg_c_ + +File: string/match_wild.f90 +match_wild + +File: string/match_word.f90 +match_word + +File: string/nametable_add.f90 +nametable_add + +File: string/nametable_bracket_indexx.f90 +nametable_bracket_indexx + +File: string/nametable_change1.f90 +nametable_change1 + +File: string/nametable_init.f90 +nametable_init + +File: string/nametable_remove.f90 +nametable_remove + +File: string/ordinal_str.f90 +ordinal_str + +File: string/parse_fortran_format.f90 +parse_fortran_format + +File: string/pointer_to_locations.f90 +pointer_to_locations + +File: string/query_string.f90 +query_string + +File: string/quote.f90 +quote + +File: string/quoten.f90 +quoten + +File: string/real_num_fortran_format.f90 +real_num_fortran_format + +File: string/real_str.f90 +real_str + +File: string/real_to_string.f90 +real_to_string + +File: string/reals_to_string.f90 +reals_to_string + +File: string/reals_to_table_row.f90 +reals_to_table_row + +File: string/str_downcase.f90 +str_downcase + +File: string/str_first_in_set.f90 +str_first_in_set + +File: string/str_first_not_in_set.f90 +str_first_not_in_set + +File: string/str_last_in_set.f90 +str_last_in_set + +File: string/str_last_not_in_set.f90 +str_last_not_in_set + +File: string/str_match_wild.f90 +str_match_wild + +File: string/str_set.f90 +str_set + +File: string/str_substitute.f90 +str_substitute + +File: string/str_upcase.f90 +str_upcase + +File: string/string_to_int.f90 +string_to_int + +File: string/string_to_real.f90 +string_to_real + +File: string/string_trim.f90 +string_trim + +File: string/string_trim2.f90 +string_trim2 + +File: string/substr.f90 +substr + +File: string/to_str.f90 +to_str + +File: string/unquote.f90 +unquote + +File: string/upcase.f90 +upcase + +File: string/upcase_string.f90 +upcase_string + +File: string/var_length_string_mod.f90 +var_length_string_mod +all_equal_var_str + +File: string/word_len.f90 +word_len + +File: string/word_read.f90 +word_read diff --git a/tao/searchf.namelist b/tao/searchf.namelist new file mode 100644 index 0000000000..938e81e9e9 --- /dev/null +++ b/tao/searchf.namelist @@ -0,0 +1,835 @@ + +File: code/tao_abort_command_file.f90 +tao_abort_command_file + +File: code/tao_alias_cmd.f90 +tao_alias_cmd + +File: code/tao_beam_emit_calc.f90 +tao_beam_emit_calc + +File: code/tao_beam_track_endpoint.f90 +tao_beam_track_endpoint + +File: code/tao_branch_index.f90 +tao_branch_index + +File: code/tao_c_interface_mod.f90 +tao_c_interface_mod +tao_c_interface_common_struct +re_allocate_c_double +tao_c_init_tao +tao_c_command +tao_c_out_io_buffer_num_lines +tao_c_real_array_size +tao_c_integer_array_size +tao_c_out_io_buffer_get_line +tao_c_get_real_array +tao_c_get_integer_array +tao_c_out_io_buffer_reset + +File: code/tao_call_cmd.f90 +tao_call_cmd + +File: code/tao_change_mod.f90 +tao_change_mod +tao_change_tune +tao_change_z_tune +tao_change_var +tao_change_ele +tao_to_change_number + +File: code/tao_chrom_calc_needed.f90 +tao_chrom_calc_needed + +File: code/tao_clear_cmd.f90 +tao_clear_cmd + +File: code/tao_clip_cmd.f90 +tao_clip_cmd + +File: code/tao_close_command_file.f90 +tao_close_command_file + +File: code/tao_cmd_end_calc.f90 +tao_cmd_end_calc + +File: code/tao_command.f90 +tao_command + +File: code/tao_command_mod.f90 +tao_command_mod +tao_cmd_history_record +tao_re_execute +tao_cmd_split +tao_next_switch + +File: code/tao_constraint_type_name.f90 +tao_constraint_type_name + +File: code/tao_control_tree_list.f90 +tao_control_tree_list + +File: code/tao_count_strings.f90 +tao_count_strings + +File: code/tao_curve_ix_uni.f90 +tao_curve_ix_uni + +File: code/tao_curve_name.f90 +tao_curve_name + +File: code/tao_curve_rms_calc.f90 +tao_curve_rms_calc + +File: code/tao_d2_d1_name.f90 +tao_d2_d1_name + +File: code/tao_data_and_eval_mod.f90 +tao_data_and_eval_mod +var_num$ +lat_num$ +data_num$ +ele_num$ +tao_evaluate_lat_or_beam_data +tao_to_phase_and_coupling_reading +tao_get_data +tao_data_coupling_init +tao_evaluate_a_datum +tao_load_this_datum +tao_datum_s_position +tao_datum_integrate +tao_tracking_ele_index +integrate_min +integrate_max +tao_scratch_values_calc +tao_do_wire_scan +tao_pointer_to_datum_ele +tao_to_real +tao_evaluate_expression +tao_param_value_routine +tao_evaluate_datum_at_s +tao_evaluate_stack +tao_to_int +tao_set_invalid +tao_ele_geometry_with_misalignments +tao_eval_floor_orbit + +File: code/tao_data_check.f90 +tao_data_check + +File: code/tao_data_sanity_check.f90 +tao_data_sanity_check + +File: code/tao_data_show_use.f90 +tao_data_show_use + +File: code/tao_datum_has_associated_ele.f90 +tao_datum_has_associated_ele + +File: code/tao_datum_name.f90 +tao_datum_name + +File: code/tao_de_optimizer.f90 +tao_de_optimizer +merit_wrapper + +File: code/tao_dmerit_mod.f90 +tao_dmerit_mod +tao_dmodel_dvar_calc +tao_veto_vars_with_zero_dmodel +tao_dmerit_calc + +File: code/tao_ele_shape_info.f90 +tao_ele_shape_info + +File: code/tao_ele_to_ele_track.f90 +tao_ele_to_ele_track + +File: code/tao_evaluate_element_parameters.f90 +tao_evaluate_element_parameters + +File: code/tao_evaluate_tune.f90 +tao_evaluate_tune + +File: code/tao_find_data.f90 +tao_find_data + +File: code/tao_find_plot_region.f90 +tao_find_plot_region + +File: code/tao_find_plots.f90 +tao_find_plots + +File: code/tao_find_var.f90 +tao_find_var + +File: code/tao_floor_to_screen.f90 +tao_floor_to_screen + +File: code/tao_floor_to_screen_coords.f90 +tao_floor_to_screen_coords + +File: code/tao_geodesic_lm_optimizer_mod.f90 +tao_geodesic_lm_optimizer_mod +tao_geodesic_lm_optimizer +tao_geo_lm_func +callback +jacobian +avv +user_signal + +File: code/tao_get_opt_vars.f90 +tao_get_opt_vars + +File: code/tao_get_user_input_mod.f90 +tao_get_user_input_mod +tao_get_user_input +tao_alias_translate + +File: code/tao_graph_name.f90 +tao_graph_name + +File: code/tao_graph_setup_mod.f90 +tao_graph_setup_mod +tao_graph_setup +tao_graph_controller_setup +tao_graph_data_slice_setup +tao_data_type_substitute +tao_graph_phase_space_setup +tao_graph_dynamic_aperture_setup +tao_curve_beam_ellipse_setup +tao_graph_histogram_setup +tao_phase_space_axis_index +tao_particle_data_value +tao_graph_data_setup +tao_curve_data_setup +tao_calc_data_at_s_pts +tao_data_useit_plot_calc +tao_curve_datum_calc +tao_set_curve_invalid +tao_curve_check_universe +tao_graph_s_min_max_calc + +File: code/tao_help.f90 +tao_help + +File: code/tao_init.f90 +tao_init + +File: code/tao_init_building_wall.f90 +tao_init_building_wall + +File: code/tao_init_data_mod.f90 +tao_init_data_mod +tao_init_data +tao_init_data_end_stuff +tao_allocate_data_array +tao_d2_data_stuffit +tao_init_data_in_universe +tao_point_d1_to_data + +File: code/tao_init_find_elements.f90 +tao_init_find_elements + +File: code/tao_init_lattice.f90 +tao_init_lattice + +File: code/tao_init_mod.f90 +tao_init_mod +tao_init_global +tao_init_beams +tao_init_beam_in_universe +tao_init_dynamic_aperture + +File: code/tao_init_plotting.f90 +tao_init_plotting +old_tao_ele_shape_struct +tao_transfer_shape +number_template_plots +tao_setup_default_plotting +default_plot_init +transfer_this_axis +old_style_title_syntax +tao_read_in_patterns + +File: code/tao_init_variables_mod.f90 +tao_init_variables_mod +tao_init_variables +tao_var_stuffit1 +tao_allocate_v1_var +tao_var_stuffit2 +tao_pointer_to_var_in_lattice +tao_pointer_to_var_in_lattice2 +tao_allocate_var_array +tao_point_v1_to_var + +File: code/tao_input_struct.f90 +tao_input_struct +tao_d2_data_input +tao_d1_data_input +tao_datum_input +tao_v1_var_input +tao_var_input +tao_region_input +tao_place_input +tao_curve_input +tao_graph_input +tao_plot_input +tao_design_lat_input +tao_key_input +tao_plot_page_input +tao_plot_page_test_input +tao_ele_shape_input +tao_set_plotting +tao_ele_shape_struct_to_input +tao_ele_shape_input_to_struct + +File: code/tao_interface.f90 +tao_interface +tao_pointer_to_universe +procedure +procedure +tao_pointer_to_universe_int +tao_pointer_to_universe_str +tao_uni_ampersand_index + +File: code/tao_is_valid_name.f90 +tao_is_valid_name + +File: code/tao_json_cmd.f90 +tao_json_cmd + +File: code/tao_key_info_to_str.f90 +tao_key_info_to_str + +File: code/tao_lat_bookkeeper.f90 +tao_lat_bookkeeper + +File: code/tao_lat_emit_calc.f90 +tao_lat_emit_calc + +File: code/tao_lat_sigma_calc_needed.f90 +tao_lat_sigma_calc_needed + +File: code/tao_lattice_calc.f90 +tao_lattice_calc + +File: code/tao_lattice_calc_mod.f90 +tao_lattice_calc_mod +tao_single_track +tao_lat_sigma_track +tao_beam_track +tao_no_beam_left +tao_inject_particle +tao_inject_beam + +File: code/tao_limit_calc.f90 +tao_limit_calc + +File: code/tao_lm_optimizer_mod.f90 +tao_lm_optimizer_mod +tao_lm_optimizer +tao_mrq_func + +File: code/tao_lmdif_optimizer.f90 +tao_lmdif_optimizer + +File: code/tao_locate_all_elements.f90 +tao_locate_all_elements + +File: code/tao_locate_elements.f90 +tao_locate_elements + +File: code/tao_mark_lattice_ele.f90 +tao_mark_lattice_ele + +File: code/tao_merit.f90 +tao_merit + +File: code/tao_open_file.f90 +tao_open_file + +File: code/tao_open_scratch_file.f90 +tao_open_scratch_file + +File: code/tao_optimization_status.f90 +tao_optimization_status + +File: code/tao_orient_building_wall_pt.f90 +tao_oreint_building_wall_pt + +File: code/tao_param_value_at_s.f90 +tao_param_value_at_s + +File: code/tao_parse_command_args.f90 +tao_parse_command_args + +File: code/tao_parse_element_param_str.f90 +tao_parse_element_param_str + +File: code/tao_pause_cmd.f90 +tao_pause_cmd + +File: code/tao_pick_universe.f90 +tao_pick_universe + +File: code/tao_place_cmd.f90 +tao_place_cmd + +File: code/tao_plot_cmd.f90 +tao_plot_cmd + +File: code/tao_plot_mod.f90 +tao_plot_mod +tao_draw_plots +tao_plot_histogram +tao_plot_wave +tao_plot_key_table +tao_draw_floor_plan +tao_set_floor_plan_axis_label +tao_draw_ele_for_floor_plan +tao_draw_lat_layout +tao_draw_beam_chamber_wall +tao_plot_data +tao_draw_curve_data +tao_draw_histogram_data +tao_draw_graph_axes + +File: code/tao_plot_setup.f90 +tao_plot_setup + +File: code/tao_plot_struct_transfer.f90 +tao_plot_struct_transfer + +File: code/tao_plot_window_mod.f90 +tao_plot_window_mod +tao_create_plot_window +tao_destroy_plot_window + +File: code/tao_pointer_to_branches.f90 +tao_pointer_to_branches + +File: code/tao_pointer_to_building_wall_shape.f90 +tao_pointer_to_building_wall_shape + +File: code/tao_pointer_to_datum.f90 +tao_pointer_to_datum + +File: code/tao_pointer_to_ele_shape.f90 +tao_pointer_to_ele_shape + +File: code/tao_pointer_to_tao_lat.f90 +tao_pointer_to_tao_lat + +File: code/tao_pointer_to_universes.f90 +tao_pointer_to_universes + +File: code/tao_print_command_line_info.f90 +tao_print_command_line_info + +File: code/tao_ptc_cmd.f90 +tao_ptc_cmd + +File: code/tao_ptc_normal_form.f90 +tao_ptc_normal_form + +File: code/tao_python_cmd.f90 +tao_python_cmd + +File: code/tao_quiet_set.f90 +tao_quiet_set + +File: code/tao_rad_int_calc_needed.f90 +tao_rad_int_calc_needed + +File: code/tao_re_allocate_expression_info.f90 +tao_re_allocate_expression_info + +File: code/tao_read_cmd.f90 +tao_read_cmd + +File: code/tao_read_phase_space_index.f90 +tao_read_phase_space_index + +File: code/tao_remove_blank_characters.f90 +tao_remove_blank_characters + +File: code/tao_run_cmd.f90 +tao_run_cmd + +File: code/tao_scale_mod.f90 +tao_scale_mod +tao_scale_cmd +tao_scale_plot +tao_scale_graph + +File: code/tao_scale_ping_data.f90 +tao_scale_ping_data + +File: code/tao_set_data_useit_opt.f90 +tao_set_data_useit_opt + +File: code/tao_set_flags_for_changed_attribute.f90 +tao_set_flags_for_changed_attribute + +File: code/tao_set_mod.f90 +tao_set_mod +tao_set_tune_cmd +tao_set_z_tune_cmd +tao_set_calculate_cmd +tao_set_key_cmd +tao_set_ran_state_cmd +tao_set_lattice_cmd +tao_set_global_cmd +tao_set_space_charge_com_cmd +tao_set_bmad_com_cmd +tao_set_ptc_com_cmd +tao_set_geodesic_lm_cmd +tao_set_opti_de_param_cmd +tao_set_wave_cmd +tao_set_beam_cmd +tao_set_beam_init_cmd +tao_set_particle_start_cmd +tao_set_plot_page_cmd +tao_set_curve_cmd +tao_set_plot_cmd +tao_set_region_cmd +tao_set_graph_cmd +tao_set_var_cmd +tao_set_branch_cmd +tao_set_data_cmd +tao_set_default_cmd +tao_set_dynamic_aperture_cmd +tao_set_universe_cmd +tao_set_elements_cmd +tao_set_logical_value +tao_set_integer_value +tao_set_switch_value +tao_set_real_value +tao_set_drawing_cmd +tao_set_symbolic_number_cmd +tao_set_qp_rect_struct +tao_set_qp_axis_struct +tao_set_qp_point_struct + +File: code/tao_set_opt_vars.f90 +tao_set_opt_vars + +File: code/tao_set_var_model_value.f90 +tao_set_var_model_value + +File: code/tao_set_var_useit_opt.f90 +tao_set_var_useit_opt + +File: code/tao_setup_key_table.f90 +tao_setup_key_table + +File: code/tao_shape_init.f90 +tao_shape_init + +File: code/tao_show_cmd.f90 +tao_show_cmd + +File: code/tao_single_mode.f90 +tao_single_mode + +File: code/tao_spin_matrices_calc_needed.f90 +tao_spin_matrices_calc_needed + +File: code/tao_spin_matrix_calc.f90 +tao_spin_matrix_calc + +File: code/tao_spin_tracking_turn_on.f90 +tao_spin_tracking_turn_on + +File: code/tao_split_component.f90 +tao_split_component + +File: code/tao_srdt_calc_needed.f90 +tao_srdt_calc_needed + +File: code/tao_subin_uni_number.f90 +tao_subin_uni_number + +File: code/tao_svd_optimizer_mod.f90 +tao_svd_optimizer_mod +tao_svd_optimizer +tao_svd_func + +File: code/tao_symbol_import_from_lat.f90 +tao_symbol_import_from_lat + +File: code/tao_taper_cmd.f90 +tao_taper_cmd + +File: code/tao_timer.f90 +tao_timer + +File: code/tao_top10_mod.f90 +tao_top10_mod +tao_top10_struct +tao_top10_merit_categories_print +tao_top10_derivative_print +tao_to_top10 +tao_show_constraints +tao_var_write +tao_print_vars +tao_write_lines + +File: code/tao_top_level.f90 +tao_top_level + +File: code/tao_turn_on_special_calcs_if_needed_for_plotting.f90 +tao_turn_on_special_calcs_if_needed_for_plotting + +File: code/tao_universe_index.f90 +tao_universe_index + +File: code/tao_use_data.f90 +tao_use_data + +File: code/tao_use_var.f90 +tao_use_var + +File: code/tao_user_is_terminating_optimization.f90 +tao_user_is_terminating_optimization + +File: code/tao_var1_name.f90 +tao_var1_name + +File: code/tao_var_attrib_name.f90 +tao_var_attrib_name + +File: code/tao_var_check.f90 +tao_var_check + +File: code/tao_var_repoint.f90 +tao_var_repoint + +File: code/tao_var_show_use.f90 +tao_var_show_use + +File: code/tao_var_target_calc.f90 +tao_var_target_calc + +File: code/tao_var_useit_plot_calc.f90 +tao_var_useit_plot_calc + +File: code/tao_wave_mod.f90 +tao_wave_mod +tao_wave_cmd +tao_wave_analysis +tao_orbit_beta_wave_anal +tao_phase_wave_anal +tao_cbar_wave_anal +tao_wave_fit +ele_at_curve_point + +File: code/tao_write_cmd.f90 +tao_write_cmd + +File: code/tao_x_axis_cmd.f90 +tao_x_axis_cmd + +File: code/tao_x_scale_mod.f90 +tao_x_scale_mod +tao_x_scale_cmd +tao_x_scale_plot +tao_x_scale_graph + +File: code/tao_show_this.f90 +tao_show_this + +File: code/tao_spin_polarization_calc.f90 +tao_spin_polarization_calc + +File: code/tao_struct.f90 +tao_struct +model$ +base$ +design$ +apparent_emit$ +projected_emit$ +tao_floor_plan_view_name +tao_lat_type_name +tao_data_source_name +tao_graph_type_name +tao_x_axis_type_name +tao_data_type_z_name +tao_var_merit_type_name +tao_data_merit_type_name +tao_optimizer_name +tao_shape_shape_name +tao_shape_label_name +tao_wave_data_name +n_char_show +assignment +procedure +procedure +tao_cmd_history_struct +tao_real_pointer_struct +tao_logical_array_struct +tao_integer_array_struct +tao_string_array_struct +tao_expression_info_struct +tao_eval_stack1_struct +tao_ele_pointer_struct +tao_ele_shape_struct +tao_drawing_struct +tao_shape_pattern_point_struct +tao_shape_pattern_struct +tao_title_struct +tao_data_var_component_struct +tao_histogram_struct +tao_curve_orbit_struct +tao_curve_color_struct +tao_curve_struct +tao_floor_plan_struct +tao_graph_struct +tao_plot_struct +tao_plot_region_struct +tao_plot_page_struct +tao_region_array_struct +tao_plot_array_struct +tao_graph_array_struct +tao_curve_array_struct +tao_spin_map_struct +tao_data_struct +tao_d1_data_struct +tao_d2_data_struct +tao_data_array_struct +tao_d1_data_array_struct +tao_d2_data_array_struct +tao_var_slave_struct +tao_var_struct +tao_v1_var_struct +tao_var_array_struct +tao_v1_var_array_struct +tao_building_wall_orientation_struct +tao_building_wall_point_struct +tao_building_wall_section_struct +tao_building_wall_struct +tao_global_struct +tao_alias_struct +tao_command_file_struct +do_loop_struct +n_uni_init$ +tao_common_struct +tao_init_struct +tao_beam_shake_struct +tao_scratch_space_struct +tao_lat_mode_struct +tao_lat_sigma_struct +tao_spin_dn_dpz_struct +tao_spin_ele_struct +tao_spin_polarization_struct +tao_plot_cache_struct +tao_lattice_branch_struct +tao_lattice_struct +tao_model_element_struct +tao_beam_branch_struct +tao_model_branch_struct +tao_beam_uni_struct +tao_universe_calc_struct +tao_mpi_struct +tao_dynamic_aperture_struct +tao_wave_kick_pt_struct +tao_wave_struct +tao_ping_scale_struct +tao_universe_pointer_struct +tao_universe_struct +tao_super_universe_struct +tao_deallocate_plot_cache +tao_lattice_branches_equal_tao_lattice_branches +tao_lattice_equal_tao_lattice + +File: hook/tao_hook_branch_calc.f90 +tao_hook_branch_calc + +File: hook/tao_hook_command.f90 +tao_hook_command + +File: hook/tao_hook_curve_s_pt.f90 +tao_hook_curve_s_pt + +File: hook/tao_hook_draw_floor_plan.f90 +tao_hook_draw_floor_plan + +File: hook/tao_hook_draw_graph.f90 +tao_hook_draw_graph + +File: hook/tao_hook_evaluate_a_datum.f90 +tao_hook_evaluate_a_datum + +File: hook/tao_hook_graph_postsetup.f90 +tao_hook_graph_postsetup + +File: hook/tao_hook_graph_setup.f90 +tao_hook_graph_setup + +File: hook/tao_hook_init1.f90 +tao_hook_init1 + +File: hook/tao_hook_init2.f90 +tao_hook_init2 + +File: hook/tao_hook_init_beam.f90 +tao_hook_init_beam + +File: hook/tao_hook_init_data.f90 +tao_hook_init_data + +File: hook/tao_hook_init_global.f90 +tao_hook_init_global + +File: hook/tao_hook_init_lattice_post_parse.f90 +tao_hook_init_lattice_post_parse + +File: hook/tao_hook_init_plotting.f90 +tao_hook_init_plotting + +File: hook/tao_hook_init_read_lattice_info.f90 +tao_hook_init_read_lattice_info + +File: hook/tao_hook_init_var.f90 +tao_hook_init_var + +File: hook/tao_hook_lattice_calc.f90 +tao_hook_lattice_calc + +File: hook/tao_hook_merit_data.f90 +tao_hook_merit_data + +File: hook/tao_hook_merit_var.f90 +tao_hook_merit_var + +File: hook/tao_hook_optimizer.f90 +tao_hook_optimizer + +File: hook/tao_hook_parse_command_args.f90 +tao_hook_parse_command_args + +File: hook/tao_hook_plot_setup.f90 +tao_hook_plot_setup + +File: hook/tao_hook_post_process_data.f90 +tao_hook_post_process_data + +File: hook/tao_hook_show_cmd.f90 +tao_hook_show_cmd + +File: mpi/tao_mpi_mod.f90 +tao_mpi_mod +tao_mpi_initialize +tao_mpi_test_send_receive +tao_broadcast_opt_vars_mpi +tao_broadcast_chars_mpi +tao_mpi_finalize + +File: program/tao_program.f90 +tao_program + +File: version/tao_version_mod.f90 +tao_version_mod +tao_version_date diff --git a/tao/version/tao_version_mod.f90 b/tao/version/tao_version_mod.f90 index e5e0740966..97e70d83a2 100644 --- a/tao/version/tao_version_mod.f90 +++ b/tao/version/tao_version_mod.f90 @@ -6,5 +6,5 @@ !- module tao_version_mod -character(*), parameter :: tao_version_date = "2023/10/10 15:26:13" +character(*), parameter :: tao_version_date = "2023/10/16 23:05:40" end module diff --git a/util_programs/searchf.namelist b/util_programs/searchf.namelist new file mode 100644 index 0000000000..97cc900895 --- /dev/null +++ b/util_programs/searchf.namelist @@ -0,0 +1,190 @@ + +File: beam_file_translate_format/beam_file_translate_format.f90 +beam_file_translate_format + +File: bmad_to_astra/bmad_to_astra.f90 +bmad_to_astra + +File: bmad_to_blender/bmad_to_blender.f90 +bmad_to_blender + +File: bmad_to_csrtrack/bmad_to_csrtrack.f90 +bmad_to_csrtrack + +File: bmad_to_gpt/bmad_to_gpt.f90 +bmad_to_gpt + +File: bmad_to_mad_sad_elegant/bmad_to_mad_sad_elegant.f90 +bmad_to_mad_sad_elegant + +File: bmad_to_merlin/bmad_to_merlin.f90 +bmad_to_merlin + +File: bmad_to_slicktrack/bmad_to_slicktrack.f90 +bmad_to_slicktrack + +File: cartesian_map_fit/cartesian_map_fit.f90 +cartesian_map_fit + +File: cartesian_map_fit/cartesian_map_fit_mod.f90 +cartesian_map_fit_mod +term_struct +read_field_table +read_cartesian_map_fit_param_file +curl_calc +print_stuff +funcs_lm +funcs_de + +File: compare_tracking_methods_plot/compare_tracking_methods_plot.f90 +compare_tracking_methods_plot +which_box +my_draw_axes +plot_it +create_plot + +File: compare_tracking_methods_text/compare_tracking_methods_text.f90 +compare_tracking_methods_text + +File: controller_response_plot/controller_response_plot.f90 +controller_response_plot + +File: converter_element_modeling/fitter/bmad.cpp +write_bmad_file + +File: converter_element_modeling/fitter/cauchy.cpp +sqr +gsl_to_cauchy_point +asym_cauchy_fit +asym_cauchy_fit + +File: converter_element_modeling/fitter/chisq.cpp +sqr +cauchy_eval + +File: converter_element_modeling/fitter/gnuplot.cpp +output_cauchy_impl +output_cauchy_gp +sqr +integrate +output_meta_cauchy_gp +write_poly_coefs +write_1d_files +output_metafit_gp +output_master_gp + +File: converter_element_modeling/fitter/main.cpp +main + +File: converter_element_modeling/fitter/meta_fit.cpp +fit_to_string +make_junk +rescale +gsl_to_fit +get_real_val + +File: converter_element_modeling/fitter/parser.cpp +convert +parse_config_file + +File: converter_element_modeling/fitter/read_data.cpp +fuzzy_file_open +read_list_data_impl +read_list_data +read_list_data +read_table_data + +File: converter_element_modeling/simulation/main.cpp +signal_handler +main + +File: converter_element_modeling/simulation/src/EventAction.cpp +G4UserEventAction + +File: converter_element_modeling/simulation/src/GeantMain.cpp +Initialize_Geant +run_simulation + +File: converter_element_modeling/simulation/src/PhysListEmPolarized.cpp +G4VPhysicsConstructor + +File: converter_element_modeling/simulation/src/RunAction.cpp +G4UserRunAction + +File: converter_element_modeling/simulation/src/cal_binner.cpp +r_auto_bin + +File: converter_element_modeling/simulation/src/parser.cpp +convert +parse_config_file + +File: converter_element_modeling/simulation/src/point_cache.cpp +p + +File: converter_element_modeling/test_prog/converter_test.f90 +converter_test + +File: element_attributes/element_attributes.f90 +element_attributes + +File: f77_to_f90/f77_to_f90.f90 +f77_to_f90 +convert1 + +File: generalized_gradient_fit/generalized_gradient_fit.f90 +generalized_gradient_fit + +File: generalized_gradient_fit/gg_fit_mod.f90 +gg_fit_mod +gg1_struct +fit_info_struct +b_fit_struct +plot1_struct +m_max +read_field_table +write_binary_field_table +write_ascii_field_table +fit_field +sincos_name +sym_score_calc +write_gg_info +write_gg_bmad +read_gg + +File: lattice_cleaner/lattice_cleaner.f90 +lattice_cleaner + +File: mad_to_bmad/errors_mad_to_bmad.f90 +test + +File: mais_ripken/mais_ripken.f90 +coupling_convert_et2rip + +File: make_a_matching_knob/make_a_matching_knob.f90 +make_a_matching_knob + +File: photon_init_plot/photon_init_plot.f90 +photon_init_plot + +File: photon_surface_plot/photon_surface_data.f90 +photon_surface_data + +File: ptc_flat_file_to_bmad/ptc_to_bmad.f90 +ptc_to_bmad + +File: ptc_profiler/ptc_profiler.f90 +ptc_profiler + +File: rf_field_coef_calc/rf_field_coef_calc.f90 +rf_field_coef_calc + +File: rf_field_coef_calc/rf_field_coef_calc_mod.f90 +rf_field_coef_calc_mod +field_cylinder_values +e_field_calc + +File: sad_to_bmad/sad_to_bmad_postprocess.f90 +sad_to_bmad_postprocess + +File: wake_fit/wake_fit.f90 +wake_fit From 802be10ba314c1164d1e7651e53e51488c8a55b9 Mon Sep 17 00:00:00 2001 From: David Sagan Date: Sun, 22 Oct 2023 21:31:04 -0400 Subject: [PATCH 3/3] Correction for gfortran pickyness. --- bmad/code/set_tune_via_group_knobs.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bmad/code/set_tune_via_group_knobs.f90 b/bmad/code/set_tune_via_group_knobs.f90 index c5acc80a58..5c3db7eb89 100644 --- a/bmad/code/set_tune_via_group_knobs.f90 +++ b/bmad/code/set_tune_via_group_knobs.f90 @@ -19,7 +19,7 @@ function set_tune_via_group_knobs (phi_set, branch, group_knobs, orb, print_err) result (ok) -use bmad_interface, except_dummy => set_tune +use bmad_interface, except_dummy => set_tune_via_group_knobs implicit none