Skip to content

Commit

Permalink
[MaterialLib/PorousMedium] Use parameter in Porosity impl.
Browse files Browse the repository at this point in the history
  • Loading branch information
TomFischer committed Nov 20, 2017
1 parent e55152b commit 92e9c3b
Show file tree
Hide file tree
Showing 32 changed files with 116 additions and 105 deletions.
3 changes: 2 additions & 1 deletion MaterialLib/PorousMedium/CreatePorousMediaProperties.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ PorousMediaProperties createPorousMediaProperties(
//! \ogs_file_param{material__porous_medium__porous_medium__porosity}
porous_medium_config.getConfigSubtree("porosity");
porosity_models.emplace_back(
MaterialLib::PorousMedium::createPorosityModel(porosity_config));
MaterialLib::PorousMedium::createPorosityModel(porosity_config,
parameters));

// Configuration for the intrinsic permeability (only one scalar per
// element, i.e., the isotropic case is handled at the moment)
Expand Down
43 changes: 0 additions & 43 deletions MaterialLib/PorousMedium/Porosity/ConstantPorosity.h

This file was deleted.

28 changes: 23 additions & 5 deletions MaterialLib/PorousMedium/Porosity/Porosity.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,23 +14,41 @@

#include <string>

#include "ProcessLib/Parameter/Parameter.h"

namespace MaterialLib
{
namespace PorousMedium
{
class Porosity
{
public:
explicit Porosity(
ProcessLib::Parameter<double> const& parameter)
: _parameter(parameter)
{
}
virtual ~Porosity() = default;

/**
* Get property value.
* @param variable A variable that can be saturation, or an invariant
* of stress or strain.
* @param temperature Temperature.
* @param t point in time
* @param pos spatial position
* @param variable A variable with any double type value.
* @param temperature Temperature with any double type value.
*/
virtual double getValue(const double variable,
const double temperature) const = 0;
virtual double getValue(const double t,
ProcessLib::SpatialPosition const& pos,
const double variable,
const double temperature) const
{
(void)variable;
(void)temperature;
return _parameter(t, pos)[0];
}

private:
ProcessLib::Parameter<double> const& _parameter;
};

} // end of namespace
Expand Down
20 changes: 14 additions & 6 deletions MaterialLib/PorousMedium/Porosity/createPorosityModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,25 +15,33 @@
#include "BaseLib/Error.h"
#include "BaseLib/ConfigTree.h"

#include "ProcessLib/Utils/ProcessUtils.h"

#include "Porosity.h"
#include "ConstantPorosity.h"

namespace MaterialLib
{
namespace PorousMedium
{
std::unique_ptr<Porosity> createPorosityModel(BaseLib::ConfigTree const& config)
std::unique_ptr<Porosity> createPorosityModel(BaseLib::ConfigTree const& config,
std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters)
{
//! \ogs_file_param{material__porous_medium__porosity__type}
auto const type = config.getConfigParameter<std::string>("type");

if (type == "Constant")
return std::make_unique<ConstantPorosity>(
//! \ogs_file_param{material__porous_medium__porosity__Constant__value}
config.getConfigParameter<double>("value"));
{
auto const& constant_porosity = ProcessLib::findParameter<double>(
config,
//! \ogs_file_param_special{material__porous_medium__porosity__porosity_parameter}
"porosity_parameter", parameters, 1);

return std::make_unique<Porosity>(constant_porosity);
}

OGS_FATAL("The porosity type %s is unavailable.\n",
"The available type is \n\tConstant.", type.data());
"The available type is Constant.",
type.data());
}

} // end namespace
Expand Down
8 changes: 6 additions & 2 deletions MaterialLib/PorousMedium/Porosity/createPorosityModel.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#pragma once

#include <memory>
#include "ProcessLib/Parameter/Parameter.h"

namespace BaseLib
{
Expand All @@ -26,10 +27,13 @@ namespace PorousMedium
class Porosity;

/** Create a porosity model
* @param config ConfigTree object has a tag of `<porosity>`
* @param config ConfigTree object has a tag of `<porosity>` that describes
* the porosity relationsship and contains the name of the parameter
* @param parameters a vector containing the available parameters
*/
std::unique_ptr<Porosity> createPorosityModel(
BaseLib::ConfigTree const& config);
BaseLib::ConfigTree const& config,
std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters);

} // end namespace
} // end namespace
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ std::tuple<std::unique_ptr<TwoPhaseFlowWithPPMaterialProperties>,
BaseLib::ConfigTree>
createTwoPhaseFlowMaterialProperties(
BaseLib::ConfigTree const& config,
MeshLib::PropertyVector<int> const& material_ids)
MeshLib::PropertyVector<int> const& material_ids,
std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters)
{
DBUG("Reading material properties of two-phase flow process.");

Expand Down Expand Up @@ -87,7 +88,8 @@ createTwoPhaseFlowMaterialProperties(

//! \ogs_file_param{material__twophase_flow__material_property__porous_medium__porous_medium__porosity}
auto const& porosity_conf = conf.getConfigSubtree("porosity");
auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_conf);
auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_conf,
parameters);
porosity_models.emplace_back(std::move(n));

//! \ogs_file_param{material__twophase_flow__material_property__porous_medium__porous_medium__storage}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ std::tuple<std::unique_ptr<TwoPhaseFlowWithPPMaterialProperties>,
BaseLib::ConfigTree>
createTwoPhaseFlowMaterialProperties(
BaseLib::ConfigTree const& config,
MeshLib::PropertyVector<int> const& material_ids);
MeshLib::PropertyVector<int> const& material_ids,
std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters);

} // end namespace
} // end namespace
Original file line number Diff line number Diff line change
Expand Up @@ -126,11 +126,12 @@ Eigen::MatrixXd const& TwoPhaseFlowWithPPMaterialProperties::getPermeability(
}

double TwoPhaseFlowWithPPMaterialProperties::getPorosity(
const int material_id, const double /*t*/,
const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/,
const int material_id, const double t,
const ProcessLib::SpatialPosition& pos, const double /*p*/,
const double T, const double porosity_variable) const
{
return _porosity_models[material_id]->getValue(porosity_variable, T);
return _porosity_models[material_id]->getValue(t, pos, porosity_variable,
T);
}

double TwoPhaseFlowWithPPMaterialProperties::getSaturation(
Expand Down
2 changes: 1 addition & 1 deletion ProcessLib/ComponentTransport/ComponentTransportFEM.h
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ class LocalAssemblerData : public ComponentTransportLocalAssemblerInterface
// porosity model
auto const porosity =
_process_data.porous_media_properties.getPorosity(t, pos)
.getValue(0.0, C_int_pt);
.getValue(t, pos, 0.0, C_int_pt);

auto const retardation_factor =
_process_data.retardation_factor(t, pos)[0];
Expand Down
2 changes: 1 addition & 1 deletion ProcessLib/HT/HTFEM.h
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ class LocalAssemblerData : public HTLocalAssemblerInterface
// porosity model
auto const porosity =
_process_data.porous_media_properties.getPorosity(t, pos)
.getValue(0.0, T_int_pt);
.getValue(t, pos, 0.0, T_int_pt);

double const thermal_conductivity =
thermal_conductivity_solid * (1 - porosity) +
Expand Down
2 changes: 1 addition & 1 deletion ProcessLib/HeatConduction/HeatConductionFEM-impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ void LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::

// Porosity of porous media.
double const n = liquid_flow_properties.getPorosity(
material_id, porosity_variable, T);
material_id, t, pos, porosity_variable, T);

// Effective specific heat capacity.
double const effective_cp = (1.0 - n) * cp_s * rho_s + n * cp_f * rho_f;
Expand Down
4 changes: 2 additions & 2 deletions ProcessLib/LiquidFlow/CreateLiquidFlowMaterialProperties.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,8 @@ createLiquidFlowMaterialProperties(
auto const& porosity_config =
//! \ogs_file_param{prj__processes__process__LIQUID_FLOW__material_property__porous_medium__porous_medium__porosity}
porous_medium_config.getConfigSubtree("porosity");
auto n =
MaterialLib::PorousMedium::createPorosityModel(porosity_config);
auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_config,
parameters);
porosity_models.emplace_back(std::move(n));

auto const& storage_config =
Expand Down
4 changes: 2 additions & 2 deletions ProcessLib/LiquidFlow/LiquidFlowLocalAssembler-impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -231,8 +231,8 @@ void LiquidFlowLocalAssembler<ShapeFunction, IntegrationMethod, GlobalDim>::
auto const solid_thermal_expansion =
_material_properties.getSolidThermalExpansion(t, pos);
auto const biot_constant = _material_properties.getBiotConstant(t, pos);
auto const porosity =
_material_properties.getPorosity(material_id, porosity_variable, T);
auto const porosity = _material_properties.getPorosity(
material_id, t, pos, porosity_variable, T);
const double eff_thermal_expansion =
3.0 * (biot_constant - porosity) * solid_thermal_expansion -
porosity * _material_properties.getdLiquidDensity_dT(p, T) / rho;
Expand Down
4 changes: 2 additions & 2 deletions ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ double LiquidFlowMaterialProperties::getThermalConductivity(
}

double LiquidFlowMaterialProperties::getMassCoefficient(
const int material_id, const double /*t*/, const SpatialPosition& /*pos*/,
const int material_id, const double t, const SpatialPosition& pos,
const double p, const double T, const double porosity_variable,
const double storage_variable) const
{
Expand All @@ -111,7 +111,7 @@ double LiquidFlowMaterialProperties::getMassCoefficient(
assert(rho > 0.);

const double porosity =
_porosity_models[material_id]->getValue(porosity_variable, T);
_porosity_models[material_id]->getValue(t, pos, porosity_variable, T);
const double storage =
_storage_models[material_id]->getValue(storage_variable);
return porosity * drho_dp / rho + storage;
Expand Down
8 changes: 5 additions & 3 deletions ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h
Original file line number Diff line number Diff line change
Expand Up @@ -121,10 +121,12 @@ class LiquidFlowMaterialProperties

double getThermalConductivity(const double p, const double T) const;

double getPorosity(const int material_id, const double porosity_variable,
const double T) const
double getPorosity(const int material_id, const double t,
const SpatialPosition& pos,
const double porosity_variable, const double T) const
{
return _porosity_models[material_id]->getValue(porosity_variable, T);
return _porosity_models[material_id]->getValue(t, pos,
porosity_variable, T);
}

double getSolidThermalExpansion(const double t,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@ PorousMediaProperties createPorousMediaProperties(
//! \ogs_file_param{prj__processes__process__RichardsComponentTransport__porous_medium__porous_medium__porosity}
porous_medium_config.getConfigSubtree("porosity");
porosity_models.emplace_back(
MaterialLib::PorousMedium::createPorosityModel(porosity_config));
MaterialLib::PorousMedium::createPorosityModel(porosity_config,
parameters));

// Configuration for the intrinsic permeability
auto const& permeability_config =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ void LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::assemble(
// porosity model
auto const porosity =
_process_data.porous_media_properties.getPorosity(t, pos).getValue(
0.0, C_int_pt);
t, pos, 0.0, C_int_pt);

auto const retardation_factor =
_process_data.retardation_factor(t, pos)[0];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ std::unique_ptr<RichardsFlowMaterialProperties>
createRichardsFlowMaterialProperties(
BaseLib::ConfigTree const& config,
boost::optional<MeshLib::PropertyVector<int> const&>
material_ids)
material_ids,
std::vector<std::unique_ptr<ParameterBase>> const& parameters)
{
DBUG("Reading material properties of Richards flow process.");

Expand Down Expand Up @@ -77,7 +78,8 @@ createRichardsFlowMaterialProperties(

//! \ogs_file_param{prj__processes__process__RICHARDS_FLOW__material_property__porous_medium__porous_medium__porosity}
auto const& porosity_conf = conf.getConfigSubtree("porosity");
auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_conf);
auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_conf,
parameters);
porosity_models.emplace_back(std::move(n));

//! \ogs_file_param{prj__processes__process__RICHARDS_FLOW__material_property__porous_medium__porous_medium__storage}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ std::unique_ptr<RichardsFlowMaterialProperties>
createRichardsFlowMaterialProperties(
BaseLib::ConfigTree const& config,
boost::optional<MeshLib::PropertyVector<int> const&>
material_ids);
material_ids,
std::vector<std::unique_ptr<ParameterBase>> const& parameters);

} // end namespace
} // end namespace
3 changes: 2 additions & 1 deletion ProcessLib/RichardsFlow/CreateRichardsFlowProcess.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,8 @@ std::unique_ptr<Process> createRichardsFlowProcess(
INFO("The Richards flow is in homogeneous porous media.");
}
std::unique_ptr<RichardsFlowMaterialProperties> material =
createRichardsFlowMaterialProperties(mat_config, material_ids);
createRichardsFlowMaterialProperties(mat_config, material_ids,
parameters);
RichardsFlowProcessData process_data{std::move(material),
specific_body_force, has_gravity,
mass_lumping, temperature};
Expand Down
7 changes: 4 additions & 3 deletions ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,12 @@ Eigen::MatrixXd const& RichardsFlowMaterialProperties::getPermeability(
}

double RichardsFlowMaterialProperties::getPorosity(
const int material_id, const double /*t*/,
const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/,
const int material_id, const double t,
const ProcessLib::SpatialPosition& pos, const double /*p*/,
const double T, const double porosity_variable) const
{
return _porosity_models[material_id]->getValue(porosity_variable, T);
return _porosity_models[material_id]->getValue(t, pos, porosity_variable,
T);
}

double RichardsFlowMaterialProperties::getStorage(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,14 @@ namespace ThermalTwoPhaseFlowWithPP
std::unique_ptr<ThermalTwoPhaseFlowWithPPMaterialProperties>
createThermalTwoPhaseFlowWithPPMaterialProperties(
BaseLib::ConfigTree const& config,
MeshLib::PropertyVector<int> const& material_ids)
MeshLib::PropertyVector<int> const& material_ids,
std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters)
{
DBUG(
"Reading material properties of nonisothermal two-phase flow process.");
auto two_phase_model_tuple =
MaterialLib::TwoPhaseFlowWithPP::createTwoPhaseFlowMaterialProperties(
config, material_ids);
config, material_ids, parameters);
auto two_phase_material_model =
std::move(std::get<0>(two_phase_model_tuple));
auto const& fluid_config = std::get<1>(two_phase_model_tuple);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ namespace ThermalTwoPhaseFlowWithPP
std::unique_ptr<ThermalTwoPhaseFlowWithPPMaterialProperties>
createThermalTwoPhaseFlowWithPPMaterialProperties(
BaseLib::ConfigTree const& config,
MeshLib::PropertyVector<int> const& material_ids);
MeshLib::PropertyVector<int> const& material_ids,
std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters);

} // end namespace
} // end namespace
Loading

0 comments on commit 92e9c3b

Please sign in to comment.