initialize_hybrid_from_mesh Subroutine

private subroutine initialize_hybrid_from_mesh(self, num_nodes, computation_dimension, sides, elements)

Type Bound

type_node_adjacency

Arguments

Type IntentOptional Attributes Name
class(type_node_adjacency), intent(inout) :: self
integer(kind=int32), intent(in) :: num_nodes
integer(kind=int32), intent(in) :: computation_dimension
class(holder_sides), intent(in) :: sides(:)
class(holder_elements), intent(in) :: elements(:)

Calls

proc~~initialize_hybrid_from_mesh~~CallsGraph proc~initialize_hybrid_from_mesh type_node_adjacency%initialize_hybrid_from_mesh interface~allocate_array allocate_array proc~initialize_hybrid_from_mesh->interface~allocate_array interface~deallocate_array deallocate_array proc~initialize_hybrid_from_mesh->interface~deallocate_array proc~build_csr_from_coo build_csr_from_coo proc~initialize_hybrid_from_mesh->proc~build_csr_from_coo proc~create_coo_from_mesh create_coo_from_mesh proc~initialize_hybrid_from_mesh->proc~create_coo_from_mesh proc~create_unique_coo create_unique_coo proc~initialize_hybrid_from_mesh->proc~create_unique_coo proc~estimate_max_coo_size estimate_max_coo_size proc~initialize_hybrid_from_mesh->proc~estimate_max_coo_size 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~build_csr_from_coo->interface~allocate_array sort sort proc~build_csr_from_coo->sort proc~create_coo_from_mesh->interface~allocate_array proc~get_connectivity abst_mesh%get_connectivity proc~create_coo_from_mesh->proc~get_connectivity proc~get_num_nodes~3 abst_mesh%get_num_nodes proc~create_coo_from_mesh->proc~get_num_nodes~3 proc~create_unique_coo->interface~allocate_array interface~unique unique proc~create_unique_coo->interface~unique proc~estimate_max_coo_size->proc~get_num_nodes~3 proc~unique_int16 unique_int16 interface~unique->proc~unique_int16 proc~unique_int32 unique_int32 interface~unique->proc~unique_int32 proc~unique_int64 unique_int64 interface~unique->proc~unique_int64 proc~unique_int8 unique_int8 interface~unique->proc~unique_int8 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~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 log_error log_error proc~error_message->log_error proc~unique_int16->interface~allocate_array proc~unique_int16->sort proc~unique_int32->interface~allocate_array proc~unique_int32->sort proc~unique_int64->interface~allocate_array proc~unique_int64->sort proc~unique_int8->interface~allocate_array proc~unique_int8->sort

Called by

proc~~initialize_hybrid_from_mesh~~CalledByGraph proc~initialize_hybrid_from_mesh type_node_adjacency%initialize_hybrid_from_mesh proc~initialize_type_domain type_domain%initialize_type_domain proc~initialize_type_domain->proc~initialize_hybrid_from_mesh

Source Code

    subroutine initialize_hybrid_from_mesh(self, num_nodes, computation_dimension, sides, elements)
        implicit none
        class(type_node_adjacency), intent(inout) :: self
        integer(int32), intent(in) :: num_nodes
        integer(int32), intent(in) :: computation_dimension
        class(holder_sides), intent(in) :: sides(:)
        class(holder_elements), intent(in) :: elements(:)

        integer(int32) :: estimated_nnz, actual_nnz
        integer(int32), allocatable :: temp_row_indices(:), temp_col_indices(:)

        self%num_nodes = num_nodes
        if (self%num_nodes <= 0) return

        ! 1. 一時COO配列の最大サイズを見積もる
        estimated_nnz = estimate_max_coo_size(computation_dimension, sides, elements)
        if (estimated_nnz <= 0) return

        call allocate_array(temp_row_indices, estimated_nnz)
        call allocate_array(temp_col_indices, estimated_nnz)

        ! 2. メッシュから重複を含むCOOリストを生成
        call create_coo_from_mesh(computation_dimension, sides, elements, temp_row_indices, temp_col_indices, actual_nnz)

        ! 3.【COO構築】一時COOリストからユニークなCOOリストを作成
        call create_unique_coo(self, temp_row_indices(1:actual_nnz), temp_col_indices(1:actual_nnz))

        ! 4.【CSR構築】作成したユニークCOOリストからCSR形式を構築
        call build_csr_from_coo(self)

        call deallocate_array(temp_row_indices)
        call deallocate_array(temp_col_indices)
    end subroutine initialize_hybrid_from_mesh