wolfhece 2.1.39__py3-none-any.whl → 2.1.41__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
wolfhece/PyPalette.py CHANGED
@@ -514,10 +514,25 @@ class wolfpalette(wx.Frame, LinearSegmentedColormap):
514
514
 
515
515
  def defaultgray(self):
516
516
  """Palette grise par défaut dans WOLF"""
517
+
517
518
  self.nb = 2
518
519
  self.values = np.asarray([0., 1.], dtype=np.float64)
519
520
  self.colors = np.asarray([[0, 0, 0, 255], [255, 255, 255, 255]], dtype=np.int32)
520
521
 
522
+ # self.nb = 11
523
+ # self.values = np.asarray([0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.], dtype=np.float64)
524
+ # self.colors = np.asarray([[0, 0, 0, 255],
525
+ # [22, 22, 22, 255],
526
+ # [44, 44, 44, 255],
527
+ # [66, 66, 66, 255],
528
+ # [88, 88, 88, 255],
529
+ # [110, 110, 110, 255],
530
+ # [132, 132, 132, 255],
531
+ # [154, 154, 154, 255],
532
+ # [176, 176, 176, 255],
533
+ # [198, 198, 198, 255],
534
+ # [255, 255, 255, 255]], dtype=np.int32)
535
+
521
536
  self.fill_segmentdata()
522
537
 
523
538
  def fill_segmentdata(self):
wolfhece/apps/version.py CHANGED
@@ -5,7 +5,7 @@ class WolfVersion():
5
5
 
6
6
  self.major = 2
7
7
  self.minor = 1
8
- self.patch = 39
8
+ self.patch = 41
9
9
 
10
10
  def __str__(self):
11
11
 
wolfhece/gpuview.py CHANGED
@@ -24,7 +24,6 @@ from math import sqrt,floor
24
24
  from .drawing_obj import Element_To_Draw
25
25
  import logging
26
26
 
27
- GPU_SHADER_PROGRAM_REF = 1
28
27
  _global_gpu_state = dict()
29
28
 
30
29
  GRID_N=100
@@ -278,8 +277,14 @@ class VectorField(Element_To_Draw):
278
277
 
279
278
  super().__init__(idx, plotted, mapviewer, need_for_wx)
280
279
 
281
- if GPU_SHADER_PROGRAM_REF not in _global_gpu_state:
282
- _global_gpu_state[GPU_SHADER_PROGRAM_REF] = _load_program(
280
+ self.mapviewer.SetCurrentContext()
281
+
282
+ self._gpu_program_ref = 1
283
+ while self._gpu_program_ref in _global_gpu_state:
284
+ self._gpu_program_ref +=1
285
+
286
+ if self._gpu_program_ref not in _global_gpu_state:
287
+ _global_gpu_state[self._gpu_program_ref] = _load_program(
283
288
  VECFIELD_VTX_SHADER,
284
289
  VECFIELD_GEOM_SHADER,
285
290
  VECFIELD_FRAG_SHADER)
@@ -314,9 +319,15 @@ class VectorField(Element_To_Draw):
314
319
  self._set_data(x_extent, y_extent)
315
320
 
316
321
  def __del__(self):
322
+
323
+ self.mapviewer.SetCurrentContext()
324
+
317
325
  if self._gl_texture is not None:
318
326
  glDeleteTextures(1,[self._gl_texture])
319
327
 
328
+ if self._gpu_program_ref in _global_gpu_state:
329
+ glDeleteProgram(_global_gpu_state[self._gpu_program_ref])
330
+
320
331
 
321
332
  def update_zoom_factor(self, newfactor):
322
333
 
@@ -417,7 +428,7 @@ class VectorField(Element_To_Draw):
417
428
  # We clear the projection matrix because we will handle
418
429
  # the transformation ourselves.
419
430
  glMatrixMode(GL_PROJECTION)
420
- glPushMatrix()
431
+ # glPushMatrix()
421
432
 
422
433
  glLoadIdentity()
423
434
  zmin, zmax = -99999, 99999
@@ -510,17 +521,18 @@ class VectorField(Element_To_Draw):
510
521
  # Restore the matrix so that next OpenGL programming in the caller is not
511
522
  # broken.
512
523
  glMatrixMode(GL_PROJECTION)
513
- glPopMatrix()
524
+ # glPopMatrix()
514
525
 
515
526
  def _plot(self, projection_matrix):
516
527
  assert self._gl_texture is not None, "Did you set the data ?"
517
528
  if self._gl_buffer == []:
518
529
  return
519
530
 
531
+ self.mapviewer.SetCurrentContext()
520
532
  # We reuse the current model transformation matrix
521
533
  # as well the current viewport.
522
534
 
523
- program = _global_gpu_state[GPU_SHADER_PROGRAM_REF]
535
+ program = _global_gpu_state[self._gpu_program_ref]
524
536
  glUseProgram(program)
525
537
  glBindTexture(GL_TEXTURE_2D, self._gl_texture)
526
538
  glActiveTexture(GL_TEXTURE0)
@@ -0,0 +1,21 @@
1
+ 5
2
+ 4.75767580792308E-03
3
+ 0
4
+ 255
5
+ 255
6
+ 1.41948455371485
7
+ 0
8
+ 0
9
+ 255
10
+ 3.26088282814249
11
+ 106
12
+ 242
13
+ 113
14
+ 7.26363540394232
15
+ 255
16
+ 255
17
+ 0
18
+ 15.5594959259033
19
+ 255
20
+ 0
21
+ 0
@@ -0,0 +1,25 @@
1
+ 6
2
+ 5.96524381637573
3
+ 0
4
+ 255
5
+ 255
6
+ 5.99077210167587
7
+ 0
8
+ 0
9
+ 255
10
+ 6.05
11
+ 106
12
+ 242
13
+ 113
14
+ 6.1
15
+ 255
16
+ 255
17
+ 0
18
+ 6.33
19
+ 255
20
+ 0
21
+ 0
22
+ 6.77020025253296
23
+ 196
24
+ 0
25
+ 0
@@ -0,0 +1,29 @@
1
+ 7
2
+ 4.75767580792308E-03
3
+ 0
4
+ 255
5
+ 255
6
+ 2.6706313965066
7
+ 0
8
+ 0
9
+ 255
10
+ 5.33650511720528
11
+ 255
12
+ 255
13
+ 255
14
+ 8.00237883790396
15
+ 0
16
+ 255
17
+ 0
18
+ 10.6682525586026
19
+ 255
20
+ 255
21
+ 0
22
+ 13.3341262793013
23
+ 255
24
+ 128
25
+ 0
26
+ 16
27
+ 255
28
+ 0
29
+ 0
@@ -0,0 +1,33 @@
1
+ 7
2
+ 0
3
+ 175
4
+ 175
5
+ 175
6
+ .5
7
+ 0
8
+ 0
9
+ 255
10
+ .8
11
+ 128
12
+ 128
13
+ 255
14
+ 1
15
+ 255
16
+ 0
17
+ 0
18
+ 1.4
19
+ 255
20
+ 255
21
+ 0
22
+ 2
23
+ 0
24
+ 255
25
+ 64
26
+ 2.5
27
+ 0
28
+ 128
29
+ 64
30
+ 0
31
+ 16777215
32
+ 0
33
+ 1
@@ -0,0 +1,31 @@
1
+ 6
2
+ 0
3
+ 255
4
+ 0
5
+ 0
6
+ 120
7
+ 255
8
+ 128
9
+ 0
10
+ 240
11
+ 255
12
+ 255
13
+ 0
14
+ 360
15
+ 0
16
+ 255
17
+ 0
18
+ 3600
19
+ 0
20
+ 0
21
+ 255
22
+ 7200
23
+ 0
24
+ 255
25
+ 255
26
+ 0
27
+ 120
28
+ 240
29
+ 360
30
+ 3600
31
+ 7200
@@ -0,0 +1,66 @@
1
+ 13
2
+ 0
3
+ 128
4
+ 255
5
+ 255
6
+ .1
7
+ 89
8
+ 172
9
+ 255
10
+ .2
11
+ 72
12
+ 72
13
+ 255
14
+ .3
15
+ 0
16
+ 0
17
+ 255
18
+ .4
19
+ 0
20
+ 128
21
+ 0
22
+ .5
23
+ 0
24
+ 221
25
+ 55
26
+ .6
27
+ 128
28
+ 255
29
+ 128
30
+ .7
31
+ 255
32
+ 255
33
+ 0
34
+ .8
35
+ 255
36
+ 128
37
+ 0
38
+ .9
39
+ 255
40
+ 0
41
+ 0
42
+ 1
43
+ 128
44
+ 0
45
+ 0
46
+ 1.5
47
+ 192
48
+ 192
49
+ 192
50
+ 3
51
+ 143
52
+ 143
53
+ 143
54
+ 0
55
+ .1
56
+ .2
57
+ .3
58
+ .4
59
+ .5
60
+ .6
61
+ .7
62
+ .8
63
+ .9
64
+ 1
65
+ 1.5
66
+ 3
@@ -0,0 +1,65 @@
1
+ 16
2
+ 218.289993286133
3
+ 128
4
+ 255
5
+ 255
6
+ 220.168574888374
7
+ 89
8
+ 172
9
+ 255
10
+ 220.23739486608
11
+ 72
12
+ 72
13
+ 255
14
+ 220.283471411618
15
+ 0
16
+ 0
17
+ 255
18
+ 220.328414957446
19
+ 0
20
+ 128
21
+ 0
22
+ 220.415893035239
23
+ 0
24
+ 221
25
+ 55
26
+ 220.491201809562
27
+ 128
28
+ 255
29
+ 128
30
+ 220.569688769798
31
+ 255
32
+ 255
33
+ 0
34
+ 220.858442290845
35
+ 255
36
+ 128
37
+ 0
38
+ 221.012174740145
39
+ 255
40
+ 128
41
+ 0
42
+ 221.23051386826
43
+ 255
44
+ 0
45
+ 0
46
+ 221.659336829079
47
+ 209
48
+ 71
49
+ 12
50
+ 222.780627152613
51
+ 128
52
+ 0
53
+ 0
54
+ 224.601654811244
55
+ 128
56
+ 0
57
+ 0
58
+ 228.620829812251
59
+ 111
60
+ 111
61
+ 111
62
+ 244.470001220703
63
+ 143
64
+ 143
65
+ 143
@@ -0,0 +1,65 @@
1
+ 16
2
+ 0.0
3
+ 128
4
+ 255
5
+ 255
6
+ 0.2
7
+ 89
8
+ 172
9
+ 255
10
+ 0.4
11
+ 72
12
+ 72
13
+ 255
14
+ 0.6000000000000001
15
+ 0
16
+ 0
17
+ 255
18
+ 0.8
19
+ 0
20
+ 128
21
+ 0
22
+ 1.0
23
+ 0
24
+ 221
25
+ 55
26
+ 1.2000000000000002
27
+ 128
28
+ 255
29
+ 128
30
+ 1.4000000000000001
31
+ 255
32
+ 255
33
+ 0
34
+ 1.6
35
+ 255
36
+ 128
37
+ 0
38
+ 1.8
39
+ 235
40
+ 174
41
+ 63
42
+ 2.0
43
+ 255
44
+ 0
45
+ 0
46
+ 2.2
47
+ 209
48
+ 71
49
+ 12
50
+ 2.4000000000000004
51
+ 128
52
+ 0
53
+ 0
54
+ 2.6
55
+ 185
56
+ 0
57
+ 0
58
+ 2.8000000000000003
59
+ 111
60
+ 111
61
+ 111
62
+ 3.0
63
+ 192
64
+ 192
65
+ 192
wolfhece/pyviews.py CHANGED
@@ -11,18 +11,25 @@ copying or distribution of this file, via any medium, is strictly prohibited.
11
11
  import logging
12
12
 
13
13
  from .drawing_obj import Element_To_Draw
14
- from .wolf_array import WolfArray,WolfArrayMB, VERSION_RGB
14
+ from .wolf_array import WolfArray, WolfArrayMB, VERSION_RGB, wolfpalette
15
15
  from .PyParams import Wolf_Param, key_Param, Type_Param
16
16
 
17
+
17
18
  class WolfViews(Element_To_Draw):
19
+ """ Class to permit complex views, combination of
20
+ different objects which can be plotted.
21
+
22
+ Inherits from Element_To_Draw."""
18
23
 
19
24
  def __init__(self, idx: str = '', plotted: bool = True, mapviewer=None, need_for_wx: bool = False) -> None:
25
+ """ Constructor of the class WolfViews."""
26
+
20
27
  super().__init__(idx, plotted, mapviewer, need_for_wx)
21
28
 
22
29
  self.view = []
23
30
  self.pals = []
24
31
 
25
- def read_from_file(self,fn):
32
+ def read_from_file(self, fn):
26
33
  myproject = Wolf_Param(None, filename=fn, toShow=False)
27
34
 
28
35
  mykeys = ['cross_sections', 'vector', 'array']
@@ -57,7 +64,6 @@ class WolfViews(Element_To_Draw):
57
64
  # else:
58
65
  # wx.LogMessage(_('Bad parameter in project file - array : ')+ curname[key_Param.VALUE])
59
66
 
60
-
61
67
  # if 'wolf2d' in myproject.myparams.keys():
62
68
  # for curid, curname in zip(myproject.myparams['wolf2d'].keys(), myproject.myparams['wolf2d'].values()):
63
69
  # if exists(curname[key_Param.VALUE]):
@@ -157,58 +163,110 @@ class WolfViews(Element_To_Draw):
157
163
  # del wait
158
164
 
159
165
  def change_gui(self, newmapviewer):
166
+ """ Change the mapviewer of the view and all its elements."""
167
+
160
168
  self.mapviewer = newmapviewer
161
169
 
162
170
  for cur in self.view:
163
- if isinstance(cur,WolfArray) or isinstance(cur,WolfArrayMB):
171
+ if isinstance(cur, WolfArray) or isinstance(cur, WolfArrayMB):
164
172
  cur.change_gui(newmapviewer)
165
173
  else:
166
174
  cur.mapviewer = newmapviewer
167
175
 
168
- def add_elemt(self,added_elemt,pal=None):
176
+ def add_elemt(self, added_elemt, pal=None):
177
+ """ Add an element to the view.
178
+
179
+ :param added_elemt: Element to add.
180
+ :param pal: Palette to use for the element.
181
+ """
182
+
183
+ assert isinstance(added_elemt, Element_To_Draw), 'The element to add must be a subclass of Element_To_Draw'
184
+
169
185
  self.view.append(added_elemt)
170
186
  self.pals.append(pal)
171
187
 
172
- def add_elemts(self,added_elemts:list,pals=None):
188
+ def add_elemts(self, added_elemts: list, pals=None):
189
+ """ Add a list of elements to the view.
190
+
191
+ :param added_elemts: List of elements to add.
192
+ :param pals: List of palettes to use for the elements.
193
+ """
194
+
195
+ for cur in added_elemts:
196
+ assert isinstance(cur, Element_To_Draw), 'The element to add must be a subclass of Element_To_Draw'
197
+
173
198
  self.view += added_elemts
174
199
 
175
200
  if pals is None:
176
201
  self.pals += [None]*len(added_elemts)
177
202
  else:
203
+ if len(pals) != len(added_elemts):
204
+ logging.warning('The number of palettes must be the same as the number of elements.')
205
+
206
+ if len(pals) < len(added_elemts):
207
+ logging.warning('The missing palettes will be set to None.')
208
+ pals += [None]*(len(added_elemts)-len(pals))
209
+ else:
210
+ logging.warning('The extra palettes will be ignored.')
211
+ pals = pals[:len(added_elemts)]
212
+
178
213
  self.pals += pals
179
214
 
180
215
  def plot(self, sx=None, sy=None, xmin=None, ymin=None, xmax=None, ymax=None, size=None):
216
+ """ Plot the view. """
181
217
 
182
218
  if self.plotted:
183
219
 
184
220
  for cur, pal in zip(self.view, self.pals):
221
+ # iterate over the elements and their palettes
222
+ pal: wolfpalette
223
+
185
224
  oldplotted = cur.plotted
186
- cur.plotted=True
225
+ cur.plotted = True
187
226
 
188
- if isinstance(cur,WolfArray):
189
- if VERSION_RGB ==1:
227
+ if isinstance(cur, WolfArray):
228
+ #
229
+ if VERSION_RGB == 1:
230
+ # Will be deprecated in future versions
190
231
  if cur.rgb is None:
191
232
  if pal is not None:
192
233
  cur.rgb = pal.get_rgba(cur.array)
193
234
  else:
194
235
  cur.mypal.defaultgray_minmax(cur.array)
195
236
  cur.rgb = cur.mypal.get_rgba(cur.array)
237
+ cur.plot(sx, sy, xmin, ymin, xmax, ymax)
196
238
  elif VERSION_RGB == 2:
197
239
  if pal is None:
198
- cur.mypal.defaultgray_minmax(cur.array)
240
+ # using the current palette
241
+ cur.plot(sx, sy, xmin, ymin, xmax, ymax)
242
+ else:
243
+ # using the palette passed as argument
244
+
245
+ # memorize the current palette
246
+ oldpal = cur.mypal
247
+ # change the palette
248
+ cur.mypal = pal
249
+ # plot the array
250
+ cur.plot(sx, sy, xmin, ymin, xmax, ymax)
251
+ # restore the palette
252
+ cur.mypal = oldpal
253
+
254
+ else:
255
+ cur.plot(sx, sy, xmin, ymin, xmax, ymax)
199
256
 
200
- cur.plot(sx,sy,xmin,ymin,xmax,ymax)
201
257
  cur.plotted = oldplotted
202
258
 
203
259
  def find_minmax(self):
260
+ """ Find the spatial bounds of the view."""
261
+
204
262
  xmin = 1.e30
205
263
  ymin = 1.e30
206
264
  xmax = -1.e30
207
265
  ymax = -1.e30
208
266
 
209
267
  for cur in self.view:
210
- if isinstance(cur,WolfArray) or isinstance(cur,WolfArrayMB):
211
- x,y = cur.get_bounds()
268
+ if isinstance(cur, WolfArray) or isinstance(cur, WolfArrayMB):
269
+ x, y = cur.get_bounds()
212
270
  xmin = min(x[0], xmin)
213
271
  xmax = max(x[1], xmax)
214
272
  ymin = min(y[0], ymin)
@@ -72,6 +72,7 @@ class IC_scenario(Enum):
72
72
  WATERDEPTH = "h.npy"
73
73
  DISCHARGE_X = 'qx.npy'
74
74
  DISCHARGE_Y = 'qy.npy'
75
+ BATHYMETRY = 'bathymetry.npy'
75
76
 
76
77
  ALL_EXTENSIONS = [cur.value for cur in GPU_2D_file_extensions]
77
78
 
@@ -134,11 +135,13 @@ class Hydrograph_scenario():
134
135
 
135
136
  class InitialConditions_scenario():
136
137
  """ Initial conditions for a scenario """
138
+
137
139
  def __init__(self, dir:Path) -> None:
138
140
 
139
- self.h = None
140
- self.qx = None
141
- self.qy = None
141
+ self.h: np.ndarray = None
142
+ self.qx: np.ndarray = None
143
+ self.qy: np.ndarray = None
144
+ self.bathy: np.ndarray = None
142
145
 
143
146
  if (dir / IC_scenario.WATERDEPTH.value).exists():
144
147
  self.h = np.load(dir / IC_scenario.WATERDEPTH.value)
@@ -146,7 +149,37 @@ class InitialConditions_scenario():
146
149
  self.qx = np.load(dir / IC_scenario.DISCHARGE_X.value)
147
150
  if (dir / IC_scenario.DISCHARGE_Y.value).exists():
148
151
  self.qy = np.load(dir / IC_scenario.DISCHARGE_Y.value)
152
+ if (dir /IC_scenario.BATHYMETRY.value).exists():
153
+ self.bathy = np.load(dir / IC_scenario.BATHYMETRY.value)
154
+
155
+ @property
156
+ def z_elevation(self) -> np.ndarray:
157
+ """ Return the elevation of the water surface """
158
+
159
+ return self.bathy + self.h
160
+
161
+ def set_h_from_z(self, z: np.ndarray):
162
+ """ Set the water depth from the elevation of the water surface """
163
+
164
+ assert z.shape == self.bathy.shape, _('Bad shape for z !')
149
165
 
166
+ self.h = z - self.bathy
167
+
168
+ self.h[self.h < 0.] = 0.
169
+ self.qx[self.h < 0.] = 0.
170
+ self.qy[self.h < 0.] = 0.
171
+
172
+ def save(self, dir:Path):
173
+ """ Save the initial conditions """
174
+
175
+ if self.h is not None:
176
+ np.save(dir / IC_scenario.WATERDEPTH.value, self.h)
177
+ if self.qx is not None:
178
+ np.save(dir / IC_scenario.DISCHARGE_X.value, self.qx)
179
+ if self.qy is not None:
180
+ np.save(dir / IC_scenario.DISCHARGE_Y.value, self.qy)
181
+ if self.bathy is not None:
182
+ np.save(dir / IC_scenario.BATHYMETRY.value, self.bathy)
150
183
 
151
184
  class Config_Manager_2D_GPU:
152
185
  """
@@ -814,6 +847,7 @@ class Config_Manager_2D_GPU:
814
847
 
815
848
  def load_ic(self, path:Path) -> InitialConditions_scenario:
816
849
  """ Load initial conditions from a path """
850
+
817
851
  low_keys = [Path(curkey).name.lower() for curkey in self.configs.keys()]
818
852
  if INITIAL_CONDITIONS in low_keys:
819
853
  return InitialConditions_scenario(self.workingdir / INITIAL_CONDITIONS / path)
@@ -878,10 +912,10 @@ class Config_Manager_2D_GPU:
878
912
  else:
879
913
  logging.error(_("No 'bathymetry.tif' file found in the root directory !"))
880
914
 
881
- def create_simulation(self,
882
- dir:Path,
883
- idx_hydros:list[int] = [-1],
884
- delete_existing:bool = False,
915
+ def create_simulation(self,
916
+ dir:Path,
917
+ idx_hydros:list[int] = [-1],
918
+ delete_existing:bool = False,
885
919
  preserve_ic:bool=False) -> list[Path]:
886
920
  """ Create a simulation from different hydrographs """
887
921
 
@@ -1139,6 +1173,31 @@ class Config_Manager_2D_GPU:
1139
1173
 
1140
1174
  return self.mapviewer
1141
1175
 
1176
+ def transfer_ic(self, dir1: Path, dir2: Path):
1177
+ """ Transfer IC from one sim to another """
1178
+
1179
+ ic1 = self.load_ic(dir1)
1180
+ ic2 = self.load_ic(dir2)
1181
+
1182
+ ic2.qx = ic1.qx
1183
+ ic2.qy = ic1.qy
1184
+ ic2.set_h_from_z(ic1.z_elevation)
1185
+
1186
+ ic2.save(dir2)
1187
+
1188
+ def extract_tif(self, from_path:Path, to_path:Path):
1189
+ """ Extract tif files from IC """
1190
+
1191
+ from_path = Path(from_path)
1192
+ to_path = Path(to_path)
1193
+
1194
+ prefix = from_path.parent.parent.parent.name + '_' + from_path.parent.parent.name + '_' + from_path.name
1195
+
1196
+ ext = ['h.npy', 'qx.npy', 'qy.npy', 'bathymetry.npy']
1197
+
1198
+ for curext in ext:
1199
+ tmp_array = WolfArray(from_path / curext)
1200
+ tmp_array.write_all((to_path / (prefix + '_' + curext)).with_suffix('.tif'))
1142
1201
 
1143
1202
  class UI_Manager_2D_GPU():
1144
1203
  """ User Interface for scenario 2D GPU """
@@ -1247,17 +1306,25 @@ class UI_Manager_2D_GPU():
1247
1306
  self._create_vec.Bind(wx.EVT_BUTTON,self.oncreatevec)
1248
1307
  self._create_vec.SetToolTip(_('Create a .vecz file (with contour and global bounds) from all bathymetry and manning .tif files\nBe sure that all files are right named !\n\n - bathymetry must contain "bath"\n - manning must contain "mann"\n - infiltration must contain "infil"'))
1249
1308
 
1250
- self.checkconsistency = wx.Button(self._frame,label = _('Check consistency'))
1251
- self.checkconsistency.Bind(wx.EVT_BUTTON,self.oncheck_consistency)
1252
- self.checkconsistency.SetToolTip(_('Check consistency of the scenario\n\n - bathymetry.tif\n - manning.tif\n - infiltration.tif\n - hydrographs\n - initial conditions\n - boundary conditions\n - scripts'))
1309
+ self._checkconsistency = wx.Button(self._frame,label = _('Check consistency'))
1310
+ self._checkconsistency.Bind(wx.EVT_BUTTON,self.oncheck_consistency)
1311
+ self._checkconsistency.SetToolTip(_('Check consistency of the scenario\n\n - bathymetry.tif\n - manning.tif\n - infiltration.tif\n - hydrographs\n - initial conditions\n - boundary conditions\n - scripts'))
1312
+
1313
+ self._createsim = wx.Button(self._frame,label = _('Create simulation(s)'))
1314
+ self._createsim.Bind(wx.EVT_BUTTON,self.oncreate_simulation)
1315
+ self._createsim.SetToolTip(_('Create simulation(s) from selected hydrographs'))
1316
+
1317
+ self._transfer_ic = wx.Button(self._frame,label = _('Transfer initial conditions'))
1318
+ self._transfer_ic.Bind(wx.EVT_BUTTON,self.ontransfer_ic)
1319
+ self._transfer_ic.SetToolTip(_('Transfer initial conditions from a simulation to another'))
1253
1320
 
1254
- self.createsim = wx.Button(self._frame,label = _('Create simulation(s)'))
1255
- self.createsim.Bind(wx.EVT_BUTTON,self.oncreate_simulation)
1256
- self.createsim.SetToolTip(_('Create simulation(s) from selected hydrographs'))
1321
+ self._extract_tif = wx.Button(self._frame,label = _('Extract .tif files for all selected scenarios'))
1322
+ self._extract_tif.Bind(wx.EVT_BUTTON,self.onextract_tif)
1323
+ self._extract_tif.SetToolTip(_('Extract .tif files for all selected scenarios'))
1257
1324
 
1258
- self.runbatch = wx.Button(self._frame,label = _('Run batch file !'))
1259
- self.runbatch.Bind(wx.EVT_BUTTON,self.onrun_batch)
1260
- self.runbatch.SetToolTip(_('Run the batch file on local machine\n\n - The batch file must be created before\n - The batch file must be a .bat file'))
1325
+ self._runbatch = wx.Button(self._frame,label = _('Run batch file !'))
1326
+ self._runbatch.Bind(wx.EVT_BUTTON,self.onrun_batch)
1327
+ self._runbatch.SetToolTip(_('Run the batch file on local machine\n\n - The batch file must be created before\n - The batch file must be a .bat file'))
1261
1328
 
1262
1329
  self.listsims = wx.Button(self._frame,label = _('List simulation(s)'))
1263
1330
  self.listsims.Bind(wx.EVT_BUTTON,self.onlist_simulation)
@@ -1290,11 +1357,13 @@ class UI_Manager_2D_GPU():
1290
1357
  sizer_buttons.Add(self._create_void_scripts,1,wx.EXPAND)
1291
1358
  sizer_buttons.Add(self._create_vrt,1,wx.EXPAND)
1292
1359
  sizer_buttons.Add(self._translate_vrt,1,wx.EXPAND)
1293
- sizer_buttons.Add(self.checkconsistency,1,wx.EXPAND)
1360
+ sizer_buttons.Add(self._checkconsistency,1,wx.EXPAND)
1294
1361
  sizer_buttons.Add(self._create_vec,1,wx.EXPAND)
1295
1362
  sizer_buttons.Add(self.listsims,1,wx.EXPAND)
1296
- sizer_buttons.Add(self.createsim,1,wx.EXPAND)
1297
- sizer_buttons.Add(self.runbatch,1,wx.EXPAND)
1363
+ sizer_buttons.Add(self._createsim,1,wx.EXPAND)
1364
+ sizer_buttons.Add(self._runbatch,1,wx.EXPAND)
1365
+ sizer_buttons.Add(self._transfer_ic,1,wx.EXPAND)
1366
+ sizer_buttons.Add(self._extract_tif,1,wx.EXPAND)
1298
1367
  sizer_buttons.Add(sizer_txt_ckd,1,wx.EXPAND)
1299
1368
 
1300
1369
  # tree, buttons -> horizontal sizer
@@ -1467,7 +1536,48 @@ class UI_Manager_2D_GPU():
1467
1536
 
1468
1537
  return idx
1469
1538
 
1470
- def oncreate_simulation(self,e:wx.MouseEvent):
1539
+ def onextract_tif(self, e:wx.MouseEvent):
1540
+ """ Extraction des fichiers tif """
1541
+
1542
+ logging.info(_('Extracting tif files ...'))
1543
+
1544
+ sims = self.get_sims_only()
1545
+
1546
+ with wx.DirDialog(None, _('Choose a directory to store tif files'), style = wx.DD_DIR_MUST_EXIST) as dlg:
1547
+ ret = dlg.ShowModal()
1548
+ if ret != wx.ID_OK:
1549
+ return
1550
+
1551
+ wdir = dlg.GetPath()
1552
+
1553
+ for cursim in sims:
1554
+ self._parent.extract_tif(cursim['path'], wdir)
1555
+
1556
+ logging.info(_('... done !'))
1557
+
1558
+ def ontransfer_ic(self, e:wx.MouseEvent):
1559
+ """ Transfert des conditions initiales """
1560
+
1561
+ logging.info(_('Transferring initial conditions ...'))
1562
+
1563
+ with wx.DirDialog(None, _('Choose the source scenario directory'), style = wx.DD_DIR_MUST_EXIST) as dlg:
1564
+ ret = dlg.ShowModal()
1565
+ if ret != wx.ID_OK:
1566
+ return
1567
+
1568
+ wdir = dlg.GetPath()
1569
+
1570
+ with wx.DirDialog(None, _('Choose the destination scenario directory'), style = wx.DD_DIR_MUST_EXIST) as dlg:
1571
+ ret = dlg.ShowModal()
1572
+ if ret != wx.ID_OK:
1573
+ return
1574
+
1575
+ wdir2 = dlg.GetPath()
1576
+
1577
+ self._parent.transfer_ic(Path(wdir), Path(wdir2))
1578
+
1579
+
1580
+ def oncreate_simulation(self, e:wx.MouseEvent):
1471
1581
  """ Creation d'une simulation """
1472
1582
 
1473
1583
  logging.info(_('Creating simulation ...'))
@@ -1584,9 +1694,10 @@ class UI_Manager_2D_GPU():
1584
1694
  checked = self._treelist.GetCheckedState(curitem) == wx.CHK_CHECKED
1585
1695
 
1586
1696
  if isinstance(mydata, dict):
1587
- if mydata[IS_SIMUL]:
1588
- if checked or force:
1589
- sims += [mydata]
1697
+ if IS_SIMUL in mydata:
1698
+ if mydata[IS_SIMUL]:
1699
+ if checked or force:
1700
+ sims += [mydata]
1590
1701
 
1591
1702
  curitem = self._treelist.GetNextItem(curitem)
1592
1703
  # curitem = self._treelist.GetItemParent(curitem)
@@ -1867,7 +1978,7 @@ class UI_Manager_2D_GPU():
1867
1978
  newid = str(mydata.name)
1868
1979
  while newid in ids:
1869
1980
  newid = newid + '_'
1870
-
1981
+
1871
1982
  self._parent.mapviewer.add_object('array', newobj=myarray, id=newid)
1872
1983
 
1873
1984
  elif mydata.name.endswith(GPU_2D_file_extensions.TXT.value):
wolfhece/wolf_array.py CHANGED
@@ -4010,25 +4010,36 @@ class SelectionDataMB(SelectionData):
4010
4010
  curblock.SelectionData.select_underpoly(myvect)
4011
4011
 
4012
4012
  def update_nb_nodes_selection(self):
4013
+ """ Update the number of nodes selected """
4013
4014
 
4015
+ # Get infos from all blocks
4014
4016
  ret = []
4015
4017
  for curblock in self.parent.active_blocks:
4016
4018
  ret.append(curblock.SelectionData.update_nb_nodes_selection())
4017
4019
 
4020
+ # sum all the nodes
4018
4021
  nb = np.sum([cur[0] for cur in ret])
4019
- xmin = np.min([cur[1] for cur in ret if cur[1] != -99999.])
4020
- ymin = np.min([cur[3] for cur in ret if cur[3] != -99999.])
4021
- xmax = np.max([cur[2] for cur in ret if cur[2] != -99999.])
4022
- ymax = np.max([cur[4] for cur in ret if cur[4] != -99999.])
4022
+
4023
+ if nb > 0 :
4024
+ xmin = np.min([cur[1] for cur in ret if cur[1] != -99999.])
4025
+ ymin = np.min([cur[3] for cur in ret if cur[3] != -99999.])
4026
+ xmax = np.max([cur[2] for cur in ret if cur[2] != -99999.])
4027
+ ymax = np.max([cur[4] for cur in ret if cur[4] != -99999.])
4023
4028
 
4024
4029
  if self.parent.myops is not None:
4025
4030
 
4026
4031
  self.parent.myops.nbselect.SetLabelText(str(nb))
4032
+
4027
4033
  if nb>0:
4028
4034
  self.parent.myops.minx.SetLabelText('{:.3f}'.format(xmin))
4029
4035
  self.parent.myops.miny.SetLabelText('{:.3f}'.format(ymin))
4030
4036
  self.parent.myops.maxx.SetLabelText('{:.3f}'.format(xmax))
4031
4037
  self.parent.myops.maxy.SetLabelText('{:.3f}'.format(ymax))
4038
+ else:
4039
+ self.parent.myops.minx.SetLabelText('')
4040
+ self.parent.myops.miny.SetLabelText('')
4041
+ self.parent.myops.maxx.SetLabelText('')
4042
+ self.parent.myops.maxy.SetLabelText('')
4032
4043
 
4033
4044
 
4034
4045
  def condition_select(self, cond, condval, condval2=0, usemask=False):
@@ -1566,12 +1566,12 @@ class OneWolfResult:
1566
1566
  elif which==views_2D.VECTOR_FIELD_Q:
1567
1567
  self._current=(self.qx**2.+self.qy**2.)**.5
1568
1568
  nullvalue = self.qx.nullvalue
1569
- self._vec_field = VectorField(self.qx.array, self.qy.array, self.qx.get_bounds(), self.qx.dx, self.qy.dy, minsize=self._min_field_size)
1569
+ self._vec_field = VectorField(self.qx.array, self.qy.array, self.qx.get_bounds(), self.qx.dx, self.qy.dy, minsize=self._min_field_size, mapviewer=self.parent.mapviewer)
1570
1570
  elif which==views_2D.VECTOR_FIELD_U:
1571
1571
  ux = self.qx/self.waterdepth
1572
1572
  uy = self.qy/self.waterdepth
1573
1573
  self._current=(ux**2.+uy**2.)**.5
1574
- self._vec_field = VectorField(ux.array, uy.array, ux.get_bounds(), ux.dx, ux.dy, minsize=self._min_field_size)
1574
+ self._vec_field = VectorField(ux.array, uy.array, ux.get_bounds(), ux.dx, ux.dy, minsize=self._min_field_size, mapviewer=self.parent.mapviewer)
1575
1575
 
1576
1576
  nullvalue = self.qx.nullvalue
1577
1577
 
@@ -1580,7 +1580,7 @@ class OneWolfResult:
1580
1580
  self._current = (self.qx**2.+self.qy**2.)**.5
1581
1581
  self._view = WolfViews()
1582
1582
 
1583
- self._vec_field = VectorField(self.qx.array, self.qy.array, self.qx.get_bounds(), self.qx.dx, self.qy.dy, minsize=self._min_field_size)
1583
+ self._vec_field = VectorField(self.qx.array, self.qy.array, self.qx.get_bounds(), self.qx.dx, self.qy.dy, minsize=self._min_field_size, mapviewer=self.parent.mapviewer)
1584
1584
  self._view.add_elemts([self._current, self._vec_field])
1585
1585
 
1586
1586
  nullvalue = self.qx.nullvalue
@@ -1593,7 +1593,7 @@ class OneWolfResult:
1593
1593
  ux = self.qx/self.waterdepth
1594
1594
  uy = self.qy/self.waterdepth
1595
1595
 
1596
- self._vec_field = VectorField(ux.array, uy.array, self.qx.get_bounds(), self.qx.dx, self.qy.dy, minsize=self._min_field_size)
1596
+ self._vec_field = VectorField(ux.array, uy.array, self.qx.get_bounds(), self.qx.dx, self.qy.dy, minsize=self._min_field_size, mapviewer=self.parent.mapviewer)
1597
1597
  self._view.add_elemts([self._current, self._vec_field])
1598
1598
 
1599
1599
  nullvalue = self.qx.nullvalue
@@ -1606,7 +1606,7 @@ class OneWolfResult:
1606
1606
  ux = self.qx/self.waterdepth
1607
1607
  uy = self.qy/self.waterdepth
1608
1608
 
1609
- self._vec_field = VectorField(ux.array, uy.array, self.qx.get_bounds(), self.qx.dx, self.qy.dy, minsize=self._min_field_size)
1609
+ self._vec_field = VectorField(ux.array, uy.array, self.qx.get_bounds(), self.qx.dx, self.qy.dy, minsize=self._min_field_size, mapviewer=self.parent.mapviewer)
1610
1610
  self._view.add_elemts([self._current, self._vec_field])
1611
1611
 
1612
1612
  nullvalue = self.waterdepth.nullvalue
@@ -1616,7 +1616,7 @@ class OneWolfResult:
1616
1616
  self._current = self.waterdepth+self.top
1617
1617
  self._view = WolfViews()
1618
1618
 
1619
- self._vec_field = VectorField(self.qx.array, self.qy.array, self.qx.get_bounds(), self.qx.dx, self.qy.dy, minsize=self._min_field_size)
1619
+ self._vec_field = VectorField(self.qx.array, self.qy.array, self.qx.get_bounds(), self.qx.dx, self.qy.dy, minsize=self._min_field_size, mapviewer=self.parent.mapviewer)
1620
1620
 
1621
1621
  self._view.add_elemts([self._current, self._vec_field])
1622
1622
 
@@ -1626,7 +1626,7 @@ class OneWolfResult:
1626
1626
 
1627
1627
  self._current = self.waterdepth
1628
1628
  self._view = WolfViews()
1629
- self._vec_field =VectorField(self.qx.array, self.qy.array, self.qx.get_bounds(), self.qx.dx, self.qy.dy, minsize=self._min_field_size)
1629
+ self._vec_field =VectorField(self.qx.array, self.qy.array, self.qx.get_bounds(), self.qx.dx, self.qy.dy, minsize=self._min_field_size, mapviewer=self.parent.mapviewer)
1630
1630
  self._view.add_elemts([self._current, self._vec_field])
1631
1631
 
1632
1632
  nullvalue = self.waterdepth.nullvalue
@@ -1639,7 +1639,7 @@ class OneWolfResult:
1639
1639
  ux = self.qx/self.waterdepth
1640
1640
  uy = self.qy/self.waterdepth
1641
1641
 
1642
- self._vec_field =VectorField(ux.array, uy.array, self.qx.get_bounds(), self.qx.dx, self.qy.dy, minsize=self._min_field_size)
1642
+ self._vec_field =VectorField(ux.array, uy.array, self.qx.get_bounds(), self.qx.dx, self.qy.dy, minsize=self._min_field_size, mapviewer=self.parent.mapviewer)
1643
1643
  self._view.add_elemts([self._current, self._vec_field])
1644
1644
 
1645
1645
  nullvalue = self.waterdepth.nullvalue
@@ -1649,7 +1649,7 @@ class OneWolfResult:
1649
1649
  self._current = self.waterdepth+self.top
1650
1650
  self._view = WolfViews()
1651
1651
 
1652
- self._vec_field =VectorField(self.qx.array, self.qy.array, self.qx.get_bounds(), self.qx.dx, self.qy.dy, minsize=self._min_field_size)
1652
+ self._vec_field =VectorField(self.qx.array, self.qy.array, self.qx.get_bounds(), self.qx.dx, self.qy.dy, minsize=self._min_field_size, mapviewer=self.parent.mapviewer)
1653
1653
  self._view.add_elemts([self.top, self._current, self._vec_field])
1654
1654
 
1655
1655
  nullvalue = self.waterdepth.nullvalue
@@ -1660,7 +1660,7 @@ class OneWolfResult:
1660
1660
  self.waterdepth.mypal.defaultblue_minmax(self.waterdepth.array)
1661
1661
  self._view = WolfViews()
1662
1662
 
1663
- self._vec_field =VectorField(self.qx.array, self.qy.array, self.qx.get_bounds(), self.qx.dx, self.qy.dy, minsize=self._min_field_size)
1663
+ self._vec_field =VectorField(self.qx.array, self.qy.array, self.qx.get_bounds(), self.qx.dx, self.qy.dy, minsize=self._min_field_size, mapviewer=self.parent.mapviewer)
1664
1664
  self._view.add_elemts([self.top, self._current, self._vec_field])
1665
1665
 
1666
1666
  nullvalue = self.waterdepth.nullvalue
@@ -1674,7 +1674,7 @@ class OneWolfResult:
1674
1674
  ux = self.qx/self.waterdepth
1675
1675
  uy = self.qy/self.waterdepth
1676
1676
 
1677
- self._vec_field =VectorField(ux.array, uy.array, self.qx.get_bounds(), self.qx.dx, self.qy.dy, minsize=self._min_field_size)
1677
+ self._vec_field =VectorField(ux.array, uy.array, self.qx.get_bounds(), self.qx.dx, self.qy.dy, minsize=self._min_field_size, mapviewer=self.parent.mapviewer)
1678
1678
  self._view.add_elemts([self.top, self._current, self._vec_field ])
1679
1679
 
1680
1680
  nullvalue = self.waterdepth.nullvalue
@@ -4045,8 +4045,11 @@ class Wolfresults_2D(Element_To_Draw):
4045
4045
  self.palgray.defaultgray()
4046
4046
  self.palblue.defaultblue()
4047
4047
 
4048
- self.palgray.values[0],self.palgray.values[-1] = self.get_min_max(views_2D.TOPOGRAPHY)
4049
- self.palblue.values[0],self.palblue.values[-1] = self.get_min_max(views_2D.WATERDEPTH)
4048
+ locmin, locmax = self.get_min_max(views_2D.TOPOGRAPHY)
4049
+ self.palgray.distribute_values(locmin, locmax)
4050
+
4051
+ locmin, locmax = self.get_min_max(views_2D.WATERDEPTH)
4052
+ self.palblue.distribute_values(locmin, locmax)
4050
4053
 
4051
4054
  if self.mypal.automatic:
4052
4055
  # self.mypal.default16()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: wolfhece
3
- Version: 2.1.39
3
+ Version: 2.1.41
4
4
  Author-email: Pierre Archambeau <pierre.archambeau@uliege.be>
5
5
  License: Copyright (c) 2024 University of Liege. All rights reserved.
6
6
  Project-URL: Homepage, https://uee.uliege.be/hece
@@ -10,7 +10,7 @@ wolfhece/PyDraw.py,sha256=MQO149Cp8QtxWceXpKWLsDbE6JBrVbqEWoAOXWfHl2w,390751
10
10
  wolfhece/PyGui.py,sha256=_1LKelusQ-FS0AtgpwFiXKMZ2glky7K1WINTI93H0k0,103438
11
11
  wolfhece/PyGuiHydrology.py,sha256=f60E8K9eGTnRq5RDF6yvt-ahf2AYegwQ9t25zZ2Mk1A,14946
12
12
  wolfhece/PyHydrographs.py,sha256=jwtSNMMACwarxrtN1UeQYth99UNrhwPx1IGgUwcooHA,3774
13
- wolfhece/PyPalette.py,sha256=uxibQSz5u1q8bgZv-VId6o_SI5TTfLHPs9DpJomVwSA,27179
13
+ wolfhece/PyPalette.py,sha256=5TvXF5wWDxP4e70zO9B0UMgVP9c0oAzerM28aoJ1CTg,27982
14
14
  wolfhece/PyParams.py,sha256=wwgmP-_7wiiPLTcyX8a5jR6FyC1D2c4oBPc1VWQqtSA,97383
15
15
  wolfhece/PyPictures.py,sha256=m1kY0saW6Y9Q0bDCo47lW6XxDkBrbQG-Fd8uVn8G5ic,2514
16
16
  wolfhece/PyTranslate.py,sha256=4appkmNeHHZLFmUtaA_k5_5QL-5ymxnbVN4R2OblmtE,622
@@ -29,7 +29,7 @@ wolfhece/color_constants.py,sha256=Snc5RX11Ydi756EkBp_83C7DiAQ_Z1aHD9jFIBsosAU,3
29
29
  wolfhece/drawing_obj.py,sha256=znIQY8dkYhnmoq3mEsVkVzd-hSKDbFY6i8TV-Tf37jM,4040
30
30
  wolfhece/flow_SPWMI.py,sha256=XDAelwAY-3rYOR0WKW3fgYJ_r8DU4IP6Y5xULW421tk,20956
31
31
  wolfhece/friction_law.py,sha256=MtZJLo-pTj3-Fw-w12z1LSgSIDrH-JGR0iD9wer_fpQ,5498
32
- wolfhece/gpuview.py,sha256=mOCKVtehWhvFpvQfqrmnF4F7uE6jyxkllUPMVW1PiB0,23735
32
+ wolfhece/gpuview.py,sha256=0Ld8glEijx5OhMEfcwqvUFEQ5ryRXLnzey3Dff_sn-k,24110
33
33
  wolfhece/import_ascfiles.py,sha256=6Zl8qBR9c6VtyziookQ8YE9KC0GtW_J9WFt5ubyGp-s,4465
34
34
  wolfhece/ins.py,sha256=0aU1mo4tYbw64Gwzrqbh-NCTH1tukmk0mpPHjRPHZXU,12661
35
35
  wolfhece/irm_qdf.py,sha256=gDuM9sEowQndLTL8vzbZW879M1go2xiKeE4EAJD2bA4,16532
@@ -42,18 +42,18 @@ wolfhece/pydike.py,sha256=hPBQsmSTW4QAp1wcOzb-TL3L7eet2WT1sJx2q-WNQ-Q,2241
42
42
  wolfhece/pylogging.py,sha256=4TI8hgBB65z-zpvU5Rfa2jkPXPhJaqXjHVPwbcdzTNc,4528
43
43
  wolfhece/pypolygons_scen.py,sha256=x-tnYLNq3MPV51NbaU14trgRj8qyUyOrMdF1zDsUX3I,37444
44
44
  wolfhece/pyshields.py,sha256=7k-qe2EJgr9fJE62jyPmlWQwRj8T0DK4iuMU844ZhYs,23281
45
- wolfhece/pyviews.py,sha256=jSTXCsmzw5OIZusj3Ynfd2o2XvRq7TaDnbt-dyNlbi0,10198
45
+ wolfhece/pyviews.py,sha256=AUtJY5V43XVH9juIKUSsozKbpkXHCEkWxn0GWuvAo_0,12562
46
46
  wolfhece/pywalous.py,sha256=yRaWJjKckXef1d9D5devP0yFHC9uc6kRV4G5x9PNq9k,18972
47
47
  wolfhece/rain_SPWMI.py,sha256=qCfcmF7LajloOaCwnTrrSMzyME03YyilmRUOqrPrv3U,13846
48
48
  wolfhece/textpillow.py,sha256=map7HsGYML_o5NHRdFg2s_TVQed_lDnpYNDv27MM0Vw,14130
49
49
  wolfhece/tools_mpl.py,sha256=gQ3Jg1iuZiecmMqa5Eli2ZLSkttu68VXL8YmMDBaEYU,564
50
- wolfhece/wolf_array.py,sha256=7-5l96kuQdTE3CStLyf8PkyRD3QX1Us7DOTbF7INepY,356721
50
+ wolfhece/wolf_array.py,sha256=AUSGolqu-YfyQ2SJp5WCMVD1gppvddHULJ3GrUpBjB4,357128
51
51
  wolfhece/wolf_hist.py,sha256=7jeVrgSkM3ErJO6SRMH_PGzfLjIdw8vTy87kesldggk,3582
52
52
  wolfhece/wolf_texture.py,sha256=EqZI6qCR6ouT3wEtnG_NkVLdvUhfY65JVTj5b6o4lXI,16576
53
53
  wolfhece/wolf_tiles.py,sha256=2Ho2I20rHRY81KXxjgLOYISdF4OkJ2d6omeY4shDoGI,10386
54
54
  wolfhece/wolf_vrt.py,sha256=89XoDhCJMHiwPQUuOduxtTRKuIa8RDxgNqX65S4xp9M,10569
55
55
  wolfhece/wolf_zi_db.py,sha256=baE0niMCzybWGSvPJc5FNxo9ZxsGfU4p-FmfiavFHAs,12967
56
- wolfhece/wolfresults_2D.py,sha256=MlvE2OoSwk1P_CeTwotV1QDBJYeHhSCjUprG3c42tRc,165714
56
+ wolfhece/wolfresults_2D.py,sha256=f6ezVnKw9LFjh1ynYkga-llDIsDF3BPpR-GYX38-YfE,166127
57
57
  wolfhece/xyz_file.py,sha256=Se4nCPwYAYLSA5i0zsbnZUKoAMAD0mK1FJea5WSZUkk,5755
58
58
  wolfhece/acceptability/Parallels.py,sha256=h4tu3SpC_hR5Hqa68aruxhtAyhs8u666YuZ40_fR5zg,3979
59
59
  wolfhece/acceptability/__init__.py,sha256=hfgoPKLDpX7drN1Vpvux-_5Lfyc_7feT2C2zQr5v-Os,258
@@ -71,7 +71,7 @@ wolfhece/apps/check_install.py,sha256=icFpkjfwNGDX-0NZVa-ijrCrqmGHEKDiFphjN8uTyh
71
71
  wolfhece/apps/curvedigitizer.py,sha256=_hRR2PWow7PU7rTHIbc6ykZ08tCXcK9uy7RFrb4EKkE,5196
72
72
  wolfhece/apps/isocurrent.py,sha256=MuwTodHxdc6PrqNpphR2ntYf1NLL2n9klTPndGrOHDQ,4109
73
73
  wolfhece/apps/splashscreen.py,sha256=SrustmIQeXnsiD-92OzjdGhBi-S7c_j-cSvuX4T6rtg,2929
74
- wolfhece/apps/version.py,sha256=9TV-RYEEy9X0HeZ9xYxf6PRts-on5mB43zJZtbq4_bY,388
74
+ wolfhece/apps/version.py,sha256=3RqA865r1p4lAA5dcCZ8ohMo6dxLTl4U8QwR8WugQss,388
75
75
  wolfhece/apps/wolf.py,sha256=mM6Tyi4DlKQILmO49cDUCip9fYVy-hLXkY3YhZgIeUQ,591
76
76
  wolfhece/apps/wolf2D.py,sha256=yPQGee7fsegoQ8GfWKrWEjX1Az_ApL-UWlBiqPvaIyY,565
77
77
  wolfhece/apps/wolf_logo.bmp,sha256=ruJ4MA51CpGO_AYUp_dB4SWKHelvhOvd7Q8NrVOjDJk,3126
@@ -196,11 +196,19 @@ wolfhece/mesh2d/cell_tracker.py,sha256=mPmnD5lEf3gLPuLqtAIo-Gp-ipAwQdPxzjWOGt0b7
196
196
  wolfhece/mesh2d/config_manager.py,sha256=DcdxCIIs_dyC6ayJOBULeY364LONogL9PBaqBtC9eQ4,14736
197
197
  wolfhece/mesh2d/cst_2D_boundary_conditions.py,sha256=Y4DF68uAklF3fXJgf05nb_JvJk2pvzcu_wu5nFXpWJo,5008
198
198
  wolfhece/mesh2d/wolf2dprev.py,sha256=9TUFcxWWbzQB4TbZgevMW6UF167r_cnT8AHwQIQeB6s,491489
199
+ wolfhece/models/5_coul.pal,sha256=OI1UqcNIDBpJn2k_VDel__r-hKjjvdob0eqinGCI3QY,160
200
+ wolfhece/models/6_coul.pal,sha256=z7NK2dg0tAQBUweRQV54dIwJbPM1U5y1AR2LLw19Idw,148
201
+ wolfhece/models/7_coul.pal,sha256=XTnnUyCE8ONokScB2YzYDnSTft7E6sppmr7P-XwMsCE,205
202
+ wolfhece/models/Froude.pal,sha256=FmrvUI01fv4k0ygqDJEYdC1M9Fn72Sr6Sn2IlZAm0KA,138
199
203
  wolfhece/models/HECE_169.pptx,sha256=OWJtsWz504A-REFaaxw8lwStHyQU2l7KEeiE7IZvtbk,3396930
204
+ wolfhece/models/Risque_TAF.pal,sha256=Tnbx-_gIyCszzwmwo0I9vvFfVVKmATjFXS89AoZwTOs,135
200
205
  wolfhece/models/blue.pal,sha256=s9-wEPzSiKMMHuKofUB2FPjmyO7HfGM2xWaUJwsKAY8,39
206
+ wolfhece/models/classes.pal,sha256=3gbCVboKhCYJZYOZVHeIco1kJJuSg0VE8BvX5JK6fTU,273
201
207
  wolfhece/models/diff16.pal,sha256=Pkp9kQ1GvmAKz3lgwohsw8eQySjVVKHbjhoWw-gZ6Nc,303
202
208
  wolfhece/models/diff3.pal,sha256=qk-yGgJr_FHdW7p7i93GFsH9ClT0dl5nqa9G1lLh7Z0,50
209
+ wolfhece/models/haut_coul.pal,sha256=eEwfZ-noqp09YvH3uvElLRgf4xcgaZIfyk4ntqlVTss,496
203
210
  wolfhece/models/red.pal,sha256=W6oeIjDCoGCsJDZPH2K4jfyfPmCMlH9rfRi4PTs-n28,33
211
+ wolfhece/models/reg_20cm.pal,sha256=S_lFMUkc_L9ih0k0XnOG7W9_PCg9J2Lm9ZMS-nloJ1E,366
204
212
  wolfhece/models/shields.pal,sha256=TwPhfaly2j3ZRM5ahlz7xH19NArZlalxYNy1L_UnJoA,166
205
213
  wolfhece/models/shields_cst.pal,sha256=zUGFI6HiL0bsHeOzcWNih3F9cxXKXLLZYA5rtqRbzcs,90
206
214
  wolfhece/models/vulnerability.pal,sha256=Fevrc_9owywLhbPMBunXDcrGXPJhARo9iSV1eOq3roA,106
@@ -226,7 +234,7 @@ wolfhece/report/reporting.py,sha256=JUEXovx_S4jpYkJEBU0AC-1Qw2OkkWyV3VAp6iOfSHc,
226
234
  wolfhece/report/wolf_report.png,sha256=NoSV58LSwb-oxCcZScRiJno-kxDwRdm_bK-fiMsKJdA,592485
227
235
  wolfhece/scenario/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
228
236
  wolfhece/scenario/check_scenario.py,sha256=w7_SST4n_uec-MUBK36gbJzz2KC8qT_bVJ_VNyp7cMo,4917
229
- wolfhece/scenario/config_manager.py,sha256=V7uTr6bxFdgY1dk2YirefaK3Wht4ACcw4aNkr6lvhro,81231
237
+ wolfhece/scenario/config_manager.py,sha256=hw9NfD75sttg-BJfyclXqZUsJwzlqUwE0bQUnzX7IiM,85258
230
238
  wolfhece/scenario/imposebc_void.py,sha256=PqA_99hKcaqK5zsK6IRIc5Exgg3WVpgWU8xpwNL49zQ,5571
231
239
  wolfhece/scenario/update_void.py,sha256=ay8C_FxfXN627Hx46waaAO6F3ovYmOCTxseUumKAY7c,7474
232
240
  wolfhece/shaders/fragment_shader_texture.glsl,sha256=w6h8d5mJqFaGbao0LGmjRcFFdcEQ3ICIl9JpuT71K5k,177
@@ -249,8 +257,8 @@ wolfhece/ui/wolf_multiselection_collapsiblepane.py,sha256=8PlMYrb_8jI8h9F0_EagpM
249
257
  wolfhece/ui/wolf_times_selection_comparison_models.py,sha256=ORy7fz4dcp691qKzaOZHrRLZ0uXNhL-LIHxmpDGL6BI,5007
250
258
  wolfhece/wintab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
251
259
  wolfhece/wintab/wintab.py,sha256=8A-JNONV6ujgsgG3lM5Uw-pVgglPATwKs86oBzzljoc,7179
252
- wolfhece-2.1.39.dist-info/METADATA,sha256=83wPlCtt2A7BPb-3QuxZrLSWn3AGA5uppBHC79HuiBU,2463
253
- wolfhece-2.1.39.dist-info/WHEEL,sha256=Wyh-_nZ0DJYolHNn1_hMa4lM7uDedD_RGVwbmTjyItk,91
254
- wolfhece-2.1.39.dist-info/entry_points.txt,sha256=yggeO1Fa80pi2BrOd9k5dTkiFlefGPwG6HztZhY0-qw,366
255
- wolfhece-2.1.39.dist-info/top_level.txt,sha256=EfqZXMVCn7eILUzx9xsEu2oBbSo9liWPFWjIHik0iCI,9
256
- wolfhece-2.1.39.dist-info/RECORD,,
260
+ wolfhece-2.1.41.dist-info/METADATA,sha256=9s4-AP5iLqR6M_9cehWoKsQxXc4WIgaiP6ymYoZOD2Q,2463
261
+ wolfhece-2.1.41.dist-info/WHEEL,sha256=Wyh-_nZ0DJYolHNn1_hMa4lM7uDedD_RGVwbmTjyItk,91
262
+ wolfhece-2.1.41.dist-info/entry_points.txt,sha256=yggeO1Fa80pi2BrOd9k5dTkiFlefGPwG6HztZhY0-qw,366
263
+ wolfhece-2.1.41.dist-info/top_level.txt,sha256=EfqZXMVCn7eILUzx9xsEu2oBbSo9liWPFWjIHik0iCI,9
264
+ wolfhece-2.1.41.dist-info/RECORD,,