37 interface nemsio_writerec
38 module procedure nemsio_writerec4
39 module procedure nemsio_writerec8
40 end interface nemsio_writerec
42 interface nemsio_writerecv
43 module procedure nemsio_writerecv4
44 module procedure nemsio_writerecv8
45 end interface nemsio_writerecv
47 interface nemsio_writerecw34
48 module procedure nemsio_writerec4w34
49 module procedure nemsio_writerec8w34
50 end interface nemsio_writerecw34
52 interface nemsio_writerecvw34
53 module procedure nemsio_writerecv4w34
54 module procedure nemsio_writerecv8w34
55 end interface nemsio_writerecvw34
58 public nemsio_writerec,nemsio_writerecv,nemsio_writerecw34,nemsio_writerecvw34
63 character(8) :: mygdatatype
64 integer mydimx,mydimy,mydimz,mynframe,myfieldsize,mytlmeta,myflunit
65 integer kens,ibs,nbits
71 subroutine nemsio_getgfile(gfile,iret)
76 type(nemsio_gfile),
intent(in) :: gfile
77 integer(nemsio_intkind),
optional,
intent(out) :: iret
78 character(8) :: tmpgdatatype
80 if(
present(iret)) iret=-61
81 call nemsio_getfilehead(gfile,iret=iret,gdatatype=tmpgdatatype,dimx=mydimx, &
82 dimy=mydimy,dimz=mydimz,nframe=mynframe,tlmeta=mytlmeta, &
83 flunit=myflunit,do_byteswap=do_byteswap)
84 myfieldsize=(mydimx+2*mynframe)*(mydimy+2*mynframe)
85 mygdatatype=tmpgdatatype(1:4)
86 if(
present(iret)) iret=0
91 end subroutine nemsio_getgfile
94 subroutine nemsio_writerec4(gfile,jrec,data,iret,itr,zhour,precision)
99 type(nemsio_gfile),
intent(inout) :: gfile
100 integer(nemsio_intkind),
intent(in) :: jrec
101 real(nemsio_realkind),
intent(in) :: data(:)
102 integer(nemsio_intkind),
optional,
intent(out) :: iret
103 integer(nemsio_intkind),
optional,
intent(in) :: itr
104 real(nemsio_realkind),
optional,
intent(in) :: zhour
105 integer(nemsio_intkind),
optional,
intent(in) :: precision
107 real(nemsio_dblekind),
allocatable :: datatmp8(:)
113 if(
present(iret)) iret=-62
114 call nemsio_getgfile(gfile,iret)
116 if ( mygdatatype .eq.
'bin4')
then
117 call nemsio_writerecbin4d4(gfile,jrec,
data,ios)
118 else if ( mygdatatype .eq.
'bin8')
then
119 allocate(datatmp8(myfieldsize) )
120 datatmp8(1:myfieldsize)=
data(1:myfieldsize)
121 call nemsio_writerecbin8d8(gfile,jrec,datatmp8,ios)
124 call nemsio_writerecgrb4(gfile,jrec,
data,ios,itr=itr,zhour=zhour, &
127 if ( ios .ne.0 )
then
128 if(
present(iret))
then
135 if(
present(iret)) iret=0
138 end subroutine nemsio_writerec4
140 subroutine nemsio_writerec8(gfile,jrec,data,iret,itr,zhour,precision)
145 type(nemsio_gfile),
intent(inout) :: gfile
146 integer(nemsio_intkind),
intent(in) :: jrec
147 real(nemsio_dblekind),
intent(in) :: data(:)
148 integer(nemsio_intkind),
optional,
intent(out) :: iret
149 integer(nemsio_intkind),
optional,
intent(in) :: itr
150 real(nemsio_realkind),
optional,
intent(in) :: zhour
151 integer(nemsio_intkind),
optional,
intent(in) :: precision
153 real(nemsio_realkind),
allocatable :: datatmp4(:)
158 if(
present(iret)) iret=-62
159 call nemsio_getgfile(gfile,iret)
161 if ( mygdatatype .eq.
'bin4')
then
162 allocate(datatmp4(myfieldsize) )
163 datatmp4(1:myfieldsize)=
data(1:myfieldsize)
164 call nemsio_writerecbin4d4(gfile,jrec,datatmp4,ios)
166 else if ( mygdatatype .eq.
'bin8')
then
167 call nemsio_writerecbin8d8(gfile,jrec,
data,ios)
169 call nemsio_writerecgrb8(gfile,jrec,
data,ios,itr=itr,zhour=zhour, &
172 if ( ios .ne.0 )
then
173 if(
present(iret))
then
180 if(
present(iret)) iret=0
183 end subroutine nemsio_writerec8
185 subroutine nemsio_writerecv4(gfile,name,levtyp,lev,data,iret, &
191 type(nemsio_gfile),
intent(inout) :: gfile
192 character(*),
intent(in) :: name
193 character(*),
optional,
intent(in) :: levtyp
194 integer(nemsio_intkind),
optional,
intent(in) :: lev
195 real(nemsio_realkind),
intent(in) :: data(:)
196 integer(nemsio_intkind),
optional,
intent(out) :: iret
197 integer(nemsio_intkind),
optional,
intent(in) :: itr
198 real(nemsio_realkind),
optional,
intent(in) :: zhour
199 integer(nemsio_intkind),
optional,
intent(in) :: precision
201 real(nemsio_dblekind),
allocatable :: datatmp8(:)
206 if(
present(iret))iret=-63
208 call nemsio_getgfile(gfile,iret)
210 if ( mygdatatype .eq.
'bin4')
then
211 call nemsio_writerecvbin4d4(gfile,name,levtyp,lev,
data,ios)
212 else if ( mygdatatype .eq.
'bin8')
then
213 allocate(datatmp8(myfieldsize) )
214 datatmp8(1:myfieldsize)=
data(1:myfieldsize)
215 call nemsio_writerecvbin8d8(gfile,name,levtyp,lev,datatmp8,ios)
218 call nemsio_writerecvgrb4(gfile,name,levtyp,lev,
data,ios,itr=itr, &
219 zhour=zhour,precision=precision)
221 if ( ios .ne.0 )
then
222 if(
present(iret))
then
229 if(
present(iret)) iret=0
232 end subroutine nemsio_writerecv4
234 subroutine nemsio_writerecv8(gfile,name,levtyp,lev,data,iret, &
240 type(nemsio_gfile),
intent(inout) :: gfile
241 character(*),
intent(in) :: name
242 character(*),
optional,
intent(in) :: levtyp
243 integer(nemsio_intkind),
optional,
intent(in) :: lev
244 real(nemsio_dblekind),
intent(in) :: data(:)
245 integer(nemsio_intkind),
optional,
intent(out) :: iret
246 integer(nemsio_intkind),
optional,
intent(in) :: itr
247 real(nemsio_realkind),
optional,
intent(in) :: zhour
248 integer(nemsio_intkind),
optional,
intent(in) :: precision
250 real(nemsio_realkind),
allocatable :: datatmp4(:)
256 if(
present(iret)) iret=-63
258 call nemsio_getgfile(gfile,iret)
261 if ( mygdatatype .eq.
'bin4')
then
262 allocate(datatmp4(myfieldsize) )
263 datatmp4(1:myfieldsize)=
data(1:myfieldsize)
264 call nemsio_writerecvbin4d4(gfile,name,levtyp,lev,datatmp4,ios)
266 else if ( mygdatatype .eq.
'bin8')
then
267 call nemsio_writerecvbin8d8(gfile,name,levtyp,lev,
data,ios)
269 call nemsio_writerecvgrb8(gfile,name,levtyp,lev,
data,ios,itr=itr, &
270 zhour=zhour,precision=precision)
273 if ( ios .ne.0 )
then
274 if(
present(iret))
then
281 if(
present(iret)) iret=0
284 end subroutine nemsio_writerecv8
287 subroutine nemsio_writerec4w34(gfile,jrec,data,iret,itr,zhour,precision)
292 type(nemsio_gfile),
intent(inout) :: gfile
293 integer(nemsio_intkind),
intent(in) :: jrec
294 real(nemsio_realkind),
intent(in) :: data(:)
295 integer(nemsio_intkind),
optional,
intent(out) :: iret
296 integer(nemsio_intkind),
optional,
intent(in) :: itr
297 real(nemsio_realkind),
optional,
intent(in) :: zhour
298 integer(nemsio_intkind),
optional,
intent(in) :: precision
300 real(nemsio_dblekind),
allocatable :: datatmp8(:)
306 if(
present(iret)) iret=-64
308 call nemsio_getgfile(gfile,iret)
310 if ( mygdatatype .eq.
'bin4')
then
311 call nemsio_writerecbin4d4(gfile,jrec,
data,ios)
312 else if ( mygdatatype .eq.
'bin8')
then
313 allocate(datatmp8(myfieldsize) )
314 datatmp8(1:myfieldsize)=
data(1:myfieldsize)
315 call nemsio_writerecbin8d8(gfile,jrec,datatmp8,ios)
318 call nemsio_writerecgrb4w34(gfile,jrec,
data,ios,itr=itr,zhour=zhour, &
321 if ( ios .ne.0 )
then
322 if(
present(iret))
then
329 if(
present(iret)) iret=0
332 end subroutine nemsio_writerec4w34
334 subroutine nemsio_writerec8w34(gfile,jrec,data,iret,itr,zhour,precision)
339 type(nemsio_gfile),
intent(inout) :: gfile
340 integer(nemsio_intkind),
intent(in) :: jrec
341 real(nemsio_dblekind),
intent(in) :: data(:)
342 integer(nemsio_intkind),
optional,
intent(out) :: iret
343 integer(nemsio_intkind),
optional,
intent(in) :: itr
344 real(nemsio_realkind),
optional,
intent(in) :: zhour
345 integer(nemsio_intkind),
optional,
intent(in) :: precision
346 real(nemsio_realkind),
allocatable :: datatmp4(:)
352 if(
present(iret)) iret=-64
354 call nemsio_getgfile(gfile,iret)
356 if ( mygdatatype .eq.
'bin4')
then
357 allocate(datatmp4(myfieldsize) )
358 datatmp4(1:myfieldsize)=
data(1:myfieldsize)
359 call nemsio_writerecbin4d4(gfile,jrec,datatmp4,ios)
361 else if ( mygdatatype .eq.
'bin8')
then
362 call nemsio_writerecbin8d8(gfile,jrec,
data,ios)
364 allocate(datatmp4(myfieldsize))
365 datatmp4(1:myfieldsize)=
data(1:myfieldsize)
366 call nemsio_writerecgrb4w34(gfile,jrec,datatmp4,ios,itr=itr,zhour=zhour, &
370 if ( ios .ne.0 )
then
371 if(
present(iret))
then
378 if(
present(iret)) iret=0
381 end subroutine nemsio_writerec8w34
383 subroutine nemsio_writerecv4w34(gfile,name,levtyp,lev,data,iret, &
389 type(nemsio_gfile),
intent(inout) :: gfile
390 character(*),
intent(in) :: name
391 character(*),
optional,
intent(in) :: levtyp
392 integer(nemsio_intkind),
optional,
intent(in) :: lev
393 real(nemsio_realkind),
intent(in) :: data(:)
394 integer(nemsio_intkind),
optional,
intent(out) :: iret
395 integer(nemsio_intkind),
optional,
intent(in) :: itr
396 real(nemsio_realkind),
optional,
intent(in) :: zhour
397 integer(nemsio_intkind),
optional,
intent(in) :: precision
399 real(nemsio_dblekind),
allocatable :: datatmp8(:)
404 if(
present(iret)) iret=-65
406 call nemsio_getgfile(gfile,iret)
408 if ( mygdatatype .eq.
'bin4')
then
409 call nemsio_writerecvbin4d4(gfile,name,levtyp,lev,
data,ios)
410 else if ( mygdatatype .eq.
'bin8')
then
411 allocate(datatmp8(myfieldsize) )
412 datatmp8(1:myfieldsize)=
data(1:myfieldsize)
413 call nemsio_writerecvbin8d8(gfile,name,levtyp,lev,datatmp8,ios)
416 call nemsio_writerecvgrb4w34(gfile,name,levtyp,lev,
data,ios,itr=itr, &
417 zhour=zhour,precision=precision)
419 if ( ios .ne.0 )
then
420 if(
present(iret))
then
427 if(
present(iret)) iret=0
430 end subroutine nemsio_writerecv4w34
432 subroutine nemsio_writerecv8w34(gfile,name,levtyp,lev,data,iret, &
438 type(nemsio_gfile),
intent(inout) :: gfile
439 character(*),
intent(in) :: name
440 character(*),
optional,
intent(in) :: levtyp
441 integer(nemsio_intkind),
optional,
intent(in) :: lev
442 real(nemsio_dblekind),
intent(in) :: data(:)
443 integer(nemsio_intkind),
optional,
intent(out) :: iret
444 integer(nemsio_intkind),
optional,
intent(in) :: itr
445 real(nemsio_realkind),
optional,
intent(in) :: zhour
446 integer(nemsio_intkind),
optional,
intent(in) :: precision
447 real(nemsio_realkind),
allocatable :: datatmp4(:)
453 if(
present(iret)) iret=-65
455 call nemsio_getgfile(gfile,iret)
457 if ( mygdatatype .eq.
'bin4')
then
458 allocate(datatmp4(myfieldsize) )
459 datatmp4(1:myfieldsize)=
data(1:myfieldsize)
460 call nemsio_writerecvbin4d4(gfile,name,levtyp,lev,datatmp4,ios)
462 else if ( mygdatatype .eq.
'bin8')
then
463 call nemsio_writerecvbin8d8(gfile,name,levtyp,lev,
data,ios)
465 allocate(datatmp4(myfieldsize))
466 datatmp4(1:myfieldsize)=
data(1:myfieldsize)
467 call nemsio_writerecvgrb4w34(gfile,name,levtyp,lev,datatmp4,ios,itr=itr, &
468 zhour=zhour,precision=precision)
471 if ( ios .ne.0 )
then
472 if(
present(iret))
then
479 if(
present(iret)) iret=0
482 end subroutine nemsio_writerecv8w34
488 subroutine nemsio_writerecbin4d4(gfile,jrec,data,iret)
493 type(nemsio_gfile),
intent(in) :: gfile
494 integer(nemsio_intkind),
intent(in) :: jrec
495 real(nemsio_realkind),
intent(in) :: data(:)
496 integer(nemsio_intkind),
intent(out) :: iret
497 integer(nemsio_intkind8) :: iskip,iwrite,nwrite
500 if(
size(data)/=myfieldsize)
then
501 print *,
'ERROR: input data size ',
size(data),
' is not match the data domain ', &
502 myfieldsize,
'please check dimension and nframe'
505 iskip=mytlmeta+int(jrec-1,8)*int(nemsio_realkind*myfieldsize+8,8)
506 iwrite=int(nemsio_realkind,8)*int(
size(data),8)
507 if(do_byteswap)
call byteswap(
data,nemsio_realkind,
size(data))
508 call bafrwritel(myflunit,iskip,iwrite,nwrite,data)
509 if(nwrite.lt.iwrite)
return
510 if(do_byteswap)
call byteswap(
data,nemsio_realkind,
size(data))
514 end subroutine nemsio_writerecbin4d4
516 subroutine nemsio_writerecvbin4d4(gfile,name,levtyp,lev,data,iret)
521 type(nemsio_gfile),
intent(in) :: gfile
522 character(*),
intent(in) :: name
523 character(*),
optional,
intent(in) :: levtyp
524 integer(nemsio_intkind),
optional,
intent(in) :: lev
525 real(nemsio_realkind),
intent(in) :: data(:)
526 integer(nemsio_intkind),
intent(out) :: iret
527 integer :: jrec, ierr
528 integer(nemsio_intkind8) :: iskip,iwrite,nwrite
531 call nemsio_searchrecv(gfile,jrec,name,levtyp,lev,ierr)
532 if ( ierr .ne. 0)
return
533 if(
size(data)/=myfieldsize)
then
534 print *,
'ERROR: input data size ',
size(data),
' is not match the data domain ', &
535 myfieldsize,
'please check dimension and nframe'
538 iskip=mytlmeta+int(jrec-1,8)*int(nemsio_realkind*myfieldsize+8,8)
539 iwrite=int(nemsio_realkind,8)*int(
size(data),8)
540 if(do_byteswap)
call byteswap(
data,nemsio_realkind,
size(data))
541 call bafrwritel(myflunit,iskip,iwrite,nwrite,data)
542 if(nwrite.lt.iwrite)
return
543 if(do_byteswap)
call byteswap(
data,nemsio_realkind,
size(data))
547 end subroutine nemsio_writerecvbin4d4
549 subroutine nemsio_writerecbin8d8(gfile,jrec,data,iret)
554 type(nemsio_gfile),
intent(in) :: gfile
555 integer(nemsio_intkind),
intent(in) :: jrec
556 real(nemsio_dblekind),
intent(in) :: data(:)
557 integer(nemsio_intkind),
intent(out) :: iret
558 integer(nemsio_intkind8) :: iskip,iwrite,nwrite
561 if(
size(data)/=myfieldsize)
then
562 print *,
'ERROR: input data size ',
size(data),
' is not match the data domain ', &
563 myfieldsize,
'please check dimension and nframe'
566 iskip=mytlmeta+int(jrec-1,8)*int(nemsio_dblekind*myfieldsize+8,8)
567 iwrite=int(nemsio_dblekind,8)*int(
size(data),8)
568 if(do_byteswap)
call byteswap(
data,nemsio_dblekind,
size(data))
569 call bafrwritel(myflunit,iskip,iwrite,nwrite,data)
570 if(nwrite.lt.iwrite)
return
571 if(do_byteswap)
call byteswap(
data,nemsio_dblekind,
size(data))
575 end subroutine nemsio_writerecbin8d8
577 subroutine nemsio_writerecvbin8d8(gfile,name,levtyp,lev,data,iret)
582 type(nemsio_gfile),
intent(in) :: gfile
583 character(*),
intent(in) :: name
584 character(*),
optional,
intent(in) :: levtyp
585 integer(nemsio_intkind),
optional,
intent(in) :: lev
586 real(nemsio_dblekind),
intent(in) :: data(:)
587 integer(nemsio_intkind),
intent(out) :: iret
588 integer :: jrec, ierr
589 integer(nemsio_intkind8) :: iskip,iwrite,nwrite
592 if(
size(data)/=myfieldsize)
then
593 print *,
'ERROR: input data size ',
size(data),
' is not match the data domain ', &
594 myfieldsize,
'please check dimension and nframe'
597 call nemsio_searchrecv(gfile,jrec,name,levtyp,lev,ierr)
598 if ( ierr .ne. 0)
return
599 iskip=mytlmeta+int(jrec-1,8)*int(nemsio_dblekind*myfieldsize+8,8)
600 iwrite=int(nemsio_dblekind,8)*int(
size(data),8)
601 if(do_byteswap)
call byteswap(
data,nemsio_dblekind,
size(data))
602 call bafrwritel(myflunit,iskip,iwrite,nwrite,data)
603 if(do_byteswap)
call byteswap(
data,nemsio_dblekind,
size(data))
604 if(nwrite.lt.iwrite)
return
608 end subroutine nemsio_writerecvbin8d8
614 subroutine nemsio_writerecgrb4w34(gfile,jrec,data,iret,idrt,itr,zhour,precision)
620 type(nemsio_gfile),
intent(inout) :: gfile
621 integer(nemsio_intkind),
intent(in) :: jrec
622 real(nemsio_realkind),
intent(in) :: data(:)
623 integer(nemsio_intkind),
optional,
intent(out):: iret
624 integer(nemsio_intkind),
optional,
intent(in) :: idrt
625 integer(nemsio_intkind),
optional,
intent(in) :: itr
626 real(nemsio_realkind),
optional,
intent(in) :: zhour
627 integer(nemsio_intkind),
optional,
intent(in) :: precision
628 type(nemsio_grbmeta) :: grbmeta
629 integer(nemsio_intkind) :: N=nemsio_kpds_intfill
630 integer(nemsio_intkind) :: nc,i
631 integer(nemsio_intkind) :: ios,w34,ibms
633 real(nemsio_realkind) :: mymax
637 if(
present(iret)) iret=-75
643 if(any(abs(data)>=nemsio_undef_grb)) ibms=1
645 if(
present(idrt))
then
646 call nemsio_setrqst(gfile,grbmeta,ios,jrec=jrec,w34=w34, &
647 idrt=idrt,itr=itr,zhour=zhour,ibms=ibms, &
650 call nemsio_setrqst(gfile,grbmeta,ios,jrec=jrec,w34=w34, &
651 itr=itr,zhour=zhour,ibms=ibms,precision=precision)
654 if (
present(iret))
then
663 where(abs(data)>=nemsio_undef_grb) grbmeta%lbms=.false.
666 if(abs(
data(i))<nemsio_undef_grb)
then
667 if(
data(i) .gt.mymax) mymax=
data(i)
674 if ( grbmeta%jpds(5).eq.1 .and. grbmeta%jpds(6).eq.109 )
then
675 grbmeta%jpds(22)=min(int(6-log10(mymax)),4)
683 call putgben(myflunit,grbmeta%jf,grbmeta%jpds,grbmeta%jgds, &
684 kens,ibs,nbits,grbmeta%lbms,
data,ios)
685 deallocate(grbmeta%lbms)
687 if (
present(iret))
then
688 print *,
'putgben_ios=',ios
695 if(
present(iret)) iret=0
696 end subroutine nemsio_writerecgrb4w34
698 subroutine nemsio_writerecgrb4(gfile,jrec,data,iret,idrt,itr,zhour,precision)
704 type(nemsio_gfile),
intent(inout) :: gfile
705 integer(nemsio_intkind),
intent(in) :: jrec
706 real(nemsio_realkind),
intent(in) :: data(:)
707 integer(nemsio_intkind),
optional,
intent(out):: iret
708 integer(nemsio_intkind),
optional,
intent(in) :: idrt
709 integer(nemsio_intkind),
optional,
intent(in) :: itr
710 real(nemsio_realkind),
optional,
intent(in) :: zhour
711 integer(nemsio_intkind),
optional,
intent(in) :: precision
712 real(nemsio_dblekind),
allocatable :: data8(:)
713 type(nemsio_grbmeta) :: grbmeta
714 integer(nemsio_intkind) :: N=nemsio_kpds_intfill
715 integer(nemsio_intkind) :: nc,i,nc1
716 integer(nemsio_intkind) :: ios,ibms
717 real(nemsio_dblekind) :: mymax
721 if(
present(iret)) iret=-77
727 allocate(data8(
size(data)) )
729 if(any(abs(data8)>=nemsio_undef_grb)) ibms=1
734 if(
present(idrt))
then
735 call nemsio_setrqst(gfile,grbmeta,ios,jrec=jrec,idrt=idrt, &
736 itr=itr,zhour=zhour,ibms=ibms,precision=precision)
738 call nemsio_setrqst(gfile,grbmeta,ios,jrec=jrec, &
739 itr=itr,zhour=zhour,ibms=ibms,precision=precision)
742 if (
present(iret))
then
754 where(abs(data8)>=nemsio_undef_grb) grbmeta%lbms=.false.
757 if(abs(data8(i))<nemsio_undef_grb)
then
758 if(data8(i) .gt.mymax) mymax=data8(i)
768 if ( grbmeta%jpds(5).eq.1 .and. grbmeta%jpds(6).eq.109 )
then
769 grbmeta%jpds(22)=min(int(6-log10(mymax)),4)
777 call putgben(myflunit,grbmeta%jf,grbmeta%jpds,grbmeta%jgds, &
778 kens,ibs,nbits,grbmeta%lbms,data8,ios)
781 deallocate(grbmeta%lbms)
783 if (
present(iret))
then
784 print *,
'putgben_ios=',ios
791 if(
present(iret)) iret=0
792 end subroutine nemsio_writerecgrb4
794 subroutine nemsio_writerecgrb8(gfile,jrec,data8,iret,idrt,itr,zhour,precision)
800 type(nemsio_gfile),
intent(inout) :: gfile
801 integer(nemsio_intkind),
intent(in) :: jrec
802 real(nemsio_dblekind),
intent(in) :: data8(:)
803 integer(nemsio_intkind),
optional,
intent(out):: iret
804 integer(nemsio_intkind),
optional,
intent(in) :: idrt
805 integer(nemsio_intkind),
optional,
intent(in) :: itr
806 real(nemsio_realkind),
optional,
intent(in) :: zhour
807 integer(nemsio_intkind),
optional,
intent(in) :: precision
808 type(nemsio_grbmeta) :: grbmeta
809 integer(nemsio_intkind) :: N=nemsio_kpds_intfill
810 integer(nemsio_intkind) :: nc,i
811 integer(nemsio_intkind) :: ios,ibms
813 real(nemsio_dblekind) :: mymax
817 if(
present(iret)) iret=-77
822 if(any(abs(data8)>=nemsio_undef_grb)) ibms=1
824 if(
present(idrt))
then
825 call nemsio_setrqst(gfile,grbmeta,ios,jrec=jrec,idrt=idrt, &
826 itr=itr,zhour=zhour,ibms=ibms,precision=precision)
828 call nemsio_setrqst(gfile,grbmeta,ios,jrec=jrec, &
829 itr=itr,zhour=zhour,ibms=ibms,precision=precision)
832 if (
present(iret))
then
841 where(abs(data8)>=nemsio_undef_grb) grbmeta%lbms=.false.
844 if(abs(data8(i))<nemsio_undef_grb)
then
845 if(data8(i) .gt.mymax) mymax=data8(i)
852 if ( grbmeta%jpds(5).eq.1 .and. grbmeta%jpds(6).eq.109 )
then
853 grbmeta%jpds(22)=min(int(6-log10(mymax)),4)
861 call putgben(myflunit,grbmeta%jf,grbmeta%jpds,grbmeta%jgds, &
862 kens,ibs,nbits,grbmeta%lbms,data8,ios)
863 deallocate(grbmeta%lbms)
865 if (
present(iret))
then
866 print *,
'putgben_ios=',ios
873 if(
present(iret)) iret=0
874 end subroutine nemsio_writerecgrb8
876 subroutine nemsio_writerecvgrb4w34(gfile,vname,vlevtyp,vlev,data,iret,idrt, &
883 type(nemsio_gfile),
intent(inout) :: gfile
884 character*(*),
intent(in) :: vname,vlevtyp
885 integer(nemsio_intkind),
intent(in) :: vlev
886 real(nemsio_realkind),
intent(in) :: data(:)
887 integer(nemsio_intkind),
optional,
intent(out):: iret
888 integer(nemsio_intkind),
optional,
intent(in) :: idrt
889 integer(nemsio_intkind),
optional,
intent(in) :: itr
890 real(nemsio_realkind),
optional,
intent(in) :: zhour
891 integer(nemsio_intkind),
optional,
intent(in) :: precision
892 type(nemsio_grbmeta) :: grbmeta
893 integer(nemsio_intkind) :: N=nemsio_kpds_intfill
894 integer(nemsio_intkind) :: nc,i
895 integer(nemsio_intkind) :: ios,w34,ibms
896 real(nemsio_realkind) :: mymax
900 if(
present(iret)) iret=-76
905 if(any(abs(data)>=nemsio_undef_grb)) ibms=1
908 if(
present(idrt))
then
909 call nemsio_setrqst(gfile,grbmeta,ios,vname=vname, &
910 vlevtyp=vlevtyp, vlev=vlev, w34=w34, idrt=idrt, &
911 itr=itr,zhour=zhour,ibms=ibms,precision=precision)
913 call nemsio_setrqst(gfile,grbmeta,ios,vname=vname, &
914 vlevtyp=vlevtyp, vlev=vlev, w34=w34,itr=itr, &
915 zhour=zhour,ibms=ibms,precision=precision)
918 if (
present(iret))
then
927 where(abs(data)>=nemsio_undef_grb) grbmeta%lbms=.false.
930 if(abs(
data(i))<nemsio_undef_grb)
then
931 if(
data(i) .gt.mymax) mymax=
data(i)
938 if ( grbmeta%jpds(5).eq.1 .and. grbmeta%jpds(6).eq.109 )
then
939 grbmeta%jpds(22)=min(int(6-log10(mymax)),4)
947 call putgben(myflunit,grbmeta%jf,grbmeta%jpds,grbmeta%jgds, &
948 kens,ibs,nbits,grbmeta%lbms,
data,ios)
949 deallocate(grbmeta%lbms)
951 if (
present(iret))
then
952 print *,
'putgben_ios=',ios
959 if(
present(iret)) iret=0
960 end subroutine nemsio_writerecvgrb4w34
962 Subroutine nemsio_writerecvgrb4(gfile,vname,vlevtyp,vlev,data,iret,idrt, &
969 type(nemsio_gfile),
intent(inout) :: gfile
970 character*(*),
intent(in) :: vname,vlevtyp
971 integer(nemsio_intkind),
intent(in) :: vlev
972 real(nemsio_realkind),
intent(in) :: data(:)
973 integer(nemsio_intkind),
optional,
intent(out):: iret
974 integer(nemsio_intkind),
optional,
intent(in) :: idrt
975 integer(nemsio_intkind),
optional,
intent(in) :: itr
976 real(nemsio_realkind),
optional,
intent(in) :: zhour
977 integer(nemsio_intkind),
optional,
intent(in) :: precision
978 real(nemsio_dblekind),
allocatable :: data8(:)
979 type(nemsio_grbmeta) :: grbmeta
980 integer(nemsio_intkind) :: N=nemsio_kpds_intfill
981 integer(nemsio_intkind) :: nc,i
982 integer(nemsio_intkind) :: ios,ibms
983 real(nemsio_dblekind) :: mymax
987 if(
present(iret)) iret=-78
992 if(any(abs(data)>=nemsio_undef_grb)) ibms=1
994 if(
present(idrt))
then
995 call nemsio_setrqst(gfile,grbmeta,ios,vname=vname, &
996 vlevtyp=vlevtyp, vlev=vlev, idrt=idrt,itr=itr, &
997 zhour=zhour,ibms=ibms,precision=precision)
999 call nemsio_setrqst(gfile,grbmeta,ios,vname=vname, &
1000 vlevtyp=vlevtyp, vlev=vlev,itr=itr,zhour=zhour, &
1001 ibms=ibms,precision=precision)
1004 if (
present(iret))
then
1012 allocate(data8(
size(data)) )
1016 where(abs(data8)>=nemsio_undef_grb) grbmeta%lbms=.false.
1019 if(abs(data8(i))<nemsio_undef_grb)
then
1020 if(data8(i) .gt.mymax) mymax=data8(i)
1027 if ( grbmeta%jpds(5).eq.1 .and. grbmeta%jpds(6).eq.109 )
then
1028 grbmeta%jpds(22)=min(int(6-log10(mymax)),4)
1035 kens=0;ibs=0;nbits=0
1036 call putgben(myflunit,grbmeta%jf,grbmeta%jpds,grbmeta%jgds, &
1037 kens,ibs,nbits,grbmeta%lbms,data8,ios)
1038 deallocate(grbmeta%lbms)
1040 if (
present(iret))
then
1041 print *,
'putgben_ios=',ios
1048 if(
present(iret)) iret=0
1049 end subroutine nemsio_writerecvgrb4
1051 subroutine nemsio_writerecvgrb8(gfile,vname,vlevtyp,vlev,data8,iret,idrt,itr, &
1058 type(nemsio_gfile),
intent(inout) :: gfile
1059 character*(*),
intent(in) :: vname,vlevtyp
1060 integer(nemsio_intkind),
intent(in) :: vlev
1061 real(nemsio_dblekind),
intent(in) :: data8(:)
1062 integer(nemsio_intkind),
optional,
intent(out):: iret
1063 integer(nemsio_intkind),
optional,
intent(in) :: idrt
1064 integer(nemsio_intkind),
optional,
intent(in) :: itr
1065 real(nemsio_realkind),
optional,
intent(in) :: zhour
1066 integer(nemsio_intkind),
optional,
intent(in) :: precision
1067 type(nemsio_grbmeta) :: grbmeta
1068 integer(nemsio_intkind) :: N=nemsio_kpds_intfill
1069 integer(nemsio_intkind) :: nc,i
1070 integer(nemsio_intkind) :: ios,ibms
1071 real(nemsio_dblekind) :: mymax
1075 if(
present(iret)) iret=-78
1080 if(any(abs(data8)>=nemsio_undef_grb)) ibms=1
1082 if(
present(idrt))
then
1083 call nemsio_setrqst(gfile,grbmeta,ios,vname=vname, &
1084 vlevtyp=vlevtyp, vlev=vlev, idrt=idrt,itr=itr, &
1085 zhour=zhour,ibms=ibms,precision=precision)
1087 call nemsio_setrqst(gfile,grbmeta,ios,vname=vname, &
1088 vlevtyp=vlevtyp, vlev=vlev,itr=itr,zhour=zhour, &
1089 ibms=ibms,precision=precision)
1092 if (
present(iret))
then
1101 where(abs(data8)>=nemsio_undef_grb) grbmeta%lbms=.false.
1104 if(abs(data8(i))<nemsio_undef_grb)
then
1105 if(data8(i) .gt.mymax) mymax=data8(i)
1112 if ( grbmeta%jpds(5).eq.1 .and. grbmeta%jpds(6).eq.109 )
then
1113 grbmeta%jpds(22)=min(int(6-log10(mymax)),4)
1120 kens=0;ibs=0;nbits=0
1121 call putgben(myflunit,grbmeta%jf,grbmeta%jpds,grbmeta%jgds, &
1122 kens,ibs,nbits,grbmeta%lbms,data8,ios)
1123 deallocate(grbmeta%lbms)
1125 if (
present(iret))
then
1126 print *,
'putgben_ios=',ios
1133 if(
present(iret)) iret=0
1134 end subroutine nemsio_writerecvgrb8
1136 end module nemsio_write