#include "FITKOFTurbulencePropertiesWrite.h" #include "FITKDictObject.h" #include "FITKDictArray.h" #include "FITKDictGroup.h" #include "FITKDictVector.h" #include "FITKDictValue.h" #include "FITK_Kernel/FITKCore/FITKEnumTransformer.hpp" #include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h" #include "FITK_Kernel/FITKAppFramework/FITKGlobalData.h" #include "FITK_Kernel/FITKEasyParam/FITKParameter.h" #include "FITK_Kernel/FITKEasyParam/FITKParamBool.h" #include "FITK_Kernel/FITKEasyParam/FITKParamInt.h" #include "FITK_Kernel/FITKEasyParam/FITKParamDouble.h" #include "FITK_Kernel/FITKEasyParam/FITKParamCombox.h" #include "FITK_Kernel/FITKEasyParam/FITKParamString.h" #include "FITK_Interface/FITKInterfaceFlowOF/FITKOFPhysicsData.h" #include "FITK_Interface/FITKInterfaceFlowOF/FITKAbstractOFTurbulence.h" #include #include //命名空间 namespace IO { FITKOFTurbulencePropertiesWrite::FITKOFTurbulencePropertiesWrite() { } FITKOFTurbulencePropertiesWrite::~FITKOFTurbulencePropertiesWrite() { } void FITKOFTurbulencePropertiesWrite::setFilePath(const QString& filePath) { FITKOFAbstractDictWriter::setFilePath(filePath); QFileInfo fileInfo(filePath); //判断是否是路径 if (!fileInfo.isDir())return; m_fileName = QString("%1/constant/momentumTransport").arg(filePath); } bool FITKOFTurbulencePropertiesWrite::run() { //判断文件是否存在 if (m_fileName.isEmpty())return false; //获取字典工程 this->openDictObject(); if (!m_objectDict)return false; //写出FoamFile this->dictObjectFoamFile(); //设置写出的网格区域数据 bool Ok = this->turbulencePropW(); //写出字典文件 if (Ok) Ok = this->writeDictFile(); //关闭字典工程 this->closeDictObject(); return Ok; } QString FITKOFTurbulencePropertiesWrite::getFileName() { return m_fileName; } void FITKOFTurbulencePropertiesWrite::dictObjectFoamFile() { if (!m_objectDict)return; //FoamFile DICT::FITKDictGroup* group = new DICT::FITKDictGroup; group->append("version", 2.0); group->append("format", "ascii"); group->append("class", "dictionary"); group->append("location", "\"constant\""); group->append("object", "turbulenceProperties"); m_objectDict->append("FoamFile", group); } bool FITKOFTurbulencePropertiesWrite::turbulencePropW() { if (!m_objectDict) return false; //获取全局数据管理器 AppFrame::FITKGlobalData* globalData = FITKAPP->getGlobalData(); if (!globalData)return false; //获取物理数据 Interface::FITKOFPhysicsData* physicsData = globalData->getPhysicsData(); if (!physicsData)return false; //获取湍流模型数据 Interface::FITKAbstractOFTurbulence* turbulence = physicsData->getTurbulence(); //获取湍流模式类型 Interface::FITKOFSolverTypeEnum::FITKOFTurbulenceType type = Interface::FITKOFSolverTypeEnum::FITKOFTurbulenceType::TurbNone; if (turbulence) type = turbulence->getTurbulenceType(); //设置模式参数数据 DICT::FITKDictGroup* coeffs = nullptr; if (type == Interface::FITKOFSolverTypeEnum::FITKOFTurbulenceType::TurbNone) { //使用层流 m_objectDict->append("simulationType", "laminar"); return true; } else if (type == Interface::FITKOFSolverTypeEnum::FITKOFTurbulenceType::RANS) { m_objectDict->append("simulationType", "RAS"); //设置模式数据 DICT::FITKDictGroup* modelData = new DICT::FITKDictGroup; m_objectDict->append("RAS", modelData); modelData->append("turbulence", true); modelData->append("printCoeffs", true); //获取湍流名称 QString turbName = this->turbModelName(turbulence->getDataObjectName()); modelData->append("RASModel", turbName); coeffs = new DICT::FITKDictGroup; modelData->append(QString("%1Coeffs").arg(turbName), coeffs); } else if (type == Interface::FITKOFSolverTypeEnum::FITKOFTurbulenceType::LES) { m_objectDict->append("simulationType", "LES"); //设置模式数据 DICT::FITKDictGroup* modelData = new DICT::FITKDictGroup; m_objectDict->append("LES", modelData); modelData->append("turbulence", true); modelData->append("printCoeffs", true); //获取湍流名称 QString turbName = this->turbModelName(turbulence->getDataObjectName()); modelData->append("RASModel", turbName); coeffs = new DICT::FITKDictGroup; modelData->append(QString("%1Coeffs").arg(turbName), coeffs); } if (!coeffs)return false; Core::FITKParameter* turbPara = turbulence->getTurbulenceParams(); //写出模型参数 this->parametersW(turbPara, coeffs); return true; } QString FITKOFTurbulencePropertiesWrite::turbModelName(QString name) { //模板名称转换成写出文件的名称 if (name == "k-Epsilon") return "kEpsilon"; else if (name == "k-kL-Omega") return "kkLOmega"; else if (name == "k-Omega") return "kOmega"; else if (name == "k-Omega SST") return "kOmegaSST"; else if (name == "k-Omega SST DDES") return "kOmegaSSTDDES"; else if (name == "k-Omega SST DES") return "kOmegaSSTDES"; else if (name == "k-Omega SST IDDES") return "kOmegaSSTIDDES"; else if (name == "k-Omega SST SAS") return "kOmegaSSTSAS"; else if (name == "Realizable k-Epsilon") return "realizableKE"; else if (name == "RNG k-Epsilon") return "RNGkEpsilon"; else if (name == "Smagorinsky") return "Smagorinsky"; else if (name == "Spalart-Allmaras") return "SpalartAllmaras"; else if (name == "Spalart-Allmaras DDES") return "SpalartAllmarasDDES"; else if (name == "Spalart-Allmaras DES") return "SpalartAllmarasDES"; else if (name == "Spalart-Allmaras IDDES") return "SpalartAllmarasIDDES"; else if (name == "WALE") return "WALE"; return QString(); } bool FITKOFTurbulencePropertiesWrite::parametersW(Core::FITKParameter* para, DICT::FITKDictGroup* group) { if (!para || !group)return false; int count = para->getDataCount(); for (int i = 0; i < count; ++i) { Core::FITKAbstractEasyParam* paraData = para->getDataByIndex(i); if (!paraData)continue; if (paraData->getParamType() == Core::FITKAbstractEasyParam::FITKEasyParamType::FEPBool) { Core::FITKParamBool* p = dynamic_cast(paraData); if (!p)continue; group->append(p->getDataObjectName(), p->getValue()); } else if (paraData->getParamType() == Core::FITKAbstractEasyParam::FITKEasyParamType::FEPDouble) { Core::FITKParamDouble* p = dynamic_cast(paraData); if (!p)continue; group->append(p->getDataObjectName(), p->getValue()); } else if (paraData->getParamType() == Core::FITKAbstractEasyParam::FITKEasyParamType::FEPInt) { Core::FITKParamInt* p = dynamic_cast(paraData); if (!p)continue; group->append(p->getDataObjectName(), p->getValue()); } else if (paraData->getParamType() == Core::FITKAbstractEasyParam::FITKEasyParamType::FEPString) { Core::FITKParamString* p = dynamic_cast(paraData); if (!p)continue; group->append(p->getDataObjectName(), p->getValue()); } } return true; } }