1 SUBROUTINE r8v_spline(k_bc1,k_bcn,n,x,f,wk)
110 INTEGER,
PARAMETER :: R8=selected_real_kind(12,100)
111 INTEGER k_bc1, k_bcn,
122 real*8 elem21, elemnn1
124 integer :: i_bc1,i_bcn
126 integer :: iord1,iord2
128 real*8 :: h1,h2,h3,dels
129 real*8 :: f1,f2,f3,aa,bb
140 if((i_bc1.lt.-1).or.(i_bc1.gt.7)) i_bc1=0
141 if((i_bcn.lt.0).or.(i_bcn.gt.7)) i_bcn=0
143 if(i_bc1.eq.-1) i_bcn=-1
150 if(i_bc1.eq.0) i3knots = i3knots + 1
151 if(i_bcn.eq.0) i3knots = i3knots + 1
152 if(i_bc1.eq.-1) i3perio = 1
160 if((i_bc1.eq.0).or.(i_bc1.gt.5)) i_bc1=5
161 if((i_bcn.eq.0).or.(i_bcn.gt.5)) i_bcn=5
163 if((i_bc1.eq.1).or.(i_bc1.eq.3).or.(i_bc1.eq.5))
then
169 if((i_bcn.eq.1).or.(i_bcn.eq.3).or.(i_bcn.eq.5))
then
186 ELSEIF(i_bc1.eq.2)
THEN
188 ELSEIF(i_bc1.eq.5)
THEN
189 a1=(f(1,2)-f(1,1))/(x(2)-x(1))
190 ELSEIF(i_bc1.eq.6)
THEN
191 b1=2.0_r8*((f(1,3)-f(1,2))/(x(3)-x(2))
192 & -(f(1,2)-f(1,1))/(x(2)-x(1)))/(x(3)-x(1))
196 ELSEIF(i_bcn.eq.2)
THEN
198 ELSEIF(i_bcn.eq.5)
THEN
199 an=(f(1,n)-f(1,n-1))/(x(n)-x(n-1))
200 ELSEIF(i_bcn.eq.6)
THEN
201 bn=2.0_r8*((f(1,n)-f(1,n-1))/(x(n)-x(n-1))
202 & -(f(1,n-1)-f(1,n-2))/(x(n-1)-x(n-2)))/(x(n)-x(n-2))
209 if((i_bc1.eq.5).and.(i_bcn.eq.5))
then
211 f(2,1)=(f(1,2)-f(1,1))/(x(2)-x(1))
217 else if((iord1.eq.1).and.(iord2.eq.1))
then
235 f(3,1) = (3*(fh-f0)/(h*h) - (2*a1 + an)/h)*2
236 f(4,1) = (-2*(fh-f0)/(h*h*h) + (a1 + an)/(h*h))*6
239 f(3,2) = f(4,1)*h + f(3,1)
241 else if((iord1.eq.1).and.(iord2.eq.2))
then
259 f(3,1) = (-bn/4 + 3*(fh-f0)/(2*h*h) - 3*a1/(2*h))*2
260 f(4,1) = (bn/(4*h) - (fh-f0)/(2*h*h*h) + a1/(2*h*h))*6
263 f(2,2) = f(4,1)*h*h/2 + f(3,1)*h + a1
264 else if((iord1.eq.2).and.(iord2.eq.1))
then
282 f(2,1) = 3*(fh-f0)/(2*h) - b1*h/4 - an/2
283 f(4,1) = (an/(2*h*h) - (fh-f0)/(2*h*h*h) - b1/(4*h))*6
286 f(3,2) = f(4,1)*h + f(3,1)
287 else if((iord1.eq.2).and.(iord2.eq.2))
then
305 f(2,1) = (fh-f0)/h -b1*h/3 -bn*h/6
309 f(2,2) = f(4,1)*h*h/2 + b1*h + f(2,1)
312 ELSE IF(i3perio.eq.1)
then
318 dels=(f(1,3)-f(1,2))/h2 - (f(1,2)-f(1,1))/h1
320 f(2,1)= (f(1,2)-f(1,1))/h1 + (h1*dels)/h
322 f(4,1)= 12*dels/(h1*h)
324 f(2,2)= (f(1,3)-f(1,2))/h2 - (h2*dels)/h
326 f(4,2)= -12*dels/(h2*h)
333 ELSE IF(i3knots.eq.2)
then
346 aa = (f2*h1 + f1*h2)/(h1*h2*h)
347 bb = (f2*h1*h1 - f1*h2*h2)/(h1*h2*h)
356 ELSE IF(i3knots.eq.1)
then
358 if((i_bc1.eq.1).or.(i_bc1.eq.3).or.(i_bc1.eq.5))
then
371 aa=a1/(h2*h3) + f3/(h3*h3*(h3-h2)) - f2/(h2*h2*(h3-h2))
372 bb=-a1*(h3*h3-h2*h2)/(h2*h3*(h3-h2))
373 > + f2*h3/(h2*h2*(h3-h2)) - f3*h2/(h3*h3*(h3-h2))
379 f(2,2)=3*aa*h2*h2 + 2*bb*h2 + a1
380 f(3,2)=6*aa*h2 + 2*bb
383 f(2,3)=3*aa*h3*h3 + 2*bb*h3 + a1
384 f(3,3)=6*aa*h3 + 2*bb
387 else if((i_bc1.eq.2).or.(i_bc1.eq.4).or.(i_bc1.eq.6))
then
400 aa= -(b1/2)*(h3-h2)/(h3*h3-h2*h2)
401 > -f2/(h2*(h3*h3-h2*h2)) + f3/(h3*(h3*h3-h2*h2))
402 bb= -(b1/2)*h2*h3*(h3-h2)/(h3*h3-h2*h2)
403 > +f2*h3*h3/(h2*(h3*h3-h2*h2))
404 > -f3*h2*h2/(h3*(h3*h3-h2*h2))
410 f(2,2)=3*aa*h2*h2 + b1*h2 + bb
414 f(2,3)=3*aa*h3*h3 + b1*h3 + bb
418 else if((i_bcn.eq.1).or.(i_bcn.eq.3).or.(i_bcn.eq.5))
then
431 aa=an/(h2*h3) + f3/(h3*h3*(h3-h2)) - f2/(h2*h2*(h3-h2))
432 bb=-an*(h3*h3-h2*h2)/(h2*h3*(h3-h2))
433 > + f2*h3/(h2*h2*(h3-h2)) - f3*h2/(h3*h3*(h3-h2))
439 f(2,2)=3*aa*h2*h2 + 2*bb*h2 + an
440 f(3,2)=6*aa*h2 + 2*bb
443 f(2,1)=3*aa*h3*h3 + 2*bb*h3 + an
444 f(3,1)=6*aa*h3 + 2*bb
447 else if((i_bcn.eq.2).or.(i_bcn.eq.4).or.(i_bcn.eq.6))
then
460 aa= -(bn/2)*(h3-h2)/(h3*h3-h2*h2)
461 > -f2/(h2*(h3*h3-h2*h2)) + f3/(h3*(h3*h3-h2*h2))
462 bb= -(bn/2)*h2*h3*(h3-h2)/(h3*h3-h2*h2)
463 > +f2*h3*h3/(h2*(h3*h3-h2*h2))
464 > -f3*h2*h2/(h3*(h3*h3-h2*h2))
470 f(2,2)=3*aa*h2*h2 + bn*h2 + bb
474 f(2,1)=3*aa*h3*h3 + bn*h3 + bb
486 f(3,2)=(f(1,2)-f(1,1))/f(4,1)
489 f(2,i)=2.0_r8*(f(4,i-1)+f(4,i))
490 f(3,i+1)=(f(1,i+1)-f(1,i))/f(4,i)
491 f(3,i)=f(3,i+1)-f(3,i)
502 f(2,1)=2.0_r8*(f(4,1)+f(4,n-1))
503 f(3,1)=(f(1,2)-f(1,1))/f(4,1)-(f(1,n)-f(1,n-1))/f(4,n-1)
510 ELSEIF(i_bc1.eq.1.or.i_bc1.eq.3.or.i_bc1.eq.5)
THEN
512 f(3,1)=(f(1,2)-f(1,1))/f(4,1)-a1
513 ELSEIF(i_bc1.eq.2.or.i_bc1.eq.4.or.i_bc1.eq.6)
THEN
515 f(3,1)=f(4,1)*b1/3.0_r8
517 ELSEIF(i_bc1.eq.7)
THEN
519 f(3,1)=f(3,3)/(x(4)-x(2))-f(3,2)/(x(3)-x(1))
520 f(3,1)=f(3,1)*f(4,1)**2/(x(4)-x(1))
523 f(2,2)=f(4,1)+2.0_r8*f(4,2)
524 f(3,2)=f(3,2)*f(4,2)/(f(4,1)+f(4,2))
527 IF(i_bcn.eq.1.or.i_bcn.eq.3.or.i_bcn.eq.5)
THEN
528 f(2,n)=2.0_r8*f(4,n-1)
529 f(3,n)=-(f(1,n)-f(1,n-1))/f(4,n-1)+an
530 ELSEIF(i_bcn.eq.2.or.i_bcn.eq.4.or.i_bcn.eq.6)
THEN
531 f(2,n)=2.0_r8*f(4,n-1)
532 f(3,n)=f(4,n-1)*bn/3.0_r8
535 ELSEIF(i_bcn.eq.7)
THEN
537 f(3,n)=f(3,n-1)/(x(n)-x(n-2))-f(3,n-2)/(x(n-1)-x(n-3))
538 f(3,n)=-f(3,n)*f(4,n-1)**2/(x(n)-x(n-3))
539 ELSEIF(i_bc1.ne.-1)
THEN
541 f(2,n-1)=2.0_r8*f(4,n-2)+f(4,n-1)
542 f(3,n-1)=f(3,n-1)*f(4,n-2)/(f(4,n-1)+f(4,n-2))
550 f(2,i)=f(2,i)-t*f(4,i-1)
551 f(3,i)=f(3,i)-t*f(3,i-1)
552 wk(i)=wk(i)-t*wk(i-1)
555 f(2,n-1)=f(2,n-1)-q*wk(i-1)
556 f(3,n-1)=f(3,n-1)-q*f(3,i-1)
559 wk(n-1)=wk(n-1)+f(4,n-2)
563 f(2,n-1)=f(2,n-1)-t*wk(n-2)
564 f(3,n-1)=f(3,n-1)-t*f(3,n-2)
566 f(3,n-1)=f(3,n-1)/f(2,n-1)
567 f(3,n-2)=(f(3,n-2)-wk(n-2)*f(3,n-1))/f(2,n-2)
570 f(3,i)=(f(3,i)-f(4,i)*f(3,i+1)-wk(i)*f(3,n-1))/f(2,i)
578 IF((i.eq.n-1).and.(imax.eq.n-1))
THEN
579 t=(f(4,i-1)-f(4,i))/f(2,i-1)
589 IF((i.eq.imin+1).and.(imin.eq.2))
THEN
590 f(2,i)=f(2,i)-t*(f(4,i-1)-f(4,i-2))
592 f(2,i)=f(2,i)-t*f(4,i-1)
594 f(3,i)=f(3,i)-t*f(3,i-1)
597 f(3,imax)=f(3,imax)/f(2,imax)
600 IF((i.eq.2).and.(imin.eq.2))
THEN
601 f(3,i)=(f(3,i)-(f(4,i)-f(4,i-1))*f(3,i+1))/f(2,i)
603 f(3,i)=(f(3,i)-f(4,i)*f(3,i+1))/f(2,i)
610 IF(i_bc1.le.0.or.i_bc1.gt.7)
THEN
611 f(3,1)=(f(3,2)*(f(4,1)+f(4,2))-f(3,3)*f(4,1))/f(4,2)
614 IF(i_bcn.le.0.or.i_bcn.gt.7)
THEN
615 f(3,n)=f(3,n-1)+(f(3,n-1)-f(3,n-2))*f(4,n-1)/f(4,n-2)
622 > (f(1,i+1)-f(1,i))/f(4,i)-f(4,i)*(f(3,i+1)+2.0_r8*f(3,i))
623 f(4,i)=(f(3,i+1)-f(3,i))/f(4,i)
633 f(2,n)=f(2,n-1)+hn*(f(3,n-1)+0.5_r8*hn*f(4,n-1))
634 f(3,n)=f(3,n-1)+hn*f(4,n-1)
636 IF(i_bcn.eq.1.or.i_bcn.eq.3.or.i_bcn.eq.5)
THEN
638 ELSE IF(i_bcn.eq.2.or.i_bcn.eq.4.or.i_bcn.eq.6)
THEN