From 4b4effed159f1c9b9cd40b52faf908e6625f4e06 Mon Sep 17 00:00:00 2001 From: Uwe Date: Wed, 22 Mar 2023 07:00:00 +0100 Subject: [PATCH] [FEM] fixes for deformation equation - deformation is a nonlinear equation - use the default that Elmer GUI uses for this equation --- src/Mod/Fem/femsolver/elmer/equations/deformation.py | 12 ++++-------- .../femsolver/elmer/equations/deformation_writer.py | 1 + 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/Mod/Fem/femsolver/elmer/equations/deformation.py b/src/Mod/Fem/femsolver/elmer/equations/deformation.py index 2c79ece569..48b3d9fd70 100644 --- a/src/Mod/Fem/femsolver/elmer/equations/deformation.py +++ b/src/Mod/Fem/femsolver/elmer/equations/deformation.py @@ -29,16 +29,15 @@ __url__ = "https://www.freecadweb.org" # @{ from femtools import femutils +from . import nonlinear from ... import equationbase -from . import linear - def create(doc, name="Deformation"): return femutils.createObject( doc, name, Proxy, ViewProxy) -class Proxy(linear.Proxy, equationbase.DeformationProxy): +class Proxy(nonlinear.Proxy, equationbase.DeformationProxy): Type = "Fem::EquationElmerDeformation" @@ -107,14 +106,11 @@ class Proxy(linear.Proxy, equationbase.DeformationProxy): obj.Priority = 10 obj.CalculatePrincipal = True - # according to Elmer tutorial and forum, for stresses direct solving - # is recommended -> tests showed 10 times faster and even more accurate - obj.LinearSolverType = "Direct" - obj.LinearDirectMethod = "Umfpack" + obj.CalculateStresses = True obj.Variable = "-dofs 3 Displacement" -class ViewProxy(linear.ViewProxy, equationbase.DeformationViewProxy): +class ViewProxy(nonlinear.ViewProxy, equationbase.DeformationViewProxy): pass ## @} diff --git a/src/Mod/Fem/femsolver/elmer/equations/deformation_writer.py b/src/Mod/Fem/femsolver/elmer/equations/deformation_writer.py index c73809840e..fef9e2e775 100644 --- a/src/Mod/Fem/femsolver/elmer/equations/deformation_writer.py +++ b/src/Mod/Fem/femsolver/elmer/equations/deformation_writer.py @@ -44,6 +44,7 @@ class DeformationWriter: def getDeformationSolver(self, equation): s = self.write.createLinearSolver(equation) # output the equation parameters + s = self.write.createNonlinearSolver(equation) s["Equation"] = "Nonlinear elasticity solver" s["Procedure"] = sifio.FileAttr("ElasticSolve/ElasticSolver") if equation.CalculateStrains is True: