subroutine getlvls(param,ithfld,ifld,found_fld,kpv,pv)
!
      use xml_data_post_t, only : param_t
      use ctlblk_mod, only: lsm, spl, nsoil, isf_surface_physics, &
              me, nfd, htfd, nbnd, petabnd
      use RQSTFLD_mod, only: lvls, lvlsxml, mxlvl, lvls, iget, ident, &
              iavblfld
      use soil, only: SLDPTH,SLLEVEL
      implicit none
!
      type(param_t),intent(in) :: param
      integer, intent(in)      :: ithfld,kpv
      integer, intent(inout)   :: ifld
      logical, intent(inout)   :: found_fld
      real,intent(in)          :: pv(1:kpv)
!
      real,parameter :: small=1.e-5
      real,parameter :: small1=1.e-3
      real,parameter :: small2=1
      integer i,j,nlevel,scalef,lvlcape,lvlcin
      logical :: lincfld
!
      lincfld=.false.
      nlevel=size(param%level)
!
      if(trim(param%fixed_sfc1_type)=='isobaric_sfc') then
           do j=1, nlevel
        iloop:  do i=1, lsm
         
             if(abs(param%level(j)-SPL(i))<small1)then
              LVLS(i,ifld)=1
              LVLSXML(i,ifld)=j
              exit iloop
             endif
           enddo  iloop
           enddo
      endif
!
      if(trim(param%fixed_sfc1_type)=='hybrid_lvl') then
           do j=1, nlevel
        iloop1:  do i=1, mxlvl
             if(nint(param%level(j))==i)then
              LVLS(i,ifld)=1
              LVLSXML(i,ifld)=j
              exit iloop1
             endif
           enddo iloop1
           enddo
      endif
!
      if(trim(param%fixed_sfc1_type)=='depth_bel_land_sfc'.and. &
          trim(param%fixed_sfc2_type)=='depth_bel_land_sfc' ) then
!         if(me==0)print *,'nsoil=',nsoil,'iSF_SURFACE_PHYSICS=',iSF_SURFACE_PHYSICS, &
!          'level=',param%level,'sldpth=',SLDPTH(1:nsoil),'sum=',sum(SLDPTH(1:nsoil))*100.
         do j=1, nlevel
          iloop2: do i=1, nsoil
            if(iSF_SURFACE_PHYSICS  ==3) then
              if(nint(param%level(j))==NINT(SLLEVEL(i)*100.)) then
                LVLS(i,ifld)=1
                LVLSXML(i,ifld)=j
                exit iloop2
              endif
            else
              if(nint(param%level2(j))==NINT(sum(SLDPTH(1:i))*100.) ) then
                LVLS(i,ifld)=1
                LVLSXML(i,ifld)=j
                exit iloop2
              endif
            endif
           enddo iloop2
         enddo
         if(trim(param%pname)=='TSOIL') then
           iget(116)=ifld
           IDENT(IFLD) = 116
           IAVBLFLD(IFLD)=ithfld
           FOUND_FLD=.true.
         elseif(trim(param%pname)=='TMP') then
           iget(574)=ifld
           IDENT(IFLD) = 574
           IAVBLFLD(IFLD)=ithfld
           FOUND_FLD=.true.
         endif
!      elseif(trim(param%fixed_sfc1_type)=='depth_bel_land_sfc'.and. &
!        trim(param%fixed_sfc2_type)==''.and.(trim(param%pname)=='TSOIL' &
!        .or.trim(param%pname)=='TMP')) then
!         iget(115)=ifld
!         IDENT(IFLD) = 115
!         IAVBLFLD(IFLD)=ithfld
!         FOUND_FLD=.true.
!         LVLS(1,ifld)=1
!         LVLSXML(1,ifld)=1
      endif
!
!for sigma level, need to check iget
      if(trim(param%pname)=='RH'.and.trim(param%fixed_sfc1_type)=='sigma_lvl'.and.  &
          trim(param%fixed_sfc2_type)=='sigma_lvl') then
         do j=1, nlevel
           if(abs(param%level(j)-33)<small.and.abs(param%level2(j)-100)<small)then
            LVLS(1,ifld)=j
            LVLSXML(1,ifld)=j
            iget(066)=ifld
            IDENT(IFLD) = 066
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
            ifld=ifld+1
           else if(abs(param%level(j)-67)<small.and.abs(param%level2(j)-100)<small)then
            LVLS(1,ifld)=j
            LVLSXML(1,ifld)=j
            iget(081)=ifld
            IDENT(IFLD) = 081
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
            ifld=ifld+1
           else if(abs(param%level(j)-33)<small.and.abs(param%level2(j)-67)<small)then
            LVLS(1,ifld)=j
            LVLSXML(1,ifld)=j
            iget(082)=ifld
            IDENT(IFLD) = 082
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
            ifld=ifld+1
           else if(abs(param%level(j)-47)<small.and.abs(param%level2(j)-100)<small)then
            LVLS(1,ifld)=j
            LVLSXML(1,ifld)=j
            iget(099)=ifld
            IDENT(IFLD) = 099
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
            ifld=ifld+1
           else if(abs(param%level(j)-47)<small.and.abs(param%level2(j)-96)<small)then
            LVLS(1,ifld)=j
            LVLSXML(1,ifld)=j
            iget(100)=ifld
            IDENT(IFLD) = 100
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
            ifld=ifld+1
           else if(abs(param%level(j)-18)<small.and.abs(param%level2(j)-47)<small)then
            LVLS(1,ifld)=j
            LVLSXML(1,ifld)=j
            iget(101)=ifld
            IDENT(IFLD) = 101
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
            ifld=ifld+1
           else if(abs(param%level(j)-84)<small.and.abs(param%level2(j)-98)<small)then
            LVLS(1,ifld)=j
            LVLSXML(1,ifld)=j
            iget(102)=ifld
            IDENT(IFLD) = 102
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
            ifld=ifld+1
           else if(abs(param%level(j)-44)<small.and.abs(param%level2(j)-100)<small)then
            LVLS(1,ifld)=j
            LVLSXML(1,ifld)=j
            iget(318)=ifld
            IDENT(IFLD) = 318
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
            ifld=ifld+1
           else if(abs(param%level(j)-44)<small.and.abs(param%level2(j)-72)<small)then
            LVLS(1,ifld)=j
            LVLSXML(1,ifld)=j
            iget(320)=ifld
            IDENT(IFLD) = 320
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
            ifld=ifld+1
           else if(abs(param%level(j)-72)<small.and.abs(param%level2(j)-94)<small)then
            LVLS(1,ifld)=j
            LVLSXML(1,ifld)=j
            iget(319)=ifld
            IDENT(IFLD) = 319
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
            ifld=ifld+1
           endif
!          print *,'n getlvls,RH_sigma_lvl,ifld=',ifld-1,'ident(ifld)=',IDENT(IFLD-1), &
!           'iget=',iget(IDENT(IFLD-1)),'IAVBLFLD(IFLD-1)=',IAVBLFLD(IFLD-1),'lvl=',lvls(1,ifld-1), &
!           'iget(66)=',iget(66)
         enddo
         ifld=ifld-1
      endif
!
      if(trim(param%pname)=='RH'.and.trim(param%fixed_sfc1_type)=='sigma_lvl'.and.  &
          trim(param%fixed_sfc2_type)=='') then
         do j=1, nlevel
           if(abs(param%level(j)-9823)<small)then
            LVLS(1,ifld)=j
            LVLSXML(1,ifld)=j
            iget(094)=ifld
            IDENT(IFLD) = 094
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
            ifld=ifld+1
           else if(abs(param%level(j)-9950)<small)then
            LVLS(1,ifld)=j
            LVLSXML(1,ifld)=j
            iget(323)=ifld
            IDENT(IFLD) = 323
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
            ifld=ifld+1
           endif
!          print *,'in getlvls,RH_sigma_lvl,1 lvl,ifld=',ifld-1,'ident(ifld)=',IDENT(IFLD-1), &
!           'iget=',iget(IDENT(IFLD-1)),'IAVBLFLD(IFLD-1)=',IAVBLFLD(IFLD-1),'lvl=',lvls(1,ifld-1), &
!           'iget(66)=',iget(66)
         enddo
         ifld=ifld-1
      endif
!
      if(trim(param%fixed_sfc1_type)=='sigma_lvl'.and.trim(param%pname)=='PRES') then
         do j=1, nlevel
           if(abs(param%level(j)-98230)<small)then
            LVLS(1,ifld)=1
            LVLSXML(1,ifld)=j
            iget(091)=ifld
            IDENT(IFLD) = 091
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
           endif
         enddo
      endif
!
      if(trim(param%fixed_sfc1_type)=='sigma_lvl'.and.trim(param%pname)=='TMP') then
         do j=1, nlevel
           if(abs(param%level(j)-9823)<small1)then
            LVLS(1,ifld)=1
            LVLSXML(1,ifld)=j
            iget(092)=ifld
            IDENT(IFLD) = 092
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
            lincfld=.true.
            ifld=ifld+1
           else if(abs(param%level(j)-8967)<small1)then
            LVLS(1,ifld)=1
            LVLSXML(1,ifld)=j
            iget(097)=ifld
            IDENT(IFLD) = 097
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
            lincfld=.true.
            ifld=ifld+1
           else if(abs(param%level(j)-7848)<small1)then
            if(me==0)print *,'indie tmp sigma 7848'
            LVLS(1,ifld)=1
            LVLSXML(1,ifld)=j
            iget(098)=ifld
            IDENT(IFLD) = 098
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
            lincfld=.true.
            ifld=ifld+1
           else if(abs(param%level(j)-9950)<small1)then
            LVLS(1,ifld)=1
            LVLSXML(1,ifld)=j
            iget(321)=ifld
            IDENT(IFLD) = 321
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
            lincfld=.true.
            ifld=ifld+1
           endif
         enddo
         if(lincfld) ifld=ifld-1
         do j=1, nlevel
           if(abs(param%level(j)-7000)<small1.or. abs(param%level(j)-7500)<small1 &
            .or. abs(param%level(j)-8000)<small1 .or. abs(param%level(j)-8500)<small1 &
            .or. abs(param%level(j)-9000)<small )then
            iget(296)=ifld
            IDENT(IFLD) = 296
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
            if(abs(param%level(j)-7000)<small1)then
              LVLS(1,ifld)=1
              LVLSXML(1,ifld)=j
            else if(abs(param%level(j)-7500)<small1)then
              LVLS(2,ifld)=1
              LVLSXML(2,ifld)=j
            else if(abs(param%level(j)-8000)<small1)then
              LVLS(3,ifld)=1
              LVLSXML(3,ifld)=j
            else if(abs(param%level(j)-8500)<small1)then
              LVLS(4,ifld)=1
              LVLSXML(4,ifld)=j
            else if(abs(param%level(j)-9000)<small1)then
              LVLS(5,ifld)=1
              LVLSXML(5,ifld)=j
            endif
           endif
         enddo
      endif
!
!
      if(trim(param%fixed_sfc1_type)=='sigma_lvl'.and.trim(param%pname)=='SPF_H') then
         do j=1, nlevel
           if(abs(param%level(j)-98230)<small)then
            LVLS(1,ifld)=1
            LVLSXML(1,ifld)=j
            iget(093)=ifld
            IDENT(IFLD) = 093
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
           endif
         enddo
      endif
!
      if(trim(param%fixed_sfc1_type)=='sigma_lvl'.and.trim(param%pname)=='U_GRD') then
         do j=1, nlevel
           if(abs(param%level(j)-98230)<small)then
            LVLS(1,ifld)=1
            LVLSXML(1,ifld)=j
            iget(095)=ifld
            IDENT(IFLD) = 095
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
            ifld=ifld+1
           else if(abs(param%level(j)-9950)<small)then
            LVLS(1,ifld)=1
            LVLSXML(1,ifld)=j
            iget(324)=ifld
            IDENT(IFLD) = 324
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
            ifld=ifld+1
           endif
         enddo
         ifld=ifld-1
      endif
!
      if(trim(param%fixed_sfc1_type)=='sigma_lvl'.and.trim(param%pname)=='V_GRD') then
         do j=1, nlevel
           if(abs(param%level(j)-98230)<small)then
            LVLS(1,ifld)=1
            LVLSXML(1,ifld)=j
            iget(096)=ifld
            IDENT(IFLD) = 096
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
            ifld=ifld+1
           else if(abs(param%level(j)-9950)<small)then
            LVLS(1,ifld)=1
            LVLSXML(1,ifld)=j
            iget(325)=ifld
            IDENT(IFLD) = 325
            IAVBLFLD(IFLD)=ithfld
            FOUND_FLD=.true.
            ifld=ifld+1
           endif
         enddo
         ifld=ifld-1
      endif
!
      if(trim(param%fixed_sfc1_type)=='sigma_lvl'.and.trim(param%pname)=='PWAT') then
         do j=1, nlevel
           if(abs(param%level(j)-33)<small.and.abs(param%level2(j)-100)<small)then
            LVLS(1,ifld)=1
            LVLSXML(1,ifld)=j
            iget(104)=ifld
           endif
         enddo
      endif
      if(trim(param%fixed_sfc1_type)=='sigma_lvl'.and.trim(param%pname)=='MCONV') then
         do j=1, nlevel
           if(abs(param%level(j)-85)<small.and.abs(param%level2(j)-100)<small)then
            LVLS(1,ifld)=1
            LVLSXML(1,ifld)=j
            iget(103)=ifld
           endif
         enddo
      endif
      if(trim(param%fixed_sfc1_type)=='sigma_lvl'.and.trim(param%pname)=='V_VEL') then
         do j=1, nlevel
           if(abs(param%level(j)-9950)<small)then
            LVLS(1,ifld)=1
            LVLSXML(1,ifld)=j
            iget(326)=ifld
           endif
         enddo
      endif
!
!for CAPE
      if(trim(param%pname)=='CAPE') then
        if(trim(param%fixed_sfc1_type)=='surface') then
          IGET(032)=ifld
          LVLS(1,IFLD)=ifld
          LVLSXML(1,ifld)=j
          IDENT(IFLD) = 032
          IAVBLFLD(IFLD)=ithfld
        elseif (trim(param%fixed_sfc1_type)=='spec_pres_above_grnd'.and.   &
          trim(param%fixed_sfc2_type)=='spec_pres_above_grnd' ) then
          do j=1, nlevel
            if(abs(param%level(j)-18000.)<small1.and.abs(param%level2(j)-0.)<small1)then
              IGET(566)=ifld
              LVLS(1,IFLD)=1
              LVLSXML(1,ifld)=j
              IDENT(IFLD) = 566
              IAVBLFLD(IFLD)=ithfld
!jw            elseif(abs(param%level(j)-9000.)<small1.and.abs(param%level2(j)-0.)<small1)then
!jw              LVLS(2,IFLD)=1
!jw              LVLSXML(2,ifld)=j
!jw            elseif(abs(param%level(j)-25500.)<small1.and.abs(param%level2(j)-0.)<small1)then
!jw              LVLS(3,IFLD)=1
!jw              LVLSXML(3,ifld)=j
            endif
          enddo
        endif
        return
      endif
!
!
!for CIN
      if(trim(param%pname)=='CIN') then
        if(trim(param%fixed_sfc1_type)=='surface') then
          IGET(107)=ifld
          LVLS(1,IFLD)=IFLD
          IDENT(IFLD) = 107
          IAVBLFLD(IFLD)=ithfld
        elseif (trim(param%fixed_sfc1_type)=='spec_pres_above_grnd'.and.   &
          trim(param%fixed_sfc2_type)=='spec_pres_above_grnd' ) then
          do j=1, nlevel
            if(abs(param%level(j)-18000.)<small1.and.abs(param%level2(j)-0.)<small1)then
              IGET(567)=ifld
              LVLS(1,IFLD)=1
              LVLSXML(1,ifld)=j
              IDENT(IFLD) = 567
              IAVBLFLD(IFLD)=ithfld
            endif
          enddo
        endif
        return
      endif
!
!for pv sfc
      if(trim(param%fixed_sfc1_type)=='pot_vort_sfc') then
         do j=1, nlevel
           scalef=param%scale_fact_fixed_sfc1(j)-6
           if(param%scale_fact_fixed_sfc1(j)<6) scalef=0
        iloop3:  do i=1, kpv
           if(pv(i)/=0.and.abs(param%level(j)*10.**(-1*scalef)-pv(i))<=1.e-5) then
            LVLS(i,ifld)=1
            LVLSXML(i,ifld)=j
            exit iloop3
           endif
         enddo iloop3
         enddo
!        print *,'for level type pv,nlevel=',nlevel,'level=',  &
!          param%level(1:nlevel)*10.**(-1*scalef), &
!          'pv=',pv(1:kpv),lvls1(1:kpv),'ifld=',ifld,'var=',trim(param%pname), &
!          'lvl type=',trim(param%fixed_sfc1_type)
      endif
!
      if(trim(param%fixed_sfc1_type)=='spec_alt_above_mean_sea_lvl') then
         do j=1, nlevel
        iloop4:  do i=1, NFD
           if(nint(param%level(j))==nint(HTFD(i)) )then
            if(HTFD(i)>300.) then
              LVLS(i,ifld)=1
            else
              LVLS(i,ifld)=2
            endif
            LVLSXML(i,ifld)=j
            exit iloop4
           endif
         enddo iloop4
         enddo
      endif
!
      if(trim(param%fixed_sfc1_type)=='spec_pres_above_grnd') then
         do j=1, nlevel
        iloop5:  do i=1, NBND
           if(nint(param%level(j)/100.)==nint(PETABND(i)+15.))then
            LVLS(i,ifld)=1
            LVLSXML(i,ifld)=j
            exit iloop5
           endif
         enddo iloop5
         if(nint(param%level(j)/100.)==255) then
           LVLS(NBND+1,ifld)=1
           LVLSXML(NBND+1,ifld)=j
	 endif
         enddo
      endif
!
      if(trim(param%fixed_sfc1_type)=='spec_hgt_lvl_above_grnd') then
         do j=1, nlevel
            LVLS(j,ifld)=1
            LVLSXML(j,ifld)=j
         enddo
      endif
!     
         end