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

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

#include <rb_eim_theta.h>

Inheritance diagram for libMesh::RBEIMTheta:
[legend]

Public Member Functions

 RBEIMTheta (RBEIMEvaluation &rb_eim_eval_in, unsigned int index_in)
 Constructor. More...
 
 RBEIMTheta (RBEIMTheta &&)=default
 Special functions. More...
 
 RBEIMTheta (const RBEIMTheta &)=default
 
RBEIMThetaoperator= (const RBEIMTheta &)=delete
 
RBEIMThetaoperator= (RBEIMTheta &&)=delete
 
 ~RBEIMTheta ()=default
 
virtual Number evaluate (const RBParameters &mu) override
 Evaluate this RBEIMTheta object at the parameter mu. More...
 
virtual std::vector< Numberevaluate_vec (const std::vector< RBParameters > &mus) override
 Evaluate this RBEIMTheta at all parameters in mus. 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_stream=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

RBEIMEvaluationrb_eim_eval
 The RBEIMEvaluation object that this RBEIMTheta is based on. More...
 
unsigned int index
 The index of the RB_solution vector that we pick out from rb_eim_eval to provide the value of the evaluation. 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) noexcept
 Increments the construction counter. More...
 
void increment_destructor_count (const std::string &name) noexcept
 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

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

Author
David J. Knezevic
Date
2011

Definition at line 42 of file rb_eim_theta.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 119 of file reference_counter.h.

Constructor & Destructor Documentation

◆ RBEIMTheta() [1/3]

libMesh::RBEIMTheta::RBEIMTheta ( RBEIMEvaluation rb_eim_eval_in,
unsigned int  index_in 
)

Constructor.

Definition at line 27 of file rb_eim_theta.C.

28  :
29  rb_eim_eval(rb_eim_eval_in),
30  index(index_in)
31 {
32 }
unsigned int index
The index of the RB_solution vector that we pick out from rb_eim_eval to provide the value of the eva...
Definition: rb_eim_theta.h:83
RBEIMEvaluation & rb_eim_eval
The RBEIMEvaluation object that this RBEIMTheta is based on.
Definition: rb_eim_theta.h:77

◆ RBEIMTheta() [2/3]

libMesh::RBEIMTheta::RBEIMTheta ( RBEIMTheta &&  )
default

Special functions.

This class contains a reference, so it can't be default copy/move-assigned.

◆ RBEIMTheta() [3/3]

libMesh::RBEIMTheta::RBEIMTheta ( const RBEIMTheta )
default

◆ ~RBEIMTheta()

libMesh::RBEIMTheta::~RBEIMTheta ( )
default

Member Function Documentation

◆ disable_print_counter_info()

void libMesh::ReferenceCounter::disable_print_counter_info ( )
staticinherited

Definition at line 100 of file reference_counter.C.

References libMesh::ReferenceCounter::_enable_print_counter.

101 {
102  _enable_print_counter = false;
103  return;
104 }
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called...

◆ 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 94 of file reference_counter.C.

References libMesh::ReferenceCounter::_enable_print_counter.

95 {
96  _enable_print_counter = true;
97  return;
98 }
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called...

◆ evaluate()

Number libMesh::RBEIMTheta::evaluate ( const RBParameters mu)
overridevirtual

Evaluate this RBEIMTheta object at the parameter mu.

This entails solving the RB EIM approximation and picking out the appropriate coefficient.

Reimplemented from libMesh::RBTheta.

Reimplemented in ThetaEIM.

Definition at line 34 of file rb_eim_theta.C.

References evaluate_vec().

35 {
36  std::vector<RBParameters> mus {mu};
37  std::vector<Number> values = evaluate_vec(mus);
38 
39  libmesh_error_msg_if(values.size() != 1, "Error: should have one value");
40  return values[0];
41 }
virtual std::vector< Number > evaluate_vec(const std::vector< RBParameters > &mus) override
Evaluate this RBEIMTheta at all parameters in mus.
Definition: rb_eim_theta.C:43

◆ evaluate_vec()

std::vector< Number > libMesh::RBEIMTheta::evaluate_vec ( const std::vector< RBParameters > &  mus)
overridevirtual

Evaluate this RBEIMTheta at all parameters in mus.

Reimplemented from libMesh::RBTheta.

Definition at line 43 of file rb_eim_theta.C.

References libMesh::RBEIMEvaluation::get_n_basis_functions(), libMesh::RBEIMEvaluation::get_rb_eim_solutions_entries(), index, rb_eim_eval, libMesh::RBEIMEvaluation::rb_eim_solves(), and libMesh::RBEIMEvaluation::set_eim_error_indicator_active().

Referenced by evaluate().

44 {
48 
50 }
void set_eim_error_indicator_active(bool is_active)
Activate/decative the error indicator in EIM solves.
void rb_eim_solves(const std::vector< RBParameters > &mus, unsigned int N)
Perform rb_eim_solves at each mu in mus and store the results in _rb_eim_solutions.
unsigned int get_n_basis_functions() const
Return the current number of EIM basis functions.
std::vector< Number > get_rb_eim_solutions_entries(unsigned int index) const
Return entry index for each solution in _rb_eim_solutions.
unsigned int index
The index of the RB_solution vector that we pick out from rb_eim_eval to provide the value of the eva...
Definition: rb_eim_theta.h:83
RBEIMEvaluation & rb_eim_eval
The RBEIMEvaluation object that this RBEIMTheta is based on.
Definition: rb_eim_theta.h:77

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

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 (const auto & [name, cd] : _counts)
59  oss << "| " << name << " reference count information:\n"
60  << "| Creations: " << cd.first << '\n'
61  << "| Destructions: " << cd.second << '\n';
62 
63  oss << " ---------------------------------------------------------------------------- \n";
64 
65  return oss.str();
66 
67 #else
68 
69  return "";
70 
71 #endif
72 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:42
static Counts _counts
Actually holds the data.

◆ increment_constructor_count()

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

Increments the construction counter.

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

Definition at line 183 of file reference_counter.h.

References libMesh::err, libMesh::BasicOStreamProxy< charT, traits >::get(), libMesh::Quality::name(), and libMesh::Threads::spin_mtx.

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

184 {
185  libmesh_try
186  {
187  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
188  std::pair<unsigned int, unsigned int> & p = _counts[name];
189  p.first++;
190  }
191  libmesh_catch (...)
192  {
193  auto stream = libMesh::err.get();
194  stream->exceptions(stream->goodbit); // stream must not throw
195  libMesh::err << "Encountered unrecoverable error while calling "
196  << "ReferenceCounter::increment_constructor_count() "
197  << "for a(n) " << name << " object." << std::endl;
198  std::terminate();
199  }
200 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:42
OStreamProxy err
static Counts _counts
Actually holds the data.
streamT * get()
Rather than implement every ostream/ios/ios_base function, we&#39;ll be lazy and make esoteric uses go th...
spin_mutex spin_mtx
A convenient spin mutex object which can be used for obtaining locks.
Definition: threads.C:30

◆ increment_destructor_count()

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

Increments the destruction counter.

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

Definition at line 207 of file reference_counter.h.

References libMesh::err, libMesh::BasicOStreamProxy< charT, traits >::get(), libMesh::Quality::name(), and libMesh::Threads::spin_mtx.

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

208 {
209  libmesh_try
210  {
211  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
212  std::pair<unsigned int, unsigned int> & p = _counts[name];
213  p.second++;
214  }
215  libmesh_catch (...)
216  {
217  auto stream = libMesh::err.get();
218  stream->exceptions(stream->goodbit); // stream must not throw
219  libMesh::err << "Encountered unrecoverable error while calling "
220  << "ReferenceCounter::increment_destructor_count() "
221  << "for a(n) " << name << " object." << std::endl;
222  std::terminate();
223  }
224 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:42
OStreamProxy err
static Counts _counts
Actually holds the data.
streamT * get()
Rather than implement every ostream/ios/ios_base function, we&#39;ll be lazy and make esoteric uses go th...
spin_mutex spin_mtx
A convenient spin mutex object which can be used for obtaining locks.
Definition: threads.C:30

◆ n_objects()

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

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

Definition at line 85 of file reference_counter.h.

References libMesh::ReferenceCounter::_n_objects.

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

86  { return _n_objects; }
static Threads::atomic< unsigned int > _n_objects
The number of objects.

◆ operator=() [1/2]

RBEIMTheta& libMesh::RBEIMTheta::operator= ( const RBEIMTheta )
delete

◆ operator=() [2/2]

RBEIMTheta& libMesh::RBEIMTheta::operator= ( RBEIMTheta &&  )
delete

◆ print_info()

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

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

Definition at line 81 of file reference_counter.C.

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

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

82 {
84  out_stream << ReferenceCounter::get_info();
85 }
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

◆ _counts

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

Actually holds the data.

Definition at line 124 of file reference_counter.h.

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

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

◆ _mutex

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.

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

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

◆ index

unsigned int libMesh::RBEIMTheta::index

The index of the RB_solution vector that we pick out from rb_eim_eval to provide the value of the evaluation.

Definition at line 83 of file rb_eim_theta.h.

Referenced by evaluate_vec().

◆ rb_eim_eval

RBEIMEvaluation& libMesh::RBEIMTheta::rb_eim_eval

The RBEIMEvaluation object that this RBEIMTheta is based on.

Definition at line 77 of file rb_eim_theta.h.

Referenced by evaluate_vec().


The documentation for this class was generated from the following files: