#include "FITKFlowOFHDF5AdaptorInitialCondition.h" #include "FITK_Kernel/FITKCore/FITKEnumTransformer.hpp" #include "FITK_Interface/FITKInterfaceGeometry/FITKAbsGeoCommand.h" #include "FITK_Interface/FITKInterfaceFlowOF/FITKOFInitialConditions.h" #include "FITK_Interface/FITKInterfaceFlowOF/FITKFlowPhysicsHandlerFactory.h" #include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h" #include "FITK_Kernel/FITKAppFramework/FITKComponents.h" #include "FITKFlowOFHDF5Reader.h" #include "FITKFlowOFHDF5Writer.h" //数据层 #include "FITK_Kernel/FITKEasyParam/FITKParameter.h" #include namespace IO { QString FITKFlowOFHDF5AdaptorInitialCondition::getAdaptorClass() { return "FITKFlowOFHDF5AdaptorInitialCondition"; } bool FITKFlowOFHDF5AdaptorInitialCondition::adaptR() { _initialCond = dynamic_cast(_dataObj); if (!_reader || !_initialCond) return false; if (!readNDataObject(_initialCond, *_h5Group)) return false; bool isR = true; isR &= basicDataR(); isR &= patchDataR(); return isR; } bool FITKFlowOFHDF5AdaptorInitialCondition::adaptW() { _initialCond = dynamic_cast(_dataObj); if (!_writer || !_initialCond) return false; if (!writeNDataObject(_initialCond, *_h5Group)) return false; bool isW = true; isW &= basicDataW(); isW &= patchDataW(); return isW; } bool FITKFlowOFHDF5AdaptorInitialCondition::basicDataW() { if (!_writer || !_initialCond) return false; H5::Group h5Group = _h5Group->createGroup("Basic"); if (_initialCond->getBasicData()) parameterToolW(h5Group, _initialCond->getBasicData()); return true; } bool FITKFlowOFHDF5AdaptorInitialCondition::basicDataR() { if (!_reader || !_initialCond)return false; if (!_h5Group->nameExists("Basic"))return false; H5::Group h5Group = _h5Group->openGroup("Basic"); if (h5Group.getNumAttrs() > 0) { Core::FITKParameter* limits = _initialCond->getBasicData(); if (!limits) return false; limits->clear(); parameterToolR(h5Group, limits); } return true; } bool FITKFlowOFHDF5AdaptorInitialCondition::patchDataW() { if (!_writer || !_initialCond)return false; H5::Group h5Group = _h5Group->createGroup("Patchs"); int count = _initialCond->getPatchCount(); writeIntAttribute(h5Group, "PatchCount", &count); for (int i = 0; i < count; ++i) { Interface::FITKOFGeometryPatch* patchData = _initialCond->getPatch(i); if (!patchData) continue; std::string name = std::to_string(i); H5::Group patchH5Group = h5Group.createGroup(name); //几何id int geometryId = patchData->getGeometryId(); writeIntAttribute(patchH5Group, "geometryId", &geometryId); //类型 int applyType = patchData->getAppltTo(); writeIntAttribute(patchH5Group, "ApplyToType", &applyType); //场数据 Core::FITKParameter* fieldPara = patchData->getFieldPara(); if (fieldPara) parameterToolW(patchH5Group, fieldPara); } return true; } bool FITKFlowOFHDF5AdaptorInitialCondition::patchDataR() { if (!_reader || !_initialCond)return false; if (!_h5Group->nameExists("Patchs"))return false; H5::Group h5Group = _h5Group->openGroup("Patchs"); int count = readIntAttribute(h5Group, "PatchCount"); //清空数据 for (int i = 0; i < count; ++i) _initialCond->removePatch(i); //读取数据并设置 for (int i = 0; i < count; ++i) { std::string name = std::to_string(i); if (!h5Group.nameExists(name))continue; H5::Group patchH5Group = h5Group.openGroup(name); //几何id int geometryId = readIntAttribute(patchH5Group, "geometryId"); //类型 int applyType = readIntAttribute(patchH5Group, "ApplyToType"); //场数据 Interface::FITKOFGeometryPatch* patchData = new Interface::FITKOFGeometryPatch(geometryId, Interface::FITKOFSolverInitialEnum::FITKPatchApplyObjectType(applyType)); parameterToolR(patchH5Group, patchData->getFieldPara()); _initialCond->appendPatch(patchData); } return true; } }