Пример #1
0
    def _mapper_tests(self, input_filename, num_nodes, pure_implicit=False):

        self.__base_test_mapping(input_filename, num_nodes, pure_implicit)

        self.mortar_mapping_double.Execute()
        self.mortar_mapping_vector.Execute()

        ## DEBUG
        #self.__post_process()

        import from_json_check_result_process

        check_parameters = KratosMultiphysics.Parameters("""
        {
            "check_variables"      : ["TEMPERATURE","DISPLACEMENT"],
            "input_file_name"      : "",
            "model_part_name"      : "Structure",
            "sub_model_part_name"  : "Parts_Parts_Auto1"
        }
        """)

        check_parameters["input_file_name"].SetString(input_filename + ".json")

        check = from_json_check_result_process.FromJsonCheckResultProcess(
            self.StructureModel, check_parameters)
        check.ExecuteInitialize()
        check.ExecuteBeforeSolutionLoop()
        check.ExecuteFinalizeSolutionStep()
Пример #2
0
    def _mapper_tests(self,
                      input_filename,
                      num_nodes,
                      master_num_nodes,
                      pure_implicit=False,
                      inverted=False,
                      discontinuous=False,
                      origin_are_conditions=True,
                      destination_are_conditions=True):

        self.__base_test_mapping(input_filename, num_nodes, master_num_nodes,
                                 pure_implicit, inverted, discontinuous,
                                 origin_are_conditions,
                                 destination_are_conditions)

        self.mortar_mapping_double.Execute()
        self.mortar_mapping_vector.Execute()

        # Debug postprocess file
        #self.__post_process()

        import from_json_check_result_process

        check_parameters = KratosMultiphysics.Parameters("""
        {
            "check_variables"      : ["TEMPERATURE","DISPLACEMENT"],
            "input_file_name"      : "",
            "model_part_name"      : "Main",
            "sub_model_part_name"  : "Parts_Parts_Auto1"
        }
        """)

        if inverted:
            check_parameters["input_file_name"].SetString(input_filename +
                                                          "_inverted.json")
        else:
            check_parameters["input_file_name"].SetString(input_filename +
                                                          ".json")

        check = from_json_check_result_process.FromJsonCheckResultProcess(
            self.model, check_parameters)
        check.ExecuteInitialize()
        check.ExecuteBeforeSolutionLoop()
        check.ExecuteFinalizeSolutionStep()
def _create_check_outputs(current_model):
    import from_json_check_result_process

    check_parameters = KratosMultiphysics.Parameters("""
    {
        "gauss_points_check_variables": ["VON_MISES_STRESS"],
        "input_file_name"      : "",
        "time_frequency"       : 0.01,
        "model_part_name"      : "solid_part",
        "sub_model_part_name"  : "Body"
    }
    """)

    check_parameters["input_file_name"].SetString(
        GetFilePath(
            "cl_test/test_perfect_plasticity_implementation_verification_reference.json"
        ))

    check = from_json_check_result_process.FromJsonCheckResultProcess(
        current_model, check_parameters)
    check.ExecuteInitialize()
    check.ExecuteBeforeSolutionLoop()

    return check
Пример #4
0
    def test_remesh_sphere_skin(self):
        KratosMultiphysics.Logger.GetDefaultOutput().SetSeverity(
            KratosMultiphysics.Logger.Severity.WARNING)

        # We create the model part
        current_model = KratosMultiphysics.Model()
        main_model_part = current_model.CreateModelPart("MainModelPart")
        main_model_part.ProcessInfo.SetValue(KratosMultiphysics.DOMAIN_SIZE, 3)
        main_model_part.ProcessInfo.SetValue(KratosMultiphysics.TIME, 0.0)
        main_model_part.ProcessInfo.SetValue(KratosMultiphysics.DELTA_TIME,
                                             1.0)
        #main_model_part.ProcessInfo.SetValue(KratosMultiphysics.STEP, 1)

        # We add the variables needed
        main_model_part.AddNodalSolutionStepVariable(
            KratosMultiphysics.DISTANCE)

        # We import the model main_model_part
        file_path = os.path.dirname(os.path.realpath(__file__))
        KratosMultiphysics.ModelPartIO(
            file_path +
            "/mmg_eulerian_test/coarse_sphere_skin_test").ReadModelPart(
                main_model_part)

        for node in main_model_part.Nodes:
            node.SetSolutionStepValue(KratosMultiphysics.DISTANCE, abs(node.X))

        # We calculate the gradient of the distance variable
        KratosMultiphysics.VariableUtils().SetNonHistoricalVariable(
            KratosMultiphysics.NODAL_H, 0.0, main_model_part.Nodes)
        find_nodal_h = KratosMultiphysics.FindNodalHNonHistoricalProcess(
            main_model_part)
        find_nodal_h.Execute()

        # We set to zero the metric
        metric_vector = KratosMultiphysics.Vector(6)
        metric_vector[0] = 1.0
        metric_vector[1] = 1.0
        metric_vector[2] = 1.0
        metric_vector[3] = 0.0
        metric_vector[4] = 0.0
        metric_vector[5] = 0.0

        for node in main_model_part.Nodes:
            node.SetValue(MeshingApplication.METRIC_TENSOR_3D, metric_vector)

        mmg_parameters = KratosMultiphysics.Parameters("""
        {
            "filename"                         : "mmg_eulerian_test/coarse_sphere_skin_test",
            "save_external_files"              : true,
            "echo_level"                       : 0
        }
        """)

        # We create the remeshing utility
        mmg_parameters["filename"].SetString(
            file_path + "/" + mmg_parameters["filename"].GetString())
        mmg_process = MeshingApplication.MmgProcess3DSurfaces(
            main_model_part, mmg_parameters)

        # We remesh
        mmg_process.Execute()

        # Finally we export to GiD
        from gid_output_process import GiDOutputProcess
        gid_output = GiDOutputProcess(
            main_model_part, "gid_output",
            KratosMultiphysics.Parameters("""
                                        {
                                            "result_file_configuration" : {
                                                "gidpost_flags": {
                                                    "GiDPostMode": "GiD_PostBinary",
                                                    "WriteDeformedMeshFlag": "WriteUndeformed",
                                                    "WriteConditionsFlag": "WriteConditions",
                                                    "MultiFileFlag": "SingleFile"
                                                },
                                                "nodal_results"       : ["DISTANCE"]
                                            }
                                        }
                                        """))

        #gid_output.ExecuteInitialize()
        #gid_output.ExecuteBeforeSolutionLoop()
        #gid_output.ExecuteInitializeSolutionStep()
        #gid_output.PrintOutput()
        #gid_output.ExecuteFinalizeSolutionStep()
        #gid_output.ExecuteFinalize()

        from compare_two_files_check_process import CompareTwoFilesCheckProcess
        check_parameters = KratosMultiphysics.Parameters("""
                            {
                                "reference_file_name"   : "mmg_eulerian_test/coarse_sphere_skin_test_result.sol",
                                "output_file_name"      : "mmg_eulerian_test/coarse_sphere_skin_test_step=0.sol",
                                "dimension"             : 3,
                                "comparison_type"       : "sol_file"
                            }
                            """)
        check_parameters["reference_file_name"].SetString(
            file_path + "/" +
            check_parameters["reference_file_name"].GetString())
        check_parameters["output_file_name"].SetString(
            file_path + "/" + check_parameters["output_file_name"].GetString())
        check_files = CompareTwoFilesCheckProcess(check_parameters)

        check_files.ExecuteInitialize()
        check_files.ExecuteBeforeSolutionLoop()
        check_files.ExecuteInitializeSolutionStep()
        check_files.ExecuteFinalizeSolutionStep()
        check_files.ExecuteFinalize()

        import from_json_check_result_process

        check_parameters = KratosMultiphysics.Parameters("""
        {
            "check_variables"      : ["DISTANCE"],
            "input_file_name"      : "mmg_eulerian_test/distante_extrapolation_skin.json",
            "model_part_name"      : "MainModelPart",
            "time_frequency"       : 0.0
        }
        """)

        check_parameters["input_file_name"].SetString(
            os.path.join(file_path,
                         check_parameters["input_file_name"].GetString()))
        check = from_json_check_result_process.FromJsonCheckResultProcess(
            current_model, check_parameters)
        check.ExecuteInitialize()
        check.ExecuteBeforeSolutionLoop()
        check.ExecuteFinalizeSolutionStep()
Пример #5
0
    def test_remesh_sphere(self):
        KratosMultiphysics.Logger.GetDefaultOutput().SetSeverity(
            KratosMultiphysics.Logger.Severity.WARNING)

        # We create the model part
        current_model = KratosMultiphysics.Model()
        main_model_part = current_model.CreateModelPart("MainModelPart")
        main_model_part.ProcessInfo.SetValue(KratosMultiphysics.DOMAIN_SIZE, 3)
        main_model_part.ProcessInfo.SetValue(KratosMultiphysics.TIME, 0.0)
        main_model_part.ProcessInfo.SetValue(KratosMultiphysics.DELTA_TIME,
                                             1.0)
        #main_model_part.ProcessInfo.SetValue(KratosMultiphysics.STEP, 1)

        # We add the variables needed
        main_model_part.AddNodalSolutionStepVariable(
            KratosMultiphysics.DISTANCE)
        main_model_part.AddNodalSolutionStepVariable(
            KratosMultiphysics.DISTANCE_GRADIENT)
        main_model_part.AddNodalSolutionStepVariable(
            KratosMultiphysics.NODAL_H)
        main_model_part.AddNodalSolutionStepVariable(
            KratosMultiphysics.NODAL_AREA)

        # We import the model main_model_part
        file_path = os.path.dirname(os.path.realpath(__file__))
        KratosMultiphysics.ModelPartIO(file_path +
                                       "/mmg_eulerian_test/coarse_sphere_test"
                                       ).ReadModelPart(main_model_part)

        # We calculate the gradient of the distance variable
        find_nodal_h = KratosMultiphysics.FindNodalHProcess(main_model_part)
        find_nodal_h.Execute()
        local_gradient = KratosMultiphysics.ComputeNodalGradientProcess3D(
            main_model_part, KratosMultiphysics.DISTANCE,
            KratosMultiphysics.DISTANCE_GRADIENT,
            KratosMultiphysics.NODAL_AREA)
        local_gradient.Execute()

        # We set to zero the metric
        ZeroVector = KratosMultiphysics.Vector(6)
        ZeroVector[0] = 0.0
        ZeroVector[1] = 0.0
        ZeroVector[2] = 0.0
        ZeroVector[3] = 0.0
        ZeroVector[4] = 0.0
        ZeroVector[5] = 0.0

        for node in main_model_part.Nodes:
            node.SetValue(MeshingApplication.METRIC_TENSOR_3D, ZeroVector)

        # We define a metric using the ComputeLevelSetSolMetricProcess
        MetricParameters = KratosMultiphysics.Parameters("""
        {
            "minimal_size"                      : 1.0e-1,
            "enforce_current"                   : false,
            "anisotropy_remeshing"              : false,
            "anisotropy_parameters"             :{
                "hmin_over_hmax_anisotropic_ratio"  : 0.15,
                "boundary_layer_max_distance"       : 1.0e-4,
                "interpolation"                     : "Linear"
            }
        }
        """)
        metric_process = MeshingApplication.ComputeLevelSetSolMetricProcess3D(
            main_model_part, KratosMultiphysics.DISTANCE_GRADIENT,
            MetricParameters)

        metric_process.Execute()

        mmg_parameters = KratosMultiphysics.Parameters("""
        {
            "filename"                         : "mmg_eulerian_test/coarse_sphere_test",
            "save_external_files"              : true,
            "echo_level"                       : 0
        }
        """)

        # We create the remeshing utility
        mmg_parameters["filename"].SetString(
            file_path + "/" + mmg_parameters["filename"].GetString())
        mmg_process = MeshingApplication.MmgProcess3D(main_model_part,
                                                      mmg_parameters)

        # We remesh
        mmg_process.Execute()

        # Finally we export to GiD
        from gid_output_process import GiDOutputProcess
        gid_output = GiDOutputProcess(
            main_model_part, "gid_output",
            KratosMultiphysics.Parameters("""
                                        {
                                            "result_file_configuration" : {
                                                "gidpost_flags": {
                                                    "GiDPostMode": "GiD_PostBinary",
                                                    "WriteDeformedMeshFlag": "WriteUndeformed",
                                                    "WriteConditionsFlag": "WriteConditions",
                                                    "MultiFileFlag": "SingleFile"
                                                },
                                                "nodal_results"       : ["DISTANCE"]
                                            }
                                        }
                                        """))

        #gid_output.ExecuteInitialize()
        #gid_output.ExecuteBeforeSolutionLoop()
        #gid_output.ExecuteInitializeSolutionStep()
        #gid_output.PrintOutput()
        #gid_output.ExecuteFinalizeSolutionStep()
        #gid_output.ExecuteFinalize()

        from compare_two_files_check_process import CompareTwoFilesCheckProcess
        check_parameters = KratosMultiphysics.Parameters("""
                            {
                                "reference_file_name"   : "mmg_eulerian_test/coarse_sphere_test_result.sol",
                                "output_file_name"      : "mmg_eulerian_test/coarse_sphere_test_step=0.sol",
                                "dimension"             : 3,
                                "comparison_type"       : "sol_file"
                            }
                            """)
        check_parameters["reference_file_name"].SetString(
            file_path + "/" +
            check_parameters["reference_file_name"].GetString())
        check_parameters["output_file_name"].SetString(
            file_path + "/" + check_parameters["output_file_name"].GetString())
        check_files = CompareTwoFilesCheckProcess(check_parameters)

        check_files.ExecuteInitialize()
        check_files.ExecuteBeforeSolutionLoop()
        check_files.ExecuteInitializeSolutionStep()
        check_files.ExecuteFinalizeSolutionStep()
        check_files.ExecuteFinalize()

        import from_json_check_result_process

        check_parameters = KratosMultiphysics.Parameters("""
        {
            "check_variables"      : ["DISTANCE"],
            "input_file_name"      : "mmg_eulerian_test/distante_extrapolation.json",
            "model_part_name"      : "MainModelPart",
            "time_frequency"       : 0.0
        }
        """)

        check_parameters["input_file_name"].SetString(
            file_path + "/" + check_parameters["input_file_name"].GetString())
        check = from_json_check_result_process.FromJsonCheckResultProcess(
            current_model, check_parameters)
        check.ExecuteInitialize()
        check.ExecuteBeforeSolutionLoop()
        check.ExecuteFinalizeSolutionStep()
Пример #6
0
    def _dynamic_search_tests(self, input_filename, num_nodes):
        KM.Logger.GetDefaultOutput().SetSeverity(KM.Logger.Severity.WARNING)

        self.model = KM.Model()
        self.main_model_part = self.model.CreateModelPart("Structure", 2)

        ## Creation of the Kratos model (build sub_model_parts or submeshes)
        self.StructureModel = {"Structure": self.main_model_part}

        self.main_model_part.AddNodalSolutionStepVariable(KM.DISPLACEMENT)
        self.main_model_part.AddNodalSolutionStepVariable(KM.VELOCITY)
        self.main_model_part.AddNodalSolutionStepVariable(KM.ACCELERATION)
        self.main_model_part.AddNodalSolutionStepVariable(
            KM.VOLUME_ACCELERATION)
        self.main_model_part.AddNodalSolutionStepVariable(KM.REACTION)
        self.main_model_part.AddNodalSolutionStepVariable(KM.NORMAL)
        self.main_model_part.AddNodalSolutionStepVariable(
            CSMA.LAGRANGE_MULTIPLIER_CONTACT_PRESSURE)
        self.main_model_part.AddNodalSolutionStepVariable(CSMA.WEIGHTED_GAP)
        self.main_model_part.AddNodalSolutionStepVariable(KM.NODAL_H)

        self.main_model_part.CloneTimeStep(1.01)

        KM.ModelPartIO(input_filename).ReadModelPart(self.main_model_part)

        KM.VariableUtils().AddDof(KM.DISPLACEMENT_X, KM.REACTION_X,
                                  self.main_model_part)
        KM.VariableUtils().AddDof(KM.DISPLACEMENT_Y, KM.REACTION_Y,
                                  self.main_model_part)
        KM.VariableUtils().AddDof(KM.DISPLACEMENT_Z, KM.REACTION_Z,
                                  self.main_model_part)
        KM.VariableUtils().AddDof(CSMA.LAGRANGE_MULTIPLIER_CONTACT_PRESSURE,
                                  CSMA.WEIGHTED_GAP, self.main_model_part)

        if (self.main_model_part.HasSubModelPart("Contact")):
            interface_model_part = self.main_model_part.GetSubModelPart(
                "Contact")
        else:
            interface_model_part = self.main_model_part.CreateSubModelPart(
                "Contact")

        self.contact_model_part = self.main_model_part.GetSubModelPart(
            "DISPLACEMENT_Displacement_Auto2")

        model_part_slave = self.main_model_part.GetSubModelPart(
            "Parts_Parts_Auto1")
        model_part_master = self.main_model_part.GetSubModelPart(
            "Parts_Parts_Auto2")
        KM.VariableUtils().SetFlag(KM.SLAVE, False,
                                   self.contact_model_part.Nodes)
        KM.VariableUtils().SetFlag(KM.MASTER, True,
                                   self.contact_model_part.Nodes)
        KM.VariableUtils().SetFlag(KM.SLAVE, True, model_part_slave.Nodes)
        KM.VariableUtils().SetFlag(KM.MASTER, False, model_part_slave.Nodes)

        for node in model_part_slave.Nodes:
            # DEBUG
            #node.X -= 9.81 / 32.0
            #node.SetSolutionStepValue(KM.DISPLACEMENT_X, -9.81 / 32.0)
            node.SetSolutionStepValue(KM.ACCELERATION_X, 1, -9.81)
        del (node)

        self.main_model_part.ProcessInfo[KM.STEP] = 1
        self.main_model_part.ProcessInfo[KM.DELTA_TIME] = 0.5

        for prop in self.main_model_part.GetProperties():
            prop[CSMA.INTEGRATION_ORDER_CONTACT] = 3

        self.main_model_part.ProcessInfo[CSMA.ACTIVE_CHECK_FACTOR] = 3.0e-1

        KM.VariableUtils().SetFlag(KM.INTERFACE, True,
                                   self.contact_model_part.Nodes)

        pre_process = CSMA.InterfacePreprocessCondition(self.main_model_part)

        interface_parameters = KM.Parameters(
            """{"simplify_geometry": false}""")
        pre_process.GenerateInterfacePart3D(self.contact_model_part,
                                            interface_parameters)

        # We copy the conditions to the ContactSubModelPart
        for cond in self.contact_model_part.Conditions:
            interface_model_part.AddCondition(cond)
        del (cond)
        for node in self.contact_model_part.Nodes:
            interface_model_part.AddNode(node, 0)
        del (node)

        # We compute NODAL_H that can be used in the search and some values computation
        self.find_nodal_h = KM.FindNodalHProcess(self.contact_model_part)
        self.find_nodal_h.Execute()

        # We initialize the conditions
        alm_init_var = CSMA.ALMFastInit(self.contact_model_part)
        alm_init_var.Execute()

        search_parameters = KM.Parameters("""
        {
            "dynamic_search"              : true
        }
        """)
        if (num_nodes == 3):
            contact_search = CSMA.TreeContactSearch3D3N(
                self.main_model_part, search_parameters)
        else:
            contact_search = CSMA.TreeContactSearch3D4N(
                self.main_model_part, search_parameters)

        # We initialize the search utility
        contact_search.CreatePointListMortar()
        contact_search.InitializeMortarConditions()
        contact_search.UpdateMortarConditions()

        ## DEBUG
        #self.__post_process()

        import from_json_check_result_process

        check_parameters = KM.Parameters("""
        {
            "check_variables"      : ["NORMAL_GAP"],
            "input_file_name"      : "",
            "model_part_name"      : "Structure",
            "historical_value"     : false,
            "time_frequency"       : 0.0,
            "sub_model_part_name"  : "Parts_Parts_Auto1"
        }
        """)

        check_parameters["input_file_name"].SetString(input_filename +
                                                      "_dynamic_search.json")

        check = from_json_check_result_process.FromJsonCheckResultProcess(
            self.StructureModel, check_parameters)
        check.ExecuteInitialize()
        check.ExecuteBeforeSolutionLoop()
        check.ExecuteFinalizeSolutionStep()