libMesh
Public Member Functions | Private Attributes | List of all members
libMesh::ParameterVector Class Reference

Data structure for specifying which Parameters should be independent variables in a parameter sensitivity calculation. More...

#include <parameter_vector.h>

Public Member Functions

 ParameterVector ()
 Default constructor: "no parameters". More...
 
 ParameterVector (const std::vector< Number * > &params)
 Constructor-from-vector-of-Number*: each points to a parameter. More...
 
 ~ParameterVector ()
 Destructor - deletes ParameterAccessor objects. More...
 
void deep_copy (ParameterVector &target) const
 Deep copy constructor: the target will now own new copies of all the parameter values I'm pointing to. More...
 
void shallow_copy (ParameterVector &target) const
 Shallow copy constructor: the target will now point to all the parameter values I'm pointing to. More...
 
void value_copy (ParameterVector &target) const
 Value copy method: the target, which should already have as many parameters as I do, will now have those parameters set to my values. More...
 
void clear ()
 Resets to "no parameters". More...
 
std::size_t size () const
 
void resize (std::size_t s)
 Sets the number of parameters to be used. More...
 
void push_back (std::unique_ptr< ParameterAccessor< Number >> new_accessor)
 Adds an additional parameter accessor to the end of the vector. More...
 
void deep_resize (std::size_t s)
 Sets the number of parameters to be used. More...
 
const ParameterAccessor< Number > & operator[] (std::size_t i) const
 
ParameterAccessor< Number > & operator[] (std::size_t i)
 
ParameterVectoroperator*= (const Number a)
 Multiplication operator; acts individually on each parameter. More...
 
ParameterVectoroperator+= (const ParameterVector &a)
 Addition operator. More...
 

Private Attributes

std::vector< ParameterAccessor< Number > * > _params
 Pointers to parameters which may exist elsewhere. More...
 
std::vector< Number_my_data
 Parameters which I own; e.g. More...
 
bool _is_shallow_copy
 Am I a shallow copy? If so then I shouldn't be deleting my ParameterAccessors. More...
 

Detailed Description

Data structure for specifying which Parameters should be independent variables in a parameter sensitivity calculation.

Author
Roy Stogner
Date
2009

Specifies parameters for parameter sensitivity calculations.

Definition at line 44 of file parameter_vector.h.

Constructor & Destructor Documentation

◆ ParameterVector() [1/2]

libMesh::ParameterVector::ParameterVector ( )
inline

Default constructor: "no parameters".

Definition at line 50 of file parameter_vector.h.

50 : _is_shallow_copy(false) {}

◆ ParameterVector() [2/2]

libMesh::ParameterVector::ParameterVector ( const std::vector< Number * > &  params)
explicit

Constructor-from-vector-of-Number*: each points to a parameter.

Definition at line 27 of file parameter_vector.C.

28  : _is_shallow_copy(false)
29 {
30  _params.reserve(params.size());
31 
32  for (auto p : params)
33  _params.push_back(new ParameterPointer<Number>(p));
34 }

References _params.

◆ ~ParameterVector()

libMesh::ParameterVector::~ParameterVector ( )
inline

Destructor - deletes ParameterAccessor objects.

Definition at line 162 of file parameter_vector.h.

163 {
164  this->clear();
165 }

References clear().

Member Function Documentation

◆ clear()

void libMesh::ParameterVector::clear ( )
inline

Resets to "no parameters".

Definition at line 170 of file parameter_vector.h.

171 {
172  if (!_is_shallow_copy)
173  for (auto & param : _params)
174  delete param;
175 
176  _params.clear();
177  _my_data.clear();
178 }

References _is_shallow_copy, _my_data, and _params.

Referenced by deep_copy(), LaplaceSystem::get_parameter_vector(), and ~ParameterVector().

◆ deep_copy()

void libMesh::ParameterVector::deep_copy ( ParameterVector target) const

Deep copy constructor: the target will now own new copies of all the parameter values I'm pointing to.

Definition at line 38 of file parameter_vector.C.

39 {
40  const std::size_t Np = this->_params.size();
41  target.clear();
42  target._params.resize(Np);
43  target._my_data.resize(Np);
44  for (std::size_t i=0; i != Np; ++i)
45  {
46  target._params[i] =
47  new ParameterPointer<Number>(&target._my_data[i]);
48  target._my_data[i] = *(*this)[i];
49  }
50 }

References _my_data, _params, and clear().

Referenced by libMesh::ImplicitSystem::qoi_parameter_hessian_vector_product(), libMesh::ImplicitSystem::weighted_sensitivity_adjoint_solve(), and libMesh::ImplicitSystem::weighted_sensitivity_solve().

◆ deep_resize()

void libMesh::ParameterVector::deep_resize ( std::size_t  s)

Sets the number of parameters to be used.

This method is for resizing a ParameterVector that owns its own parameter values

Definition at line 95 of file parameter_vector.C.

96 {
98 
99  this->_params.resize(s);
100  this->_my_data.resize(s);
101  for (std::size_t i=0; i != s; ++i)
102  this->_params[i] =
103  new ParameterPointer<Number>(&this->_my_data[i]);
104 }

References _is_shallow_copy, _my_data, _params, and libMesh::libmesh_assert().

◆ operator*=()

ParameterVector & libMesh::ParameterVector::operator*= ( const Number  a)

Multiplication operator; acts individually on each parameter.

Definition at line 108 of file parameter_vector.C.

109 {
110  const std::size_t Np = this->_params.size();
111  for (std::size_t i=0; i != Np; ++i)
112  *(*this)[i] *= a;
113  return *this;
114 }

References _params.

◆ operator+=()

ParameterVector & libMesh::ParameterVector::operator+= ( const ParameterVector a)

Addition operator.

The parameter vector to be added in must have the same number of values.

Definition at line 118 of file parameter_vector.C.

119 {
120  const std::size_t Np = this->_params.size();
121  libmesh_assert_equal_to (a._params.size(), Np);
122  for (std::size_t i=0; i != Np; ++i)
123  *(*this)[i] += *a[i];
124  return *this;
125 }

References _params.

◆ operator[]() [1/2]

ParameterAccessor< Number > & libMesh::ParameterVector::operator[] ( std::size_t  i)
inline
Returns
A reference to a smart-pointer to a parameter value, suitable for repointing it to a different address. This method is deprecated and may not work with more sophisticated ParameterAccessor subclasses.

Definition at line 204 of file parameter_vector.h.

205 {
206  libmesh_assert_greater (_params.size(), i);
207 
208  return *_params[i];
209 }

References _params.

◆ operator[]() [2/2]

const ParameterAccessor< Number > & libMesh::ParameterVector::operator[] ( std::size_t  i) const
inline
Returns
A smart-pointer to a parameter value

Definition at line 194 of file parameter_vector.h.

195 {
196  libmesh_assert_greater (_params.size(), i);
197 
198  return *_params[i];
199 }

References _params.

◆ push_back()

void libMesh::ParameterVector::push_back ( std::unique_ptr< ParameterAccessor< Number >>  new_accessor)
inline

Adds an additional parameter accessor to the end of the vector.

We will free this accessor when we are finished with it; we request that it be passed to us as a std::unique_ptr to reflect that fact in the API.

Definition at line 183 of file parameter_vector.h.

184 {
185  // Can't append stuff we are responsible for if we're already a shallow copy.
187  libmesh_assert(new_accessor.get());
188  _params.push_back(new_accessor.release());
189 }

References _is_shallow_copy, _params, and libMesh::libmesh_assert().

Referenced by CoupledSystem::get_parameter_vector(), and HeatSystem::get_parameter_vector().

◆ resize()

void libMesh::ParameterVector::resize ( std::size_t  s)

Sets the number of parameters to be used.

If the new size is larger than the old, empty ParameterPointer accessors fill the new entries.

Definition at line 74 of file parameter_vector.C.

75 {
77 
78  const std::size_t old_size = this->_params.size();
79 
80  // If we're shrinking the vector, we don't want to leak memory.
81  // Note that we're using < in these for loops, not !=
82  // We don't know a priori if we're shrinking or growing
83  for (std::size_t i=s; i < old_size; ++i)
84  delete _params[i];
85 
86  this->_params.resize(s);
87 
88  for (std::size_t i=old_size; i < s; ++i)
89  this->_params[i] =
90  new ParameterPointer<Number>(nullptr);
91 }

References _is_shallow_copy, _params, and libMesh::libmesh_assert().

◆ shallow_copy()

void libMesh::ParameterVector::shallow_copy ( ParameterVector target) const

Shallow copy constructor: the target will now point to all the parameter values I'm pointing to.

Definition at line 54 of file parameter_vector.C.

55 {
56  target._my_data.clear();
57  target._params = this->_params;
58  target._is_shallow_copy = true;
59 }

References _is_shallow_copy, _my_data, and _params.

◆ size()

std::size_t libMesh::ParameterVector::size ( ) const
inline

◆ value_copy()

void libMesh::ParameterVector::value_copy ( ParameterVector target) const

Value copy method: the target, which should already have as many parameters as I do, will now have those parameters set to my values.

Definition at line 63 of file parameter_vector.C.

64 {
65  const std::size_t Np = this->_params.size();
66  libmesh_assert_equal_to (target._params.size(), Np);
67 
68  for (std::size_t i=0; i != Np; ++i)
69  *target[i] = *(*this)[i];
70 }

References _params.

Referenced by libMesh::ImplicitSystem::qoi_parameter_hessian_vector_product(), libMesh::ImplicitSystem::weighted_sensitivity_adjoint_solve(), and libMesh::ImplicitSystem::weighted_sensitivity_solve().

Member Data Documentation

◆ _is_shallow_copy

bool libMesh::ParameterVector::_is_shallow_copy
private

Am I a shallow copy? If so then I shouldn't be deleting my ParameterAccessors.

Definition at line 153 of file parameter_vector.h.

Referenced by clear(), deep_resize(), push_back(), resize(), and shallow_copy().

◆ _my_data

std::vector<Number> libMesh::ParameterVector::_my_data
private

Parameters which I own; e.g.

as the result of a deep copy

Definition at line 147 of file parameter_vector.h.

Referenced by clear(), deep_copy(), deep_resize(), and shallow_copy().

◆ _params

std::vector<ParameterAccessor<Number> *> libMesh::ParameterVector::_params
private

Pointers to parameters which may exist elsewhere.

Definition at line 142 of file parameter_vector.h.

Referenced by clear(), deep_copy(), deep_resize(), operator*=(), operator+=(), operator[](), ParameterVector(), push_back(), resize(), shallow_copy(), size(), and value_copy().


The documentation for this class was generated from the following files:
libMesh::ParameterVector::_my_data
std::vector< Number > _my_data
Parameters which I own; e.g.
Definition: parameter_vector.h:147
libMesh::libmesh_assert
libmesh_assert(ctx)
libMesh::ParameterVector::_params
std::vector< ParameterAccessor< Number > * > _params
Pointers to parameters which may exist elsewhere.
Definition: parameter_vector.h:142
libMesh::ParameterVector::clear
void clear()
Resets to "no parameters".
Definition: parameter_vector.h:170
libMesh::ParameterVector::_is_shallow_copy
bool _is_shallow_copy
Am I a shallow copy? If so then I shouldn't be deleting my ParameterAccessors.
Definition: parameter_vector.h:153