| 254 | * | * | 
| 255 | * | * | 
| 256 |  |  | 
| 257 | ********************************************************************** | c$$$********************************************************************** | 
| 258 | * | c$$$* | 
| 259 | * | c$$$* | 
| 260 | *     routine per tracciare la particella di uno STEP | c$$$*     routine per tracciare la particella di uno STEP | 
| 261 | *     *** extended version *** | c$$$*     *** extended version *** | 
| 262 | *     it return also the track-length | c$$$*     it return also the track-length | 
| 263 | * | c$$$* | 
| 264 | SUBROUTINE GRKUTA2 (CHARGE,STEP,VECT,VOUT) | c$$$      SUBROUTINE GRKUTA2 (CHARGE,STEP,VECT,VOUT) | 
| 265 | C. | c$$$C. | 
| 266 | C.    ****************************************************************** | c$$$C.    ****************************************************************** | 
| 267 | C.    *                                                                * | c$$$C.    *                                                                * | 
| 268 | C.    *  Runge-Kutta method for tracking a particle through a magnetic * | c$$$C.    *  Runge-Kutta method for tracking a particle through a magnetic * | 
| 269 | C.    *  field. Uses Nystroem algorithm (See Handbook Nat. Bur. of     * | c$$$C.    *  field. Uses Nystroem algorithm (See Handbook Nat. Bur. of     * | 
| 270 | C.    *  Standards, procedure 25.5.20)                                 * | c$$$C.    *  Standards, procedure 25.5.20)                                 * | 
| 271 | C.    *                                                                * | c$$$C.    *                                                                * | 
| 272 | C.    *  Input parameters                                              * | c$$$C.    *  Input parameters                                              * | 
| 273 | C.    *       CHARGE    Particle charge                                * | c$$$C.    *       CHARGE    Particle charge                                * | 
| 274 | C.    *       STEP      Step size                                      * | c$$$C.    *       STEP      Step size                                      * | 
| 275 | C.    *       VECT      Initial co-ords,direction cosines,momentum     * | c$$$C.    *       VECT      Initial co-ords,direction cosines,momentum     * | 
| 276 | C.    *  Output parameters                                             * | c$$$C.    *  Output parameters                                             * | 
| 277 | C.    *       VOUT      Output co-ords,direction cosines,momentum      * | c$$$C.    *       VOUT      Output co-ords,direction cosines,momentum      * | 
| 278 | C.    *  User routine called                                           * | c$$$C.    *  User routine called                                           * | 
| 279 | C.    *       CALL GUFLD(X,F)                                          * | c$$$C.    *       CALL GUFLD(X,F)                                          * | 
| 280 | C.    *                                                                * | c$$$C.    *                                                                * | 
| 281 | C.    *    ==>Called by : <USER>, GUSWIM                               * | c$$$C.    *    ==>Called by : <USER>, GUSWIM                               * | 
| 282 | C.    *       Authors    R.Brun, M.Hansroul  *********                 * | c$$$C.    *       Authors    R.Brun, M.Hansroul  *********                 * | 
| 283 | C.    *                  V.Perevoztchikov (CUT STEP implementation)    * | c$$$C.    *                  V.Perevoztchikov (CUT STEP implementation)    * | 
| 284 | C.    *                                                                * | c$$$C.    *                                                                * | 
| 285 | C.    *                                                                * | c$$$C.    *                                                                * | 
| 286 | C.    ****************************************************************** | c$$$C.    ****************************************************************** | 
| 287 | C. | c$$$C. | 
| 288 | IMPLICIT DOUBLE PRECISION(A-H,O-Z) | c$$$      IMPLICIT DOUBLE PRECISION(A-H,O-Z) | 
| 289 | * | c$$$* | 
| 290 | REAL VVV(3),FFF(3) | c$$$      REAL VVV(3),FFF(3) | 
| 291 | REAL*8 CHARGE, STEP, VECT(*), VOUT(*), F(4) | c$$$      REAL*8 CHARGE, STEP, VECT(*), VOUT(*), F(4) | 
| 292 | REAL*8 XYZT(3), XYZ(3), X, Y, Z, XT, YT, ZT | c$$$      REAL*8 XYZT(3), XYZ(3), X, Y, Z, XT, YT, ZT | 
| 293 | DIMENSION SECXS(4),SECYS(4),SECZS(4),HXP(3) | c$$$      DIMENSION SECXS(4),SECYS(4),SECZS(4),HXP(3) | 
| 294 | EQUIVALENCE (X,XYZ(1)),(Y,XYZ(2)),(Z,XYZ(3)), | c$$$      EQUIVALENCE (X,XYZ(1)),(Y,XYZ(2)),(Z,XYZ(3)), | 
| 295 | +            (XT,XYZT(1)),(YT,XYZT(2)),(ZT,XYZT(3)) | c$$$     +            (XT,XYZT(1)),(YT,XYZT(2)),(ZT,XYZT(3)) | 
| 296 | * | c$$$* | 
| 297 | PARAMETER (MAXIT = 1992, MAXCUT = 11) | c$$$      PARAMETER (MAXIT = 1992, MAXCUT = 11) | 
| 298 | PARAMETER (EC=2.9979251D-4,DLT=1D-4,DLT32=DLT/32) | c$$$      PARAMETER (EC=2.9979251D-4,DLT=1D-4,DLT32=DLT/32) | 
| 299 | PARAMETER (ZERO=0, ONE=1, TWO=2, THREE=3) | c$$$      PARAMETER (ZERO=0, ONE=1, TWO=2, THREE=3) | 
| 300 | PARAMETER (THIRD=ONE/THREE, HALF=ONE/TWO) | c$$$      PARAMETER (THIRD=ONE/THREE, HALF=ONE/TWO) | 
| 301 | PARAMETER (PISQUA=.986960440109D+01) | c$$$      PARAMETER (PISQUA=.986960440109D+01) | 
| 302 | PARAMETER (IX=1,IY=2,IZ=3,IPX=4,IPY=5,IPZ=6) | c$$$      PARAMETER (IX=1,IY=2,IZ=3,IPX=4,IPY=5,IPZ=6) | 
| 303 |  | c$$$ | 
| 304 | *     track length | c$$$*     track length | 
| 305 | REAL*8 DL | c$$$      REAL*8 DL | 
| 306 |  | c$$$ | 
| 307 | *. | c$$$*. | 
| 308 | *.    ------------------------------------------------------------------ | c$$$*.    ------------------------------------------------------------------ | 
| 309 | *. | c$$$*. | 
| 310 | *             This constant is for units CM,GEV/C and KGAUSS | c$$$*             This constant is for units CM,GEV/C and KGAUSS | 
| 311 | * | c$$$* | 
| 312 | ITER = 0 | c$$$      ITER = 0 | 
| 313 | NCUT = 0 | c$$$      NCUT = 0 | 
| 314 | DO 10 J=1,8 | c$$$      DO 10 J=1,8 | 
| 315 | VOUT(J)=VECT(J) | c$$$         VOUT(J)=VECT(J) | 
| 316 | 10 CONTINUE | c$$$   10 CONTINUE | 
| 317 | PINV   = EC * CHARGE / VECT(7) | c$$$      PINV   = EC * CHARGE / VECT(7) | 
| 318 | TL = 0. | c$$$      TL = 0. | 
| 319 | H      = STEP | c$$$      H      = STEP | 
| 320 |  | c$$$ | 
| 321 | c      print*,'===================== START GRKUTA2' | c$$$c      print*,'===================== START GRKUTA2' | 
| 322 |  | c$$$ | 
| 323 | * | c$$$* | 
| 324 | * | c$$$* | 
| 325 | 20 REST  = STEP-TL | c$$$   20 REST  = STEP-TL | 
| 326 | IF (DABS(H).GT.DABS(REST)) H = REST | c$$$      IF (DABS(H).GT.DABS(REST)) H = REST | 
| 327 | DO I=1,3 | c$$$      DO I=1,3 | 
| 328 | VVV(I)=SNGL(VOUT(I)) | c$$$       VVV(I)=SNGL(VOUT(I)) | 
| 329 | ENDDO | c$$$      ENDDO | 
| 330 |  | c$$$ | 
| 331 | CALL GUFLD(VVV,FFF) | c$$$      CALL GUFLD(VVV,FFF) | 
| 332 | *      print*,'GRKUTA Bx,By,Bz: ',(FFF(i),i=1,3) | c$$$*      print*,'GRKUTA Bx,By,Bz: ',(FFF(i),i=1,3) | 
| 333 | DO I=1,3 | c$$$      DO I=1,3 | 
| 334 | F(I)=DBLE(FFF(I)) | c$$$       F(I)=DBLE(FFF(I)) | 
| 335 | ENDDO | c$$$      ENDDO | 
| 336 | * | c$$$* | 
| 337 | *             Start of integration | c$$$*             Start of integration | 
| 338 | * | c$$$* | 
| 339 | X      = VOUT(1) | c$$$      X      = VOUT(1) | 
| 340 | Y      = VOUT(2) | c$$$      Y      = VOUT(2) | 
| 341 | Z      = VOUT(3) | c$$$      Z      = VOUT(3) | 
| 342 | A      = VOUT(4) | c$$$      A      = VOUT(4) | 
| 343 | B      = VOUT(5) | c$$$      B      = VOUT(5) | 
| 344 | C      = VOUT(6) | c$$$      C      = VOUT(6) | 
| 345 |  | c$$$ | 
| 346 | DL     = VOUT(8) | c$$$      DL     = VOUT(8) | 
| 347 |  | c$$$ | 
| 348 | * | c$$$* | 
| 349 | H2     = HALF * H | c$$$      H2     = HALF * H | 
| 350 | H4     = HALF * H2 | c$$$      H4     = HALF * H2 | 
| 351 | PH     = PINV * H | c$$$      PH     = PINV * H | 
| 352 | PH2    = HALF * PH | c$$$      PH2    = HALF * PH | 
| 353 | SECXS(1) = (B * F(3) - C * F(2)) * PH2 | c$$$      SECXS(1) = (B * F(3) - C * F(2)) * PH2 | 
| 354 | SECYS(1) = (C * F(1) - A * F(3)) * PH2 | c$$$      SECYS(1) = (C * F(1) - A * F(3)) * PH2 | 
| 355 | SECZS(1) = (A * F(2) - B * F(1)) * PH2 | c$$$      SECZS(1) = (A * F(2) - B * F(1)) * PH2 | 
| 356 | ANG2 = (SECXS(1)**2 + SECYS(1)**2 + SECZS(1)**2) | c$$$      ANG2 = (SECXS(1)**2 + SECYS(1)**2 + SECZS(1)**2) | 
| 357 | IF (ANG2.GT.PISQUA) GO TO 40 | c$$$      IF (ANG2.GT.PISQUA) GO TO 40 | 
| 358 | DXT    = H2 * A + H4 * SECXS(1) | c$$$      DXT    = H2 * A + H4 * SECXS(1) | 
| 359 | DYT    = H2 * B + H4 * SECYS(1) | c$$$      DYT    = H2 * B + H4 * SECYS(1) | 
| 360 | DZT    = H2 * C + H4 * SECZS(1) | c$$$      DZT    = H2 * C + H4 * SECZS(1) | 
| 361 | XT     = X + DXT | c$$$      XT     = X + DXT | 
| 362 | YT     = Y + DYT | c$$$      YT     = Y + DYT | 
| 363 | ZT     = Z + DZT | c$$$      ZT     = Z + DZT | 
| 364 | * | c$$$* | 
| 365 | *              Second intermediate point | c$$$*              Second intermediate point | 
| 366 | * | c$$$* | 
| 367 | EST = DABS(DXT)+DABS(DYT)+DABS(DZT) | c$$$      EST = DABS(DXT)+DABS(DYT)+DABS(DZT) | 
| 368 | IF (EST.GT.H) GO TO 30 | c$$$      IF (EST.GT.H) GO TO 30 | 
| 369 |  | c$$$ | 
| 370 | DO I=1,3 | c$$$      DO I=1,3 | 
| 371 | VVV(I)=SNGL(XYZT(I)) | c$$$       VVV(I)=SNGL(XYZT(I)) | 
| 372 | ENDDO | c$$$      ENDDO | 
| 373 | CALL GUFLD(VVV,FFF) | c$$$      CALL GUFLD(VVV,FFF) | 
| 374 | DO I=1,3 | c$$$      DO I=1,3 | 
| 375 | F(I)=DBLE(FFF(I)) | c$$$       F(I)=DBLE(FFF(I)) | 
| 376 | ENDDO | c$$$      ENDDO | 
| 377 | C      CALL GUFLD(XYZT,F) | c$$$C      CALL GUFLD(XYZT,F) | 
| 378 | AT     = A + SECXS(1) | c$$$      AT     = A + SECXS(1) | 
| 379 | BT     = B + SECYS(1) | c$$$      BT     = B + SECYS(1) | 
| 380 | CT     = C + SECZS(1) | c$$$      CT     = C + SECZS(1) | 
| 381 | * | c$$$* | 
| 382 | SECXS(2) = (BT * F(3) - CT * F(2)) * PH2 | c$$$      SECXS(2) = (BT * F(3) - CT * F(2)) * PH2 | 
| 383 | SECYS(2) = (CT * F(1) - AT * F(3)) * PH2 | c$$$      SECYS(2) = (CT * F(1) - AT * F(3)) * PH2 | 
| 384 | SECZS(2) = (AT * F(2) - BT * F(1)) * PH2 | c$$$      SECZS(2) = (AT * F(2) - BT * F(1)) * PH2 | 
| 385 | AT     = A + SECXS(2) | c$$$      AT     = A + SECXS(2) | 
| 386 | BT     = B + SECYS(2) | c$$$      BT     = B + SECYS(2) | 
| 387 | CT     = C + SECZS(2) | c$$$      CT     = C + SECZS(2) | 
| 388 | SECXS(3) = (BT * F(3) - CT * F(2)) * PH2 | c$$$      SECXS(3) = (BT * F(3) - CT * F(2)) * PH2 | 
| 389 | SECYS(3) = (CT * F(1) - AT * F(3)) * PH2 | c$$$      SECYS(3) = (CT * F(1) - AT * F(3)) * PH2 | 
| 390 | SECZS(3) = (AT * F(2) - BT * F(1)) * PH2 | c$$$      SECZS(3) = (AT * F(2) - BT * F(1)) * PH2 | 
| 391 | DXT    = H * (A + SECXS(3)) | c$$$      DXT    = H * (A + SECXS(3)) | 
| 392 | DYT    = H * (B + SECYS(3)) | c$$$      DYT    = H * (B + SECYS(3)) | 
| 393 | DZT    = H * (C + SECZS(3)) | c$$$      DZT    = H * (C + SECZS(3)) | 
| 394 | XT     = X + DXT | c$$$      XT     = X + DXT | 
| 395 | YT     = Y + DYT | c$$$      YT     = Y + DYT | 
| 396 | ZT     = Z + DZT | c$$$      ZT     = Z + DZT | 
| 397 | AT     = A + TWO*SECXS(3) | c$$$      AT     = A + TWO*SECXS(3) | 
| 398 | BT     = B + TWO*SECYS(3) | c$$$      BT     = B + TWO*SECYS(3) | 
| 399 | CT     = C + TWO*SECZS(3) | c$$$      CT     = C + TWO*SECZS(3) | 
| 400 | * | c$$$* | 
| 401 | EST = ABS(DXT)+ABS(DYT)+ABS(DZT) | c$$$      EST = ABS(DXT)+ABS(DYT)+ABS(DZT) | 
| 402 | IF (EST.GT.2.*ABS(H)) GO TO 30 | c$$$      IF (EST.GT.2.*ABS(H)) GO TO 30 | 
| 403 |  | c$$$ | 
| 404 | DO I=1,3 | c$$$      DO I=1,3 | 
| 405 | VVV(I)=SNGL(XYZT(I)) | c$$$       VVV(I)=SNGL(XYZT(I)) | 
| 406 | ENDDO | c$$$      ENDDO | 
| 407 | CALL GUFLD(VVV,FFF) | c$$$      CALL GUFLD(VVV,FFF) | 
| 408 | DO I=1,3 | c$$$      DO I=1,3 | 
| 409 | F(I)=DBLE(FFF(I)) | c$$$       F(I)=DBLE(FFF(I)) | 
| 410 | ENDDO | c$$$      ENDDO | 
| 411 | C      CALL GUFLD(XYZT,F) | c$$$C      CALL GUFLD(XYZT,F) | 
| 412 | * | c$$$* | 
| 413 | Z      = Z + (C + (SECZS(1) + SECZS(2) + SECZS(3)) * THIRD) * H | c$$$      Z      = Z + (C + (SECZS(1) + SECZS(2) + SECZS(3)) * THIRD) * H | 
| 414 | Y      = Y + (B + (SECYS(1) + SECYS(2) + SECYS(3)) * THIRD) * H | c$$$      Y      = Y + (B + (SECYS(1) + SECYS(2) + SECYS(3)) * THIRD) * H | 
| 415 | X      = X + (A + (SECXS(1) + SECXS(2) + SECXS(3)) * THIRD) * H | c$$$      X      = X + (A + (SECXS(1) + SECXS(2) + SECXS(3)) * THIRD) * H | 
| 416 | * | c$$$* | 
| 417 | SECXS(4) = (BT*F(3) - CT*F(2))* PH2 | c$$$      SECXS(4) = (BT*F(3) - CT*F(2))* PH2 | 
| 418 | SECYS(4) = (CT*F(1) - AT*F(3))* PH2 | c$$$      SECYS(4) = (CT*F(1) - AT*F(3))* PH2 | 
| 419 | SECZS(4) = (AT*F(2) - BT*F(1))* PH2 | c$$$      SECZS(4) = (AT*F(2) - BT*F(1))* PH2 | 
| 420 | A      = A+(SECXS(1)+SECXS(4)+TWO * (SECXS(2)+SECXS(3))) * THIRD | c$$$      A      = A+(SECXS(1)+SECXS(4)+TWO * (SECXS(2)+SECXS(3))) * THIRD | 
| 421 | B      = B+(SECYS(1)+SECYS(4)+TWO * (SECYS(2)+SECYS(3))) * THIRD | c$$$      B      = B+(SECYS(1)+SECYS(4)+TWO * (SECYS(2)+SECYS(3))) * THIRD | 
| 422 | C      = C+(SECZS(1)+SECZS(4)+TWO * (SECZS(2)+SECZS(3))) * THIRD | c$$$      C      = C+(SECZS(1)+SECZS(4)+TWO * (SECZS(2)+SECZS(3))) * THIRD | 
| 423 | * | c$$$* | 
| 424 | EST    = ABS(SECXS(1)+SECXS(4) - (SECXS(2)+SECXS(3))) | c$$$      EST    = ABS(SECXS(1)+SECXS(4) - (SECXS(2)+SECXS(3))) | 
| 425 | ++        ABS(SECYS(1)+SECYS(4) - (SECYS(2)+SECYS(3))) | c$$$     ++        ABS(SECYS(1)+SECYS(4) - (SECYS(2)+SECYS(3))) | 
| 426 | ++        ABS(SECZS(1)+SECZS(4) - (SECZS(2)+SECZS(3))) | c$$$     ++        ABS(SECZS(1)+SECZS(4) - (SECZS(2)+SECZS(3))) | 
| 427 | * | c$$$* | 
| 428 | IF (EST.GT.DLT .AND. ABS(H).GT.1.E-4) GO TO 30 | c$$$      IF (EST.GT.DLT .AND. ABS(H).GT.1.E-4) GO TO 30 | 
| 429 |  | c$$$ | 
| 430 | ITER = ITER + 1 | c$$$      ITER = ITER + 1 | 
| 431 | NCUT = 0 | c$$$      NCUT = 0 | 
| 432 | *               If too many iterations, go to HELIX | c$$$*               If too many iterations, go to HELIX | 
| 433 | IF (ITER.GT.MAXIT) GO TO 40 | c$$$      IF (ITER.GT.MAXIT) GO TO 40 | 
| 434 | * | c$$$* | 
| 435 | DL     = VOUT(8) + | c$$$      DL     = VOUT(8) + | 
| 436 | $     DSQRT( 0 | c$$$     $     DSQRT( 0 | 
| 437 | $     + (X-VOUT(1))**2 | c$$$     $     + (X-VOUT(1))**2 | 
| 438 | $     + (Y-VOUT(2))**2 | c$$$     $     + (Y-VOUT(2))**2 | 
| 439 | $     + (Z-VOUT(3))**2 | c$$$     $     + (Z-VOUT(3))**2 | 
| 440 | $     ) | c$$$     $     ) | 
| 441 | c      print*,'- ',VOUT(3),z,VOUT(1),x,VOUT(2),y,DL | c$$$c      print*,'- ',VOUT(3),z,VOUT(1),x,VOUT(2),y,DL | 
| 442 | * | c$$$* | 
| 443 | TL = TL + H | c$$$      TL = TL + H | 
| 444 | IF (EST.LT.(DLT32)) THEN | c$$$      IF (EST.LT.(DLT32)) THEN | 
| 445 | H = H*TWO | c$$$         H = H*TWO | 
| 446 | ENDIF | c$$$      ENDIF | 
| 447 | CBA    = ONE/ SQRT(A*A + B*B + C*C) | c$$$      CBA    = ONE/ SQRT(A*A + B*B + C*C) | 
| 448 | VOUT(1) = X | c$$$      VOUT(1) = X | 
| 449 | VOUT(2) = Y | c$$$      VOUT(2) = Y | 
| 450 | VOUT(3) = Z | c$$$      VOUT(3) = Z | 
| 451 | VOUT(4) = CBA*A | c$$$      VOUT(4) = CBA*A | 
| 452 | VOUT(5) = CBA*B | c$$$      VOUT(5) = CBA*B | 
| 453 | VOUT(6) = CBA*C | c$$$      VOUT(6) = CBA*C | 
| 454 | VOUT(8) = DL | c$$$      VOUT(8) = DL | 
| 455 | REST = STEP - TL | c$$$      REST = STEP - TL | 
| 456 | IF (STEP.LT.0.) REST = -REST | c$$$      IF (STEP.LT.0.) REST = -REST | 
| 457 | IF (REST .GT. 1.E-5*DABS(STEP)) GO TO 20 | c$$$      IF (REST .GT. 1.E-5*DABS(STEP)) GO TO 20 | 
| 458 | * | c$$$* | 
| 459 | GO TO 999 | c$$$      GO TO 999 | 
| 460 | * | c$$$* | 
| 461 | **              CUT STEP | c$$$**              CUT STEP | 
| 462 | 30 NCUT = NCUT + 1 | c$$$   30 NCUT = NCUT + 1 | 
| 463 | *               If too many cuts , go to HELIX | c$$$*               If too many cuts , go to HELIX | 
| 464 | IF (NCUT.GT.MAXCUT)       GO TO 40 | c$$$      IF (NCUT.GT.MAXCUT)       GO TO 40 | 
| 465 | H = H*HALF | c$$$      H = H*HALF | 
| 466 | GO TO 20 | c$$$      GO TO 20 | 
| 467 | * | c$$$* | 
| 468 | **              ANGLE TOO BIG, USE HELIX | c$$$**              ANGLE TOO BIG, USE HELIX | 
| 469 | 40 F1  = F(1) | c$$$   40 F1  = F(1) | 
| 470 | F2  = F(2) | c$$$      F2  = F(2) | 
| 471 | F3  = F(3) | c$$$      F3  = F(3) | 
| 472 | F4  = DSQRT(F1**2+F2**2+F3**2) | c$$$      F4  = DSQRT(F1**2+F2**2+F3**2) | 
| 473 | RHO = -F4*PINV | c$$$      RHO = -F4*PINV | 
| 474 | TET = RHO * STEP | c$$$      TET = RHO * STEP | 
| 475 | IF(TET.NE.0.) THEN | c$$$      IF(TET.NE.0.) THEN | 
| 476 | HNORM = ONE/F4 | c$$$         HNORM = ONE/F4 | 
| 477 | F1 = F1*HNORM | c$$$         F1 = F1*HNORM | 
| 478 | F2 = F2*HNORM | c$$$         F2 = F2*HNORM | 
| 479 | F3 = F3*HNORM | c$$$         F3 = F3*HNORM | 
| 480 | * | c$$$* | 
| 481 | HXP(1) = F2*VECT(IPZ) - F3*VECT(IPY) | c$$$         HXP(1) = F2*VECT(IPZ) - F3*VECT(IPY) | 
| 482 | HXP(2) = F3*VECT(IPX) - F1*VECT(IPZ) | c$$$         HXP(2) = F3*VECT(IPX) - F1*VECT(IPZ) | 
| 483 | HXP(3) = F1*VECT(IPY) - F2*VECT(IPX) | c$$$         HXP(3) = F1*VECT(IPY) - F2*VECT(IPX) | 
| 484 |  | c$$$ | 
| 485 | HP = F1*VECT(IPX) + F2*VECT(IPY) + F3*VECT(IPZ) | c$$$         HP = F1*VECT(IPX) + F2*VECT(IPY) + F3*VECT(IPZ) | 
| 486 | * | c$$$* | 
| 487 | RHO1 = ONE/RHO | c$$$         RHO1 = ONE/RHO | 
| 488 | SINT = DSIN(TET) | c$$$         SINT = DSIN(TET) | 
| 489 | COST = TWO*DSIN(HALF*TET)**2 | c$$$         COST = TWO*DSIN(HALF*TET)**2 | 
| 490 | * | c$$$* | 
| 491 | G1 = SINT*RHO1 | c$$$         G1 = SINT*RHO1 | 
| 492 | G2 = COST*RHO1 | c$$$         G2 = COST*RHO1 | 
| 493 | G3 = (TET-SINT) * HP*RHO1 | c$$$         G3 = (TET-SINT) * HP*RHO1 | 
| 494 | G4 = -COST | c$$$         G4 = -COST | 
| 495 | G5 = SINT | c$$$         G5 = SINT | 
| 496 | G6 = COST * HP | c$$$         G6 = COST * HP | 
| 497 |  | c$$$ | 
| 498 | VOUT(IX) = VECT(IX) + (G1*VECT(IPX) + G2*HXP(1) + G3*F1) | c$$$         VOUT(IX) = VECT(IX) + (G1*VECT(IPX) + G2*HXP(1) + G3*F1) | 
| 499 | VOUT(IY) = VECT(IY) + (G1*VECT(IPY) + G2*HXP(2) + G3*F2) | c$$$         VOUT(IY) = VECT(IY) + (G1*VECT(IPY) + G2*HXP(2) + G3*F2) | 
| 500 | VOUT(IZ) = VECT(IZ) + (G1*VECT(IPZ) + G2*HXP(3) + G3*F3) | c$$$         VOUT(IZ) = VECT(IZ) + (G1*VECT(IPZ) + G2*HXP(3) + G3*F3) | 
| 501 |  | c$$$ | 
| 502 | VOUT(IPX) = VECT(IPX) + (G4*VECT(IPX) + G5*HXP(1) + G6*F1) | c$$$         VOUT(IPX) = VECT(IPX) + (G4*VECT(IPX) + G5*HXP(1) + G6*F1) | 
| 503 | VOUT(IPY) = VECT(IPY) + (G4*VECT(IPY) + G5*HXP(2) + G6*F2) | c$$$         VOUT(IPY) = VECT(IPY) + (G4*VECT(IPY) + G5*HXP(2) + G6*F2) | 
| 504 | VOUT(IPZ) = VECT(IPZ) + (G4*VECT(IPZ) + G5*HXP(3) + G6*F3) | c$$$         VOUT(IPZ) = VECT(IPZ) + (G4*VECT(IPZ) + G5*HXP(3) + G6*F3) | 
| 505 | * | c$$$* | 
| 506 | ELSE | c$$$      ELSE | 
| 507 | VOUT(IX) = VECT(IX) + STEP*VECT(IPX) | c$$$         VOUT(IX) = VECT(IX) + STEP*VECT(IPX) | 
| 508 | VOUT(IY) = VECT(IY) + STEP*VECT(IPY) | c$$$         VOUT(IY) = VECT(IY) + STEP*VECT(IPY) | 
| 509 | VOUT(IZ) = VECT(IZ) + STEP*VECT(IPZ) | c$$$         VOUT(IZ) = VECT(IZ) + STEP*VECT(IPZ) | 
| 510 | * | c$$$* | 
| 511 | ENDIF | c$$$      ENDIF | 
| 512 | *     TEMP !!! TEMP !!! TEMP !!! TEMP !!! TEMP !!! TEMP !!! | c$$$*     TEMP !!! TEMP !!! TEMP !!! TEMP !!! TEMP !!! TEMP !!! | 
| 513 | *     devo mettere la lunghezza dell'elica!!!!!!!!!!!!!! | c$$$*     devo mettere la lunghezza dell'elica!!!!!!!!!!!!!! | 
| 514 | *     ma non mi riesce :-( | c$$$*     ma non mi riesce :-( | 
| 515 | VOUT(8) = DSQRT( 0 | c$$$      VOUT(8) = DSQRT( 0 | 
| 516 | $     +(VOUT(IX)-VECT(IX))**2 | c$$$     $     +(VOUT(IX)-VECT(IX))**2 | 
| 517 | $     +(VOUT(IY)-VECT(IY))**2 | c$$$     $     +(VOUT(IY)-VECT(IY))**2 | 
| 518 | $     +(VOUT(IZ)-VECT(IZ))**2 | c$$$     $     +(VOUT(IZ)-VECT(IZ))**2 | 
| 519 | $     ) | c$$$     $     ) | 
| 520 | c      print*,'WARNING: GRKUTA2 --> ' | c$$$c      print*,'WARNING: GRKUTA2 --> ' | 
| 521 | c     $     ,'helix :-( ... length evaluated with straight line' | c$$$c     $     ,'helix :-( ... length evaluated with straight line' | 
| 522 |  | c$$$ | 
| 523 | * | c$$$* | 
| 524 | 999 END | c$$$  999 END | 
| 525 | * | c$$$* | 
| 526 | * | c$$$* | 
| 527 |  |  | 
| 528 | ********************************************************************** | ********************************************************************** | 
| 529 | * | * |