File: N:\mfix\model\dmp_modules\parallel_mpi_mod.f

1             module parallel_mpi
2     
3     !       A module to carry out init, finalize and check for any parallel errors
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 ! ignore-depcomp
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