First GPU modelling
This notebook illustrates the main steps involved in setting up a 2D model using the ‘wolfgpu’ code.
The steps are not fixed in their order of appearance. Modellers are free to reorganise them as they see fit.
This notebook is not intended as an introduction to Python or the Jupyter Notebook. For general information, read the extensive documentation on the internet :
Importing useful modules
[1]:
from os import getcwd, chdir
from os.path import join
from pathlib import Path
from tempfile import TemporaryDirectory
import numpy as np
import matplotlib.pyplot as plt
# WOLF GPU
from wolfgpu.simple_simulation import BoundaryConditionsTypes, SimpleSimulation, Direction
from wolfgpu.glsimulation import SimulationDuration
# WOLF HECE
from wolfhece.wolf_array import WolfArray, WOLF_ARRAY_FULL_SINGLE, WOLF_ARRAY_FULL_INTEGER, header_wolf
from wolfhece.wolf_vrt import *
from wolfhece.pywalous import *
from wolfhece.pydownloader import toys_dataset
Current working directory
[5]:
tmpdir = TemporaryDirectory()
chdir(tmpdir.name)
print(getcwd())
C:\Users\pierre\AppData\Local\Temp\tmpvfu7099e
Simulation directories
[ ]:
# Use of pathlib to manage access paths - more flexible than OS.Path
dir_sim = Path(tmpdir.name) / "sample_simulation"
# Creation of the simulation directory, if necessary
dir_sim.mkdir(exist_ok=True)
GPU simulation - Preparation
Via a “SimpleSimulation” object
Required data :
topo-bathymetry
friction matrix - “n” manning
Infiltration matrix - zoning
Initial conditions (H, QX, QY)
Boundary conditions - mesh edges
Calculation mask matrix (here built on the basis of the topo-bathymetry mask)-1 = to calculate; 0 not to calculate
Topo-Bathymetry
[8]:
bathy = WolfArray(toys_dataset("GPU_for_dummies_data", "bathy_topo.tif"))
[9]:
# We hide the values at 99999.
# This is necessary for the NAP matrix to be properly built later
bathy.array[bathy.array.data == 0.] = 99999.
bathy.nullvalue = 99999.
bathy.mask_data(99999.)
[10]:
print(bathy)
Shape : 1644 x 1986
Resolution : 2.0 x 2.0
Spatial extent :
- Origin : (233257.0 ; 133380.0)
- End : (236545.0 ; 137352.0)
- Width x Height : 3288.0 x 3972.0
- Translation : (0.0 ; 0.0)
Null value : 99999.0
[11]:
bathy.plot_matplotlib()
[11]:
(<Figure size 640x480 with 1 Axes>, <Axes: >)
Friction coefficients matrix
[12]:
manning = WolfArray(toys_dataset("GPU_for_dummies_data","manning.tif"))
[13]:
print(manning)
Shape : 1644 x 1986
Resolution : 2.0 x 2.0
Spatial extent :
- Origin : (233257.0 ; 133380.0)
- End : (236545.0 ; 137352.0)
- Width x Height : 3288.0 x 3972.0
- Translation : (0.0 ; 0.0)
Null value : 0.0
[14]:
manning.plot_matplotlib()
[14]:
(<Figure size 640x480 with 1 Axes>, <Axes: >)
Hydraulic variables
[15]:
# Creation of Wolf matrices of water depths and specific discharges according to X and Y
h = WolfArray(srcheader=bathy.get_header())
qx = WolfArray(srcheader=bathy.get_header())
qy = WolfArray(srcheader=bathy.get_header())
# set to 0. or other... as required
h.array[:,:] = 0.
qx.array[:,:] = 0.
qy.array[:,:] = 0.
print(h)
Shape : 1644 x 1986
Resolution : 2.0 x 2.0
Spatial extent :
- Origin : (233257.0 ; 133380.0)
- End : (236545.0 ; 137352.0)
- Width x Height : 3288.0 x 3972.0
- Translation : (0.0 ; 0.0)
Null value : 0.0
Infiltration
Note: this matrix is in 32-bit integer format (np.int32)
[16]:
inf = WolfArray(whichtype=WOLF_ARRAY_FULL_INTEGER, srcheader=bathy.get_header())
inf.array[:,:] = 0
# For infiltration zones :
inf.array[1619,340:413] = 1
print(inf)
Shape : 1644 x 1986
Resolution : 2.0 x 2.0
Spatial extent :
- Origin : (233257.0 ; 133380.0)
- End : (236545.0 ; 137352.0)
- Width x Height : 3288.0 x 3972.0
- Translation : (0.0 ; 0.0)
Null value : 0.0
Saving of matrices
This step is not compulsory if the matrices are generated with each execution
[ ]:
h.write_all(dir_sim / 'simul.hbin')
qx.write_all(dir_sim / 'simul.qxbin')
qy.write_all(dir_sim / 'simul.qybin')
inf.write_all(dir_sim / 'simul.inf')
bathy.write_all(dir_sim / 'simul.top')
Creation of the SimpleSimulation Instance
Stages :
Instantiate an object
(optional) Add a comment
Adjust the parameters
param_nx, param_ny : cells according to x and y
param_dx, param_dy : resolution/cell-size of the problem according to x and y
param_duration : Modeling duration (use of the “SimulationDuration” type)
Creation of a mask matrix (nap) – type : np.uint8 – any non-zero value will be calculated if the hydraulic conditions allow
Association of matrices NUMPY - Only the data and not the object “np.ma”
[18]:
simul = SimpleSimulation()
simul.comment = 'Sample simulation tutorial 1'
simul.param_nx, simul.param_ny = bathy.nbx, bathy.nby
simul.param_dx, simul.param_dy = bathy.dx, bathy.dy
simul.param_base_coord_ll_x, simul.param_base_coord_ll_y = bathy.origx, bathy.origy
simul.param_duration = SimulationDuration.from_seconds(int(1*3600)) # 1 hour
[19]:
# Computation mask
# --> Here, we rely on the masking of the Bathymetric Data
shape = (simul.param_nx, simul.param_ny)
simul.nap = np.zeros(shape, dtype=np.uint8) # Initialization with 0
simul.nap[:,:] = ~bathy.array.mask # Set to 1 the non-masked cells in the topo-bathymetry
[20]:
# The matrices are shared between the SimpleSimulation class and WolfArray
simul.h = h.array.data
simul.qx = qx.array.data
simul.qy = qy.array.data
simul.bathymetry = bathy.array.data
simul.manning = manning.array.data
simul.infiltration_zones = inf.array.data
Imposing Boundary conditions (B/C)
Types of B/C (ref. Enum “BoundaryConditionsTypes”):
H : Free surface altitude [\(m\)]
QX : discharge according to x [\(m^3/s\)]
QY : discharge according to y [\(m^3/s\)]
NONE : none
FROUDE_NORMAL : Froude normal at the boundary - In reality, altitude calculated on the basis of the normal flow and desired value of Froude number
To impose a B/C on a mesh edge, it’s necessary to:
Indicate the indices (i, j) of the edge concerned
Provide the type “bc_type” and the value “bc_value”
Indicate on which side (of the cell/mesh) to work (see Enum “Direction”)
LEFT
BOTTOM
X
Y
Since you can only choose between Left and Bottom, it means that you have to give them indices of the cell located on the right/top of the edge concerned, Even if this cell is not part of the calculation area.
The indexing convention is the one used in the matrices provided, i.e. i varies according to X and j varies according to Y with the element [1,1] as the first element on the bottom left.
Note:
B/C edge indices are “1-based” for compatibility with other versions of WOLF.
As a reminder, Python is 0-based
it is also possible to retrieve the script lines generated by the graphical interface and paste them here
Via the wolf GUI:
add the topographic-bathymetric matrix (if necessary, adjust the NullValue to 99999 to obtain the correct domain)
create a GPU version B/C manager (File/Create…/ Create BC manager Wolf2D… -> GPU)
select the edges and choose the B/C type
copy the script lines (click the “Copy script to clipboard” button)
[21]:
simul.clear_boundary_conditions()
[22]:
# Definition of boundary conditions generated using wolf_gui -> Boundary Conditions Manager
simul.add_boundary_condition(i=220, j=1852,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=221, j=1853,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=223, j=1854,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=225, j=1855,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=226, j=1856,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=228, j=1857,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=230, j=1858,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=231, j=1859,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=233, j=1860,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=235, j=1861,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=236, j=1862,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=238, j=1863,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=240, j=1864,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=241, j=1865,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=243, j=1866,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=244, j=1867,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=246, j=1868,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=248, j=1869,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=249, j=1870,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=251, j=1871,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=253, j=1872,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=254, j=1873,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=256, j=1874,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=258, j=1875,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=259, j=1876,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=261, j=1877,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=262, j=1878,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=264, j=1879,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=266, j=1880,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=267, j=1881,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=269, j=1882,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=271, j=1883,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=272, j=1884,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=274, j=1885,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=276, j=1886,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=277, j=1887,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=279, j=1888,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=281, j=1889,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=282, j=1890,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=284, j=1891,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=285, j=1892,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=287, j=1893,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=289, j=1894,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=290, j=1895,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=292, j=1896,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=294, j=1897,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=295, j=1898,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=297, j=1899,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=299, j=1900,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=300, j=1901,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=302, j=1902,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=303, j=1903,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=305, j=1904,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=307, j=1905,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=308, j=1906,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=310, j=1907,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=312, j=1908,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=313, j=1909,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=315, j=1910,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=317, j=1911,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=318, j=1912,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=320, j=1913,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=322, j=1914,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=323, j=1915,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=325, j=1916,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=326, j=1917,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=328, j=1918,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=330, j=1919,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=331, j=1920,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=333, j=1921,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=335, j=1922,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=336, j=1923,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=338, j=1924,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=340, j=1925,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=341, j=1926,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=343, j=1927,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=345, j=1928,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=346, j=1929,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=348, j=1930,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=349, j=1931,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=351, j=1932,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=353, j=1933,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=354, j=1934,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=356, j=1935,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=358, j=1936,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=359, j=1937,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=361, j=1938,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=363, j=1939,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=364, j=1940,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=366, j=1941,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=367, j=1942,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=369, j=1943,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=371, j=1944,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=372, j=1945,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.LEFT)
simul.add_boundary_condition(i=218, j=1852,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=219, j=1852,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=220, j=1853,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=221, j=1854,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=222, j=1854,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=223, j=1855,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=224, j=1855,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=225, j=1856,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=226, j=1857,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=227, j=1857,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=228, j=1858,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=229, j=1858,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=230, j=1859,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=231, j=1860,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=232, j=1860,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=233, j=1861,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=234, j=1861,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=235, j=1862,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=236, j=1863,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=237, j=1863,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=238, j=1864,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=239, j=1864,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=240, j=1865,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=241, j=1866,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=242, j=1866,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=243, j=1867,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=244, j=1868,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=245, j=1868,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=246, j=1869,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=247, j=1869,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=248, j=1870,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=249, j=1871,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=250, j=1871,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=251, j=1872,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=252, j=1872,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=253, j=1873,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=254, j=1874,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=255, j=1874,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=256, j=1875,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=257, j=1875,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=258, j=1876,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=259, j=1877,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=260, j=1877,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=261, j=1878,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=262, j=1879,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=263, j=1879,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=264, j=1880,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=265, j=1880,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=266, j=1881,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=267, j=1882,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=268, j=1882,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=269, j=1883,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=270, j=1883,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=271, j=1884,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=272, j=1885,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=273, j=1885,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=274, j=1886,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=275, j=1886,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=276, j=1887,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=277, j=1888,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=278, j=1888,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=279, j=1889,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=280, j=1889,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=281, j=1890,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=282, j=1891,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=283, j=1891,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=284, j=1892,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=285, j=1893,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=286, j=1893,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=287, j=1894,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=288, j=1894,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=289, j=1895,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=290, j=1896,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=291, j=1896,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=292, j=1897,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=293, j=1897,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=294, j=1898,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=295, j=1899,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=296, j=1899,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=297, j=1900,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=298, j=1900,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=299, j=1901,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=300, j=1902,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=301, j=1902,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=302, j=1903,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=303, j=1904,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=304, j=1904,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=305, j=1905,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=306, j=1905,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=307, j=1906,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=308, j=1907,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=309, j=1907,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=310, j=1908,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=311, j=1908,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=312, j=1909,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=313, j=1910,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=314, j=1910,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=315, j=1911,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=316, j=1911,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=317, j=1912,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=318, j=1913,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=319, j=1913,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=320, j=1914,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=321, j=1914,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=322, j=1915,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=323, j=1916,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=324, j=1916,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=325, j=1917,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=326, j=1918,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=327, j=1918,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=328, j=1919,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=329, j=1919,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=330, j=1920,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=331, j=1921,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=332, j=1921,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=333, j=1922,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=334, j=1922,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=335, j=1923,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=336, j=1924,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=337, j=1924,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=338, j=1925,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=339, j=1925,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=340, j=1926,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=341, j=1927,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=342, j=1927,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=343, j=1928,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=344, j=1928,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=345, j=1929,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=346, j=1930,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=347, j=1930,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=348, j=1931,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=349, j=1932,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=350, j=1932,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=351, j=1933,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=352, j=1933,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=353, j=1934,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=354, j=1935,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=355, j=1935,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=356, j=1936,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=357, j=1936,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=358, j=1937,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=359, j=1938,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=360, j=1938,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=361, j=1939,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=362, j=1939,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=363, j=1940,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=364, j=1941,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=365, j=1941,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=366, j=1942,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=367, j=1943,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=368, j=1943,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=369, j=1944,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=370, j=1944,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=371, j=1945,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=372, j=1946,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
simul.add_boundary_condition(i=373, j=1946,bc_type=BoundaryConditionsTypes.FROUDE_NORMAL, bc_value=0.3, border=Direction.BOTTOM)
Adding a hydrograph for the infiltration zone(s)
It is necessary to use the “add_infiltration” routine which expects a time in seconds and a python list with as much value as areas (here -> 1).
[23]:
simul.clear_infiltration_chronology() # to be on the safe side, you can start by deleting the infiltration chronologies
simul.add_infiltration(0., [610.])
simul.add_infiltration(100000000., [610.])
Verification
[24]:
simul._infiltrations_chronology
[24]:
[(0.0, [610.0]), (100000000.0, [610.0])]
Simple but customisable graphic…
[25]:
fig_inf, ax_inf = simul.plot_infiltration(toshow=False)
Numerical parameters
Courant number (the code iterates explicitly in time according to a Runge-Kutta scheme, and is therefore subject to numerical stability conditions via the Courant number).
oscillations in the results and the appearance of a “checkerboard” pattern are signs of instability. The Courant number must therefore be reduced somewhat.
reporting period via the “SimulationDuration” type (in seconds/number of iterations)
[26]:
simul.param_courant = .4
simul.param_report_period = SimulationDuration.from_seconds(300.)
Checking for any configuration errors
Not everything is tested, but it helps a lot with common errors.
[27]:
ret = simul.check_errors()
print(ret)
None
Saving the simulation in GPU format
A simulation in “SimpleSimulation” format stores its basic data and parameters in a Numpy and JSON format.
Notes:
Matrix in Numpy format - oriented Cartesian coordinates (X according to rows and Y according to columns)
JSON : text file with tags - https://en.wikipedia.org/wiki/JSON#:~:text=JSON%20(JavaScript%20Object%20Notation%2C%20pronounced,(or%20other%20serializable%20values)
the ‘save’ method must be given a path of type ‘Path’.
if the directory does not exist, it is created
[ ]:
dir_sim_gpu = dir_sim / 'gpu'
simul.save(dir_sim_gpu)
GPU simulation - Execution
It is preferable to run the calculation via a command line by calling the executable “wolfgpu”.
Example : “wolfgpu –quickrun .” or “wolfgpu –quickrun FullPathtoSimDir”
This way of proceeding allows you to exploit the full richness of command line parameterisation.
Cleanup temporary directory
To avoid leaving temporary files on the disk, it is advisable to delete the temporary directory created at the beginning of the notebook.
[ ]:
tmpdir.cleanup()