Analyses

<< Click to Display Table of Contents >>

Navigation:  Flexcom > Examples > J - Specialised Examples > J01 - Dropped Object and Recovery >

Analyses

Previous pageNext page

The dropped object analysis is performed in two stages. The initial static determines the static equilibrium configuration of the system. The dynamic analysis models the collision between the falling container and the riser.

The base of the riser is fixed in all translational degrees of freedom, while the upper end is attached to the vessel. The container is restrained from motion in the initial static analysis, and then allowed to free-fall in the subsequent dynamic analysis.

Clashing is a complex and highly non-linear phenomenon, so the use of relatively small time steps is essential, in order to accurately capture the moment of impact, and the subsequent structural response. Flexcom automatically reduces the solution time step in anticipation of contact, and once the components have separated after impact, the time step begins to increase again. This approach facilitates a robust and accurate contact model, while also ensuring an efficient simulation.

 

The recovered object analysis is performed in two stages. The initial static is used to set the model configuration and define the balloon elements attached to the container for later modification in a subsequent dynamic analysis.

The dynamic analysis is used to load the dll which changes the element buoyancy diameters on the balloon as required throughout the analysis to replicate the inflating lift balloon. The source code for the user defined element dll is shown below.

 

subroutine user_defined_element(iter,time,ramp,nnode,nncon,ncord,nndof,nelmn,necon,nedof,ndamp,elmcon,   &

 nodcon,intoun,ietoue,etype,edamp,cord,displacement,velocity,acceleration,trgb,tglu,disp_prev,pos_prev, &

 vel_prev,acc_prev,axial_force,y_shear,z_shear,torque,y_bending,z_bending,eff_tension,y_curvature,      &

 z_curvature,length,eiyy,eizz,gj,ea,mass,polar,dint,ddrag,dbuoy,dout,dcont,fluid,damper)

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

implicit none

 

! Input variables - cannot be modified within this subroutine

 

integer, intent(in)    :: iter

!dec$ attributes value :: iter

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

!dec$ attributes value :: time

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

!dec$ attributes value :: ramp

integer(4), intent(in) :: nnode

!dec$ attributes value :: nnode

integer(4), intent(in) :: nncon

!dec$ attributes value :: nncon

integer(4), intent(in) :: ncord

!dec$ attributes value :: ncord

integer(4), intent(in) :: nndof

!dec$ attributes value :: nndof

 

integer(4), intent(in) :: nelmn

!dec$ attributes value :: nelmn

integer(4), intent(in) :: necon

!dec$ attributes value :: necon

integer(4), intent(in) :: nedof

!dec$ attributes value :: nedof

integer(4), intent(in) :: ndamp

!dec$ attributes value :: ndamp

 

integer(4), intent(in), dimension(nncon, nelmn) :: elmcon

!dec$ attributes reference :: elmcon                    

integer(4), intent(in), dimension(necon,nnode)  :: nodcon

!dec$ attributes reference :: nodcon                    

integer(4), intent(in), dimension(nnode)        :: intoun

!dec$ attributes reference :: intoun                    

integer(4), intent(in), dimension(nelmn)        :: ietoue

!dec$ attributes reference :: ietoue                  

integer(4), intent(in), dimension(nelmn)       :: etype

 !dec$ attributes reference :: etype

integer(4), intent(in), dimension(nelmn)       :: edamp

 !dec$ attributes reference :: edamp  

real(8), intent(in), dimension(ncord,nnode)    :: cord

!dec$ attributes reference :: cord                      

real(8), intent(in), dimension(nndof,nnode)    :: displacement

!dec$ attributes reference :: displacement              

real(8), intent(in), dimension(nndof,nnode)    :: velocity

!dec$ attributes reference :: velocity                  

real(8), intent(in), dimension(nndof,nnode)    :: acceleration

!dec$ attributes reference :: acceleration              

real(8), intent(in), dimension(3,3,nelmn)      :: trgb

!dec$ attributes reference :: trgb                      

real(8), intent(in), dimension(3,3,nelmn)      :: tglu

!dec$ attributes reference :: tglu                      

real(8), intent(in), dimension(nndof,nnode)    :: disp_prev

!dec$ attributes reference :: disp_prev                  

real(8), intent(in), dimension(nndof,nnode)    :: pos_prev

!dec$ attributes reference :: pos_prev                  

real(8), intent(in), dimension(nndof,nnode)    :: vel_prev

!dec$ attributes reference :: vel_prev                  

real(8), intent(in), dimension(nndof,nnode)    :: acc_prev

!dec$ attributes reference :: acc_prev                  

real(8), intent(in), dimension(nelmn,3)        :: axial_force

!dec$ attributes reference :: axial_force                

real(8), intent(in), dimension(nelmn,3)        :: y_shear

!dec$ attributes reference :: y_shear                    

real(8), intent(in), dimension(nelmn,3)        :: z_shear

!dec$ attributes reference :: z_shear                    

real(8), intent(in), dimension(nelmn,3)        :: torque

!dec$ attributes reference :: torque                    

real(8), intent(in), dimension(nelmn,3)        :: y_bending

!dec$ attributes reference :: y_bending                  

real(8), intent(in), dimension(nelmn,3)        :: z_bending

!dec$ attributes reference :: z_bending                  

real(8), intent(in), dimension(nelmn,3)        :: eff_tension

!dec$ attributes reference :: eff_tension                

real(8), intent(in), dimension(nelmn,3)        :: y_curvature

!dec$ attributes reference :: y_curvature                

real(8), intent(in), dimension(nelmn,3)        :: z_curvature

!dec$ attributes reference :: z_curvature

 

! Output variables - can be modified within this subroutine if required

 

real(8), intent(inout), dimension(nelmn)       :: length

!dec$ attributes reference :: length

 real(8), intent(inout), dimension(nelmn)       :: eiyy

!dec$ attributes reference :: eiyy

real(8), intent(inout), dimension(nelmn)       :: eizz

!dec$ attributes reference :: eizz

real(8), intent(inout), dimension(nelmn)       :: gj

!dec$ attributes reference :: gj

real(8), intent(inout), dimension(nelmn)       :: ea

!dec$ attributes reference :: ea

real(8), intent(inout), dimension(nelmn)       :: mass

!dec$ attributes reference :: mass

real(8), intent(inout), dimension(nelmn)       :: polar

!dec$ attributes reference :: polar

real(8), intent(inout), dimension(nelmn)       :: dint

!dec$ attributes reference :: dint

real(8), intent(inout), dimension(nelmn)       :: ddrag

!dec$ attributes reference :: ddrag

real(8), intent(inout), dimension(nelmn)       :: dbuoy

!dec$ attributes reference :: dbuoy

real(8), intent(inout), dimension(nelmn)       :: dout

!dec$ attributes reference :: dout

real(8), intent(inout), dimension(nelmn)       :: dcont

!dec$ attributes reference :: dcont

real(8), intent(inout), dimension(nelmn,4)     :: fluid

!dec$ attributes reference :: fluid

real(8), intent(inout), dimension(ndamp,4)     :: damper

!dec$ attributes reference :: damper

 

! Variable names

!     iter               : Current iteration

!     time               : Current timestep

!     ramp               : Ramp

!     nnode              : Number of nodes in the model

!     nncon              : Number of nodes with connected elements

!     ncord              : Number of coordinates

!     nndof              : Number of degrees of freedom per node (6)

!     nelmn              : Number of elements in the model

!     necon              : Number of elements connected

!     nedof              : Number of degrees of freedom per element (14)

!     ndamp              : Number of damper elements

!     elmcon             : Element connectivity array

!     nodcon             : Node connectivity array

!     intoun             : Internal node to user node numbering array

!     ietoue             : Internal element to user element numbering array

!     etype              : Element type - (1) Beam, (2) Spring, (3) Hinge, (4) Damper

!     edamp              : Damper element number array

!     cord               : Initial nodal co-ordinates

!     displacement       : Nodal displacements at previous iteration

!     velocity           : Nodal velocities at previous iteration

!     acceleration       : Nodal accelerations at previous iteration

!     trgb               : Rigid body rotation (local undeformed -> convected) transformation matrix

!     tglu               : Global to local undeformed transformation matrix

!     disp_prev          : Nodal displacements at previous timestep

!     pos_prev           : Nodal positions at previous timestep

!     vel_prev           : Nodal velocities at previous timestep

!     acc_prev           : Nodal accelerations at previous timestep

!     axial_force        : Axial force in elements at previous timestep

!     y_shear            : Y Shear forces in elements at previous timestep

!     z_shear            : Z Shear forces in elements at previous timestep

!     torque             : Torque in elements at previous timestep

!     y_bending          : Y bending moments in elements at previous timestep

!     z_bending          : Z bending moments in elements at previous timestep

!     eff_tension        : Effective Tension in elements at previous timestep

!     y_curvature        : Y curvatures in elements at previous timestep

!     z_curvature        : Z curvatures in elements at previous timestep

!     length             : Element natural length

!     eiyy               : Element linear EIyy

!     eizz               : Element linear EIzz

!     gj                 : Element linear GJ

!     ea                 : Element linear EA

!     mass               : Element mass per unit length

!     polar              : Element polar inertia per unit length

!     dint               : Element internal diameters

!     ddrag              : Element drag diameters

!     dbuoy              : Element buoyancy diameters

!     dout               : Element outer diameters

!     dcont              : Element contact diameters

!     fluid              : Element fluid contents -

!                            (1) Top elevation (fluid head)

!                            (2) Density

!                            (3) Internal pressure

!                            (4) Velocity

!     damper             : Element contact diameters

!                            (1) C0

!                            (2) C1

!                            (3) C2

!                            (4) C0_Threshold

 

 

! Declare local variables...

 integer :: i

 

! Insert user code below this line...

 do i = 1, nelmn
   if( ietoue(i) == 853 )then
     dbuoy(i) = 2.0d0 + 0.02d0 * (time / 100.0d0)
  else if( ietoue(i) == 854 )then
     dbuoy(i) = 2.0d0 + 0.02d0 * (time / 100.0d0)
  else if( ietoue(i) == 855 )then
     dbuoy(i) = 2.0d0 + 0.02d0 * (time / 100.0d0)
  else if( ietoue(i) == 856 )then

     dbuoy(i) = 2.0d0 + 0.02d0 * (time / 100.0d0)
  end if
end do

 

end subroutine user_defined_element