PFM-01: Overtopping Erosion
PFM-01 models overtopping erosion of embankment dams. Each PFM-01 location represents one embankment section being evaluated (e.g., "Main Embankment", "Left Abutment"). The module uses the three-table SRP pattern: a DST-calculated SRP, a user-defined SRP, and an active SRP that is synced from one of the two sources based on the user's selected mode.
Table Relationships
Pfm01
PFM-01 location entity. Each row represents one embankment section being evaluated.
Column
Type
Constraints
▸Identity5
▸SRP Mode1
▸Geometry3
▸Materials3
▸Erodibility Coefficient (kd)6
▸Critical Shear Stress (τc)6
▸Manning's Roughness (n)6
▸Analysis2
▸UI State1
▸Timestamps2
Notes
- Distribution parameters (Kd, TauC, ManningsN) follow a pattern: DistributionType selects the distribution family, then the relevant parameters (Min/Mode/Max or Mean/Std) are populated.
- Indexes: PK on Id, Index on ScreeningId, Index on Index column.
Pfm01_DstSrp
Stores System-Response calculation results and nodal probability adjustments.
Column
Type
Constraints
Id
UUID
Pfm01Id
UUID
CurvesJson
JSONB
NodalJson
JSONB
LastCalculatedAt
TIMESTAMP
LastNodalEditAt
TIMESTAMP
Pfm01_UserSrp
Stores manually-entered SRP curves computed outside DST by the user.
Column
Type
Constraints
Id
UUID
Pfm01Id
UUID
CurveJson
JSONB
Notes
VARCHAR(4000)
LastModifiedAt
TIMESTAMP
Pfm01_ActiveSrp
Active SRP curve used in risk calculations. Synced from DstSrp or UserSrp based on SrpMode.
Column
Type
Constraints
Id
UUID
Pfm01Id
UUID
CurveJson
JSONB
SourceMode
VARCHAR(20)
LastSyncedAt
TIMESTAMP
Notes
- When SrpMode = 'dst': Syncs totalSrp.revisedEstimate from Pfm01_DstSrp.NodalJson.
- When SrpMode = 'user': Copies CurveJson from Pfm01_UserSrp.
- Sync triggers: mode switch, DST calculation complete, user-defined curve save.
Three-Table SRP Pattern
The SRP (System Response Probability) pattern is central to PFM-01 and will be replicated across all future PFM modules:
- DstSrp — Curves and nodal tables computed by the DST System-Response library. Read-only from the user's perspective (though users can revise individual nodal estimates).
- UserSrp — A manually-entered SRP curve computed outside DST. Fully user-defined.
- ActiveSrp — Denormalized cache of whichever SRP is currently "active" based on the parent entity's
SrpMode. When'dst', synced from DstSrp's total SRP. When'user', synced from UserSrp.
Data is never deleted when switching modes — switching from DST to User mode does not erase DST calculations, and switching back does not erase user-entered curves.
Enum Values
SrpMode
| Value | Database String | Description |
|---|---|---|
| Dst | "dst" | DST-based SRP: System-Response library calculates probabilities |
| User | "user" | User-defined SRP: User manually defines the complete SRP curve |
EmbankmentErodibility
| Value | Database String | Description |
|---|---|---|
| VeryErodible | "veryErodible" | Very erodible material |
| Erodible | "erodible" | Erodible material |
| ModeratelyResistant | "moderatelyResistant" | Moderately resistant material |
| Resistant | "resistant" | Resistant material |
| VeryResistant | "veryResistant" | Very resistant material |
GrassCoverQuality
| Value | Database String | Description |
|---|---|---|
| None | "noGrassCover" | No grass cover |
| Poor | "poorCover" | Poor grass cover |
| Average | "averageCover" | Average grass cover |
| Good | "goodCover" | Good grass cover |