X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDLoader%2FMEDFileMeshLL.hxx;h=abdef8f67632f6a17409a8853d2bb13401c794a3;hb=5ea9370443568d9dd6c42c970cbc24c1b6ae6c28;hp=e5e29cf68e785b97878f5f64e31f14d030503a73;hpb=3b1d77efdd048ef4aad858e96138bf79318119df;p=tools%2Fmedcoupling.git diff --git a/src/MEDLoader/MEDFileMeshLL.hxx b/src/MEDLoader/MEDFileMeshLL.hxx index e5e29cf68..abdef8f67 100644 --- a/src/MEDLoader/MEDFileMeshLL.hxx +++ b/src/MEDLoader/MEDFileMeshLL.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -31,6 +31,8 @@ #include "MEDCouplingCurveLinearMesh.hxx" #include "MCAuto.hxx" +#include "InterpKernelAutoPtr.hxx" + #include "med.h" #include @@ -39,6 +41,35 @@ namespace MEDCoupling { class MEDFileMeshReadSelector; + class MeshOrStructMeshCls + { + protected: + MeshOrStructMeshCls(int mid):_mid(mid) { } + public: + virtual ~MeshOrStructMeshCls() {} + int getID() const { return _mid; } + virtual std::vector getAxisInfoOnMesh(med_idt fid, const std::string& mName, MEDCoupling::MEDCouplingMeshType& meshType, MEDCoupling::MEDCouplingAxisType& axType, int& nstep, int& Mdim, MEDFileString& description, MEDFileString& dtunit, MEDFileString& univName) const = 0; + virtual double checkMeshTimeStep(med_idt fid, const std::string& mName, int nstep, int dt, int it) const = 0; + private: + int _mid; + }; + + class MeshCls : public MeshOrStructMeshCls + { + public: + MeshCls(int mid):MeshOrStructMeshCls(mid) { } + std::vector getAxisInfoOnMesh(med_idt fid, const std::string& mName, MEDCoupling::MEDCouplingMeshType& meshType, MEDCoupling::MEDCouplingAxisType& axType, int& nstep, int& Mdim, MEDFileString& description, MEDFileString& dtunit, MEDFileString& univName) const; + double checkMeshTimeStep(med_idt fid, const std::string& mName, int nstep, int dt, int it) const; + }; + + class StructMeshCls : public MeshOrStructMeshCls + { + public: + StructMeshCls(int mid):MeshOrStructMeshCls(mid) { } + std::vector getAxisInfoOnMesh(med_idt fid, const std::string& mName, MEDCoupling::MEDCouplingMeshType& meshType, MEDCoupling::MEDCouplingAxisType& axType, int& nstep, int& Mdim, MEDFileString& description, MEDFileString& dtunit, MEDFileString& univName) const; + double checkMeshTimeStep(med_idt fid, const std::string& mName, int nstep, int dt, int it) const; + }; + class MEDFileMeshL2 : public RefCountObject { public: @@ -53,9 +84,8 @@ namespace MEDCoupling int getOrder() const { return _order; } double getTime() const { return _time; } MCAuto getPartDefOfCoo() const { return _part_coords; } - std::vector getAxisInfoOnMesh(med_idt fid, int mId, const std::string& mName, MEDCoupling::MEDCouplingMeshType& meshType, MEDCoupling::MEDCouplingAxisType& axType, int& nstep, int& Mdim); - static int GetMeshIdFromName(med_idt fid, const std::string& mName, MEDCoupling::MEDCouplingMeshType& meshType, MEDCoupling::MEDCouplingAxisType& axType, int& dt, int& it, std::string& dtunit1); - static double CheckMeshTimeStep(med_idt fid, const std::string& mname, int nstep, int dt, int it); + std::vector getAxisInfoOnMesh(med_idt fid, const MeshOrStructMeshCls *mId, const std::string& mName, MEDCoupling::MEDCouplingMeshType& meshType, MEDCoupling::MEDCouplingAxisType& axType, int& nstep, int& Mdim); + static INTERP_KERNEL::AutoCppPtr GetMeshIdFromName(med_idt fid, const std::string& mName, MEDCoupling::MEDCouplingMeshType& meshType, MEDCoupling::MEDCouplingAxisType& axType, int& dt, int& it, std::string& dtunit1); static void ReadFamiliesAndGrps(med_idt fid, const std::string& mname, std::map& fams, std::map >& grps, MEDFileMeshReadSelector *mrs); static void WriteFamiliesAndGrps(med_idt fid, const std::string& mname, const std::map& fams, const std::map >& grps, int tooLongStrPol); static bool RenameFamiliesFromFileToMem(std::vector< std::string >& famNames); @@ -87,13 +117,13 @@ namespace MEDCoupling { public: MEDFileUMeshL2(); - std::vector loadCommonPart(med_idt fid, int mId, const std::string& mName, int dt, int it, int& Mdim); - void loadAll(med_idt fid, int mId, const std::string& mName, int dt, int it, MEDFileMeshReadSelector *mrs); - void loadPart(med_idt fid, int mId, const std::string& mName, const std::vector& types, const std::vector& slicPerTyp, int dt, int it, MEDFileMeshReadSelector *mrs); + std::vector loadCommonPart(med_idt fid, const MeshOrStructMeshCls *mId, const std::string& mName, int dt, int it, int& Mdim); + void loadAll(med_idt fid, const MeshOrStructMeshCls *mId, const std::string& mName, int dt, int it, MEDFileMeshReadSelector *mrs); + void loadPart(med_idt fid, const MeshOrStructMeshCls *mId, const std::string& mName, const std::vector& types, const std::vector& slicPerTyp, int dt, int it, MEDFileMeshReadSelector *mrs); void loadConnectivity(med_idt fid, int mdim, const std::string& mName, int dt, int it, MEDFileMeshReadSelector *mrs); void loadPartOfConnectivity(med_idt fid, int mdim, const std::string& mName, const std::vector& types, const std::vector& slicPerTyp, int dt, int it, MEDFileMeshReadSelector *mrs); - void loadCoords(med_idt fid, int mId, const std::vector& infosOnComp, const std::string& mName, int dt, int it); - void loadPartCoords(med_idt fid, int mId, const std::vector& infosOnComp, const std::string& mName, int dt, int it, int nMin, int nMax); + void loadCoords(med_idt fid, const std::vector& infosOnComp, const std::string& mName, int dt, int it); + void loadPartCoords(med_idt fid, const std::vector& infosOnComp, const std::string& mName, int dt, int it, int nMin, int nMax); int getNumberOfLevels() const { return _per_type_mesh.size(); } bool emptyLev(int levId) const { return _per_type_mesh[levId].empty(); } const std::vector< MCAuto >& getLev(int levId) const { return _per_type_mesh[levId]; } @@ -103,8 +133,9 @@ namespace MEDCoupling MCAuto getCoords() const { return _coords; } MCAuto getCoordsFamily() const { return _fam_coords; } MCAuto getCoordsNum() const { return _num_coords; } + MCAuto getCoordsGlobalNum() const { return _global_num_coords; } MCAuto getCoordsName() const { return _name_coords; } - static void WriteCoords(med_idt fid, const std::string& mname, int dt, int it, double time, const DataArrayDouble *coords, const DataArrayInt *famCoords, const DataArrayInt *numCoords, const DataArrayAsciiChar *nameCoords); + static void WriteCoords(med_idt fid, const std::string& mname, int dt, int it, double time, const DataArrayDouble *coords, const DataArrayInt *famCoords, const DataArrayInt *numCoords, const DataArrayAsciiChar *nameCoords, const DataArrayInt *globalNumCoords); private: void sortTypes(); private: @@ -112,6 +143,7 @@ namespace MEDCoupling MCAuto _coords; MCAuto _fam_coords; MCAuto _num_coords; + MCAuto _global_num_coords; MCAuto _name_coords; }; @@ -123,7 +155,7 @@ namespace MEDCoupling { public: MEDFileCMeshL2(); - void loadAll(med_idt fid, int mId, const std::string& mName, int dt, int it); + void loadAll(med_idt fid, const MeshOrStructMeshCls *mId, const std::string& mName, int dt, int it); MEDCouplingCMesh *getMesh() { return _cmesh; } MEDCoupling::MEDCouplingAxisType getAxisType() const { return _ax_type; } private: @@ -137,7 +169,7 @@ namespace MEDCoupling { public: MEDFileCLMeshL2(); - void loadAll(med_idt fid, int mId, const std::string& mName, int dt, int it); + void loadAll(med_idt fid, const MeshOrStructMeshCls *mId, const std::string& mName, int dt, int it); MEDCouplingCurveLinearMesh *getMesh() { return _clmesh; } private: MCAuto _clmesh; @@ -186,6 +218,7 @@ namespace MEDCoupling MEDFileUMeshAggregateCompute deepCopy(DataArrayDouble *coords) const; void shallowCpyMeshes(); bool isEqual(const MEDFileUMeshAggregateCompute& other, double eps, std::string& what) const; + void checkConsistency() const; void clearNonDiscrAttributes() const; void synchronizeTinyInfo(const MEDFileMesh& master) const; bool empty() const; @@ -211,6 +244,7 @@ namespace MEDCoupling class MEDFileUMeshSplitL1 : public RefCountObject { friend class MEDFileUMeshPermCompute; + friend class MEDFileUMesh; public: MEDFileUMeshSplitL1(const MEDFileUMeshSplitL1& other); MEDFileUMeshSplitL1(const MEDFileUMeshL2& l2, const std::string& mName, int id); @@ -222,6 +256,7 @@ namespace MEDCoupling std::vector getDirectChildrenWithNull() const; MEDFileUMeshSplitL1 *shallowCpyUsingCoords(DataArrayDouble *coords) const; MEDFileUMeshSplitL1 *deepCopy(DataArrayDouble *coords) const; + void checkConsistency() const; void setCoords(DataArrayDouble *coords); bool isEqual(const MEDFileUMeshSplitL1 *other, double eps, std::string& what) const; void clearNonDiscrAttributes() const; @@ -285,10 +320,34 @@ namespace MEDCoupling MEDFileUMeshAggregateCompute _m_by_types; MCAuto _fam; MCAuto _num; + MCAuto _global_num; MCAuto _names; mutable MCAuto _rev_num; MEDFileUMeshPermCompute _m; }; + + class MEDFileEltStruct4Mesh : public RefCountObject + { + public: + static MEDFileEltStruct4Mesh *New(med_idt fid, const std::string& mName, int dt, int it, int iterOnStEltOfMesh, MEDFileMeshReadSelector *mrs); + std::string getGeoTypeName() const { return _geo_type_name; } + MCAuto getConn() const { return _conn; } + MCAuto getMeshDef() const { return _common; } + const std::vector< MCAuto >& getVars() const { return _vars; } + private: + std::size_t getHeapMemorySizeWithoutChildren() const; + std::vector getDirectChildrenWithNull() const; + private: + ~MEDFileEltStruct4Mesh() { } + private: + MEDFileEltStruct4Mesh(med_idt fid, const std::string& mName, int dt, int it, int iterOnStEltOfMesh, MEDFileMeshReadSelector *mrs); + private: + std::string _geo_type_name; + int _geo_type; + MCAuto _conn; + MCAuto _common; + std::vector< MCAuto > _vars; + }; } #endif