source: PSPA/madxPSPA/src/trrun_acdip.f90 @ 430

Last change on this file since 430 was 430, checked in by touze, 11 years ago

import madx-5.01.00

File size: 4.6 KB
Line 
1subroutine tthacdip(track,ktrack,turn)
2
3  implicit none
4
5  !----------------------------------------------------------------------*
6  ! Purpose:                                                             *
7  !   Track a set of trajectories through a thin h ac dipole (zero l.)   *
8  ! Input/output:                                                        *
9  !   TRACK(6,*)(double)    Track coordinates: (X, PX, Y, PY, T, PT).    *
10  !   KTRACK    (integer) number of surviving tracks.                    *
11  !----------------------------------------------------------------------*
12  ! Added by Yipeng SUN on 11 Nov 2009                                   *
13  !----------------------------------------------------------------------*
14  integer itrack,ktrack,turn,turn1,turn2,turn3,turn4
15  double precision bi2gi2,dl,el,omega,dtbyds,phirf,pt,rff,betas,    &
16       gammas,rfl,rfv,track(6,*),clight,twopi,vrf,deltap,deltas,pc,pc0,  &
17       get_variable,node_value,get_value,one,two,half,ten3m,ten6p,px
18  !      double precision px,py,ttt,beti,el1
19  parameter(one=1d0,two=2d0,half=5d-1,ten3m=1d-3,ten6p=1d6)
20
21  !---- Initialize
22  clight=get_variable('clight ')
23  twopi=get_variable('twopi ')
24
25  !---- Fetch data.
26  rfv = node_value('volt ')
27  rff = node_value('freq ')
28  rfl = node_value('lag ')
29  pc0 = get_value('beam ','pc ')
30
31  turn1 = node_value('ramp1 ')
32  turn2 = node_value('ramp2 ')
33  turn3 = node_value('ramp3 ')
34  turn4 = node_value('ramp4 ')
35  !---- Set up.
36  omega = rff * twopi
37  vrf   = 300 * rfv * ten3m / pc0
38  phirf = rfl * twopi
39
40  if (turn .lt. turn1)  then
41     vrf = 0
42  else if (turn .ge. turn1 .and. turn .lt. turn2) then
43     vrf = (turn-turn1) * vrf / (turn2-turn1)
44  else if (turn .ge. turn2 .and. turn .lt. turn3) then
45     vrf = vrf
46  else if (turn .ge. turn3 .and. turn .lt. turn4) then
47     vrf = (turn4-turn) * vrf / (turn4-turn3)
48  else
49     vrf = 0
50  endif
51  !      if (turn .le. 10 .or. turn .gt. 1990) then
52  !       print*," turn: ",turn, " vrf: ", vrf
53  !      endif
54  do itrack = 1, ktrack
55     px  = track(2,itrack)                                           &
56          + vrf * sin(phirf + omega * turn)
57
58     !---- track(2,jtrk) = track(2,jtrk)
59     !        pt = track(6,itrack)
60     !        pt = pt + vrf * sin(phirf - omega * track(5,itrack))
61
62     track(2,itrack) = px
63  enddo
64end subroutine tthacdip
65subroutine ttvacdip(track,ktrack,turn)
66
67  implicit none
68
69  !----------------------------------------------------------------------*
70  ! Purpose:                                                             *
71  !   Track a set of trajectories through a thin v ac dipole (zero l.)   *
72  ! Input/output:                                                        *
73  !   TRACK(6,*)(double)    Track coordinates: (X, PX, Y, PY, T, PT).    *
74  !   KTRACK    (integer) number of surviving tracks.                    *
75  !----------------------------------------------------------------------*
76  ! Added by Yipeng SUN on 11 Nov 2009                                   *
77  !----------------------------------------------------------------------*
78  integer itrack,ktrack,turn,turn1,turn2,turn3,turn4
79  double precision bi2gi2,dl,el,omega,dtbyds,phirf,pt,rff,betas,    &
80       gammas,rfl,rfv,track(6,*),clight,twopi,vrf,deltap,deltas,pc,pc0,  &
81       get_variable,node_value,get_value,one,two,half,ten3m,ten6p,py
82  !      double precision px,py,ttt,beti,el1
83  parameter(one=1d0,two=2d0,half=5d-1,ten3m=1d-3,ten6p=1d6)
84
85  !---- Initialize
86  clight=get_variable('clight ')
87  twopi=get_variable('twopi ')
88
89  !---- Fetch data.
90  rfv = node_value('volt ')
91  rff = node_value('freq ')
92  rfl = node_value('lag ')
93  pc0 = get_value('beam ','pc ')
94
95  turn1 = node_value('ramp1 ')
96  turn2 = node_value('ramp2 ')
97  turn3 = node_value('ramp3 ')
98  turn4 = node_value('ramp4 ')
99  !---- Set up.
100  omega = rff * twopi
101  vrf   = 300 * rfv * ten3m / pc0
102  phirf = rfl * twopi
103
104
105  if (turn .lt. turn1)  then
106     vrf = 0
107  else if (turn .ge. turn1 .and. turn .lt. turn2) then
108     vrf = (turn-turn1) * vrf / (turn2-turn1)
109  else if (turn .ge. turn2 .and. turn .lt. turn3) then
110     vrf = vrf
111  else if (turn .ge. turn3 .and. turn .lt. turn4) then
112     vrf = (turn4-turn) * vrf / (turn4-turn3)
113  else
114     vrf = 0
115  endif
116  !      if (turn .le. 10 .or. turn .gt. 1990) then
117  !       print*," turn: ",turn, " vrf: ", vrf
118  !      endif
119  do itrack = 1, ktrack
120     py  = track(4,itrack)                                           &
121          + vrf * sin(phirf + omega * turn)
122
123     !---- track(2,jtrk) = track(2,jtrk)
124     !        pt = track(6,itrack)
125     !        pt = pt + vrf * sin(phirf - omega * track(5,itrack))
126
127     track(4,itrack) = py
128  enddo
129end subroutine ttvacdip
Note: See TracBrowser for help on using the repository browser.