SURFEX v8.1
General documentation of Surfex
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 REAL, DIMENSION(:,:), ALLOCATABLE :: xworks
46 REAL, DIMENSION(:,:,:), ALLOCATABLE :: xwork2s
47 !
48 INTEGER, DIMENSION(:), ALLOCATABLE :: nreq
49 INTEGER, DIMENSION(:), ALLOCATABLE :: nindex
50 INTEGER, DIMENSION(:), ALLOCATABLE :: nnum
51 INTEGER, DIMENSION(:), ALLOCATABLE :: nindex_mnh
52 INTEGER, DIMENSION(:), ALLOCATABLE :: nnum_mnh
53 INTEGER, DIMENSION(:), ALLOCATABLE :: nsize_task
54 !
55 INTEGER :: ndim_full_init
56 !
57 INTEGER :: nproc = 1
58 INTEGER :: nrank = 0
59 INTEGER :: ncomm = -1
60 INTEGER :: npio = 0
61 INTEGER :: nsize = 0
62 INTEGER :: myproc = 0
63 !
64 INTEGER :: idx_r = 0
65 INTEGER :: idx_w = 0
66 INTEGER :: idx_i = 0
67 !
68 REAL, DIMENSION(5) :: xtime_write
69 REAL, DIMENSION(6) :: xtime_calc
70 !
71 REAL :: xtime_npio_read=0
73 REAL :: xtime_comm_read=0
74 REAL :: xtime_calc_read=0
77 !
78 REAL :: xtime_init_sea=0
81 REAL :: xtime_init_town=0
82 !
83 REAL :: xtime_sea=0
84 REAL :: xtime_water=0
85 REAL :: xtime_nature=0
86 REAL :: xtime_town=0
87 !
88 CONTAINS
89 !
90 SUBROUTINE wlog_mpi(HLOG,PLOG,KLOG,KLOG2,OLOG)
91 !
92 IMPLICIT NONE
93 !
94  CHARACTER(LEN=*), INTENT(IN) :: HLOG
95 REAL, INTENT(IN),OPTIONAL :: PLOG
96 INTEGER, INTENT(IN), OPTIONAL :: KLOG
97 INTEGER, INTENT(IN), OPTIONAL :: KLOG2
98 LOGICAL, INTENT(IN), OPTIONAL :: OLOG
99 !
100 INTEGER :: IUNIT
101 !
102 REAL(KIND=JPRB) :: ZHOOK_HANDLE
103 !
104 IF (lhook) CALL dr_hook('MODD_SURFEX_MPI:WLOG_MPI',0,zhook_handle)
105 !
106 iunit=100000+nrank
107 !
108 IF (PRESENT(olog)) THEN
109  IF (PRESENT(plog)) THEN
110  IF (PRESENT(klog)) THEN
111  IF (PRESENT(klog2)) THEN
112  WRITE(iunit,*) nblock, hlog, klog, klog2, plog, olog
113  ELSE
114  WRITE(iunit,*) nblock, hlog, klog, plog, olog
115  ENDIF
116  ELSE
117  WRITE(iunit,*) nblock, hlog, plog, olog
118  ENDIF
119  ELSEIF (PRESENT(klog)) THEN
120  IF (PRESENT(klog2)) THEN
121  WRITE(iunit,*) nblock, hlog, klog, klog2, olog
122  ELSE
123  WRITE(iunit,*) nblock, hlog, klog, olog
124  ENDIF
125  ELSE
126  WRITE(iunit,*) nblock, hlog, olog
127  ENDIF
128 ELSEIF (PRESENT(plog)) THEN
129  IF (PRESENT(klog)) THEN
130  IF (PRESENT(klog2)) THEN
131  WRITE(iunit,*) nblock, hlog, klog, klog2, plog
132  ELSE
133  WRITE(iunit,*) nblock, hlog, klog, plog
134  ENDIF
135  ELSE
136  WRITE(iunit,*) nblock, hlog, plog
137  ENDIF
138 ELSEIF (PRESENT(klog)) THEN
139  IF (PRESENT(klog2)) THEN
140  WRITE(iunit,*) nblock, hlog, klog, klog2
141  ELSE
142  WRITE(iunit,*) nblock, hlog, klog
143  ENDIF
144 ELSE
145  WRITE(iunit,*) nblock, hlog
146 ENDIF
147 !
148 IF (lhook) CALL dr_hook('MODD_SURFEX_MPI:WLOG_MPI',1,zhook_handle)
149 !
150 END SUBROUTINE wlog_mpi
151 !
152 SUBROUTINE prep_log_mpi
153 !
154  CHARACTER(LEN=100) :: YNAME
155  CHARACTER(LEN=10) :: YRANK
156 INTEGER :: IUNIT
157 !
158 REAL(KIND=JPRB) :: ZHOOK_HANDLE
159 !
160 IF (lhook) CALL dr_hook('MODD_SURFEX_MPI:PREP_LOG_MPI',0,zhook_handle)
161 !
162 WRITE(yrank,fmt='(I10)') nrank
163 yname='log'//adjustl(yrank)
164 !
165 iunit=100000+nrank
166 !
167 OPEN(unit=iunit,file=trim(yname),form='FORMATTED')
168 WRITE(iunit,*) "Log offline pour proc ",nrank
169 !
170 IF (lhook) CALL dr_hook('MODD_SURFEX_MPI:PREP_LOG_MPI',1,zhook_handle)
171 !
172 END SUBROUTINE prep_log_mpi
173 !
174 SUBROUTINE end_log_mpi
175 !
176 INTEGER :: IUNIT
177 !
178 REAL(KIND=JPRB) :: ZHOOK_HANDLE
179 !
180 IF (lhook) CALL dr_hook('MODD_SURFEX_MPI:END_LOG_MPI',0,zhook_handle)
181 !
182 iunit=100000+nrank
183 !
184 WRITE(iunit,*) "End log offline pour proc ",nrank
185 CLOSE(UNIT=IUNIT)
186 !
187 IF (lhook) CALL dr_hook('MODD_SURFEX_MPI:END_LOG_MPI',1,zhook_handle)
188 !
189 END SUBROUTINE end_log_mpi
190 !-------------------------------------------------------------------------------
191 !
192 END MODULE modd_surfex_mpi
193 
real, dimension(:,:,:), allocatable xwork2s
static const char * trim(const char *name, int *n)
Definition: drhook.c:2383
integer, dimension(:), allocatable nreq
real, dimension(5) xtime_write
integer, dimension(:), allocatable nindex_mnh
integer, dimension(:), allocatable nnum_mnh
integer, dimension(:), allocatable nnum
real, dimension(6) xtime_calc
integer, parameter jprb
Definition: parkind1.F90:32
subroutine end_log_mpi
integer, dimension(:), allocatable nsize_task
logical lhook
Definition: yomhook.F90:15
integer, dimension(:), allocatable nindex
subroutine prep_log_mpi
subroutine wlog_mpi(HLOG, PLOG, KLOG, KLOG2, OLOG)
real, dimension(:,:), allocatable xworks