Пример #1
0
    def Writeresults(self, time):

        # We reorder the Id of the model parts
        femdem_util = FEMDEM.FEMDEMCouplingUtilities()
        reorder_util_elem = FEMDEM.RenumberingNodesUtility(
            self.solid_model_part, self.fluid_model_part)
        reorder_util_elem.RenumberElements()

        Logger.PrintInfo("", "")
        Logger.PrintInfo(
            "",
            "*****************  PRINTING RESULTS FOR GID  *************************"
        )
        Logger.PrintInfo("", "")
        Logger.Flush()

        number_pfem_nodes = femdem_util.GetNumberOfNodes(self.fluid_model_part)
        for node in self.balls_model_part.Nodes:
            node.Id = node.Id + number_pfem_nodes

        if self.GiDMultiFileFlag == "Multiples":
            self.mixed_solid_fluid_model_part.Elements.clear()
            self.mixed_solid_fluid_model_part.Nodes.clear()

            self.mixed_solid_balls_model_part.Elements.clear()
            self.mixed_solid_balls_model_part.Nodes.clear()

            self.mixed_solid_balls_fluid_model_part.Elements.clear()
            self.mixed_solid_balls_fluid_model_part.Nodes.clear()

            # Now we fill the mixed MDPA in order to print
            post_utils = DEMApplication.PostUtilities()
            post_utils.AddModelPartToModelPart(
                self.mixed_solid_fluid_model_part, self.fluid_model_part)

            post_utils.AddModelPartToModelPart(
                self.mixed_solid_balls_model_part, self.balls_model_part)
            post_utils.AddModelPartToModelPart(
                self.mixed_solid_balls_model_part, self.rigid_faces_model_part)

            post_utils.AddModelPartToModelPart(
                self.mixed_solid_balls_fluid_model_part, self.balls_model_part)
            post_utils.AddModelPartToModelPart(
                self.mixed_solid_balls_fluid_model_part,
                self.rigid_faces_model_part)
            post_utils.AddModelPartToModelPart(
                self.mixed_solid_balls_fluid_model_part, self.solid_model_part)
            post_utils.AddModelPartToModelPart(
                self.mixed_solid_balls_fluid_model_part, self.fluid_model_part)

            FEMDEM.FEMDEMCouplingUtilities().RemoveDuplicates(
                self.mixed_solid_fluid_model_part)

        self.write_dem_fem_results(time)
        reorder_util_elem.UndoRenumberElements()
Пример #2
0
    def AddFluidFractionField(self):

        Logger.PrintInfo(
            "SwimmingDEM",
            '******************************************************************'
        )
        Logger.PrintInfo()
        Logger.PrintInfo("SwimmingDEM",
                         'Adding Imposed Fluid Fraction Fields...')
        Logger.PrintInfo()
        Logger.Flush()

        count = 0

        for field in self.field_list:
            count += 1

            Logger.PrintInfo("SwimmingDEM", 'field number', count, ':')
            Logger.PrintInfo()
            Logger.PrintInfo("SwimmingDEM", vars(field))
            Logger.PrintInfo()

        Logger.PrintInfo(
            "SwimmingDEM",
            '******************************************************************'
        )
        Logger.Flush()

        for field in self.field_list:

            for node in self.fluid_model_part.Nodes:
                fluid_fraction = node.GetSolutionStepValue(
                    Kratos.FLUID_FRACTION, 0)

                if self.CheckIsInside([node.X, node.Y, node.Z], field.low,
                                      field.high):
                    value = fluid_fraction + field.frac_0 + field.frac_grad[
                        0] * node.X + field.frac_grad[
                            1] * node.Y + field.frac_grad[2] * node.Z
                    value = min(max(value, 0.0), self.min_fluid_fraction)
                    node.SetSolutionStepValue(Kratos.FLUID_FRACTION, 0, value)
Пример #3
0
    def Assess(
        self, model_part
    ):  # in the first time step the 'old' pressure vector is created and filled
        stationarity = self.tool.AssessStationarity(model_part, self.tol)

        if stationarity:
            Logger.PrintInfo("SwimmingDEM",
                             "\nThe fluid has reached a stationary state.")
            Logger.PrintInfo("Its calculation will be omitted from here on.\n")
            Logger.Flush()

        return stationarity
Пример #4
0
    def Writeresults(self, time):

        Logger.PrintInfo(
            "SwimmingDEM",
            "*******************  PRINTING RESULTS FOR GID  ***************************"
        )
        Logger.Flush()

        gid_output_options = self.project_parameters["sdem_output_processes"][
            "gid_output"][0]["Parameters"]
        result_file_configuration = gid_output_options[
            "postprocess_parameters"]["result_file_configuration"]
        multiple_files_option_key = result_file_configuration["gidpost_flags"][
            "MultiFileFlag"].GetString()

        if multiple_files_option_key == "MultipleFiles":
            renumbering_utility = SDEM.RenumberingNodesUtility(
                self.fluid_model_part, self.rigid_faces_model_part,
                self.balls_model_part)
            renumbering_utility.Renumber()

            self.mixed_model_part.Elements.clear()
            self.mixed_model_part.Nodes.clear()
            # here order is important!
            self.post_utilities.AddModelPartToModelPart(
                self.mixed_model_part, self.balls_model_part)
            self.post_utilities.AddModelPartToModelPart(
                self.mixed_model_part, self.rigid_faces_model_part)
            self.post_utilities.AddModelPartToModelPart(
                self.mixed_model_part, self.fluid_model_part)

        self.gid_io.write_swimming_DEM_results(
            time, self.fluid_model_part, self.balls_model_part,
            self.clusters_model_part, self.rigid_faces_model_part,
            self.mixed_model_part, self.vars_man.nodal_results,
            self.vars_man.dem_nodal_results,
            self.vars_man.clusters_nodal_results,
            self.vars_man.rigid_faces_nodal_results,
            self.vars_man.mixed_nodal_results,
            self.vars_man.gauss_points_results)

        if multiple_files_option_key == "MultipleFiles":
            renumbering_utility.UndoRenumber()
    def Writeresults(self, time):

        Logger.PrintInfo("DEM-Struct", "")
        Logger.PrintInfo(
            "DEM-Struct",
            "*******************  PRINTING RESULTS FOR GID  ***************************"
        )
        Logger.Flush()

        if self.GiDMultiFileFlag == "Multiples":
            self.mixed_model_part.Elements.clear()
            self.mixed_model_part.Nodes.clear()
            # here order is important!
            DEMApplication.PostUtilities().AddModelPartToModelPart(
                self.mixed_model_part, self.balls_model_part)
            DEMApplication.PostUtilities().AddModelPartToModelPart(
                self.mixed_model_part, self.rigid_faces_model_part)
            DEMApplication.PostUtilities().AddModelPartToModelPart(
                self.mixed_model_part, self.contact_model_part)
            DEMApplication.PostUtilities().AddModelPartToModelPart(
                self.mixed_model_part, self.structures_model_part)

        self.write_dem_fem_results(time)
Пример #6
0
def Say(*args):
    Logger.PrintInfo("SwimmingDEM", *args)
    Logger.Flush()
Пример #7
0
    def UpdateDataAndPrint(self, domain_volume, is_time_to_print=True):
        self.granul_utils = DP.GranulometryUtils(domain_volume,
                                                 self.balls_model_part)
        self.domain_volume = domain_volume
        self.number_of_balls = self.balls_model_part.NumberOfElements(0)
        self.discr_domain_volume = self.custom_utils.CalculateDomainVolume(
            self.fluid_model_part)
        self.proj_fluid_volume = self.custom_utils.CalculateGlobalFluidVolume(
            self.fluid_model_part)
        self.solid_volume = self.granul_utils.solid_volume
        self.balls_per_area = self.granul_utils.spheres_per_area
        self.fluid_volume = domain_volume - self.solid_volume
        self.discr_fluid_volume = self.discr_domain_volume - self.solid_volume
        self.proj_solid_volume = self.discr_domain_volume - self.proj_fluid_volume
        self.global_fluid_fraction = self.fluid_volume / self.domain_volume
        self.global_solid_fraction = 1.0 - self.global_fluid_fraction
        self.fluid_on_balls_total_force = Array3()
        self.proj_balls_on_fluid_total_force = Array3()
        self.mean_proj_balls_on_fluid_total_force = Array3()
        self.custom_utils.CalculateTotalHydrodynamicForceOnParticles(
            self.balls_model_part, self.fluid_on_balls_total_force)
        self.custom_utils.CalculateTotalHydrodynamicForceOnFluid(
            self.fluid_model_part, self.proj_balls_on_fluid_total_force,
            self.mean_proj_balls_on_fluid_total_force)

        if not is_time_to_print:
            return

        # printing

        tot_len = 38  # total length of each line, including spaces
        Logger.PrintInfo("SwimmingDEM", )
        Logger.PrintInfo("SwimmingDEM", "Projection-related measurements")
        Logger.PrintInfo("SwimmingDEM", tot_len * "**")
        Logger.PrintInfo("SwimmingDEM",
                         GetWordWithSpaces("number_of_balls", tot_len) + '=',
                         self.number_of_balls)
        Logger.PrintInfo("SwimmingDEM",
                         GetWordWithSpaces("domain_volume", tot_len) + '=',
                         self.domain_volume)
        Logger.PrintInfo("SwimmingDEM",
                         GetWordWithSpaces("fluid_volume", tot_len) + '=',
                         self.fluid_volume)
        Logger.PrintInfo("SwimmingDEM",
                         GetWordWithSpaces("solid_volume", tot_len) + '=',
                         self.solid_volume)
        Logger.PrintInfo(
            "SwimmingDEM",
            GetWordWithSpaces("discr_domain_volume", tot_len) + '=',
            self.discr_domain_volume)
        Logger.PrintInfo(
            "SwimmingDEM",
            GetWordWithSpaces("discr_fluid_volume", tot_len) + '=',
            self.discr_fluid_volume)
        Logger.PrintInfo("SwimmingDEM",
                         GetWordWithSpaces("proj_fluid_volume", tot_len) + '=',
                         self.proj_fluid_volume)
        Logger.PrintInfo("SwimmingDEM",
                         GetWordWithSpaces("proj_solid_volume", tot_len) + '=',
                         self.proj_solid_volume)
        Logger.PrintInfo(
            "SwimmingDEM",
            GetWordWithSpaces("global_fluid_fraction", tot_len) + '=',
            self.global_fluid_fraction)
        Logger.PrintInfo(
            "SwimmingDEM",
            GetWordWithSpaces("global_solid_fraction", tot_len) + '=',
            self.global_solid_fraction)
        Logger.PrintInfo("SwimmingDEM",
                         GetWordWithSpaces("balls_per_area", tot_len) + '=',
                         self.balls_per_area)
        Logger.PrintInfo(
            "SwimmingDEM",
            GetWordWithSpaces("fluid_on_balls_total_force", tot_len) + '=',
            self.fluid_on_balls_total_force)
        Logger.PrintInfo(
            "SwimmingDEM",
            GetWordWithSpaces("proj_balls_on_fluid_total_force", tot_len) +
            '=', self.proj_balls_on_fluid_total_force)
        Logger.PrintInfo(
            "SwimmingDEM",
            GetWordWithSpaces("mean_proj_balls_on_fluid_total_force", tot_len)
            + '=', self.mean_proj_balls_on_fluid_total_force)
        Logger.PrintInfo("SwimmingDEM", tot_len * "**")
        Logger.PrintInfo("SwimmingDEM", )
        Logger.Flush()
Пример #8
0
 def Say(*args):
     Logger.PrintInfo("DEM", *args)
     Logger.Flush()
Пример #9
0
def Say(*args):
    Logger.PrintInfo("SwimmingDEM", *args)
    Logger.Flush()
    Logger.GetDefaultOutput().SetSeverity(Logger.Severity.DETAIL)