newtonian_speeds Subroutine

pure subroutine newtonian_speeds(mass1, mass2, energy, angular_momentum, distance, v1, v2)

Compute Newtonian speeds for two stars on parabolic orbits at a given distance, applying conservation of energy and momentum. For a 2-body problem with parabolic orbit, the total energy is zero.

See Goldstein, Poole, Safko, "Classical mechanics", Sec.3.2, eq. (3.16); Sec.3.3, eq.(3.21); Sec.3.7 See Landau, Lifshitz, "Mechanics", Chapter III

FT 13.12.2022


Arguments

Type IntentOptional Attributes Name
double precision, intent(in) :: mass1
double precision, intent(in) :: mass2
double precision, intent(in) :: energy
double precision, intent(in) :: angular_momentum
double precision, intent(in) :: distance
double precision, intent(out), DIMENSION(3) :: v1
double precision, intent(out), DIMENSION(3) :: v2

Called by

proc~~newtonian_speeds~~CalledByGraph proc~newtonian_speeds newtonian_speeds program~construct_newtonian_binary construct_newtonian_binary program~construct_newtonian_binary->proc~newtonian_speeds

Contents

Source Code


Variables

Type Visibility Attributes Name Initial
double precision, public :: angular_speed_fictitious
double precision, public :: mu
double precision, public :: radial_speed_fictitious
double precision, public :: total_speed_fictitious
double precision, public, DIMENSION(3) :: v_fictitious

Source Code

  PURE SUBROUTINE newtonian_speeds &
    (mass1, mass2, energy, angular_momentum, distance, v1, v2)

    !***********************************************************
    !
    !# Compute Newtonian speeds for two stars on parabolic orbits
    !  at a given distance, applying conservation of energy
    !  and momentum.
    !  For a 2-body problem with parabolic orbit, the total
    !  energy is zero.
    !
    !  See Goldstein, Poole, Safko, "Classical mechanics",
    !  Sec.3.2, eq. (3.16); Sec.3.3, eq.(3.21); Sec.3.7
    !  See Landau, Lifshitz, "Mechanics", Chapter III
    !
    !  FT 13.12.2022
    !
    !***********************************************************

    IMPLICIT NONE

    DOUBLE PRECISION, INTENT(IN):: mass1, mass2, energy, angular_momentum, &
                                   distance
    DOUBLE PRECISION, DIMENSION(3), INTENT(OUT):: v1, v2

    DOUBLE PRECISION:: mu, radial_speed_fictitious, total_speed_fictitious, &
                       angular_speed_fictitious

    DOUBLE PRECISION, DIMENSION(3):: v_fictitious

    mu= mass1*mass2/(mass1 + mass2)

    radial_speed_fictitious = SQRT(two/mu*(energy + mass1*mass2/distance &
                                   - angular_momentum**2/(two*mu*distance**2)))

    !PRINT *, "radial_speed_fictitious=", radial_speed_fictitious

    total_speed_fictitious  = SQRT(two/mu*(energy + mass1*mass2/distance))

    !PRINT *, "total_speed_fictitious=", total_speed_fictitious

    angular_speed_fictitious= SQRT((total_speed_fictitious**2 &
                                    - radial_speed_fictitious**2)/distance**2)

    !PRINT *, "angular_speed_fictitious=", angular_speed_fictitious

    v_fictitious(1)= radial_speed_fictitious
    v_fictitious(2)= distance*angular_speed_fictitious
    v_fictitious(3)= zero

    v1(1)= mass2*v_fictitious(1)/(mass1 + mass2)
    v1(2)= mass2*v_fictitious(2)/(mass1 + mass2)
    v1(3)= zero

    v2(1)= - mass1*v_fictitious(1)/(mass1 + mass2)
    v2(2)= - mass1*v_fictitious(2)/(mass1 + mass2)
    v2(3)=   zero

  END SUBROUTINE newtonian_speeds