示例#1
0
    def Initialize(self):
        ## Construct the communicator
        self.EpetraComm = KratosTrilinos.CreateCommunicator()

        ## Get the computing model part
        self.computing_model_part = self.GetComputingModelPart()

        ## If needed, create the estimate time step utility
        if (self.settings["time_stepping"]["automatic_time_step"].GetBool()):
            self.EstimateDeltaTimeUtility = self._get_automatic_time_stepping_utility()

        #TODO: next part would be much cleaner if we passed directly the parameters to the c++
        if self.settings["consider_periodic_conditions"] == True:
            self.solver_settings = KratosTrilinos.TrilinosFractionalStepSettingsPeriodic(self.EpetraComm,
                                                                                        self.computing_model_part,
                                                                                        self.computing_model_part.ProcessInfo[KratosMultiphysics.DOMAIN_SIZE],
                                                                                        self.settings["time_order"].GetInt(),
                                                                                        self.settings["use_slip_conditions"].GetBool(),
                                                                                        self.settings["move_mesh_flag"].GetBool(),
                                                                                        self.settings["reform_dofs_at_each_step]"].GetBool(),
                                                                                        KratosFluid.PATCH_INDEX)

        else:
            self.solver_settings = KratosTrilinos.TrilinosFractionalStepSettings(self.EpetraComm,
                                                                                 self.computing_model_part,
                                                                                 self.computing_model_part.ProcessInfo[KratosMultiphysics.DOMAIN_SIZE],
                                                                                 self.settings["time_order"].GetInt(),
                                                                                 self.settings["use_slip_conditions"].GetBool(),
                                                                                 self.settings["move_mesh_flag"].GetBool(),
                                                                                 self.settings["reform_dofs_at_each_step"].GetBool())

        self.solver_settings.SetEchoLevel(self.settings["echo_level"].GetInt())

        self.solver_settings.SetStrategy(KratosTrilinos.TrilinosStrategyLabel.Velocity,
                                         self.velocity_linear_solver,
                                         self.settings["velocity_tolerance"].GetDouble(),
                                         self.settings["maximum_velocity_iterations"].GetInt())

        self.solver_settings.SetStrategy(KratosTrilinos.TrilinosStrategyLabel.Pressure,
                                         self.pressure_linear_solver,
                                         self.settings["pressure_tolerance"].GetDouble(),
                                         self.settings["maximum_pressure_iterations"].GetInt())

        self.solver = KratosTrilinos.TrilinosFSStrategy(self.computing_model_part,
                                                        self.solver_settings,
                                                        self.settings["predictor_corrector"].GetBool(),
                                                        KratosFluid.PATCH_INDEX)

        self.main_model_part.ProcessInfo.SetValue(KratosMultiphysics.DYNAMIC_TAU, self.settings["dynamic_tau"].GetDouble())
        self.main_model_part.ProcessInfo.SetValue(KratosMultiphysics.OSS_SWITCH, self.settings["oss_switch"].GetInt())

        (self.solver).Initialize()
        (self.solver).Check()

        if self._IsPrintingRank():
            #TODO: CHANGE THIS ONCE THE MPI LOGGER IS IMPLEMENTED
            KratosMultiphysics.Logger.PrintInfo("TrilinosNavierStokesSolverFractionalStep","Initialization TrilinosNavierStokesSolverFractionalStep finished")
示例#2
0
    def Initialize(self):
        ## Construct the communicator
        self.EpetraComm = KratosTrilinos.CreateCommunicator()

        ## Get the computing model part
        self.computing_model_part = self.GetComputingModelPart()

        ## If needed, create the estimate time step utility
        if (self.settings["time_stepping"]["automatic_time_step"].GetBool()):
            self.EstimateDeltaTimeUtility = self._GetAutomaticTimeSteppingUtility(
            )

        #TODO: next part would be much cleaner if we passed directly the parameters to the c++
        if self.settings["consider_periodic_conditions"] == True:
            self.solver_settings = KratosTrilinos.TrilinosFractionalStepSettingsPeriodic(
                self.EpetraComm, self.computing_model_part,
                self.computing_model_part.ProcessInfo[
                    KratosMultiphysics.DOMAIN_SIZE],
                self.settings["time_order"].GetInt(),
                self.settings["use_slip_conditions"].GetBool(),
                self.settings["move_mesh_flag"].GetBool(),
                self.settings["reform_dofs_at_each_step]"].GetBool(),
                KratosFluid.PATCH_INDEX)

        else:
            self.solver_settings = KratosTrilinos.TrilinosFractionalStepSettings(
                self.EpetraComm, self.computing_model_part,
                self.computing_model_part.ProcessInfo[
                    KratosMultiphysics.DOMAIN_SIZE],
                self.settings["time_order"].GetInt(),
                self.settings["use_slip_conditions"].GetBool(),
                self.settings["move_mesh_flag"].GetBool(),
                self.settings["reform_dofs_at_each_step"].GetBool())

        self.solver_settings.SetEchoLevel(self.settings["echo_level"].GetInt())

        self.solver_settings.SetStrategy(
            KratosTrilinos.TrilinosStrategyLabel.Velocity,
            self.velocity_linear_solver,
            self.settings["velocity_tolerance"].GetDouble(),
            self.settings["maximum_velocity_iterations"].GetInt())

        self.solver_settings.SetStrategy(
            KratosTrilinos.TrilinosStrategyLabel.Pressure,
            self.pressure_linear_solver,
            self.settings["pressure_tolerance"].GetDouble(),
            self.settings["maximum_pressure_iterations"].GetInt())

        self.solver = KratosTrilinos.TrilinosFSStrategy(
            self.computing_model_part, self.solver_settings,
            self.settings["predictor_corrector"].GetBool(),
            KratosFluid.PATCH_INDEX)

        print(
            "Initialization Trilinos_NavierStokesSolver_FractionalStep Finished"
        )