TLP Setdown Example

<< Click to Display Table of Contents >>

Navigation:  Flexcom > Theory > Applied Loading > Boundary Conditions > Arbitrary Boundary Conditions >

TLP Setdown Example

Previous pageNext page

In an analysis of a TLP tether, it is required to invoke the user-subroutine option to superpose the motion due to TLP setdown on the motion due to TLP heave. The user-subroutine facility is required because of course the TLP setdown is very much a time dependent quantity, since it is a function of the instantaneous TLP surge. The actual equation defining the magnitude of the setdown is:

               (1)

where:

S(t) is the setdown value at time t

L is the tether length

is the TLP surge at time t

The example user subroutine is shown in the table below.

Example User-Subroutine

 

! Subroutine usrdsp -- to prescribe time-dependent displacements.

! Do not modify the following lines.

subroutine usrdsp(node, ndof, time, ramp, dispx, dispy, dispz, disp)

!dec$ attributes dllexport, stdcall, reference :: usrdsp

  implicit none

  

  integer, intent(in) :: node

  !dec$ attributes reference :: node

  integer, intent(in) :: ndof

  !dec$ attributes reference :: ndof

  real(8), intent(in) :: time

  !dec$ attributes reference :: time

  real(8), intent(in) :: ramp

  !dec$ attributes reference :: ramp

  real(8), intent(in) :: dispx

  !dec$ attributes reference :: dispx

  real(8), intent(in) :: dispy

  !dec$ attributes reference :: dispy

  real(8), intent(in) :: dispz

  !dec$ attributes reference :: dispz

  real(8), intent(inout) :: disp

  !dec$ attributes reference :: disp

 

!

! Variable Names

!

!     node    : The number of the node for which usrdsp is being called.

!     ndof    : The number of the degree of freedom (dof) for which usrdsp

!               is being called.

!     time    : The present simulation time.

!     ramp    : The current value of the ramp being applied to loads and

!               displacements.

!

!     dispx   : The displacement value currently in the array of nodal

!               displacements for the vertical dof at this node.

!               If heave motions have been specified at this node, dispx will

!               contain the heave calculated at this time.

!     dispy   : The displacement value currently in the array of nodal

!               displacements for dof 2 at this node.

!     dispz   : The displacement value currently in the array of nodal

!               displacements for dof 3 at this node.

!

!     disp    : The displacement value to be assigned to this node and dof

!               for this time value (user-specified).

!

! Declare local variables.

  real(8) :: setdown

 

! Insert coding to define user-specified motion below this line.

 

  setdown = 315.d0 - dsqrt(315.d0**2 - dispy**2)

  disp    = dispx - setdown

  

  ! Notes:  (i)   Setdown based on tether length of 315m

  !         (ii)  Setdown superposed on motion due to heave

  !         (iii) dispx, dispy and dispz already have ramp applied,

  !               so do not apply ramp to setdown

 

! Do not alter the next line. 

end subroutine usrdsp