In some cases, an algorithm can’t be implemented with the provided operators which deal with entire tables as inputs and outputs. A good example of this is the calculation of brittle failure factor of safety that requires logic and control flow for each and every record that is being processed:
This type of calculation is ideally suited for an interpreter, where a user-defined script executes for each input value. Result Math contains an operator library that allows the user to extend it with Tcl, Templex, or even a compiled DLL.
The Tcl procedure that performs this calculation is:
Two functions are added to the Tcl interpreter that allow access to the inputs and a record storage interface:
• | GetRecordInfo – gets information about the current record. |
• | AddRecord – stores the calculated value. |
The following XML defines the input to this procedure and specifies the Tcl file as well as what procedure to call:
The call to the “TclPlugin” operator requires the following parameters:
• | src – the value table passed to the procedure. |
• | ents – the entities that correspond to the source values (for stress, this is elements, for displacements, it would be nodes). This allows the part id attached to the element to be looked up with the GetRecordInfo function. |
• | onrecord – this is the name of the procedure in the script file. |
• | script – path to the script file that contains the onrecord procedure. |
• | answer – the datatype output table. |
The “TclPlugin” operator call behaves as any other built-in operator, and is preceded or followed by calls to other operators to leverage the speed of table-based operators along with the flexibility of calling user-defined scripts. The output for this example is: