subroutine statsconv(mype,&
     i_ps,i_uv,i_t,i_q,i_pw,i_rw,i_dw,i_gps,i_sst,i_tcp,i_lag, &
     i_gust,i_vis,i_pblh,i_wspd10m,i_td2m,i_mxtm,i_mitm,i_pmsl,i_howv, & 
     i_tcamt,i_lcbas,i_cldch,i_uwnd10m,i_vwnd10m,&
     i_swcp,i_lwcp,i_dbz,i_ref,bwork,awork,ndata)
!$$$  subprogram documentation block
!                .      .    .                                       .
! subprogram:    statconv    prints statistics for conventional data
!   prgmmr: derber           org: np23                date: 2003-05-22
!
! abstract: The routine computes and prints statistics regarding the
!           use of conventional observations.  Printed information 
!           includes that about data counts, quality control decisions,
!           statistics based on the innovations, and penalties - all 
!           as a observation type
!
! program history log:
!   2003-05-22  derber
!   2004-06-15  treadon - update documentation
!   2004-07-20  derber - add sst
!   2004-07-29  treadon - add only to module use, add intent in/out
!   2004-10-06  parrish - increase diagnostic array sizes and add
!                         output from nonlinear qc
!   2004-12-23  treadon - use module jfunc to pass jiter,first
!   2005-01-28  cucurull - modify summary output for refractivity to include
!                          the QC checks on incremental refractivity
!   2005-03-23  cucurull - cosmetic changes for refractivity print out
!   2005-04-20  treadon - correct error in wind ntot sum
!   2005-05-27  derber - level output changed
!   2005-07-27  derber  - add print of monitoring and reject data
!   2005-12-02  cucurull - cosmetic changes for gps data
!   2006-02-03  derber  - modify for new obs control and to clean up output
!   2006-02-24  derber  - modify to take advantage of convinfo module
!   2006-04-02  derber  - modify to eliminate dvast and move ob type printing to dtast
!   2008-04-11  safford - rm unused uses
!   2009-02-02  kleist  - add synthetic tc-mslp
!   2009-03-05  meunier - add lagrangean data
!   2011-01-06  cucurull - replace gps_ref/gps_bnd with gps due to a change in the convinfo files gps structure
!                        - maintain dtype information in the output file, add ctype
!   2014-03-19  pondeca - add wspd10m
!   2014-04-10  pondeca - add td2m,mxtm,mitm,pmsl
!   2014-05-07  pondeca - add howv
!   2014-06-06  carley/zhu - add tcamt and lcbas
!   2015-07-10  pondeca - add cldch
!   2016-05-05  pondeca - add uwnd10m, vwnd10m
!   2017-05-12  Y. Wang and X. Wang - add dbz, POC: xuguang.wang@ou.edu
!
!   input argument list:
!     mype     - mpi task number
!     i_ps     - index in awork array holding surface pressure info
!     i_uv     - index in awork array holding wind info
!     i_t      - index in awork array holding temperature info
!     i_q      - index in awork array holding specific humidity info
!     i_pw     - index in awork array holding total precipitable water info
!     i_rw     - index in awork array holding radar radial winds info
!     i_dw     - index in awork array holding doppler lidar winds info
!     i_gps    - index in awork array holding gps info
!     i_sst    - index in awork array holding sst info
!     i_tcp    - index in awork array holding tcps info
!     i_lag    - index in awork array holding lag info
!     i_gust   - index in awork array holding gust info
!     i_vis    - index in awork array holding vis info
!     i_pblh   - index in awork array holding pblh info
!     i_wspd10m- index in awork array holding wspd10m info
!     i_td2m   - index in awork array holding td2m info
!     i_mxtm   - index in awork array holding mxtm info
!     i_mitm   - index in awork array holding mitm info
!     i_pmsl   - index in awork array holding pmsl info
!     i_howv   - index in awork array holding howv info
!     i_tcamt   - index in awork array holding tcamt info
!     i_lcbas   - index in awork array holding lcbas info
!     i_cldch   - index in awork array holding cldch info
!     i_uwnd10m- index in awork array holding uwnd10m info
!     i_vwnd10m- index in awork array holding vwnd10m info
!     i_swcp   - index in awork array holding swcp info
!     i_lwcp   - index in awork array holding lwcp info
!     i_ref    - size of second dimension of awork array
!     bwork    - array containing information for statistics
!     awork    - array containing information for data counts and gross checks
!     ndata(*,1)- number of profiles retained for further processing
!     ndata(*,2)- number of observations read
!     ndata(*,3)- number of observations keep after read
!
!   output argument list:
!
! attributes:
!   language: f90
!   machine:  ibm RS/6000 SP
!
!$$$
  use kinds, only: r_kind,i_kind
  use constants, only: zero,three,five
  use obsmod, only: iout_sst,iout_pw,iout_t,iout_rw,iout_dw,&
       iout_uv,iout_gps,iout_ps,iout_q,iout_tcp,iout_lag,&
       iout_gust,iout_vis,iout_pblh,iout_wspd10m,iout_td2m,& 
       iout_mxtm,iout_mitm,iout_pmsl,iout_howv,iout_tcamt,iout_lcbas,iout_cldch,&
       iout_uwnd10m,iout_vwnd10m,&
       iout_dbz,iout_swcp,iout_lwcp,&
       mype_dw,mype_rw,mype_sst,mype_gps,mype_uv,mype_ps,&
       mype_t,mype_pw,mype_q,mype_tcp,ndat,dtype,mype_lag,mype_gust,&
       mype_vis,mype_pblh,mype_wspd10m,mype_td2m,mype_mxtm,mype_mitm,&
       mype_pmsl,mype_howv,mype_tcamt,mype_lcbas,mype_cldch,mype_uwnd10m,mype_vwnd10m,&
       mype_dbz,mype_swcp,mype_lwcp
  use qcmod, only: npres_print,ptop,pbot,ptopq,pbotq
  use jfunc, only: first,jiter
  use gridmod, only: nsig
  use convinfo, only: nconvtype,ioctype
  implicit none

! Declare passed variables
  integer(i_kind)                                  ,intent(in   ) :: mype,i_ps,i_uv,&
       i_t,i_q,i_pw,i_rw,i_dw,i_gps,i_sst,i_tcp,i_lag,i_gust,i_vis,i_pblh,&
       i_wspd10m,i_td2m,i_mxtm,i_mitm,i_pmsl,i_howv,i_tcamt,i_lcbas,&
       i_cldch,i_uwnd10m,i_vwnd10m,i_swcp,i_lwcp,i_dbz,i_ref
  real(r_kind),dimension(7*nsig+100,i_ref)     ,intent(in   ) :: awork
  real(r_kind),dimension(npres_print,nconvtype,5,3),intent(in   ) :: bwork
  integer(i_kind),dimension(ndat,3)                ,intent(in   ) :: ndata

! Declare local variables
  character(100) mesage

  integer(i_kind) numgrspw,numsst,nsuperp,nump,nhitopo,ntoodif
  integer(i_kind) numgrsq,numhgh,numgust,numvis,numpblh,numwspd10m,numuwnd10m,numvwnd10m
  integer(i_kind) numtd2m,nummxtm,nummitm,numpmsl,numhowv,numtcamt,numlcbas,numcldch
  integer(i_kind) numgrsswcp,numgrslwcp
  integer(i_kind) ntot,numlow,k,numssm,i,j
  integer(i_kind) numgross,numfailqc,numfailqc_ssmi,nread,nkeep
  integer(i_kind) numfail1_gps,numfail2_gps,numfail3_gps,nreadspd,nkeepspd
  integer(i_kind),dimension(nsig)::num

  real(r_kind) grsmlt,tq,pw,rat,tgps,qmplty,tpw,tdw,rwmplty,trw,dbzmplty,tdbz
  real(r_kind) tmplty,tt,dwmplty,gpsmplty,umplty,tssm,qctssm,tu,tv,tuv
  real(r_kind) tswcp,tlwcp
  real(r_kind) vmplty,uvqcplty,rat1,rat2,rat3
  real(r_kind) dwqcplty,tqcplty,qctt,qctrw,rwqcplty,qctdw,qqcplty,qctgps
  real(r_kind) gpsqcplty,tpw3,pw3,qctq
  real(r_kind) tswcp3,tlwcp3,qctdbz,dbzqcplty
  real(r_kind),dimension(1):: pbotall,ptopall
  
  logical,dimension(nconvtype):: pflag
  character(7):: ctype
!*********************************************************************************
! Initialize constants and variables.

  ptopall(1)=zero; pbotall(1)=2000.0_r_kind
  

! Generate summary statistics as a function of observation type.  
! Extensive comments are given for the winds.  Similar comments
! apply for the remaining observation types in this routine

  pflag=.false.
! Summary report for winds
  if(mype==mype_uv) then

!    Open output file so as to point to correct position in output file
     if(first)then
        open(iout_uv)
     else
        open(iout_uv,position='append')
     end if


!    Compute and write counts, penalties, and ratio of penalty
!    to data counts for each model level
     numssm=nint(awork(6,i_uv)); numgross=nint(awork(4,i_uv))
     umplty=zero; vmplty=zero; uvqcplty=zero ; ntot=0;
     tu=zero; tv=zero ; tuv=zero
     tssm=zero ; qctssm=zero
     nread=0
     nkeep=0
     nreadspd=0
     nkeepspd=0
     do i=1,ndat
        if(dtype(i)== 'uv')then
           nread=nread+ndata(i,2)  
           nkeep=nkeep+ndata(i,3)
        else if(dtype(i)== 'spd')then
           nreadspd=nreadspd+ndata(i,2)
           nkeepspd=nkeepspd+ndata(i,3)
        end if
     end do
     if(nkeep > 0 .or. nkeepspd > 0)then
!       Write header information  
        mesage='current vfit of wind data, ranges in m/s$'

!       Call routine to compute and write count, rms, and penalty information
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'spd' .or. trim(ioctype(j)) == 'uv'
        end do
        call dtast(bwork,npres_print,pbot,ptop,mesage,jiter,iout_uv,pflag)
        numlow      = nint(awork(2,i_uv))
        numhgh      = nint(awork(3,i_uv))
        write(iout_uv,900) 'wind',numhgh,numlow
        numfailqc=nint(awork(21,i_uv))
!       keep a seperate record of numfailqc for ssmi wind speeds
        numfailqc_ssmi=nint(awork(61,i_uv))
        do k=1,nsig
           num(k)=nint(awork(6*nsig+k+100,i_uv))
           rat1=zero
           rat2=zero
           if(num(k) > 0)then
              rat1=awork(4*nsig+k+100,i_uv)/float(num(k))
              rat2=awork(5*nsig+k+100,i_uv)/float(num(k))
           end if
           umplty=umplty+awork(4*nsig+k+100,i_uv)
           vmplty=vmplty+awork(5*nsig+k+100,i_uv)
           ntot=ntot+num(k)
           write(iout_uv,241) 'w',num(k),k,awork(4*nsig+k+100,i_uv),&
                           awork(5*nsig+k+100,i_uv),rat1,rat2
        end do
        do k=1,nsig
           num(k)=nint(awork(6*nsig+k+100,i_uv))
           rat1=zero
           rat3=zero
           if(num(k) > 0)then
              rat1=(awork(4*nsig+k+100,i_uv)+awork(5*nsig+k+100,i_uv))/float(num(k))
              rat3=awork(3*nsig+k+100,i_uv)/float(num(k))
           end if
           uvqcplty=uvqcplty+awork(3*nsig+k+100,i_uv)
           write(iout_uv,240) 'w',num(k),k,awork(4*nsig+k+100,i_uv)+awork(5*nsig+k+100,i_uv), &
                           awork(3*nsig+k+100,i_uv),rat1,rat3
        end do

!       Write statistics  gross checks
        write(iout_uv,920)' number ssm/i winds that fail nonlinear qc =',numfailqc_ssmi
        write(iout_uv,925) 'wind',numgross,numfailqc
!       Write statistics regarding penalties                   
        if(ntot > 0)then
           tu=umplty/float(ntot)
           tv=vmplty/float(ntot)
           tuv=uvqcplty/float(ntot)
        end if
        if(numssm > 0)then
           tssm=awork(5,i_uv)/awork(6,i_uv)
           qctssm=awork(22,i_uv)/awork(6,i_uv)
        end if
     end if
     write(iout_uv,949) 'u',ntot,umplty,tu
     write(iout_uv,949) 'v',ntot,vmplty,tv
     write(iout_uv,950) 'uv',jiter,nread,nkeep,ntot*2
     write(iout_uv,951) 'uv',umplty+vmplty,uvqcplty,tu+tv,tuv
     write(iout_uv,950) 'spd',jiter,nreadspd,nkeepspd,numssm
     write(iout_uv,951) 'spd',awork(5,i_uv),awork(22,i_uv),tssm,qctssm

!    Close unit receiving summary output     
     close(iout_uv)
  end if


! Summary report for gps 
  if (mype==mype_gps)then
     if(first)then
        open(iout_gps)
     else
        open(iout_gps,position='append')
     end if


     gpsmplty=zero; gpsqcplty=zero ; ntot=0
     tgps=zero ; qctgps=zero
     nread=0
     nkeep=0
     ctype=' '
     do i=1,ndat
        if(dtype(i)== 'gps_ref' .or. dtype(i) == 'gps_bnd')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
           ctype=dtype(i)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of gps data in fractional difference$'
        do j=1,nconvtype
            pflag(j)=trim(ioctype(j)) == 'gps'
        end do
        call dtast(bwork,npres_print,pbot,ptop,mesage,jiter,iout_gps,pflag)
        do k=1,nsig
           num(k)=nint(awork(5*nsig+k+100,i_gps))
           rat=zero
           rat3=zero
           if(num(k)>0) then
              rat=awork(6*nsig+k+100,i_gps)/float(num(k))
              rat3=awork(3*nsig+k+100,i_gps)/float(num(k))
           end if
           ntot=ntot+num(k); gpsmplty=gpsmplty+awork(6*nsig+k+100,i_gps)
           gpsqcplty=gpsqcplty+awork(3*nsig+k+100,i_gps)
           write(iout_gps,240)'gps',num(k),k,awork(6*nsig+k+100,i_gps), &
                             awork(3*nsig+k+100,i_gps),rat,rat3
        end do
        numgross=nint(awork(4,i_gps))
        numfailqc=nint(awork(21,i_gps))
        numfail1_gps=nint(awork(22,i_gps))
        numfail2_gps=nint(awork(23,i_gps))
        numfail3_gps=nint(awork(24,i_gps))
        write(iout_gps,925)'gps',numgross,numfailqc
        write(iout_gps,920)' number of gps obs failed stats qc in NH =',numfail1_gps
        write(iout_gps,920)' number of gps obs failed stats qc in SH =',numfail2_gps
        write(iout_gps,920)' number of gps obs failed stats qc in TR =',numfail3_gps

        numlow        = nint(awork(2,i_gps))
        numhgh        = nint(awork(3,i_gps))
        write(iout_gps,900) 'gps',numhgh,numlow
        if(ntot > 0) then
           tgps=gpsmplty/ntot
           qctgps=gpsqcplty/ntot
        endif
     end if

     write(iout_gps,950) ctype,jiter,nread,nkeep,ntot
     write(iout_gps,951) ctype,gpsmplty,gpsqcplty,tgps,qctgps

     close(iout_gps)
  endif


! Summary report for specific humidity
  if(mype==mype_q) then
     if(first)then
        open(iout_q)
     else
        open(iout_q,position='append')
     end if

     mesage='current fit of q data, units in per-cent of guess q-sat$'
     do j=1,nconvtype
        pflag(j)=trim(ioctype(j)) == 'q'  
     end do
     call dtast(bwork,npres_print,pbotq,ptopq,mesage,jiter,iout_q,pflag)

     qmplty=zero; qqcplty=zero ; ntot=0
     tq=zero ; qctq=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'q')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        do k=1,nsig
           num(k)=nint(awork(k+6*nsig+100,i_q))
           rat=zero
           rat3=zero
           if(num(k) > 0)then
              rat=awork(5*nsig+k+100,i_q)/float(num(k))
              rat3=awork(3*nsig+k+100,i_q)/float(num(k))
           end if
           qmplty=qmplty+awork(5*nsig+k+100,i_q)
           qqcplty=qqcplty+awork(3*nsig+k+100,i_q)
           ntot=ntot+num(k)
           write(iout_q,240) 'q',num(k),k,awork(5*nsig+k+100,i_q), &
                                  awork(3*nsig+k+100,i_q),rat,rat3
        end do
        grsmlt=five
        numgrsq=nint(awork(4,i_q))
        numfailqc=nint(awork(21,i_q))
        write(iout_q,924)'  (scaled as precent of guess specific humidity)'
        write(iout_q,925) 'q',numgrsq,numfailqc
        write(iout_q,975) grsmlt,'q',awork(5,i_q)
        numlow      = nint(awork(2,i_q))
        numhgh      = nint(awork(3,i_q))
        write(iout_q,900) 'q',numhgh,numlow
        if(ntot > 0) then
           tq=qmplty/float(ntot)
           qctq=qqcplty/float(ntot)
        end if
     end if

     write(iout_q,950) 'q',jiter,nread,nkeep,ntot
     write(iout_q,951) 'q',qmplty,qqcplty,tq,qctq

     close(iout_q)
  end if


! Summary report for surface pressure
  if(mype==mype_ps) then
     if(first)then
        open(iout_ps)
     else
        open(iout_ps,position='append')
     end if

     nump=nint(awork(5,i_ps))
     pw=zero ; pw3=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'ps')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of surface pressure data, ranges in mb$'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'ps'  
        end do
        call dtast(bwork,1,pbotall,ptopall,mesage,jiter,iout_ps,pflag)
 
        numgross=nint(awork(6,i_ps))
        numfailqc=nint(awork(21,i_ps))
        write(iout_ps,925) 'psfc',numgross,numfailqc
        if(nump > 0)then
           pw=awork(4,i_ps)/float(nump)
           pw3=awork(22,i_ps)/float(nump)
        end if
     end if

     write(iout_ps,950) 'psfc',jiter,nread,nkeep,nump
     write(iout_ps,951) 'psfc',awork(4,i_ps),awork(22,i_ps),pw,pw3

     close(iout_ps)
  end if


! Summary report for total precipitable water
  if(mype==mype_pw) then
     if(first)then
        open(iout_pw)
     else
        open(iout_pw,position='append')
     end if

     nsuperp=nint(awork(4,i_pw))

     tpw=zero ; tpw3=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'pw')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of precip. water data, ranges in mm$'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'pw'  
        end do
        call dtast(bwork,1,pbotall,ptopall,mesage,jiter,iout_pw,pflag)

        numgrspw=nint(awork(6,i_pw))
        numfailqc=nint(awork(21,i_pw))
        grsmlt=three
        tpw=zero
        tpw3=zero
        if(nsuperp > 0)then
           tpw=awork(5,i_pw)/nsuperp
           tpw3=awork(22,i_pw)/nsuperp
        end if
        write(iout_pw,925) 'p.w.',numgrspw,numfailqc
        write(iout_pw,975) grsmlt,'p.w.',awork(7,i_pw)
     end if
     write(iout_pw,950) 'pw',jiter,nread,nkeep,nsuperp
     write(iout_pw,951) 'pw',awork(5,i_pw),awork(22,i_pw),tpw,tpw3

     close(iout_pw)
  end if

! Summary report for conventional sst
  if(mype==mype_sst) then
     if(first)then
        open(iout_sst)
     else
        open(iout_sst,position='append')
     end if

     numsst=nint(awork(5,i_sst))
     pw=zero ; pw3=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'sst')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of conventional sst data, ranges in  C$'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'sst'  
        end do
        call dtast(bwork,1,pbotall,ptopall,mesage,jiter,iout_sst,pflag)

        numgross=nint(awork(6,i_sst))
        numfailqc=nint(awork(21,i_sst))
        if(numsst > 0)then
           pw=awork(4,i_sst)/numsst
           pw3=awork(22,i_sst)/numsst
        end if
        write(iout_sst,925) 'sst',numgross,numfailqc
     end if
     write(iout_sst,950) 'sst',jiter,nread,nkeep,numsst
     write(iout_sst,951) 'sst',awork(4,i_sst),awork(22,i_sst),pw,pw3

     close(iout_sst)
  end if

! Summary report for conventional gust
  if(mype==mype_gust) then
     if(first)then
        open(iout_gust)
     else
        open(iout_gust,position='append')
     end if

     numgust=nint(awork(5,i_gust))
     pw=zero ; pw3=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'gust')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of conventional gust data, ranges in  m/s$'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'gust'
        end do
        call dtast(bwork,1,pbotall,ptopall,mesage,jiter,iout_gust,pflag)

        numgross=nint(awork(6,i_gust))
        numfailqc=nint(awork(21,i_gust))
        if(numgust > 0)then
           pw=awork(4,i_gust)/numgust
           pw3=awork(22,i_gust)/numgust
        end if
        write(iout_gust,925) 'gust',numgross,numfailqc
     end if
     write(iout_gust,950) 'gust',jiter,nread,nkeep,numgust
     write(iout_gust,951) 'gust',awork(4,i_gust),awork(22,i_gust),pw,pw3

     close(iout_gust)
  end if

! Summary report for conventional vis
  if(mype==mype_vis) then
     if(first)then
        open(iout_vis)
     else
        open(iout_vis,position='append')
     end if

     numvis=nint(awork(5,i_vis))
     pw=zero ; pw3=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'vis')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of conventional vis data, ranges in  m$'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'vis'
        end do
        call dtast(bwork,1,pbotall,ptopall,mesage,jiter,iout_vis,pflag)

        numgross=nint(awork(6,i_vis))
        numfailqc=nint(awork(21,i_vis))
        if(numvis > 0)then
           pw=awork(4,i_vis)/numvis
           pw3=awork(22,i_vis)/numvis
        end if
        write(iout_vis,925) 'vis',numgross,numfailqc
     end if
     write(iout_vis,950) 'vis',jiter,nread,nkeep,numvis
     write(iout_vis,951) 'vis',awork(4,i_vis),awork(22,i_vis),pw,pw3

     close(iout_vis)
  end if

! Summary report for conventional pblh
  if(mype==mype_pblh) then
     if(first)then
        open(iout_pblh)
     else
        open(iout_pblh,position='append')
     end if

     numpblh=nint(awork(5,i_pblh))
     pw=zero ; pw3=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'pblh')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of conventional pblh data, ranges in  m$'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'pblh'
        end do
        call dtast(bwork,1,pbotall,ptopall,mesage,jiter,iout_pblh,pflag)

        numgross=nint(awork(6,i_pblh))
        numfailqc=nint(awork(21,i_pblh))
        if(numpblh > 0)then
           pw=awork(4,i_pblh)/numpblh
           pw3=awork(22,i_pblh)/numpblh
        end if
        write(iout_pblh,925) 'pblh',numgross,numfailqc
     end if
     write(iout_pblh,950) 'pblh',jiter,nread,nkeep,numpblh
     write(iout_pblh,951) 'pblh',awork(4,i_pblh),awork(22,i_pblh),pw,pw3

     close(iout_pblh)
  end if

! Summary report for conventional wspd10m
  if(mype==mype_wspd10m) then
     if(first)then
        open(iout_wspd10m)
     else
        open(iout_wspd10m,position='append')
     end if

     numwspd10m=nint(awork(5,i_wspd10m))
     pw=zero ; pw3=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'wspd10m')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of conventional wspd10m data, ranges in  m/s$'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'wspd10m'
        end do
        call dtast(bwork,1,pbotall,ptopall,mesage,jiter,iout_wspd10m,pflag)

        numgross=nint(awork(6,i_wspd10m))
        numfailqc=nint(awork(21,i_wspd10m))
        if(numwspd10m > 0)then
           pw=awork(4,i_wspd10m)/numwspd10m
           pw3=awork(22,i_wspd10m)/numwspd10m
        end if
        write(iout_wspd10m,925) 'wspd10m',numgross,numfailqc
     end if
     write(iout_wspd10m,950) 'wspd10m',jiter,nread,nkeep,numwspd10m
     write(iout_wspd10m,951) 'wspd10m',awork(4,i_wspd10m),awork(22,i_wspd10m),pw,pw3

     close(iout_wspd10m)
  end if

! Summary report for conventional td2m
  if(mype==mype_td2m) then
     if(first)then
        open(iout_td2m)
     else
        open(iout_td2m,position='append')
     end if

     numtd2m=nint(awork(5,i_td2m))
     pw=zero ; pw3=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'td2m')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of conventional td2m data, ranges in K $'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'td2m'
        end do
        call dtast(bwork,1,pbotall,ptopall,mesage,jiter,iout_td2m,pflag)

        numgross=nint(awork(6,i_td2m))
        numfailqc=nint(awork(21,i_td2m))
        if(numtd2m > 0)then
           pw=awork(4,i_td2m)/numtd2m
           pw3=awork(22,i_td2m)/numtd2m
        end if
        write(iout_td2m,925) 'td2m',numgross,numfailqc
     end if
     write(iout_td2m,950) 'td2m',jiter,nread,nkeep,numtd2m
     write(iout_td2m,951) 'td2m',awork(4,i_td2m),awork(22,i_td2m),pw,pw3

     close(iout_td2m)
  end if

! Summary report for conventional mxtm
  if(mype==mype_mxtm) then
     if(first)then
        open(iout_mxtm)
     else
        open(iout_mxtm,position='append')
     end if

     nummxtm=nint(awork(5,i_mxtm))
     pw=zero ; pw3=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'mxtm')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of conventional mxtm data, ranges in K $'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'mxtm'
        end do
        call dtast(bwork,1,pbotall,ptopall,mesage,jiter,iout_mxtm,pflag)

        numgross=nint(awork(6,i_mxtm))
        numfailqc=nint(awork(21,i_mxtm))
        if(nummxtm > 0)then
           pw=awork(4,i_mxtm)/nummxtm
           pw3=awork(22,i_mxtm)/nummxtm
        end if
        write(iout_mxtm,925) 'mxtm',numgross,numfailqc
     end if
     write(iout_mxtm,950) 'mxtm',jiter,nread,nkeep,nummxtm
     write(iout_mxtm,951) 'mxtm',awork(4,i_mxtm),awork(22,i_mxtm),pw,pw3

     close(iout_mxtm)
  end if

! Summary report for conventional mitm
  if(mype==mype_mitm) then
     if(first)then
        open(iout_mitm)
     else
        open(iout_mitm,position='append')
     end if

     nummitm=nint(awork(5,i_mitm))
     pw=zero ; pw3=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'mitm')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of conventional mitm data, ranges in K $'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'mitm'
        end do
        call dtast(bwork,1,pbotall,ptopall,mesage,jiter,iout_mitm,pflag)

        numgross=nint(awork(6,i_mitm))
        numfailqc=nint(awork(21,i_mitm))
        if(nummitm > 0)then
           pw=awork(4,i_mitm)/nummitm
           pw3=awork(22,i_mitm)/nummitm
        end if
        write(iout_mitm,925) 'mitm',numgross,numfailqc
     end if
     write(iout_mitm,950) 'mitm',jiter,nread,nkeep,nummitm
     write(iout_mitm,951) 'mitm',awork(4,i_mitm),awork(22,i_mitm),pw,pw3

     close(iout_mitm)
  end if

! Summary report for conventional pmsl
  if(mype==mype_pmsl) then
     if(first)then
        open(iout_pmsl)
     else
        open(iout_pmsl,position='append')
     end if

     numpmsl=nint(awork(5,i_pmsl))
     pw=zero ; pw3=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'pmsl')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of conventional pmsl data, ranges in hPa $'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'pmsl'
        end do
        call dtast(bwork,1,pbotall,ptopall,mesage,jiter,iout_pmsl,pflag)

        numgross=nint(awork(6,i_pmsl))
        numfailqc=nint(awork(21,i_pmsl))
        if(numpmsl > 0)then
           pw=awork(4,i_pmsl)/numpmsl
           pw3=awork(22,i_pmsl)/numpmsl
        end if
        write(iout_pmsl,925) 'pmsl',numgross,numfailqc
     end if
     write(iout_pmsl,950) 'pmsl',jiter,nread,nkeep,numpmsl
     write(iout_pmsl,951) 'pmsl',awork(4,i_pmsl),awork(22,i_pmsl),pw,pw3

     close(iout_pmsl)
  end if

! Summary report for conventional howv
  if(mype==mype_howv) then
     if(first)then
        open(iout_howv)
     else
        open(iout_howv,position='append')
     end if

     numhowv=nint(awork(5,i_howv))
     pw=zero ; pw3=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'howv')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of conventional howv data, ranges in m $'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'howv'
        end do
        call dtast(bwork,1,pbotall,ptopall,mesage,jiter,iout_howv,pflag)

        numgross=nint(awork(6,i_howv))
        numfailqc=nint(awork(21,i_howv))
        if(numhowv > 0)then
           pw=awork(4,i_howv)/numhowv
           pw3=awork(22,i_howv)/numhowv
        end if
        write(iout_howv,925) 'howv',numgross,numfailqc
     end if
     write(iout_howv,950) 'howv',jiter,nread,nkeep,numhowv
     write(iout_howv,951) 'howv',awork(4,i_howv),awork(22,i_howv),pw,pw3

     close(iout_howv)
  end if

! Summary report for tcamt
  if(mype==mype_tcamt) then
     if(first)then
        open(iout_tcamt)
     else
        open(iout_tcamt,position='append')
     end if

     numtcamt=nint(awork(5,i_tcamt))
     pw=zero ; pw3=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'tcamt')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of conventional tcamt data, ranges in  %$'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'tcamt'
        end do
        call dtast(bwork,1,pbotall,ptopall,mesage,jiter,iout_tcamt,pflag)

        numgross=nint(awork(6,i_tcamt))
        numfailqc=nint(awork(21,i_tcamt))
        if(numtcamt > 0)then
           pw=awork(4,i_tcamt)/numtcamt
           pw3=awork(22,i_tcamt)/numtcamt
        end if
        write(iout_tcamt,925) 'tcamt',numgross,numfailqc
     end if
     write(iout_tcamt,950) 'tcamt',jiter,nread,nkeep,numtcamt
     write(iout_tcamt,951) 'tcamt',awork(4,i_tcamt),awork(22,i_tcamt),pw,pw3

     close(iout_tcamt)
  end if

! Summary report for lcbas
  if(mype==mype_lcbas) then
     if(first)then
        open(iout_lcbas)
     else
        open(iout_lcbas,position='append')
     end if

     numlcbas=nint(awork(5,i_lcbas))
     pw=zero ; pw3=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'lcbas')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of conventional lcbas data, ranges in  m$'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'lcbas'
        end do
        call dtast(bwork,1,pbotall,ptopall,mesage,jiter,iout_lcbas,pflag)

        numgross=nint(awork(6,i_lcbas))
        numfailqc=nint(awork(21,i_lcbas))
        if(numlcbas > 0)then
           pw=awork(4,i_lcbas)/numlcbas
           pw3=awork(22,i_lcbas)/numlcbas
        end if
        write(iout_lcbas,925) 'lcbas',numgross,numfailqc
     end if
     write(iout_lcbas,950) 'lcbas',jiter,nread,nkeep,numlcbas
     write(iout_lcbas,951) 'lcbas',awork(4,i_lcbas),awork(22,i_lcbas),pw,pw3

     close(iout_lcbas)
  end if

! Summary report for conventional cldch
  if(mype==mype_cldch) then
     if(first)then
        open(iout_cldch)
     else
        open(iout_cldch,position='append')
     end if

     numcldch=nint(awork(5,i_cldch))
     pw=zero ; pw3=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'cldch')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of conventional cldch data, ranges in  m$'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'cldch'
        end do
        call dtast(bwork,1,pbotall,ptopall,mesage,jiter,iout_cldch,pflag)

        numgross=nint(awork(6,i_cldch))
        numfailqc=nint(awork(21,i_cldch))
        if(numcldch > 0)then
           pw=awork(4,i_cldch)/numcldch
           pw3=awork(22,i_cldch)/numcldch
        end if
        write(iout_cldch,925) 'cldch',numgross,numfailqc
     end if
     write(iout_cldch,950) 'cldch',jiter,nread,nkeep,numcldch
     write(iout_cldch,951) 'cldch',awork(4,i_cldch),awork(22,i_cldch),pw,pw3

     close(iout_cldch)
  end if

! Summary report for conventional uwnd10m
  if(mype==mype_uwnd10m) then
     if(first)then
        open(iout_uwnd10m)
     else
        open(iout_uwnd10m,position='append')
     end if

     numuwnd10m=nint(awork(5,i_uwnd10m))
     pw=zero ; pw3=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'uwnd10m')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of conventional uwnd10m data, ranges in  m/s$'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'uwnd10m'
        end do
        call dtast(bwork,1,pbotall,ptopall,mesage,jiter,iout_uwnd10m,pflag)

        numgross=nint(awork(6,i_uwnd10m))
        numfailqc=nint(awork(21,i_uwnd10m))
        if(numuwnd10m > 0)then
           pw=awork(4,i_uwnd10m)/numuwnd10m
           pw3=awork(22,i_uwnd10m)/numuwnd10m
        end if
        write(iout_uwnd10m,925) 'uwnd10m',numgross,numfailqc
     end if
     write(iout_uwnd10m,950) 'uwnd10m',jiter,nread,nkeep,numuwnd10m
     write(iout_uwnd10m,951) 'uwnd10m',awork(4,i_uwnd10m),awork(22,i_uwnd10m),pw,pw3

     close(iout_uwnd10m)
  end if

! Summary report for conventional vwnd10m
  if(mype==mype_vwnd10m) then
     if(first)then
        open(iout_vwnd10m)
     else
        open(iout_vwnd10m,position='append')
     end if

     numvwnd10m=nint(awork(5,i_vwnd10m))
     pw=zero ; pw3=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'vwnd10m')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of conventional vwnd10m data, ranges in  m/s$'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'vwnd10m'
        end do
        call dtast(bwork,1,pbotall,ptopall,mesage,jiter,iout_vwnd10m,pflag)

        numgross=nint(awork(6,i_vwnd10m))
        numfailqc=nint(awork(21,i_vwnd10m))
        if(numvwnd10m > 0)then
           pw=awork(4,i_vwnd10m)/numvwnd10m
           pw3=awork(22,i_vwnd10m)/numvwnd10m
        end if
        write(iout_vwnd10m,925) 'vwnd10m',numgross,numfailqc
     end if
     write(iout_vwnd10m,950) 'vwnd10m',jiter,nread,nkeep,numvwnd10m
     write(iout_vwnd10m,951) 'vwnd10m',awork(4,i_vwnd10m),awork(22,i_vwnd10m),pw,pw3

     close(iout_vwnd10m)
  end if

! Summary report for temperature  
  if (mype==mype_t)then
     if(first)then
        open(iout_t)
     else
        open(iout_t,position='append')
     end if

     tmplty=zero; tqcplty=zero ; ntot=0
     tt=zero ; qctt=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 't')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of temperature data, ranges in K $'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 't'  
        end do
        call dtast(bwork,npres_print,pbot,ptop,mesage,jiter,iout_t,pflag)
        do k=1,nsig
           num(k)=nint(awork(5*nsig+k+100,i_t))
           rat=zero ; rat3=zero
           if(num(k) > 0) then
              rat=awork(6*nsig+k+100,i_t)/float(num(k))
              rat3=awork(3*nsig+k+100,i_t)/float(num(k))
           end if
           ntot=ntot+num(k); tmplty=tmplty+awork(6*nsig+k+100,i_t)
           tqcplty=tqcplty+awork(3*nsig+k+100,i_t)
           write(iout_t,240) 't',num(k),k,awork(6*nsig+k+100,i_t), &
                                          awork(3*nsig+k+100,i_t),rat,rat3
        end do
        numgross=nint(awork(4,i_t))
        numfailqc=nint(awork(21,i_t))
        write(iout_t,925) 'temp',numgross,numfailqc
        numlow      = nint(awork(2,i_t))
        numhgh      = nint(awork(3,i_t))
        write(iout_t,900) 't',numhgh,numlow
        if(ntot > 0) then
           tt=tmplty/ntot
           qctt=tqcplty/ntot
        end if
     end if

     write(iout_t,950) 't',jiter,nread,nkeep,ntot
     write(iout_t,951) 't',tmplty,tqcplty,tt,qctt
     

     close(iout_t)
  endif


! Summary report for doppler lidar winds
  if(mype==mype_dw) then
     if(first)then
        open(iout_dw)
     else
        open(iout_dw,position='append')
     end if

     dwmplty=zero; dwqcplty=zero ; ntot=0
     tdw=zero ; qctdw=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'dw')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current vfit of lidar wind data, ranges in m/s$'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'dw' 
        end do
        call dtast(bwork,npres_print,pbot,ptop,mesage,jiter,iout_dw,pflag)
 
        do k=1,nsig
           num(k)=nint(awork(k+5*nsig+100,i_dw))
           rat=zero
           rat3=zero
           if(num(k) > 0) then
              rat=awork(6*nsig+k+100,i_dw)/float(num(k))
              rat3=awork(3*nsig+k+100,i_dw)/float(num(k))
           end if
           ntot=ntot+num(k)
           dwmplty=dwmplty+awork(6*nsig+k+100,i_dw)
           dwqcplty=dwqcplty+awork(3*nsig+k+100,i_dw)
           write(iout_dw,240) 'r',num(k),k,awork(6*nsig+k+100,i_dw), &
                                           awork(3*nsig+k+100,i_dw),rat,rat3
        end do
        numgross=nint(awork(4,i_dw))
        numfailqc=nint(awork(21,i_dw))
        if(ntot > 0) then
           tdw=dwmplty/float(ntot)
           qctdw=dwqcplty/float(ntot)
        end if
        write(iout_dw,925) 'dw',numgross,numfailqc
        numlow       = nint(awork(2,i_dw))
        numhgh       = nint(awork(3,i_dw))
        write(iout_dw,900) 'dw',numhgh,numlow
     end if

     write(iout_dw,950) 'dw',jiter,nread,nkeep,ntot
     write(iout_dw,951) 'dw',dwmplty,dwqcplty,tdw,qctdw
     
     close(iout_dw)
  end if


! Summary report for radar radial winds
  if(mype==mype_rw) then
     if(first)then
        open(iout_rw)
     else
        open(iout_rw,position='append')
     end if
     
     rwmplty=zero; rwqcplty=zero ; ntot=0
     trw=zero ; qctrw=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'rw')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current vfit of radar wind data, ranges in m/s$'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'rw' 
        end do
        call dtast(bwork,npres_print,pbot,ptop,mesage,jiter,iout_rw,pflag)
     
        numgross=nint(awork(4,i_rw))
        numfailqc=nint(awork(21,i_rw))
        do k=1,nsig
           num(k)=nint(awork(k+5*nsig+100,i_rw))
           rat=zero
           rat3=zero
           if(num(k) > 0) then
              rat=awork(6*nsig+k+100,i_rw)/float(num(k))
              rat3=awork(3*nsig+k+100,i_rw)/float(num(k))
           end if
           ntot=ntot+num(k)
           rwmplty=rwmplty+awork(6*nsig+k+100,i_rw)
           rwqcplty=rwqcplty+awork(3*nsig+k+100,i_rw)
           write(iout_rw,240) 'r',num(k),k,awork(6*nsig+k+100,i_rw), &
                                           awork(3*nsig+k+100,i_rw),rat,rat3
        end do
        if(ntot > 0) then
           trw=rwmplty/float(ntot)
           qctrw=rwqcplty/float(ntot)
        end if
        write(iout_rw,925) 'rw',numgross,numfailqc
        numlow       = nint(awork(2,i_rw))
        numhgh       = nint(awork(3,i_rw))
        nhitopo      = nint(awork(5,i_rw))
        ntoodif      = nint(awork(6,i_rw))
        write(iout_rw,900) 'rw',numhgh,numlow
        write(iout_rw,905) 'rw',nhitopo,ntoodif
     end if
     write(iout_rw,950) 'rw',jiter,nread,nkeep,ntot
     write(iout_rw,951) 'rw',rwmplty,rwqcplty,trw,qctrw
     
     close(iout_rw)
  end if

! Summary report for radar reflectivity
  if(mype==mype_dbz) then
     if(first)then
        open(iout_dbz)
     else
        open(iout_dbz,position='append')
     end if

     dbzmplty=zero; dbzqcplty=zero ; ntot=0
     tdbz=zero ; qctdbz=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'dbz')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current vfit of radar reflectivity data, ranges in dBZ$'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'dbz'
        end do
        call dtast(bwork,npres_print,pbot,ptop,mesage,jiter,iout_dbz,pflag)

        numgross=nint(awork(4,i_dbz))
        numfailqc=nint(awork(21,i_dbz))
        do k=1,nsig
           num(k)=nint(awork(k+5*nsig+100,i_dbz))
           rat=zero
           rat3=zero
           if(num(k) > 0) then
              rat=awork(6*nsig+k+100,i_dbz)/float(num(k))
              rat3=awork(3*nsig+k+100,i_dbz)/float(num(k))
           end if
           ntot=ntot+num(k)
           dbzmplty=dbzmplty+awork(6*nsig+k+100,i_dbz)
           dbzqcplty=dbzqcplty+awork(3*nsig+k+100,i_dbz)
           write(iout_dbz,240) 'r',num(k),k,awork(6*nsig+k+100,i_dbz), &
                                           awork(3*nsig+k+100,i_dbz),rat,rat3
        end do
        if(ntot > 0) then
           tdbz=dbzmplty/float(ntot)
           qctdbz=dbzqcplty/float(ntot)
        end if
        write(iout_dbz,925) 'dbz',numgross,numfailqc
        numlow       = nint(awork(2,i_dbz))
        numhgh       = nint(awork(3,i_dbz))
        nhitopo      = nint(awork(5,i_dbz))
        ntoodif      = nint(awork(6,i_dbz))
        write(iout_dbz,900) 'dbz',numhgh,numlow
        write(iout_dbz,905) 'dbz',nhitopo,ntoodif
     end if
     write(iout_dbz,950) 'dbz',jiter,nread,nkeep,ntot
     write(iout_dbz,951) 'dbz',dbzmplty,dbzqcplty,tdbz,qctdbz

     close(iout_dbz)
  end if

  if(mype==mype_tcp) then
     if(first)then
        open(iout_tcp)
     else
        open(iout_tcp,position='append')
     end if

     nump=nint(awork(5,i_tcp))
     pw=zero ; pw3=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'tcp')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of surface pressure data, ranges in mb$'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'tcp'
        end do
        call dtast(bwork,1,pbotall,ptopall,mesage,jiter,iout_tcp,pflag)

        numgross=nint(awork(6,i_tcp))
        numfailqc=nint(awork(21,i_tcp))
        write(iout_tcp,925) 'psfc',numgross,numfailqc

        if(nump > 0)then
           pw=awork(4,i_tcp)/float(nump)
           pw3=awork(22,i_tcp)/float(nump)
        end if
     end if

     write(iout_tcp,950) 'psfc',jiter,nread,nkeep,nump
     write(iout_tcp,951) 'psfc',awork(4,i_tcp),awork(22,i_tcp),pw,pw3

     close(iout_tcp)
  end if

 ! Summary report for lagrangian
  if (mype==mype_lag)then
     if(first)then
        open(iout_lag)
     else
        open(iout_lag,position='append')
     end if

     tmplty=zero; tqcplty=zero ; ntot=0
     tt=zero ; qctt=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'lag')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of lagangian data, ranges in m $'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'lag'
        end do
        call dtast(bwork,npres_print,pbot,ptop,mesage,jiter,iout_lag,pflag)
        do k=1,nsig
           num(k)=nint(awork(6*nsig+k+100,i_lag))
           rat=zero ; rat3=zero
           if(num(k) > 0) then
              rat=awork(4*nsig+k+100,i_lag)/float(num(k))
              rat3=awork(3*nsig+k+100,i_lag)/float(num(k))
           end if
           ntot=ntot+num(k); tmplty=tmplty+awork(4*nsig+k+100,i_lag)
           tqcplty=tqcplty+awork(3*nsig+k+100,i_lag)
           write(iout_lag,240) 'lag',num(k),k,awork(4*nsig+k+100,i_lag), &
                                          awork(3*nsig+k+100,i_lag),rat,rat3
        end do
        numgross=nint(awork(4,i_lag))
        numfailqc=nint(awork(21,i_lag))
        write(iout_lag,925) 'lag',numgross,numfailqc
       ! numlow      = nint(awork(2,i_t))
       ! numhgh      = nint(awork(3,i_t))
       ! write(iout_lag,900) 't',numhgh,numlow
        if(ntot > 0) then
           tt=tmplty/ntot
           qctt=tqcplty/ntot
        end if
     end if

     write(iout_lag,950) 'lag',jiter,nread,nkeep,ntot
     write(iout_lag,951) 'lag',tmplty,tqcplty,tt,qctt

     close(iout_lag)
  endif

! Summary report for solid-water content path
  if(mype==mype_swcp) then
     if(first)then
        open(iout_swcp)
     else
        open(iout_swcp,position='append')
     end if

     nsuperp=nint(awork(4,i_swcp))

     tswcp=zero ; tswcp3=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'swcp')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of solid-water content path, ranges in kg/m^2$'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'swcp'
        end do
        call dtast(bwork,1,pbotall,ptopall,mesage,jiter,iout_swcp,pflag)

        numgrsswcp=nint(awork(6,i_swcp))
        numfailqc=nint(awork(21,i_swcp))
        grsmlt=three
        tswcp=zero
        tswcp3=zero
        if(nsuperp > 0)then
           tswcp=awork(5,i_swcp)/nsuperp
           tswcp3=awork(22,i_swcp)/nsuperp
        end if
        write(iout_swcp,925) 'swcp',numgrsswcp,numfailqc
        write(iout_swcp,975) grsmlt,'swcp',awork(7,i_swcp)
     end if
     write(iout_swcp,950) 'swcp',jiter,nread,nkeep,nsuperp
     write(iout_swcp,951) 'swcp',awork(5,i_swcp),awork(22,i_swcp),tswcp,tswcp3

     close(iout_swcp)
  end if

! Summary report for liquid-water content path
  if(mype==mype_lwcp) then
     if(first)then
        open(iout_lwcp)
     else
        open(iout_lwcp,position='append')
     end if

     nsuperp=nint(awork(4,i_lwcp))

     tlwcp=zero ; tlwcp3=zero
     nread=0
     nkeep=0
     do i=1,ndat
        if(dtype(i)== 'lwcp')then
           nread=nread+ndata(i,2)
           nkeep=nkeep+ndata(i,3)
        end if
     end do
     if(nkeep > 0)then
        mesage='current fit of liquid-water content path, ranges in kg/m^2$'
        do j=1,nconvtype
           pflag(j)=trim(ioctype(j)) == 'lwcp'
        end do
        call dtast(bwork,1,pbotall,ptopall,mesage,jiter,iout_lwcp,pflag)

        numgrslwcp=nint(awork(6,i_lwcp))
        numfailqc=nint(awork(21,i_lwcp))
        grsmlt=three
        tlwcp=zero
        tlwcp3=zero
        if(nsuperp > 0)then
           tlwcp=awork(5,i_lwcp)/nsuperp
           tlwcp3=awork(22,i_lwcp)/nsuperp
        end if
        write(iout_lwcp,925) 'lwcp',numgrslwcp,numfailqc
        write(iout_lwcp,975) grsmlt,'lwcp',awork(7,i_lwcp)
     end if
     write(iout_lwcp,950) 'lwcp',jiter,nread,nkeep,nsuperp
     write(iout_lwcp,951) 'lwcp',awork(5,i_lwcp),awork(22,i_lwcp),tlwcp,tlwcp3

     close(iout_lwcp)
  end if


! Format statements used above
111 format('obs lev   num     rms         bias        sumges       sumobs        cpen')
240 format(' num(',A1,') = ',i6,' at lev ',i4,' pen,qcpen,cpen,cqcpen = ',6(g12.5,1x))
241 format(' num(',A1,') = ',i6,' at lev ',i4,' upen,vpen,cupen,cvpen = ',6(g12.5,1x))
900 format(' number of ',a5,' obs extrapolated above',&
         ' top sigma layer=',i8,/,10x,' number extrapolated below',&
         ' bottom sigma layer=',i8)
905 format(' number of ',a5,' obs with station elevation > 2km = ',i8,/, &
         ' number with abs(guess topography-station elevation) > 200m = ',i8)
920 format(a44,i7)
924 format(a50)
925 format(' number of ',a5,' obs that failed gross test = ',I5,' nonlin qc test = ',I5)
949 format(' number of ',a5,' obs = ',i6,' pen= ',e25.18,' cpen= ',g13.6)
950 format(' type ',a7,' jiter ',i3,' nread ',i9,' nkeep ',i7,' num ',i7)
951 format(' type ',a7,' pen= ',e25.18,' qcpen= ',e25.18,' r= ',g13.6,' qcr= ',g13.6)
952 format(t5,'it',t13,'sat',t21,'# read',t32,'# keep',t42,'# assim',&
         t52,'penalty',t67,'cpen')
975 format(' grsmlt=',f7.1,' number of bad ',a5,' obs=',f8.0)
  
  return
end subroutine statsconv