X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FRENUMBER%2Frenumbering.cxx;h=8b2a7782cc9bb693625259f2fe37808d07bb45e8;hb=bb91878b3fb670041c09ea7aefce3132e157b126;hp=d429b2cffd310e030c4234fa1b2967c01bbcd330;hpb=aaa6cbecf0dc3e3f8858cd6e2be59844a2037417;p=tools%2Fmedcoupling.git diff --git a/src/RENUMBER/renumbering.cxx b/src/RENUMBER/renumbering.cxx index d429b2cff..8b2a7782c 100644 --- a/src/RENUMBER/renumbering.cxx +++ b/src/RENUMBER/renumbering.cxx @@ -1,9 +1,9 @@ -// Copyright (C) 2007-2013 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 // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -32,13 +32,13 @@ #include using namespace std; -using namespace ParaMEDMEM; +using namespace MEDCoupling; using namespace MED_RENUMBER; int main(int argc, char** argv) { double t_begin,t_read_st,t_compute_graph,t_family,t_field; - t_begin=clock(); + t_begin=(double)clock(); if (argc <5) { cerr << "Usage : " << argv[0] @@ -57,54 +57,72 @@ int main(int argc, char** argv) } // Reading file structure cout << "Reading : " << flush; - MEDCouplingAutoRefCountObjectPtr fd=MEDFileData::New(filename_in.c_str()); - MEDFileMesh *m=fd->getMeshes()->getMeshWithName(meshname.c_str()); + MCAuto fd(MEDFileData::New(filename_in)); + MEDFileMesh *m=fd->getMeshes()->getMeshWithName(meshname); MEDFileUMesh *mc=dynamic_cast(m); if(!mc) { std::ostringstream oss; oss << "In file \"" << filename_in << "\" the mesh name \"" << meshname<< "\" exists but is not unstructured !"; throw INTERP_KERNEL::Exception(oss.str().c_str()); } - t_read_st=clock(); + t_read_st=(double)clock(); cout << (t_read_st-t_begin)/(double) CLOCKS_PER_SEC << "s" << endl << flush; // Reading mesh - MEDCouplingAutoRefCountObjectPtr workMesh=mc->getMeshAtLevel(0); - std::vector code=workMesh->getDistributionOfTypes(); + MCAuto workMesh=mc->getMeshAtLevel(0); + //std::vector code=workMesh->getDistributionOfTypes(); cout << "Building the graph : " << flush; - DataArrayInt *neighb=0,*neighbI=0; + DataArrayIdType *neighb=0,*neighbI=0; workMesh->computeNeighborsOfCells(neighb,neighbI); - MEDCouplingAutoRefCountObjectPtr neighbSafe(neighb),neighbISafe(neighbI); - const int *graph=neighbSafe->begin(); - const int *graph_index=neighbISafe->begin(); + MCAuto neighbSafe(neighb),neighbISafe(neighbI),ipermSafe,permSafe; + const mcIdType *graph=neighbSafe->begin(); + const mcIdType *graph_index=neighbISafe->begin(); // Compute permutation iperm->new2old perm->old2new - vector iperm,perm; + DataArrayIdType *iperm(0),*perm(0); Renumbering *renumb=RenumberingFactory(type_renum); renumb->renumber(graph,graph_index,workMesh->getNumberOfCells(),iperm,perm); + ipermSafe=iperm; permSafe=perm; delete renumb; - t_compute_graph=clock(); + ipermSafe=0;//erase new2old, we are using only old 2 new + t_compute_graph=(double)clock(); cout << " : " << (t_compute_graph-t_read_st)/(double) CLOCKS_PER_SEC << "s" << endl; cout.flush(); // Connectivity cout << "Reordering connectivity & families and writing : " << flush; - workMesh->renumberCells(&perm[0],false); + workMesh->renumberCells(perm->begin(),false); mc->setMeshAtLevel(0,workMesh); - const DataArrayInt *famField=mc->getFamilyFieldAtLevel(0); + const DataArrayIdType *famField=mc->getFamilyFieldAtLevel(0); if(famField) { - MEDCouplingAutoRefCountObjectPtr famField2=famField->renumber(&perm[0]); + MCAuto famField2=famField->renumber(perm->begin()); mc->setFamilyFieldArr(0,famField2); } - mc->write(filename_out.c_str(),2); - t_family=clock(); + mc->write(filename_out,2); + t_family=(double)clock(); cout << " : " << (t_family-t_compute_graph)/(double) CLOCKS_PER_SEC << "s" << endl << flush; // Fields cout << "Reordering fields and writing : " << flush; MEDFileFields *fs=fd->getFields(); - MEDCouplingAutoRefCountObjectPtr o2n=DataArrayInt::New(); - o2n->useArray(&perm[0],false,CPP_DEALLOC,perm.size(),1); - fs->renumberEntitiesLyingOnMesh(meshname.c_str(),code,code,o2n); - fs->write(filename_out.c_str(),0); - t_field=clock(); + if(fs) + { + for(int i=0;igetNumberOfFields();i++) + { + MEDFileFieldMultiTS *fmts=dynamic_cast(fs->getFieldAtPos(i)); + if(!fmts) continue; + if(fmts->getMeshName()==meshname) + { + for(int j=0;jgetNumberOfTS();j++) + { + MEDFileField1TS *f1ts=dynamic_cast(fmts->getTimeStepAtPos(j)); + if(!f1ts) continue; + DataArrayDouble *arr=f1ts->getUndergroundDataArray(); + arr->renumberInPlace(perm->begin()); + } + } + } + fs->write(filename_out,0); + //fs->renumberEntitiesLyingOnMesh(meshname,code,code,o2n); bugged + } + t_field=(double)clock(); cout << " : " << (t_field-t_family)/(double) CLOCKS_PER_SEC << "s" << endl << flush; return 0; }