+ mcIdType _nb_nodes;
+ std::vector< std::vector<mcIdType> > _geo_types_distrib;
+ };
+
+ class MEDFileField1TSStructItem;
+
+ class MEDMeshMultiLev : public RefCountObject
+ {
+ public:
+ std::size_t getHeapMemorySizeWithoutChildren() const;
+ std::vector<const BigMemoryObject *> getDirectChildrenWithNull() const;
+ std::string getClassName() const override { return std::string("MEDMeshMultiLev"); }
+ public:
+ static MEDMeshMultiLev *New(const MEDFileMesh *m, const std::vector<INTERP_KERNEL::NormalizedCellType>& gts, const std::vector<const DataArrayIdType *>& pfls, const std::vector<mcIdType>& nbEntities);
+ static MEDMeshMultiLev *New(const MEDFileMesh *m, const std::vector<int>& levs);
+ static MEDMeshMultiLev *NewOnlyOnNode(const MEDFileMesh *m, const DataArrayIdType *pflOnNode);
+ void setNodeReduction(const DataArrayIdType *nr);
+ void setCellReduction(const DataArrayIdType *cr);
+ bool isFastlyTheSameStruct(const MEDFileField1TSStructItem& fst, const MEDFileFieldGlobsReal *globs) const;
+ MEDLOADER_EXPORT DataArray *buildDataArray(const MEDFileField1TSStructItem& fst, const MEDFileFieldGlobsReal *globs, const DataArray *vals) const;
+ MEDLOADER_EXPORT void retrieveFamilyIdsOnCells(DataArrayIdType *& famIds, bool& isWithoutCopy) const;
+ MEDLOADER_EXPORT void retrieveNumberIdsOnCells(DataArrayIdType *& numIds, bool& isWithoutCopy) const;
+ MEDLOADER_EXPORT void retrieveFamilyIdsOnNodes(DataArrayIdType *& famIds, bool& isWithoutCopy) const;
+ MEDLOADER_EXPORT void retrieveNumberIdsOnNodes(DataArrayIdType *& numIds, bool& isWithoutCopy) const;
+ MEDLOADER_EXPORT DataArrayIdType *retrieveGlobalNodeIdsIfAny() const;
+ MEDLOADER_EXPORT std::vector< INTERP_KERNEL::NormalizedCellType > getGeoTypes() const;
+ void setFamilyIdsOnCells(DataArrayIdType *famIds);
+ void setNumberIdsOnCells(DataArrayIdType *numIds);
+ void setFamilyIdsOnNodes(DataArrayIdType *famIds);
+ void setNumberIdsOnNodes(DataArrayIdType *numIds);
+ virtual void selectPartOfNodes(const DataArrayIdType *pflNodes) = 0;
+ virtual MEDMeshMultiLev *prepare() const = 0;
+ mcIdType getNumberOfCells(INTERP_KERNEL::NormalizedCellType t) const;
+ mcIdType getNumberOfNodes() const;
+ protected:
+ std::string getPflNameOfId(int id) const;
+ DataArray *constructDataArray(const MEDFileField1TSStructItem& fst, const MEDFileFieldGlobsReal *globs, const DataArray *vals) const;
+ virtual void appendVertices(const DataArrayIdType *verticesToAdd, DataArrayIdType *nr);
+ protected:
+ MEDMeshMultiLev(const MEDFileMesh *mesh);
+ MEDMeshMultiLev(const MEDMeshMultiLev& other);
+ MEDMeshMultiLev(const MEDFileMesh *mesh, mcIdType nbNodes, const std::vector<INTERP_KERNEL::NormalizedCellType>& gts, const std::vector<const DataArrayIdType *>& pfls, const std::vector<mcIdType>& nbEntities);
+ protected:
+ const MEDFileMesh *_mesh;
+ std::vector< MCAuto<DataArrayIdType> > _pfls;
+ std::vector< INTERP_KERNEL::NormalizedCellType > _geo_types;
+ std::vector<mcIdType> _nb_entities;
+ MCAuto<DataArrayIdType> _node_reduction;
+ mcIdType _nb_nodes;
+ //
+ MCAuto<DataArrayIdType> _cell_fam_ids;
+ MCAuto<DataArrayIdType> _cell_num_ids;
+ MCAuto<DataArrayIdType> _node_fam_ids;
+ MCAuto<DataArrayIdType> _node_num_ids;
+ public:
+ MEDLOADER_EXPORT static const int PARAMEDMEM_2_VTKTYPE_LGTH=MEDCOUPLING2VTKTYPETRADUCER_LGTH;
+ MEDLOADER_EXPORT static const unsigned char *PARAMEDMEM_2_VTKTYPE;
+ MEDLOADER_EXPORT static const unsigned char HEXA27_PERM_ARRAY[27];
+ };
+
+ class MEDStructuredMeshMultiLev;
+
+ class MEDUMeshMultiLev : public MEDMeshMultiLev
+ {
+ public:
+ static MEDUMeshMultiLev *New(const MEDFileUMesh *m, const std::vector<int>& levs);
+ static MEDUMeshMultiLev *New(const MEDFileUMesh *m, const std::vector<INTERP_KERNEL::NormalizedCellType>& gts, const std::vector<const DataArrayIdType *>& pfls, const std::vector<mcIdType>& nbEntities);
+ void selectPartOfNodes(const DataArrayIdType *pflNodes);
+ std::string getClassName() const override { return std::string("MEDUMeshMultiLev"); }
+ MEDMeshMultiLev *prepare() const;
+ MEDUMeshMultiLev(const MEDStructuredMeshMultiLev& other, const MCAuto<MEDCoupling1GTUMesh>& part);
+ MEDLOADER_EXPORT bool buildVTUArrays(DataArrayDouble *& coords, DataArrayByte *&types, DataArrayIdType *&cellLocations, DataArrayIdType *& cells, DataArrayIdType *&faceLocations, DataArrayIdType *&faces) const;
+ protected:
+ void appendVertices(const DataArrayIdType *verticesToAdd, DataArrayIdType *nr);
+ private:
+ void reorderNodesIfNecessary(MCAuto<DataArrayDouble>& coords, DataArrayIdType *nodalConnVTK, DataArrayIdType *polyhedNodalConnVTK) const;
+ private:
+ MEDUMeshMultiLev(const MEDUMeshMultiLev& other);
+ MEDUMeshMultiLev(const MEDFileUMesh *m, const std::vector<int>& levs);
+ MEDUMeshMultiLev(const MEDFileUMesh *m, const std::vector<INTERP_KERNEL::NormalizedCellType>& gts, const std::vector<const DataArrayIdType *>& pfls, const std::vector<mcIdType>& nbEntities);
+ private:
+ std::vector< MCAuto<MEDCoupling1GTUMesh> > _parts;
+ //! this attribute is used only for mesh with no cells but having coordinates. For classical umeshes those pointer is equal to pointer of coordinates of instances in this->_parts.
+ MCAuto<DataArrayDouble> _coords;
+ };
+
+ class MEDStructuredMeshMultiLev : public MEDMeshMultiLev
+ {
+ public:
+ void selectPartOfNodes(const DataArrayIdType *pflNodes);
+ virtual std::vector<mcIdType> getNodeGridStructure() const = 0;
+ std::string getClassName() const override { return std::string("MEDStructuredMeshMultiLev"); }
+ protected:
+ MEDStructuredMeshMultiLev(const MEDStructuredMeshMultiLev& other);
+ MEDStructuredMeshMultiLev(const MEDFileStructuredMesh *m, const std::vector<int>& lev);
+ MEDStructuredMeshMultiLev(const MEDFileStructuredMesh *m, mcIdType nbOfNodes, const std::vector<INTERP_KERNEL::NormalizedCellType>& gts, const std::vector<const DataArrayIdType *>& pfls, const std::vector<mcIdType>& nbEntities);
+ void dealWithImplicitUnstructuredMesh(const MEDFileMesh *m);
+ protected:
+ void moveFaceToCell() const;
+ bool prepareForImplicitUnstructuredMeshCase(MEDMeshMultiLev *&ret) const;
+ private:
+ void initStdFieldOfIntegers(const MEDFileStructuredMesh *m);
+ protected:
+ bool _is_internal;
+ MCAuto<DataArrayIdType> _face_fam_ids;
+ MCAuto<DataArrayIdType> _face_num_ids;
+ };
+
+ class MEDCMeshMultiLev : public MEDStructuredMeshMultiLev
+ {
+ public:
+ static MEDCMeshMultiLev *New(const MEDFileCMesh *m, const std::vector<int>& levs);
+ static MEDCMeshMultiLev *New(const MEDFileCMesh *m, const std::vector<INTERP_KERNEL::NormalizedCellType>& gts, const std::vector<const DataArrayIdType *>& pfls, const std::vector<mcIdType>& nbEntities);
+ std::vector<mcIdType> getNodeGridStructure() const;
+ std::string getClassName() const override { return std::string("MEDCMeshMultiLev"); }
+ MEDMeshMultiLev *prepare() const;
+ MEDLOADER_EXPORT std::vector< DataArrayDouble * > buildVTUArrays(bool& isInternal) const;
+ private:
+ MEDCMeshMultiLev(const MEDCMeshMultiLev& other);
+ MEDCMeshMultiLev(const MEDFileCMesh *m, const std::vector<int>& levs);
+ MEDCMeshMultiLev(const MEDFileCMesh *m, const std::vector<INTERP_KERNEL::NormalizedCellType>& gts, const std::vector<const DataArrayIdType *>& pfls, const std::vector<mcIdType>& nbEntities);
+ private:
+ std::vector< MCAuto<DataArrayDouble> > _coords;