blob: d8778b986398e87c6978041490bc43f1eb5eae23 [file] [log] [blame]
program main
c*********************************************************************72
c
cc MAIN is the main program for HELLO_MPI.
c
c Discussion:
c
c HELLO is a simple MPI test program.
c
c Each process prints out a "Hello, world!" message.
c
c The master process also prints out a short message.
c
c Licensing:
c
c This code is distributed under the GNU LGPL license.
c
c Modified:
c
c 30 October 2008
c
c Author:
c
c John Burkardt
c
c Reference:
c
c William Gropp, Ewing Lusk, Anthony Skjellum,
c Using MPI: Portable Parallel Programming with the
c Message-Passing Interface,
c Second Edition,
c MIT Press, 1999,
c ISBN: 0262571323,
c LC: QA76.642.G76.
c
c
c Define MPI symbols:
c
include 'mpif.h'
c
c implicit none
c
integer error
integer id
integer p
double precision wtime
c
c Initialize MPI.
c
call MPI_Init ( error )
c
c Get the number of processes.
c
call MPI_Comm_size ( MPI_COMM_WORLD, p, error )
c
c Get the individual process ID.
c
call MPI_Comm_rank ( MPI_COMM_WORLD, id, error )
c
c Print a message.
c
if ( id .eq. 0 ) then
call timestamp ( )
write ( *, '(a)' ) ' '
write ( *, '(a)' ) 'HELLO_MPI - Master process:'
write ( *, '(a)' ) ' FORTRAN77/MPI version'
write ( *, '(a)' ) ' A simple MPI program.'
write ( *, '(a)' ) ' '
write ( *, '(a,i3)' ) ' The number of processes is ', p
write ( *, '(a)' ) ' '
end if
if ( id .eq. 0 ) then
wtime = MPI_Wtime ( )
end if
write ( *, '(a,i3,a)' ) ' Process ', id,
& ' says "Hello, world!"'
if ( id .eq. 0 ) then
wtime = MPI_Wtime ( ) - wtime
write ( *, '(a)' ) ' '
write ( *, '(a,g14.6,a)' )
& 'Elapsed wall clock time = ', wtime, ' seconds.'
end if
c
c Terminate MPI.
c
call MPI_Finalize ( error )
c
c Terminate.
c
if ( id .eq. 0 ) then
write ( *, '(a)' ) ' '
write ( *, '(a)' ) 'HELLO_MPI:'
write ( *, '(a)' ) ' Normal end of execution.'
write ( *, '(a)' ) ' '
call timestamp ( )
end if
stop
end
subroutine timestamp ( )
c*********************************************************************72
c
cc TIMESTAMP prints out the current YMDHMS date as a timestamp.
c
c Licensing:
c
c This code is distributed under the GNU LGPL license.
c
c Modified:
c
c 12 January 2007
c
c Author:
c
c John Burkardt
c
c Parameters:
c
c None
c
implicit none
character * ( 8 ) ampm
integer d
character * ( 8 ) date
integer h
integer m
integer mm
character * ( 9 ) month(12)
integer n
integer s
character * ( 10 ) time
integer y
save month
data month /
& 'January ', 'February ', 'March ', 'April ',
& 'May ', 'June ', 'July ', 'August ',
& 'September', 'October ', 'November ', 'December ' /
call date_and_time ( date, time )
read ( date, '(i4,i2,i2)' ) y, m, d
read ( time, '(i2,i2,i2,1x,i3)' ) h, n, s, mm
if ( h .lt. 12 ) then
ampm = 'AM'
else if ( h .eq. 12 ) then
if ( n .eq. 0 .and. s .eq. 0 ) then
ampm = 'Noon'
else
ampm = 'PM'
end if
else
h = h - 12
if ( h .lt. 12 ) then
ampm = 'PM'
else if ( h .eq. 12 ) then
if ( n .eq. 0 .and. s .eq. 0 ) then
ampm = 'Midnight'
else
ampm = 'AM'
end if
end if
end if
write ( *,
& '(i2,1x,a,1x,i4,2x,i2,a1,i2.2,a1,i2.2,a1,i3.3,1x,a)' )
& d, month(m), y, h, ':', n, ':', s, '.', mm, ampm
return
end