program sighdr !$$$ main program documentation block ! ! Main program: sighdr Print information from sigma header ! Prgmmr: Iredell Org: np23 Date: 1999-08-23 ! ! Abstract: This program prints information from the sigma header. ! The following parameters may be printed out: ! filetype ! fhour ! ifhr ! idate ! iyr ! imo ! idy ! ihr ! vdate ! vyr ! vmo ! vdy ! vhr ! si ! sl ! ak ! bk ! siglev ! jcap ! levs ! itrun ! iorder ! irealf ! igen ! latf ! lonf ! latb ! lonb ! latr ! lonr ! ntrac ! icen2 ! ienst ! iensi ! idpp ! idsl ! idvc ! idvm ! idvt ! idrun ! idusr ! pdryini ! ncldt ! ixgr ! nxgr ! nxss ! ivs ! nvcoord ! vcoord ! cfvars ! ! Program history log: ! 1999-08-23 Iredell ! 2016-01-05 Redder Changed all occurrences of ! call w3movdat((/0.,head%fhour,0.,0.,0./),& ! to ! call w3movdat((/0.0_SP,head%fhour,0.0_SP,0.0_SP,0.0_SP/),& ! in order to conform to fortran 2008 ANSI standard that each ! ac-value expression in an array-constructor must have the same ! type and type parameters. ! ! Input files: ! arg. 1 sigma file(s) ! ! Modules used: ! sigio_module ! ! Subprograms called: ! iargc ! errmsg ! eusage ! errexit ! getarg ! sigio_sropen ! sigio_srhead ! sigvar ! sigvar ! ! Attributes: ! Language: fortran90 ! !$$$ use sigio_module implicit none integer narg,iargc integer(sigio_intkind),parameter:: lusig=11 integer(sigio_intkind):: irets character(255) cfsig type(sigio_head):: sighead character(16) cvar integer ncfsig,ios narg=iargc() if(narg.lt.1.or.narg.gt.2) then if(narg.ne.0) call errmsg('sighdr: too many arguments') call eusage call errexit(1) endif call getarg(1,cfsig) ncfsig=len_trim(cfsig) call sigio_sropen(lusig,cfsig(1:ncfsig),irets) if(irets.ne.0) then call errmsg('sighdr: error opening file '//cfsig(1:ncfsig)) call errexit(2) endif call sigio_srhead(lusig,sighead,irets) if(irets.ne.0) then call errmsg('sighdr: error reading header from file '//cfsig(1:ncfsig)) call errexit(2) endif if(narg.eq.2) then call getarg(2,cvar) call sigvar(sighead,cvar) else do read(5,*,iostat=ios) cvar if(ios.ne.0) exit call sigvar(sighead,cvar) enddo endif end program subroutine sigvar(sighead,cvar) use sigio_module implicit none integer,parameter:: SP=sigio_realkind type(sigio_head),intent(in):: sighead character(16),intent(in):: cvar integer lval character(16) cval integer jdat(8) integer k select case(cvar) case('FILETYPE','filetype') print '(a)','sig' case('FHOUR','fhour') call inch(int(sighead%fhour),lval,cval) print '(a,f3.2)',cval(1:lval),sighead%fhour-int(sighead%fhour) case('IFHR','ifhr') call inch(int(sighead%fhour),lval,cval) if(lval.le.1) then print '(a)','0'//cval(1:lval) else print '(a)',cval(1:lval) endif case('IDATE','idate') print '(i4.4,3i2.2)',sighead%idate(4),sighead%idate(2),& sighead%idate(3),sighead%idate(1) case('IYR','iyr') call inch(sighead%idate(4),lval,cval) print '(a)',cval(1:lval) case('IMO','imo') call inch(sighead%idate(2),lval,cval) print '(a)',cval(1:lval) case('IDY','idy') call inch(sighead%idate(3),lval,cval) print '(a)',cval(1:lval) case('IHR','ihr') call inch(sighead%idate(1),lval,cval) print '(a)',cval(1:lval) case('VDATE','vdate') call w3movdat((/0.0_SP,sighead%fhour,0.0_SP,0.0_SP,0.0_SP/),& (/sighead%idate(4),sighead%idate(2),sighead%idate(3),0,& sighead%idate(1),0,0,0/),jdat) print '(i4.4,3i2.2)',jdat(1),jdat(2),jdat(3),jdat(5) case('VYR','vyr') call w3movdat((/0.0_SP,sighead%fhour,0.0_SP,0.0_SP,0.0_SP/),& (/sighead%idate(4),sighead%idate(2),sighead%idate(3),0,& sighead%idate(1),0,0,0/),jdat) call inch(jdat(1),lval,cval) print '(a)',cval(1:lval) case('VMO','vmo') call w3movdat((/0.0_SP,sighead%fhour,0.0_SP,0.0_SP,0.0_SP/),& (/sighead%idate(4),sighead%idate(2),sighead%idate(3),0,& sighead%idate(1),0,0,0/),jdat) call inch(jdat(2),lval,cval) print '(a)',cval(1:lval) case('VDY','vdy') call w3movdat((/0.0_SP,sighead%fhour,0.0_SP,0.0_SP,0.0_SP/),& (/sighead%idate(4),sighead%idate(2),sighead%idate(3),0,& sighead%idate(1),0,0,0/),jdat) call inch(jdat(3),lval,cval) print '(a)',cval(1:lval) case('VHR','vhr') call w3movdat((/0.0_SP,sighead%fhour,0.0_SP,0.0_SP,0.0_SP/),& (/sighead%idate(4),sighead%idate(2),sighead%idate(3),0,& sighead%idate(1),0,0,0/),jdat) call inch(jdat(5),lval,cval) print '(a)',cval(1:lval) case('SI','si') print '(f12.8)',sighead%si(1:sighead%levs+1) case('SL','sl') print '(f12.8)',sighead%sl(1:sighead%levs) case('AK','ak') print '(f12.3)',sighead%ak(1:sighead%levs+1) case('BK','bk') print '(f12.8)',sighead%bk(1:sighead%levs+1) case('SIGLEV','siglev') if(sighead%idvc.lt.2) then print '(i3)',sighead%levs print '(f12.8)',sighead%si(2:sighead%levs) elseif(sighead%idvc.eq.2) then print '(2i6)',sighead%idvc,sighead%levs print '(f12.3,f12.8)',(sighead%ak(k),sighead%bk(k),k=1,sighead%levs+1) else print '(3i6)',sighead%idvc,sighead%levs,sighead%nvcoord do k=1,sighead%levs+1 print '(5g16.8)',sighead%vcoord(k,:) enddo endif case('JCAP','jcap') call inch(sighead%jcap,lval,cval) print '(a)',cval(1:lval) case('LEVS','levs') call inch(sighead%levs,lval,cval) print '(a)',cval(1:lval) case('ITRUN','itrun') call inch(sighead%itrun,lval,cval) print '(a)',cval(1:lval) case('IORDER','iorder') call inch(sighead%iorder,lval,cval) print '(a)',cval(1:lval) case('IREALF','irealf') call inch(sighead%irealf,lval,cval) print '(a)',cval(1:lval) case('IGEN','igen') call inch(sighead%igen,lval,cval) print '(a)',cval(1:lval) case('LATF','latf') call inch(sighead%latf,lval,cval) print '(a)',cval(1:lval) case('LONF','lonf') call inch(sighead%lonf,lval,cval) print '(a)',cval(1:lval) case('LATB','latb') call inch(sighead%latb,lval,cval) print '(a)',cval(1:lval) case('LONB','lonb') call inch(sighead%lonb,lval,cval) print '(a)',cval(1:lval) case('LATR','latr') call inch(sighead%latr,lval,cval) print '(a)',cval(1:lval) case('LONR','lonr') call inch(sighead%lonr,lval,cval) print '(a)',cval(1:lval) case('NTRAC','ntrac') call inch(sighead%ntrac,lval,cval) print '(a)',cval(1:lval) case('ICEN2','icen2') call inch(sighead%icen2,lval,cval) print '(a)',cval(1:lval) case('IENST','ienst') call inch(sighead%iens(1),lval,cval) print '(a)',cval(1:lval) case('IENSI','iensi') call inch(sighead%iens(2),lval,cval) print '(a)',cval(1:lval) case('IDPP','idpp') call inch(sighead%idpp,lval,cval) print '(a)',cval(1:lval) case('IDSL','idsl') call inch(sighead%idsl,lval,cval) print '(a)',cval(1:lval) case('IDVC','idvc') call inch(sighead%idvc,lval,cval) print '(a)',cval(1:lval) case('IDVM','idvm') call inch(sighead%idvm,lval,cval) print '(a)',cval(1:lval) case('IDVT','idvt') call inch(sighead%idvt,lval,cval) print '(a)',cval(1:lval) case('IDRUN','idrun') call inch(sighead%idrun,lval,cval) print '(a)',cval(1:lval) case('IDUSR','idusr') call inch(sighead%idusr,lval,cval) print '(a)',cval(1:lval) case('PDRYINI','pdryini') call inch(int(sighead%pdryini),lval,cval) print '(a,f6.5)',cval(1:lval),sighead%pdryini-int(sighead%pdryini) case('NCLDT','ncldt') call inch(sighead%ncldt,lval,cval) print '(a)',cval(1:lval) case('IXGR','ixgr') call inch(sighead%ixgr,lval,cval) print '(a)',cval(1:lval) case('NXGR','nxgr') call inch(sighead%nxgr,lval,cval) print '(a)',cval(1:lval) case('NXSS','nxss') call inch(sighead%nxss,lval,cval) print '(a)',cval(1:lval) case('IVS','ivs') call inch(sighead%ivs,lval,cval) print '(a)',cval(1:lval) case('NVCOORD','nvcoord') call inch(sighead%nvcoord,lval,cval) print '(a)',cval(1:lval) case('VCOORD','vcoord') print '(2i6)',sighead%idvc,sighead%levs,sighead%nvcoord do k=1,sighead%levs+1 print '(5g16.8)',sighead%vcoord(k,:) enddo case('?') print '(a)','Choose from:' print '(a)',' filetype' print '(a)',' fhour' print '(a)',' ifhr' print '(a)',' idate' print '(a)',' iyr' print '(a)',' imo' print '(a)',' idy' print '(a)',' ihr' print '(a)',' vdate' print '(a)',' vyr' print '(a)',' vmo' print '(a)',' vdy' print '(a)',' vhr' print '(a)',' si' print '(a)',' sl' print '(a)',' ak' print '(a)',' bk' print '(a)',' siglev' print '(a)',' jcap' print '(a)',' levs' print '(a)',' itrun' print '(a)',' iorder' print '(a)',' irealf' print '(a)',' igen' print '(a)',' latf' print '(a)',' lonf' print '(a)',' latb' print '(a)',' lonb' print '(a)',' latr' print '(a)',' lonr' print '(a)',' ntrac' print '(a)',' icen2' print '(a)',' ienst' print '(a)',' iensi' print '(a)',' idpp' print '(a)',' idsl' print '(a)',' idvc' print '(a)',' idvm' print '(a)',' idvt' print '(a)',' idrun' print '(a)',' idusr' print '(a)',' pdryini' print '(a)',' ncldt' print '(a)',' ixgr' print '(a)',' nxgr' print '(a)',' nxss' print '(a)',' ivs' print '(a)',' nvcoord' print '(a)',' vcoord' case default print '(a)','?' end select end subroutine subroutine inch(i,l,c) implicit none integer,intent(in):: i integer,intent(out):: l character(*),intent(out):: c character*20 cform l=log10(abs(i)+0.5)+1 if(i.le.0) l=l+1 write(cform,'("(i",i1,")")') l write(c,cform) i end subroutine subroutine eusage implicit none call errmsg('Usage: sighdr sigfile <variable.list >value.list') call errmsg(' or sighdr sigfile variable >value') end subroutine