From 83c1a5da1e0f466ada2d9203da0f02dff0fb7f22 Mon Sep 17 00:00:00 2001 From: Grzegorz Kowal Date: Mon, 23 Jun 2014 10:33:10 -0300 Subject: [PATCH] MESH: Move the second part of update_mesh() to update_neighbor_refinement(). The second part of update_mesh(), in which we update neighbor refinement flags, has been moved to a new subroutine update_neighbor_refinement(). Signed-off-by: Grzegorz Kowal --- src/mesh.F90 | 100 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 73 insertions(+), 27 deletions(-) diff --git a/src/mesh.F90 b/src/mesh.F90 index f16bbb5..b4bc2a4 100644 --- a/src/mesh.F90 +++ b/src/mesh.F90 @@ -835,39 +835,17 @@ module mesh ! call check_data_block_refinement() -!! SELECT NEIGHBORS OF REFINED BLOCKS TO BE REFINED IF NECESSARY +! update neighbor refinement flags, if they need to be refined as well +! + call update_neighbor_refinement() + +!! CHECK IF BLOCK CHILDREN CAN BE DEREFINED !! ! iterate over all levels starting from top and correct the refinement ! of neighbor blocks ! do l = toplev, 1, -1 -! set the pointer to the first block on the meta block list -! - pmeta => list_meta - -! iterate over all meta blocks -! - do while (associated(pmeta)) - -! check only leafs at the current level -! - if (pmeta%leaf .and. pmeta%level == l) then - -! select all neighbors which lay on lower levels to be refined as well -! - call set_neighbors_refine(pmeta) - - end if ! the leaf at level l - -! assign a pointer to the next block -! - pmeta => pmeta%next - - end do ! meta blocks - -!! CHECK IF BLOCK CHILDREN CAN BE DEREFINED -!! ! now check all derefined block if their siblings are set for derefinement too ! and are at the same level; check only levels > 1 ! @@ -1939,6 +1917,74 @@ module mesh !------------------------------------------------------------------------------- ! end subroutine check_data_block_refinement +! +!=============================================================================== +! +! subroutine UPDATE_NEIGHBOR_REFINEMENT: +! ------------------------------------- +! +! Subroutine scans over all neighbors of blocks selected for refinement or +! derefinement, and if necessary selects them to be refined as well, or +! cancels their derefinement. +! +! +!=============================================================================== +! + subroutine update_neighbor_refinement() + +! import external procedures and variables +! + use blocks , only : block_meta, list_meta + use blocks , only : set_neighbors_refine + use coordinates , only : toplev + +! local variables are not implicit by default +! + implicit none + +! local pointers +! + type(block_meta), pointer :: pmeta + +! local variables +! + integer(kind=4) :: l + +!------------------------------------------------------------------------------- +! +! iterate down over all levels and correct the refinement of neighbor blocks +! + do l = toplev, 1, -1 + +! assign pmeta to the first meta block on the list +! + pmeta => list_meta + +! iterate over all meta blocks +! + do while (associated(pmeta)) + +! check only leafs at the current level +! + if (pmeta%leaf .and. pmeta%level == l) then + +! correct neighbor refinement flags +! + call set_neighbors_refine(pmeta) + + end if ! the leaf at level l + +! assign pmeta to the next meta block +! + pmeta => pmeta%next + + end do ! iterate over meta blocks + + end do ! levels + +!------------------------------------------------------------------------------- +! + end subroutine update_neighbor_refinement !=============================================================================== !