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()
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)
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
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)
def Say(*args): Logger.PrintInfo("SwimmingDEM", *args) Logger.Flush()
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()
def Say(*args): Logger.PrintInfo("DEM", *args) Logger.Flush()
def Say(*args): Logger.PrintInfo("SwimmingDEM", *args) Logger.Flush() Logger.GetDefaultOutput().SetSeverity(Logger.Severity.DETAIL)