subroutine sommers(T,val,eval)

      implicit none

      integer i,n
      parameter(n=18)
c      parameter(n=37)
      double precision En(n), txs(n), T
      double precision val, eval, slop, y_int
      double precision txs125(n), txs210(n), txs301(n), txs397(n)
      double precision txs425(n), txs460(n)
      data En/ 0.2830584, 0.3195464, 0.3635728, 0.4173667, 0.4840467,
     &     0.5680825, 0.6760652, 0.8180388, 1.009925, 1.278186,
     &     1.669467, 2.272330, 3.272155, 5.112742, 9.089320,
     &     20.45097, 81.80388, 100.0/
      data txs125/ 0.0090, 0.0090, 0.0090, 0.0090, 0.0090, 0.0100,
     &     0.0110, 0.0140, 0.0250, 0.0560, 0.1230, 0.2350, 0.4400,
     &     0.5688, 0.6458, 0.7000, 0.7411, 0.7600/ ! (barn/atom) at 1.25 k
      data txs210/ 0.0260, 0.0260, 0.0260, 0.0250, 0.0210, 0.0150,
     &     0.0110, 0.0130, 0.0300, 0.0630, 0.1370, 0.2520, 0.4276,
     &     0.5707, 0.6496, 0.6984, 0.7401, 0.7600/ ! (barn/atom) at 2.10 k
      data txs301/ 0.0470, 0.0470, 0.0470, 0.0490, 0.0510, 0.0530,
     &     0.0540, 0.0580, 0.0720, 0.1060, 0.1850, 0.3150, 0.4780,
     &     0.6150, 0.6770, 0.7150, 0.7430, 0.7600/ ! (barn/atom) at 3.01 k
      data txs397/ 0.1380, 0.1340, 0.1300, 0.1260, 0.1220, 0.1200,
     &     0.1160, 0.1200, 0.1290, 0.1540, 0.2170, 0.3360, 0.5370,
     &     0.6150, 0.6670, 0.7085, 0.7378, 0.7600/ ! (barn/atom) at 3.97 k
      data txs425/ 0.1750, 0.1750, 0.1640, 0.1550, 0.1500, 0.1480,
     &     0.1520, 0.1620, 0.1820, 0.2170, 0.3360, 0.4670, 0.5750,
     &     0.6397, 0.6855, 0.7188, 0.7408, 0.7600/ ! (barn/atom) at 4.25 k
      data txs460/ 0.2650, 0.2650, 0.2430, 0.2220, 0.2030, 0.1910,
     &     0.1840, 0.1800, 0.1860, 0.2210, 0.2830, 0.4050, 0.5200,
     &     0.6040, 0.6660, 0.7100, 0.7409, 0.7600/ ! (barn/atom) at 4.60 k

      do i=1,n
         if(T.le.1.50) then
            txs(i) = txs125(i)
         elseif(T.gt.1.50.and.T.le.2.17) then
            txs(i) = txs210(i)
         elseif(T.gt.2.17.and.T.le.3.50) then
            txs(i) = txs301(i)
         elseif(T.gt.3.50.and.T.le.4.10) then
            txs(i) = txs397(i)
         elseif(T.gt.4.10.and.T.le.4.40) then
            txs(i) = txs425(i)
         elseif(T.gt.4.40) then
            txs(i) = txs460(i)
         endif
      enddo

      do i=1,n-1
         if(val.lt.En(1)) then
            write(*,*) val,En(1),En(n)
            write(*,*) ' ...'
            write(*,*) i,' The value is out of range ... sommers'
            eval = txs(1)
         elseif(val.gt.En(i).and.val.lt.En(i+1)) then
            slop = (txs(i+1)-txs(i))/(En(i+1)-En(i))
            y_int = txs(i) - slop*En(i)
            eval = slop*val+y_int
         elseif(val.eq.En(i)) then
            eval = txs(i)
         elseif(val.eq.En(i+1)) then
            eval = txs(i+1)
         elseif(val.gt.En(n)) then
            eval = txs(n)
         endif
      enddo

      return
      end