8 implicit none ;
private 11 public p1m_interpolation, p1m_boundary_extrapolation
27 subroutine p1m_interpolation( N, h, u, edge_values, ppoly_coef, h_neglect, answers_2018 )
28 integer,
intent(in) :: n
29 real,
dimension(:),
intent(in) :: h
30 real,
dimension(:),
intent(in) :: u
31 real,
dimension(:,:),
intent(inout) :: edge_values
32 real,
dimension(:,:),
intent(inout) :: ppoly_coef
34 real,
optional,
intent(in) :: h_neglect
35 logical,
optional,
intent(in) :: answers_2018
42 call bound_edge_values( n, h, u, edge_values, h_neglect, answers_2018 )
46 call average_discontinuous_edge_values( n, edge_values )
51 u0_l = edge_values(k,1)
52 u0_r = edge_values(k,2)
54 ppoly_coef(k,1) = u0_l
55 ppoly_coef(k,2) = u0_r - u0_l
59 end subroutine p1m_interpolation
68 subroutine p1m_boundary_extrapolation( N, h, u, edge_values, ppoly_coef )
70 integer,
intent(in) :: n
71 real,
dimension(:),
intent(in) :: h
72 real,
dimension(:),
intent(in) :: u
73 real,
dimension(:,:),
intent(inout) :: edge_values
74 real,
dimension(:,:),
intent(inout) :: ppoly_coef
93 slope = 2.0 * ( u1 - u0 )
100 u0_r = u0 + 0.5 * slope
102 if ( (u1 - u0) * (edge_values(2,1) - u0_r) < 0.0 )
then 103 slope = 2.0 * ( edge_values(2,1) - u0 )
108 if ( h0 /= 0.0 )
then 109 edge_values(1,1) = u0 - 0.5 * slope
111 edge_values(1,1) = u0
114 ppoly_coef(1,1) = edge_values(1,1)
115 ppoly_coef(1,2) = edge_values(1,2) - edge_values(1,1)
126 slope = 2.0 * ( u1 - u0 )
128 u0_l = u1 - 0.5 * slope
130 if ( (u1 - u0) * (u0_l - edge_values(n-1,2)) < 0.0 )
then 131 slope = 2.0 * ( u1 - edge_values(n-1,2) )
134 if ( h1 /= 0.0 )
then 135 edge_values(n,2) = u1 + 0.5 * slope
137 edge_values(n,2) = u1
140 ppoly_coef(n,1) = edge_values(n,1)
141 ppoly_coef(n,2) = edge_values(n,2) - edge_values(n,1)
143 end subroutine p1m_boundary_extrapolation
Edge value estimation for high-order resconstruction.
Linear interpolation functions.