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
Type | Intent | Optional | 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 |
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 |
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