Send PIE term atom list from a row.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(comm_t), | intent(in) | :: | comm | |||
| integer, | intent(in) | :: | tag | |||
| integer(kind=int64), | intent(in) | :: | term_idx | |||
| integer, | intent(in) | :: | atom_row(:) | |||
| integer, | intent(in) | :: | dest_rank |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer, | private, | allocatable | :: | atom_list(:) | |||
| integer(kind=int32), | private | :: | fragment_type | ||||
| integer, | private | :: | max_atoms | ||||
| integer, | private | :: | n_atoms | ||||
| type(request_t), | private | :: | req(4) |
subroutine send_pie_term_payload(comm, tag, term_idx, atom_row, dest_rank) !! Send PIE term atom list from a row. type(comm_t), intent(in) :: comm integer, intent(in) :: tag integer(int64), intent(in) :: term_idx integer, intent(in) :: atom_row(:) integer, intent(in) :: dest_rank integer :: n_atoms, max_atoms integer, allocatable :: atom_list(:) integer(int32) :: fragment_type type(request_t) :: req(4) fragment_type = FRAGMENT_TYPE_ATOMS max_atoms = size(atom_row) n_atoms = 0 do while (n_atoms < max_atoms .and. atom_row(n_atoms + 1) >= 0) n_atoms = n_atoms + 1 end do allocate (atom_list(n_atoms)) if (n_atoms > 0) then atom_list = atom_row(1:n_atoms) end if call isend(comm, term_idx, dest_rank, tag, req(1)) call isend(comm, fragment_type, dest_rank, tag, req(2)) call isend(comm, n_atoms, dest_rank, tag, req(3)) call isend(comm, atom_list, dest_rank, tag, req(4)) call wait(req(1)) call wait(req(2)) call wait(req(3)) call wait(req(4)) deallocate (atom_list) end subroutine send_pie_term_payload