xref: /libCEED/examples/fluids/include/mat-ceed-impl.h (revision 43327b86957a0a83ddc40b554a65a2ea63a53aee)
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