You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
AppFlow/CFDStruct/CFDStructDataManager/CFDStructDataSolverNumerica...

1115 lines
82 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "CFDStructDataSolverNumericalMethodManager.h"
#include "CFDStructMain/CFDStructDefine.h"
#include "CFDStructSigsCenter.h"
#include "CUIProperty/CUIConfig.h"
CFDStructDataSolverNumericalMethodManager::CFDStructDataSolverNumericalMethodManager(QObject *parent) : CFDStructDataManagerBase(parent) {
m_uiConfig = nullptr;
}
CFDStructDataSolverNumericalMethodManager::~CFDStructDataSolverNumericalMethodManager() {
}
CUIConfig *CFDStructDataSolverNumericalMethodManager::getParamUIConfig() {
initTimeDespersionGroupConfig();
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();
}
void CFDStructDataSolverNumericalMethodManager::saveDataToDom(rapidjson::Document &dom) {
jsonAdd(dom, m_fluxFormat,
{"region", 0, "numericMethod", "numMethodParm", "generalFmt"});
jsonAdd(dom, m_secondOrderArtificialViscosity,
{"region", 0, "numericMethod", "numMethodParm", "twojamson"});
jsonAdd(dom, m_fourthOrderArtificialViscosity,
{"region", 0, "numericMethod", "numMethodParm", "fourjamson"});
jsonAdd(dom, m_spaceAccuracy,
{"region", 0, "numericMethod", "numMethodParm", "accuracy"});
jsonAdd(dom, m_limiter,
{"region", 0, "numericMethod", "numMethodParm", "limiter"});
jsonAdd(dom, m_timeFormat,
{"region", 0, "numericMethod", "numMethodParm", "timeType"});
// 此变量在ui中对应下拉框但仅有一个选项并且json值不为0所以该变量不需要读取
// jsonAdd(dom, m_iterationMethod,
// {"region", 0, "numericMethod", "numMethodParm", "iterType"});
if (m_timeFormat == 0) {
jsonAdd(dom, 2,
{"region", 0, "numericMethod", "numMethodParm", "iterType"});
} else if (m_timeFormat == 1) {
jsonAdd(dom, 1,
{"region", 0, "numericMethod", "numMethodParm", "iterType"});
}
jsonAdd(dom, m_relaxationFactor,
{"region", 0, "numericMethod", "numMethodParm", "lussor"});
jsonAdd(dom, m_multigridLevels,
{"region", 0, "numericMethod", "numMethodParm", "gridLevelNum"});
// 循环类型如果是v循环的话写入1如果是w循环的话写入2
if (m_cycleType == 0) {
jsonAdd(dom, 1,
{"region", 0, "numericMethod", "numMethodParm", "cycleType"});
} else if (m_cycleType == 1) {
jsonAdd(dom, 2,
{"region", 0, "numericMethod", "numMethodParm", "cycleType"});
}
jsonAdd(dom, m_coarseGridCFL,
{"region", 0, "numericMethod", "numMethodParm", "coarseGridNum"});
jsonAdd(dom, m_fineGridCFL,
{"region", 0, "numericMethod", "numMethodParm", "fineGridNum"});
jsonAdd(dom, m_turbulentCFL,
{"region", 0, "numericMethod", "numMethodParm", "cfl"});
jsonAdd(dom, m_EntropyCorrectionType,
{"region", 0, "numericMethod", "numMethodParm", "EntropyFixVal"});
}
void CFDStructDataSolverNumericalMethodManager::readDataFromDom(rapidjson::Document &dom) {
QVariant temp;
jsonRead(dom, temp,
{"region", 0, "numericMethod", "numMethodParm", "generalFmt"});
if (temp != QVariant()) {
m_fluxFormat = temp.toInt();
}
jsonRead(dom, temp,
{"region", 0, "numericMethod", "numMethodParm", "twojamson"});
if (temp != QVariant()) {
m_secondOrderArtificialViscosity = temp.toDouble();
}
jsonRead(dom, temp,
{"region", 0, "numericMethod", "numMethodParm", "fourjamson"});
if (temp != QVariant()) {
m_fourthOrderArtificialViscosity = temp.toDouble();
}
jsonRead(dom, temp,
{"region", 0, "numericMethod", "numMethodParm", "accuracy"});
if (temp != QVariant()) {
m_spaceAccuracy = temp.toInt();
}
jsonRead(dom, temp,
{"region", 0, "numericMethod", "numMethodParm", "limiter"});
if (temp != QVariant()) {
m_limiter = temp.toInt();
}
jsonRead(dom, temp,
{"region", 0, "numericMethod", "numMethodParm", "timeType"});
if (temp != QVariant()) {
m_timeFormat = temp.toInt();
}
// 此变量在ui中对应下拉框但仅有一个选项并且json值不为0所以该变量不需要读取
// jsonRead(dom, m_iterationMethod,
// {"region", 0, "numericMethod", "numMethodParm", "iterType"});
jsonRead(dom, temp,
{"region", 0, "numericMethod", "numMethodParm", "lussor"});
if (temp != QVariant()) {
m_relaxationFactor = temp.toDouble();
}
jsonRead(dom, temp,
{"region", 0, "numericMethod", "numMethodParm", "gridLevelNum"});
if (temp != QVariant()) {
m_multigridLevels = temp.toInt();
}
jsonRead(dom, temp,
{"region", 0, "numericMethod", "numMethodParm", "cycleType"});
if (temp != QVariant()) {
m_cycleType = temp.toInt();
}
jsonRead(dom, temp,
{"region", 0, "numericMethod", "numMethodParm", "coarseGridNum"});
if (temp != QVariant()) {
m_coarseGridCFL = temp.toDouble();
}
jsonRead(dom, temp,
{"region", 0, "numericMethod", "numMethodParm", "fineGridNum"});
if (temp != QVariant()) {
m_fineGridCFL = temp.toDouble();
}
jsonRead(dom, temp,
{"region", 0, "numericMethod", "numMethodParm", "cfl"});
if (temp != QVariant()) {
m_turbulentCFL = temp.toDouble();
}
jsonRead(dom, temp,
{"region", 0, "numericMethod", "numMethodParm", "EntropyFixVal"});
if (temp != QVariant()) {
m_EntropyCorrectionType = temp.toInt();
}
}
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)},
// },
// {}),
// }),
m_TimeDispersionGroupConfig,
new CUIConfig({
{"type", "GroupBox"}, // 加速收敛
{"name", tr("Accelerate convergence")},
},
{
new CUIConfig({
{"type", "ComboBox"}, // 多重网格层数
{"name", tr("Multi grid layers")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT},
{"value_origin", QVA_GLOBAL(&m_multigridLevels)},
},
{
new CUIConfig({
{"type", "Item"},
{"name", "1"},
}),
new CUIConfig({
{"type", "Item"},
{"name", "2"},
}),
new CUIConfig({
{"type", "Item"},
{"name", "3"},
}),
}),
new CUIConfig({
{"type", "ComboBox"}, // 循环类型
{"name", tr("Loop type")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT},
{"value_origin", QVA_GLOBAL(&m_cycleType)},
},
{
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)},
},
{}),
new CUIConfig({
{"type", "CheckBox"},
{"name", tr("Convergence Stabilization")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT},
{"value_origin", QVA_GLOBAL(&m_ConvergenceStabilization)},
}),
}),
});
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)},
// },
// {}),
// }),
m_TimeDispersionGroupConfig,
new CUIConfig({
{"type", "GroupBox"}, // 加速收敛
{"name", tr("Accelerate convergence")},
},
{
new CUIConfig({
{"type", "ComboBox"}, // 多重网格层数
{"name", tr("Multi grid layers")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT},
{"value_origin", QVA_GLOBAL(&m_multigridLevels)},
},
{
new CUIConfig({
{"type", "Item"},
{"name", "1"},
}),
new CUIConfig({
{"type", "Item"},
{"name", "2"},
}),
new CUIConfig({
{"type", "Item"},
{"name", "3"},
}),
}),
new CUIConfig({
{"type", "ComboBox"}, // 循环类型
{"name", tr("Loop type")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT},
{"value_origin", QVA_GLOBAL(&m_cycleType)},
},
{
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)},
},
{}),
new CUIConfig({
{"type", "CheckBox"},
{"name", tr("Convergence Stabilization")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT},
{"value_origin", QVA_GLOBAL(&m_ConvergenceStabilization)},
}),
}),
});
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)},
// },
// {}),
// }),
m_TimeDispersionGroupConfig,
new CUIConfig({
{"type", "GroupBox"}, // 加速收敛
{"name", tr("Accelerate convergence")},
},
{
new CUIConfig({
{"type", "ComboBox"}, // 多重网格层数
{"name", tr("Multi grid layers")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT},
{"value_origin", QVA_GLOBAL(&m_multigridLevels)},
},
{
new CUIConfig({
{"type", "Item"},
{"name", "1"},
}),
new CUIConfig({
{"type", "Item"},
{"name", "2"},
}),
new CUIConfig({
{"type", "Item"},
{"name", "3"},
}),
}),
new CUIConfig({
{"type", "ComboBox"}, // 循环类型
{"name", tr("Loop type")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT},
{"value_origin", QVA_GLOBAL(&m_cycleType)},
},
{
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)},
},
{}),
new CUIConfig({
{"type", "CheckBox"},
{"name", tr("Convergence Stabilization")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT},
{"value_origin", QVA_GLOBAL(&m_ConvergenceStabilization)},
}),
}),
});
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},
},
{
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)},
// },
// {}),
// }),
m_TimeDispersionGroupConfig,
new CUIConfig({
{"type", "GroupBox"}, // 加速收敛
{"name", tr("Accelerate convergence")},
},
{
new CUIConfig({
{"type", "ComboBox"}, // 多重网格层数
{"name", tr("Multi grid layers")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT},
{"value_origin", QVA_GLOBAL(&m_multigridLevels)},
},
{
new CUIConfig({
{"type", "Item"},
{"name", "1"},
}),
new CUIConfig({
{"type", "Item"},
{"name", "2"},
}),
new CUIConfig({
{"type", "Item"},
{"name", "3"},
}),
}),
new CUIConfig({
{"type", "ComboBox"}, // 循环类型
{"name", tr("Loop type")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT},
{"value_origin", QVA_GLOBAL(&m_cycleType)},
},
{
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)},
},
{}),
new CUIConfig({
{"type", "CheckBox"},
{"name", tr("Convergence Stabilization")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT},
{"value_origin", QVA_GLOBAL(&m_ConvergenceStabilization)},
}),
}),
});
return nullptr;
}
#include "CFDStructDataManager.h"
void CFDStructDataSolverNumericalMethodManager::initTimeDespersionGroupConfig() {
int m_runTime = CFDStructDataManager::getInstance()->getTimeModeRunTime();
m_TimeDispersionGroupConfig = new CUIConfig({}, {});
if (m_runTime == 0) {
if (m_timeFormat == 0) {
m_TimeDispersionGroupConfig = 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)},
{"semaphore", (int)SolutionAnalysisModuleProperty::NUumerical_Methods},
},
{
new CUIConfig({
{"type", "Item"}, // 隐式
{"name", tr("Implicit")},
}),
new CUIConfig({
{"type", "Item"}, // 显式
{"name", tr("Explicit")},
}),
}),
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)},
},
{}),
});
} else if (m_timeFormat == 1) {
m_TimeDispersionGroupConfig = 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)},
{"semaphore", (int)SolutionAnalysisModuleProperty::NUumerical_Methods},
},
{
new CUIConfig({
{"type", "Item"}, // 隐式
{"name", tr("Implicit")},
}),
new CUIConfig({
{"type", "Item"}, // 显式
{"name", tr("Explicit")},
}),
}),
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"}, // 5级龙格库塔
{"name", tr("5th-order Runge-Kutta")},
}),
}),
});
}
} else if (m_runTime == 1) {
m_TimeDispersionGroupConfig = 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 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)},
},
{}),
});
}
}