36 interface nemsio_readrec
37 module procedure nemsio_readrec4
38 module procedure nemsio_readrec8
39 end interface nemsio_readrec
41 interface nemsio_readrecv
42 module procedure nemsio_readrecv4
43 module procedure nemsio_readrecv8
44 end interface nemsio_readrecv
46 interface nemsio_readrecw34
47 module procedure nemsio_readrec4w34
48 module procedure nemsio_readrec8w34
49 end interface nemsio_readrecw34
51 interface nemsio_readrecvw34
52 module procedure nemsio_readrecv4w34
53 module procedure nemsio_readrecv8w34
54 end interface nemsio_readrecvw34
57 public nemsio_readrec,nemsio_readrecv,nemsio_readrecw34,nemsio_readrecvw34
62 character(8) :: mygdatatype
63 character(255) :: mygfname
64 integer mydimx,mydimy,mydimz,mynframe,myfieldsize,mytlmeta,myflunit
65 character(255),
save :: mygfnamep=
''
66 integer,
save :: mymbuf,mynnum,mynlen,mymnum
67 character,
allocatable,
save :: mycbuf(:)
73 subroutine nemsio_getgfile(gfile,iret)
78 type(nemsio_gfile),
intent(in) :: gfile
79 integer(nemsio_intkind),
optional,
intent(out) :: iret
81 character(8) :: tmpgdatatype
83 if(
present(iret)) iret=0
85 call nemsio_getfilehead(gfile,iret=ios,gdatatype=tmpgdatatype,dimx=mydimx, &
86 dimy=mydimy,dimz=mydimz,nframe=mynframe,tlmeta=mytlmeta, &
87 flunit=myflunit,gfname=mygfname,do_byteswap=do_byteswap )
89 if(
present(iret))
then
93 print *,
'ERROR: NEMSIO readrec in getting file head'
98 myfieldsize=(mydimx+2*mynframe)*(mydimy+2*mynframe)
99 mygdatatype=tmpgdatatype(1:4)
100 if(trim(mygfnamep)/=trim(mygfname))
then
102 if(trim(mygdatatype)==
'grib')
then
107 if(
allocated(mycbuf))
deallocate(mycbuf)
108 allocate(mycbuf(mymbuf))
113 if(
present(iret)) iret=0
115 end subroutine nemsio_getgfile
119 subroutine nemsio_readrec4(gfile,jrec,data,nframe,iret)
124 type(nemsio_gfile),
intent(inout) :: gfile
125 integer(nemsio_intkind),
intent(in) :: jrec
126 real(nemsio_realkind),
intent(inout) :: data(:)
127 integer(nemsio_intkind),
optional,
intent(out) :: iret
128 integer(nemsio_intkind),
optional,
intent(in) :: nframe
129 real(nemsio_realkind),
allocatable :: datatmp(:)
130 real(nemsio_dblekind),
allocatable :: datatmp8(:)
135 if(
present(iret)) iret=-32
137 call nemsio_getgfile(gfile,iret)
139 if ( mygdatatype .eq.
'bin4')
then
140 if(.not.
present(nframe) )
then
141 call nemsio_readrecbin4d4(gfile,jrec,
data,ios)
143 allocate(datatmp(myfieldsize) )
144 call nemsio_readrecbin4d4(gfile,jrec,datatmp,ios)
146 else if ( mygdatatype .eq.
'bin8')
then
147 allocate(datatmp8(myfieldsize) )
148 call nemsio_readrecbin8d8(gfile,jrec,datatmp8,ios)
150 allocate(datatmp8(myfieldsize) )
151 call nemsio_readrecgrb8(gfile,jrec,datatmp8,ios)
153 if ( ios .ne.0 )
then
154 if(
present(iret))
then
162 if (
present(nframe) )
then
163 if(mygdatatype .eq.
'bin4')
then
164 do j=1,mydimy+2*mynframe-2*nframe
165 do i=1,mydimx+2*mynframe -2*nframe
166 data(i+(j-1)*(mydimx+2*mynframe-2*nframe))=datatmp(i+nframe &
167 +(j-1+nframe)*(mydimx+2*mynframe))
171 elseif(mygdatatype==
'bin8'.or.mygdatatype==
'grib')
then
172 do j=1,mydimy+2*mynframe-2*nframe
173 do i=1,mydimx+2*mynframe -2*nframe
174 data(i+(j-1)*(mydimx+2*mynframe-2*nframe))=datatmp8(i+nframe &
175 +(j-1+nframe)*(mydimx+2*mynframe))
181 if(mygdatatype==
'bin8'.or.mygdatatype==
'grib')
then
187 if(
present(iret)) iret=0
189 end subroutine nemsio_readrec4
191 subroutine nemsio_readrec8(gfile,jrec,data,nframe,iret)
196 type(nemsio_gfile),
intent(inout) :: gfile
197 integer(nemsio_intkind),
intent(in) :: jrec
198 real(nemsio_dblekind),
intent(inout) :: data(:)
199 integer(nemsio_intkind),
optional,
intent(out) :: iret
200 integer(nemsio_intkind),
optional,
intent(in) :: nframe
201 real(nemsio_realkind),
allocatable :: datatmp4(:)
202 real(nemsio_dblekind),
allocatable :: datatmp(:)
207 if(
present(iret)) iret=-32
209 call nemsio_getgfile(gfile,iret)
211 if ( mygdatatype .eq.
'bin4')
then
212 allocate(datatmp4(myfieldsize))
213 call nemsio_readrecbin4d4(gfile,jrec,datatmp4,ios)
214 else if ( mygdatatype .eq.
'bin8')
then
215 if(.not.
present(nframe))
then
216 call nemsio_readrecbin8d8(gfile,jrec,
data,ios)
218 allocate(datatmp(myfieldsize))
219 call nemsio_readrecbin8d8(gfile,jrec,datatmp,ios)
222 if(.not.
present(nframe))
then
223 call nemsio_readrecgrb8(gfile,jrec,
data,ios)
225 allocate(datatmp(myfieldsize))
226 call nemsio_readrecgrb8(gfile,jrec,datatmp,ios)
229 if ( ios .ne.0 )
then
230 if(
present(iret))
then
238 if (
present(nframe) )
then
239 if(mygdatatype==
'bin4')
then
240 do j=1,mydimy+2*mynframe-2*nframe
241 do i=1,mydimx+2*mynframe -2*nframe
242 data(i+(j-1)*(mydimx+2*mynframe-2*nframe))=datatmp4(i+nframe &
243 +(j-1+nframe)*(mydimx+2*mynframe))
247 elseif(mygdatatype==
'bin8'.or.mygdatatype==
'grib')
then
248 do j=1,mydimy+2*mynframe-2*nframe
249 do i=1,mydimx+2*mynframe -2*nframe
250 data(i+(j-1)*(mydimx+2*mynframe-2*nframe))=datatmp(i+nframe &
251 +(j-1+nframe)*(mydimx+2*mynframe))
257 if(mygdatatype==
'bin4')
then
263 if(
present(iret)) iret=0
265 end subroutine nemsio_readrec8
267 subroutine nemsio_readrecv4(gfile,name,levtyp,lev,data,nframe,iret)
272 type(nemsio_gfile),
intent(inout) :: gfile
273 character(*),
intent(in) :: name
274 character(*),
intent(in),
optional :: levtyp
275 integer(nemsio_intkind),
optional,
intent(in) :: lev
276 real(nemsio_realkind),
intent(inout) :: data(:)
277 integer(nemsio_intkind),
optional,
intent(out) :: iret
278 integer(nemsio_intkind),
optional,
intent(in) :: nframe
279 real(nemsio_realkind),
allocatable :: datatmp(:)
280 real(nemsio_dblekind),
allocatable :: datatmp8(:)
285 if(
present(iret)) iret=-33
287 call nemsio_getgfile(gfile,iret)
289 if ( mygdatatype .eq.
'bin4')
then
290 if(.not.
present(nframe) )
then
291 call nemsio_readrecvbin4d4(gfile,name,levtyp,lev,
data,ios)
293 allocate(datatmp(myfieldsize) )
294 call nemsio_readrecvbin4d4(gfile,name,levtyp,lev,datatmp,ios)
296 else if ( mygdatatype .eq.
'bin8')
then
297 allocate(datatmp8(myfieldsize) )
298 call nemsio_readrecvbin8d8(gfile,name,levtyp,lev,datatmp8,ios)
300 allocate(datatmp8(myfieldsize) )
301 call nemsio_readrecvgrb8(gfile,name,levtyp,lev,datatmp8,ios)
303 if ( ios .ne.0 )
then
304 if(
present(iret))
then
312 if (
present(nframe) )
then
313 if(mygdatatype==
'bin4')
then
314 do j=1,mydimy+2*mynframe-2*nframe
315 do i=1,mydimx+2*mynframe -2*nframe
316 data(i+(j-1)*(mydimx+2*mynframe-2*nframe))=datatmp(i+nframe &
317 +(j-1+nframe)*(mydimx+2*mynframe))
321 elseif(mygdatatype==
'bin8'.or.mygdatatype==
'grib' )
then
322 do j=1,mydimy+2*mynframe-2*nframe
323 do i=1,mydimx+2*mynframe -2*nframe
324 data(i+(j-1)*(mydimx+2*mynframe-2*nframe))=datatmp8(i+nframe &
325 +(j-1+nframe)*(mydimx+2*mynframe))
331 if(mygdatatype==
'bin8'.or.mygdatatype==
'grib' )
then
337 if(
present(iret)) iret=0
339 end subroutine nemsio_readrecv4
341 subroutine nemsio_readrecv8(gfile,name,levtyp,lev,data,nframe,iret)
346 type(nemsio_gfile),
intent(inout) :: gfile
347 character(*),
intent(in) :: name
348 character(*),
intent(in),
optional :: levtyp
349 integer(nemsio_intkind),
optional,
intent(in) :: lev
350 real(nemsio_dblekind),
intent(inout) :: data(:)
351 integer(nemsio_intkind),
optional,
intent(out) :: iret
352 integer(nemsio_intkind),
optional,
intent(in) :: nframe
353 real(nemsio_realkind),
allocatable :: datatmp4(:)
354 real(nemsio_dblekind),
allocatable :: datatmp(:)
359 if(
present(iret)) iret=-33
361 call nemsio_getgfile(gfile,iret)
363 if ( mygdatatype .eq.
'bin4')
then
364 allocate(datatmp4(myfieldsize) )
365 call nemsio_readrecvbin4d4(gfile,name,levtyp,lev,datatmp4,ios)
366 else if ( mygdatatype .eq.
'bin8')
then
367 if(.not.
present(nframe) )
then
368 call nemsio_readrecvbin8d8(gfile,name,levtyp,lev,
data,ios)
370 allocate(datatmp(myfieldsize) )
371 call nemsio_readrecvbin8d8(gfile,name,levtyp,lev,datatmp,ios)
374 if(.not.
present(nframe) )
then
375 call nemsio_readrecvgrb8(gfile,name,levtyp,lev,
data,ios)
377 allocate(datatmp(myfieldsize) )
378 call nemsio_readrecvgrb8(gfile,name,levtyp,lev,datatmp,ios)
381 if ( ios .ne.0 )
then
382 if(
present(iret))
then
390 if (
present(nframe) )
then
391 if(mygdatatype==
'bin4')
then
392 do j=1,mydimy+2*mynframe-2*nframe
393 do i=1,mydimx+2*mynframe -2*nframe
394 data(i+(j-1)*(mydimx+2*mynframe-2*nframe))=datatmp4(i+nframe &
395 +(j-1+nframe)*(mydimx+2*mynframe))
399 elseif(mygdatatype==
'bin8'.or.mygdatatype==
'grib')
then
400 do j=1,mydimy+2*mynframe-2*nframe
401 do i=1,mydimx+2*mynframe -2*nframe
402 data(i+(j-1)*(mydimx+2*mynframe-2*nframe))=datatmp(i+nframe &
403 +(j-1+nframe)*(mydimx+2*mynframe))
409 if(mygdatatype==
'bin4')
then
415 if(
present(iret)) iret=0
417 end subroutine nemsio_readrecv8
419 subroutine nemsio_readrec4w34(gfile,jrec,data,nframe,iret)
425 type(nemsio_gfile),
intent(inout) :: gfile
426 integer(nemsio_intkind),
intent(in) :: jrec
427 real(nemsio_realkind),
intent(inout) :: data(:)
428 integer(nemsio_intkind),
optional,
intent(out) :: iret
429 integer(nemsio_intkind),
optional,
intent(in) :: nframe
430 real(nemsio_realkind),
allocatable :: datatmp(:)
431 real(nemsio_dblekind),
allocatable :: datatmp8(:)
436 if(
present(iret)) iret=-34
438 call nemsio_getgfile(gfile,iret)
440 if ( mygdatatype .eq.
'bin4')
then
441 if(.not.
present(nframe))
then
442 call nemsio_readrecbin4d4(gfile,jrec,
data,ios)
444 allocate(datatmp(myfieldsize) )
445 call nemsio_readrecbin4d4(gfile,jrec,datatmp,ios)
447 else if ( mygdatatype .eq.
'bin8')
then
448 allocate(datatmp8(myfieldsize) )
449 call nemsio_readrecbin8d8(gfile,jrec,datatmp8,ios)
451 if(.not.
present(nframe))
then
452 call nemsio_readrecgrb4w34(gfile,jrec,
data,ios)
454 allocate(datatmp(myfieldsize) )
455 call nemsio_readrecgrb4w34(gfile,jrec,datatmp,ios)
458 if ( ios .ne.0 )
then
459 if(
present(iret))
then
467 if (
present(nframe) )
then
468 if(mygdatatype==
'bin4'.or.mygdatatype==
'grib')
then
469 do j=1,mydimy+2*mynframe-2*nframe
470 do i=1,mydimx+2*mynframe -2*nframe
471 data(i+(j-1)*(mydimx+2*mynframe-2*nframe))=datatmp(i+nframe &
472 +(j-1+nframe)*(mydimx+2*mynframe))
476 elseif(mygdatatype==
'bin8')
then
477 do j=1,mydimy+2*mynframe-2*nframe
478 do i=1,mydimx+2*mynframe -2*nframe
479 data(i+(j-1)*(mydimx+2*mynframe-2*nframe))=datatmp8(i+nframe &
480 +(j-1+nframe)*(mydimx+2*mynframe))
486 if(mygdatatype==
'bin8')
then
492 if(
present(iret)) iret=0
494 end subroutine nemsio_readrec4w34
497 subroutine nemsio_readrec8w34(gfile,jrec,data,nframe,iret)
503 type(nemsio_gfile),
intent(inout) :: gfile
504 integer(nemsio_intkind),
intent(in) :: jrec
505 real(nemsio_dblekind),
intent(inout) :: data(:)
506 integer(nemsio_intkind),
optional,
intent(out) :: iret
507 integer(nemsio_intkind),
optional,
intent(in) :: nframe
508 real(nemsio_realkind),
allocatable :: datatmp4(:)
509 real(nemsio_dblekind),
allocatable :: datatmp(:)
514 if(
present(iret)) iret=-34
516 call nemsio_getgfile(gfile,iret)
518 if ( mygdatatype .eq.
'bin4')
then
519 allocate(datatmp4(myfieldsize) )
520 call nemsio_readrecbin4d4(gfile,jrec,datatmp4,ios)
521 else if ( mygdatatype .eq.
'bin8')
then
522 if(.not.
present(nframe) )
then
523 call nemsio_readrecbin8d8(gfile,jrec,
data,ios)
525 allocate(datatmp(myfieldsize) )
526 call nemsio_readrecbin8d8(gfile,jrec,datatmp,ios)
529 allocate(datatmp4(myfieldsize) )
530 call nemsio_readrecgrb4w34(gfile,jrec,datatmp4,ios)
532 if ( ios .ne.0 )
then
533 if(
present(iret))
then
541 if (
present(nframe) )
then
542 if(mygdatatype .eq.
'bin4'.or.mygdatatype .eq.
'grib' )
then
543 do j=1,mydimy+2*mynframe-2*nframe
544 do i=1,mydimx+2*mynframe -2*nframe
545 data(i+(j-1)*(mydimx+2*mynframe-2*nframe))=datatmp4(i+nframe &
546 +(j-1+nframe)*(mydimx+2*mynframe))
550 else if(mygdatatype .eq.
'bin8')
then
551 do j=1,mydimy+2*mynframe-2*nframe
552 do i=1,mydimx+2*mynframe -2*nframe
553 data(i+(j-1)*(mydimx+2*mynframe-2*nframe))=datatmp(i+nframe &
554 +(j-1+nframe)*(mydimx+2*mynframe))
560 if(mygdatatype .eq.
'bin4'.or.mygdatatype .eq.
'grib' )
then
566 if(
present(iret)) iret=0
568 end subroutine nemsio_readrec8w34
570 subroutine nemsio_readrecv4w34(gfile,name,levtyp,lev,data,nframe,iret)
575 type(nemsio_gfile),
intent(inout) :: gfile
576 character(*),
intent(in) :: name
577 character(*),
intent(in),
optional :: levtyp
578 integer(nemsio_intkind),
optional,
intent(in) :: lev
579 real(nemsio_realkind),
intent(inout) :: data(:)
580 integer(nemsio_intkind),
optional,
intent(out) :: iret
581 integer(nemsio_intkind),
optional,
intent(in) :: nframe
582 real(nemsio_realkind),
allocatable :: datatmp(:)
583 real(nemsio_dblekind),
allocatable :: datatmp8(:)
588 if(
present(iret)) iret=-35
590 call nemsio_getgfile(gfile,iret)
592 if ( mygdatatype .eq.
'bin4')
then
593 if(.not.
present(nframe))
then
594 call nemsio_readrecvbin4d4(gfile,name,levtyp,lev,
data,ios)
596 allocate(datatmp(myfieldsize) )
597 call nemsio_readrecvbin4d4(gfile,name,levtyp,lev,datatmp,ios)
599 else if ( mygdatatype .eq.
'bin8')
then
600 allocate(datatmp8(myfieldsize) )
601 call nemsio_readrecvbin8d8(gfile,name,levtyp,lev,datatmp8,ios)
603 if(.not.
present(nframe))
then
604 call nemsio_readrecvgrb4w34(gfile,name,levtyp,lev,
data,ios)
606 allocate(datatmp(myfieldsize) )
607 call nemsio_readrecvgrb4w34(gfile,name,levtyp,lev,datatmp,ios)
610 if ( ios .ne.0 )
then
611 if(
present(iret))
then
619 if (
present(nframe) )
then
620 if(mygdatatype==
'bin4'.or.mygdatatype==
'grib')
then
621 do j=1,mydimy+2*mynframe-2*nframe
622 do i=1,mydimx+2*mynframe -2*nframe
623 data(i+(j-1)*(mydimx+2*mynframe-2*nframe))=datatmp(i+nframe &
624 +(j-1+nframe)*(mydimx+2*mynframe))
628 elseif(mygdatatype==
'grib8')
then
629 do j=1,mydimy+2*mynframe-2*nframe
630 do i=1,mydimx+2*mynframe -2*nframe
631 data(i+(j-1)*(mydimx+2*mynframe-2*nframe))=datatmp8(i+nframe &
632 +(j-1+nframe)*(mydimx+2*mynframe))
638 if(mygdatatype==
'grib8')
then
644 if(
present(iret)) iret=0
646 end subroutine nemsio_readrecv4w34
649 subroutine nemsio_readrecv8w34(gfile,name,levtyp,lev,data,nframe,iret)
654 type(nemsio_gfile),
intent(inout) :: gfile
655 character(*),
intent(in) :: name
656 character(*),
intent(in),
optional :: levtyp
657 integer(nemsio_intkind),
optional,
intent(in) :: lev
658 real(nemsio_dblekind),
intent(inout) :: data(:)
659 integer(nemsio_intkind),
optional,
intent(out) :: iret
660 integer(nemsio_intkind),
optional,
intent(in) :: nframe
661 real(nemsio_dblekind),
allocatable :: datatmp(:)
662 real(nemsio_realkind),
allocatable :: datatmp4(:)
667 if(
present(iret)) iret=-35
669 call nemsio_getgfile(gfile,iret)
671 if ( mygdatatype .eq.
'bin4')
then
672 allocate(datatmp4(myfieldsize) )
673 call nemsio_readrecvbin4d4(gfile,name,levtyp,lev,datatmp4,ios)
674 else if ( mygdatatype .eq.
'bin8')
then
675 if(.not.
present(nframe))
then
676 call nemsio_readrecvbin8d8(gfile,name,levtyp,lev,
data,ios)
678 allocate(datatmp(myfieldsize) )
679 call nemsio_readrecvbin8d8(gfile,name,levtyp,lev,datatmp,ios)
682 allocate(datatmp4(myfieldsize) )
683 call nemsio_readrecvgrb4w34(gfile,name,levtyp,lev,datatmp4,ios)
685 if ( ios .ne.0 )
then
686 if(
present(iret))
then
694 if (
present(nframe) )
then
695 if(mygdatatype .eq.
'bin4'.or.mygdatatype .eq.
'grib')
then
696 do j=1,mydimy+2*mynframe-2*nframe
697 do i=1,mydimx+2*mynframe -2*nframe
698 data(i+(j-1)*(mydimx+2*mynframe-2*nframe))=datatmp4(i+nframe &
699 +(j-1+nframe)*(mydimx+2*mynframe))
703 elseif(mygdatatype .eq.
'bin8')
then
704 do j=1,mydimy+2*mynframe-2*nframe
705 do i=1,mydimx+2*mynframe -2*nframe
706 data(i+(j-1)*(mydimx+2*mynframe-2*nframe))=datatmp(i+nframe &
707 +(j-1+nframe)*(mydimx+2*mynframe))
713 if(mygdatatype .eq.
'bin4'.or.mygdatatype .eq.
'grib')
then
719 if(
present(iret)) iret=0
721 end subroutine nemsio_readrecv8w34
727 subroutine nemsio_readrecbin4d4(gfile,jrec,data,iret)
732 type(nemsio_gfile),
intent(in) :: gfile
733 integer(nemsio_intkind),
intent(in) :: jrec
734 real(nemsio_realkind),
intent(inout) :: data(:)
735 integer(nemsio_intkind),
optional,
intent(out) :: iret
736 integer(nemsio_intkind8) :: iskip,iread,nread
738 if(
present(iret)) iret=-41
739 iskip=mytlmeta+int(jrec-1,8)*int(kind(data)*myfieldsize+8,8)
740 iread=int(nemsio_realkind,8)*int(
size(data),8)
741 call bafrreadl(myflunit,iskip,iread,nread,data)
742 if(nread.lt.iread)
return
743 if(do_byteswap)
call byteswap(
data,nemsio_realkind,
size(data))
744 if(
present(iret)) iret=0
747 end subroutine nemsio_readrecbin4d4
749 subroutine nemsio_readrecvbin4d4(gfile,name,levtyp,lev,data,iret)
754 type(nemsio_gfile),
intent(in) :: gfile
755 character(*),
intent(in) :: name
756 character(*),
intent(in),
optional :: levtyp
757 integer(nemsio_intkind),
optional,
intent(in) :: lev
758 real(nemsio_realkind),
intent(out) :: data(:)
759 integer(nemsio_intkind),
optional,
intent(out) :: iret
760 integer(nemsio_intkind8) :: iskip,iread,nread
761 integer :: jrec, ierr
763 if(
present(iret)) iret=-42
764 call nemsio_searchrecv(gfile,jrec,name,levtyp,lev,ierr)
765 if ( ierr .ne. 0)
return
766 iskip=mytlmeta+int(jrec-1,8)*int(nemsio_realkind*myfieldsize+8,8)
767 iread=int(kind(data),8)*int(
size(data),8)
768 call bafrreadl(myflunit,iskip,iread,nread,data)
769 if(nread.lt.iread)
return
770 if(do_byteswap)
call byteswap(
data,nemsio_realkind,
size(data))
771 if(
present(iret)) iret=0
774 end subroutine nemsio_readrecvbin4d4
776 subroutine nemsio_readrecbin8d8(gfile,jrec,data,iret)
781 type(nemsio_gfile),
intent(in) :: gfile
782 integer(nemsio_intkind),
intent(in) :: jrec
783 real(nemsio_dblekind),
intent(out) :: data(:)
784 integer(nemsio_intkind),
optional,
intent(out) :: iret
785 integer(nemsio_intkind8) :: iskip,iread,nread
787 if(
present(iret)) iret=-42
788 iskip=mytlmeta+int(jrec-1,8)*int(nemsio_dblekind*myfieldsize+8,8)
789 iread=int(nemsio_dblekind,8)*int(
size(data),8)
790 call bafrreadl(myflunit,iskip,iread,nread,data)
791 if(nread.lt.iread)
return
792 if(do_byteswap)
call byteswap(
data,nemsio_dblekind,
size(data))
793 if(
present(iret)) iret=0
796 end subroutine nemsio_readrecbin8d8
798 subroutine nemsio_readrecvbin8d8(gfile,name,levtyp,lev,data,iret)
803 type(nemsio_gfile),
intent(in) :: gfile
804 character(*),
intent(in) :: name
805 character(*),
intent(in),
optional :: levtyp
806 integer(nemsio_intkind),
optional,
intent(in) :: lev
807 real(nemsio_dblekind),
intent(out) :: data(:)
808 integer(nemsio_intkind),
optional,
intent(out) :: iret
809 integer(nemsio_intkind8) :: iskip,iread,nread
810 integer :: jrec, ierr
812 if(
present(iret)) iret=-44
813 call nemsio_searchrecv(gfile,jrec,name,levtyp,lev,ierr)
814 if ( ierr .ne. 0)
return
815 iskip=mytlmeta+int(jrec-1,8)*int(nemsio_dblekind*myfieldsize+8,8)
816 iread=int(nemsio_dblekind,8)*int(
size(data),8)
817 call bafrreadl(myflunit,iskip,iread,nread,data)
818 if(nread.lt.iread)
return
819 if(do_byteswap)
call byteswap(
data,nemsio_dblekind,
size(data))
820 if(
present(iret)) iret=0
823 end subroutine nemsio_readrecvbin8d8
829 subroutine nemsio_readrecgrb4w34(gfile,jrec,data,iret)
834 type(nemsio_gfile),
intent(inout) :: gfile
835 integer(nemsio_intkind),
intent(in) :: jrec
836 real(nemsio_realkind),
intent(out) :: data(:)
837 integer(nemsio_intkind),
optional,
intent(out) :: iret
838 type(nemsio_grbmeta) :: grbmeta
839 integer(nemsio_intkind) :: luidx
840 integer(nemsio_intkind) :: kf,k,kpds(200),kgds(200)
841 logical*1,
allocatable :: lbms(:)
842 integer(nemsio_intkind) :: N=nemsio_kpds_intfill
843 integer(nemsio_intkind) :: ios,i,w34
849 if (
present(iret)) iret=-45
851 call nemsio_setrqst(gfile,grbmeta,ios,jrec=jrec,w34=w34)
853 if (
present(iret))
then
860 allocate(lbms(grbmeta%jf))
865 call getgbm(myflunit,luidx,grbmeta%jf,n,grbmeta%jpds,grbmeta%jgds,&
866 mymbuf,mycbuf,mynlen,mynnum,mymnum, &
867 kf,k,kpds,kgds,lbms,
data,ios)
868 deallocate(lbms,grbmeta%lbms)
870 if (
present(iret))
then
871 print *,
'getgb_ios=',ios
877 if (
present(iret)) iret=0
878 end subroutine nemsio_readrecgrb4w34
880 subroutine nemsio_readrecvgrb4w34(gfile,vname,vlevtyp,vlev,data,iret)
886 type(nemsio_gfile),
intent(inout) :: gfile
887 character*(*),
intent(in) :: vname,vlevtyp
888 integer(nemsio_intkind),
intent(in) :: vlev
889 real(nemsio_realkind),
intent(out) :: data(:)
890 integer(nemsio_intkind),
optional,
intent(out) :: iret
891 type(nemsio_grbmeta) :: grbmeta
892 integer(nemsio_intkind) :: luidx
893 integer(nemsio_intkind) :: kf,k,kpds(200),kgds(200)
894 logical*1,
allocatable :: lbms(:)
895 integer(nemsio_intkind) :: N=nemsio_kpds_intfill
896 integer(nemsio_intkind) :: ios,i,w34
902 if (
present(iret)) iret=-45
904 call nemsio_setrqst(gfile,grbmeta,ios,vname=vname, &
905 vlevtyp=vlevtyp, vlev=vlev ,w34=w34)
907 if (
present(iret))
then
917 allocate(lbms(grbmeta%jf))
919 call getgbm(myflunit,luidx,grbmeta%jf,n,grbmeta%jpds,grbmeta%jgds,&
920 mymbuf,mycbuf,mynlen,mynnum,mymnum, &
921 kf,k,kpds,kgds,lbms,
data,ios)
922 deallocate(lbms,grbmeta%lbms)
924 if (
present(iret))
then
925 print *,
'getgb_ios=',ios
931 if (
present(iret)) iret=0
932 end subroutine nemsio_readrecvgrb4w34
938 subroutine nemsio_readrecgrb8(gfile,jrec,data,iret)
944 type(nemsio_gfile),
intent(inout) :: gfile
945 integer(nemsio_intkind),
intent(in) :: jrec
946 real(nemsio_dblekind),
intent(out) :: data(:)
947 integer(nemsio_intkind),
optional,
intent(out) :: iret
948 type(nemsio_grbmeta) :: grbmeta
949 integer(nemsio_intkind) :: luidx
950 integer(nemsio_intkind) :: kf,k,kpds(200),kgds(200)
951 logical*1,
allocatable :: lbms(:)
952 integer(nemsio_intkind) :: N=nemsio_kpds_intfill
953 integer(nemsio_intkind) :: ios,i
959 if (
present(iret)) iret=-46
960 call nemsio_setrqst(gfile,grbmeta,ios,jrec=jrec)
962 if (
present(iret))
then
972 allocate(lbms(grbmeta%jf))
974 call getgbm(myflunit,luidx,grbmeta%jf,n,grbmeta%jpds,grbmeta%jgds,&
975 mymbuf,mycbuf,mynlen,mynnum,mymnum, &
976 kf,k,kpds,kgds,lbms,
data,ios)
977 deallocate(lbms,grbmeta%lbms)
979 if (
present(iret))
then
980 print *,
'getgb_ios=',ios
986 if (
present(iret)) iret=0
987 end subroutine nemsio_readrecgrb8
989 subroutine nemsio_readrecvgrb8(gfile,vname,vlevtyp,vlev,data,iret)
995 type(nemsio_gfile),
intent(inout) :: gfile
996 character*(*),
intent(in) :: vname,vlevtyp
997 integer(nemsio_intkind),
intent(in) :: vlev
998 real(nemsio_dblekind),
intent(out) :: data(:)
999 integer(nemsio_intkind),
optional,
intent(out) :: iret
1000 type(nemsio_grbmeta) :: grbmeta
1001 integer(nemsio_intkind) :: luidx
1002 integer(nemsio_intkind) :: kf,k,kpds(200),kgds(200)
1003 logical*1,
allocatable :: lbms(:)
1004 integer(nemsio_intkind) :: N=nemsio_kpds_intfill
1005 integer(nemsio_intkind) :: ios,i
1011 if (
present(iret)) iret=-47
1012 call nemsio_setrqst(gfile,grbmeta,ios,vname=vname, &
1013 vlevtyp=vlevtyp, vlev=vlev )
1015 if (
present(iret))
then
1025 allocate(lbms(grbmeta%jf))
1027 call getgbm(myflunit,luidx,grbmeta%jf,n,grbmeta%jpds,grbmeta%jgds,&
1028 mymbuf,mycbuf,mynlen,mynnum,mymnum, &
1029 kf,k,kpds,kgds,lbms,
data,ios)
1030 deallocate(lbms,grbmeta%lbms)
1032 if (
present(iret))
then
1033 print *,
'getgb_ios=',ios
1039 if (
present(iret)) iret=0
1040 end subroutine nemsio_readrecvgrb8
1042 end module nemsio_read