|
|
1.1 ! root 1: subroutine interp(u,d1,d2,d3) ! 2: c interpolation in a triangle ! 3: c input: u = point to be interpolated ! 4: c d1..3 = 3 points already known ! 5: c first subscript: xyz, second: point index ! 6: c (output is in third component of u) ! 7: real u(3) ! 8: real d1(3),d2(3),d3(3) ! 9: integer i,ipvt(3),info ! 10: real a(3,3), r(3) ! 11: do 100 i=1,3 ! 12: a(i,1)=1 ! 13: 100 continue ! 14: do 101 i=2,3 ! 15: a(1,i)=d1(i-1) ! 16: a(2,i)=d2(i-1) ! 17: a(3,i)=d3(i-1) ! 18: 101 continue ! 19: r(1)=d1(3) ! 20: r(2)=d2(3) ! 21: r(3)=d3(3) ! 22: call sgefa(a,3,3,ipvt,info) ! 23: if(info.ne.0)then ! 24: c write(0,1001) info,u,d1,d2,d3 ! 25: c 1001 format(' sgefa abort. info=',i5,/4(3e12.4/)) ! 26: c stop 1 ! 27: if(d1(1).eq.d2(1)) then ! 28: if(d1(2).eq.d2(2)) then ! 29: u(3) = d1(3) ! 30: else ! 31: u(3) = d1(3)+(d2(3)-d1(3))*(u(2)-d1(2))/(d2(2)-d1(2)) ! 32: end if ! 33: else ! 34: u(3) = d1(3)+(d2(3)-d1(3))*(u(1)-d1(1))/(d2(1)-d1(1)) ! 35: end if ! 36: return ! 37: end if ! 38: call sgesl(a,3,3,ipvt,r,0) ! 39: u(3)=r(1)+r(2)*u(1)+r(3)*u(2) ! 40: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.