diff --git a/src/Mod/Fem/FemToolsCcx.py b/src/Mod/Fem/FemToolsCcx.py index 59e90151c..56f374dd1 100644 --- a/src/Mod/Fem/FemToolsCcx.py +++ b/src/Mod/Fem/FemToolsCcx.py @@ -35,7 +35,6 @@ from PySide import QtCore class FemToolsCcx(FemTools.FemTools): known_analysis_types = ["static", "frequency"] - known_geom_nonlinear_types = ["linear", "nonlinear"] finished = QtCore.Signal(int) ## The constructor diff --git a/src/Mod/Fem/TestFem.py b/src/Mod/Fem/TestFem.py index 7b1381341..220ada0cc 100644 --- a/src/Mod/Fem/TestFem.py +++ b/src/Mod/Fem/TestFem.py @@ -75,6 +75,9 @@ class FemTest(unittest.TestCase): def create_new_solver(self): self.solver_object = FemSolverCalculix.makeFemSolverCalculix('CalculiX') + self.solver_object.GeometricalNonlinearity = 'linear' + self.solver_object.SteadyState = True + self.solver_object.MatrixSolverType = 'default' self.active_doc.recompute() def create_new_mesh(self): diff --git a/src/Mod/Fem/_FemSolverCalculix.py b/src/Mod/Fem/_FemSolverCalculix.py index 73581968c..6bb3eeb96 100644 --- a/src/Mod/Fem/_FemSolverCalculix.py +++ b/src/Mod/Fem/_FemSolverCalculix.py @@ -41,6 +41,7 @@ class _FemSolverCalculix(): obj.SolverType = str(self.Type) fem_prefs = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Fem") + ccx_prefs = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Fem/Ccx") obj.addProperty("App::PropertyPath", "WorkingDir", "Fem", "Working directory for calculations") obj.WorkingDir = fem_prefs.GetString("WorkingDir", "") @@ -72,6 +73,28 @@ class _FemSolverCalculix(): ehl = ccx_prefs.GetFloat("EigenmodeHighLimit", 1000000.0) obj.EigenmodeHighLimit = (ehl, 0.0, 1000000.0, 10000.0) + obj.addProperty("App::PropertyIntegerConstraint", "Maxiterations", "Fem", "Number of iterations allowed before stopping jobs") + niter = ccx_prefs.GetInt("AnalysisMaxIterations", 200) + obj.Maxiterations = (niter) + + obj.addProperty("App::PropertyFloatConstraint", "InitialTimeStep", "Fem", "Initial time steps") + ini = ccx_prefs.GetFloat("AnalysisInitialTimeStep", 1.0) + obj.InitialTimeStep = (ini) + + obj.addProperty("App::PropertyFloatConstraint", "EndTime", "Fem", "Initial time steps") + eni = ccx_prefs.GetFloat("AnalysisTime", 1.0) + obj.EndTime = (eni) + + obj.addProperty("App::PropertyBool", "SteadyState", "Fem", "Run steady state or transient analysis") + sted = ccx_prefs.GetBool("StaticAnalysis", True) + obj.SteadyState = (sted) + + known_ccx_solver_types = ["default", "spooles", "iterativescaling", "iterativecholesky"] + obj.addProperty("App::PropertyEnumeration", "MatrixSolverType", "Fem", "Type of solver to use") + obj.MatrixSolverType = known_ccx_solver_types + solver_type = ccx_prefs.GetInt("Solver", 0) + obj.MatrixSolverType = known_ccx_solver_types[solver_type] + def execute(self, obj): return