https://mooseframework.inl.gov
MutableCoefficientsInterface.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
12 #include <vector>
13 
14 #include "InputParameters.h"
15 #include "MooseTypes.h"
16 #include "Restartable.h"
17 
18 class ConsoleStream;
19 
27 {
28 public:
30 
31  MutableCoefficientsInterface(const MooseObject * moose_object,
32  const InputParameters & parameters);
33 
34  // Coefficient access
38  Real operator[](std::size_t index) const;
42  const std::vector<std::size_t> & getCharacteristics() const;
46  const std::vector<Real> & getCoefficients() const;
50  std::vector<Real> & getCoefficients();
54  std::string getCoefficientsTable() const;
55 
56  // Current state
60  std::size_t getSize() const;
64  bool isCompatibleWith(const MutableCoefficientsInterface & other) const;
68  bool isSizeEnforced() const;
72  void enforceSize(bool enforce);
73 
74  // Mutable aspect
82  void resize(std::size_t size, Real fill = 0.0, bool fill_out_to_size = true);
86  void setCharacteristics(const std::vector<std::size_t> & new_characteristics);
90  void setCoefficients(const std::vector<Real> & new_coefficients);
94  void setCoefficients(std::vector<Real> && dropin_coefficients);
95 
99  friend std::ostream & operator<<(std::ostream & stream, const MutableCoefficientsInterface & me);
100 
101 protected:
105  virtual void coefficientsChanged(){};
106 
108  std::vector<std::size_t> & _characteristics;
109 
111  std::vector<Real> & _coefficients;
112 
115 
118 
119 private:
122 };
void setCoefficients(const std::vector< Real > &new_coefficients)
Set the coefficients using a copy operation.
bool isSizeEnforced() const
Returns true if the size of the coefficient array is fixed and enforced.
void setCharacteristics(const std::vector< std::size_t > &new_characteristics)
Sets the characteristics array.
friend std::ostream & operator<<(std::ostream &stream, const MutableCoefficientsInterface &me)
Friend operator to easily print out the array of coefficients.
const std::vector< std::size_t > & getCharacteristics() const
Get a reference to the characteristics array.
virtual void coefficientsChanged()
Called when the coefficients have been changed.
const bool _print_coefficients
Boolean to flag if the coefficients should be printed when set.
Real operator[](std::size_t index) const
Get the value of the coefficient at the corresponding index.
MutableCoefficientsInterface(const MooseObject *moose_object, const InputParameters &parameters)
bool _enforce_size
Boolean that locks or allows resizing of the coefficient array.
bool isCompatibleWith(const MutableCoefficientsInterface &other) const
Checks to see if another instance is compatible.
std::vector< Real > & _coefficients
The coefficient array.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
std::vector< std::size_t > & _characteristics
An array of integer characteristics that can be used to check compatibility.
std::string getCoefficientsTable() const
Get a formatted string of the coefficients.
std::size_t getSize() const
Get the size, aka number of coefficients.
This class is designed to provide a uniform interface for any class that uses an array of coefficient...
void resize(std::size_t size, Real fill=0.0, bool fill_out_to_size=true)
Resize the array, using the value for fill if the new size is larger.
const ConsoleStream & _console
MooseObject instance of this to provide access to _console
void importCoefficients(const MutableCoefficientsInterface &other)
Import the coefficients from another instance.
const std::vector< Real > & getCoefficients() const
Get a read-only reference to the vector of coefficients.
void enforceSize(bool enforce)
Toggle whether the size of the coefficient array can be changed.