1*8d78d7c8SJames Wright // SPDX-FileCopyrightText: Copyright (c) 2017-2025, HONEE contributors. 2*8d78d7c8SJames Wright // SPDX-License-Identifier: Apache-2.0 OR BSD-2-Clause 3*8d78d7c8SJames Wright #pragma once 4*8d78d7c8SJames Wright 5*8d78d7c8SJames Wright #include <ceed.h> 6*8d78d7c8SJames Wright #include <honee.h> 7*8d78d7c8SJames Wright #include <petsc_ops.h> 8*8d78d7c8SJames Wright 9*8d78d7c8SJames Wright typedef struct { 10*8d78d7c8SJames Wright DM dm_filter; 11*8d78d7c8SJames Wright PetscInt num_filtered_fields; 12*8d78d7c8SJames Wright CeedInt *num_field_components; 13*8d78d7c8SJames Wright PetscInt field_prim_state, field_velo_prod; 14*8d78d7c8SJames Wright OperatorApplyContext op_rhs_ctx; 15*8d78d7c8SJames Wright KSP ksp; 16*8d78d7c8SJames Wright PetscObjectState X_loc_state; 17*8d78d7c8SJames Wright PetscBool do_mms_test; 18*8d78d7c8SJames Wright CeedContextFieldLabel filter_width_scaling_label; 19*8d78d7c8SJames Wright } *DiffFilterData; 20*8d78d7c8SJames Wright 21*8d78d7c8SJames Wright PetscErrorCode DifferentialFilterSetup(Honee honee, DiffFilterData *diff_filter); 22*8d78d7c8SJames Wright PetscErrorCode DifferentialFilterDataDestroy(DiffFilterData *diff_filter); 23*8d78d7c8SJames Wright PetscErrorCode DifferentialFilterApply(Honee honee, DiffFilterData diff_filter, const PetscReal solution_time, const Vec Q, Vec Filtered_Solution); 24*8d78d7c8SJames Wright 25*8d78d7c8SJames Wright PetscErrorCode TSMonitor_DifferentialFilterSetup(TS ts, PetscViewerAndFormat *ctx); 26*8d78d7c8SJames Wright PetscErrorCode TSMonitor_DifferentialFilter(TS ts, PetscInt steps, PetscReal solution_time, Vec Q, PetscViewerAndFormat *ctx); 27*8d78d7c8SJames Wright 28*8d78d7c8SJames Wright PetscErrorCode DifferentialFilterMmsICSetup(Honee honee); 29