dag_example Program

Uses

  • program~~dag_example~~UsesGraph program~dag_example dag_example module~dag_module dag_module program~dag_example->module~dag_module

DAG module test program.


Calls

program~~dag_example~~CallsGraph program~dag_example dag_example proc~dag_destroy dag_module::dag%dag_destroy program~dag_example->proc~dag_destroy proc~dag_generate_dependency_matrix dag_module::dag%dag_generate_dependency_matrix program~dag_example->proc~dag_generate_dependency_matrix proc~dag_save_digraph dag_module::dag%dag_save_digraph program~dag_example->proc~dag_save_digraph proc~dag_set_edges dag_module::dag%dag_set_edges program~dag_example->proc~dag_set_edges proc~dag_set_vertex_info dag_module::dag%dag_set_vertex_info program~dag_example->proc~dag_set_vertex_info proc~dag_set_vertices dag_module::dag%dag_set_vertices program~dag_example->proc~dag_set_vertices proc~dag_toposort dag_module::dag%dag_toposort program~dag_example->proc~dag_toposort proc~dag_generate_digraph dag_module::dag%dag_generate_digraph proc~dag_save_digraph->proc~dag_generate_digraph none~set_edges dag_module::vertex%set_edges proc~dag_set_edges->none~set_edges proc~integer_to_string~2 dag_module::integer_to_string proc~dag_set_vertex_info->proc~integer_to_string~2 proc~add_edge dag_module::vertex%add_edge none~set_edges->proc~add_edge proc~set_edge_vector dag_module::vertex%set_edge_vector none~set_edges->proc~set_edge_vector proc~dag_generate_digraph->proc~integer_to_string~2 proc~set_edge_vector->proc~add_edge

Variables

Type Attributes Name Initial
type(dag) :: d
integer, dimension(:), allocatable :: order
integer :: istat
integer :: i
integer :: r
integer :: c
logical, dimension(:,:), allocatable :: mat

dependency matrix

integer, parameter :: n_nodes = 6
character(len=*), parameter :: filetype = 'pdf'

filetype for output plot ('pdf', png', etc.)


Source Code

    program dag_example

    use dag_module

    implicit none

    type(dag) :: d
    integer,dimension(:),allocatable :: order
    integer :: istat
    integer :: i,r,c
    logical,dimension(:,:),allocatable :: mat !! dependency matrix

    integer,parameter :: n_nodes = 6
    character(len=*),parameter :: filetype = 'pdf'  !! filetype for output plot ('pdf', png', etc.)

    ! TODO combine set_edges and set_vertex_info into one routine maybe.

    call d%set_vertices(n_nodes)
    call d%set_edges(2,[1])     !2 depends on 1
    call d%set_edges(3,[5,1])   !3 depends on 5 and 1
    call d%set_edges(4,[5])     !4 depends on 5
    call d%set_edges(5,[2])     !5 depends on 2
    call d%set_edges(6,[2,4])   !6 depends on 2 and 4

    call d%toposort(order,istat)

    write(*,*) ''
    write(*,*) 'istat=', istat
    write(*,*) 'order=', order ! prints 1,2,5,3,4

    do i = 1, n_nodes
        if (i==3 .or. i==6) then
            call d%set_vertex_info(i,attributes='shape=square,fillcolor="SlateGray1",style=filled')
        else
            call d%set_vertex_info(i,attributes='shape=circle,fillcolor="cornsilk",style=filled')
        end if
    end do

    write(*,*) ''
    write(*,*) 'diagraph:'
    write(*,*) ''

    call d%save_digraph('test.dot','RL',300)
    call execute_command_line('cat test.dot')
    call execute_command_line('dot -T'//filetype//' -o test.'//filetype//' test.dot')

    write(*,*) ''
    write(*,*) 'dependency matrix:'
    write(*,*) ''
    call d%generate_dependency_matrix(mat)
    do r=1,n_nodes
        do c=1,n_nodes
            if (mat(r,c)) then
                write(*,'(A)',advance='NO') 'X'
            else
                write(*,'(A)',advance='NO') 'O'
            end if
        end do
            write(*,'(A)') ''
    end do

    ! cleanup:
    call d%destroy()

    end program dag_example