Externally calculated bend stiffness

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 four components of bend moment to calculate. The possible values for lpDataName are vdnXBendMomentIn, vdnYBendMomentIn, vdnXBendMomentOut and vdnYBendMomentOut.

The four 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.

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: \begin{equation*} \pi^2 EI / l_0^2 \end{equation*} where $l_0$ 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.

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.

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.

Statics

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.

See also

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