OGS
RasterParameter.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#pragma once
5
6#include "GeoLib/Raster.h"
7#include "Parameter.h"
8
9namespace ParameterLib
10{
11struct RasterParameter final : public Parameter<double>
12{
13 explicit RasterParameter(std::string const& name_,
14 GeoLib::NamedRaster const& named_raster)
15 : Parameter<double>(name_), _named_raster(named_raster)
16 {
17 }
18
19 bool isTimeDependent() const override { return false; }
20
21 int getNumberOfGlobalComponents() const override { return 1; }
22
23 std::vector<double> operator()(double const /*t*/,
24 SpatialPosition const& pos) const override
25 {
26 auto const& coordinates = pos.getCoordinates();
27 if (!coordinates)
28 {
29 OGS_FATAL("RasterParameter::operator(): couldn't get coordinates.");
30 }
31 auto const value = _named_raster.raster->getValueAtPoint(*coordinates);
32 return {value};
33 }
34
35 Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>
37 double const t) const override
38 {
39 auto const n_nodes = element.getNumberOfNodes();
40 Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> result(
42
43 SpatialPosition position;
44 auto const nodes = element.getNodes();
45 for (unsigned i = 0; i < n_nodes; ++i)
46 {
47 position.setCoordinates(*(nodes[i]));
48 auto const& values = this->operator()(t, position);
49 result.row(i) =
50 Eigen::Map<Eigen::Matrix<double, Eigen::Dynamic, 1> const>(
51 values.data(), values.size());
52 }
53
54 return result;
55 }
56
57private:
59};
60
61std::unique_ptr<ParameterBase> createRasterParameter(
62 std::string const& name, BaseLib::ConfigTree const& config,
63 std::vector<GeoLib::NamedRaster> const& named_rasters);
64
65} // namespace ParameterLib
#define OGS_FATAL(...)
Definition Error.h:19
virtual unsigned getNumberOfNodes() const =0
virtual Node *const * getNodes() const =0
Get array of element nodes.
void setCoordinates(MathLib::Point3d const &coordinates)
std::optional< MathLib::Point3d > const getCoordinates() const
std::unique_ptr< ParameterBase > createRasterParameter(std::string const &name, BaseLib::ConfigTree const &config, std::vector< GeoLib::NamedRaster > const &named_rasters)
std::vector< double > operator()(double const, SpatialPosition const &pos) const override
Returns the parameter value at the given time and position.
int getNumberOfGlobalComponents() const override
bool isTimeDependent() const override
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > getNodalValuesOnElement(MeshLib::Element const &element, double const t) const override
Returns a matrix of values for all nodes of the given element.
GeoLib::NamedRaster const & _named_raster
RasterParameter(std::string const &name_, GeoLib::NamedRaster const &named_raster)