The following rules apply:
The operations are performed on the components of a tensor or vector.
The invariants are computed from the component values. For example, taking the absolute value of a tensor can result in negative values of the pressure invariant.
Operations between FieldOutput, FieldValue, and HistoryOutput objects are not supported.
Multiplication and division are not supported between two vector objects nor between two tensor objects.
The types in an expression must be compatible. For example,
A vector cannot be added to a tensor.
A three-dimensional surface tensor cannot be added to a three-dimensional planar tensor.
INTEGRATION_POINT data cannot be added to ELEMENT_NODAL data.
If the fields in the expression were obtained using the getSubset method, the same getSubset operations must have been applied in the same order to obtain each field.
Arguments to the trigonometric functions must be in radians.
Operations on tensors are performed in the local coordinate system, if it is available. Otherwise the global system is used. Abaqus assumes that the local coordinate systems are consistent for operations involving more than one tensor.
Operations between FieldValue objects associated with different locations in the model are allowed only if the data types are the same. If the locations in the model differ, the FieldValue computed will not be associated with a location. If the local coordinate systems of the FieldValue objects are not the same, the local coordinate systems of both fieldValues will be disregarded and the fieldValue computed will have no local coordinate system.
The FieldOutput operations are significantly more efficient than the FieldValue operators. You can save the computed FieldOutput objects with the following procedure:
For example,
// Get fields from odb.
odb_StepRepository& stepCon = odb.steps();
odb_SequenceFrame& frameCon1 =
stepCon["Step-1"].frames();
odb_FieldOutputRepository& fieldCon1 =
frameCon1.get(1).fieldOutputs();
odb_SequenceFrame& frameCon2 = stepCon["Step-2"].frames();
odb_FieldOutputRepository& fieldCon2 =
frameCon2.get(1).fieldOutputs();
odb_FieldOutput& field1 = fieldCon1["U"];
odb_FieldOutput& field2 = fieldCon2["U"];
// Compute new field.
odb_FieldOutput deltaDisp = field2 - field1;
// Save new field.
odb_Step& newStep = odb.Step("user", "user defined results",
odb_Enum::TIME,1.0);
odb_Frame newFrame = newStep.Frame(0, 0.0);
odb_FieldOutput& newField = newFrame.FieldOutput("U",
"delta displacements",
odb_Enum::VECTOR);
newField.addData(deltaDisp);