LCOV - code coverage report
Current view: top level - include/numerics - petsc_matrix_shell_matrix.h (source / functions) Hit Total Coverage
Test: libMesh/libmesh: #4229 (6a9aeb) with base 727f46 Lines: 4 7 57.1 %
Date: 2025-08-19 19:27:09 Functions: 1 3 33.3 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // The libMesh Finite Element Library.
       2             : // Copyright (C) 2002-2025 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
       3             : 
       4             : // This library is free software; you can redistribute it and/or
       5             : // modify it under the terms of the GNU Lesser General Public
       6             : // License as published by the Free Software Foundation; either
       7             : // version 2.1 of the License, or (at your option) any later version.
       8             : 
       9             : // This library is distributed in the hope that it will be useful,
      10             : // but WITHOUT ANY WARRANTY; without even the implied warranty of
      11             : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12             : // Lesser General Public License for more details.
      13             : 
      14             : // You should have received a copy of the GNU Lesser General Public
      15             : // License along with this library; if not, write to the Free Software
      16             : // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
      17             : 
      18             : #ifndef LIBMESH_PETSC_MATRIX_SHELL_MATRIX_H
      19             : #define LIBMESH_PETSC_MATRIX_SHELL_MATRIX_H
      20             : 
      21             : #include "libmesh/libmesh_config.h"
      22             : 
      23             : #ifdef LIBMESH_HAVE_PETSC
      24             : 
      25             : #include "libmesh/petsc_matrix_base.h"
      26             : #include "libmesh/petsc_shell_matrix.h"
      27             : 
      28             : namespace libMesh
      29             : {
      30             : 
      31             : /**
      32             :  * This class allows to use a PETSc shell matrix as a PetscMatrix
      33             :  *
      34             :  * \author Alexander Lindsay
      35             :  * \date 2024
      36             :  */
      37             : template <typename T>
      38         340 : class PetscMatrixShellMatrix : public PetscMatrixBase<T>
      39             : {
      40             : public:
      41             :   explicit PetscMatrixShellMatrix(const Parallel::Communicator & comm_in);
      42             : 
      43             :   virtual void init(const numeric_index_type m,
      44             :                     const numeric_index_type n,
      45             :                     const numeric_index_type m_l,
      46             :                     const numeric_index_type n_l,
      47             :                     const numeric_index_type = 30,
      48             :                     const numeric_index_type = 10,
      49             :                     const numeric_index_type blocksize = 1) override;
      50             : 
      51             :   /**
      52             :    * Initialize this matrix using the sparsity structure computed by \p dof_map.
      53             :    * @param type The serial/parallel/ghosted type of the matrix
      54             :    */
      55             :   virtual void init(ParallelType = PARALLEL) override;
      56             : 
      57             :   virtual SparseMatrix<T> & operator=(const SparseMatrix<T> &) override;
      58             : 
      59           0 :   virtual bool require_sparsity_pattern() const override { return false; }
      60             : 
      61             : private:
      62             :   // Make this private because we mark as initialized after we've done our initialization, and we
      63             :   // don't want derived classes to mistakenly register their data as initialized (or not)
      64             :   using PetscMatrixBase<T>::_is_initialized;
      65             : 
      66             :   /// Whether to omit constrained degrees of freedom
      67             :   const bool _omit_constrained_dofs;
      68             : 
      69             :   friend void init_shell_mat<PetscMatrixShellMatrix<T>>(PetscMatrixShellMatrix<T> & obj);
      70             :   friend void init_shell_mat<PetscMatrixShellMatrix<T>>(PetscMatrixShellMatrix<T> & obj,
      71             :                                                         const numeric_index_type m,
      72             :                                                         const numeric_index_type n,
      73             :                                                         const numeric_index_type m_l,
      74             :                                                         const numeric_index_type n_l,
      75             :                                                         const numeric_index_type blocksize_in);
      76             : };
      77             : 
      78             : //-----------------------------------------------------------------------
      79             : // PetscMatrixShellMatrix inline members
      80             : template <typename T>
      81         350 : PetscMatrixShellMatrix<T>::PetscMatrixShellMatrix(const Parallel::Communicator & comm_in)
      82         350 :   : PetscMatrixBase<T>(comm_in), _omit_constrained_dofs(false)
      83             : {
      84          10 : }
      85             : 
      86             : template <typename T>
      87             : SparseMatrix<T> &
      88           0 : PetscMatrixShellMatrix<T>::operator=(const SparseMatrix<T> &)
      89             : {
      90           0 :   libmesh_error();
      91             : }
      92             : 
      93             : } // namespace libMesh
      94             : 
      95             : #endif // LIBMESH_HAVE_PETSC
      96             : #endif // LIBMESH_SPARSE_SHELL_MATRIX_H

Generated by: LCOV version 1.14