68 ( tpnam,pfield,kunit,kdbl,pwgt )
73 USE modi_gltools_strlower
74 #if ! defined in_surfex
76 USE mode_gltools_bound
78 #if ! defined in_arpege
86 TYPE(t_def),
INTENT(in) :: &
88 REAL,
DIMENSION(:,:),
INTENT(in) :: &
90 INTEGER,
OPTIONAL,
INTENT(in) :: &
92 REAL,
DIMENSION(:,:),
OPTIONAL,
INTENT(in) :: &
104 idbl,ix,iy,ixc,iyc,ilu
105 REAL,
DIMENSION(:,:),
ALLOCATABLE :: &
107 REAL,
DIMENSION(:,:),
ALLOCATABLE :: &
109 REAL(KIND=4),
DIMENSION(:,:),
ALLOCATABLE :: &
125 IF ( present(kdbl) )
THEN
138 ix =
SIZE( pfield,1 )
139 iy =
SIZE( pfield,2 )
140 yis0d = ( ix==1 .AND. iy==1 )
141 yis2d = ( ix==nx .AND. iy==ny )
147 ALLOCATE( zwork(nx,ny))
148 IF ( present(pwgt) )
THEN
149 WHERE( pwgt(:,:)>0. .AND. pfield(:,:)<xbig20 )
150 zwork(:,:) = pfield(:,:) / pwgt(:,:)
155 zwork(:,:) = pfield(:,:)
160 #if ! defined in_surfex
161 CALL gltools_bound( ypos,ytype,zwork,pval=xbig20 )
166 ALLOCATE( zwork_g(nxglo,nyglo) )
167 IF ( idbl==0 )
ALLOCATE( zwork_gr4(nxglo,nyglo) )
168 #if ! defined in_surfex
169 CALL gather2d( zwork,zwork_g )
171 #if ! defined in_arpege
180 IF ( ypos==
'U' .OR. ypos==
'V' )
THEN
181 WHERE( zwork_g(:,:)<-xbig19 )
182 zwork_g(:,:) = xbig20
189 ALLOCATE( zwork_g(ix,iy))
190 IF ( idbl==0 )
ALLOCATE( zwork_gr4(ix,iy) )
191 zwork_g(:,:) = pfield(:,:)
199 IF ( idbl==0 ) zwork_gr4(:,:) = zwork_g(:,:)
208 IF ( present(kunit) )
THEN
213 ELSE IF ( yis0d )
THEN
217 WRITE(noutlu,*)
'==> Input field size=',ix,iy
218 WRITE(noutlu,*)
'==> Routine gltools_wrivai can only be used to write &
219 & fields with dimensions',nxglo,nyglo,
' or 1,1.'
220 WRITE(noutlu,*)
'We stop.'
228 WRITE(ilu) trim( tpnam%sna )
230 WRITE(ilu) zwork_gr4(:,:)
232 WRITE(ilu) zwork_g(:,:)
239 IF ( idbl==0 )
DEALLOCATE( zwork_gr4 )
240 DEALLOCATE( zwork_g )
253 ( tpnam,pfield,kunit,kdbl,pwgt )
258 USE modi_gltools_strlower
259 #if ! defined in_surfex
261 USE mode_gltools_bound
269 TYPE(t_def),
INTENT(in) :: &
271 REAL,
DIMENSION(:,:,:),
INTENT(in) :: &
273 INTEGER,
OPTIONAL,
INTENT(in) :: &
275 REAL,
DIMENSION(:,:,:),
OPTIONAL,
INTENT(in) :: &
287 idbl,it,ix,iy,ixc,iyc,ilu
288 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: &
290 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: &
292 REAL(KIND=4),
DIMENSION(:,:,:),
ALLOCATABLE :: &
308 IF ( present(kdbl) )
THEN
321 ix =
SIZE( pfield,2 )
322 iy =
SIZE( pfield,3 )
323 yis0d = ( ix==1 .AND. iy==1 )
324 yis2d = ( ix==nx .AND. iy==ny )
330 ALLOCATE( zwork(nt,nx,ny))
331 IF ( present(pwgt) )
THEN
332 WHERE( pwgt(:,:,:)>0. .AND. pfield(:,:,:)<xbig20 )
333 zwork(:,:,:) = pfield(:,:,:) / pwgt(:,:,:)
335 zwork(:,:,:) = xbig20
338 zwork(:,:,:) = pfield(:,:,:)
343 #if ! defined in_surfex
344 CALL gltools_bound( ypos,ytype,zwork,pval=xbig20 )
349 ALLOCATE( zwork_g(nt,nxglo,nyglo) )
350 IF ( idbl==0 )
ALLOCATE( zwork_gr4(nt,nxglo,nyglo) )
351 #if ! defined in_surfex
352 CALL gather3d( zwork,zwork_g )
364 IF ( gelato_myrank == gelato_leadproc )
THEN
365 IF ( ypos==
'U' .OR. ypos==
'V' )
THEN
366 WHERE( zwork_g(:,:,:)<-xbig19 )
367 zwork_g(:,:,:) = xbig20
374 ALLOCATE( zwork_g(nt,ix,iy))
375 IF ( idbl==0 )
ALLOCATE( zwork_gr4(nt,ix,iy) )
376 zwork_g(:,:,:) = pfield(:,:,:)
380 IF ( gelato_myrank == gelato_leadproc )
THEN
384 IF ( idbl==0 ) zwork_gr4(:,:,:) = zwork_g(:,:,:)
393 IF ( present(kunit) )
THEN
398 ELSE IF ( yis0d )
THEN
402 WRITE(noutlu,*)
'==> Input field size=',ix,iy
403 WRITE(noutlu,*)
'==> Routine gltools_wrivai can only be used to write &
404 & fields with dimensions',nxglo,nyglo,
' or 1,1.'
405 WRITE(noutlu,*)
'We stop.'
413 WRITE(ilu) trim( tpnam%sna )
415 WRITE(ilu) zwork_gr4(:,:,:)
417 WRITE(ilu) zwork_g(:,:,:)
424 IF ( idbl==0 )
DEALLOCATE( zwork_gr4 )
425 DEALLOCATE( zwork_g )