Compute cell centers coordinates from cell nodes.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(block_object), | intent(in) | :: | self | Block. |
Cell centers coordinates.
pure function node_to_center(self) result(center)
!< Compute cell centers coordinates from cell nodes.
class(block_object), intent(in) :: self !< Block.
type(vector), allocatable :: center(:,:,:) !< Cell centers coordinates.
integer(I4P) :: i !< Counter.
integer(I4P) :: j !< Counter.
integer(I4P) :: k !< Counter.
associate(gc=>self%signature%gc, ni=>self%signature%ni, nj=>self%signature%nj, nk=>self%signature%nk)
allocate(center(1 - gc(1) : ni + gc(2), 1 - gc(3) : nj + gc(4), 1 - gc(5) : nk + gc(6)))
do k=1 - gc(5), nk + gc(6)
do j=1 - gc(3), nj + gc(4)
do i=1 - gc(1), ni + gc(2)
center(i, j, k) = (self%node(i, j, k )%vertex + &
self%node(i-1, j, k )%vertex + &
self%node(i , j-1, k )%vertex + &
self%node(i , j , k-1)%vertex + &
self%node(i-1, j-1, k-1)%vertex + &
self%node(i , j-1, k-1)%vertex + &
self%node(i-1, j , k-1)%vertex + &
self%node(i-1, j-1, k )%vertex) * 0.125_R8P
enddo
enddo
enddo
endassociate
endfunction node_to_center