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/CFDStructDataSolverBoundary...

695 lines
56 KiB
C++

#include "CFDStructDataSolverTimeModeManager.h"
#include "CUIProperty/CUIConfig.h"
#include "CFDStructMain/CFDStructDefine.h"
#include "CFDStructSigsCenter.h"
#include "CUIProperty/CUISigsCenter.h"
#include <QVariant>
#include "CFDStructDataSolverBoundaryConditionManager.h"
CFDStructDataSolverBoundaryConditionManager::CFDStructDataSolverBoundaryConditionManager(QObject *parent) : CFDStructDataManagerBase(parent)
{
m_uiConfig = nullptr;
connect(m_cuiSigsCenter, &CUISigsCenter::sig_cuiPropertyChanged, this, [=](int semaphore)
{ emit CFDStructSigsCenter::getInstance() -> sig_solverTimeModeDataChanged(); });
}
CFDStructDataSolverBoundaryConditionManager::~CFDStructDataSolverBoundaryConditionManager()
{
// CFDStructDataManagerBase::~CFDStructDataManagerBase();
}
CUIConfig *CFDStructDataSolverBoundaryConditionManager::getParamUIConfig()
{
if (m_uiConfig != nullptr)
{
delete m_uiConfig;
m_uiConfig = nullptr;
}
qDebug()<<"in manager";
if(m_BoundaryType == 0)
return genFarFieldModeUIConfig();
if(m_BoundaryType == 1)
return genPressureInletModeUIConfig();
if(m_BoundaryType == 2)
return genPressureOutletUIConfig();
if(m_BoundaryType == 3)
return genSymmetricUIConfig();
if(m_BoundaryType == 4)
return genCycleUIConfig();
if(m_BoundaryType == 5){
if(m_WallType == 0)
return genWallAdiabaticWallUIConfig();
if(m_WallType == 1)
return genWallIsothermalWallUIConfig();
if(m_WallType == 2)
return genWallHotFlowWallUIConfig();
return genWallAdiabaticWallUIConfig();
}
return m_uiConfig;
}
CUIConfig *CFDStructDataSolverBoundaryConditionManager::genFarFieldModeUIConfig()
{
return new CUIConfig({{"type", "Widget"}}, {
new CUIConfig({
{"type", "LineEdit"}, // 边界名称
{"name", tr("Boundary name")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_BoundaryName)},
},
{}),
new CUIConfig({
{"type", "LineEdit"}, // 所属计算域
{"name", tr("Belonging to the computing domain")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_ComputationalDomain)},
},
{}),
new CUIConfig({
{"type", "ComboBox"}, // 边界类型
{"name", tr("Boundary type")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_BoundaryType)},
{"semaphore", (int)SolutionAnalysisModuleProperty::Boundary_Conditions},
},
{
new CUIConfig({
{"type", "Item"}, // 远场
{"name", tr("far field")},
}),
new CUIConfig({
{"type", "Item"}, // 压强入口
{"name", tr("Pressure inlet")},
}),
new CUIConfig({
{"type", "Item"}, // 压强出口
{"name", tr("Pressure outlet")},
}),
new CUIConfig({
{"type", "Item"}, // 对称
{"name", tr("symmetric")},
}),
new CUIConfig({
{"type", "Item"}, // 周期
{"name", tr("cycle")},
}),
new CUIConfig({
{"type", "Item"}, // 壁面
{"name", tr("Wall surface")},
}),
}),
new CUIConfig({
{"type", "LineEdit"}, // 马赫数
{"name", tr("mach number")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE},
{"value_origin", QVA_GLOBAL(&m_MachNumber)},
},
{}),
new CUIConfig({
{"type", "LineEdit"}, // 密度
{"name", tr("density")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE},
{"value_origin", QVA_GLOBAL(&m_Density)},
},
{}),
new CUIConfig({
{"type", "LineEdit"}, // 温度
{"name", tr("temperature")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE},
{"value_origin", QVA_GLOBAL(&m_Temperature)},
},
{}),
new CUIConfig({
{"type", "LineEdit"}, // 来流方向
{"name", tr("Flow direction")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE},
{"value_origin", QVA_GLOBAL(&m_InflowDirection)},
},
{}),
new CUIConfig({
{"type", "LineEdit"}, // 湍流粘性比
{"name", tr("Turbulent viscosity ratio")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE},
{"value_origin", QVA_GLOBAL(&m_TurbulentViscosityRatio)},
},
{}),
new CUIConfig({
{"type", "LineEdit"}, // 湍流强度
{"name", tr("Turbulence intensity")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE},
{"value_origin", QVA_GLOBAL(&m_TurbulentIntensity)},
},
{}),
});
return nullptr;
}
CUIConfig *CFDStructDataSolverBoundaryConditionManager::genPressureInletModeUIConfig()
{
return new CUIConfig({{"type", "Widget"}}, {
new CUIConfig({
{"type", "LineEdit"}, // 边界名称
{"name", tr("Boundary name")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_BoundaryName)},
},
{}),
new CUIConfig({
{"type", "LineEdit"}, // 所属计算域
{"name", tr("Belonging to the computing domain")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_ComputationalDomain)},
},
{}),
new CUIConfig({
{"type", "ComboBox"}, // 边界类型
{"name", tr("Boundary type")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_BoundaryType)},
{"semaphore", (int)SolutionAnalysisModuleProperty::Boundary_Conditions},
},
{
new CUIConfig({
{"type", "Item"}, // 远场
{"name", tr("far field")},
}),
new CUIConfig({
{"type", "Item"}, // 压强入口
{"name", tr("Pressure inlet")},
}),
new CUIConfig({
{"type", "Item"}, // 压强出口
{"name", tr("Pressure outlet")},
}),
new CUIConfig({
{"type", "Item"}, // 对称
{"name", tr("symmetric")},
}),
new CUIConfig({
{"type", "Item"}, // 周期
{"name", tr("cycle")},
}),
new CUIConfig({
{"type", "Item"}, // 壁面
{"name", tr("Wall surface")},
}),
}),
new CUIConfig({
{"type", "LineEdit"}, // 总压
{"name", tr("Total pressure")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE},
{"value_origin", QVA_GLOBAL(&m_TotalPressure)},
},
{}),
new CUIConfig({
{"type", "LineEdit"}, // 总温
{"name", tr("Total temperature")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE},
{"value_origin", QVA_GLOBAL(&m_TotalTemperature)},
},
{}),
new CUIConfig({
{"type", "LineEdit"}, // 静压
{"name", tr("static pressure")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE},
{"value_origin", QVA_GLOBAL(&m_StaticPressure)},
},
{}),
new CUIConfig({
{"type", "LineEdit"}, // 来流方向
{"name", tr("Flow direction")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE},
{"value_origin", QVA_GLOBAL(&m_InflowDirection)},
},
{}),
new CUIConfig({
{"type", "LineEdit"}, // 湍流粘性比
{"name", tr("Turbulent viscosity ratio")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE},
{"value_origin", QVA_GLOBAL(&m_TurbulentViscosityRatio)},
},
{}),
new CUIConfig({
{"type", "LineEdit"}, // 湍流强度
{"name", tr("Turbulence intensity")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE},
{"value_origin", QVA_GLOBAL(&m_TurbulentIntensity)},
},
{}),
// TODO 用户自定义
});
return nullptr;
}
CUIConfig *CFDStructDataSolverBoundaryConditionManager::genPressureOutletUIConfig()
{
return new CUIConfig({{"type", "Widget"}}, {
new CUIConfig({
{"type", "LineEdit"}, // 边界名称
{"name", tr("Boundary name")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_BoundaryName)},
},
{}),
new CUIConfig({
{"type", "LineEdit"}, // 所属计算域
{"name", tr("Belonging to the computing domain")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_ComputationalDomain)},
},
{}),
new CUIConfig({
{"type", "ComboBox"}, // 边界类型
{"name", tr("Boundary type")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_BoundaryType)},
{"semaphore", (int)SolutionAnalysisModuleProperty::Boundary_Conditions},
},
{
new CUIConfig({
{"type", "Item"}, // 远场
{"name", tr("far field")},
}),
new CUIConfig({
{"type", "Item"}, // 压强入口
{"name", tr("Pressure inlet")},
}),
new CUIConfig({
{"type", "Item"}, // 压强出口
{"name", tr("Pressure outlet")},
}),
new CUIConfig({
{"type", "Item"}, // 对称
{"name", tr("symmetric")},
}),
new CUIConfig({
{"type", "Item"}, // 周期
{"name", tr("cycle")},
}),
new CUIConfig({
{"type", "Item"}, // 壁面
{"name", tr("Wall surface")},
}),
}),
new CUIConfig({
{"type", "LineEdit"}, // 静压
{"name", tr("static pressure")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE},
{"value_origin", QVA_GLOBAL(&m_StaticPressure)},
},
{}),
});
return nullptr;
}
CUIConfig *CFDStructDataSolverBoundaryConditionManager::genSymmetricUIConfig()
{
return new CUIConfig({{"type", "Widget"}}, {
new CUIConfig({
{"type", "LineEdit"}, // 边界名称
{"name", tr("Boundary name")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_BoundaryName)},
},
{}),
new CUIConfig({
{"type", "LineEdit"}, // 所属计算域
{"name", tr("Belonging to the computing domain")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_ComputationalDomain)},
},
{}),
new CUIConfig({
{"type", "ComboBox"}, // 边界类型
{"name", tr("Boundary type")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_BoundaryType)},
{"semaphore", (int)SolutionAnalysisModuleProperty::Boundary_Conditions},
},
{
new CUIConfig({
{"type", "Item"}, // 远场
{"name", tr("far field")},
}),
new CUIConfig({
{"type", "Item"}, // 压强入口
{"name", tr("Pressure inlet")},
}),
new CUIConfig({
{"type", "Item"}, // 压强出口
{"name", tr("Pressure outlet")},
}),
new CUIConfig({
{"type", "Item"}, // 对称
{"name", tr("symmetric")},
}),
new CUIConfig({
{"type", "Item"}, // 周期
{"name", tr("cycle")},
}),
new CUIConfig({
{"type", "Item"}, // 壁面
{"name", tr("Wall surface")},
}),
}),
});
return nullptr;
}
CUIConfig *CFDStructDataSolverBoundaryConditionManager::genCycleUIConfig()
{
return new CUIConfig({{"type", "Widget"}}, {
new CUIConfig({
{"type", "LineEdit"}, // 边界名称
{"name", tr("Boundary name")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_BoundaryName)},
},
{}),
new CUIConfig({
{"type", "LineEdit"}, // 所属计算域
{"name", tr("Belonging to the computing domain")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_ComputationalDomain)},
},
{}),
new CUIConfig({
{"type", "ComboBox"}, // 边界类型
{"name", tr("Boundary type")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_BoundaryType)},
{"semaphore", (int)SolutionAnalysisModuleProperty::Boundary_Conditions},
},
{
new CUIConfig({
{"type", "Item"}, // 远场
{"name", tr("far field")},
}),
new CUIConfig({
{"type", "Item"}, // 压强入口
{"name", tr("Pressure inlet")},
}),
new CUIConfig({
{"type", "Item"}, // 压强出口
{"name", tr("Pressure outlet")},
}),
new CUIConfig({
{"type", "Item"}, // 对称
{"name", tr("symmetric")},
}),
new CUIConfig({
{"type", "Item"}, // 周期
{"name", tr("cycle")},
}),
new CUIConfig({
{"type", "Item"}, // 壁面
{"name", tr("Wall surface")},
}),
}),
new CUIConfig({
{"type", "LineEdit"}, // 配对名称
{"name", tr("Pairing Name")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_PairingName)},
},
{}),
new CUIConfig({
{"type", "ComboBox"}, // 对应面
{"name", tr("Corresponding surface")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT},
{"value_origin", QVA_GLOBAL(&m_CorrespondingSurface)},
},
{}),
new CUIConfig({
{"type", "ComboBox"}, // 周期类型
{"name", tr("Cycle type")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT},
{"value_origin", QVA_GLOBAL(&m_PeriodicType)},
},
{}),
new CUIConfig({
{"type", "LineEdit"}, // 旋转中心
{"name", tr("Rotation center")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_RotationCenter)},
},
{}),
new CUIConfig({
{"type", "LineEdit"}, // 转轴方向
{"name", tr("Axis direction")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_RotationAxisDirection)},
},
{}),
new CUIConfig({
{"type", "LineEdit"}, // 旋转角
{"name", tr("Rotation angle")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_RotationAngle)},
},
{}),
});
return nullptr;
}
CUIConfig *CFDStructDataSolverBoundaryConditionManager::genWallAdiabaticWallUIConfig()
{
return new CUIConfig({{"type", "Widget"}}, {
new CUIConfig({
{"type", "LineEdit"}, // 边界名称
{"name", tr("Boundary name")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_BoundaryName)},
},
{}),
new CUIConfig({
{"type", "LineEdit"}, // 所属计算域
{"name", tr("Belonging to the computing domain")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_ComputationalDomain)},
},
{}),
new CUIConfig({
{"type", "ComboBox"}, // 边界类型
{"name", tr("Boundary type")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_BoundaryType)},
{"semaphore", (int)SolutionAnalysisModuleProperty::Boundary_Conditions},
},
{
new CUIConfig({
{"type", "Item"}, // 远场
{"name", tr("far field")},
}),
new CUIConfig({
{"type", "Item"}, // 压强入口
{"name", tr("Pressure inlet")},
}),
new CUIConfig({
{"type", "Item"}, // 压强出口
{"name", tr("Pressure outlet")},
}),
new CUIConfig({
{"type", "Item"}, // 对称
{"name", tr("symmetric")},
}),
new CUIConfig({
{"type", "Item"}, // 周期
{"name", tr("cycle")},
}),
new CUIConfig({
{"type", "Item"}, // 壁面
{"name", tr("Wall surface")},
}),
}),
new CUIConfig({
{"type", "RadioComponent"}, // 壁面类型
{"name", tr("Wall type")},
{"widget", "GroupBox"},
{"layout", "QHBoxLayout"},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT},
{"value_origin", QVA_GLOBAL(&m_WallType)},
},
{
new CUIConfig({
{"type", "RadioButton"}, // 绝热壁
{"name", tr("Adiabatic wall")},
}),
new CUIConfig({
{"type", "RadioButton"}, // 等温壁
{"name", tr("Isothermal wall")},
}),
new CUIConfig({
{"type", "RadioButton"}, // 热流壁
{"name", tr("Hot flow wall")},
}),
}),
});
return nullptr;
}
CUIConfig *CFDStructDataSolverBoundaryConditionManager::genWallIsothermalWallUIConfig()
{
return new CUIConfig({{"type", "Widget"}}, {
new CUIConfig({
{"type", "LineEdit"}, // 边界名称
{"name", tr("Boundary name")},
{"widget", "GroupBox"},
},
{}),
new CUIConfig({
{"type", "LineEdit"}, // 所属计算域
{"name", tr("Belonging to the computing domain")},
},
{}),
new CUIConfig({
{"type", "ComboBox"}, // 边界类型
{"name", tr("Boundary type")},
},
{
new CUIConfig({
{"type", "Item"}, // 远场
{"name", tr("far field")},
}),
new CUIConfig({
{"type", "Item"}, // 压强入口
{"name", tr("Pressure inlet")},
}),
new CUIConfig({
{"type", "Item"}, // 压强出口
{"name", tr("Pressure outlet")},
}),
new CUIConfig({
{"type", "Item"}, // 对称
{"name", tr("symmetric")},
}),
new CUIConfig({
{"type", "Item"}, // 周期
{"name", tr("cycle")},
}),
new CUIConfig({
{"type", "Item"}, // 壁面
{"name", tr("Wall surface")},
}),
}),
new CUIConfig({
{"type", "RadioComponent"}, // 壁面类型
{"name", tr("Wall type")},
{"widget", "GroupBox"},
{"layout", "QHBoxLayout"},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT},
{"value_origin", QVA_GLOBAL(&m_WallType)},
},
{
new CUIConfig({
{"type", "RadioButton"}, // 绝热壁
{"name", tr("Adiabatic wall")},
}),
new CUIConfig({
{"type", "RadioButton"}, // 等温壁
{"name", tr("Isothermal wall")},
}),
new CUIConfig({
{"type", "RadioButton"}, // 热流壁
{"name", tr("Hot flow wall")},
}),
new CUIConfig({
{"type", "LineEidt"}, // 壁面温度
{"name", tr("Wall temperature")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE},
{"value_origin", QVA_GLOBAL(&m_WallTemperature)},
}),
}),
});
return nullptr;
}
CUIConfig *CFDStructDataSolverBoundaryConditionManager::genWallHotFlowWallUIConfig()
{
return new CUIConfig({{"type", "Widget"}}, {
new CUIConfig({
{"type", "LineEdit"}, // 边界名称
{"name", tr("Boundary name")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_BoundaryName)},
},
{}),
new CUIConfig({
{"type", "LineEdit"}, // 所属计算域
{"name", tr("Belonging to the computing domain")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_ComputationalDomain)},
},
{}),
new CUIConfig({
{"type", "ComboBox"}, // 边界类型
{"name", tr("Boundary type")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_STRING},
{"value_origin", QVA_GLOBAL(&m_BoundaryType)},
{"semaphore", (int)SolutionAnalysisModuleProperty::Boundary_Conditions},
},
{
new CUIConfig({
{"type", "Item"}, // 远场
{"name", tr("far field")},
}),
new CUIConfig({
{"type", "Item"}, // 压强入口
{"name", tr("Pressure inlet")},
}),
new CUIConfig({
{"type", "Item"}, // 压强出口
{"name", tr("Pressure outlet")},
}),
new CUIConfig({
{"type", "Item"}, // 对称
{"name", tr("symmetric")},
}),
new CUIConfig({
{"type", "Item"}, // 周期
{"name", tr("cycle")},
}),
new CUIConfig({
{"type", "Item"}, // 壁面
{"name", tr("Wall surface")},
}),
}),
new CUIConfig({
{"type", "RadioComponent"}, // 壁面类型
{"name", tr("Wall type")},
{"widget", "GroupBox"},
{"layout", "QHBoxLayout"},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_INT},
{"value_origin", QVA_GLOBAL(&m_WallType)},
},
{
new CUIConfig({
{"type", "RadioButton"}, // 绝热壁
{"name", tr("Adiabatic wall")},
}),
new CUIConfig({
{"type", "RadioButton"}, // 等温壁
{"name", tr("Isothermal wall")},
}),
new CUIConfig({
{"type", "RadioButton"}, // 热流壁
{"name", tr("Hot flow wall")},
}),
new CUIConfig({
{"type", "LineEidt"}, // 壁面热流
{"name", tr("Wall heat flux")},
{"value_type", CUI_DATA_TYPE::CUI_DATA_TYPE_DOUBLE},
{"value_origin", QVA_GLOBAL(&m_WallHeatFlux)},
}),
}),
});
return nullptr;
}