draw_written Subroutine

private subroutine draw_written(self, t, changed)

Draw the points written: all of them (the tail hidden) or, in trace mode, those passed by time t (times up to it) and the tail from the latest of them to the point at t (unchanged if nothing changed and t is the time it was drawn for).

Arguments

Type IntentOptional Attributes Name
class(ChainArtist), intent(inout) :: self
real(kind=wp), intent(in) :: t

the current time

logical, intent(in) :: changed

points were written (write_changed)


Calls

proc~~draw_written~~CallsGraph proc~draw_written draw_written draw_tail draw_tail proc~draw_written->draw_tail interface~vkf_line_set_range vkf_line_set_range proc~draw_written->interface~vkf_line_set_range proc~chain_points_per_point chain_points_per_point proc~draw_written->proc~chain_points_per_point proc~check_status check_status proc~draw_written->proc~check_status proc~draw LineChain%draw proc~draw_written->proc~draw proc~draw_range LineChain%draw_range proc~draw_written->proc~draw_range proc~tail_ends tail_ends proc~draw_written->proc~tail_ends proc~trace_range trace_range proc~draw_written->proc~trace_range chain_kind chain_kind proc~chain_points_per_point->chain_kind proc~draw->proc~draw_range proc~draw_range->interface~vkf_line_set_range proc~draw_range->proc~check_status proc~decreasing_times decreasing_times proc~tail_ends->proc~decreasing_times proc~trace_range->proc~decreasing_times

Called by

proc~~draw_written~~CalledByGraph proc~draw_written draw_written proc~chain_update ChainArtist%chain_update proc~chain_update->proc~draw_written proc~curve_update CurveArtist%curve_update proc~curve_update->proc~draw_written

Source Code

    subroutine draw_written(self, t, changed)
        class(ChainArtist), intent(inout) :: self
        real(wp), intent(in) :: t                           !! the current time
        logical, intent(in) :: changed                      !! points were written (write_changed)
        integer :: m, i1, i2, k, k2
        m = chain_points_per_point(self)
        if (.not. self%trace) then
            self%n_drawn = self%n_written
            self%first_drawn_ = 1
            call self%chain%draw(m * self%n_drawn)
            if (c_associated(self%tail)) call check_status(vkf_line_set_range(self%tail, 1_c_int, 0_c_int), 'trajectory artists')
            self%tail_shown = .false.
            self%tail_time = huge(1.0_wp)
            return
        end if
        if (.not. changed .and. t == self%tail_time) return
        i1 = 1
        i2 = 0
        if (associated(self%traj)) call trace_range(self%traj, t, self%n_written, i1, i2)
        self%first_drawn_ = i1
        self%n_drawn = max(0, i2 - i1 + 1)
        call self%chain%draw_range(m * (i1 - 1) + 1, m * i2)
        call tail_ends(self%traj, self%n_written, i1, i2, k, k2)
        call self%draw_tail(t, k, k2)
        self%tail_time = t
    end subroutine draw_written