Flow123d
release_3.0.0-973-g92f55e826
|
Go to the documentation of this file.
33 {
return db_->get_label(idx_); }
38 {
return db_->get_id(idx_); }
43 {
return db_->get_dim(idx_); }
47 for(
const Region ® : set)
48 if (reg.idx_ == this->idx_)
return true;
64 : closed_(false), n_boundary_(0), n_bulk_(0), max_id_(0) {
78 return Region(it_id->index, *
this);
102 THROW(ExcNonuniqueLabel() << EI_Label(label) << EI_ID(
id) << EI_IDOfOtherLabel(it_label->get_id()) );
110 OLD_ASSERT(reg.
is_valid(),
"Non-existing region can't be renamed to '%s'.\n", new_label.c_str());
115 if ( reg.
id() == it_label->index ) {
119 THROW(ExcNonuniqueLabel() << EI_Label(new_label) << EI_ID(reg.
id()) << EI_IDOfOtherLabel(it_label->get_id()) );
124 unsigned int index = reg.
idx();
130 RegionItem item(index, reg.
id(), new_label, reg.
dim(), this->get_region_address(index));
136 WarningOut().fmt(
"Change boundary flag of region with id {} and label {}.\n", reg.
id(), new_label);
137 if (old_boundary_flag) {
146 return Region(index, *
this);
154 return Region(it_id->index, *
this);
173 return Region(it_label->index, *
this);
184 return Region(it_id->index, *
this);
193 THROW( ExcUniqueRegionId() << EI_ID(
id ) );
197 return Region(it_id->index, *
this);
239 unsigned int index =
it->index;
277 RegionSetTable::iterator
it =
sets_.find(set_name);
281 set.push_back(region);
283 sets_.insert( std::make_pair(set_name, set) );
286 if ( std::find(set.begin(), set.end(), region)==set.end() ) {
287 set.push_back(region);
296 sets_.insert( std::make_pair(set_name, set) );
302 RegionSetTable::iterator
it =
sets_.find(set_name);
303 OLD_ASSERT(
it !=
sets_.end(),
"Region set '%s' doesn't exist.", set_name.c_str());
306 auto set_it = std::find(set.begin(), set.end(), region);
307 OLD_ASSERT(set_it != set.end(),
"Erased region was not found in set '%s'", set_name.c_str());
317 for (
string name : names) {
319 THROW( ExcUnknownSet() << EI_Label( name )
329 RegionSetTable::const_iterator
it =
sets_.find(set_name);
339 ss <<
"region_" << id;
344 if (
closed_)
THROW( ExcAddingIntoClosed() << EI_Label(label) << EI_ID(
id) );
356 THROW( ExcCantAdd() << EI_Label(label) << EI_ID(
id) );
364 region_set.push_back( reg );
378 "Dimension of replaced region with id=%u must be undefined_dim, actually is: %u\n", it_undef_dim->get_id(), it_undef_dim->dim());
380 unsigned int index = it_undef_dim->index;
382 RegionItem item(index, it_undef_dim->get_id(), it_undef_dim->label, dim, this->get_region_address(index));
390 THROW(ExcInconsistentBoundary() << EI_Label(it_undef_dim->label) << EI_ID(it_undef_dim->get_id()) );
396 unsigned int index = it_id->index;
399 THROW(ExcNonuniqueID() << EI_Label(label) << EI_ID(
id) << EI_LabelOfOtherID(it_id->label) );
404 THROW(ExcInconsistentBoundary() << EI_Label(label) << EI_ID(
id) );
414 for (RegionSetTable::const_iterator
it =
sets_.begin();
it !=
sets_.end(); ++
it) {
415 string rset_label =
it->first;
418 if ( (rset_label.size() > 0) && (rset_label[0] ==
'.') ) boundaries.push_back(rset_label);
419 else bulks.push_back(rset_label);
421 sets.push_back(rset_label);
427 stream <<
"----------- Table of all regions: -----------";
428 if (boundaries.size()) {
429 stream << endl <<
" - Boundary elementary regions -" << endl;
430 stream << std::setfill(
' ') <<
"name" << setw(14) <<
"" << setw(6) <<
"id" <<
" dim" << endl;
433 stream << std::left << setw(18) << (*it) << std::right << setw(6) << label_it->get_id() << setw(4) << label_it->dim() << endl;
437 stream << endl <<
" - Bulk elementary regions -" << endl;
438 stream <<
"name" << setw(14) <<
"" << setw(6) <<
"id" <<
" dim" << endl;
441 stream << std::left << setw(18) << (*it) << std::right << setw(6) << label_it->get_id() << setw(4) << label_it->dim() << endl;
445 stream << endl <<
" - Sets of regions -" << endl;
446 stream <<
"name" << setw(14) <<
"" <<
"contains regions" << endl;
448 RegionSetTable::const_iterator set_it =
sets_.find(*
it);
449 stream << std::left << setw(18) << (*it) << std::right <<
"[";
450 for (RegionSet::const_iterator r_it = set_it->second.begin(); r_it!=set_it->second.end(); ++r_it) {
451 if (r_it != set_it->second.begin()) stream <<
", ";
452 stream <<
"\"" << r_it->label() <<
"\"";
454 stream <<
"]" << endl;
457 stream << std::setfill(
'-') << setw(45) <<
"" << std::setfill(
' ') << endl << endl;
465 WarningOut().fmt(
"Too many regions are defined (bulk {} + boundary {} >= {}). This may have negative impact on performace.\n"
466 "The user is adviced to simplify the input data and to decrease the number of regions (e.g. using FieldFE input).\n",
474 WarningOut().fmt(
"Region [id = {}, label = '{}'] is not used in any element.",
475 it->get_id(),
it->label);
484 for (
string set_name : set_names) {
486 set.insert(r_set.begin(), r_set.end());
489 return RegionSet(set.begin(), set.end());
RegionTable::index< Label >::type::iterator LabelIter
static bool comp(const Region &a, const Region &b)
Comparative method of two regions.
std::string label() const
Returns label of the region (using RegionDB)
const std::string & get_label(unsigned int idx) const
Region insert_region(unsigned int id, const std::string &label, unsigned int dim, bool boundary, const std::string &address)
void swap(nlohmann::json &j1, nlohmann::json &j2) noexcept(is_nothrow_move_constructible< nlohmann::json >::value and is_nothrow_move_assignable< nlohmann::json >::value)
exchanges the values of two JSON objects
#define ASSERT(expr)
Allow use shorter versions of macro names if these names is not used with external library.
unsigned int size() const
bool is_valid() const
Returns false if the region has undefined/invalid value.
void mark_used_region(unsigned int idx)
#define THROW(whole_exception_expr)
Wrapper for throw. Saves the throwing point.
std::pair< unsigned int, unsigned int > DimID
RegionDB()
Default constructor.
Region get_region(unsigned int id, unsigned int dim)
unsigned int idx() const
Returns a global index of the region.
std::vector< Region > RegionSet
std::string create_label_from_id(unsigned int id) const
static const unsigned int undefined
index for undefined region
unsigned int id() const
Returns id of the region (using RegionDB)
unsigned int boundary_size() const
static const unsigned int undefined_dim
Region replace_region_dim(DimIDIter it_undef_dim, unsigned int dim, bool boundary)
bool is_in_region_set(const RegionSet &set) const
const std::string & get_region_address(unsigned int idx) const
One item in region database.
unsigned int bulk_size() const
bool is_boundary() const
Returns true if it is a Boundary region and false if it is a Bulk region.
unsigned int n_boundary_
Number of boundary regions.
RegionTable::index< OnlyID >::type::iterator OnlyIDIter
Region rename_region(Region reg, const std::string &new_label)
RegionSet get_region_set(const std::string &set_name) const
Region find_id(unsigned int id, unsigned int dim) const
bool closed_
flag for closed database, no regions can be added, but you can add region sets
void add_set(const std::string &set_name, const RegionSet &set)
std::vector< std::string > get_and_check_operands(const Input::Array &operands) const
void add_to_set(const std::string &set_name, Region region)
RegionSetTable sets_
Map of region sets.
RegionTable region_table_
Database of all regions (both boundary and bulk).
unsigned int dim() const
Returns dimension of the region.
Region implicit_boundary_region()
unsigned int max_id_
Maximal value of Region::id()
RegionTable::index< DimId >::type::iterator DimIDIter
unsigned int get_dim(unsigned int idx) const
Region find_by_dimid(DimIDIter it_id, unsigned int id, const std::string &label, bool boundary)
#define WarningOut()
Macro defining 'warning' record of log.
Region add_region(unsigned int id, const std::string &label, unsigned int dim, const std::string &address="implicit")
void print_region_table(std::ostream &stream) const
Region find_label(const std::string &label) const
static const unsigned int max_n_regions
unsigned int n_bulk_
Number of bulk regions.
bool is_boundary(const std::string &label)
void erase_from_set(const std::string &set_name, Region region)
RegionSet union_set(std::vector< std::string > set_names) const
unsigned int get_id(unsigned int idx) const