build_node_adjacency_from_elements Subroutine

subroutine build_node_adjacency_from_elements(elements, node_adj)

Arguments

Type IntentOptional Attributes Name
type(holder_elements), intent(in) :: elements(:)
type(type_node_adjacency), intent(inout) :: node_adj

Calls

proc~~build_node_adjacency_from_elements~~CallsGraph proc~build_node_adjacency_from_elements build_node_adjacency_from_elements interface~allocate_array allocate_array proc~build_node_adjacency_from_elements->interface~allocate_array interface~deallocate_array deallocate_array proc~build_node_adjacency_from_elements->interface~deallocate_array proc~initialize_node_adjacency type_node_adjacency%initialize_node_adjacency proc~build_node_adjacency_from_elements->proc~initialize_node_adjacency proc~allocate_rank1_int16 allocate_rank1_int16 interface~allocate_array->proc~allocate_rank1_int16 proc~allocate_rank1_int32 allocate_rank1_int32 interface~allocate_array->proc~allocate_rank1_int32 proc~allocate_rank1_int64 allocate_rank1_int64 interface~allocate_array->proc~allocate_rank1_int64 proc~allocate_rank1_int8 allocate_rank1_int8 interface~allocate_array->proc~allocate_rank1_int8 proc~allocate_rank1_logical1 allocate_rank1_logical1 interface~allocate_array->proc~allocate_rank1_logical1 proc~allocate_rank1_logical4 allocate_rank1_logical4 interface~allocate_array->proc~allocate_rank1_logical4 proc~allocate_rank1_logical8 allocate_rank1_logical8 interface~allocate_array->proc~allocate_rank1_logical8 proc~allocate_rank1_real128 allocate_rank1_real128 interface~allocate_array->proc~allocate_rank1_real128 proc~allocate_rank1_real32 allocate_rank1_real32 interface~allocate_array->proc~allocate_rank1_real32 proc~allocate_rank1_real64 allocate_rank1_real64 interface~allocate_array->proc~allocate_rank1_real64 proc~allocate_rank2_int16 allocate_rank2_int16 interface~allocate_array->proc~allocate_rank2_int16 proc~allocate_rank2_int32 allocate_rank2_int32 interface~allocate_array->proc~allocate_rank2_int32 proc~allocate_rank2_int64 allocate_rank2_int64 interface~allocate_array->proc~allocate_rank2_int64 proc~allocate_rank2_int8 allocate_rank2_int8 interface~allocate_array->proc~allocate_rank2_int8 proc~allocate_rank2_logical1 allocate_rank2_logical1 interface~allocate_array->proc~allocate_rank2_logical1 proc~allocate_rank2_logical4 allocate_rank2_logical4 interface~allocate_array->proc~allocate_rank2_logical4 proc~allocate_rank2_logical8 allocate_rank2_logical8 interface~allocate_array->proc~allocate_rank2_logical8 proc~allocate_rank2_real128 allocate_rank2_real128 interface~allocate_array->proc~allocate_rank2_real128 proc~allocate_rank2_real32 allocate_rank2_real32 interface~allocate_array->proc~allocate_rank2_real32 proc~allocate_rank2_real64 allocate_rank2_real64 interface~allocate_array->proc~allocate_rank2_real64 proc~deallocate_rank1_int32 deallocate_rank1_int32 interface~deallocate_array->proc~deallocate_rank1_int32 proc~deallocate_rank1_int64 deallocate_rank1_int64 interface~deallocate_array->proc~deallocate_rank1_int64 proc~deallocate_rank1_int8 deallocate_rank1_int8 interface~deallocate_array->proc~deallocate_rank1_int8 proc~deallocate_rank1_logical1 deallocate_rank1_logical1 interface~deallocate_array->proc~deallocate_rank1_logical1 proc~deallocate_rank1_logical4 deallocate_rank1_logical4 interface~deallocate_array->proc~deallocate_rank1_logical4 proc~deallocate_rank1_logical8 deallocate_rank1_logical8 interface~deallocate_array->proc~deallocate_rank1_logical8 proc~deallocate_rank1_real128 deallocate_rank1_real128 interface~deallocate_array->proc~deallocate_rank1_real128 proc~deallocate_rank1_real32 deallocate_rank1_real32 interface~deallocate_array->proc~deallocate_rank1_real32 proc~deallocate_rank1_real64 deallocate_rank1_real64 interface~deallocate_array->proc~deallocate_rank1_real64 proc~deallocate_rank2_int32 deallocate_rank2_int32 interface~deallocate_array->proc~deallocate_rank2_int32 proc~deallocate_rank2_int64 deallocate_rank2_int64 interface~deallocate_array->proc~deallocate_rank2_int64 proc~deallocate_rank2_int8 deallocate_rank2_int8 interface~deallocate_array->proc~deallocate_rank2_int8 proc~deallocate_rank2_logical1 deallocate_rank2_logical1 interface~deallocate_array->proc~deallocate_rank2_logical1 proc~deallocate_rank2_logical4 deallocate_rank2_logical4 interface~deallocate_array->proc~deallocate_rank2_logical4 proc~deallocate_rank2_logical8 deallocate_rank2_logical8 interface~deallocate_array->proc~deallocate_rank2_logical8 proc~deallocate_rank2_real128 deallocate_rank2_real128 interface~deallocate_array->proc~deallocate_rank2_real128 proc~deallocate_rank2_real32 deallocate_rank2_real32 interface~deallocate_array->proc~deallocate_rank2_real32 proc~deallocate_rank2_real64 deallocate_rank2_real64 interface~deallocate_array->proc~deallocate_rank2_real64 proc~initialize_node_adjacency->interface~deallocate_array proc~build_csr_from_edges build_csr_from_edges proc~initialize_node_adjacency->proc~build_csr_from_edges proc~generate_all_edges generate_all_edges proc~initialize_node_adjacency->proc~generate_all_edges proc~error_message error_message proc~allocate_rank1_int16->proc~error_message proc~allocate_rank1_int32->proc~error_message proc~allocate_rank1_int64->proc~error_message proc~allocate_rank1_int8->proc~error_message proc~allocate_rank1_logical1->proc~error_message proc~allocate_rank1_logical4->proc~error_message proc~allocate_rank1_logical8->proc~error_message proc~allocate_rank1_real128->proc~error_message proc~allocate_rank1_real32->proc~error_message proc~allocate_rank1_real64->proc~error_message proc~allocate_rank2_int16->proc~error_message proc~allocate_rank2_int32->proc~error_message proc~allocate_rank2_int64->proc~error_message proc~allocate_rank2_int8->proc~error_message proc~allocate_rank2_logical1->proc~error_message proc~allocate_rank2_logical4->proc~error_message proc~allocate_rank2_logical8->proc~error_message proc~allocate_rank2_real128->proc~error_message proc~allocate_rank2_real32->proc~error_message proc~allocate_rank2_real64->proc~error_message proc~build_csr_from_edges->interface~allocate_array proc~build_csr_from_edges->interface~deallocate_array sort sort proc~build_csr_from_edges->sort proc~deallocate_rank1_int32->proc~error_message proc~deallocate_rank1_int64->proc~error_message proc~deallocate_rank1_int8->proc~error_message proc~deallocate_rank1_logical1->proc~error_message proc~deallocate_rank1_logical4->proc~error_message proc~deallocate_rank1_logical8->proc~error_message proc~deallocate_rank1_real128->proc~error_message proc~deallocate_rank1_real32->proc~error_message proc~deallocate_rank1_real64->proc~error_message proc~deallocate_rank2_int32->proc~error_message proc~deallocate_rank2_int64->proc~error_message proc~deallocate_rank2_int8->proc~error_message proc~deallocate_rank2_logical1->proc~error_message proc~deallocate_rank2_logical4->proc~error_message proc~deallocate_rank2_logical8->proc~error_message proc~deallocate_rank2_real128->proc~error_message proc~deallocate_rank2_real32->proc~error_message proc~deallocate_rank2_real64->proc~error_message proc~generate_all_edges->interface~allocate_array log_error log_error proc~error_message->log_error

Called by

proc~~build_node_adjacency_from_elements~~CalledByGraph proc~build_node_adjacency_from_elements build_node_adjacency_from_elements proc~cm_reorder_method cm_reorder_method proc~cm_reorder_method->proc~build_node_adjacency_from_elements proc~rcm_reorder_method rcm_reorder_method proc~rcm_reorder_method->proc~build_node_adjacency_from_elements interface~cm_reorder_method type_reordering%cm_reorder_method interface~cm_reorder_method->proc~cm_reorder_method interface~rcm_reorder_method type_reordering%rcm_reorder_method interface~rcm_reorder_method->proc~rcm_reorder_method proc~initialize_type_reordering type_reordering%initialize_type_reordering proc~initialize_type_reordering->interface~cm_reorder_method proc~initialize_type_reordering->interface~rcm_reorder_method

Source Code

    subroutine build_node_adjacency_from_elements(elements, node_adj)
        implicit none
        type(holder_elements), intent(in) :: elements(:)
        type(type_node_adjacency), intent(inout) :: node_adj
        integer(int32) :: num_elements, num_nodes, total_conn_size
        integer(int32), allocatable :: elements_conn_data(:), elements_ptr(:)
        integer(int32) :: i, k, current_pos

        num_elements = size(elements)
        if (num_elements == 0) then
            call node_adj%initialize(0, 0, [integer(int32) ::], [integer(int32) :: 1])
            return
        end if
        num_nodes = 0
        total_conn_size = 0
        do i = 1, num_elements
            if (size(elements(i)%e%connectivity) > 0) then
                num_nodes = max(num_nodes, maxval(elements(i)%e%connectivity))
            end if
            total_conn_size = total_conn_size + size(elements(i)%e%connectivity)
        end do
        call allocate_array(elements_ptr, length=num_elements + 1_int32)
        call allocate_array(elements_conn_data, length=total_conn_size)
        current_pos = 1
        elements_ptr(1) = 1
        do i = 1, num_elements
            k = size(elements(i)%e%connectivity)
            if (k > 0) then
                elements_conn_data(current_pos:current_pos + k - 1) = elements(i)%e%connectivity
            end if
            current_pos = current_pos + k
            elements_ptr(i + 1) = current_pos
        end do
        call node_adj%initialize(num_nodes, num_elements, elements_conn_data, elements_ptr)
        call deallocate_array(elements_ptr)
        call deallocate_array(elements_conn_data)
    end subroutine build_node_adjacency_from_elements