SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
modd_surfex_mpi.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! ######################
7 ! ######################
8 !
9 !!**** *MODD_SURFEX_MPI
10 !!
11 !! PURPOSE
12 !! -------
13 !
14 !!
15 !!** IMPLICIT ARGUMENTS
16 !! ------------------
17 !! None
18 !!
19 !! REFERENCE
20 !! ---------
21 !!
22 !! AUTHOR
23 !! ------
24 !! S. Faroux *Meteo France*
25 !!
26 !! MODIFICATIONS
27 !! -------------
28 !! Original 04/06/12
29 !! B. Decharme 04/2013 Delete NWG_LAYER_TOT, NWG_SIZE
30 !! J.Escobar 10/06/2013: replace DOUBLE PRECISION by REAL to handle problem for promotion of real on IBM SP
31 !
32 !-------------------------------------------------------------------------------
33 !
34 !* 0. DECLARATIONS
35 ! ------------
36 !
37 USE modd_surfex_omp, ONLY : nblock
38 !
39 USE yomhook ,ONLY : lhook, dr_hook
40 USE parkind1 ,ONLY : jprb
41 !
42 IMPLICIT NONE
43 !-------------------------------------------------------------------------------
44 !
45 INTEGER, DIMENSION(:), ALLOCATABLE :: NINDEX
46 INTEGER, DIMENSION(:), ALLOCATABLE :: NSIZE_TASK
47 !
48 INTEGER :: NPROC = 1
49 INTEGER :: NRANK = 0
50 INTEGER :: NCOMM = -1
51 INTEGER :: NPIO = 0
52 INTEGER :: NSIZE = 0
53 INTEGER :: MYPROC = 0
54 !
55 INTEGER :: IDX_R = 0
56 INTEGER :: IDX_W = 0
57 !
58 REAL, DIMENSION(5) :: XTIME_WRITE
59 !$OMP THREADPRIVATE(XTIME_WRITE)
60 REAL, DIMENSION(6) :: XTIME_CALC
61 !$OMP THREADPRIVATE(XTIME_CALC)
62 REAL :: XTIME_NPIO_READ=0
63 !$OMP THREADPRIVATE(XTIME_NPIO_READ)
64 REAL :: XTIME_NPIO_WRITE=0
65 !$OMP THREADPRIVATE(XTIME_NPIO_WRITE)
66 REAL :: XTIME_COMM_READ=0
67 !$OMP THREADPRIVATE(XTIME_COMM_READ)
68 REAL :: XTIME_CALC_READ=0
69 !$OMP THREADPRIVATE(XTIME_CALC_READ)
70 REAL :: XTIME_COMM_WRITE=0
71 !$OMP THREADPRIVATE(XTIME_COMM_WRITE)
72 REAL :: XTIME_CALC_WRITE=0
73 !$OMP THREADPRIVATE(XTIME_CALC_WRITE)
74 REAL :: XTIME_OMP_BARR=0
75 !$OMP THREADPRIVATE(XTIME_OMP_BARR)
76 !
77 REAL :: XTIME_INIT_SEA=0
78 !$OMP THREADPRIVATE(XTIME_INIT_SEA)
79 REAL :: XTIME_INIT_WATER=0
80 !$OMP THREADPRIVATE(XTIME_INIT_WATER)
81 REAL :: XTIME_INIT_NATURE=0
82 !$OMP THREADPRIVATE(XTIME_INIT_NATURE)
83 REAL :: XTIME_INIT_TOWN=0
84 !$OMP THREADPRIVATE(XTIME_INIT_TOWN)
85 !
86 REAL :: XTIME_SEA=0
87 !$OMP THREADPRIVATE(XTIME_SEA)
88 REAL :: XTIME_WATER=0
89 !$OMP THREADPRIVATE(XTIME_WATER)
90 REAL :: XTIME_NATURE=0
91 !$OMP THREADPRIVATE(XTIME_NATURE)
92 REAL :: XTIME_TOWN=0
93 !$OMP THREADPRIVATE(XTIME_TOWN)
94 !
95  CONTAINS
96 !
97 SUBROUTINE wlog_mpi(HLOG,PLOG,KLOG,KLOG2,OLOG)
98 !
99 IMPLICIT NONE
100 !
101  CHARACTER(LEN=*), INTENT(IN) :: hlog
102 REAL, INTENT(IN),OPTIONAL :: plog
103 INTEGER, INTENT(IN), OPTIONAL :: klog
104 INTEGER, INTENT(IN), OPTIONAL :: klog2
105 LOGICAL, INTENT(IN), OPTIONAL :: olog
106 !
107 INTEGER :: iunit
108 !
109 REAL(KIND=JPRB) :: zhook_handle
110 !
111 IF (lhook) CALL dr_hook('MODD_SURFEX_MPI:WLOG_MPI',0,zhook_handle)
112 !
113 iunit=100000+nrank
114 !
115 !$OMP CRITICAL
116 !
117 IF (present(olog)) THEN
118  IF (present(plog)) THEN
119  IF (present(klog)) THEN
120  IF (present(klog2)) THEN
121  WRITE(iunit,*) nblock, hlog, klog, klog2, plog, olog
122  ELSE
123  WRITE(iunit,*) nblock, hlog, klog, plog, olog
124  ENDIF
125  ELSE
126  WRITE(iunit,*) nblock, hlog, plog, olog
127  ENDIF
128  ELSEIF (present(klog)) THEN
129  IF (present(klog2)) THEN
130  WRITE(iunit,*) nblock, hlog, klog, klog2, olog
131  ELSE
132  WRITE(iunit,*) nblock, hlog, klog, olog
133  ENDIF
134  ELSE
135  WRITE(iunit,*) nblock, hlog, olog
136  ENDIF
137 ELSEIF (present(plog)) THEN
138  IF (present(klog)) THEN
139  IF (present(klog2)) THEN
140  WRITE(iunit,*) nblock, hlog, klog, klog2, plog
141  ELSE
142  WRITE(iunit,*) nblock, hlog, klog, plog
143  ENDIF
144  ELSE
145  WRITE(iunit,*) nblock, hlog, plog
146  ENDIF
147 ELSEIF (present(klog)) THEN
148  IF (present(klog2)) THEN
149  WRITE(iunit,*) nblock, hlog, klog, klog2
150  ELSE
151  WRITE(iunit,*) nblock, hlog, klog
152  ENDIF
153 ELSE
154  WRITE(iunit,*) nblock, hlog
155 ENDIF
156 !
157 !$OMP END CRITICAL
158 !
159 IF (lhook) CALL dr_hook('MODD_SURFEX_MPI:WLOG_MPI',1,zhook_handle)
160 !
161 END SUBROUTINE wlog_mpi
162 !
163 SUBROUTINE prep_log_mpi
164 !
165  CHARACTER(LEN=100) :: yname
166  CHARACTER(LEN=10) :: yrank
167 INTEGER :: iunit
168 !
169 REAL(KIND=JPRB) :: zhook_handle
170 !
171 IF (lhook) CALL dr_hook('MODD_SURFEX_MPI:PREP_LOG_MPI',0,zhook_handle)
172 !
173 WRITE(yrank,fmt='(I10)') nrank
174 yname='log'//adjustl(yrank)
175 !
176 iunit=100000+nrank
177 !
178 !$OMP SINGLE
179 OPEN(unit=iunit,file=trim(yname),form='FORMATTED')
180 WRITE(iunit,*) "Log offline pour proc ",nrank
181 !$OMP END SINGLE
182 !
183 IF (lhook) CALL dr_hook('MODD_SURFEX_MPI:PREP_LOG_MPI',1,zhook_handle)
184 !
185 END SUBROUTINE prep_log_mpi
186 !
187 SUBROUTINE end_log_mpi
188 !
189 INTEGER :: iunit
190 !
191 REAL(KIND=JPRB) :: zhook_handle
192 !
193 IF (lhook) CALL dr_hook('MODD_SURFEX_MPI:END_LOG_MPI',0,zhook_handle)
194 !
195 iunit=100000+nrank
196 !
197 !$OMP SINGLE
198 WRITE(iunit,*) "End log offline pour proc ",nrank
199  CLOSE(unit=iunit)
200 !$OMP END SINGLE
201 !
202 IF (lhook) CALL dr_hook('MODD_SURFEX_MPI:END_LOG_MPI',1,zhook_handle)
203 !
204 END SUBROUTINE end_log_mpi
205 !-------------------------------------------------------------------------------
206 !
207 END MODULE modd_surfex_mpi
208 
subroutine prep_log_mpi
subroutine end_log_mpi
subroutine wlog_mpi(HLOG, PLOG, KLOG, KLOG2, OLOG)