BranchCut Subroutine

public subroutine BranchCut(q1C, q2C, BeamType, KMAH)

Checks for a branch cut crossing and updates KMAH accordingly

Arguments

Type IntentOptional Attributes Name
complex(kind=8), intent(in) :: q1C
complex(kind=8), intent(in) :: q2C
character(len=4), intent(in) :: BeamType
integer, intent(inout) :: KMAH

Called by

proc~~branchcut~~CalledByGraph proc~branchcut BranchCut proc~influencecervenycart InfluenceCervenyCart proc~influencecervenycart->proc~branchcut proc~influencecervenyraycen InfluenceCervenyRayCen proc~influencecervenyraycen->proc~branchcut proc~bellhopcore BellhopCore proc~bellhopcore->proc~influencecervenycart proc~bellhopcore->proc~influencecervenyraycen proc~bellhopcore~2 BellhopCore proc~bellhopcore~2->proc~influencecervenycart proc~bellhopcore~2->proc~influencecervenyraycen program~bellhop BELLHOP program~bellhop->proc~bellhopcore~2 program~bellhop3d BELLHOP3D program~bellhop3d->proc~bellhopcore

Source Code

  SUBROUTINE BranchCut( q1C, q2C, BeamType, KMAH )
  !! Checks for a branch cut crossing and updates KMAH accordingly

    COMPLEX  (KIND=8), INTENT( IN )    :: q1C, q2C
    CHARACTER (LEN=4), INTENT( IN )    :: BeamType
    INTEGER,           INTENT( INOUT ) :: KMAH
    REAL     (KIND=8)                  :: q1, q2

    SELECT CASE ( BeamType( 2 : 2 ) )
    CASE ( 'W' )   ! WKBeams
       q1 = REAL( q1C )
       q2 = REAL( q2C )
       IF ( ( q1 < 0.0 .AND. q2 >= 0.0 ) .OR. &
            ( q1 > 0.0 .AND. q2 <= 0.0 ) ) KMAH = -KMAH
    CASE DEFAULT
       IF ( REAL( q2C ) < 0.0 ) THEN
          q1 = AIMAG( q1C )
          q2 = AIMAG( q2C )
          IF ( ( q1 < 0.0 .AND. q2 >= 0.0 ) .OR. &
               ( q1 > 0.0 .AND. q2 <= 0.0 ) ) KMAH = -KMAH
       END IF
    END SELECT

  END SUBROUTINE BranchCut