================================================================================== The solver has been adapted to use Eigen's SparseQR QR decomposition algorithm. The original Dense QR implementation is maintained and can be selected using the Advanced Control TaskBox (see below). The use of SparseQR provides over an order of magnitude improvement in solving time in complex sketches due to the Sparse nature of the Jacobian matrix of the system of equations. The solver advanced control is a new TaskBox in the Sketcher that allows to select which algorithms are to be used for the different solving operations and tweak its parameters. It is not intended to be a user control, but means to debug solving problems and improve the algorithms and their configuration. This commit also introduces multithread support for Eigen. Currently it is only limited to products and does not provide a substantial speed improvement. It is expected to have more multithreaded operations in Eigen in the future. As a bonus, the TaskBoxes in the Taskbar of the Sketcher remember the last state (collapsed or deployed).
546 lines
17 KiB
XML
546 lines
17 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<ui version="4.0">
|
|
<class>TaskSketcherSolverAdvanced</class>
|
|
<widget class="QWidget" name="TaskSketcherSolverAdvanced">
|
|
<property name="geometry">
|
|
<rect>
|
|
<x>0</x>
|
|
<y>0</y>
|
|
<width>326</width>
|
|
<height>619</height>
|
|
</rect>
|
|
</property>
|
|
<property name="windowTitle">
|
|
<string>Form</string>
|
|
</property>
|
|
<layout class="QVBoxLayout" name="verticalLayout">
|
|
<item>
|
|
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
|
<item>
|
|
<widget class="QLabel" name="labelDefaultSolver">
|
|
<property name="toolTip">
|
|
<string>Default algorithm used for Sketch solving</string>
|
|
</property>
|
|
<property name="text">
|
|
<string>Default Solver:</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<widget class="Gui::PrefComboBox" name="comboBoxDefaultSolver">
|
|
<property name="currentIndex">
|
|
<number>2</number>
|
|
</property>
|
|
<property name="prefEntry" stdset="0">
|
|
<cstring>DefaultSolver</cstring>
|
|
</property>
|
|
<property name="prefPath" stdset="0">
|
|
<cstring>Mod/Sketcher/SolverAdvanced</cstring>
|
|
</property>
|
|
<item>
|
|
<property name="text">
|
|
<string>BFGS</string>
|
|
</property>
|
|
</item>
|
|
<item>
|
|
<property name="text">
|
|
<string>LevenbergMarquardt</string>
|
|
</property>
|
|
</item>
|
|
<item>
|
|
<property name="text">
|
|
<string>DogLeg</string>
|
|
</property>
|
|
</item>
|
|
</widget>
|
|
</item>
|
|
</layout>
|
|
</item>
|
|
<item>
|
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
|
<item>
|
|
<widget class="QLabel" name="labelMaxIter">
|
|
<property name="toolTip">
|
|
<string>Maximum number of iterations of the default algorithm</string>
|
|
</property>
|
|
<property name="text">
|
|
<string>Maximum Iterations:</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<widget class="Gui::PrefSpinBox" name="spinBoxMaxIter">
|
|
<property name="alignment">
|
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
|
</property>
|
|
<property name="maximum">
|
|
<number>999</number>
|
|
</property>
|
|
<property name="value">
|
|
<number>100</number>
|
|
</property>
|
|
<property name="prefEntry" stdset="0">
|
|
<cstring>MaxIter</cstring>
|
|
</property>
|
|
<property name="prefPath" stdset="0">
|
|
<cstring>Mod/Sketcher/SolverAdvanced</cstring>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
</layout>
|
|
</item>
|
|
<item>
|
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
|
<item>
|
|
<widget class="QLabel" name="labelSketchSizeMultiplier">
|
|
<property name="toolTip">
|
|
<string>If selected, the Maximum iterations value is multiplied by the sketch size</string>
|
|
</property>
|
|
<property name="text">
|
|
<string>Sketch size multiplier:</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<widget class="Gui::PrefCheckBox" name="checkBoxSketchSizeMultiplier">
|
|
<property name="sizePolicy">
|
|
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
|
<horstretch>0</horstretch>
|
|
<verstretch>0</verstretch>
|
|
</sizepolicy>
|
|
</property>
|
|
<property name="layoutDirection">
|
|
<enum>Qt::RightToLeft</enum>
|
|
</property>
|
|
<property name="text">
|
|
<string/>
|
|
</property>
|
|
<property name="prefEntry" stdset="0">
|
|
<cstring>SketchSizeMultiplier</cstring>
|
|
</property>
|
|
<property name="prefPath" stdset="0">
|
|
<cstring>Mod/Sketcher/SolverAdvanced</cstring>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
</layout>
|
|
</item>
|
|
<item>
|
|
<layout class="QHBoxLayout" name="horizontalLayout_9">
|
|
<item>
|
|
<widget class="QLabel" name="labelSolverConvergence">
|
|
<property name="toolTip">
|
|
<string>Error threshold under which convergence is reached</string>
|
|
</property>
|
|
<property name="text">
|
|
<string>Convergence:</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<widget class="Gui::PrefLineEdit" name="lineEditCovergence">
|
|
<property name="layoutDirection">
|
|
<enum>Qt::LeftToRight</enum>
|
|
</property>
|
|
<property name="text">
|
|
<string notr="true">1E-10</string>
|
|
</property>
|
|
<property name="alignment">
|
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
|
</property>
|
|
<property name="prefEntry" stdset="0">
|
|
<cstring>Covergence</cstring>
|
|
</property>
|
|
<property name="prefPath" stdset="0">
|
|
<cstring>Mod/Sketcher/SolverAdvanced</cstring>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
</layout>
|
|
</item>
|
|
<item>
|
|
<layout class="QHBoxLayout" name="horizontalLayout_10">
|
|
<item>
|
|
<widget class="QLabel" name="labelSolverParam1">
|
|
<property name="text">
|
|
<string>Param1</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<widget class="Gui::PrefLineEdit" name="lineEditSolverParam1">
|
|
<property name="alignment">
|
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
|
</property>
|
|
<property name="prefEntry" stdset="0">
|
|
<cstring>param</cstring>
|
|
</property>
|
|
<property name="prefPath" stdset="0">
|
|
<cstring>Mod/Sketcher/SolverAdvanced</cstring>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
</layout>
|
|
</item>
|
|
<item>
|
|
<layout class="QHBoxLayout" name="horizontalLayout_11">
|
|
<item>
|
|
<widget class="QLabel" name="labelSolverParam2">
|
|
<property name="text">
|
|
<string>Param2</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<widget class="Gui::PrefLineEdit" name="lineEditSolverParam2">
|
|
<property name="alignment">
|
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
|
</property>
|
|
<property name="prefEntry" stdset="0">
|
|
<cstring>param</cstring>
|
|
</property>
|
|
<property name="prefPath" stdset="0">
|
|
<cstring>Mod/Sketcher/SolverAdvanced</cstring>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
</layout>
|
|
</item>
|
|
<item>
|
|
<layout class="QHBoxLayout" name="horizontalLayout_12">
|
|
<item>
|
|
<widget class="QLabel" name="labelSolverParam3">
|
|
<property name="text">
|
|
<string>Param3</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<widget class="Gui::PrefLineEdit" name="lineEditSolverParam3">
|
|
<property name="alignment">
|
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
|
</property>
|
|
<property name="prefEntry" stdset="0">
|
|
<cstring>param</cstring>
|
|
</property>
|
|
<property name="prefPath" stdset="0">
|
|
<cstring>Mod/Sketcher/SolverAdvanced</cstring>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
</layout>
|
|
</item>
|
|
<item>
|
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
|
<item>
|
|
<widget class="QLabel" name="labelQRAlgorithm">
|
|
<property name="toolTip">
|
|
<string>Algorithm used for the rank revealing QR decomposition</string>
|
|
</property>
|
|
<property name="text">
|
|
<string>QR Algorithm:</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<widget class="Gui::PrefComboBox" name="comboBoxQRMethod">
|
|
<property name="currentIndex">
|
|
<number>1</number>
|
|
</property>
|
|
<property name="prefEntry" stdset="0">
|
|
<cstring>QRMethod</cstring>
|
|
</property>
|
|
<property name="prefPath" stdset="0">
|
|
<cstring>Mod/Sketcher/SolverAdvanced</cstring>
|
|
</property>
|
|
<item>
|
|
<property name="text">
|
|
<string>Eigen Dense QR</string>
|
|
</property>
|
|
</item>
|
|
<item>
|
|
<property name="text">
|
|
<string>Eigen Sparse QR</string>
|
|
</property>
|
|
</item>
|
|
</widget>
|
|
</item>
|
|
</layout>
|
|
</item>
|
|
<item>
|
|
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
|
<item>
|
|
<widget class="QLabel" name="labelRedundantSolver">
|
|
<property name="toolTip">
|
|
<string>Solving algorithm used for determination of Redundant constraints</string>
|
|
</property>
|
|
<property name="text">
|
|
<string>Redundant Solver:</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<widget class="Gui::PrefComboBox" name="comboBoxRedundantDefaultSolver">
|
|
<property name="prefEntry" stdset="0">
|
|
<cstring>RedundantDefaultSolver</cstring>
|
|
</property>
|
|
<property name="prefPath" stdset="0">
|
|
<cstring>Mod/Sketcher/SolverAdvanced</cstring>
|
|
</property>
|
|
<item>
|
|
<property name="text">
|
|
<string>BFGS</string>
|
|
</property>
|
|
</item>
|
|
<item>
|
|
<property name="text">
|
|
<string>LevenbergMarquardt</string>
|
|
</property>
|
|
</item>
|
|
<item>
|
|
<property name="text">
|
|
<string>DogLeg</string>
|
|
</property>
|
|
</item>
|
|
</widget>
|
|
</item>
|
|
</layout>
|
|
</item>
|
|
<item>
|
|
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
|
<item>
|
|
<widget class="QLabel" name="labelRedundantSolverMaxIterations">
|
|
<property name="toolTip">
|
|
<string>Maximum number of iterations of the solver used for determination of Redundant constraints</string>
|
|
</property>
|
|
<property name="text">
|
|
<string>Red. Max Iterations:</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<widget class="Gui::PrefSpinBox" name="spinBoxRedundantSolverMaxIterations">
|
|
<property name="toolTip">
|
|
<string/>
|
|
</property>
|
|
<property name="alignment">
|
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
|
</property>
|
|
<property name="maximum">
|
|
<number>999</number>
|
|
</property>
|
|
<property name="value">
|
|
<number>100</number>
|
|
</property>
|
|
<property name="prefEntry" stdset="0">
|
|
<cstring>RedundantSolverMaxIterations</cstring>
|
|
</property>
|
|
<property name="prefPath" stdset="0">
|
|
<cstring>Mod/Sketcher/SolverAdvanced</cstring>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
</layout>
|
|
</item>
|
|
<item>
|
|
<layout class="QHBoxLayout" name="horizontalLayout_7">
|
|
<item>
|
|
<widget class="QLabel" name="labelRedundantSketchSizeMultiplier">
|
|
<property name="toolTip">
|
|
<string>If selected, the Maximum iterations value for the redundant algorithm is multiplied by the sketch size</string>
|
|
</property>
|
|
<property name="text">
|
|
<string>Red. Sketch size multiplier:</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<widget class="Gui::PrefCheckBox" name="checkBoxRedundantSketchSizeMultiplier">
|
|
<property name="layoutDirection">
|
|
<enum>Qt::RightToLeft</enum>
|
|
</property>
|
|
<property name="text">
|
|
<string/>
|
|
</property>
|
|
<property name="prefEntry" stdset="0">
|
|
<cstring>RedundantSketchSizeMultiplier</cstring>
|
|
</property>
|
|
<property name="prefPath" stdset="0">
|
|
<cstring>Mod/Sketcher/SolverAdvanced</cstring>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
</layout>
|
|
</item>
|
|
<item>
|
|
<layout class="QHBoxLayout" name="horizontalLayout_13">
|
|
<item>
|
|
<widget class="QLabel" name="labelRedundantConvergence">
|
|
<property name="toolTip">
|
|
<string>Error threshold under which convergence is reached for the solving of redundant constraints</string>
|
|
</property>
|
|
<property name="text">
|
|
<string>Red. Convergence</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<widget class="Gui::PrefLineEdit" name="lineEditRedundantConvergence">
|
|
<property name="text">
|
|
<string>1E-10</string>
|
|
</property>
|
|
<property name="alignment">
|
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
|
</property>
|
|
<property name="prefEntry" stdset="0">
|
|
<cstring>RedundantConvergence</cstring>
|
|
</property>
|
|
<property name="prefPath" stdset="0">
|
|
<cstring>Mod/Sketcher/SolverAdvanced</cstring>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
</layout>
|
|
</item>
|
|
<item>
|
|
<layout class="QHBoxLayout" name="horizontalLayout_14">
|
|
<item>
|
|
<widget class="QLabel" name="labelRedundantSolverParam1">
|
|
<property name="text">
|
|
<string>Red. Param1</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<widget class="Gui::PrefLineEdit" name="lineEditRedundantSolverParam1">
|
|
<property name="alignment">
|
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
|
</property>
|
|
<property name="prefEntry" stdset="0">
|
|
<cstring>param</cstring>
|
|
</property>
|
|
<property name="prefPath" stdset="0">
|
|
<cstring>Mod/Sketcher/SolverAdvanced</cstring>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
</layout>
|
|
</item>
|
|
<item>
|
|
<layout class="QHBoxLayout" name="horizontalLayout_15">
|
|
<item>
|
|
<widget class="QLabel" name="labelRedundantSolverParam2">
|
|
<property name="text">
|
|
<string>Red. Param2</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<widget class="Gui::PrefLineEdit" name="lineEditRedundantSolverParam2">
|
|
<property name="alignment">
|
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
|
</property>
|
|
<property name="prefEntry" stdset="0">
|
|
<cstring>param</cstring>
|
|
</property>
|
|
<property name="prefPath" stdset="0">
|
|
<cstring>Mod/Sketcher/SolverAdvanced</cstring>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
</layout>
|
|
</item>
|
|
<item>
|
|
<layout class="QHBoxLayout" name="horizontalLayout_16">
|
|
<item>
|
|
<widget class="QLabel" name="labelRedundantSolverParam3">
|
|
<property name="text">
|
|
<string>Red. Param3</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<widget class="Gui::PrefLineEdit" name="lineEditRedundantSolverParam3">
|
|
<property name="alignment">
|
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
|
</property>
|
|
<property name="prefEntry" stdset="0">
|
|
<cstring>param</cstring>
|
|
</property>
|
|
<property name="prefPath" stdset="0">
|
|
<cstring>Mod/Sketcher/SolverAdvanced</cstring>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
</layout>
|
|
</item>
|
|
<item>
|
|
<layout class="QHBoxLayout" name="horizontalLayout_8">
|
|
<item>
|
|
<widget class="QLabel" name="labelDebugMode">
|
|
<property name="toolTip">
|
|
<string>Degree of verbosity of the debug output to the console</string>
|
|
</property>
|
|
<property name="text">
|
|
<string>Console Debug mode:</string>
|
|
</property>
|
|
</widget>
|
|
</item>
|
|
<item>
|
|
<widget class="Gui::PrefComboBox" name="comboBoxDebugMode">
|
|
<property name="currentIndex">
|
|
<number>1</number>
|
|
</property>
|
|
<property name="prefEntry" stdset="0">
|
|
<cstring>DebugMode</cstring>
|
|
</property>
|
|
<property name="prefPath" stdset="0">
|
|
<cstring>Mod/Sketcher/SolverAdvanced</cstring>
|
|
</property>
|
|
<item>
|
|
<property name="text">
|
|
<string>None</string>
|
|
</property>
|
|
</item>
|
|
<item>
|
|
<property name="text">
|
|
<string>Minimum</string>
|
|
</property>
|
|
</item>
|
|
<item>
|
|
<property name="text">
|
|
<string>Iteration Level</string>
|
|
</property>
|
|
</item>
|
|
</widget>
|
|
</item>
|
|
</layout>
|
|
</item>
|
|
</layout>
|
|
</widget>
|
|
<customwidgets>
|
|
<customwidget>
|
|
<class>Gui::PrefLineEdit</class>
|
|
<extends>QLineEdit</extends>
|
|
<header>Gui/PrefWidgets.h</header>
|
|
</customwidget>
|
|
<customwidget>
|
|
<class>Gui::PrefComboBox</class>
|
|
<extends>QComboBox</extends>
|
|
<header>Gui/PrefWidgets.h</header>
|
|
</customwidget>
|
|
<customwidget>
|
|
<class>Gui::PrefCheckBox</class>
|
|
<extends>QCheckBox</extends>
|
|
<header>Gui/PrefWidgets.h</header>
|
|
</customwidget>
|
|
<customwidget>
|
|
<class>Gui::PrefSpinBox</class>
|
|
<extends>QSpinBox</extends>
|
|
<header>Gui/PrefWidgets.h</header>
|
|
</customwidget>
|
|
</customwidgets>
|
|
<resources/>
|
|
<connections/>
|
|
</ui>
|