LCOV - code coverage report
Current view: top level - include/reduced_basis - rb_assembly_expansion.h (source / functions) Hit Total Coverage
Test: libMesh/libmesh: #4229 (6a9aeb) with base 727f46 Lines: 0 1 0.0 %
Date: 2025-08-19 19:27:09 Functions: 0 2 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // rbOOmit: An implementation of the Certified Reduced Basis method.
       2             : // Copyright (C) 2009, 2010 David J. Knezevic
       3             : 
       4             : // This file is part of rbOOmit.
       5             : 
       6             : // rbOOmit is free software; you can redistribute it and/or
       7             : // modify it under the terms of the GNU Lesser General Public
       8             : // License as published by the Free Software Foundation; either
       9             : // version 2.1 of the License, or (at your option) any later version.
      10             : 
      11             : // rbOOmit is distributed in the hope that it will be useful,
      12             : // but WITHOUT ANY WARRANTY; without even the implied warranty of
      13             : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      14             : // Lesser General Public License for more details.
      15             : 
      16             : // You should have received a copy of the GNU Lesser General Public
      17             : // License along with this library; if not, write to the Free Software
      18             : // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
      19             : 
      20             : #ifndef LIBMESH_RB_ASSEMBLY_EXPANSION_H
      21             : #define LIBMESH_RB_ASSEMBLY_EXPANSION_H
      22             : 
      23             : // libMesh includes
      24             : #include "libmesh/reference_counted_object.h"
      25             : 
      26             : // C++ includes
      27             : #include <vector>
      28             : #include <memory>
      29             : 
      30             : namespace libMesh
      31             : {
      32             : 
      33             : // Forward declarations
      34             : class ElemAssembly;
      35             : class FEMContext;
      36             : 
      37             : /**
      38             :  * This class stores the set of ElemAssembly functor objects that define
      39             :  * the "parameter-independent expansion" of a PDE.
      40             :  *
      41             :  * \author David J. Knezevic
      42             :  * \date 2011
      43             :  */
      44             : class RBAssemblyExpansion : public ReferenceCountedObject<RBAssemblyExpansion>
      45             : {
      46             : public:
      47             : 
      48             :   /**
      49             :    * All special functions can be defaulted for this simple class.
      50             :    */
      51             :   RBAssemblyExpansion() = default;
      52             :   RBAssemblyExpansion (RBAssemblyExpansion &&) = default;
      53             :   RBAssemblyExpansion (const RBAssemblyExpansion &) = default;
      54             :   RBAssemblyExpansion & operator= (const RBAssemblyExpansion &) = default;
      55             :   RBAssemblyExpansion & operator= (RBAssemblyExpansion &&) = default;
      56           0 :   virtual ~RBAssemblyExpansion () = default;
      57             : 
      58             :   /**
      59             :    * Perform the specified A interior assembly.
      60             :    */
      61             :   void perform_A_interior_assembly(unsigned int q,
      62             :                                    FEMContext & context) const;
      63             : 
      64             :   /**
      65             :    * Perform the specified A boundary assembly.
      66             :    */
      67             :   void perform_A_boundary_assembly(unsigned int q,
      68             :                                    FEMContext & context) const;
      69             : 
      70             :   /**
      71             :    * Perform the specified F interior assembly.
      72             :    */
      73             :   void perform_F_interior_assembly(unsigned int q,
      74             :                                    FEMContext & context) const;
      75             : 
      76             :   /**
      77             :    * Perform the specified F boundary assembly.
      78             :    */
      79             :   void perform_F_boundary_assembly(unsigned int q,
      80             :                                    FEMContext & context) const;
      81             : 
      82             :   /**
      83             :    * Perform the specified output assembly.
      84             :    */
      85             :   void perform_output_interior_assembly(unsigned int output_index,
      86             :                                         unsigned int q_l,
      87             :                                         FEMContext & context) const;
      88             : 
      89             :   /**
      90             :    * Perform the specified output assembly.
      91             :    */
      92             :   void perform_output_boundary_assembly(unsigned int output_index,
      93             :                                         unsigned int q_l,
      94             :                                         FEMContext & context) const;
      95             : 
      96             :   /**
      97             :    * Get Q_a, the number of terms in the affine
      98             :    * expansion for the bilinear form.
      99             :    */
     100             :   unsigned int get_n_A_terms() const;
     101             : 
     102             :   /**
     103             :    * Get Q_f, the number of terms in the affine
     104             :    * expansion for the right-hand side.
     105             :    */
     106             :   unsigned int get_n_F_terms() const;
     107             : 
     108             :   /**
     109             :    * Get n_outputs, the number output functionals.
     110             :    */
     111             :   unsigned int get_n_outputs() const;
     112             : 
     113             :   /**
     114             :    * Get the number of affine terms associated with the specified output.
     115             :    */
     116             :   unsigned int get_n_output_terms(unsigned int output_index) const;
     117             : 
     118             :   /**
     119             :    * Attach ElemAssembly object for the left-hand side
     120             :    * (both interior and boundary assembly).
     121             :    */
     122             :   void attach_A_assembly(ElemAssembly * Aq_assembly);
     123             : 
     124             :   /**
     125             :    * Attach multiple ElemAssembly objects for the left-hand side
     126             :    * (both interior and boundary assembly).
     127             :    */
     128             :   void attach_multiple_A_assembly(std::vector<std::unique_ptr<ElemAssembly>> & Aq_assembly);
     129             : 
     130             :   /**
     131             :    * Attach ElemAssembly object for the right-hand side
     132             :    * (both interior and boundary assembly).
     133             :    */
     134             :   void attach_F_assembly(ElemAssembly * Fq_assembly);
     135             : 
     136             :   /**
     137             :    * Attach multiple ElemAssembly objects for the right-hand side
     138             :    * (both interior and boundary assembly).
     139             :    */
     140             :   void attach_multiple_F_assembly(std::vector<std::unique_ptr<ElemAssembly>> & Fq_assembly);
     141             : 
     142             :   /**
     143             :    * Attach ElemAssembly object for an output
     144             :    * (both interior and boundary assembly).
     145             :    * In this case we pass in vector arguments to allow for Q_l > 1.
     146             :    */
     147             :   virtual void attach_output_assembly(std::vector<std::unique_ptr<ElemAssembly>> & output_assembly);
     148             : 
     149             :   /**
     150             :    * Attach ElemAssembly object for an output
     151             :    * (both interior and boundary assembly).
     152             :    * In this case we pass in vector arguments to allow for Q_l > 1.
     153             :    */
     154             :   virtual void attach_output_assembly(std::vector<ElemAssembly *> output_assembly);
     155             : 
     156             :   /**
     157             :    * Attach ElemAssembly object for an output
     158             :    * (both interior and boundary assembly).
     159             :    * This function provides simpler syntax in the case that Q_l = 1; we
     160             :    * do not need to use a vector in this case.
     161             :    */
     162             :   virtual void attach_output_assembly(ElemAssembly * output_assembly);
     163             : 
     164             :   /**
     165             :    * Return a reference to the specified A_assembly object.
     166             :    */
     167             :   ElemAssembly & get_A_assembly(unsigned int q);
     168             : 
     169             :   /**
     170             :    * Return a reference to the specified F_assembly object.
     171             :    */
     172             :   ElemAssembly & get_F_assembly(unsigned int q);
     173             : 
     174             :   /**
     175             :    * Return a reference to the specified output assembly object.
     176             :    */
     177             :   ElemAssembly & get_output_assembly(unsigned int output_index, unsigned int q_l);
     178             : 
     179             : private:
     180             : 
     181             :   /**
     182             :    * Vectors storing the function pointers to the assembly
     183             :    * routines for the affine operators, both interior and boundary
     184             :    * assembly.
     185             :    */
     186             :   std::vector<ElemAssembly *> _A_assembly_vector;
     187             : 
     188             :   /**
     189             :    * Vector storing the function pointers to the assembly
     190             :    * routines for the rhs affine vectors.
     191             :    */
     192             :   std::vector<ElemAssembly *> _F_assembly_vector;
     193             : 
     194             :   /**
     195             :    * Vector storing the function pointers to the assembly
     196             :    * routines for the outputs. Element interior part.
     197             :    */
     198             :   std::vector<std::vector<ElemAssembly *>> _output_assembly_vector;
     199             : };
     200             : 
     201             : }
     202             : 
     203             : #endif // LIBMESH_RB_ASSEMBLY_EXPANSION_H

Generated by: LCOV version 1.14