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:
Moving the free EndB of a line around makes it solve:
Changing the Step 1 statics method makes it solve:
Changing the damping on a line makes it solve:
Increasing the whole system minimum damping makes it solve:
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.
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.
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.