Smart Statics

One of the limitations of building batches of models that are run automatically is that for complex models, especially those that implement line contact data, changes to the model data can result in a model that solved in statics in the base model failing to solve in statics in the load case model.

This has the dual effect of both being incredibly annoying to the analyst and making the process of building batches much less efficient than it could be.

Smart statics helps overcome these issues by allowing you to add object tags that will be used to iteratively find a model that solves in statics.

Adjustments

There are 4 types of adjustment that can be specified (needs to be valid JSON):

Absolute

This will set a data item to a random absolute value between limits:

{"type":"absolute", "min":minimum_value, "max":maximum_value}

For each attempt to solve the model here, the data item will be set to a random value between minimum_value and maximum_value.

Nudge

The data item value will be changed incrementally on each attempt from the initial value:

{"type":"nudge", "distance":nudge_amount}

The first attempt to find solution here will increment the initial value by nudge_amount. Every following attempt will apply the same increment to the previously incremented value.

Cycle

Data items will be set by cycling through choices in turn:

{"type":"cycle", "choices":[option1, option2, option3]}

The first attempt to find solution here will set the data item to option1, the next attempt to option2 and so on. This example will return to option1 if option3 fails to solve.

Choice

Data items will be set to a random value from a selection of choices:

{"type":"choice", "choices":[option1, option2, option3]}

Every attempt to find a solution here will result in one of the options being selected with equal probability.

Attaching to data items

We tell the smart statics system what objects and data items to adjust by setting tags on the objects in the model.

Tags need to be defined on the object that you want to adjust and start with “ss” and a double underscore (ss__). The text after the underscores should be the data name that needs adjusting (and another double underscore and the index if required). Some examples:

  1. Moving the free EndB of a line around makes it solve:

Smart statics with End B in a box
  1. Changing the Step 1 statics method makes it solve:

Smart statics with cycle on step 1
  1. Changing the damping on a line makes it solve:

Smart statics cycle on min damping on a line
  1. Increasing the whole system minimum damping makes it solve:

Smart statics with nudge up the whole system minimum damping

Search sequence

By default, on each iteration, all the adjustments will be attempted. So if you have specified 1-4 above then on each iteration smart statics will change the data on all the objects. However, sometimes this isn’t what you want to happen because either you expect one type of object change to work most of the time or some changes need to be isolated from each other.

To help with this, you can specify a search sequence. This is done by setting a SEARCH_SEQUENCE__# tag in General, setting the value as ALL will invoke the default behaviour, otherwise use the form:

{
    "OBJECT_NAME_ONE":["DATA ITEM NAME 1", "DATA ITEM NAME 2"],
    "OBJECT_NAME_TWO":["DATA ITEM NAME 3"],
    "OBJECT_NAME_THREE":[],
}

The empty list/array mapped to OBJECT_NAME_THREE above means that all data items on that object will be set on each attempt.

Smart statics with End B in a box

The above example will first attempt to get a solution by only changing all data items on “FIXED-FREE TUBE” if this is not successful then it will try to adjust all the items.

Search process

The Sim Bot will first try and solve the model in statics as it is defined in the batch so if this works no smart statics will be attempted.

If the model fails statics and there is no Search sequence defined then Sim Bot will apply all the adjustment specified in all the objects and try again. It will attempt this until either a solved model is found or max_attempts has been reached as defined in OrcaFlexJob (job_options.max_search_attempts).

If a Search sequence has been defined then for each step in the sequence the above process will be followed. This means that if you have 10 search sequence items defined and max attempts set to 10 you should expect Sim Bot to try up to 100 combinations of data item settings to find a solution that solves in statics.

Acceptance Criteria

Acceptance criteria can be defined, so that for every successful solution with smart statics, all of the acceptance criteria are checked. As such, any smart statics solution must also satisfy the defined acceptance criteria, otherwise it will be treated as a failed attempt.

These criteria can be defined globally in the model with Tags in General. There are two types of acceptance criteria that can be used:

Range Graph Results

For this type of acceptance criterion, the key "STATIC_RESULT_CHECKS_RG" should be used. The value needs to be a valid JSON string that specifies an array of range graph result quantities(Range Graph) with "min"/"max" limits as required.

Smart statics range graph acceptance criteria

Time History Results

For this type of acceptance criterion, the key "STATIC_RESULT_CHECKS_TH" should be used. The value needs to be a valid JSON string that specifies an array of time history result quantities(Time History) with "min"/"max" limits as required.

Smart statics time history acceptance criteria