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

Module with subroutines for quasi-static time-domain simulation. More...

Functions/Subroutines

subroutine, public staticequilibrium (sam, sys, mech, ctrl, xinp, num_xinp, lpu, ierr)
 Performs static equilibrium iterations to find start configuration. More...
 
subroutine, public staticint (sam, sys, mech, ctrl, extRhs, iop, resFileFormat, lpu, ierr)
 Advances the quasi-static solution one time step. More...
 
subroutine staticincandupdate (sam, sys, mech, ierr, delta, noCorotUpd, doIterations, doFrictions)
 Increments all position variables and updates the configuration. More...
 
subroutine finalstaticupdate (sam, sys, mech, ierr)
 Updates the configuration after initial static equilibrium. More...
 

Detailed Description

Module with subroutines for quasi-static time-domain simulation.

Function/Subroutine Documentation

◆ finalstaticupdate()

subroutine staticequilibriummodule::finalstaticupdate ( type(samtype), intent(in)  sam,
type(systemtype), intent(inout)  sys,
type(mechanismtype), intent(inout)  mech,
integer, intent(out)  ierr 
)

Updates the configuration after initial static equilibrium.

Parameters
[in]samData for managing system matrix assembly
sysSystem level model data
mechMechanism components of the model
[out]ierrError flag

This subroutine performs some final updates after the initial static equilibrium iterations have converged. Typically, this is (initial) velocity-dependent stuff, like dampers, etc. There is no need to update those during the iterations themselves which are purely static, only on the converged configuration.

Note
If the subsequent time history simulation is quasi-static, any non-zero initial conditions are nullified such that all velocity-dependent quantities will be initialized to zero instead.
Author
Knut Morten Okstad
Date
2 Jun 2004
Here is the call graph for this function:
Here is the caller graph for this function:

◆ staticequilibrium()

subroutine, public staticequilibriummodule::staticequilibrium ( type(samtype), intent(inout)  sam,
type(systemtype), intent(inout)  sys,
type(mechanismtype), intent(inout)  mech,
type(controltype), intent(inout)  ctrl,
real(dp), dimension(*), intent(in), optional  xinp,
integer, intent(inout), optional  num_xinp,
integer, intent(in)  lpu,
integer, intent(out)  ierr 
)

Performs static equilibrium iterations to find start configuration.

Parameters
samData for managing system matrix assembly
sysSystem level model data
mechMechanism components of the model
ctrlControl system data
[in]xinpExternal function values for initial state
num_xinpNumber of external function values to extract/extracted
[in]lpuFile unit number for res-file output
[out]ierrError flag

This is a rewritten version of the old QUAEQL subroutine by OIS and others from 1989. It solves for the initial configuration where all external loads (including gravity) is evaluated at the starting time, through Newton-Raphson iterations. The purpose is to avoid initial noise in the subsequent dynamic simulation due to large initial transients.

Author
Knut Morten Okstad
Date
30 May 2002
Here is the call graph for this function:
Here is the caller graph for this function:

◆ staticincandupdate()

subroutine staticequilibriummodule::staticincandupdate ( type(samtype), intent(in)  sam,
type(systemtype), intent(inout)  sys,
type(mechanismtype), intent(inout)  mech,
integer, intent(out)  ierr,
real(dp), dimension(:), intent(in), optional  delta,
logical, intent(in), optional  noCorotUpd,
logical, intent(in), optional  doIterations,
logical, intent(in), optional  doFrictions 
)
private

Increments all position variables and updates the configuration.

Parameters
[in]samData for managing system matrix assembly
sysSystem level model data
mechMechanism components of the model
[out]ierrError flag
[in]deltaIterative solution increment
[in]noCorotUpdIf .true., the co-rotated frames are not updated
[in]doIterationsIf .false., no initial equilibrium iterations (used by the tire module only)
[in]doFrictionsIf not present, skip friction update. If .false., use pseudo-velocities during friction update.

All mechanism objects are brought up-to-date with the updated configuration while the velocity and acceleration variables are assumed identically zero.

Author
Knut Morten Okstad
Date
30 May 2002
Here is the call graph for this function:
Here is the caller graph for this function:

◆ staticint()

subroutine, public staticequilibriummodule::staticint ( type(samtype), intent(in)  sam,
type(systemtype), intent(inout)  sys,
type(mechanismtype), intent(inout)  mech,
type(controltype), intent(inout)  ctrl,
real(dp), dimension(:), intent(in), optional  extRhs,
integer, intent(inout)  iop,
integer, intent(inout)  resFileFormat,
integer, intent(in)  lpu,
integer, intent(out)  ierr 
)

Advances the quasi-static solution one time step.

Parameters
samData for managing system matrix assembly
sysSystem level model data
mechMechanism components of the model
ctrlControl system data
[in]extRhsAdditional external forces set by some external process
iopControl variable defining what to do (see below)
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, and then return to the calling module
  • = -2 : Same as -1, but also factorize the stiffness matrix
  • = 1 : We are doing quasi-static iterations (internal mode)
  • = 3 : Do one quasi-static iteration on the existing linear system
  • = 5 : As 3, and then continue until equilibrium
  • = 15 : As 5, but include triangularization of existing equation system
Author
Knut Morten Okstad
Date
30 May 2002
Here is the call graph for this function:
Here is the caller graph for this function: