11! Copyright (c) 2026, The Regents of the University of California
22! Terms of use are as specified in LICENSE.txt
33
4- module interpolation_operators_1D_m
4+ module interpolator_1D_m
55 ! ! Define a sparse matrix storage format tailored to the staggered-grid interpolation matrix
66 ! ! operators detailed by Dumett & Castillo (2022) https://doi.org/10.13140/RG.2.2.26630.14400
77 implicit none
88
99 private
10- public :: cells_to_faces_t
11- public :: faces_to_cells_t
10+ public :: centers_to_faces_1D_t
1211
13- type interpolation_operator_1D_t
12+ type, abstract :: interpolator_1D_t
1413 ! ! Encapsulate a staggered-grid interpolation matrix with a corresponding matrix-vector product operator
1514 private
16- integer order
15+ integer order_, cells_, dx_
1716 double precision first_
1817 double precision , allocatable :: upper_(:,:)
1918 double precision , allocatable :: inner_(:)
2019 double precision , allocatable :: lower_(:,:)
2120 double precision final_
2221 end type
2322
24- type, extends(interpolation_operator_1D_t) :: centers_to_faces_1D_t
23+ type, extends(interpolator_1D_t) :: centers_to_faces_1D_t
24+ contains
25+ generic :: operator (.center.) = > interpolate_to_faces
26+ procedure , non_overridable, private :: interpolate_to_faces
2527 end type
2628
27- type, extends(interpolation_operator_1D_t ) :: faces_to_centers_1D_t
29+ type, extends(interpolator_1D_t ) :: faces_to_centers_1D_t
2830 end type
2931
3032 interface centers_to_faces_1D_t
3133
32- pure module function c2f_component_constructor (order, cells, dx) result(centers_to_faces_1D)
34+ pure module function c2f_constructor (order, cells, dx) result(centers_to_faces_1D)
3335 ! ! Construct centers-to-faces interpolation operator
3436 implicit none
3537 integer , intent (in ) :: order, cells
@@ -41,14 +43,26 @@ pure module function c2f_component_constructor(order, cells, dx) result(centers_
4143
4244 interface faces_to_centers_1D_t
4345
44- pure module function f2c_component_constructor (order, cells, dx) result(faces_to_centers_1D)
45- ! ! Construct faces -to-centers interpolation operator
46+ pure module function f2c_constructor (order, cells, dx) result(faces_to_centers_1D)
47+ ! ! Construct centers -to-faces interpolation operator
4648 implicit none
4749 integer , intent (in ) :: order, cells
4850 double precision , intent (in ) :: dx
49- type (faces_to_centers_1D_t) faces_to_centers_1D
51+ type (centers_to_faces_1D_t) faces_to_centers_1D
52+ end function
53+
54+ end interface
55+
56+ interface
57+
58+ pure module function interpolate_to_faces(self, centers) result(faces)
59+ ! ! Interpolate cell-centered values to face-centered values
60+ implicit none
61+ class(centers_to_faces_1D_t), intent (in ) :: self
62+ double precision , intent (in ) :: centers(:)
63+ double precision , allocatable :: faces(:)
5064 end function
5165
5266 end interface
5367
54- end module interpolation_operators_1D_m
68+ end module interpolator_1D_m
0 commit comments