Class Diagram for Existing D-FAST Bank Erosion Code#
Overview#
This document provides a class diagram and detailed description of the current architecture of the D-FAST Bank Erosion software. The diagram illustrates the relationships between classes, key methods, and data flow across all modules.
Class Diagram#
classDiagram
%% Main Classes
%% Generic Base Class
class BaseBank~T~ {
+T left
+T right
+get_bank(int)
+from_column_arrays(Dict, Type, Tuple)
}
class Erosion {
-ErosionCalculator erosion_calculator
+__init__(ConfigFile, bool)
+run()
}
class ErosionCalculator {
}
class BankLines {
-ConfigFile config_file
+__init__(ConfigFile, bool)
+detect()
+mask(GeoSeries, Polygon)
+plot()
+save()
+detect_bank_lines()
}
class ConfigFile {
}
%% Data Models - Bank Erosion
class ErosionRiverData {
}
class ErosionSimulationData {
}
class BankData {
}
class SingleBank {
}
class FairwayData {
}
class ErosionInputs {
}
class SingleErosion {
}
class ErosionResults {
}
class WaterLevelData {
+List water_levels
+array hfw_max
}
class MeshData {
}
class DischargeLevels {
}
class SingleDischargeLevel {
}
class SingleCalculation {
}
class SingleLevelParameters {
+List banks
}
class SingleParameters {
}
%% Data Models - Bank Lines
class BankLinesRiverData {
}
class SearchLines {
}
%% Data Models - IO
class LineGeometry {
}
class BaseSimulationData {
}
class BaseRiverData {
}
%% Relationships
Erosion --> ConfigFile : uses
Erosion --> ErosionRiverData : uses
Erosion --> ErosionSimulationData : uses
Erosion --> BankData : uses
Erosion --> FairwayData : uses
Erosion --> ErosionInputs : uses
Erosion --> ErosionResults : uses
Erosion --> DischargeLevels : uses
Erosion --> WaterLevelData : uses
Erosion --> MeshData : uses
Erosion --> SingleCalculation : uses
Erosion --> SingleLevelParameters : uses
Erosion --> SingleDischargeLevel : uses
Erosion --> SingleParameters : uses
Erosion --> SingleErosion : uses
Erosion --> Debugger : uses
Erosion --> BankLinesProcessor : uses
Erosion --> LineGeometry : uses
Erosion --> ErosionCalculator : uses
BankLines --> ConfigFile : uses
BankLines --> BankLinesRiverData : uses
BankLines --> SearchLines : uses
BankLines --> LineGeometry : uses
BankLines --> BaseSimulationData : uses
SearchLines --> LineGeometry : uses
ErosionRiverData --|> BaseRiverData : inherits
ErosionRiverData --> ConfigFile : uses
BankLinesRiverData --|> BaseRiverData : inherits
BankLinesRiverData --> ConfigFile : uses
BankLinesRiverData --> SearchLines : uses
BankLinesRiverData --> BaseSimulationData : uses
ErosionSimulationData --|> BaseSimulationData : inherits
ErosionSimulationData --> MeshData : uses
ErosionSimulationData --> SingleBank : uses
%% Inheritance relationships
BankData --|> BaseBank : inherits
BankData --|> BaseBank : inherits
ErosionInputs --|> BaseBank : inherits
SingleDischargeLevel --|> BaseBank : inherits
SingleLevelParameters --|> BaseBank : inherits
%% Containment relationships
BankData --> SingleBank : contains
ErosionInputs --> SingleErosion : contains
SingleDischargeLevel --> SingleCalculation : contains
SingleLevelParameters --> SingleParameters : contains
DischargeLevels --> SingleDischargeLevel : contains
BaseRiverData --> ConfigFile : uses
BaseRiverData --> LineGeometry : uses
for detailed class diagram Detailed class diagram
Class Descriptions#
Main Classes#
Erosion#
- Responsibility: Handles the calculation of bank erosion based on hydrodynamic data and detected bank lines
- Key Methods:
run(): Executes the complete erosion analysis workflowcompute_erosion_per_level(): Computes erosion for a specific discharge levelcalculate_fairway_bank_line_distance(): Calculates the distance between bank lines and fairway- Dependencies: ConfigFile, ErosionRiverData, BankData, FairwayData, ErosionInputs, ErosionResults, DischargeLevels, WaterLevelData, MeshData
BankLines#
- Responsibility: Handles the detection of bank lines from hydrodynamic simulation results
- Key Methods:
detect(): Executes the bank line detection workflowdetect_bank_lines(): Detects bank lines from simulation datamask(): Masks bank lines with bank areassave(): Saves bank lines to output files- Dependencies: ConfigFile, BankLinesRiverData, SearchLines
ConfigFile#
- Responsibility: Handles configuration file parsing and management
- Key Methods:
read(): Reads a configuration filewrite(): Writes a configuration fileget_parameter(): Gets a parameter from the configurationget_river_center_line(): Gets the river center line from the configuration- Dependencies: None
Data Models - Bank Erosion#
BaseBank#
- Responsibility: Generic base class for representing paired bank data (left and right banks)
- Key Properties:
left: Left bank data (generic type)right: Right bank data (generic type)id: Optional identifier- Key Methods:
get_bank(): Gets bank data for a specific bank index (0 for left, 1 for right)from_column_arrays(): Creates a BaseBank instance from column arrays__iter__(): Allows iteration over banks- Dependencies: None
ErosionRiverData#
- Responsibility: Represents river data for erosion calculations
- Key Methods:
simulation_data(): Gets simulation data for erosion calculations- Dependencies: BaseRiverData, ConfigFile
ErosionSimulationData#
- Responsibility: Represents simulation data for erosion calculations
- Key Methods:
compute_mesh_topology(): Computes mesh topologycalculate_bank_velocity(): Calculates velocity at bankcalculate_bank_height(): Calculates height at bank- Dependencies: BaseSimulationData, SingleBank
BankData#
- Responsibility: Represents bank data for erosion calculations
- Key Properties:
left: Left bank (SingleBank)right: Right bank (SingleBank)id: Optional identifier- Inheritance: Inherits from BaseBank[SingleBank]
- Dependencies: BaseBank, SingleBank
SingleBank#
- Responsibility: Represents a single bank for erosion calculations
- Key Properties:
bank_line: Bank line geometryface_indices: Indices of faces adjacent to the bankchainage: Chainage along the bankis_right: Whether the bank is a right bank- Dependencies: None
FairwayData#
- Responsibility: Represents fairway data for erosion calculations
- Key Properties:
fairway_axis: Fairway axis geometryfairway_polygon: Fairway polygon geometryfairway_initial_water_levels: Initial water levels in the fairwayfairway_velocities: Velocities in the fairwayfairway_chezy_coefficients: Chezy coefficients in the fairway- Dependencies: None
ErosionInputs#
- Responsibility: Represents inputs for erosion calculations
- Key Properties:
left: Left bank erosion inputs (SingleErosion)right: Right bank erosion inputs (SingleErosion)id: Optional identifiershipping_data: Shipping data for erosion calculations- Inheritance: Inherits from BaseBank[SingleErosion]
- Dependencies: BaseBank, SingleErosion
SingleErosion#
- Responsibility: Represents erosion inputs for a single bank
- Key Properties:
wave_fairway_distance_0: Distance from fairway for wave calculationswave_fairway_distance_1: Distance from fairway for wave calculationsbank_protection_level: Bank protection leveltauc: Critical shear stressbank_type: Bank type- Dependencies: None
ErosionResults#
- Responsibility: Represents results of erosion calculations
- Key Properties:
- Various lists and arrays storing erosion-related data
- Dependencies: None
Debugger#
- Responsibility: Handles debugging and output of bank erosion calculations
- Key Methods:
last_discharge_level(): Writes the last discharge level to a shapefile and CSV filemiddle_levels(): Writes the middle levels to a shapefile and CSV file_write_data(): Writes data to a shapefile and CSV file- Dependencies: None
BankLinesProcessor#
- Responsibility: Processes bank lines and intersects them with a mesh
- Key Methods:
intersect_with_mesh(): Intersects bank lines with a mesh and returns bank data- Dependencies: ErosionRiverData, LineGeometry
ErosionCalculator#
- Responsibility: Performs erosion calculations for bank erosion
- Key Methods:
comp_erosion_eq(): Computes the equilibrium bank erosion distance and volumecompute_bank_erosion_dynamics(): Computes the bank erosion during a specific discharge levelcomp_hw_ship_at_bank(): Computes wave heights at bank due to passing ships- Dependencies: None
WaterLevelData#
- Responsibility: Represents water level data for erosion calculations
- Key Properties:
water_levels: List of water levelshfw_max: Maximum water level- Dependencies: None
MeshData#
- Responsibility: Represents mesh data for erosion calculations
- Key Properties:
- Various arrays storing mesh-related data
- Dependencies: None
DischargeLevels#
- Responsibility: Represents discharge levels for erosion calculations
- Key Properties:
levels: List of SingleDischargeLevel objects- Dependencies: SingleDischargeLevel
SingleDischargeLevel#
- Responsibility: Represents a calculation level for erosion calculations
- Key Properties:
left: Left bank calculation parameters (SingleCalculation)right: Right bank calculation parameters (SingleCalculation)id: Optional identifier- Inheritance: Inherits from BaseBank[SingleCalculation]
- Dependencies: BaseBank, SingleCalculation
SingleCalculation#
- Responsibility: Represents parameters for discharge calculations
- Key Properties:
- Various arrays storing discharge-related data
- Dependencies: None
SingleLevelParameters#
- Responsibility: Represents parameters for discharge levels
- Key Properties:
left: Left bank parameters (SingleParameters)right: Right bank parameters (SingleParameters)id: Optional identifier- Inheritance: Inherits from BaseBank[SingleParameters]
- Dependencies: BaseBank, SingleParameters
SingleParameters#
- Responsibility: Represents parameters for each bank
- Key Properties:
discharge: Discharge valueprobability: Probability of dischargeship_parameters: Ship parameters- Dependencies: None
Data Models - Bank Lines#
BankLinesRiverData#
- Responsibility: Represents river data for bank line detection
- Key Methods:
search_lines(): Gets search lines for bank line detectionsimulation_data(): Gets simulation data for bank line detection- Dependencies: BaseRiverData, ConfigFile, SearchLines
SearchLines#
- Responsibility: Represents search lines for bank line detection
- Key Methods:
mask(): Masks search lines with river center lineto_polygons(): Converts search lines to polygons- Dependencies: LineGeometry
Data Models - IO#
LineGeometry#
- Responsibility: Represents line geometry
- Key Methods:
mask(): Masks line geometryintersect_with_line(): Intersects line geometry with another line- Dependencies: None
BaseSimulationData#
- Responsibility: Base class for simulation data
- Key Methods:
read(): Reads simulation data from a fileclip(): Clips simulation data to a region- Dependencies: None
BaseRiverData#
- Responsibility: Base class for river data
- Key Methods:
get_erosion_sim_data(): Gets simulation data for erosion calculations- Dependencies: ConfigFile, LineGeometry
Data Flow#
- The user initializes the
ErosionorBankLinesclass with aConfigFile - The
ConfigFileis used to read configuration parameters - For bank line detection:
BankLinesusesBankLinesRiverDatato get river dataBankLinesRiverDatausesSearchLinesto get search linesBankLinesdetects bank lines and saves them to output files- For erosion calculation:
ErosionusesErosionRiverDatato get river dataErosionprocesses the river axis and gets fairway dataErosionprepares initial conditions and processes discharge levelsErosioncomputes erosion per level and post-processes resultsErosionwrites output files and generates plots
This architecture provides a clear separation of concerns, with each class having a specific responsibility. The data flows through the system in a logical manner, with each step building on the previous one.