231 #include "Zelemagp.h" 236 type(
coord)::dispmr, dispmd
245 logical usemiddle, high, usecmiddle
248 real*8 newmom(3), de, e1, e2, p1sq, p2sq, newe,
norm 251 leng = intinfarray(processno)%length
255 p1sq =dot_product(trackbefmove%p%fm%p(1:3),
256 * trackbefmove%p%fm%p(1:3))
257 e1 = sqrt( p1sq + trackbefmove%p%mass**2)
258 p2sq =dot_product(newmom(1:3),newmom(1:3))
259 e2=sqrt(p2sq + trackbefmove%p%mass**2)
263 newe = movedtrack%p%fm%p(4) + de
264 if( newe < trackbefmove%p%mass )
then 265 newe = trackbefmove%p%mass
270 if( p2sq <= 0. )
then 271 write(0,*)
' p2sq = ',p2sq
273 *
' TrackBefMove%p=',trackbefmove%p%fm%p(1:4)
274 write(0,*)
' dE, newE=',de, newe
275 write(0,*)
' leng =',
leng 276 write(0,*)
'dispmr=',dispmr%r(:)
277 write(0,*)
'dispmd=',dispmd%r(:)
279 *
'code, chg=',trackbefmove%p%code,
280 * trackbefmove%p%charge
282 newe = trackbefmove%p%mass
284 dispmd%r(:) = (/0.,0.,1./)
286 norm = sqrt( (newe**2 - trackbefmove%p%mass**2)/p2sq)
287 newmom(:) = newmom(:) *
norm 290 movedtrack%p%fm%p(4) = newe
294 movedtrack%pos%xyz%r(:) = trackbefmove%pos%xyz%r(:) +
296 movedtrack%p%fm%p(1:3) = newmom(:)
333 if(userungekutta .eq. 8 )
then 335 * movedtrack%p%fm%p(1:3))
337 movedtrack%pos%xyz = dispmr
343 high = trackbefmove%pos%height .gt. cheight
344 usemiddle = ( userungekutta .ge. 1 .and.
345 * userungekutta .le. 3 .and.
347 usecmiddle = ( userungekutta .ge. 4 .and.
348 * userungekutta .le. 5 .and.
354 middle%r(
i) = trackbefmove%pos%xyz%r(
i)+
355 *
leng/2 * trackbefmove%vec%w%r(
i)
359 call cgeomag(yearofgeomag, middle,
363 elseif(usecmiddle)
then 368 middle%r(
i) = trackbefmove%pos%xyz%r(
i) + dispmr%r(
i)
371 call cgeomag(yearofgeomag, middle,
377 if(usemiddle .and. userungekutta .eq. 1)
then 379 elseif( usemiddle .and. userungekutta .eq. 2 )
then 380 temp1 = tempmag%x**2 + tempmag%y**2 + tempmag%z**2
381 temp2 = mag%x**2 + mag%y**2 + mag%z**2
383 if( abs(temp1-temp2)/temp1/2.0 .gt. 4.0
d-3)
then 385 * movedtrack%p%fm%p(1:3))
387 movedtrack%pos%xyz = dispmr
395 elseif(usemiddle .and. userungekutta .eq. 3)
then 396 temp1 = tempmag%x**2 + tempmag%y**2 + tempmag%z**2
397 temp2 = mag%x**2 + mag%y**2 + mag%z**2
401 if( abs(temp1-temp2)/temp1/2.0 .gt. 4.5
d-3)
then 403 * movedtrack%p%fm%p(1:3))
405 movedtrack%pos%xyz = dispmr
413 elseif(usecmiddle .and. userungekutta .eq. 4)
then 414 temp1 = tempmag%x**2 + tempmag%y**2 + tempmag%z**2
415 temp2 = mag%x**2 + mag%y**2 + mag%z**2
417 if( abs(temp1-temp2)/temp1/2.0 .gt. 4.0
d-3)
then 419 * movedtrack%p%fm%p(1:3))
421 movedtrack%pos%xyz = dispmr
429 elseif(usecmiddle .and. userungekutta .eq. 5)
then 430 temp1 = tempmag%x**2 + tempmag%y**2 + tempmag%z**2
431 temp2 = mag%x**2 + mag%y**2 + mag%z**2
433 if( abs(temp1-temp2)/temp1/2.0 .gt. 4.5
d-3)
then 435 * movedtrack%p%fm%p(1:3))
437 movedtrack%pos%xyz = dispmr
447 if(userungekutta .le. 5 .or. .not. high )
then 452 movedtrack%pos%xyz%r(
i) = trackbefmove%pos%xyz%r(
i) +
455 elseif(userungekutta .eq. 6)
then 457 * movedtrack%p%fm%p(1:3))
459 movedtrack%pos%xyz = dispmr
466 * movedtrack%p%fm%p(1:3))
468 movedtrack%pos%xyz = dispmr
476 movedtrack%vec%w = dispmd
subroutine csubstcoord(c1, c2)
block data cblkIncident data *Za1ry *HeightOfInj d3
subroutine cbdefuser(aTrack, leng, newpos, newdir, newmom)
subroutine cgeomag(yearin, llh, h, icon)
subroutine cdefbymagande(aTrack, leng, dispmr, dispmd, newmom)
block data cblkEvhnp ! currently usable models data RegMdls ad *special data *Cekaon d0
dE dx *! Nuc Int sampling table d
subroutine cbdefbyrk(aTrack, leng, newpos, newdir, newmom)
Compute magnetic deflection (angle and displacement) Use Runge-Kutta-Fehlberg Method.
subroutine cbdefbyrk2(aTrack, leng, newpos, newdir, newmom)
subroutine cmagneticdef(aTrack, B, leng, dr, dir)
subroutine ctransmagto(sys, pos, a, b)