**sequence
#
Description#
This command writes the sequences or blocks of time steps for the
problem. Solution requires specification of discrete times for
which the governing equations are to be evaluated. The program allows an
unlimited number of **sequence
or **cycles
(see next command
page) instances in order to create complex loading histories. There is
really no distinction between the sequence and the cycle commands; the
cycle command automatically generates a number of repeated sequence
groups to form cycles.
As discussed in the introduction of ****calcul
(page ), the
sequences are broken up into increments which are the most fundamental
unit of time stepping.
Syntax#
Sequences are created as necessary according to the sub-options of the
**sequence
command. Normally, the sequences are defined by end times
or incremental times of the sequences. The syntax for these definitions
is the following:
**sequence
[ N ]
[ *algorithm
algo1 [ algo2, algoN ] ]
[ *increment
inc1, inc2, …, incN ]
[ *iteration
iter1, iter2, …, iterN ]
[ *limit_dof
vari, vali1,…valin [ , varj, valj1,…, valjN ] ]
[ *time
time1, time2,…, timeN ]
[ *dtime
dtime1, dtime2,…, dtimeN ]
[ *ratio
[ absolu
] ratio1, ratio2, …, ratioN ]
The integer value N defines the number of sequences which will be run, even if there are more defined in the sub-commands. This allows the run-time of a problem to be limited quickly, without deleting or commenting information which may be useful later on. In the absence of this value, the number of sequences will be determined based on the number of time or dtime values input.
All the other options are used for specifying particular parameters
which correspond to the sequences. If the number of values given after
an option is less than the number of sequences of the current block (the
last **sequence
command), the last value given will be repeated for
all the subsequent sequences. If one or several of the sub commands are
absent, the default value will apply to all the sequences defined.
*algorithm
String values substituted for algo1 to algoN are the algorithm solution methods for each segment of the loading. The values for these methods are summarized:
Algorithm |
Description |
---|---|
|
Newton “elastic” method. Matrix is not re-calculated during iterations |
|
Linear method. No iterations, matrix calculated only once (once after time step or Newmark coefficients changes in dynamics). The computation of internal forces is made through the K.U multiplication which is much faster than the classical element integration procedure. Only nodal fields are post-treated, no element fields are available. This can be useful to treat linear dynamics problems in a very fast way. |
|
Modified Newton algorithm with the matrix calculated and inverted the first and second iterations |
|
Modified Newton algorithm with the matrix calculated and inverted the first, second, and third iterations |
|
Newton-Raphson algorithm where the matrix is always updated during iterations |
*increment
The integer values inc1, inc2, …, incN are used to define the number of increments in corresponding sequences. In the absence of this option, all sequences are calculated in a single loading increment.
*iteration
iter1, …, iterNInteger values used to limit the maximum number of iterations in a given increment, valid during a sequence. The default number of iterations is \(10\). These values may be used to adjust the divergence control, or limit the CPU consumption of a poorly converging problem.
*limit_dof
vari, vali1,…valin, …This option takes a DOF character name (
U1
,U2
, etc) and a list of real values corresponding the given segments. Any number of DOF name / list of limiting values may be input sequentially to put limits on the different DOFs of the problem. Real numbers input are limiting values for any iteration of the degree of freedom. In the course of iterations, we will have available \(\Delta \bf u_i\) at iteration \(i+1\) from the solution of the linear system, \(d\bf u_i = \left(\bf K_i \right)^{-1} \bf R_i\). In place of the standard updating of the DOF values, \(\Delta \bf u_{i+1} = \Delta \bf u_i + d\bf u_i\) we have \(\Delta \bf u_{i+1} = \Delta \bf u_i + \beta d\bf u_i\) where \(\beta\) is a limiting factor:
with \(0<\beta<1\).
This option allows the calculation to pass points where the algorithm would predict instability, at the cost of increased number of iterations. Excessive trial delta values in the DOFs may occur when the problem tangent matrix displays softening behavior.
*time *time1, time2,..., timeN*
specifies the absolute times at the end of the sequences. There are as many values as the number of sequences. The first sequence of the problem is at \(t=0\), or the last time given in the previous
**sequence
command. This initial value must be less than the first time time1 given here. In the absence of a time option, the times will be assigned to the sequence numbers.*dtime
dtime1, dtime2,…, dtimeNspecifies the increment of time taken over a sequence. This method of specifying the sequence times is useful if a “time shiftable” block of sequences is desired. An example is a block of loadings to be subjected to different pre-loadings, or loading after a series of cycles, where additional computations would be necessary to assure that the times are well-posed. Options
*dtime
and*time
are mutually exclusive.
*ratio
[norme_force
|absolu
|automatic
] ratio1, ratio2, …, ratioNThis option is for specifying a global convergence criterion in a sequence. The real values ratio1, etc correspond to the sequences defined. A single given value will be repeated for all the sequences.
The
norme_force
keyword (default) means that convergence is achieved if:(119)#\[\frac{\left\|R^{\rm int} - R^{\rm ext}\right\|_2}{\left\|R^{\rm ext}\right\|_2} < 0.01 \times {\rm ratio}\]where \(R^{\rm int}\) and \(R^{\rm ext}\) are the internal and external nodal forces vectors. \(R^{\rm int} - R^{\rm ext}\) is therefore the equilibrium residual. The
absolute
keyword means that convergence is achieved if:(120)#\[\left\|R^{\rm int} - R^{\rm ext}\right\|_\infty < {\rm ratio}\]The
automatic
keyword means thatnorme_force
is selected excepted if \(||R^{\rm ext}||=0\) in which case theabsolute
criterion is taken.There is an extended syntax for ratio which is of the form :
*ratio
(crit_type1 dof_type1:
v1 crit_type2 dof_type2:
v2 …)This extended syntax is useful for multifield problems. The global dof vector is split into sub-vectors corresponding to each specified
dof_type
. The specified criterion (crit_type
can benorme_force
,absolu
orautomatic
) is then applied on each sub-vector and global convergence is achieved if all criteria are met.dof_type
can be any dof type such asU1
,U2
,TP
, … or any class of dof (i.e. dof names with the same prefix) such asU
which concatenatesU1
,U2
andU3
in the same sub-vector.
Example#
**sequence
*time 1.0 5.0
*increment 10
*iteration 20
*ratio absolu 1.0
*algorithm p1p2p3
*limit_dof U1 .1 .1 U2 .02 .03
d
is a dof coming from a multifield element.***resolution
**sequence
*time 1.
*increment 20
*iteration 5
*algorithm p1p2p3
*ratio (automatic U:1.e-3 absolu d:1.e-6)
%
% from ab429.inp making 3 sequences
%
**sequence
*time 3. 33. 50.
*ratio 1. 3. 3.
*iteration 50 30 30
*increment 10 15 34
*algorithm p1p2p3
*limit_dof
U1 0.2 0.5 0.5
U2 0.2 0.5 0.5
PR 10.0 10.0 10.0
**cycles
#
Description#
The cycles option is essentially the same as the **sequence
option
except that it repeats the block of sequences a given number of times.
Normally, use of the **cycles
option will be employed after a series
of pre-loading sequences, in order to attain the initial loading state
of the cycles. Therefore, cyclic loadings will usually require a
**sequence
definition for the pre-load, followed by a **cycles
definition for the cycles themselves. Unless the end segment of the
cycles will return to zero loading, additional **segment
definitions
may be given to relax the structure to an unloaded state.
An example loading is a pre-load in tension, followed by tension-torsion cycles, and finally a relaxation of the initial tensile load. Many more cases may be imagined.
As the calculation time scale is the principal measure of the solution, it is important to understand the method of time scale construction from a cycles definition. The times given for this option are always relative to the beginning of the cycle. This defines a local cycle-based time scale, which may be repeated.
Syntax#
The syntax for cyclic loading is the following:
**cycles
[ N ]
[ *algorithm
algo1 [ algo2, algoN ] ]
[ *increment
inc1, inc2, …, incN ]
[ *iteration
iter1, iter2, …, iterN ]
[ *limit_dof
vari, vali1,…valin [ , varj, valj1,…, valjN ] ]
[ *time
time1, time2,…, timeN ]
[ *dtime
dtime1, dtime2,…, dtimeN ]
[ *ratio
[ absolu
] ratio1, ratio2, …, ratioN ]
the integer N is the number of cycles to be created.
Except for the time scale alteration for the cyclic sequences defined
with the *time
or *dtime
options, all sub-commands for this
command are equivalent to the **sequence
command.
Example#
An example loading gives 5 cycles with the waveform 10s-300s-10s after a pre-load of 1s.
**sequence
*time 1.
**cycles 5
*dtime 10. 300. 10.
*increment 5 10 1
*algorithm p1p2p3
This example assumes the first one second loading segment will be a
linear solution. The first segment of the first cycle (from 1 second to
11 seconds on the “global” clock) may be a loading with non-linear
behavior, so 5 increments are given. The following rest time has 10
increments, also assuming non-linear behavior. The final segment from
times 311 seconds to 321 seconds is assumed linear and will be solved in
one increment. The same increments will then be repeated 4 more times. A
corresponding loading waveform is given in the ***table
command.