shiplab / vesseljs

Vessel.js Ship Design Library
https://shiplab.github.io/vesseljs/
MIT License
78 stars 23 forks source link

Need better estimation of hull weight #29

Open EliasHasle opened 6 years ago

EliasHasle commented 6 years ago

The current hull weight calculation is broken. Problems:

  1. It uses at least two arbitrary calculation parameters that should be calculated from hull geometry: Cb_design and LWL_design. They could both be found by calling calculateAttributesAtDraft(Draft_design).
  2. The example K value from the table gives output mass in tonnes, while everywhere else we are using kg. This can be solved by multiplying the K with 1000 in the input or in the calculation. Or by using tonnes everywhere else.
  3. It is not mathematically correct to strip down the structural weight calculation by removing components of E, because the exponentiation E^1.36 cannot be simply decomposed as a sum of exponentiated terms (with the same exponent). I don't know how to solve this, except using another weight approximation method entirely. ( @MrEranwe )

I remember Henrique ( @hmgaspar ) mentioned a method where the hull is modelled as a rectangular beam with main dimensions derived from (identical to?) the main dimensions of the ship, and the weight is approximated by the weight of this beam after dimensioning according to some constraints. I think that is interesting. But we/I need more details of the method before it can be implemented.

Henrique also mentioned that there are "countless" other methods. I would prefer one that introduces as few parameters as possible.

I am also still interested in exploring how to model variable hull thickness. My proposed solution is to have an extra offset table for the inside of the hull, such that the difference (or the stored value) would be the transverse thickness. This is easy to do calculations on, including hull shell mass and cg. But it does not account for the weight of supporting structures. (Finding the appropriate thicknesses would be a separate problem, just like with hull shape in general.)

ferrari212 commented 6 years ago

Hi Elias, I pulled request a .js file with some others weight estimation methods I found. I will try to give my considerations about the questions you raised above:

1 - I guess the fact you are telling not having Cb_design and LWL_design is a problem because how could you have those informations if you need the weight of the ship to know the draft? (Considering you are in a preliminary stage where you have no idea about the hull line). The point is you may have an idea from principal dimension by parametric methods and similary ship regressions considering the dead weight you want to transport and the type of ship you are willing to project. Some methods I inserted uses total lenght instead of LWL and Cb can be estimated from parametric formulas in early stages therefore eliminating the necessity of hidrostatic calculations. I hope I understood well your problem and my answer are aiming in right direction; 2 - In my opinion, it is better to use all the program in ton instead of kg because industry parameters are computed in ton like processed weight in the shipyard or steel weight cost, and classification society formulas are generally suitable for tf and are easier convertable to MPa in structural project; 3 - I don't get well the point from not using E^1.36 but I will guess it is related to error in using pow() function. Unfortunantelly, most of the weight estimations will use pow() functions because they are based on the aproximation of the weight in a power function of principal dimensions. The midship section method is the only one I found that do not uses a pow regression, for the other hand, it is not possible to garantee that the estimation of other parameters used to calculate the weight/(lenght of midship section) like bending moment will not consider power functions; 4 - I do not know if @hmgaspar had in mind the midship section method I inserted but I guess it goes in the same direction you want. The negative point from this method is that it uses the weight/(lenght of miship section) as parameter. This means we must have an idea about the structural parameters before start the calculations. Therefre I don't think this method will be suitable for early stages. We may use some classification society formulas (ABS, DNV, Lyods, etc) that gives us back some paramether of structural element to estimate this weight. 5 - Classification society formulas (ABS, DNV, Lyods, elc) also gives us the minimum allowable thickness, we may check it out in this direction if you think this is a good way.

Coments and suggestions are always welcome!

EliasHasle commented 6 years ago

I am almost out of this project, actually, so I am not the authority regarding PR's.

My focus when working on this library has always been bottom-up, calculating hull properties from geometry. (See the function calculateAttributesAtDraft inn Hull.js.) This is a natural approach for me, as I benefit from my computer science background. I also see it as a natural approach if one does not want to be trapped in conventions, and want to benefit from modern computational power. But I am weak when it comes to the actual engineering aspect.

I don't know if @hmgaspar wants to take the project in a direction with more emphasis on heuristic top-down calculations. I do expect, however, that trying to incorporate both approaches in the same application will be like trying to cross cats and dogs.

The E^1.36 thing assumes certain components are included in E. If some are left out, as in @MrEranwe's code, the optimal exponent for estimation would probably be another one.

hmgaspar commented 5 years ago

@ferrari212 Maybe we should have this defined once for all, with examples from the stability book, to be sure that we are on track.