FEDEM Solver  R8.0
Source code of the dynamics solver
Functions/Subroutines
newmarkroutinesmodule Module Reference

Module with subroutines for dynamic simulation in the time domain. More...

Functions/Subroutines

subroutine predictvelacc (sys, motions, iopAlg, ierr)
 Starts a time step by computing predicted velocity and acceleration. More...
 
subroutine incvelacc (sys)
 Increment the system velocity- and acceleration vectors. More...
 
subroutine updatemechanism (sys, mech, ierr, newVelocities, updateCTI)
 Updates all mechanism objects. More...
 
subroutine, private predictandupdate (sam, sys, mech, iopAlg, ierr)
 Updates mechanism based on predicted velocity and acceleration. More...
 
subroutine incandupdate (sam, sys, mech, delta, useTotalInc, ierr)
 Updates mechanism based on corrected velocity and acceleration. More...
 
subroutine newmarkint (sam, sys, mech, ctrl, alpha, extRhs, iop, NewmarkFlag, resFileFormat, lpu, ierr)
 Advances the dynamics solution one step forward. More...
 

Detailed Description

Module with subroutines for dynamic simulation in the time domain.

This module contains subroutines implementing the Newmark time integration driver in the FEDEM Dynamics Solver. Both the Hilber-Hughes-Taylor (HHT-α) and the generalized-α methods are supported, and which of these algorithms to use is controlled via the third digit of the NewmarkFlag option (iopAlg):

The subroutine newmarkint() is the main driver for the time integration process. It calculates the dynamic equilibrium state of the mechanism through a Newton-Raphson iteration procedure. The time step loop itself is in the caller of this subroutine. All other subroutines in this module are utilities that are invoked by newmarkint() to carry out sub-tasks.

All equation numbers below and elsewhere in the comments in the source code are referring to the the Fedem R7.3 Theory Guide. See the Sections 7.1 to 7.4 there for the derivation.

Function/Subroutine Documentation

◆ incandupdate()

subroutine newmarkroutinesmodule::incandupdate ( type(samtype), intent(in)  sam,
type(systemtype), intent(inout)  sys,
type(mechanismtype), intent(inout)  mech,
real(dp), dimension(:), intent(in)  delta,
logical, intent(in)  useTotalInc,
integer, intent(out)  ierr 
)

Updates mechanism based on corrected velocity and acceleration.

Parameters
[in]samData for managing system matrix assembly
[in,out]sysSystem level model data
[in,out]mechMechanism components of the model
[in]deltaIterative solution vector correction
[in]useTotalIncIf .true., use the total solution increment to update position matrices from the previous configuration
[out]ierrError flag

Increment all position, velocity and acceleration variables and bring all mechanism objects up-to-date with the updated configuration.

Author
Karl Erik Thoresen
Date
Sep 1999
Author
Bjorn Haugen
Date
Nov 2001
Author
Knut Morten Okstad
Date
4 Jun 2002
Here is the call graph for this function:
Here is the caller graph for this function:

◆ incvelacc()

subroutine newmarkroutinesmodule::incvelacc ( type(systemtype), intent(inout)  sys)

Increment the system velocity- and acceleration vectors.

Parameters
[in,out]sysSystem level model data

Also calculates tolerance variables for use in convergence check.

Author
Knut Morten Okstad
Date
Jun 2002
Here is the caller graph for this function:

◆ newmarkint()

subroutine newmarkroutinesmodule::newmarkint ( type(samtype), intent(in)  sam,
type(systemtype), intent(inout)  sys,
type(mechanismtype), intent(inout)  mech,
type(controltype), intent(inout)  ctrl,
real(dp), dimension(2), intent(in)  alpha,
real(dp), dimension(:), intent(in), optional  extRhs,
integer, intent(inout)  iop,
integer, intent(in)  NewmarkFlag,
integer, intent(inout)  resFileFormat,
integer, intent(in)  lpu,
integer, intent(out)  ierr 
)

Advances the dynamics solution one step forward.

Parameters
[in]samData for managing system matrix assembly
[in,out]sysSystem level model data
[in,out]mechMechanism components of the model
[in,out]ctrlControl system data
[in]alphaGlobal structural damping parameters
[in]extRhsAdditional external forces set by external process
[in,out]iopControl variable defining what to do (see below)
[in]NewmarkFlagTime integration control variable (see below)
[in,out]resFileFormatFlag for res-file output of convergence history
[in]lpuFile unit number for res-file output
[out]ierrError flag

This subroutine performs different sub-tasks of the solution process, depending on the value of the control variable iop, as follows:

  • = 0 : Normal operation, solve the entire step with Newton-iterations
  • = -1 : Establish the linearized system of the first iteration (the prediction step), and then return to the caller
  • = -2 : Same as -1, but also factorize the Newton matrix
  • = -3 : Same as 0, but this is the first time step after restart
  • = 2 : We are doing Newmark iterations (internal mode)
  • = 4 : Do one Newmark iteration on the existing linear system
  • = 6 : As 4, and then continue until equilibrium
  • = 16 : As 6, but include triangularization of existing equation system

The NewmarkFlag variable is used to select among slightly different versions of the Newmark time integrator. It is a three-digit value (cba) where each of the digits has the following interpretation:

  • a = 1 : Use actual inertia force computed from the residual of the previous increment in the right-hand-side calculation, see eqs. (7.46), (7.53) and (7.55).
  • a = 2 : As for a = 1, but in addition the damping contribution to the force predictor, eq. (7.53), is calculated consistently for nonlinear dampers, see note ii) below.
  • b > 0 : Use total solution increment in the configuration updates
  • c = 1 : Use an HHT-α algorithm equivalent to FENRIS, that is, the force predictor is computed from eq. (7.52) and not (7.53).
  • c = 2 : Use generalized-α algorithm, see Section 7.4.3.
Note
i) If a = 0 (default setting), then the last computed inertia force (FIk) is used instead in the right-hand-side calculation in place of the eq. (7.46) quantity.
ii) a = 2 is equivalent to a = 1 unless the model contains nonlinear dampers and/or hydrodynamic drag. If a < 2 and nonlinear dampers exist, the damping force contribution to the predictor is calculated by evaluating the nonlinear force-velocity curve for the predicted velocity (dk), instead of multiplying the tangent damping matrix by the velocity according to eq. (7.53). This is a simplification and not strictly consistent, but the option a < 2 is retained as default for backward compatibility.
iii) The third digit c is equivalent to the variable iopAlg elsewhere in this documentation. c > 0 also implies a = 2.
Author
MTHJ
Date
1 Jun 1983
Author
Ole Ivar Sivertsen
Date
4 Feb 1989
Author
Karl Erik Thoresen
Date
Des 1998
Author
Bjorn Haugen
Date
Mar 2002
Author
Knut Morten Okstad
Date
9 Jun 2002
Here is the call graph for this function:
Here is the caller graph for this function:

◆ predictandupdate()

subroutine, private newmarkroutinesmodule::predictandupdate ( type(samtype), intent(in)  sam,
type(systemtype), intent(in)  sys,
type(mechanismtype), intent(inout)  mech,
integer, intent(in)  iopAlg,
integer, intent(out)  ierr 
)
private

Updates mechanism based on predicted velocity and acceleration.

Parameters
[in]samData for managing system matrix assembly
[in]sysSystem level model data
[in,out]mechMechanism components of the model
[in]iopAlgAlgorithm option
[out]ierrError flag
Author
Knut Morten Okstad
Date
7 Jun 2002
Here is the call graph for this function:
Here is the caller graph for this function:

◆ predictvelacc()

subroutine newmarkroutinesmodule::predictvelacc ( type(systemtype), intent(inout)  sys,
type(motiontype), dimension(:), intent(inout)  motions,
integer, intent(in)  iopAlg,
integer, intent(out)  ierr 
)

Starts a time step by computing predicted velocity and acceleration.

Parameters
[in,out]sysSystem level model data
[in,out]motionsAll prescribed motions in the model
[in]iopAlgAlgorithm option
[out]ierrError flag
Author
Knut Morten Okstad
Date
3 Jun 2002
Here is the caller graph for this function:

◆ updatemechanism()

subroutine newmarkroutinesmodule::updatemechanism ( type(systemtype), intent(in)  sys,
type(mechanismtype), intent(inout)  mech,
integer, intent(out)  ierr,
logical, intent(in), optional  newVelocities,
integer, intent(in), optional  updateCTI 
)

Updates all mechanism objects.

Parameters
[in]sysSystem level model data
[in,out]mechMechanism components of the model
[in]newVelocitiesIndicates whether new velocities are available. If not present, Tire and friction objects are not updated.
[in]updateCTITire update flag
[out]ierrError flag
Author
Knut Morten Okstad
Date
7 Jun 2002
Here is the call graph for this function:
Here is the caller graph for this function: