1 // SPDX-FileCopyrightText: Copyright (c) 2017-2024, HONEE contributors. 2 // SPDX-License-Identifier: Apache-2.0 OR BSD-2-Clause 3 #pragma once 4 5 #include <ceed.h> 6 #include <petsc-ceed.h> 7 #include <petsc/private/petscimpl.h> 8 #include <petscdm.h> 9 #include <petscmat.h> 10 11 // MatCeed context for applying composite CeedOperator on a DM 12 typedef struct MatCeedContext_private *MatCeedContext; 13 struct MatCeedContext_private { 14 Ceed ceed; 15 char *name, *coo_mat_type; 16 PetscMemType mem_type; 17 PetscInt ref_count, num_mats_assembled_full, num_mats_assembled_pbd; 18 PetscBool is_destroyed, is_ceed_pbd_valid, is_ceed_vpbd_valid; 19 PetscLogEvent log_event_mult, log_event_mult_transpose, log_event_ceed_mult, log_event_ceed_mult_transpose; 20 DM dm_x, dm_y; 21 Mat *mats_assembled_full, *mats_assembled_pbd, mat_assembled_full_internal, mat_assembled_pbd_internal; 22 Vec X_loc, Y_loc_transpose; 23 CeedVector x_loc, y_loc, coo_values_full, coo_values_pbd; 24 CeedOperator op_mult, op_mult_transpose; 25 PetscLogDouble flops_mult, flops_mult_transpose; 26 PetscBool coo_reuse_preallocation; 27 }; 28 29 // Context data 30 PETSC_CEED_EXTERN PetscErrorCode MatCeedContextCreate(DM dm_x, DM dm_y, Vec X_loc, Vec Y_loc_transpose, CeedOperator op_mult, 31 CeedOperator op_mult_transpose, PetscLogEvent log_event_mult, 32 PetscLogEvent log_event_mult_transpose, PetscLogEvent log_event_ceed_mult, 33 PetscLogEvent log_event_ceed_mult_transpose, MatCeedContext *ctx); 34 PETSC_CEED_EXTERN PetscErrorCode MatCeedContextReference(MatCeedContext ctx); 35 PETSC_CEED_EXTERN PetscErrorCode MatCeedContextReferenceCopy(MatCeedContext ctx, MatCeedContext *ctx_copy); 36 PETSC_CEED_EXTERN PetscErrorCode MatCeedContextDestroy(MatCeedContext *ctx); 37 38 // MatCEED 39 PETSC_CEED_EXTERN PetscErrorCode MatGetDiagonal_Ceed(Mat A, Vec D); 40 PETSC_CEED_EXTERN PetscErrorCode MatMult_Ceed(Mat A, Vec X, Vec Y); 41 PETSC_CEED_EXTERN PetscErrorCode MatMultTranspose_Ceed(Mat A, Vec Y, Vec X); 42 43 extern PetscClassId MATCEED_CLASSID; 44 extern PetscLogEvent MATCEED_MULT, MATCEED_MULT_TRANSPOSE; 45