subroutine xsnorm(val,eval) implicit none integer i,n parameter(n=37) double precision e(n), xs(n) double precision val,eval,slop,y_int data e/0.01000, 0.01983, 0.02993, 0.03998, 0.04995, 0.06000, & 0.06975, 0.07972, 0.09010, 0.09960, 0.19880, 0.29979, & 0.39598, 0.50025, 0.59777, 0.69509, 0.79839, 0.90239, & 0.99044, 1.99328, 2.97759, 4.00000, 5.00000, 6.00000, & 7.00000, 8.00000, 9.00000, 10.0000, 20.0000, 30.0000, & 40.0000, 50.0000, 60.0000, 70.0000, 80.0000, 90.0000, & 100.000/ ! (meV) data xs/0.0789474, 0.0608290, 0.0518553, 0.0463947, 0.0425263, & 0.0394737, 0.0369605, 0.0347105, 0.0327500, 0.0310526, & 0.0242895, 0.0218158, 0.0208816, 0.0215000, 0.0233421, & 0.0263158, 0.0310526, 0.0362500, 0.0419079, 0.3515000, & 0.7952631, 0.8421052, 0.8381974, 0.8461579, 0.8561842, & 0.8682368, 0.8821316, 0.8946447, 0.9506710, 0.9621578, & 0.9740000, 0.9807895, 0.9871579, 0.9911053, 0.9959737, & 0.9986842, 1.0000000/ ! no unit (normalization factor) c do i=1,n-1 if(val.lt.e(1).or.val.gt.e(n)) then write(*,*) val,e(1),e(n) write(*,*) 'The value is out of range ... xsnorm code' stop elseif(val.eq.e(i)) then eval = xs(i) elseif(val.eq.e(i+1)) then eval = xs(i+1) elseif(val.gt.e(i).and.val.lt.e(i+1)) then slop = (xs(i+1)-xs(i))/(e(i+1)-e(i)) y_int = xs(i) - slop*e(i) eval = slop*val+y_int endif enddo return end