Salome HOME
4587dc31448420e3d77e6ba0f1912cd1e2ff6d66
[modules/hydro.git] / doc / salome / examples / h023_extensionSimpleAmont.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
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 fitShapePointsToMesh(os.path.join(tmpdir, "garonne_2_brd_FreeBorders.shp"),
33                      os.path.join(HYDRO_SAMPLES, 'extension_1_2.shp'),
34                      tmpdir, True, True)
35
36 #----------------------
37 # --- HYDRO
38 #----------------------
39
40 from HYDROPy import *
41 from PyQt5.QtCore import *
42 from PyQt5.QtGui import *
43
44 from salome.hydrotools.hydroGeoMeshUtils import importPolylines, importBathymetry, createImmersibleZone, mergePolylines
45
46 hydro_doc = HYDROData_Document.Document()
47 hydro_doc.SetLocalCS( offsetX, offsetY )
48     
49 limites_original = importPolylines(hydro_doc, os.path.join(tmpdir, "garonne_2_brd_FreeBorders_split.shp"), 'garonne_2_brd_FreeBorders', True, 4)
50 limites_domaine  = importPolylines(hydro_doc, os.path.join(tmpdir, "extension_1_2_adj.shp"), 'extension_1_2', False, 2)
51
52 limite_extension = mergePolylines(hydro_doc, 'limite_extension', [limites_original[0], limites_domaine[0]])
53
54 Cloud_02 = importBathymetry(hydro_doc, "Cloud_02", HYDRO_SAMPLES)
55
56 domaine_extension = createImmersibleZone(hydro_doc, "domaine_extension", limite_extension, Cloud_02, True, 0)
57
58 # Calculation case
59 extension = hydro_doc.CreateObject( KIND_CALCULATION )
60 extension.SetName( "extension" )
61 extension.SetAssignmentMode( HYDROData_CalculationCase.AUTOMATIC )
62 extension.AddGeometryObject( domaine_extension )
63 extension.SetBoundaryPolyline( limite_extension )
64 extension.Update()
65
66 # # Calculation case
67 # extension = hydro_doc.CreateObject( KIND_CALCULATION )
68 # extension.SetName( "extension" )
69 # extension.SetAssignmentMode( HYDROData_CalculationCase.MANUAL )
70 # extension.AddGeometryObject( domaine_extension )
71 # case_geom_group = domaine_extension.GetGroup( 0 )
72 # extension.AddGeometryGroup( case_geom_group )
73 # extension.SetBoundaryPolyline( limite_extension )
74 # extension.SetStricklerTable( Strickler_table_1 )
75 # # Start the algorithm of the partition and assignment
76 # extension.Update()
77 # extension_Reg_1 = hydro_doc.FindObjectByName( "extension_Reg_1" )
78 # extension_Zone_1 = hydro_doc.FindObjectByName( "extension_Zone_1" )
79 # extension_Zone_1.SetColor( QColor( 105, 228, 28 ))
80 # extension_Reg_1.AddZone( extension_Zone_1 )
81 # extension_Reg_1.SetName( "Case_1_Reg_1" )
82
83 # Export of the calculation case
84 extension_entry = extension.Export()
85
86 ##----------------------
87 ## --- Geometry
88 ##----------------------
89
90 import GEOM
91 from salome.geom import geomBuilder
92 import math
93 import SALOMEDS
94
95 from salome.hydrotools.hydroGeoMeshUtils import getChildrenInStudy
96
97 geompy = geomBuilder.New()
98
99 print ("Entry:", extension_entry)
100 HYDRO_extension = salome.IDToObject( str( extension_entry ) )
101 print ("Geom shape:", HYDRO_extension)
102 print ("Geom shape name:", HYDRO_extension.GetName())
103
104 [reg_extension] = geompy.SubShapeAll(HYDRO_extension, geompy.ShapeType["FACE"])
105 #children = getChildrenInStudy(HYDRO_extension)
106 #extension_domaine_original_Outer = children["extension_domaine_original_Outer"]
107 #TODO: better identification
108 extension_domaine_original_Outer = geompy.CreateGroup(HYDRO_extension, geompy.ShapeType["EDGE"])
109 geompy.UnionIDs(extension_domaine_original_Outer, [3])
110 geompy.addToStudyInFather( HYDRO_extension, extension_domaine_original_Outer, 'extension_domaine_original_Outer' )
111
112 if salome.sg.hasDesktop():
113   salome.sg.updateObjBrowser()
114
115 #----------------------
116 #--- Meshing
117 #----------------------
118
119 import  SMESH, SALOMEDS
120 from salome.smesh import smeshBuilder
121 from salome.hydrotools.controls import controlMeshStats, controlSubMeshStats
122
123 smesh = smeshBuilder.New()
124
125 #--- algorithms and hypothesis
126 extensionEnglobante = smesh.Mesh(HYDRO_extension)
127
128 NETGEN_2D = extensionEnglobante.Triangle(algo=smeshBuilder.NETGEN_1D2D)
129 NETGEN_2D_Parameters = NETGEN_2D.Parameters()
130 NETGEN_2D_Parameters.SetMaxSize( 200 )
131 NETGEN_2D_Parameters.SetSecondOrder( 0 )
132 NETGEN_2D_Parameters.SetOptimize( 1 )
133 NETGEN_2D_Parameters.SetFineness( 4 )
134 NETGEN_2D_Parameters.SetMinSize( 5 )
135 NETGEN_2D_Parameters.SetUseSurfaceCurvature( 1 )
136 NETGEN_2D_Parameters.SetFuseEdges( 1 )
137 NETGEN_2D_Parameters.SetQuadAllowed( 0 )
138
139 ([origMeshBrd], status) = smesh.CreateMeshesFromMED(fileMeshBrd)
140 FreeBorders = origMeshBrd.GetGroupByName("FreeBorders")
141
142 Import_1D = extensionEnglobante.UseExisting1DElements(geom=extension_domaine_original_Outer)
143 Source_Edges_1 = Import_1D.SourceEdges( FreeBorders ,1,1)
144
145 isDone = extensionEnglobante.Compute()
146
147 controlMeshStats(extensionEnglobante, 4716, 596, 9193)
148
149 if salome.sg.hasDesktop():
150   salome.sg.updateObjBrowser()