Skip to content
Snippets Groups Projects
Commit fa640fde authored by Tom Fischer's avatar Tom Fischer
Browse files

[ParameterLib] Impl RasterParameter

parent e850ec25
No related branches found
No related tags found
No related merge requests found
/**
* \file
* \copyright
* Copyright (c) 2012-2023, OpenGeoSys Community (http://www.opengeosys.org)
* Distributed under a Modified BSD License.
* See accompanying file LICENSE.txt or
* http://www.opengeosys.org/project/license
*
*/
#include "RasterParameter.h"
#include "BaseLib/ConfigTree.h"
#include "BaseLib/Error.h"
#include "BaseLib/Logging.h"
namespace ParameterLib
{
std::unique_ptr<ParameterBase> createRasterParameter(
std::string const& name, BaseLib::ConfigTree const& config,
std::vector<GeoLib::NamedRaster> const& named_rasters)
{
//! \ogs_file_param{prj__parameters__parameter__type}
config.checkConfigParameter("type", "Raster");
auto const& named_raster = BaseLib::getIfOrError(
named_rasters,
[&name](auto const& named_raster)
{ return name == named_raster.raster_name; },
"Could not find raster '" + name);
DBUG("Using the raster '{}' for the raster parameter.", name);
return std::make_unique<RasterParameter>(name, named_raster);
}
} // namespace ParameterLib
/**
* \file
* \copyright
* Copyright (c) 2012-2023, OpenGeoSys Community (http://www.opengeosys.org)
* Distributed under a Modified BSD License.
* See accompanying file LICENSE.txt or
* http://www.opengeosys.org/project/license
*
*/
#pragma once
#include "GeoLib/Raster.h"
#include "Parameter.h"
namespace ParameterLib
{
struct RasterParameter final : public Parameter<double>
{
explicit RasterParameter(std::string const& name_,
GeoLib::NamedRaster const& named_raster)
: Parameter<double>(name_), _named_raster(named_raster)
{
}
bool isTimeDependent() const override { return false; }
int getNumberOfGlobalComponents() const override { return 1; }
std::vector<double> operator()(double const /*t*/,
SpatialPosition const& pos) const override
{
auto const& coordinates = pos.getCoordinates();
if (!coordinates)
{
OGS_FATAL("RasterParameter::operator(): couldn't get coordinates.");
}
auto const value = _named_raster.raster.getValueAtPoint(*coordinates);
return {value};
}
Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>
getNodalValuesOnElement(MeshLib::Element const& element,
double const t) const override
{
auto const n_nodes = element.getNumberOfNodes();
Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> result(
n_nodes, getNumberOfGlobalComponents());
SpatialPosition position;
auto const nodes = element.getNodes();
for (unsigned i = 0; i < n_nodes; ++i)
{
position.setCoordinates(*(nodes[i]));
auto const& values = this->operator()(t, position);
result.row(i) =
Eigen::Map<Eigen::Matrix<double, Eigen::Dynamic, 1> const>(
values.data(), values.size());
}
return result;
}
private:
GeoLib::NamedRaster const& _named_raster;
};
std::unique_ptr<ParameterBase> createRasterParameter(
std::string const& name, BaseLib::ConfigTree const& config,
std::vector<GeoLib::NamedRaster> const& named_rasters);
} // namespace ParameterLib
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment