/** * \file * \author Norbert Grunwald * \date 07.09.2017 * * \copyright * Copyright (c) 2012-2021, 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 "Medium.h" #include "BaseLib/Algorithm.h" #include "Properties/Properties.h" namespace MaterialPropertyLib { Medium::Medium(std::vector>&& phases, std::unique_ptr&& properties) : phases_(std::move(phases)) { if (properties) { overwriteExistingProperties(properties_, *properties, this); } } Phase const& Medium::phase(std::size_t const index) const { return *phases_[index]; } Phase const& Medium::phase(std::string const& phase_name) const { return *BaseLib::findElementOrError( phases_.begin(), phases_.end(), [&phase_name]( std::unique_ptr const& phase) { return phase->name == phase_name; }, "Could not find phase name '" + phase_name + "'."); } bool Medium::hasPhase(std::string const& phase_name) const { return std::any_of( begin(phases_), end(phases_), [&phase_name](auto const& phase) { return phase->name == phase_name; }); } Property const& Medium::property(PropertyType const& p) const { Property const* const property = properties_[p].get(); if (property == nullptr) { OGS_FATAL("Trying to access undefined property '{:s}' of {:s}", property_enum_to_string[p], description()); } return *properties_[p]; } Property const& Medium::operator[](PropertyType const& p) const { return property(p); } bool Medium::hasProperty(PropertyType const& p) const { return properties_[p] != nullptr; } std::size_t Medium::numberOfPhases() const { return phases_.size(); } std::string Medium::description() { return "medium"; } Phase const& fluidPhase(Medium const& medium) { if (medium.hasPhase("Gas")) { return medium.phase("Gas"); } if (medium.hasPhase("AqueousLiquid")) { return medium.phase("AqueousLiquid"); } OGS_FATAL( "Neither Gas nor AqueousLiquid phase is available for the medium, but " "a fluid phase was requested."); } } // namespace MaterialPropertyLib