Salome HOME
65de8bc3f352c2518f19f49a948749efc8379b87
[modules/hydro.git] / doc / salome / examples / h028_regroupOverlappingMeshes.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 = "/home/paul/testsHydro" #os.environ("HYDRO_TEST_RESOURCES")
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, 'garonneAmontChevauchant.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 from salome.hydrotools.changeCoords import changeCoords
34
35 origFileMesh2Trans = os.path.join(tmpdir, 'garonneAmontChevauchant_trs.med')
36 changeCoords(origFileMesh2, origFileMesh2Trans, 2154, 2154, offsetX, offsetY, 0, 0)
37
38 from salome.hydrotools.cutMesh import cutMesh
39
40 cutFileMesh2 = os.path.join(tmpdir, 'garonneAmontChevauchant_cut.med')
41 meshFile = cutMesh(origFileMesh2Trans,
42                    os.path.join(HYDRO_SAMPLES, 'coupeDomaineAmontChevauchant.shp'),
43                    cutFileMesh2, offsetX, offsetY)
44
45 ficMeshOut2 = os.path.join(tmpdir, "garonneAmont_brd.med")
46 fileMeshBrd2 = freeBordersGroup(cutFileMesh2, ficMeshOut2)
47 exploreEdgeGroups(fileMeshBrd2, "", offsetX, offsetY)
48
49 #----------------------
50 # --- HYDRO
51 #----------------------
52
53 from HYDROPy import *
54 from PyQt5.QtCore import *
55 from PyQt5.QtGui import *
56
57 from salome.hydrotools.hydroGeoMeshUtils import importPolylines, importBathymetry, createImmersibleZone, mergePolylines, getChildrenInStudy
58
59 hydro_doc = HYDROData_Document.Document()
60 hydro_doc.SetLocalCS( offsetX, offsetY )
61
62 limites_original = importPolylines(hydro_doc, os.path.join(tmpdir, "garonne_2_brd_FreeBorders.shp"), 'garonne_2_brd_FreeBorders', True, 4)
63 limites_amont = importPolylines(hydro_doc, os.path.join(tmpdir, "garonneAmont_brd_FreeBorders.shp"), 'garonneAmont_brd_FreeBorders', True, 5)
64 limites_domaine = importPolylines(hydro_doc, os.path.join(HYDRO_SAMPLES, "raccord_4_2.shp"), 'raccord_4_2_PolyXY', False, 3)
65
66 Cloud_02 = importBathymetry(hydro_doc, "Cloud_02", HYDRO_SAMPLES)
67
68 domaine_regroup = createImmersibleZone(hydro_doc, "domaine_regroup", limites_domaine[0], Cloud_02, True, 0)
69 domaine_original  = createImmersibleZone(hydro_doc, "domaine_original", limites_original[0], Cloud_02, False, 1)
70 domaine_amont  = createImmersibleZone(hydro_doc, "domaine_amont", limites_amont[0], Cloud_02, False, 2)
71
72 # Calculation case
73 domainRegroup = hydro_doc.CreateObject( KIND_CALCULATION )
74 domainRegroup.SetName( "domainRegroup" )
75
76 domainRegroup.SetAssignmentMode( HYDROData_CalculationCase.MANUAL )
77 domainRegroup.AddGeometryObject( domaine_amont )
78 domainRegroup.AddGeometryObject( domaine_original )
79 domainRegroup.AddGeometryObject( domaine_regroup )
80
81 case_geom_group = domaine_amont.GetGroup( 0 )
82 domainRegroup.AddGeometryGroup( case_geom_group )
83 case_geom_group = domaine_original.GetGroup( 0 )
84 domainRegroup.AddGeometryGroup( case_geom_group )
85 case_geom_group = domaine_regroup.GetGroup( 0 )
86 domainRegroup.AddGeometryGroup( case_geom_group )
87
88 domainRegroup.SetBoundaryPolyline( limites_domaine[0] )
89
90 # Start the algorithm of the partition and assignment
91 domainRegroup.Update()
92 domainRegroup_Reg_1 = hydro_doc.FindObjectByName( "domainRegroup_Reg_1" )
93 domainRegroup_Zone_1 = hydro_doc.FindObjectByName( "domainRegroup_Zone_1" )
94 domainRegroup_Zone_1.SetColor( QColor( 28, 51, 228 ))
95 domainRegroup_Reg_1.AddZone( domainRegroup_Zone_1 )
96 domainRegroup_Reg_2 = hydro_doc.FindObjectByName( "domainRegroup_Reg_2" )
97 domainRegroup_Zone_2 = hydro_doc.FindObjectByName( "domainRegroup_Zone_2" )
98 domainRegroup_Zone_2.SetColor( QColor( 28, 155, 228 ))
99 domainRegroup_Reg_2.AddZone( domainRegroup_Zone_2 )
100 domainRegroup_Reg_3 = hydro_doc.FindObjectByName( "domainRegroup_Reg_3" )
101 domainRegroup_Zone_3 = hydro_doc.FindObjectByName( "domainRegroup_Zone_3" )
102 domainRegroup_Zone_3.SetColor( QColor( 145, 228, 28 ))
103 domainRegroup_Reg_3.AddZone( domainRegroup_Zone_3 )
104 domainRegroup_Reg_1.SetName( "domainRegroup_Reg_1" )
105 domainRegroup_Reg_2.SetName( "domainRegroup_Reg_2" )
106 domainRegroup_Reg_3.SetName( "domainRegroup_Reg_3" )
107
108 # Export of the calculation case
109 domainRegroup_entry = domainRegroup.Export()
110
111 ##----------------------
112 ## --- Geometry
113 ##----------------------
114
115 import GEOM
116 from salome.geom import geomBuilder
117 import math
118 import SALOMEDS
119
120 from salome.hydrotools.hydroGeoMeshUtils import getChildrenInStudy
121
122 geompy = geomBuilder.New()
123
124 print ("Entry:", domainRegroup_entry)
125 HYDRO_domainRegroup = salome.IDToObject( str( domainRegroup_entry ) )
126 print ("Geom shape:", HYDRO_domainRegroup)
127 print ("Geom shape name:", HYDRO_domainRegroup.GetName())
128
129 [reg_extension] = geompy.SubShapeAll(HYDRO_domainRegroup, geompy.ShapeType["FACE"])
130 children = getChildrenInStudy(HYDRO_domainRegroup)
131 domaine_original_Outer = children["domainRegroup_domaine_original_Outer"]
132 domaine_amont_Outer = children["domainRegroup_domaine_amont_Outer"]
133
134 if salome.sg.hasDesktop():
135   salome.sg.updateObjBrowser()
136
137 #----------------------
138 #--- Meshing
139 #----------------------
140
141 import  SMESH, SALOMEDS
142 from salome.smesh import smeshBuilder
143 from salome.hydrotools.controls import controlMeshStats, controlSubMeshStats
144
145 smesh = smeshBuilder.New()
146
147 #--- algorithms and hypothesis
148 domaineEnglobant = smesh.Mesh(HYDRO_domainRegroup)
149
150 NETGEN_2D = domaineEnglobant.Triangle(algo=smeshBuilder.NETGEN_1D2D)
151 NETGEN_2D_Parameters = NETGEN_2D.Parameters()
152 NETGEN_2D_Parameters.SetMaxSize( 200 )
153 NETGEN_2D_Parameters.SetSecondOrder( 0 )
154 NETGEN_2D_Parameters.SetOptimize( 1 )
155 NETGEN_2D_Parameters.SetFineness( 4 )
156 NETGEN_2D_Parameters.SetMinSize( 5 )
157 NETGEN_2D_Parameters.SetUseSurfaceCurvature( 1 )
158 NETGEN_2D_Parameters.SetFuseEdges( 1 )
159 NETGEN_2D_Parameters.SetQuadAllowed( 0 )
160
161 ([origMeshBrd], status) = smesh.CreateMeshesFromMED(fileMeshBrd)
162 FreeBorders = origMeshBrd.GetGroupByName("FreeBorders")
163 Import_1D = domaineEnglobant.UseExisting1DElements(geom=domaine_original_Outer)
164 Source_Edges_1 = Import_1D.SourceEdges( FreeBorders ,1,1)
165
166 ([origMeshBrd2], status) = smesh.CreateMeshesFromMED(fileMeshBrd2)
167 FreeBorders2 = origMeshBrd2.GetGroupByName("FreeBorders")
168 Import_1D2 = domaineEnglobant.UseExisting1DElements(geom=domaine_amont_Outer)
169 Source_Edges_2 = Import_1D2.SourceEdges( FreeBorders2 ,1,1)
170
171 isDone = domaineEnglobant.Compute()
172
173 controlMeshStats(domaineEnglobant, 9703, 1186, 19077)
174
175 if salome.sg.hasDesktop():
176   salome.sg.updateObjBrowser()