source: XMLIO_SERVER/trunk/src/IOSERVER/mod_ioclient_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.2 KB
Line 
1  MODULE mod_ioclient_para
2    INTEGER,PARAMETER :: color_client=1
3    INTEGER,PARAMETER :: color_server=2 
4    INTEGER,SAVE      :: iocomm
5    INTEGER,SAVE      :: iosize
6    INTEGER,SAVE      :: iorank
7    INTEGER,SAVE      :: server_rank
8    INTEGER,SAVE      :: intracomm 
9  CONTAINS
10 
11 
12  SUBROUTINE Init_parallel
13  USE mpitrace
14  IMPLICIT NONE
15    INCLUDE 'mpif.h'
16    INTEGER :: NEW_COMM
17    INTEGER :: ierr
18    INTEGER :: global_rank
19    INTEGER :: global_size
20    INTEGER :: mpi_rank
21    INTEGER :: mpi_size
22    INTEGER :: nb_server_io 
23    INTEGER,ALLOCATABLE :: proc_color(:) 
24    INTEGER :: i
25    INTEGER :: div,remain
26    INTEGER :: group_color
27   
28!    PRINT *, "on rentre dans MPI_INIT"
29    CALL MPI_INIT(ierr)
30    CALL MPI_COMM_RANK(MPI_COMM_WORLD,global_rank,ierr)
31    CALL MPI_COMM_SIZE(MPI_COMM_WORLD,global_size,ierr)
32   
33    PRINT *,"MPI_init Ok, --> mpi_comm_split"
34    CALL MPI_COMM_SPLIT(MPI_COMM_WORLD,color_client,global_rank,intracomm,ierr)
35    CALL MPI_COMM_SIZE(intracomm,mpi_size,ierr)
36    CALL MPI_COMM_RANK(intracomm,mpi_rank,ierr)
37    PRINT *,"MPI_mpi_comm_split ok --> intracomm" 
38    nb_server_io=global_size-mpi_size
39    div=mpi_size/nb_server_io
40    remain=MOD(mpi_size,nb_server_io)
41   
42    IF (mpi_rank<remain*(div+1)) THEN
43      group_color=mpi_rank/(div+1)
44    ELSE
45      group_color=(nb_server_io-1)-(mpi_size-1-mpi_rank)/div
46    ENDIF
47    PRINT *,'group_color',group_color
48
49    CALL MPI_COMM_SPLIT(MPI_COMM_WORLD,group_color,global_rank,iocomm,ierr)
50   
51    CALL MPI_COMM_SIZE(iocomm,iosize,ierr)
52    CALL MPI_COMM_RANK(iocomm,iorank,ierr)
53    PRINT *,"io_size-> ",iosize,"iorank-> ",iorank
54    ALLOCATE(proc_color(0:iosize-1))
55    CALL MPI_ALLGATHER(color_client,1,MPI_INTEGER,proc_color,1,MPI_INTEGER,iocomm,ierr)
56    print *,"proc_color -> ",proc_color
57   
58    DO i=0,iosize-1
59      IF (proc_color(i)==color_server) THEN
60        server_rank=i
61        EXIT
62      ENDIF
63    ENDDO
64   
65    PRINT *,"Proces No",mpi_rank,"--> server",server_rank
66  END SUBROUTINE Init_parallel
67 
68  SUBROUTINE Finalize_parallel
69  IMPLICIT NONE
70    include 'mpif.h'
71    INTEGER :: ierr
72   
73    CALL MPI_FINALIZE(ierr)
74
75  END SUBROUTINE Finalize_parallel
76 
77  END MODULE mod_ioclient_para
Note: See TracBrowser for help on using the repository browser.