! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE PREPUAOBS ###### !###### ###### !###### Developed by ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE prepuaobs(nvar,nzua,mxua,mxztab,nsrcua, & 1,4 mxuafile,nuafile,uafname,srcua, & stnua,elevua,xua,yua,hgtua,obsua, & qsrcua,hgtqsrc,nlevtab, & qobsua,qualua,isrcua,nlevsua, & rmiss,nobsua,istatus) ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Control reading upper-air observations and preparation ! of upper-air data for analysis. ! !----------------------------------------------------------------------- ! ! AUTHOR: Keith Brewster, CAPS ! July, 1995 ! ! MODIFICATION HISTORY: ! ! Jan, 1996 (K. Brewster) ! Added full documentation. ! ! Nov, 1997 (KB) ! Changed arguments to be arrays of upper-air data filenames ! rather than one each of a raob and profiler file. ! !----------------------------------------------------------------------- ! ! nvar Number of analysis variables ! nzua Maximum number of levels ! mxua Maximum number of multiple-level profiles ! mxztab Maximum number of levels in the data error table ! nsrcua Number of multiple-level data sources ! mxuafile Maximum number of multiple-level data files ! nuafile Number of multiple-level data files ! uafname File names of data files ! stnua Station name ! elevua Station elevation ! xua X-coordinate of station ! yua Y-coordinate of station ! hgtua Height of each level in data ! obsua Multiple-level observations ! qsrcua Standard error for each data source ! hgtqsrc Height of data in error table ! nlevtab Number of levels in error table ! qobsua Standard error for each datum ! qualua Quality indicator for each datum ! isrcua Source number for each station ! nlevsua Number of level for each station ! rmiss Missing data flag value ! nobsua Number of observations ! istatus Return status ! !----------------------------------------------------------------------- ! ! Variable Declarations: ! !----------------------------------------------------------------------- ! IMPLICIT NONE INTEGER :: nvar,nzua,mxua,mxztab,nsrcua INTEGER :: mxuafile,nuafile ! CHARACTER (LEN=132) :: uafname(mxuafile) CHARACTER (LEN=8) :: srcua(nsrcua) CHARACTER (LEN=5) :: stnua(mxua) REAL :: elevua(mxua) REAL :: xua(mxua) REAL :: yua(mxua) REAL :: hgtua(nzua,mxua) REAL :: obsua(nvar,nzua,mxua) REAL :: qsrcua(nvar,mxztab,nsrcua) REAL :: hgtqsrc(mxztab,nsrcua) REAL :: qobsua(nvar,nzua,mxua) INTEGER :: qualua(nvar,nzua,mxua) INTEGER :: isrcua(mxua) INTEGER :: nlevsua(mxua) INTEGER :: nlevtab(nsrcua) INTEGER :: nobsua REAL :: rmiss INTEGER :: istatus ! !----------------------------------------------------------------------- ! ! Misc. local variables ! !----------------------------------------------------------------------- ! CHARACTER (LEN=12) :: suffix INTEGER :: ista,ilev,ivar,ifile,isrc,nprev,ntotal,ktab INTEGER :: maxsuf,lenfnm,dotloc,lensuf REAL :: wthi,wtlo ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ntotal = 0 DO ista=1,mxua isrcua(ista)=0 DO ilev=1,nzua DO ivar=1,nvar qobsua(ivar,ilev,ista)=999999. END DO END DO END DO ! nprev=0 maxsuf=LEN(suffix) ! DO ifile=1,nuafile lenfnm=LEN(uafname(ifile)) CALL strlnth(uafname(ifile),lenfnm) CALL exsufx(uafname(ifile),lenfnm,suffix,maxsuf,dotloc,lensuf) IF(lensuf == 3 .AND. suffix(1:3) == 'snd') THEN DO isrc=1,nsrcua IF(srcua(isrc) == 'NWS RAOB') GO TO 103 END DO WRITE(6,'(a,a)') ' Could not find NWS RAOB', & ' among upper air sources in input file' STOP 103 CONTINUE CALL rdraob(nvar,nzua,mxua,isrc,uafname(ifile), & stnua,elevua,xua,yua,hgtua,obsua, & qualua,isrcua,nlevsua, & rmiss,nprev,ntotal,istatus) ELSE IF(lensuf == 3 .AND. suffix(1:3) == 'pro') THEN DO isrc=1,nsrcua IF(srcua(isrc) == 'WPDN PRO') GO TO 108 END DO WRITE(6,'(a,a)') ' Could not find WPDN PRO', & ' among upper air sources in input file' STOP 108 CONTINUE CALL rdprof(nvar,nzua,mxua,isrc,uafname(ifile), & stnua,elevua,xua,yua,hgtua,obsua, & qualua,isrcua,nlevsua, & rmiss,nprev,ntotal,istatus) END IF nprev=ntotal END DO ! nobsua=ntotal ! !----------------------------------------------------------------------- ! ! Set qobs based on source and height ! !----------------------------------------------------------------------- ! DO ista=1,nobsua IF(isrcua(ista) > 0) THEN isrc=isrcua(ista) IF(nlevtab(isrc) < 2) THEN WRITE(6,'(a,a,i6,/a,i3)') & ' Problem with error table for ', & ' upper-level data source',isrc, & ' nlevtab(isrc) =',nlevtab(isrc) STOP END IF DO ilev=1,nzua DO ktab=2,nlevtab(isrc)-1 IF(hgtqsrc(ktab,isrc) > hgtua(ilev,ista)) EXIT END DO ! 126 CONTINUE wthi= (hgtua(ilev,ista)-hgtqsrc(ktab-1,isrc))/ & (hgtqsrc(ktab,isrc)-hgtqsrc(ktab-1,isrc)) wthi=AMAX1(wthi,0.0) wthi=AMIN1(wthi,1.0) wtlo=1.0-wthi DO ivar=1,nvar qobsua(ivar,ilev,ista)= & wthi*qsrcua(ivar,ktab, isrc) + & wtlo*qsrcua(ivar,ktab-1,isrc) END DO END DO END IF END DO RETURN END SUBROUTINE prepuaobs