diff --git a/MaterialLib/Fluid/ThermalConductivity/CreateFluidThermalConductivityModel.cpp b/MaterialLib/Fluid/ThermalConductivity/CreateFluidThermalConductivityModel.cpp new file mode 100644 index 0000000000000000000000000000000000000000..1e5d0b64394ad74706138a9a43292d08ea3aff67 --- /dev/null +++ b/MaterialLib/Fluid/ThermalConductivity/CreateFluidThermalConductivityModel.cpp @@ -0,0 +1,47 @@ +/** + * \brief A function for creating a thermal conductivity model for fluid + * + * \copyright + * Copyright (c) 2012-2016, OpenGeoSys Community (http://www.opengeosys.org) + * Distributed under a Modified BSD License. + * See accompanying file LICENSE.txt or + * http://www.opengeosys.org/project/license + * + * \file CreateFluidThermalConductivityModel.cpp + * + */ + +#include "CreateFluidThermalConductivityModel.h" + +#include "BaseLib/Error.h" +#include "BaseLib/ConfigTree.h" + +#include "MaterialLib/Fluid/FluidProperty.h" +#include "MaterialLib/Fluid/ConstantFluidProperty.h" + +namespace MaterialLib +{ +namespace Fluid +{ +std::unique_ptr<FluidProperty> createFluidThermalConductivityModel( + BaseLib::ConfigTree const& config) +{ + //! \ogs_file_param{material__fluid__thermal_conductivity__type} + auto const type = config.getConfigParameter<std::string>("type"); + + if (type == "Constant") + return std::unique_ptr<FluidProperty>(new ConstantFluidProperty( + //! \ogs_file_param{material__fluid__thermal_conductivity__Constant__value} + config.getConfigParameter<double>("value"))); + // TODO: add more models + else + { + OGS_FATAL( + "The viscosity type %s is unavailable.\n" + "The available type is \n\tConstant\n", + type.data()); + } +} + +} // end namespace +} // end namespace diff --git a/MaterialLib/Fluid/ThermalConductivity/CreateFluidThermalConductivityModel.h b/MaterialLib/Fluid/ThermalConductivity/CreateFluidThermalConductivityModel.h new file mode 100644 index 0000000000000000000000000000000000000000..e2646c56ab8b5212b21a9adb313422dbab1f232f --- /dev/null +++ b/MaterialLib/Fluid/ThermalConductivity/CreateFluidThermalConductivityModel.h @@ -0,0 +1,40 @@ +/** + * \brief A function for creating a thermal conductivity model for fluid + * + * \copyright + * Copyright (c) 2012-2016, OpenGeoSys Community (http://www.opengeosys.org) + * Distributed under a Modified BSD License. + * See accompanying file LICENSE.txt or + * http://www.opengeosys.org/project/license + * + * \file CreateFluidThermalConductivityModel.h + * + */ + +#ifndef OGS_CREATE_FLUID_THERMAL_CONDUCTIVITY_MODEL_H +#define OGS_CREATE_FLUID_THERMAL_CONDUCTIVITY_MODEL_H + +#include <memory> + +namespace BaseLib +{ +class ConfigTree; +} + +namespace MaterialLib +{ +namespace Fluid +{ +class FluidProperty; + +/** + * Create a thermal conductivity model + * \param config ConfigTree object has a tag of `<thermal_conductivity>` + */ +std::unique_ptr<FluidProperty> createFluidThermalConductivityModel( + BaseLib::ConfigTree const& config); + +} // end namespace +} // end namespace + +#endif // OGS_CREATE_FLUID_THERMAL_CONDUCTIVITY_MODEL_H diff --git a/Tests/MaterialLib/TestFluidSpecificHeatCapacityModel.cpp b/Tests/MaterialLib/TestFluidSpecificHeatCapacityModel.cpp index 3f9c230b8ea7681b9f5684df1769575f853e7cc4..34a1615752ca974b90d2200a1d3bfbcf10e497b7 100644 --- a/Tests/MaterialLib/TestFluidSpecificHeatCapacityModel.cpp +++ b/Tests/MaterialLib/TestFluidSpecificHeatCapacityModel.cpp @@ -34,7 +34,7 @@ std::unique_ptr<FluidProperty> createSpecificFluidHeatCapacityModel( BaseLib::ConfigTree conf(ptree, "", BaseLib::ConfigTree::onerror, BaseLib::ConfigTree::onwarning); auto const& sub_config = conf.getConfigSubtree("specific_heat_capacity"); - return MaterialLib::Fluid::createSpecificFluidHeatCapacityModel(sub_config); + return createSpecificFluidHeatCapacityModel(sub_config); } TEST(MaterialFluid, checkConstantSpecificFluidHeatCapacityModel) diff --git a/Tests/MaterialLib/TestFluidThermalConductivityModel.cpp b/Tests/MaterialLib/TestFluidThermalConductivityModel.cpp new file mode 100644 index 0000000000000000000000000000000000000000..04e3ab136f8e05a6ea101868ae88f86711ecf023 --- /dev/null +++ b/Tests/MaterialLib/TestFluidThermalConductivityModel.cpp @@ -0,0 +1,52 @@ +/** + * \copyright + * Copyright (c) 2012-2016, OpenGeoSys Community (http://www.opengeosys.org) + * Distributed under a Modified BSD License. + * See accompanying file LICENSE.txt or + * http://www.opengeosys.org/project/license + * + * \file TestFluidThermalConductivityModel.cpp + * + */ + +#include <gtest/gtest.h> + +#include <memory> + +#include "Tests/TestTools.h" + +#include "BaseLib/ConfigTree.h" + +#include "MaterialLib/PhysicalConstant.h" +#include "MaterialLib/Fluid/FluidProperty.h" +#include "MaterialLib/Fluid/ConstantFluidProperty.h" +#include "MaterialLib/Fluid/ThermalConductivity/CreateFluidThermalConductivityModel.h" +#include "MaterialLib/Fluid/Density/LiquidDensity.h" + +using namespace MaterialLib; +using namespace MaterialLib::Fluid; + +using ArrayType = MaterialLib::Fluid::FluidProperty::ArrayType; + +std::unique_ptr<FluidProperty> createFluidThermalConductivityModel( + const char xml[]) +{ + auto const ptree = readXml(xml); + BaseLib::ConfigTree conf(ptree, "", BaseLib::ConfigTree::onerror, + BaseLib::ConfigTree::onwarning); + auto const& sub_config = conf.getConfigSubtree("thermal_conductivity"); + return createFluidThermalConductivityModel(sub_config); +} + +TEST(Material, checkConstantFluidThermalConductivity) +{ + const char xml[] = + "<thermal_conductivity>" + " <type>Constant</type>" + " <value> .45 </value> " + "</thermal_conductivity>"; + const auto lambda = createFluidThermalConductivityModel(xml); + + ArrayType dummy; + ASSERT_EQ(.45, lambda->getValue(dummy)); +}