diff --git a/src/Mod/Fem/Gui/DlgSettingsFemGeneral.ui b/src/Mod/Fem/Gui/DlgSettingsFemGeneral.ui
index 9826424ff5..c501f868d5 100644
--- a/src/Mod/Fem/Gui/DlgSettingsFemGeneral.ui
+++ b/src/Mod/Fem/Gui/DlgSettingsFemGeneral.ui
@@ -364,6 +364,73 @@
+ -
+
+
+ Defaults
+
+
+
-
+
+
-
+
+
+ true
+
+
+ Default solver
+
+
+
+ -
+
+
+ true
+
+
+ false
+
+
+ Default solver used by the analysis container
+
+
+ DefaultSolver
+
+
+ Mod/Fem/General
+
+
-
+
+ None
+
+
+ -
+
+ CalculiX
+
+
+ -
+
+ Elmer
+
+
+ -
+
+ Mystran
+
+
+ -
+
+ Z88
+
+
+
+
+
+
+
+
+
-
@@ -403,6 +470,11 @@
QCheckBox
+
+ Gui::PrefComboBox
+ QComboBox
+
+
diff --git a/src/Mod/Fem/Gui/DlgSettingsFemGeneralImp.cpp b/src/Mod/Fem/Gui/DlgSettingsFemGeneralImp.cpp
index 960e33dae7..5a5bc62444 100644
--- a/src/Mod/Fem/Gui/DlgSettingsFemGeneralImp.cpp
+++ b/src/Mod/Fem/Gui/DlgSettingsFemGeneralImp.cpp
@@ -55,6 +55,7 @@ void DlgSettingsFemGeneralImp::saveSettings()
ui->cb_wd_custom->onSave();
ui->le_wd_custom->onSave();
ui->cb_overwrite_solver_working_directory->onSave();
+ ui->cmb_def_solver->onSave();
}
void DlgSettingsFemGeneralImp::loadSettings()
@@ -70,6 +71,7 @@ void DlgSettingsFemGeneralImp::loadSettings()
ui->cb_wd_custom->onRestore();
ui->le_wd_custom->onRestore();
ui->cb_overwrite_solver_working_directory->onRestore();
+ ui->cmb_def_solver->onRestore();
}
/**
diff --git a/src/Mod/Fem/femcommands/commands.py b/src/Mod/Fem/femcommands/commands.py
index 66f1673248..2055459c9b 100644
--- a/src/Mod/Fem/femcommands/commands.py
+++ b/src/Mod/Fem/femcommands/commands.py
@@ -37,7 +37,7 @@ from .manager import CommandManager
from femsolver import settings
from femtools.femutils import expandParentObject
from femtools.femutils import is_of_type
-
+from femsolver.settings import get_default_solver
# Python command definitions:
# for C++ command definitions see src/Mod/Fem/Command.cpp
@@ -59,7 +59,7 @@ class _Analysis(CommandManager):
self.accel = "S, A"
self.tooltip = Qt.QT_TRANSLATE_NOOP(
"FEM_Analysis",
- "Creates an analysis container with standard solver CalculiX"
+ "Creates an analysis container with default solver"
)
self.is_active = "with_document"
@@ -69,16 +69,12 @@ class _Analysis(CommandManager):
FreeCADGui.addModule("ObjectsFem")
FreeCADGui.doCommand("ObjectsFem.makeAnalysis(FreeCAD.ActiveDocument, 'Analysis')")
FreeCADGui.doCommand("FemGui.setActiveAnalysis(FreeCAD.ActiveDocument.ActiveObject)")
- # if there is no Elmer or Z88 binary create a CalculiX ccx tools solver for
- # new analysis to be on the safe side for new users
- binary = settings.get_binary("ElmerSolver")
- if binary is None:
- binary = settings.get_binary("Z88")
- if binary is None:
- FreeCADGui.doCommand("ObjectsFem.makeSolverCalculixCcxTools(FreeCAD.ActiveDocument)")
+ if get_default_solver():
+ FreeCADGui.doCommand("ObjectsFem.makeSolver{}(FreeCAD.ActiveDocument)"
+ .format(get_default_solver()))
FreeCADGui.doCommand(
- "FemGui.getActiveAnalysis().addObject(FreeCAD.ActiveDocument.ActiveObject)"
- )
+ "FemGui.getActiveAnalysis().addObject(FreeCAD.ActiveDocument.ActiveObject)")
+
FreeCAD.ActiveDocument.recompute()
diff --git a/src/Mod/Fem/femsolver/settings.py b/src/Mod/Fem/femsolver/settings.py
index 317e80455d..ff89ea5bf3 100644
--- a/src/Mod/Fem/femsolver/settings.py
+++ b/src/Mod/Fem/femsolver/settings.py
@@ -165,6 +165,12 @@ def get_dir_setting():
return DirSetting.CUSTOM
return DirSetting.TEMPORARY
+def get_default_solver():
+ """ Return default solver name.
+ """
+ solver_map = {0: None, 1: "CalculixCcxTools", 2: "Elmer", 3: "Mystran", 4: "Z88"}
+ param_group = FreeCAD.ParamGet(_GENERAL_PARAM)
+ return solver_map[param_group.GetInt("DefaultSolver", 0)]
class _SolverDlg(object):
""" Internal query logic for solver specific settings.