This project provides a Python script to estimate ship total resistance using a Holtrop-Mennen style empirical approach.
The current implementation is a command-line calculator in main.py that asks for hull and operating parameters, computes intermediate coefficients, and prints:
- Total Resistance without Bulbous Bow
The script computes resistance components and combines them into a total value.
Main computed pieces include:
- Froude number and Reynolds number
- Friction coefficient and frictional resistance
- Form-factor related viscous correction
- Wave-making and wave-breaking resistance terms
- Transom-related additional pressure term (computed, but currently excluded from the final sum)
- Model-ship correlation resistance
Final output in code:
E60 = E33 * E31 + E37 + E49 + 0 + 0 + E58
This means the present result intentionally excludes:
- Additional pressure resistance of bulbous bow (
E52, currently commented out) - Additional pressure resistance of immersed transom (
E55, calculated but not added)
- Python 3.8+
- Standard library only (
math)
No external package installation is required.
From the project root:
python3 main.pyThen enter the requested inputs one by one.
The script prompts for 21 numeric inputs (float). Names below follow the variable names in main.py:
E2- LWL (Length on Waterline)E3- LBP (Length Between Perpendiculars)E4- Breadth MouldedE5- Draught Moulded on F.PE6- Draught Moulded on A.PE7- Displacement Volume MouldedE8- Longitudinal Centre of BuoyancyE9- Transverse Bulb AreaE10- Centre of Bulb Area above keel lineE11- Midship Section CoefficientE12- Waterplane Area CoefficientE13- Transom AreaE14- Wetted Area AppendagesE15- Stern Shape ParameterE16- Propeller DiameterE17- Number of Propeller BladesE18- Clearance Propeller with keel lineE19- Ship SpeedE20- Block CoefficientE21- Immersion of Propeller ShaftE22- Density in kg/m3
The script prints a single line:
Total Resistance without Bulbous Bow is : <value>
The computed value is in Newtons if your inputs are given in consistent SI units.
- The script is fully interactive; there are no command-line flags or file input support.
- Some inputs are collected but not currently used in the final resistance expression (
E3,E6,E8,E16,E17,E18,E21,E22). - Waterline entrance angle term is fixed as
E39 = 1in the current implementation. - The script assumes valid numeric input and does not perform input validation.
- Add input validation and unit checks.
- Add non-interactive mode (arguments or JSON/CSV input).
- Include all enabled resistance components in a selectable final sum.
- Return and display a full breakdown table of component resistances.
- Add automated tests using known benchmark hull data.