| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | import FreeCAD |
| |
|
| | import ObjectsFem |
| |
|
| | from . import manager |
| | from .boxanalysis_base import setup_boxanalysisbase |
| | from .manager import init_doc |
| |
|
| |
|
| | def get_information(): |
| | return { |
| | "name": "Box Analysis Static", |
| | "meshtype": "solid", |
| | "meshelement": "Tet10", |
| | "constraints": ["fixed", "force", "pressure"], |
| | "solvers": ["ccxtools", "elmer"], |
| | "material": "solid", |
| | "equations": ["mechanical"], |
| | } |
| |
|
| |
|
| | def get_explanation(header=""): |
| | return ( |
| | header |
| | + """ |
| | |
| | To run the example from Python console use: |
| | from femexamples.boxanalysis_static import setup |
| | setup() |
| | |
| | |
| | See forum topic post: |
| | ... |
| | |
| | """ |
| | ) |
| |
|
| |
|
| | def setup(doc=None, solvertype="ccxtools"): |
| |
|
| | |
| | if doc is None: |
| | doc = init_doc() |
| |
|
| | |
| | |
| | manager.add_explanation_obj(doc, get_explanation(manager.get_header(get_information()))) |
| |
|
| | |
| | doc = setup_boxanalysisbase(doc, solvertype) |
| | geom_obj = doc.Box |
| | analysis = doc.Analysis |
| |
|
| | |
| | if solvertype == "ccxtools": |
| | solver_obj = ObjectsFem.makeSolverCalculiXCcxTools(doc, "CalculiXCcxTools") |
| | solver_obj.WorkingDir = "" |
| | elif solvertype == "elmer": |
| | solver_obj = ObjectsFem.makeSolverElmer(doc, "SolverElmer") |
| | ObjectsFem.makeEquationElasticity(doc, solver_obj) |
| | else: |
| | FreeCAD.Console.PrintWarning( |
| | "Unknown or unsupported solver type: {}. " |
| | "No solver object was created.\n".format(solvertype) |
| | ) |
| | if solvertype == "ccxtools": |
| | solver_obj.SplitInputWriter = False |
| | solver_obj.AnalysisType = "static" |
| | solver_obj.GeometricalNonlinearity = "linear" |
| | solver_obj.ThermoMechSteadyState = False |
| | solver_obj.MatrixSolverType = "default" |
| | solver_obj.IterationsControlParameterTimeUse = False |
| | analysis.addObject(solver_obj) |
| |
|
| | |
| | con_fixed = ObjectsFem.makeConstraintFixed(doc, "FemConstraintFixed") |
| | con_fixed.References = [(geom_obj, "Face1")] |
| | analysis.addObject(con_fixed) |
| |
|
| | |
| | con_force = ObjectsFem.makeConstraintForce(doc, "FemConstraintForce") |
| | con_force.References = [(geom_obj, "Face6")] |
| | con_force.Force = "40000.0 N" |
| | con_force.Direction = (geom_obj, ["Edge5"]) |
| | con_force.Reversed = True |
| | analysis.addObject(con_force) |
| |
|
| | |
| | con_pressure = ObjectsFem.makeConstraintPressure(doc, name="FemConstraintPressure") |
| | con_pressure.References = [(geom_obj, "Face2")] |
| | con_pressure.Pressure = "1000.0 MPa" |
| | con_pressure.Reversed = False |
| | analysis.addObject(con_pressure) |
| |
|
| | doc.recompute() |
| | return doc |
| |
|