Dam Live

In de toolbox Continu Inzicht wordt DAMlive gebruikt voor het realtime uitvoeren van dijksterkteanalyses. Met DAMlive kunnen voor verschillende scenario’s, op basis van hydraulische belastingen, ondergrondgegevens en de laagopbouw van de dijk, glijcirkels en veiligheidsfactoren worden berekend met behulp van diverse rekenmethodes.

De informatie en output van deze berekeningen worden door DAMlive weggeschreven in een .stix-bestand. Dit is een zip-bestand waarin verschillende .json-bestanden zijn opgeslagen.

Om de informatie en resultaten weer te geven in Continu Inzicht worden de .json-bestanden eerst ingelezen en omgezet naar dataframes (parsen .json bestanden). Vervolgens worden de dataframes samengevoegd met StageMerger, waarna de resultaten uiteindelijk worden geplot (Plot stages).

# initialiseer de (toolbox continu inzicht) modules
from pathlib import Path

from toolbox_continu_inzicht.base.config import Config
from toolbox_continu_inzicht.base.data_adapter import DataAdapter
from toolbox_continu_inzicht.dam_live.merge_stage import CombineDamLiveResults

De configuratie ziet er als volgt uit:

GlobalVariables:
  rootdir: data_sets/9.dam_live_parse/WV2030_PU0013_87074-1

DataAdapter:
  scenario:
    type: stages
    path: scenarios

  geometries:
    type: geometries
    path: geometries

  soillayers:
    type: soillayers
    path: soillayers

  soils:
    type: soils
    path: soils.json

  waternets:
    type: waternets
    path: waternets

  calculationsettings:
    type: calculationsettings
    path: calculationsettings

  merge_soil:
    type: csv
    path: merged_soil.csv

  merge_waternet:
    type: csv
    path: merged_waternet.csv

  merge_calculations:
    type: csv
    path: merged_calculations.csv
config_path = (
    Path.cwd() / "data_sets" / "9.dam_live_parse" / "dam_live_parse_config.yaml"
)
config = Config(config_path=config_path)
config.lees_config()

adapter = DataAdapter(config)

Parsen .json-bestanden

Hier worden de verschillende typen .json-bestanden ingeladen en omgezet naar een dataframe met behulp van een parser. Wanneer er meerdere .json-bestanden aanwezig zijn voor een bepaalde outputcategorie, worden deze samengevoegd in één dataframe.

In het .stix-bestand zijn zes typen bestanden te onderscheiden:

  • Scenario: Bevat de stage-ID’s van de uitgevoerde berekeningen. Aan de stage-ID’s zijn geometrie, laagopbouw, waterlijnen en berekeningsresultaten gekoppeld via ID’s, die later gebruikt worden voor het mergen.
  • Geometries: Hier worden de verschillende lagen van de dijk gedefinieerd met lijnen.
  • Soillayers: Koppelt de lagen aan een specifieke grondsoort.
  • Soils: Bevat de eigenschappen van alle grondsoorten.
  • Waternets: Hier worden de waterlijnen gedefinieerd met punten.
  • CalculationSettings: Bevat het berekeningstype en het middelpunt en de radius van de berekende glijcirkels.
df_stages = adapter.input("scenario")

df_stages
stage_id stage_label scenario_id scenario_label geometry_id decorations_id soillayers_id waternet_id waternet_creator_settings_id state_id state_correlations_id loads_id reinforcements_id calculationsettings_id calculation_id content_version
0 43 Stage1 42 Scenario1 13 None 30 31 None None None 41 None 12 44 2
df_geometries = adapter.input("geometries")

df_geometries.head(5)
geometry_id layer_id layer_label points content_version
0 13 14 Surface 14 [{'X': 0.0, 'Z': -3.17}, {'X': 0.28, 'Z': -3.1... 2
1 13 15 Surface 15 [{'X': 15.88, 'Z': -1.16}, {'X': 16.27, 'Z': -... 2
2 13 16 Surface 16 [{'X': 31.75, 'Z': -0.86}, {'X': 31.94, 'Z': -... 2
3 13 17 Surface 17 [{'X': 36.800000000000004, 'Z': -2.21}, {'X': ... 2
4 13 18 Surface 18 [{'X': 43.02, 'Z': -3.98}, {'X': 43.67, 'Z': -... 2
df_soillayers = adapter.input("soillayers")

df_soillayers.head(5)
soillayers_id layer_id soil_id content_version
0 30 14 5 2
1 30 15 4 2
2 30 16 7 2
3 30 17 4 2
4 30 18 6 2
df_soils = adapter.input("soils")

df_soils.head(5)
soil_id name code color volumetric_weight_above_phreatic_level volumetric_weight_below_phreatic_level shear_strength_model_type_above_phreatic_level shear_strength_model_type_below_phreatic_level mohr_coulomb_advanced_cohesion mohr_coulomb_advanced_friction_angle su_shear_strength_ratio su_strength_increase_exponent content_version
0 0 V_Basisveen V_Basisveen-0 gray 11.5 11.5 MohrCoulombAdvanced MohrCoulombAdvanced 0.0 26.1 NaN NaN 2
1 1 Z_Boxtel Z_Boxtel-1 gray 20.0 18.0 MohrCoulombAdvanced MohrCoulombAdvanced 0.0 28.2 NaN NaN 2
2 2 K_Wormer_zandig K_Wormer_zandig-2 gray 17.5 17.5 SigmaTauTable SigmaTauTable 0.0 29.0 NaN NaN 2
3 3 Z_Wormer_kleiig Z_Wormer_kleiig-3 gray 18.8 17.0 MohrCoulombAdvanced MohrCoulombAdvanced 0.0 29.9 NaN NaN 2
4 4 K_Antropogeen K_Antropogeen-4 gray 16.2 16.2 SigmaTauTable SigmaTauTable 0.0 26.0 NaN NaN 2
df_waternets = adapter.input("waternets")

df_waternets.head(5)
waternet_id line_type line_id line_label x z top_headline_id bottom_headline_id content_version
0 31 Head 32 Phreatic line (PL 1) 0.000000 -0.20 None None 2
1 31 Head 32 Phreatic line (PL 1) 18.498947 -0.20 None None 2
2 31 Head 32 Phreatic line (PL 1) 22.370000 -0.20 None None 2
3 31 Head 32 Phreatic line (PL 1) 26.950000 -0.66 None None 2
4 31 Head 32 Phreatic line (PL 1) 33.930000 -1.94 None None 2
df_calculationsettings = adapter.input("calculationsettings")

df_calculationsettings.head(5)
calculationsettings_id analysis_type calculation_type model_factor_mean model_factor_std circle_center_x circle_center_z circle_radius content_version
0 12 UpliftVan Deterministic 1.0 0.0 43.45548 2.614191 8.644962 2
1 12 UpliftVan Deterministic 1.0 0.0 44.19082 -3.099719 8.644962 2

StageMerger

Vervolgens worden de tabellen aan elkaar gekoppeld. Hierdoor ontstaan tabellen waarin de stage-ID wordt gekoppeld aan de informatie uit de Geometries, Soils, SoilLayers, WaterNets en CalculationSettings tabellen.

Er worden drie gekoppelde tabellen gemaakt:

  • Soil: Koppelt de geometrie, laagopbouw en grondtypes aan de stage-ID.
  • WaterNet: Koppelt de locaties en typen van de waterlijnen aan de stage-ID.
  • Calculations: Koppelt het middelpunt en de radius van de resulterende glijcirkels aan de stage-ID.
merge_df = CombineDamLiveResults(data_adapter=adapter)
merge_df.run(
    input=[
        "scenario",
        "geometries",
        "soils",
        "soillayers",
        "waternets",
        "calculationsettings",
    ],
    output=["merge_soil", "merge_waternet", "merge_calculations"],
)

Plot stage

Op basis van een opgegeven stage ID en de gekoppelde tabellen, kunnen de dijkopbouw, waterlijnen en resulterende glijcirkels vervolgens geplot worden

merge_df.plot_stage(
    stage_id=43,
    xlim=(0, 60),
    ylim=(-15, 6),
)