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