46 return std::is_fundamental<T>::value || std::is_same<T, std::string>::value;
49 virtual void print(std::ostream &
os)
const = 0;
51 virtual void store(std::ostream & stream,
void * context) = 0;
62 if (!this->isSupportedType<T>())
63 mooseError(
"Unsupported type ", MooseUtils::prettyCppType<T>(),
" for FormattedTable.");
66 const T &
get()
const {
return _value; }
71 virtual void store(std::ostream & stream,
void * context)
override;
73 load(std::istream & stream, std::shared_ptr<TableValueBase> & value_base,
void * context);
83 os << (this->_value ?
"True" :
"False");
90 std::string type =
typeid(T).
name();
98 std::shared_ptr<TableValueBase> & value_base,
140 void append(
bool append_existing_file);
151 template <
typename T = Real>
157 template <
typename T = Real>
164 template <
typename T = Real>
165 void addData(
const std::string &
name,
const std::vector<T> & vector);
175 template <
typename T = Real>
195 void printTable(std::ostream & out,
unsigned int last_n_entries = 0);
197 unsigned int last_n_entries,
199 void printTable(
const std::string & file_name);
206 void printCSV(
const std::string & file_name,
int interval = 1,
bool align =
false);
210 void makeGnuplot(
const std::string & base_file,
const std::string & format);
231 unsigned int last_n_entries,
232 std::map<std::string, unsigned short> & col_widths,
233 std::vector<std::string>::iterator & col_begin,
234 std::vector<std::string>::iterator & col_end);
237 std::map<std::string, unsigned short> & col_widths,
238 std::vector<std::string>::iterator & col_begin,
239 std::vector<std::string>::iterator & col_end)
const;
241 std::map<std::string, unsigned short> & col_widths,
242 std::vector<std::string>::iterator & col_begin,
243 std::vector<std::string>::iterator & col_end)
const;
248 std::map<std::string, unsigned short> & col_widths,
249 std::vector<std::string>::iterator & col_begin,
250 std::vector<std::string>::iterator & col_end)
const;
258 std::vector<std::pair<Real, std::map<std::string, std::shared_ptr<TableValueBase>>>>
_data;
277 void open(
const std::string & file_name);
279 void printRow(std::pair<Real, std::map<std::string, std::shared_ptr<TableValueBase>>> & row_data,
326 dataStore<FormattedTable>(std::ostream & stream,
FormattedTable & table,
void * context);
327 friend void dataLoad<FormattedTable>(std::istream & stream,
FormattedTable & v,
void * context);
330 template <
typename T>
335 mooseError(
"No Data stored in the the FormattedTable");
337 auto back_it =
_data.rbegin();
338 back_it->second[
name] =
348 template <
typename T>
352 auto back_it =
_data.rbegin();
355 "Attempting to add data to FormattedTable with the dependent variable in a " 356 "non-increasing order.\nDid you mean to use addData(std::string &, const " 357 "std::vector<Real> &)?");
362 _data.emplace_back(time, std::map<std::string, std::shared_ptr<TableValueBase>>());
363 back_it =
_data.rbegin();
366 back_it->second[
name] =
376 template <
typename T>
380 for (MooseIndex(vector) i = 0; i < vector.size(); ++i)
382 if (i ==
_data.size())
383 _data.emplace_back(i, std::map<std::string, std::shared_ptr<TableValueBase>>());
386 "Inconsistent indexing in VPP vector");
388 auto & curr_entry =
_data[i];
389 curr_entry.second[
name] =
400 template <
typename T>
404 mooseAssert(!
empty(),
"No Data stored in the FormattedTable");
406 auto & last_data_map =
_data.rbegin()->second;
407 auto it = last_data_map.find(
name);
408 if (it == last_data_map.end())
std::string name(const ElemQuality q)
virtual void print(std::ostream &os) const =0
static constexpr bool isSupportedType()
bool absoluteFuzzyEqual(const T &var1, const T2 &var2, const T3 &tol=libMesh::TOLERANCE *libMesh::TOLERANCE)
Function to check whether two variables are equal within an absolute tolerance.
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
std::unique_ptr< T_DEST, T_DELETER > dynamic_pointer_cast(std::unique_ptr< T_SRC, T_DELETER > &src)
These are reworked from https://stackoverflow.com/a/11003103.
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
std::basic_ostream< charT, traits > * os
static void load(std::istream &stream, std::shared_ptr< TableValueBase > &value_base, void *context)
TableValue(const T &value)
virtual void print(std::ostream &os) const override
Real value(unsigned n, unsigned alpha, unsigned beta, Real x)
virtual void store(std::ostream &stream, void *context) override
bool absoluteFuzzyLessThan(const T &var1, const T2 &var2, const T3 &tol=libMesh::TOLERANCE *libMesh::TOLERANCE)
Function to check whether a variable is less than another variable within an absolute tolerance...
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type It sho...
virtual void store(std::ostream &stream, void *context)=0
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual ~TableValueBase()=default