Loading [MathJax]/extensions/tex2jax.js
OGS
anonymous_namespace{ProjectData.cpp} Namespace Reference

Functions

void readGeometry (std::string const &fname, GeoLib::GEOObjects &geo_objects, std::string const &dir_first, std::string const &dir_second)
 
std::unique_ptr< MeshLib::MeshreadSingleMesh (BaseLib::ConfigTree const &mesh_config_parameter, std::string const &directory)
 
std::vector< std::unique_ptr< MeshLib::Mesh > > readMeshes (BaseLib::ConfigTree const &config, std::string const &directory, std::string const &project_directory)
 
std::vector< GeoLib::NamedRasterreadRasters (BaseLib::ConfigTree const &config, std::string const &raster_directory, GeoLib::MinMaxPoints const &min_max_points)
 

Function Documentation

◆ readGeometry()

void anonymous_namespace{ProjectData.cpp}::readGeometry ( std::string const & fname,
GeoLib::GEOObjects & geo_objects,
std::string const & dir_first,
std::string const & dir_second )

Definition at line 165 of file ProjectData.cpp.

167{
168 DBUG("Reading geometry file '{:s}'.", fname);
169 GeoLib::IO::BoostXmlGmlInterface gml_reader(geo_objects);
170 std::string geometry_file = BaseLib::joinPaths(dir_first, fname);
171 if (!BaseLib::IsFileExisting(geometry_file))
172 {
173 // Fallback to reading gml from prj-file directory
174 geometry_file = BaseLib::joinPaths(dir_second, fname);
175 WARN("File {:s} not found in {:s}! Trying reading from {:s}.", fname,
176 dir_first, dir_second);
177 if (!BaseLib::IsFileExisting(geometry_file))
178 {
179 OGS_FATAL("Could not read geometry file {:s} in {:s}.", fname,
180 dir_second);
181 }
182 }
183 gml_reader.readFile(geometry_file);
184}
#define OGS_FATAL(...)
Definition Error.h:26
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:30
void WARN(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:40
bool IsFileExisting(const std::string &strFilename)
Returns true if given file exists.
Definition FileTools.cpp:50
std::string joinPaths(std::string const &pathA, std::string const &pathB)

References DBUG(), BaseLib::IsFileExisting(), BaseLib::joinPaths(), OGS_FATAL, GeoLib::IO::BoostXmlGmlInterface::readFile(), and WARN().

Referenced by readMeshes().

◆ readMeshes()

std::vector< std::unique_ptr< MeshLib::Mesh > > anonymous_namespace{ProjectData.cpp}::readMeshes ( BaseLib::ConfigTree const & config,
std::string const & directory,
std::string const & project_directory )
Input File Parameter
prj__meshes
Input File Parameter
prj__meshes__mesh
Input File Parameter
prj__geometry
Input File Parameter
prj__mesh
Input File Parameter
prj__geometry
Input File Parameter
prj__zero_mesh_field_data_by_material_ids

Definition at line 233 of file ProjectData.cpp.

236{
237 std::vector<std::unique_ptr<MeshLib::Mesh>> meshes;
238
239 GeoLib::GEOObjects geoObjects;
240
242 auto optional_meshes = config.getConfigSubtreeOptional("meshes");
243 if (optional_meshes)
244 {
245 DBUG("Reading multiple meshes.");
247 auto const configs = optional_meshes->getConfigParameterList("mesh");
248 std::transform(configs.begin(), configs.end(),
249 std::back_inserter(meshes),
250 [&directory](auto const& mesh_config)
251 { return readSingleMesh(mesh_config, directory); });
252 if (auto const geometry_file_name =
254 config.getConfigParameterOptional<std::string>("geometry"))
255 {
256 readGeometry(*geometry_file_name, geoObjects, directory,
257 project_directory);
258 }
259 }
260 else
261 { // Read single mesh with geometry.
262 meshes.push_back(
264 readSingleMesh(config.getConfigParameter("mesh"), directory));
265
266 auto const geometry_file_name =
268 config.getConfigParameter<std::string>("geometry");
269 readGeometry(geometry_file_name, geoObjects, directory,
270 project_directory);
271 }
272
273 if (!geoObjects.getPoints().empty() || !geoObjects.getPolylines().empty() ||
274 !geoObjects.getSurfaces().empty())
275 { // generate meshes from geometries
276 std::unique_ptr<MeshGeoToolsLib::SearchLength> search_length_algorithm =
278 bool const multiple_nodes_allowed = false;
279 auto additional_meshes =
281 geoObjects, *meshes[0], std::move(search_length_algorithm),
282 multiple_nodes_allowed);
283
284 std::move(begin(additional_meshes), end(additional_meshes),
285 std::back_inserter(meshes));
286 }
287
288 auto mesh_names = MeshLib::views::names | ranges::to<std::vector>() |
289 ranges::actions::sort;
290 auto const sorted_names = meshes | mesh_names;
291 auto const unique_names = meshes | mesh_names | ranges::actions::unique;
292 if (unique_names.size() < sorted_names.size())
293 {
294 WARN(
295 "Mesh names aren't unique. From project file read mesh names are:");
296 for (auto const& name : meshes | MeshLib::views::names)
297 {
298 INFO("- {}", name);
299 }
300 }
301
302 auto const zero_mesh_field_data_by_material_ids =
304 config.getConfigParameterOptional<std::vector<int>>(
305 "zero_mesh_field_data_by_material_ids");
306 if (zero_mesh_field_data_by_material_ids)
307 {
308 WARN(
309 "Tag 'zero_mesh_field_data_by_material_ids` is experimental. Its "
310 "name may be changed, or it may be removed due to its "
311 "corresponding feature becomes a single tool. Please use it with "
312 "care!");
314 *meshes[0], *zero_mesh_field_data_by_material_ids);
315 }
316
318
319 return meshes;
320}
void INFO(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:35
Container class for geometric objects.
Definition GEOObjects.h:57
std::vector< PolylineVec * > const & getPolylines() const
Read access to polylines w/o using a name.
Definition GEOObjects.h:299
std::vector< PointVec * > const & getPoints() const
Read access to points w/o using a name.
Definition GEOObjects.h:297
std::vector< SurfaceVec * > const & getSurfaces() const
Read access to surfaces w/o using a name.
Definition GEOObjects.h:301
std::unique_ptr< MeshGeoToolsLib::SearchLength > createSearchLengthAlgorithm(BaseLib::ConfigTree const &external_config, MeshLib::Mesh const &mesh)
std::vector< std::unique_ptr< MeshLib::Mesh > > constructAdditionalMeshesFromGeoObjects(GeoLib::GEOObjects const &geo_objects, MeshLib::Mesh const &mesh, std::unique_ptr< SearchLength > search_length_algorithm, bool const multiple_nodes_allowed)
constexpr ranges::views::view_closure names
For an element of a range view return its name.
Definition Mesh.h:231
void setMeshSpaceDimension(std::vector< std::unique_ptr< Mesh > > const &meshes)
void zeroMeshFieldDataByMaterialIDs(MeshLib::Mesh &mesh, std::vector< int > const &selected_material_ids)
void readGeometry(std::string const &fname, GeoLib::GEOObjects &geo_objects, std::string const &dir_first, std::string const &dir_second)
std::unique_ptr< MeshLib::Mesh > readSingleMesh(BaseLib::ConfigTree const &mesh_config_parameter, std::string const &directory)

References MeshGeoToolsLib::constructAdditionalMeshesFromGeoObjects(), MeshGeoToolsLib::createSearchLengthAlgorithm(), DBUG(), BaseLib::ConfigTree::getConfigParameter(), BaseLib::ConfigTree::getConfigParameterOptional(), BaseLib::ConfigTree::getConfigSubtreeOptional(), GeoLib::GEOObjects::getPoints(), GeoLib::GEOObjects::getPolylines(), GeoLib::GEOObjects::getSurfaces(), INFO(), MeshLib::views::names, readGeometry(), readSingleMesh(), MeshLib::setMeshSpaceDimension(), WARN(), and MeshToolsLib::zeroMeshFieldDataByMaterialIDs().

◆ readRasters()

std::vector< GeoLib::NamedRaster > anonymous_namespace{ProjectData.cpp}::readRasters ( BaseLib::ConfigTree const & config,
std::string const & raster_directory,
GeoLib::MinMaxPoints const & min_max_points )
Input File Parameter
prj__rasters
Input File Parameter
prj__rasters__raster

Definition at line 322 of file ProjectData.cpp.

325{
326 INFO("readRasters ...");
327 std::vector<GeoLib::NamedRaster> named_rasters;
328
330 auto optional_rasters = config.getConfigSubtreeOptional("rasters");
331 if (optional_rasters)
332 {
334 auto const configs = optional_rasters->getConfigSubtreeList("raster");
335 std::transform(
336 configs.begin(), configs.end(), std::back_inserter(named_rasters),
337 [&raster_directory, &min_max_points](auto const& raster_config)
338 {
339 return GeoLib::IO::readRaster(raster_config, raster_directory,
340 min_max_points);
341 });
342 }
343 INFO("readRasters done");
344 return named_rasters;
345}

References BaseLib::ConfigTree::getConfigSubtreeOptional(), and INFO().

◆ readSingleMesh()

std::unique_ptr< MeshLib::Mesh > anonymous_namespace{ProjectData.cpp}::readSingleMesh ( BaseLib::ConfigTree const & mesh_config_parameter,
std::string const & directory )
Input File Parameter
prj__meshes__mesh__axially_symmetric
Input File Parameter
prj__mesh__axially_symmetric

Definition at line 186 of file ProjectData.cpp.

189{
190 std::string const mesh_file = BaseLib::joinPaths(
191 directory, mesh_config_parameter.getValue<std::string>());
192 DBUG("Reading mesh file '{:s}'.", mesh_file);
193
194 auto mesh = std::unique_ptr<MeshLib::Mesh>(MeshLib::IO::readMeshFromFile(
195 mesh_file, true /* compute_element_neighbors */));
196 if (!mesh)
197 {
198 std::filesystem::path abspath{mesh_file};
199 try
200 {
201 abspath = std::filesystem::absolute(mesh_file);
202 }
203 catch (std::filesystem::filesystem_error const& e)
204 {
205 ERR("Determining the absolute path of '{}' failed: {}", mesh_file,
206 e.what());
207 }
208
209 OGS_FATAL("Could not read mesh from '{:s}' file. No mesh added.",
210 abspath.string());
211 }
212
213#ifdef DOXYGEN_DOCU_ONLY
215 mesh_config_parameter.getConfigAttributeOptional<bool>("axially_symmetric");
216#endif // DOXYGEN_DOCU_ONLY
217
218 if (auto const axially_symmetric =
220 mesh_config_parameter.getConfigAttributeOptional<bool>(
221 "axially_symmetric"))
222 {
223 mesh->setAxiallySymmetric(*axially_symmetric);
224 if (mesh->getDimension() == 3 && mesh->isAxiallySymmetric())
225 {
226 OGS_FATAL("3D mesh cannot be axially symmetric.");
227 }
228 }
229
230 return mesh;
231}
void ERR(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:45
MeshLib::Mesh * readMeshFromFile(const std::string &file_name, bool const compute_element_neighbors)

References DBUG(), ERR(), BaseLib::ConfigTree::getConfigAttributeOptional(), BaseLib::ConfigTree::getValue(), BaseLib::joinPaths(), OGS_FATAL, and MeshLib::IO::readMeshFromFile().

Referenced by readMeshes().