FEM: multiple nonlinear materials, check if each linear material has only one nonlinear material
This commit is contained in:
parent
9db81d238a
commit
dd92486ab5
|
@ -340,7 +340,7 @@ class FemTools(QtCore.QRunnable, QtCore.QObject):
|
||||||
message += "FEM mesh has no volume and no shell elements, either define a beam section or provide a FEM mesh with volume elements.\n"
|
message += "FEM mesh has no volume and no shell elements, either define a beam section or provide a FEM mesh with volume elements.\n"
|
||||||
if self.mesh.FemMesh.VolumeCount == 0 and self.mesh.FemMesh.FaceCount == 0 and self.mesh.FemMesh.EdgeCount == 0:
|
if self.mesh.FemMesh.VolumeCount == 0 and self.mesh.FemMesh.FaceCount == 0 and self.mesh.FemMesh.EdgeCount == 0:
|
||||||
message += "FEM mesh has neither volume nor shell or edge elements. Provide a FEM mesh with elements!\n"
|
message += "FEM mesh has neither volume nor shell or edge elements. Provide a FEM mesh with elements!\n"
|
||||||
# materials_linear
|
# materials linear and nonlinear
|
||||||
if not self.materials_linear:
|
if not self.materials_linear:
|
||||||
message += "No material object defined in the analysis\n"
|
message += "No material object defined in the analysis\n"
|
||||||
has_no_references = False
|
has_no_references = False
|
||||||
|
@ -365,6 +365,14 @@ class FemTools(QtCore.QRunnable, QtCore.QObject):
|
||||||
message += "Thermomechanical analysis: No ThermalExpansionCoefficient defined for at least one material.\n"
|
message += "Thermomechanical analysis: No ThermalExpansionCoefficient defined for at least one material.\n"
|
||||||
if 'SpecificHeat' not in mat_map:
|
if 'SpecificHeat' not in mat_map:
|
||||||
message += "Thermomechanical analysis: No SpecificHeat defined for at least one material.\n"
|
message += "Thermomechanical analysis: No SpecificHeat defined for at least one material.\n"
|
||||||
|
for m in self.materials_linear:
|
||||||
|
has_nonlinear_material = False
|
||||||
|
for nlm in self.materials_nonlinear:
|
||||||
|
if nlm['Object'].LinearBaseMaterial == m['Object']:
|
||||||
|
if has_nonlinear_material is False:
|
||||||
|
has_nonlinear_material = True
|
||||||
|
else:
|
||||||
|
message += "At least two nonlinear materials use the same linear base material. Only one nonlinear material for each linear material allowed. \n"
|
||||||
# constraints
|
# constraints
|
||||||
if self.analysis_type == "static":
|
if self.analysis_type == "static":
|
||||||
if not (self.fixed_constraints or self.displacement_constraints):
|
if not (self.fixed_constraints or self.displacement_constraints):
|
||||||
|
|
|
@ -47,13 +47,19 @@ class _CommandMaterialMechanicalNonlinear(FemCommands):
|
||||||
sel = FreeCADGui.Selection.getSelection()
|
sel = FreeCADGui.Selection.getSelection()
|
||||||
if len(sel) == 1 and sel[0].isDerivedFrom("App::MaterialObjectPython"):
|
if len(sel) == 1 and sel[0].isDerivedFrom("App::MaterialObjectPython"):
|
||||||
lin_mat_obj = sel[0]
|
lin_mat_obj = sel[0]
|
||||||
# TODO --> check print
|
# check if an nonlinear material exists which is based on the selected material already
|
||||||
print "check if an nonlinear material exists which referes to the selected material already, becaue for each linear material only one nonlinear material is allowed !!!\n"
|
allow_nonlinear_material = True
|
||||||
string_lin_mat_obj = "App.ActiveDocument.getObject('" + lin_mat_obj.Name + "')"
|
for o in FreeCAD.ActiveDocument.Objects:
|
||||||
command_to_run = "FemGui.getActiveAnalysis().Member = FemGui.getActiveAnalysis().Member + [FemMaterialMechanicalNonlinear.makeFemMaterialMechanicalNonlinear(" + string_lin_mat_obj + ")]"
|
if hasattr(o, "Proxy") and o.Proxy is not None and o.Proxy.Type == "FemMaterialMechanicalNonlinear" and o.LinearBaseMaterial == lin_mat_obj:
|
||||||
FreeCAD.ActiveDocument.openTransaction("Create FemMaterialMechanicalNonlinear")
|
FreeCAD.Console.PrintError(o.Name + ' is based on the selected material: ' + lin_mat_obj.Name + '. Only one nonlinear object for each material allowed.\n')
|
||||||
FreeCADGui.addModule("FemMaterialMechanicalNonlinear")
|
allow_nonlinear_material = False
|
||||||
FreeCADGui.doCommand(command_to_run)
|
break
|
||||||
|
if allow_nonlinear_material:
|
||||||
|
string_lin_mat_obj = "App.ActiveDocument.getObject('" + lin_mat_obj.Name + "')"
|
||||||
|
command_to_run = "FemGui.getActiveAnalysis().Member = FemGui.getActiveAnalysis().Member + [FemMaterialMechanicalNonlinear.makeFemMaterialMechanicalNonlinear(" + string_lin_mat_obj + ")]"
|
||||||
|
FreeCAD.ActiveDocument.openTransaction("Create FemMaterialMechanicalNonlinear")
|
||||||
|
FreeCADGui.addModule("FemMaterialMechanicalNonlinear")
|
||||||
|
FreeCADGui.doCommand(command_to_run)
|
||||||
|
|
||||||
if FreeCAD.GuiUp:
|
if FreeCAD.GuiUp:
|
||||||
FreeCADGui.addCommand('Fem_MaterialMechanicalNonlinear', _CommandMaterialMechanicalNonlinear())
|
FreeCADGui.addCommand('Fem_MaterialMechanicalNonlinear', _CommandMaterialMechanicalNonlinear())
|
||||||
|
|
Loading…
Reference in New Issue
Block a user