Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | id | |||
type(type_dp_3d), | intent(in), | pointer | :: | global_coordinate | ||
type(type_vtk_cell), | intent(in) | :: | cell_info | |||
type(type_geometry_settings), | intent(in) | :: | integration |
module function construct_side_second(id, global_coordinate, cell_info, integration) result(side) implicit none integer(int32), intent(in) :: id type(type_dp_3d), pointer, intent(in) :: global_coordinate type(type_vtk_cell), intent(in) :: cell_info type(type_geometry_settings), intent(in) :: integration class(abst_side), allocatable :: side integer(int32) :: i if (allocated(side)) deallocate (side) allocate (type_side_second :: side) side%id = id side%type = cell_info%cell_type side%group = cell_info%cell_entity_id side%dimension = cell_info%get_dimension() side%order = cell_info%get_order() side%num_nodes = cell_info%num_nodes_in_cell allocate (side%connectivity(side%num_nodes)) side%connectivity(:) = cell_info%connectivity(1:side%num_nodes) allocate (side%x(side%num_nodes)) allocate (side%y(side%num_nodes)) allocate (side%z(side%num_nodes)) do i = 1, side%num_nodes nullify (side%x(i)%val) nullify (side%y(i)%val) nullify (side%z(i)%val) side%x(i)%val => global_coordinate%x(side%connectivity(i)) side%y(i)%val => global_coordinate%y(side%connectivity(i)) side%z(i)%val => global_coordinate%z(side%connectivity(i)) end do select case (integration%integration_type) case ("full") side%num_gauss = 2_int32 call allocate_array(side%weight, side%num_gauss) call allocate_array(side%gauss, side%num_gauss) side%weight(:) = [1.0d0, 1.0d0] side%gauss(:) = [-sqrt(1.0d0 / 3.0d0), sqrt(1.0d0 / 3.0d0)] case ("reduced") side%num_gauss = 1_int32 call allocate_array(side%weight, side%num_gauss) call allocate_array(side%gauss, side%num_gauss) side%weight(:) = [2.0d0] side%gauss(:) = [0.0d0] case ("free") side%num_gauss = 2_int32 call allocate_array(side%weight, side%num_gauss) call allocate_array(side%gauss, side%num_gauss) side%weight(:) = [1.0d0, 1.0d0] side%gauss(:) = [-integration%integration_points, integration%integration_points] end select end function construct_side_second