from_ijk_to_lvlh_rv Subroutine

private subroutine from_ijk_to_lvlh_rv(rt_ijk, vt_ijk, r_ijk, v_ijk, dr_lvlh, dv_lvlh)

Transform a position (and optionally velocity) vector from IJK to LVLH.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in), dimension(3) :: rt_ijk

Target IJK absolute position vector [km]

real(kind=wp), intent(in), dimension(3) :: vt_ijk

Target IJK absolute position vector [km]

real(kind=wp), intent(in), dimension(3) :: r_ijk

Chaser IJK absolute position vector [km]

real(kind=wp), intent(in), dimension(3) :: v_ijk

Chaser IJK absolute position vector [km]

real(kind=wp), intent(out), dimension(3) :: dr_lvlh

Chaser LVLH position vector relative to target [km]

real(kind=wp), intent(out), optional, dimension(3) :: dv_lvlh

Chaser LVLH position vector relative to target [km]


Calls

proc~~from_ijk_to_lvlh_rv~~CallsGraph proc~from_ijk_to_lvlh_rv relative_motion_module::from_ijk_to_lvlh_rv interface~from_ijk_to_lvlh relative_motion_module::from_ijk_to_lvlh proc~from_ijk_to_lvlh_rv->interface~from_ijk_to_lvlh interface~from_ijk_to_lvlh->proc~from_ijk_to_lvlh_rv proc~from_ijk_to_lvlh_mat relative_motion_module::from_ijk_to_lvlh_mat interface~from_ijk_to_lvlh->proc~from_ijk_to_lvlh_mat proc~cross vector_module::cross proc~from_ijk_to_lvlh_mat->proc~cross proc~uhat_dot vector_module::uhat_dot proc~from_ijk_to_lvlh_mat->proc~uhat_dot proc~unit vector_module::unit proc~from_ijk_to_lvlh_mat->proc~unit

Called by

proc~~from_ijk_to_lvlh_rv~~CalledByGraph proc~from_ijk_to_lvlh_rv relative_motion_module::from_ijk_to_lvlh_rv interface~from_ijk_to_lvlh relative_motion_module::from_ijk_to_lvlh proc~from_ijk_to_lvlh_rv->interface~from_ijk_to_lvlh interface~from_ijk_to_lvlh->proc~from_ijk_to_lvlh_rv proc~from_lvlh_to_ijk_mat relative_motion_module::from_lvlh_to_ijk_mat proc~from_lvlh_to_ijk_mat->interface~from_ijk_to_lvlh proc~relative_motion_test relative_motion_module::relative_motion_test proc~relative_motion_test->interface~from_ijk_to_lvlh interface~from_lvlh_to_ijk relative_motion_module::from_lvlh_to_ijk interface~from_lvlh_to_ijk->proc~from_lvlh_to_ijk_mat proc~from_lvlh_to_ijk_rv relative_motion_module::from_lvlh_to_ijk_rv interface~from_lvlh_to_ijk->proc~from_lvlh_to_ijk_rv proc~from_lvlh_to_ijk_rv->interface~from_lvlh_to_ijk

Source Code

    subroutine from_ijk_to_lvlh_rv(rt_ijk,vt_ijk,r_ijk,v_ijk,dr_lvlh,dv_lvlh)

    implicit none

    real(wp),dimension(3),intent(in)           :: rt_ijk  !! Target IJK absolute position vector [km]
    real(wp),dimension(3),intent(in)           :: vt_ijk  !! Target IJK absolute position vector [km]
    real(wp),dimension(3),intent(in)           :: r_ijk   !! Chaser IJK absolute position vector [km]
    real(wp),dimension(3),intent(in)           :: v_ijk   !! Chaser IJK absolute position vector [km]
    real(wp),dimension(3),intent(out)          :: dr_lvlh !! Chaser LVLH position vector relative to target [km]
    real(wp),dimension(3),intent(out),optional :: dv_lvlh !! Chaser LVLH position vector relative to target [km]

    real(wp),dimension(3,3) :: c
    real(wp),dimension(3,3) :: cdot
    real(wp),dimension(3) :: dr_ijk, dv_ijk

    !IJK state of chaser relative to target:
    dr_ijk = r_ijk - rt_ijk    ! [target + delta = chaser]

    if (present(dv_lvlh)) then

        dv_ijk = v_ijk - vt_ijk ! [target + delta = chaser]

        call from_ijk_to_lvlh(rt_ijk,vt_ijk,c=c,cdot=cdot)

        dr_lvlh = matmul( c, dr_ijk )
        dv_lvlh = matmul( cdot, dr_ijk ) + matmul( c, dv_ijk )

    else

        call from_ijk_to_lvlh(r_ijk,v_ijk,c=c)

        dr_lvlh = matmul( c, dr_ijk )

    end if

    end subroutine from_ijk_to_lvlh_rv