MESH: Add status argument to check_data_block_refinement().
Signed-off-by: Grzegorz Kowal <grzegorz@amuncode.org>
This commit is contained in:
parent
721cf8efae
commit
e7c546980f
@ -791,7 +791,8 @@ module mesh
|
||||
|
||||
! check the refinement criterion of all data blocks at the current process
|
||||
!
|
||||
call check_data_block_refinement()
|
||||
call check_data_block_refinement(status)
|
||||
if (status /= 0) go to 100
|
||||
|
||||
! update neighbor refinement flags, if they need to be refined as well
|
||||
!
|
||||
@ -1474,10 +1475,13 @@ module mesh
|
||||
! flags. If the MPI is used, the refinement flags are syncronized among all
|
||||
! processes.
|
||||
!
|
||||
! Arguments:
|
||||
!
|
||||
! status - the subroutine call status: 0 for success, otherwise failure;
|
||||
!
|
||||
!===============================================================================
|
||||
!
|
||||
subroutine check_data_block_refinement()
|
||||
subroutine check_data_block_refinement(status)
|
||||
|
||||
! import external procedures and variables
|
||||
!
|
||||
@ -1499,6 +1503,10 @@ module mesh
|
||||
!
|
||||
implicit none
|
||||
|
||||
! subroutine arguments
|
||||
!
|
||||
integer, intent(out) :: status
|
||||
|
||||
! local pointers
|
||||
!
|
||||
type(block_meta), pointer :: pmeta
|
||||
@ -1521,34 +1529,25 @@ module mesh
|
||||
|
||||
!-------------------------------------------------------------------------------
|
||||
!
|
||||
! reset the status flag
|
||||
!
|
||||
status = 0
|
||||
|
||||
! 1) reset the refinement flag for all meta blocks
|
||||
!
|
||||
! assign pmeta to the first meta block on the list
|
||||
!
|
||||
pmeta => list_meta
|
||||
|
||||
! iterate over all meta blocks
|
||||
!
|
||||
pmeta => list_meta
|
||||
do while (associated(pmeta))
|
||||
|
||||
! reset the refinement flag of pmeta
|
||||
!
|
||||
pmeta%refine = 0
|
||||
|
||||
! assign pmeta to the next meta block
|
||||
!
|
||||
pmeta => pmeta%next
|
||||
|
||||
end do ! iterate over meta blocks
|
||||
|
||||
! 2) determine the refinement of data block from the current process
|
||||
!
|
||||
! assign pdata to the first data block on the list
|
||||
!
|
||||
pdata => list_data
|
||||
|
||||
! iterate over all data blocks
|
||||
!
|
||||
pdata => list_data
|
||||
do while (associated(pdata))
|
||||
|
||||
! assign pmeta to the meta block associated with pdata
|
||||
@ -1588,10 +1587,7 @@ module mesh
|
||||
end if ! pmeta associated
|
||||
#endif /* DEBUG */
|
||||
|
||||
! assign pdata to the next data block
|
||||
!
|
||||
pdata => pdata%next
|
||||
|
||||
end do ! iterate over data blocks
|
||||
|
||||
#ifdef MPI
|
||||
@ -1603,11 +1599,11 @@ module mesh
|
||||
|
||||
! allocate a buffer for the refinement flags
|
||||
!
|
||||
allocate(ibuf(nl))
|
||||
allocate(ibuf(nl), stat = status)
|
||||
|
||||
! check if the buffer was allocated successfully
|
||||
!
|
||||
if (allocated(ibuf)) then
|
||||
if (status == 0) then
|
||||
|
||||
! reset the buffer
|
||||
!
|
||||
@ -1617,12 +1613,9 @@ module mesh
|
||||
!
|
||||
l = 0
|
||||
|
||||
! assign pmeta to the first meta block on the list
|
||||
!
|
||||
pmeta => list_meta
|
||||
|
||||
! iterate over all meta blocks
|
||||
!
|
||||
pmeta => list_meta
|
||||
do while (associated(pmeta))
|
||||
|
||||
! process only leafs
|
||||
@ -1639,10 +1632,7 @@ module mesh
|
||||
|
||||
end if ! pmeta is a leaf
|
||||
|
||||
! assign pmeta to the next meta block
|
||||
!
|
||||
pmeta => pmeta%next
|
||||
|
||||
end do ! iterate over meta blocks
|
||||
|
||||
! update refinement flags across all processes
|
||||
@ -1653,12 +1643,9 @@ module mesh
|
||||
!
|
||||
l = 0
|
||||
|
||||
! assign pmeta to the first meta block on the list
|
||||
!
|
||||
pmeta => list_meta
|
||||
|
||||
! iterate over all meta blocks
|
||||
!
|
||||
pmeta => list_meta
|
||||
do while (associated(pmeta))
|
||||
|
||||
! process only leafs
|
||||
@ -1684,19 +1671,21 @@ module mesh
|
||||
|
||||
end if ! pmeta is a leaf
|
||||
|
||||
! assign pmeta to the next meta block
|
||||
!
|
||||
pmeta => pmeta%next
|
||||
|
||||
end do ! iterate over meta blocks
|
||||
|
||||
! deallocate the refinement flag buffer
|
||||
!
|
||||
deallocate(ibuf)
|
||||
deallocate(ibuf, stat = status)
|
||||
|
||||
if (status /= 0) then
|
||||
write(error_unit,"('[',a,']: ',a)") trim(loc) &
|
||||
, "Refinement flag buffer could not be deallocated!"
|
||||
end if
|
||||
|
||||
else ! buffer couldn't be allocated
|
||||
write(error_unit,"('[',a,']: ',a)") trim(loc) &
|
||||
, "Refinement flag buffer could not be allocated!"
|
||||
, "Refinement flag buffer could not be allocated!"
|
||||
end if ! buffer couldn't be allocated
|
||||
#endif /* MPI */
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user