Skip to content
Snippets Groups Projects
Forked from ogs / ogs
18675 commits behind the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
EigenOption.cpp 1.37 KiB
/**
 * \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
 *
 */

#include "EigenOption.h"
#include "BaseLib/Error.h"

namespace MathLib
{

EigenOption::EigenOption()
{
    solver_type = SolverType::SparseLU;
    precon_type = PreconType::NONE;
    max_iterations = static_cast<int>(1e6);
    error_tolerance = 1.e-16;
#ifdef USE_EIGEN_UNSUPPORTED
    scaling = false;
#endif
}

EigenOption::SolverType EigenOption::getSolverType(const std::string &solver_name)
{
    if (solver_name == "CG")
        return SolverType::CG;
    if (solver_name == "BiCGSTAB")
        return SolverType::BiCGSTAB;
    if (solver_name == "SparseLU")
        return SolverType::SparseLU;
    if (solver_name == "PardisoLU")
        return SolverType::PardisoLU;

    OGS_FATAL("Unknown Eigen solver type `%s'", solver_name.c_str());
}

EigenOption::PreconType EigenOption::getPreconType(const std::string &precon_name)
{
    if (precon_name == "NONE")
        return PreconType::NONE;
    if (precon_name == "DIAGONAL")
        return PreconType::DIAGONAL;
    if (precon_name == "ILUT")
        return PreconType::ILUT;

    OGS_FATAL("Unknown Eigen preconditioner type `%s'", precon_name.c_str());
}

} //MathLib