コード例 #1
0
def ConstructSolver(configuration):
    import KratosMultiphysics

    if (type(configuration) != KratosMultiphysics.Parameters):
        raise Exception(
            "input is expected to be provided as a Kratos Parameters object")

    solver_type = configuration["solver_type"].GetString()

    if configuration.Has("scaling"):
        scaling = configuration["scaling"].GetBool()
    else:
        scaling = False

    if (solver_type == "CGSolver"):
        linear_solver = KratosMultiphysics.CGSolver(
            configuration, ConstructPreconditioner(configuration))
    elif (solver_type == "BICGSTABSolver"):
        linear_solver = KratosMultiphysics.BICGSTABSolver(
            configuration, ConstructPreconditioner(configuration))
    elif (solver_type == "TFQMRSolver"):
        linear_solver = KratosMultiphysics.TFQMRSolver(
            configuration, ConstructPreconditioner(configuration))
    elif (solver_type == "DeflatedCGSolver"):
        linear_solver = KratosMultiphysics.DeflatedCGSolver(configuration)
    elif (solver_type == "MixedUPLinearSolver"):
        linear_solver = KratosMultiphysics.MixedUPLinearSolver(configuration)
    elif (solver_type == "SkylineLUFactorizationSolver"):
        linear_solver = KratosMultiphysics.SkylineLUFactorizationSolver(
            configuration)
    elif (solver_type == "complex_skyline_lu_solver"):
        linear_solver = KratosMultiphysics.ComplexSkylineLUSolver(
            configuration)

    ################################## following solvers need importing the ExternalSolversApplication
    elif (solver_type == "GMRESSolver"):
        import KratosMultiphysics.ExternalSolversApplication
        linear_solver = KratosMultiphysics.ExternalSolversApplication.GMRESSolver(
            configuration, ConstructPreconditioner(configuration))
    elif (solver_type == "SuperLUSolver" or solver_type == "Super LU"
          or solver_type == "Super_LU"):
        import KratosMultiphysics.ExternalSolversApplication
        linear_solver = KratosMultiphysics.ExternalSolversApplication.SuperLUSolver(
            configuration)
    elif (solver_type == "SuperLUIterativeSolver"):
        import KratosMultiphysics.ExternalSolversApplication
        linear_solver = KratosMultiphysics.ExternalSolversApplication.SuperLUIterativeSolver(
            configuration)
    elif (solver_type == "PastixSolver"):
        import KratosMultiphysics.ExternalSolversApplication
        linear_solver = KratosMultiphysics.ExternalSolversApplication.PastixSolver(
            configuration)
    elif (solver_type == "AMGCL"):
        linear_solver = KratosMultiphysics.AMGCLSolver(configuration)
    elif (solver_type == "AMGCL_NS_Solver"):
        linear_solver = KratosMultiphysics.AMGCL_NS_Solver(configuration)
    elif (solver_type == "complex_pastix_solver"):
        import KratosMultiphysics.ExternalSolversApplication
        linear_solver = KratosMultiphysics.ExternalSolversApplication.PastixComplexSolver(
            configuration)

    ################################## following solvers need importing the EigenSolversApplication
    elif (solver_type == "eigen_sparse_lu"):
        import KratosMultiphysics.EigenSolversApplication
        linear_solver = KratosMultiphysics.EigenSolversApplication.SparseLUSolver(
            configuration)
    elif (solver_type == "eigen_pardiso_llt"):  # needs Intel MKL
        import KratosMultiphysics.EigenSolversApplication
        linear_solver = KratosMultiphysics.EigenSolversApplication.PardisoLLTSolver(
            configuration)
    elif (solver_type == "eigen_pardiso_ldlt"):  # needs Intel MKL
        import KratosMultiphysics.EigenSolversApplication
        linear_solver = KratosMultiphysics.EigenSolversApplication.PardisoLDLTSolver(
            configuration)
    elif (solver_type == "eigen_pardiso_lu"):  # needs Intel MKL
        import KratosMultiphysics.EigenSolversApplication
        linear_solver = KratosMultiphysics.EigenSolversApplication.PardisoLUSolver(
            configuration)

    # emulating the solvers of the MKLSolversApplication through the EigenSolversApplication
    elif (solver_type == "ParallelMKLPardisoSolver"):
        KratosMultiphysics.Logger.PrintWarning(
            "LinearSolverFactor", "Solver Parallel_MKL_Pardiso is deprecated,\
        please use it through the EigenSolversApplication (see the Readme in the Application)"
        )
        import KratosMultiphysics.EigenSolversApplication
        linear_solver = KratosMultiphysics.EigenSolversApplication.PardisoLUSolver(
            configuration)

    ###################################### FAILED TO FIND solver_type
    else:
        raise Exception("solver type not found. Asking for :" + solver_type)

    ###### here decide if a prescaling is to be applied
    if (scaling == False):
        return linear_solver
    else:
        return KratosMultiphysics.ScalingSolver(linear_solver, True)
コード例 #2
0
def ConstructSolver(configuration):
    import KratosMultiphysics

    if (type(configuration) != KratosMultiphysics.Parameters):
        raise Exception(
            "input is expected to be provided as a Kratos Parameters object")

    solver_type = configuration["solver_type"].GetString()

    if configuration.Has("scaling"):
        scaling = configuration["scaling"].GetBool()
    else:
        scaling = False

    if (solver_type == "CGSolver"):
        linear_solver = KratosMultiphysics.CGSolver(
            configuration, ConstructPreconditioner(configuration))
    elif (solver_type == "BICGSTABSolver"):
        linear_solver = KratosMultiphysics.BICGSTABSolver(
            configuration, ConstructPreconditioner(configuration))
    elif (solver_type == "TFQMRSolver"):
        linear_solver = KratosMultiphysics.TFQMRSolver(
            configuration, ConstructPreconditioner(configuration))
    elif (solver_type == "DeflatedCGSolver"):
        linear_solver = KratosMultiphysics.DeflatedCGSolver(configuration)
    elif (solver_type == "MixedUPLinearSolver"):
        linear_solver = KratosMultiphysics.MixedUPLinearSolver(configuration)
    elif (solver_type == "SkylineLUFactorizationSolver"):
        linear_solver = KratosMultiphysics.SkylineLUFactorizationSolver(
            configuration)
    elif (solver_type == "complex_skyline_lu_solver"):
        linear_solver = KratosMultiphysics.ComplexSkylineLUSolver(
            configuration)

    ################################## following solvers need importing the ExternalSolversApplication
    elif (solver_type == "GMRESSolver"):
        import KratosMultiphysics.ExternalSolversApplication
        linear_solver = KratosMultiphysics.ExternalSolversApplication.GMRESSolver(
            configuration, ConstructPreconditioner(configuration))
    elif (solver_type == "SuperLUSolver" or solver_type == "Super LU"
          or solver_type == "Super_LU"):
        import KratosMultiphysics.ExternalSolversApplication
        linear_solver = KratosMultiphysics.ExternalSolversApplication.SuperLUSolver(
            configuration)
    elif (solver_type == "SuperLUIterativeSolver"):
        import KratosMultiphysics.ExternalSolversApplication
        linear_solver = KratosMultiphysics.ExternalSolversApplication.SuperLUIterativeSolver(
            configuration)
    elif (solver_type == "PastixSolver"):
        import KratosMultiphysics.ExternalSolversApplication
        linear_solver = KratosMultiphysics.ExternalSolversApplication.PastixSolver(
            configuration)
    elif (solver_type == "AMGCL"):
        linear_solver = KratosMultiphysics.AMGCLSolver(configuration)
    elif (solver_type == "AMGCL_NS_Solver"):
        linear_solver = KratosMultiphysics.AMGCL_NS_Solver(configuration)
    elif (solver_type == "complex_pastix_solver"):
        import KratosMultiphysics.ExternalSolversApplication
        linear_solver = KratosMultiphysics.ExternalSolversApplication.PastixComplexSolver(
            configuration)

    ################################## following solvers need importing the MKLSolversApplication
    elif (solver_type == "ParallelMKLPardisoSolver"):
        import KratosMultiphysics.MKLSolversApplication
        linear_solver = KratosMultiphysics.MKLSolversApplication.ParallelMKLPardisoSolver(
            configuration)

    ###################################### FAILED TO FIND solver_type
    else:
        raise Exception("solver type not found. Asking for :" + solver_type)

    ###### here decide if a prescaling is to be applied
    if (scaling == False):
        return linear_solver
    else:
        return KratosMultiphysics.ScalingSolver(linear_solver, True)