1*ae2b091fSJames Wright // SPDX-FileCopyrightText: Copyright (c) 2017-2024, HONEE contributors. 2*ae2b091fSJames Wright // SPDX-License-Identifier: Apache-2.0 OR BSD-2-Clause 318fb7758SJeremy L Thompson #pragma once 458600ac3SJames Wright 558600ac3SJames Wright #include <ceed.h> 640d80af1SJames Wright #include <petsc-ceed.h> 758600ac3SJames Wright #include <petscdm.h> 858600ac3SJames Wright #include <petscmat.h> 9e90c2ceeSJames Wright #include <petsc/private/petscimpl.h> 1058600ac3SJames Wright 1158600ac3SJames Wright // MatCeed context for applying composite CeedOperator on a DM 1258600ac3SJames Wright typedef struct MatCeedContext_private *MatCeedContext; 1358600ac3SJames Wright struct MatCeedContext_private { 1458600ac3SJames Wright Ceed ceed; 1540d80af1SJames Wright char *name, *coo_mat_type; 1658600ac3SJames Wright PetscMemType mem_type; 1758600ac3SJames Wright PetscInt ref_count, num_mats_assembled_full, num_mats_assembled_pbd; 1858600ac3SJames Wright PetscBool is_destroyed, is_ceed_pbd_valid, is_ceed_vpbd_valid; 19c63b910fSJames Wright PetscLogEvent log_event_mult, log_event_mult_transpose, log_event_ceed_mult, log_event_ceed_mult_transpose; 2058600ac3SJames Wright DM dm_x, dm_y; 2158600ac3SJames Wright Mat *mats_assembled_full, *mats_assembled_pbd, mat_assembled_full_internal, mat_assembled_pbd_internal; 2258600ac3SJames Wright Vec X_loc, Y_loc_transpose; 2358600ac3SJames Wright CeedVector x_loc, y_loc, coo_values_full, coo_values_pbd; 2458600ac3SJames Wright CeedOperator op_mult, op_mult_transpose; 2558600ac3SJames Wright PetscLogDouble flops_mult, flops_mult_transpose; 2658600ac3SJames Wright }; 2758600ac3SJames Wright 2858600ac3SJames Wright // Context data 2940d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedContextCreate(DM dm_x, DM dm_y, Vec X_loc, Vec Y_loc_transpose, CeedOperator op_mult, 3058600ac3SJames Wright CeedOperator op_mult_transpose, PetscLogEvent log_event_mult, 31c63b910fSJames Wright PetscLogEvent log_event_mult_transpose, PetscLogEvent log_event_ceed_mult, 32c63b910fSJames Wright PetscLogEvent log_event_ceed_mult_transpose, MatCeedContext *ctx); 3340d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedContextReference(MatCeedContext ctx); 3440d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedContextReferenceCopy(MatCeedContext ctx, MatCeedContext *ctx_copy); 3540d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedContextDestroy(MatCeedContext ctx); 3658600ac3SJames Wright 3740d80af1SJames Wright // MatCEED 3840d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatGetDiagonal_Ceed(Mat A, Vec D); 3940d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatMult_Ceed(Mat A, Vec X, Vec Y); 4040d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatMultTranspose_Ceed(Mat A, Vec Y, Vec X); 4158600ac3SJames Wright 4258600ac3SJames Wright extern PetscClassId MATCEED_CLASSID; 4358600ac3SJames Wright extern PetscLogEvent MATCEED_MULT, MATCEED_MULT_TRANSPOSE; 44