wrapped_time Function

private function wrapped_time(self, t) result(tw)

For FOLLOW_LOOP, t wrapped into the combined time range of the trajectories.

Arguments

Type IntentOptional Attributes Name
type(TrajectoryFollower), intent(in) :: self
real(kind=wp), intent(in) :: t

the time (s)

Return Value real(kind=wp)


Calls

proc~~wrapped_time~~CallsGraph proc~wrapped_time wrapped_time proc~time_range~3 Trajectory%time_range proc~wrapped_time->proc~time_range~3

Called by

proc~~wrapped_time~~CalledByGraph proc~wrapped_time wrapped_time proc~state_at TrajectoryFollower%state_at proc~state_at->proc~wrapped_time proc~followed_pose followed_pose proc~followed_pose->proc~state_at proc~world_matrix_at ReferenceFrame%world_matrix_at proc~followed_pose->proc~world_matrix_at proc~update~2 TrajectoryFollower%update proc~update~2->proc~state_at proc~local_matrix_at ReferenceFrame%local_matrix_at proc~local_matrix_at->proc~followed_pose proc~update ReferenceFrame%update proc~update->proc~followed_pose proc~update->proc~update~2 proc~drawable_update DrawableTrajectory%drawable_update proc~drawable_update->proc~update proc~fm_update FrameManager%fm_update proc~fm_update->proc~update proc~sphere_update Sphere%sphere_update proc~sphere_update->proc~update proc~terrain_update TerrainBody%terrain_update proc~terrain_update->proc~update proc~world_matrix_at->proc~local_matrix_at proc~world_matrix_at->proc~world_matrix_at proc~data_to_shown data_to_shown proc~data_to_shown->proc~world_matrix_at proc~to_shown to_shown proc~to_shown->proc~data_to_shown proc~art_point_between art_point_between proc~art_point_between->proc~to_shown proc~to_shown_at to_shown_at proc~to_shown_at->proc~to_shown proc~art_point art_point proc~art_point->proc~to_shown_at proc~art_points art_points proc~art_points->proc~to_shown_at proc~intermediates_by_time intermediates_by_time proc~intermediates_by_time->proc~art_point_between proc~marker_point marker_point proc~marker_point->proc~to_shown_at proc~marker_point->proc~art_point proc~update_ribbon_tail RibbonArtist%update_ribbon_tail proc~update_ribbon_tail->proc~art_point_between proc~update_ribbon_tail->proc~art_point proc~update_tail CurveArtist%update_tail proc~update_tail->proc~art_point_between proc~update_tail->proc~art_point proc~write_segments write_segments proc~write_segments->proc~to_shown_at proc~add_intermediates add_intermediates proc~add_intermediates->proc~intermediates_by_time proc~intermediates_by_data intermediates_by_data proc~add_intermediates->proc~intermediates_by_data proc~intermediates_by_distance intermediates_by_distance proc~add_intermediates->proc~intermediates_by_distance proc~curve_pick curve_pick proc~curve_pick->proc~art_point proc~intermediates_by_data->proc~art_point proc~intermediates_by_distance->proc~art_point proc~marker_update MarkerArtist%marker_update proc~marker_update->proc~marker_point proc~marker_update->proc~add_intermediates proc~update_bounds update_bounds proc~marker_update->proc~update_bounds proc~segment_update SegmentArtist%segment_update proc~segment_update->proc~write_segments proc~update_bounds->proc~art_points proc~write_curve CurveArtist%write_curve proc~write_curve->proc~art_points proc~write_ribbon RibbonArtist%write_ribbon proc~write_ribbon->proc~art_points proc~drawable_pick DrawableTrajectory%drawable_pick proc~drawable_pick->proc~curve_pick

Source Code

    real(wp) function wrapped_time(self, t) result(tw)
        type(TrajectoryFollower), intent(in) :: self
        real(wp), intent(in) :: t                           !! the time (s)
        real(wp) :: t0, tf, a, b
        integer :: k
        tw = t
        if (self%mode_ == FOLLOW_LIMIT) return
        t0 = huge(1.0_wp)
        tf = -huge(1.0_wp)
        do k = 1, self%n
            if (.not. self%trajs(k)%p%time_range(a, b)) cycle
            t0 = min(t0, a)
            tf = max(tf, b)
        end do
        if (t0 == huge(1.0_wp)) return
        if (tf - t0 <= 8.0_wp * tiny(1.0_wp)) then
            tw = t0
        else
            tw = t0 + modulo(t - t0, tf - t0)     ! t - floor((t - t0)/(tf - t0)) * (tf - t0), in real arithmetic
        end if
    end function wrapped_time