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

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

Correction : utilisation d'OASIS par le server

File size: 2.6 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  USE mod_ioserver_namelist
23  USE mod_prism_get_comm 
24  IMPLICIT NONE
25    INCLUDE 'mpif.h'
26    INTEGER :: ierr
27    INTEGER :: global_rank
28    INTEGER :: global_size
29    INTEGER,ALLOCATABLE :: proc_color(:)
30    INTEGER :: i
31    INTEGER :: group_color
32    INTEGER :: Comm_client_server
33    INTEGER :: comp_id
34    CHARACTER(LEN=6) :: oasis_server_id, oasis_client_id
35
36    IF (using_oasis) THEN
37       oasis_server_id=server_id
38       oasis_client_id=client_id
39       CALL prism_init_comp_proto (comp_id, oasis_server_id, ierr)
40       CALL prism_get_intracomm(Comm_client_server,oasis_client_id,ierr)
41    ELSE
42      CALL MPI_INIT(ierr)
43      Comm_client_server=MPI_COMM_WORLD
44    ENDIF
45       
46    CALL MPI_COMM_RANK(Comm_client_server,global_rank,ierr)
47    CALL MPI_COMM_SIZE(Comm_client_server,global_size,ierr)
48       
49    CALL MPI_COMM_SPLIT(Comm_client_server,color_server,global_rank,intracomm,ierr)
50    CALL MPI_COMM_SIZE(intracomm,mpi_size,ierr)
51    CALL MPI_COMM_RANK(intracomm,mpi_rank,ierr)
52   
53    group_color=mpi_rank
54    PRINT *,'group_color',group_color
55
56    CALL MPI_COMM_SPLIT(Comm_client_server,group_color,global_rank,iocomm,ierr)   
57   
58    CALL MPI_COMM_SIZE(iocomm,iosize,ierr)
59    CALL MPI_COMM_RANK(iocomm,iorank,ierr)
60
61    PRINT *,"io_size-> ",iosize,"iorank-> ",iorank
62   
63    ALLOCATE(proc_color(0:iosize-1))
64    CALL MPI_ALLGATHER(color_server,1,MPI_INTEGER,proc_color,1,MPI_INTEGER,iocomm,ierr)
65    print *,"proc_color -> ",proc_color
66   
67    ALLOCATE(client_rank(iosize-1))
68    nb_client=0
69    DO i=0,iosize-1
70      IF (proc_color(i)==color_client) THEN
71        nb_client=nb_client+1
72        client_rank(nb_client)=i
73      ENDIF
74    ENDDO
75
76    PRINT *,"Proces No",mpi_rank,"--> client ",client_rank
77  END SUBROUTINE Init_parallel
78 
79  SUBROUTINE Finalize_parallel
80  USE mod_ioserver_namelist
81  USE mod_prism_proto
82  IMPLICIT NONE
83    include 'mpif.h'
84    INTEGER :: ierr
85   
86    IF (using_oasis) THEN
87      CALL prism_terminate_proto(ierr)
88    ELSE
89      CALL MPI_FINALIZE(ierr)
90    ENDIF
91   
92  END SUBROUTINE Finalize_parallel
93
94END MODULE mod_ioserver_para
Note: See TracBrowser for help on using the repository browser.