!******************************************************************************
! Hello World example:
!
! In this example the rank 0 of MPI_COMM_WORLD waits for messages from the
! other ranks. When a message is received it is displayed (send to stdout).
!
! Copyright 2003 (c) Critical Software SA
! . http://www.criticalsoftware.com
! . http://www.criticalsoftware.com/hpc
! . csWMPI II@criticalsoftware.com
!
!******************************************************************************
!MESSAGELENGTH The length of the messages that
! we are going to transmit
!TAG The tag to use for the transmissions
!NODENAMESIZE The size of the node name
include 'mpif.f90'
! Main program
program main
use MPI
implicit none
integer nCommSize, nCommRank, nCounter, ierr
integer MESSAGELENGTH, NODENAMESIZE, TAG
parameter (MESSAGELENGTH = 128, NODENAMESIZE = 65, TAG = 100)
character*(MESSAGELENGTH) pchMessage
character*(NODENAMESIZE) pchNodeName
integer dwNodeNameSize
character*(10) strnCommRank
integer nCommTemp, nCount
dwNodeNameSize = NODENAMESIZE
! Initialize csWMPI II II:
call MPI_INIT(ierr)
! Determine what the world looks like and our own position in it:
call MPI_COMM_SIZE(MPI_COMM_WORLD, nCommSize, ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD, nCommRank, ierr)
print *, 'I am rank ', nCommRank,' of ',nCommSize,&
' in MPI_COMM_WORLD'
! If I am rank 0 I'll receive messages from the other ranks in
! MPI_COMM_WORLD and send them to stdout:
if (nCommRank .eq. 0) then
do nCounter = 1,nCommSize-1
! Receive a message from a process:
call MPI_RECV(pchMessage, MESSAGELENGTH,MPI_CHARACTER,&
MPI_ANY_SOURCE,TAG,MPI_COMM_WORLD,&
MPI_STATUS_IGNORE, ierr)
! Display the received message:
print *,'I received the following message: ', pchMessage
end do
else !I am NOT rank 0
! Get my node name
call MPI_GET_PROCESSOR_NAME(pchNodeName,dwNodeNameSize,ierr)
if (trim(pchNodeName).eq.'' )then
pchNodeName = 'Unknown'
end if
! Number to string
nCommTemp = nCommRank
do nCount = 0,9
if(nCommTemp .gt. 0) then
strnCommRank(nCount+1:nCount+1) = &
char(mod(nCommTemp,10)+ichar('0'))
else
strnCommRank(nCount+1:nCount+1) = ' '
end if
nCommTemp = nCommTemp/10
end do
! Compose my message:
pchMessage = 'Hello world from rank '//trim(strnCommRank)//&
' at '//pchNodeName
! Send it:
call MPI_SEND(pchMessage, MESSAGELENGTH, MPI_CHARACTER, 0,&
TAG,MPI_COMM_WORLD, ierr)
end if
! Pause rank 0 so that the output can be verified:
if (nCommRank .eq. 0) then
pause 'Press ENTER to exit...'
end if
! Finalize csWMPI II II:
call MPI_FINALIZE(ierr)
stop
end
|