subroutine dsg0(val,eval) implicit none integer i,n parameter(n=13) double precision temp(n), dsig0(n) double precision val,eval,slop,y_int c From Tsipenyuk, Fig. 3 dSIG/dOmega(q=0) data temp/1.600000, 1.800000, 2.000000, 2.200000, 2.400000, & 2.600000, 2.800000, 3.000000, 3.200000, 3.400000, 3.600000, & 3.800000, 4.000000/ ! K data dsig0/0.1433225d-03, 0.1622665d-03, 0.1820104d-03, & 0.2010544d-03, 0.2240130d-03, 0.2470570d-03, 0.2730156d-03, & 0.2990743d-03, 0.3382476d-03, 0.3928795d-03, 0.4820847d-03, & 0.6123778d-03, 0.7687297d-03/ ! cm^-1 do i=1,n-1 if(val.lt.temp(1)) then eval = dsig0(1) elseif(val.eq.temp(i)) then eval = dsig0(i) elseif(val.eq.temp(i+1)) then eval = dsig0(i+1) elseif(val.gt.temp(i).and.val.lt.temp(i+1)) then slop = (dsig0(i+1)-dsig0(i))/(temp(i+1)-temp(i)) y_int = dsig0(i) - slop*temp(i) eval = slop*val+y_int elseif(val.gt.temp(i+1)) then slop = (dsig0(i+1)-dsig0(i))/(temp(i+1)-temp(i)) ! bec "i-1 to i" y_int = dsig0(i) - slop*temp(i) ! bec "i-1 to i" eval = slop*val+y_int endif enddo return end