Research Article

Partitioned Strong Coupling of Discrete Elements with Large Deformation Structural Finite Elements to Model Impact on Highly Flexible Tension Structures

Algorithm 6

Strong coupling: relax displacements and velocities.
(1)### Start Time Loop ####
(2)while dem_analysis.time < dem_analysis.end_time:
(3) # update time parameters
(4) dem_analysis.AdvanceInTime()
(5) structural_analysis.AdvanceInTime()
(6) # save the current position, forces, velocity, etc., of the DEM wall condition and particles
(7) dem_analysis.SaveCurrentData()
(8) # initialize time step
(9) structural_analysis.InitializeSolutionStep()
(10) # initial interface residuals
(11) InitializeResiduals()
(12) while interface_residual > interface_tolerance:
(13)  ### Solve DEM Problem ####
(14)  # reset the previous saved data of the particle to keep it at the same reference position in each inner loop step
(15)  dem_analysis.SetOldDataParticles()
(16)  # search and find neighbouring elements/particles which are in contact
(17)dem_analysis.SearchOperations()
(18)# calculate contact forces
(19)  dem_analysis.ForceOperations()
(20)  # integrate in time to obtain new position and velocity of DEM particles
(21)  dem_analysis.IntegrationOfMotion()
(22)  ### Map Contact Forces ####
(23)  # DEM to Structure
(24)  mapper.Map(DEMApplication.CONTACT_FORCES, StructuralMechanicsApplication.POINT_LOAD)
(25)  ### Solve Structural Mechanics Problem ####
(26)  # prediction step for solution scheme (if necessary)
(27)  structural_analysis.Predict()
(28)  # solve the FEM system of equations or explicitly integrate in time
(29)  structural_analysis.SolveSolutionStep()
(30)  ### Map Velocity and Displacement ####
(31)  # Structure to DEM
(32)  mapper.InverseMap(VELOCITY)
(33)  mapper.InverseMap(DISPLACEMENT)
(34)  ### Calculate Interface Residuals ####
(35)  calculate_displacement_residual()
(36)  calculate_velocity_residual()
(37)  # use the maximum residual for the convergence check
(38)  interface_residual = max(displacement_residual, velocity_residual)
(39)  ### Relax Exchange Data ####
(40)  dem_analysis.RelaxDisplacementAndVelocity()
(41)  dem_analysis.SetRelaxedDisplacementAndVelocity()
(42)  ### Update DEM ####
(43)  # update position of DEM wall
(44)  dem_analysis.MoveMesh()
(45)  # use the current position of the DEM wall condition and the last converged position to calculate the difference in displacement, which is used to calculate contact force
(46)  dem_analysis.CalculateDeltaDispFromIntermediatePos()
(47) # finalize time step by updating state variables and spatial position
(48) structural_analysis.FinalizeSolutionStep()
(49) dem_analysis.FinalizeSingleTimeStep()
(50)### Finalize Applications ####
(51)dem_analysis.Finalize()
(52)structural_analysis.Finalize()