25 #include <unordered_map> 127 Quantity(
const unsigned int index,
const string &name)
157 static void set_yaml_output();
164 Balance(
const std::string &file_prefix,
const Mesh *mesh);
184 void units(
const UnitSI &unit);
195 unsigned int add_quantity(
const string &name);
209 void allocate(
unsigned int n_loc_dofs,
210 unsigned int max_dofs_per_boundary);
220 void start_mass_assembly(
unsigned int quantity_idx);
225 for (
auto idx : q_idx_vec)
226 start_mass_assembly(idx);
233 void start_flux_assembly(
unsigned int quantity_idx);
238 for (
auto idx : q_idx_vec)
239 start_flux_assembly(idx);
246 void start_source_assembly(
unsigned int quantity_idx);
251 for (
auto idx : q_idx_vec)
252 start_source_assembly(idx);
262 void add_mass_matrix_values(
unsigned int quantity_idx,
263 unsigned int region_idx,
277 void add_flux_matrix_values(
unsigned int quantity_idx,
288 void add_mass_vec_value(
unsigned int quantity_idx,
289 unsigned int region_idx,
300 void add_source_values(
unsigned int quantity_idx,
301 unsigned int region_idx,
313 void add_flux_vec_value(
unsigned int quantity_idx,
318 void finish_mass_assembly(
unsigned int quantity_idx);
323 for (
auto idx : q_idx_vec)
324 finish_mass_assembly(idx);
328 void finish_flux_assembly(
unsigned int quantity_idx);
333 for (
auto idx : q_idx_vec)
334 finish_flux_assembly(idx);
338 void finish_source_assembly(
unsigned int quantity_idx);
343 for (
auto idx : q_idx_vec)
344 finish_source_assembly(idx);
354 void calculate_cumulative(
unsigned int quantity_idx,
355 const Vec &solution);
363 void calculate_mass(
unsigned int quantity_idx,
372 void calculate_instant(
unsigned int quantity_idx,
373 const Vec &solution);
381 void add_cumulative_source(
unsigned int quantity_idx,
double source);
388 static const unsigned int output_column_width = 20;
396 void lazy_initialize();
399 void output_legacy(
double time);
402 void output_csv(
double time,
char delimiter,
const std::string& comment_string,
unsigned int repeat = 0);
405 void output_yaml(
double time);
408 std::string csv_zero_vals(
unsigned int cnt,
char delimiter);
411 void format_csv_output_header(
char delimiter,
const std::string& comment_string);
414 std::string format_csv_val(std::string val,
char delimiter,
bool initial =
false);
417 std::string format_csv_val(
double val,
char delimiter,
bool initial =
false);
562 #endif // BALANCE_HH_ int LongIdx
Define type that represents indices of large arrays (elements, nodes, dofs etc.)
UnitSI units_
Units of conserved quantities.
std::vector< double > integrated_sources_
std::vector< double > sum_fluxes_out_
LongIdx get_boundary_edge_uid(SideIter side)
TimeMark::Type output_mark_type_
TimeMark type for output of particular equation.
TimeMark::Type balance_output_type_
TimeMark type for balance output of particular equation.
unsigned int side_idx() const
Returns local index of the side on the element.
bool initial_
true before calculating the mass at initial time, otherwise false
void start_mass_assembly(std::vector< unsigned int > q_idx_vec)
Variant of the start_mass_assembly() method for a set of quantities.
std::vector< std::vector< double > > sources_in_
void finish_mass_assembly(std::vector< unsigned int > q_idx_vec)
Variant of the finish_mass_assembly() method for a set of quantities.
std::vector< std::vector< double > > fluxes_in_
std::vector< double > sum_fluxes_in_
std::vector< std::vector< double > > fluxes_out_
const TimeGovernor * time_
Mat * region_source_rhs_
Matrices for calculation of signed source (n_dofs x n_bulk_regions).
Input::Record input_record_
Record for current balance.
ofstream output_
Handle for file for output in given OutputFormat of balance and total fluxes over individual regions ...
bool cumulative() const
Getter for cumulative_.
bool allocation_done_
true before allocating necessary internal structures (Petsc matrices etc.)
Basic time management functionality for unsteady (and steady) solvers (class Equation).
std::vector< double > sum_fluxes_
string name_
Name of quantity (for output).
bool balance_on_
If the balance is on. Balance is off in the case of no balance output time marks. ...
static constexpr bool value
std::vector< double > increment_sources_
const unsigned int index_
Internal index within list of quantities.
Vec * be_flux_vec_
Vectors for calculation of flux (n_boundary_edges).
std::vector< double > integrated_fluxes_
std::vector< Quantity > quantities_
Names of conserved quantities.
std::vector< std::vector< double > > sources_out_
Mat * be_flux_matrix_
Matrices for calculation of flux (n_boundary_edges x n_dofs).
double last_time_
time of last calculated balance
std::vector< std::vector< double > > fluxes_
void finish_flux_assembly(std::vector< unsigned int > q_idx_vec)
Variant of the finish_flux_assembly() method for a set of quantities.
void start_flux_assembly(std::vector< unsigned int > q_idx_vec)
Variant of the start_flux_assembly() method for a set of quantities.
Mat * region_mass_matrix_
Matrices for calculation of mass (n_dofs x n_bulk_regions).
std::vector< double > sum_sources_out_
unsigned int max_dofs_per_boundary_
bool cumulative_
if true then cumulative balance is computed
Mat * region_source_matrix_
Matrices for calculation of source (n_dofs x n_bulk_regions).
std::vector< double > increment_fluxes_
void finish_source_assembly(std::vector< unsigned int > q_idx_vec)
Variant of the finish_source_assembly() method for a set of quantities.
static bool do_yaml_output_
Dedicated class for storing path to input and output files.
std::vector< double > sum_sources_
std::vector< double > initial_mass_
Quantity(const unsigned int index, const string &name)
std::vector< unsigned int > be_regions_
Maps local boundary edge to its region boundary index.
OutputFormat output_format_
Format of output file.
std::unordered_map< LongIdx, unsigned int > be_id_map_
int be_offset_
Offset for local part of vector of boundary edges.
std::vector< std::vector< double > > masses_
void start_source_assembly(std::vector< unsigned int > q_idx_vec)
Variant of the start_source_assembly() method for a set of quantities.
unsigned int elem_idx() const
Returns index of element in Mesh::element_vec_.
std::vector< double > sum_masses_
Vec * region_mass_vec_
Vectors for calculation of mass (n_bulk_regions).
unsigned int output_line_counter_
hold count of line printed into output_
bool add_output_times_
Add output time marks to balance output time marks.
Class for representation SI units of Fields.
unsigned int n_loc_dofs_
Allocation parameters. Set by the allocate method used in the lazy_initialize.
FilePath balance_output_file_
File path for output_ stream.
std::string file_prefix_
Save prefix passed in in constructor.
bool output_yaml_header_
marks whether YAML output has printed header
std::vector< double > sum_sources_in_