#pragma once #include "ThirdPartyHeadersBegin.h" #include #include #include #include "ThirdPartyHeadersEnd.h" #include "basicTypes.h" #include "IJK.h" #include "IJKPartitionTree.h" #include "IJKZoneInfo.h" #include "FEZoneInfo.h" #include "MinMaxTree.h" #include "zoneUtil.h" #include "ClassicZoneFileLocations.h" #include "PartitionMetadata.h" #include "writeValueArray.h" namespace tecplot { namespace ___3933 { template ___2090::SubzoneOffset_t getNumSzFromNumItems(T ___2812) { REQUIRE(___2812>0); ___2090::SubzoneOffset_t ___3358 = static_cast<___2090::SubzoneOffset_t>((___2812 + 0xFF) >> 8); ENSURE(___3358>0); return ___3358; } class ZoneMetadata { private: UNCOPYABLE_CLASS(ZoneMetadata); private: ___4636 ___2677; ZoneType_e ___2684; bool m_isSZL; ___1844 m_zoneIJK; std::string ___2495; FaceNeighborMode_e ___2458; double ___2621; ___1172 ___2622; ___4636 ___2614; ___2090::___2980 m_numPartitions; ___1863 m_partitionTree; public: ___2240<___1881> m_ijkZoneInfos; ___2240<___465> m_ptnNumCells; ___2240<___2718> m_ptnNumNodes; ___2240<___465> m_ptnFirstCell; ___2240<___2718> m_ptnFirstNode; ___2240<___1844> m_ptnNodeMinIJKs; ___2240<___1844> m_ptnNodeMaxIJKs; ___2240<___2090::SubzoneOffset_t> m_ptnNumCszs; ___2240<___2090::SubzoneOffset_t> m_ptnNumNszs; ___2240<___2090::___2980> m_ptnFileNums; ___2240<___1393> m_ptnHeaderFileLocs; ___2240<___1393> m_varPtnMinMaxFileLocs; ___2240 m_varPtnMinMaxTrees; ___2240 m_ptnMetadata; ClassicZoneFileLocations m_classicZoneFileLocations; public: ZoneMetadata() : ___2677(-1) , ___2684(___4703) , m_isSZL(false) , m_zoneIJK() , ___2495() , ___2458(___1290) , ___2621(0.0) , ___2622(___3788) , ___2614(-1) , m_numPartitions(0) { } inline void swap(ZoneMetadata& ___2888) { using std::swap; swap(___2677, ___2888.___2677); swap(___2684, ___2888.___2684); swap(m_isSZL, ___2888.m_isSZL); swap(m_zoneIJK, ___2888.m_zoneIJK); swap(___2495, ___2888.___2495); swap(___2458, ___2888.___2458); swap(___2621, ___2888.___2621); swap(___2622, ___2888.___2622); swap(___2614, ___2888.___2614); swap(m_numPartitions, ___2888.m_numPartitions); } inline ___4636 zone() const { ENSURE(___2677>=0 && ___2677= 0 && ___2614 < MAX_NUM_ZONES)); return ___2614; } void setZone(___4636 zone) { REQUIRE(zone >= 0 && zone < MAX_NUM_ZONES); ___2677 = zone; } void setZoneType(ZoneType_e ___4692) { REQUIRE(VALID_ENUM(___4692, ZoneType_e)); ___2684 = ___4692; } inline void setIsSZL(bool isSZL) { m_isSZL = isSZL; } inline void setIJKMax(___1844 const& ijkDim) { REQUIRE(___2684==___4704); m_zoneIJK = ijkDim; } inline void setFEDescription( ___465 ___2781, ___682 ___2789, ___2718 ___2821) { REQUIRE(___2684 != ___4704 && ___2684 != ___4698 && ___2684 != ___4699); REQUIRE(___2781>0 && ___2781 <= MAX_NUM_CELLS); REQUIRE(___2821>0 && ___2821 <= MAX_NUM_NODES); REQUIRE(___2789>0 && ___2789<=MAX_NUM_CELL_CORNERS); m_zoneIJK = ___1844(___2821, ___2781, ___2789); } inline void setName(std::string const& ___2685) { ___2495 = ___2685; } inline void setFaceNeighborMode(FaceNeighborMode_e ___1284) { REQUIRE(VALID_ENUM(___1284, FaceNeighborMode_e) || ___1284 == ___1288); ___2458 = ___1284; } inline void setSolutionTime(double ___3640) { ___2621 = ___3640; } inline void setStrandID(___1172 ___3785) { ___2622 = ___3785; } inline void setParentZone(___4636 ___2974) { REQUIRE(___2974==-1 || (___2974 >= 0 && ___2974 < MAX_NUM_ZONES)); ___2614 = ___2974; } inline ___2090::___2980 getNumPartitions() const { REQUIRE(m_isSZL); ENSURE(VALID_ITEM_ADDRESS_PARTITION(m_numPartitions-1)); return m_numPartitions; } inline ___2090::SubzoneOffset_t getNumCszsInPartition(___2090::___2980 ___2977) const { REQUIRE(m_isSZL); REQUIRE(___2977 0); return numCszs; } inline ___2090::SubzoneOffset_t getNumNszsInPartition(___2090::___2980 ___2977) const { REQUIRE(m_isSZL); REQUIRE(___2977 0); return numNszs; } inline void setNumPartitions(___2090::___2980 numPartitions) { REQUIRE(numPartitions >= 1 && (m_isSZL ? VALID_ITEM_ADDRESS_PARTITION(numPartitions-1) : numPartitions == 1)); m_numPartitions = numPartitions; ENSURE(VALID_ITEM_ADDRESS_PARTITION(m_numPartitions-1)); } inline void addPartitionTreeItem(___2090::___2980 ___2977, ___1844 const& ___2474, ___1844 const& ___2364) { m_partitionTree.___13(___2977, ___2474, ___2364); } inline ___2090::___2980 getPartitionForIJK(___1844 const& ___1843) const { if (m_numPartitions == 1) { return 0; } else { ___1853 ___2478(___1843.i(), ___1843.___2105(), ___1843.___2134()); ___1853 ___2372(___1843.i(), ___1843.___2105(), ___1843.___2134()); std::vector<___1864> ___2099; m_partitionTree.query(boost::geometry::index::intersects(___1855(___2478, ___2372)), std::back_inserter(___2099)); return (___2099.empty() ? ___2090::INVALID_PARTITION : ___2099[0].second); } } inline std::vector<___2090::___2980> getPartitionsForIJKRange(___1844 const& ijkMin, ___1844 const& ___1861) const { if (m_numPartitions == 1) { return std::vector<___2090::___2980>(1, 0); } else { ___1853 ___2478(ijkMin.i(), ijkMin.___2105(), ijkMin.___2134()); ___1853 ___2372(___1861.i(), ___1861.___2105(), ___1861.___2134()); std::vector<___1864> ___2099; m_partitionTree.query(boost::geometry::index::intersects(___1855(___2478, ___2372)), std::back_inserter(___2099)); std::vector<___2090::___2980> ___3358; ___3358.reserve(___2099.size()); for (std::vector<___1864>::const_iterator it = ___2099.begin(); it != ___2099.end(); ++it) ___3358.push_back(it->second); std::sort(___3358.begin(), ___3358.end()); return ___3358; } } inline std::vector<___2090::___2980> getPartitionsForIndexPlane(IJKPlanes_e whichPlane, ___2718 planeIndex) const { if (m_numPartitions == 1) { return std::vector<___2090::___2980>(1, 0); } else { ___1844 planeMin(0, 0, 0); ___1844 planeMax(getZoneIJK() - 1); switch (whichPlane) { case ___1867: planeMin.setI(planeIndex); planeMax.setI(planeIndex); break; case ___1872: planeMin.setJ(planeIndex); planeMax.setJ(planeIndex); break; case ___1874: planeMin.___3497(planeIndex); planeMax.___3497(planeIndex); break; default: ___478(___1305); break; } ___1853 ___2478(planeMin.i(), planeMin.___2105(), planeMin.___2134()); ___1853 ___2372(planeMax.i(), planeMax.___2105(), planeMax.___2134()); std::vector<___1864> ___2099; m_partitionTree.query(boost::geometry::index::intersects(___1855(___2478, ___2372)), std::back_inserter(___2099)); std::vector<___2090::___2980> ___3358; ___3358.reserve(___2099.size()); for (std::vector<___1864>::const_iterator it = ___2099.begin(); it != ___2099.end(); ++it) ___3358.push_back(it->second); std::sort(___3358.begin(), ___3358.end()); return ___3358; } } inline std::vector<___2090::___2980> getPartitionsForIndexLine(IJKLines_e whichLine, ___2718 mIndex, ___2718 nIndex) const { if (m_numPartitions == 1) { return std::vector<___2090::___2980>(1, 0); } else { ___1844 lineMin(0, 0, 0); ___1844 lineMax(getZoneIJK() - 1); switch (whichLine) { case ___1857: lineMin.setJ(mIndex); lineMin.___3497(nIndex); lineMax.setJ(mIndex); lineMax.___3497(nIndex); break; case ___1859: lineMin.setI(mIndex); lineMin.___3497(nIndex); lineMax.setI(mIndex); lineMax.___3497(nIndex); break; case ___1860: lineMin.setI(mIndex); lineMin.setJ(nIndex); lineMax.setI(mIndex); lineMax.setJ(nIndex); break; default: ___478(___1305); break; } ___1853 ___2478(lineMin.i(), lineMin.___2105(), lineMin.___2134()); ___1853 ___2372(lineMax.i(), lineMax.___2105(), lineMax.___2134()); std::vector<___1864> ___2099; m_partitionTree.query(boost::geometry::index::intersects(___1855(___2478, ___2372)), std::back_inserter(___2099)); std::vector<___2090::___2980> ___3358; ___3358.reserve(___2099.size()); for (std::vector<___1864>::const_iterator it = ___2099.begin(); it != ___2099.end(); ++it) ___3358.push_back(it->second); std::sort(___3358.begin(), ___3358.end()); return ___3358; } } inline bool ijkPartitionMetadataIsLoaded(___2090::___2980 ___2977) const { return ___2977 < m_ijkZoneInfos.size() && m_ijkZoneInfos[___2977].___2067(); } inline ___2090 cellAddressAtIJKPaddedCellIndex(___465 paddedCellIndex) const { REQUIRE(paddedCellIndex < getZoneIJK().getNumPaddedCells()); ___2090 ___451; if (getNumPartitions() == 1) { ___451 = m_ijkZoneInfos[0].cellAddressAtPaddedCellIndex(paddedCellIndex); } else { ___1844 const ___4632 = getZoneIJK().ijkAtOffset(paddedCellIndex); ___2090::___2980 const ___2977 = getPartitionForIJK(___4632); ___478(ijkPartitionMetadataIsLoaded(___2977)); ___1844 partitionIJK = ___4632 - m_ptnNodeMinIJKs[___2977]; if (partitionIJK.i() == m_ijkZoneInfos[___2977].___2895().i() - 1) partitionIJK.setI(partitionIJK.i() - 1); if (partitionIJK.___2105() == m_ijkZoneInfos[___2977].___2895().___2105() - 1) partitionIJK.setJ(partitionIJK.___2105() - 1); ___451 = m_ijkZoneInfos[___2977].cellAddressAtCellIJK(partitionIJK); ENSURE(___451.___2977() == ___2977); } return ___451; } inline ___2090 nodeAddressAtIJKNodeIndex(___2718 ___2716) const { ___2090 nodeAddress; if (getNumPartitions() == 1) { nodeAddress = m_ijkZoneInfos[0].nodeAddressAtNodeIndex(___2716); } else { ___1844 const ___4632 = getZoneIJK().ijkAtOffset(___2716); ___2090::___2980 const ___2977 = getPartitionForIJK(___4632); ___478(ijkPartitionMetadataIsLoaded(___2977)); ___1844 const partitionIJK = ___4632 - m_ptnNodeMinIJKs[___2977]; nodeAddress = m_ijkZoneInfos[___2977].nodeAddressAtNodeIJK(partitionIJK); ENSURE(nodeAddress.___2977() == ___2977); } return nodeAddress; } inline void findPartitionContainingIndex( ___81& ptnItemIndex, ___2090::___2980& ___2977, ___2240<___81> const& ptnNumItems) const { ___2090::___2980 numPartitions = getNumPartitions(); if ( numPartitions > 1 ) { while (true) { ___2718 const numPtnItems = ptnNumItems[___2977]; if ( ptnItemIndex < numPtnItems ) break; ptnItemIndex -= numPtnItems; ++___2977; ___478(___2977 < numPartitions); } } } inline ___2090 itemAddressAtFEIndex( ___81 itemIndex, ___2240<___81> const& ptnNumItems) const { ___81 ptnItemIndex = itemIndex; ___2090::___2980 ___2977 = 0; findPartitionContainingIndex(ptnItemIndex, ___2977, ptnNumItems); ___2090::SubzoneOffset_t const ___2763 = ___2090::SubzoneOffset_t(ptnItemIndex >> ___2090::ItemOffsetBitSize); ___2090::ItemOffset_t const itemOffset = ___2090::ItemOffset_t(ptnItemIndex & ___2090::MAX_ITEM_OFFSET); return ___2090(___2977, ___2763, itemOffset); } inline ___81 indexAtFEItemAddress( ___2090 ___2089, ___2240<___81> const& ptnNumItems) const { ___81 itemIndex = (___81(___2089.subzoneOffset())<<___2090::ItemOffsetBitSize) | ___2089.itemOffset(); ___2090::___2980 ___2977 = ___2089.___2977(); while ( ___2977 > 0 ) { --___2977; itemIndex += ptnNumItems[___2977]; } return itemIndex; } ___2090 cellAddressAtFECellIndex(___465 zoneCellIndex) const { REQUIRE(zoneCellIndex < ___1766()); return itemAddressAtFEIndex(zoneCellIndex, m_ptnNumCells); } ___465 cellIndexAtFECellAddress(___2090 ___451) const { REQUIRE(VALID_ITEM_ADDRESS(___451)); return indexAtFEItemAddress(___451, m_ptnNumCells); } ___2090 nodeAddressAtFENodeIndex(___2718 zoneNodeIndex) const { REQUIRE(zoneNodeIndex < ___1768()); return itemAddressAtFEIndex(zoneNodeIndex, m_ptnNumNodes); } ___2718 nodeIndexAtFENodeAddress(___2090 nodeAddress) const { REQUIRE(m_isSZL); REQUIRE(VALID_ITEM_ADDRESS(nodeAddress)); return indexAtFEItemAddress(nodeAddress, m_ptnNumNodes); } ___465 paddedCellIndexAtIJKCellAddress(___2090 ___451) const { ___465 paddedCellIndex; if (getNumPartitions() == 1) { paddedCellIndex = m_ijkZoneInfos[0].paddedCellIndexAtCellAddress(___451); } else { ___2090::___2980 const ___2977 = ___451.___2977(); ___478(ijkPartitionMetadataIsLoaded(___2977)); ___1844 const cellIJK = m_ptnNodeMinIJKs[___2977] + m_ijkZoneInfos[___2977].cellIJKAtCellAddress(___451); paddedCellIndex = getZoneIJK().offsetAtIJK(cellIJK); } ENSURE(paddedCellIndex < getZoneIJK().getNumPaddedCells()); return paddedCellIndex; } ___2718 nodeIndexAtIJKNodeAddress(___2090 nodeAddress) const { REQUIRE(getZoneType() == ___4704); ___2718 ___2716; if (getNumPartitions() == 1) { ___2716 = m_ijkZoneInfos[0].nodeIndexAtNodeAddress(nodeAddress); } else { ___2090::___2980 const ___2977 = nodeAddress.___2977(); ___478(ijkPartitionMetadataIsLoaded(___2977)); ___1844 const nodeIJK = m_ptnNodeMinIJKs[___2977] + m_ijkZoneInfos[___2977].nodeIJKAtNodeAddress(nodeAddress); ___2716 = getZoneIJK().offsetAtIJK(nodeIJK); } ENSURE(___2716 < ___1768()); return ___2716; } ___465 getNumIJKFaceNeighbors( ___2090 ___451, FaceIndex_t ___457) const { REQUIRE(m_isSZL); REQUIRE(___457 < NUM_IJK_CELL_FACES); ___2090::___2980 const ___2977 = ___451.___2977(); ___478(ijkPartitionMetadataIsLoaded(___2977)); return m_ijkZoneInfos[___2977].getNumIJKFaceNeighbors(___451, ___457); } void getIJKFaceNeighbor( ___2090 ___451, FaceIndex_t ___457, ___465 neighborOffset, ___2090& fnCoord, ___4636& fnZone) const { REQUIRE(___451.isSzlItem()); REQUIRE(m_isSZL); REQUIRE(___457 < NUM_IJK_CELL_FACES); REQUIRE(neighborOffset < getNumIJKFaceNeighbors(___451, ___457)); ___2090::___2980 const ___2977 = ___451.___2977(); ___478(ijkPartitionMetadataIsLoaded(___2977)); m_ijkZoneInfos[___2977].getIJKFaceNeighbor(___451, ___457, neighborOffset, fnCoord, fnZone); if (fnCoord == ___2090(___2749) && getNumPartitions() > 1) { ___1844 neighborCellIJK = m_ijkZoneInfos[___2977].cellIJKAtCellAddress(___451) + m_ptnNodeMinIJKs[___2977] + ___1881::ijkFaceNeighborOffset[___457]; if (0 <= neighborCellIJK && neighborCellIJK < getZoneIJK()) { ___2090::___2980 neighborPartition = getPartitionForIJK(neighborCellIJK); neighborCellIJK -= m_ptnNodeMinIJKs[neighborPartition]; if (neighborCellIJK <= m_ijkZoneInfos[neighborPartition].___2198()) fnCoord = m_ijkZoneInfos[neighborPartition].cellAddressAtCellIJK(neighborCellIJK); } } } void getIJKFaceNeighbors( ___2090 ___451, FaceIndex_t ___457, ___3269<___2090>& cellNeighbors, ___3269<___4636>& zoneNeighbors, bool& isFaceCompletelyObscured) const { REQUIRE(VALID_ITEM_ADDRESS(___451)); REQUIRE(___457 < NUM_IJK_CELL_FACES); REQUIRE(cellNeighbors.empty()); REQUIRE(zoneNeighbors.empty()); ___2090 szlCellAddr; bool const isCellAddressUniform = ___451.___2065(); if (isCellAddressUniform) { ___465 const paddedCellIndex = ___465(___451.___4258()); szlCellAddr = cellAddressAtIJKPaddedCellIndex(paddedCellIndex); } else { szlCellAddr = ___451; } ___465 const numNeighbors = getNumIJKFaceNeighbors(szlCellAddr, ___457); ___478(numNeighbors != 0); isFaceCompletelyObscured = true; cellNeighbors.reserve(numNeighbors); cellNeighbors.___3503(numNeighbors); zoneNeighbors.reserve(numNeighbors); zoneNeighbors.___3503(numNeighbors); for (___465 n = 0; n < numNeighbors; ++n) { ___2090 fnCoord; ___4636 fnZone; getIJKFaceNeighbor(szlCellAddr, ___457, n, fnCoord, fnZone); if (fnCoord.___2065() && fnCoord.___4258() == ___2749) { ___478(fnZone == ___2750); cellNeighbors[n] = ___2090(___2749); zoneNeighbors[n] = ___2750; } else if (isCellAddressUniform) { cellNeighbors[n] = ___2090(paddedCellIndexAtIJKCellAddress(fnCoord)); zoneNeighbors[n] = fnZone; } else { cellNeighbors[n] = fnCoord; zoneNeighbors[n] = fnZone; } } ENSURE(!cellNeighbors.empty()); ENSURE(cellNeighbors.size() == zoneNeighbors.size()); } }; }}