Analyse corroded pipelines and assess the integrity and remaining life as per DNV-RP-F101.
Corrosion analyser is a web application that allows users to quickly analyse the integrity of corroded pipelines. The application is built using Dash.
Desktop Web UI | Mobile Web UI |
---|---|
![]() |
![]() |
- Analyse corroded pipelines
- Assess the integrity and remaining life of corroded pipelines
- Graphically visualise computed results
- Input the pipeline details
- Input the corrosion details
- Click the "Calculate" button to get the results
- The results will be displayed below the input form
The application can be accessed here.
- Clone the repository and navigate to the project directory
- Install Python 3.11
- Install Poetry
- Install the dependencies using
poetry install
- Run the application using
poetry run python -m src.app
- Open the browser and navigate to http://localhost:8050
docker run --name corrosion-analyser -p 8050:8050 nicholaslimck/corrosion-analyser
After the container is deployed, open the browser and navigate to http://localhost:8050
Download docker-compose.yml into your local machine:
curl https://raw.githubusercontent.com/nicholaslimck/corrosion-analyser/main/docker-compose.yml > docker-compose.yml
Run the app using docker compose:
docker compose up
After the container is deployed, open the browser and navigate to http://localhost:8050
---
title: Logic Flow
---
flowchart
subgraph Frontend
A[Input Parameters] --> B[Click on Analyse]
K
L
end
subgraph Backend
B --> C[Validate Inputs]
C --Inputs Validated--> D
C --Inputs Invalid--> L[Display Error]
subgraph Processing
D(Prepare all inputs) --> E1(Create Pipe)
D --> E2("Create Defect (s)") --> E1
D --> E3(Create Environment) --> E1
D --> E4(Create Loading) --> E1
E1 --> F(Calculate Pressure Resistance\nCalculate Effective Pressure)
F --> G(Calculate Maximum Allowable Defect Depth)
G -- Time-Shifted Defect Data Provided --> H(Calculate Corrosion Rate\nEstimate Remaining Life)
end
subgraph Generate Output
G -- Time-Shifted Defect Data Not Provided --> I(Generate Plots)
H --> I(Generate Plots)
I --> J(Generate Results)
end
end
J --> K[Display Results]
---
title: Example Pipe
---
classDiagram
class Pipe{
+dict config
+Defect defect
+Environment environment
+Loading loading
+Properties properties
+PipeDimensions pipe_dimensions
+MaterialProperties material_properties
+DesignLimits design_limits
+Factors factors
+add_defect(defect: Defect)
+add_loading(axial_load: float, bending_load: float, combined_stress: float)
+set_environment(environment: Environment)
+calculate_pressure_resistance()
+calculate_effective_pressure()
+calculate_maximum_allowable_defect_depth()
+estimate_remaining_life()
+calculate_corrosion_rate()
}
class Defect{
+float length
+float width
+float depth
+float relative_depth
+float relative_depth_with_uncertainty
+float length_correction_factor
+float pressure_resistance
+float measurement_timestamp
+float position
}
Pipe <-- Defect
class PipeDimensions{
+float outside_diameter
+float wall_thickness
}
PipeDimensions --> Pipe
class MaterialProperties{
+float alpha_u
+float temperature
+float smts
+float smys
+float f_u_temp
+float f_y_temp
}
MaterialProperties --> Pipe
class DesignLimits{
+float design_pressure
+float design_temperature
+float incidental_to_design_pressure_ratio
}
Pipe <-- DesignLimits
class Environment{
+float seawater_density
+float containment_density
+float elevation_reference
+float elevation
+float external_pressure
+float incidental_pressure
}
Pipe <-- Environment
class Loading{
+float usage_factor
+float axial_stress
+float bending_stress
+float loading_stress
}
Loading --> Pipe
class Properties{
+float pressure_resistance
+float effective_pressure
+DataFrame maximum_allowable_defect_depth
+float remaining_life
}
Properties --> Pipe
class Factors{
+str safety_class
+str inspection_method
+float measurement_accuracy
+float confidence_level
+float wall_thickness
+float standard_deviation
+float gamma_m
+float gamma_d
+float epsilon_d
+float xi
}
Factors --> Pipe
Factors --> Defect