Hello!
As I suppose the rule for decomposition of the general 3x3 exchange matrix into Isotropic, Anisotropic and DMI contributions will be something like that:
If J is an exchange matrix, then
J_symm = (J + J_transposed) / 2
J_asymm = (J - J_transposed) / 2
DMI vector is extracted from J_assym, since J_assym basically looks like
0 D_z -D_y
-D_z 0 D_x
D_y -D_x 0
Isotropic exchange will be defined as
J_iso = Tr(J_symm) / 3
And symmetric anisotropic will be
J_aniso = J_symm - Tr(J_symm) / 3 * Identity(3)
But when I look at the results from TB2J calculations I see that DMI follows that logic, but Isotropic and Anisotropic parts are separated somehow different. (So if one will compute the matrix from TB2J output and the try to decompose it with the above procedure DMI will be the same, but Isotropic and Anisotropic will differ from TB2J ones).
Could you clarify why this difference occurs? Does one need to "recalibrate" iso-aniso parts after TB2J in order to talk about J_iso and J_aniso correctly? (Because if anisotropy will be high then J_iso will significantly depend on the method of separation of iso-aniso exchange and then what the point to talk about isotropic/anisotropic exchange without specifying the way of separation?)
The Block from TB2J output, which reproduce the problem:
J_iso: 3.5386
[Testing!] DMI: ( 0.0000 -0.0163 0.0000)
[Testing!]J_ani:
[[-0.032 0. 0. ]
[ 0. -0.054 0. ]
[ 0. 0. -0.028]]
Exchange Matrix from TB2J data:
[[ 3.5066 0. 0.0163]
[ 0. 3.4846 0. ]
[-0.0163 0. 3.5106]]
J_iso from this matrix by the method I described: 3.5006
J_aniso from this matrix by the method I described:
[[ 0.006, 0., 0.],
[ 0., -0.016, 0.],
[ 0., 0., 0.01]]
DMI from this matrix by the method I described:
[ 0., -0.0163, 0.]