| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mg_t), | intent(inout) | :: | mg | |||
| type(mg_box_t), | intent(inout) | :: | box | |||
| integer, | intent(in) | :: | nc | |||
| integer, | intent(in) | :: | iv | |||
| integer, | intent(in) | :: | nb_id | |||
| integer, | intent(in) | :: | nb_rank | |||
| integer, | intent(in) | :: | nb | |||
| logical, | intent(in) | :: | dry_run |
subroutine buffer_for_nb(mg, box, nc, iv, nb_id, nb_rank, nb, dry_run) type(mg_t), intent(inout) :: mg type(mg_box_t), intent(inout) :: box integer, intent(in) :: nc integer, intent(in) :: iv integer, intent(in) :: nb_id integer, intent(in) :: nb_rank integer, intent(in) :: nb logical, intent(in) :: dry_run integer :: i, dsize real(dp) :: gc(1) i = mg%buf(nb_rank)%i_send dsize = nc**(1-1) if (.not. dry_run) then call box_gc_for_neighbor(box, nb, nc, iv, gc) mg%buf(nb_rank)%send(i+1:i+dsize) = pack(gc, .true.) end if ! Later the buffer is sorted, using the fact that loops go from low to high ! box id, and we fill ghost cells according to the neighbor order i = mg%buf(nb_rank)%i_ix if (.not. dry_run) then mg%buf(nb_rank)%ix(i+1) = mg_num_neighbors * nb_id + mg_neighb_rev(nb) end if mg%buf(nb_rank)%i_send = mg%buf(nb_rank)%i_send + dsize mg%buf(nb_rank)%i_ix = mg%buf(nb_rank)%i_ix + 1 end subroutine buffer_for_nb