#include "CFDStructDataSolverNumericalMethodManager.h" #include "CUIProperty/CUIConfig.h" #include "CFDStructMain/CFDStructDefine.h" #include "CFDStructSigsCenter.h" CFDStructDataSolverNumericalMethodManager::CFDStructDataSolverNumericalMethodManager(QObject *parent) : CFDStructDataManagerBase(parent) { m_uiConfig = nullptr; } CFDStructDataSolverNumericalMethodManager::~CFDStructDataSolverNumericalMethodManager() { } CUIConfig *CFDStructDataSolverNumericalMethodManager::getParamUIConfig() { if(m_fluxFormat == 0) return this->genJamesonModeUIConfig(); if(m_fluxFormat == 1) return this->genRoeModeUIConfig(); if(m_fluxFormat == 2) return this->genAUSMDYModeUIConfig(); if(m_fluxFormat == 3) return this->genAUSMPWPModeUIConfig(); return this->genRoeModeUIConfig(); } CUIConfig *CFDStructDataSolverNumericalMethodManager::genJamesonModeUIConfig() { return new CUIConfig({ {"type", "Widget"}, }, { new CUIConfig({ {"type", "GroupBox"}, // 空间离散 {"name", tr("Spatial discretization")}, }, { new CUIConfig({ {"type", "ComboBox"}, // 通量格式 {"name", tr("Flux format")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_fluxFormat)}, {"semaphore", (int)SolutionAnalysisModuleProperty::NUumerical_Methods}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_fluxFormat)}, }, { new CUIConfig({ {"type", "Item"}, // Jameson {"name", "Jameson"}, }), new CUIConfig({ {"type", "Item"}, // Roe {"name", "Roe"}, }), new CUIConfig({ {"type", "Item"}, // AUSMDY {"name", "AUSMDY"}, }), new CUIConfig({ {"type", "Item"}, // AUSMPWP {"name", "AUSMPWP"}, }), }), new CUIConfig({ {"type", "LineEdit"}, // 二阶人工粘性 {"name", tr("Second-order artificial viscosity")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE}, {"value_origin", QVA_GLOBAL(&m_secondOrderArtificialViscosity)}, }), new CUIConfig({ {"type", "LineEdit"}, // 四阶人工粘性 {"name", tr("Fourth order artificial viscosity")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE}, {"value_origin", QVA_GLOBAL(&m_fourthOrderArtificialViscosity)}, }), new CUIConfig({ {"type", "ComboBox"}, // 空间精度 {"name", tr("Spatial accuracy")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_spaceAccuracy)}, }, { new CUIConfig({ {"type", "Item"}, // 一阶迎风 {"name", tr("First order windward")}, }), new CUIConfig({ {"type", "Item"}, // 二阶迎风差分 {"name", tr("Second-order upwind difference")}, }), new CUIConfig({ {"type", "Item"}, // 二阶迎风偏置 {"name", tr("Second-order windward bias")}, }), new CUIConfig({ {"type", "Item"}, // 三阶迎风偏置 {"name", tr("Third order windward bias")}, }), }), new CUIConfig({ {"type", "ComboBox"}, // 限制器 {"name", tr("limiter")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_limiter)}, }, { new CUIConfig({ {"type", "Item"}, // None {"name", "None"}, }), new CUIConfig({ {"type", "Item"}, // Vanalbda {"name", "Vanalbda"}, }), new CUIConfig({ {"type", "Item"}, // Minmod {"name", "Minmod"}, }), }), }), new CUIConfig({ {"type", "GroupBox"}, // 时间离散 {"name", tr("Time dispersion")}, }, { new CUIConfig({ {"type", "ComboBox"}, // 时间格式 {"name", tr("Time format")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_timeFormat)}, }, { new CUIConfig({ {"type", "Item"}, // 隐式 {"name", tr("Implicit")}, }), new CUIConfig({ {"type", "Item"}, // 隐式二阶差分 {"name", tr("Implicit second-order difference")}, }), }), new CUIConfig({ {"type", "ComboBox"}, // 迭代方法 {"name", tr("Iterative method")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_iterationMethod)}, }, { new CUIConfig({ {"type", "Item"}, // LUSGS {"name", tr("LUSGS")}, }), }), new CUIConfig({ {"type", "LineEdit"}, // 松弛因子 {"name", tr("Relaxation factor")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE}, {"value_origin", QVA_GLOBAL(&m_relaxationFactor)}, }, {}), }), new CUIConfig({ {"type", "GroupBox"}, // 加速收敛 {"name", tr("Accelerate convergence")}, }, { new CUIConfig({ {"type", "LineEdit"}, // 多重网格层数 {"name", tr("Multi grid layers")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE}, {"value_origin", QVA_GLOBAL(&m_multigridLevels)}, }, {}), new CUIConfig({ {"type", "ComboBox"}, // 循环类型 {"name", tr("Loop type")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_multigridLevels)}, }, { new CUIConfig({ {"type", "Item"}, // V循环 {"name", tr("V cycle")}, }), new CUIConfig({ {"type", "Item"}, // W循环 {"name", tr("W cycle")}, }), }), new CUIConfig({ {"type", "LineEdit"}, // 粗网格CFL数 {"name", tr("Rough grid CFL number")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE}, {"value_origin", QVA_GLOBAL(&m_coarseGridCFL)}, }, {}), new CUIConfig({ {"type", "LineEdit"}, // 细网格CFL数 {"name", tr("Fine grid CFL number")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE}, {"value_origin", QVA_GLOBAL(&m_fineGridCFL)}, }, {}), new CUIConfig({ {"type", "LineEdit"}, // 湍流CFL数 {"name", tr("Turbulent CFL number")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE}, {"value_origin", QVA_GLOBAL(&m_turbulentCFL)}, }, {}), }), }); return nullptr; } CUIConfig *CFDStructDataSolverNumericalMethodManager::genRoeModeUIConfig() { return new CUIConfig({ {"type", "Widget"}, }, { new CUIConfig({ {"type", "GroupBox"}, // 空间离散 {"name", tr("Spatial discretization")}, }, { new CUIConfig({ {"type", "ComboBox"}, // 通量格式 {"name", tr("Flux format")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_fluxFormat)}, {"semaphore", (int)SolutionAnalysisModuleProperty::NUumerical_Methods}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_fluxFormat)}, }, { new CUIConfig({ {"type", "Item"}, // Jameson {"name", "Jameson"}, }), new CUIConfig({ {"type", "Item"}, // Roe {"name", "Roe"}, }), new CUIConfig({ {"type", "Item"}, // AUSMDY {"name", "AUSMDY"}, }), new CUIConfig({ {"type", "Item"}, // AUSMPWP {"name", "AUSMPWP"}, }), }), new CUIConfig({ {"type", "ComboBox"}, // 熵修正类型 {"name", tr("Entropy correction type")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_EntropyCorrectionType)}, }, { new CUIConfig({ {"type", "Item"}, // Harten-Hyman {"name", "Harten-Hyman"}, }), new CUIConfig({ {"type", "Item"}, // Harten-Yee {"name", "Harten-Yee"}, }), }), new CUIConfig({ {"type", "ComboBox"}, // 空间精度 {"name", tr("Spatial accuracy")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_spaceAccuracy)}, }, { new CUIConfig({ {"type", "Item"}, // 一阶迎风 {"name", tr("First order windward")}, }), new CUIConfig({ {"type", "Item"}, // 二阶迎风差分 {"name", tr("Second-order upwind difference")}, }), new CUIConfig({ {"type", "Item"}, // 二阶迎风偏置 {"name", tr("Second-order windward bias")}, }), new CUIConfig({ {"type", "Item"}, // 三阶迎风偏置 {"name", tr("Third order windward bias")}, }), }), new CUIConfig({ {"type", "ComboBox"}, // 限制器 {"name", tr("limiter")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_limiter)}, }, { new CUIConfig({ {"type", "Item"}, // None {"name", "None"}, }), new CUIConfig({ {"type", "Item"}, // Vanalbda {"name", "Vanalbda"}, }), new CUIConfig({ {"type", "Item"}, // Minmod {"name", "Minmod"}, }), }), }), new CUIConfig({ {"type", "GroupBox"}, // 时间离散 {"name", tr("Time dispersion")}, }, { new CUIConfig({ {"type", "ComboBox"}, // 时间格式 {"name", tr("Time format")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_timeFormat)}, }, { new CUIConfig({ {"type", "Item"}, // 隐式 {"name", tr("Implicit")}, }), new CUIConfig({ {"type", "Item"}, // 隐式二阶差分 {"name", tr("Implicit second-order difference")}, }), }), new CUIConfig({ {"type", "ComboBox"}, // 迭代方法 {"name", tr("Iterative method")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_iterationMethod)}, }, { new CUIConfig({ {"type", "Item"}, // LUSGS {"name", tr("LUSGS")}, }), }), new CUIConfig({ {"type", "LineEdit"}, // 松弛因子 {"name", tr("Relaxation factor")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE}, {"value_origin", QVA_GLOBAL(&m_relaxationFactor)}, }, {}), }), new CUIConfig({ {"type", "GroupBox"}, // 加速收敛 {"name", tr("Accelerate convergence")}, }, { new CUIConfig({ {"type", "LineEdit"}, // 多重网格层数 {"name", tr("Multi grid layers")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE}, {"value_origin", QVA_GLOBAL(&m_multigridLevels)}, }, {}), new CUIConfig({ {"type", "ComboBox"}, // 循环类型 {"name", tr("Loop type")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_multigridLevels)}, }, { new CUIConfig({ {"type", "Item"}, // V循环 {"name", tr("V cycle")}, }), new CUIConfig({ {"type", "Item"}, // W循环 {"name", tr("W cycle")}, }), }), new CUIConfig({ {"type", "LineEdit"}, // 粗网格CFL数 {"name", tr("Rough grid CFL number")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE}, {"value_origin", QVA_GLOBAL(&m_coarseGridCFL)}, }, {}), new CUIConfig({ {"type", "LineEdit"}, // 细网格CFL数 {"name", tr("Fine grid CFL number")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE}, {"value_origin", QVA_GLOBAL(&m_fineGridCFL)}, }, {}), new CUIConfig({ {"type", "LineEdit"}, // 湍流CFL数 {"name", tr("Turbulent CFL number")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE}, {"value_origin", QVA_GLOBAL(&m_turbulentCFL)}, }, {}), }), }); return nullptr; } CUIConfig *CFDStructDataSolverNumericalMethodManager::genAUSMDYModeUIConfig() { return new CUIConfig({ {"type", "Widget"}, }, { new CUIConfig({ {"type", "GroupBox"}, // 空间离散 {"name", tr("Spatial discretization")}, }, { new CUIConfig({ {"type", "ComboBox"}, // 通量格式 {"name", tr("Flux format")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_fluxFormat)}, {"semaphore", (int)SolutionAnalysisModuleProperty::NUumerical_Methods}, }, { new CUIConfig({ {"type", "Item"}, // Jameson {"name", "Jameson"}, }), new CUIConfig({ {"type", "Item"}, // Roe {"name", "Roe"}, }), new CUIConfig({ {"type", "Item"}, // AUSMDY {"name", "AUSMDY"}, }), new CUIConfig({ {"type", "Item"}, // AUSMPWP {"name", "AUSMPWP"}, }), }), new CUIConfig({ {"type", "ComboBox"}, // 空间精度 {"name", tr("Spatial accuracy")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_spaceAccuracy)}, }, { new CUIConfig({ {"type", "Item"}, // 一阶迎风 {"name", tr("First order windward")}, }), new CUIConfig({ {"type", "Item"}, // 二阶迎风差分 {"name", tr("Second-order upwind difference")}, }), new CUIConfig({ {"type", "Item"}, // 二阶迎风偏置 {"name", tr("Second-order windward bias")}, }), new CUIConfig({ {"type", "Item"}, // 三阶迎风偏置 {"name", tr("Third order windward bias")}, }), }), new CUIConfig({ {"type", "ComboBox"}, // 限制器 {"name", tr("limiter")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_limiter)}, }, { new CUIConfig({ {"type", "Item"}, // None {"name", "None"}, }), new CUIConfig({ {"type", "Item"}, // Vanalbda {"name", "Vanalbda"}, }), new CUIConfig({ {"type", "Item"}, // Minmod {"name", "Minmod"}, }), }), }), new CUIConfig({ {"type", "GroupBox"}, // 时间离散 {"name", tr("Time dispersion")}, }, { new CUIConfig({ {"type", "ComboBox"}, // 时间格式 {"name", tr("Time format")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_timeFormat)}, }, { new CUIConfig({ {"type", "Item"}, // 隐式 {"name", tr("Implicit")}, }), new CUIConfig({ {"type", "Item"}, // 隐式二阶差分 {"name", tr("Implicit second-order difference")}, }), }), new CUIConfig({ {"type", "ComboBox"}, // 迭代方法 {"name", tr("Iterative method")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_iterationMethod)}, }, { new CUIConfig({ {"type", "Item"}, // LUSGS {"name", tr("LUSGS")}, }), }), new CUIConfig({ {"type", "LineEdit"}, // 松弛因子 {"name", tr("Relaxation factor")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE}, {"value_origin", QVA_GLOBAL(&m_relaxationFactor)}, }, {}), }), new CUIConfig({ {"type", "GroupBox"}, // 加速收敛 {"name", tr("Accelerate convergence")}, }, { new CUIConfig({ {"type", "LineEdit"}, // 多重网格层数 {"name", tr("Multi grid layers")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE}, {"value_origin", QVA_GLOBAL(&m_multigridLevels)}, }, {}), new CUIConfig({ {"type", "ComboBox"}, // 循环类型 {"name", tr("Loop type")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_multigridLevels)}, }, { new CUIConfig({ {"type", "Item"}, // V循环 {"name", tr("V cycle")}, }), new CUIConfig({ {"type", "Item"}, // W循环 {"name", tr("W cycle")}, }), }), new CUIConfig({ {"type", "LineEdit"}, // 粗网格CFL数 {"name", tr("Rough grid CFL number")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE}, {"value_origin", QVA_GLOBAL(&m_coarseGridCFL)}, }, {}), new CUIConfig({ {"type", "LineEdit"}, // 细网格CFL数 {"name", tr("Fine grid CFL number")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE}, {"value_origin", QVA_GLOBAL(&m_fineGridCFL)}, }, {}), new CUIConfig({ {"type", "LineEdit"}, // 湍流CFL数 {"name", tr("Turbulent CFL number")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE}, {"value_origin", QVA_GLOBAL(&m_turbulentCFL)}, }, {}), }), }); return nullptr; } CUIConfig *CFDStructDataSolverNumericalMethodManager::genAUSMPWPModeUIConfig() { return new CUIConfig({ {"type", "Widget"}, }, { new CUIConfig({ {"type", "GroupBox"}, // 空间离散 {"name", tr("Spatial discretization")}, }, { new CUIConfig({ {"type", "ComboBox"}, // 通量格式 {"name", tr("Flux format")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_fluxFormat)}, {"semaphore", (int)SolutionAnalysisModuleProperty::NUumerical_Methods}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_fluxFormat)}, }, { new CUIConfig({ {"type", "Item"}, // Jameson {"name", "Jameson"}, }), new CUIConfig({ {"type", "Item"}, // Roe {"name", "Roe"}, }), new CUIConfig({ {"type", "Item"}, // AUSMDY {"name", "AUSMDY"}, }), new CUIConfig({ {"type", "Item"}, // AUSMPWP {"name", "AUSMPWP"}, }), }), new CUIConfig({ {"type", "ComboBox"}, // 空间精度 {"name", tr("Spatial accuracy")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_spaceAccuracy)}, }, { new CUIConfig({ {"type", "Item"}, // 一阶迎风 {"name", tr("First order windward")}, }), new CUIConfig({ {"type", "Item"}, // 二阶迎风差分 {"name", tr("Second-order upwind difference")}, }), new CUIConfig({ {"type", "Item"}, // 二阶迎风偏置 {"name", tr("Second-order windward bias")}, }), new CUIConfig({ {"type", "Item"}, // 三阶迎风偏置 {"name", tr("Third order windward bias")}, }), }), new CUIConfig({ {"type", "ComboBox"}, // 限制器 {"name", tr("limiter")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_limiter)}, }, { new CUIConfig({ {"type", "Item"}, // None {"name", "None"}, }), new CUIConfig({ {"type", "Item"}, // Vanalbda {"name", "Vanalbda"}, }), new CUIConfig({ {"type", "Item"}, // Minmod {"name", "Minmod"}, }), }), }), new CUIConfig({ {"type", "GroupBox"}, // 时间离散 {"name", tr("Time dispersion")}, }, { new CUIConfig({ {"type", "ComboBox"}, // 时间格式 {"name", tr("Time format")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_timeFormat)}, }, { new CUIConfig({ {"type", "Item"}, // 隐式 {"name", tr("Implicit")}, }), new CUIConfig({ {"type", "Item"}, // 隐式二阶差分 {"name", tr("Implicit second-order difference")}, }), }), new CUIConfig({ {"type", "ComboBox"}, // 迭代方法 {"name", tr("Iterative method")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_iterationMethod)}, }, { new CUIConfig({ {"type", "Item"}, // LUSGS {"name", tr("LUSGS")}, }), }), new CUIConfig({ {"type", "LineEdit"}, // 松弛因子 {"name", tr("Relaxation factor")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE}, {"value_origin", QVA_GLOBAL(&m_relaxationFactor)}, }, {}), }), new CUIConfig({ {"type", "GroupBox"}, // 加速收敛 {"name", tr("Accelerate convergence")}, }, { new CUIConfig({ {"type", "LineEdit"}, // 多重网格层数 {"name", tr("Multi grid layers")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE}, {"value_origin", QVA_GLOBAL(&m_multigridLevels)}, }, {}), new CUIConfig({ {"type", "ComboBox"}, // 循环类型 {"name", tr("Loop type")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT}, {"value_origin", QVA_GLOBAL(&m_multigridLevels)}, }, { new CUIConfig({ {"type", "Item"}, // V循环 {"name", tr("V cycle")}, }), new CUIConfig({ {"type", "Item"}, // W循环 {"name", tr("W cycle")}, }), }), new CUIConfig({ {"type", "LineEdit"}, // 粗网格CFL数 {"name", tr("Rough grid CFL number")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE}, {"value_origin", QVA_GLOBAL(&m_coarseGridCFL)}, }, {}), new CUIConfig({ {"type", "LineEdit"}, // 细网格CFL数 {"name", tr("Fine grid CFL number")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE}, {"value_origin", QVA_GLOBAL(&m_fineGridCFL)}, }, {}), new CUIConfig({ {"type", "LineEdit"}, // 湍流CFL数 {"name", tr("Turbulent CFL number")}, {"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE}, {"value_origin", QVA_GLOBAL(&m_turbulentCFL)}, }, {}), }), }); return nullptr; }