/*
Copyright 2022 Equinor ASA.
This file is part of the Open Porous Media project (OPM).
OPM is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OPM is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OPM. If not, see .
*/
#include
#include
namespace Opm {
GasLiftCommon::
GasLiftCommon(
WellState &well_state,
const GroupState &group_state,
DeferredLogger &deferred_logger,
const Parallel::Communication& comm,
bool glift_debug
) :
well_state_{well_state},
group_state_{group_state},
deferred_logger_{deferred_logger},
comm_{comm},
debug{glift_debug}
{
}
/****************************************
* Protected methods in alphabetical order
****************************************/
int
GasLiftCommon::
debugUpdateGlobalCounter_() const
{
auto count = this->well_state_.gliftUpdateDebugCounter();
const std::string msg = fmt::format("global counter = {}", count);
displayDebugMessage_(msg);
return count;
}
void
GasLiftCommon::
displayDebugMessageOnRank0_(const std::string &msg) const
{
// This output should be identical for all ranks.
if ( (!this->debug_output_only_on_rank0)
|| (this->debug_output_only_on_rank0 && this->comm_.rank() == 0) ) {
displayDebugMessage_(msg);
}
}
void
GasLiftCommon::
logMessage_(
const std::string& prefix, const std::string& msg, MessageType msg_type) const
{
std::string rank = "";
if (this->comm_.size() > 1) {
rank = fmt::format(" Rank #{} :", this->comm_.rank());
}
std::string type_str;
switch (msg_type) {
case MessageType::INFO:
type_str = "DEBUG";
break;
case MessageType::WARNING:
type_str = "WARNING";
break;
default:
throw std::runtime_error("This should not happen");
}
const std::string message = fmt::format(
" {} ({}) :{} {}", prefix, type_str, rank, msg);
switch (msg_type) {
case MessageType::INFO:
this->deferred_logger_.info(message);
break;
case MessageType::WARNING:
this->deferred_logger_.info(message);
break;
default:
throw std::runtime_error("This should not happen");
}
}
/****************************************
* Private methods in alphabetical order
****************************************/
} // namespace Opm