libMesh
Public Member Functions | Static Public Member Functions | Protected Types | Protected Member Functions | Static Protected Attributes | Private Member Functions | Private Attributes | List of all members
AssemblyEIM Struct Reference

#include <assembly.h>

Inheritance diagram for AssemblyEIM:
[legend]

Public Member Functions

 AssemblyEIM (RBEIMConstruction &rb_eim_con_in, unsigned int basis_function_index_in)
 
virtual void interior_assembly (FEMContext &c)
 Perform the element interior assembly. More...
 
virtual void evaluate_basis_function (unsigned int var, const Elem &element, const std::vector< Point > &points, std::vector< Number > &values)
 Evaluate variable var_number of this object's EIM basis function at the points points, where the points are in reference coordinates. More...
 
RBEIMConstruction & get_rb_eim_construction ()
 Get a reference to the RBEIMConstruction object. More...
 
NumericVector< Number > & get_ghosted_basis_function ()
 Get a reference to the ghosted_basis_function. More...
 
FEBase & get_fe ()
 Retrieve the FE object. More...
 
virtual void boundary_assembly (FEMContext &)
 Perform the element boundary assembly. More...
 
virtual void get_nodal_values (std::vector< dof_id_type > &, DenseMatrix< Number > &, DenseVector< Number > &, const System &, const Node &)
 Get values to add to the matrix or rhs vector based on node. More...
 

Static Public Member Functions

static std::string get_info ()
 Gets a string containing the reference information. More...
 
static void print_info (std::ostream &out=libMesh::out)
 Prints the reference information, by default to libMesh::out. More...
 
static unsigned int n_objects ()
 Prints the number of outstanding (created, but not yet destroyed) objects. More...
 
static void enable_print_counter_info ()
 Methods to enable/disable the reference counter output from print_info() More...
 
static void disable_print_counter_info ()
 

Protected Types

typedef std::map< std::string, std::pair< unsigned int, unsigned int > > Counts
 Data structure to log the information. More...
 

Protected Member Functions

void increment_constructor_count (const std::string &name)
 Increments the construction counter. More...
 
void increment_destructor_count (const std::string &name)
 Increments the destruction counter. More...
 

Static Protected Attributes

static Counts _counts
 Actually holds the data. More...
 
static Threads::atomic< unsigned int_n_objects
 The number of objects. More...
 
static Threads::spin_mutex _mutex
 Mutual exclusion object to enable thread-safe reference counting. More...
 
static bool _enable_print_counter = true
 Flag to control whether reference count information is printed when print_info is called. More...
 

Private Member Functions

void initialize_fe ()
 Initialize the FE object. More...
 

Private Attributes

RBEIMConstruction & _rb_eim_con
 The RBEIMConstruction object that this RBEIMAssembly is based on. More...
 
unsigned int _basis_function_index
 The EIM basis function index (from rb_eim_eval) for this assembly object. More...
 
std::unique_ptr< NumericVector< Number > > _ghosted_basis_function
 The basis function that we sample to evaluate the empirical interpolation approximation. More...
 
std::unique_ptr< FEBase > _fe
 We store an FE object so we can easily reinit in evaluate_basis_function. More...
 

Detailed Description

Definition at line 245 of file assembly.h.

Member Typedef Documentation

◆ Counts

typedef std::map<std::string, std::pair<unsigned int, unsigned int> > libMesh::ReferenceCounter::Counts
protectedinherited

Data structure to log the information.

The log is identified by the class name.

Definition at line 117 of file reference_counter.h.

Constructor & Destructor Documentation

◆ AssemblyEIM()

AssemblyEIM::AssemblyEIM ( RBEIMConstruction rb_eim_con_in,
unsigned int  basis_function_index_in 
)
inline

Definition at line 247 of file assembly.h.

248  :
249  RBEIMAssembly(rb_eim_con_in,
250  basis_function_index_in)
251  {}

Member Function Documentation

◆ boundary_assembly()

virtual void libMesh::ElemAssembly::boundary_assembly ( FEMContext )
inlinevirtualinherited

Perform the element boundary assembly.

Reimplemented in Output0, F0, A3, AssemblyA2, A2, AssemblyF2, AssemblyF1, AssemblyA1, AssemblyF0, and AssemblyA0.

Definition at line 62 of file elem_assembly.h.

62 { }

Referenced by libMesh::RBConstruction::add_scaled_matrix_and_vector().

◆ disable_print_counter_info()

void libMesh::ReferenceCounter::disable_print_counter_info ( )
staticinherited

Definition at line 106 of file reference_counter.C.

107 {
108  _enable_print_counter = false;
109  return;
110 }

References libMesh::ReferenceCounter::_enable_print_counter.

Referenced by libMesh::LibMeshInit::LibMeshInit().

◆ enable_print_counter_info()

void libMesh::ReferenceCounter::enable_print_counter_info ( )
staticinherited

Methods to enable/disable the reference counter output from print_info()

Definition at line 100 of file reference_counter.C.

101 {
102  _enable_print_counter = true;
103  return;
104 }

References libMesh::ReferenceCounter::_enable_print_counter.

◆ evaluate_basis_function()

void libMesh::RBEIMAssembly::evaluate_basis_function ( unsigned int  var,
const Elem element,
const std::vector< Point > &  points,
std::vector< Number > &  values 
)
virtualinherited

Evaluate variable var_number of this object's EIM basis function at the points points, where the points are in reference coordinates.

Fill values with the basis function values.

Definition at line 65 of file rb_eim_assembly.C.

69 {
70  LOG_SCOPE("evaluate_basis_function", "RBEIMAssembly");
71 
72  const std::vector<std::vector<Real>> & phi = get_fe().get_phi();
73 
74  // The FE object caches data, hence we recompute as little as
75  // possible on the call to reinit.
76  get_fe().reinit (&element, &points);
77 
78  std::vector<dof_id_type> dof_indices_var;
79 
81  dof_map.dof_indices (&element, dof_indices_var, var);
82 
83  libmesh_assert(dof_indices_var.size() == phi.size());
84 
85  unsigned int n_points = points.size();
86  values.resize(n_points);
87 
88  for (unsigned int pt_index=0; pt_index<n_points; pt_index++)
89  {
90  values[pt_index] = 0.;
91  for (auto i : index_range(dof_indices_var))
92  values[pt_index] += (*_ghosted_basis_function)(dof_indices_var[i]) * phi[i][pt_index];
93  }
94 }

References libMesh::DofMap::dof_indices(), libMesh::System::get_dof_map(), libMesh::RBEIMConstruction::get_explicit_system(), libMesh::RBEIMAssembly::get_fe(), libMesh::FEGenericBase< OutputType >::get_phi(), libMesh::RBEIMAssembly::get_rb_eim_construction(), libMesh::index_range(), libMesh::libmesh_assert(), and libMesh::FEAbstract::reinit().

Referenced by EIM_F::interior_assembly(), and interior_assembly().

◆ get_fe()

FEBase & libMesh::RBEIMAssembly::get_fe ( )
inherited

Retrieve the FE object.

Definition at line 106 of file rb_eim_assembly.C.

107 {
108  return *_fe;
109 }

References libMesh::RBEIMAssembly::_fe.

Referenced by libMesh::RBEIMAssembly::evaluate_basis_function().

◆ get_ghosted_basis_function()

NumericVector< Number > & libMesh::RBEIMAssembly::get_ghosted_basis_function ( )
inherited

Get a reference to the ghosted_basis_function.

Definition at line 101 of file rb_eim_assembly.C.

102 {
103  return *_ghosted_basis_function;
104 }

References libMesh::RBEIMAssembly::_ghosted_basis_function.

◆ get_info()

std::string libMesh::ReferenceCounter::get_info ( )
staticinherited

Gets a string containing the reference information.

Definition at line 47 of file reference_counter.C.

48 {
49 #if defined(LIBMESH_ENABLE_REFERENCE_COUNTING) && defined(DEBUG)
50 
51  std::ostringstream oss;
52 
53  oss << '\n'
54  << " ---------------------------------------------------------------------------- \n"
55  << "| Reference count information |\n"
56  << " ---------------------------------------------------------------------------- \n";
57 
58  for (const auto & pr : _counts)
59  {
60  const std::string name(pr.first);
61  const unsigned int creations = pr.second.first;
62  const unsigned int destructions = pr.second.second;
63 
64  oss << "| " << name << " reference count information:\n"
65  << "| Creations: " << creations << '\n'
66  << "| Destructions: " << destructions << '\n';
67  }
68 
69  oss << " ---------------------------------------------------------------------------- \n";
70 
71  return oss.str();
72 
73 #else
74 
75  return "";
76 
77 #endif
78 }

References libMesh::ReferenceCounter::_counts, and libMesh::Quality::name().

Referenced by libMesh::ReferenceCounter::print_info().

◆ get_nodal_values()

virtual void libMesh::ElemAssembly::get_nodal_values ( std::vector< dof_id_type > &  ,
DenseMatrix< Number > &  ,
DenseVector< Number > &  ,
const System ,
const Node  
)
inlinevirtualinherited

Get values to add to the matrix or rhs vector based on node.

This allows one to impose point loads or springs, for example.

Definition at line 69 of file elem_assembly.h.

74  {
75  // Do nothing by default
76  }

Referenced by libMesh::RBConstruction::add_scaled_matrix_and_vector().

◆ get_rb_eim_construction()

RBEIMConstruction & libMesh::RBEIMAssembly::get_rb_eim_construction ( )
inherited

Get a reference to the RBEIMConstruction object.

Definition at line 96 of file rb_eim_assembly.C.

97 {
98  return _rb_eim_con;
99 }

References libMesh::RBEIMAssembly::_rb_eim_con.

Referenced by libMesh::RBEIMAssembly::evaluate_basis_function(), and libMesh::RBEIMAssembly::initialize_fe().

◆ increment_constructor_count()

void libMesh::ReferenceCounter::increment_constructor_count ( const std::string &  name)
inlineprotectedinherited

Increments the construction counter.

Should be called in the constructor of any derived class that will be reference counted.

Definition at line 181 of file reference_counter.h.

182 {
183  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
184  std::pair<unsigned int, unsigned int> & p = _counts[name];
185 
186  p.first++;
187 }

References libMesh::ReferenceCounter::_counts, libMesh::Quality::name(), and libMesh::Threads::spin_mtx.

Referenced by libMesh::ReferenceCountedObject< RBParametrized >::ReferenceCountedObject().

◆ increment_destructor_count()

void libMesh::ReferenceCounter::increment_destructor_count ( const std::string &  name)
inlineprotectedinherited

Increments the destruction counter.

Should be called in the destructor of any derived class that will be reference counted.

Definition at line 194 of file reference_counter.h.

195 {
196  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
197  std::pair<unsigned int, unsigned int> & p = _counts[name];
198 
199  p.second++;
200 }

References libMesh::ReferenceCounter::_counts, libMesh::Quality::name(), and libMesh::Threads::spin_mtx.

Referenced by libMesh::ReferenceCountedObject< RBParametrized >::~ReferenceCountedObject().

◆ initialize_fe()

void libMesh::RBEIMAssembly::initialize_fe ( )
privateinherited

Initialize the FE object.

Definition at line 111 of file rb_eim_assembly.C.

112 {
114 
115  const unsigned int dim =
117 
118  FEType fe_type = dof_map.variable_type(0);
119  _fe = FEBase::build(dim, fe_type);
120 
121  // Pre-request the shape function for efficieny's sake
122  _fe->get_phi();
123 }

References libMesh::RBEIMAssembly::_fe, libMesh::FEGenericBase< OutputType >::build(), dim, libMesh::System::get_dof_map(), libMesh::RBEIMConstruction::get_explicit_system(), libMesh::System::get_mesh(), libMesh::RBEIMAssembly::get_rb_eim_construction(), libMesh::MeshBase::mesh_dimension(), and libMesh::DofMap::variable_type().

Referenced by libMesh::RBEIMAssembly::RBEIMAssembly().

◆ interior_assembly()

virtual void AssemblyEIM::interior_assembly ( FEMContext )
inlinevirtual

Perform the element interior assembly.

Reimplemented from libMesh::ElemAssembly.

Definition at line 253 of file assembly.h.

254  {
255  // PDE variable numbers
256  const unsigned int u_var = 0;
257 
258  // EIM variable numbers
259  const unsigned int Gx_var = 0;
260  const unsigned int Gy_var = 1;
261  const unsigned int Gz_var = 2;
262 
263  FEBase * elem_fe = nullptr;
264  c.get_element_fe(u_var, elem_fe);
265 
266  const std::vector<Real> & JxW = elem_fe->get_JxW();
267 
268  const std::vector<std::vector<RealGradient>> & dphi = elem_fe->get_dphi();
269 
270  // The number of local degrees of freedom in each variable
271  const unsigned int n_u_dofs = c.get_dof_indices(u_var).size();
272 
273  std::vector<Number> eim_values_Gx;
275  c.get_elem(),
276  c.get_element_qrule().get_points(),
277  eim_values_Gx);
278 
279  std::vector<Number> eim_values_Gy;
281  c.get_elem(),
282  c.get_element_qrule().get_points(),
283  eim_values_Gy);
284 
285  std::vector<Number> eim_values_Gz;
287  c.get_elem(),
288  c.get_element_qrule().get_points(),
289  eim_values_Gz);
290 
291  for (unsigned int qp=0; qp != c.get_element_qrule().n_points(); qp++)
292  for (unsigned int i=0; i != n_u_dofs; i++)
293  for (unsigned int j=0; j != n_u_dofs; j++)
294  c.get_elem_jacobian()(i,j) += JxW[qp] * (eim_values_Gx[qp]*dphi[i][qp](0)*dphi[j][qp](0) +
295  eim_values_Gy[qp]*dphi[i][qp](1)*dphi[j][qp](1) +
296  eim_values_Gz[qp]*dphi[i][qp](2)*dphi[j][qp](2));
297  }

References libMesh::RBEIMAssembly::evaluate_basis_function(), libMesh::DiffContext::get_dof_indices(), libMesh::FEMContext::get_elem(), libMesh::DiffContext::get_elem_jacobian(), libMesh::FEMContext::get_element_fe(), libMesh::FEMContext::get_element_qrule(), libMesh::QBase::get_points(), and libMesh::QBase::n_points().

◆ n_objects()

static unsigned int libMesh::ReferenceCounter::n_objects ( )
inlinestaticinherited

Prints the number of outstanding (created, but not yet destroyed) objects.

Definition at line 83 of file reference_counter.h.

84  { return _n_objects; }

References libMesh::ReferenceCounter::_n_objects.

◆ print_info()

void libMesh::ReferenceCounter::print_info ( std::ostream &  out = libMesh::out)
staticinherited

Prints the reference information, by default to libMesh::out.

Definition at line 87 of file reference_counter.C.

88 {
90  out_stream << ReferenceCounter::get_info();
91 }

References libMesh::ReferenceCounter::_enable_print_counter, and libMesh::ReferenceCounter::get_info().

Member Data Documentation

◆ _basis_function_index

unsigned int libMesh::RBEIMAssembly::_basis_function_index
privateinherited

The EIM basis function index (from rb_eim_eval) for this assembly object.

Definition at line 104 of file rb_eim_assembly.h.

Referenced by libMesh::RBEIMAssembly::RBEIMAssembly().

◆ _counts

ReferenceCounter::Counts libMesh::ReferenceCounter::_counts
staticprotectedinherited

◆ _enable_print_counter

bool libMesh::ReferenceCounter::_enable_print_counter = true
staticprotectedinherited

Flag to control whether reference count information is printed when print_info is called.

Definition at line 141 of file reference_counter.h.

Referenced by libMesh::ReferenceCounter::disable_print_counter_info(), libMesh::ReferenceCounter::enable_print_counter_info(), and libMesh::ReferenceCounter::print_info().

◆ _fe

std::unique_ptr<FEBase> libMesh::RBEIMAssembly::_fe
privateinherited

We store an FE object so we can easily reinit in evaluate_basis_function.

Definition at line 116 of file rb_eim_assembly.h.

Referenced by libMesh::RBEIMAssembly::get_fe(), and libMesh::RBEIMAssembly::initialize_fe().

◆ _ghosted_basis_function

std::unique_ptr<NumericVector<Number> > libMesh::RBEIMAssembly::_ghosted_basis_function
privateinherited

The basis function that we sample to evaluate the empirical interpolation approximation.

This will be a GHOSTED vector to facilitate interpolation in the case of multiple processors.

Definition at line 111 of file rb_eim_assembly.h.

Referenced by libMesh::RBEIMAssembly::get_ghosted_basis_function(), and libMesh::RBEIMAssembly::RBEIMAssembly().

◆ _mutex

Threads::spin_mutex libMesh::ReferenceCounter::_mutex
staticprotectedinherited

Mutual exclusion object to enable thread-safe reference counting.

Definition at line 135 of file reference_counter.h.

◆ _n_objects

Threads::atomic< unsigned int > libMesh::ReferenceCounter::_n_objects
staticprotectedinherited

The number of objects.

Print the reference count information when the number returns to 0.

Definition at line 130 of file reference_counter.h.

Referenced by libMesh::ReferenceCounter::n_objects(), libMesh::ReferenceCounter::ReferenceCounter(), and libMesh::ReferenceCounter::~ReferenceCounter().

◆ _rb_eim_con

RBEIMConstruction& libMesh::RBEIMAssembly::_rb_eim_con
privateinherited

The RBEIMConstruction object that this RBEIMAssembly is based on.

Definition at line 99 of file rb_eim_assembly.h.

Referenced by libMesh::RBEIMAssembly::get_rb_eim_construction(), and libMesh::RBEIMAssembly::RBEIMAssembly().


The documentation for this struct was generated from the following file:
libMesh::RBEIMAssembly::get_fe
FEBase & get_fe()
Retrieve the FE object.
Definition: rb_eim_assembly.C:106
libMesh::DofMap::dof_indices
void dof_indices(const Elem *const elem, std::vector< dof_id_type > &di) const
Fills the vector di with the global degree of freedom indices for the element.
Definition: dof_map.C:1967
libMesh::RBEIMAssembly::_rb_eim_con
RBEIMConstruction & _rb_eim_con
The RBEIMConstruction object that this RBEIMAssembly is based on.
Definition: rb_eim_assembly.h:99
libMesh::index_range
IntRange< std::size_t > index_range(const std::vector< T > &vec)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:106
libMesh::ReferenceCounter::_counts
static Counts _counts
Actually holds the data.
Definition: reference_counter.h:122
libMesh::ReferenceCounter::_n_objects
static Threads::atomic< unsigned int > _n_objects
The number of objects.
Definition: reference_counter.h:130
libMesh::MeshBase::mesh_dimension
unsigned int mesh_dimension() const
Definition: mesh_base.C:135
libMesh::ReferenceCounter::get_info
static std::string get_info()
Gets a string containing the reference information.
Definition: reference_counter.C:47
dim
unsigned int dim
Definition: adaptivity_ex3.C:113
libMesh::libmesh_assert
libmesh_assert(ctx)
libMesh::RBEIMAssembly::_ghosted_basis_function
std::unique_ptr< NumericVector< Number > > _ghosted_basis_function
The basis function that we sample to evaluate the empirical interpolation approximation.
Definition: rb_eim_assembly.h:111
libMesh::FEBase
FEGenericBase< Real > FEBase
Definition: exact_error_estimator.h:39
libMesh::RBEIMAssembly::RBEIMAssembly
RBEIMAssembly(RBEIMConstruction &rb_eim_con_in, unsigned int basis_function_index_in)
Constructor.
Definition: rb_eim_assembly.C:35
libMesh::Threads::spin_mtx
spin_mutex spin_mtx
A convenient spin mutex object which can be used for obtaining locks.
Definition: threads.C:29
libMesh::System::get_mesh
const MeshBase & get_mesh() const
Definition: system.h:2083
libMesh::FEGenericBase::build
static std::unique_ptr< FEGenericBase > build(const unsigned int dim, const FEType &type)
Builds a specific finite element type.
libMesh::RBEIMAssembly::evaluate_basis_function
virtual void evaluate_basis_function(unsigned int var, const Elem &element, const std::vector< Point > &points, std::vector< Number > &values)
Evaluate variable var_number of this object's EIM basis function at the points points,...
Definition: rb_eim_assembly.C:65
libMesh::RBEIMAssembly::_fe
std::unique_ptr< FEBase > _fe
We store an FE object so we can easily reinit in evaluate_basis_function.
Definition: rb_eim_assembly.h:116
libMesh::RBEIMConstruction::get_explicit_system
ExplicitSystem & get_explicit_system()
Get the ExplicitSystem associated with this system.
Definition: rb_eim_construction.C:267
libMesh::System::get_dof_map
const DofMap & get_dof_map() const
Definition: system.h:2099
libMesh::FEGenericBase::get_phi
const std::vector< std::vector< OutputShape > > & get_phi() const
Definition: fe_base.h:206
libMesh::RBEIMAssembly::get_rb_eim_construction
RBEIMConstruction & get_rb_eim_construction()
Get a reference to the RBEIMConstruction object.
Definition: rb_eim_assembly.C:96
libMesh::FEAbstract::reinit
virtual void reinit(const Elem *elem, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr)=0
This is at the core of this class.
libMesh::ReferenceCounter::_enable_print_counter
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called.
Definition: reference_counter.h:141
libMesh::Quality::name
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:42