diff --git a/src/Mod/Fem/femobjects/solver_calculix.py b/src/Mod/Fem/femobjects/solver_calculix.py index 1da4e97cbb..28480050b0 100644 --- a/src/Mod/Fem/femobjects/solver_calculix.py +++ b/src/Mod/Fem/femobjects/solver_calculix.py @@ -330,6 +330,15 @@ class SolverCalculiX(base_fempythonobject.BaseFemPythonObject): value=False, ) ) + prop.append( + _PropHelper( + type="App::PropertyBool", + name="PastixMixedPrecision", + group="Solver", + doc="Mixed precision for the PaStiX matrix solver", + value=False, + ) + ) return prop def onDocumentRestored(self, obj): diff --git a/src/Mod/Fem/femsolver/calculix/calculixtools.py b/src/Mod/Fem/femsolver/calculix/calculixtools.py index 2a460aa038..4a49d1f557 100644 --- a/src/Mod/Fem/femsolver/calculix/calculixtools.py +++ b/src/Mod/Fem/femsolver/calculix/calculixtools.py @@ -116,6 +116,8 @@ class CalculiXTools: "AnalysisNumCPUs", QThread.idealThreadCount() ) env.insert("OMP_NUM_THREADS", str(num_cpu)) + pastix_prec = "1" if self.obj.PastixMixedPrecision else "0" + env.insert("PASTIX_MIXED_PRECISION", pastix_prec) self.process.setProcessEnvironment(env) self.process.setWorkingDirectory(self.obj.WorkingDirectory) diff --git a/src/Mod/Fem/femsolver/calculix/solver.py b/src/Mod/Fem/femsolver/calculix/solver.py index 4c627276f2..b212cddb5e 100644 --- a/src/Mod/Fem/femsolver/calculix/solver.py +++ b/src/Mod/Fem/femsolver/calculix/solver.py @@ -433,6 +433,16 @@ class _BaseSolverCalculix: ) obj.ExcludeBendingStiffness = False + if not hasattr(obj, "PastixMixedPrecision"): + obj.addProperty( + "App::PropertyBool", + "PastixMixedPrecision", + "Fem", + "Mixed precision for the PaStiX matrix solver", + locked=True, + ) + obj.PastixMixedPrecision = False + class Proxy(solverbase.Proxy, _BaseSolverCalculix): """The Fem::FemSolver's Proxy python type, add solver specific properties""" diff --git a/src/Mod/Fem/femtaskpanels/task_solver_ccxtools.py b/src/Mod/Fem/femtaskpanels/task_solver_ccxtools.py index 814317b1cc..91143c5dbc 100644 --- a/src/Mod/Fem/femtaskpanels/task_solver_ccxtools.py +++ b/src/Mod/Fem/femtaskpanels/task_solver_ccxtools.py @@ -383,6 +383,8 @@ class _TaskPanel: env = QtCore.QProcessEnvironment.systemEnvironment() num_cpu_pref = ccx_prefs.GetInt("AnalysisNumCPUs", QtCore.QThread.idealThreadCount()) env.insert("OMP_NUM_THREADS", str(num_cpu_pref)) + pastix_prec = "1" if self.fea.solver.PastixMixedPrecision else "0" + env.insert("PASTIX_MIXED_PRECISION", pastix_prec) self.Calculix.setProcessEnvironment(env) self.cwd = QtCore.QDir.currentPath()