TIME_SEQUENCE

Specifies the time stepping and staggering strategy.

AcuTrace Command

Syntax

TIME_SEQUENCE {parameters}

Qualifier

This command has no qualifier.

Parameters

max_time (real) >=0 [=0]
Final time of the particle trace. The trace of an individual particle will terminate when its trace time reaches this value. The trace may terminate earlier due to other criteria. If zero, this option is ignored.
max_segments (integer) >=0 [=10000]
Maximum number of segments in the trace of any one particle. The trace of an individual particle will terminate when the number of segments in its trace reaches this value. The trace may terminate earlier due to other criteria. If 0, this option is ignored.
min_stagger_iterations or min_stg_iters (integer) >=0 [=1]
Minimum number of stagger iterations before advancing to the next time step. If zero, this option is ignored.
max_stagger_iterations or max_stg_iters (integer) >=0 [=1]
Maximum number of stagger iterations before advancing to the next time step.
lhs_update_initial_times or lhs_init_steps (integer) >=0 [=1]
The number of initial time steps in which the left-hand-side (LHS) matrices of all staggers are discarded at the start of every time step.
lhs_update_frequency or lhs_freq (integer) >=0 [=1]
The time step frequency at which the left-hand-side (LHS) matrices of all staggers are discarded at the start of such time steps. If zero, this option is ignored.
stagger_convergence_tolerance or stg_conv_tol (real) >=0 [=1.e-4]
Time step convergence tolerance. The stagger iteration is terminated when all convergence measures within the stagger iteration are less than this convergence tolerance and at least min_stagger_iterations have been solved.
stagger_lhs_update_frequency or stg_lhs_freq (integer) >=0 [=0]
The stagger iteration frequency at which the left-hand-side (LHS) matrices of all staggers are discarded at the start of such staggers. If zero, this option is ignored.
staggers or stgs list [no default]
List of staggers to be executed. Staggers are solved in the specified sequence.

Description

This command specifies the time stepping and stagger iteration strategy and parameters.

A time marching method is used to advance the particle trace of each individual particle. Staggers are used to solve for a subset of the equations present in the problem; a stagger for the particle equation must always be present. With exception of a stagger for stretch equal standard, within each stagger, the residual and the left-hand-side (LHS) matrix of the specified equation system is formed, the resulting linear equation system is solved and the solution is updated (corrected); the standard stretch equation is solved by a direct, non-iterative method. These steps define a set of nested loops which are used to advance the solution. A pseudo code of the time stepping strategy is shown below:
Loop over time steps
Loop over staggers
Stagger 1:
Loop over nonlinear iterations
Form stagger residual and if needed LHS matrix
Solve linear equation system
Update stagger solution field(s)
Check nonlinear convergence
End nonlinear loop
...
Stagger N:
Loop over nonlinear iterations
Form stagger residual and if needed LHS matrix
Solve linear equation system
Update stagger solution field(s)
Check nonlinear convergence
End nonlinear loop
Check stagger convergence
End stagger loop
Check time step convergence
Optionally compute and output results
Determine time increment of the next time step
End time step loop

The loops over the time steps and staggers and the sequence of staggers are controlled by the TIME_SEQUENCE command. The loop over each stagger's nonlinear iterations, formations, and solution of stagger equations is controlled by the STAGGER command. The selection of the time increments is controlled by the TRACE_PARAMETERS command.

The loop over the time steps terminates when one of the following occurs:
• User signals termination
• A fatal error occurs
• All particles have become "inactive", for example, they have:
• reached either a trace time equal to max_time or a segment count equal to max_segments, or
• have reached a trace time equal to the maximum value of all time cuts when time cut output is the only output requested, or
• left the flow domain through an outflow surface, or
• stopped at a solid boundary of the flow domain, or
• stopped at a sliding interface of the flow domain

Particles for which none of the above hold are said to be "active".

The loop over the staggers terminates when one of the following occurs:
• max_stagger_iterations stagger iterations are performed.
• at least min_stagger_iterations stagger iterations are performed and the last set of convergence measures fall below stagger_convergence_tolerance.
The staggers parameter defines the list of staggers to be solved. For example, to solve for particle position, stretch, and a user equation ener, one may specify:
TIME_SEQUENCE {
staggers = { "particle", "stretch", "ener" }
}
STAGGER( "particle" ) {
equation = particle
...
}
STAGGER( "stretch" ) {
equation = stretch
...
}
STAGGER( "enth" ) {
equation = user_equation
user_equation = "ener"
...
}

Here the particle stagger is solved first for the particle equations, then the stretch stagger is solved for the stretch equation and then the ener stagger is solved for the user-defined energy equation. AcuTrace computes particle traces as a series of segments using fifth-order time-discontinuous Galerkin (TDG) with error control. Given a segment start point, a stagger for equation = particle computes the endpoint of a single segment of the trace of a single particle.

A stagger may be repeated multiple times. For example,
TIME_SEQUENCE {
staggers = { "ener", "particle", "ener", "stretch" }
...
}

solves the ener stagger before and after the particle stagger.

The only parameters that currently affect the solution are max_time, max_segments, and staggers. The other parameters are reserved for future use. Currently, changing the values of the other parameters will not change the solution obtained.

There is currently no feedback between the particle and the stretch equations, nor from the user equations to either the particle or stretch equations. Generally, if there are N user equations, eqn1, ... eqnN, and these equations are not coupled, the time sequence and accompanied staggers can simply be:
TIME_SEQUENCE {
staggers = { "particle", "stretch", "eqn1", ..., "eqnN" }
}
STAGGER( "particle" ) {
equation = particle
...
}
STAGGER( "stretch" ) {
equation = stretch
...
}
STAGGER( "eqn1" ) {
equation = user_equation
user_equation = "eqn1"
...
}
...
STAGGER( "eqnN" ) {
equation = user_equation
user_equation  = "eqnN"
...
}

If two or more user equations are coupled, it is best to have a single stagger for their coupled solution. See the description of the STAGGER command.