Salome HOME
corrections to pass tests
[modules/hydro.git] / doc / salome / examples / h027_regroupMeshes.py
1 # -*- coding: utf-8 -*-
2
3 import os
4 HYDRO_SAMPLES = os.path.join( os.environ["HYDRO_ROOT_DIR"], "bin/salome/test/HYDRO")
5 HYDRO_TEST_RESOURCES = os.path.join(os.environ["HYDRO_DIR"], "bin", "salome", "test", "tmp_test")
6
7 import tempfile
8 tmpdir = tempfile.mkdtemp()
9 print("tmpdir=",tmpdir)
10
11 # --- generated resources
12
13 origFileMesh = os.path.join(HYDRO_TEST_RESOURCES, 'garonne_2.med')
14 origFileMesh2 = os.path.join(HYDRO_TEST_RESOURCES, 'garonneAmont.med')
15
16 # ----------------------------------------------------------------------------------
17 # --- domain extension
18
19 import sys
20 import salome
21
22 salome.salome_init()
23
24 from salome.hydrotools.shapesGroups import freeBordersGroup, exploreEdgeGroups, fitShapePointsToMesh
25
26 offsetX = 430000.
27 offsetY = 6350000.
28
29 ficMeshOut = os.path.join(tmpdir, "garonne_2_brd.med")
30 fileMeshBrd = freeBordersGroup(origFileMesh, ficMeshOut)
31 exploreEdgeGroups(fileMeshBrd, "", offsetX, offsetY)
32
33 ficMeshOut2 = os.path.join(tmpdir, "garonneAmont_brd.med")
34 fileMeshBrd2 = freeBordersGroup(origFileMesh2, ficMeshOut2)
35 exploreEdgeGroups(fileMeshBrd2, "", offsetX, offsetY)
36
37 #----------------------
38 # --- HYDRO
39 #----------------------
40
41 from HYDROPy import *
42 from PyQt5.QtCore import *
43 from PyQt5.QtGui import *
44
45 from salome.hydrotools.hydroGeoMeshUtils import importPolylines, importBathymetry, createImmersibleZone, mergePolylines, getChildrenInStudy
46
47 hydro_doc = HYDROData_Document.Document()
48 hydro_doc.SetLocalCS( offsetX, offsetY )
49
50 limites_original = importPolylines(hydro_doc, os.path.join(tmpdir, "garonne_2_brd_FreeBorders.shp"), 'garonne_2_brd_FreeBorders', True, 4)
51 limites_amont = importPolylines(hydro_doc, os.path.join(tmpdir, "garonneAmont_brd_FreeBorders.shp"), 'garonneAmont_brd_FreeBorders', True, 5)
52 limites_domaine = importPolylines(hydro_doc, os.path.join(HYDRO_SAMPLES, "raccord_4_2.shp"), 'raccord_4_2_PolyXY', False, 3)
53
54 Cloud_02 = importBathymetry(hydro_doc, "Cloud_02", HYDRO_SAMPLES)
55
56 domaine_regroup = createImmersibleZone(hydro_doc, "domaine_regroup", limites_domaine[0], Cloud_02, True, 0)
57 domaine_original  = createImmersibleZone(hydro_doc, "domaine_original", limites_original[0], Cloud_02, False, 1)
58 domaine_amont  = createImmersibleZone(hydro_doc, "domaine_amont", limites_amont[0], Cloud_02, False, 2)
59
60 # Calculation case
61 domainRegroup = hydro_doc.CreateObject( KIND_CALCULATION )
62 domainRegroup.SetName( "domainRegroup" )
63
64 domainRegroup.SetAssignmentMode( HYDROData_CalculationCase.MANUAL )
65 domainRegroup.AddGeometryObject( domaine_amont )
66 domainRegroup.AddGeometryObject( domaine_original )
67 domainRegroup.AddGeometryObject( domaine_regroup )
68
69 case_geom_group = domaine_amont.GetGroup( 0 )
70 domainRegroup.AddGeometryGroup( case_geom_group )
71 case_geom_group = domaine_original.GetGroup( 0 )
72 domainRegroup.AddGeometryGroup( case_geom_group )
73 case_geom_group = domaine_regroup.GetGroup( 0 )
74 domainRegroup.AddGeometryGroup( case_geom_group )
75
76 domainRegroup.SetBoundaryPolyline( limites_domaine[0] )
77
78 # Start the algorithm of the partition and assignment
79 domainRegroup.Update()
80 domainRegroup_Reg_1 = hydro_doc.FindObjectByName( "domainRegroup_Reg_1" )
81 domainRegroup_Zone_1 = hydro_doc.FindObjectByName( "domainRegroup_Zone_1" )
82 domainRegroup_Zone_1.SetColor( QColor( 28, 51, 228 ))
83 domainRegroup_Reg_1.AddZone( domainRegroup_Zone_1 )
84 domainRegroup_Reg_2 = hydro_doc.FindObjectByName( "domainRegroup_Reg_2" )
85 domainRegroup_Zone_2 = hydro_doc.FindObjectByName( "domainRegroup_Zone_2" )
86 domainRegroup_Zone_2.SetColor( QColor( 28, 155, 228 ))
87 domainRegroup_Reg_2.AddZone( domainRegroup_Zone_2 )
88 domainRegroup_Reg_3 = hydro_doc.FindObjectByName( "domainRegroup_Reg_3" )
89 domainRegroup_Zone_3 = hydro_doc.FindObjectByName( "domainRegroup_Zone_3" )
90 domainRegroup_Zone_3.SetColor( QColor( 145, 228, 28 ))
91 domainRegroup_Reg_3.AddZone( domainRegroup_Zone_3 )
92 domainRegroup_Reg_1.SetName( "domainRegroup_Reg_1" )
93 domainRegroup_Reg_2.SetName( "domainRegroup_Reg_2" )
94 domainRegroup_Reg_3.SetName( "domainRegroup_Reg_3" )
95
96 # Export of the calculation case
97 domainRegroup_entry = domainRegroup.Export()
98
99 ##----------------------
100 ## --- Geometry
101 ##----------------------
102
103 import GEOM
104 from salome.geom import geomBuilder
105 import math
106 import SALOMEDS
107
108 from salome.hydrotools.hydroGeoMeshUtils import getChildrenInStudy
109
110 geompy = geomBuilder.New()
111
112 print ("Entry:", domainRegroup_entry)
113 HYDRO_domainRegroup = salome.IDToObject( str( domainRegroup_entry ) )
114 print ("Geom shape:", HYDRO_domainRegroup)
115 print ("Geom shape name:", HYDRO_domainRegroup.GetName())
116
117 [reg_extension] = geompy.SubShapeAll(HYDRO_domainRegroup, geompy.ShapeType["FACE"])
118 children = getChildrenInStudy(HYDRO_domainRegroup)
119 domaine_original_Outer = children["domainRegroup_domaine_original_Outer"]
120 domaine_amont_Outer = children["domainRegroup_domaine_amont_Outer"]
121
122 if salome.sg.hasDesktop():
123   salome.sg.updateObjBrowser()
124
125 #----------------------
126 #--- Meshing
127 #----------------------
128
129 import  SMESH, SALOMEDS
130 from salome.smesh import smeshBuilder
131 from salome.hydrotools.controls import controlMeshStats, controlSubMeshStats
132
133 smesh = smeshBuilder.New()
134
135 #--- algorithms and hypothesis
136 domaineEnglobant = smesh.Mesh(HYDRO_domainRegroup)
137
138 NETGEN_2D = domaineEnglobant.Triangle(algo=smeshBuilder.NETGEN_1D2D)
139 NETGEN_2D_Parameters = NETGEN_2D.Parameters()
140 NETGEN_2D_Parameters.SetMaxSize( 200 )
141 NETGEN_2D_Parameters.SetSecondOrder( 0 )
142 NETGEN_2D_Parameters.SetOptimize( 1 )
143 NETGEN_2D_Parameters.SetFineness( 4 )
144 NETGEN_2D_Parameters.SetMinSize( 5 )
145 NETGEN_2D_Parameters.SetUseSurfaceCurvature( 1 )
146 NETGEN_2D_Parameters.SetFuseEdges( 1 )
147 NETGEN_2D_Parameters.SetQuadAllowed( 0 )
148
149 ([origMeshBrd], status) = smesh.CreateMeshesFromMED(fileMeshBrd)
150 FreeBorders = origMeshBrd.GetGroupByName("FreeBorders")
151 Import_1D = domaineEnglobant.UseExisting1DElements(geom=domaine_original_Outer)
152 Source_Edges_1 = Import_1D.SourceEdges( FreeBorders ,1,1)
153
154 ([origMeshBrd2], status) = smesh.CreateMeshesFromMED(fileMeshBrd2)
155 FreeBorders2 = origMeshBrd2.GetGroupByName("FreeBorders")
156 Import_1D2 = domaineEnglobant.UseExisting1DElements(geom=domaine_amont_Outer)
157 Source_Edges_2 = Import_1D2.SourceEdges( FreeBorders2 ,1,1)
158
159 isDone = domaineEnglobant.Compute()
160
161 controlMeshStats(domaineEnglobant, 9675, 1158, 19022)
162
163 if salome.sg.hasDesktop():
164   salome.sg.updateObjBrowser()