initialize_type_domain Subroutine

private subroutine initialize_type_domain(self, input, Coordinate)

TBI

Type Bound

type_domain

Arguments

Type IntentOptional Attributes Name
class(type_domain), intent(inout) :: self
type(type_input), intent(in) :: input
type(type_dp_3d), intent(inout), pointer :: Coordinate

Calls

proc~~initialize_type_domain~~CallsGraph proc~initialize_type_domain type_domain%initialize_type_domain log_information log_information proc~initialize_type_domain->log_information proc~apply_reordering type_domain%apply_reordering proc~initialize_type_domain->proc~apply_reordering proc~create_element create_element proc~initialize_type_domain->proc~create_element proc~create_side create_side proc~initialize_type_domain->proc~create_side proc~initialize_hybrid_from_mesh type_node_adjacency%initialize_hybrid_from_mesh proc~initialize_type_domain->proc~initialize_hybrid_from_mesh proc~type_vtk_cell_get_dimension type_vtk_cell%type_vtk_cell_get_dimension proc~initialize_type_domain->proc~type_vtk_cell_get_dimension interface~allocate_array allocate_array proc~apply_reordering->interface~allocate_array interface~deallocate_array deallocate_array proc~apply_reordering->interface~deallocate_array none~to_reordered type_reordering%to_reordered proc~apply_reordering->none~to_reordered proc~get_connectivity abst_mesh%get_connectivity proc~apply_reordering->proc~get_connectivity proc~get_num_elements type_domain%get_num_elements proc~apply_reordering->proc~get_num_elements proc~get_num_nodes~3 abst_mesh%get_num_nodes proc~apply_reordering->proc~get_num_nodes~3 proc~get_num_sides type_domain%get_num_sides proc~apply_reordering->proc~get_num_sides proc~initialize_hybrid_from_mesh->interface~allocate_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 interface~to_reordered_index type_reordering%to_reordered_index none~to_reordered->interface~to_reordered_index interface~to_reordered_indices type_reordering%to_reordered_indices none~to_reordered->interface~to_reordered_indices 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~create_coo_from_mesh->proc~get_connectivity 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~to_reordered_index to_reordered_index interface~to_reordered_index->proc~to_reordered_index proc~to_reordered_indices to_reordered_indices interface~to_reordered_indices->proc~to_reordered_indices 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

Source Code

    subroutine initialize_type_domain(self, input, Coordinate)
        implicit none
        class(type_domain), intent(inout) :: self
        type(type_input), intent(in) :: input
        type(type_dp_3d), intent(inout), pointer :: Coordinate

        integer(int32) :: count_sides, count_elements, count_volumes
        integer(int32) :: iCell, iElem, iSide
        integer(int32) :: cell_dimension

        ! -----------------------------------------------------------------------------------
        ! 初期化処理
        ! -----------------------------------------------------------------------------------
        count_sides = 0
        count_elements = 0
        count_volumes = 0

        do iCell = 1, input%geometry%vtk%num_total_cells
            cell_dimension = input%geometry%vtk%cells(iCell)%get_dimension()
            select case (cell_dimension)
            case (1)
                count_sides = count_sides + 1
            case (2)
                count_elements = count_elements + 1
            case (3)
                count_volumes = count_volumes + 1
            end select
        end do

        self%num_elements = count_elements
        self%num_sides = count_sides
        self%num_nodes = input%geometry%vtk%num_points
        self%num_materials = input%basic%num_materials

        if (allocated(self%elements)) deallocate (self%elements)
        allocate (self%elements(self%num_elements))
        if (allocated(self%sides)) deallocate (self%sides)
        allocate (self%sides(self%num_sides))

        iElem = 1
        iSide = 1
        do iCell = 1, input%geometry%vtk%num_total_cells
            cell_dimension = input%geometry%vtk%cells(iCell)%get_dimension()
            select case (cell_dimension)
            case (1)
                self%sides(iSide)%s = create_side(id=iCell, &
                                                  global_coordinate=Coordinate, &
                                                  input=input)
                iSide = iSide + 1
            case (2)
                self%elements(iElem)%e = create_element(id=iCell, &
                                                        global_coordinate=Coordinate, &
                                                        input=input)
                iElem = iElem + 1
            case (3)
                !!TBI
            end select

        end do

        self%computation_dimension = input%basic%simulation_settings%calculate_dimension

        !===============================================================
        ! 3. 隣接行列の構築
        !===============================================================
        call self%node_adjacency%initialize(self%num_nodes, self%computation_dimension, self%sides, self%elements)
        call self%element_adjacency%initialize(self%elements)
        call self%map_node_to_element%initialize(self%num_nodes, self%elements, "fast")

        !===============================================================
        ! 4. RCM並べ替えの実行
        !===============================================================
        call self%reordering%initialize(input%basic%solver_settings%reordering, self%node_adjacency)
        if (input%basic%solver_settings%reordering /= "none") then
            call self%apply_reordering()
            call global_logger%log_information(message="RCM reordering completed.")
        end if

        !===============================================================
        ! 5. グラフ彩色の実行
        !===============================================================
        call self%colors%initialize(input%basic%solver_settings%coloring, self%element_adjacency)
        call global_logger%log_information(message="Graph coloring completed using " &
                                           //trim(self%colors%algorithm_name)//" algorithm.")

        call global_logger%log_information(message="Initialization process completed successfully.")

    end subroutine initialize_type_domain