217 integer,
intent(in) :: n
218 real,
dimension(:),
intent(in) :: h
219 real,
dimension(:),
intent(in) :: u
220 real,
dimension(:,:),
intent(inout) :: edge_slopes
224 real :: h0, h1, h2, h3
226 real :: g_4, g_5, g_6
227 real :: d2, d3, d4, d5, d6
228 real :: n2, n3, n4, n5, n6
234 real :: h0ph1, h0ph1_2
235 real :: h0ph1_3, h0ph1_4
236 real :: h2ph3, h2ph3_2
237 real :: h2ph3_3, h2ph3_4
240 real,
dimension(7) :: x
241 real,
dimension(6,6) :: asys
242 real,
dimension(6) :: bsys, csys
243 real,
dimension(5) :: dsys
244 real,
dimension(N+1) :: tri_l, &
279 d2 = ( h1_2 - g_2 ) / ( h0 + h_neglect )
280 d3 = ( h1_3 - g_3 ) / ( h0 + h_neglect )
281 d4 = ( h1_4 - g_4 ) / ( h0 + h_neglect )
282 d5 = ( h1_5 - g_5 ) / ( h0 + h_neglect )
283 d6 = ( h1_6 - g_6 ) / ( h0 + h_neglect )
292 n2 = ( g_2 - h2_2 ) / ( h3 + h_neglect )
293 n3 = ( g_3 - h2_3 ) / ( h3 + h_neglect )
294 n4 = ( g_4 - h2_4 ) / ( h3 + h_neglect )
295 n5 = ( g_5 - h2_5 ) / ( h3 + h_neglect )
296 n6 = ( g_6 - h2_6 ) / ( h3 + h_neglect )
308 asys(2,3) = -0.5 * d2
310 asys(2,5) = -0.5 * h2
311 asys(2,6) = -0.5 * n2
315 asys(3,3) = - d3 / 6.0
316 asys(3,4) = h1_2 / 6.0
317 asys(3,5) = h2_2 / 6.0
320 asys(4,1) = - h1_2 / 2.0
321 asys(4,2) = - h2_2 / 2.0
322 asys(4,3) = d4 / 24.0
323 asys(4,4) = - h1_3 / 24.0
324 asys(4,5) = h2_3 / 24.0
325 asys(4,6) = n4 / 24.0
327 asys(5,1) = h1_3 / 6.0
328 asys(5,2) = - h2_3 / 6.0
329 asys(5,3) = - d5 / 120.0
330 asys(5,4) = h1_4 / 120.0
331 asys(5,5) = h2_4 / 120.0
332 asys(5,6) = n5 / 120.0
334 asys(6,1) = - h1_4 / 24.0
335 asys(6,2) = - h2_4 / 24.0
336 asys(6,3) = d6 / 720.0
337 asys(6,4) = - h1_5 / 720.0
338 asys(6,5) = h2_5 / 720.0
339 asys(6,6) = n6 / 720.0
341 bsys(:) = (/ 0.0, -1.0, 0.0, 0.0, 0.0, 0.0 /)
343 call solve_linear_system( asys, bsys, csys, 6 )
355 tri_b(k+1) = a * u(k-1) + b * u(k) + c * u(k+1) + d * u(k+2)
388 h0ph1_2 = h0ph1 * h0ph1
389 h0ph1_3 = h0ph1_2 * h0ph1
390 h0ph1_4 = h0ph1_2 * h0ph1_2
392 d2 = ( h1_2 - g_2 ) / ( h0 + h_neglect )
393 d3 = ( h1_3 - g_3 ) / ( h0 + h_neglect )
394 d4 = ( h1_4 - g_4 ) / ( h0 + h_neglect )
395 d5 = ( h1_5 - g_5 ) / ( h0 + h_neglect )
396 d6 = ( h1_6 - g_6 ) / ( h0 + h_neglect )
405 n2 = ( g_2 - h2_2 ) / ( h3 + h_neglect )
406 n3 = ( g_3 - h2_3 ) / ( h3 + h_neglect )
407 n4 = ( g_4 - h2_4 ) / ( h3 + h_neglect )
408 n5 = ( g_5 - h2_5 ) / ( h3 + h_neglect )
409 n6 = ( g_6 - h2_6 ) / ( h3 + h_neglect )
421 asys(2,3) = -0.5 * d2
423 asys(2,5) = -0.5 * h2
424 asys(2,6) = -0.5 * n2
428 asys(3,3) = - d3 / 6.0
429 asys(3,4) = h1_2 / 6.0
430 asys(3,5) = h2_2 / 6.0
433 asys(4,1) = - h0ph1_2 / 2.0
435 asys(4,3) = d4 / 24.0
436 asys(4,4) = - h1_3 / 24.0
437 asys(4,5) = h2_3 / 24.0
438 asys(4,6) = n4 / 24.0
440 asys(5,1) = h0ph1_3 / 6.0
442 asys(5,3) = - d5 / 120.0
443 asys(5,4) = h1_4 / 120.0
444 asys(5,5) = h2_4 / 120.0
445 asys(5,6) = n5 / 120.0
447 asys(6,1) = - h0ph1_4 / 24.0
449 asys(6,3) = d6 / 720.0
450 asys(6,4) = - h1_5 / 720.0
451 asys(6,5) = h2_5 / 720.0
452 asys(6,6) = n6 / 720.0
454 bsys(:) = (/ 0.0, -1.0, -h1, h1_2/2.0, -h1_3/6.0, h1_4/24.0 /)
456 call solve_linear_system( asys, bsys, csys, 6 )
468 tri_b(2) = a * u(1) + b * u(2) + c * u(3) + d * u(4)
473 x(i) = x(i-1) + h(i-1)
479 asys(i,j) = ( (x(i+1)**j) - (x(i)**j) ) / j
482 bsys(i) = u(i) * h(i)
486 call solve_linear_system( asys, bsys, csys, 6 )
489 dsys(2) = 2.0 * csys(3)
490 dsys(3) = 3.0 * csys(4)
491 dsys(4) = 4.0 * csys(5)
492 dsys(5) = 5.0 * csys(6)
497 tri_b(1) = evaluation_polynomial( dsys, 5, x(1) )
528 h2ph3_2 = h2ph3 * h2ph3
529 h2ph3_3 = h2ph3_2 * h2ph3
530 h2ph3_4 = h2ph3_2 * h2ph3_2
532 d2 = ( h1_2 - g_2 ) / ( h0 + h_neglect )
533 d3 = ( h1_3 - g_3 ) / ( h0 + h_neglect )
534 d4 = ( h1_4 - g_4 ) / ( h0 + h_neglect )
535 d5 = ( h1_5 - g_5 ) / ( h0 + h_neglect )
536 d6 = ( h1_6 - g_6 ) / ( h0 + h_neglect )
545 n2 = ( g_2 - h2_2 ) / ( h3 + h_neglect )
546 n3 = ( g_3 - h2_3 ) / ( h3 + h_neglect )
547 n4 = ( g_4 - h2_4 ) / ( h3 + h_neglect )
548 n5 = ( g_5 - h2_5 ) / ( h3 + h_neglect )
549 n6 = ( g_6 - h2_6 ) / ( h3 + h_neglect )
561 asys(2,3) = -0.5 * d2
563 asys(2,5) = -0.5 * h2
564 asys(2,6) = -0.5 * n2
568 asys(3,3) = - d3 / 6.0
569 asys(3,4) = h1_2 / 6.0
570 asys(3,5) = h2_2 / 6.0
574 asys(4,2) = - h2ph3_2 / 2.0
575 asys(4,3) = d4 / 24.0
576 asys(4,4) = - h1_3 / 24.0
577 asys(4,5) = h2_3 / 24.0
578 asys(4,6) = n4 / 24.0
581 asys(5,2) = - h2ph3_3 / 6.0
582 asys(5,3) = - d5 / 120.0
583 asys(5,4) = h1_4 / 120.0
584 asys(5,5) = h2_4 / 120.0
585 asys(5,6) = n5 / 120.0
588 asys(6,2) = - h2ph3_4 / 24.0
589 asys(6,3) = d6 / 720.0
590 asys(6,4) = - h1_5 / 720.0
591 asys(6,5) = h2_5 / 720.0
592 asys(6,6) = n6 / 720.0
594 bsys(:) = (/ 0.0, -1.0, h2, h2_2/2.0, h2_3/6.0, h2_4/24.0 /)
596 call solve_linear_system( asys, bsys, csys, 6 )
608 tri_b(n) = a * u(n-3) + b * u(n-2) + c * u(n-1) + d * u(n)
613 x(i) = x(i-1) + h(n-7+i)
619 asys(i,j) = ( (x(i+1)**j) - (x(i)**j) ) / j
622 bsys(i) = u(n-6+i) * h(n-6+i)
626 call solve_linear_system( asys, bsys, csys, 6 )
629 dsys(2) = 2.0 * csys(3)
630 dsys(3) = 3.0 * csys(4)
631 dsys(4) = 4.0 * csys(5)
632 dsys(5) = 5.0 * csys(6)
637 tri_b(n+1) = evaluation_polynomial( dsys, 5, x(7) )
640 call solve_tridiagonal_system( tri_l, tri_d, tri_u, tri_b, tri_x, n+1 )
643 edge_slopes(i,1) = tri_x(i)
644 edge_slopes(i-1,2) = tri_x(i)
646 edge_slopes(1,1) = tri_x(1)
647 edge_slopes(n,2) = tri_x(n+1)