138 module nemsio_openclose
144 integer,
parameter:: nemsio_lmeta1=48,nemsio_lmeta3=40
145 integer,
parameter,
public:: nemsio_intkind=4,nemsio_intkind8=8
146 integer,
parameter,
public:: nemsio_realkind=4,nemsio_dblekind=8
147 integer,
parameter,
public:: nemsio_charkind=16,nemsio_charkind8=8,nemsio_charkind4=4
148 integer,
parameter,
public:: nemsio_logickind=4
149 integer(nemsio_intkind),
parameter :: nemsio_intfill=-9999_nemsio_intkind
150 integer(nemsio_intkind8),
parameter :: nemsio_intfill8=-9999_nemsio_intkind8
151 logical(nemsio_logickind),
parameter:: nemsio_logicfill=.false.
152 real(nemsio_realkind),
parameter :: nemsio_realfill=-9999._nemsio_realkind
153 real(nemsio_dblekind),
parameter :: nemsio_dblefill=-9999._nemsio_dblekind
154 real(nemsio_intkind),
parameter,
public :: nemsio_kpds_intfill=-1_nemsio_intkind
155 real(nemsio_realkind),
parameter,
public :: nemsio_undef_grb=9.e20_nemsio_realkind
159 character(nemsio_charkind8) :: gtype=
' '
160 integer(nemsio_intkind):: version=nemsio_intfill
161 character(nemsio_charkind8):: gdatatype=
' '
162 character(nemsio_charkind8):: modelname=
' '
163 integer(nemsio_intkind):: nmeta=nemsio_intfill
164 integer(nemsio_intkind):: lmeta=nemsio_intfill
165 integer(nemsio_intkind):: nrec=nemsio_intfill
167 integer(nemsio_intkind):: idate(7)=nemsio_intfill
168 integer(nemsio_intkind):: nfday=nemsio_intfill
169 integer(nemsio_intkind):: nfhour=nemsio_intfill
170 integer(nemsio_intkind):: nfminute=nemsio_intfill
171 integer(nemsio_intkind):: nfsecondn=nemsio_intfill
172 integer(nemsio_intkind):: nfsecondd=nemsio_intfill
175 integer(nemsio_intkind):: dimx=nemsio_intfill
176 integer(nemsio_intkind):: dimy=nemsio_intfill
177 integer(nemsio_intkind):: dimz=nemsio_intfill
178 integer(nemsio_intkind):: nframe=nemsio_intfill
179 integer(nemsio_intkind):: nsoil=nemsio_intfill
180 integer(nemsio_intkind):: ntrac=nemsio_intfill
182 integer(nemsio_intkind) :: jcap=nemsio_intfill
183 integer(nemsio_intkind) :: ncldt=nemsio_intfill
184 integer(nemsio_intkind) :: idvc=nemsio_intfill
185 integer(nemsio_intkind) :: idsl=nemsio_intfill
186 integer(nemsio_intkind) :: idvm=nemsio_intfill
187 integer(nemsio_intkind) :: idrt=nemsio_intfill
188 real(nemsio_realkind) :: rlon_min=nemsio_realfill
189 real(nemsio_realkind) :: rlon_max=nemsio_realfill
190 real(nemsio_realkind) :: rlat_min=nemsio_realfill
191 real(nemsio_realkind) :: rlat_max=nemsio_realfill
192 logical(nemsio_logickind) :: extrameta=nemsio_logicfill
194 integer(nemsio_intkind):: nmetavari=nemsio_intfill
195 integer(nemsio_intkind):: nmetavarr=nemsio_intfill
196 integer(nemsio_intkind):: nmetavarl=nemsio_intfill
197 integer(nemsio_intkind):: nmetavarc=nemsio_intfill
198 integer(nemsio_intkind):: nmetavarr8=nemsio_intfill
199 integer(nemsio_intkind):: nmetaaryi=nemsio_intfill
200 integer(nemsio_intkind):: nmetaaryr=nemsio_intfill
201 integer(nemsio_intkind):: nmetaaryl=nemsio_intfill
202 integer(nemsio_intkind):: nmetaaryc=nemsio_intfill
203 integer(nemsio_intkind):: nmetaaryr8=nemsio_intfill
205 character(nemsio_charkind),
allocatable :: recname(:)
206 character(nemsio_charkind),
allocatable :: reclevtyp(:)
207 integer(nemsio_intkind),
allocatable :: reclev(:)
209 real(nemsio_realkind),
allocatable :: vcoord(:,:,:)
210 real(nemsio_realkind),
allocatable :: lat(:)
211 real(nemsio_realkind),
allocatable :: lon(:)
212 real(nemsio_realkind),
allocatable :: dx(:)
213 real(nemsio_realkind),
allocatable :: dy(:)
215 real(nemsio_realkind),
allocatable :: Cpi(:)
216 real(nemsio_realkind),
allocatable :: Ri(:)
218 character(nemsio_charkind),
allocatable :: variname(:)
219 integer(nemsio_intkind),
allocatable :: varival(:)
220 character(nemsio_charkind),
allocatable :: varrname(:)
221 real(nemsio_realkind),
allocatable :: varrval(:)
222 character(nemsio_charkind),
allocatable :: varr8name(:)
223 real(nemsio_dblekind),
allocatable :: varr8val(:)
224 character(nemsio_charkind),
allocatable :: varlname(:)
225 logical(nemsio_logickind),
allocatable :: varlval(:)
226 character(nemsio_charkind),
allocatable :: varcname(:)
227 character(nemsio_charkind),
allocatable :: varcval(:)
229 character(nemsio_charkind),
allocatable :: aryiname(:)
230 integer(nemsio_intkind),
allocatable :: aryilen(:)
231 integer(nemsio_intkind),
allocatable :: aryival(:,:)
232 character(nemsio_charkind),
allocatable :: aryrname(:)
233 integer(nemsio_intkind),
allocatable :: aryrlen(:)
234 real(nemsio_realkind),
allocatable :: aryrval(:,:)
235 character(nemsio_charkind),
allocatable :: arylname(:)
236 integer(nemsio_intkind),
allocatable :: aryllen(:)
237 logical(nemsio_logickind),
allocatable :: arylval(:,:)
238 character(nemsio_charkind),
allocatable :: arycname(:)
239 integer(nemsio_intkind),
allocatable :: aryclen(:)
240 character(nemsio_charkind),
allocatable :: arycval(:,:)
241 character(nemsio_charkind),
allocatable :: aryr8name(:)
242 integer(nemsio_intkind),
allocatable :: aryr8len(:)
243 real(nemsio_dblekind),
allocatable :: aryr8val(:,:)
246 character(255) :: gfname
247 character(nemsio_charkind8) :: gaction
248 integer(nemsio_intkind8) :: tlmeta=nemsio_intfill
249 integer(nemsio_intkind) :: fieldsize=nemsio_intfill
250 integer(nemsio_intkind) :: flunit=nemsio_intfill
251 integer(nemsio_intkind) :: headvarinum=nemsio_intfill
252 integer(nemsio_intkind) :: headvarrnum=nemsio_intfill
253 integer(nemsio_intkind) :: headvarcnum=nemsio_intfill
254 integer(nemsio_intkind) :: headvarlnum=nemsio_intfill
255 integer(nemsio_intkind) :: headaryinum=nemsio_intfill
256 integer(nemsio_intkind) :: headaryrnum=nemsio_intfill
257 integer(nemsio_intkind) :: headarycnum=nemsio_intfill
258 character(nemsio_charkind),
allocatable :: headvarcname(:)
259 character(nemsio_charkind),
allocatable :: headvariname(:)
260 character(nemsio_charkind),
allocatable :: headvarrname(:)
261 character(nemsio_charkind),
allocatable :: headvarlname(:)
262 character(nemsio_charkind),
allocatable :: headaryiname(:)
263 character(nemsio_charkind),
allocatable :: headaryrname(:)
264 character(nemsio_charkind),
allocatable :: headarycname(:)
265 integer(nemsio_intkind),
allocatable :: headvarival(:)
266 real(nemsio_realkind),
allocatable :: headvarrval(:)
267 character(nemsio_charkind),
allocatable :: headvarcval(:)
268 logical(nemsio_logickind),
allocatable :: headvarlval(:)
269 integer(nemsio_intkind),
allocatable :: headaryival(:,:)
270 real(nemsio_realkind),
allocatable :: headaryrval(:,:)
271 logical(nemsio_logickind),
allocatable :: headarylval(:)
272 character(nemsio_charkind),
allocatable :: headarycval(:,:)
273 integer(nemsio_intkind8) :: tlmetalat=nemsio_intfill
274 integer(nemsio_intkind8) :: tlmetalon=nemsio_intfill
275 integer(nemsio_intkind8) :: tlmetadx=nemsio_intfill
276 integer(nemsio_intkind8) :: tlmetady=nemsio_intfill
277 integer(nemsio_intkind8) :: tlmetavarival=nemsio_intfill
278 integer(nemsio_intkind8) :: tlmetaaryival=nemsio_intfill
279 character(16) :: file_endian=
''
280 logical :: do_byteswap=.false.
281 integer(nemsio_intkind) :: jgds(200)=nemsio_kpds_intfill
282 integer(nemsio_intkind) :: igrid
287 integer(nemsio_intkind) :: jf=nemsio_intfill
288 integer(nemsio_intkind) :: j=nemsio_kpds_intfill
289 logical*1,
allocatable :: lbms(:)
290 integer(nemsio_intkind) :: jpds(200)=nemsio_kpds_intfill
291 integer(nemsio_intkind) :: jgds(200)=nemsio_kpds_intfill
299 type :: nemsio_grbtbl_item
300 character(nemsio_charkind) :: shortname=
' '
301 character(nemsio_charkind*2) :: leveltype=
' '
302 integer(nemsio_intkind) :: precision,g1lev,g1param,g1level
303 end type nemsio_grbtbl_item
305 type :: nemsio_grbtbl
307 type(nemsio_grbtbl_item) :: item(255)
308 end type nemsio_grbtbl
310 type(nemsio_grbtbl),
save :: gribtable(10)
312 character(16) :: machine_endian=
'big_endian'
315 integer(nemsio_intkind),
save :: fileunit(600:1699)=0
319 interface nemsio_getheadvar
320 module procedure nemsio_getfheadvari
321 module procedure nemsio_getfheadvarr
322 module procedure nemsio_getfheadvarr8
323 module procedure nemsio_getfheadvarl
324 module procedure nemsio_getfheadvarc
325 module procedure nemsio_getfheadaryi
326 module procedure nemsio_getfheadaryr
327 module procedure nemsio_getfheadaryr8
328 module procedure nemsio_getfheadaryl
329 module procedure nemsio_getfheadaryc
330 end interface nemsio_getheadvar
332 interface nemsio_setheadvar
333 module procedure nemsio_setfheadvari
334 module procedure nemsio_setfheadaryi
335 end interface nemsio_setheadvar
338 module procedure nemsio_splat4
339 module procedure nemsio_splat8
348 character(nemsio_charkind8) :: gtype
349 character(nemsio_charkind8) :: modelname
350 character(nemsio_charkind8) :: gdatatype
351 integer(nemsio_intkind) :: version,nmeta,lmeta
352 integer(nemsio_intkind) :: reserve(3)
353 end type nemsio_meta1
357 integer(nemsio_intkind) :: nrec
358 integer(nemsio_intkind) :: idate(1:7),nfday,nfhour,nfminute,nfsecondn, &
359 nfsecondd,dimx,dimy,dimz,nframe,nsoil,ntrac,&
360 jcap,ncldt,idvc,idsl,idvm,idrt
361 real(nemsio_realkind) :: rlon_min,rlon_max,rlat_min,rlat_max
362 logical(nemsio_logickind) :: extrameta
363 end type nemsio_meta2
366 integer(nemsio_intkind) :: nmetavari,nmetavarr,nmetavarl,nmetavarc, &
367 nmetaaryi,nmetaaryr,nmetaaryl,nmetaaryc, &
368 nmetavarr8,nmetaaryr8
369 end type nemsio_meta3
372 public nemsio_init,nemsio_finalize,nemsio_open,nemsio_close
373 public nemsio_getheadvar,nemsio_getrechead
374 public nemsio_getfilehead,nemsio_setfilehead,nemsio_setheadvar
376 public nemsio_setrqst,nemsio_searchrecv
377 public equal_str_nocase
381 subroutine nemsio_init(iret)
386 integer(nemsio_intkind),
optional,
intent(out):: iret
391 call nemsio_setgrbtbl(ios)
392 if (
present(iret)) iret=ios
394 if (
present(iret))
return
400 call chk_endianc(machine_endian)
401 if(trim(machine_endian)==
'mixed_endian')
then
402 print *,
'WARNING: You are in mixed endian computer!!!'
405 end subroutine nemsio_init
407 subroutine nemsio_finalize()
413 end subroutine nemsio_finalize
415 subroutine nemsio_open(gfile,gfname,gaction,iret,gdatatype,version, &
416 nmeta,lmeta,modelname,nrec,idate,nfday,nfhour, &
417 nfminute,nfsecondn,nfsecondd, &
418 dimx,dimy,dimz,nframe,nsoil,ntrac,jcap,ncldt,idvc,idsl,idvm,idrt, &
419 rlon_min,rlon_max,rlat_min,rlat_max,extrameta, &
420 nmetavari,nmetavarr,nmetavarl,nmetavarc, &
421 nmetaaryi,nmetaaryr,nmetaaryl,nmetaaryc, &
422 nmetavarr8,nmetaaryr8, &
423 recname,reclevtyp,reclev,vcoord,lat,lon,dx,dy,cpi,ri, &
424 variname,varival,varrname,varrval,varlname,varlval,varcname,varcval, &
425 varr8name,varr8val, &
426 aryiname,aryilen,aryival,aryrname,aryrlen,aryrval, &
427 arylname,aryllen,arylval,arycname,aryclen,arycval, &
428 aryr8name,aryr8len,aryr8val )
433 type(nemsio_gfile),
intent(inout) :: gfile
434 character*(*),
intent(in) :: gfname
435 character*(*),
intent(in) :: gaction
439 integer(nemsio_intkind),
optional,
intent(out) :: iret
440 character*(*),
optional,
intent(in) :: gdatatype,modelname
441 integer(nemsio_intkind),
optional,
intent(in) :: version,nmeta,lmeta,nrec
442 integer(nemsio_intkind),
optional,
intent(in) :: idate(7),nfday,nfhour, &
443 nfminute, nfsecondn,nfsecondd
444 integer(nemsio_intkind),
optional,
intent(in) :: dimx,dimy,dimz,nframe, &
446 integer(nemsio_intkind),
optional,
intent(in) :: jcap,ncldt,idvc,idsl, &
448 real(nemsio_realkind),
optional,
intent(in) :: rlat_min,rlat_max, &
450 logical(nemsio_logickind),
optional,
intent(in):: extrameta
451 integer(nemsio_intkind),
optional,
intent(in) :: nmetavari,nmetavarr, &
452 nmetavarl,nmetavarc,nmetavarr8,nmetaaryi,nmetaaryr,nmetaaryl,&
455 character*(*),
optional,
intent(in) :: recname(:),reclevtyp(:)
456 integer(nemsio_intkind),
optional,
intent(in) :: reclev(:)
457 real(nemsio_realkind),
optional,
intent(in) :: vcoord(:,:,:)
458 real(nemsio_realkind),
optional,
intent(in) :: lat(:),lon(:)
459 real(nemsio_realkind),
optional,
intent(in) :: dx(:),dy(:)
460 real(nemsio_realkind),
optional,
intent(in) :: Cpi(:),Ri(:)
462 character*(*),
optional,
intent(in) :: variname(:),varrname(:),&
463 varlname(:),varcname(:),varr8name(:),aryiname(:),aryrname(:), &
464 arylname(:),arycname(:),aryr8name(:)
465 integer(nemsio_intkind),
optional,
intent(in) :: aryilen(:),aryrlen(:), &
466 aryllen(:),aryclen(:),aryr8len(:)
467 integer(nemsio_intkind),
optional,
intent(in) :: varival(:),aryival(:,:)
468 real(nemsio_realkind),
optional,
intent(in) :: varrval(:),aryrval(:,:)
469 real(nemsio_dblekind),
optional,
intent(in) :: varr8val(:),aryr8val(:,:)
470 logical(nemsio_logickind),
optional,
intent(in):: varlval(:),arylval(:,:)
471 character(*),
optional,
intent(in) :: varcval(:),arycval(:,:)
473 integer(nemsio_intkind) :: ios
477 if (
present(iret)) iret=-1
478 call nemsio_getlu(gfile,gfname,gaction,ios)
480 if (
present(iret))
then
492 gfile%gaction=gaction
493 if ( equal_str_nocase(trim(gaction),
'read') .or. equal_str_nocase(trim(gaction),
'rdwr'))
then
494 if ( equal_str_nocase(trim(gaction),
'read') )
then
495 call baopenr(gfile%flunit,gfname,ios)
497 if (
present(iret))
then
504 call baopen(gfile%flunit,gfname,ios)
506 if (
present(iret))
then
516 call nemsio_rcreate(gfile,gfname,gaction,ios)
518 if (
present(iret))
then
528 elseif ( equal_str_nocase(trim(gaction),
'write') )
then
529 call baopenwt(gfile%flunit,gfname,ios)
531 if (
present(iret))
then
537 call nemsio_wcreate(gfile,gfname,gaction,ios,gdatatype=gdatatype, &
538 version=version, nmeta=nmeta,lmeta=lmeta,modelname=modelname, &
539 nrec=nrec,idate=idate,nfday=nfday,nfhour=nfhour, &
540 nfminute=nfminute,nfsecondn=nfsecondn, nfsecondd=nfsecondd, &
541 dimx=dimx,dimy=dimy,dimz=dimz,nframe=nframe,nsoil=nsoil, &
542 ntrac=ntrac,jcap=jcap,ncldt=ncldt,idvc=idvc,idsl=idsl, &
543 idvm=idvm,idrt=idrt, rlon_min=rlon_min,rlon_max=rlon_max, &
544 rlat_min=rlat_min, rlat_max=rlat_max,extrameta=extrameta, &
545 nmetavari=nmetavari,nmetavarr=nmetavarr,nmetavarr8=nmetavarr8,&
546 nmetavarl=nmetavarl, nmetavarc=nmetavarc,nmetaaryi=nmetaaryi, &
547 nmetaaryr=nmetaaryr, nmetaaryr8=nmetaaryr8, &
548 nmetaaryl=nmetaaryl,nmetaaryc=nmetaaryc,recname=recname, &
549 reclevtyp=reclevtyp,reclev=reclev,vcoord=vcoord, &
550 lat=lat,lon=lon,dx=dx,dy=dy,cpi=cpi,ri=ri, &
551 variname=variname,varival=varival,varrname=varrname, &
552 varrval=varrval,varlname=varlname,varlval=varlval, &
553 varcname=varcname,varcval=varcval, &
554 varr8name=varr8name,varr8val=varr8val, &
555 aryiname=aryiname,aryilen=aryilen,aryival=aryival, &
556 aryrname=aryrname,aryrlen=aryrlen,aryrval=aryrval, &
557 aryr8name=aryr8name,aryr8len=aryr8len,aryr8val=aryr8val, &
558 arylname=arylname,aryllen=aryllen,arylval=arylval, &
559 arycname=arycname,aryclen=aryclen,arycval=arycval )
561 if (
present(iret))
then
572 if (
present(iret))
then
581 if(.not.
allocated(gfile%headvariname).or. &
582 .not.
allocated(gfile%headvarrname).or. &
583 .not.
allocated(gfile%headvarcname).or. &
584 .not.
allocated(gfile%headvarlname).or. &
585 .not.
allocated(gfile%headaryiname).or. &
586 .not.
allocated(gfile%headaryrname) )
then
588 call nemsio_setfhead(gfile,ios)
589 if (
present(iret)) iret=ios
591 if (
present(iret))
return
597 end subroutine nemsio_open
599 subroutine nemsio_close(gfile,iret)
605 type(nemsio_gfile),
intent(inout) :: gfile
606 integer(nemsio_intkind),
optional,
intent(out) :: iret
607 integer(nemsio_intkind) :: ios
611 if (
present(iret) ) iret=-1
612 call baclose(gfile%flunit,ios)
614 if (
present(iret))
then
623 call nemsio_clslu(gfile,ios)
625 if (
present(iret))
then
635 call nemsio_axmeta(gfile,ios)
637 if (
present(iret))
then
644 if (
present(iret)) iret=0
646 end subroutine nemsio_close
648 subroutine nemsio_rcreate(gfile,gfname,gaction,iret)
653 type(nemsio_gfile),
intent(inout) :: gfile
654 character*(*),
intent(in) :: gfname
655 character*(*),
intent(in) :: gaction
656 integer(nemsio_intkind),
intent(out) :: iret
658 integer(nemsio_intkind) :: ios,nmeta
659 integer(nemsio_intkind8) :: iskip,iread,nread
660 type(nemsio_meta1) :: meta1
661 type(nemsio_meta2) :: meta2
662 type(nemsio_meta3) :: meta3
663 integer(nemsio_intkind) :: i
664 character(nemsio_charkind8),
allocatable :: char8var(:)
665 logical(nemsio_logickind) :: lreadcrt,ltlendian
670 gfile%do_byteswap=.false.
673 call bafrreadl(gfile%flunit,iskip,iread,nread,meta1)
674 lreadcrt=meta1%lmeta==120.and.(meta1%nmeta<13.and.meta1%nmeta>0).and. &
675 (meta1%version<300000.and.meta1%version>=nemsio_intfill)
676 if(nread.lt.iread)
then
678 call nemsio_close(gfile,iret=iret)
679 gfile%file_endian=
'little_endian'
680 gfile%do_byteswap=.false.
683 call nemsio_getlu(gfile,gfname,gaction,iret,ltlendian=ltlendian)
684 if ( equal_str_nocase(trim(gaction),
'read') )
then
685 call baopenr(gfile%flunit,gfname,ios)
686 if(ios/=0) print *,
'Cant open file ',trim(gfname),
' ios=',ios
687 else if ( equal_str_nocase(trim(gaction),
'rdwr') )
then
688 call baopen(gfile%flunit,gfname,ios)
689 if(ios/=0) print *,
'Cant open file ',trim(gfname),
' ios=',ios
692 gfile%gaction=gaction
693 if(trim(machine_endian)==
'big_endian') gfile%do_byteswap=.true.
694 if(trim(machine_endian)==
'little_endian') gfile%do_byteswap=.false.
695 call bafrreadl(gfile%flunit,iskip,iread,nread,meta1)
697 print *,
'WARNING: the file probably is in mixed endian, the program will STOP!'
701 elseif(.not.lreadcrt)
then
703 gfile%do_byteswap=.true.
708 if(gfile%do_byteswap)
then
709 if(trim(machine_endian)==
'big_endian')gfile%file_endian=
'little_endian'
710 if(trim(machine_endian)==
'little_endian')gfile%file_endian=
'big_endian'
712 gfile%file_endian=machine_endian
715 if(gfile%do_byteswap)
call byteswap(meta1%version,nemsio_intkind,6)
718 gfile%gtype=meta1%gtype
719 gfile%version=meta1%version
720 gfile%nmeta=meta1%nmeta
721 gfile%lmeta=meta1%lmeta
722 gfile%gdatatype=meta1%gdatatype
723 gfile%modelname=meta1%modelname
728 if ( trim(gfile%gdatatype(1:3)).ne.
"bin".and.trim(gfile%gdatatype(1:4)).ne.
"grib" )
then
729 gfile%gdatatype=
"grib"
731 if ( gfile%gtype(1:6) .ne.
'NEMSIO' )
then
740 call bafrreadl(gfile%flunit,iskip,iread,nread,meta2)
742 if(nread.lt.iread)
return
743 if(gfile%do_byteswap)
then
744 call byteswap(meta2%nrec,nemsio_intkind,25)
745 call byteswap(meta2%rlon_min,nemsio_realkind,4)
746 call byteswap(meta2%extrameta,nemsio_logickind,1)
748 gfile%tlmeta=gfile%tlmeta+nread
750 gfile%nrec=meta2%nrec
751 gfile%idate(1:7)=meta2%idate(1:7)
752 gfile%nfday=meta2%nfday
753 gfile%nfhour=meta2%nfhour
754 gfile%nfminute=meta2%nfminute
755 gfile%nfsecondn=meta2%nfsecondn
756 gfile%nfsecondd=meta2%nfsecondd
757 gfile%dimx=meta2%dimx
758 gfile%dimy=meta2%dimy
759 gfile%dimz=meta2%dimz
760 gfile%nframe=meta2%nframe
761 gfile%nsoil=meta2%nsoil
762 gfile%ntrac=meta2%ntrac
763 gfile%jcap=meta2%jcap
764 gfile%ncldt=meta2%ncldt
765 gfile%idvc=meta2%idvc
766 gfile%idsl=meta2%idsl
767 gfile%idvm=meta2%idvm
768 gfile%idrt=meta2%idrt
769 gfile%rlon_min=meta2%rlon_min
770 gfile%rlon_max=meta2%rlon_max
771 gfile%rlat_min=meta2%rlat_min
772 gfile%rlat_max=meta2%rlat_max
773 gfile%extrameta=meta2%extrameta
774 gfile%fieldsize=(gfile%dimx+2*gfile%nframe)*(gfile%dimy+2*gfile%nframe)
780 call nemsio_almeta(gfile,ios)
781 if ( ios .ne. 0 )
then
789 if(gfile%nmeta-2>0)
then
791 iread=len(gfile%recname)*
size(gfile%recname)
792 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%recname)
793 if(nread.lt.iread)
then
794 iread=nemsio_charkind8*
size(gfile%recname)
795 allocate(char8var(
size(gfile%recname)))
796 call bafrreadl(gfile%flunit,iskip,iread,nread,char8var)
797 gfile%recname=char8var
799 if (nread.lt.iread)
return
802 gfile%tlmeta=gfile%tlmeta+nread
805 if (gfile%nmeta-3>0 )
then
808 iread=len(gfile%reclevtyp)*
size(gfile%reclevtyp)
809 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%reclevtyp)
810 if(nread.lt.iread)
return
812 gfile%tlmeta=gfile%tlmeta+nread
815 if (gfile%nmeta-4 >0 )
then
818 iread=kind(gfile%reclev)*
size(gfile%reclev)
819 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%reclev)
820 if(nread.lt.iread)
return
821 if(gfile%do_byteswap)
call byteswap(gfile%reclev,nemsio_intkind,
size(gfile%reclev))
823 gfile%tlmeta=gfile%tlmeta+nread
826 if (gfile%nmeta-5 >0 )
then
829 iread=kind(gfile%vcoord)*
size(gfile%vcoord)
830 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%vcoord)
831 if(nread.lt.iread)
return
832 if(gfile%do_byteswap)
call byteswap(gfile%vcoord,nemsio_realkind,
size(gfile%vcoord))
834 gfile%tlmeta=gfile%tlmeta+nread
837 if ( gfile%nmeta-6>0 )
then
840 iread=kind(gfile%lat)*
size(gfile%lat)
841 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%lat)
842 if(nread.lt.iread)
return
843 if(gfile%do_byteswap)
call byteswap(gfile%lat,nemsio_realkind,
size(gfile%lat))
845 gfile%tlmetalat=gfile%tlmeta
846 gfile%tlmeta=gfile%tlmeta+nread
849 if ( gfile%nmeta-7>0 )
then
852 iread=kind(gfile%lon)*
size(gfile%lon)
853 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%lon)
854 if(nread.lt.iread)
return
855 if(gfile%do_byteswap)
call byteswap(gfile%lon,nemsio_realkind,
size(gfile%lon))
857 gfile%tlmetalon=gfile%tlmeta
858 gfile%tlmeta=gfile%tlmeta+nread
861 if ( gfile%nmeta-8>0 )
then
864 iread=kind(gfile%dx)*
size(gfile%dx)
865 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%dx)
866 if(nread.lt.iread)
return
867 if(gfile%do_byteswap)
call byteswap(gfile%dx,nemsio_realkind,
size(gfile%dx))
869 gfile%tlmetadx=gfile%tlmeta
870 gfile%tlmeta=gfile%tlmeta+nread
873 if ( gfile%nmeta-9>0 )
then
876 iread=kind(gfile%dy)*
size(gfile%dy)
877 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%dy)
878 if(nread.lt.iread)
return
879 if(gfile%do_byteswap)
call byteswap(gfile%dy,nemsio_realkind,
size(gfile%dy))
881 gfile%tlmetady=gfile%tlmeta
882 gfile%tlmeta=gfile%tlmeta+nread
885 if ( gfile%nmeta-10>0 )
then
888 iread=kind(gfile%cpi)*
size(gfile%Cpi)
889 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%Cpi)
890 if(nread.lt.iread)
return
891 if(gfile%do_byteswap)
call byteswap(gfile%Cpi,nemsio_realkind,
size(gfile%Cpi))
893 gfile%tlmeta=gfile%tlmeta+nread
896 if ( gfile%nmeta-11>0 )
then
899 iread=kind(gfile%ri)*
size(gfile%Ri)
900 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%Ri)
901 if(nread.lt.iread)
return
902 if(gfile%do_byteswap)
call byteswap(gfile%Ri,nemsio_realkind,
size(gfile%Ri))
904 gfile%tlmeta=gfile%tlmeta+nread
912 if(gfile%extrameta)
then
918 call bafrreadl(gfile%flunit,iskip,iread,nread,meta3)
919 if(nread.lt.iread)
then
921 iread=nemsio_lmeta3-8
922 call bafrreadl(gfile%flunit,iskip,iread,nread,meta3)
923 if(nread.lt.iread)
return
924 if(gfile%do_byteswap)
call byteswap(meta3%nmetavari,nemsio_intkind,8)
926 if(gfile%do_byteswap)
call byteswap(meta3%nmetavari,nemsio_intkind,10)
927 gfile%nmetavarr8=meta3%nmetavarr8
928 gfile%nmetaaryr8=meta3%nmetaaryr8
930 gfile%tlmeta=gfile%tlmeta+nread
932 gfile%nmetavari=meta3%nmetavari
933 gfile%nmetavarr=meta3%nmetavarr
934 gfile%nmetavarl=meta3%nmetavarl
935 gfile%nmetavarc=meta3%nmetavarc
936 gfile%nmetaaryi=meta3%nmetaaryi
937 gfile%nmetaaryr=meta3%nmetaaryr
938 gfile%nmetaaryl=meta3%nmetaaryl
939 gfile%nmetaaryc=meta3%nmetaaryc
944 call nemsio_alextrameta(gfile,ios)
945 if ( ios .ne. 0 )
then
951 if (gfile%nmetavari.gt.0)
then
953 iread=len(gfile%variname)*gfile%nmetavari
954 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%variname)
956 if(nread.lt.iread)
then
957 iread=nemsio_charkind8*gfile%nmetavari
958 allocate(char8var(gfile%nmetavari))
959 call bafrreadl(gfile%flunit,iskip,iread,nread,char8var)
960 gfile%variname=char8var
963 if (nread.lt.iread)
return
965 gfile%tlmeta=gfile%tlmeta+nread
968 iread=nemsio_intkind*gfile%nmetavari
969 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%varival)
970 if(nread.lt.iread)
return
971 if(gfile%do_byteswap)
call byteswap(gfile%varival,nemsio_intkind,
size(gfile%varival))
972 gfile%tlmetavarival=gfile%tlmeta
973 gfile%tlmeta=gfile%tlmeta+nread
977 if (gfile%nmetavarr.gt.0)
then
979 iread=len(gfile%varrname)*gfile%nmetavarr
980 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%varrname)
982 if(nread.lt.iread)
then
983 iread=nemsio_charkind8*gfile%nmetavarr
984 allocate(char8var(gfile%nmetavarr))
985 call bafrreadl(gfile%flunit,iskip,iread,nread,char8var)
986 gfile%varrname=char8var
988 if (nread.lt.iread)
return
990 gfile%tlmeta=gfile%tlmeta+nread
993 iread=kind(gfile%varrval)*gfile%nmetavarr
994 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%varrval)
995 if(nread.lt.iread)
return
996 if(gfile%do_byteswap)
call byteswap(gfile%varrval,nemsio_realkind,
size(gfile%varrval))
997 gfile%tlmeta=gfile%tlmeta+nread
1001 if (gfile%nmetavarl.gt.0)
then
1003 iread=len(gfile%varlname)*gfile%nmetavarl
1004 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%varlname)
1005 if(nread.lt.iread)
then
1006 iread=nemsio_charkind8*gfile%nmetavarl
1007 allocate(char8var(gfile%nmetavarl))
1008 call bafrreadl(gfile%flunit,iskip,iread,nread,char8var)
1009 gfile%varlname=char8var
1010 deallocate(char8var)
1011 if (nread.lt.iread)
return
1013 gfile%tlmeta=gfile%tlmeta+nread
1016 iread=nemsio_logickind*gfile%nmetavarl
1017 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%varlval)
1018 if(nread.lt.iread)
return
1019 if(gfile%do_byteswap)
call byteswap(gfile%varlval,nemsio_logickind,
size(gfile%varlval))
1020 gfile%tlmeta=gfile%tlmeta+nread
1023 if (gfile%nmetavarc.gt.0)
then
1025 iread=len(gfile%varcname)*gfile%nmetavarc
1026 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%varcname)
1027 if(nread.lt.iread)
then
1028 iread=nemsio_charkind8*gfile%nmetavarc
1029 allocate(char8var(gfile%nmetavarc))
1030 call bafrreadl(gfile%flunit,iskip,iread,nread,char8var)
1031 gfile%varcname=char8var
1032 deallocate(char8var)
1033 if (nread.lt.iread)
return
1035 gfile%tlmeta=gfile%tlmeta+nread
1037 iread=len(gfile%varcval)*gfile%nmetavarc
1038 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%varcval)
1039 if(nread.lt.iread)
return
1040 gfile%tlmeta=gfile%tlmeta+nread
1043 if (gfile%nmetavarr8.gt.0)
then
1045 iread=len(gfile%varr8name)*gfile%nmetavarr8
1046 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%varr8name)
1047 if(nread.lt.iread)
then
1048 iread=nemsio_charkind8*gfile%nmetavarr8
1049 allocate(char8var(gfile%nmetavarr8))
1050 call bafrreadl(gfile%flunit,iskip,iread,nread,char8var)
1051 gfile%varr8name=char8var
1052 deallocate(char8var)
1053 if (nread.lt.iread)
return
1055 gfile%tlmeta=gfile%tlmeta+nread
1057 iread=kind(gfile%varr8val)*gfile%nmetavarr8
1058 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%varr8val)
1059 if(nread.lt.iread)
return
1060 if(gfile%do_byteswap)
call byteswap(gfile%varr8val,nemsio_dblekind,
size(gfile%varr8val))
1061 gfile%tlmeta=gfile%tlmeta+nread
1065 if (gfile%nmetaaryi.gt.0)
then
1067 iread=len(gfile%aryiname)*gfile%nmetaaryi
1068 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%aryiname)
1069 if(nread.lt.iread)
then
1070 iread=nemsio_charkind8*gfile%nmetaaryi
1071 allocate(char8var(gfile%nmetaaryi))
1072 call bafrreadl(gfile%flunit,iskip,iread,nread,char8var)
1073 gfile%aryiname=char8var
1074 deallocate(char8var)
1075 if (nread.lt.iread)
return
1077 gfile%tlmeta=gfile%tlmeta+nread
1080 iread=kind(gfile%nmetaaryi)*gfile%nmetaaryi
1081 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%aryilen)
1082 if(nread.lt.iread)
return
1083 if(gfile%do_byteswap)
call byteswap(gfile%aryilen,nemsio_intkind,
size(gfile%aryilen))
1084 gfile%tlmeta=gfile%tlmeta+nread
1085 gfile%tlmetaaryival=gfile%tlmeta
1087 allocate(gfile%aryival(maxval(gfile%aryilen),gfile%nmetaaryi))
1088 do i=1,gfile%nmetaaryi
1090 iread=kind(gfile%aryival)*gfile%aryilen(i)
1091 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%aryival(:,i))
1092 if(nread.lt.iread)
return
1093 if(gfile%do_byteswap)
call byteswap(gfile%aryival(:,i),nemsio_intkind,gfile%aryilen(i))
1094 gfile%tlmeta=gfile%tlmeta+nread
1100 if (gfile%nmetaaryr.gt.0)
then
1102 iread=len(gfile%aryrname)*gfile%nmetaaryr
1103 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%aryrname)
1104 if(nread.lt.iread)
then
1105 iread=nemsio_charkind8*gfile%nmetaaryr
1106 allocate(char8var(gfile%nmetaaryr))
1107 call bafrreadl(gfile%flunit,iskip,iread,nread,char8var)
1108 gfile%aryrname=char8var
1109 deallocate(char8var)
1110 if (nread.lt.iread)
return
1112 gfile%tlmeta=gfile%tlmeta+nread
1114 iread=kind(gfile%aryrlen)*gfile%nmetaaryr
1115 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%aryrlen)
1116 if(nread.lt.iread)
return
1117 if(gfile%do_byteswap)
call byteswap(gfile%aryrlen,nemsio_intkind,
size(gfile%aryrlen))
1118 gfile%tlmeta=gfile%tlmeta+nread
1119 allocate(gfile%aryrval(maxval(gfile%aryrlen),gfile%nmetaaryr) )
1120 do i=1,gfile%nmetaaryr
1122 iread=kind(gfile%aryrval)*gfile%aryrlen(i)
1123 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%aryrval(:,i))
1124 if(nread.lt.iread)
return
1125 if(gfile%do_byteswap)
call byteswap(gfile%aryrval(:,i),nemsio_realkind,gfile%aryrlen(i))
1126 gfile%tlmeta=gfile%tlmeta+nread
1130 if (gfile%nmetaaryl.gt.0)
then
1132 iread=len(gfile%arylname)*gfile%nmetaaryl
1133 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%arylname)
1134 if(nread.lt.iread)
then
1135 iread=nemsio_charkind8*gfile%nmetaaryl
1136 allocate(char8var(gfile%nmetaaryl))
1137 call bafrreadl(gfile%flunit,iskip,iread,nread,char8var)
1138 gfile%arylname=char8var
1139 deallocate(char8var)
1140 if (nread.lt.iread)
return
1142 gfile%tlmeta=gfile%tlmeta+nread
1144 iread=kind(gfile%aryllen)*gfile%nmetaaryl
1145 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%aryllen)
1146 if(nread.lt.iread)
return
1147 if(gfile%do_byteswap)
call byteswap(gfile%aryllen,nemsio_intkind,
size(gfile%aryllen))
1148 gfile%tlmeta=gfile%tlmeta+nread
1149 allocate(gfile%arylval(maxval(gfile%aryllen),gfile%nmetaaryl) )
1150 do i=1,gfile%nmetaaryl
1152 iread=kind(gfile%arylval)*gfile%aryllen(i)
1153 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%arylval(:,i))
1154 if(nread.lt.iread)
return
1155 if(gfile%do_byteswap)
call byteswap(gfile%arylval(:,i),nemsio_logickind,gfile%aryllen(i))
1156 gfile%tlmeta=gfile%tlmeta+nread
1160 if (gfile%nmetaaryc.gt.0)
then
1162 iread=len(gfile%arycname)*gfile%nmetaaryc
1163 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%arycname)
1164 if(nread.lt.iread)
then
1165 iread=nemsio_charkind8*gfile%nmetaaryc
1166 allocate(char8var(gfile%nmetaaryc))
1167 call bafrreadl(gfile%flunit,iskip,iread,nread,char8var)
1168 gfile%arycname=char8var
1169 deallocate(char8var)
1170 if (nread.lt.iread)
return
1172 gfile%tlmeta=gfile%tlmeta+nread
1174 iread=kind(gfile%aryclen)*gfile%nmetaaryc
1175 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%aryclen)
1176 if(nread.lt.iread)
return
1177 if(gfile%do_byteswap)
call byteswap(gfile%aryclen,nemsio_intkind,
size(gfile%aryclen))
1178 gfile%tlmeta=gfile%tlmeta+nread
1179 allocate(gfile%arycval(maxval(gfile%aryclen),gfile%nmetaaryc) )
1180 do i=1,gfile%nmetaaryc
1182 iread=len(gfile%arycval)*gfile%aryclen(i)
1183 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%arycval(:,i))
1184 if(nread.lt.iread)
return
1185 gfile%tlmeta=gfile%tlmeta+nread
1189 if (gfile%nmetaaryr8.gt.0)
then
1191 iread=len(gfile%aryr8name)*gfile%nmetaaryr8
1192 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%aryr8name)
1193 if(nread.lt.iread)
then
1194 iread=nemsio_charkind8*gfile%nmetaaryr8
1195 allocate(char8var(gfile%nmetaaryr8))
1196 call bafrreadl(gfile%flunit,iskip,iread,nread,char8var)
1197 gfile%aryr8name=char8var
1198 deallocate(char8var)
1199 if (nread.lt.iread)
return
1201 gfile%tlmeta=gfile%tlmeta+nread
1203 iread=kind(gfile%aryr8len)*gfile%nmetaaryr8
1204 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%aryr8len)
1205 if(nread.lt.iread)
return
1206 if(gfile%do_byteswap)
call byteswap(gfile%aryr8len,nemsio_intkind,
size(gfile%aryr8len))
1207 gfile%tlmeta=gfile%tlmeta+nread
1208 allocate(gfile%aryr8val(maxval(gfile%aryr8len),gfile%nmetaaryr8) )
1209 do i=1,gfile%nmetaaryr8
1211 iread=kind(gfile%aryr8val)*gfile%aryr8len(i)
1212 call bafrreadl(gfile%flunit,iskip,iread,nread,gfile%aryr8val(:,i))
1213 if(nread.lt.iread)
return
1214 if(gfile%do_byteswap)
call byteswap(gfile%aryr8val(:,i),nemsio_dblekind,gfile%aryr8len(i))
1215 gfile%tlmeta=gfile%tlmeta+nread
1224 end subroutine nemsio_rcreate
1226 subroutine nemsio_wcreate(gfile,gfname,gaction,iret,gdatatype,version, &
1227 nmeta,lmeta,modelname,nrec,idate,nfday, &
1228 nfhour,nfminute,nfsecondn,nfsecondd, &
1229 dimx,dimy,dimz,nframe,nsoil,ntrac,jcap,ncldt,idvc,idsl,idvm,idrt, &
1230 rlon_min,rlon_max,rlat_min,rlat_max,extrameta, &
1231 nmetavari,nmetavarr,nmetavarl,nmetavarc,nmetavarr8, &
1232 nmetaaryi,nmetaaryr,nmetaaryl,nmetaaryc,nmetaaryr8, &
1233 recname,reclevtyp,reclev,vcoord,lat,lon,dx,dy,cpi,ri, &
1234 variname,varival,varrname,varrval,varlname,varlval,varcname,varcval, &
1235 varr8name,varr8val, &
1236 aryiname,aryilen,aryival,aryrname,aryrlen,aryrval, &
1237 arylname,aryllen,arylval,arycname,aryclen,arycval, &
1238 aryr8name,aryr8len,aryr8val )
1243 type(nemsio_gfile),
intent(inout) :: gfile
1244 character*(*),
intent(in) :: gfname
1245 character*(*),
intent(in) :: gaction
1246 integer(nemsio_intkind),
intent(out) :: iret
1248 character*(*),
optional,
intent(in) :: gdatatype,modelname
1249 integer(nemsio_intkind),
optional,
intent(in) :: version,nmeta,lmeta,nrec
1250 integer(nemsio_intkind),
optional,
intent(in) :: idate(7),nfday,nfhour, &
1251 nfminute,nfsecondn,nfsecondd
1252 integer(nemsio_intkind),
optional,
intent(in) :: dimx,dimy,dimz,nframe, &
1254 integer(nemsio_intkind),
optional,
intent(in) :: jcap,ncldt,idvc,idsl, &
1256 real(nemsio_realkind),
optional,
intent(in) :: rlat_min,rlat_max, &
1258 logical(nemsio_logickind),
optional,
intent(in):: extrameta
1259 integer(nemsio_intkind),
optional,
intent(in) :: nmetavari,nmetavarr, &
1260 nmetavarl,nmetavarc,nmetaaryi,nmetaaryr,nmetaaryl,nmetaaryc, &
1261 nmetavarr8,nmetaaryr8
1263 character*(*),
optional,
intent(in) :: recname(:),reclevtyp(:)
1264 integer(nemsio_intkind),
optional,
intent(in) :: reclev(:)
1265 real(nemsio_realkind),
optional,
intent(in) :: vcoord(:,:,:)
1266 real(nemsio_realkind),
optional,
intent(in) :: lat(:),lon(:)
1267 real(nemsio_realkind),
optional,
intent(in) :: dx(:),dy(:)
1268 real(nemsio_realkind),
optional,
intent(in) :: Cpi(:),Ri(:)
1270 character*(*),
optional,
intent(in) :: variname(:),varrname(:),&
1271 varlname(:),varcname(:),varr8name(:),aryiname(:),aryrname(:), &
1272 arylname(:),arycname(:),aryr8name(:)
1273 integer(nemsio_intkind),
optional,
intent(in) :: aryilen(:),aryrlen(:), &
1274 aryllen(:),aryclen(:),aryr8len(:)
1275 integer(nemsio_intkind),
optional,
intent(in) :: varival(:),aryival(:,:)
1276 real(nemsio_realkind),
optional,
intent(in) :: varrval(:),aryrval(:,:)
1277 real(nemsio_dblekind),
optional,
intent(in) :: varr8val(:),aryr8val(:,:)
1278 logical(nemsio_logickind),
optional,
intent(in):: varlval(:),arylval(:,:)
1279 character(*),
optional,
intent(in) :: varcval(:),arycval(:,:)
1283 real(nemsio_realkind) :: radi
1284 integer(nemsio_intkind8) :: iskip,iwrite,nwrite
1285 type(nemsio_meta1) :: meta1
1286 type(nemsio_meta2) :: meta2
1287 type(nemsio_meta3) :: meta3
1288 integer(nemsio_intkind) :: i,n,ios,nummeta
1289 logical :: linit,ltlendian
1290 character(nemsio_charkind8) :: tmpgdatatype
1296 gfile%file_endian=
'big_endian'
1297 if(
present(gdatatype))
then
1298 if ( trim(gdatatype(1:4)).ne.
'grib'.and.gdatatype(1:3).ne.
'bin'.and. &
1299 trim(gdatatype).ne.
'')
return
1300 gfile%gdatatype=gdatatype
1301 if(trim(gfile%gdatatype(6:7))==
'be')
then
1302 gfile%file_endian=
'big_endian'
1303 elseif(trim(gfile%gdatatype(6:7))==
'le')
then
1304 gfile%file_endian=
'little_endian'
1306 elseif(trim(gfile%gdatatype).eq.
'')
then
1307 gfile%gdatatype=
'grib'
1309 tmpgdatatype=gfile%gdatatype
1311 if(gfile%file_endian==
'little_endian')
then
1313 call nemsio_close(gfile,iret=iret)
1315 gfile%file_endian=
'little_endian'
1316 gfile%gdatatype=tmpgdatatype
1318 gfile%gaction=gaction
1320 call nemsio_getlu(gfile,gfname,gaction,iret,ltlendian=ltlendian)
1321 call baopenwt(gfile%flunit,gfname,ios)
1322 if(ios/=0) print *,
'Cant open file ',trim(gfile%gfname)
1329 gfile%do_byteswap=.false.
1330 if(trim(machine_endian)/=trim(gfile%file_endian)) gfile%do_byteswap=.true.
1331 gfile%gtype=
"NEMSIO"
1332 if(
present(modelname))
then
1333 gfile%modelname=modelname
1334 elseif(trim(gfile%gdatatype).eq.
'')
then
1335 gfile%modelname=
"GFS"
1337 if(
present(version)) gfile%version=version
1338 if(
present(dimx)) gfile%dimx=dimx
1339 if(
present(dimy)) gfile%dimy=dimy
1340 if(
present(dimz)) gfile%dimz=dimz
1341 if(
present(nrec)) gfile%nrec=nrec
1342 if(
present(nmeta)) gfile%nmeta=nmeta
1343 if(gfile%nmeta==nemsio_intfill) gfile%nmeta=12
1344 if(
present(lmeta)) gfile%lmeta=lmeta
1345 if(gfile%lmeta==nemsio_intfill) &
1346 gfile%lmeta=25*nemsio_intkind+4*nemsio_realkind+nemsio_logickind
1347 if(
present(nsoil)) gfile%nsoil=nsoil
1348 if(gfile%nsoil.eq.nemsio_intfill) gfile%nsoil=4
1349 if(
present(idrt)) gfile%idrt=idrt
1350 if(
present(nframe)) gfile%nframe=nframe
1351 if(gfile%nframe.eq.nemsio_intfill) gfile%nframe=0
1352 if(equal_str_nocase(trim(gfile%modelname),
'GFS'))gfile%nframe=0
1353 if(
present(idate)) gfile%idate=idate
1354 if ( gfile%idate(1) .lt. 50)
then
1355 gfile%idate(1)=2000+gfile%idate(1)
1356 else if (gfile%idate(1) .lt. 100)
then
1357 gfile%idate(1)=1999+gfile%idate(1)
1359 if ( gfile%idate(1).eq.nemsio_intfill)
then
1360 print *,
'idate=',gfile%idate,
' ERROR: please provide idate(1:7)(yyyy/mm/dd/hh/min/secn/secd)!!!'
1364 if ( gfile%gtype(1:6).eq.
"NEMSIO" )
then
1365 call nemsio_gfinit(gfile,ios,recname=recname,reclevtyp=reclevtyp,reclev=reclev)
1366 if (ios .ne.0 )
then
1376 if(
present(nfday)) gfile%nfday=nfday
1377 if(
present(nfhour)) gfile%nfhour=nfhour
1378 if(
present(nfminute)) gfile%nfminute=nfminute
1379 if(
present(nfsecondn)) gfile%nfsecondn=nfsecondn
1380 if(
present(nfsecondd)) gfile%nfsecondd=nfsecondd
1381 if(
present(ntrac)) gfile%ntrac=ntrac
1382 if(gfile%ntrac.eq.nemsio_intfill) gfile%ntrac=0
1383 if(
present(ncldt)) gfile%ncldt=ncldt
1384 if(
present(jcap)) gfile%jcap=jcap
1385 if(
present(idvc)) gfile%idvc=idvc
1386 if(
present(idsl)) gfile%idsl=idsl
1387 if(
present(idvm)) gfile%idvm=idvm
1388 if(
present(rlon_min)) gfile%rlon_min=rlon_min
1389 if(
present(rlon_max)) gfile%rlon_max=rlon_max
1390 if(
present(rlat_min)) gfile%rlat_min=rlat_min
1391 if(
present(rlat_max)) gfile%rlat_max=rlat_max
1392 if(
present(extrameta)) gfile%extrameta=extrameta
1393 if(gfile%fieldsize.eq.nemsio_intfill) &
1394 gfile%fieldsize=(gfile%dimx+2*gfile%nframe)*(gfile%dimy+2*gfile%nframe)
1396 if( gfile%extrameta )
then
1397 if(
present(nmetavari).and.
present(variname).and.
present(varival))
then
1398 if(nmetavari.gt.0 .and.
size(variname).eq.nmetavari .and. &
1399 size(varival).eq.nmetavari)
then
1400 gfile%nmetavari=nmetavari
1401 if(
allocated(gfile%variname))
deallocate(gfile%variname)
1402 if(
allocated(gfile%varival))
deallocate(gfile%varival)
1403 allocate(gfile%variname(nmetavari),gfile%varival(nmetavari))
1404 gfile%variname=variname
1405 gfile%varival=varival
1408 if(
present(nmetavarr).and.
present(varrname).and.
present(varrval))
then
1409 if( nmetavarr.gt.0.and.
size(varrname).eq.nmetavarr .and. &
1410 size(varrval).eq.nmetavarr)
then
1411 gfile%nmetavarr=nmetavarr
1412 if(
allocated(gfile%varrname))
deallocate(gfile%varrname)
1413 if(
allocated(gfile%varrval))
deallocate(gfile%varrval)
1414 allocate(gfile%varrname(nmetavarr),gfile%varrval(nmetavarr))
1415 gfile%varrname=varrname
1416 gfile%varrval=varrval
1419 if(
present(nmetavarl).and.
present(varlname).and.
present(varlval))
then
1420 if( nmetavarl.gt.0.and.
size(varlname).eq.nmetavarl .and. &
1421 size(varlval).eq.nmetavarl)
then
1422 gfile%nmetavarl=nmetavarl
1423 if(
allocated(gfile%varlname))
deallocate(gfile%varlname)
1424 if(
allocated(gfile%varlval))
deallocate(gfile%varlval)
1425 allocate(gfile%varlname(nmetavarl),gfile%varlval(nmetavarl))
1426 gfile%varlname=varlname
1427 gfile%varlval=varlval
1430 if(
present(nmetavarc).and.
present(varcname).and.
present(varcval))
then
1431 if( nmetavarc.gt.0.and.
size(varcname).eq.nmetavarc .and. &
1432 size(varcval).eq.nmetavarc)
then
1433 gfile%nmetavarc=nmetavarc
1434 if(
allocated(gfile%varcname))
deallocate(gfile%varcname)
1435 if(
allocated(gfile%varcval))
deallocate(gfile%varcval)
1436 allocate(gfile%varcname(nmetavarc),gfile%varcval(nmetavarc))
1437 gfile%varcname=varcname
1438 gfile%varcval=varcval
1441 if(
present(nmetavarr8).and.
present(varr8name).and.
present(varr8val))
then
1442 if( nmetavarr8.gt.0.and.
size(varr8name).eq.nmetavarr8 .and. &
1443 size(varr8val).eq.nmetavarr8)
then
1444 gfile%nmetavarr8=nmetavarr8
1445 if(
allocated(gfile%varr8name))
deallocate(gfile%varr8name)
1446 if(
allocated(gfile%varr8val))
deallocate(gfile%varr8val)
1447 allocate(gfile%varr8name(nmetavarr8),gfile%varr8val(nmetavarr8))
1448 gfile%varr8name=varr8name
1449 gfile%varr8val=varr8val
1452 if(
present(nmetaaryi).and.
present(aryiname).and.
present(aryilen))
then
1453 if( nmetaaryi.gt.0.and.
size(aryiname).eq.nmetaaryi .and. &
1454 size(aryilen).eq.nmetaaryi)
then
1455 gfile%nmetaaryi=nmetaaryi
1456 if(
allocated(gfile%aryiname))
deallocate(gfile%aryiname)
1457 if(
allocated(gfile%aryilen))
deallocate(gfile%aryilen)
1458 allocate(gfile%aryiname(nmetaaryi),gfile%aryilen(nmetaaryi))
1459 gfile%aryiname=aryiname
1460 gfile%aryilen=aryilen
1461 if(
present(aryival))
then
1462 if(
size(aryival).eq.nmetaaryi*maxval(gfile%aryilen) )
then
1463 if(
allocated(gfile%aryival))
deallocate(gfile%aryival)
1464 allocate(gfile%aryival(maxval(gfile%aryilen),nmetaaryi))
1465 gfile%aryival=aryival
1470 if(
present(nmetaaryr).and.
present(aryrname).and.
present(aryrlen))
then
1471 if( nmetaaryr.gt.0.and.
size(aryrname).eq.nmetaaryr .and. &
1472 size(aryrlen).eq.nmetaaryr)
then
1473 gfile%nmetaaryr=nmetaaryr
1474 if(
allocated(gfile%aryrname))
deallocate(gfile%aryrname)
1475 if(
allocated(gfile%aryrlen))
deallocate(gfile%aryrlen)
1476 allocate(gfile%aryrname(nmetaaryr),gfile%aryrlen(nmetaaryr))
1477 gfile%aryrname=aryrname
1478 gfile%aryrlen=aryrlen
1479 if(
present(aryrval) )
then
1480 if(
size(aryrval).eq.nmetaaryr*maxval(gfile%aryrlen))
then
1481 if(
allocated(gfile%aryrval))
deallocate(gfile%aryrval)
1482 allocate(gfile%aryrval(maxval(gfile%aryrlen),nmetaaryr))
1483 gfile%aryrval=aryrval
1488 if(
present(nmetaaryl).and.
present(arylname).and.
present(aryllen))
then
1489 if( nmetaaryl.gt.0 .and.
size(arylname).eq.nmetaaryl .and. &
1490 size(aryllen).eq.nmetaaryl)
then
1491 gfile%nmetaaryl=nmetaaryl
1492 if(
allocated(gfile%arylname))
deallocate(gfile%arylname)
1493 if(
allocated(gfile%aryllen))
deallocate(gfile%aryllen)
1494 allocate(gfile%arylname(nmetaaryl),gfile%aryllen(nmetaaryl))
1495 gfile%arylname=arylname
1496 gfile%aryllen=aryllen
1497 if(
present(arylval))
then
1498 if(
size(arylval).eq.nmetaaryl*maxval(gfile%aryllen))
then
1499 if(
allocated(gfile%arylval))
deallocate(gfile%arylval)
1500 allocate(gfile%arylval(maxval(gfile%aryllen),nmetaaryl))
1501 gfile%arylval=arylval
1506 if(
present(nmetaaryc).and.
present(arycname).and.
present(aryclen))
then
1507 if( nmetaaryc.gt.0 .and.
size(arycname).eq.nmetaaryc .and. &
1508 size(aryclen).eq.nmetaaryc)
then
1509 gfile%nmetaaryc=nmetaaryc
1510 if(
allocated(gfile%arycname))
deallocate(gfile%arycname)
1511 if(
allocated(gfile%aryclen))
deallocate(gfile%aryclen)
1512 allocate(gfile%arycname(nmetaaryc),gfile%aryclen(nmetaaryc))
1513 gfile%arycname=arycname
1514 gfile%aryclen=aryclen
1515 if(
present(arycval))
then
1516 if(
size(arycval).eq.nmetaaryc*maxval(gfile%aryclen))
then
1517 if(
allocated(gfile%arycval))
deallocate(gfile%arycval)
1518 allocate(gfile%arycval(maxval(gfile%aryclen),nmetaaryc))
1519 gfile%arycval=arycval
1524 if(
present(nmetaaryr8).and.
present(aryr8name).and.
present(aryr8len))
then
1525 if( nmetaaryr8.gt.0.and.
size(aryr8name).eq.nmetaaryr8 .and. &
1526 size(aryr8len).eq.nmetaaryr8)
then
1527 gfile%nmetaaryr8=nmetaaryr8
1528 if(
allocated(gfile%aryr8name))
deallocate(gfile%aryr8name)
1529 if(
allocated(gfile%aryr8len))
deallocate(gfile%aryr8len)
1530 allocate(gfile%aryr8name(nmetaaryr8),gfile%aryr8len(nmetaaryr8))
1531 gfile%aryr8name=aryr8name
1532 gfile%aryr8len=aryr8len
1533 if(
present(aryr8val) )
then
1534 if(
size(aryr8val).eq.nmetaaryr8*maxval(gfile%aryr8len))
then
1535 if(
allocated(gfile%aryr8val))
deallocate(gfile%aryr8val)
1536 allocate(gfile%aryr8val(maxval(gfile%aryr8len),nmetaaryr8))
1537 gfile%aryr8val=aryr8val
1542 if (gfile%nmetavari+gfile%nmetavarr+gfile%nmetavarl+gfile%nmetavarc+ &
1543 gfile%nmetaaryi+gfile%nmetaaryr+gfile%nmetaaryl+gfile%nmetaaryc+ &
1544 gfile%nmetavarr8+gfile%nmetaaryr8 .lt.10*nemsio_intfill )
then
1545 print *,
'ERROR: gfile%extrameta is not compatiable with input extra meta!'
1552 call nemsio_chkgfary(gfile,ios)
1562 if(
present(recname) )
then
1563 if (gfile%nrec.eq.
size(recname))
then
1564 gfile%recname=recname
1566 print *,
'ERROR: the size of recname is not equal to the total number of the fields in the file!'
1571 if(
present(reclevtyp))
then
1572 if (gfile%nrec.eq.
size(reclevtyp))
then
1573 gfile%reclevtyp=reclevtyp
1575 print *,
'ERROR: the size of reclevtyp is not equal to the total number of the fields in the file!'
1580 if(
present(reclev) )
then
1581 if (gfile%nrec.eq.
size(reclev))
then
1584 print *,
'ERROR: the size of reclev is not equal to the total number of the fields in the file!'
1590 if(
present(vcoord) )
then
1591 if ((gfile%dimz+1)*3*2.eq.
size(vcoord))
then
1594 print *,
'ERROR: the size of vcoord is not (lm+1,3,2) !'
1599 if(
present(lat) )
then
1601 if (gfile%fieldsize.eq.
size(lat))
then
1602 if(.not.(all(lat==0.))) gfile%lat=lat
1604 print *,
'ERROR: the input size(lat) ',
size(lat),
' is not equal to: ',gfile%fieldsize
1608 if(
allocated(gfile%lat))
then
1609 gfile%rlat_max=maxval(gfile%lat)
1610 gfile%rlat_min=minval(gfile%lat)
1613 if(
present(lon) )
then
1614 if (gfile%fieldsize.eq.
size(lon))
then
1615 if(.not.(all(lon==0.)) ) gfile%lon=lon
1617 print *,
'ERROR: the input size(lon) ',
size(lon),
' is not equal to: ',gfile%fieldsize
1621 if(
allocated(gfile%lon))
then
1622 gfile%rlon_max=maxval(gfile%lon)
1623 gfile%rlon_min=minval(gfile%lon)
1626 if(
present(dx) )
then
1628 if (gfile%fieldsize.eq.
size(dx))
then
1629 if(.not.(all(dx==0.)) ) gfile%dx=dx
1631 print *,
'ERROR: the input size(dx) ',
size(dx),
' is not equal to: ',gfile%fieldsize
1636 if(
present(dy) )
then
1637 if (gfile%fieldsize.eq.
size(dy))
then
1638 if(.not.(all(dy==0.)) ) gfile%dy=dy
1640 print *,
'ERROR: the input size(dy) ',
size(dy),
' is not equal to: ',gfile%fieldsize
1645 if(
present(cpi) )
then
1646 if (gfile%ntrac+1.eq.
size(gfile%Cpi))
then
1647 if(.not.(all(cpi==0.))) gfile%Cpi = cpi
1649 print *,
'ERROR: the input size(cpi) ',
size(cpi),
' is not equal to: ',gfile%ntrac+1
1655 if(
present(ri) )
then
1656 if (gfile%ntrac+1.eq.
size(gfile%Ri))
then
1657 if(.not.(all(ri==0.))) gfile%Ri = ri
1659 print *,
'ERROR: the input size(ri) ',
size(ri),
' is not equal to: ',gfile%ntrac+1
1667 meta1%gtype=gfile%gtype
1668 meta1%gdatatype=gfile%gdatatype
1669 meta1%modelname=gfile%modelname
1670 meta1%version=gfile%version
1671 meta1%nmeta=gfile%nmeta
1672 meta1%lmeta=gfile%lmeta
1675 iwrite=nemsio_lmeta1
1676 if(gfile%do_byteswap)
call byteswap(meta1%version,nemsio_intkind,6)
1677 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,meta1)
1678 if(nwrite.lt.iwrite)
return
1679 if(gfile%do_byteswap)
call byteswap(meta1%version,nemsio_intkind,6)
1684 meta2%nrec=gfile%nrec
1685 meta2%idate(1:7)=gfile%idate(1:7)
1686 meta2%nfday=gfile%nfday
1687 meta2%nfhour=gfile%nfhour
1688 meta2%nfminute=gfile%nfminute
1689 meta2%nfsecondn=gfile%nfsecondn
1690 meta2%nfsecondd=gfile%nfsecondd
1691 meta2%dimx=gfile%dimx
1692 meta2%dimy=gfile%dimy
1693 meta2%dimz=gfile%dimz
1694 meta2%nframe=gfile%nframe
1695 meta2%nsoil=gfile%nsoil
1696 meta2%ntrac=gfile%ntrac
1697 meta2%jcap=gfile%jcap
1698 meta2%ncldt=gfile%ncldt
1699 meta2%idvc=gfile%idvc
1700 meta2%idsl=gfile%idsl
1701 meta2%idvm=gfile%idvm
1702 meta2%idrt=gfile%idrt
1703 meta2%rlon_min=gfile%rlon_min
1704 meta2%rlon_max=gfile%rlon_max
1705 meta2%rlat_min=gfile%rlat_min
1706 meta2%rlat_max=gfile%rlat_max
1707 meta2%extrameta=gfile%extrameta
1710 if(gfile%do_byteswap)
then
1711 call byteswap(meta2%nrec,nemsio_intkind,25)
1712 call byteswap(meta2%rlon_min,nemsio_realkind,4)
1713 call byteswap(meta2%extrameta,nemsio_logickind,1)
1715 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,meta2)
1716 if(gfile%do_byteswap)
then
1717 call byteswap(meta2%nrec,nemsio_intkind,25)
1718 call byteswap(meta2%rlon_min,nemsio_realkind,4)
1719 call byteswap(meta2%extrameta,nemsio_logickind,1)
1721 if(nwrite.lt.iwrite)
return
1722 gfile%tlmeta=gfile%tlmeta+nwrite
1727 if ( gfile%nmeta-2>0 )
then
1729 iwrite=len(gfile%recname)*
size(gfile%recname)
1730 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%recname)
1731 if(nwrite.lt.iwrite)
return
1732 gfile%tlmeta=gfile%tlmeta+nwrite
1736 if ( gfile%nmeta-3>0 )
then
1738 iwrite=len(gfile%reclevtyp)*
size(gfile%reclevtyp)
1739 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%reclevtyp)
1740 if(nwrite.lt.iwrite)
return
1741 gfile%tlmeta=gfile%tlmeta+nwrite
1745 if ( gfile%nmeta-4>0 )
then
1747 iwrite=kind(gfile%reclev)*
size(gfile%reclev)
1748 if(gfile%do_byteswap)
call byteswap(gfile%reclev,nemsio_intkind,
size(gfile%reclev))
1749 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%reclev)
1750 if(nwrite.lt.iwrite)
return
1751 if(gfile%do_byteswap)
call byteswap(gfile%reclev,nemsio_intkind,
size(gfile%reclev))
1752 gfile%tlmeta=gfile%tlmeta+nwrite
1755 nummeta=gfile%nmeta-5
1756 if ( nummeta.gt.0 )
then
1758 iwrite=kind(gfile%vcoord)*
size(gfile%vcoord)
1759 if(gfile%do_byteswap)
call byteswap(gfile%vcoord,nemsio_realkind,
size(gfile%vcoord))
1760 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%vcoord)
1761 if(gfile%do_byteswap)
call byteswap(gfile%vcoord,nemsio_realkind,
size(gfile%vcoord))
1762 if(nwrite.lt.iwrite)
return
1763 gfile%tlmeta=gfile%tlmeta+nwrite
1769 if ( nummeta.gt.0 )
then
1771 iwrite=kind(gfile%lat)*
size(gfile%lat)
1772 if(gfile%do_byteswap)
call byteswap(gfile%lat,nemsio_realkind,
size(gfile%lat))
1773 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%lat)
1774 if(nwrite.lt.iwrite)
return
1775 if(gfile%do_byteswap)
call byteswap(gfile%lat,nemsio_realkind,
size(gfile%lat))
1776 gfile%tlmetalat=gfile%tlmeta
1777 gfile%tlmeta=gfile%tlmeta+nwrite
1781 if ( nummeta.gt.0 )
then
1783 iwrite=kind(gfile%lon)*
size(gfile%lon)
1784 if(gfile%do_byteswap)
call byteswap(gfile%lon,nemsio_realkind,
size(gfile%lon))
1785 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%lon)
1786 if(nwrite.lt.iwrite)
return
1787 if(gfile%do_byteswap)
call byteswap(gfile%lon,nemsio_realkind,
size(gfile%lon))
1788 gfile%tlmetalon=gfile%tlmeta
1789 gfile%tlmeta=gfile%tlmeta+nwrite
1793 if ( nummeta.gt.0 )
then
1794 if(all(gfile%dx==0.)) gfile%dx=nemsio_realfill
1796 iwrite=kind(gfile%dx)*
size(gfile%dx)
1797 if(gfile%do_byteswap)
call byteswap(gfile%dx,nemsio_realkind,
size(gfile%dx))
1798 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%dx)
1799 if(gfile%do_byteswap)
call byteswap(gfile%dx,nemsio_realkind,
size(gfile%dx))
1800 if(nwrite.lt.iwrite)
return
1801 gfile%tlmetadx=gfile%tlmeta
1802 gfile%tlmeta=gfile%tlmeta+nwrite
1806 if ( nummeta.gt.0 )
then
1807 if(all(gfile%dy==0.)) gfile%dy=nemsio_realfill
1809 iwrite=kind(gfile%dy)*
size(gfile%dy)
1810 if(gfile%do_byteswap)
call byteswap(gfile%dy,nemsio_realkind,
size(gfile%dy))
1811 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%dy)
1812 if(nwrite.lt.iwrite)
return
1813 if(gfile%do_byteswap)
call byteswap(gfile%dy,nemsio_realkind,
size(gfile%dy))
1814 gfile%tlmetady=gfile%tlmeta
1815 gfile%tlmeta=gfile%tlmeta+nwrite
1819 if ( nummeta.gt.0 )
then
1820 if(all(gfile%cpi==0.)) gfile%cpi=nemsio_realfill
1822 iwrite=kind(gfile%Cpi)*
size(gfile%Cpi)
1823 if(gfile%do_byteswap)
call byteswap(gfile%Cpi,nemsio_realkind,
size(gfile%Cpi))
1824 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%Cpi)
1825 if(nwrite.lt.iwrite)
return
1826 if(gfile%do_byteswap)
call byteswap(gfile%Cpi,nemsio_realkind,
size(gfile%Cpi))
1827 gfile%tlmeta=gfile%tlmeta+nwrite
1831 if ( nummeta.gt.0 )
then
1832 if(all(gfile%ri==0.)) gfile%ri=nemsio_realfill
1834 iwrite=kind(gfile%Ri)*
size(gfile%Ri)
1835 if(gfile%do_byteswap)
call byteswap(gfile%Ri,nemsio_realkind,
size(gfile%Ri))
1836 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%Ri)
1837 if(nwrite.lt.iwrite)
return
1838 if(gfile%do_byteswap)
call byteswap(gfile%Ri,nemsio_realkind,
size(gfile%Ri))
1839 gfile%tlmeta=gfile%tlmeta+nwrite
1845 if(gfile%extrameta)
then
1846 meta3%nmetavari=gfile%nmetavari
1847 meta3%nmetavarr=gfile%nmetavarr
1848 meta3%nmetavarl=gfile%nmetavarl
1849 meta3%nmetavarc=gfile%nmetavarc
1850 meta3%nmetaaryi=gfile%nmetaaryi
1851 meta3%nmetaaryr=gfile%nmetaaryr
1852 meta3%nmetaaryl=gfile%nmetaaryl
1853 meta3%nmetaaryc=gfile%nmetaaryc
1854 meta3%nmetavarr8=gfile%nmetavarr8
1855 meta3%nmetaaryr8=gfile%nmetaaryr8
1857 if(gfile%nmetavarr8>0.or.gfile%nmetaaryr8>0)
then
1858 iwrite=nemsio_lmeta3
1860 iwrite=nemsio_lmeta3-8
1862 if(gfile%do_byteswap)
call byteswap(meta3%nmetavari,nemsio_intkind,10)
1863 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,meta3)
1864 if(gfile%do_byteswap)
call byteswap(meta3%nmetavari,nemsio_intkind,10)
1865 if(nwrite.lt.iwrite)
return
1866 gfile%tlmeta=gfile%tlmeta+nwrite
1869 if (gfile%nmetavari.gt.0)
then
1871 iwrite=len(gfile%variname)*gfile%nmetavari
1872 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%variname)
1874 if(nwrite.lt.iwrite)
return
1875 gfile%tlmeta=gfile%tlmeta+nwrite
1877 iwrite=kind(gfile%varival)*gfile%nmetavari
1878 if(gfile%do_byteswap)
call byteswap(gfile%varival,nemsio_intkind,
size(gfile%varival))
1879 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%varival)
1881 if(nwrite.lt.iwrite)
return
1882 if(gfile%do_byteswap)
call byteswap(gfile%varival,nemsio_intkind,
size(gfile%varival))
1883 gfile%tlmetavarival=gfile%tlmeta
1884 gfile%tlmeta=gfile%tlmeta+nwrite
1887 if (gfile%nmetavarr.gt.0)
then
1889 iwrite=len(gfile%varrname)*gfile%nmetavarr
1890 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%varrname)
1892 if(nwrite.lt.iwrite)
return
1893 gfile%tlmeta=gfile%tlmeta+nwrite
1895 iwrite=kind(gfile%varrval)*gfile%nmetavarr
1896 if(gfile%do_byteswap)
call byteswap(gfile%varrval,nemsio_realkind,
size(gfile%varrval))
1897 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%varrval)
1898 if(nwrite.lt.iwrite)
return
1899 if(gfile%do_byteswap)
call byteswap(gfile%varrval,nemsio_realkind,
size(gfile%varrval))
1900 gfile%tlmeta=gfile%tlmeta+nwrite
1903 if (gfile%nmetavarl.gt.0)
then
1905 iwrite=len(gfile%varlname)*gfile%nmetavarl
1906 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%varlname)
1907 if(nwrite.lt.iwrite)
return
1908 gfile%tlmeta=gfile%tlmeta+nwrite
1910 iwrite=kind(gfile%varlval)*gfile%nmetavarl
1911 if(gfile%do_byteswap)
call byteswap(gfile%varlval,nemsio_logickind,
size(gfile%varlval))
1912 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%varlval)
1913 if(nwrite.lt.iwrite)
return
1914 if(gfile%do_byteswap)
call byteswap(gfile%varlval,nemsio_logickind,
size(gfile%varlval))
1915 gfile%tlmeta=gfile%tlmeta+nwrite
1918 if (gfile%nmetavarc.gt.0)
then
1920 iwrite=len(gfile%varcname)*gfile%nmetavarc
1921 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%varcname)
1922 if(nwrite.lt.iwrite)
return
1923 gfile%tlmeta=gfile%tlmeta+nwrite
1925 iwrite=len(gfile%varcval)*gfile%nmetavarc
1926 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%varcval)
1927 if(nwrite.lt.iwrite)
return
1928 gfile%tlmeta=gfile%tlmeta+nwrite
1931 if (gfile%nmetavarr8.gt.0)
then
1933 iwrite=len(gfile%varr8name)*gfile%nmetavarr8
1934 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%varr8name)
1935 if(nwrite.lt.iwrite)
return
1936 gfile%tlmeta=gfile%tlmeta+nwrite
1938 iwrite=kind(gfile%varr8val)*gfile%nmetavarr8
1939 if(gfile%do_byteswap)
call byteswap(gfile%varr8val,nemsio_dblekind,
size(gfile%varr8val))
1940 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%varr8val)
1941 if(nwrite.lt.iwrite)
return
1942 if(gfile%do_byteswap)
call byteswap(gfile%varr8val,nemsio_dblekind,
size(gfile%varr8val))
1943 gfile%tlmeta=gfile%tlmeta+nwrite
1946 if (gfile%nmetaaryi.gt.0)
then
1948 iwrite=len(gfile%aryiname)*gfile%nmetaaryi
1949 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%aryiname)
1950 if(nwrite.lt.iwrite)
return
1951 gfile%tlmeta=gfile%tlmeta+nwrite
1953 iwrite=kind(gfile%aryilen)*gfile%nmetaaryi
1954 if(gfile%do_byteswap)
call byteswap(gfile%aryilen,nemsio_intkind,
size(gfile%aryilen))
1955 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%aryilen)
1956 if(nwrite.lt.iwrite)
return
1957 if(gfile%do_byteswap)
call byteswap(gfile%aryilen,nemsio_intkind,
size(gfile%aryilen))
1958 gfile%tlmeta=gfile%tlmeta+nwrite
1959 gfile%tlmetaaryival=gfile%tlmeta
1960 do i=1,gfile%nmetaaryi
1962 iwrite=kind(gfile%aryival)*gfile%aryilen(i)
1963 if(gfile%do_byteswap)
call byteswap(gfile%aryival(:,i),nemsio_intkind,gfile%aryilen(i))
1964 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite, &
1965 gfile%aryival(1:gfile%aryilen(i),i))
1966 if(gfile%do_byteswap)
call byteswap(gfile%aryival(:,i),nemsio_intkind,gfile%aryilen(i))
1967 if(nwrite.lt.iwrite)
return
1968 gfile%tlmeta=gfile%tlmeta+nwrite
1972 if (gfile%nmetaaryr.gt.0)
then
1974 iwrite=len(gfile%aryrname)*gfile%nmetaaryr
1975 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%aryrname)
1976 if(nwrite.lt.iwrite)
return
1977 gfile%tlmeta=gfile%tlmeta+nwrite
1979 iwrite=kind(gfile%aryrlen)*gfile%nmetaaryr
1980 if(gfile%do_byteswap)
call byteswap(gfile%aryrlen,nemsio_intkind,
size(gfile%aryrlen))
1981 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%aryrlen)
1982 if(nwrite.lt.iwrite)
return
1983 if(gfile%do_byteswap)
call byteswap(gfile%aryrlen,nemsio_intkind,
size(gfile%aryrlen))
1984 gfile%tlmeta=gfile%tlmeta+nwrite
1985 do i=1,gfile%nmetaaryr
1987 iwrite=kind(gfile%aryrval)*gfile%aryrlen(i)
1988 if(gfile%do_byteswap)
call byteswap(gfile%aryrval(:,i),nemsio_realkind,gfile%aryrlen(i))
1989 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite, &
1990 gfile%aryrval(1:gfile%aryrlen(i),i))
1991 if(gfile%do_byteswap)
call byteswap(gfile%aryrval(:,i),nemsio_realkind,gfile%aryrlen(i))
1992 if(nwrite.lt.iwrite)
return
1993 gfile%tlmeta=gfile%tlmeta+nwrite
1997 if (gfile%nmetaaryl.gt.0)
then
1999 iwrite=len(gfile%arylname)*gfile%nmetaaryl
2000 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%arylname)
2001 if(nwrite.lt.iwrite)
return
2002 gfile%tlmeta=gfile%tlmeta+nwrite
2004 iwrite=kind(gfile%aryllen)*gfile%nmetaaryl
2005 if(gfile%do_byteswap)
call byteswap(gfile%aryllen,nemsio_intkind,
size(gfile%aryllen))
2006 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%aryllen)
2007 if(nwrite.lt.iwrite)
return
2008 if(gfile%do_byteswap)
call byteswap(gfile%aryllen,nemsio_intkind,
size(gfile%aryllen))
2009 gfile%tlmeta=gfile%tlmeta+nwrite
2010 do i=1,gfile%nmetaaryl
2012 iwrite=kind(gfile%arylval)*gfile%aryllen(i)
2013 if(gfile%do_byteswap)
call byteswap(gfile%arylval(:,i),nemsio_logickind,gfile%aryllen(i))
2014 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite, &
2015 gfile%arylval(1:gfile%aryllen(i),i))
2016 if(nwrite.lt.iwrite)
return
2017 if(gfile%do_byteswap)
call byteswap(gfile%arylval(:,i),nemsio_logickind,gfile%aryllen(i))
2018 gfile%tlmeta=gfile%tlmeta+nwrite
2022 if (gfile%nmetaaryc.gt.0)
then
2024 iwrite=len(gfile%arycname)*gfile%nmetaaryc
2025 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%arycname)
2026 if(nwrite.lt.iwrite)
return
2027 gfile%tlmeta=gfile%tlmeta+nwrite
2029 iwrite=kind(gfile%aryclen)*gfile%nmetaaryc
2030 if(gfile%do_byteswap)
call byteswap(gfile%aryclen,nemsio_intkind,
size(gfile%aryclen))
2031 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%aryclen)
2032 if(nwrite.lt.iwrite)
return
2033 if(gfile%do_byteswap)
call byteswap(gfile%aryclen,nemsio_intkind,
size(gfile%aryclen))
2034 gfile%tlmeta=gfile%tlmeta+nwrite
2035 do i=1,gfile%nmetaaryc
2037 iwrite=len(gfile%arycval)*gfile%aryclen(i)
2038 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite, &
2039 gfile%arycval(1:gfile%aryclen(i),i))
2040 if(nwrite.lt.iwrite)
return
2041 gfile%tlmeta=gfile%tlmeta+nwrite
2045 if (gfile%nmetaaryr8.gt.0)
then
2047 iwrite=len(gfile%aryr8name)*gfile%nmetaaryr8
2048 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%aryr8name)
2049 if(nwrite.lt.iwrite)
return
2050 gfile%tlmeta=gfile%tlmeta+nwrite
2052 iwrite=kind(gfile%aryr8len)*gfile%nmetaaryr8
2053 if(gfile%do_byteswap)
call byteswap(gfile%aryr8len,nemsio_intkind,
size(gfile%aryr8len))
2054 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%aryr8len)
2055 if(nwrite.lt.iwrite)
return
2056 if(gfile%do_byteswap)
call byteswap(gfile%aryr8len,nemsio_intkind,
size(gfile%aryr8len))
2057 gfile%tlmeta=gfile%tlmeta+nwrite
2058 do i=1,gfile%nmetaaryr8
2060 iwrite=kind(gfile%aryr8val)*gfile%aryr8len(i)
2061 if(gfile%do_byteswap)
call byteswap(gfile%aryr8val(:,i),nemsio_dblekind,gfile%aryr8len(i))
2062 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite, &
2063 gfile%aryr8val(1:gfile%aryr8len(i),i))
2064 if(nwrite.lt.iwrite)
return
2065 if(gfile%do_byteswap)
call byteswap(gfile%aryr8val(:,i),nemsio_dblekind,gfile%aryr8len(i))
2066 gfile%tlmeta=gfile%tlmeta+nwrite
2074 end subroutine nemsio_wcreate
2076 subroutine nemsio_setfheadvari(gfile,varname,varval,iret)
2081 type(nemsio_gfile),
intent(inout) :: gfile
2082 character(len=*),
intent(in) :: varname
2083 integer(nemsio_intkind),
intent(in) :: varval
2084 integer(nemsio_intkind),
optional,
intent(out) :: iret
2086 integer(nemsio_intkind8) :: iskip,iwrite,nwrite
2087 type(nemsio_meta2) :: meta2
2089 if(
present(iret) ) iret=-17
2092 if (equal_str_nocase(trim(varname),
'nfday'))
then
2094 gfile%headvarival(5)=varval
2096 else if (equal_str_nocase(trim(varname),
'nfhour'))
then
2098 gfile%headvarival(6)=varval
2100 else if (equal_str_nocase(trim(varname),
'nfminute'))
then
2101 gfile%nfminute=varval
2102 gfile%headvarival(7)=varval
2104 else if (equal_str_nocase(trim(varname),
'nfsecondd'))
then
2105 gfile%nfsecondd=varval
2106 gfile%headvarival(8)=varval
2108 else if (equal_str_nocase(trim(varname),
'nfsecondn'))
then
2109 gfile%nfsecondn=varval
2110 gfile%headvarival(9)=varval
2119 meta2%nrec=gfile%nrec
2120 meta2%idate(1:7)=gfile%idate(1:7)
2121 meta2%nfday=gfile%nfday
2122 meta2%nfhour=gfile%nfhour
2123 meta2%nfminute=gfile%nfminute
2124 meta2%nfsecondn=gfile%nfsecondn
2125 meta2%nfsecondd=gfile%nfsecondd
2126 meta2%dimx=gfile%dimx
2127 meta2%dimy=gfile%dimy
2128 meta2%dimz=gfile%dimz
2129 meta2%nframe=gfile%nframe
2130 meta2%nsoil=gfile%nsoil
2131 meta2%ntrac=gfile%ntrac
2132 meta2%jcap=gfile%jcap
2133 meta2%ncldt=gfile%ncldt
2134 meta2%idvc=gfile%idvc
2135 meta2%idsl=gfile%idsl
2136 meta2%idvm=gfile%idvm
2137 meta2%idrt=gfile%idrt
2138 meta2%rlon_min=gfile%rlon_min
2139 meta2%rlon_max=gfile%rlon_max
2140 meta2%rlat_min=gfile%rlat_min
2141 meta2%rlat_max=gfile%rlat_max
2142 meta2%extrameta=gfile%extrameta
2143 iskip=nemsio_lmeta1+8
2145 if(gfile%do_byteswap)
then
2146 call byteswap(meta2%nrec,nemsio_intkind,25)
2147 call byteswap(meta2%rlon_min,nemsio_realkind,4)
2148 call byteswap(meta2%extrameta,nemsio_logickind,1)
2150 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,meta2)
2151 if(nwrite.lt.iwrite)
return
2152 if(gfile%do_byteswap)
then
2153 call byteswap(meta2%nrec,nemsio_intkind,25)
2154 call byteswap(meta2%rlon_min,nemsio_realkind,4)
2155 call byteswap(meta2%extrameta,nemsio_logickind,1)
2157 if(
present(iret)) iret=0
2161 if(gfile%nmetavari.gt.0)
then
2162 do i=1,gfile%nmetavari
2163 if(equal_str_nocase(trim(varname),trim(gfile%variname(i))) )
then
2164 gfile%varival(i)=varval
2165 iskip=gfile%tlmetavarival
2166 iwrite=kind(gfile%varival)*gfile%nmetavari
2167 if(gfile%do_byteswap)
call byteswap(gfile%varival,nemsio_intkind,
size(gfile%varival))
2168 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%varival)
2169 if(nwrite.lt.iwrite)
return
2170 if(gfile%do_byteswap)
call byteswap(gfile%varival,nemsio_intkind,
size(gfile%varival))
2171 if(
present(iret)) iret=0
2177 if(.not.
present(iret))
call nemsio_stop
2179 end subroutine nemsio_setfheadvari
2181 subroutine nemsio_setfheadaryi(gfile,varname,varval,iret)
2186 type(nemsio_gfile),
intent(inout) :: gfile
2187 character(len=*),
intent(in) :: varname
2188 integer(nemsio_intkind),
intent(in) :: varval(:)
2189 integer(nemsio_intkind),
optional,
intent(out) :: iret
2191 integer(nemsio_intkind8) :: iskip,iwrite,nwrite
2192 type(nemsio_meta2) :: meta2
2194 if(
present(iret) ) iret=-17
2196 if (equal_str_nocase(trim(varname),
'idate'))
then
2197 if(
size(gfile%idate)==
size(varval))
then
2198 gfile%idate(:)=varval(:)
2199 gfile%headaryival(:,1)=varval(:)
2203 meta2%nrec=gfile%nrec
2204 meta2%idate(1:7)=gfile%idate(1:7)
2205 meta2%nfday=gfile%nfday
2206 meta2%nfhour=gfile%nfhour
2207 meta2%nfminute=gfile%nfminute
2208 meta2%nfsecondn=gfile%nfsecondn
2209 meta2%nfsecondd=gfile%nfsecondd
2210 meta2%dimx=gfile%dimx
2211 meta2%dimy=gfile%dimy
2212 meta2%dimz=gfile%dimz
2213 meta2%nframe=gfile%nframe
2214 meta2%nsoil=gfile%nsoil
2215 meta2%ntrac=gfile%ntrac
2216 meta2%jcap=gfile%jcap
2217 meta2%ncldt=gfile%ncldt
2218 meta2%idvc=gfile%idvc
2219 meta2%idsl=gfile%idsl
2220 meta2%idvm=gfile%idvm
2221 meta2%idrt=gfile%idrt
2222 meta2%rlon_min=gfile%rlon_min
2223 meta2%rlon_max=gfile%rlon_max
2224 meta2%rlat_min=gfile%rlat_min
2225 meta2%rlat_max=gfile%rlat_max
2226 meta2%extrameta=gfile%extrameta
2227 iskip=nemsio_lmeta1+8
2229 if(gfile%do_byteswap)
then
2230 call byteswap(meta2%nrec,nemsio_intkind,25)
2231 call byteswap(meta2%rlon_min,nemsio_realkind,4)
2232 call byteswap(meta2%extrameta,nemsio_logickind,1)
2234 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,meta2)
2235 if(nwrite.lt.iwrite)
return
2236 if(gfile%do_byteswap)
then
2237 call byteswap(meta2%nrec,nemsio_intkind,25)
2238 call byteswap(meta2%rlon_min,nemsio_realkind,4)
2239 call byteswap(meta2%extrameta,nemsio_logickind,1)
2241 if(
present(iret)) iret=0
2246 if(gfile%nmetaaryi.gt.0)
then
2247 do i=1,gfile%nmetaaryi
2248 if(equal_str_nocase(trim(varname),trim(gfile%aryiname(i))) )
then
2249 if(gfile%aryilen(i)==
size(varval))
then
2250 gfile%aryival(1:gfile%aryilen(i),i)=varval(1:
size(varval))
2257 iskip=gfile%tlmetaaryival
2259 do i=1,gfile%nmetaaryi
2261 iwrite=kind(gfile%aryival)*gfile%aryilen(i)
2262 if(gfile%do_byteswap)
call byteswap(gfile%aryival(:,i),nemsio_intkind,gfile%aryilen(i))
2263 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite, &
2264 gfile%aryival(1:gfile%aryilen(i),i))
2265 if(nwrite.lt.iwrite)
return
2266 if(gfile%do_byteswap)
call byteswap(gfile%aryival(:,i),nemsio_intkind,gfile%aryilen(i))
2268 if(
present(iret)) iret=0
2273 if(.not.
present(iret))
call nemsio_stop
2275 end subroutine nemsio_setfheadaryi
2277 subroutine nemsio_setfilehead(gfile,iret,lat,lon,dx,dy)
2284 type(nemsio_gfile),
intent(inout) :: gfile
2285 integer(nemsio_intkind),
optional,
intent(out) :: iret
2286 real(nemsio_realkind),
optional,
intent(in) :: lat(:),lon(:)
2287 real(nemsio_realkind),
optional,
intent(in) :: dx(:),dy(:)
2290 integer(nemsio_intkind8) :: iskip,iwrite,nwrite
2293 if (
present(iret)) iret=-3
2297 if(
present(lat) )
then
2298 if (
size(lat).ne.gfile%fieldsize)
then
2299 if (
present(iret))
return
2303 gfile%headaryrval(:,2)=gfile%lat
2304 if(equal_str_nocase(trim(gfile%gaction),
'write') .and. &
2305 gfile%tlmetalat/=nemsio_intfill8)
then
2306 iskip=gfile%tlmetalat
2307 iwrite=kind(gfile%lat)*
size(gfile%lat)
2308 if(gfile%do_byteswap)
call byteswap(gfile%lat,nemsio_realkind,
size(gfile%lat))
2309 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%lat)
2310 if(nwrite.lt.iwrite)
return
2311 if(gfile%do_byteswap)
call byteswap(gfile%lat,nemsio_realkind,
size(gfile%lat))
2316 if(
present(lon) )
then
2317 if (
size(lon).ne.gfile%fieldsize)
then
2318 if (
present(iret))
return
2322 gfile%headaryrval(:,3)=gfile%lon
2323 if(equal_str_nocase(trim(gfile%gaction),
'write').and. &
2324 gfile%tlmetalon/=nemsio_intfill8)
then
2325 iskip=gfile%tlmetalon
2326 iwrite=kind(gfile%lon)*
size(gfile%lon)
2327 if(gfile%do_byteswap)
call byteswap(gfile%lon,nemsio_realkind,
size(gfile%lon))
2328 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%lon)
2329 if(nwrite.lt.iwrite)
return
2330 if(gfile%do_byteswap)
call byteswap(gfile%lon,nemsio_realkind,
size(gfile%lon))
2335 if(
present(dx) )
then
2336 if (
size(dx).ne.gfile%fieldsize)
then
2337 if (
present(iret))
return
2341 gfile%headaryrval(:,4)=gfile%dx
2342 if(equal_str_nocase(trim(gfile%gaction),
'write').and. &
2343 gfile%tlmetadx/=nemsio_intfill8)
then
2344 iskip=gfile%tlmetadx
2345 iwrite=kind(gfile%dx)*
size(gfile%dx)
2346 if(gfile%do_byteswap)
call byteswap(gfile%dx,nemsio_realkind,
size(gfile%dx))
2347 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%dx)
2348 if(nwrite.lt.iwrite)
return
2349 if(gfile%do_byteswap)
call byteswap(gfile%dx,nemsio_realkind,
size(gfile%dx))
2354 if(
present(dy) )
then
2355 if (
size(dy).ne.gfile%fieldsize)
then
2356 if (
present(iret))
return
2360 gfile%headaryrval(:,5)=gfile%dy
2361 if(equal_str_nocase(trim(gfile%gaction),
'write').and. &
2362 gfile%tlmetady/=nemsio_intfill8)
then
2363 iskip=gfile%tlmetady
2364 iwrite=kind(gfile%dy)*
size(gfile%dy)
2365 if(gfile%do_byteswap)
call byteswap(gfile%dy,nemsio_realkind,
size(gfile%dy))
2366 call bafrwritel(gfile%flunit,iskip,iwrite,nwrite,gfile%dy)
2367 if(nwrite.lt.iwrite)
return
2368 if(gfile%do_byteswap)
call byteswap(gfile%dy,nemsio_realkind,
size(gfile%dy))
2375 end subroutine nemsio_setfilehead
2378 subroutine nemsio_getfilehead(gfile,iret,gtype,gdatatype,gfname,gaction, &
2379 modelname,version,nmeta,lmeta,nrec,idate,nfday,nfhour,nfminute, &
2380 nfsecondn,nfsecondd,dimx,dimy,dimz,nframe,nsoil,ntrac,ncldt,jcap, &
2381 idvc,idsl,idvm,idrt, rlon_min,rlon_max,rlat_min,rlat_max, &
2382 tlmeta,flunit, file_endian,do_byteswap, &
2383 extrameta,nmetavari,nmetavarr,nmetavarl,nmetavarc,nmetavarr8, &
2384 nmetaaryi,nmetaaryr,nmetaaryl,nmetaaryc,nmetaaryr8, &
2385 recname,reclevtyp,reclev,vcoord,lon,lat,dx,dy,cpi,ri, &
2386 variname,varival,varrname,varrval,varlname,varlval,varcname,varcval, &
2387 varr8name,varr8val, &
2388 aryiname,aryilen,aryival,aryrname,aryrlen,aryrval, &
2389 arylname,aryllen,arylval,arycname,aryclen,arycval, &
2390 aryr8name,aryr8len,aryr8val )
2396 type(nemsio_gfile),
intent(in) :: gfile
2397 integer(nemsio_intkind),
optional,
intent(out) :: iret
2398 character*(*),
optional,
intent(out) :: gtype,gdatatype,gfname, &
2400 integer(nemsio_intkind),
optional,
intent(out) :: version,nmeta,lmeta
2401 integer(nemsio_intkind),
optional,
intent(out) :: nrec,idate(7),nfday,nfhour, &
2402 nfminute,nfsecondn,nfsecondd
2403 integer(nemsio_intkind),
optional,
intent(out) :: dimx,dimy,dimz,nframe, &
2405 integer(nemsio_intkind),
optional,
intent(out) :: ncldt,jcap,idvc,idsl,idvm,idrt
2406 real(nemsio_realkind),
optional,
intent(out) :: rlon_min,rlon_max,rlat_min, &
2408 integer(nemsio_intkind),
optional,
intent(out) :: tlmeta
2409 integer(nemsio_intkind),
optional,
intent(out) :: flunit
2410 character*(*),
optional,
intent(out) :: file_endian
2411 logical(nemsio_logickind),
optional,
intent(out):: do_byteswap
2412 logical(nemsio_logickind),
optional,
intent(out):: extrameta
2413 integer(nemsio_intkind),
optional,
intent(out) :: nmetavari,nmetavarr, &
2414 nmetavarl,nmetavarc,nmetavarr8, &
2415 nmetaaryi,nmetaaryr,nmetaaryl, &
2416 nmetaaryc,nmetaaryr8
2417 character(*),
optional,
intent(out) :: recname(:)
2418 character(*),
optional,
intent(out) :: reclevtyp(:)
2419 integer(nemsio_intkind),
optional,
intent(out) :: reclev(:)
2420 real(nemsio_realkind),
optional,
intent(out) :: vcoord(:,:,:)
2421 real(nemsio_realkind),
optional,
intent(out) :: lat(:),lon(:)
2422 real(nemsio_realkind),
optional,
intent(out) :: dx(:),dy(:)
2423 real(nemsio_realkind),
optional,
intent(out) :: Cpi(:),Ri(:)
2424 character(*),
optional,
intent(out) :: variname(:),varrname(:)
2425 character(*),
optional,
intent(out) :: varlname(:),varcname(:)
2426 character(*),
optional,
intent(out) :: varr8name(:)
2427 character(*),
optional,
intent(out) :: aryiname(:),aryrname(:)
2428 character(*),
optional,
intent(out) :: arylname(:),arycname(:)
2429 character(*),
optional,
intent(out) :: aryr8name(:)
2430 integer(nemsio_intkind),
optional,
intent(out) :: aryilen(:),aryrlen(:)
2431 integer(nemsio_intkind),
optional,
intent(out) :: aryllen(:),aryclen(:)
2432 integer(nemsio_intkind),
optional,
intent(out) :: aryr8len(:)
2433 integer(nemsio_intkind),
optional,
intent(out) :: varival(:),aryival(:,:)
2434 real(nemsio_realkind),
optional,
intent(out) :: varrval(:),aryrval(:,:)
2435 real(nemsio_dblekind),
optional,
intent(out) :: varr8val(:),aryr8val(:,:)
2436 logical(nemsio_logickind),
optional,
intent(out):: varlval(:),arylval(:,:)
2437 character(*),
optional,
intent(out) :: varcval(:),arycval(:,:)
2441 if (
present(iret)) iret=-3
2442 if(
present(gtype)) gtype=gfile%gtype
2443 if(
present(gdatatype)) gdatatype=gfile%gdatatype
2444 if(
present(gfname)) gfname=trim(gfile%gfname)
2445 if(
present(gaction)) gaction=gfile%gaction
2446 if(
present(modelname)) modelname=gfile%modelname
2447 if(
present(version)) version=gfile%version
2448 if(
present(nmeta)) nmeta=gfile%nmeta
2449 if(
present(lmeta)) lmeta=gfile%lmeta
2450 if(
present(nrec)) nrec=gfile%nrec
2451 if(
present(nfday)) nfday=gfile%nfday
2452 if(
present(nfhour)) nfhour=gfile%nfhour
2453 if(
present(nfminute)) nfminute=gfile%nfminute
2454 if(
present(nfsecondn)) nfsecondn=gfile%nfsecondn
2455 if(
present(nfsecondd)) nfsecondd=gfile%nfsecondd
2456 if(
present(idate)) idate=gfile%idate
2457 if(
present(dimx)) dimx=gfile%dimx
2458 if(
present(dimy)) dimy=gfile%dimy
2459 if(
present(dimz)) dimz=gfile%dimz
2460 if(
present(nframe)) nframe=gfile%nframe
2461 if(
present(nsoil)) nsoil=gfile%nsoil
2462 if(
present(ntrac)) ntrac=gfile%ntrac
2463 if(
present(jcap)) jcap=gfile%jcap
2464 if(
present(ncldt)) ncldt=gfile%ncldt
2465 if(
present(idvc)) idvc=gfile%idvc
2466 if(
present(idsl)) idsl=gfile%idsl
2467 if(
present(idvm)) idvm=gfile%idvm
2468 if(
present(idrt)) idrt=gfile%idrt
2469 if(
present(rlon_min)) rlon_min=gfile%rlon_min
2470 if(
present(rlon_max)) rlon_max=gfile%rlon_max
2471 if(
present(rlat_min)) rlat_min=gfile%rlat_min
2472 if(
present(rlat_max)) rlat_max=gfile%rlat_max
2473 if(
present(rlat_max)) rlat_max=gfile%rlat_max
2474 if(
present(tlmeta)) tlmeta=gfile%tlmeta
2475 if(
present(file_endian)) file_endian=gfile%file_endian
2476 if(
present(do_byteswap)) do_byteswap=gfile%do_byteswap
2477 if(
present(extrameta)) extrameta=gfile%extrameta
2478 if(
present(flunit)) flunit=gfile%flunit
2481 if(
present(recname) )
then
2482 if (gfile%nrec.ne.
size(recname))
then
2483 if (
present(iret))
return
2486 recname=gfile%recname
2489 if(
present(reclevtyp))
then
2490 if (gfile%nrec.ne.
size(reclevtyp))
then
2491 if (
present(iret))
return
2494 reclevtyp=gfile%reclevtyp
2497 if(
present(reclev) )
then
2498 if (gfile%nrec.ne.
size(reclev))
then
2499 if (
present(iret))
return
2506 if(
present(vcoord))
then
2507 if (
size(vcoord) .ne. (gfile%dimz+1)*2*3 )
then
2508 if (
present(iret))
return
2515 if(
present(lat) )
then
2516 if (
size(lat).ne.gfile%fieldsize)
then
2517 print *,
'ERROR: size(lat)=',
size(lat),
' is not equal to ',gfile%fieldsize
2518 if (
present(iret))
return
2525 if(
present(lon) )
then
2526 if (
size(lon).ne.gfile%fieldsize)
then
2527 print *,
'ERROR: size(lon)=',
size(lon),
' is not equal to ',gfile%fieldsize
2528 if (
present(iret))
return
2535 if(
present(dx) )
then
2536 if (
size(dx).ne.gfile%fieldsize)
then
2537 print *,
'ERROR: size(dX)=',
size(dx),
' is not equal to ',gfile%fieldsize
2538 if (
present(iret))
return
2545 if(
present(dy) )
then
2546 if (
size(dy).ne.gfile%fieldsize)
then
2547 print *,
'ERROR: size(dy)=',
size(dy),
' is not equal to ',gfile%fieldsize
2548 if (
present(iret))
return
2555 if(
present(cpi) )
then
2556 if (gfile%ntrac+1.ne.
size(cpi))
then
2557 if (
present(iret))
return
2564 if(
present(ri) )
then
2565 if (gfile%ntrac+1.ne.
size(ri))
then
2566 if (
present(iret))
return
2576 if(
present(extrameta) ) extrameta=gfile%extrameta
2577 if (
present(nmetavari) ) nmetavari=gfile%nmetavari
2578 if (
present(nmetavarr) ) nmetavarr=gfile%nmetavarr
2579 if (
present(nmetavarl) ) nmetavarl=gfile%nmetavarl
2580 if (
present(nmetavarc) ) nmetavarc=gfile%nmetavarc
2581 if (
present(nmetavarr8) ) nmetavarr8=gfile%nmetavarr8
2582 if (
present(nmetaaryi) ) nmetaaryi=gfile%nmetaaryi
2583 if (
present(nmetaaryr) ) nmetaaryr=gfile%nmetaaryr
2584 if (
present(nmetaaryl) ) nmetaaryl=gfile%nmetaaryl
2585 if (
present(nmetaaryc) ) nmetaaryc=gfile%nmetaaryc
2586 if (
present(nmetaaryr8) ) nmetaaryr8=gfile%nmetaaryr8
2587 if ( gfile%nmetavari.gt.0 )
then
2588 if (
present(variname))
then
2589 if(
size(variname).eq.gfile%nmetavari) variname=gfile%variname
2591 if (
present(varival))
then
2592 if(
size(varival).eq.gfile%nmetavari) varival=gfile%varival
2595 if ( gfile%nmetavarr.gt.0 )
then
2596 if (
present(varrname))
then
2597 if(
size(varrname).eq.gfile%nmetavarr) varrname=gfile%varrname
2599 if (
present(varrval))
then
2600 if(
size(varrval).eq.gfile%nmetavarr) varrval=gfile%varrval
2603 if ( gfile%nmetavarl.gt.0 )
then
2604 if (
present(varlname))
then
2605 if(
size(varlname).eq.gfile%nmetavarl) varlname=gfile%varlname
2607 if (
present(varlval))
then
2608 if(
size(varlval).eq.gfile%nmetavarl) varlval=gfile%varlval
2611 if ( gfile%nmetavarc.gt.0 )
then
2612 if (
present(varcname))
then
2613 if(
size(varcname).eq.gfile%nmetavarc) varcname=gfile%varcname
2615 if (
present(varcval))
then
2616 if(
size(varcval).eq.gfile%nmetavarc) varcval=gfile%varcval
2619 if ( gfile%nmetavarr8.gt.0 )
then
2620 if (
present(varr8name))
then
2621 if(
size(varr8name).eq.gfile%nmetavarr8) varr8name=gfile%varr8name
2623 if (
present(varr8val))
then
2624 if(
size(varr8val).eq.gfile%nmetavarr8) varr8val=gfile%varr8val
2627 if ( gfile%nmetaaryi.gt.0 )
then
2628 if (
present(aryiname))
then
2629 if(
size(aryiname).eq.gfile%nmetaaryi) aryiname=gfile%aryiname
2631 if (
present(aryilen))
then
2632 if(
size(aryilen).eq.gfile%nmetaaryi) aryilen=gfile%aryilen
2634 if (
present(aryival))
then
2635 if(
size(aryival).eq.gfile%nmetaaryi*maxval(gfile%aryilen) ) &
2636 aryival=gfile%aryival
2639 if ( gfile%nmetaaryr.gt.0 )
then
2640 if (
present(aryrname))
then
2641 if(
size(aryrname).eq.gfile%nmetaaryr) aryrname=gfile%aryrname
2643 if (
present(aryrlen))
then
2644 if(
size(aryrlen).eq.gfile%nmetaaryr) aryrlen=gfile%aryrlen
2646 if (
present(aryrval))
then
2647 if(
size(aryrval).eq.gfile%nmetaaryr*maxval(gfile%aryrlen) ) &
2648 aryrval=gfile%aryrval
2651 if ( gfile%nmetaaryl.gt.0 )
then
2652 if (
present(arylname))
then
2653 if(
size(arylname).eq.gfile%nmetaaryl) arylname=gfile%arylname
2655 if (
present(aryllen))
then
2656 if(
size(aryllen).eq.gfile%nmetaaryl) aryllen=gfile%aryllen
2658 if (
present(arylval))
then
2659 if(
size(arylval).eq.gfile%nmetaaryl*maxval(gfile%aryllen) ) &
2660 arylval=gfile%arylval
2663 if ( gfile%nmetaaryc.gt.0 )
then
2664 if (
present(arycname))
then
2665 if(
size(arycname).eq.gfile%nmetaaryc) arycname=gfile%arycname
2667 if (
present(aryclen))
then
2668 if(
size(aryclen).eq.gfile%nmetaaryc) aryclen=gfile%aryclen
2670 if (
present(arycval))
then
2671 if(
size(arycval).eq.gfile%nmetaaryc*maxval(gfile%aryclen) ) &
2672 arycval=gfile%arycval
2675 if ( gfile%nmetaaryr8.gt.0 )
then
2676 if (
present(aryr8name))
then
2677 if(
size(aryr8name).eq.gfile%nmetaaryr8) aryr8name=gfile%aryr8name
2679 if (
present(aryr8len))
then
2680 if(
size(aryr8len).eq.gfile%nmetaaryr8) aryr8len=gfile%aryr8len
2682 if (
present(aryr8val))
then
2683 if(
size(aryr8val).eq.gfile%nmetaaryr8*maxval(gfile%aryr8len) ) &
2684 aryr8val=gfile%aryr8val
2688 if (
present(iret)) iret=0
2690 end subroutine nemsio_getfilehead
2692 subroutine nemsio_getfheadvari(gfile,varname,varval,iret)
2697 type(nemsio_gfile),
intent(in) :: gfile
2698 character(len=*),
intent(in) :: varname
2699 integer(nemsio_intkind),
intent(out) :: varval
2700 integer(nemsio_intkind),
optional,
intent(out) :: iret
2703 if(
present(iret) ) iret=-17
2704 do i=1,gfile%headvarinum
2705 if(equal_str_nocase(trim(varname),trim(gfile%headvariname(i))) )
then
2706 varval=gfile%headvarival(i)
2707 if(
present(iret) ) iret=0
2712 if(gfile%nmetavari.gt.0)
then
2713 do i=1,gfile%nmetavari
2714 if(equal_str_nocase(trim(varname),trim(gfile%variname(i))) )
then
2715 varval=gfile%varival(i)
2716 if(
present(iret) ) iret=0
2722 if(.not.
present(iret) )
call nemsio_stop
2724 end subroutine nemsio_getfheadvari
2726 subroutine nemsio_getfheadvarr(gfile,varname,varval,iret)
2731 type(nemsio_gfile),
intent(in) :: gfile
2732 character(len=*),
intent(in) :: varname
2733 real(nemsio_realkind),
intent(out) :: varval
2734 integer(nemsio_intkind),
optional,
intent(out) :: iret
2737 if(
present(iret) ) iret=-17
2738 do i=1,gfile%headvarrnum
2739 if(equal_str_nocase(trim(varname),trim(gfile%headvarrname(i))) )
then
2740 varval=gfile%headvarrval(i)
2741 if(
present(iret) ) iret=0
2746 if(gfile%nmetavarr.gt.0)
then
2747 do i=1,gfile%nmetavarr
2748 if(equal_str_nocase(trim(varname),trim(gfile%varrname(i))) )
then
2749 varval=gfile%varrval(i)
2750 if(
present(iret) ) iret=0
2756 if(.not.
present(iret) )
call nemsio_stop
2758 end subroutine nemsio_getfheadvarr
2760 subroutine nemsio_getfheadvarl(gfile,varname,varval,iret)
2765 type(nemsio_gfile),
intent(in) :: gfile
2766 character(*),
intent(in) :: varname
2767 logical(nemsio_logickind),
intent(out) :: varval
2768 integer(nemsio_intkind),
optional,
intent(out) :: iret
2771 if(
present(iret) ) iret=-17
2772 if(gfile%nmetavarl.gt.0)
then
2773 do i=1,gfile%nmetavarl
2774 if(equal_str_nocase(trim(varname),trim(gfile%varlname(i))) )
then
2775 varval=gfile%varlval(i)
2776 if(
present(iret) ) iret=0
2782 if(.not.
present(iret) )
call nemsio_stop
2784 end subroutine nemsio_getfheadvarl
2786 subroutine nemsio_getfheadvarc(gfile,varname,varval,iret)
2791 type(nemsio_gfile),
intent(in) :: gfile
2792 character(*),
intent(in) :: varname
2793 character(*),
intent(out) :: varval
2794 integer(nemsio_intkind),
optional,
intent(out) :: iret
2797 if(
present(iret) ) iret=-17
2798 do i=1,gfile%headvarcnum
2799 if(equal_str_nocase(trim(varname),trim(gfile%headvarcname(i))) )
then
2800 varval=gfile%headvarcval(i)
2801 if(
present(iret) ) iret=0
2806 if(gfile%nmetavarc.gt.0)
then
2807 do i=1,gfile%nmetavarc
2808 if(equal_str_nocase(trim(varname),trim(gfile%varcname(i))) )
then
2809 varval=gfile%varcval(i)
2810 if(
present(iret) ) iret=0
2816 if(.not.
present(iret) )
call nemsio_stop
2818 end subroutine nemsio_getfheadvarc
2820 subroutine nemsio_getfheadvarr8(gfile,varname,varval,iret)
2825 type(nemsio_gfile),
intent(in) :: gfile
2826 character(len=*),
intent(in) :: varname
2827 real(nemsio_dblekind),
intent(out) :: varval
2828 integer(nemsio_intkind),
optional,
intent(out) :: iret
2831 if(
present(iret) ) iret=-17
2833 if(gfile%nmetavarr8.gt.0)
then
2834 do i=1,gfile%nmetavarr8
2835 if(equal_str_nocase(trim(varname),trim(gfile%varr8name(i))) )
then
2836 varval=gfile%varr8val(i)
2837 if(
present(iret) ) iret=0
2843 if(.not.
present(iret) )
call nemsio_stop
2845 end subroutine nemsio_getfheadvarr8
2847 subroutine nemsio_getfheadaryi(gfile,varname,varval,iret)
2852 type(nemsio_gfile),
intent(in) :: gfile
2853 character(*),
intent(in) :: varname
2854 integer(nemsio_intkind),
intent(out) :: varval(:)
2855 integer(nemsio_intkind),
optional,
intent(out) :: iret
2858 if(
present(iret) ) iret=-17
2859 do i=1,gfile%headaryinum
2860 if(equal_str_nocase(trim(varname),trim(gfile%headaryiname(i))) )
then
2861 varval(:)=gfile%headaryival(1:gfile%aryilen(i),i)
2862 if(
present(iret) ) iret=0
2867 if(gfile%nmetaaryi.gt.0)
then
2868 do i=1,gfile%nmetaaryi
2869 if(equal_str_nocase(trim(varname),trim(gfile%aryiname(i))) )
then
2870 varval(:)=gfile%aryival(1:gfile%aryilen(i),i)
2871 if(
present(iret) ) iret=0
2878 if(.not.
present(iret) )
call nemsio_stop
2880 end subroutine nemsio_getfheadaryi
2882 subroutine nemsio_getfheadaryr(gfile,varname,varval,iret)
2887 type(nemsio_gfile),
intent(in) :: gfile
2888 character(*),
intent(in) :: varname
2889 real(nemsio_realkind),
intent(out) :: varval(:)
2890 integer(nemsio_intkind),
optional,
intent(out) :: iret
2893 if(
present(iret) ) iret=-17
2894 if(gfile%headaryrnum>0)
then
2895 do i=1,gfile%headaryrnum
2896 if(equal_str_nocase(trim(varname),trim(gfile%headaryrname(i))) )
then
2897 varval(:)=gfile%headaryrval(1:gfile%aryrlen(i),i)
2898 if(
present(iret) ) iret=0
2904 if(gfile%nmetaaryr.gt.0)
then
2905 do i=1,gfile%nmetaaryr
2906 if(equal_str_nocase(trim(varname),trim(gfile%aryrname(i))))
then
2907 varval(:)=gfile%aryrval(1:gfile%aryrlen(i),i)
2908 if(
present(iret) ) iret=0
2915 if(.not.
present(iret) )
call nemsio_stop
2917 end subroutine nemsio_getfheadaryr
2919 subroutine nemsio_getfheadaryl(gfile,varname,varval,iret)
2924 type(nemsio_gfile),
intent(in) :: gfile
2925 character(*),
intent(in) :: varname
2926 logical(nemsio_logickind),
intent(out) :: varval(:)
2927 integer(nemsio_intkind),
optional,
intent(out) :: iret
2930 if(
present(iret) ) iret=-17
2931 if(gfile%nmetaaryl.gt.0)
then
2932 do i=1,gfile%nmetaaryl
2933 if(equal_str_nocase(trim(varname),trim(gfile%arylname(i))))
then
2934 varval(:)=gfile%arylval(1:gfile%aryllen(i),i)
2935 if(
present(iret) ) iret=0
2942 if(.not.
present(iret) )
call nemsio_stop
2944 end subroutine nemsio_getfheadaryl
2946 subroutine nemsio_getfheadaryc(gfile,varname,varval,iret)
2951 type(nemsio_gfile),
intent(in) :: gfile
2952 character(len=*),
intent(in) :: varname
2953 character(*),
intent(out) :: varval(:)
2954 integer(nemsio_intkind),
optional,
intent(out) :: iret
2957 if(
present(iret) ) iret=-17
2958 if(gfile%headarycnum>0)
then
2959 do i=1,gfile%headarycnum
2960 if(equal_str_nocase(trim(varname),trim(gfile%headarycname(i))) )
then
2961 varval(:)=gfile%headarycval(1:gfile%aryclen(i),i)
2962 if(
present(iret) ) iret=0
2968 if(gfile%nmetaaryc.gt.0)
then
2969 do i=1,gfile%nmetaaryc
2970 if(equal_str_nocase(trim(varname),trim(gfile%arycname(i))))
then
2971 varval(:)=gfile%arycval(1:gfile%aryclen(i),i)
2972 if(
present(iret) ) iret=0
2979 if(.not.
present(iret) )
call nemsio_stop
2981 end subroutine nemsio_getfheadaryc
2983 subroutine nemsio_getfheadaryr8(gfile,varname,varval,iret)
2988 type(nemsio_gfile),
intent(in) :: gfile
2989 character(*),
intent(in) :: varname
2990 real(nemsio_dblekind),
intent(out) :: varval(:)
2991 integer(nemsio_intkind),
optional,
intent(out) :: iret
2994 if(
present(iret) ) iret=-17
2996 if(gfile%nmetaaryr8.gt.0)
then
2997 do i=1,gfile%nmetaaryr8
2998 if(equal_str_nocase(trim(varname),trim(gfile%aryr8name(i))))
then
2999 varval(:)=gfile%aryr8val(1:gfile%aryr8len(i),i)
3000 if(
present(iret) ) iret=0
3007 if(.not.
present(iret) )
call nemsio_stop
3009 end subroutine nemsio_getfheadaryr8
3012 subroutine nemsio_getrechead(gfile,jrec,name,levtyp,lev,iret)
3017 type(nemsio_gfile),
intent(in) :: gfile
3018 integer(nemsio_intkind),
intent(in) :: jrec
3019 character(*),
intent(inout) :: name
3020 character(*),
optional,
intent(inout) :: levtyp
3021 integer(nemsio_intkind),
optional,
intent(out) :: lev
3022 integer(nemsio_intkind),
optional,
intent(out) :: iret
3025 if(
present(iret)) iret=-11
3026 if ( jrec.gt.0 .or. jrec.le.gfile%nrec)
then
3027 if(gfile%nmeta>2)
then
3028 name=gfile%recname(jrec)
3030 print *,
'ERROR: recname is not specified in meta data!'
3033 if(
present(levtyp).and.gfile%nmeta>3)
then
3034 levtyp=gfile%reclevtyp(jrec)
3036 if(
present(lev).and.gfile%nmeta>4)
then
3037 lev=gfile%reclev(jrec)
3039 if(
present(iret)) iret=0
3042 if (
present(iret))
then
3043 print *,
'ERROR: jrec is either less than 1 or greater than gfile%nrec'
3049 end subroutine nemsio_getrechead
3052 subroutine nemsio_gfinit(gfile,iret,recname,reclevtyp,reclev)
3057 type(nemsio_gfile),
intent(inout) :: gfile
3058 integer(nemsio_intkind),
intent(out) :: iret
3059 character(*),
optional,
intent(in) :: recname(:)
3060 character(*),
optional,
intent(in) :: reclevtyp(:)
3061 integer(nemsio_intkind),
optional,
intent(in) :: reclev(:)
3062 integer :: i,j,rec,rec3dopt
3063 real(nemsio_dblekind),
allocatable :: slat(:),wlat(:)
3064 real(nemsio_dblekind),
allocatable :: dx(:)
3065 real(nemsio_dblekind) :: radi
3066 logical(nemsio_logickind) :: linit=.false.,ltmp
3071 if(gfile%version==nemsio_intfill) gfile%version=200809
3072 if(gfile%nfday==nemsio_intfill) gfile%nfday=0
3073 if(gfile%nfhour==nemsio_intfill) gfile%nfhour=0
3074 if(gfile%nfminute==nemsio_intfill) gfile%nfminute=0
3075 if(gfile%nfsecondn==nemsio_intfill) gfile%nfsecondn=0
3076 if(gfile%nfsecondd==nemsio_intfill) gfile%nfsecondd=100
3077 if(gfile%nmetavari==nemsio_intfill) gfile%nmetavari=0
3078 if(gfile%nmetavarr==nemsio_intfill) gfile%nmetavarr=0
3079 if(gfile%nmetavarc==nemsio_intfill) gfile%nmetavarc=0
3080 if(gfile%nmetavarl==nemsio_intfill) gfile%nmetavarl=0
3081 if(gfile%nmetaaryi==nemsio_intfill) gfile%nmetaaryi=0
3082 if(gfile%nmetaaryr==nemsio_intfill) gfile%nmetaaryr=0
3083 if(gfile%nmetaaryl==nemsio_intfill) gfile%nmetaaryl=0
3084 if(gfile%nmetaaryc==nemsio_intfill) gfile%nmetaaryc=0
3089 if ( equal_str_nocase(trim(gfile%modelname),
'GFS'))
then
3090 if(gfile%dimy.eq.nemsio_intfill)
then
3094 if(gfile%dimx.eq.nemsio_intfill) gfile%dimx=1152
3095 if(gfile%dimz.eq.nemsio_intfill) gfile%dimz=64
3096 if(gfile%nframe.eq.nemsio_intfill) gfile%nframe=0
3097 if(gfile%ntrac.eq.nemsio_intfill) gfile%ntrac=3
3098 if(gfile%nrec.eq.nemsio_intfill)gfile%nrec=2+9*gfile%dimz+35+3*gfile%nsoil
3100 linit=linit.and.gfile%dimy==576.and.gfile%dimx==1152.and.gfile%dimz==64
3108 gfile%extrameta=.true.
3114 else if (equal_str_nocase(trim(gfile%modelname),
'NMMB'))
then
3115 if(gfile%dimx.eq.nemsio_intfill)
then
3119 if(gfile%dimy.eq.nemsio_intfill) gfile%dimy=181
3120 if(gfile%dimz.eq.nemsio_intfill) gfile%dimz=35
3121 if(gfile%nframe.eq.nemsio_intfill) gfile%nframe=1
3122 if(gfile%ntrac.eq.nemsio_intfill) gfile%ntrac=4
3123 if(gfile%nrec.eq.nemsio_intfill) &
3124 gfile%nrec=86+20*gfile%dimz+(gfile%dimz+1)+3*gfile%nsoil+4
3125 linit=linit.and.gfile%dimx==257.and.gfile%dimy==181.and.gfile%dimz==35
3127 gfile%extrameta=.true.
3132 gfile%rlon_min=-178.5937347
3133 gfile%rlon_max=178.5937347
3134 gfile%rlat_min=-89.49999237
3135 gfile%rlat_max=89.49999237
3137 else if (equal_str_nocase(trim(gfile%modelname),
"GSI"))
then
3138 if(gfile%dimx.eq.nemsio_intfill)
then
3142 if(gfile%dimy.eq.nemsio_intfill) gfile%dimy=576
3143 if(gfile%dimz.eq.nemsio_intfill) gfile%dimz=64
3144 if(gfile%nrec.eq.nemsio_intfill) &
3145 gfile%nrec=10+3*gfile%dimz+gfile%ntrac*gfile%dimz
3146 linit=linit.and.gfile%dimx==1152.and.gfile%dimy==576.and.gfile%dimz==64
3154 gfile%extrameta=.true.
3158 if(gfile%dimx.eq.nemsio_intfill.or.gfile%dimy.eq.nemsio_intfill.or. &
3159 gfile%dimz.eq.nemsio_intfill.or.gfile%idate(1).eq.nemsio_intfill)
then
3160 print *,
'ERROR: please provide dimensions!'
3163 if(gfile%nframe.eq.nemsio_intfill) gfile%nframe=0
3164 gfile%fieldsize=(gfile%dimx+2*gfile%nframe)*(gfile%dimy+2*gfile%nframe)
3165 if(gfile%nrec.eq.nemsio_intfill) gfile%nrec=12+(3+gfile%ntrac)*gfile%dimz
3169 if(.not.
allocated(gfile%recname))
then
3170 call nemsio_almeta(gfile,iret)
3171 if ( iret.ne.0 )
return
3173 ltmp=(gfile%nmetavari>0.and..not.
allocated(gfile%variname)) .or. &
3174 (gfile%nmetavarr>0.and..not.
allocated(gfile%varrname)) .or. &
3175 (gfile%nmetavarl>0.and..not.
allocated(gfile%varlname)) .or. &
3176 (gfile%nmetavarc>0.and..not.
allocated(gfile%varcname)) .or. &
3177 (gfile%nmetavarr8>0.and..not.
allocated(gfile%varr8name)) .or. &
3178 (gfile%nmetaaryi>0.and..not.
allocated(gfile%aryiname)) .or. &
3179 (gfile%nmetaaryr>0.and..not.
allocated(gfile%aryrname)) .or. &
3180 (gfile%nmetaaryl>0.and..not.
allocated(gfile%arylname)) .or. &
3181 (gfile%nmetaaryc>0.and..not.
allocated(gfile%arycname)) .or. &
3182 (gfile%nmetaaryr8>0.and..not.
allocated(gfile%aryr8name))
3184 call nemsio_alextrameta(gfile,iret)
3185 if ( iret.ne.0 )
return
3191 if ( equal_str_nocase(trim(gfile%modelname),
'GFS').and.gfile%nmeta>=8)
then
3193 if(maxval(gfile%lat)==nemsio_realfill.and.minval(gfile%lat)==nemsio_realfill)
then
3194 allocate(slat(gfile%dimy))
3195 call splat(gfile%idrt,gfile%dimy,slat)
3196 radi=180.0d0/(4.d0*atan(1.d0))
3198 gfile%lat((i-1)*gfile%dimx+1:i*gfile%dimx) = asin(slat(i)) * radi
3203 if(maxval(gfile%lon)==nemsio_realfill.and.minval(gfile%lon)==nemsio_realfill)
then
3205 gfile%lon(i) = 360./gfile%dimx*(i-1)
3208 gfile%lon((j-1)*gfile%dimx+1:j*gfile%dimx) = gfile%lon(1:gfile%dimx)
3214 if ( equal_str_nocase(trim(gfile%modelname),
'GFS').and.linit)
then
3215 gfile%variname=(/
'itrun ',
'iorder ',
'irealf ',
'igen ',
'icen2 '/)
3216 gfile%varival=(/1,2,1,82,0/)
3218 gfile%variname=(/
'itrun ',
'iorder ',
'irealf ',
'igen ',
'latf ',
'lonf ',
'latr ',
'lonr ', &
3219 'icen2 ',
'idpp ',
'idvt ',
'idrun ',
'idusr ',
'ixgr ',
'nvcoord'/)
3220 gfile%varival=(/1,2,1,82,576,1152,576,1152,0,21,0,0,0,0,2/)
3221 gfile%varrname=(/
'pdryini'/)
3222 gfile%varrval=(/98.29073/)
3223 gfile%aryiname(1)=
'iens'
3225 allocate(gfile%aryival(maxval(gfile%aryilen),gfile%nmetaaryi))
3226 gfile%aryival(:,1)=(/0,0/)
3229 if(gfile%dimz==64)
then
3230 gfile%vcoord(1:gfile%dimz+1,1,1)=(/2*0.0000000,0.57499999,5.7410002,21.516001,55.712002, &
3231 116.89900,214.01500,356.22299,552.71997,812.48901,1143.9880,1554.7889, &
3232 2051.1499,2637.5530,3316.2170,4086.6140,4945.0288,5884.2061,6893.1172, &
3233 7956.9082,9057.0508,10171.712,11276.348,12344.490,13348.671,14261.435, &
3234 15056.342,15708.893,16197.315,16503.145,16611.604,16511.736,16197.967, &
3235 15683.489,14993.074,14154.316,13197.065,12152.937,11054.853,9936.6143, &
3236 8832.5371,7777.1499,6804.8740,5937.0498,5167.1460,4485.4932,3883.0520, &
3237 3351.4600,2883.0381,2470.7881,2108.3660,1790.0510,1510.7111,1265.7520, &
3238 1051.0800,863.05798,698.45697,554.42401,428.43399,318.26599,221.95799, &
3239 137.78999,64.247002,0.0000000 /)
3240 gfile%vcoord(1:gfile%dimz+1,2,1)=(/1.0000000,0.99467117,0.98862660,0.98174226,0.97386760, &
3241 0.96482760,0.95443410,0.94249105,0.92879730,0.91315103,0.89535499, &
3242 0.87522358,0.85259068,0.82731885,0.79930973,0.76851469,0.73494524, &
3243 0.69868290,0.65988702,0.61879963,0.57574666,0.53113484,0.48544332, &
3244 0.43921080,0.39301825,0.34746850,0.30316412,0.26068544,0.22057019, &
3245 0.18329623,0.14926878,0.11881219,0.92166908e-01,0.69474578e-01,0.50646842e-01, &
3246 0.35441618e-01, 0.23555880e-01,0.14637120e-01,0.82940198e-02,0.41067102e-02, &
3247 0.16359100e-02,0.43106001e-03,0.36969999e-04,0.0000000*22 /)
3248 gfile%vcoord(1:gfile%dimz+1,3,1)=0.
3249 gfile%vcoord(1:gfile%dimz+1,1,2)=0.
3250 gfile%vcoord(1:gfile%dimz+1,2,2)=0.
3251 gfile%vcoord(1:gfile%dimz+1,3,2)=0.
3255 if(.not.
present(recname).or..not.
present(reclevtyp).or..not.
present(reclev) )
then
3256 if(
size(gfile%recname).eq.2+9*gfile%dimz+35+3*gfile%nsoil)
then
3257 if(trim(gfile%recname(1))==
'')
then
3259 gfile%recname(rec)=
'hgt'
3260 gfile%recname(rec+1)=
'pres'
3261 gfile%recname(rec+2:rec+gfile%dimz+1)=
'pres'
3262 gfile%recname(rec+gfile%dimz+2:rec+2*gfile%dimz+1)=
'dpres'
3263 gfile%recname(rec+2*gfile%dimz+2:rec+3*gfile%dimz+1)=
'tmp'
3264 gfile%recname(rec+3*gfile%dimz+2:rec+4*gfile%dimz+1)=
'ugrd'
3265 gfile%recname(rec+4*gfile%dimz+2:rec+5*gfile%dimz+1)=
'vgrd'
3266 gfile%recname(rec+5*gfile%dimz+2:rec+6*gfile%dimz+1)=
'spfh'
3267 gfile%recname(rec+6*gfile%dimz+2:rec+7*gfile%dimz+1)=
'o3mr'
3268 gfile%recname(rec+7*gfile%dimz+2:rec+8*gfile%dimz+1)=
'clwmr'
3269 gfile%recname(rec+8*gfile%dimz+2:rec+9*gfile%dimz+1)=
'vvel'
3270 rec=rec+9*gfile%dimz+1
3271 gfile%recname(rec+1:rec+35)=(/
'slmsk ',
'orog ',
'tsea ',
'sheleg',
'tg3 ',
'zorl ', &
3272 'cv ',
'cvb ',
'cvt ', &
3273 'alvsf ',
'alvwf ',
'alnsf ',
'alnwf ',
'vfrac ',
'canopy',
'f10m ',
't2m ', &
3274 'q2m ',
'vtype ',
'stype ',
'facsf ',
'facwf ',
'uustar',
'ffmm ',
'ffhh ', &
3275 'hice ',
'fice ',
'tisfc ',
'tprcp ',
'srflag',
'snwdph',
'shdmin',
'shdmax', &
3276 'slope ',
'snoalb' /)
3277 gfile%recname(rec+36:rec+35+gfile%nsoil)=
'stc'
3278 gfile%recname(rec+36+gfile%nsoil:rec+35+2*gfile%nsoil)=
'smc'
3279 gfile%recname(rec+36+2*gfile%nsoil:rec+35+3*gfile%nsoil)=
'slc'
3283 if(
size(gfile%reclevtyp).eq.2+9*gfile%dimz+35+3*gfile%nsoil)
then
3284 if(trim(gfile%reclevtyp(1))==
'')
then
3286 gfile%reclevtyp=
'sfc'
3287 gfile%reclevtyp(rec+2:rec+gfile%dimz+1)=
'mid layer'
3288 gfile%reclevtyp(rec+gfile%dimz+2:rec+2*gfile%dimz+1)=
'mid layer'
3289 gfile%reclevtyp(rec+2*gfile%dimz+2:rec+3*gfile%dimz+1)=
'mid layer'
3290 gfile%reclevtyp(rec+3*gfile%dimz+2:rec+4*gfile%dimz+1)=
'mid layer'
3291 gfile%reclevtyp(rec+4*gfile%dimz+2:rec+5*gfile%dimz+1)=
'mid layer'
3292 gfile%reclevtyp(rec+5*gfile%dimz+2:rec+6*gfile%dimz+1)=
'mid layer'
3293 gfile%reclevtyp(rec+6*gfile%dimz+2:rec+7*gfile%dimz+1)=
'mid layer'
3294 gfile%reclevtyp(rec+7*gfile%dimz+2:rec+8*gfile%dimz+1)=
'mid layer'
3295 gfile%reclevtyp(rec+8*gfile%dimz+2:rec+9*gfile%dimz+1)=
'mid layer'
3296 rec=rec+9*gfile%dimz+36
3297 gfile%reclevtyp(rec+1:rec+3*gfile%nsoil)=
'soil layer'
3301 if(
size(gfile%reclev).eq.2+9*gfile%dimz+35+3*gfile%nsoil)
then
3302 if(gfile%reclev(1)==-9999)
then
3307 gfile%reclev(rec+(j-3)*gfile%dimz+i)=i
3310 rec=rec+9*gfile%dimz+35
3313 gfile%reclev(rec+(j-1)*gfile%nsoil+i)=i
3321 else if ( equal_str_nocase(trim(gfile%modelname),
"NMMB") .and. linit)
then
3322 gfile%variname=(/
'mp_phys ',
'sfsfcphy',
'nphs ',
'nclod ', &
3323 'nheat ',
'nprec ',
'nrdlw ',
'nrdsw ',
'nsrfc ' /)
3324 gfile%varival=(/5,99,2,60,60,60,60,60,60/)
3325 gfile%varrname=(/
'pdtop ',
'dt ',
'pt ',
'tlm0d ',
'tph0d ',
'tstart', &
3326 'aphtim',
'ardlw ',
'ardsw ',
'asrfc ',
'avcnvc',
'avrain' /)
3327 gfile%varrval=(/26887.10156,180.,1000.,0.,0.,0.,-1000000.0, &
3328 -1000000.0,-1000000.0,-1000000.0,0.,0./)
3329 gfile%varlname=(/
'run ',
'global'/)
3330 gfile%varlval=(/.true.,.false. /)
3331 gfile%aryrname=(/
'dsg1 ',
'dsg2 ',
'sgml1 ',
'sgml2 ',
'sg1 ',
'sg2 ',
'sldpth'/)
3332 gfile%aryrlen=(/gfile%dimz,gfile%dimz,gfile%dimz,gfile%dimz, &
3333 gfile%dimz+1,gfile%dimz+1,gfile%nsoil /)
3334 allocate(gfile%aryrval(maxval(gfile%aryrlen),gfile%nmetaaryr))
3335 if(
size(gfile%aryrval,1).eq.36)
then
3336 gfile%aryrval(1:35,1)=(/0.8208955079e-01,0.8582090586e-01,0.8582088351e-01, &
3337 0.8582088351e-01,0.8582091331e-01,0.8582085371e-01, &
3338 0.9328359365e-01,0.9701490402e-01,0.9701496363e-01, &
3339 0.9701490402e-01,0.1044776440,0.0000000000e+00,0.0000000000e+00, &
3340 0.0000000000e+00,0.0000000000e+00,0.0000000000e+00,0.0000000000e+00, &
3341 0.0000000000e+00,0.0000000000e+00,0.0000000000e+00,0.0000000000e+00, &
3342 0.0000000000e+00,0.0000000000e+00,0.0000000000e+00,0.0000000000e+00, &
3343 0.0000000000e+00,0.0000000000e+00,0.0000000000e+00,0.0000000000e+00, &
3344 0.0000000000e+00,0.0000000000e+00,0.0000000000e+00,0.0000000000e+00, &
3345 0.0000000000e+00,0.0000000000e+00 /)
3346 gfile%aryrval(1:35,2)=(/0.0000000000e+00,0.0000000000e+00,0.0000000000e+00,0.0000000000e+00, &
3347 0.0000000000e+00,0.0000000000e+00,0.0000000000e+00,0.0000000000e+00, &
3348 0.0000000000e+00,0.0000000000e+00,0.0000000000e+00,0.4098360986e-01, &
3349 0.4371585697e-01,0.4781420529e-01,0.4918029904e-01,0.5054645240e-01, &
3350 0.5327869952e-01,0.5464482307e-01,0.5464476347e-01,0.5464485288e-01, &
3351 0.5464485288e-01,0.5464470387e-01,0.5191260576e-01,0.5054640770e-01, &
3352 0.4918038845e-01,0.4508191347e-01,0.4371589422e-01,0.3961753845e-01, &
3353 0.3551906347e-01,0.3005468845e-01,0.2732235193e-01,0.2459019423e-01, &
3354 0.1912564039e-01,0.1639348269e-01,0.8196711540e-02 /)
3355 gfile%aryrval(1:35,3)=(/0.4104477540e-01,0.1250000000,0.2108208984,0.2966417670,0.3824626803, &
3356 0.4682835639,0.5578358173,0.6529850364,0.7500000000,0.8470149040, &
3357 0.9477611780,1.000000000,1.000000000,1.000000000,1.000000000, &
3358 1.000000000,1.000000000,1.000000000,1.000000000,1.000000000, &
3359 1.000000000,1.000000000,1.000000000,1.000000000,1.000000000, &
3360 1.000000000,1.000000000,1.000000000,1.000000000,1.000000000, &
3361 1.000000000,1.000000000,1.000000000,1.000000000,1.000000000 /)
3362 gfile%aryrval(1:35,4)=(/0.0000000000e+00,0.0000000000e+00,0.0000000000e+00,0.0000000000e+00, &
3363 0.0000000000e+00,0.0000000000e+00,0.0000000000e+00,0.0000000000e+00, &
3364 0.0000000000e+00,0.0000000000e+00,0.0000000000e+00,0.2049180493e-01, &
3365 0.6284153461e-01,0.1086065695,0.1571038216,0.2069672048,0.2588797808, &
3366 0.3128415346,0.3674863279,0.4221311212,0.4767760038,0.5314207673, &
3367 0.5846993923,0.6359289289,0.6857923269,0.7329235077,0.7773224115, &
3368 0.8189890981,0.8565573692,0.8893442750,0.9180327654,0.9439890385, &
3369 0.9658470154,0.9836065769,0.9959016442/)
3370 gfile%aryrval(1:36,5)=(/0.0000000000e+00,0.8208955079e-01,0.1679104567,0.2537313402, &
3371 0.3395522237,0.4253731370,0.5111939907,0.6044775844,0.7014924884, &
3372 0.7985074520,0.8955223560,1.000000000,1.000000000,1.000000000, &
3373 1.000000000,1.000000000,1.000000000,1.000000000,1.000000000, &
3374 1.000000000,1.000000000,1.000000000,1.000000000,1.000000000, &
3375 1.000000000,1.000000000,1.000000000,1.000000000,1.000000000, &
3376 1.000000000,1.000000000,1.000000000,1.000000000,1.000000000, &
3377 1.000000000,1.000000000 /)
3378 gfile%aryrval(1:36,6)=(/0.0000000000e+00,0.0000000000e+00,0.0000000000e+00,0.0000000000e+00, &
3379 0.0000000000e+00,0.0000000000e+00,0.0000000000e+00,0.0000000000e+00, &
3380 0.0000000000e+00,0.0000000000e+00,0.0000000000e+00,0.0000000000e+00, &
3381 0.4098360986e-01,0.8469946682e-01,0.1325136721,0.1816939712, &
3382 0.2322404236,0.2855191231,0.3401639462,0.3948087096,0.4494535625, &
3383 0.5040984154,0.5587431192,0.6106557250,0.6612021327,0.7103825212, &
3384 0.7554644346,0.7991803288,0.8387978673,0.8743169308,0.9043716192, &
3385 0.9316939712,0.9562841654,0.9754098058,0.9918032885,1.000000000 /)
3386 gfile%aryrval(1,7)=0.1000000015
3387 gfile%aryrval(2,7)=0.3000000119
3388 gfile%aryrval(3,7)=0.6000000238
3389 gfile%aryrval(4,7)=1.000000000
3392 gfile%dy=111282.1953
3393 allocate(dx(gfile%dimy+2*gfile%nframe))
3395 if(
size(dx).eq.183)
then
3396 dx(1:183)=(/2731.143066,0.0000000000e+00,2731.143066,5461.452148,8190.078125,10916.22852, &
3397 13639.05469,16357.72461,19071.41211,21779.29102,24480.51758,27174.30469,29859.81250, &
3398 32536.22656,35202.73047,37858.51172,40502.74219,43134.64844,45753.42188,48358.25781, &
3399 50948.35938,53522.93750,56081.21094,58622.40625,61145.74609,63650.46094,66135.78906, &
3400 68600.96094,71045.23438,73467.88281,75868.14844,78245.29688,80598.62500,82927.38281, &
3401 85230.89062,87508.42969,89759.32031,91982.86719,94178.39062,96345.23438,98482.71875, &
3402 100590.2188,102667.0625,104712.6406,106726.3281,108707.5000,110655.5625,112569.9062, &
3403 114449.9844,116295.1719,118104.9531,119878.7500,121616.0312,123316.2656,124978.9453, &
3404 126603.5469,128189.5938,129736.5781,131244.0625,132711.5625,134138.6250,135524.8438, &
3405 136869.7500,138173.0000,139434.1406,140652.8125,141828.6406,142961.2812,144050.3438, &
3406 145095.5469,146096.5625,147053.0625,147964.7656,148831.4062,149652.6875,150428.4062, &
3407 151158.2969,151842.1562,152479.7500,153070.9062,153615.4219,154113.1562,154563.9375, &
3408 154967.6406,155324.1406,155633.3281,155895.1094,156109.3906,156276.1250,156395.2656, &
3409 156466.7656,156490.5938,156466.7656,156395.2656,156276.1250,156109.3906,155895.1094, &
3410 155633.3281,155324.1406,154967.6406,154563.9375,154113.1562,153615.4219,153070.9062, &
3411 152479.7500,151842.1562,151158.2969,150428.4062,149652.6875,148831.4062,147964.7656, &
3412 147053.0625,146096.5625,145095.5469,144050.3438,142961.2812,141828.6406,140652.8125, &
3413 139434.1406,138173.0000,136869.7500,135524.8438,134138.6250,132711.5625,131244.0625, &
3414 129736.5781,128189.5938,126603.5469,124978.9453,123316.2656,121616.0312,119878.7500, &
3415 118104.9531,116295.1719,114449.9844,112569.9062,110655.5625,108707.5000,106726.3281, &
3416 104712.6406,102667.0625,100590.2188,98482.71875,96345.23438,94178.39062,91982.86719, &
3417 89759.32031,87508.42969,85230.89062,82927.38281,80598.62500,78245.29688,75868.14844, &
3418 73467.88281,71045.23438,68600.96094,66135.78906,63650.46094,61145.74609,58622.40625, &
3419 56081.21094,53522.93750,50948.35938,48358.25781,45753.42188,43134.64844,40502.74219, &
3420 37858.51172,35202.73047,32536.22656,29859.81250,27174.30469,24480.51758,21779.29102, &
3421 19071.41211,16357.72461,13639.05469,10916.22852,8190.078125,5461.452148,2731.143066, &
3422 0.0000000000e+00,2731.143066 /)
3426 if(
allocated(gfile%dx).and.
size(gfile%dx)==183*(gfile%dimx+2*gfile%nframe))
then
3427 do i=1,gfile%dimy+2*gfile%nframe
3428 gfile%dx((i-1)*(gfile%dimx+2*gfile%nframe)+1:i*(gfile%dimx+2*gfile%nframe))=dx(i)
3434 if(.not.
present(recname).or..not.
present(reclevtyp).or..not.
present(reclev) )
then
3435 if(
size(gfile%recname)==86+20*gfile%dimz+(gfile%dimz+1)+3*gfile%nsoil+4)
then
3436 if(trim(gfile%recname(1))==
'')
then
3438 gfile%recname(1)=
'hgt'
3439 gfile%recname(2)=
'glat'
3440 gfile%recname(3)=
'glon'
3441 gfile%recname(4)=
'dpres'
3442 gfile%recname(5)=
'vlat'
3443 gfile%recname(6)=
'vlon'
3444 gfile%recname(7)=
'acfrcv'
3445 gfile%recname(8)=
'acfrst'
3446 gfile%recname(9)=
'acprec'
3447 gfile%recname(10)=
'acsnom'
3448 gfile%recname(11)=
'acsnow'
3449 gfile%recname(12)=
'akhs_out'
3450 gfile%recname(13)=
'akms_out'
3451 gfile%recname(14)=
'albase'
3452 gfile%recname(15)=
'albedo'
3453 gfile%recname(16)=
'alwin'
3454 gfile%recname(17)=
'alwout'
3455 gfile%recname(18)=
'alwtoa'
3456 gfile%recname(19)=
'aswin'
3457 gfile%recname(20)=
'aswout'
3458 gfile%recname(21)=
'aswtoa'
3459 gfile%recname(22)=
'bgroff'
3460 gfile%recname(23)=
'cfrach'
3461 gfile%recname(24)=
'cfracl'
3462 gfile%recname(25)=
'cfracm'
3463 gfile%recname(26)=
'cldefi'
3464 gfile%recname(27)=
'cmc'
3465 gfile%recname(28)=
'cnvbot'
3466 gfile%recname(29)=
'cnvtop'
3467 gfile%recname(30)=
'cprate'
3468 gfile%recname(31)=
'cuppt'
3469 gfile%recname(32)=
'cuprec'
3470 gfile%recname(33)=
'czen'
3471 gfile%recname(34)=
'czmean'
3472 gfile%recname(35)=
'epsr'
3473 gfile%recname(36)=
'grnflx'
3474 gfile%recname(37)=
'hbotd'
3475 gfile%recname(38)=
'hbots'
3476 gfile%recname(39)=
'htopd'
3477 gfile%recname(40)=
'htops'
3478 gfile%recname(41)=
'mxsnal'
3479 gfile%recname(42)=
'pblh'
3480 gfile%recname(43)=
'potevp'
3481 gfile%recname(44)=
'prec'
3482 gfile%recname(45)=
'pshltr'
3483 gfile%recname(46)=
'q10'
3484 gfile%recname(47)=
'qsh'
3485 gfile%recname(48)=
'qshltr'
3486 gfile%recname(49)=
'qwbs'
3487 gfile%recname(50)=
'qz0'
3488 gfile%recname(51)=
'radot'
3489 gfile%recname(52)=
'rlwin'
3490 gfile%recname(53)=
'rlwtoa'
3491 gfile%recname(54)=
'rswin'
3492 gfile%recname(55)=
'rswinc'
3493 gfile%recname(56)=
'rswout'
3494 gfile%recname(57)=
'sfcevp'
3495 gfile%recname(58)=
'sfcexc'
3496 gfile%recname(59)=
'sfclhx'
3497 gfile%recname(60)=
'sfcshx'
3498 gfile%recname(61)=
'si'
3499 gfile%recname(62)=
'sice'
3500 gfile%recname(63)=
'sigt4'
3501 gfile%recname(64)=
'sm'
3502 gfile%recname(65)=
'smstav'
3503 gfile%recname(66)=
'smstot'
3504 gfile%recname(67)=
'sno'
3505 gfile%recname(68)=
'snopcx'
3506 gfile%recname(69)=
'soiltb'
3507 gfile%recname(70)=
'sr'
3508 gfile%recname(71)=
'ssroff'
3509 gfile%recname(72)=
'tsea'
3510 gfile%recname(73)=
'subshx'
3511 gfile%recname(74)=
'tg'
3512 gfile%recname(75)=
'th10'
3513 gfile%recname(76)=
'ths'
3514 gfile%recname(77)=
'thz0'
3515 gfile%recname(78)=
'tshltr'
3516 gfile%recname(79)=
'twbs'
3517 gfile%recname(80)=
'u10'
3518 gfile%recname(81)=
'uustar'
3519 gfile%recname(82)=
'uz0'
3520 gfile%recname(83)=
'v10'
3521 gfile%recname(84)=
'vfrac'
3522 gfile%recname(85)=
'vz0'
3523 gfile%recname(86)=
'zorl'
3526 gfile%recname(rec+1:rec+gfile%dimz)=
'vvel'
3527 gfile%recname(rec+gfile%dimz+1:rec+2*gfile%dimz)=
'dwdt'
3528 gfile%recname(rec+2*gfile%dimz+1:rec+3*gfile%dimz+1)=
'pres'
3529 gfile%recname(rec+3*gfile%dimz+2:rec+4*gfile%dimz+1)=
'omgalf'
3530 gfile%recname(rec+4*gfile%dimz+2:rec+5*gfile%dimz+1)=
'o3mr'
3531 gfile%recname(rec+5*gfile%dimz+2:rec+6*gfile%dimz+1)=
'cldfra'
3532 gfile%recname(rec+6*gfile%dimz+2:rec+7*gfile%dimz+1)=
'clwmr'
3533 gfile%recname(rec+7*gfile%dimz+2:rec+8*gfile%dimz+1)=
'exch_h'
3534 gfile%recname(rec+8*gfile%dimz+2:rec+9*gfile%dimz+1)=
'spfh'
3535 gfile%recname(rec+9*gfile%dimz+2:rec+10*gfile%dimz+1)=
'q2'
3536 gfile%recname(rec+10*gfile%dimz+2:rec+11*gfile%dimz+1)=
'rlwtt'
3537 gfile%recname(rec+11*gfile%dimz+2:rec+12*gfile%dimz+1)=
'rswtt'
3538 gfile%recname(rec+12*gfile%dimz+2:rec+13*gfile%dimz+1)=
'tmp'
3539 gfile%recname(rec+13*gfile%dimz+2:rec+14*gfile%dimz+1)=
'tcucn'
3540 gfile%recname(rec+14*gfile%dimz+2:rec+15*gfile%dimz+1)=
'train'
3541 gfile%recname(rec+15*gfile%dimz+2:rec+16*gfile%dimz+1)=
'ugrd'
3542 gfile%recname(rec+16*gfile%dimz+2:rec+17*gfile%dimz+1)=
'vgrd'
3543 gfile%recname(rec+17*gfile%dimz+2:rec+18*gfile%dimz+1)=
'xlen_mix'
3544 gfile%recname(rec+18*gfile%dimz+2:rec+19*gfile%dimz+1)=
'f_ice'
3545 gfile%recname(rec+19*gfile%dimz+2:rec+20*gfile%dimz+1)=
'f_rimef'
3546 gfile%recname(rec+20*gfile%dimz+2:rec+21*gfile%dimz+1)=
'f_rain'
3547 gfile%recname(rec+21*gfile%dimz+2:rec+21*gfile%dimz+gfile%nsoil+1)=
'sh2o'
3548 gfile%recname(rec+21*gfile%dimz+gfile%nsoil+2:rec+21*gfile%dimz+2*gfile%nsoil+1)=
'smc'
3549 gfile%recname(rec+21*gfile%dimz+2*gfile%nsoil+2:rec+21*gfile%dimz+3*gfile%nsoil+1)=
'stc'
3550 gfile%recname(rec+21*gfile%dimz+3*gfile%nsoil+2)=
'sltyp'
3551 gfile%recname(rec+21*gfile%dimz+3*gfile%nsoil+3)=
'vgtyp'
3552 gfile%recname(rec+21*gfile%dimz+3*gfile%nsoil+4)=
'cfrcv'
3553 gfile%recname(rec+21*gfile%dimz+3*gfile%nsoil+5)=
'cfrst'
3558 if(
size(gfile%reclevtyp)==86+20*gfile%dimz+(gfile%dimz+1)+3*gfile%nsoil+4)
then
3559 if(trim(gfile%reclevtyp(1))==
'')
then
3560 gfile%reclevtyp=
'sfc'
3561 gfile%reclevtyp(4)=
'hybrid sig lev'
3562 gfile%reclevtyp(46)=
'10 m above gnd'
3563 gfile%reclevtyp(75)=
'10 m above gnd'
3564 gfile%reclevtyp(80)=
'10 m above gnd'
3565 gfile%reclevtyp(83)=
'10 m above gnd'
3567 gfile%reclevtyp(rec+1:rec+gfile%dimz)=
'mid layer'
3568 gfile%reclevtyp(rec+gfile%dimz+1:rec+2*gfile%dimz)=
'mid layer'
3569 gfile%reclevtyp(rec+2*gfile%dimz+1:rec+3*gfile%dimz+1)=
'layer'
3570 gfile%reclevtyp(rec+3*gfile%dimz+2:rec+4*gfile%dimz+1)=
'mid layer'
3571 gfile%reclevtyp(rec+4*gfile%dimz+2:rec+5*gfile%dimz+1)=
'mid layer'
3572 gfile%reclevtyp(rec+5*gfile%dimz+2:rec+6*gfile%dimz+1)=
'mid layer'
3573 gfile%reclevtyp(rec+6*gfile%dimz+2:rec+7*gfile%dimz+1)=
'mid layer'
3574 gfile%reclevtyp(rec+7*gfile%dimz+2:rec+8*gfile%dimz+1)=
'mid layer'
3575 gfile%reclevtyp(rec+8*gfile%dimz+2:rec+9*gfile%dimz+1)=
'mid layer'
3576 gfile%reclevtyp(rec+9*gfile%dimz+2:rec+10*gfile%dimz+1)=
'mid layer'
3577 gfile%reclevtyp(rec+10*gfile%dimz+2:rec+11*gfile%dimz+1)=
'mid layer'
3578 gfile%reclevtyp(rec+11*gfile%dimz+2:rec+12*gfile%dimz+1)=
'mid layer'
3579 gfile%reclevtyp(rec+12*gfile%dimz+2:rec+13*gfile%dimz+1)=
'mid layer'
3580 gfile%reclevtyp(rec+13*gfile%dimz+2:rec+14*gfile%dimz+1)=
'mid layer'
3581 gfile%reclevtyp(rec+14*gfile%dimz+2:rec+15*gfile%dimz+1)=
'mid layer'
3582 gfile%reclevtyp(rec+15*gfile%dimz+2:rec+16*gfile%dimz+1)=
'mid layer'
3583 gfile%reclevtyp(rec+16*gfile%dimz+2:rec+17*gfile%dimz+1)=
'mid layer'
3584 gfile%reclevtyp(rec+17*gfile%dimz+2:rec+18*gfile%dimz+1)=
'mid layer'
3585 gfile%reclevtyp(rec+18*gfile%dimz+2:rec+19*gfile%dimz+1)=
'mid layer'
3586 gfile%reclevtyp(rec+19*gfile%dimz+2:rec+20*gfile%dimz+1)=
'mid layer'
3587 gfile%reclevtyp(rec+20*gfile%dimz+2:rec+21*gfile%dimz+1)=
'mid layer'
3588 gfile%reclevtyp(rec+21*gfile%dimz+2)=
'0-10 cm down'
3589 gfile%reclevtyp(rec+21*gfile%dimz+3)=
'10-40 cm down'
3590 gfile%reclevtyp(rec+21*gfile%dimz+4)=
'40-100 cm down'
3591 gfile%reclevtyp(rec+21*gfile%dimz+5)=
'100-200 cm down'
3592 gfile%reclevtyp(rec+21*gfile%dimz+gfile%nsoil+2)=
'0-10 cm down'
3593 gfile%reclevtyp(rec+21*gfile%dimz+gfile%nsoil+3)=
'10-40 cm down'
3594 gfile%reclevtyp(rec+21*gfile%dimz+gfile%nsoil+4)=
'40-100 cm down'
3595 gfile%reclevtyp(rec+21*gfile%dimz+gfile%nsoil+5)=
'100-200 cm down'
3596 gfile%reclevtyp(rec+21*gfile%dimz+2*gfile%nsoil+2)=
'0-10 cm down'
3597 gfile%reclevtyp(rec+21*gfile%dimz+2*gfile%nsoil+3)=
'10-40 cm down'
3598 gfile%reclevtyp(rec+21*gfile%dimz+2*gfile%nsoil+4)=
'40-100 cm down'
3599 gfile%reclevtyp(rec+21*gfile%dimz+2*gfile%nsoil+5)=
'100-200 cm down'
3604 if(
size(gfile%reclev)==86+20*gfile%dimz+(gfile%dimz+1)+3*gfile%nsoil+4)
then
3605 if(gfile%reclev(1)==-9999)
then
3610 gfile%reclev(rec+(j-1)*gfile%dimz+i)=i
3613 gfile%reclev(rec+3*gfile%dimz+1)=gfile%dimz+1
3616 gfile%reclev(rec+(j-1)*gfile%dimz+1+i)=i
3619 rec=rec+21*gfile%dimz+1
3622 gfile%reclev(rec+(j-22)*gfile%nsoil+i)=i
3629 else if ( equal_str_nocase(trim(gfile%modelname),
"GSI").and.linit)
then
3631 gfile%arycname(1)=
'recunit'
3632 gfile%aryclen(1)=gfile%nrec
3633 allocate(gfile%arycval(maxval(gfile%aryclen),gfile%nmetaaryc))
3634 gfile%arycval(1,1)=
'pgm'
3635 gfile%arycval(2,1)=
'nondim'
3636 gfile%arycval(3:gfile%dimz+2,1)=
'K'
3637 gfile%arycval(gfile%dimz+3:3*gfile%dimz+2,1)=
'm/s '
3638 gfile%arycval(3*gfile%dimz+3:6*gfile%dimz+2,1)=
'kg/kg '
3639 gfile%arycval(6*gfile%dimz+3,1)=
'%'
3640 gfile%arycval(6*gfile%dimz+4,1)=
'K'
3641 gfile%arycval(6*gfile%dimz+5,1)=
'kg/m2 '
3642 gfile%arycval(6*gfile%dimz+6,1)=
'integer'
3643 gfile%arycval(6*gfile%dimz+7,1)=
'% '
3644 gfile%arycval(6*gfile%dimz+8,1)=
'integer'
3645 gfile%arycval(6*gfile%dimz+9,1)=
'integer'
3646 gfile%arycval(6*gfile%dimz+10,1)=
'm '
3647 gfile%arycval(6*gfile%dimz+11,1)=
'K '
3648 gfile%arycval(6*gfile%dimz+12,1)=
'% '
3650 if(.not.
present(recname).or..not.
present(reclevtyp).or..not.
present(reclev) )
then
3652 if(
size(gfile%recname)==10+3*gfile%dimz+gfile%ntrac*gfile%dimz .and. &
3653 size(gfile%reclevtyp)==10+3*gfile%dimz+gfile%ntrac*gfile%dimz .and. &
3654 size(gfile%reclev)==10+3*gfile%dimz+gfile%ntrac*gfile%dimz )
then
3655 gfile%reclevtyp=
'sfc'
3657 gfile%recname(1)=
'hgt'
3658 gfile%recname(2)=
'pres'
3660 gfile%recname(rec+1:rec+gfile%dimz)=
'tmp'
3661 gfile%reclevtyp(rec+1:rec+gfile%dimz)=
'mid layer'
3662 gfile%recname(rec+gfile%dimz+1:rec+2*gfile%dimz)=
'ugrd'
3663 gfile%reclevtyp(rec+gfile%dimz+1:rec+2*gfile%dimz)=
'mid layer'
3664 gfile%recname(rec+2*gfile%dimz+1:rec+3*gfile%dimz)=
'vgrd'
3665 gfile%reclevtyp(rec+2*gfile%dimz+1:rec+3*gfile%dimz)=
'mid layer'
3668 gfile%reclev(rec+(i-1)*gfile%dimz+j)=j
3672 if ( i.eq.1) gfile%recname(rec+(2+i)*gfile%dimz+1:rec+(3+i)*gfile%dimz)=
'spfh'
3673 if ( i.eq.1) gfile%reclevtyp(rec+(2+i)*gfile%dimz+1:rec+(3+i)*gfile%dimz)=
'mid layer'
3674 if ( i.eq.2) gfile%recname(rec+(2+i)*gfile%dimz+1:rec+(3+i)*gfile%dimz)=
'o3mr'
3675 if ( i.eq.2) gfile%reclevtyp(rec+(2+i)*gfile%dimz+1:rec+(3+i)*gfile%dimz)=
'mid layer'
3676 if ( i.eq.3) gfile%recname(rec+(2+i)*gfile%dimz+1:rec+(3+i)*gfile%dimz)=
'clwmr'
3677 if ( i.eq.3) gfile%reclevtyp(rec+(2+i)*gfile%dimz+1:rec+(3+i)*gfile%dimz)=
'mid layer'
3679 gfile%reclev(rec+(2+i)*gfile%dimz+j)=j
3682 rec=rec+3*gfile%dimz+gfile%ntrac*gfile%dimz
3683 gfile%recname(rec+1)=
'f10m'
3684 gfile%recname(rec+2)=
'tsea'
3685 gfile%recname(rec+3)=
'sheleg'
3686 gfile%recname(rec+4)=
'vtype'
3687 gfile%recname(rec+5)=
'vfrac'
3688 gfile%recname(rec+6)=
'stype'
3689 gfile%recname(rec+7)=
'slmsk'
3690 gfile%recname(rec+8)=
'zorl'
3691 gfile%recname(rec+9)=
'stc'
3692 gfile%recname(rec+10)=
'smc'
3693 gfile%reclevtyp(rec+9:rec+10)=
'soil layer'
3700 end subroutine nemsio_gfinit
3704 subroutine nemsio_getlu(gfile,gfname,gaction,iret,ltlendian)
3710 type(nemsio_gfile),
intent (inout) :: gfile
3711 character*(*),
intent(in) :: gfname,gaction
3712 integer,
intent(out) :: iret
3713 logical,
optional,
intent(in) :: ltlendian
3715 logical :: flltlendian
3718 gfile%gaction=gaction
3720 if(
present(ltlendian))flltlendian=ltlendian
3721 if(.not. flltlendian)
then
3723 if ( fileunit(i) .eq. 0 )
then
3730 elseif(flltlendian)
then
3732 if ( fileunit(i) .eq. 0 )
then
3740 end subroutine nemsio_getlu
3743 subroutine nemsio_clslu(gfile,iret)
3748 type(nemsio_gfile),
intent (inout) :: gfile
3749 integer,
intent(out) :: iret
3751 if ( fileunit(gfile%flunit) .ne. 0 )
then
3752 fileunit(gfile%flunit)=0
3756 end subroutine nemsio_clslu
3759 subroutine nemsio_setrqst(gfile,grbmeta,iret,jrec,vname,vlevtyp,vlev,w34,idrt, &
3760 itr,zhour,ibms,precision)
3768 type(nemsio_gfile),
intent(inout) :: gfile
3769 type(nemsio_grbmeta),
intent(out) :: grbmeta
3770 integer(nemsio_intkind),
optional,
intent(in) :: jrec
3771 character(*),
optional,
intent(in) :: vname,vlevtyp
3772 integer(nemsio_intkind),
optional,
intent(in) :: vlev
3773 integer(nemsio_intkind),
intent(out) :: iret
3774 integer(nemsio_intkind),
optional,
intent(in) :: w34
3775 integer(nemsio_intkind),
optional,
intent(in) :: idrt
3776 integer(nemsio_intkind),
optional,
intent(in) :: itr
3777 real(nemsio_realkind),
optional,
intent(in) :: zhour
3778 integer(nemsio_intkind),
optional,
intent(in) :: ibms
3779 integer(nemsio_intkind),
optional,
intent(in) :: precision
3780 character(255) :: name,levtyp
3781 integer :: icen,iptv,itl,jbms,jftu,jp1,jp2,jtr,jna,jnm,ios
3782 integer :: i,lev,ktbl,krec,idrt_in,itr_rw
3787 if (
present(jrec))
then
3788 if ( jrec.gt.0 .and. jrec.le.gfile%nrec)
then
3789 name=gfile%recname(jrec)
3790 levtyp=gfile%reclevtyp(jrec)
3791 lev=gfile%reclev(jrec)
3795 elseif (
present(vname) .and.
present(vlevtyp) .and.
present(vlev))
then
3797 levtyp=trim(vlevtyp)
3806 call nemsio_grbtbl_search(trim(name),trim(levtyp),ktbl,krec,ios)
3811 if ( trim(gribtable(ktbl)%item(krec)%leveltype) .ne.
'layer' .and. &
3812 trim(gribtable(ktbl)%item(krec)%leveltype) .ne.
'mid layer' )
then
3822 if ( equal_str_nocase(trim(gfile%gaction),
"read") .or. &
3823 equal_str_nocase(trim(gfile%gaction),
"rdwr") )
then
3824 grbmeta%jpds(05)=gribtable(ktbl)%item(krec)%g1param
3825 grbmeta%jpds(06)=gribtable(ktbl)%item(krec)%g1level
3826 grbmeta%jpds(07)=lev
3827 if ( grbmeta%jpds(06).eq.110 )
then
3828 grbmeta%jpds(07)=256*(lev-1)+lev
3830 if (gribtable(ktbl)%item(krec)%g1lev.ne.0)
then
3831 grbmeta%jpds(07)=gribtable(ktbl)%item(krec)%g1lev
3835 if(index(trim(name),
"_ave")>0) itr_rw=3
3836 if(index(trim(name),
"_acc")>0) itr_rw=4
3837 if(index(trim(name),
"_max")>0) itr_rw=2
3838 if(index(trim(name),
"_min")>0) itr_rw=2
3843 if (
present(precision))
then
3844 gribtable(ktbl)%item(krec)%precision=precision
3846 if (
present(idrt))
then
3857 if(
present(itr) )
then
3859 if(itr==3.or.itr==2.or.itr==4)
then
3860 if(
present(zhour))
then
3864 print *,
'ERROR in nemsio gribfile,itr=',itr,
'need to set zhour'
3870 if(
present(ibms)) jbms=ibms
3874 if(maxval(gfile%jgds)==nemsio_kpds_intfill.and. &
3875 minval(gfile%jgds)==nemsio_kpds_intfill )
then
3876 if (
present(w34) )
then
3877 call nemsio_makglgds(gfile,idrt_in,grbmeta%jgds,ios,w34)
3878 gfile%jgds=grbmeta%jgds
3880 call nemsio_makglgds(gfile,idrt_in,grbmeta%jgds,ios)
3881 gfile%jgds=grbmeta%jgds
3886 grbmeta%jgds=gfile%jgds
3889 iptv=gribtable(ktbl)%iptv
3893 call nemsio_makglpds(gfile,iptv,icen,jbms,&
3894 jftu,jp1,jp2,itr_rw,jna,jnm,jrec,ktbl,krec,lev,grbmeta%jpds,ios)
3902 grbmeta%jf=gfile%fieldsize
3903 allocate(grbmeta%lbms(grbmeta%jf))
3905 end subroutine nemsio_setrqst
3907 subroutine nemsio_makglgds(gfile,idrt,kgds,iret,w34)
3912 type(nemsio_gfile),
intent(inout) :: gfile
3913 integer(nemsio_intkind),
intent(out) :: iret
3914 integer,
intent(in):: idrt
3915 integer,
optional,
intent(in):: w34
3916 integer,
intent(out):: kgds(200)
3917 real(nemsio_dblekind) :: slat8(gfile%dimy)
3918 real(nemsio_realkind) :: slat4(gfile%dimy)
3923 if(idrt.eq.0.and.gfile%dimx.eq.144.and.gfile%dimy.eq.73) igrid=2
3924 if(idrt.eq.0.and.gfile%dimx.eq.360.and.gfile%dimy.eq.181) igrid=3
3925 if(idrt.eq.0.and.gfile%dimx.eq.720.and.gfile%dimy.eq.361) igrid=4
3926 if(idrt.eq.4.and.gfile%dimx.eq.192.and.gfile%dimy.eq.94) igrid=98
3927 if(idrt.eq.4.and.gfile%dimx.eq.384.and.gfile%dimy.eq.192) igrid=126
3928 if(idrt.eq.4.and.gfile%dimx.eq.512.and.gfile%dimy.eq.256) igrid=170
3929 if(idrt.eq.4.and.gfile%dimx.eq.768.and.gfile%dimy.eq.384) igrid=127
3932 kgds(1)=modulo(idrt,256)
3942 if (
present (w34))
then
3943 call splat(idrt,gfile%dimy,slat4)
3944 kgds(4)=nint(180000./acos(-1.)*asin(slat4(1)))
3946 call splat(idrt,gfile%dimy,slat8)
3947 kgds(4)=nint(180000./acos(-1.)*asin(slat8(1)))
3950 kgds(4)=90000-nint(0.5*180000./gfile%dimy)
3955 kgds(8)=-nint(360000./gfile%dimx)
3959 kgds(10)=nint(180000./(gfile%dimy-1))
3961 kgds(10)=gfile%dimy/2
3963 kgds(10)=nint(180000./gfile%dimy)
3972 end subroutine nemsio_makglgds
3974 subroutine nemsio_makglpds(gfile,iptv,icen,ibms,&
3975 iftu,ip1,ip2,itr,ina,inm,jrec,ktbl,krec,lev,kpds,iret)
3980 type(nemsio_gfile),
intent(in) :: gfile
3981 integer,
intent(in):: iptv,icen,ibms
3982 integer,
intent(in):: iftu,ip1,ip2,itr,ina,inm,jrec,ktbl,krec,lev
3983 integer,
intent(out):: kpds(200)
3984 integer(nemsio_intkind),
intent(out) :: iret
3985 integer :: i,igen,icen2,igrid
3992 call nemsio_getheadvar(gfile,
'igen',igen,iret)
3993 if (iret.ne.0 )
then
3994 if(equal_str_nocase(trim(gfile%modelname),
'GFS'))
then
3997 print *,
'ERROR: please specify model generating flag'
4001 call nemsio_getheadvar(gfile,
'icen2',icen2,iret)
4002 if (iret.ne.0 )
then
4003 if(equal_str_nocase(trim(gfile%modelname),
'GFS'))
then
4006 print *,
'ERROR: please specify subcenter id,modelname=',gfile%modelname
4014 kpds(04)=128+64*ibms
4015 kpds(05)=gribtable(ktbl)%item(krec)%g1param
4016 kpds(06)=gribtable(ktbl)%item(krec)%g1level
4018 if(gribtable(ktbl)%item(krec)%g1lev/=0)
then
4019 kpds(07)=gribtable(ktbl)%item(krec)%g1lev
4022 if ( kpds(06).eq.110 )
then
4023 kpds(07)=256*(lev-1)+lev
4026 kpds(08)=mod(gfile%idate(1)-1,100)+1
4027 kpds(09)=gfile%idate(2)
4028 kpds(10)=gfile%idate(3)
4029 kpds(11)=gfile%idate(4)
4039 kpds(21)=(gfile%idate(1)-1)/100+1
4040 kpds(22)=gribtable(ktbl)%item(krec)%precision
4047 end subroutine nemsio_makglpds
4050 subroutine nemsio_searchrecv(gfile,jrec,name,levtyp,lev,iret)
4055 type(nemsio_gfile),
intent(in) :: gfile
4056 integer(nemsio_intkind),
intent(out) :: jrec
4057 character(*),
intent(in) :: name
4058 character(*),
intent(in),
optional :: levtyp
4059 integer(nemsio_intkind),
optional,
intent(in) :: lev
4060 integer(nemsio_intkind),
optional,
intent(out) :: iret
4061 integer i, nsize,nlen,nlen1
4065 nlen=min(len(name),len(gfile%recname))
4066 nlen1=min(len(levtyp),len(gfile%reclevtyp))
4069 if(
size(gfile%recname)/=gfile%nrec)
return
4070 if(.not.
present(levtyp))
then
4072 if ( equal_str_nocase(trim(name),trim(gfile%recname(i))) )
then
4077 else if (
size(gfile%reclevtyp).eq.gfile%nrec)
then
4078 if(.not.
present(lev))
then
4080 if ( equal_str_nocase(trim(name),trim(gfile%recname(i))) .and. &
4081 equal_str_nocase(trim(levtyp),trim(gfile%reclevtyp(i))) )
then
4086 else if(
size(gfile%reclev).eq.gfile%nrec)
then
4088 if ( equal_str_nocase(trim(name),trim(gfile%recname(i))) .and. &
4089 equal_str_nocase(trim(levtyp),trim(gfile%reclevtyp(i)) ) .and. &
4090 lev==gfile%reclev(i) )
then
4097 if ( jrec .ne.0 ) iret=0
4100 end subroutine nemsio_searchrecv
4104 subroutine nemsio_grbtbl_search(vname,vlevtyp,ktbl,krec,iret)
4109 character(*),
intent(in) :: vname,vlevtyp
4110 integer(nemsio_intkind),
intent(out) :: ktbl,krec
4111 integer(nemsio_intkind),
intent(out) :: iret
4113 character(16) :: lcname,lclevtyp
4117 i=index(trim(vname),
"_")
4118 lcname=trim(lowercase(trim(vname)))
4119 if(i>0) lcname=trim(lowercase(trim(vname(1:i-1))))
4120 lclevtyp=trim(lowercase(trim(vlevtyp)))
4124 do j=1,
size(gribtable)
4125 do i=1,
size(gribtable(j)%item)
4126 if(trim(gribtable(j)%item(i)%shortname)==trim(lcname) .and. &
4127 trim(gribtable(j)%item(i)%leveltype)==trim(lclevtyp) )
then
4136 end subroutine nemsio_grbtbl_search
4138 subroutine nemsio_chkgfary(gfile,iret)
4143 type(nemsio_gfile),
intent(inout) :: gfile
4144 integer(nemsio_intkind),
intent(out) :: iret
4148 if ( gfile%dimx .eq. nemsio_intfill .or. gfile%dimy .eq. nemsio_intfill &
4149 .or. gfile%dimz .eq. nemsio_intfill .or. gfile%nrec .eq. nemsio_intfill )
then
4150 print *,
'ERROR: dimx,dimy,dimz and nrec must be defined!'
4153 if(gfile%nmeta>5)
then
4154 if (.not.
allocated(gfile%vcoord) .or.
size(gfile%vcoord).ne. &
4155 (gfile%dimz+1)*3*2 )
then
4156 call nemsio_almeta1(gfile,ios)
4157 if (ios .ne. 0)
return
4160 if(gfile%nmeta>=10)
then
4161 if (.not.
allocated(gfile%lat) .or.
size(gfile%lat).ne.gfile%fieldsize .or.&
4162 .not.
allocated(gfile%lon) .or.
size(gfile%lon).ne.gfile%fieldsize .or.&
4163 .not.
allocated(gfile%dx) .or.
size(gfile%dx).ne.gfile%fieldsize .or.&
4164 .not.
allocated(gfile%dy) .or.
size(gfile%dy).ne.gfile%fieldsize)
then
4165 call nemsio_almeta2(gfile,ios)
4166 if (ios .ne. 0)
return
4169 if(gfile%nmeta>=12)
then
4170 if(gfile%ntrac==nemsio_intfill)
then
4171 print *,
'ERROR: ntrac is not defined!'
4174 if (.not.
allocated(gfile%Cpi) .or.
size(gfile%Cpi).ne.gfile%ntrac+1 .or. &
4175 .not.
allocated(gfile%Ri) .or.
size(gfile%Ri).ne.gfile%ntrac+1 )
then
4176 call nemsio_almeta3(gfile,ios)
4177 if (ios .ne. 0)
return
4181 if(gfile%nmeta>2)
then
4182 if (
allocated(gfile%recname) .and.
size(gfile%recname).eq.gfile%nrec)&
4184 if (
allocated(gfile%reclevtyp) .and.
size(gfile%reclevtyp) &
4185 .eq.gfile%nrec)
then
4186 if (
allocated(gfile%reclev) .and.
size(gfile%reclev).eq. &
4194 call nemsio_almeta4(gfile,ios)
4195 if (ios .ne. 0)
return
4198 end subroutine nemsio_chkgfary
4200 subroutine nemsio_almeta(gfile,iret)
4205 type(nemsio_gfile),
intent(inout) :: gfile
4206 integer(nemsio_intkind),
intent(out) :: iret
4207 integer ::dimvcoord1,dimvcoord2,dimnmmlev
4208 integer ::dimrecname,dimreclevtyp,dimreclev
4211 integer ::iret1,iret2,iret3,iret4,iret5
4214 dimvcoord1=gfile%dimz+1
4215 dimrecname=gfile%nrec
4216 dimreclevtyp=gfile%nrec
4217 dimreclev=gfile%nrec
4218 dimfield=gfile%fieldsize
4219 dimcpr=gfile%ntrac+1
4220 if(
allocated(gfile%recname))
deallocate(gfile%recname)
4221 if(
allocated(gfile%reclevtyp))
deallocate(gfile%reclevtyp)
4222 if(
allocated(gfile%reclev))
deallocate(gfile%reclev)
4223 if(
allocated(gfile%vcoord))
deallocate(gfile%vcoord)
4224 if(
allocated(gfile%lat))
deallocate(gfile%lat)
4225 if(
allocated(gfile%lon))
deallocate(gfile%lon)
4226 if(
allocated(gfile%dx))
deallocate(gfile%dx)
4227 if(
allocated(gfile%dy))
deallocate(gfile%dy)
4228 if(
allocated(gfile%Cpi))
deallocate(gfile%Cpi)
4229 if(
allocated(gfile%Ri))
deallocate(gfile%Ri)
4230 if(gfile%nmeta>=5)
then
4231 allocate(gfile%recname(dimrecname), gfile%reclevtyp(dimreclevtyp), &
4232 gfile%reclev(dimreclev), &
4235 gfile%reclev=nemsio_intfill
4239 iret=iret+abs(iret1)
4241 if(gfile%nmeta>=6)
then
4242 allocate(gfile%vcoord(dimvcoord1,3,2) ,stat=iret2)
4244 gfile%vcoord=nemsio_realfill
4246 iret=iret+abs(iret2)
4248 if(gfile%nmeta>=8)
then
4249 allocate(gfile%lat(dimfield), gfile%lon(dimfield),stat=iret3)
4251 gfile%lat=nemsio_realfill
4252 gfile%lon=nemsio_realfill
4254 iret=iret+abs(iret3)
4256 if(gfile%nmeta>=10)
then
4257 allocate(gfile%dx(dimfield), gfile%dy(dimfield) ,stat=iret4)
4259 gfile%dx=nemsio_realfill
4260 gfile%dy=nemsio_realfill
4262 iret=iret+abs(iret4)
4264 if(gfile%nmeta>=12)
then
4265 allocate(gfile%Cpi(dimcpr), gfile%Ri(dimcpr), stat=iret5)
4267 gfile%Cpi=nemsio_realfill
4268 gfile%Ri=nemsio_realfill
4270 iret=iret+abs(iret5)
4273 if(iret.ne.0) iret=-6
4274 end subroutine nemsio_almeta
4276 subroutine nemsio_alextrameta(gfile,iret)
4281 type(nemsio_gfile),
intent(inout) :: gfile
4282 integer(nemsio_intkind),
intent(out) :: iret
4283 integer ::iret1,iret2,iret3,iret4
4286 if(gfile%extrameta)
then
4291 if(gfile%nmetavari.gt.0)
then
4292 if(
allocated(gfile%variname))
deallocate(gfile%variname)
4293 if(
allocated(gfile%varival))
deallocate(gfile%varival)
4294 allocate(gfile%variname(gfile%nmetavari), &
4295 gfile%varival(gfile%nmetavari), stat=iret1 )
4296 if(iret1.ne.0)
return
4298 if(gfile%nmetavarr.gt.0)
then
4299 if(
allocated(gfile%varrname))
deallocate(gfile%varrname)
4300 if(
allocated(gfile%varrval))
deallocate(gfile%varrval)
4301 allocate(gfile%varrname(gfile%nmetavarr), &
4302 gfile%varrval(gfile%nmetavarr), stat=iret1 )
4303 if(iret1.ne.0)
return
4305 if(gfile%nmetavarl.gt.0)
then
4306 if(
allocated(gfile%varlname))
deallocate(gfile%varlname)
4307 if(
allocated(gfile%varlval))
deallocate(gfile%varlval)
4308 allocate(gfile%varlname(gfile%nmetavarl), &
4309 gfile%varlval(gfile%nmetavarl), stat=iret1 )
4310 if(iret1.ne.0)
return
4312 if(gfile%nmetavarc.gt.0)
then
4313 if(
allocated(gfile%varcname))
deallocate(gfile%varcname)
4314 if(
allocated(gfile%varcval))
deallocate(gfile%varcval)
4315 allocate(gfile%varcname(gfile%nmetavarc), &
4316 gfile%varcval(gfile%nmetavarc), stat=iret1 )
4317 if(iret1.ne.0)
return
4319 if(gfile%nmetavarr8.gt.0)
then
4320 if(
allocated(gfile%varr8name))
deallocate(gfile%varr8name)
4321 if(
allocated(gfile%varr8val))
deallocate(gfile%varr8val)
4322 allocate(gfile%varr8name(gfile%nmetavarr8), &
4323 gfile%varr8val(gfile%nmetavarr8), stat=iret1 )
4324 if(iret1.ne.0)
return
4326 if(gfile%nmetaaryi.gt.0)
then
4327 if(
allocated(gfile%aryiname))
deallocate(gfile%aryiname)
4328 if(
allocated(gfile%aryilen))
deallocate(gfile%aryilen)
4329 if(
allocated(gfile%aryival))
deallocate(gfile%aryival)
4330 allocate(gfile%aryiname(gfile%nmetaaryi), &
4331 gfile%aryilen(gfile%nmetaaryi), stat=iret1 )
4332 if(iret1.ne.0)
return
4334 if(gfile%nmetaaryr.gt.0)
then
4335 if(
allocated(gfile%aryrname))
deallocate(gfile%aryrname)
4336 if(
allocated(gfile%aryrlen))
deallocate(gfile%aryrlen)
4337 if(
allocated(gfile%aryrval))
deallocate(gfile%aryrval)
4338 allocate(gfile%aryrname(gfile%nmetaaryr), &
4339 gfile%aryrlen(gfile%nmetaaryr), stat=iret1 )
4340 if(iret1.ne.0)
return
4342 if(gfile%nmetaaryl.gt.0)
then
4343 if(
allocated(gfile%arylname))
deallocate(gfile%arylname)
4344 if(
allocated(gfile%aryllen))
deallocate(gfile%aryllen)
4345 if(
allocated(gfile%arylval))
deallocate(gfile%arylval)
4346 allocate(gfile%arylname(gfile%nmetaaryl), &
4347 gfile%aryllen(gfile%nmetaaryl), stat=iret1 )
4348 if(iret1.ne.0)
return
4350 if(gfile%nmetaaryc.gt.0)
then
4351 if(
allocated(gfile%arycname))
deallocate(gfile%arycname)
4352 if(
allocated(gfile%aryclen))
deallocate(gfile%aryclen)
4353 if(
allocated(gfile%arycval))
deallocate(gfile%arycval)
4354 allocate(gfile%arycname(gfile%nmetaaryc), &
4355 gfile%aryclen(gfile%nmetaaryc), stat=iret1 )
4356 if(iret1.ne.0)
return
4358 if(gfile%nmetaaryr8.gt.0)
then
4359 if(
allocated(gfile%aryr8name))
deallocate(gfile%aryr8name)
4360 if(
allocated(gfile%aryr8len))
deallocate(gfile%aryr8len)
4361 if(
allocated(gfile%aryr8val))
deallocate(gfile%aryr8val)
4362 allocate(gfile%aryr8name(gfile%nmetaaryr8), &
4363 gfile%aryr8len(gfile%nmetaaryr8), stat=iret1 )
4364 if(iret1.ne.0)
return
4369 end subroutine nemsio_alextrameta
4371 subroutine nemsio_almeta1(gfile,iret)
4376 type(nemsio_gfile),
intent(inout) :: gfile
4377 integer(nemsio_intkind),
intent(out) :: iret
4378 integer :: dimvcoord1,dimnmmlev,dimnmmnsoil
4379 integer :: dimgsilev
4381 dimvcoord1=gfile%dimz+1
4382 if(
allocated(gfile%vcoord))
deallocate(gfile%vcoord)
4383 allocate(gfile%vcoord(dimvcoord1,3,2), stat=iret)
4385 gfile%vcoord=nemsio_realfill
4387 if(iret.ne.0) iret=-6
4388 end subroutine nemsio_almeta1
4390 subroutine nemsio_almeta2(gfile,iret)
4395 type(nemsio_gfile),
intent(inout) :: gfile
4396 integer(nemsio_intkind),
intent(out) :: iret
4399 dimlat=gfile%fieldsize
4400 if(
allocated(gfile%lat))
deallocate(gfile%lat)
4401 if(
allocated(gfile%lon))
deallocate(gfile%lon)
4402 if(
allocated(gfile%dx))
deallocate(gfile%dx)
4403 if(
allocated(gfile%dy))
deallocate(gfile%dy)
4404 allocate(gfile%lat(dimlat),gfile%lon(dimlat), &
4405 gfile%dx(dimlat),gfile%dy(dimlat), stat=iret)
4407 gfile%lat=nemsio_realfill
4408 gfile%lon=nemsio_realfill
4409 gfile%dx=nemsio_realfill
4410 gfile%dy=nemsio_realfill
4412 if(iret.ne.0) iret=-6
4413 end subroutine nemsio_almeta2
4415 subroutine nemsio_almeta3(gfile,iret)
4420 type(nemsio_gfile),
intent(inout) :: gfile
4421 integer(nemsio_intkind),
intent(out) :: iret
4425 if(
allocated(gfile%Cpi))
deallocate(gfile%Cpi)
4426 if(
allocated(gfile%Ri))
deallocate(gfile%Ri)
4427 allocate(gfile%Cpi(dim1d),gfile%Ri(dim1d),stat=iret)
4429 gfile%Cpi=nemsio_realfill
4430 gfile%Ri=nemsio_realfill
4432 if(iret.ne.0) iret=-6
4433 end subroutine nemsio_almeta3
4435 subroutine nemsio_almeta4(gfile,iret)
4440 type(nemsio_gfile),
intent(inout) :: gfile
4441 integer(nemsio_intkind),
intent(out) :: iret
4442 integer :: dimrecname,dimreclevtyp,dimreclev
4444 if(gfile%nrec<0)
then
4445 print *,
'ERROR: Please set nrec, it is ',gfile%nrec,
' now!'
4449 dimrecname=gfile%nrec
4450 dimreclevtyp=gfile%nrec
4451 dimreclev=gfile%nrec
4452 if(
allocated(gfile%recname))
deallocate(gfile%recname)
4453 if(
allocated(gfile%reclevtyp))
deallocate(gfile%reclevtyp)
4454 if(
allocated(gfile%reclev))
deallocate(gfile%reclev)
4455 allocate(gfile%recname(dimrecname), gfile%reclevtyp(dimreclevtyp), &
4456 gfile%reclev(dimreclev), stat=iret)
4458 gfile%reclev=nemsio_intfill
4462 if(iret.ne.0) iret=-6
4463 end subroutine nemsio_almeta4
4465 subroutine nemsio_axmeta(gfile,iret)
4470 type(nemsio_gfile),
intent(inout) :: gfile
4471 integer(nemsio_intkind),
intent(out) :: iret
4472 integer(nemsio_intkind) :: ierr
4476 if(
allocated(gfile%recname))
deallocate(gfile%recname,stat=ierr)
4477 if(
allocated(gfile%reclevtyp))
deallocate(gfile%reclevtyp,stat=ierr)
4478 if(
allocated(gfile%reclev))
deallocate(gfile%reclev,stat=ierr)
4479 if(
allocated(gfile%vcoord))
deallocate(gfile%vcoord,stat=ierr)
4480 if(
allocated(gfile%lat))
deallocate(gfile%lat,stat=ierr)
4481 if(
allocated(gfile%lon))
deallocate(gfile%lon,stat=ierr)
4482 if(
allocated(gfile%dx))
deallocate(gfile%dx,stat=ierr)
4483 if(
allocated(gfile%dy))
deallocate(gfile%dy,stat=ierr)
4484 if(
allocated(gfile%Cpi))
deallocate(gfile%Cpi,stat=ierr)
4485 if(
allocated(gfile%Ri))
deallocate(gfile%Ri,stat=ierr)
4487 if(
allocated(gfile%variname))
deallocate(gfile%variname,stat=ierr)
4488 if(
allocated(gfile%varival))
deallocate(gfile%varival,stat=ierr)
4489 if(
allocated(gfile%varrname))
deallocate(gfile%varrname,stat=ierr)
4490 if(
allocated(gfile%varrval))
deallocate(gfile%varrval,stat=ierr)
4491 if(
allocated(gfile%varlname))
deallocate(gfile%varlname,stat=ierr)
4492 if(
allocated(gfile%varlval))
deallocate(gfile%varlval,stat=ierr)
4493 if(
allocated(gfile%varcname))
deallocate(gfile%varcname,stat=ierr)
4494 if(
allocated(gfile%varcval))
deallocate(gfile%varcval,stat=ierr)
4495 if(
allocated(gfile%varr8name))
deallocate(gfile%varr8name,stat=ierr)
4496 if(
allocated(gfile%varr8val))
deallocate(gfile%varr8val,stat=ierr)
4497 if(
allocated(gfile%aryiname))
deallocate(gfile%aryiname,stat=ierr)
4498 if(
allocated(gfile%aryilen))
deallocate(gfile%aryilen,stat=ierr)
4499 if(
allocated(gfile%aryival))
deallocate(gfile%aryival,stat=ierr)
4500 if(
allocated(gfile%aryrname))
deallocate(gfile%aryrname,stat=ierr)
4501 if(
allocated(gfile%aryrlen))
deallocate(gfile%aryrlen,stat=ierr)
4502 if(
allocated(gfile%aryrval))
deallocate(gfile%aryrval,stat=ierr)
4503 if(
allocated(gfile%arylname))
deallocate(gfile%arylname,stat=ierr)
4504 if(
allocated(gfile%aryllen))
deallocate(gfile%aryllen,stat=ierr)
4505 if(
allocated(gfile%arylval))
deallocate(gfile%arylval,stat=ierr)
4506 if(
allocated(gfile%arycname))
deallocate(gfile%arycname,stat=ierr)
4507 if(
allocated(gfile%aryclen))
deallocate(gfile%aryclen,stat=ierr)
4508 if(
allocated(gfile%arycval))
deallocate(gfile%arycval,stat=ierr)
4509 if(
allocated(gfile%aryr8name))
deallocate(gfile%aryr8name,stat=ierr)
4510 if(
allocated(gfile%aryr8len))
deallocate(gfile%aryr8len,stat=ierr)
4511 if(
allocated(gfile%aryr8val))
deallocate(gfile%aryr8val,stat=ierr)
4513 if(
allocated(gfile%headvariname))
deallocate(gfile%headvariname,stat=ierr)
4514 if(
allocated(gfile%headvarrname))
deallocate(gfile%headvarrname,stat=ierr)
4515 if(
allocated(gfile%headvarlname))
deallocate(gfile%headvarlname,stat=ierr)
4516 if(
allocated(gfile%headvarcname))
deallocate(gfile%headvarcname,stat=ierr)
4517 if(
allocated(gfile%headvarival))
deallocate(gfile%headvarival,stat=ierr)
4518 if(
allocated(gfile%headvarrval))
deallocate(gfile%headvarrval,stat=ierr)
4519 if(
allocated(gfile%headvarlval))
deallocate(gfile%headvarlval,stat=ierr)
4520 if(
allocated(gfile%headvarcval))
deallocate(gfile%headvarcval,stat=ierr)
4521 if(
allocated(gfile%headaryiname))
deallocate(gfile%headaryiname,stat=ierr)
4522 if(
allocated(gfile%headaryrname))
deallocate(gfile%headaryrname,stat=ierr)
4523 if(
allocated(gfile%headarycname))
deallocate(gfile%headarycname,stat=ierr)
4524 if(
allocated(gfile%headaryival))
deallocate(gfile%headaryival,stat=ierr)
4525 if(
allocated(gfile%headaryrval))
deallocate(gfile%headaryrval,stat=ierr)
4526 if(
allocated(gfile%headarycval))
deallocate(gfile%headarycval,stat=ierr)
4531 gfile%version=nemsio_intfill
4532 gfile%nmeta=nemsio_intfill
4533 gfile%lmeta=nemsio_intfill
4534 gfile%nrec=nemsio_intfill
4535 gfile%idate(1:7)=nemsio_intfill
4536 gfile%nfday=nemsio_intfill
4537 gfile%nfhour=nemsio_intfill
4538 gfile%nfminute=nemsio_intfill
4539 gfile%nfsecondn=nemsio_intfill
4540 gfile%nfsecondd=nemsio_intfill
4541 gfile%dimx=nemsio_intfill
4542 gfile%dimy=nemsio_intfill
4543 gfile%dimz=nemsio_intfill
4544 gfile%nframe=nemsio_intfill
4545 gfile%nsoil=nemsio_intfill
4546 gfile%ntrac=nemsio_intfill
4547 gfile%jcap=nemsio_intfill
4548 gfile%ncldt=nemsio_intfill
4549 gfile%idvc=nemsio_intfill
4550 gfile%idsl=nemsio_intfill
4551 gfile%idvm=nemsio_intfill
4552 gfile%idrt=nemsio_intfill
4553 gfile%rlon_min=nemsio_realfill
4554 gfile%rlon_max=nemsio_realfill
4555 gfile%rlat_min=nemsio_realfill
4556 gfile%rlat_max=nemsio_realfill
4557 gfile%extrameta=nemsio_logicfill
4558 gfile%nmetavari=nemsio_intfill
4559 gfile%nmetavarr=nemsio_intfill
4560 gfile%nmetavarl=nemsio_intfill
4561 gfile%nmetavarc=nemsio_intfill
4562 gfile%nmetavarr8=nemsio_intfill
4563 gfile%nmetaaryi=nemsio_intfill
4564 gfile%nmetaaryr=nemsio_intfill
4565 gfile%nmetaaryl=nemsio_intfill
4566 gfile%nmetaaryc=nemsio_intfill
4567 gfile%nmetaaryr8=nemsio_intfill
4568 gfile%tlmeta=nemsio_intfill
4569 gfile%tlmetalat=nemsio_intfill
4570 gfile%tlmetalon=nemsio_intfill
4571 gfile%tlmetadx=nemsio_intfill
4572 gfile%tlmetady=nemsio_intfill
4573 gfile%tlmetavarival=nemsio_intfill
4574 gfile%tlmetaaryival=nemsio_intfill
4575 gfile%file_endian=
''
4576 gfile%do_byteswap=.false.
4577 gfile%jgds=nemsio_kpds_intfill
4581 gfile%fieldsize=nemsio_intfill
4582 gfile%flunit=nemsio_intfill
4583 gfile%headvarinum=nemsio_intfill
4584 gfile%headvarrnum=nemsio_intfill
4585 gfile%headvarlnum=nemsio_intfill
4586 gfile%headvarcnum=nemsio_intfill
4587 gfile%headaryinum=nemsio_intfill
4588 gfile%headaryrnum=nemsio_intfill
4589 gfile%headarycnum=nemsio_intfill
4593 end subroutine nemsio_axmeta
4595 subroutine nemsio_setfhead(gfile,iret)
4600 type(nemsio_gfile),
intent(inout) :: gfile
4601 integer(nemsio_intkind),
intent(out) :: iret
4602 integer(nemsio_intkind) i,j,k
4605 gfile%headvarinum=31
4610 if(gfile%nmeta>4)
then
4616 if(gfile%nmeta>11)
then
4618 elseif(gfile%nmeta>10)
then
4620 elseif(gfile%nmeta>9)
then
4622 elseif(gfile%nmeta>8)
then
4624 elseif(gfile%nmeta>7)
then
4626 elseif(gfile%nmeta>6)
then
4628 elseif(gfile%nmeta>5)
then
4632 if(gfile%nmeta>3)
then
4634 elseif(gfile%nmeta>2)
then
4640 if(.not.
allocated(gfile%headvariname))
then
4641 allocate(gfile%headvariname(gfile%headvarinum),gfile%headvarival(gfile%headvarinum) )
4642 gfile%headvariname(1)=
'version'
4643 gfile%headvarival(1)=gfile%version
4644 gfile%headvariname(2)=
'nmeta'
4645 gfile%headvarival(2)=gfile%nmeta
4646 gfile%headvariname(3)=
'lmeta'
4647 gfile%headvarival(3)=gfile%lmeta
4648 gfile%headvariname(4)=
'nrec'
4649 gfile%headvarival(4)=gfile%nrec
4650 gfile%headvariname(5)=
'nfday'
4651 gfile%headvarival(5)=gfile%nfday
4652 gfile%headvariname(6)=
'nfhour'
4653 gfile%headvarival(6)=gfile%nfhour
4654 gfile%headvariname(7)=
'nfminute'
4655 gfile%headvarival(7)=gfile%nfminute
4656 gfile%headvariname(8)=
'nfsecondn'
4657 gfile%headvarival(8)=gfile%nfsecondn
4658 gfile%headvariname(9)=
'nfsecondd'
4659 gfile%headvarival(9)=gfile%nfsecondd
4660 gfile%headvariname(10)=
'dimx'
4661 gfile%headvarival(10)=gfile%dimx
4662 gfile%headvariname(11)=
'dimy'
4663 gfile%headvarival(11)=gfile%dimy
4664 gfile%headvariname(12)=
'dimz'
4665 gfile%headvarival(12)=gfile%dimz
4666 gfile%headvariname(13)=
'nframe'
4667 gfile%headvarival(13)=gfile%nframe
4668 gfile%headvariname(14)=
'nsoil'
4669 gfile%headvarival(14)=gfile%nsoil
4670 gfile%headvariname(15)=
'ntrac'
4671 gfile%headvarival(15)=gfile%ntrac
4672 gfile%headvariname(16)=
'jcap'
4673 gfile%headvarival(16)=gfile%jcap
4674 gfile%headvariname(17)=
'ncldt'
4675 gfile%headvarival(17)=gfile%ncldt
4676 gfile%headvariname(18)=
'idvc'
4677 gfile%headvarival(18)=gfile%idvc
4678 gfile%headvariname(19)=
'idsl'
4679 gfile%headvarival(19)=gfile%idsl
4680 gfile%headvariname(20)=
'idvm'
4681 gfile%headvarival(20)=gfile%idvm
4682 gfile%headvariname(21)=
'idrt'
4683 gfile%headvarival(21)=gfile%idrt
4684 gfile%headvariname(22)=
'nmetavari'
4685 gfile%headvarival(22)=gfile%nmetavari
4686 gfile%headvariname(23)=
'nmetavarr'
4687 gfile%headvarival(23)=gfile%nmetavarr
4688 gfile%headvariname(24)=
'nmetavarl'
4689 gfile%headvarival(24)=gfile%nmetavarl
4690 gfile%headvariname(25)=
'nmetavarc'
4691 gfile%headvarival(25)=gfile%nmetavarc
4692 gfile%headvariname(26)=
'nmetaaryi'
4693 gfile%headvarival(26)=gfile%nmetaaryi
4694 gfile%headvariname(27)=
'nmetaaryr'
4695 gfile%headvarival(27)=gfile%nmetaaryr
4696 gfile%headvariname(28)=
'nmetaaryl'
4697 gfile%headvarival(28)=gfile%nmetaaryl
4698 gfile%headvariname(29)=
'nmetaaryc'
4699 gfile%headvarival(29)=gfile%nmetaaryc
4700 gfile%headvariname(30)=
'nmetavarr8'
4701 gfile%headvarival(30)=gfile%nmetavarr8
4702 gfile%headvariname(31)=
'nmetaaryr8'
4703 gfile%headvarival(31)=gfile%nmetaaryr8
4706 if(.not.
allocated(gfile%headvarrname))
then
4707 allocate(gfile%headvarrname(gfile%headvarrnum),gfile%headvarrval(gfile%headvarrnum) )
4708 gfile%headvarrname(1)=
'rlon_min'
4709 gfile%headvarrval(1)=gfile%rlon_min
4710 gfile%headvarrname(2)=
'rlon_max'
4711 gfile%headvarrval(2)=gfile%rlon_max
4712 gfile%headvarrname(3)=
'rlat_min'
4713 gfile%headvarrval(3)=gfile%rlat_min
4714 gfile%headvarrname(4)=
'rlat_min'
4715 gfile%headvarrval(4)=gfile%rlat_min
4718 if(.not.
allocated(gfile%headvarcname))
then
4719 allocate(gfile%headvarcname(gfile%headvarcnum),gfile%headvarcval(gfile%headvarcnum) )
4720 gfile%headvarcname(1)=
'gtype'
4721 gfile%headvarcval(1)=gfile%gtype
4722 gfile%headvarcname(2)=
'modelname'
4723 gfile%headvarcval(2)=gfile%modelname
4724 gfile%headvarcname(3)=
'gdatatype'
4725 gfile%headvarcval(3)=gfile%gdatatype
4728 if(.not.
allocated(gfile%headvarlname))
then
4729 allocate(gfile%headvarlname(gfile%headvarlnum),gfile%headvarlval(gfile%headvarlnum) )
4730 gfile%headvarlname(1)=
'extrameta'
4731 gfile%headvarlval(1)=gfile%extrameta
4735 if(.not.
allocated(gfile%headaryiname))
then
4736 allocate(gfile%headaryiname(gfile%headaryinum) )
4737 allocate(gfile%headaryival(max(
size(gfile%reclev),7),gfile%headaryinum))
4738 gfile%headaryiname(1)=
'idate'
4739 gfile%headaryival(1:7,1)=gfile%idate(1:7)
4740 if(gfile%headaryinum>1)
then
4741 gfile%headaryiname(2)=
'reclev'
4742 gfile%headaryival(:,2)=gfile%reclev(:)
4747 if(gfile%headaryrnum>0)
then
4748 if(.not.
allocated(gfile%headaryrname))
allocate(gfile%headaryrname(gfile%headaryrnum) )
4749 if(.not.
allocated(gfile%headaryrval)) &
4750 allocate(gfile%headaryrval(max(gfile%fieldsize,(gfile%dimz+1)*6),gfile%headaryrnum))
4751 gfile%headaryrname(1)=
'vcoord'
4755 gfile%headaryrval(k+((j-1)*3+i-1)*(gfile%dimz+1),1)=gfile%vcoord(k,i,j)
4759 if(gfile%headaryrnum>1)
then
4760 gfile%headaryrname(2)=
'lat'
4761 gfile%headaryrval(1:
size(gfile%lat),2)=gfile%lat
4763 if(gfile%headaryrnum>2)
then
4764 gfile%headaryrname(3)=
'lon'
4765 gfile%headaryrval(1:
size(gfile%lon),3)=gfile%lon
4767 if(gfile%headaryrnum>3)
then
4768 gfile%headaryrname(4)=
'dx'
4769 gfile%headaryrval(1:
size(gfile%dx),4)=gfile%dx
4771 if(gfile%headaryrnum>4)
then
4772 gfile%headaryrname(5)=
'dy'
4773 gfile%headaryrval(1:
size(gfile%dy),5)=gfile%dy
4775 if(gfile%headaryrnum>5)
then
4776 gfile%headaryrname(6)=
'cpi'
4777 gfile%headaryrval(1:
size(gfile%cpi),6)=gfile%cpi
4779 if(gfile%headaryrnum>6)
then
4780 gfile%headaryrname(7)=
'ri'
4781 gfile%headaryrval(1:
size(gfile%ri),7)=gfile%ri
4786 if(gfile%headarycnum >0)
then
4787 if(.not.
allocated(gfile%headarycname))
allocate(gfile%headarycname(gfile%headarycnum) )
4788 if(.not.
allocated(gfile%headarycval))
allocate(gfile%headarycval(
size(gfile%recname),gfile%headarycnum))
4789 gfile%headarycname(1)=
'recname'
4790 gfile%headarycval(1:
size(gfile%recname),1)=gfile%recname
4791 if(gfile%headarycnum >1)
then
4792 gfile%headarycname(2)=
'reclevtyp'
4793 gfile%headarycval(1:
size(gfile%reclevtyp),2)=gfile%reclevtyp
4798 end subroutine nemsio_setfhead
4800 subroutine nemsio_setgrbtbl(iret)
4805 integer(nemsio_intkind),
intent(out) :: iret
4809 gribtable(1)%item(1)=nemsio_grbtbl_item(
'hgt',
'sfc',1,0,7,1)
4810 gribtable(1)%item(2)=nemsio_grbtbl_item(
'pres',
'sfc',0,0,1,1)
4811 gribtable(1)%item(3)=nemsio_grbtbl_item(
'pres',
'mid layer',0,0,1,109)
4812 gribtable(1)%item(4)=nemsio_grbtbl_item(
'dpres',
'mid layer',2,0,1,110)
4813 gribtable(1)%item(5)=nemsio_grbtbl_item(
'tmp',
'mid layer',2,0,11,109)
4814 gribtable(1)%item(6)=nemsio_grbtbl_item(
'ugrd',
'mid layer',2,0,33,109)
4815 gribtable(1)%item(7)=nemsio_grbtbl_item(
'vgrd',
'mid layer',2,0,34,109)
4816 gribtable(1)%item(8)=nemsio_grbtbl_item(
'spfh',
'mid layer',7,0,51,109)
4817 gribtable(1)%item(9)=nemsio_grbtbl_item(
'o3mr',
'mid layer',9,0,154,109)
4818 gribtable(1)%item(10)=nemsio_grbtbl_item(
'clwmr',
'mid layer',7,0,153,109)
4820 gribtable(1)%item(11)=nemsio_grbtbl_item(
'vvel',
'mid layer',6,0,39,109)
4821 gribtable(1)%item(12)=nemsio_grbtbl_item(
'tmp',
'sfc',3,0,11,1)
4822 gribtable(1)%item(13)=nemsio_grbtbl_item(
'soilw',
'0-10 cm down',4,10,144,112)
4823 gribtable(1)%item(14)=nemsio_grbtbl_item(
'soilw',
'10-40 cm down',4,2600,144,112)
4824 gribtable(1)%item(15)=nemsio_grbtbl_item(
'soilw',
'40-100 cm down',4,10340,144,112)
4825 gribtable(1)%item(16)=nemsio_grbtbl_item(
'soilw',
'100-200 cm down',4,25800,144,112)
4826 gribtable(1)%item(17)=nemsio_grbtbl_item(
'tmp',
'0-10 cm down',3,10,11,112)
4827 gribtable(1)%item(18)=nemsio_grbtbl_item(
'tmp',
'10-40 cm down',3,2600,11,112)
4828 gribtable(1)%item(19)=nemsio_grbtbl_item(
'tmp',
'40-100 cm down',3,10340,11,112)
4829 gribtable(1)%item(20)=nemsio_grbtbl_item(
'tmp',
'100-200 cm down',3,25800,11,112)
4831 gribtable(1)%item(21)=nemsio_grbtbl_item(
'weasd',
'sfc',5,0,65,1)
4832 gribtable(1)%item(22)=nemsio_grbtbl_item(
'tg3',
'sfc',2,0,11,111)
4833 gribtable(1)%item(23)=nemsio_grbtbl_item(
'sfcr',
'sfc',4,0,83,1)
4834 gribtable(1)%item(24)=nemsio_grbtbl_item(
'tcdc',
'high cld lay',0,0,71,234)
4835 gribtable(1)%item(25)=nemsio_grbtbl_item(
'pres',
'high cld top',-1,0,1,233)
4836 gribtable(1)%item(26)=nemsio_grbtbl_item(
'pres',
'high cld bot',-1,0,1,232)
4837 gribtable(1)%item(27)=nemsio_grbtbl_item(
'tmp',
'high cld top',3,0,11,233)
4838 gribtable(1)%item(28)=nemsio_grbtbl_item(
'tcdc',
'mid cld lay',0,0,71,224)
4839 gribtable(1)%item(29)=nemsio_grbtbl_item(
'pres',
'mid cld top',-1,0,1,223)
4840 gribtable(1)%item(30)=nemsio_grbtbl_item(
'pres',
'mid cld bot',-1,0,1,222)
4842 gribtable(1)%item(31)=nemsio_grbtbl_item(
'tmp',
'mid cld top',3,0,11,223)
4843 gribtable(1)%item(32)=nemsio_grbtbl_item(
'tcdc',
'low cld lay',0,0,71,214)
4844 gribtable(1)%item(33)=nemsio_grbtbl_item(
'pres',
'low cld top',-1,0,1,213)
4845 gribtable(1)%item(34)=nemsio_grbtbl_item(
'pres',
'low cld bot',-1,0,1,212)
4846 gribtable(1)%item(35)=nemsio_grbtbl_item(
'tmp',
'low cld top',3,0,11,213)
4847 gribtable(1)%item(36)=nemsio_grbtbl_item(
'tcdc',
'atmos col',0,0,71,200)
4848 gribtable(1)%item(37)=nemsio_grbtbl_item(
'tcdc',
'convect-cld laye',3,0,71,244)
4849 gribtable(1)%item(38)=nemsio_grbtbl_item(
'pres',
'convect-cld bot',-1,0,1,242)
4850 gribtable(1)%item(39)=nemsio_grbtbl_item(
'pres',
'convect-cld top',-1,0,1,243)
4851 gribtable(1)%item(40)=nemsio_grbtbl_item(
'tcdc',
'bndary-layer cld',3,0,71,211)
4853 gribtable(1)%item(41)=nemsio_grbtbl_item(
'alvsf',
'sfc',3,0,176,1)
4854 gribtable(1)%item(42)=nemsio_grbtbl_item(
'alvwf',
'sfc',3,0,177,1)
4855 gribtable(1)%item(43)=nemsio_grbtbl_item(
'alnsf',
'sfc',3,0,178,1)
4856 gribtable(1)%item(44)=nemsio_grbtbl_item(
'alnwf',
'sfc',3,0,179,1)
4857 gribtable(1)%item(45)=nemsio_grbtbl_item(
'land',
'sfc',0,0,81,1)
4858 gribtable(1)%item(46)=nemsio_grbtbl_item(
'veg',
'sfc',2,0,87,1)
4859 gribtable(1)%item(47)=nemsio_grbtbl_item(
'cnwat',
'sfc',5,0,223,1)
4860 gribtable(1)%item(48)=nemsio_grbtbl_item(
'f10m',
'10 m above gnd',5,10,180,105)
4861 gribtable(1)%item(49)=nemsio_grbtbl_item(
'ugrd',
'10 m above gnd',2,10,33,105)
4862 gribtable(1)%item(50)=nemsio_grbtbl_item(
'vgrd',
'10 m above gnd',2,10,34,105)
4864 gribtable(1)%item(51)=nemsio_grbtbl_item(
'tmp',
'2 m above gnd',3,2,11,105)
4865 gribtable(1)%item(52)=nemsio_grbtbl_item(
'spfh',
'2 m above gnd',6,2,51,105)
4866 gribtable(1)%item(53)=nemsio_grbtbl_item(
'vtype',
'sfc',1,0,225,1)
4867 gribtable(1)%item(54)=nemsio_grbtbl_item(
'facsf',
'sfc',3,0,207,1)
4868 gribtable(1)%item(55)=nemsio_grbtbl_item(
'facsf',
'sfc',3,0,208,1)
4869 gribtable(1)%item(56)=nemsio_grbtbl_item(
'fricv',
'sfc',3,0,253,1)
4870 gribtable(1)%item(57)=nemsio_grbtbl_item(
'ffmm',
'sfc',3,0,253,1)
4871 gribtable(1)%item(58)=nemsio_grbtbl_item(
'ffhh',
'sfc',3,0,253,1)
4872 gribtable(1)%item(59)=nemsio_grbtbl_item(
'icetk',
'sfc',2,0,92,1)
4873 gribtable(1)%item(60)=nemsio_grbtbl_item(
'icec',
'sfc',3,0,91,1)
4875 gribtable(1)%item(61)=nemsio_grbtbl_item(
'tisfc',
'sfc',2,0,171,1)
4876 gribtable(1)%item(62)=nemsio_grbtbl_item(
'tprcp',
'sfc',2,0,171,1)
4877 gribtable(1)%item(63)=nemsio_grbtbl_item(
'crain',
'sfc',0,0,140,1)
4878 gribtable(1)%item(64)=nemsio_grbtbl_item(
'snod',
'sfc',6,0,66,1)
4879 gribtable(1)%item(65)=nemsio_grbtbl_item(
'slc',
'soil layer',3,130,160,112)
4880 gribtable(1)%item(66)=nemsio_grbtbl_item(
'shdmin',
'sfc',3,0,189,1)
4881 gribtable(1)%item(67)=nemsio_grbtbl_item(
'shdmax',
'sfc',3,0,190,1)
4882 gribtable(1)%item(68)=nemsio_grbtbl_item(
'sotyp',
'sfc',1,0,224,1)
4883 gribtable(1)%item(69)=nemsio_grbtbl_item(
'salbd',
'sfc',1,0,194,1)
4886 gribtable(1)%item(70)=nemsio_grbtbl_item(
'uflx',
'sfc',3,0,124,1)
4888 gribtable(1)%item(71)=nemsio_grbtbl_item(
'vflx',
'sfc',3,0,125,1)
4889 gribtable(1)%item(72)=nemsio_grbtbl_item(
'shtfl',
'sfc',0,0,122,1)
4890 gribtable(1)%item(73)=nemsio_grbtbl_item(
'lhtfl',
'sfc',0,0,121,1)
4891 gribtable(1)%item(74)=nemsio_grbtbl_item(
'dlwrf',
'sfc',0,0,205,1)
4892 gribtable(1)%item(75)=nemsio_grbtbl_item(
'ulwrf',
'sfc',0,0,212,1)
4893 gribtable(1)%item(76)=nemsio_grbtbl_item(
'ulwrf',
'nom. top',0,0,212,8)
4894 gribtable(1)%item(77)=nemsio_grbtbl_item(
'uswrf',
'nom. top',0,0,211,8)
4895 gribtable(1)%item(78)=nemsio_grbtbl_item(
'uswrf',
'sfc',0,0,211,1)
4896 gribtable(1)%item(79)=nemsio_grbtbl_item(
'dswrf',
'sfc',0,0,204,1)
4897 gribtable(1)%item(80)=nemsio_grbtbl_item(
'prate',
'sfc',6,0,59,1)
4899 gribtable(1)%item(81)=nemsio_grbtbl_item(
'soilm',
'0-200 cm down',4,200,86,112)
4900 gribtable(1)%item(82)=nemsio_grbtbl_item(
'vgtyp',
'sfc',1,0,225,1)
4901 gribtable(1)%item(83)=nemsio_grbtbl_item(
'cprat',
'sfc',6,0,214,1)
4902 gribtable(1)%item(84)=nemsio_grbtbl_item(
'gflux',
'sfc',0,0,155,1)
4903 gribtable(1)%item(85)=nemsio_grbtbl_item(
'tmax',
'2 m above gnd',1,2,15,105)
4904 gribtable(1)%item(86)=nemsio_grbtbl_item(
'tmin',
'2 m above gnd',1,2,16,105)
4905 gribtable(1)%item(87)=nemsio_grbtbl_item(
'watr',
'sfc',5,0,90,1)
4906 gribtable(1)%item(88)=nemsio_grbtbl_item(
'pevpr',
'sfc',0,0,145,1)
4907 gribtable(1)%item(89)=nemsio_grbtbl_item(
'cwork',
'atmos col',0,0,146,200)
4908 gribtable(1)%item(90)=nemsio_grbtbl_item(
'u-gwd',
'sfc',3,0,147,1)
4910 gribtable(1)%item(91)=nemsio_grbtbl_item(
'v-gwd',
'sfc',3,0,148,1)
4911 gribtable(1)%item(92)=nemsio_grbtbl_item(
'hpbl',
'sfc',0,0,221,1)
4912 gribtable(1)%item(93)=nemsio_grbtbl_item(
'pwat',
'atmos col',1,0,54,200)
4913 gribtable(1)%item(94)=nemsio_grbtbl_item(
'albdo',
'sfc',1,0,84,1)
4914 gribtable(1)%item(95)=nemsio_grbtbl_item(
'cnwat',
'sfc',5,0,223,1)
4915 gribtable(1)%item(96)=nemsio_grbtbl_item(
'sfexc',
'sfc',4,0,208,1)
4916 gribtable(1)%item(97)=nemsio_grbtbl_item(
'pevpr',
'sfc',0,0,145,1)
4917 gribtable(1)%item(98)=nemsio_grbtbl_item(
'dlwrf',
'sfc',0,0,205,1)
4918 gribtable(1)%item(99)=nemsio_grbtbl_item(
'ulwrf',
'sfc',0,0,212,1)
4919 gribtable(1)%item(100)=nemsio_grbtbl_item(
'uswrf',
'sfc',0,0,211,1)
4921 gribtable(1)%item(101)=nemsio_grbtbl_item(
'dswrf',
'sfc',0,0,204,1)
4922 gribtable(1)%item(102)=nemsio_grbtbl_item(
'ssrun',
'sfc',5,0,235,1)
4923 gribtable(1)%item(103)=nemsio_grbtbl_item(
'tmp',
'hybrid lev 1',3,1,11,109)
4924 gribtable(1)%item(104)=nemsio_grbtbl_item(
'spfh',
'hybrid lev 1',6,1,51,109)
4925 gribtable(1)%item(105)=nemsio_grbtbl_item(
'ugrd',
'hybrid lev 1',2,1,33,109)
4926 gribtable(1)%item(106)=nemsio_grbtbl_item(
'vgrd',
'hybrid lev 1',2,1,34,109)
4927 gribtable(1)%item(107)=nemsio_grbtbl_item(
'hgt',
'hybrid lev 1',2,1,7,109)
4928 gribtable(1)%item(108)=nemsio_grbtbl_item(
'evbs',
'sfc',0,0,199,1)
4929 gribtable(1)%item(109)=nemsio_grbtbl_item(
'evcw',
'sfc',0,0,200,1)
4930 gribtable(1)%item(110)=nemsio_grbtbl_item(
'trans',
'sfc',0,0,210,1)
4931 gribtable(1)%item(111)=nemsio_grbtbl_item(
'snowc',
'sfc',3,0,238,1)
4932 gribtable(1)%item(112)=nemsio_grbtbl_item(
'dswrf',
'nom. top',0,0,204,8)
4933 gribtable(1)%item(113)=nemsio_grbtbl_item(
'csulf',
'nom. top',0,0,162,8)
4934 gribtable(1)%item(114)=nemsio_grbtbl_item(
'csusf',
'nom. top',0,0,160,8)
4935 gribtable(1)%item(115)=nemsio_grbtbl_item(
'csdlf',
'sfc',0,0,163,1)
4936 gribtable(1)%item(116)=nemsio_grbtbl_item(
'csusf',
'sfc',0,0,160,1)
4937 gribtable(1)%item(117)=nemsio_grbtbl_item(
'csdsf',
'sfc',0,0,161,1)
4938 gribtable(1)%item(118)=nemsio_grbtbl_item(
'csulf',
'sfc',0,0,162,1)
4939 gribtable(1)%item(119)=nemsio_grbtbl_item(
'snohf',
'sfc',0,0,229,1)
4941 gribtable(1)%item(120)=nemsio_grbtbl_item(
'vbdsf',
'sfc',0,0,166,1)
4942 gribtable(1)%item(121)=nemsio_grbtbl_item(
'vddsf',
'sfc',0,0,167,1)
4943 gribtable(1)%item(122)=nemsio_grbtbl_item(
'nbdsf',
'sfc',0,0,168,1)
4944 gribtable(1)%item(123)=nemsio_grbtbl_item(
'nddsf',
'sfc',0,0,169,1)
4945 gribtable(1)%item(124)=nemsio_grbtbl_item(
'cpofp',
'sfc',0,0,194,1)
4956 gribtable(2)%iptv=129
4957 gribtable(2)%item(1)=nemsio_grbtbl_item(
'duvb',
'sfc',2,0,200,1)
4958 gribtable(2)%item(2)=nemsio_grbtbl_item(
'cduvb',
'sfc',2,0,201,1)
4961 gribtable(3)%iptv=130
4962 gribtable(3)%item(1)=nemsio_grbtbl_item(
'sltyp',
'sfc',0,0,222,1)
4963 gribtable(3)%item(2)=nemsio_grbtbl_item(
'sbsno',
'sfc',0,0,198,1)
4964 gribtable(3)%item(3)=nemsio_grbtbl_item(
'soill',
'0-10 cm down',4,10,160,112)
4965 gribtable(3)%item(4)=nemsio_grbtbl_item(
'soill',
'10-40 cm down',4,2600,160,112)
4966 gribtable(3)%item(5)=nemsio_grbtbl_item(
'soill',
'40-100 cm down',4,10340,160,112)
4967 gribtable(3)%item(6)=nemsio_grbtbl_item(
'soill',
'100-200 cm down',4,25800,160,112)
4968 gribtable(3)%item(7)=nemsio_grbtbl_item(
'acond',
'sfc',4,0,179,1)
4969 gribtable(3)%item(8)=nemsio_grbtbl_item(
'wilt',
'sfc',4,0,219,1)
4970 gribtable(3)%item(9)=nemsio_grbtbl_item(
'fldcp',
'sfc',4,0,220,1)
4973 gribtable(4)%iptv=141
4974 gribtable(4)%item(1)=nemsio_grbtbl_item(
'du001',
'mid layer',9,0,240,109)
4975 gribtable(4)%item(2)=nemsio_grbtbl_item(
'du002',
'mid layer',9,0,241,109)
4976 gribtable(4)%item(3)=nemsio_grbtbl_item(
'du003',
'mid layer',9,0,242,109)
4977 gribtable(4)%item(4)=nemsio_grbtbl_item(
'du004',
'mid layer',9,0,243,109)
4978 gribtable(4)%item(5)=nemsio_grbtbl_item(
'du005',
'mid layer',9,0,244,109)
4979 gribtable(4)%item(6)=nemsio_grbtbl_item(
'ss001',
'mid layer',9,0,245,109)
4980 gribtable(4)%item(7)=nemsio_grbtbl_item(
'ss002',
'mid layer',9,0,246,109)
4981 gribtable(4)%item(8)=nemsio_grbtbl_item(
'ss003',
'mid layer',9,0,247,109)
4982 gribtable(4)%item(9)=nemsio_grbtbl_item(
'ss004',
'mid layer',9,0,248,109)
4983 gribtable(4)%item(10)=nemsio_grbtbl_item(
'dms',
'mid layer',9,0,235,109)
4984 gribtable(4)%item(11)=nemsio_grbtbl_item(
'so4',
'mid layer',9,0,234,109)
4985 gribtable(4)%item(12)=nemsio_grbtbl_item(
'so2',
'mid layer',9,0,232,109)
4986 gribtable(4)%item(13)=nemsio_grbtbl_item(
'msa',
'mid layer',9,0,233,109)
4987 gribtable(4)%item(14)=nemsio_grbtbl_item(
'ocphobic',
'mid layer',9,0,249,109)
4988 gribtable(4)%item(15)=nemsio_grbtbl_item(
'ocphilic',
'mid layer',9,0,250,109)
4989 gribtable(4)%item(16)=nemsio_grbtbl_item(
'bcphobic',
'mid layer',9,0,251,109)
4990 gribtable(4)%item(17)=nemsio_grbtbl_item(
'bcphilic',
'mid layer',9,0,252,109)
4992 gribtable(4)%item(18)=nemsio_grbtbl_item(
'aod',
'atmos col',3,0,255,200)
4993 gribtable(4)%item(19)=nemsio_grbtbl_item(
'duaod',
'atmos col',3,0,220,200)
4994 gribtable(4)%item(20)=nemsio_grbtbl_item(
'bcaod',
'atmos col',3,0,254,200)
4995 gribtable(4)%item(21)=nemsio_grbtbl_item(
'ocaod',
'atmos col',3,0,237,200)
4996 gribtable(4)%item(22)=nemsio_grbtbl_item(
'suaod',
'atmos col',3,0,234,200)
4997 gribtable(4)%item(23)=nemsio_grbtbl_item(
'ssaod',
'atmos col',3,0,239,200)
4999 gribtable(4)%item(24)=nemsio_grbtbl_item(
'ss005',
'mid layer',9,0,253,109)
5002 gribtable(4)%item(25)=nemsio_grbtbl_item(
'duem001',
'atmos col',6,0,100,200)
5003 gribtable(4)%item(26)=nemsio_grbtbl_item(
'duem002',
'atmos col',6,0,101,200)
5004 gribtable(4)%item(27)=nemsio_grbtbl_item(
'duem003',
'atmos col',6,0,102,200)
5005 gribtable(4)%item(28)=nemsio_grbtbl_item(
'duem004',
'atmos col',6,0,103,200)
5006 gribtable(4)%item(29)=nemsio_grbtbl_item(
'duem005',
'atmos col',6,0,104,200)
5007 gribtable(4)%item(30)=nemsio_grbtbl_item(
'dusd001',
'atmos col',6,0,105,200)
5008 gribtable(4)%item(31)=nemsio_grbtbl_item(
'dusd002',
'atmos col',6,0,106,200)
5009 gribtable(4)%item(32)=nemsio_grbtbl_item(
'dusd003',
'atmos col',6,0,107,200)
5010 gribtable(4)%item(33)=nemsio_grbtbl_item(
'dusd004',
'atmos col',6,0,108,200)
5011 gribtable(4)%item(34)=nemsio_grbtbl_item(
'dusd005',
'atmos col',6,0,109,200)
5012 gribtable(4)%item(35)=nemsio_grbtbl_item(
'dudp001',
'atmos col',6,0,110,200)
5013 gribtable(4)%item(36)=nemsio_grbtbl_item(
'dudp002',
'atmos col',6,0,111,200)
5014 gribtable(4)%item(37)=nemsio_grbtbl_item(
'dudp003',
'atmos col',6,0,112,200)
5015 gribtable(4)%item(38)=nemsio_grbtbl_item(
'dudp004',
'atmos col',6,0,113,200)
5016 gribtable(4)%item(39)=nemsio_grbtbl_item(
'dudp005',
'atmos col',6,0,114,200)
5017 gribtable(4)%item(40)=nemsio_grbtbl_item(
'duwt001',
'atmos col',6,0,115,200)
5018 gribtable(4)%item(41)=nemsio_grbtbl_item(
'duwt002',
'atmos col',6,0,116,200)
5019 gribtable(4)%item(42)=nemsio_grbtbl_item(
'duwt003',
'atmos col',6,0,117,200)
5020 gribtable(4)%item(43)=nemsio_grbtbl_item(
'duwt004',
'atmos col',6,0,118,200)
5021 gribtable(4)%item(44)=nemsio_grbtbl_item(
'duwt005',
'atmos col',6,0,119,200)
5022 gribtable(4)%item(45)=nemsio_grbtbl_item(
'dusmass',
'atmos col',6,0,120,200)
5023 gribtable(4)%item(46)=nemsio_grbtbl_item(
'ducmass',
'atmos col',6,0,121,200)
5024 gribtable(4)%item(47)=nemsio_grbtbl_item(
'duexttau',
'atmos col',6,0,122,200)
5025 gribtable(4)%item(48)=nemsio_grbtbl_item(
'duscatau',
'atmos col',6,0,123,200)
5026 gribtable(4)%item(49)=nemsio_grbtbl_item(
'dusmass25',
'atmos col',6,0,124,200)
5027 gribtable(4)%item(50)=nemsio_grbtbl_item(
'ducmass25',
'atmos col',6,0,125,200)
5028 gribtable(4)%item(51)=nemsio_grbtbl_item(
'duextt25',
'atmos col',6,0,126,200)
5029 gribtable(4)%item(52)=nemsio_grbtbl_item(
'duscat25',
'atmos col',6,0,127,200)
5030 gribtable(4)%item(53)=nemsio_grbtbl_item(
'duaeridx',
'atmos col',6,0,128,200)
5033 gribtable(4)%item(54)=nemsio_grbtbl_item(
'suem001',
'atmos col',6,0,130,200)
5034 gribtable(4)%item(55)=nemsio_grbtbl_item(
'suem002',
'atmos col',6,0,131,200)
5035 gribtable(4)%item(56)=nemsio_grbtbl_item(
'suem003',
'atmos col',6,0,132,200)
5036 gribtable(4)%item(57)=nemsio_grbtbl_item(
'suem004',
'atmos col',6,0,133,200)
5037 gribtable(4)%item(58)=nemsio_grbtbl_item(
'sudp001',
'atmos col',6,0,134,200)
5038 gribtable(4)%item(59)=nemsio_grbtbl_item(
'sudp002',
'atmos col',6,0,135,200)
5039 gribtable(4)%item(60)=nemsio_grbtbl_item(
'sudp003',
'atmos col',6,0,136,200)
5040 gribtable(4)%item(61)=nemsio_grbtbl_item(
'sudp004',
'atmos col',6,0,137,200)
5041 gribtable(4)%item(62)=nemsio_grbtbl_item(
'suwt001',
'atmos col',6,0,138,200)
5042 gribtable(4)%item(63)=nemsio_grbtbl_item(
'suwt002',
'atmos col',6,0,139,200)
5043 gribtable(4)%item(64)=nemsio_grbtbl_item(
'suwt003',
'atmos col',6,0,140,200)
5044 gribtable(4)%item(65)=nemsio_grbtbl_item(
'suwt004',
'atmos col',6,0,141,200)
5045 gribtable(4)%item(66)=nemsio_grbtbl_item(
'so2smass',
'atmos col',6,0,142,200)
5046 gribtable(4)%item(67)=nemsio_grbtbl_item(
'so2cmass',
'atmos col',6,0,143,200)
5047 gribtable(4)%item(68)=nemsio_grbtbl_item(
'so4smass',
'atmos col',6,0,144,200)
5048 gribtable(4)%item(69)=nemsio_grbtbl_item(
'so4cmass',
'atmos col',6,0,145,200)
5049 gribtable(4)%item(70)=nemsio_grbtbl_item(
'dmssmass',
'atmos col',6,0,146,200)
5050 gribtable(4)%item(71)=nemsio_grbtbl_item(
'dmscmass',
'atmos col',6,0,147,200)
5051 gribtable(4)%item(72)=nemsio_grbtbl_item(
'supsO2',
'atmos col',6,0,148,200)
5052 gribtable(4)%item(73)=nemsio_grbtbl_item(
'supsO4g',
'atmos col',6,0,149,200)
5053 gribtable(4)%item(74)=nemsio_grbtbl_item(
'supsO4aq',
'atmos col',6,0,150,200)
5054 gribtable(4)%item(75)=nemsio_grbtbl_item(
'supsO4wt',
'atmos col',6,0,151,200)
5055 gribtable(4)%item(76)=nemsio_grbtbl_item(
'so4eman',
'atmos col',6,0,152,200)
5056 gribtable(4)%item(77)=nemsio_grbtbl_item(
'so2eman',
'atmos col',6,0,153,200)
5057 gribtable(4)%item(78)=nemsio_grbtbl_item(
'so2embb',
'atmos col',6,0,154,200)
5058 gribtable(4)%item(79)=nemsio_grbtbl_item(
'so2emvn',
'atmos col',6,0,155,200)
5059 gribtable(4)%item(80)=nemsio_grbtbl_item(
'so2emve',
'atmos col',6,0,156,200)
5060 gribtable(4)%item(81)=nemsio_grbtbl_item(
'supmsa',
'atmos col',6,0,157,200)
5061 gribtable(4)%item(82)=nemsio_grbtbl_item(
'suexttau',
'atmos col',6,0,158,200)
5062 gribtable(4)%item(83)=nemsio_grbtbl_item(
'suscatau',
'atmos col',6,0,159,200)
5065 gribtable(4)%item(84)=nemsio_grbtbl_item(
'ocem001',
'atmos col',6,0,160,200)
5066 gribtable(4)%item(85)=nemsio_grbtbl_item(
'ocem002',
'atmos col',6,0,161,200)
5067 gribtable(4)%item(86)=nemsio_grbtbl_item(
'ocdp001',
'atmos col',6,0,162,200)
5068 gribtable(4)%item(87)=nemsio_grbtbl_item(
'ocdp002',
'atmos col',6,0,163,200)
5069 gribtable(4)%item(88)=nemsio_grbtbl_item(
'ocwt001',
'atmos col',6,0,164,200)
5070 gribtable(4)%item(89)=nemsio_grbtbl_item(
'ocwt002',
'atmos col',6,0,165,200)
5071 gribtable(4)%item(90)=nemsio_grbtbl_item(
'ochyphil',
'atmos col',6,0,166,200)
5072 gribtable(4)%item(91)=nemsio_grbtbl_item(
'oceman',
'atmos col',6,0,167,200)
5073 gribtable(4)%item(92)=nemsio_grbtbl_item(
'ocembb',
'atmos col',6,0,168,200)
5074 gribtable(4)%item(93)=nemsio_grbtbl_item(
'ocembf',
'atmos col',6,0,169,200)
5075 gribtable(4)%item(94)=nemsio_grbtbl_item(
'ocembg',
'atmos col',6,0,170,200)
5076 gribtable(4)%item(95)=nemsio_grbtbl_item(
'ocsmass',
'atmos col',6,0,171,200)
5077 gribtable(4)%item(96)=nemsio_grbtbl_item(
'occmass',
'atmos col',6,0,172,200)
5078 gribtable(4)%item(97)=nemsio_grbtbl_item(
'ocexttau',
'atmos col',6,0,173,200)
5079 gribtable(4)%item(98)=nemsio_grbtbl_item(
'ocexttau',
'atmos col',6,0,174,200)
5080 gribtable(4)%item(99)=nemsio_grbtbl_item(
'bcem001',
'atmos col',6,0,175,200)
5081 gribtable(4)%item(100)=nemsio_grbtbl_item(
'bcem002',
'atmos col',6,0,176,200)
5082 gribtable(4)%item(101)=nemsio_grbtbl_item(
'bcdp001',
'atmos col',6,0,177,200)
5083 gribtable(4)%item(102)=nemsio_grbtbl_item(
'bcdp002',
'atmos col',6,0,178,200)
5084 gribtable(4)%item(103)=nemsio_grbtbl_item(
'bcwt001',
'atmos col',6,0,179,200)
5085 gribtable(4)%item(104)=nemsio_grbtbl_item(
'bcwt002',
'atmos col',6,0,180,200)
5086 gribtable(4)%item(105)=nemsio_grbtbl_item(
'bchyphil',
'atmos col',6,0,181,200)
5087 gribtable(4)%item(106)=nemsio_grbtbl_item(
'bceman',
'atmos col',6,0,182,200)
5088 gribtable(4)%item(107)=nemsio_grbtbl_item(
'bcembb',
'atmos col',6,0,183,200)
5089 gribtable(4)%item(108)=nemsio_grbtbl_item(
'bcembf',
'atmos col',6,0,184,200)
5090 gribtable(4)%item(109)=nemsio_grbtbl_item(
'bcsmass',
'atmos col',6,0,185,200)
5091 gribtable(4)%item(110)=nemsio_grbtbl_item(
'bccmass',
'atmos col',6,0,186,200)
5092 gribtable(4)%item(111)=nemsio_grbtbl_item(
'bcexttau',
'atmos col',6,0,187,200)
5093 gribtable(4)%item(112)=nemsio_grbtbl_item(
'bcscatau',
'atmos col',6,0,188,200)
5096 gribtable(4)%item(113)=nemsio_grbtbl_item(
'ssem001',
'atmos col',6,0,190,200)
5097 gribtable(4)%item(114)=nemsio_grbtbl_item(
'ssem002',
'atmos col',6,0,191,200)
5098 gribtable(4)%item(115)=nemsio_grbtbl_item(
'ssem003',
'atmos col',6,0,192,200)
5099 gribtable(4)%item(116)=nemsio_grbtbl_item(
'ssem004',
'atmos col',6,0,193,200)
5100 gribtable(4)%item(117)=nemsio_grbtbl_item(
'ssem005',
'atmos col',6,0,194,200)
5101 gribtable(4)%item(118)=nemsio_grbtbl_item(
'sssd001',
'atmos col',6,0,195,200)
5102 gribtable(4)%item(119)=nemsio_grbtbl_item(
'sssd002',
'atmos col',6,0,196,200)
5103 gribtable(4)%item(120)=nemsio_grbtbl_item(
'sssd003',
'atmos col',6,0,197,200)
5104 gribtable(4)%item(121)=nemsio_grbtbl_item(
'sssd004',
'atmos col',6,0,198,200)
5105 gribtable(4)%item(122)=nemsio_grbtbl_item(
'sssd005',
'atmos col',6,0,199,200)
5106 gribtable(4)%item(123)=nemsio_grbtbl_item(
'ssdp001',
'atmos col',6,0,200,200)
5107 gribtable(4)%item(124)=nemsio_grbtbl_item(
'ssdp002',
'atmos col',6,0,201,200)
5108 gribtable(4)%item(125)=nemsio_grbtbl_item(
'ssdp003',
'atmos col',6,0,202,200)
5109 gribtable(4)%item(126)=nemsio_grbtbl_item(
'ssdp004',
'atmos col',6,0,203,200)
5110 gribtable(4)%item(127)=nemsio_grbtbl_item(
'ssdp005',
'atmos col',6,0,204,200)
5111 gribtable(4)%item(128)=nemsio_grbtbl_item(
'sswt001',
'atmos col',6,0,205,200)
5112 gribtable(4)%item(129)=nemsio_grbtbl_item(
'sswt002',
'atmos col',6,0,206,200)
5113 gribtable(4)%item(130)=nemsio_grbtbl_item(
'sswt003',
'atmos col',6,0,207,200)
5114 gribtable(4)%item(131)=nemsio_grbtbl_item(
'sswt004',
'atmos col',6,0,208,200)
5115 gribtable(4)%item(132)=nemsio_grbtbl_item(
'sswt005',
'atmos col',6,0,209,200)
5116 gribtable(4)%item(133)=nemsio_grbtbl_item(
'sssmass',
'atmos col',6,0,210,200)
5117 gribtable(4)%item(134)=nemsio_grbtbl_item(
'sscmass',
'atmos col',6,0,211,200)
5118 gribtable(4)%item(135)=nemsio_grbtbl_item(
'ssexttau',
'atmos col',6,0,212,200)
5119 gribtable(4)%item(136)=nemsio_grbtbl_item(
'ssscatau',
'atmos col',6,0,213,200)
5120 gribtable(4)%item(137)=nemsio_grbtbl_item(
'sssmass25',
'atmos col',6,0,214,200)
5121 gribtable(4)%item(138)=nemsio_grbtbl_item(
'sscmass25',
'atmos col',6,0,215,200)
5122 gribtable(4)%item(139)=nemsio_grbtbl_item(
'ssextt25',
'atmos col',6,0,216,200)
5123 gribtable(4)%item(140)=nemsio_grbtbl_item(
'ssscat25',
'atmos col',6,0,217,200)
5124 gribtable(4)%item(141)=nemsio_grbtbl_item(
'ssaeridx',
'atmos col',6,0,218,200)
5128 gribtable(5)%iptv=133
5129 gribtable(5)%item(1)=nemsio_grbtbl_item(
'spfhmax',
'2 m above gnd',5,2,204,105)
5130 gribtable(5)%item(2)=nemsio_grbtbl_item(
'spfhmin',
'2 m above gnd',5,2,205,105)
5131 gribtable(5)%item(3)=nemsio_grbtbl_item(
'sunsd',
'sfc',0,0,191,1)
5134 end subroutine nemsio_setgrbtbl
5136 subroutine nemsio_stop()
5139 end subroutine nemsio_stop
5142 SUBROUTINE nemsio_splat4(IDRT,JMAX,ASLAT)
5145 integer(nemsio_intkind),
intent(in) :: idrt,jmax
5146 real(4),
intent(out) :: ASLAT(JMAX)
5147 INTEGER(nemsio_intkind),
PARAMETER:: KD=selected_real_kind(15,45)
5148 REAL(KIND=kd):: pk(jmax/2),pkm1(jmax/2),pkm2(jmax/2)
5149 REAL(KIND=kd):: aslatd(jmax/2),sp,spmax,eps=10.d0*epsilon(sp)
5150 integer,
PARAMETER:: JZ=50
5151 REAL(nemsio_dblekind) BZ(JZ)
5152 DATA bz / 2.4048255577d0, 5.5200781103d0, &
5153 8.6537279129d0, 11.7915344391d0, 14.9309177086d0, 18.0710639679d0, &
5154 21.2116366299d0, 24.3524715308d0, 27.4934791320d0, 30.6346064684d0, &
5155 33.7758202136d0, 36.9170983537d0, 40.0584257646d0, 43.1997917132d0, &
5156 46.3411883717d0, 49.4826098974d0, 52.6240518411d0, 55.7655107550d0, &
5157 58.9069839261d0, 62.0484691902d0, 65.1899648002d0, 68.3314693299d0, &
5158 71.4729816036d0, 74.6145006437d0, 77.7560256304d0, 80.8975558711d0, &
5159 84.0390907769d0, 87.1806298436d0, 90.3221726372d0, 93.4637187819d0, &
5160 96.6052679510d0, 99.7468198587d0, 102.888374254d0, 106.029930916d0, &
5161 109.171489649d0, 112.313050280d0, 115.454612653d0, 118.596176630d0, &
5162 121.737742088d0, 124.879308913d0, 128.020877005d0, 131.162446275d0, &
5163 134.304016638d0, 137.445588020d0, 140.587160352d0, 143.728733573d0, &
5164 146.870307625d0, 150.011882457d0, 153.153458019d0, 156.295034268d0 /
5165 REAL(8):: DLT,D1=1.d0
5166 INTEGER(4):: JHE,JHO,J0=0
5167 real(8),
PARAMETER :: PI=3.14159265358979d0,c=(1.d0-(2.d0/pi)**2)*0.25d0
5175 r=1.d0/sqrt((jmax+0.5d0)**2+c)
5177 aslatd(j)=cos(bz(j)*r)
5180 aslatd(j)=cos((bz(jz)+(j-jz)*pi)*r)
5183 DO WHILE(spmax.GT.eps)
5193 pk(j)=((2*n-1)*aslatd(j)*pkm1(j)-(n-1)*pkm2(j))/n
5197 sp=pk(j)*(1.d0-aslatd(j)**2)/(jmax*(pkm1(j)-aslatd(j)*pk(j)))
5198 aslatd(j)=aslatd(j)-sp
5199 spmax=max(spmax,abs(sp))
5205 aslat(jmax+1-j)=-aslat(j)
5212 ELSEIF(idrt.EQ.0)
THEN
5219 aslat(j)=cos((j-1)*dlt)
5223 aslat(jmax+1-j)=-aslat(j)
5230 ELSEIF(idrt.EQ.256)
THEN
5237 aslat(j)=cos((j-0.5)*dlt)
5241 aslat(jmax+1-j)=-aslat(j)
5248 end subroutine nemsio_splat4
5250 SUBROUTINE nemsio_splat8(IDRT,JMAX,ASLAT)
5253 integer(nemsio_intkind),
intent(in) :: idrt,jmax
5254 real(nemsio_dblekind),
intent(out) :: ASLAT(JMAX)
5255 INTEGER(nemsio_intkind),
PARAMETER:: KD=selected_real_kind(15,45)
5256 REAL(KIND=kd):: pk(jmax/2),pkm1(jmax/2),pkm2(jmax/2)
5257 REAL(KIND=kd):: aslatd(jmax/2),sp,spmax,eps=10.d0*epsilon(sp)
5258 integer,
PARAMETER:: JZ=50
5259 REAL(nemsio_dblekind) BZ(JZ)
5260 DATA bz / 2.4048255577d0, 5.5200781103d0, &
5261 8.6537279129d0, 11.7915344391d0, 14.9309177086d0, 18.0710639679d0, &
5262 21.2116366299d0, 24.3524715308d0, 27.4934791320d0, 30.6346064684d0, &
5263 33.7758202136d0, 36.9170983537d0, 40.0584257646d0, 43.1997917132d0, &
5264 46.3411883717d0, 49.4826098974d0, 52.6240518411d0, 55.7655107550d0, &
5265 58.9069839261d0, 62.0484691902d0, 65.1899648002d0, 68.3314693299d0, &
5266 71.4729816036d0, 74.6145006437d0, 77.7560256304d0, 80.8975558711d0, &
5267 84.0390907769d0, 87.1806298436d0, 90.3221726372d0, 93.4637187819d0, &
5268 96.6052679510d0, 99.7468198587d0, 102.888374254d0, 106.029930916d0, &
5269 109.171489649d0, 112.313050280d0, 115.454612653d0, 118.596176630d0, &
5270 121.737742088d0, 124.879308913d0, 128.020877005d0, 131.162446275d0, &
5271 134.304016638d0, 137.445588020d0, 140.587160352d0, 143.728733573d0, &
5272 146.870307625d0, 150.011882457d0, 153.153458019d0, 156.295034268d0 /
5273 REAL(8):: DLT,D1=1.d0
5274 INTEGER(4):: JHE,JHO,J0=0
5275 real(nemsio_dblekind),
PARAMETER :: PI=3.14159265358979d0,c=(1.d0-(2.d0/pi)**2)*0.25d0
5276 real(nemsio_dblekind) r
5283 r=1.d0/sqrt((jmax+0.5d0)**2+c)
5285 aslatd(j)=cos(bz(j)*r)
5288 aslatd(j)=cos((bz(jz)+(j-jz)*pi)*r)
5291 DO WHILE(spmax.GT.eps)
5301 pk(j)=((2*n-1)*aslatd(j)*pkm1(j)-(n-1)*pkm2(j))/n
5305 sp=pk(j)*(1.d0-aslatd(j)**2)/(jmax*(pkm1(j)-aslatd(j)*pk(j)))
5306 aslatd(j)=aslatd(j)-sp
5307 spmax=max(spmax,abs(sp))
5313 aslat(jmax+1-j)=-aslat(j)
5320 ELSEIF(idrt.EQ.0)
THEN
5327 aslat(j)=cos((j-1)*dlt)
5331 aslat(jmax+1-j)=-aslat(j)
5338 ELSEIF(idrt.EQ.256)
THEN
5345 aslat(j)=cos((j-0.5d0)*dlt)
5349 aslat(jmax+1-j)=-aslat(j)
5356 end subroutine nemsio_splat8
5359 elemental function lowercase(word)
5365 Character (len=32) :: lowercase
5366 Character (len=*) ,
intent(in) :: word
5367 integer :: i,ic,nlen
5372 lowercase(1:nlen)=word(1:nlen)
5374 ic = ichar(word(i:i))
5375 if (ic >= 65 .and. ic < 91) lowercase(i:i) = char(ic+32)
5377 if(nlen<32) lowercase(nlen+1:)=
' '
5381 end function lowercase
5383 elemental function equal_str_nocase(str1,str2)
5389 logical :: equal_str_nocase
5390 Character (len=*) ,
intent(in) :: str1
5391 Character (len=*) ,
intent(in) :: str2
5392 integer :: i,ic1,ic2,nlen
5395 if(len(str1)/=nlen)
then
5396 equal_str_nocase=.false.
5399 equal_str_nocase=.false.
5401 ic1 = ichar(str1(i:i))
5402 if (ic1 >= 65 .and. ic1 < 91) ic1 = ic1+32
5403 ic2 = ichar(str2(i:i))
5404 if (ic2 >= 65 .and. ic2 < 91) ic2 = ic2+32
5406 equal_str_nocase=.false.
5410 equal_str_nocase=.true.
5414 end function equal_str_nocase
5421 end module nemsio_openclose