X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDPartitioner%2FMEDPARTITIONER_MeshCollectionMedAsciiDriver.cxx;h=0fd977b0613bf181af280b46e1e9664795ba4d17;hb=b219559763498c4bd10c730cd3d2c62b1eed45db;hp=d5adb95153dc0b8f832c1f9282f8f5b9ed2d6568;hpb=8763c12d01e33d6845dd53be65b001514d00bd42;p=tools%2Fmedcoupling.git diff --git a/src/MEDPartitioner/MEDPARTITIONER_MeshCollectionMedAsciiDriver.cxx b/src/MEDPartitioner/MEDPARTITIONER_MeshCollectionMedAsciiDriver.cxx index d5adb9515..0fd977b06 100644 --- a/src/MEDPartitioner/MEDPARTITIONER_MeshCollectionMedAsciiDriver.cxx +++ b/src/MEDPartitioner/MEDPARTITIONER_MeshCollectionMedAsciiDriver.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D +// Copyright (C) 2007-2019 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 @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -52,12 +53,46 @@ MeshCollectionMedAsciiDriver::MeshCollectionMedAsciiDriver(MeshCollection* colle *\param filename ascii file containing the list of MED v2.3 files * */ +int MeshCollectionMedAsciiDriver::read(MEDCoupling::MEDFileData* filedata) +{ + readMEDFileData(filedata); + + std::vector cz; // to fill from filedata + std::vector cellglobal; + std::vector nodeglobal; + std::vector faceglobal; + std::size_t size = _collection->getMesh().size(); + cellglobal.resize(size); + nodeglobal.resize(size); + faceglobal.resize(size); + for ( unsigned int idomain = 0; idomain < size; ++idomain ) + { + cellglobal[idomain]=0; + faceglobal[idomain]=0; + nodeglobal[idomain]=0; + if ( (_collection->getMesh())[idomain] && (_collection->getMesh())[idomain]->getNumberOfNodes() > 0 ) + _collection->setNonEmptyMesh(idomain); + } + //creation of topology from mesh and connect zones + ParallelTopology* aPT = new ParallelTopology((_collection->getMesh()), cz, cellglobal, nodeglobal, faceglobal); + _collection->setTopology(aPT,true); + + return 0; +} + +/*!reads a MED File v>=2.3 + * and mounts the corresponding meshes in memory + * the connect zones are created from the joints + * + *\param filename ascii file containing the list of MED v2.3 files + * */ + int MeshCollectionMedAsciiDriver::read(const char* filename, ParaDomainSelector* domainSelector) { //distributed meshes - std::vector cellglobal; - std::vector nodeglobal; - std::vector faceglobal; + std::vector cellglobal; + std::vector nodeglobal; + std::vector faceglobal; int nbdomain; //reading ascii master file @@ -105,7 +140,7 @@ int MeshCollectionMedAsciiDriver::read(const char* filename, ParaDomainSelector* throw INTERP_KERNEL::Exception("domain must be written from 1 to N in ASCII file descriptor"); } if ( !domainSelector || domainSelector->isMyDomain(i)) - readSubdomain(cellglobal,faceglobal,nodeglobal, i); + readSubdomain(i); } //loop on domains } //of try @@ -116,7 +151,7 @@ int MeshCollectionMedAsciiDriver::read(const char* filename, ParaDomainSelector* //creation of topology from mesh and connect zones ParallelTopology* aPT = new ParallelTopology((_collection->getMesh()), (_collection->getCZ()), cellglobal, nodeglobal, faceglobal); - _collection->setTopology(aPT); + _collection->setTopology(aPT, true); for (int i=0; igetMesh().size(); + std::size_t nbdomains=_collection->getMesh().size(); std::vector filenames; filenames.resize(nbdomains); //loop on the domains - for (int idomain=0; idomainisMyDomain( idomain ) ) { - if ( !_collection->getMesh()[idomain]->getNumberOfCells()==0 ) continue;//empty domain - MEDLoader::WriteUMesh(distfilename.c_str(),(_collection->getMesh())[idomain],true); + // [ABN] spurious test in 8.2 - fixed as I think it should be: + if ( _collection->getMesh()[idomain]->getNumberOfCells() == 0 ) continue; + WriteUMesh(distfilename.c_str(),(_collection->getMesh())[idomain],true); //writeSubdomain(idomain, nbdomains, distfilename.c_str(), domainSelector); } } @@ -163,7 +198,7 @@ void MeshCollectionMedAsciiDriver::write(const char* filename, ParaDomainSelecto file << "#" << " " << std::endl; file << _collection->getMesh().size() << " " << std::endl; - for (int idomain=0; idomaingetName() <<" "<< idomain+1 << " " << (_collection->getMesh())[idomain]->getName() << " localhost " << filenames[idomain] << " "<< std::endl;