12#ifndef MFEM_PDEREFMAT_OP
13#define MFEM_PDEREFMAT_OP
29struct ParDerefineMatrixOp :
public Operator
31 ParFiniteElementSpace *fespace;
33 Array<int> block_offsets;
35 Array<int> block_row_idcs_offsets;
37 Array<int> block_col_idcs_offsets;
40 Array<int> off_diag_block_offsets;
42 Array<int> block_off_diag_row_idcs_offsets;
43 Array<int> block_off_diag_col_offsets;
44 Array<int> block_off_diag_widths;
53 Array<int> pack_col_idcs;
58 Array<int> row_off_diag_idcs;
70 mutable Vector xghost_send;
73 mutable Vector xghost_recv;
75 Array<int> recv_segment_idcs;
77 Array<int> recv_segments;
79 Array<int> recv_ranks;
81 Array<int> send_segment_idcs;
83 Array<int> send_segments;
85 Array<int> send_ranks;
87 Array<int> send_permutations;
89 mutable std::vector<MPI_Request> requests;
91 using MultKernelType = void (*)(
const ParDerefineMatrixOp &,
const Vector &,
94 MFEM_REGISTER_KERNELS(MultKernel, MultKernelType, (Ordering::Type,
bool));
101 void Mult(
const Vector &x, Vector &y)
const;
103 ParDerefineMatrixOp(ParFiniteElementSpace &fespace_,
int old_ndofs,
104 const Table *old_elem_dof,
const Table *old_elem_fos);
void Mult(const Table &A, const Table &B, Table &C)
C = A * B (as boolean matrices)
SchrodingerBaseKernels< ParMesh, ParFiniteElementSpace, ParComplexGridFunction, ParGridFunction, ParBilinearForm, ParMixedBilinearForm, ParLinearForm > Kernels