Skip to content
Snippets Groups Projects
Select Git revision
  • 4e236b0f22c7a5e43330e0e598483786a67b8907
  • master default
  • 6.5.5
  • 6.5.4
  • 6.5.3
  • 6.5.2
  • 6.5.1
  • 6.5.0
  • 6.4.4
  • 6.4.3
  • 6.4.2
  • 6.4.1
  • 6.4.0
  • 6.3.3
  • data-explorer-5
  • 6.3.2
  • 6.3.1
  • 6.3.0
  • 6.2.2
  • 6.2.1
  • EHR_version
  • 6.2.0
22 results
An error occurred while fetching branches. Retry the search.

EigenOption.cpp

Blame
  • Forked from ogs / ogs
    1432 commits behind the upstream repository.
    Jörg Buchwald's avatar
    Jörg Buchwald authored and Dmitri Naumov committed
    f8ee0079
    History
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    EigenOption.cpp 4.12 KiB
    /**
     * \file
     * \copyright
     * Copyright (c) 2012-2025, 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;
        triangular_matrix_type = TriangularMatrixType::Lower;
    #ifdef USE_EIGEN_UNSUPPORTED
        scaling = false;
        restart = 30;
        l = 2;
        s = 4;
        angle = 0.7;
        smoothing = false;
        residualupdate = false;
    #endif
    }
    
    EigenOption::SolverType EigenOption::getSolverType(
        const std::string& solver_name)
    {
        if (solver_name == "CG")
        {
            return SolverType::CG;
        }
        if (solver_name == "LeastSquareCG")
        {
            return SolverType::LeastSquareCG;
        }
        if (solver_name == "BiCGSTAB")
        {
            return SolverType::BiCGSTAB;
        }
        if (solver_name == "BiCGSTABL")
        {
            return SolverType::BiCGSTABL;
        }
        if (solver_name == "IDRS")
        {
            return SolverType::IDRS;
        }
        if (solver_name == "IDRSTABL")
        {
            return SolverType::IDRSTABL;
        }
        if (solver_name == "SparseLU")
        {
            return SolverType::SparseLU;
        }
        if (solver_name == "PardisoLU")
        {
            return SolverType::PardisoLU;
        }
        if (solver_name == "GMRES")
        {
            return SolverType::GMRES;
        }
    
        OGS_FATAL("Unknown Eigen solver type `{:s}'", solver_name);
    }
    
    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 == "LeastSquareDIAGONAL")
        {
            return PreconType::LeastSquareDIAGONAL;
        }
        if (precon_name == "ILUT")
        {
            return PreconType::ILUT;
        }
    
        OGS_FATAL("Unknown Eigen preconditioner type `{:s}'", precon_name);
    }
    
    EigenOption::TriangularMatrixType EigenOption::getTriangularMatrixType(
        const std::string& triangular_matrix_name)
    {
        if (triangular_matrix_name == "Lower")
        {
            return TriangularMatrixType::Lower;
        }
        if (triangular_matrix_name == "Upper")
        {
            return TriangularMatrixType::Upper;
        }
        if (triangular_matrix_name == "LowerUpper")
        {
            return TriangularMatrixType::LowerUpper;
        }
    
        OGS_FATAL("Unknown triangular matrix type `{:s}'", triangular_matrix_name);
    }
    
    std::string EigenOption::getSolverName(SolverType const solver_type)
    {
        switch (solver_type)
        {
            case SolverType::CG:
                return "CG";
            case SolverType::LeastSquareCG:
                return "LeastSquareCG";
            case SolverType::BiCGSTAB:
                return "BiCGSTAB";
            case SolverType::BiCGSTABL:
                return "BiCGSTABL";
            case SolverType::IDRS:
                return "IDRS";
            case SolverType::IDRSTABL:
                return "IDRSTABL";
            case SolverType::SparseLU:
                return "SparseLU";
            case SolverType::PardisoLU:
                return "PardisoLU";
            case SolverType::GMRES:
                return "GMRES";
        }
        return "Invalid";
    }
    
    std::string EigenOption::getPreconName(PreconType const precon_type)
    {
        switch (precon_type)
        {
            case PreconType::NONE:
                return "NONE";
            case PreconType::DIAGONAL:
                return "DIAGONAL";
            case PreconType::LeastSquareDIAGONAL:
                return "LeastSquareDIAGONAL";
            case PreconType::ILUT:
                return "ILUT";
        }
        return "Invalid";
    }
    
    std::string EigenOption::getTriangularMatrixName(
        TriangularMatrixType const triangular_matrix_type)
    {
        switch (triangular_matrix_type)
        {
            case TriangularMatrixType::Lower:
                return "Lower";
            case TriangularMatrixType::Upper:
                return "Upper";
            case TriangularMatrixType::LowerUpper:
                return "LowerUpper";
        }
        return "Invalid";
    }
    
    }  // namespace MathLib