libMesh
Public Member Functions | Static Public Member Functions | Public Attributes | Protected Types | Protected Member Functions | Static Protected 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 QBase &element_qrule, std::vector< Number > &values)
 Evaluate variable var_number of this object's EIM basis function at the points qpoints. 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...
 
virtual void get_nodal_rhs_values (std::map< numeric_index_type, Number > &values, const System &, const Node &)
 Get values to add to the 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 ()
 

Public Attributes

bool is_nodal_rhs_values_overriden
 Temporary flag to help us figure out if we should call the deprecated get_nodal_rhs_values method or not. More...
 

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...
 

Detailed Description

Definition at line 245 of file assembly.h.

Member Typedef Documentation

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 119 of file reference_counter.h.

Constructor & Destructor Documentation

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

Definition at line 247 of file assembly.h.

248  :
249  RBEIMAssembly(rb_eim_con_in,
250  basis_function_index_in)
251  {}
RBEIMAssembly(RBEIMConstruction &rb_eim_con_in, unsigned int basis_function_index_in)
Constructor.

Member Function Documentation

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

Perform the element boundary assembly.

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

Definition at line 64 of file elem_assembly.h.

Referenced by libMesh::RBConstruction::add_scaled_matrix_and_vector(), AssemblyF0::AssemblyF0(), AssemblyF1::AssemblyF1(), and AssemblyF2::AssemblyF2().

64 { }
void libMesh::ReferenceCounter::disable_print_counter_info ( )
staticinherited

Definition at line 107 of file reference_counter.C.

References libMesh::ReferenceCounter::_enable_print_counter.

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

108 {
109  _enable_print_counter = false;
110  return;
111 }
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called...
void libMesh::ReferenceCounter::enable_print_counter_info ( )
staticinherited

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

Definition at line 101 of file reference_counter.C.

References libMesh::ReferenceCounter::_enable_print_counter.

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

102 {
103  _enable_print_counter = true;
104  return;
105 }
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called...
void libMesh::RBEIMAssembly::evaluate_basis_function ( unsigned int  var,
const Elem element,
const QBase element_qrule,
std::vector< Number > &  values 
)
virtualinherited

Evaluate variable var_number of this object's EIM basis function at the points qpoints.

Fill values with the basis function values.

Definition at line 64 of file rb_eim_assembly.C.

References libMesh::RBEIMAssembly::_ghosted_basis_function, libMesh::RBEIMAssembly::_qrule, libMesh::FEAbstract::attach_quadrature_rule(), libMesh::QBase::build(), libMesh::DofMap::dof_indices(), libMesh::QBase::get_dim(), libMesh::System::get_dof_map(), libMesh::RBEIMConstruction::get_explicit_system(), libMesh::RBEIMAssembly::get_fe(), libMesh::QBase::get_order(), libMesh::FEGenericBase< OutputType >::get_phi(), libMesh::RBEIMAssembly::get_rb_eim_construction(), libMesh::libmesh_assert(), libmesh_nullptr, libMesh::FEAbstract::reinit(), and libMesh::QBase::type().

68 {
69  LOG_SCOPE("evaluate_basis_function", "RBEIMAssembly");
70 
71  bool repeated_qrule = false;
72  if (_qrule.get() != libmesh_nullptr)
73  {
74  repeated_qrule =
75  ( (element_qrule.type() == _qrule->type()) &&
76  (element_qrule.get_dim() == _qrule->get_dim()) &&
77  (element_qrule.get_order() == _qrule->get_order()) );
78  }
79 
80  // If the qrule is not repeated, then we need to make a new copy of element_qrule.
81  if (!repeated_qrule)
82  {
83  _qrule.reset(QBase::build(element_qrule.type(),
84  element_qrule.get_dim(),
85  element_qrule.get_order()).release());
86 
88  }
89 
90  const std::vector<std::vector<Real>> & phi = get_fe().get_phi();
91 
92  // The FE object caches data, hence we recompute as little as
93  // possible on the call to reinit.
94  get_fe().reinit (&element);
95 
96  std::vector<dof_id_type> dof_indices_var;
97 
99  dof_map.dof_indices (&element, dof_indices_var, var);
100 
101  libmesh_assert(dof_indices_var.size() == phi.size());
102 
103  unsigned int n_qpoints = _qrule->n_points();
104  values.resize(n_qpoints);
105 
106  for (unsigned int qp=0; qp<n_qpoints; qp++)
107  {
108  values[qp] = 0.;
109  for (std::size_t i=0; i<dof_indices_var.size(); i++)
110  values[qp] += (*_ghosted_basis_function)(dof_indices_var[i]) * phi[i][qp];
111  }
112 }
const class libmesh_nullptr_t libmesh_nullptr
UniquePtr< QBase > _qrule
libmesh_assert(j)
RBEIMConstruction & get_rb_eim_construction()
Get a reference to the RBEIMConstruction object.
const DofMap & get_dof_map() const
Definition: system.h:2030
ExplicitSystem & get_explicit_system()
Get the ExplicitSystem associated with this system.
const std::vector< std::vector< OutputShape > > & get_phi() const
Definition: fe_base.h:208
FEBase & get_fe()
Retrieve the FE object.
static UniquePtr< QBase > build(const std::string &name, const unsigned int dim, const Order order=INVALID_ORDER)
Builds a specific quadrature rule based on the name string.
virtual void attach_quadrature_rule(QBase *q)=0
Provides the class with the quadrature rule.
UniquePtr< NumericVector< Number > > _ghosted_basis_function
The basis function that we sample to evaluate the empirical interpolation approximation.
virtual void reinit(const Elem *elem, const std::vector< Point > *const pts=libmesh_nullptr, const std::vector< Real > *const weights=libmesh_nullptr)=0
This is at the core of this class.
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:1917
FEBase & libMesh::RBEIMAssembly::get_fe ( )
inherited

Retrieve the FE object.

Definition at line 124 of file rb_eim_assembly.C.

References libMesh::RBEIMAssembly::_fe.

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

125 {
126  return *_fe;
127 }
UniquePtr< FEBase > _fe
We store an FE object and an associated quadrature rule.
NumericVector< Number > & libMesh::RBEIMAssembly::get_ghosted_basis_function ( )
inherited

Get a reference to the ghosted_basis_function.

Definition at line 119 of file rb_eim_assembly.C.

References libMesh::RBEIMAssembly::_ghosted_basis_function.

120 {
121  return *_ghosted_basis_function;
122 }
UniquePtr< NumericVector< Number > > _ghosted_basis_function
The basis function that we sample to evaluate the empirical interpolation approximation.
std::string libMesh::ReferenceCounter::get_info ( )
staticinherited

Gets a string containing the reference information.

Definition at line 47 of file reference_counter.C.

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

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

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 (Counts::iterator it = _counts.begin();
59  it != _counts.end(); ++it)
60  {
61  const std::string name(it->first);
62  const unsigned int creations = it->second.first;
63  const unsigned int destructions = it->second.second;
64 
65  oss << "| " << name << " reference count information:\n"
66  << "| Creations: " << creations << '\n'
67  << "| Destructions: " << destructions << '\n';
68  }
69 
70  oss << " ---------------------------------------------------------------------------- \n";
71 
72  return oss.str();
73 
74 #else
75 
76  return "";
77 
78 #endif
79 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:39
static Counts _counts
Actually holds the data.
virtual void libMesh::ElemAssembly::get_nodal_rhs_values ( std::map< numeric_index_type, Number > &  values,
const System ,
const Node  
)
virtualinherited

Get values to add to the RHS vector based on node.

This allows one to impose point loads, for example. 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 88 of file elem_assembly.h.

References libMesh::ElemAssembly::is_nodal_rhs_values_overriden.

Referenced by libMesh::RBConstruction::add_scaled_matrix_and_vector(), AssemblyPointLoadX::AssemblyPointLoadX(), AssemblyPointLoadY::AssemblyPointLoadY(), and AssemblyPointLoadZ::AssemblyPointLoadZ().

91  {
92  // use get_nodal_values instead, since that enables matrix and vector assembly
93  libmesh_deprecated();
94 
95  // By default, just clear the values map
96  values.clear();
97 
98  // Set flag so that we know this is the default implementation
100  }
bool is_nodal_rhs_values_overriden
Temporary flag to help us figure out if we should call the deprecated get_nodal_rhs_values method or ...
virtual void libMesh::ElemAssembly::get_nodal_values ( std::vector< dof_id_type > &  ,
DenseMatrix< Number > &  ,
DenseVector< Number > &  ,
const System ,
const Node  
)
virtualinherited

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 71 of file elem_assembly.h.

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

76  {
77  // Do nothing by default
78  }
RBEIMConstruction & libMesh::RBEIMAssembly::get_rb_eim_construction ( )
inherited

Get a reference to the RBEIMConstruction object.

Definition at line 114 of file rb_eim_assembly.C.

References libMesh::RBEIMAssembly::_rb_eim_con.

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

115 {
116  return _rb_eim_con;
117 }
RBEIMConstruction & _rb_eim_con
The RBEIMConstruction object that this RBEIMAssembly is based on.
void libMesh::ReferenceCounter::increment_constructor_count ( const std::string &  name)
protectedinherited

Increments the construction counter.

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

Definition at line 185 of file reference_counter.h.

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

Referenced by libMesh::ReferenceCounter::n_objects(), and libMesh::ReferenceCountedObject< RBParametrized >::ReferenceCountedObject().

186 {
187  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
188  std::pair<unsigned int, unsigned int> & p = _counts[name];
189 
190  p.first++;
191 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:39
spin_mutex spin_mtx
A convenient spin mutex object which can be used for obtaining locks.
Definition: threads.C:29
static Counts _counts
Actually holds the data.
void libMesh::ReferenceCounter::increment_destructor_count ( const std::string &  name)
protectedinherited

Increments the destruction counter.

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

Definition at line 198 of file reference_counter.h.

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

Referenced by libMesh::ReferenceCounter::n_objects(), and libMesh::ReferenceCountedObject< RBParametrized >::~ReferenceCountedObject().

199 {
200  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
201  std::pair<unsigned int, unsigned int> & p = _counts[name];
202 
203  p.second++;
204 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:39
spin_mutex spin_mtx
A convenient spin mutex object which can be used for obtaining locks.
Definition: threads.C:29
static Counts _counts
Actually holds the data.
virtual void AssemblyEIM::interior_assembly ( FEMContext )
virtual

Perform the element interior assembly.

Reimplemented from libMesh::ElemAssembly.

Definition at line 253 of file assembly.h.

References 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_nullptr, and libMesh::QBase::n_points().

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 = libmesh_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  // Now we will build the affine operator
274  unsigned int n_qpoints = c.get_element_qrule().n_points();
275 
276  std::vector<Number> eim_values_Gx;
278  c.get_elem(),
279  c.get_element_qrule(),
280  eim_values_Gx);
281 
282  std::vector<Number> eim_values_Gy;
284  c.get_elem(),
285  c.get_element_qrule(),
286  eim_values_Gy);
287 
288  std::vector<Number> eim_values_Gz;
290  c.get_elem(),
291  c.get_element_qrule(),
292  eim_values_Gz);
293 
294  for (unsigned int qp=0; qp != n_qpoints; qp++)
295  for (unsigned int i=0; i != n_u_dofs; i++)
296  for (unsigned int j=0; j != n_u_dofs; j++)
297  c.get_elem_jacobian()(i,j) += JxW[qp] * (eim_values_Gx[qp]*dphi[i][qp](0)*dphi[j][qp](0) +
298  eim_values_Gy[qp]*dphi[i][qp](1)*dphi[j][qp](1) +
299  eim_values_Gz[qp]*dphi[i][qp](2)*dphi[j][qp](2));
300  }
const class libmesh_nullptr_t libmesh_nullptr
virtual void evaluate_basis_function(unsigned int var, const Elem &element, const QBase &element_qrule, std::vector< Number > &values)
Evaluate variable var_number of this object&#39;s EIM basis function at the points qpoints.
FEGenericBase< Real > FEBase
static unsigned int libMesh::ReferenceCounter::n_objects ( )
staticinherited
void libMesh::ReferenceCounter::print_info ( std::ostream &  out = libMesh::out)
staticinherited

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

Definition at line 88 of file reference_counter.C.

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

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

89 {
91  out_stream << ReferenceCounter::get_info();
92 }
static std::string get_info()
Gets a string containing the reference information.
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called...

Member Data Documentation

ReferenceCounter::Counts libMesh::ReferenceCounter::_counts
staticprotectedinherited
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 143 of file reference_counter.h.

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

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

Mutual exclusion object to enable thread-safe reference counting.

Definition at line 137 of file reference_counter.h.

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 132 of file reference_counter.h.

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

bool libMesh::ElemAssembly::is_nodal_rhs_values_overriden
inherited

Temporary flag to help us figure out if we should call the deprecated get_nodal_rhs_values method or not.

Definition at line 107 of file elem_assembly.h.

Referenced by libMesh::RBConstruction::add_scaled_matrix_and_vector(), and libMesh::ElemAssembly::get_nodal_rhs_values().


The documentation for this struct was generated from the following file: