subroutine sofqnw(temp,qval,eval) c implicit none integer i, j, k0, k1, k2, n, m parameter(m=8) parameter(n=50) double precision qval, wval, eval, slop, y_int double precision sqt(m,n), dq1, dq2, temp, T(m) double precision l1, l2, y1, y2 if(temp.lt.1.379.or.temp.gt.4.241) & write(*,*) "Temperature is out range" c Table III ... PRB 24, 159 (1981) open(28,file='hallock.dat') read(28,*) ((sqt(i,j),i=1,m),j=1,n) close(28) eval = 0 c data T/0,1.38,1.67,2.20,2.50,3.00,3.50,4.24/ do k0=1,m-1 if(temp.gt.T(k0).and.temp.le.T(k0+1)) then l1 = k0 l2 = k0 + 1 endif enddo do 13 k1=1,n dq1 = qval - sqt(1,k1) dq2 = qval - sqt(1,k1+1) if(abs(dq1)+abs(dq2).gt.0.1) goto 13 if(abs(temp-4.24).le.5e-4) then eval = ((sqt(8,k1+1)-sqt(8,k1))/(sqt(1,k1+1)-sqt(1,k1)))* & (qval-sqt(1,k1))+sqt(8,k1) else y1 = ((sqt(l2,k1)-sqt(l1,k1))/(T(l2)-T(l1)))*(temp-T(l1))+ & sqt(l1,k1) y2 = ((sqt(l2,k1+1)-sqt(l1,k1+1))/(T(l2)-T(l1)))* & (temp-T(l1))+sqt(l1,k1+1) eval = ((y2-y1)/(sqt(1,k1+1)-sqt(1,k1)))*(qval-sqt(1,k1))+ & + y1 endif 13 continue return end