• No results found

A.1

Visuele inspectie van FM2PROF uitvoer

Hieronder is de toelichting overgenomen, die in de handleiding van FM2PROF staat. Deze is enkel beschikbaar in het Engels. FM2PROF biedt twee manieren om de uitvoer te controleren.

A.1.1 Met utils.Visualiseoutput

FM2PROF heeft enkele Python hulpfuncties en -klasses beschikbaar in de module fm2prof.utils. Met fm2prof.utils.VisualiseOutput wordt de uitvoer per profiel gevisualiseerd (Figuur A.1).

Figuur A.1 De visualisatie bestaat uit drie (sub)figuren: het dwarsprofiel (boven), de volumegrafiek (linksonder) en de ruwheidsgrafiek (rechtsonder).

A.1.2 Met GIS software

FM2PROF voert optioneel geojson bestanden uit, die te visualiseren zijn met GIS software, zoals QGIS of ArcGIS.

58 van 72 Pilot zesde generatie 1D SOBEK model voor de Maas 3 februari 2021

Figuur A.2 GIS visualisatie van plassen (boven), toewijzing van uitvoer aan dwarsprofielen (midden) en toewijzing aan hoofdgeul / uiterwaard.

59 van 72 Pilot zesde generatie 1D SOBEK model voor de Maas 3 februari 2021

A.2

Gevoeligheidsanalyse

A.2.1 Effect van aanpassing parameters

Scenario Abs_low

Figuur A.3 Het waterstandsverschil tussen de standaardinstelling (AbsoluteVelocityThreshold = 5 cm/s) en abs_low (AbsoluteVelocityThreshold = 2.5 cm/s).

We zien:

• Hogere stroomvoerende breedte, minder bergende breedte in het dwarsprofiel. • Over het algemeen een lagere waterstand.

• Grote lokale toename in waterstand rond rkm 32, door toegenomen stroomvoerende breedte.

Figuur A.4 The 2D flow velocity magnitude (m/s) between rkm 26 and 38. The dark red part (velocity of >5m/s) is around rkm 31.

60 van 72 Pilot zesde generatie 1D SOBEK model voor de Maas 3 februari 2021

Abs_high:

Figuur A.5 Het waterstandsverschil tussen de standaardinstelling (AbsoluteVelocityThreshold = 5 cm/s) en abs_high (AbsoluteVelocityThreshold = 7.5 cm/s).

• Meer bergende breedte en minder stroomvoerende breedte. • De waterstand is over het algemeen hoger.

61 van 72 Pilot zesde generatie 1D SOBEK model voor de Maas 3 februari 2021

Rel_low:

Figuur A.6 Het waterstandsverschil tussen de standaardinstelling (relative velocity threshold = 0.03 m/s) en rel_low (relative velocity threshold = 0.01 m/s).

• Geen effect.

Rel_high:

Figuur A.7 Het waterstandsverschil tussen de standaardinstelling (relative velocity threshold = 0.03) and rel_high (relative velocity threshold = 0.05) overtime.

• Nauwelijks effect (slightly lower water level at rkm 32 at extreme discharge).

Opt1:

Figuur A.8 Het waterstandsverschil tussen de standaardinstelling (SDOptimisationMethod = optimize on total volume) and opt1 (SDOptimisationMethod = optimize on flow volume) overtime.

• Verandering in de zomerdijkhoogte, oppervlakte achter de zomerdijk en de uiterwaardhoogte achter de zomerdijk. (Figuur A.9).

62 van 72 Pilot zesde generatie 1D SOBEK model voor de Maas 3 februari 2021

• Over het algemeen een afname in de waterstand, met name. Extreem grote afname, tot 3 meter van rkm 50-80 bij gemiddelde tot hoge afvoer.

Figuur A.9 Het dwarsprofiel, volume, en ruwheid bij rkm 55.5 (links: default, rechts: opt1). De zomerdijk is lager dan in opt1 waardoor een volumefout ontstaat.

Opt2:

Figuur A.10 Het waterstandsverschil tussen de standaardinstelling (SDOptimisationMethod = optimize on total volume) en opt2 (SDOptimisationMethod = optimize on both total and flow volume).

• Verandering in de zomerdijkhoogte, oppervlakte achter de zomerdijk en de uiterwaardhoogte achter de zomerdijk. (Figuur A.11).

• Er treedt vooral een effect op bij zeer hoge afvoer.

• Afnemende waterstand bij rkm 175-176 (Stuw Grave) bij lage tot middelhoge afvoer discharge.

63 van 72 Pilot zesde generatie 1D SOBEK model voor de Maas 3 februari 2021

Figuur A.11 The cross-section, volume graph, and roughness right downstream of the Stuw Grave (left: default, right: opt2). The summer dike crest level is higher than that of default which trigers the volume error.

Fric1:

Figuur A.12 Het waterstandsverschil tussen de standaardinstelling (FrictionWeighingMethod= arithmetric mean) en fric1 (FrictionWeighingMethod= weighted average) overtime.

• Op grootste deel van de Maas nauwelijks verschil.

• Lokale effecten: waterstand neemt toe bij rkm 32 en 64 en neemt af bij rkm 56 en 86. • Het verschil in ruwheidswaarden is ±4 m0.5/s.

64 van 72 Pilot zesde generatie 1D SOBEK model voor de Maas 3 februari 2021

Lake20:

Figuur A.13 Het waterstandsverschil tussen de standaardinstelling (LakeTimesteps=10) en lake20 (LakeTimesteps=20).

• Lokale toename in waterstand bij rkm 80 and 210.

• De dwarsprofielbreedte bij plassen is grotere bij lagere afvoer.

Figuur A.14 The cross-section, volume graph, and roughness at the end of Geijmaas1 around rkm 209.5 (left: default, right: lake20). The lake is no longer recognized as a lake in lake20, the volume which is added to the area behind summer dike in default is added to the cross-section instead.

65 van 72 Pilot zesde generatie 1D SOBEK model voor de Maas 3 februari 2021

A.3

Python script voor het aanmaken van initiële waterstanden

"""

Script to read netCDF map file and create initial water level and xy velocity files

"""

import numpy as np

from netCDF4 import Dataset import pandas as pd

from shapely.geometry import Point, Polygon, shape import geopandas as gpd import json ''' <User Input> ''' reference_model_path = 'c:/Projects/KPP/fm2prof_proj/Maas_dir/Model_FM/Maas_2_merged_map.nc' fileout_path = 'c:/Projects/KPP/fm2prof_proj/Maas_dir/Model_FM/' polygon_file = 'c:/Projects/KPP/fm2prof_proj/Maas_dir/Data/GIS/sectie1_plassen.geojson' Filter = False # It takes overnight to process the filtering

tt = -1 # taking the output at the end of the simulation

''' </User Input> '''

def _read_fm_model(file_path): """input: FM2D map file"""

# Open results file for reading res_fid = Dataset(file_path, 'r')

# Time-invariant variables from FM 2D

df = pd.DataFrame(columns=['x'], data=np.array(res_fid.variables['mesh2d_face_x'])) df['y'] = np.array(res_fid.variables['mesh2d_face_y']) df['bedlevel'] = np.array(res_fid.variables['mesh2d_flowelem_bl']) # # Time-variant variables time_dependent = { 'waterdepth': pd.DataFrame(data = np.array(res_fid.variables['mesh2d_waterdepth']).T, columns=res_fid.variables['time']), 'xvel': pd.DataFrame(data = np.array(res_fid.variables['mesh2d_ucx']).T, columns=res_fid.variables['time']),

'yvel': pd.DataFrame(data = np.array(res_fid.variables['mesh2d_ucy']).T, columns=res_fid.variables['time']), } return df, time_dependent ''' WaterDepth ''' df, D = _read_fm_model(reference_model_path) B = df['bedlevel'] x = df['x'] y = df['y'] wd = D['waterdepth'].iloc[:,tt] xvel = D['xvel'].iloc[:,tt] yvel = D['yvel'].iloc[:,tt] if Filter:

with open(polygon_file) as fin: js = json.load(fin)

X_vel = [] Y_vel = []

fileout = fileout_path + 'waterlevel_ini.xyz' with open(fileout,'w') as fout:

for i in range(len(x)): lineout = '{:.6f} {:.6f} {:s}\n'.format(x[i],y[i],'-999') x_vel_tmp = 0 y_vel_tmp = 0 if wd[i] > 0.05: if Filter: pt = Point(x[i],y[i])

for feature in js['features']:

polygon = Polygon(feature['geometry']['coordinates'][0][0]) if polygon.contains(pt): lineout = '{:.6f} {:.6f} {:.3f}\n'.format(x[i],y[i],B[i]+wd[i]) x_vel_tmp = xvel[i] y_vel_tmp = yvel[i] break else: lineout = '{:.6f} {:.6f} {:.3f}\n'.format(x[i],y[i],B[i]+wd[i]) x_vel_tmp = xvel[i] y_vel_tmp = yvel[i] fout.write(lineout) X_vel.append(x_vel_tmp) Y_vel.append(y_vel_tmp)

66 van 72 Pilot zesde generatie 1D SOBEK model voor de Maas 3 februari 2021

fileout = fileout_path + 'waterlevel_ini.csv' with open(filein) as fin, open(fileout,'w') as fout: for line in fin:

if not '-999' in line:

fout.write(line.replace(' ',','))

fileout = fileout_path + 'x_velocity_ini.xyz' with open(fileout,'w') as fout:

for i in range(len(x)):

lineout = '{:.6f} {:.6f} {:.4f}\n'.format(x[i],y[i],X_vel[i]) fout.write(lineout)

fileout = fileout_path + 'y_velocity_ini.xyz' with open(fileout,'w') as fout:

for i in range(len(x)):

lineout = '{:.6f} {:.6f} {:.4f}\n'.format(x[i],y[i],Y_vel[i]) fout.write(lineout)

67 van 72 Pilot zesde generatie 1D SOBEK model voor de Maas 3 februari 2021