Fill ghost cells at a grid level
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mg_t) | :: | mg | ||||
| integer, | intent(in) | :: | lvl | |||
| integer, | intent(in) | :: | iv |
Index of variable |
subroutine mg_fill_ghost_cells_lvl(mg, lvl, iv) type(mg_t) :: mg integer, intent(in) :: lvl integer, intent(in) :: iv !< Index of variable integer :: i, id, dsize, nc if (lvl < mg%lowest_lvl) error stop "fill_ghost_cells_lvl: lvl < lowest_lvl" if (lvl > mg%highest_lvl) error stop "fill_ghost_cells_lvl: lvl > highest_lvl" nc = mg%box_size_lvl(lvl) if (lvl >= mg%first_normal_lvl) then dsize = nc**(2-1) mg%buf(:)%i_send = 0 mg%buf(:)%i_recv = 0 mg%buf(:)%i_ix = 0 do i = 1, size(mg%lvls(lvl)%my_ids) id = mg%lvls(lvl)%my_ids(i) call buffer_ghost_cells(mg, id, nc, iv, .false.) end do if (lvl > 1) then do i = 1, size(mg%lvls(lvl-1)%my_ref_bnds) id = mg%lvls(lvl-1)%my_ref_bnds(i) call buffer_refinement_boundaries(mg, id, nc, iv, .false.) end do end if ! Transfer data between processes mg%buf(:)%i_recv = mg%comm_ghostcell%n_recv(:, lvl) * dsize call sort_and_transfer_buffers(mg, dsize) ! Set ghost cells to received data mg%buf(:)%i_recv = 0 end if do i = 1, size(mg%lvls(lvl)%my_ids) id = mg%lvls(lvl)%my_ids(i) call set_ghost_cells(mg, id, nc, iv, .false.) end do end subroutine mg_fill_ghost_cells_lvl