File: N:\mfix\model\dmp_modules\parallel_mpi_mod.f
1 module parallel_mpi
2
3
4
5 use geometry
6 use compar
7 implicit none
8
9 contains
10
11 subroutine parallel_init()
12 implicit none
13 integer :: ierr
14
15 numPEs = 1
16 myPE = 0
17
18 #ifdef MPI
19 call MPI_Init(ierr)
20 call MPI_Check( 'parallel_init:MPI_Init ', ierr)
21
22 call MPI_COMM_SIZE( MPI_COMM_WORLD, numPEs, ierr )
23 call MPI_Check( 'parallel_init:MPI_Comm_size ', ierr )
24
25 call MPI_COMM_RANK( MPI_COMM_WORLD, myPE, ierr )
26 call MPI_Check( 'parallel_init:MPI_Comm_size ', ierr )
27 #endif
28 return
29 end subroutine parallel_init
30
31 subroutine parallel_fin()
32 implicit none
33
34 #ifdef MPI
35 integer :: ierr
36
37 call MPI_Finalize(ierr)
38 call MPI_Check( 'parallel_init:MPI_Finalize ', ierr)
39 #endif
40
41 return
42 end subroutine parallel_fin
43
44 subroutine MPI_Check( msg, ierr )
45 #ifdef MPI
46 use mpi, only: MPI_SUCCESS
47 #endif
48 implicit none
49 character(len=*),intent(in) :: msg
50 integer, intent(in) :: ierr
51
52 #ifdef MPI
53 character(len=512) :: errmsg
54 integer :: resultlen, ierror
55
56 if (ierr .ne. MPI_SUCCESS ) then
57 call MPI_Error_string( ierr, errmsg, resultlen, ierror )
58 print*, 'Error: ', msg
59 print*, errmsg(1:resultlen)
60 stop '** ERROR ** '
61 endif
62 #endif
63
64 return
65 end subroutine MPI_Check
66
67
68 end module parallel_mpi
69
70