subroutine spentf(n2,kj,xl,alpha,beta,trig,y,x,ws) c integer n2,kj real xl,alpha,beta real x(*),y(*) real trig(*),ws(*) c c this routine helps solving special pentadiagonal systems c that arise when solving certain biharmonic problems. c c y has length n2 (input ) c x has length n2 (output) c trig is trigonometric information. c ws is workspace of lenght at least n2. c c operation count is n2*(2(div)+4(mult)+6(add)). c n2(div) can be turned into n2(mult) by storing c 1/trig(j) as well. c c one mult and one add can be saved by precomputing the c quantity c1 (requiring slightly more storage.) c this will be implemented in later versions. c c local. c c blas: sdot c integer j real x1,c1,c2 real sdot c c form the inverse of the diagonal matrix. c do 20 j=1,n2 ws(j) = trig(j)/((xl+trig(n2+j))*(xl+trig(n2+j)-alpha)+beta) 20 continue c1 = sdot(n2,trig,1,ws,1) c2 = sdot(n2,y,1,ws,1) x1 = 4.0e0/(n2+kj-1.0e0) c2 = x1*c2/(1.0e0+x1*c1) do 30 j=1,n2 x(j) = (y(j)/trig(j)-c2)*ws(j) 30 continue return end