diff --git a/src/Mod/Fem/femexamples/equation_electrostatics_capacitance_two_balls.py b/src/Mod/Fem/femexamples/equation_electrostatics_capacitance_two_balls.py index fc43017ee2..e501e725e6 100644 --- a/src/Mod/Fem/femexamples/equation_electrostatics_capacitance_two_balls.py +++ b/src/Mod/Fem/femexamples/equation_electrostatics_capacitance_two_balls.py @@ -22,6 +22,7 @@ # * * # *************************************************************************** +import sys import FreeCAD from FreeCAD import Rotation from FreeCAD import Vector @@ -33,7 +34,6 @@ from . import manager from .manager import get_meshname from .manager import init_doc - def get_information(): return { "name": "Electrostatics Capacitance Two Balls", @@ -45,7 +45,6 @@ def get_information(): "equation": "electrostatic" } - def get_explanation(header=""): return header + """ @@ -61,7 +60,6 @@ Electrostatics equation in FreeCAD FEM-Elmer """ - def setup(doc=None, solvertype="elmer"): # init FreeCAD document @@ -99,6 +97,9 @@ def setup(doc=None, solvertype="elmer"): # analysis analysis = ObjectsFem.makeAnalysis(doc, "Analysis") + if FreeCAD.GuiUp: + import FemGui + FemGui.setActiveAnalysis(analysis) # solver if solvertype == "elmer": @@ -115,17 +116,18 @@ def setup(doc=None, solvertype="elmer"): analysis.addObject(solver_obj) # material - material_obj = ObjectsFem.makeMaterialFluid(doc, "FemMaterial") + material_obj = ObjectsFem.makeMaterialFluid(doc, "Air") mat = material_obj.Material - mat["Name"] = "Air-Generic" - mat["Density"] = "1.20 kg/m^3" + mat["Name"] = "Air" + mat["Density"] = "1.204 kg/m^3" mat["KinematicViscosity"] = "15.11 mm^2/s" mat["VolumetricThermalExpansionCoefficient"] = "0.00 mm/m/K" - mat["ThermalConductivity"] = "0.03 W/m/K" - mat["ThermalExpansionCoefficient"] = "0.0034/K" - mat["SpecificHeat"] = "1.00 J/kg/K" - mat["RelativePermittivity"] = "1.00" + mat["ThermalConductivity"] = "0.02587 W/m/K" + mat["ThermalExpansionCoefficient"] = "0.00343/K" + mat["SpecificHeat"] = "1010.00 J/kg/K" + mat["RelativePermittivity"] = "1.00059" material_obj.Material = mat + material_obj.References = [(geom_obj, "Solid1")] analysis.addObject(material_obj) # constraint potential 1st @@ -152,23 +154,40 @@ def setup(doc=None, solvertype="elmer"): analysis.addObject(con_elect_pot3) # mesh - from .meshes.mesh_capacitance_two_balls_tetra10 import create_nodes, create_elements - fem_mesh = Fem.FemMesh() - control = create_nodes(fem_mesh) - if not control: - FreeCAD.Console.PrintError("Error on creating nodes.\n") - control = create_elements(fem_mesh) - if not control: - FreeCAD.Console.PrintError("Error on creating elements.\n") femmesh_obj = analysis.addObject(ObjectsFem.makeMeshGmsh(doc, get_meshname()))[0] - femmesh_obj.FemMesh = fem_mesh femmesh_obj.Part = geom_obj femmesh_obj.SecondOrderLinear = False + femmesh_obj.CharacteristicLengthMax = "600 mm" + femmesh_obj.ViewObject.Visibility = False # mesh_region mesh_region = ObjectsFem.makeMeshRegion(doc, femmesh_obj, name="MeshRegion") - mesh_region.CharacteristicLength = "300 mm" + mesh_region.CharacteristicLength = "250 mm" mesh_region.References = [(geom_obj, "Face2"), (geom_obj, "Face3")] + mesh_region.ViewObject.Visibility = False + + # generate the mesh + from femmesh import gmshtools + gmsh_mesh = gmshtools.GmshTools(femmesh_obj, analysis) + try: + error = gmsh_mesh.create_mesh() + except Exception: + error = sys.exc_info()[1] + FreeCAD.Console.PrintError( + "Unexpected error when creating mesh: {}\n" + .format(error) + ) + if error: + # try to create from existing rough mesh + from .meshes.mesh_capacitance_two_balls_tetra10 import create_nodes, create_elements + fem_mesh = Fem.FemMesh() + control = create_nodes(fem_mesh) + if not control: + FreeCAD.Console.PrintError("Error on creating nodes.\n") + control = create_elements(fem_mesh) + if not control: + FreeCAD.Console.PrintError("Error on creating elements.\n") + femmesh_obj.FemMesh = fem_mesh doc.recompute() return doc diff --git a/src/Mod/Fem/femexamples/equation_electrostatics_electricforce_elmer_nongui6.py b/src/Mod/Fem/femexamples/equation_electrostatics_electricforce_elmer_nongui6.py index 192c1a7572..e7682473ae 100644 --- a/src/Mod/Fem/femexamples/equation_electrostatics_electricforce_elmer_nongui6.py +++ b/src/Mod/Fem/femexamples/equation_electrostatics_electricforce_elmer_nongui6.py @@ -22,22 +22,21 @@ # * * # *************************************************************************** +import sys import FreeCAD from FreeCAD import Rotation from FreeCAD import Vector from FreeCAD import Units -import Part -import Sketcher - import Fem import ObjectsFem +import Part +import Sketcher from . import manager from .manager import get_meshname from .manager import init_doc - def get_information(): return { "name": "Electrostatics Electricforce - Elmer NonGUI6", @@ -49,7 +48,6 @@ def get_information(): "equation": "electrostatic" } - def get_explanation(header=""): return header + """ @@ -65,7 +63,6 @@ Electrostatics equation in FreeCAD FEM-Elmer """ - def setup(doc=None, solvertype="elmer"): # init FreeCAD document @@ -103,6 +100,7 @@ def setup(doc=None, solvertype="elmer"): base_sketch.addConstraint(base_conList) base_sketch.setDatum(9, Units.Quantity("5000.000000 mm")) base_sketch.setDatum(10, Units.Quantity("5000.000000 mm")) + base_sketch.ViewObject.Visibility = False pad = geom_obj.newObject("PartDesign::Pad", "Pad") pad.Profile = base_sketch @@ -145,6 +143,7 @@ def setup(doc=None, solvertype="elmer"): upper_sketch.setDatum(15, Units.Quantity("5000.000000 mm")) upper_sketch.setDatum(16, Units.Quantity("1500.000000 mm")) upper_sketch.setDatum(17, Units.Quantity("1500.000000 mm")) + upper_sketch.ViewObject.Visibility = False pocket = geom_obj.newObject("PartDesign::Pocket", "Pocket") pocket.Profile = upper_sketch @@ -159,6 +158,9 @@ def setup(doc=None, solvertype="elmer"): # analysis analysis = ObjectsFem.makeAnalysis(doc, "Analysis") + if FreeCAD.GuiUp: + import FemGui + FemGui.setActiveAnalysis(analysis) # solver if solvertype == "elmer": @@ -173,17 +175,18 @@ def setup(doc=None, solvertype="elmer"): analysis.addObject(solver_obj) # material - material_obj = ObjectsFem.makeMaterialFluid(doc, "FemMaterial") + material_obj = ObjectsFem.makeMaterialFluid(doc, "Air") mat = material_obj.Material - mat["Name"] = "Air-Generic" - mat["Density"] = "1.20 kg/m^3" + mat["Name"] = "Air" + mat["Density"] = "1.204 kg/m^3" mat["KinematicViscosity"] = "15.11 mm^2/s" mat["VolumetricThermalExpansionCoefficient"] = "0.00 mm/m/K" - mat["ThermalConductivity"] = "0.03 W/m/K" - mat["ThermalExpansionCoefficient"] = "0.0034/K" - mat["SpecificHeat"] = "1.00 J/kg/K" - mat["RelativePermittivity"] = "1.00" + mat["ThermalConductivity"] = "0.02587 W/m/K" + mat["ThermalExpansionCoefficient"] = "0.00343/K" + mat["SpecificHeat"] = "1010.00 J/kg/K" + mat["RelativePermittivity"] = "1.00059" material_obj.Material = mat + material_obj.References = [(geom_obj, "Solid1")] analysis.addObject(material_obj) # constraint potential 0V @@ -212,27 +215,44 @@ def setup(doc=None, solvertype="elmer"): analysis.addObject(con_elect_pot2) # mesh - from .meshes.mesh_electricforce_elmer_nongui6_tetra10 import create_nodes, create_elements - fem_mesh = Fem.FemMesh() - control = create_nodes(fem_mesh) - if not control: - FreeCAD.Console.PrintError("Error on creating nodes.\n") - control = create_elements(fem_mesh) - if not control: - FreeCAD.Console.PrintError("Error on creating elements.\n") femmesh_obj = analysis.addObject(ObjectsFem.makeMeshGmsh(doc, get_meshname()))[0] - femmesh_obj.FemMesh = fem_mesh femmesh_obj.Part = geom_obj femmesh_obj.SecondOrderLinear = False + femmesh_obj.CharacteristicLengthMax = "500 mm" + femmesh_obj.ViewObject.Visibility = False # mesh_region mesh_region = ObjectsFem.makeMeshRegion(doc, femmesh_obj, name="MeshRegion") - mesh_region.CharacteristicLength = "300 mm" + mesh_region.CharacteristicLength = "250 mm" mesh_region.References = [ (geom_obj, "Face4"), (geom_obj, "Face5"), (geom_obj, "Face6"), (geom_obj, "Face11")] + mesh_region.ViewObject.Visibility = False + + # generate the mesh + from femmesh import gmshtools + gmsh_mesh = gmshtools.GmshTools(femmesh_obj, analysis) + try: + error = gmsh_mesh.create_mesh() + except Exception: + error = sys.exc_info()[1] + FreeCAD.Console.PrintError( + "Unexpected error when creating mesh: {}\n" + .format(error) + ) + if error: + # try to create from existing rough mesh + from .meshes.mesh_electricforce_elmer_nongui6_tetra10 import create_nodes, create_elements + fem_mesh = Fem.FemMesh() + control = create_nodes(fem_mesh) + if not control: + FreeCAD.Console.PrintError("Error on creating nodes.\n") + control = create_elements(fem_mesh) + if not control: + FreeCAD.Console.PrintError("Error on creating elements.\n") + femmesh_obj.FemMesh = fem_mesh doc.recompute() return doc