!........................................................................ ! ! Subroutine : TRANSFER_LINE_MATRIX_CALC ! (lat,start_name,end_name, mat, detmn_dag) ! ! Description: Compute energy dependence of each term of 4X4 matrix from ! and including START_NAME to END_NAME ! ! Arguments : ! Input: ! LAT -- lat_struct: Lat ! ! Output: ! mat -- transfer matrix from start_name to end_name ! detmn_dag -- determinant of m + adjoint n, m=mat(3:2,4:2), ! n=mat(1:2,3:4) ! ! Mod/Commons: use bmad ! ! Calls : ! ! Author : ! ! Modified : ! !........................................................................ ! ! ! $Log$ ! Revision 1.6 2007/01/30 16:15:14 dcs ! merged with branch_bmad_1. ! ! Revision 1.3 2003/12/05 15:23:42 dcs ! Fix standard nonconforming stuff. ! ! Revision 1.2 2003/04/30 17:14:56 cesrulib ! dlr's changes since last import ! ! Revision 1.1.1.1 2002/12/13 19:23:30 cesrulib ! import bmadz ! ! !........................................................................ ! subroutine transfer_line_matrix_calc(lat, start_name, end_name, mat, detmn_dag) use bmad implicit none type (lat_struct) lat real(rp) mat(6,6) real(rp) mn_dag(2,2), detmn_dag integer i, n integer ixs, ixe, ix logical started, ended character*12 start_name, end_name ixs = index(start_name, ' ') - 1 ixe = index(end_name, ' ') - 1 call mat_make_unit (mat) ! form unit matrix n=0 started = .false. ended = .false. do while (.not. ended) n = n+1 i = n if(n > lat%n_ele_track ) i = n - lat%n_ele_track if(lat%ele(i)%name(1:ixs) == start_name(1:ixs) )started = .true. if(started .and. lat%ele(i)%name(1:ixe) == end_name(1:ixe) ) & ended = .true. if(started) & mat(1:6,1:6) = matmul (lat%ele(i)%mat6(1:6,1:6), mat(1:6,1:6)) enddo mn_dag(1,1) = mat(3,1) + mat(2,4) mn_dag(1,2) = mat(3,2) - mat(1,4) mn_dag(2,1) = mat(4,1) - mat(2,3) mn_dag(2,2) = mat(4,2) + mat(1,3) detmn_dag = mn_dag(1,1) * mn_dag(2,2) - mn_dag(1,2) * mn_dag(2,1) end subroutine