LMDZ
mod_const_mpi.F90
Go to the documentation of this file.
1 !
2 ! $Id: mod_const_para.F90 1279 2009-12-10 09:02:56Z fairhead $
3 !
4 MODULE mod_const_mpi
5  IMPLICIT NONE
6  INTEGER,SAVE :: comm_lmdz
7  INTEGER,SAVE :: mpi_real_lmdz
8 
9 
10 CONTAINS
11 
12  SUBROUTINE init_const_mpi
13 #ifdef CPP_IOIPSL
14  USE ioipsl, ONLY: getin
15 #else
16 ! if not using IOIPSL, we still need to use (a local version of) getin
17  USE ioipsl_getincom, only: getin
18 #endif
19 ! Use of Oasis-MCT coupler
20 #ifdef CPP_OMCT
21  USE mod_prism
22 #endif
23 #ifdef CPP_XIOS
24  USE wxios, only: wxios_init
25 #endif
26  IMPLICIT NONE
27 #ifdef CPP_MPI
28  include 'mpif.h'
29 #endif
30 
31  INTEGER :: ierr
32  INTEGER :: comp_id
33  INTEGER :: thread_required
34  INTEGER :: thread_provided
35  CHARACTER(len = 6) :: type_ocean
36 
37 !$OMP MASTER
38  type_ocean = 'force '
39  CALL getin('type_ocean', type_ocean)
40 !$OMP END MASTER
41 !$OMP BARRIER
42 
43  IF (type_ocean=='couple') THEN
44 #ifdef CPP_COUPLE
45 !$OMP MASTER
46 #ifdef CPP_XIOS
47  CALL wxios_init("LMDZ", outcom=comm_lmdz, type_ocean=type_ocean)
48 #else
49  CALL prism_init_comp_proto (comp_id, 'LMDZ', ierr)
50  CALL prism_get_localcomm_proto(comm_lmdz,ierr)
51 #endif
52 !$OMP END MASTER
53 #endif
54 #ifdef CPP_MPI
55  mpi_real_lmdz=mpi_real8
56 #endif
57  ELSE
58  CALL init_mpi
59  ENDIF
60 
61  END SUBROUTINE init_const_mpi
62 
63  SUBROUTINE init_mpi
64 #ifdef CPP_XIOS
65  USE wxios, only: wxios_init
66 #endif
67  IMPLICIT NONE
68 #ifdef CPP_MPI
69  include 'mpif.h'
70 #endif
71  INTEGER :: ierr
72  INTEGER :: thread_required
73  INTEGER :: thread_provided
74 
75 #ifdef CPP_MPI
76 !$OMP MASTER
77  thread_required=mpi_thread_serialized
78 
79  CALL mpi_init_thread(thread_required,thread_provided,ierr)
80  IF (thread_provided < thread_required) THEN
81  print *,'Warning : The multithreaded level of MPI librairy do not provide the requiered level', &
82  ' in mod_const_mpi::Init_const_mpi'
83  ENDIF
84  comm_lmdz=mpi_comm_world
85  mpi_real_lmdz=mpi_real8
86 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
87 ! Initialisation de XIOS
88 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
89 #ifdef CPP_XIOS
90  CALL wxios_init("LMDZ", outcom=comm_lmdz)
91 #endif
92 !$OMP END MASTER
93 #else
94 #ifdef CPP_XIOS
95 !$OMP MASTER
96  CALL wxios_init("LMDZ")
97 !$OMP END MASTER
98 #endif
99 #endif
100 
101  END SUBROUTINE init_mpi
102 
103 END MODULE mod_const_mpi
integer mpi_real_lmdz
subroutine init_mpi
subroutine init_const_mpi
integer comm_lmdz