10 type(nemsio_gfile) :: gfile
12 character(255) cin,filenm
14 character(16) varlevtyp
17 real,
allocatable :: data(:)
20 integer nrec,im,jm,nframe,nmetaaryi,nmetaaryr,nmetaaryl,nmetaaryc, &
21 nmetaaryr8,i,j,fieldsize,iret,idate(7),levs,ntrac, tlmeta
27 character(16) cvar, file_endian
28 character(35) mystr,sweep_blanks
29 character(4) gdatatype
30 character(16),
allocatable:: recname(:)
31 character(16),
allocatable :: reclevtyp(:)
32 integer,
allocatable:: reclev(:)
33 real(4),
allocatable ::vcoord(:,:,:),lat(:),lon(:),cpi(:),ri(:),dx(:),dy(:)
36 character(16),
allocatable :: aryiname(:),aryrname(:),arylname(:),arycname(:),&
38 integer,
allocatable :: aryilen(:),aryrlen(:),aryllen(:),aryclen(:),aryr8len(:)
39 integer,
allocatable :: iary(:)
40 real(4),
allocatable :: rary(:)
41 real(8),
allocatable :: r8ary(:)
42 logical,
allocatable :: lary(:)
43 character(16),
allocatable :: cary(:)
46 call nemsio_init(iret=iret)
53 call nemsio_open(gfile,trim(cin),
'READ',iret=iret)
55 print *,
'ERROR: can not open file ',trim(cin)
59 call nemsio_getfilehead(gfile,iret=iret,gdatatype=gdatatype,dimx=im,dimy=jm, &
60 nframe=nframe,dimz=levs,nrec=nrec,ntrac=ntrac,tlmeta=tlmeta, &
61 file_endian=file_endian,nmetaaryi=nmetaaryi,nmetaaryr=nmetaaryr, &
62 nmetaaryl=nmetaaryl,nmetaaryc=nmetaaryc)
64 fieldsize=(im+2*nframe)*(jm+2*nframe)
66 call getarg(2,varname)
67 call getarg(3,varlevtyp)
68 call getarg(4,cvarlev)
69 read(cvarlev,
'(I3)')varlev
72 call nemsio_getheadvar(gfile,trim(varname),ivar,iret=iret)
74 call nemsio_getheadvar(gfile,trim(varname),rvar,iret=iret)
76 call nemsio_getheadvar(gfile,trim(varname),lvar,iret=iret)
78 call nemsio_getheadvar(gfile,trim(varname),cvar,iret=iret)
80 call nemsio_getheadvar(gfile,trim(varname),r8var,iret=iret)
82 print *,trim(varname),
'=',r8var
86 print *,trim(varname),
'=',trim(cvar)
90 print *,trim(varname),
'=',lvar
94 print *,trim(varname),
'=',rvar
98 print *,trim(varname),
'=',ivar
105 if( trim(varname)==
'idate')
then
106 call nemsio_getfilehead(gfile,idate=idate,iret=iret)
108 print *,
'idate=',idate
109 write(odate,
'(I4.4,I2.2,I2.2,I2.2)')idate(1),idate(2),idate(3),idate(4)
110 print *,
'idate_ymdh=',odate
115 if(equal_str_nocase(trim(varname),
'vcoord'))
then
116 allocate(vcoord(levs+1,3,2))
117 call nemsio_getfilehead(gfile,vcoord=vcoord,iret=iret)
119 print *,
'levs=',levs,
'vcoord(1:levs+1,1,1)=',vcoord(:,1,1)
120 print *,
'levs=',levs,
'vcoord(1:levs+1,2,1)=',vcoord(:,2,1)
121 print *,
'levs=',levs,
'vcoord(1:levs+1,3,1)=',vcoord(:,3,1)
122 print *,
'levs=',levs,
'vcoord(1:levs+1,1,2)=',vcoord(:,1,2)
123 print *,
'levs=',levs,
'vcoord(1:levs+1,2,2)=',vcoord(:,2,2)
124 print *,
'levs=',levs,
'vcoord(1:levs+1,3,2)=',vcoord(:,3,2)
132 if(equal_str_nocase(trim(varname),
'recname'))
then
133 allocate(recname(nrec))
134 call nemsio_getfilehead(gfile,recname=recname,iret=iret)
136 print *,
'nrec=',nrec,
'recname(1:nrec)=',recname
144 if(equal_str_nocase(trim(varname),
'reclevtyp'))
then
145 allocate(reclevtyp(nrec))
146 call nemsio_getfilehead(gfile,reclevtyp=reclevtyp,iret=iret)
148 print *,
'nrec=',nrec,
'reclevtyp(1:nrec)=',reclevtyp
149 deallocate(reclevtyp)
152 deallocate(reclevtyp)
156 if(equal_str_nocase(trim(varname),
'reclev'))
then
157 allocate(reclev(nrec))
158 call nemsio_getfilehead(gfile,reclev=reclev,iret=iret)
160 print *,
'nrec=',nrec,
'reclev(1:nrec)=',reclev
168 if(equal_str_nocase(trim(varname),
'lat'))
then
169 allocate(lat((im+2*nframe)*(jm+2*nframe)))
170 call nemsio_getfilehead(gfile,lat=lat,iret=iret)
172 print *,
'domainsize=',(im+2*nframe)*(jm+2*nframe),
'lat(1:domainsize)=',lat
180 if(equal_str_nocase(trim(varname),
'lon'))
then
181 allocate(lon((im+2*nframe)*(jm+2*nframe)))
182 call nemsio_getfilehead(gfile,lon=lon,iret=iret)
184 print *,
'domainsize=',(im+2*nframe)*(jm+2*nframe),
'lon(1:domainsize)=',lon
192 if(equal_str_nocase(trim(varname),
'dx'))
then
193 allocate(dx((im+2*nframe)*(jm+2*nframe)))
194 call nemsio_getfilehead(gfile,dx=dx,iret=iret)
196 print *,
'domainsize=',(im+2*nframe)*(jm+2*nframe),
'dx(1:domainsize)=',dx
204 if(equal_str_nocase(trim(varname),
'dy'))
then
205 allocate(dy((im+2*nframe)*(jm+2*nframe)))
206 call nemsio_getfilehead(gfile,dy=dy,iret=iret)
208 print *,
'domainsize=',(im+2*nframe)*(jm+2*nframe),
'dy(1:domainsize)=',dy
216 if(equal_str_nocase(trim(varname),
'cpi'))
then
217 allocate(cpi(ntrac+1))
218 call nemsio_getfilehead(gfile,cpi=cpi,iret=iret)
220 print *,
'ntrac+1=',ntrac+1,
'cpi(1:ntrac+1)=',cpi
228 if(equal_str_nocase(trim(varname),
'ri'))
then
229 allocate(ri(ntrac+1))
230 call nemsio_getfilehead(gfile,ri=ri,iret=iret)
232 print *,
'ntrac+1=',ntrac+1,
'ri(1:ntrac+1)=',ri
240 if(equal_str_nocase(trim(varname),
'tlmeta'))
then
241 print *,
'tlmeta=',tlmeta
246 if(equal_str_nocase(trim(varname),
'file_endian'))
then
247 print *,
'file_endian=',file_endian
253 allocate(aryiname(nmetaaryi),aryilen(nmetaaryi))
254 call nemsio_getfilehead(gfile,iret=iret,aryiname=aryiname,aryilen=aryilen)
257 if(equal_str_nocase(trim(varname),trim(aryiname(i))))
then
259 call nemsio_getfilehead(gfile, aryilen=aryilen)
260 allocate(iary(aryilen(j)))
261 call nemsio_getheadvar(gfile,trim(varname),iary,iret=iret)
263 print *,trim(varname),
'(1:',aryilen(j),
')=',iary
264 if(equal_str_nocase(trim(varname),
"fcstdate"))
then
265 write(odate,
'(I4.4,I2.2,I2.2,I2.2)')iary(1),iary(2),iary(3),iary(4)
266 print *,
'fcstdate_ymdh=',odate
268 call nemsio_close(gfile)
269 call nemsio_finalize()
278 allocate(aryrname(nmetaaryr),aryrlen(nmetaaryr))
279 call nemsio_getfilehead(gfile,iret=iret,aryrname=aryrname,aryrlen=aryrlen)
281 if(equal_str_nocase(trim(varname),trim(aryrname(i))))
then
283 call nemsio_getfilehead(gfile, aryrlen=aryrlen)
284 allocate(rary(aryrlen(j)))
285 call nemsio_getheadvar(gfile,trim(varname),rary,iret=iret)
287 print *,trim(varname),
'(1:',aryrlen(j),
')=',rary
288 call nemsio_close(gfile)
289 call nemsio_finalize()
297 if(nmetaaryr8>0)
then
298 allocate(aryr8name(nmetaaryr8),aryr8len(nmetaaryr8))
299 call nemsio_getfilehead(gfile,iret=iret,aryr8name=aryr8name,aryr8len=aryr8len)
301 if(equal_str_nocase(trim(varname),trim(aryr8name(i))))
then
303 call nemsio_getfilehead(gfile, aryr8len=aryr8len)
304 allocate(rary(aryr8len(j)))
305 call nemsio_getheadvar(gfile,trim(varname),rary,iret=iret)
307 print *,trim(varname),
'(1:',aryr8len(j),
')=',rary
308 call nemsio_close(gfile)
309 call nemsio_finalize()
317 allocate(arylname(nmetaaryl),aryllen(nmetaaryl))
318 call nemsio_getfilehead(gfile,iret=iret,arylname=arylname,aryllen=aryllen)
320 if(equal_str_nocase(trim(varname),trim(arylname(i))))
then
322 allocate(lary(aryllen(j)))
323 call nemsio_getheadvar(gfile,trim(varname),lary,iret=iret)
325 print *,trim(varname),
'(1:',aryllen(j),
')=',lary
326 call nemsio_close(gfile)
327 call nemsio_finalize()
335 allocate(arycname(nmetaaryc),aryclen(nmetaaryc))
336 call nemsio_getfilehead(gfile,iret=iret,arycname=arycname,aryclen=aryclen)
338 if(equal_str_nocase(trim(varname),trim(arycname(i))))
then
340 allocate(cary(aryclen(j)))
341 call nemsio_getheadvar(gfile,trim(varname),cary,iret=iret)
343 print *,trim(varname),
'(1:',aryclen(j),
')=',cary
344 call nemsio_close(gfile)
345 call nemsio_finalize()
354 allocate(
data(fieldsize))
355 call nemsio_readrecv(gfile,varname,varlevtyp,varlev,data=
data,iret=iret)
357 print *,
'fieldsize=',(im+2*nframe)*(jm+2*nframe),
'i=',im+2*nframe
359 print *,
'j=',j,trim(varname),
'=',
data(1+(j-1)*(im+2*nframe):j*(im+2*nframe))
362 mystr=trim(varname)//trim(varlevtyp)//trim(cvarlev)
363 filenm=sweep_blanks(mystr)
364 open(991,file=trim(filenm),form=
'unformatted')
365 write(991) ((
data(i+(j-1)*(im+2*nframe)),i=1,im+2*nframe),j=1,jm+2*nframe)
369 call nemsio_close(gfile)
370 call nemsio_finalize()
374 call nemsio_close(gfile)
375 call nemsio_finalize()
377 print *,
'no ',trim(varname),
' in the nemsio file!'
388 character(35) function sweep_blanks(in_str)
392 character(*),
intent(in) :: in_str
393 character(35) :: out_str
398 do j=1, len_trim(in_str)
401 if (ch .ne.
" ")
then
402 out_str = trim(out_str) // ch
404 sweep_blanks = out_str
406 end function sweep_blanks