subroutine Error_MPI(err,sub)
integer,optional,intent(in) :: err
character(len=*),optional,intent(in) :: sub
integer :: err_
character(len=128) :: sub_
err_=ierr ; if(present(err))err_=err
sub_="MPI_Get_Error:"; if(present(sub))sub_=sub
select case (err_)
case (MPI_SUCCESS)
return
!
case (MPI_ERR_COMM)
write(*,'(2A)') trim(sub_),STR_ERR_COMM
!
case (MPI_ERR_COUNT)
write(*,'(2A)') trim(sub_),STR_ERR_COUNT
!
case (MPI_ERR_TYPE)
write(*,'(2A)') trim(sub_),STR_ERR_TYPE
!
case (MPI_ERR_BUFFER)
write(*,'(2A)') trim(sub_),STR_ERR_BUFFER
!
case (MPI_ERR_ROOT)
write(*,'(2A)') trim(sub_),STR_ERR_ROOT
!
case (MPI_ERR_ARG)
write(*,'(2A)') trim(sub_),STR_ERR_ARG
!
case (MPI_ERR_TAG)
write(*,'(2A)') trim(sub_),STR_ERR_TAG
!
case (MPI_ERR_RANK)
write(*,'(2A)') trim(sub_),STR_ERR_RANK
!
case (MPI_ERR_GROUP)
write(*,'(2A)') trim(sub_),STR_ERR_GROUP
!
case (MPI_ERR_OP)
write(*,'(2A)') trim(sub_),STR_ERR_OP
!
case (MPI_ERR_TOPOLOGY)
write(*,'(2A)') trim(sub_),STR_ERR_TOPOLOGY
!
case (MPI_ERR_DIMS)
write(*,'(2A)') trim(sub_),STR_ERR_DIMS
!
case (MPI_ERR_UNKNOWN)
write(*,'(2A)') trim(sub_),STR_ERR_UNKNOWN
!
case (MPI_ERR_TRUNCATE)
write(*,'(2A)') trim(sub_),STR_ERR_TRUNCATE
!
case (MPI_ERR_OTHER)
write(*,'(2A)') trim(sub_),STR_ERR_OTHER
!
case (MPI_ERR_INTERN)
write(*,'(2A)') trim(sub_),STR_ERR_INTERN
!
case (MPI_ERR_IN_STATUS)
write(*,'(2A)') trim(sub_),STR_ERR_IN_STATUS
!
case (MPI_ERR_PENDING)
write(*,'(2A)') trim(sub_),STR_ERR_PENDING
!
case (MPI_ERR_REQUEST)
write(*,'(2A)') trim(sub_),STR_ERR_REQUEST
!
case (MPI_ERR_LASTCODE)
write(*,'(2A)') trim(sub_),STR_ERR_LASTCODE
!
case default
return
!
end select
end subroutine Error_MPI