示例#1
0
    def setUpSolver(self):
        oss_switch = 0

        import vms_monolithic_solver
        vms_monolithic_solver.AddVariables(self.fluid_model_part)
        self.fluid_model_part.AddNodalSolutionStepVariable(DISTANCE)
        self.fluid_model_part.AddNodalSolutionStepVariable(FLAG_VARIABLE)

        model_part_io = ModelPartIO(self.input_file)
        model_part_io.ReadModelPart(self.fluid_model_part)

        self.fluid_model_part.SetBufferSize(3)
        vms_monolithic_solver.AddDofs(self.fluid_model_part)

        # Building custom fluid solver
        self.fluid_solver = vms_monolithic_solver.MonolithicSolver(
            self.fluid_model_part, self.domain_size)
        rel_vel_tol = 1e-5
        abs_vel_tol = 1e-7
        rel_pres_tol = 1e-5
        abs_pres_tol = 1e-7
        self.fluid_solver.conv_criteria = VelPrCriteria(
            rel_vel_tol, abs_vel_tol, rel_pres_tol, abs_pres_tol)
        self.fluid_solver.conv_criteria.SetEchoLevel(0)

        self.fluid_solver.time_scheme = ResidualBasedPredictorCorrectorBDFSchemeTurbulentNoReaction(
            self.domain_size)

        import linear_solver_factory
        self.fluid_solver.linear_solver = linear_solver_factory.ConstructSolver(
            Parameters(r'''{
                "solver_type" : "AMGCL"
            }'''))
        builder_and_solver = ResidualBasedBlockBuilderAndSolver(
            self.fluid_solver.linear_solver)
        self.fluid_solver.max_iter = 50
        self.fluid_solver.compute_reactions = False
        self.fluid_solver.ReformDofSetAtEachStep = False
        self.fluid_solver.MoveMeshFlag = False

        self.fluid_solver.solver = ResidualBasedNewtonRaphsonStrategy(\
                self.fluid_model_part,
                self.fluid_solver.time_scheme,
                self.fluid_solver.linear_solver,
                self.fluid_solver.conv_criteria,
                builder_and_solver,
                self.fluid_solver.max_iter,
                self.fluid_solver.compute_reactions,
                self.fluid_solver.ReformDofSetAtEachStep,
                self.fluid_solver.MoveMeshFlag)

        self.fluid_solver.solver.SetEchoLevel(0)
        self.fluid_solver.solver.Check()

        self.fluid_model_part.ProcessInfo.SetValue(OSS_SWITCH, oss_switch)
        self.fluid_model_part.ProcessInfo.SetValue(DYNAMIC_TAU,
                                                   self.dynamic_tau)

        self.fluid_solver.divergence_clearance_steps = 0
        self.fluid_solver.use_slip_conditions = 0
示例#2
0
    def setUpModel(self):
        self.fluid_model_part = ModelPart("Fluid")

        vms_monolithic_solver.AddVariables(self.fluid_model_part)

        model_part_io = ModelPartIO(self.input_file)
        model_part_io.ReadModelPart(self.fluid_model_part)

        self.fluid_model_part.SetBufferSize(2)
        vms_monolithic_solver.AddDofs(self.fluid_model_part)

        ## Replace element and conditions
        replace_settings = Parameters("""{
            "element_name":"QSVMS2D3N",
            "condition_name": "MonolithicWallCondition2D"
        }""")

        ReplaceElementsAndConditionsProcess(self.fluid_model_part,
                                            replace_settings).Execute()
    def setUpModel(self):
        self.fluid_model_part = ModelPart("Fluid")

        vms_monolithic_solver.AddVariables(self.fluid_model_part)

        model_part_io = ModelPartIO(self.input_file)
        model_part_io.ReadModelPart(self.fluid_model_part)

        self.fluid_model_part.SetBufferSize(3)
        vms_monolithic_solver.AddDofs(self.fluid_model_part)

        replace_settings = Parameters("""{
            "element_name": "",
            "condition_name": ""
        }""")
        replace_settings["element_name"].SetString(self.element_name)
        replace_settings["condition_name"].SetString(self.condition_name)

        ReplaceElementsAndConditionsProcess(self.fluid_model_part,
                                            replace_settings).Execute()
示例#4
0
    def setUpModel(self):
        self.model = Model()
        self.fluid_model_part = self.model.CreateModelPart("Fluid")

        vms_monolithic_solver.AddVariables(self.fluid_model_part)

        model_part_io = ModelPartIO(self.input_file)
        model_part_io.ReadModelPart(self.fluid_model_part)

        self.fluid_model_part.SetBufferSize(2)
        vms_monolithic_solver.AddDofs(self.fluid_model_part)

        ## Replace element and conditions
        replace_settings = Parameters("""{
            "condition_name": "MonolithicWallCondition2D"
        }""")
        replace_settings.AddEmptyValue("element_name")
        replace_settings["element_name"].SetString(self.element)

        ReplaceElementsAndConditionsProcess(self.fluid_model_part,
                                            replace_settings).Execute()
示例#5
0
    def setUpSolvers(self):
        oss_switch = 0

        import vms_monolithic_solver
        vms_monolithic_solver.AddVariables(self.fluid_model_part)

        if self.convection_diffusion_solver == 'bfecc':
            import bfecc_convection_diffusion_solver as thermal_solver
        elif self.convection_diffusion_solver == 'eulerian':
            import convection_diffusion_solver as thermal_solver
        else:
            raise Exception(
                "Unsupported convection-diffusion solver option: {0}".format(
                    self.convection_diffusion_solver))

        thermal_solver.AddVariables(self.fluid_model_part)

        model_part_io = ModelPartIO(self.input_file)
        model_part_io.ReadModelPart(self.fluid_model_part)

        self.fluid_model_part.SetBufferSize(2)
        vms_monolithic_solver.AddDofs(self.fluid_model_part)
        thermal_solver.AddDofs(self.fluid_model_part)

        # Building custom fluid solver
        self.fluid_solver = vms_monolithic_solver.MonolithicSolver(
            self.fluid_model_part, self.domain_size)
        rel_vel_tol = 1e-5
        abs_vel_tol = 1e-7
        rel_pres_tol = 1e-5
        abs_pres_tol = 1e-7
        self.fluid_solver.conv_criteria = VelPrCriteria(
            rel_vel_tol, abs_vel_tol, rel_pres_tol, abs_pres_tol)
        self.fluid_solver.conv_criteria.SetEchoLevel(0)

        alpha = -0.3
        move_mesh = 0
        self.fluid_solver.time_scheme = ResidualBasedPredictorCorrectorVelocityBossakSchemeTurbulent(
            alpha, move_mesh, self.domain_size)
        import KratosMultiphysics.python_linear_solver_factory as linear_solver_factory
        self.fluid_solver.linear_solver = linear_solver_factory.ConstructSolver(
            Parameters(r'''{
                "solver_type" : "amgcl"
            }'''))
        builder_and_solver = ResidualBasedBlockBuilderAndSolver(
            self.fluid_solver.linear_solver)
        self.fluid_solver.max_iter = 50
        self.fluid_solver.compute_reactions = False
        self.fluid_solver.ReformDofSetAtEachStep = False
        self.fluid_solver.MoveMeshFlag = False

        self.fluid_solver.solver = ResidualBasedNewtonRaphsonStrategy(\
                self.fluid_model_part,
                self.fluid_solver.time_scheme,
                self.fluid_solver.linear_solver,
                self.fluid_solver.conv_criteria,
                builder_and_solver,
                self.fluid_solver.max_iter,
                self.fluid_solver.compute_reactions,
                self.fluid_solver.ReformDofSetAtEachStep,
                self.fluid_solver.MoveMeshFlag)

        self.fluid_solver.solver.SetEchoLevel(0)
        self.fluid_solver.solver.Check()

        self.fluid_model_part.ProcessInfo.SetValue(OSS_SWITCH, oss_switch)

        self.fluid_solver.divergence_clearance_steps = 0
        self.fluid_solver.use_slip_conditions = 0

        if self.convection_diffusion_solver == 'eulerian':
            # Duplicate model part

            thermal_model_part = self.model.CreateModelPart("Thermal")
            conv_diff_element = "EulerianConvDiff2D"
            conv_diff_condition = "Condition2D2N"

            MergeVariableListsUtility().Merge(self.fluid_model_part,
                                              thermal_model_part)

            modeler = ConnectivityPreserveModeler()
            modeler.GenerateModelPart(self.fluid_model_part,
                                      thermal_model_part, conv_diff_element,
                                      conv_diff_condition)

            # thermal solver
            self.thermal_solver = thermal_solver.ConvectionDiffusionSolver(
                thermal_model_part, self.domain_size)
        else:

            class SolverSettings:
                def __init__(self, domain_size):
                    self.domain_size = domain_size

            settings = SolverSettings(self.domain_size)
            self.thermal_solver = thermal_solver.CreateSolver(
                self.model_part, settings)
        self.thermal_solver.Initialize()
示例#6
0
domain_size = 2
problem_name = "slip_test"
dynamic_tau = 1.0
oss_switch = 0
print_output = False
time_step = 0.1
max_time = 1.0
y_wall = 0.01
density = 1.0
viscosity = 0.01

# Import solver and define solution step data
#~ import monolithic_solver_eulerian as monolithic_solver
import vms_monolithic_solver as monolithic_solver
monolithic_solver.AddVariables(fluid_model_part)

# reading the fluid part
gid_mode = GiDPostMode.GiD_PostBinary
multifile = MultiFileFlag.SingleFile
deformed_mesh_flag = WriteDeformedMeshFlag.WriteUndeformed
write_conditions = WriteConditionsFlag.WriteElementsOnly
gid_io = GidIO(problem_name, gid_mode, multifile, deformed_mesh_flag,
               write_conditions)
model_part_io_fluid = ModelPartIO(problem_name)
model_part_io_fluid.ReadModelPart(fluid_model_part)

# setting up the buffer size: SHOULD BE DONE AFTER READING!!!
fluid_model_part.SetBufferSize(2)

# adding dofs
示例#7
0
    def setUpSolvers(self):
        oss_switch = 0

        import vms_monolithic_solver
        vms_monolithic_solver.AddVariables(self.model_part)

        if self.convection_diffusion_solver == 'bfecc':
            import bfecc_convection_diffusion_solver as thermal_solver
        elif self.convection_diffusion_solver == 'eulerian':
            import eulerian_convection_diffusion_solver as thermal_solver
        else:
            raise Exception(
                "Unsupported convection-diffusion solver option: {0}".format(
                    self.convection_diffusion_solver))

        thermal_solver.AddVariables(self.model_part)
        self.model_part.AddNodalSolutionStepVariable(FACE_HEAT_FLUX)
        self.model_part.AddNodalSolutionStepVariable(PROJECTED_SCALAR1)

        model_part_io = ModelPartIO(self.input_file)
        model_part_io.ReadModelPart(self.model_part)

        self.model_part.SetBufferSize(2)
        vms_monolithic_solver.AddDofs(self.model_part)
        thermal_solver.AddDofs(self.model_part)

        # Building custom fluid solver
        self.fluid_solver = vms_monolithic_solver.MonolithicSolver(
            self.model_part, self.domain_size)
        rel_vel_tol = 1e-5
        abs_vel_tol = 1e-7
        rel_pres_tol = 1e-5
        abs_pres_tol = 1e-7
        self.fluid_solver.conv_criteria = VelPrCriteria(
            rel_vel_tol, abs_vel_tol, rel_pres_tol, abs_pres_tol)
        self.fluid_solver.conv_criteria.SetEchoLevel(0)

        alpha = -0.3
        move_mesh = 0
        self.fluid_solver.time_scheme = ResidualBasedPredictorCorrectorVelocityBossakSchemeTurbulent(
            alpha, move_mesh, self.domain_size)
        precond = DiagonalPreconditioner()
        self.fluid_solver.linear_solver = BICGSTABSolver(1e-6, 5000, precond)
        builder_and_solver = ResidualBasedBlockBuilderAndSolver(
            self.fluid_solver.linear_solver)
        self.fluid_solver.max_iter = 50
        self.fluid_solver.compute_reactions = False
        self.fluid_solver.ReformDofSetAtEachStep = False
        self.fluid_solver.MoveMeshFlag = False

        self.fluid_solver.solver = ResidualBasedNewtonRaphsonStrategy(\
                self.model_part,
                self.fluid_solver.time_scheme,
                self.fluid_solver.linear_solver,
                self.fluid_solver.conv_criteria,
                builder_and_solver,
                self.fluid_solver.max_iter,
                self.fluid_solver.compute_reactions,
                self.fluid_solver.ReformDofSetAtEachStep,
                self.fluid_solver.MoveMeshFlag)

        self.fluid_solver.solver.SetEchoLevel(0)
        self.fluid_solver.solver.Check()

        self.model_part.ProcessInfo.SetValue(OSS_SWITCH, oss_switch)

        self.fluid_solver.divergence_clearance_steps = 0
        self.fluid_solver.use_slip_conditions = 0

        # thermal solver
        class SolverSettings:
            def __init__(self, domain_size):
                self.domain_size = domain_size

        settings = SolverSettings(self.domain_size)
        self.thermal_solver = thermal_solver.CreateSolver(
            self.model_part, settings)
        self.thermal_solver.Initialize()