Open bonfus opened 3 years ago
I am also looking for a way to create a ferrimagnetic system, which is related to this question. I hope that someone can address this issue. Thanks.
Hi sorry for the late reply.
If I understand you correctly, you want to read out the spin directions belonging to a specific basis atom. Is that right?
I would suggest to index the spin directions with the corresponding stride and offset.
The linear index is computed as
idx = i + N_basis * (a + Na * (b + Nb * c))
,
where i
is the index of the basis atom in the cell and N_basis
is the number of basis atoms etc...
Using numpy arrays, you can write
spins = np.array(system.get_spin_directions(p_state))
spins_0 = spins[0::8] #Spins on sublattice 0
spins_1 = spins[1::8]
#...
spins_7 = spins[7::8]
@MSallermann Sorry for bothering you. I would like to clarify my question. My question is whether it is possible to define different mu_s for different atoms or (atomistic) spins. This feature is important for a ferrimagnetic system. I appreciate your attention. Thank you.
@sqml-ust It is possible to define a different mu_s for every spin in the basis cell. This is done by the syntax already used in the original issue. You can always enlarge the basis cell (and adjust the interaction pairs accordingly), to accommodate the structure you need. If you need more flexibility, you can also use the defects feature and define mu_s on a per site level: https://spirit-docs.readthedocs.io/en/latest/core/docs/Input.html#disorder-and-defects-a-name-defects-a. I understand that this is not the most user friendly part of spirit. In the not-too-distant future I plan to make these type of "filters" scriptable and much more flexible. If you have further questions, feel free to open another issue.
@bonfus to clarify this point you raised
it reports all spin, including those of defects, and they are all different from 0
I see why this is confusing... This is intentional, however, as the spins are represented by normal vectors, irrespective of their magnetization value. Even if mu_s=0
or atom_type<0
(i.e. defect) for a given atom, you will get a normalized vector from system.get_spin_directions
.
Note also this bug: https://github.com/spirit-code/spirit/issues/527, i.e. you should calculate the magnetization yourself, using the spin_directions
and your mu_s
and atom_type
values, instead of using quantities.get_magnetization
.
Hi there, I've been playing with Spirit APIs for a while, but I haven't found a good way to define sublattice magnetization.
My setup looks like this
I wanted to use
system.get_spin_directions
but it reports all spin, including those of defects, and they are all different from 0. I also tried to identify the atoms with mu_s, but this also doesn't work.What is the best way to achieve a definition of sublattice magnetization?