Update documentation, add more tests

This commit is contained in:
jfa 2021-12-22 15:10:10 +03:00
parent 24b5a59e1b
commit 541b20a433
7 changed files with 300 additions and 20 deletions

View File

@ -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()

View File

@ -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()

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View File

@ -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

View File

@ -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()

View File

@ -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());

View File

@ -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()