From 541b20a433ff6970d3eab0cdbe064b3786c3ca82 Mon Sep 17 00:00:00 2001 From: jfa Date: Wed, 22 Dec 2021 15:10:10 +0300 Subject: [PATCH] Update documentation, add more tests --- doc/salome/examples/test_cdc_uniform_01.py | 148 ++++++++++++++++++ doc/salome/examples/test_cdc_uniform_02.py | 120 ++++++++++++++ ...adaptation_with_homard_boundary_groups.png | Bin 0 -> 43478 bytes .../SMESH/input/homard_create_boundary.rst | 9 ++ src/SMESHGUI/SMESHGUI_HomardAdaptDlg.cxx | 8 +- src/SMESHGUI/SMESHGUI_HomardBoundaryDlg.cxx | 18 +-- src/SMESHGUI/SMESHGUI_HomardListGroup.cxx | 17 +- 7 files changed, 300 insertions(+), 20 deletions(-) create mode 100644 doc/salome/examples/test_cdc_uniform_01.py create mode 100644 doc/salome/examples/test_cdc_uniform_02.py create mode 100644 doc/salome/gui/SMESH/images/adaptation_with_homard_boundary_groups.png diff --git a/doc/salome/examples/test_cdc_uniform_01.py b/doc/salome/examples/test_cdc_uniform_01.py new file mode 100644 index 000000000..ae9d477a4 --- /dev/null +++ b/doc/salome/examples/test_cdc_uniform_01.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +"""Raffinement uniforme d'un maillage en triangles + +Copyright 2021 EDF +Gérald NICOLAS ++33.1.78.19.43.52 +""" +__revision__ = "V02.04" + +import os +import tempfile + +import salome + +#=============== Options ==================== +# REPDATA = répertoire du cas-test +REPDATA = tempfile.mkdtemp() +LONG = 36. +LARG = 24. +NOM_MAILLAGE = "Maillage" +#============================================ + +from salome.shaper import model + +model.begin() +partSet = model.moduleDocument() + +### Create Part +Part_1 = model.addPart(partSet) +Part_1_doc = Part_1.document() +model.addParameter(Part_1_doc, "Long", "{}".format(LONG)) +model.addParameter(Part_1_doc, "Larg", "{}".format(LARG)) + +### Create Sketch +Sketch_1 = model.addSketch(Part_1_doc, model.defaultPlane("XOY")) + +### Create SketchLine +SketchLine_1 = Sketch_1.addLine(36, 0, 0, 0) + +### Create SketchProjection +SketchProjection_1 = Sketch_1.addProjection(model.selection("VERTEX", "PartSet/Origin"), False) +SketchPoint_1 = SketchProjection_1.createdFeature() +Sketch_1.setCoincident(SketchLine_1.endPoint(), SketchPoint_1.result()) + +### Create SketchLine +SketchLine_2 = Sketch_1.addLine(0, 0, 0, 24) + +### Create SketchLine +SketchLine_3 = Sketch_1.addLine(0, 24, 36, 24) + +### Create SketchLine +SketchLine_4 = Sketch_1.addLine(36, 24, 36, 0) +Sketch_1.setCoincident(SketchLine_4.endPoint(), SketchLine_1.startPoint()) +Sketch_1.setCoincident(SketchLine_1.endPoint(), SketchLine_2.startPoint()) +Sketch_1.setCoincident(SketchLine_2.endPoint(), SketchLine_3.startPoint()) +Sketch_1.setCoincident(SketchLine_3.endPoint(), SketchLine_4.startPoint()) +Sketch_1.setHorizontal(SketchLine_1.result()) +Sketch_1.setVertical(SketchLine_2.result()) +Sketch_1.setHorizontal(SketchLine_3.result()) +Sketch_1.setVertical(SketchLine_4.result()) +Sketch_1.setLength(SketchLine_3.result(), "Long") +Sketch_1.setLength(SketchLine_2.result(), "Larg") +model.do() + +### Create Face +Face_1 = model.addFace(Part_1_doc, [model.selection("COMPOUND", "all-in-Sketch_1")]) + +### Create Symmetry +Symmetry_1 = model.addSymmetry(Part_1_doc, [model.selection("COMPOUND", "all-in-Face_1")], model.selection("EDGE", "PartSet/OY"), keepOriginal = True, keepSubResults = True) + +### Create Symmetry +Symmetry_2 = model.addSymmetry(Part_1_doc, [model.selection("COMPOUND", "all-in-Symmetry_1")], model.selection("EDGE", "PartSet/OX"), keepOriginal = True, keepSubResults = True) + +### Create Rotation +Rotation_1 = model.addRotation(Part_1_doc, [model.selection("COMPOUND", "all-in-Symmetry_2")], axis = model.selection("EDGE", "PartSet/OX"), angle = 90, keepSubResults = True) + +### Create Recover +Recover_1 = model.addRecover(Part_1_doc, Rotation_1, [Symmetry_2.result()]) + +### Create Partition +Partition_1 = model.addPartition(Part_1_doc, [model.selection("COMPOUND", "all-in-Rotation_1"), model.selection("COMPOUND", "all-in-Recover_1")], keepSubResults = True) + +### Create Group +for IAUX in range(1,9): + _ = model.addGroup(Part_1_doc, "Faces", [model.selection("FACE", "Partition_1_1_{}".format(IAUX))]) + +model.end() + +### +### SHAPERSTUDY component +### + +model.publishToShaperStudy() +import SHAPERSTUDY +l_aux = SHAPERSTUDY.shape(model.featureStringId(Partition_1)) + +### +### SMESH component +### + +import SMESH +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New() + +Maillage_1 = smesh.Mesh(l_aux[0]) +Maillage_1.SetName(NOM_MAILLAGE) + +L_MAILLE = min(LARG,LONG)/5. +NETGEN_1D_2D = Maillage_1.Triangle(algo=smeshBuilder.NETGEN_1D2D) +NETGEN_2D_Parameters_1 = NETGEN_1D_2D.Parameters() +NETGEN_2D_Parameters_1.SetMaxSize( L_MAILLE ) +NETGEN_2D_Parameters_1.SetMinSize( L_MAILLE/10. ) +for groupe in l_aux[1:]: + groupe_nom = groupe.GetName() + _ = Maillage_1.GroupOnGeom(groupe,groupe_nom,SMESH.FACE) + +_ = Maillage_1.Compute() + +FIC_MAIL = os.path.join(REPDATA, "Uniform_01.med") +Maillage_1.ExportMED(FIC_MAIL) + +# Uniform refinement +import SMESHHOMARD +smeshhomard = smesh.Adaptation("Uniform") +Case_1 = smeshhomard.CreateCase(NOM_MAILLAGE, FIC_MAIL, REPDATA) +Case_1.SetConfType(0) +smeshhomard.SetKeepMedOUT(True) +smeshhomard.SetPublishMeshOUT(True) +smeshhomard.SetMeshNameOUT("{}_R".format(NOM_MAILLAGE)) +FIC_MAIL = os.path.join(REPDATA, "Uniform_01_R.med") +smeshhomard.SetMeshFileOUT(FIC_MAIL) +smeshhomard.SetKeepWorkingFiles(False) +codret = smeshhomard.Compute() + +# Check +if os.path.isfile(FIC_MAIL): + os.remove(FIC_MAIL) +else: + print("Test Uniform refinement: Error: no output med file") + assert(False) + +# Ménage +os.rmdir(REPDATA) + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser() diff --git a/doc/salome/examples/test_cdc_uniform_02.py b/doc/salome/examples/test_cdc_uniform_02.py new file mode 100644 index 000000000..fefcf4441 --- /dev/null +++ b/doc/salome/examples/test_cdc_uniform_02.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +"""Raffinement uniforme d'un maillage en tétraèdres + +Copyright 2021 EDF +Gérald NICOLAS ++33.1.78.19.43.52 +""" +__revision__ = "V02.03" + +import os +import tempfile + +import salome + +#=============== Options ==================== +# REPDATA = répertoire du cas-test +REPDATA = tempfile.mkdtemp() +LONG = 36. +LARG = 24. +NOM_MAILLAGE = "BOX" +#============================================ + +from salome.shaper import model + +model.begin() +partSet = model.moduleDocument() + +### Create Part +Part_1 = model.addPart(partSet) +Part_1_doc = Part_1.document() +model.addParameter(Part_1_doc, "Long", "{}".format(LONG)) +model.addParameter(Part_1_doc, "Larg", "{}".format(LARG)) +model.addParameter(Part_1_doc, "HAUT", "(LARG+LONG)") + +### Create Box +Box_1 = model.addBox(Part_1_doc, "LONG", "LARG", "HAUT") + +### Create Group +Group_1 = model.addGroup(Part_1_doc, "Vertices", [model.selection("VERTEX", "[Box_1_1/Front][Box_1_1/Left][Box_1_1/Top]")]) + +### Create Group +Group_2_objects = [model.selection("EDGE", "[Box_1_1/Left][Box_1_1/Top]"), + model.selection("EDGE", "[Box_1_1/Front][Box_1_1/Left]"), + model.selection("EDGE", "[Box_1_1/Left][Box_1_1/Bottom]")] +Group_2 = model.addGroup(Part_1_doc, "Edges", Group_2_objects) + +### Create Group +Group_3_objects = [model.selection("EDGE", "[Box_1_1/Front][Box_1_1/Top]"), + model.selection("EDGE", "[Box_1_1/Front][Box_1_1/Left]"), + model.selection("EDGE", "[Box_1_1/Front][Box_1_1/Bottom]")] +Group_3 = model.addGroup(Part_1_doc, "Edges", Group_3_objects) + +### Create Group +Group_4 = model.addGroup(Part_1_doc, "Faces", [model.selection("FACE", "Box_1_1/Right")]) + +model.end() + +### +### SHAPERSTUDY component +### + +model.publishToShaperStudy() +import SHAPERSTUDY +l_aux = SHAPERSTUDY.shape(model.featureStringId(Box_1)) + +### +### SMESH component +### + +import SMESH +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New() + +Maillage_1 = smesh.Mesh(l_aux[0]) +Maillage_1.SetName(NOM_MAILLAGE) + +L_MAILLE = min(LARG,LONG)/5. +NETGEN_1D_2D_3D = Maillage_1.Tetrahedron(algo=smeshBuilder.NETGEN_1D2D3D) +NETGEN_3D_Parameters_1 = NETGEN_1D_2D_3D.Parameters() +NETGEN_3D_Parameters_1.SetMaxSize( L_MAILLE ) +NETGEN_3D_Parameters_1.SetMinSize( L_MAILLE/5. ) +NETGEN_3D_Parameters_1.SetSecondOrder( 1 ) +_ = Maillage_1.GroupOnGeom(l_aux[1],l_aux[1].GetName(),SMESH.NODE) +_ = Maillage_1.GroupOnGeom(l_aux[2],l_aux[2].GetName(),SMESH.EDGE) +_ = Maillage_1.GroupOnGeom(l_aux[3],l_aux[3].GetName(),SMESH.EDGE) +_ = Maillage_1.GroupOnGeom(l_aux[4],l_aux[4].GetName(),SMESH.FACE) + +_ = Maillage_1.Compute() + +#FIC_MAIL = os.path.join(REPDATA, "Uniform_02.med") +#Maillage_1.ExportMED(FIC_MAIL) + +# Uniform refinement +import SMESHHOMARD +smeshhomard = smesh.Adaptation("Uniform") +#Case_1 = homard.CreateCase(NOM_MAILLAGE, FIC_MAIL, REPDATA) +Case_1 = homard.CreateCase(NOM_MAILLAGE, Maillage_1.GetMesh(), REPDATA) +Case_1.SetConfType(0) +smeshhomard.SetKeepMedOUT(True) +smeshhomard.SetPublishMeshOUT(True) +smeshhomard.SetMeshNameOUT("{}_R".format(NOM_MAILLAGE)) +FIC_MAIL = os.path.join(REPDATA, "Uniform_02_R.med") +smeshhomard.SetMeshFileOUT(FIC_MAIL) +smeshhomard.SetKeepWorkingFiles(False) +codret = smeshhomard.Compute() + +# Check +if os.path.isfile(FIC_MAIL): + os.remove(FIC_MAIL) +else: + print("Test Uniform refinement: Error: no output med file") + assert(False) + +# Ménage +os.rmdir(REPDATA) + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser() diff --git a/doc/salome/gui/SMESH/images/adaptation_with_homard_boundary_groups.png b/doc/salome/gui/SMESH/images/adaptation_with_homard_boundary_groups.png new file mode 100644 index 0000000000000000000000000000000000000000..815591e3084909836ef5c74c02dc24e5b545066e GIT binary patch literal 43478 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

eVC#2uV#IMrpjb;B~zw%OJ}fn041=R!ERC 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/input/homard_create_boundary.rst b/doc/salome/gui/SMESH/input/homard_create_boundary.rst index 5053f648a..230ce001d 100644 --- a/doc/salome/gui/SMESH/input/homard_create_boundary.rst +++ b/doc/salome/gui/SMESH/input/homard_create_boundary.rst @@ -41,6 +41,15 @@ The window invites in the choice of a file that contains the CAO with XAO format .. note:: The coherence between this CAO and the initial mesh is not checked. +Filtering by the groups +*********************** +.. index:: single: group + +We can restrict the application of the boundary to groups. So elements not belonging to these groups will not be affected. We check the associated button **Filtering with groups**. The list of the present groups of elements in the mesh is shown. It is enough to check those wanted to restrict the boundary. + +.. image:: ../images/adaptation_with_homard_boundary_groups.png + :align: center + .. _homard_create_boundary_Di: Discrete boundary diff --git a/src/SMESHGUI/SMESHGUI_HomardAdaptDlg.cxx b/src/SMESHGUI/SMESHGUI_HomardAdaptDlg.cxx index fb74f2553..c215ac0c8 100644 --- a/src/SMESHGUI/SMESHGUI_HomardAdaptDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_HomardAdaptDlg.cxx @@ -636,9 +636,11 @@ void SMESHGUI_HomardAdaptDlg::SetBoundaryNo() // ------------------------------------------------------------------------ void SMESHGUI_HomardAdaptDlg::SetBoundaryCAO() { - myArgs->GBBoundaryC->setVisible(1); - myArgs->GBBoundaryN->setVisible(0); - adjustSize(); + if (CheckCase(true)) { + myArgs->GBBoundaryC->setVisible(1); + myArgs->GBBoundaryN->setVisible(0); + adjustSize(); + } } // ------------------------------------------------------------------------ void SMESHGUI_HomardAdaptDlg::SetBoundaryNonCAO() diff --git a/src/SMESHGUI/SMESHGUI_HomardBoundaryDlg.cxx b/src/SMESHGUI/SMESHGUI_HomardBoundaryDlg.cxx index f6899c28d..e3180f4cb 100644 --- a/src/SMESHGUI/SMESHGUI_HomardBoundaryDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_HomardBoundaryDlg.cxx @@ -956,7 +956,7 @@ void SMESH_CreateBoundaryCAO::setGroups (QStringList listGroup) } // ------------------------------------------------------------------------ void SMESH_CreateBoundaryCAO::SetFiltrage() -// // ------------------------------------------------------------------------ +// ------------------------------------------------------------------------ { if (!CBGroupe->isChecked()) return; @@ -1564,11 +1564,11 @@ bool SMESH_EditBoundaryCAO::PushOnApply() } // ------------------------------------------------------------------------ void SMESH_EditBoundaryCAO::SetFiltrage() -// // ------------------------------------------------------------------------ +// ------------------------------------------------------------------------ { if (!CBGroupe->isChecked()) return; - SMESHHOMARD::HOMARD_Cas_var monCas = myHomardGen->GetCase(); - SMESHHOMARD::ListGroupType_var _listeGroupesCas = monCas->GetGroups(); + //SMESHHOMARD::HOMARD_Cas_var monCas = myHomardGen->GetCase(); + //SMESHHOMARD::ListGroupType_var _listeGroupesCas = monCas->GetGroups(); SMESH_EditListGroupCAO *aDlg = new SMESH_EditListGroupCAO (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen), @@ -1576,14 +1576,14 @@ void SMESH_EditBoundaryCAO::SetFiltrage() aDlg->show(); } -// ------------------------------------------------------------------------------------------------------------------------------------- -SMESH_EditBoundaryDi::SMESH_EditBoundaryDi( SMESHGUI_HomardAdaptDlg* parent, bool modal, - SMESHHOMARD::HOMARD_Gen_var myHomardGen, - QString caseName, QString Name): -// ------------------------------------------------------------------------------------------------------------------------------------- +// ------------------------------------------------------------------------------------ /* Constructs a SMESH_EditBoundaryDi herite de SMESH_CreateBoundaryDi */ +// ------------------------------------------------------------------------------------ +SMESH_EditBoundaryDi::SMESH_EditBoundaryDi( SMESHGUI_HomardAdaptDlg* parent, bool modal, + SMESHHOMARD::HOMARD_Gen_var myHomardGen, + QString caseName, QString Name): SMESH_CreateBoundaryDi(parent, modal, myHomardGen, caseName, Name) { MESSAGE("Debut de Boundary pour " << Name.toStdString().c_str()); diff --git a/src/SMESHGUI/SMESHGUI_HomardListGroup.cxx b/src/SMESHGUI/SMESHGUI_HomardListGroup.cxx index ab7050cd2..32c4586f8 100644 --- a/src/SMESHGUI/SMESHGUI_HomardListGroup.cxx +++ b/src/SMESHGUI/SMESHGUI_HomardListGroup.cxx @@ -38,23 +38,24 @@ using namespace std; // ------------------------------------------------------------------------------------ -SMESH_CreateListGroupCAO::SMESH_CreateListGroupCAO(SMESH_CreateBoundaryCAO* parentBound, bool modal, - SMESHHOMARD::HOMARD_Gen_var myHomardGen0, - QString aCaseName, - QStringList listeGroupesHypo) +SMESH_CreateListGroupCAO::SMESH_CreateListGroupCAO(SMESH_CreateBoundaryCAO* parentBound, + bool modal, + SMESHHOMARD::HOMARD_Gen_var myHomardGen0, + QString aCaseName, + QStringList listeGroupesHypo) : QDialog(0), SMESH_Ui_CreateListGroup(), _aCaseName (aCaseName), _listeGroupesHypo (listeGroupesHypo), _parentBound(parentBound) { - MESSAGE("Debut de SMESH_CreateListGroupCAO"); + MESSAGE("Debut de SMESH_CreateListGroupCAO"); myHomardGen = SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen0); setupUi(this); setModal(modal); InitConnect(); InitGroupes(); } -// -------------------------------------------------------------------------------------------------------------- +// ------------------------------------------------------------------------------------ SMESH_CreateListGroupCAO::SMESH_CreateListGroupCAO(SMESH_CreateBoundaryCAO* parentBound, SMESHHOMARD::HOMARD_Gen_var myHomardGen, QString aCaseName, @@ -112,7 +113,7 @@ void SMESH_CreateListGroupCAO::PushOnOK() void SMESH_CreateListGroupCAO::PushOnHelp() // ------------------------------------------------------------------------ { - SMESH::ShowHelpFile(QString("gui_create_hypothese.html")); + SMESH::ShowHelpFile(QString("homard_create_boundary.html#filtering-by-the-groups")); } // ------------------------------------------------------------------------ void SMESH_CreateListGroupCAO::InitGroupes() @@ -220,7 +221,7 @@ void SMESH_CreateListGroup::PushOnOK() void SMESH_CreateListGroup::PushOnHelp() // ------------------------------------------------------------------------ { - SMESH::ShowHelpFile(QString("gui_create_hypothese.html")); + SMESH::ShowHelpFile(QString("homard_create_boundary.html#filtering-by-the-groups")); } // ------------------------------------------------------------------------ void SMESH_CreateListGroup::InitGroupes() -- 2.39.2