15aed82e4SJeremy L Thompson // Copyright (c) 2017-2024, Lawrence Livermore National Security, LLC and other CEED contributors. 224a65d3dSJeremy L Thompson // All Rights Reserved. See the top-level LICENSE and NOTICE files for details. 324a65d3dSJeremy L Thompson // 424a65d3dSJeremy L Thompson // SPDX-License-Identifier: BSD-2-Clause 524a65d3dSJeremy L Thompson // 624a65d3dSJeremy L Thompson // This file is part of CEED: http://github.com/ceed 724a65d3dSJeremy L Thompson #pragma once 8c8564c30SJames Wright 9c8564c30SJames Wright #include <ceed.h> 105037d55dSJames Wright #include <petsc-ceed.h> 11c8564c30SJames Wright #include <petscdm.h> 12c8564c30SJames Wright #include <petscmat.h> 133933d9a0SJames Wright #include <petsc/private/petscimpl.h> 14c8564c30SJames Wright 15c8564c30SJames Wright // MatCeed context for applying composite CeedOperator on a DM 16c8564c30SJames Wright typedef struct MatCeedContext_private *MatCeedContext; 17c8564c30SJames Wright struct MatCeedContext_private { 18c8564c30SJames Wright Ceed ceed; 195037d55dSJames Wright char *name, *coo_mat_type; 20c8564c30SJames Wright PetscMemType mem_type; 21c8564c30SJames Wright PetscInt ref_count, num_mats_assembled_full, num_mats_assembled_pbd; 22c8564c30SJames Wright PetscBool is_destroyed, is_ceed_pbd_valid, is_ceed_vpbd_valid; 23*43327b86SJames Wright PetscLogEvent log_event_mult, log_event_mult_transpose, log_event_ceed_mult, log_event_ceed_mult_transpose; 24c8564c30SJames Wright DM dm_x, dm_y; 25c8564c30SJames Wright Mat *mats_assembled_full, *mats_assembled_pbd, mat_assembled_full_internal, mat_assembled_pbd_internal; 26c8564c30SJames Wright Vec X_loc, Y_loc_transpose; 27c8564c30SJames Wright CeedVector x_loc, y_loc, coo_values_full, coo_values_pbd; 28c8564c30SJames Wright CeedOperator op_mult, op_mult_transpose; 29c8564c30SJames Wright PetscLogDouble flops_mult, flops_mult_transpose; 30c8564c30SJames Wright }; 31c8564c30SJames Wright 32c8564c30SJames Wright // Context data 335037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedContextCreate(DM dm_x, DM dm_y, Vec X_loc, Vec Y_loc_transpose, CeedOperator op_mult, 34c8564c30SJames Wright CeedOperator op_mult_transpose, PetscLogEvent log_event_mult, 35*43327b86SJames Wright PetscLogEvent log_event_mult_transpose, PetscLogEvent log_event_ceed_mult, 36*43327b86SJames Wright PetscLogEvent log_event_ceed_mult_transpose, MatCeedContext *ctx); 375037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedContextReference(MatCeedContext ctx); 385037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedContextReferenceCopy(MatCeedContext ctx, MatCeedContext *ctx_copy); 395037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedContextDestroy(MatCeedContext ctx); 40c8564c30SJames Wright 415037d55dSJames Wright // MatCEED 425037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatGetDiagonal_Ceed(Mat A, Vec D); 435037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatMult_Ceed(Mat A, Vec X, Vec Y); 445037d55dSJames Wright PETSC_CEED_EXTERN PetscErrorCode MatMultTranspose_Ceed(Mat A, Vec Y, Vec X); 45c8564c30SJames Wright 46c8564c30SJames Wright extern PetscClassId MATCEED_CLASSID; 47c8564c30SJames Wright extern PetscLogEvent MATCEED_MULT, MATCEED_MULT_TRANSPOSE; 48