예제 #1
0
    def _CreateDistanceReinitializationProcess(self):
        if (self._reinitialization_type == "variational"):
            # Construct the variational distance calculation process
            maximum_iterations = 2 #TODO: Make this user-definable
            redistancing_linear_solver = self._GetRedistancingLinearSolver()
            computing_model_part = self.GetComputingModelPart()
            epetra_communicator = self._GetEpetraCommunicator()
            if self.main_model_part.ProcessInfo[KratosMultiphysics.DOMAIN_SIZE] == 2:
                distance_reinitialization_process = KratosTrilinos.TrilinosVariationalDistanceCalculationProcess2D(
                    epetra_communicator,
                    computing_model_part,
                    redistancing_linear_solver,
                    maximum_iterations,
                    KratosMultiphysics.VariationalDistanceCalculationProcess2D.CALCULATE_EXACT_DISTANCES_TO_PLANE)
            else:
                distance_reinitialization_process = KratosTrilinos.TrilinosVariationalDistanceCalculationProcess3D(
                    epetra_communicator,
                    computing_model_part,
                    redistancing_linear_solver,
                    maximum_iterations,
                    KratosMultiphysics.VariationalDistanceCalculationProcess3D.CALCULATE_EXACT_DISTANCES_TO_PLANE)

        elif (self._reinitialization_type == "parallel"):
            if self.main_model_part.ProcessInfo[KratosMultiphysics.DOMAIN_SIZE] == 2:
                distance_reinitialization_process = KratosMultiphysics.ParallelDistanceCalculator2D()
            else:
                distance_reinitialization_process = KratosMultiphysics.ParallelDistanceCalculator3D()

        elif (self._reinitialization_type == "none"):
                KratosMultiphysics.Logger.PrintInfo(self.__class__.__name__, "Redistancing is turned off.")
        else:
            raise Exception("Please use a valid distance reinitialization type or set it as \'none\'. Valid types are: \'variational\' and \'parallel\'.")

        return distance_reinitialization_process
예제 #2
0
    def set_variational_distance_process(self):
        # Construct the variational distance calculation process
        self.EpetraCommunicator = KratosTrilinos.CreateCommunicator()
        maximum_iterations = 5

        ### for MPI
        trilinos_settings = KratosMultiphysics.Parameters("""
        {
            "linear_solver_settings"   : {
                "solver_type" : "amgcl"
            }
        }
        """)

        self.linear_solver = trilinos_linear_solver_factory.ConstructSolver(
            trilinos_settings["linear_solver_settings"])

        if self.complete_model.ProcessInfo[
                KratosMultiphysics.DOMAIN_SIZE] == 2:
            variational_distance_process = KratosTrilinos.TrilinosVariationalDistanceCalculationProcess2D(
                self.EpetraCommunicator, self.complete_model,
                self.linear_solver, maximum_iterations,
                KratosMultiphysics.VariationalDistanceCalculationProcess2D.
                CALCULATE_EXACT_DISTANCES_TO_PLANE, "distance_from_inlet_2D")
        else:
            variational_distance_process = KratosTrilinos.TrilinosVariationalDistanceCalculationProcess3D(
                self.EpetraCommunicator, self.complete_model,
                self.linear_solver, maximum_iterations,
                KratosMultiphysics.VariationalDistanceCalculationProcess3D.
                CALCULATE_EXACT_DISTANCES_TO_PLANE, "distance_from_inlet_3D")

        return variational_distance_process
    def _set_variational_distance_process(self):
        # Construct the variational distance calculation process
        maximum_iterations = 2
        if self.main_model_part.ProcessInfo[
                KratosMultiphysics.DOMAIN_SIZE] == 2:
            variational_distance_process = KratosTrilinos.TrilinosVariationalDistanceCalculationProcess2D(
                self.EpetraCommunicator, self.computing_model_part,
                self.trilinos_linear_solver, maximum_iterations,
                KratosMultiphysics.VariationalDistanceCalculationProcess2D.
                CALCULATE_EXACT_DISTANCES_TO_PLANE)
        else:
            variational_distance_process = KratosTrilinos.TrilinosVariationalDistanceCalculationProcess3D(
                self.EpetraCommunicator, self.computing_model_part,
                self.trilinos_linear_solver, maximum_iterations,
                KratosMultiphysics.VariationalDistanceCalculationProcess3D.
                CALCULATE_EXACT_DISTANCES_TO_PLANE)

        return variational_distance_process
예제 #4
0
    def _CreateDistanceReinitializationProcess(self):
        # Construct the variational distance calculation process
        maximum_iterations = 2  #TODO: Make this user-definable
        redistancing_linear_solver = self._GetRedistancingLinearSolver()
        computing_model_part = self.GetComputingModelPart()
        epetra_communicator = self._GetEpetraCommunicator()
        if self.main_model_part.ProcessInfo[
                KratosMultiphysics.DOMAIN_SIZE] == 2:
            variational_distance_process = KratosTrilinos.TrilinosVariationalDistanceCalculationProcess2D(
                epetra_communicator, computing_model_part,
                redistancing_linear_solver, maximum_iterations,
                KratosMultiphysics.VariationalDistanceCalculationProcess2D.
                CALCULATE_EXACT_DISTANCES_TO_PLANE)
        else:
            variational_distance_process = KratosTrilinos.TrilinosVariationalDistanceCalculationProcess3D(
                epetra_communicator, computing_model_part,
                redistancing_linear_solver, maximum_iterations,
                KratosMultiphysics.VariationalDistanceCalculationProcess3D.
                CALCULATE_EXACT_DISTANCES_TO_PLANE)

        return variational_distance_process