Salome HOME
corrections to pass tests
[modules/hydro.git] / doc / salome / examples / h022_extensionSimpleComplete.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
15 # ----------------------------------------------------------------------------------
16 # --- domain extension
17
18 import sys
19 import salome
20
21 salome.salome_init()
22
23 from salome.hydrotools.shapesGroups import freeBordersGroup, exploreEdgeGroups, fitShapePointsToMesh
24
25 offsetX = 430000.
26 offsetY = 6350000.
27
28 ficMeshOut = os.path.join(tmpdir, "garonne_2_brd.med")
29 fileMeshBrd = freeBordersGroup(origFileMesh, ficMeshOut)
30 exploreEdgeGroups(fileMeshBrd, "", offsetX, offsetY)
31
32 #----------------------
33 # --- HYDRO
34 #----------------------
35
36 from HYDROPy import *
37 from PyQt5.QtCore import *
38 from PyQt5.QtGui import *
39
40 from salome.hydrotools.hydroGeoMeshUtils import importPolylines, importBathymetry, createImmersibleZone
41
42 hydro_doc = HYDROData_Document.Document()
43 hydro_doc.SetLocalCS( offsetX, offsetY )
44
45 limites_original = importPolylines(hydro_doc, os.path.join(tmpdir, "garonne_2_brd_FreeBorders.shp"), 'garonne_2_brd_FreeBorders', True, 4)
46 limites_domaine  = importPolylines(hydro_doc, os.path.join(HYDRO_SAMPLES, "extension_1_1.shp"), 'extension_1_1_PolyXY', False, 2)
47
48 Cloud_02 = importBathymetry(hydro_doc, "Cloud_02", HYDRO_SAMPLES)
49
50 domaine_original  = createImmersibleZone(hydro_doc, "domaine_original", limites_original[0], Cloud_02, False, 1)
51 domaine_englobant = createImmersibleZone(hydro_doc, "domaine_englobant", limites_domaine[0], Cloud_02, True, 0)
52
53 # Calculation case
54 extension = hydro_doc.CreateObject( KIND_CALCULATION )
55 extension.SetName( "extension" )
56
57 extension.SetAssignmentMode( HYDROData_CalculationCase.MANUAL )
58 extension.AddGeometryObject( domaine_englobant )
59 extension.AddGeometryObject( domaine_original )
60
61 case_geom_group = domaine_englobant.GetGroup( 0 )
62 extension.AddGeometryGroup( case_geom_group )
63 case_geom_group = domaine_original.GetGroup( 0 )
64 extension.AddGeometryGroup( case_geom_group )
65
66 extension.SetBoundaryPolyline( limites_domaine[0] )
67
68 # Start the algorithm of the partition and assignment
69 extension.Update()
70 reg_extension = hydro_doc.FindObjectByName( "extension_Reg_1" )
71 extension_Zone_1 = hydro_doc.FindObjectByName( "extension_Zone_1" )
72 extension_Zone_1.SetColor( QColor( 28, 168, 228 ))
73 reg_extension.AddZone( extension_Zone_1 )
74 reg_original = hydro_doc.FindObjectByName( "extension_Reg_2" )
75 extension_Zone_2 = hydro_doc.FindObjectByName( "extension_Zone_2" )
76 extension_Zone_2.SetMergeType( HYDROData_Zone.Merge_Object )
77 Cloud_02 = hydro_doc.FindObjectByName( "Cloud_02" )
78 extension_Zone_2.SetMergeObject( Cloud_02 )
79 extension_Zone_2.SetColor( QColor( 28, 51, 228 ))
80 reg_original.AddZone( extension_Zone_2 )
81 reg_extension.SetName( "reg_extension" )
82 reg_original.SetName( "reg_original" )
83
84 # Export of the calculation case
85 extension_entry = extension.Export()
86
87 ##----------------------
88 ## --- Geometry
89 ##----------------------
90
91 import GEOM
92 from salome.geom import geomBuilder
93 import math
94 import SALOMEDS
95
96 from salome.hydrotools.hydroGeoMeshUtils import getChildrenInStudy
97
98 geompy = geomBuilder.New()
99
100 print ("Entry:", extension_entry)
101 HYDRO_extension = salome.IDToObject( str( extension_entry ) )
102 print ("Geom shape:", HYDRO_extension)
103 print ("Geom shape name:", HYDRO_extension.GetName())
104
105 [reg_extension] = geompy.SubShapeAll(HYDRO_extension, geompy.ShapeType["FACE"])
106 children = getChildrenInStudy(HYDRO_extension)
107 extension_domaine_original_Outer = children["extension_domaine_original_Outer"]
108
109 if salome.sg.hasDesktop():
110   salome.sg.updateObjBrowser()
111
112 #----------------------
113 #--- Meshing
114 #----------------------
115
116 import  SMESH, SALOMEDS
117 from salome.smesh import smeshBuilder
118 from salome.hydrotools.controls import controlMeshStats, controlSubMeshStats
119
120 smesh = smeshBuilder.New()
121
122 #--- algorithms and hypothesis
123 extensionEnglobante = smesh.Mesh(HYDRO_extension)
124
125 NETGEN_2D = extensionEnglobante.Triangle(algo=smeshBuilder.NETGEN_1D2D)
126 NETGEN_2D_Parameters = NETGEN_2D.Parameters()
127 NETGEN_2D_Parameters.SetMaxSize( 200 )
128 NETGEN_2D_Parameters.SetSecondOrder( 0 )
129 NETGEN_2D_Parameters.SetOptimize( 1 )
130 NETGEN_2D_Parameters.SetFineness( 4 )
131 NETGEN_2D_Parameters.SetMinSize( 5 )
132 NETGEN_2D_Parameters.SetUseSurfaceCurvature( 1 )
133 NETGEN_2D_Parameters.SetFuseEdges( 1 )
134 NETGEN_2D_Parameters.SetQuadAllowed( 0 )
135
136 ([origMeshBrd], status) = smesh.CreateMeshesFromMED(fileMeshBrd)
137 FreeBorders = origMeshBrd.GetGroupByName("FreeBorders")
138
139 Import_1D = extensionEnglobante.UseExisting1DElements(geom=extension_domaine_original_Outer)
140 Source_Edges_1 = Import_1D.SourceEdges( FreeBorders ,1,1)
141
142 isDone = extensionEnglobante.Compute()
143
144 controlMeshStats(extensionEnglobante, 8107, 805, 15885)
145
146 if salome.sg.hasDesktop():
147   salome.sg.updateObjBrowser()