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.476, !bec & 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.5620, !bec & 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.eq.En(i)) then eval = txs(i) elseif(val.eq.En(i+1)) then eval = txs(i+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.gt.En(n)) then eval = txs(n) endif enddo return end