====== TensorField ====== ---- ====Basics==== ''TensorField'' represents a function like ''f_mn[x_a]'' or derivative of function like ''f~(1)_a[x_i]''. Like any other expression, it inherits all properties of [[Tensor]]. Additionally it inherits all properties of [[SimpleTensor]] and adopts same convention on its indices: the indices of ''TensorField'' ([[SimpleIndices]]) are sorted by their [[documentation:ref:IndexType|types]], but the relative ordering of indices within a particular type is same as defined by the user: def t = 'f_cba^\\alpha_AB[t_mn, f_i]'.t println t.indices > _{cbaAB}^{\alpha} The relative ordering is not changed even if tensor has symmetry property; in latter case Redberry uses algorithms provided by [[documentation:guide:Mappings of indices]] to compare expressions instead of trying to put expression in canonical form. [[documentation:guide:symmetries_of_tensors|Symmetries]] of ''TensorField'' can be specified exactly in the same way as for [[SimpleTensor]]: addSymmetry 'f_pqr[k_l, k_l]', [1, 0].p //or equivalently 'f_klm[k_a, k_b]'.t.indices.symmetries.addSymmetry( [1, 0].p )

In case of derivatives, the total indices of ''TensorField'' are formed by concatenation of initial indices and inverted indices of differentiating variables. For example, the indices of \[ \frac{\delta}{\delta f^{abc}} \frac{\delta}{\delta f^{de}} F_{mn}\left(f_{abc}, f_{ab}\right) \] will be formed by sequential concatenation of initial indices $_{mn}$, indices of differentiating variable corresponding to first argument $_{abc}$ and indices of differentiating variable corresponding to second argument $_{de}$; thus, the resulting indices will be $_{mnabcde}$ and the corresponding tensor field 'F~(1, 1)_{mn abc de}[f_abc, f_ab]'.t Additionally, if derivative taken several times with respect to same slot, the corresponding indices will be symmetric, since the relative order of differentiation is not relevant: println 'F~(2)_{mn ab cd}[f_ab] + F~(2)_{mn cd ab}[f_ab]'.t > F~(2)_{mn ab cd}[f_ab]

Since ''TensorField'' inherits both [[Tensor]] and [[SimpleTensor]] it provides all features found in them like container properties, utterable, symmetries etc. On the other hand, the ''.name'' property from [[SimpleTensor]] will additionally encode information about arguments of ''TensorFiels'', so e.g. functions like ''f_i[x_a]'' and ''f_i[x_ab]'' will have different ''.name''. ====Additional features==== The additional features of ''TensorField'' appear when it represents derivative:
.isDerivative() returns whether TensorField represents derivative of function (e.g. f~(3)[x]) or just function (e.g. f[x])
.getDerivativeOrder(i) returns order of derivative with respect to argument at i-th position
.parentField returns function from which the derivative is taken
.partitionOfIndices returns partition of derivative indices; this partition separates indices of parent function and indices appended by derivatives
Let us consider for example derivative \(\displaystyle \frac{\delta}{\delta x^{cd}} \frac{\delta^2}{\delta t^m \, \delta t^n} F_{ab}\left(x_{mn}, t_i, x\right) \): def f = 'F~(1,2,0)_{ab cd mn}[x_mn, t_i, x]'.t assert f.isDerivative() println f.getDeivativeOrder(1) > 2 println f.parentField > F_{ab}[x_{mn},t_{i},x] println( (0..(f.size() - 1)).collect { f.getDeivativeOrder(it) }) > [1, 2, 0] println f.partitionOfIndices > [[_{ab}], [_{cd}], [_{m}, _{n}], []] The first element in ''.partitionOfIndices'' is indices of parent field, while //(i+1)//-th element of this array corresponds to indices of derivatives with respect to //i//-th slot. ====See also==== * Related guides: [[documentation:guide:tensors_and_indices]], [[documentation:guide:representation_of_derivatives]], [[documentation:guide:symmetries_of_tensors]] * Reference: [[documentation:ref:tensor]], [[documentation:ref:simpletensor]], [[documentation:ref:simpleindices]], [[documentation:ref:differentiate]] * JavaDocs: [[http://api.redberry.cc/redberry/1.1.9/java-api/cc/redberry/core/tensor/TensorField.html| TensorField]] * Source code: [[https://bitbucket.org/redberry/redberry/src/tip/core/src/main/java/cc/redberry/core/tensor/TensorField.java|TensorField.java]]