xref: /honee/include/mat-ceed-impl.h (revision 9e67f91b931c0c8764a90290a11998687a5b5d68)
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