libMesh
Public Member Functions | Static Public Member Functions | Public Attributes | Protected Types | Protected Member Functions | Static Protected Attributes | Private Member Functions | Private Attributes | List of all members
libMesh::RBEIMAssembly Class Reference

This class provides functionality required to define an assembly object that arises from an "Empirical Interpolation Method" (EIM) approximation. More...

#include <rb_eim_assembly.h>

Inheritance diagram for libMesh::RBEIMAssembly:
[legend]

Public Member Functions

 RBEIMAssembly (RBEIMConstruction &rb_eim_con_in, unsigned int basis_function_index_in)
 Constructor. More...
 
virtual ~RBEIMAssembly ()
 Destructor. 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...
 
RBEIMConstructionget_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...
 
FEBaseget_fe ()
 Retrieve the FE object. More...
 
virtual void interior_assembly (FEMContext &)
 Perform the element interior assembly. 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...
 

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...
 
UniquePtr< NumericVector< Number > > _ghosted_basis_function
 The basis function that we sample to evaluate the empirical interpolation approximation. More...
 
UniquePtr< FEBase_fe
 We store an FE object and an associated quadrature rule. More...
 
UniquePtr< QBase_qrule
 

Detailed Description

This class provides functionality required to define an assembly object that arises from an "Empirical Interpolation Method" (EIM) approximation.

Author
David J. Knezevic
Date
2012

Definition at line 47 of file rb_eim_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

libMesh::RBEIMAssembly::RBEIMAssembly ( RBEIMConstruction rb_eim_con_in,
unsigned int  basis_function_index_in 
)

Constructor.

Definition at line 34 of file rb_eim_assembly.C.

References _basis_function_index, _ghosted_basis_function, _rb_eim_con, libMesh::RBEvaluation::get_basis_function(), libMesh::System::get_dof_map(), libMesh::RBEIMConstruction::get_explicit_system(), libMesh::RBConstruction::get_rb_evaluation(), libMesh::DofMap::get_send_list(), libMesh::GHOSTED, initialize_fe(), libMesh::System::n_dofs(), libMesh::System::n_local_dofs(), and libMesh::SERIAL.

36  : _rb_eim_con(rb_eim_con_in),
37  _basis_function_index(basis_function_index_in),
38  _ghosted_basis_function(NumericVector<Number>::build(rb_eim_con_in.get_explicit_system().comm()))
39 {
40  // localize the vector that stores the basis function for this assembly object,
41  // i.e. the vector that is used in evaluate_basis_function_at_quad_pts
42 #ifdef LIBMESH_ENABLE_GHOSTED
46  false,
47  GHOSTED);
49  localize(*_ghosted_basis_function,
51 #else
54  localize(*_ghosted_basis_function);
55 #endif
56 
57  initialize_fe();
58 }
static UniquePtr< NumericVector< Number > > build(const Parallel::Communicator &comm, const SolverPackage solver_package=libMesh::default_solver_package())
Builds a NumericVector on the processors in communicator comm using the linear solver package specifi...
void initialize_fe()
Initialize the FE object.
const DofMap & get_dof_map() const
Definition: system.h:2030
ExplicitSystem & get_explicit_system()
Get the ExplicitSystem associated with this system.
NumericVector< Number > & get_basis_function(unsigned int i)
Get a reference to the i^th basis function.
unsigned int _basis_function_index
The EIM basis function index (from rb_eim_eval) for this assembly object.
dof_id_type n_local_dofs() const
Definition: system.C:185
dof_id_type n_dofs() const
Definition: system.C:148
RBEvaluation & get_rb_evaluation()
Get a reference to the RBEvaluation object.
RBEIMConstruction & _rb_eim_con
The RBEIMConstruction object that this RBEIMAssembly is based on.
const std::vector< dof_id_type > & get_send_list() const
Definition: dof_map.h:394
UniquePtr< NumericVector< Number > > _ghosted_basis_function
The basis function that we sample to evaluate the empirical interpolation approximation.
libMesh::RBEIMAssembly::~RBEIMAssembly ( )
virtual

Destructor.

Definition at line 60 of file rb_eim_assembly.C.

61 {
62 }

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 
)
virtual

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 _ghosted_basis_function, _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(), get_fe(), libMesh::QBase::get_order(), libMesh::FEGenericBase< OutputType >::get_phi(), 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 ( )

Retrieve the FE object.

Definition at line 124 of file rb_eim_assembly.C.

References _fe.

Referenced by 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 ( )

Get a reference to the ghosted_basis_function.

Definition at line 119 of file rb_eim_assembly.C.

References _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 ( )

Get a reference to the RBEIMConstruction object.

Definition at line 114 of file rb_eim_assembly.C.

References _rb_eim_con.

Referenced by evaluate_basis_function(), and 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.
void libMesh::RBEIMAssembly::initialize_fe ( )
private

Initialize the FE object.

Definition at line 129 of file rb_eim_assembly.C.

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

Referenced by RBEIMAssembly().

130 {
132 
133  const unsigned int dim =
135 
136  FEType fe_type = dof_map.variable_type(0);
137  _fe.reset(FEBase::build(dim, fe_type).release());
138 
139  // Pre-request the shape function for efficieny's sake
140  _fe->get_phi();
141 }
unsigned int dim
RBEIMConstruction & get_rb_eim_construction()
Get a reference to the RBEIMConstruction object.
const MeshBase & get_mesh() const
Definition: system.h:2014
const DofMap & get_dof_map() const
Definition: system.h:2030
ExplicitSystem & get_explicit_system()
Get the ExplicitSystem associated with this system.
unsigned int mesh_dimension() const
Definition: mesh_base.C:148
UniquePtr< FEBase > _fe
We store an FE object and an associated quadrature rule.
static UniquePtr< FEGenericBase > build(const unsigned int dim, const FEType &type)
Builds a specific finite element type.
virtual void libMesh::ElemAssembly::interior_assembly ( FEMContext )
virtualinherited
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

unsigned int libMesh::RBEIMAssembly::_basis_function_index
private

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

Definition at line 101 of file rb_eim_assembly.h.

Referenced by RBEIMAssembly().

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

UniquePtr<FEBase> libMesh::RBEIMAssembly::_fe
private

We store an FE object and an associated quadrature rule.

Definition at line 113 of file rb_eim_assembly.h.

Referenced by get_fe(), and initialize_fe().

UniquePtr<NumericVector<Number> > libMesh::RBEIMAssembly::_ghosted_basis_function
private

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 108 of file rb_eim_assembly.h.

Referenced by evaluate_basis_function(), get_ghosted_basis_function(), and RBEIMAssembly().

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

UniquePtr<QBase> libMesh::RBEIMAssembly::_qrule
private

Definition at line 114 of file rb_eim_assembly.h.

Referenced by evaluate_basis_function().

RBEIMConstruction& libMesh::RBEIMAssembly::_rb_eim_con
private

The RBEIMConstruction object that this RBEIMAssembly is based on.

Definition at line 96 of file rb_eim_assembly.h.

Referenced by get_rb_eim_construction(), and RBEIMAssembly().

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 class was generated from the following files: