+ 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 DataArrayInt *>& pfls, const std::vector<int>& nbEntities);
+ void selectPartOfNodes(const DataArrayInt *pflNodes);
+ MEDMeshMultiLev *prepare() const;
+ MEDUMeshMultiLev(const MEDStructuredMeshMultiLev& other, const MCAuto<MEDCoupling1GTUMesh>& part);
+ MEDLOADER_EXPORT bool buildVTUArrays(DataArrayDouble *& coords, DataArrayByte *&types, DataArrayInt *&cellLocations, DataArrayInt *& cells, DataArrayInt *&faceLocations, DataArrayInt *&faces) const;
+ protected:
+ void appendVertices(const DataArrayInt *verticesToAdd, DataArrayInt *nr);
+ private:
+ void reorderNodesIfNecessary(MCAuto<DataArrayDouble>& coords, DataArrayInt *nodalConnVTK, DataArrayInt *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 DataArrayInt *>& pfls, const std::vector<int>& 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 DataArrayInt *pflNodes);
+ virtual std::vector<int> getNodeGridStructure() const = 0;
+ protected:
+ MEDStructuredMeshMultiLev(const MEDStructuredMeshMultiLev& other);
+ MEDStructuredMeshMultiLev(const MEDFileStructuredMesh *m, const std::vector<int>& lev);
+ MEDStructuredMeshMultiLev(const MEDFileStructuredMesh *m, int nbOfNodes, const std::vector<INTERP_KERNEL::NormalizedCellType>& gts, const std::vector<const DataArrayInt *>& pfls, const std::vector<int>& 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<DataArrayInt> _face_fam_ids;
+ MCAuto<DataArrayInt> _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 DataArrayInt *>& pfls, const std::vector<int>& nbEntities);
+ std::vector<int> getNodeGridStructure() const;
+ 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 DataArrayInt *>& pfls, const std::vector<int>& nbEntities);
+ private:
+ std::vector< MCAuto<DataArrayDouble> > _coords;
+ };
+
+ class MEDCurveLinearMeshMultiLev : public MEDStructuredMeshMultiLev
+ {
+ public:
+ static MEDCurveLinearMeshMultiLev *New(const MEDFileCurveLinearMesh *m, const std::vector<int>& levs);
+ static MEDCurveLinearMeshMultiLev *New(const MEDFileCurveLinearMesh *m, const std::vector<INTERP_KERNEL::NormalizedCellType>& gts, const std::vector<const DataArrayInt *>& pfls , const std::vector<int>& nbEntities);
+ std::vector<int> getNodeGridStructure() const;
+ MEDMeshMultiLev *prepare() const;
+ MEDLOADER_EXPORT void buildVTUArrays(DataArrayDouble *&coords, std::vector<int>& nodeStrct, bool& isInternal) const;
+ private:
+ MEDCurveLinearMeshMultiLev(const MEDCurveLinearMeshMultiLev& other);
+ MEDCurveLinearMeshMultiLev(const MEDFileCurveLinearMesh *m, const std::vector<int>& levs);
+ MEDCurveLinearMeshMultiLev(const MEDFileCurveLinearMesh *m, const std::vector<INTERP_KERNEL::NormalizedCellType>& gts, const std::vector<const DataArrayInt *>& pfls, const std::vector<int>& nbEntities);
+ private:
+ MCAuto<DataArrayDouble> _coords;
+ std::vector<int> _structure;
+ };
+
+ class MEDFileField1TSStructItem2 : public BigMemoryObject