xref: /honee/include/mat-ceed-impl.h (revision c63b910fa7a793fc9e5914451e74158ea05ce0bb)
1dc936754SJeremy L Thompson // Copyright (c) 2017-2024, Lawrence Livermore National Security, LLC and other CEED contributors.
218fb7758SJeremy L Thompson // All Rights Reserved. See the top-level LICENSE and NOTICE files for details.
318fb7758SJeremy L Thompson //
418fb7758SJeremy L Thompson // SPDX-License-Identifier: BSD-2-Clause
518fb7758SJeremy L Thompson //
618fb7758SJeremy L Thompson // This file is part of CEED:  http://github.com/ceed
718fb7758SJeremy L Thompson #pragma once
858600ac3SJames Wright 
958600ac3SJames Wright #include <ceed.h>
1040d80af1SJames Wright #include <petsc-ceed.h>
1158600ac3SJames Wright #include <petscdm.h>
1258600ac3SJames Wright #include <petscmat.h>
13e90c2ceeSJames Wright #include <petsc/private/petscimpl.h>
1458600ac3SJames Wright 
1558600ac3SJames Wright // MatCeed context for applying composite CeedOperator on a DM
1658600ac3SJames Wright typedef struct MatCeedContext_private *MatCeedContext;
1758600ac3SJames Wright struct MatCeedContext_private {
1858600ac3SJames Wright   Ceed           ceed;
1940d80af1SJames Wright   char          *name, *coo_mat_type;
2058600ac3SJames Wright   PetscMemType   mem_type;
2158600ac3SJames Wright   PetscInt       ref_count, num_mats_assembled_full, num_mats_assembled_pbd;
2258600ac3SJames Wright   PetscBool      is_destroyed, is_ceed_pbd_valid, is_ceed_vpbd_valid;
23*c63b910fSJames Wright   PetscLogEvent  log_event_mult, log_event_mult_transpose, log_event_ceed_mult, log_event_ceed_mult_transpose;
2458600ac3SJames Wright   DM             dm_x, dm_y;
2558600ac3SJames Wright   Mat           *mats_assembled_full, *mats_assembled_pbd, mat_assembled_full_internal, mat_assembled_pbd_internal;
2658600ac3SJames Wright   Vec            X_loc, Y_loc_transpose;
2758600ac3SJames Wright   CeedVector     x_loc, y_loc, coo_values_full, coo_values_pbd;
2858600ac3SJames Wright   CeedOperator   op_mult, op_mult_transpose;
2958600ac3SJames Wright   PetscLogDouble flops_mult, flops_mult_transpose;
3058600ac3SJames Wright };
3158600ac3SJames Wright 
3258600ac3SJames Wright // Context data
3340d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedContextCreate(DM dm_x, DM dm_y, Vec X_loc, Vec Y_loc_transpose, CeedOperator op_mult,
3458600ac3SJames Wright                                                       CeedOperator op_mult_transpose, PetscLogEvent log_event_mult,
35*c63b910fSJames Wright                                                       PetscLogEvent log_event_mult_transpose, PetscLogEvent log_event_ceed_mult,
36*c63b910fSJames Wright                                                       PetscLogEvent log_event_ceed_mult_transpose, MatCeedContext *ctx);
3740d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedContextReference(MatCeedContext ctx);
3840d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedContextReferenceCopy(MatCeedContext ctx, MatCeedContext *ctx_copy);
3940d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatCeedContextDestroy(MatCeedContext ctx);
4058600ac3SJames Wright 
4140d80af1SJames Wright // MatCEED
4240d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatGetDiagonal_Ceed(Mat A, Vec D);
4340d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatMult_Ceed(Mat A, Vec X, Vec Y);
4440d80af1SJames Wright PETSC_CEED_EXTERN PetscErrorCode MatMultTranspose_Ceed(Mat A, Vec Y, Vec X);
4558600ac3SJames Wright 
4658600ac3SJames Wright extern PetscClassId  MATCEED_CLASSID;
4758600ac3SJames Wright extern PetscLogEvent MATCEED_MULT, MATCEED_MULT_TRANSPOSE;
48