The main documentation of the Get_Coordinates_Cells_Multi_Mesh Procedure contains additional explanation of this code listing.
subroutine Get_Coordinates_Cells_MMesh (Coordinates_Cells, Mesh)
! Input variable.
type(Multi_Mesh_type), intent(inout) :: Mesh ! Mesh object.
! Input/Output variable.
type(real,2) :: Coordinates_Cells ! Coordinates_Cells BNV.
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Verify requirements.
VERIFY(Valid_State(Mesh),5) ! Mesh is valid.
! Coordinates_Cells is valid.
VERIFY(Valid_State(Coordinates_Cells),5)
! Coordinates_Cells has correct dimensions.
VERIFY(SIZE(Coordinates_Cells,1) == Mesh%NDimensions,5)
VERIFY(SIZE(Coordinates_Cells,2) == Mesh%NCells_PE,5)
! Initializations.
if (.not.Initialized(Mesh%Coordinates_Cells_DV)) then
call Initialize (Mesh%Coordinates_Cells_DV, Mesh%Cell_Structure, 2, &
dim1=Mesh%NDimensions)
end if
if (.not.Initialized(Mesh%Coordinates_Nodes_of_Cells_CA)) then
call Initialize (Mesh%Coordinates_Nodes_of_Cells_CA, &
Mesh%Nodes_of_Cells_Index, 2, &
dim1=Mesh%NDimensions)
end if
! Gather node coordinates to cells.
Mesh%Coordinates_Nodes_of_Cells_CA = Mesh%Coordinates_Nodes_DV
! Calculate cell center coordinates (= average of the node coordinates).
call Combine_with_Average (Mesh%Coordinates_Cells_DV, &
Mesh%Coordinates_Nodes_of_Cells_CA)
Coordinates_Cells = Mesh%Coordinates_Cells_DV
! Verify guarantees.
VERIFY(Valid_State(Mesh),5) ! Mesh is valid.
! Coordinates_Cells is valid.
VERIFY(Valid_State(Coordinates_Cells),5)
return
end subroutine Get_Coordinates_Cells_MMesh