]> SALOME platform Git repositories - modules/smesh.git/commitdiff
Salome HOME
reading constant size map
authorazakir <abdoulbari.zakir@csgroup.eu>
Mon, 14 Dec 2020 10:51:43 +0000 (11:51 +0100)
committerazakir <abdoulbari.zakir@csgroup.eu>
Mon, 14 Dec 2020 10:51:43 +0000 (11:51 +0100)
src/SMESHGUI/MG_ADAPT.cxx
src/SMESHGUI/MG_ADAPT.hxx

index a89924ed79bb5e6dc5cf3a6362ffa86191308250..9e393660604fec544e004245c9b9b66a6e826a28 100644 (file)
@@ -730,16 +730,16 @@ std::string MgAdapt::getCommandToRun()
     cmd+= " --in "+ meshIn;
     meshFormatOutputMesh = getFileName()+".mesh";
     cmd+= " --out "+ meshFormatOutputMesh;
-    if (useLocalMap) cmd+= " --sizemap "+ solFileIn;
-    else if (useBackgroundMap)
+    if (useLocalMap || useConstantValue) cmd+= " --sizemap "+ solFileIn;
+    else //  (useBackgroundMap)
     {
         cmd+= " --background_mesh "+ sizeMapIn ;
         cmd+= " --background_sizemap "+ solFileIn;
     }
-    else
-    {
-        // constant value TODO
-    }
+    //~else
+    //~{
+        //~// constant value TODO
+    //~}
 
     if (verbosityLevel != defaultVerboseLevel())
     {
@@ -1048,25 +1048,7 @@ void MgAdapt::convertMedFile(std::string& meshFormatMeshFileName, std::string& s
 
         meshFormatsizeMapFile = getFileName();
         meshFormatsizeMapFile += ".mesh";
-        MEDCoupling::MCAuto<MEDCoupling::MEDFileData> tmpMfd = MEDCoupling::MEDFileData::New(sizeMapFile);
-        MEDCoupling::MEDFileFields* tmpFields = tmpMfd->getFields();
-        MEDCoupling::MEDFileAnyTypeFieldMultiTS* fts = tmpFields->getFieldWithName(fieldName);
-        MEDCoupling::MCAuto<MEDCoupling::MEDFileFieldMultiTS>  fts1 = dynamic_cast<MEDCoupling::MEDFileFieldMultiTS *>(fts);
-        MEDCoupling::MCAuto<MEDCoupling::MEDFileAnyTypeField1TS> f = fts1->getTimeStep(timeStep, rank);
-        MEDCoupling::MCAuto<MEDCoupling::MEDFileFieldMultiTS> tmFts = MEDCoupling::MEDFileFieldMultiTS::New();
-        tmFts->pushBackTimeStep(f);
-
-        MEDCoupling::MCAuto<MEDCoupling::MEDFileFields> tmp_fields = MEDCoupling::MEDFileFields::New();
-        tmp_fields->pushField(tmFts);
-
-
-        tmpMfd->setFields( tmp_fields );
-        MeshFormatWriter tmpWriter;
-        tmpWriter.setMeshFileName(meshFormatsizeMapFile);
-        tmpWriter.setFieldFileNames( fieldFileNames);
-        tmpWriter.setMEDFileDS(tmpMfd);
-        tmpWriter.write();
-
+           buildBackGroundMeshAndSolFiles(fieldFileNames, meshFormatsizeMapFile);
 
     }
     else if(useLocalMap)
@@ -1084,19 +1066,12 @@ void MgAdapt::convertMedFile(std::string& meshFormatMeshFileName, std::string& s
 
     else
     {
-        MEDCoupling::MEDCouplingMesh* mesh = fileMesh->getMeshAtLevel(1); // nodes mesh
-        MEDCoupling::MEDCouplingFieldDouble* fieldOnNodes=MEDCoupling::MEDCouplingFieldDouble::New(MEDCoupling::ON_NODES,MEDCoupling::NO_TIME);
-        fieldOnNodes->setName("MyScalarFieldOnNodeNoTime");
-        fieldOnNodes->setMesh(mesh);
-        mesh->decrRef(); // no more need of mesh because mesh has been attached to fieldOnNodes
-        MEDCoupling::DataArrayDouble *array=MEDCoupling::DataArrayDouble::New();
-        array->alloc(fieldOnNodes->getMesh()->getNumberOfNodes(),1);//Implicitly fieldOnNodes will be a 1 component field.
-        array->fillWithValue(constantValue);
-        fieldOnNodes->setArray(array);
-        array->decrRef();
-        // fieldOnNodes is now usable
-        // ...
-        // fieldOnNodes is no more useful h
+        MEDCoupling::MCAuto<MEDCoupling::MEDCouplingMesh> mesh = fileMesh->getMeshAtLevel(1); // nodes mesh
+        MEDCoupling::MCAuto<MEDCoupling::MEDCouplingUMesh> umesh = mesh->buildUnstructured(); // nodes mesh
+        int dim  =  umesh->getSpaceDimension();
+        int version =  sizeof(double) < 8 ? 1 : 2;
+        mcIdType nbNodes =  umesh->getNumberOfNodes();
+        buildConstantSizeMapSolFile(solFormatFieldFileName, dim, version, nbNodes);
 
     }
 
@@ -1200,6 +1175,43 @@ void MgAdapt::restoreGroups(MEDCoupling::MEDFileMesh* fileMesh) const
 
     fileMesh->setGroupInfo(info);
 }
+
+void MgAdapt::buildConstantSizeMapSolFile(const std::string& solFormatFieldFileName, const int dim, const int version, const mcIdType nbNodes) const
+{
+       MeshFormat::Localizer loc;
+    MeshFormat::MeshFormatParser writer;
+    int fileId = writer.GmfOpenMesh( solFormatFieldFileName.c_str(), GmfWrite, version, dim);
+    int typTab[] = {GmfSca};
+    writer.GmfSetKwd(fileId, MeshFormat::GmfSolAtVertices, (int)nbNodes, 1, typTab);
+    for (mcIdType i = 0; i<nbNodes; i++) 
+    {
+               double valTab[1] = {constantValue};
+               writer.GmfSetLin( fileId, MeshFormat::GmfSolAtVertices, valTab);
+       }
+    writer.GmfCloseMesh(fileId);
+}
+
+void MgAdapt::buildBackGroundMeshAndSolFiles(const std::vector<std::string>& fieldFileNames, const std::string& meshFormatsizeMapFile) const
+{
+    MEDCoupling::MCAuto<MEDCoupling::MEDFileData> tmpMfd = MEDCoupling::MEDFileData::New(sizeMapFile);
+       MEDCoupling::MEDFileFields* tmpFields = tmpMfd->getFields();
+       MEDCoupling::MEDFileAnyTypeFieldMultiTS* fts = tmpFields->getFieldWithName(fieldName);
+       MEDCoupling::MCAuto<MEDCoupling::MEDFileFieldMultiTS>  fts1 = dynamic_cast<MEDCoupling::MEDFileFieldMultiTS *>(fts);
+       MEDCoupling::MCAuto<MEDCoupling::MEDFileAnyTypeField1TS> f = fts1->getTimeStep(timeStep, rank);
+       MEDCoupling::MCAuto<MEDCoupling::MEDFileFieldMultiTS> tmFts = MEDCoupling::MEDFileFieldMultiTS::New();
+       tmFts->pushBackTimeStep(f);
+
+       MEDCoupling::MCAuto<MEDCoupling::MEDFileFields> tmp_fields = MEDCoupling::MEDFileFields::New();
+       tmp_fields->pushField(tmFts);
+
+
+       tmpMfd->setFields( tmp_fields );
+       MeshFormatWriter tmpWriter;
+       tmpWriter.setMeshFileName(meshFormatsizeMapFile);
+       tmpWriter.setFieldFileNames( fieldFileNames);
+       tmpWriter.setMEDFileDS(tmpMfd);
+       tmpWriter.write();      
+}
 // =======================================================================
 med_idt MgAdapt::openMedFile(const std::string aFile)
 // =======================================================================
index 1854c931ce434aebbe474fa99c652d6025e5a05b..2ac1f71004fc6556a0aff15f77e75980abc7cd22 100644 (file)
@@ -318,6 +318,8 @@ private :
     void storeGroupsAndFams(MEDCoupling::MEDFileMesh* fileMesh);
     void restoreGroupsAndFams(MEDCoupling::MEDFileMesh* fileMesh) const;
     void convertMeshFile(std::string& meshFormatIn, std::vector< std::string>& solFieldFileNames) const ;
+    void buildConstantSizeMapSolFile(const std::string& solFormatFieldFileName, const int dim, const int version, const mcIdType nbNodes) const;
+    void buildBackGroundMeshAndSolFiles(const std::vector<std::string>& fieldFileNames, const std::string& meshFormatsizeMapFile) const;
     void getTimeStepInfos(std::string aFile, med_int& numdt, med_int& numit);
     Status addMessage(const std::string& msg, const bool isFatal = false);
     med_idt openMedFile(const std::string aFile) ;