SURFEX v8.1
General documentation of Surfex
treat_field.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 ! #########
6  SUBROUTINE treat_field (UG, U, USS, &
7  HPROGRAM,HSCHEME,HFILETYPE, &
8  HSUBROUTINE,HFILENAME,HFIELD, &
9  PPGDARRAY )
10 ! ##############################################################
11 !
12 !!**** *TREAT_FIELD* chooses which treatment subroutine to use
13 !!
14 !! PURPOSE
15 !! -------
16 !!
17 !! METHOD
18 !! ------
19 !!
20 !! EXTERNAL
21 !! --------
22 !!
23 !! IMPLICIT ARGUMENTS
24 !! ------------------
25 !!
26 !! REFERENCE
27 !! ---------
28 !!
29 !! AUTHOR
30 !! ------
31 !!
32 !! V. Masson Meteo-France
33 !!
34 !! MODIFICATION
35 !! ------------
36 !!
37 !! Original 11/09/95
38 !!
39 !! Modification
40 !! 25/05/96 (V. Masson) remove useless case for HSUBROUTINE
41 !! 29/11/2002 (D. Gazen) add HSFTYPE argument + call to read_binllvfast routine
42 !! 03/2004 (V. MAsson) externalization
43 !! 04/2009 (B. Decharme) Special treatement for gaussian grid
44 !! 06/2009 (B. Decharme) call Topographic index statistics calculation
45 !! 09/2010 (E. Kourzeneva) call reading of the lake database
46 !! 03/2012 (M. Lafaysse) NETCDF
47 !----------------------------------------------------------------------------
48 !
49 !* 0. DECLARATION
50 ! -----------
51 !
52 !
53 !
54 !
56 USE modd_surf_atm_n, ONLY : surf_atm_t
57 USE modd_sso_n, ONLY : sso_t
58 !
59 USE modd_surf_par, ONLY : xundef
64 !
65 USE modd_surfex_omp, ONLY : nblocktot
66 USE modd_surfex_mpi, ONLY : nrank, npio, nproc, ncomm, nreq, nindex, idx_r, &
67  nsize_task,nreq, nsize_max=>nsize
68 !
70 USE modd_data_cover_par, ONLY : jpcover
71 !
72 USE modi_ini_ssowork
73 USE modi_get_luout
74 USE modi_read_direct
75 USE modi_read_direct_gauss
76 USE modi_read_latlon
77 USE modi_read_binllv
78 USE modi_read_binllvfast
79 USE modi_read_ascllv
81 USE modi_read_pgd_netcdf
82 USE modi_average2_mesh
83 USE modi_make_lcover
84 USE modi_abor1_sfx
85 USE modi_average2_cover
86 USE modi_average2_cti
87 USE modi_average2_ldb
88 USE modi_average2_orography
89 !
90 USE yomhook ,ONLY : lhook, dr_hook
91 USE parkind1 ,ONLY : jprb
92 !
93 IMPLICIT NONE
94 !
95 #ifdef SFX_MPI
96 include "mpif.h"
97 #endif
98 !
99 !* 0.1 Declaration of arguments
100 ! ------------------------
101 !
102 !
103 TYPE(surf_atm_grid_t), INTENT(INOUT) :: UG
104 TYPE(surf_atm_t), INTENT(INOUT) :: U
105 TYPE(sso_t), INTENT(INOUT) :: USS
106 !
107  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! Type of program
108  CHARACTER(LEN=6), INTENT(IN) :: HSCHEME ! Scheme treated
109  CHARACTER(LEN=6), INTENT(IN) :: HFILETYPE ! Type of the data file
110  CHARACTER(LEN=6), INTENT(IN) :: HSUBROUTINE ! Name of the subroutine to call
111  CHARACTER(LEN=28), INTENT(IN) :: HFILENAME ! Name of the field file.
112  CHARACTER(LEN=20), INTENT(IN) :: HFIELD ! Name of the field.
113 REAL, DIMENSION(:,:), INTENT(INOUT), OPTIONAL :: PPGDARRAY ! field on MESONH grid
114 !
115 !* 0.2 Declaration of local variables
116 ! ------------------------------
117 !
118 INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: I3D_ALL
119 INTEGER, DIMENSION(:), ALLOCATABLE :: IMASK
120 REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZVALLIST, ZVAL
121 REAL, DIMENSION(:,:), ALLOCATABLE :: ZEXTVAL
122 INTEGER, DIMENSION(:,:), ALLOCATABLE :: ISIZE0
123 INTEGER, DIMENSION(:,:), ALLOCATABLE :: IVALNBR
124 INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: IVALCOUNT
125 INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: ISIZE
126 !
127 INTEGER :: IMAX ! Maximum of times a value has been encountered in the grid mesh
128 INTEGER :: IVAL ! Index of this value
129 #ifdef SFX_MPI
130 INTEGER, DIMENSION(MPI_STATUS_SIZE) :: ISTATUS
131 INTEGER, DIMENSION(MPI_STATUS_SIZE,NPROC-1) :: ISTATUS2
132 #endif
133 INTEGER, DIMENSION(0:NPROC-1) :: ITCOV
134 INTEGER :: ILUOUT, IS2, INFOMPI, JP, ICPT, JCOV, JI, JL, IREQ, IDX,&
135  IDX_SAVE, JT
136 LOGICAL :: GMULTITYPE
137 REAL(KIND=JPRB) :: ZHOOK_HANDLE, ZHOOK_HANDLE_OMP
138 !-------------------------------------------------------------------------------
139 !
140 IF (lhook) CALL dr_hook('TREAT_FIELD_1',0,zhook_handle)
141  CALL get_luout(hprogram,iluout)
142 !
143 !* 1. Selection of type of reading (and point by point treatment)
144 ! -----------------------------------------------------------
145 !
146 gmultitype = .false.
147 IF (hfiletype=='DIRTYP') gmultitype = .true.
148 !
149 SELECT CASE (hfiletype)
150 
151  CASE ('DIRECT','DIRTYP')
152  IF(ug%G%CGRID=="GAUSS " .OR. ug%G%CGRID=="IGN " .OR. ug%G%CGRID=="LONLAT REG")THEN
153  CALL read_direct_gauss(ug, u, uss, &
154  hprogram,hscheme,hsubroutine,hfilename,hfield,gmultitype)
155  ELSE
156  CALL read_direct(ug, u, uss, &
157  hprogram,hscheme,hsubroutine,hfilename,hfield,gmultitype)
158  ENDIF
159 
160  CASE ('BINLLV')
161  IF (hsubroutine=='A_OROG') CALL ini_ssowork
162  IF (nrank==npio) CALL read_binllv(ug, u, uss, &
163  hprogram,hsubroutine,hfilename)
164 
165  CASE ('BINLLF')
166  IF (hsubroutine=='A_OROG') CALL ini_ssowork
167  IF (nrank==npio) CALL read_binllvfast(ug, u, uss, &
168  hprogram,hsubroutine,hfilename)
169 
170  CASE ('ASCLLV')
171  IF (hsubroutine=='A_OROG') CALL ini_ssowork
172  IF (nrank==npio) CALL read_ascllv(ug, u, uss, &
173  hprogram,hsubroutine,hfilename)
174 
175  CASE ('LATLON')
176  IF (hsubroutine=='A_OROG') CALL ini_ssowork
177  IF (nrank==npio) CALL read_latlon(ug, u, uss, &
178  hprogram,hscheme,hsubroutine,hfilename)
179 
180  CASE ('NETCDF')
181  IF (hsubroutine=='A_OROG') CALL ini_ssowork
182  IF (nrank==npio) CALL read_pgd_netcdf(ug, u, uss, &
183  hprogram,hscheme,hsubroutine,hfilename,hfield)
184 
185  CASE DEFAULT
186  CALL abor1_sfx('TREAT_FIELD: FILE TYPE NOT SUPPORTED: '//hfiletype)
187 
188 END SELECT
189 !
190 !-------------------------------------------------------------------------------
191 !
192 !nsize contains the number of points found for each of the domain, for each task
193 ALLOCATE(nsize(u%NSIZE_FULL,SIZE(nsize_all,2)))
194 !
195 IF (lhook) CALL dr_hook('TREAT_FIELD_1',1,zhook_handle)
196 !
197 IF (nproc>1) THEN
198  !
199  IF (hfiletype=='DIRECT'.OR.hfiletype=='DIRTYP') THEN
200  !
201  IF (lhook) CALL dr_hook('TREAT_FIELD_21',0,zhook_handle)
202  !
203  ALLOCATE(isize(nsize_max,SIZE(nsize_all,2),nproc))
204  ALLOCATE(isize0(nsize_max,SIZE(nsize_all,2)))
205  !
206  idx_save = idx_r
207  idx = idx_save + nrank
208  !
209  idx = idx + 1
210  isize(:,:,:) = 0
211  !
212  IF (lhook) CALL dr_hook('TREAT_FIELD_21',1,zhook_handle)
213  !
214 !$OMP PARALLEL PRIVATE(ZHOOK_HANDLE_OMP)
215  IF (lhook) CALL dr_hook('TREAT_FIELD_22',0,zhook_handle_omp)
216 !$OMP DO SCHEDULE(DYNAMIC,1) PRIVATE(JP,ICPT,JI,IREQ,INFOMPI)
217  DO jp=0,nproc-1
218  IF (jp/=nrank) THEN
219  icpt = 0
220  DO ji = 1,SIZE(nindex)
221  IF (nindex(ji)==jp) THEN
222  icpt = icpt + 1
223  isize(icpt,:,jp+1) = nsize_all(ji,:)
224  ENDIF
225  ENDDO
226  IF (jp<nrank) THEN
227  ireq = jp+1
228  ELSE
229  ireq = jp
230  ENDIF
231 #ifdef SFX_MPI
232  CALL mpi_isend(isize(:,:,jp+1),SIZE(isize,1)*SIZE(isize,2)*kind(isize)/4,&
233  mpi_integer,jp,idx,ncomm,nreq(ireq),infompi)
234 #endif
235  ENDIF
236  ENDDO
237 !$OMP END DO
238  IF (lhook) CALL dr_hook('TREAT_FIELD_22',1,zhook_handle_omp)
239 !$OMP END PARALLEL
240  !
241  IF (lhook) CALL dr_hook('TREAT_FIELD_23',0,zhook_handle)
242  !
243  nsize(:,:) = 0
244  !for each task
245  DO jp=0,nproc-1
246  !
247  isize0(:,:) = 0
248  !
249  IF (jp/=nrank) THEN
250  !each task receives each ISIZE from each task
251 #ifdef SFX_MPI
252  CALL mpi_recv(isize0,nsize_max*SIZE(isize0,2)*kind(isize0)/4,mpi_integer,&
253  jp,idx_save+1+jp,ncomm,istatus,infompi)
254 #endif
255  ELSE
256  !
257  icpt = 0
258  DO ji = 1,SIZE(nindex)
259  IF (nindex(ji)==jp) THEN
260  icpt = icpt + 1
261  isize0(icpt,:) = nsize_all(ji,:)
262  ENDIF
263  ENDDO
264  !
265  ENDIF
266  !
267  !nsize is the sum of all parts isize
268  nsize(:,:) = nsize(:,:) + isize0(1:nsize_task(nrank),:)
269  !
270  ENDDO
271 #ifdef SFX_MPI
272  CALL mpi_waitall(nproc-1,nreq(1:nproc-1),istatus2,infompi)
273 #endif
274  !
275  DEALLOCATE(isize,isize0)
276  !
277  idx_r = idx_r + nproc
278  !
279  IF (lhook) CALL dr_hook('TREAT_FIELD_23',1,zhook_handle)
280  !
281  ELSE
282  !
283  IF (lhook) CALL dr_hook('TREAT_FIELD_3',0,zhook_handle)
284  !
286  !
287  IF (lhook) CALL dr_hook('TREAT_FIELD_3',1,zhook_handle)
288  !
289  ENDIF
290  !
291 ELSE
292  IF (lhook) CALL dr_hook('TREAT_FIELD_4',0,zhook_handle)
293  nsize(:,:) = nsize_all(:,:)
294  IF (lhook) CALL dr_hook('TREAT_FIELD_4',1,zhook_handle)
295 ENDIF
296 !
297 IF (lhook) CALL dr_hook('TREAT_FIELD_5',0,zhook_handle)
298 !
299 DEALLOCATE(nsize_all)
300 !
301 !
302 IF (hsubroutine=='A_COVR') THEN
303  is2 = SIZE(xall,2)
304 ELSEIF (hsubroutine=='A_LDBS') THEN
305  is2 = ngradstatus_ldb
306 ELSEIF (hsubroutine=='A_LDBD') THEN
307  is2 = ngraddepth_ldb
308 ELSEIF (hsubroutine=='A_OROG') THEN
309  is2 = 2
310 ELSEIF (hsubroutine=='A_CTI ') THEN
311  is2 = 3
312 ENDIF
313 !
314 !
315 SELECT CASE (hsubroutine)
316 
317  CASE ('A_COVR')
318  !
319  !to gather the parts of LCOVER sparsed among the tasks
320  CALL make_lcover(u%LCOVER)
321  !
322  !contains the indexes of the covers in XCOVER, associated to their effective
323  !num
324  ALLOCATE(imask(SIZE(u%LCOVER)))
325  imask(:) = 0
326  icpt = 0
327  DO jcov = 1,SIZE(u%LCOVER)
328  IF (u%LCOVER(jcov)) THEN
329  icpt = icpt + 1
330  imask(jcov) = icpt
331  ENDIF
332  ENDDO
333  !
334  !because each task did not necessarily meet the same number of coves, itcov
335  !contains the numbers of covers met for all tasks
336  IF (nproc>1) THEN
337 #ifdef SFX_MPI
338  CALL mpi_allgather(is2,kind(is2)/4,mpi_integer,&
339  itcov,kind(itcov)/4,mpi_integer,ncomm,infompi)
340 #endif
341  ELSE
342  itcov(:) = is2
343  ENDIF
344  !
345  !XSUMVAL needs to contain the numbers of times each cover is encountered
346  !for the current task
347  ALLOCATE(xsumval(u%NSIZE_FULL,count(u%LCOVER)))
348  xsumval(:,:) = 0.
349  !
350  IF (nproc>1) THEN
351  ALLOCATE(zval(u%NSIZE_FULL,maxval(itcov),2))
352  DO jp = 0,nproc-1
353  !the part of XALL concerning the current task is sent
354  !from each other task
355  CALL read_and_send_mpi(xall,zval(:,1:itcov(jp),:),kpio=jp)
356  DO jl = 1,itcov(jp)
357  DO ji=1,u%NSIZE_FULL
358  jcov = nint(zval(ji,jl,1))
359  IF (jcov/=0) THEN
360  !xsumval2 is the sum of contributions zsumval3 coming from all tasks
361  xsumval(ji,imask(jcov)) = xsumval(ji,imask(jcov)) + zval(ji,jl,2)
362  ENDIF
363  ENDDO
364  ENDDO
365  ENDDO
366  DEALLOCATE(zval)
367  ELSE
368  DO jl = 1,SIZE(xall,2)
369  DO ji=1,SIZE(xall,1)
370  jcov = nint(xall(ji,jl,1))
371  IF (jcov/=0) THEN
372  xsumval(ji,imask(jcov)) = xsumval(ji,imask(jcov)) + xall(ji,jl,2)
373  ENDIF
374  ENDDO
375  ENDDO
376  ENDIF
377  DEALLOCATE(xall,imask)
378  !
379  !
380  CASE ('A_LDBD','A_LDBS','A_OROG','A_CTI ')
381  !
382  !XSUMVAL needs to contain the numbers of times each quantity is encountered
383  !for the current task
384  ALLOCATE(xsumval(u%NSIZE_FULL,is2))
385  xsumval(:,:) = 0.
386  IF (nproc>1) THEN
387  ALLOCATE(zval(u%NSIZE_FULL,is2,1))
388  DO jp = 0,nproc-1
389  CALL read_and_send_mpi(xall(:,:,1),zval(:,:,1),kpio=jp)
390  !sum of contributions coming from all tasks
391  xsumval(:,:) = xsumval(:,:) + zval(:,:,1)
392  ENDDO
393  DEALLOCATE(zval)
394  ELSE
395  xsumval(:,:) = xall(:,:,1)
396  ENDIF
397  DEALLOCATE(xall)
398  !
399  !
400  IF (hsubroutine=='A_OROG' .OR. hsubroutine=='A_CTI ') THEN
401  !
402  !special fields
403  !
404  IF (hsubroutine=='A_CTI ') THEN
405  !max and min
406  IF (nproc>1) THEN
407  ALLOCATE(zextval(u%NSIZE_FULL,1))
408  DO jp = 0,nproc-1
409  CALL read_and_send_mpi(xext_all(:,1),zextval(:,1),kpio=jp)
410  xmax_work(:) = max(xmax_work,zextval(:,1))
411  ENDDO
412  DO jp = 0,nproc-1
413  CALL read_and_send_mpi(xext_all(:,2),zextval(:,1),kpio=jp)
414  xmin_work(:) = min(xmin_work,zextval(:,1))
415  ENDDO
416  DEALLOCATE(zextval)
417  ELSE
418  xmax_work(:) = xext_all(:,1)
419  xmin_work(:) = xext_all(:,2)
420  ENDIF
421  !
422  ELSEIF (hsubroutine=='A_OROG') THEN
423  !max and min
424  IF (nproc>1) THEN
425  ALLOCATE(zextval(u%NSIZE_FULL,1))
426  DO jp = 0,nproc-1
427  CALL read_and_send_mpi(xext_all(:,1),zextval(:,1),kpio=jp)
428  uss%XMAX_ZS(:) = max(uss%XMAX_ZS,zextval(:,1))
429  ENDDO
430  DO jp = 0,nproc-1
431  CALL read_and_send_mpi(xext_all(:,2),zextval(:,1),kpio=jp)
432  uss%XMIN_ZS(:) = min(uss%XMIN_ZS,zextval(:,1))
433  ENDDO
434  DEALLOCATE(zextval)
435  ELSE
436  uss%XMAX_ZS(:) = xext_all(:,1)
437  uss%XMIN_ZS(:) = xext_all(:,2)
438  ENDIF
439  !
440  !sso fields
441  ALLOCATE(xssqo(u%NSIZE_FULL,nsso,nsso))
442  xssqo(:,:,:) = -xundef
443  IF (nproc>1) THEN
444  ALLOCATE(zval(u%NSIZE_FULL,nsso,nsso))
445  DO jp = 0,nproc-1
446  CALL read_and_send_mpi(xsso_all,zval,kpio=jp)
447  xssqo(:,:,:) = max(xssqo(:,:,:),zval)
448  ENDDO
449  DEALLOCATE(zval)
450  ELSE
451  xssqo(:,:,:) = xsso_all(:,:,:)
452  ENDIF
453  DEALLOCATE(xsso_all)
454  !
455  ALLOCATE(lssqo(u%NSIZE_FULL,nsso,nsso))
456  lssqo(:,:,:) = .false.
457  IF (nproc>1) THEN
458  ALLOCATE(i3d_all(u%NSIZE_FULL,nsso,nsso))
459  DO jp = 0,nproc-1
460  CALL read_and_send_mpi(nsso_all,i3d_all,kpio=jp)
461  WHERE (i3d_all(:,:,:)==1) lssqo(:,:,:) = .true.
462  ENDDO
463  DEALLOCATE(i3d_all)
464  ELSE
465  WHERE(nsso_all(:,:,:)==1) lssqo(:,:,:) = .true.
466  ENDIF
467  DEALLOCATE(nsso_all)
468  ENDIF
469  DEALLOCATE(xext_all)
470  !
471  ENDIF
472  !
473  !
474  CASE ('A_MESH')
475  IF (catype/='MAJ') THEN
476 
477  ALLOCATE(xsumval(u%NSIZE_FULL,SIZE(xall,2)))
478  !most simple case
479  IF (nproc>1) THEN
480  xsumval(:,:) = 0.
481  ALLOCATE(zval(u%NSIZE_FULL,SIZE(xall,2),1))
482  DO jp = 0,nproc-1
483  CALL read_and_send_mpi(xall(:,:,1),zval(:,:,1),kpio=jp)
484  xsumval(:,:) = xsumval(:,:) + zval(:,:,1)
485  ENDDO
486  DEALLOCATE(zval)
487  ELSE
488  xsumval(:,:) = xall(:,:,1)
489  ENDIF
490  DEALLOCATE(xall)
491 
492  ELSE
493 
494  ALLOCATE(xsumval(u%NSIZE_FULL,1))
495  IF (hfiletype=='DIRECT' .AND. nproc>1) THEN
496  CALL abor1_sfx("TREAT_FIELD: MAJ is not possible with DIRECT filetype and NPROC>1")
497  ELSE
498  ALLOCATE(ivalnbr(u%NSIZE_FULL,SIZE(nvalnbr,2)),ivalcount(u%NSIZE_FULL,jpvalmax,SIZE(nvalnbr,2)),&
499  zvallist(u%NSIZE_FULL,jpvalmax,SIZE(nvalnbr,2)))
500  IF (nproc>1) THEN
501  CALL read_and_send_mpi(nvalnbr,ivalnbr)
502  CALL read_and_send_mpi(nvalcount,ivalcount)
503  CALL read_and_send_mpi(xvallist,zvallist)
504  ELSE
505  ivalnbr = nvalnbr
506  ivalcount = nvalcount
507  zvallist = xvallist
508  ENDIF
509  DEALLOCATE(nvalnbr,nvalcount,xvallist)
510  DO jt=1,SIZE(nsize,2)
511  DO ji=1,SIZE(nsize,1)
512  IF(nsize(ji,jt)==0) cycle
513  !* determines the index of the value which has been the most encountered
514  ! in the grid mesh
515  imax=0
516  DO jl=1,ivalnbr(ji,jt)
517  IF (ivalcount(ji,jl,jt)>imax) THEN
518  imax = ivalcount(ji,jl,jt)
519  ival = jl
520  END IF
521  END DO
522  !* sets this value to the PGD field
523  xsumval(ji,jt)=zvallist(ji,ival,jt)
524  END DO
525  ENDDO
526  DEALLOCATE(ivalnbr,ivalcount,zvallist)
527  ENDIF
528  ENDIF
529  !
530 END SELECT
531 !
532 IF (lhook) CALL dr_hook('TREAT_FIELD_5',1,zhook_handle)
533 !-------------------------------------------------------------------------------
534 !
535 !* 2. Call to the adequate subroutine (global treatment)
536 ! --------------------------------------------------
537 !
538 IF (lhook) CALL dr_hook('TREAT_FIELD_6',0,zhook_handle)
539 !
540 SELECT CASE (hsubroutine)
541 
542  CASE ('A_COVR')
543  CALL average2_cover(u, hprogram)
544 
545  CASE ('A_OROG')
546  CALL average2_orography(uss)
547 
548  CASE ('A_CTI ')
549  CALL average2_cti
550 
551  CASE ('A_LDBD')
552  CALL average2_ldb(ppgdarray(:,1),'D',1)
553 
554  CASE ('A_LDBS')
555  CALL average2_ldb(ppgdarray(:,1),'S',1)
556 
557  CASE ('A_MESH')
558  IF (.NOT. PRESENT(ppgdarray)) THEN
559  WRITE(iluout,*) 'You asked to average a PGD field with A_MESH option,'
560  WRITE(iluout,*) 'but you did not give the array to store this field'
561  CALL abor1_sfx('TREAT_FIELD: ARRAY IS MISSING')
562  END IF
563  CALL average2_mesh(ppgdarray)
564 
565 END SELECT
566 !
567 IF (lhook) CALL dr_hook('TREAT_FIELD_6',1,zhook_handle)
568 !-------------------------------------------------------------------------------
569 !
570 END SUBROUTINE treat_field
real, dimension(:,:,:), allocatable xvallist
subroutine average2_cover(U, HPROGRAM)
subroutine read_pgd_netcdf(UG, U, USS, HPROGRAM, HSCHEME, HSUBROUTINE, HFILENAME, HFIELD, PFIELD)
subroutine average2_ldb(PPGDARRAY, HTYPE, KSTAT)
Definition: average2_ldb.F90:7
subroutine average2_orography(USS)
character(len=3) catype
integer, dimension(:), allocatable nreq
integer, dimension(:,:), allocatable nsize_all
integer, parameter ngraddepth_ldb
real, dimension(:,:,:), allocatable xall
subroutine read_direct(UG, U, USS, HPROGRAM, HSCHEME, HSUBROUTINE, HFILENAME, HFI
Definition: read_direct.F90:8
real, dimension(:), allocatable xmax_work
subroutine read_binllv(UG, U, USS, HPROGRAM, HSUBROUTINE, HFILENAME)
Definition: read_binllv.F90:8
logical, dimension(:,:,:), allocatable lssqo
subroutine read_direct_gauss(UG, U, USS, HPROGRAM, HSCHEME, HSUBROUTINE, HFILENA
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
real, parameter xundef
subroutine read_latlon(UG, U, USS, HPROGRAM, HSCHEME, HSUBROUTINE, HFILENAME)
Definition: read_latlon.F90:8
integer, dimension(:,:,:), allocatable nsso_all
integer, parameter jprb
Definition: parkind1.F90:32
subroutine average2_cti
Definition: average2_cti.F90:7
integer, dimension(:,:), allocatable nvalnbr
real, dimension(:,:), allocatable xsumval
subroutine ini_ssowork(PMESHLENGTH, PDLAT, PDLON)
Definition: ini_ssowork.F90:7
subroutine read_binllvfast(UG, U, USS, HPROGRAM, HSUBROUTINE, HFILENAME)
subroutine read_ascllv(UG, U, USS, HPROGRAM, HSUBROUTINE, HFILENAME)
Definition: read_ascllv.F90:8
real, dimension(:,:,:), allocatable xssqo
subroutine average2_mesh(PPGDARRAY)
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:7
integer, dimension(:), allocatable nsize_task
logical lhook
Definition: yomhook.F90:15
integer, dimension(:,:), allocatable nsize
integer, dimension(:,:,:), allocatable nvalcount
integer, parameter ngradstatus_ldb
real, dimension(:,:,:), allocatable xsso_all
real, dimension(:,:), allocatable xext_all
real, dimension(:), allocatable xmin_work
integer, dimension(:), allocatable nindex
subroutine treat_field(UG, U, USS, HPROGRAM, HSCHEME, HFILETYPE, HSUBROUTINE, HFILENAME, HFIELD, PPGDARRAY)
Definition: treat_field.F90:10
subroutine make_lcover(OCOVER)
Definition: make_lcover.F90:8
integer, parameter jpvalmax
static int count
Definition: memory_hook.c:21