NCEPLIBS-nemsio  2.5.3
All Data Structures Files
utils/nemsio_read.f90
Go to the documentation of this file.
1 
5  program main
6 !
7  use nemsio_module
8  implicit none
9 !
10  integer, parameter:: double=selected_real_kind(p=13,r=200)
11  type(nemsio_gfile) :: gfile,gfilem2,gfilem3,gfiled2
12 !
13  real (kind=8) timef
14  character(255) cin
15  character(8) gdatatype,modelname
16  character(2) level
17  real,allocatable :: tmp(:)
18 !---------------------------------------------------------------------------
19 !--- nemsio meta data
20  real isecond,stime,etime,dummy
21  integer nrec,im,jm,lm,l,idate(7),version, im2,jm2, nframe, &
22  ntrac,irealf,nrec1,version1,nmeta1,nfhour,nfminute,nfsecond, &
23  nfsecondn,nfsecondd,nmeta,tlmeta
24  integer nsoil,jcap,ncld,idsl,idvc,idvm,idrt,rlon_min,rlon_max, &
25  rlat_min,rlat_max
26  integer nmetavari,nmetavarr,nmetavarl,nmetavarc,nmetavarr8, &
27  nmetaaryi,nmetaaryr,nmetaaryl,nmetaaryc,nmetaaryr8
28  integer ihrst,idat(3),mp_physics,sf_surface_physics,icycle,fieldsize
29  logical global, run,extrameta
30  character(16),allocatable :: recname(:),reclevtyp(:)
31  integer,allocatable :: reclev(:)
32  real,allocatable :: cpi(:),ri(:)
33 !---------------------------------------------------------------------------
34 !--- local vars
35  character(16) vname
36  character(32) gtype
37  character(16) vlevtyp
38  integer i,ii,j,jj,jrec,krec,vlev,iret,lev,ista,iend,jsta,jend
39 !---------------------------------------------------------------------------
40 !
41  character(16),allocatable :: variname(:),varrname(:),varlname(:),varcname(:),varr8name(:), &
42  aryiname(:),aryrname(:),arylname(:),arycname(:),aryr8name(:)
43  integer,allocatable :: varival(:),aryilen(:),aryrlen(:),aryllen(:),aryclen(:),aryr8len(:)
44  integer,allocatable :: aryival(:,:)
45  real,allocatable :: varrval(:),aryrval(:,:)
46  real(8),allocatable :: varr8val(:),aryr8val(:,:)
47  logical,allocatable :: varlval(:),arylval(:,:)
48  character(16),allocatable :: varcval(:),arycval(:,:)
49 !
50 !---------------------------------------------------------------------------
51 !
52 !-------------set up nemsio write--------------------------
53  call nemsio_init(iret=iret)
54  print *,'nemsio_init, iret=',iret
55 !
56 !+++++++++++++++++ read nemsil file with 2 meta data
57 !+++++++++++++++++++++++++++
58 !
59 !--- open gfile for reading
60  print *,'3b:: start reading nemsio file '
61 ! cin='nemsio_2meta_big'
62  call getarg(1,cin)
63  call nemsio_open(gfile,trim(cin),'read',iret=iret)
64  if(iret/=0) print *,'3b:: after open read, ',trim(cin), ' iret=',iret
65 !
66 !--- get dimension
67  im=0;jm=0;lm=0;nframe=0;nrec=0
68  call nemsio_getfilehead(gfile,dimx=im,dimy=jm,dimz=lm,nframe=nframe,nrec=nrec,&
69  gdatatype=gdatatype,modelname=modelname,nmeta=nmeta,ntrac=ntrac,tlmeta=tlmeta,iret=iret)
70  print *,'3b:: gfilem2,im=',im,'jm=',jm,'lm=',lm,'nframe=',nframe,'nrec=',nrec, &
71  'gdatatype=',gdatatype,' modelname=',modelname,' nmeta=',nmeta,'ntrac=',ntrac, &
72  'tlmeta=',tlmeta,'iret=',iret
73 !--- meta data info
74  call nemsio_getfilehead(gfile,nfhour=nfhour,nfminute=nfminute,nsoil=nsoil,ncldt=ncld,&
75  idsl=idsl,idvc=idvc,idvm=idvm,idrt=idrt,iret=iret)
76  print *,'3b:: gfilem2,nfhour=',nfhour,'jcap=',jcap,'ncld=',ncld,'idvc=',idvc,'idrt=',idrt
77 !
78 ! call nemsio_getheadvar(gfile,'nfhour',nfhour,iret=iret)
79 ! print *,'nfhour=',nfhour
80 ! call nemsio_getheadvar(gfile,'latf', latf,iret=iret)
81 ! print *,'latf=',latf
82 !
83  call nemsio_getfilehead(gfile,nmetavari=nmetavari,nmetavarr=nmetavarr,nmetavarl=nmetavarl, &
84  nmetavarc=nmetavarc,nmetavarr8=nmetavarr8,nmetaaryi=nmetaaryi,nmetaaryr=nmetaaryr, &
85  nmetaaryr8=nmetaaryr8,nmetaaryl=nmetaaryl, nmetaaryc=nmetaaryc)
86  print *,'nmetavari=',nmetavari,'nmetavarr=',nmetavarr,'nmetavarl=',nmetavarl, &
87  'nmetavarc=',nmetavarc,'nmetavarr8=',nmetavarr8
88  print *,'nmetaaryi=',nmetaaryi,'nmetaaryr=',nmetaaryr,'nmetaaryl=',nmetaaryl, &
89  'nmetaaryc=',nmetaaryc,'nmetaaryr8=',nmetaaryr8
90  if(nmetavari>0) then
91  allocate(variname(nmetavari),varival(nmetavari))
92  call nemsio_getfilehead(gfile,variname=variname,varival=varival)
93  print *,'variname=',variname,'varival=',varival
94  endif
95  if(nmetavarr>0) then
96  allocate(varrname(nmetavarr),varrval(nmetavarr))
97  call nemsio_getfilehead(gfile,varrname=varrname,varrval=varrval)
98  print *,'varrname=',varrname,'varrval=',varrval
99  endif
100  if(nmetavarr8>0) then
101  allocate(varr8name(nmetavarr8),varr8val(nmetavarr8))
102  call nemsio_getfilehead(gfile,varr8name=varr8name,varr8val=varr8val)
103  print *,'varr8name=',varr8name,'varr8val=',varr8val
104  endif
105  if(nmetavarl>0) then
106  allocate(varlname(nmetavarl),varlval(nmetavarl))
107  call nemsio_getfilehead(gfile,varlname=varlname,varlval=varlval)
108  print *,'varlname=',varlname,'varlval=',varlval
109  endif
110  if(nmetavarc>0) then
111  allocate(varcname(nmetavarc),varcval(nmetavarc))
112  call nemsio_getfilehead(gfile,varcname=varcname,varcval=varcval)
113  print *,'varcname=',varcname,'varcval=',varcval
114  endif
115 
116  if(nmetaaryi>0) then
117  allocate(aryiname(nmetaaryi),aryilen(nmetaaryi))
118  call nemsio_getfilehead(gfile,aryiname=aryiname,aryilen=aryilen)
119  print *,'aryiname=',aryiname,'aryilen=',aryilen
120  allocate(aryival(maxval(aryilen),nmetaaryi))
121  call nemsio_getfilehead(gfile,aryival=aryival)
122  do i=1,nmetaaryi
123  print *,'aryiname=',aryiname(i),aryilen(i),aryival(1:aryilen(i),i)
124  enddo
125  endif
126  if(nmetaaryr>0) then
127  allocate(aryrname(nmetaaryr),aryrlen(nmetaaryr))
128  call nemsio_getfilehead(gfile,aryrname=aryrname,aryrlen=aryrlen)
129  print *,'aryrname=',aryrname,'aryrlen=',aryrlen
130  allocate(aryrval(maxval(aryrlen),nmetaaryr))
131  call nemsio_getfilehead(gfile,aryrval=aryrval)
132  do i=1,nmetaaryr
133  print *,'aryrname=',aryrname(i),aryrlen(i),aryrval(1:aryrlen(i),i)
134  enddo
135  endif
136  if(nmetaaryr8>0) then
137  allocate(aryr8name(nmetaaryr8),aryr8len(nmetaaryr8))
138  call nemsio_getfilehead(gfile,aryr8name=aryr8name,aryr8len=aryr8len)
139  print *,'aryr8name=',aryr8name,'aryr8len=',aryr8len
140  allocate(aryr8val(maxval(aryr8len),nmetaaryr8))
141  call nemsio_getfilehead(gfile,aryr8val=aryr8val)
142  do i=1,nmetaaryr8
143  print *,'aryr8name=',aryr8name(i),aryr8len(i),aryr8val(1:aryr8len(i),i)
144  enddo
145  endif
146  if(nmetaaryl>0) then
147  allocate(arylname(nmetaaryl),aryllen(nmetaaryl))
148  call nemsio_getfilehead(gfile,arylname=arylname,aryllen=aryllen)
149  print *,'arylname=',arylname,'aryllen=',aryllen
150  allocate(arylval(maxval(aryllen),nmetaaryl))
151  call nemsio_getfilehead(gfile,arylval=arylval)
152  do i=1,nmetaaryl
153  print *,'arylname=',arylname(i),aryllen(i),arylval(1:aryllen(i),i)
154  enddo
155  endif
156  if(nmetaaryc>0) then
157  allocate(arycname(nmetaaryc),aryclen(nmetaaryc))
158  call nemsio_getfilehead(gfile,arycname=arycname,aryclen=aryclen)
159  print *,'arycname=',arycname,'aryclen=',aryclen
160  allocate(arycval(maxval(aryclen),nmetaaryc))
161  call nemsio_getfilehead(gfile,arycval=arycval)
162  do i=1,nmetaaryc
163  print *,'arycname=',arycname(i),aryclen(i),arycval(1:aryclen(i),i)
164  enddo
165  endif
166 
167 
168 !
169 !---read fields
170 !
171  fieldsize=(im+2*nframe)*(jm+2*nframe)
172  allocate(tmp(fieldsize))
173  do jrec=1,nrec
174  call nemsio_getrechead(gfile,jrec,vname,vlevtyp,vlev,iret)
175  call nemsio_readrec(gfile,jrec,tmp,iret=iret)
176  print *,'3b:: read,jrec=',jrec,'iret=',iret,' vname=',trim(vname), &
177  ' vlevtyp=',trim(vlevtyp),' vlev=',vlev,'data=',maxval(tmp),minval(tmp)
178  enddo
179 !
180 !--- close nemsio file
181  call nemsio_close(gfile,iret=iret)
182  if ( iret .ne.0) print *,'iret=',iret
183 
184 !!---------------------------------------------------------------------------
185  deallocate(tmp)
186 !
187 !---------------------------------------------------------------------------
188 !
189  call nemsio_finalize()
190 ! - - - - -- - -- - -- - -- - - -- - -- -- - -- - -- - - -- - - - -- -
191 ! --
192  stop
193 
194  end program
195