Skip to main content

Deformation of an Imported Ship Hull

Ship Hull Model

In this tutorial, partially-parametric modeling (also referred to as morphing in CAESES) of a ship hull will be introduced. Various methods for the deformation a ship hull inside CAESES are presented:

Introduction

As a starting point, a ship hull designed by FRIENDSHIP SYSTEMS is provided in STEP file format. This hull model will be used for modification in this tutorial.

Partially-Parametric Modeling

The concept of partially-parametric modeling (PPM) is to have an existing geometry and deform it, unlike fully-parametric modeling (FPM), in which the model is defined and designed from scratch. Implementing such changes with traditional CAD tools can be challenging, but this tutorial will demonstrate how easy and robust it is to set up these complex alterations within CAESES.

note

Naturally, the settings shown in this tutorial represent just one possible configuration and can be adjusted by the users to suit their preferences.

Import

Initially, save the STEP file we will use as a starting geometry and import it in CAESES.

Save hull STEP

Import a STEP file

The imported hull can be renamed to "hull" and be placed under the |00_import| scope.

Curves

From the imported hull, Image curves are used for capturing the bulbContour and knuckle under the scope |00_import|00_curves| with the following Sources and Domain:

Knuckle Curve

  • Create an Image Curve and name it "knuckle".
  • Set the Source to |00_import|hull.getEdge(40)

Bulb Contour Curve

  • Create another Image Curve and name it "bulbContour".
  • Set the Source to |00_import|hull.getEdge(41)
  • Set the Domain to [1,0]
Flip Orientation of bulbContour

The bulbContour curve was reversed ([1,0]) by flipping the domain, in order to be used properly later. This switches the start and endpoint of the curve.

Dimensions

Then, the basic dimensions of the imported hull are calculated and their values are assigned to the corresponding Parameters, placed in the scope |00_import|00_dimensions| with the following expressions:

Create 5 Parameters and name them "beam", "depth", "tFlatbar", "xMax" and "xMin".

Set the Parameter values as:

Parameter NameParameter Value
beam|00_import|hull.getMax():Y * 2
depth|00_import|hull.getMax():Z
tFlatbar|00_import|00_curves|bulbContour.getMin():Y
xMax|00_import|hull.getMax():X
xMin|00_import|hull.getMin():X

The final structure of the |00_import| scope should look like this.

Import Scope Structure

Bulb

Now, we will begin modifying the ship model, starting with the bulb region, which is crucial in the maritime industry. A new scope named |01_bulb| will be created. Two different modifications will be applied to the bulb: one for its length and the other for its height. Therefore, two design variables named length and height will be created, each ranging from -1 to 1. For each transformation, a different sub-scope will be created: |01_bulb|00_length| and |01_bulb|01_height|, where the corresponding design variables will be placed.

Length

To adjust the length of the bulb, we will use a Delta Shift transformation, utilizing an F-Spline curve for the transformation. The starting point and the ending point, p1 and p2, are defined as follows:

Coordinatesp1p2
X|00_import|00_curves|bulbContour:Start:X126.3
Y00
Z|00_import|00_curves|bulbContour:Start:Z|01_bulb|01_length|length

Then the F-Spline and the corresponding points will be placed under the scope |01_bulb|00_length|deltaShift|curve|, c1, is defined as illustrated in the figure below:

Define F-Spline

For the Delta Shift, we initially need to define the shifting direction (Delta X). Then, we define the curve that will apply the transformation (Delta curve) and the factor, which determines what percentage of the transformation will be applied, with 1 meaning 100% of the transformation. Additionally, it is necessary to define for the DeltaCurve which direction is abscissa and which one is ordinate. In our case, it is X and Z, respectively.

Define Delta Shift

Finally, the modified BRep related to the length of the bulb is named hullMod. Under "Add Sources", the imported hull is placed and in "Post Processing", the "deltaShift|shift" transformation is added, as shown in the figure below. Additionally, the process for enabling Section Visualization is demonstrated.

Define BRep and Section Visualization

Height

The modifications to the height of the bulb will be applied using a Delta Product transformation. This transformation is employed to control the deformation of the hull model along the vertical axis, ensuring that the deck curve remains unchanged. Its primary purpose is to adjust the bulb region. The Delta Product used here is a multiplication of two Delta Shift transformations (|00_deltaShift|shift and |01_deltaShift|shift).

First Delta Shift

For the first delta shift (|00_deltaShift|shift), an F-Spline curve like in the Length Section before will be used. The starting point and the ending point, p1 and p2, are defined as follows:

Coordinatesp1p2
X|01_bulb|00_length|deltaShift|curve|p1:X|01_bulb|00_length|deltaShift|curve|p2:X
Y00
Z|01_bulb|00_length|deltaShift|curve|p1:X|01_bulb|01_height|height

Other aspects will remain similar to the Length F-Spline curve.

Second Delta Shift

Let's create the second delta shift curve (|01_deltaShift|). Under the scope of |01_deltaShift|curve|, three points are created:

Coordinatesp1p2p3
X000
Y110
Z0|00_import|00_curves|bulbContour:End:Z|00_import|01_dimensions|depth

Then, in the same scope, we create a Line c1 between Points p1 and p2, and an F-Spline c2 with the following properties:

  • Start:Position: p2
  • Start:Tangent: 90 degrees
  • End:Position: p3
  • Principal Plane: X - (Y,Z)

Finally, we generate a Polycurve c3 using Curves c1 and c2. The Polycurve c3 will have a value of 1 at the ordinate and will smoothly fade to 0 at the end of the curve. This means that, at the beginning, the |00_deltaShift|shift transformation will be applied 100% close to the bottom of the hull, while near the deck, the transformation will have no effect. This Polycurve will be used for the |01_deltaShift|shift in order to be used for the |deltaProduct|product.

Define Polycurve

Combine Delta Shifts in Delta Product

With the two Delta Shifts set up, we can now define the |deltaProduct|product.

Define Delta Product

Finally, a hullMod BRep is generated. The |deltaProduct|product is then applied and |00_deltaShift|hullMod is added as a source.

Animating Transformations

In the animation below, we can see the impact of the design variables |01_bub|01_length|length and |01_bub|02_height|height| on the bulb region and how changing curves can impact through Delta Shift (left) and Delta Product (right).

Delta Transformations of Bulb

Scope Structure

The final scope structure of the |01_bulb| scope should look like this.

Bulb Scope Structure

Forward Shoulder

If you modify the bulb, you may also want to adjust the forward (fwd) shoulder to optimize the interference of the generated waves and reduce resistance. This adjustment can help make the shape fuller or more slender, depending on your needs, using a Surface Delta Shift. Therefore, a new scope named |02_fwdShoulder| will be created. The design variable that will control this transformation is |02_fwdShoulder|delta, ranging from -0.5 to 0.5.

For your convenience, the B-Spline surface for the deformation is provided for download and needs to be imported as a STEP file. The control points of the imported B-Spline surface are shown below within the blue rectangle.

Download Surface STEP

Define B-Spline Surface

Next, modifications should be made to the control points within the green rectangles in the figure above. By changing the |02_fwdShoulder|delta parameter, the surface should adjust accordingly.

Points
[[74,0,0], [74,0,1], [74,0,3], [74,0,6], [74,0,8], [74,0,10]]
[[76,0,0], [76,0,1], [76,0,3], [76,0,6], [76,0,8], [76,0,10]]
[[84,0,0], [84,0,1], [84,1.2 * |02_fwdShoulder|delta, 3], [84,0,6], [84,0,8], [84,0,10]]
[[97,0,0], [97,0,1], [97,2 * |02_fwdShoulder|delta, 3], [97,0.8 * |02_fwdShoulder|delta, 6], [97,0,8], [97,0,10]]
[[110,0,0], [110,0,1], [110,0,3], [110,0,6], [110,0,8], [110,0,10]]
[[114,0,0], [114,0,1], [114,0,3], [114,0,6], [114,0,8], [114,0,10]]

The Surface Delta Shift transformation (|02_fwdShoulder|surfaceDeltaShift|shift) is then applied, as illustrated below.

Define Surface Delta Shift

In the following figure, the BRep hullMod is defined.

Enable Section Visualization

Animating Transformations

In the animations below, the impact of the Delta Product and the design variable |02_fwdShoulder|delta is shown.

Delta Transformations of Fwd Shoulder

Scope Structure

The final structure of the |02_fwdShoulder| scope should look like this.

Fwd Shoulder Scope Structure

Mid Frame

Afterward, significant modifications, such as changing the deadrise angle, raising the flat of the bottom to an angle or tilting the sides by introducing a flare angle, can be made. For these modifications, a new scope |03_midFrame| will be created, along with two new sub-scopes named |03_midFrame|00_deadrise| and |03_midFrame|01_flare|. Each sub-scope contains the corresponding design variables deadrise and flare, ranging from 0 to 1. A Delta Product will be applied for both transformations.

Deadrise

For the deadrise angle deformation, three different Delta Shifts will be combined, resulting in three corresponding sub-scopes: |deltaProduct|00_deltaShift|, |deltaProduct|01_deltaShift| and |deltaProduct|02_deltaShift|. The first sub-scope applies the deadrise angle deformation, the second one controls the effect of the deformation in the vertical axis—0% at the deck and 100% at the bottom, similar to the previous sections. Finally, the third sub-scope defines the effect of the transformation in the longitudinal direction, with 200% impact at the midship, gradually fading to 0% at the aft and forward parts of the ship.

|00_deltaShift|

For the transformation |00_deltaShift|shift, a line named ln will be used with the following properties:

  • Start Position: [0, |00_import|01_dimensions|tFlatbar, 0]
  • End Position: [0, |00_import|01_dimensions|beam * 0.6 + |00_import|01_dimensions|tFlatbar, tan(|03_midFrame|00_deadrise|deadrise) * |00_import|01_dimensions|beam * 0.6]

The properties of the |00_deltaShift|shift are shown below:

  • Delta Z: ✔️
  • Factor: 1
  • Deltacurve: ln
  • Deltacurve Abscissa: Y
  • Deltacurve Ordinate: Z

|01_deltaShift|

For the transformation |01_deltaShift|shift, an Image curve named c1 will be used by adding a Curve Extension Operation and with the following properties:

Define Image Curve

The properties of the |01_deltaShift|shift are shown below:

  • Delta Z: ✔️
  • Factor: 1
  • Deltacurve: c1
  • Deltacurve Abscissa: Z
  • Deltacurve Ordinate: Y

|02_deltaShift|

For the transformation |02_deltaShift|shift, a 3rd-degree B-Spline curve named c1 will be used with the following control points:

Define B-Spline Curve

The end parameter is defined in this sub-scope with the following expression: end = |00_import|00_curves|bulbContour:End:X.

The properties of the |02_deltaShift|shift are shown below:

  • Delta Z: ✔️
  • Factor: 1
  • Deltacurve: c1
  • Deltacurve Abscissa: X
  • Deltacurve Ordinate: Z

|deltaProduct|

Finally, the |deltaProduct|product is defined and applied to a new hullMod BRep, similar to the previous transformations. The |02_fwdShoulder|hullMod is then added as a source to this BRep.

Flare

For the flare angle deformation, two different Delta Shifts will be combined, resulting in two corresponding sub-scopes: |deltaProduct|00_deltaShift| and |deltaProduct|01_deltaShift|.

|00_deltaShift|

For the transformation |00_deltaShift|shift, a line named ln will be used with the following properties:

  • Start Position: [0, 0, |00_import|01_dimensions|depth]
  • End Position: [0, -tan(|03_midFrame|01_flare|flare) * (|00_import|01_dimensions|depth + 1), -1]

The properties of the |00_deltaShift|shift are shown below:

  • Delta Y: ✔️
  • Factor: 1
  • Deltacurve: ln
  • Deltacurve Abscissa: Z
  • Deltacurve Ordinate: Y

|01_deltaShift|

For the transformation |01_deltaShift|shift, a line named ln will be used with the following properties:

  • Start Position: [0, |00_import|01_dimensions|tFlatbar, 0]
  • End Position: [0, |00_import|01_dimensions|beam * 0.6 + |00_import|01_dimensions|tFlatbar, 1.2]

The properties of the |01_deltaShift|shift are shown below:

  • Delta Y: ✔️
  • Factor: 1
  • Deltacurve: ln
  • Deltacurve Abscissa: Y
  • Deltacurve Ordinate: Z

|deltaProduct|

Similarly to the deadrise angle transformation, the |deltaProduct|product is defined and applied to a new hullMod BRep. The |03_midFrame|hullMod is then added as a source to this BRep.

Animating Transformations

In the animations below, the impact of the two aforementioned Delta Products and the design variables |03_midFrame|deadrise and |03_midFrame|flare is demonstrated.

Delta Transformations of Midframe

Scope Structure

The final structure of the |03_midFrame| scope should look like this.

Midframe Scope Structure

Combined Transformations

A new scope named |04_combinedTransformations| is created. In this scope, no new transformations are introduced; instead, existing Delta transformations are summarized using Delta Sum. This allows all the aforementioned transformations to be applied in a transformation chain by checking the box shown in the figure below. Note that the result depends on the order of the transformations.

Define Delta Sum

Afterward, a new hullMod BRep is created and |04_combinedTransformations|deltaSum is applied. The |00_import|hull is then added as a source to this BRep.

Skeg Tunnel

At this point, we have finished describing the Delta transformations in this tutorial. Now, we will focus on BRep Morphing techniques, which were first introduced in CAESES 5. One area of interest for morphing is often the skeg tunnel of a ship. We will create a new scope named |10_skegTunnel| with a design variable controlling the morphing, tunnelMatch, ranging from -0.5 to 1.5.

Curves

BRep morphing in CAESES requires both source geometry (points, curves or surfaces) and target geometry (points, curves or surfaces). In ship design, working with curves has proven effective, so this tutorial will use curves for BRep morphing by creating a new sub-scope |10_skegTunnel|00_curves|.

Source

The source is simply an Image curve defined as follows:

  • Source: |04_transformationsCombined|hullMod.getEdge(3)
  • Domain: [0,1]

Additionally, a 3D Point named p is defined, which can be slightly adjusted based on user preference. This 3D Point will help generate the target curve.

  • X: 6
  • Y: 0
  • Z: 3.5

Target

The target curve is an Image curve derived from the source, but with additional operations to differentiate it. These operations are selected to create a smooth curve while maintaining the same start and end points as the source curve.

Define Target Curve

The added operations are shown in detail in the figure below.

Operations Added

BRep Morphing

Now that we have set up the source and the target curve, we will proceed to set up the BRep morph by creating a new sub-scope |10_skegTunnel|01_BRepMorph|.

Constraints in Y-direction

To achieve smooth morphing, some constraints in the Y-direction will be applied. Essentially, we want to create the Ruled surface s shown below, which is generated by Curves c1 and c2.

Define Ruled Surface

The c1 is a Polycurve and is defined as follows:

Define Polycurve

The c2 is an Image curve of c1, with an added Operation: Transformations|Translations.

Translation Operation

In the following sequence, it is shown how the |04_transformationsCombined|hullMod| and the Ruled surface s are merged into a single BRep named hullBRep.

Define Merged BRep

Setup BRep Morphing

The BRep morphing setup is shown by adding hullBRep as the source and selecting the Morphable Faces as [0,16]. The Show Fixed Points option is enabled and the Knot Spacing is set to 0.5. The design variable |10_skegTunnel|tunnelMatch is also set as the Interpolation Factor.

Morph Tunnel

Finally, the unnecessary faces of brepMorph are removed and a new hullMod BRep is defined, as depicted below.

Remove Faces from the BRep

Animating Morphing

In the animation below, the effect of the Interpolation Factor of the morphing is shown. It can range below 0 and above 1.

BRep Morphing of Tunnel Skeg

Scope Stucture

The final structure of the scope |10_skegTunnel| is illustrated below.

Skeg Tunnel Scope Structure

Knuckle

In this section, we will demonstrate some deformations related to the knuckle curve. To do this, a new scope named |11_knuckle| will be created, along with two new design variables in this scope: dy and dz, both ranging from -0.25 to 0.25.

Curves

Similar to the skeg tunnel deformations, we need to define a source and target curve. A new sub-scope named |11_knuckle|curves| will be created for this purpose.

Source

The source curve corresponds to the knuckle curve, but we will describe it using a 3rd-degree B-Spline curve with 4 control points, as listed below:

Point List
[103.04663217, 4.04503562, 4.46354053]
[107.94857629, 2.65164694, 5.02569067]
[112.85456501, 1.21459782, 5.57951433]
[117.7270465, 0, 6.64431725]

Additionally, a 3D point named pMod is generated with the following coordinates:

  • X: source:Start:X
  • Y: source:Start:Y + |11_knuckle|dy
  • Z: source:Start:Z + |11_knuckle|dz

Target

The target curve is an image of the source curve, but the first point of the control polygon is replaced with the pMod point, as shown below.

Define Target Curve

BRep Morphing

The following figure demonstrates how this BRep Morph is set up by using |10_skegTunnel|hullMod as the input and Morphable Faces: [15,14,9] with the proper source and target curves. The key difference here is that the Interpolation Factor remains set to 1, meaning the target curve is modified by the design variables and there is always a 100% effect on the deformation process.

Morph Knuckle

Animating Morphing

In the animations below, the effects of the design variables |11_knuckle|dy and |11_knuckle|dz on the hull model are shown.

BRep Morphing of Knuckle Curve

Scope Stucture

The final scope structure of |11_knuckle| is shown below.

Knuckle Scope Structure

Bow

Continuing with the bow region, which is commonly deformed in the maritime industry, a new scope is created named |12_bow|. This scope contains three design variables: areaFactor (Range: [0.95, 1.05]), entryAngle (Range: [30, 60]) and interpolationFactor (Range: [0, 1]).

Curves

Similarly, for this deformation, source and target curves will be utilized. A new sub-scope is created, |12_bow|curves| and under this sub-scope, two more scopes are created: |12_bow|curves|00_sourceSetUp| and |12_bow|curves|01_targetSetUp|.

Source

A plane is created for the source curve generation using the following points:

Define Plane

Then, the source is a BRep Intersection curve from the |11_knuckle|hullMod and the plane, as depicted below:

Define Source Curve

Target

For the target curve, a reference curve named targetRef will be used initially. This is an F-Spline curve, as shown below:

Define Reference for Target Curve

The target curve is an F-Spline with the same properties as the above one, but the green rectangle is filled with this expression: Area|Value: |12_bow|curves|01_targetSetUp|targetRef.getArea(0, 2) * |12_bow|areaFactor.

BRep Morphing

Here, a BRep Morph is applied with the same faces to be morphed as in the Knuckle section, namely 15, 14 and 9. The input is the |11_knuckle|hullMod, while the Source and Target Geometries are the ones generated above. The Interpolation Factor is linked to the |12_bow|interpolationFactor design variable. In this setup, both the Target Geometry and the Interpolation Factor can be adjusted.

Animating Morphing

In the animations below, the effects of the BRep Morphing on the bow region are presented:

BRep Morphing of Bow

Scope Structure

The final scope structure of |12_bow| is shown in the following figure.

Bow Scope Structure

Final Hull

With all the Delta Transformations and BRep morphings completed, a new scope named |100_finalHull| is created, containing the BRep hullModified. The source for this scope is |12_bow|brepMorph and the Data Reduction Tolerance is set to 0.01 to avoid any potential tessellation issues.

While it’s unlikely that all these deformations will be needed simultaneously, these examples serve as best practices, tips and tricks. This approach allows you to explore new methods, offering a variety of choices and inspiring fresh ideas. Ultimately, it provides a foundation for creating your own Partially Parametric Model based on an imported ship hull geometry.

For this modified geometry, we will also calculate a few hydrostatic parameters and optimize it based on a Hard Point constraint.

Hard Point

Defining a Hard Point within CAESES is straightforward. For this task, a new scope named |101_hardPoint| is created and a 3D point named p within this scope is used for the Hard Point with the following coordinates:

  • X: 112
  • Y: 4.5
  • Z: 8.5

The following figure demonstrates how the Hard Point feature hardPointCheck is defined. This feature is located in the Maritime Tab.

Define Hard Point Check

Hydrostatics Parameters

The hydrostatic parameters defined in the scope |102_hydrostatics| are based on a draft = 6, which is a user-defined input and can be adjusted. These parameters also depend on the triangulation of the BRep |100_finalHull|hullModified. Below is an explanation of how the Displacement (dpl), Longitudinal Center of Buoyancy (LCB) and Wetted Surface (ws) are calculated within CAESES.

  • dpl = |100_finalHull|hullModified.getDisplacement(draft, 0, 0).at(0).castTo(FDouble)
  • LCB = |100_finalHull|hullModified.getDisplacement(draft, 0, 0).at(2).castTo(FVector3):X
  • ws = |100_finalHull|hullModified.getDisplacement(draft, 0, 0).at(1).castTo(FDouble)

Optimization

Finally, an optimization process is defined as a simple example by optimizing the hull using the TSearch algorithm, a reliable option in CAESES for single-objective optimization. The objective function in this optimization is to minimize the |102_hydrostatics|dpl while adhering to the Hard Point Constraint.

Objective Function

The objective function for this optimization is to minimize the displacement of the hull (|102_hydrostatics|dpl), which is often desirable and can be calculated quickly in CAESES, as demonstrated earlier. Additionally, the |102_hydrostatics|LCB and |102_hydrostatics|ws values are monitored.

Constraint

The optimization will be subject to a Inequality Constraint, ensuring that the hull does not exceed the position set for the Hard Point. The figure below demonstrates how to define such x a constraint in CAESES.

Define Inequality Constraint

Design Variables

The design variables chosen for this optimization are those introduced in the Bow section, as they affect the deformation of the hull near the Hard Point.

  1. |12_bow|areaFactor
  2. |12_bow|entryAngle

Algorithm

Inside CAESES, there are several options for single-objective optimization, as shown below. One reliable option for this kind of problem is the TSearch algorithm.

Single Objective Optimization Algorithms

The setup for this optimization algorithm, based on the aforementioned properties, is presented below.

Setup Tsearch Algorithm

Optimization Results

The optimization results are presented in the following diagram, with red triangles indicating violated designs and green circles representing valid ones. The optimal design is highlighted, with design variables areaFactor = 1.0423242 and entryAngle = 55.297852.

Optimization Results

Conclusions

In this tutorial, various Partially Parametric Modeling techniques were presented. Additionally, many useful functionalities of CAESES were introduced to set them up.


Final Setup

CAESES Project File

If you want to take a look at the finalized parametric model you can find the resulting CAESES project file shape-morphing-shiphull.cdb here:

Load Final Model