OGS
Project.cpp
Go to the documentation of this file.
1 
11 #include "Project.h"
12 
13 #include <algorithm>
14 
15 #include "BaseLib/Algorithm.h"
16 #include "BaseLib/FileTools.h"
17 #include "MeshLib/Mesh.h"
18 
19 namespace DataHolderLib
20 {
21 void Project::addMesh(std::unique_ptr<MeshLib::Mesh> mesh)
22 {
23  std::string name = mesh->getName();
25  mesh->setName(name);
26  _mesh_vec.push_back(std::move(mesh));
27 }
28 
29 std::vector<std::unique_ptr<MeshLib::Mesh>>::const_iterator
30 Project::findMeshByName(std::string const& name) const
31 {
32  return const_cast<Project&>(*this).findMeshByName(name);
33 }
34 
35 std::vector<std::unique_ptr<MeshLib::Mesh>>::iterator Project::findMeshByName(
36  std::string const& name)
37 {
38  return std::find_if(_mesh_vec.begin(), _mesh_vec.end(),
39  [&name](std::unique_ptr<MeshLib::Mesh>& mesh)
40  { return mesh && (name == mesh->getName()); });
41 }
42 
43 const MeshLib::Mesh* Project::getMesh(const std::string& name) const
44 {
45  auto it = findMeshByName(name);
46  return (it == _mesh_vec.end() ? nullptr : it->get());
47 }
48 
49 bool Project::removeMesh(const std::string& name)
50 {
51  auto it = findMeshByName(name);
52  if (it != _mesh_vec.end())
53  {
54  delete it->release();
55  _mesh_vec.erase(it);
56  return true;
57  }
58  return false;
59 }
60 
61 bool Project::getUniqueName(std::string& name) const
62 {
63  int count(0);
64  bool isUnique(false);
65  std::string cpName;
66 
67  while (!isUnique)
68  {
69  isUnique = true;
70  cpName = name;
71 
72  count++;
73  // If the original name already exists we start to add numbers to name
74  // for as long as it takes to make the name unique.
75  if (count > 1)
76  {
77  cpName = cpName + "-" + std::to_string(count);
78  }
79 
80  for (auto& mesh : _mesh_vec)
81  {
82  if (cpName == mesh->getName())
83  {
84  isUnique = false;
85  }
86  }
87  }
88 
89  // At this point cpName is a unique name and isUnique is true.
90  // If cpName is not the original name, "name" is changed and isUnique is set
91  // to false, indicating that a vector with the original name already exists.
92  if (count > 1)
93  {
94  isUnique = false;
95  name = cpName;
96  }
97  return isUnique;
98 }
99 
100 void Project::removePrimaryVariable(std::string const& primary_var_name)
101 {
102  std::size_t const n_bc(_boundary_conditions.size());
103  for (int i = n_bc - 1; i >= 0; --i)
104  {
105  if (_boundary_conditions[i]->getProcessVarName() == primary_var_name)
106  {
107  removeBoundaryCondition(primary_var_name,
108  _boundary_conditions[i]->getParamName());
109  }
110  }
111 
112  std::size_t const n_st(_source_terms.size());
113  for (int i = n_st - 1; i >= 0; --i)
114  {
115  if (_source_terms[i]->getProcessVarName() == primary_var_name)
116  {
117  removeSourceTerm(primary_var_name,
118  _source_terms[i]->getParamName());
119  }
120  }
121 }
122 
123 void Project::removeBoundaryCondition(std::string const& primary_var_name,
124  std::string const& param_name)
125 {
126  std::size_t const n_bc(_boundary_conditions.size());
127  for (std::size_t i = 0; i < n_bc; ++i)
128  {
129  if (_boundary_conditions[i]->getProcessVarName() == primary_var_name &&
130  _boundary_conditions[i]->getParamName() == param_name)
131  {
132  _boundary_conditions[i].reset();
133  _boundary_conditions.erase(_boundary_conditions.begin() + i);
134  return;
135  }
136  }
137 }
138 
139 void Project::removeSourceTerm(std::string const& primary_var_name,
140  std::string const& param_name)
141 {
142  std::size_t const n_st(_source_terms.size());
143  for (std::size_t i = 0; i < n_st; ++i)
144  {
145  if (_source_terms[i]->getProcessVarName() == primary_var_name &&
146  _source_terms[i]->getParamName() == param_name)
147  {
148  _source_terms[i].reset();
149  _source_terms.erase(_source_terms.begin() + i);
150  return;
151  }
152  }
153 }
154 
155 } // namespace DataHolderLib
Filename manipulation routines.
Definition of the Mesh class.
void removeSourceTerm(std::string const &primary_var_name, std::string const &param_name)
Remove one source term.
Definition: Project.cpp:139
bool removeMesh(const std::string &name)
Definition: Project.cpp:49
std::vector< std::unique_ptr< SourceTerm > > _source_terms
Definition: Project.h:118
void addMesh(std::unique_ptr< MeshLib::Mesh > mesh)
Definition: Project.cpp:21
void removePrimaryVariable(std::string const &primary_var_name)
Removes a primary variable incl. all associated conditions.
Definition: Project.cpp:100
const MeshLib::Mesh * getMesh(const std::string &name) const
Definition: Project.cpp:43
std::vector< std::unique_ptr< MeshLib::Mesh > >::const_iterator findMeshByName(std::string const &name) const
Returns an iterator to the first found mesh with the given name.
Definition: Project.cpp:30
void removeBoundaryCondition(std::string const &primary_var_name, std::string const &param_name)
Removes one boundary condition.
Definition: Project.cpp:123
bool getUniqueName(std::string &name) const
Definition: Project.cpp:61
std::vector< std::unique_ptr< BoundaryCondition > > _boundary_conditions
Definition: Project.h:117
std::vector< std::unique_ptr< MeshLib::Mesh > > _mesh_vec
Definition: Project.h:116