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

[PL/HT] Use PorousMediaProperties from MaterialLib.

parent 79778f40
No related branches found
No related tags found
No related merge requests found
......@@ -10,12 +10,12 @@
#include "CreateHTProcess.h"
#include "MaterialLib/Fluid/FluidProperties/CreateFluidProperties.h"
#include "MaterialLib/PorousMedium/CreatePorousMediaProperties.h"
#include "ProcessLib/Parameter/ConstantParameter.h"
#include "ProcessLib/Utils/ParseSecondaryVariables.h"
#include "ProcessLib/Utils/ProcessUtils.h"
#include "CreatePorousMediaProperties.h"
#include "HTProcess.h"
#include "HTProcessData.h"
......@@ -52,8 +52,9 @@ std::unique_ptr<Process> createHTProcess(
auto const& porous_medium_configs =
//! \ogs_file_param{prj__processes__process__HT__porous_medium}
config.getConfigSubtree("porous_medium");
PorousMediaProperties porous_media_properties{
createPorousMediaProperties(mesh, porous_medium_configs)};
MaterialLib::PorousMedium::PorousMediaProperties porous_media_properties{
MaterialLib::PorousMedium::createPorousMediaProperties(
mesh, porous_medium_configs)};
//! \ogs_file_param{prj__processes__process__HT__fluid}
auto const& fluid_config = config.getConfigSubtree("fluid");
......
/**
* \file
*
* \copyright
* Copyright (c) 2012-2017, 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 "CreatePorousMediaProperties.h"
#include "BaseLib/reorderVector.h"
#include "MaterialLib/PorousMedium/Permeability/createPermeabilityModel.h"
#include "MaterialLib/PorousMedium/Porosity/createPorosityModel.h"
#include "MaterialLib/PorousMedium/Storage/createStorageModel.h"
#include "MeshLib/Mesh.h"
namespace ProcessLib
{
namespace HT
{
PorousMediaProperties createPorousMediaProperties(
MeshLib::Mesh& mesh, BaseLib::ConfigTree const& porous_medium_configs)
{
DBUG("Create PorousMediaProperties.");
std::vector<Eigen::MatrixXd> intrinsic_permeability_models;
std::vector<std::unique_ptr<MaterialLib::PorousMedium::Porosity>>
porosity_models;
std::vector<std::unique_ptr<MaterialLib::PorousMedium::Storage>>
storage_models;
std::vector<int> mat_ids;
for (auto const& porous_medium_config :
//! \ogs_file_param{prj__processes__process__HT__porous_medium__porous_medium}
porous_medium_configs.getConfigSubtreeList("porous_medium"))
{
//! \ogs_file_attr{prj__processes__process__HT__porous_medium__porous_medium__id}
auto const id = porous_medium_config.getConfigAttribute<int>("id");
mat_ids.push_back(id);
auto const& porosity_conf =
//! \ogs_file_param{prj__processes__process__HT__porous_medium__porous_medium__porosity}
porous_medium_config.getConfigSubtree("porosity");
porosity_models.emplace_back(
MaterialLib::PorousMedium::createPorosityModel(porosity_conf));
// Parameter for the intrinsic permeability (only one scalar per
// element,
// i.e., the isotropic case is handled at the moment)
auto const& permeability_conf =
//! \ogs_file_param{prj__processes__process__HT__porous_medium__porous_medium__permeability}
porous_medium_config.getConfigSubtree("permeability");
intrinsic_permeability_models.emplace_back(
MaterialLib::PorousMedium::createPermeabilityModel(
permeability_conf));
// Parameter for the specific storage.
auto const& storage_conf =
//! \ogs_file_param{prj__processes__process__HT__porous_medium__porous_medium__storage}
porous_medium_config.getConfigSubtree("storage");
storage_models.emplace_back(
MaterialLib::PorousMedium::createStorageModel(storage_conf));
}
BaseLib::reorderVector(intrinsic_permeability_models, mat_ids);
BaseLib::reorderVector(porosity_models, mat_ids);
BaseLib::reorderVector(storage_models, mat_ids);
std::vector<int> material_ids(mesh.getNumberOfElements());
if (mesh.getProperties().existsPropertyVector<int>("MaterialIDs"))
{
auto const& mesh_material_ids =
mesh.getProperties().getPropertyVector<int>("MaterialIDs");
material_ids.reserve(mesh_material_ids->size());
std::copy(mesh_material_ids->cbegin(), mesh_material_ids->cend(),
material_ids.begin());
}
return PorousMediaProperties{std::move(porosity_models),
std::move(intrinsic_permeability_models),
std::move(storage_models),
std::move(material_ids)};
}
} // namespace HT
} // namespace ProcessLib
/**
* \file
*
* \copyright
* Copyright (c) 2012-2017, 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 "BaseLib/ConfigTree.h"
#include "PorousMediaProperties.h"
namespace MeshLib
{
class Mesh;
}
namespace ProcessLib
{
namespace HT
{
PorousMediaProperties createPorousMediaProperties(
MeshLib::Mesh& mesh, BaseLib::ConfigTree const& porous_media_config);
}
}
......@@ -13,7 +13,7 @@
#include <utility>
#include "MaterialLib/Fluid/FluidProperties/FluidProperties.h"
#include "PorousMediaProperties.h"
#include "MaterialLib/PorousMedium/PorousMediaProperties.h"
namespace ProcessLib
{
......@@ -25,7 +25,8 @@ namespace HT
struct HTProcessData
{
HTProcessData(
PorousMediaProperties&& porous_media_properties_,
MaterialLib::PorousMedium::PorousMediaProperties&&
porous_media_properties_,
ProcessLib::Parameter<double> const& density_solid_,
ProcessLib::Parameter<double> const& fluid_reference_density_,
std::unique_ptr<MaterialLib::Fluid::FluidProperties>&&
......@@ -77,7 +78,7 @@ struct HTProcessData
//! Assignments are not needed.
void operator=(HTProcessData&&) = delete;
PorousMediaProperties porous_media_properties;
MaterialLib::PorousMedium::PorousMediaProperties porous_media_properties;
Parameter<double> const& density_solid;
Parameter<double> const& fluid_reference_density;
std::unique_ptr<MaterialLib::Fluid::FluidProperties> fluid_properties;
......
/**
* \file
*
* \copyright
* Copyright (c) 2012-2017, 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 "PorousMediaProperties.h"
namespace ProcessLib
{
namespace HT
{
int PorousMediaProperties::getMaterialID(SpatialPosition const& pos) const
{
int const element_id = pos.getElementID().get();
return _material_ids[element_id];
}
MaterialLib::PorousMedium::Porosity const& PorousMediaProperties::getPorosity(
double /*t*/, SpatialPosition const& pos) const
{
return *_porosity_models[getMaterialID(pos)];
}
Eigen::MatrixXd const& PorousMediaProperties::getIntrinsicPermeability(
double /*t*/, SpatialPosition const& pos) const
{
return _intrinsic_permeability_models[getMaterialID(pos)];
}
MaterialLib::PorousMedium::Storage const&
PorousMediaProperties::getSpecificStorage(double /*t*/,
SpatialPosition const& pos) const
{
return *_specific_storage_models[getMaterialID(pos)];
}
}
}
/**
* \file
*
* \copyright
* Copyright (c) 2012-2017, 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 <memory>
#include <vector>
#include <Eigen/Dense>
#include "BaseLib/reorderVector.h"
#include "MaterialLib/PorousMedium/Porosity/Porosity.h"
#include "MaterialLib/PorousMedium/Storage/Storage.h"
#include "ProcessLib/Parameter/SpatialPosition.h"
namespace ProcessLib
{
namespace HT
{
class PorousMediaProperties
{
public:
PorousMediaProperties(
std::vector<std::unique_ptr<MaterialLib::PorousMedium::Porosity>>&&
porosity_models,
std::vector<Eigen::MatrixXd>&& intrinsic_permeability_models,
std::vector<std::unique_ptr<MaterialLib::PorousMedium::Storage>>&&
specific_storage_models,
std::vector<int>&& material_ids)
: _porosity_models(std::move(porosity_models)),
_intrinsic_permeability_models(
std::move(intrinsic_permeability_models)),
_specific_storage_models(std::move(specific_storage_models)),
_material_ids(std::move(material_ids))
{
}
PorousMediaProperties(PorousMediaProperties&& other)
: _porosity_models(std::move(other._porosity_models)),
_intrinsic_permeability_models(other._intrinsic_permeability_models),
_specific_storage_models(std::move(other._specific_storage_models)),
_material_ids(other._material_ids)
{
}
MaterialLib::PorousMedium::Porosity const& getPorosity(
double t, SpatialPosition const& pos) const;
Eigen::MatrixXd const& getIntrinsicPermeability(double t,
SpatialPosition const& pos) const;
MaterialLib::PorousMedium::Storage const& getSpecificStorage(
double t, SpatialPosition const& pos) const;
private:
int getMaterialID(SpatialPosition const& pos) const;
private:
std::vector<std::unique_ptr<MaterialLib::PorousMedium::Porosity>>
_porosity_models;
std::vector<Eigen::MatrixXd> _intrinsic_permeability_models;
std::vector<std::unique_ptr<MaterialLib::PorousMedium::Storage>>
_specific_storage_models;
std::vector<int> _material_ids;
};
}
}
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