SURFEX v8.1
General documentation of Surfex
mode_rw_trip.F90
Go to the documentation of this file.
1 !######################
3 !######################
4 !
5 !!**** *MODE_RW_TRIP*
6 !!
7 !! PURPOSE
8 !! -------
9 !
10 ! The purpose of this routine is to store here all routines
11 ! used by TRIP for read/write variables.
12 !
13 !!
14 !!** IMPLICIT ARGUMENTS
15 !! ------------------
16 !! NONE
17 !!
18 !! REFERENCE
19 !! ---------
20 !!
21 !!
22 !! AUTHOR
23 !! ------
24 !! B. Decharme * Meteo France *
25 !!
26 !! MODIFICATIONS
27 !! -------------
28 !! Original 25/04/08
29 !! S.Sénési 08/11/16 : interface to XIOS
30 !--------------------------------------------------------------------------------
31 !
32 !* 0. DECLARATIONS
33 ! ------------
34 !
35 USE modd_trip_par, ONLY : xundef, lncprint
36 !
37 USE yomhook , ONLY : lhook, dr_hook
38 USE parkind1, ONLY : jprb
39 !
40 USE netcdf
41 !
43 !
44 INTERFACE read_trip
45  MODULE PROCEDURE read_trip_x
46  MODULE PROCEDURE read_trip_xy
47  MODULE PROCEDURE read_trip_xyz
48 END INTERFACE
49 !
50 INTERFACE write_trip
51  MODULE PROCEDURE write_trip_xy
52  MODULE PROCEDURE write_trip_xyz
53 END INTERFACE
54 !
55 !-------------------------------------------------------------------------------
56 !
57  CONTAINS
58 !
59 !-------------------------------------------------------------------------------
60 !
61 !##################################################
62 SUBROUTINE read_trip_x(KLISTING,HFILE,HVNAME,PREAD)
63 !##################################################
64 !
65 !! PURPOSE
66 !! -------
67 !
68 ! Read a XY variable in a netcdf file
69 !
70 IMPLICIT NONE
71 !
72 !* declarations of arguments
73 !
74  CHARACTER(LEN=*), INTENT(IN) :: HFILE
75  CHARACTER(LEN=*), INTENT(IN) :: HVNAME
76 !
77 INTEGER, INTENT(IN) :: KLISTING
78 !
79 REAL, DIMENSION(:), INTENT(OUT) :: PREAD
80 !
81 !* declarations of local variables
82 !
83  CHARACTER(LEN=NF90_MAX_NAME) :: YFILE
84  CHARACTER(LEN=NF90_MAX_NAME) :: YVNAME
85 !
86 LOGICAL, PARAMETER :: LRW = .false.
87 !
88 INTEGER :: INCID
89 REAL(KIND=JPRB) :: ZHOOK_HANDLE
90 !
91 !* procedure
92 !
93 IF (lhook) CALL dr_hook('MODE_RW_TRIP:READ_TRIP_X',0,zhook_handle)
94 yfile = hfile(1:len_trim(hfile ))
95 yvname = hvname(1:len_trim(hvname))
96 !
97  CALL ncopen(klisting,lrw,lncprint,yfile,incid)
98  CALL ncread(klisting,incid,yvname,pread,lncprint)
99  CALL ncclose(klisting,lncprint,yfile,incid)
100 !
101 IF (lhook) CALL dr_hook('MODE_RW_TRIP:READ_TRIP_X',1,zhook_handle)
102 !
103 END SUBROUTINE read_trip_x
104 !
105 !-------------------------------------------------------------------------------
106 !
107 !##################################################
108 SUBROUTINE read_trip_xy(KLISTING,HFILE,HVNAME,PREAD)
109 !##################################################
110 !
111 !! PURPOSE
112 !! -------
113 !
114 ! Read a XY variable in a netcdf file
115 !
116 IMPLICIT NONE
117 !
118 !* declarations of arguments
119 !
120  CHARACTER(LEN=*), INTENT(IN) :: HFILE
121  CHARACTER(LEN=*), INTENT(IN) :: HVNAME
122 !
123 INTEGER, INTENT(IN) :: KLISTING
124 !
125 REAL, DIMENSION(:,:), INTENT(OUT) :: PREAD
126 !
127 !* declarations of local variables
128 !
129  CHARACTER(LEN=NF90_MAX_NAME) :: YFILE
130  CHARACTER(LEN=NF90_MAX_NAME) :: YVNAME
131 !
132 LOGICAL, PARAMETER :: LRW = .false.
133 !
134 INTEGER :: INCID
135 REAL(KIND=JPRB) :: ZHOOK_HANDLE
136 !
137 !* procedure
138 !
139 IF (lhook) CALL dr_hook('MODE_RW_TRIP:READ_TRIP_XY',0,zhook_handle)
140 yfile = hfile(1:len_trim(hfile ))
141 yvname = hvname(1:len_trim(hvname))
142 !
143  CALL ncopen(klisting,lrw,lncprint,yfile,incid)
144  CALL ncread(klisting,incid,yvname,pread,lncprint)
145  CALL ncclose(klisting,lncprint,yfile,incid)
146 !
147 IF (lhook) CALL dr_hook('MODE_RW_TRIP:READ_TRIP_XY',1,zhook_handle)
148 !
149 END SUBROUTINE read_trip_xy
150 !
151 !-------------------------------------------------------------------------------
152 !
153 !##################################################
154 SUBROUTINE read_trip_xyz(KLISTING,HFILE,HVNAME,PREAD)
155 !##################################################
156 !
157 !! PURPOSE
158 !! -------
159 !
160 ! Read a XYZ variable in a netcdf file
161 !
162 IMPLICIT NONE
163 !
164 !* declarations of arguments
165 !
166  CHARACTER(LEN=*), INTENT(IN) :: HFILE
167  CHARACTER(LEN=*), INTENT(IN) :: HVNAME
168 !
169 INTEGER, INTENT(IN) :: KLISTING
170 !
171 REAL, DIMENSION(:,:,:), INTENT(OUT) :: PREAD
172 !
173 !* declarations of local variables
174 !
175  CHARACTER(LEN=NF90_MAX_NAME) :: YFILE
176  CHARACTER(LEN=NF90_MAX_NAME) :: YVNAME
177 !
178 LOGICAL, PARAMETER :: LRW = .false.
179 !
180 INTEGER :: INCID
181 REAL(KIND=JPRB) :: ZHOOK_HANDLE
182 !
183 !* procedure
184 !
185 IF (lhook) CALL dr_hook('MODE_RW_TRIP:READ_TRIP_XYZ',0,zhook_handle)
186 yfile = hfile(1:len_trim(hfile ))
187 yvname = hvname(1:len_trim(hvname))
188 !
189  CALL ncopen(klisting,lrw,lncprint,yfile,incid)
190  CALL ncread(klisting,incid,yvname,pread,lncprint)
191  CALL ncclose(klisting,lncprint,yfile,incid)
192 !
193 IF (lhook) CALL dr_hook('MODE_RW_TRIP:READ_TRIP_XYZ',1,zhook_handle)
194 !
195 END SUBROUTINE read_trip_xyz
196 !
197 !-------------------------------------------------------------------------------
198 !
199 !######################################################################
200 SUBROUTINE write_trip_xy(KLISTING,HFILE,HVNAME,OMASK,PWRITE,KTNUM,KTVAL,ODOUBLE,OXIOS)
201 !######################################################################
202 !
203 !! PURPOSE
204 !! -------
205 !
206 ! Write a XY variable in HFILE
207 !
208 #ifdef WXIOS
209 USE xios
210 #endif
211 !
212 IMPLICIT NONE
213 !
214 !* declarations of arguments
215 !
216  CHARACTER(LEN=*), INTENT(IN) :: HFILE
217  CHARACTER(LEN=*), INTENT(IN) :: HVNAME
218 !
219 INTEGER, INTENT(IN) :: KLISTING
220 !
221 LOGICAL, DIMENSION(:,:), INTENT(IN) :: OMASK
222 REAL, DIMENSION(:,:), INTENT(IN) :: PWRITE
223 !
224 INTEGER, INTENT(IN), OPTIONAL :: KTNUM
225 INTEGER, INTENT(IN), OPTIONAL :: KTVAL
226 LOGICAL, INTENT(IN), OPTIONAL :: ODOUBLE
227 LOGICAL, INTENT(IN), OPTIONAL :: OXIOS
228 !
229 !* declarations of local variables
230 !
231  CHARACTER(LEN=NF90_MAX_NAME) :: YFILE
232  CHARACTER(LEN=NF90_MAX_NAME) :: YVNAME
233 !
234 LOGICAL, PARAMETER :: LRW = .true.
235 !
236 REAL, DIMENSION(SIZE(PWRITE,1),SIZE(PWRITE,2)) :: ZWRITE
237 !
238 INTEGER :: INCID
239 LOGICAL :: GXIOS
240 REAL(KIND=JPRB) :: ZHOOK_HANDLE
241 !
242 !* procedure
243 !
244 IF (lhook) CALL dr_hook('MODE_RW_TRIP:WRITE_TRIP_XY',0,zhook_handle)
245 yfile = hfile(1:len_trim(hfile ))
246 yvname = hvname(1:len_trim(hvname))
247 gxios=.false.
248 !
249 WHERE(omask)
250  zwrite(:,:) = pwrite(:,:)
251 ELSEWHERE
252  zwrite(:,:) = xundef
253 ENDWHERE
254 !
255 IF (PRESENT(oxios)) gxios=oxios
256 !
257 IF (gxios) THEN
258 #ifdef WXIOS
259  CALL xios_send_field(yvname,zwrite)
260 #endif
261 ELSE
262  CALL ncopen(klisting,lrw,lncprint,yfile,incid)
263  IF(PRESENT(ktnum).AND.PRESENT(ktval).AND.PRESENT(odouble))THEN
264  CALL ncstore(klisting,incid,yvname,zwrite,lncprint,ktnum,ktval,odouble=odouble)
265  ELSEIF(PRESENT(ktnum).AND.PRESENT(ktval))THEN
266  CALL ncstore(klisting,incid,yvname,zwrite,lncprint,ktnum,ktval)
267  ELSEIF(PRESENT(odouble))THEN
268  CALL ncstore(klisting,incid,yvname,zwrite,lncprint,odouble=odouble)
269  ELSE
270  CALL ncstore(klisting,incid,yvname,zwrite,lncprint)
271  ENDIF
272  CALL ncclose(klisting,lncprint,yfile,incid)
273 ENDIF
274 !
275 IF (lhook) CALL dr_hook('MODE_RW_TRIP:WRITE_TRIP_XY',1,zhook_handle)
276 !
277 END SUBROUTINE write_trip_xy
278 !
279 !-------------------------------------------------------------------------------
280 !
281 !#######################################################################
282 SUBROUTINE write_trip_xyz(KLISTING,HFILE,HVNAME,OMASK,PWRITE,KTNUM,KTVAL,ODOUBLE,OXIOS)
283 !#######################################################################
284 !
285 !! PURPOSE
286 !! -------
287 !
288 ! Write a XY variable in HFILE
289 !
290 #ifdef WXIOS
291 USE xios
292 #endif
293 !
294 IMPLICIT NONE
295 !
296 !* declarations of arguments
297 !
298  CHARACTER(LEN=*), INTENT(IN) :: HFILE
299  CHARACTER(LEN=*), INTENT(IN) :: HVNAME
300 !
301 INTEGER, INTENT(IN) :: KLISTING
302 !
303 LOGICAL, DIMENSION(:,:), INTENT(IN) :: OMASK
304 REAL, DIMENSION(:,:,:), INTENT(IN) :: PWRITE
305 !
306 INTEGER, INTENT(IN), OPTIONAL :: KTNUM
307 INTEGER, INTENT(IN), OPTIONAL :: KTVAL
308 LOGICAL, INTENT(IN), OPTIONAL :: ODOUBLE
309 LOGICAL, INTENT(IN), OPTIONAL :: OXIOS
310 !
311 !* declarations of local variables
312 !
313  CHARACTER(LEN=NF90_MAX_NAME) :: YFILE
314  CHARACTER(LEN=NF90_MAX_NAME) :: YVNAME
315 !
316 LOGICAL, PARAMETER :: LRW = .true.
317 LOGICAL, PARAMETER :: LZW = .true.
318 !
319 REAL, DIMENSION(SIZE(PWRITE,1),SIZE(PWRITE,2),SIZE(PWRITE,3)) :: ZWRITE
320 !
321 LOGICAL :: GXIOS
322 INTEGER :: INCID, IZLEN, JZ
323 REAL(KIND=JPRB) :: ZHOOK_HANDLE
324 !
325 !* procedure
326 !
327 IF (lhook) CALL dr_hook('MODE_RW_TRIP:WRITE_TRIP_XYZ',0,zhook_handle)
328 izlen=SIZE(pwrite,3)
329 gxios=.false.
330 !
331 yfile = hfile(1:len_trim(hfile ))
332 yvname = hvname(1:len_trim(hvname))
333 !
334 DO jz=1,izlen
335  WHERE(omask(:,:))
336  zwrite(:,:,jz) = pwrite(:,:,jz)
337  ELSEWHERE
338  zwrite(:,:,jz)=xundef
339  ENDWHERE
340 ENDDO
341 !
342 IF (PRESENT(oxios)) gxios=oxios
343 !
344 IF (gxios) THEN
345 #ifdef WXIOS
346  CALL xios_send_field(yvname,zwrite(:,:,:))
347 #endif
348 ELSE
349  CALL ncopen(klisting,lrw,lncprint,yfile,incid)
350  DO jz=1,izlen
351  IF(PRESENT(ktnum).AND.PRESENT(ktval).AND.PRESENT(odouble))THEN
352  CALL ncstore(klisting,incid,yvname,zwrite(:,:,jz),lncprint,ktnum,ktval,jz,lzw,odouble=odouble)
353  ELSEIF(PRESENT(ktnum).AND.PRESENT(ktval))THEN
354  CALL ncstore(klisting,incid,yvname,zwrite(:,:,jz),lncprint,ktnum,ktval,jz,lzw)
355  ELSEIF(PRESENT(odouble))THEN
356  CALL ncstore(klisting,incid,yvname,zwrite(:,:,jz),lncprint,klevel=jz,ovarzdim=lzw,odouble=odouble)
357  ELSE
358  CALL ncstore(klisting,incid,yvname,zwrite(:,:,jz),lncprint,klevel=jz,ovarzdim=lzw)
359  ENDIF
360  ENDDO
361  CALL ncclose(klisting,lncprint,yfile,incid)
362 ENDIF
363 !
364 IF (lhook) CALL dr_hook('MODE_RW_TRIP:WRITE_TRIP_XYZ',1,zhook_handle)
365 !
366 END SUBROUTINE write_trip_xyz
367 !
368 !-------------------------------------------------------------------------------
369 !
370 !######################################################################
371 SUBROUTINE write_trip_date(KLISTING,HFILE,KYEAR,KMONTH,KDAY,PTIME)
372 !######################################################################
373 !
374 !! PURPOSE
375 !! -------
376 !
377 ! Write date in HFILE
378 !
379 IMPLICIT NONE
380 !
381 !* declarations of arguments
382 !
383  CHARACTER(LEN=*), INTENT(IN) :: HFILE
384 !
385 INTEGER, INTENT(IN) :: KLISTING
386 INTEGER, INTENT(IN) :: KYEAR
387 INTEGER, INTENT(IN) :: KMONTH
388 INTEGER, INTENT(IN) :: KDAY
389 REAL, INTENT(IN) :: PTIME
390 !
391 !* declarations of local variables
392 !
393  CHARACTER(LEN=NF90_MAX_NAME) :: YFILE
394 !
395 LOGICAL, PARAMETER :: LRW = .true.
396 !
397 INTEGER :: INCID
398 !
399 REAL(KIND=JPRB) :: ZHOOK_HANDLE
400 !
401 !* procedure
402 !
403 IF (lhook) CALL dr_hook('MODE_RW_TRIP:WRITE_TRIP_DATE',0,zhook_handle)
404 !
405 yfile = hfile(1:len_trim(hfile ))
406 !
407  CALL ncopen(klisting,lrw,lncprint,yfile,incid)
408  CALL ncdate(klisting,incid,kyear,kmonth,kday,ptime,lncprint)
409  CALL ncclose(klisting,lncprint,yfile,incid)
410 !
411 IF (lhook) CALL dr_hook('MODE_RW_TRIP:WRITE_TRIP_DATE',1,zhook_handle)
412 !
413 END SUBROUTINE write_trip_date
414 !
415 !-------------------------------------------------------------------------------
416 !
417 END MODULE mode_rw_trip
subroutine read_trip_x(KLISTING, HFILE, HVNAME, PREAD)
subroutine write_trip_xyz(KLISTING, HFILE, HVNAME, OMASK, PWRITE, KTNUM, KTVAL, ODOUBLE, OXIOS)
subroutine read_trip_xyz(KLISTING, HFILE, HVNAME, PREAD)
subroutine ncstore(KLISTING, KNCID, HVNAME, PWRITE, OVERBOSE, KTIMENUM, KTIMEVAL, KLEVEL, OVARZDIM, ODOUBLE)
subroutine read_trip_xy(KLISTING, HFILE, HVNAME, PREAD)
integer, parameter jprb
Definition: parkind1.F90:32
logical, save lncprint
subroutine ncclose(KLISTING, OVERBOSE, HFILENAME, KNCID)
subroutine ncdate(KLISTING, KNCID, KYEAR, KMONTH, KDAY, PTIME, OVERBOSE)
subroutine write_trip_xy(KLISTING, HFILE, HVNAME, OMASK, PWRITE, KTNUM, KTVAL, ODOUBLE, OXIOS)
subroutine write_trip_date(KLISTING, HFILE, KYEAR, KMONTH, KDAY, PTIME)
logical lhook
Definition: yomhook.F90:15
real, save xundef
subroutine ncopen(KLISTING, ORW, OVERBOSE, HFILENAME, KNCID)