Flow123d
JS_before_hm-2205-g8c1b58980
|
Go to the documentation of this file.
25 #include <unordered_map>
130 Quantity(
const unsigned int index,
const string &name)
167 Balance(
const std::string &file_prefix,
const Mesh *mesh);
212 void allocate(
const std::shared_ptr<DOFHandlerMultiDim>& dh,
213 unsigned int max_dofs_per_boundary);
220 void allocate(
unsigned int n_loc_dofs,
221 unsigned int max_dofs_per_boundary);
235 for (
auto idx : q_idx_vec)
248 for (
auto idx : q_idx_vec)
261 for (
auto idx : q_idx_vec)
314 unsigned int region_idx,
326 for (
auto idx : q_idx_vec)
336 for (
auto idx : q_idx_vec)
346 for (
auto idx : q_idx_vec)
358 const Vec &solution);
376 const Vec &solution);
405 void output_csv(
double time,
char delimiter,
const std::string& comment_string,
unsigned int repeat = 0);
417 std::string
format_csv_val(std::string val,
char delimiter,
bool initial =
false);
420 std::string
format_csv_val(
double val,
char delimiter,
bool initial =
false);
566 #endif // BALANCE_HH_
arma::Col< IntIdx > LocDofVec
void calculate_instant(unsigned int quantity_idx, const Vec &solution)
void allocate(const std::shared_ptr< DOFHandlerMultiDim > &dh, unsigned int max_dofs_per_boundary)
static const unsigned int output_column_width
Size of column in output (used if delimiter is space)
void start_flux_assembly(std::vector< unsigned int > q_idx_vec)
Variant of the start_flux_assembly() method for a set of quantities.
std::vector< unsigned int > be_regions_
Maps local boundary edge to its region boundary index.
unsigned int n_loc_dofs_seq_
std::vector< double > sum_fluxes_out_
Balance(const std::string &file_prefix, const Mesh *mesh)
UnitSI units_
Units of conserved quantities.
const TimeGovernor * time_
void start_mass_assembly(std::vector< unsigned int > q_idx_vec)
Variant of the start_mass_assembly() method for a set of quantities.
std::string csv_zero_vals(unsigned int cnt, char delimiter)
Return part of output represented by zero values. Count of zero values is given by cnt parameter.
const unsigned int index_
Internal index within list of quantities.
TimeMark::Type balance_output_type_
TimeMark type for balance output of particular equation.
unsigned int add_quantity(const string &name)
std::vector< double > integrated_sources_
void format_csv_output_header(char delimiter, const std::string &comment_string)
Print output header.
std::vector< double > sum_sources_
void finish_source_assembly(unsigned int quantity_idx)
This method must be called after assembling the matrix and vectors for computing source.
Dedicated class for storing path to input and output files.
bool output_yaml_header_
marks whether YAML output has printed header
void start_flux_assembly(unsigned int quantity_idx)
std::vector< double > increment_fluxes_
unsigned int elem_idx() const
Returns index of element in Mesh::element_vec_.
bool cumulative() const
Getter for cumulative_.
void init_from_input(const Input::Record &in_rec, TimeGovernor &tg)
static bool do_yaml_output_
std::vector< Quantity > quantities_
Names of conserved quantities.
void units(const UnitSI &unit)
Setter for units of conserved quantities.
void add_flux_values(unsigned int quantity_idx, const DHCellSide &side, const LocDofVec &loc_dof_indices, const std::vector< double > &mat_values, double vec_value)
void finish_mass_assembly(std::vector< unsigned int > q_idx_vec)
Variant of the finish_mass_assembly() method for a set of quantities.
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_mass_assembly(unsigned int quantity_idx)
Vec * region_mass_vec_
Vectors for calculation of mass (n_bulk_regions).
Mat * be_flux_matrix_
Matrices for calculation of flux (n_boundary_edges x n_dofs).
void finish_mass_assembly(unsigned int quantity_idx)
This method must be called after assembling the matrix for computing mass.
Side accessor allows to iterate over sides of DOF handler cell.
string name_
Name of quantity (for output).
std::ofstream output_
Handle for file for output in given OutputFormat of balance and total fluxes over individual regions ...
void output_yaml(double time)
Perform output in yaml format.
Mat * region_mass_matrix_
Matrices for calculation of mass (n_dofs x n_bulk_regions).
bool balance_on_
If the balance is on. Balance is off in the case of no balance output time marks.
Provides the numbering of the finite element degrees of freedom on the computational mesh.
bool cumulative_
if true then cumulative balance is computed
std::vector< std::vector< double > > masses_
Basic time management functionality for unsteady (and steady) solvers (class Equation).
Vec * be_flux_vec_
Vectors for calculation of flux (n_boundary_edges).
std::vector< double > sum_fluxes_in_
Class for representation SI units of Fields.
std::vector< double > sum_masses_
std::vector< std::vector< double > > fluxes_
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 output_line_counter_
hold count of line printed into output_
void output()
Perform output to file for given time instant.
std::vector< double > initial_mass_
bool add_output_times_
Add output time marks to balance output time marks.
void calculate_mass(unsigned int quantity_idx, const Vec &solution, vector< double > &output_array)
unsigned int side_idx() const
Returns local index of the side on the element.
Mat * region_source_matrix_
Matrices for calculation of source (n_dofs x n_bulk_regions).
bool is_current()
Returns true if the current time step is marked for the balance output.
std::string format_csv_val(std::string val, char delimiter, bool initial=false)
Format string value of csv output. Wrap string into quotes and if delimiter is space,...
int LongIdx
Define type that represents indices of large arrays (elements, nodes, dofs etc.)
void calculate_cumulative(unsigned int quantity_idx, const Vec &solution)
OutputFormat output_format_
Format of output file.
std::vector< std::vector< double > > fluxes_in_
int be_offset_
Offset for local part of vector of boundary edges.
std::vector< std::vector< double > > sources_in_
void add_source_values(unsigned int quantity_idx, unsigned int region_idx, const LocDofVec &loc_dof_indices, const std::vector< double > &mult_mat_values, const std::vector< double > &add_mat_values)
std::vector< double > sum_fluxes_
std::vector< double > increment_sources_
std::string file_prefix_
Save prefix passed in in constructor.
double last_time_
time of last calculated balance
static void set_yaml_output()
Set global variable to output balance files into YAML format (in addition to the table format).
Cell accessor allow iterate over DOF handler cells.
void output_csv(double time, char delimiter, const std::string &comment_string, unsigned int repeat=0)
Perform output in csv format.
std::vector< std::vector< double > > fluxes_out_
static const Input::Type::Selection & get_format_selection_input_type()
Input selection for file format.
LongIdx get_boundary_edge_uid(SideIter side)
unsigned int n_loc_dofs_par_
Allocation parameters. Set by the allocate method used in the lazy_initialize.
Input::Record input_record_
Record for current balance.
TimeMark::Type output_mark_type_
TimeMark type for output of particular equation.
void start_source_assembly(unsigned int quantity_idx)
std::vector< double > sum_sources_in_
void finish_source_assembly(std::vector< unsigned int > q_idx_vec)
Variant of the finish_source_assembly() method for a set of quantities.
bool allocation_done_
true before allocating necessary internal structures (Petsc matrices etc.)
std::vector< double > sum_sources_out_
Quantity(const unsigned int index, const string &name)
FilePath balance_output_file_
File path for output_ stream.
std::ofstream output_yaml_
bool initial_
true before calculating the mass at initial time, otherwise false
unsigned int max_dofs_per_boundary_
void add_mass_values(unsigned int quantity_idx, const DHCellAccessor &dh_cell, const LocDofVec &loc_dof_indices, const std::vector< double > &mat_values, double vec_value)
void add_cumulative_source(unsigned int quantity_idx, double source)
void finish_flux_assembly(unsigned int quantity_idx)
This method must be called after assembling the matrix and vector for computing flux.
std::vector< double > integrated_fluxes_
Mat * region_source_rhs_
Matrices for calculation of signed source (n_dofs x n_bulk_regions).
std::vector< std::vector< double > > sources_out_
std::unordered_map< LongIdx, unsigned int > be_id_map_
static const Input::Type::Record & get_input_type()
Main balance input record type.
void output_legacy(double time)
Perform output in old format (for compatibility)
std::vector< unsigned int > add_quantities(const std::vector< string > &names)