libMesh
eim_classes.h
Go to the documentation of this file.
1 #ifndef EIM_CLASSES_H
2 #define EIM_CLASSES_H
3 
4 // libMesh includes
5 #include "libmesh/rb_eim_construction.h"
6 #include "libmesh/rb_eim_evaluation.h"
7 #include "libmesh/auto_ptr.h" // libmesh_make_unique
8 
9 // Example includes
10 #include "assembly.h"
11 
12 #ifndef LIBMESH_HAVE_CXX14_MAKE_UNIQUE
14 #endif
15 
16 // A simple subclass of RBEIMEvaluation. Overload
17 // evaluate_parametrized_function to define the
18 // function that we "empirically" interpolate.
19 class SimpleEIMEvaluation : public RBEIMEvaluation
20 {
21 public:
22 
23  SimpleEIMEvaluation(const libMesh::Parallel::Communicator & comm)
24  : RBEIMEvaluation(comm)
25  {
26  attach_parametrized_function(&g_x);
27  attach_parametrized_function(&g_y);
28  attach_parametrized_function(&g_z);
29  }
30 
34  virtual std::unique_ptr<RBTheta> build_eim_theta(unsigned int index)
35  {
36  return libmesh_make_unique<ThetaEIM>(*this, index);
37  }
38 
45 };
46 
47 // A simple subclass of RBEIMConstruction.
48 class SimpleEIMConstruction : public RBEIMConstruction
49 {
50 public:
51 
55  SimpleEIMConstruction (EquationSystems & es,
56  const std::string & name_in,
57  const unsigned int number_in)
58  : Parent(es, name_in, number_in)
59  {
60  }
61 
65  typedef RBEIMConstruction Parent;
66 
70  virtual std::unique_ptr<ElemAssembly> build_eim_assembly(unsigned int index)
71  {
72  return libmesh_make_unique<AssemblyEIM>(*this, index);
73  }
74 
78  virtual void init_data()
79  {
80  Parent::init_data();
81 
82  set_inner_product_assembly(eim_ip);
83  }
84 
88  virtual void init_implicit_system()
89  {
90  this->add_variable ("L2_proj_var", libMesh::FIRST);
91  }
92 
96  virtual void init_explicit_system()
97  {
98  Gx_var = get_explicit_system().add_variable ("x_comp_of_G", libMesh::FIRST);
99  Gy_var = get_explicit_system().add_variable ("y_comp_of_G", libMesh::FIRST);
100  Gz_var = get_explicit_system().add_variable ("z_comp_of_G", libMesh::FIRST);
101  }
102 
106  unsigned int Gx_var;
107  unsigned int Gy_var;
108  unsigned int Gz_var;
109 
114 };
115 
116 #endif
SimpleEIMConstruction::Gx_var
unsigned int Gx_var
Variable numbers.
Definition: eim_classes.h:106
Gx
Definition: assembly.h:52
SimpleEIMConstruction
Definition: eim_classes.h:40
SimpleEIMEvaluation::g_y
Gy g_y
Definition: eim_classes.h:43
SimpleEIMEvaluation::g_z
Gz g_z
Definition: eim_classes.h:44
SimpleEIMEvaluation
Definition: eim_classes.h:23
SimpleEIMConstruction::build_eim_assembly
virtual std::unique_ptr< ElemAssembly > build_eim_assembly(unsigned int index)
Provide an implementation of build_eim_assembly.
Definition: eim_classes.h:70
Gy
Definition: assembly.h:64
SimpleEIMConstruction::SimpleEIMConstruction
SimpleEIMConstruction(EquationSystems &es, const std::string &name_in, const unsigned int number_in)
Constructor.
Definition: eim_classes.h:55
SimpleEIMConstruction::Gz_var
unsigned int Gz_var
Definition: eim_classes.h:108
SimpleEIMConstruction::Gy_var
unsigned int Gy_var
Definition: eim_classes.h:107
Gz
Definition: assembly.h:76
SimpleEIMConstruction::eim_ip
Ex6EIMInnerProduct eim_ip
Inner product assembly object.
Definition: eim_classes.h:113
SimpleEIMEvaluation::build_eim_theta
virtual std::unique_ptr< RBTheta > build_eim_theta(unsigned int index)
Build a ThetaEIM rather than an RBEIMTheta.
Definition: eim_classes.h:34
SimpleEIMEvaluation::g_x
Gx g_x
Parametrized functions that we approximate with EIM.
Definition: eim_classes.h:42
Ex6EIMInnerProduct
Definition: assembly.h:399
libMesh::make_unique
std::unique_ptr< T > make_unique(Args &&... args)
Definition: auto_ptr.h:45
SimpleEIMEvaluation::SimpleEIMEvaluation
SimpleEIMEvaluation(const libMesh::Parallel::Communicator &comm)
Definition: eim_classes.h:23
SimpleEIMConstruction::Parent
RBEIMConstruction Parent
The type of the parent.
Definition: eim_classes.h:57
SimpleEIMConstruction::init_implicit_system
virtual void init_implicit_system()
Initialize the implicit system that is used to perform L2 projections.
Definition: eim_classes.h:88
SimpleEIMConstruction::init_explicit_system
virtual void init_explicit_system()
Initialize the explicit system that is used to store the basis functions.
Definition: eim_classes.h:96
libMesh::FIRST
Definition: enum_order.h:42
SimpleEIMConstruction::init_data
virtual void init_data()
Initialize data structures.
Definition: eim_classes.h:78