The idea here is that datasets use differently named variables for the same entities. This makes it difficult for EnSight to "guess" that a variable might be stress or strain. As a result, it is difficult to write GUI utilities that provide domain specific computation with datasets from different formats. The FEA_VAR schema defines some fundamental variable quantities and tags the variables to let the GUI know that while this variable might be named "HELLO", it should be treated as "FEA_Stress_symXX". The schema includes a tag 'FEA_VAR' that is specified on the case object itself that reports that the case supports the schema and the version number of the schema employed.

Notes: It would be nice if the Meta Data included a way to tell it which direction was the axial_direction for use with RectToCyl to define the coordinate transformation X, Y, or Z, default is Z) It would also be nice to define things like symmetry plane so that symmetry could be automatically turned on.

There are a number of variable quantities defined by the schema and they are listed here, along with their dependencies (in parenthesis) and the formulas. One interesting feature of this schema is that there is an extension that can automatically figure out what other FEA variables can be computed based on the tagged variables present in the variable list. For example, if the extension detects the presence of all of the stress tensor components, it can automatically generate an "FEA_stress_tens" variable for the user, using the table below. The extension is also capable of chaining expressions from the table, using two or more sub-expressions to create the final variable.

There are two kinds of Tensors that could be created: symmetric and asymmetric. This implementation chooses to create only the symmetric, and uses the FEA_Stress_symXX, etc. variables. This leaves open the possibility that a future implementation could include the asymmetric portions of the matric, using FEA_Stress_asymXX, etc. variables if needed.

Units are described as M=mass, L=length, K=temperature, T=time. The first description of each variable has a => with units.

- FEA_Stress_sym_tens = (FEA_Stress_symXX, FEA_Stress_symYY, FEA_Stress_symZZ, FEA_Stress_symXY, FEA_Stress_symXZ, FEA_Stress_symYZ ) = Use Calculator function TensorMake => M/TTL

- FEA_Strain_sym_tens = (FEA_Strain_symXX, FEA_Strain_symYY, FEA_Strain_symZZ, FEA_Strain_symXY, FEA_Strain_symXZ, FEA_Strain_symYZ ) = Use Calculator function TensorMake => Unitless

- FEA_Stress_Tresca = TensorTresca(plist,FEA_Stress_sym_tens) ==> M/TTL
- FEA_Strain_Tresca = TensorTresca(plist,FEA_Strain_sym_tens) ==> Unitless

- FEA_Stress_VonMises = TensorVonMises(plist,FEA_Stress_sym_tens) ==> M/TTL
- FEA_Strain_VonMises = TensorVonMises(plist,FEA_Strain_sym_tens) ==> Unitless

- FEA_Principal_Stress_First = TensorEigenvalue(plist,FEA_Stress_sym_tens,1) ==> M/TTL
- FEA_Principal_Strain_First = TensorEigenvalue(plist,FEA_Strain_sym_tens,1) ==> Unitless

- FEA_Principal_Stress_Second = TensorEigenvalue(plist,FEA_Stress_sym_tens,2) ==> M/TTL
- FEA_Principal_Strain_Second = TensorEigenvalue(plist,FEA_Strain_sym_tens,2) ==> Unitless

- FEA_Principal_Stress_Third = TensorEigenvalue(plist,FEA_Stress_sym_tens,3) ==> M/TTL
- FEA_Principal_Strain_Third = TensorEigenvalue(plist,FEA_Strain_sym_tens,3) ==> Unitless