2.9. Solution Termination

Solution termination is the capability to stop the execution when a computed solution reaches some reference solution. This capability can be especially useful for users who want to terminate an analysis when a variable reaches a specific value, but they do not know a priori when this will occur. Solution termination may also be used in multi procedure or multi time period analysis to move on to the next solution procedure once some criteria is reached. The inputs are similar to those for solution verification (see Section 9.13).

BEGIN SOLUTION TERMINATION
  TERMINATE GLOBAL <string>gVar {<|<=|=|>|>=}
    <real>gVal [PLUS OR MINUS <real>Tol]
  TERMINATE GLOBAL <string>gVar {<|<=|=|>|>=}
    GLOBAL <string>gVar2 [PLUS OR MINUS <real>Tol]
  TERMINATE GLOBAL <string>gVar {<|<=|=|>|>=}
    FUNCTION <string>funcName
  TERMINATE NODAL <string>nVar
    AT NODE <integer>nodeNum {<|<=|=|>|>=}
    FUNCTION <string>funcName
  TERMINATE ELEMENT <string>eVar
    AT ELEMENT <integer>elemNum {<|<=|=|>|>=}
    <real>val

  TOLERANCE = <real>absTol
  RELATIVE TOLERANCE = <real>relTol
  TIME TOLERANCE = <real>timeTol

  SKIP TIMES = <real>time0 TO <real>time1
  ACTIVE PERIODS = <string list>periodNames
  INACTIVE PERIODS = <string list>periodNames

  COMPLETION FILE = <string>fileName

  TERMINATE TYPE = ENTIRE_RUN|CURRENT_PROCEDURE|
    CURRENT_TIME_PERIOD(ENTIRE_RUN)

  # write results, history, and restart files
  WRITE OUTPUT = OFF|ON(ON)
END

The various forms of the TERMINATE GLOBAL, TERMINATE NODAL, and TERMINATE ELEMENT commands check that the named variable has achieved some relation to some defined constant, time history function, or other global variable. Currently, the most thoroughly tested condition is for termination based on a global variable, such as kinetic energy, reaching a constant target value. However, it should be possible to terminate for any variables (including element and nodal), and to allow the target solution to be a user-defined, non-constant variable (e.g., defined via an analytic function that depends on time or other field variables). The global variables used in solution termination can be created via a USER OUTPUT based command block.

Tolerances of how close a solution needs to be to terminate can be specified. The TOLERANCE and PLUS OR MINUS termination option both specify absolute tolerances. For example the command:

TERMINATE GLOBAL disp1 = 1.0 PLUS OR MINUS 0.1

will terminate the calculation at the first occurrence of disp1 being between 0.9 and 1.1.

The RELATIVE TOLERANCE command specifies an acceptable relative difference between values for termination. Termination occurs if:

\[\frac{|\mathrm{gVal}-\mathrm{gVar}|}{\mathrm{max}(|\mathrm{gVal}|, |\mathrm{gVar}|)} < \mathrm{relTol}\]

The TIME TOLERANCE is used with the time history function based termination commands. A termination will result if the gVar is within tolerance to any value of the function that would be computed at the current time plus or minus the timeTol.

The SKIP TIMES command is used to skip evaluation of whether to terminate over the defined time intervals. This enables solution-based termination to be active only during certain time intervals. Similarly solution termination can be made active only for one or more specified time periods defined in the time stepping block with use of the ACTIVE PERIODS and INACTIVE_PERIODS command lines described in Section 2.6 to activate and deactivate functionality during specific time blocks.

The COMPLETION FILE command causes solution termination to output a status file named fileName at successful completion of the code run. Existence of the status file indicates that the run was terminated successfully. If the termination condition is never reached, the code should run until the final time period.

The TERMINATE TYPE command defines what solution termination does when hitting the failure condition. The default ENTIRE_RUN option indicates that the entire run should exit when the termination condition is reached. The CURRENT_PROCEDURE option indicates that the current procedure will be stopped and the code will move on to the next defined procedure if there is one. If the subsequent procedure defines a start time the next procedure will start at that time. If the subsequent procedure does not define a start time the next procedure will start at the time the current procedure was terminated. The CURRENT_TIME_PERIOD option indicates that the current time period (as defined in the time stepping block) will be ended. The Sierra/SM will then move onto the next defined time period if there is one.

The WRITE OUTPUT option will write a new results, history, and restart files upon solution termination.

Warning

Multiple results will exist on the output files if output is already scheduled to be written and solution termination also triggers output to be written.

2.9.1. Solution Termination Examples

The following code is used to terminate a run when the global kinetic energy reaches some small value. This may be useful for ending an explicit analysis after a dynamic impact event has occurred and most of the dynamic energy of interest has been dissipated.

BEGIN SOLUTION TERMINATION
  TERMINATE GLOBAL kinetic_energy < 1.5e+4
END

The following example code could be used to end an implicit run immediately before some fracture criteria (eqps) being reached. The fracture itself could then be evaluated in a subsequent explicit procedure.

BEGIN USER OUTPUT
  COMPUTE GLOBAL max_eqps AS MAX OF ELEMENT EQPS
  COMPUTE AT EVERY STEP
END

BEGIN SOLUTION TERMINATION
  TERMINATE GLOBAL max_eqps > 0.2
  TERMINATE TYPE = CURRENT_PROCEDURE
END