Externally calculated bend stiffness

OrcaFlex line types allow the bend stiffness data to be externally calculated. The procedure involved is more complicated than for other external functions and is described in detail below.

OrcaFlex line model

In order to set the following in context it is helpful to consider a brief overview of the OrcaFlex line model.

Figure: OrcaFlex line model

The line is divided into a series of line segments which are then modelled by straight massless elements with a node at each end. Each node is effectively a short straight rod that represents the two half-segments either side of the node. The exception to this is end nodes, which have only one half-segment next to them, and so represent just one half-segment.

OrcaFlex lines are made up of sections and each section has properties as specified by an OrcaFlex line type. In turn, each section is made of a number of nodes and segments which get their properties from the appropriate section's line type.

At each node there are bending springs which model the bend stiffness of the line. These are shown in more detail below:

Figure: Detailed representation of OrcaFlex line model

The most important thing to note is that on each side of the node is a bending spring. It is the function of these bending springs that the external function implements.

Associated with each node are two bending springs, one on the side towards End A called the 'in' bending spring and one on the side towards End B called the 'out' bending spring. For the node at End A there is no 'in' bending spring. Instead the bending connection stiffness is used – this can be thought of as the end fitting stiffness. Similarly there is no 'out' bending spring at End B.

These node bending springs calculate a bend moment in vector form. The bend moment vectors have 2 components, x and y. The third component z is the torsional moment and is handled separately by the torsional spring.

So, each mid-node must calculate 4 bend moment values: x-in, y-in, x-out and y-out. Likewise, the node at End A must calculate 2 bend moment values: x-out and y-out. The node at End B must also calculate 2 bend moment values: x-in and y-in.

External function instancing

For other external functions in OrcaFlex there is a one-to-one relationship between data items specified to be externally calculated and instances of an external function record (TExtFnInfo). Externally calculated bend stiffness deviates from this pattern.

The bend stiffness data are specified on the line type form in OrcaFlex. There may be many nodes in potentially many different lines which use the properties of any single line type. Because of this each node in a section with externally calculated bend stiffness has separate instances of an external function record. In addition, there will be separate instances for each bend moment value which must be calculated: x-in, y-in, x-out and y-out.

Identifying the external function record

The external function must check the contents of lpExtFnInfo->lpDataName in order to decide which of the 4 components of bend moment to calculate. The possible values for lpDataName are vdnXBendMomentIn, vdnYBendMomentIn, vdnXBendMomentOut and vdnYBendMomentOut.

The 4 components discussed above apply to a single node. If you need to identify that node you should use the lpExtFnInfo->ObjectHandle and lpExtFnInfo->lpObjectExtra parameters.

Note that although the OrcaFlex data item is named bend stiffness the external function's job is to calculate a bend moment.

In addition to being called to calculate bend moment, the external function will be called to calculate a nominal bend stiffness – see below. In this case the lpDataName field is set to vdnXBendStiffness and the ObjectHandle field identifies a line type.


The other types of external function in OrcaFlex are, typically, not updated during statics. Bend stiffness external functions differ in that they are required to update their values during statics.

Externally calculated bend stiffness allows you to implement hysteretic curvature / bend moment relationships, e.g. plasticity, slipping etc. For such relationships you would typically disable the hysteretic effects during statics. To achieve this you can call C_GetModelState – the model is calculating statics if this returns msCalculatingStatics.

Instantaneous calculation data

Although other external functions allow you to call C_GetTimeHistory2 to get instantaneous values of simulation results variables you must not do this for bend stiffness external functions. Instead you should use the node instantaneous calculation data.

Nominal bend stiffness

The OrcaFlex calculation needs to know a 'nominal' value of bend stiffness for various auxilliary requirements. The principal of these is for calculation of the Euler buckling limit. To cater for this a special call (with lpExtFnInfo->Action set to eaCalculateNominalValue) to the external function is made. With this value of Action the external function is requested to return the nominal value of bend stiffness in the lpExtFnInfo->Value field.

The value you return should be the bend stiffness corresponding to zero curvature. If the stiffness is non-isotropic then you need to choose a single representative value. The main use for the value is to calculate the Euler buckling limit which is defined as:


where L is the unstretched segment length. So, if bend stiffness is non-isotropic, we recommend that you return the minimum bend stiffness value to be conservative.

Note: This nominal value call uses different instancing from the other calls to the external function. The nominal value is assumed to be unique to each line type and so the call is made once for each line type with externally calculated bend stiffness. Accordingly the lpExtFnInfo->ObjectHandle parameter identifies a line type.

When lpExtFnInfo->ObjectHandle identifies a line type then the Action parameter is never equal to eaCalculate. The call sequence for line type objects is eaInitialise, eaCalculateNominalValue and then eaFinalise.

Example code

The various issues described above make writing a bend stiffness external function more difficult than other types of external function. We recommend that you study the bend stiffness example to help understand these issues.

See also

TExtFnInfo, Native External Functions, Thread Safety, Instantaneous Calculation Data.