Пример #1
0
    def SPPostProcessResults(self, time):
        DemFem.DemStructuresCouplingUtilities().MarkBrokenSpheres(
            self.ring_submodelpart)

        center = Kratos.Array3()
        center[0] = self.sp_parameters["problem_data"]["center"][0].GetDouble()
        center[1] = self.sp_parameters["problem_data"]["center"][1].GetDouble()
        center[2] = self.sp_parameters["problem_data"]["center"][2].GetDouble()
        axis = Kratos.Array3()
        axis[0] = self.sp_parameters["problem_data"]["axis"][0].GetDouble()
        axis[1] = self.sp_parameters["problem_data"]["axis"][1].GetDouble()
        axis[2] = self.sp_parameters["problem_data"]["axis"][2].GetDouble()

        radius = 0
        if self.test_number == 1:
            radius = 0.0036195
            #95% of the real hole. CTW16 specimen
        elif self.test_number == 2:
            radius = 0.012065
            #95% of the real hole. CTW10 specimen
        elif self.test_number == 3:
            radius = 0.036195
            #95% of the real hole. Blind Test

        self.dem_solution.creator_destructor.MarkParticlesForErasingGivenCylinder(
            self.ring_submodelpart, center, axis, radius)

        if self.test_number == 1 or self.test_number == 2:
            if self.structural_solution._GetSolver(
            ).main_model_part.ProcessInfo[Kratos.DOMAIN_SIZE] == 2:
                self.outer_walls_model_part = self.model[
                    "Structure.LinePressure2D_Outer_line"]
            else:
                self.outer_walls_model_part = self.model[
                    "Structure.SurfacePressure3D_lateral_pressure"]
            DemFem.DemStructuresCouplingUtilities(
            ).ComputeSandProductionWithDepthFirstSearchNonRecursiveImplementation(
                self.ring_submodelpart, self.outer_walls_model_part, time)
            DemFem.DemStructuresCouplingUtilities().ComputeSandProduction(
                self.ring_submodelpart, self.outer_walls_model_part, time)
        elif self.test_number == 3:
            if self.structural_solution._GetSolver(
            ).main_model_part.ProcessInfo[Kratos.DOMAIN_SIZE] == 2:
                self.outer_walls_model_part_1 = self.model[
                    "Structure.LinePressure2D_Left_line"]
                # self.outer_walls_model_part_2 = self.model["Structure.LinePressure2D_Bot_line"]
            else:
                self.outer_walls_model_part_1 = self.model[
                    "Structure.SurfacePressure3D_sigmaXpos"]
                # self.outer_walls_model_part_2 = self.model["Structure.SurfacePressure3D_sigmaYpos"]
            # NOTE: The stress printed in this case will also be the SigmaZ, but probably SigmaX is more appropriate
            DemFem.DemStructuresCouplingUtilities(
            ).ComputeSandProductionWithDepthFirstSearchNonRecursiveImplementation(
                self.ring_submodelpart, self.outer_walls_model_part_1, time)
            DemFem.DemStructuresCouplingUtilities().ComputeSandProduction(
                self.ring_submodelpart, self.outer_walls_model_part_1, time)
    def PrintResultsForGid(self, time):
        super(DEMAnalysisStage2DSpRigidFem, self).PrintResultsForGid(time)

        DemFem.DemStructuresCouplingUtilities().MarkBrokenSpheres(
            self.ring_submodelpart)
        self.creator_destructor.MarkParticlesForErasingGivenCylinder(
            self.ring_submodelpart, self.center, self.axis,
            self.radius_to_delete_sp)

        DemFem.DemStructuresCouplingUtilities(
        ).ComputeSandProductionWithDepthFirstSearchNonRecursiveImplementation(
            self.ring_submodelpart, self.rigid_face_model_part, self.time)
        DemFem.DemStructuresCouplingUtilities().ComputeSandProduction(
            self.ring_submodelpart, self.rigid_face_model_part, self.time)
    def __init__(self, model_part, test_number):

        if not test_number:
            return

        self.model_part = model_part

        if test_number == 1:  # CTW16
            minimum_radius = 0.00381
            maximum_radius = 0.00501
        elif test_number == 2:  # CTW10
            minimum_radius = 0.0127
            maximum_radius = 0.0139
        else:  # Blind test
            minimum_radius = 0.0381
            maximum_radius = 0.0393

        self.settings = KratosMultiphysics.Parameters("""
        {
            "cylinder_center": [0.0,0.0,0.0]
        }  """)

        self.settings.AddEmptyValue("min_radius")
        self.settings["min_radius"].SetDouble(minimum_radius)
        self.settings.AddEmptyValue("max_radius")
        self.settings["max_radius"].SetDouble(maximum_radius)

        self.utility = DemFem.StressFailureCheckUtilities(
            self.model_part, self.settings)
 def _TransferStructuresSkinToDem(self):
     self.structural_mp = self.structural_solution._GetSolver(
     ).GetComputingModelPart()
     self.skin_mp = self.structural_mp.GetSubModelPart(
         "DetectedByProcessSkinModelPart")
     dem_walls_mp = self.dem_solution.rigid_face_model_part.CreateSubModelPart(
         "SkinTransferredFromStructure")
     max_prop_id = 0
     for prop in dem_walls_mp.Properties:
         if prop.Id > max_prop_id:
             max_prop_id = prop.Id
     props = Kratos.Properties(max_prop_id + 1)
     # NOTE: this should be more general
     props[Dem.STATIC_FRICTION] = 0.2
     props[Dem.DYNAMIC_FRICTION] = 0.2
     props[Dem.WALL_COHESION] = 0.0
     props[Dem.COMPUTE_WEAR] = False
     props[Dem.SEVERITY_OF_WEAR] = 0.001
     props[Dem.IMPACT_WEAR_SEVERITY] = 0.001
     props[Dem.BRINELL_HARDNESS] = 200.0
     props[Kratos.YOUNG_MODULUS] = 7e9
     props[Kratos.POISSON_RATIO] = 0.16
     dem_walls_mp.AddProperties(props)
     DemFem.DemStructuresCouplingUtilities().TransferStructuresSkinToDem(
         self.skin_mp, dem_walls_mp, props)
Пример #5
0
    def __init__(self, fem_model_part, dem_model_part, test_number):

        if not test_number:
            return

        self.parameters = Kratos.Parameters("""
        {
            "file_name": "sp_data.hdf5",
            "target_porosity" : 0.3,
            "probe_height" : 0.2032
        }  """)

        if test_number == 1:  # CTW16
            test_id = "CTW16"
        elif test_number == 2:  # CTW10
            test_id = "CTW10"
        else:  # Blind test
            test_id = "BlindTest"

        self.parameters.AddEmptyValue("test_id")
        self.parameters["test_id"].SetString(test_id)

        self.dem_model_part = dem_model_part
        self.fem_model_part = fem_model_part

        self.post_process_utility = DemFem.PostProcessUtilities(
            self.dem_model_part)

        self.internal_radius, self.external_radius, self.interface_radius, self.thickness, self.volume, self.average_radius = self.GetProbeDimensions(
        )
        for elem in self.dem_model_part.Elements:
            self.density = elem.Properties[Dem.PARTICLE_DENSITY]
            break
        self.porosity = self.CalculatePorosity()
        self.problem_path = os.getcwd()
        self.file_path = os.path.join(str(self.problem_path),
                                      self.parameters["file_name"].GetString())
        self.target_porosity = self.parameters["target_porosity"].GetDouble()
        self.real_probe_height = self.parameters["probe_height"].GetDouble()

        self.dtype = np.float64
        self.compression_type = 'gzip'
        self.number_of_readings = 0
        self.last_time = -float('inf')

        # This assumes annulus centered at the origin
        with h5py.File(self.file_path, 'w') as f:
            f.attrs['test_id'] = self.parameters["test_id"].GetString()
            f.attrs['internal_radius'] = self.internal_radius
            f.attrs['external_radius'] = self.external_radius
            f.attrs['interface_radius'] = self.interface_radius
            f.attrs['thickness'] = self.thickness
            f.attrs['volume'] = self.volume
            f.attrs['real_probe_height'] = self.real_probe_height
            f.attrs['target_porosity'] = self.target_porosity
            f.attrs['porosity'] = self.porosity
            f.attrs['density'] = self.density
Пример #6
0
    def __init__(self, Model, settings):
        KratosMultiphysics.Process.__init__(self)

        # Control module process acting on the imposed direction: 0 (X), 1 (Y), 2 (Z) or 3 (radial)
        # The radial direction is valid only for the vertical walls of a right cylinder with the base
        # on the 'X-Y' plane centered on (0,0). Negative target_stress means compression.

        self.model_part = Model[settings["model_part_name"].GetString()]
        self.control_module_process = DemFem.ControlModuleProcess(
            self.model_part, settings)
Пример #7
0
    def TransferFEMSkinToDEM(self):
        fem_skin_mp = self.FEM_Solution.main_model_part.GetSubModelPart(
            "SkinDEMModelPart")

        if self.DEM_Solution.rigid_face_model_part.HasSubModelPart(
                "SkinTransferredFromStructure"):
            self.EraseConditionsAndNodesSubModelPart()
            dem_walls_mp = self.DEM_Solution.rigid_face_model_part.GetSubModelPart(
                "SkinTransferredFromStructure")
            dem_walls_mp.SetValue(KratosDEM.RIGID_BODY_OPTION, False)
            props = self.DEM_Solution.spheres_model_part.GetProperties()[2]
            DemFem.DemStructuresCouplingUtilities(
            ).TransferStructuresSkinToDem(fem_skin_mp, dem_walls_mp, props)
        else:  # have to create it
            # props = self.CreateFEMPropertiesForDEFEContact()
            props = self.DEM_Solution.spheres_model_part.GetProperties()[2]
            dem_walls_mp = self.DEM_Solution.rigid_face_model_part.CreateSubModelPart(
                "SkinTransferredFromStructure")
            dem_walls_mp.SetValue(KratosDEM.RIGID_BODY_OPTION, False)
            # dem_walls_mp.AddProperties(props)
            DemFem.DemStructuresCouplingUtilities(
            ).TransferStructuresSkinToDem(fem_skin_mp, dem_walls_mp, props)
Пример #8
0
    def __init__(self, Model, settings):

        #NOTE: Negative target_stress means compression

        self.spheres_model_part = Model["SpheresPart"]
        self.fem_model_part = Model["Structure"]

        self.parameters = settings["multiaxial_control_module_fem_dem_generalized_2d_utility"]

        self.cm_step = 0
        self.output_interval = self.parameters["Parameters"]["output_interval"].GetInt()

        self.cm_utility = DemFem.MultiaxialControlModuleFEMDEMGeneralized2DUtilities(self.spheres_model_part,
                                                                                self.fem_model_part,
                                                                                self.parameters)
Пример #9
0
 def _TransferStructuresSkinToDem(self):
     self.structural_mp = self.structural_solution._GetSolver(
     ).GetComputingModelPart()
     self.skin_mp = self.structural_mp.GetSubModelPart(
         "DetectedByProcessSkinModelPart")
     dem_walls_mp = self.dem_solution.rigid_face_model_part
     props = Kratos.Properties(0)
     props[Dem.WALL_FRICTION] = 0.5773502691896257
     props[Dem.WALL_COHESION] = 0.0
     props[Dem.COMPUTE_WEAR] = False
     props[Dem.SEVERITY_OF_WEAR] = 0.001
     props[Dem.IMPACT_WEAR_SEVERITY] = 0.001
     props[Dem.BRINELL_HARDNESS] = 200.0
     props[Kratos.YOUNG_MODULUS] = 1e20
     props[Kratos.POISSON_RATIO] = 0.25
     dem_walls_mp.AddProperties(props)
     DemFem.DemStructuresCouplingUtilities().TransferStructuresSkinToDem(
         self.skin_mp, dem_walls_mp, props)
Пример #10
0
    def RunSolutionLoop(self):

        self.dem_solution.step = 0
        self.dem_solution.time = 0.0
        self.dem_solution.time_old_print = 0.0
        self.time_dem = 0.0
        self.Dt_structural = self.structural_solution._GetSolver(
        ).settings["time_stepping"]["time_step"].GetDouble()

        while self.structural_solution.time < self.structural_solution.end_time:

            portion_of_the_force_which_is_new = 0.4
            DemFem.DemStructuresCouplingUtilities().SmoothLoadTrasferredToFem(
                self.dem_solution.rigid_face_model_part,
                portion_of_the_force_which_is_new)

            self.structural_solution.time = self.structural_solution._GetSolver(
            ).AdvanceInTime(self.structural_solution.time)

            self.structural_solution.InitializeSolutionStep()
            if self.test_number:
                self.control_module_fem_dem_utility.ExecuteInitializeSolutionStep(
                )
            self.structural_solution._GetSolver().Predict()
            self.structural_solution._GetSolver().SolveSolutionStep()
            self.structural_solution.FinalizeSolutionStep()
            self.structural_solution.OutputSolutionStep()

            time_final_DEM_substepping = self.structural_solution.time

            self.Dt_DEM = self.dem_solution.spheres_model_part.ProcessInfo.GetValue(
                Kratos.DELTA_TIME)

            DemFem.InterpolateStructuralSolutionForDEM(
            ).SaveStructuralSolution(self.structural_mp)

            DemFem.ComputeDEMFaceLoadUtility().ClearDEMFaceLoads(self.skin_mp)

            if self.test_number == 1 or self.test_number == 2:
                self.outer_walls_model_part = self.model[
                    "Structure.SurfacePressure3D_lateral_pressure"]
                DemFem.DemStructuresCouplingUtilities(
                ).ComputeSandProductionWithDepthFirstSearch(
                    self.dem_solution.spheres_model_part,
                    self.outer_walls_model_part, self.structural_solution.time)
                DemFem.DemStructuresCouplingUtilities().ComputeSandProduction(
                    self.dem_solution.spheres_model_part,
                    self.outer_walls_model_part, self.structural_solution.time)
            elif self.test_number == 3:
                self.outer_walls_model_part_1 = self.model[
                    "Structure.SurfacePressure3D_sigmaXpos"]
                self.outer_walls_model_part_2 = self.model[
                    "Structure.SurfacePressure3D_sigmaYpos"]
                DemFem.DemStructuresCouplingUtilities(
                ).ComputeTriaxialSandProduction(
                    self.dem_solution.spheres_model_part,
                    self.outer_walls_model_part_1,
                    self.outer_walls_model_part_2,
                    self.structural_solution.time)

            for self.dem_solution.time_dem in self.yield_DEM_time(
                    self.dem_solution.time, time_final_DEM_substepping,
                    self.Dt_DEM):
                self.dem_solution.time = self.dem_solution.time + self.dem_solution._GetSolver(
                ).dt

                self.dem_solution.step += 1

                self.dem_solution.DEMFEMProcedures.UpdateTimeInModelParts(
                    self.dem_solution.all_model_parts, self.dem_solution.time,
                    self.dem_solution._GetSolver().dt, self.dem_solution.step)

                self.dem_solution.InitializeSolutionStep()

                self.dem_solution._GetSolver().Predict()

                DemFem.InterpolateStructuralSolutionForDEM(
                ).InterpolateStructuralSolution(
                    self.structural_mp, self.Dt_structural,
                    self.structural_solution.time,
                    self.dem_solution._GetSolver().dt, self.dem_solution.time)

                self.dem_solution.SolverSolve()

                DemFem.DemStructuresCouplingUtilities().MarkBrokenSpheres(
                    self.dem_solution.spheres_model_part)

                center = Kratos.Array3()
                center[0] = self.sp_parameters["problem_data"]["center"][
                    0].GetDouble()
                center[1] = self.sp_parameters["problem_data"]["center"][
                    1].GetDouble()
                center[2] = self.sp_parameters["problem_data"]["center"][
                    2].GetDouble()
                axis = Kratos.Array3()
                axis[0] = self.sp_parameters["problem_data"]["axis"][
                    0].GetDouble()
                axis[1] = self.sp_parameters["problem_data"]["axis"][
                    1].GetDouble()
                axis[2] = self.sp_parameters["problem_data"]["axis"][
                    2].GetDouble()

                radius = 0
                if self.test_number == 1:
                    radius = 0.0036195
                    #95% of the real hole. CTW16 specimen
                elif self.test_number == 2:
                    radius = 0.012065
                    #95% of the real hole. CTW10 specimen
                elif self.test_number == 3:
                    radius = 0.036195
                    #95% of the real hole. Blind Test

                self.dem_solution.creator_destructor.MarkParticlesForErasingGivenCylinder(
                    self.dem_solution.spheres_model_part, center, axis, radius)

                self.dem_solution.FinalizeSolutionStep()

                DemFem.ComputeDEMFaceLoadUtility().CalculateDEMFaceLoads(
                    self.skin_mp,
                    self.dem_solution._GetSolver().dt, self.Dt_structural)

                #### PRINTING GRAPHS ####
                os.chdir(self.dem_solution.graphs_path)
                self.dem_solution.post_utils.ComputeMeanVelocitiesInTrap(
                    "Average_Velocity.txt", self.dem_solution.time,
                    self.dem_solution.graphs_path)

                self.dem_solution.materialTest.MeasureForcesAndPressure()
                self.dem_solution.materialTest.PrintGraph(
                    self.dem_solution.time)

                self.dem_solution.DEMFEMProcedures.PrintGraph(
                    self.dem_solution.time)
                self.dem_solution.DEMFEMProcedures.PrintBallsGraph(
                    self.dem_solution.time)

                self.dem_solution.DEMEnergyCalculator.CalculateEnergyAndPlot(
                    self.dem_solution.time)

                self.dem_solution.BeforePrintingOperations(
                    self.dem_solution.time)

                #### GiD IO ##########################################
                if self.dem_solution.IsTimeToPrintPostProcess():
                    self.dem_solution._GetSolver().PrepareElementsForPrinting()
                    if self.dem_solution.DEM_parameters[
                            "ContactMeshOption"].GetBool():
                        self.dem_solution._GetSolver(
                        ).PrepareContactElementsForPrinting()
                    self.dem_solution.PrintResultsForGid(
                        self.dem_solution.time)
                    self.dem_solution.demio.PrintMultifileLists(
                        self.dem_solution.time, self.dem_solution.post_path)
                    self.dem_solution.time_old_print = self.dem_solution.time

                    if self.test_number:
                        self.stress_failure_check_utility.ExecuteFinalizeSolutionStep(
                        )

                self.dem_solution.FinalizeTimeStep(self.dem_solution.time)

            DemFem.InterpolateStructuralSolutionForDEM(
            ).RestoreStructuralSolution(self.structural_mp)

            if self.test_number:
                self.control_module_fem_dem_utility.ExecuteFinalizeSolutionStep(
                )

            # Write SP data
            if self.IsPostProcessWriteStep():
                self.sp_post_process_tool.WriteData()
    def __init__(self, Model, spheres_model_part, test_number):

        fem_main_model_part = Model["Structure"]
        self.dem_main_model_part = spheres_model_part

        self.components_utility_list = []

        if not test_number:
            return

        if test_number == 1: # CTW16
            compression_length = 0.00381
            # face_area = 0.008062
            alternate_axis_loading = False
            limit_velocity = -50.0
        elif test_number == 2: # CTW10
            compression_length = 0.00381
            # face_area = 0.007601
            alternate_axis_loading = False
            limit_velocity = -50.0
        else: # Blind test
            compression_length = 0.009144
            # face_area = 0.088343
            alternate_axis_loading = True
            limit_velocity = -15.0

        if fem_main_model_part.ProcessInfo[KratosMultiphysics.DOMAIN_SIZE] == 2:
            self.fem_submodel_part = Model["Structure.Parts_Solid_part"]
            settings = KratosMultiphysics.Parameters( """
            {
                "target_stress_table_id" : 1,
                "initial_velocity" : 0.0,
                "velocity_factor" : 1.0,
                "compression_length" : 1.0,
                "young_modulus" : 7.0e9,
                "stress_increment_tolerance": 1.0e-3,
                "update_stiffness": true,
                "start_time" : 0.0,
                "stress_averaging_time": 1.0e-5
            }  """ )
            settings.AddEmptyValue("alternate_axis_loading")
            settings["alternate_axis_loading"].SetBool(alternate_axis_loading)
            settings.AddEmptyValue("limit_velocity")
            settings["limit_velocity"].SetDouble(limit_velocity)
            self.components_utility_list.append(DemFem.ControlModuleFemDem2DUtilities(self.fem_submodel_part, self.dem_main_model_part, settings))
        else:
            self.top_fem_model_part = Model["Structure.SurfacePressure3D_top_pressure"]
            #self.top_fem_model_part = Model["Structure.SurfacePressure3D_sigmaZpos"]
            self.top_dem_model_part = self.dem_main_model_part.GetSubModelPart("topdem")
            top_settings = KratosMultiphysics.Parameters( """
            {
                "imposed_direction" : 2,
                "alternate_axis_loading": false,
                "target_stress_table_id" : 1,
                "initial_velocity" : 0.0,
                "limit_velocity" : -0.1,
                "velocity_factor" : 0.5,
                "young_modulus" : 7.0e9,
                "stress_increment_tolerance": 100.0,
                "update_stiffness": true,
                "start_time" : 0.0,
                "stress_averaging_time": 1.0e-5
            }  """ )

            top_settings.AddEmptyValue("compression_length")
            top_settings["compression_length"].SetDouble(compression_length)
            self.components_utility_list.append(DemFem.ControlModuleFemDemUtilities(self.top_fem_model_part, self.top_dem_model_part, top_settings))

            self.bot_fem_model_part = Model["Structure.SurfacePressure3D_bottom_pressure"]
            #self.bot_fem_model_part = Model["Structure.SurfacePressure3D_sigmaZneg"]
            self.bot_dem_model_part = self.dem_main_model_part.GetSubModelPart("botdem")
            bot_settings = KratosMultiphysics.Parameters( """
            {
                "imposed_direction" : 2,
                "alternate_axis_loading": false,
                "target_stress_table_id" : 2,
                "initial_velocity" : 0.0,
                "limit_velocity" : 0.1,
                "velocity_factor" : 0.5,
                "young_modulus" : 7.0e9,
                "stress_increment_tolerance": 100.0,
                "update_stiffness": true,
                "start_time" : 0.0,
                "stress_averaging_time": 1.0e-5
            }  """ )

            bot_settings.AddEmptyValue("compression_length")
            bot_settings["compression_length"].SetDouble(compression_length)
            self.components_utility_list.append(DemFem.ControlModuleFemDemUtilities(self.bot_fem_model_part, self.bot_dem_model_part, bot_settings))
Пример #12
0
    def RunSolutionLoop(self):

        self.dem_solution.step = 0
        self.dem_solution.time = 0.0
        self.dem_solution.time_old_print = 0.0
        self.time_dem = 0.0
        self.Dt_structural = self.structural_solution._GetSolver(
        ).settings["time_stepping"]["time_step"].GetDouble()

        while self.structural_solution.time < self.structural_solution.end_time:

            portion_of_the_force_which_is_new = 0.4
            DemFem.DemStructuresCouplingUtilities().SmoothLoadTrasferredToFem(
                self.dem_solution.rigid_face_model_part,
                portion_of_the_force_which_is_new)

            self.structural_solution.time = self.structural_solution._GetSolver(
            ).AdvanceInTime(self.structural_solution.time)

            self.structural_solution.InitializeSolutionStep()
            self.structural_solution._GetSolver().Predict()
            self.structural_solution._GetSolver().SolveSolutionStep()
            self.structural_solution.FinalizeSolutionStep()
            self.structural_solution.OutputSolutionStep()

            time_final_DEM_substepping = self.structural_solution.time

            self.Dt_DEM = self.dem_solution.spheres_model_part.ProcessInfo.GetValue(
                Kratos.DELTA_TIME)

            DemFem.InterpolateStructuralSolutionForDEM(
            ).SaveStructuralSolution(self.structural_mp)

            DemFem.ComputeDEMFaceLoadUtility().ClearDEMFaceLoads(self.skin_mp)

            for self.dem_solution.time_dem in self.yield_DEM_time(
                    self.dem_solution.time, time_final_DEM_substepping,
                    self.Dt_DEM):
                self.dem_solution.time = self.dem_solution.time + self.dem_solution._GetSolver(
                ).dt

                self.dem_solution.step += 1

                self.dem_solution.DEMFEMProcedures.UpdateTimeInModelParts(
                    self.dem_solution.all_model_parts, self.dem_solution.time,
                    self.dem_solution._GetSolver().dt, self.dem_solution.step)

                self.dem_solution.InitializeSolutionStep()

                DemFem.InterpolateStructuralSolutionForDEM(
                ).InterpolateStructuralSolution(
                    self.structural_mp, self.Dt_structural,
                    self.structural_solution.time,
                    self.dem_solution._GetSolver().dt, self.dem_solution.time)

                self.dem_solution.SolverSolve()

                self.dem_solution.FinalizeSolutionStep()

                DemFem.ComputeDEMFaceLoadUtility().CalculateDEMFaceLoads(
                    self.skin_mp,
                    self.dem_solution._GetSolver().dt, self.Dt_structural)

                self.dem_solution.DEMFEMProcedures.MoveAllMeshes(
                    self.dem_solution.all_model_parts, self.dem_solution.time,
                    self.dem_solution._GetSolver().dt)
                #DEMFEMProcedures.MoveAllMeshesUsingATable(rigid_face_model_part, time, dt)

                #### PRINTING GRAPHS ####
                os.chdir(self.dem_solution.graphs_path)
                self.dem_solution.post_utils.ComputeMeanVelocitiesInTrap(
                    "Average_Velocity.txt", self.dem_solution.time,
                    self.dem_solution.graphs_path)

                self.dem_solution.materialTest.MeasureForcesAndPressure()
                self.dem_solution.materialTest.PrintGraph(
                    self.dem_solution.time)

                self.dem_solution.DEMFEMProcedures.PrintGraph(
                    self.dem_solution.time)
                self.dem_solution.DEMFEMProcedures.PrintBallsGraph(
                    self.dem_solution.time)

                self.dem_solution.DEMEnergyCalculator.CalculateEnergyAndPlot(
                    self.dem_solution.time)

                self.dem_solution.BeforePrintingOperations(
                    self.dem_solution.time)

                #### GiD IO ##########################################
                if self.dem_solution.IsTimeToPrintPostProcess():
                    self.dem_solution._GetSolver().PrepareElementsForPrinting()
                    if self.dem_solution.DEM_parameters[
                            "ContactMeshOption"].GetBool():
                        self.dem_solution._GetSolver(
                        ).PrepareContactElementsForPrinting()
                    self.dem_solution.PrintResultsForGid(
                        self.dem_solution.time)
                    self.dem_solution.demio.PrintMultifileLists(
                        self.dem_solution.time, self.dem_solution.post_path)
                    self.dem_solution.time_old_print = self.dem_solution.time

                self.dem_solution.FinalizeTimeStep(self.dem_solution.time)

            DemFem.InterpolateStructuralSolutionForDEM(
            ).RestoreStructuralSolution(self.structural_mp)
Пример #13
0
    def RunSolutionLoop(self):

        self.dem_solution.step = 0
        self.dem_solution.time = 0.0
        self.dem_solution.time_old_print = 0.0
        self.time_dem = 0.0
        self.Dt_structural = self.structural_solution._GetSolver(
        ).settings["time_stepping"]["time_step"].GetDouble()

        while self.structural_solution.time < self.structural_solution.end_time:

            self.structural_solution.time = self.structural_solution._GetSolver(
            ).AdvanceInTime(self.structural_solution.time)
            self.structural_solution.InitializeSolutionStep()
            self.structural_solution._GetSolver().Predict()
            self.structural_solution._GetSolver().SolveSolutionStep()
            self.structural_solution.FinalizeSolutionStep()
            self.structural_solution.OutputSolutionStep()
            time_final_DEM_substepping = self.structural_solution.time

            self.Dt_DEM = self.dem_solution.spheres_model_part.ProcessInfo.GetValue(
                Kratos.DELTA_TIME)

            DemFem.InterpolateStructuralSolutionForDEM(
            ).SaveStructuralSolution(self.structural_mp)

            DemFem.ComputeDEMFaceLoadUtility().ClearDEMFaceLoads(self.skin_mp)

            for self.dem_solution.time_dem in self.yield_DEM_time(
                    self.dem_solution.time, time_final_DEM_substepping,
                    self.Dt_DEM):

                self.dem_solution.InitializeTimeStep()
                self.dem_solution.time = self.dem_solution.time + self.dem_solution.solver.dt

                self.dem_solution.step += 1

                self.dem_solution.DEMFEMProcedures.UpdateTimeInModelParts(
                    self.dem_solution.all_model_parts, self.dem_solution.time,
                    self.dem_solution.solver.dt, self.dem_solution.step)

                self.dem_solution._BeforeSolveOperations(
                    self.dem_solution.time)

                DemFem.InterpolateStructuralSolutionForDEM(
                ).InterpolateStructuralSolution(self.structural_mp,
                                                self.Dt_structural,
                                                self.structural_solution.time,
                                                self.dem_solution.time)

                self.dem_solution.SolverSolve()

                self.dem_solution.AfterSolveOperations()

                DemFem.ComputeDEMFaceLoadUtility().CalculateDEMFaceLoads(
                    self.skin_mp, self.dem_solution.solver.dt,
                    self.Dt_structural)

                self.dem_solution.DEMFEMProcedures.MoveAllMeshes(
                    self.dem_solution.all_model_parts, self.dem_solution.time,
                    self.dem_solution.solver.dt)
                #DEMFEMProcedures.MoveAllMeshesUsingATable(rigid_face_model_part, time, dt)

                ##### adding DEM elements by the inlet ######
                if self.dem_solution.DEM_parameters[
                        "dem_inlet_option"].GetBool():
                    self.dem_solution.DEM_inlet.CreateElementsFromInletMesh(
                        self.dem_solution.spheres_model_part,
                        self.dem_solution.cluster_model_part,
                        self.dem_solution.creator_destructor
                    )  # After solving, to make sure that neighbours are already set.

                stepinfo = self.dem_solution.report.StepiReport(
                    timer, self.dem_solution.time, self.dem_solution.step)
                if stepinfo:
                    self.dem_solution.KRATOSprint(stepinfo)

                #### PRINTING GRAPHS ####
                os.chdir(self.dem_solution.graphs_path)
                self.dem_solution.post_utils.ComputeMeanVelocitiesInTrap(
                    "Average_Velocity.txt", self.dem_solution.time,
                    self.dem_solution.graphs_path)

                self.dem_solution.materialTest.MeasureForcesAndPressure()
                self.dem_solution.materialTest.PrintGraph(
                    self.dem_solution.time)

                self.dem_solution.DEMFEMProcedures.PrintGraph(
                    self.dem_solution.time)
                self.dem_solution.DEMFEMProcedures.PrintBallsGraph(
                    self.dem_solution.time)

                self.dem_solution.DEMEnergyCalculator.CalculateEnergyAndPlot(
                    self.dem_solution.time)

                self.dem_solution.BeforePrintingOperations(
                    self.dem_solution.time)

                #### GiD IO ##########################################
                if self.dem_solution.IsTimeToPrintPostProcess():
                    self.dem_solution.PrintResultsForGid(
                        self.dem_solution.time)
                    self.dem_solution.demio.PrintMultifileLists(
                        self.dem_solution.time, self.dem_solution.post_path)
                    self.dem_solution.time_old_print = self.dem_solution.time

                self.dem_solution.FinalizeTimeStep(self.dem_solution.time)

            DemFem.InterpolateStructuralSolutionForDEM(
            ).RestoreStructuralSolution(self.structural_mp)
    def __init__(self, Model, spheres_model_part, test_number):

        fem_main_model_part = Model["Structure"]
        self.dem_main_model_part = spheres_model_part

        self.components_utility_list = []

        if not test_number:
            return

        compression_length = 0.00381
        if test_number == 1: # CTW16
            face_area = 0.008062
        elif test_number == 2: # CTW10
            face_area = 0.007601
        else: # Blind test
            compression_length = 0.009144
            face_area = 0.088343

        if fem_main_model_part.ProcessInfo[KratosMultiphysics.DOMAIN_SIZE] == 2:
            self.fem_submodel_part = Model["Structure.Parts_Solid_part"]
            settings = KratosMultiphysics.Parameters( """
            {
                "target_stress_table_id" : 1,
                "initial_velocity" : 0.0,
                "limit_velocity" : -10.0,
                "velocity_factor" : 0.5,
                "compression_length" : 1.0,
                "young_modulus" : 7.0e9,
                "stress_increment_tolerance": 100.0,
                "update_stiffness": true,
                "start_time" : 0.0
            }  """ )

            settings.AddEmptyValue("face_area")
            settings["face_area"].SetDouble(face_area)
            self.components_utility_list.append(DemFem.ControlModuleFemDem2DUtilities(self.fem_submodel_part, self.dem_main_model_part, settings))
        else:
            self.top_fem_model_part = Model["Structure.SurfacePressure3D_top_pressure"]
            #self.top_fem_model_part = Model["Structure.SurfacePressure3D_sigmaZpos"]
            self.top_dem_model_part = self.dem_main_model_part.GetSubModelPart("topdem")
            top_settings = KratosMultiphysics.Parameters( """
            {
                "variable_name": "DISPLACEMENT",
                "reaction_variable_name": "REACTION",
                "dem_force_variable_name": "TOTAL_FORCES",
                "target_stress_variable_name": "TARGET_STRESS",
                "reaction_stress_variable_name": "REACTION_STRESS",
                "loading_velocity_variable_name": "LOADING_VELOCITY",
                "imposed_direction" : 2,
                "target_stress_table_id" : 1,
                "initial_velocity" : 0.0,
                "limit_velocity" : -0.1,
                "velocity_factor" : 0.5,
                "young_modulus" : 7.0e9,
                "stress_increment_tolerance": 100.0,
                "update_stiffness": true,
                "start_time" : 0.0
            }  """ )

            top_settings.AddEmptyValue("compression_length")
            top_settings["compression_length"].SetDouble(compression_length)
            top_settings.AddEmptyValue("face_area")
            top_settings["face_area"].SetDouble(face_area)
            self.components_utility_list.append(DemFem.ControlModuleFemDemUtilities(self.top_fem_model_part, self.top_dem_model_part, top_settings))

            self.bot_fem_model_part = Model["Structure.SurfacePressure3D_bottom_pressure"]
            #self.bot_fem_model_part = Model["Structure.SurfacePressure3D_sigmaZneg"]
            self.bot_dem_model_part = self.dem_main_model_part.GetSubModelPart("botdem")
            bot_settings = KratosMultiphysics.Parameters( """
            {
                "variable_name": "DISPLACEMENT",
                "reaction_variable_name": "REACTION",
                "dem_force_variable_name": "TOTAL_FORCES",
                "target_stress_variable_name": "TARGET_STRESS",
                "reaction_stress_variable_name": "REACTION_STRESS",
                "loading_velocity_variable_name": "LOADING_VELOCITY",
                "imposed_direction" : 2,
                "target_stress_table_id" : 2,
                "initial_velocity" : 0.0,
                "limit_velocity" : 0.1,
                "velocity_factor" : 0.5,
                "young_modulus" : 7.0e9,
                "stress_increment_tolerance": 100.0,
                "update_stiffness": true,
                "start_time" : 0.0
            }  """ )

            bot_settings.AddEmptyValue("compression_length")
            bot_settings["compression_length"].SetDouble(compression_length)
            bot_settings.AddEmptyValue("face_area")
            bot_settings["face_area"].SetDouble(face_area)
            self.components_utility_list.append(DemFem.ControlModuleFemDemUtilities(self.bot_fem_model_part, self.bot_dem_model_part, bot_settings))
Пример #15
0
    def __init__(self, Model, settings):
        KratosMultiphysics.Process.__init__(self)

        model_part = Model[settings["model_part_name"].GetString()]
        variable_name = settings["variable_name"].GetString()
        reaction_variable_name = settings["reaction_variable_name"].GetString()
        target_stress_variable_name = settings[
            "target_stress_variable_name"].GetString()
        reaction_stress_variable_name = settings[
            "reaction_stress_variable_name"].GetString()
        loading_velocity_variable_name = settings[
            "loading_velocity_variable_name"].GetString()

        self.components_process_list = []

        if settings["fixed"][0].GetBool() == True:
            x_params = KratosMultiphysics.Parameters("{}")
            x_params.AddValue("model_part_name", settings["model_part_name"])
            x_params.AddEmptyValue("variable_name").SetString(variable_name +
                                                              "_X")
            x_params.AddEmptyValue("reaction_variable_name").SetString(
                reaction_variable_name + "_X")
            x_params.AddEmptyValue("target_stress_variable_name").SetString(
                target_stress_variable_name + "_X")
            x_params.AddEmptyValue("reaction_stress_variable_name").SetString(
                reaction_stress_variable_name + "_X")
            x_params.AddEmptyValue("loading_velocity_variable_name").SetString(
                loading_velocity_variable_name + "_X")
            x_params.AddValue("target_stress_table_id",
                              settings["target_stress_table_id"][0])
            x_params.AddValue("initial_velocity",
                              settings["initial_velocity"][0])
            x_params.AddValue("limit_velocity", settings["limit_velocity"][0])
            x_params.AddValue("velocity_factor", settings["velocity_factor"])
            x_params.AddValue("compression_length",
                              settings["compression_length"])
            x_params.AddValue("young_modulus", settings["young_modulus"])
            x_params.AddValue("stress_increment_tolerance",
                              settings["stress_increment_tolerance"])
            x_params.AddValue("update_stiffness", settings["update_stiffness"])
            x_params.AddValue("start_time", settings["start_time"])
            self.components_process_list.append(
                DemFem.ControlModuleProcess(model_part, x_params))

        if settings["fixed"][1].GetBool() == True:
            y_params = KratosMultiphysics.Parameters("{}")
            y_params.AddValue("model_part_name", settings["model_part_name"])
            y_params.AddEmptyValue("variable_name").SetString(variable_name +
                                                              "_Y")
            y_params.AddEmptyValue("reaction_variable_name").SetString(
                reaction_variable_name + "_Y")
            y_params.AddEmptyValue("target_stress_variable_name").SetString(
                target_stress_variable_name + "_Y")
            y_params.AddEmptyValue("reaction_stress_variable_name").SetString(
                reaction_stress_variable_name + "_Y")
            y_params.AddEmptyValue("loading_velocity_variable_name").SetString(
                loading_velocity_variable_name + "_Y")
            y_params.AddValue("target_stress_table_id",
                              settings["target_stress_table_id"][1])
            y_params.AddValue("initial_velocity",
                              settings["initial_velocity"][1])
            y_params.AddValue("limit_velocity", settings["limit_velocity"][1])
            y_params.AddValue("velocity_factor", settings["velocity_factor"])
            y_params.AddValue("compression_length",
                              settings["compression_length"])
            y_params.AddValue("young_modulus", settings["young_modulus"])
            y_params.AddValue("stress_increment_tolerance",
                              settings["stress_increment_tolerance"])
            y_params.AddValue("update_stiffness", settings["update_stiffness"])
            y_params.AddValue("start_time", settings["start_time"])
            self.components_process_list.append(
                DemFem.ControlModuleProcess(model_part, y_params))

        if settings["fixed"][2].GetBool() == True:
            z_params = KratosMultiphysics.Parameters("{}")
            z_params.AddValue("model_part_name", settings["model_part_name"])
            z_params.AddEmptyValue("variable_name").SetString(variable_name +
                                                              "_Z")
            z_params.AddEmptyValue("reaction_variable_name").SetString(
                reaction_variable_name + "_Z")
            z_params.AddEmptyValue("target_stress_variable_name").SetString(
                target_stress_variable_name + "_Z")
            z_params.AddEmptyValue("reaction_stress_variable_name").SetString(
                reaction_stress_variable_name + "_Z")
            z_params.AddEmptyValue("loading_velocity_variable_name").SetString(
                loading_velocity_variable_name + "_Z")
            z_params.AddValue("target_stress_table_id",
                              settings["target_stress_table_id"][2])
            z_params.AddValue("initial_velocity",
                              settings["initial_velocity"][2])
            z_params.AddValue("limit_velocity", settings["limit_velocity"][2])
            z_params.AddValue("velocity_factor", settings["velocity_factor"])
            z_params.AddValue("compression_length",
                              settings["compression_length"])
            z_params.AddValue("young_modulus", settings["young_modulus"])
            z_params.AddValue("stress_increment_tolerance",
                              settings["stress_increment_tolerance"])
            z_params.AddValue("update_stiffness", settings["update_stiffness"])
            z_params.AddValue("start_time", settings["start_time"])
            self.components_process_list.append(
                DemFem.ControlModuleProcess(model_part, z_params))
Пример #16
0
    def __init__(self, Model, settings ):
        KratosMultiphysics.Process.__init__(self)

        self.model_part = Model[settings["model_part_name"].GetString()]
        variable_name = settings["variable_name"].GetString()
        reaction_variable_name = settings["reaction_variable_name"].GetString()
        target_stress_variable_name = settings["target_stress_variable_name"].GetString()
        reaction_stress_variable_name = settings["reaction_stress_variable_name"].GetString()
        loading_velocity_variable_name = settings["loading_velocity_variable_name"].GetString()

        self.components_process_list = []

        if settings.Has("radial_displacement") and settings["radial_displacement"].GetBool():
            # Control module on the vertical walls of a right cylinder with the base on the 'X-Y' plane centered on (0,0).
            # Negative target_stress means compression.
            self.params = KratosMultiphysics.Parameters("{}")
            self.params.AddValue("model_part_name",settings["model_part_name"])
            self.params.AddValue("variable_name",settings["variable_name"])
            self.params.AddValue("reaction_variable_name",settings["reaction_variable_name"])
            self.params.AddValue("target_stress_variable_name",settings["target_stress_variable_name"])
            self.params.AddValue("reaction_stress_variable_name",settings["reaction_stress_variable_name"])
            self.params.AddValue("loading_velocity_variable_name",settings["loading_velocity_variable_name"])
            self.params.AddValue("radial_displacement",settings["radial_displacement"])
            self.params.AddValue("target_stress_table_id",settings["target_stress_table_id"])
            self.params.AddValue("initial_velocity",settings["initial_velocity"])
            self.params.AddValue("limit_velocity",settings["limit_velocity"])
            self.params.AddValue("velocity_factor",settings["velocity_factor"])
            self.params.AddValue("compression_length",settings["compression_length"])
            self.params.AddValue("young_modulus",settings["young_modulus"])
            self.params.AddValue("stress_increment_tolerance",settings["stress_increment_tolerance"])
            self.params.AddValue("update_stiffness",settings["update_stiffness"])
            self.params.AddValue("start_time",settings["start_time"])
            self.components_process_list.append(DemFem.ControlModuleProcess(self.model_part, self.params))
        else:
            if settings["fixed"][0].GetBool() == True:
                self.x_params = KratosMultiphysics.Parameters("{}")
                self.x_params.AddValue("model_part_name",settings["model_part_name"])
                self.x_params.AddEmptyValue("variable_name").SetString(variable_name+"_X")
                self.x_params.AddEmptyValue("reaction_variable_name").SetString(reaction_variable_name+"_X")
                self.x_params.AddEmptyValue("target_stress_variable_name").SetString(target_stress_variable_name+"_X")
                self.x_params.AddEmptyValue("reaction_stress_variable_name").SetString(reaction_stress_variable_name+"_X")
                self.x_params.AddEmptyValue("loading_velocity_variable_name").SetString(loading_velocity_variable_name+"_X")
                self.x_params.AddValue("target_stress_table_id",settings["target_stress_table_id"][0])
                self.x_params.AddValue("initial_velocity",settings["initial_velocity"][0])
                self.x_params.AddValue("limit_velocity",settings["limit_velocity"][0])
                self.x_params.AddValue("velocity_factor",settings["velocity_factor"])
                self.x_params.AddValue("compression_length",settings["compression_length"])
                self.x_params.AddValue("young_modulus",settings["young_modulus"])
                self.x_params.AddValue("stress_increment_tolerance",settings["stress_increment_tolerance"])
                self.x_params.AddValue("update_stiffness",settings["update_stiffness"])
                self.x_params.AddValue("start_time",settings["start_time"])
                self.components_process_list.append(DemFem.ControlModuleProcess(self.model_part, self.x_params))

            if settings["fixed"][1].GetBool() == True:
                self.y_params = KratosMultiphysics.Parameters("{}")
                self.y_params.AddValue("model_part_name",settings["model_part_name"])
                self.y_params.AddEmptyValue("variable_name").SetString(variable_name+"_Y")
                self.y_params.AddEmptyValue("reaction_variable_name").SetString(reaction_variable_name+"_Y")
                self.y_params.AddEmptyValue("target_stress_variable_name").SetString(target_stress_variable_name+"_Y")
                self.y_params.AddEmptyValue("reaction_stress_variable_name").SetString(reaction_stress_variable_name+"_Y")
                self.y_params.AddEmptyValue("loading_velocity_variable_name").SetString(loading_velocity_variable_name+"_Y")
                self.y_params.AddValue("target_stress_table_id",settings["target_stress_table_id"][1])
                self.y_params.AddValue("initial_velocity",settings["initial_velocity"][1])
                self.y_params.AddValue("limit_velocity",settings["limit_velocity"][1])
                self.y_params.AddValue("velocity_factor",settings["velocity_factor"])
                self.y_params.AddValue("compression_length",settings["compression_length"])
                self.y_params.AddValue("young_modulus",settings["young_modulus"])
                self.y_params.AddValue("stress_increment_tolerance",settings["stress_increment_tolerance"])
                self.y_params.AddValue("update_stiffness",settings["update_stiffness"])
                self.y_params.AddValue("start_time",settings["start_time"])
                self.components_process_list.append(DemFem.ControlModuleProcess(self.model_part, self.y_params))

            if settings["fixed"][2].GetBool() == True:
                self.z_params = KratosMultiphysics.Parameters("{}")
                self.z_params.AddValue("model_part_name",settings["model_part_name"])
                self.z_params.AddEmptyValue("variable_name").SetString(variable_name+"_Z")
                self.z_params.AddEmptyValue("reaction_variable_name").SetString(reaction_variable_name+"_Z")
                self.z_params.AddEmptyValue("target_stress_variable_name").SetString(target_stress_variable_name+"_Z")
                self.z_params.AddEmptyValue("reaction_stress_variable_name").SetString(reaction_stress_variable_name+"_Z")
                self.z_params.AddEmptyValue("loading_velocity_variable_name").SetString(loading_velocity_variable_name+"_Z")
                self.z_params.AddValue("target_stress_table_id",settings["target_stress_table_id"][2])
                self.z_params.AddValue("initial_velocity",settings["initial_velocity"][2])
                self.z_params.AddValue("limit_velocity",settings["limit_velocity"][2])
                self.z_params.AddValue("velocity_factor",settings["velocity_factor"])
                self.z_params.AddValue("compression_length",settings["compression_length"])
                self.z_params.AddValue("young_modulus",settings["young_modulus"])
                self.z_params.AddValue("stress_increment_tolerance",settings["stress_increment_tolerance"])
                self.z_params.AddValue("update_stiffness",settings["update_stiffness"])
                self.z_params.AddValue("start_time",settings["start_time"])
                self.components_process_list.append(DemFem.ControlModuleProcess(self.model_part, self.z_params))