source: XMLIO_SERVER/trunk/src/IOSERVER/mod_ioserver_para.f90 @ 8

Last change on this file since 8 was 8, checked in by ymipsl, 15 years ago

Importation des sources du serveur XMLIO

File size: 2.0 KB
Line 
1  MODULE mod_ioserver_para
2    INTEGER,PARAMETER :: color_client=1
3    INTEGER,PARAMETER :: color_server=2 
4
5    INTEGER,SAVE      :: iocomm
6    INTEGER,SAVE      :: iosize
7    INTEGER,SAVE      :: iorank
8   
9    INTEGER,SAVE      :: mpi_rank
10    INTEGER,SAVE      :: mpi_size
11    INTEGER,SAVE      :: mpi_master
12    LOGICAL,SAVE      :: is_mpi_master
13 
14    INTEGER,SAVE      :: nb_client
15    INTEGER,ALLOCATABLE,SAVE      :: client_rank(:)
16    INTEGER,SAVE      :: intracomm 
17  CONTAINS
18 
19 
20  SUBROUTINE Init_parallel
21  USE mpitrace
22  IMPLICIT NONE
23    INCLUDE 'mpif.h'
24    INTEGER :: ierr
25    INTEGER :: global_rank
26    INTEGER :: global_size
27    INTEGER,ALLOCATABLE :: proc_color(:)
28    INTEGER :: i
29    INTEGER :: group_color
30   
31    CALL MPI_INIT(ierr)
32    CALL MPI_COMM_RANK(MPI_COMM_WORLD,global_rank,ierr)
33    CALL MPI_COMM_SIZE(MPI_COMM_WORLD,global_size,ierr)
34   
35    CALL MPI_COMM_SPLIT(MPI_COMM_WORLD,color_server,global_rank,intracomm,ierr)
36    CALL MPI_COMM_SIZE(intracomm,mpi_size,ierr)
37    CALL MPI_COMM_RANK(intracomm,mpi_rank,ierr)
38   
39    group_color=mpi_rank
40    PRINT *,'group_color',group_color
41
42    CALL MPI_COMM_SPLIT(MPI_COMM_WORLD,group_color,global_rank,iocomm,ierr)   
43   
44    CALL MPI_COMM_SIZE(iocomm,iosize,ierr)
45    CALL MPI_COMM_RANK(iocomm,iorank,ierr)
46
47    PRINT *,"io_size-> ",iosize,"iorank-> ",iorank
48   
49    ALLOCATE(proc_color(0:iosize-1))
50    CALL MPI_ALLGATHER(color_server,1,MPI_INTEGER,proc_color,1,MPI_INTEGER,iocomm,ierr)
51    print *,"proc_color -> ",proc_color
52   
53    ALLOCATE(client_rank(iosize-1))
54    nb_client=0
55    DO i=0,iosize-1
56      IF (proc_color(i)==color_client) THEN
57        nb_client=nb_client+1
58        client_rank(nb_client)=i
59      ENDIF
60    ENDDO
61
62    PRINT *,"Proces No",mpi_rank,"--> client ",client_rank
63  END SUBROUTINE Init_parallel
64 
65  SUBROUTINE Finalize_parallel
66  IMPLICIT NONE
67    include 'mpif.h'
68    INTEGER :: ierr
69   
70    CALL MPI_FINALIZE(ierr)
71
72  END SUBROUTINE Finalize_parallel
73
74END MODULE mod_ioserver_para
Note: See TracBrowser for help on using the repository browser.