# Compute .... property / atom fx fy fz

hello all
Compute … property / atom fx fy fz

According to the manual, if there is a magnetic diple-diple interaction between particles, a mechanical force is created between particle i and particle j (between pairs of particles), so why when I use the above compute statement to calculate the amount of force on the particles it count as zero? (There is no force field in the system other than magnetic dipole)

You are mixing two different manual pages. Compute property/atom does not “compute” anything, but just makes properties available. The documentation for that command is quite clear.

So why does the dipole-dipole interaction have no effect on particles motion? Particles must move after the mechanical force is applied, but they do not move.

There is not enough information here to make any suggestion. Most likely your input is not correct.

Using the loop command, I wrote the algorithm for calculating this mechanical force with the formula provided in the Lammp manual, and this force is not zero.
Do I have to calculate this force this way (with an algorithm) and then apply this calculated force to the particles with the addforce command? This way I can see the motion of the particles.
There is only dipole-dipole interaction in the system and I have no other force field.
Thank you very much for your help

It is not clear to me what you are trying to say here.
I cannot give advice on such vague statements.

According to the manual, if there is a dipole-dipole magnetic interaction between particles, a mechanical force is created between particle i and particle j (between pairs of particles).
So why, when I used the pair_style spin / dipole / cut command to simulate the motion of particles under a dipole-dipole interaction, the amount of force applied to the particles is zero and the particles do not move? (There is only dipole-dipole interaction in the system and I have no other force field.)
Using the variable loop, I wrote the algorithm for calculating this mechanical force with the formula provided in the Lammps manual, and this force is not zero.
Do I have to first calculate this force by programming and then apply this calculated force to the particles with the addforce command? This way I can see the motion of the particles.
In short, how can I see the motion of particles that are only affected by magnetic dipole-dipole interaction?
I hope I was able to clarify the issue

Thank you very much

This is still vague and impossible to figure out what you are actually doing.
Why can’t you just create a minimal input file that showcases what your issue is rather than talking around it.

hi
According to basic physics we know that for 2 particles with M1 and M2 magnetic moments there are dipole-dipole interactions between them but when I see the out-put files this D-D interaction seems to be absent among the other defined interactions. Although the D-D interaction could be very weak in comparison with them but even I extinguished the other interactions again the D-D didn’t bolded.

This is just more talk and no proof that you are not making mistakes. If you like to continue like this, you are welcome, but don’t expect any more responses from me.

``````clear
echo both
units metal
dimension 3
boundary f f f
timestep        0.0001
atom_style hybrid spin sphere full
atom_modify  map array

# ---------- Create Atoms ---------------------

region                      BOX block -5 5 -5 5 -5 5 units box
create_box              2 BOX
variable                   Number1 equal 3
create_atoms         1 random \${Number1} 12345  BOX
variable                  Number2 equal  3
create_atoms         2 random \${Number2} 4589155  BOX

fix xzwalls all wall/reflect xlo EDGE xhi EDGE ylo EDGE yhi EDGE zlo EDGE zhi EDGE
fix_modify xzwalls energy no

group one id <=  \${Number1}
group two id >  \${Number1}

#variable nt   equal  \${Number1}+\${Number2}
#variable ntj  equal  \${nt}+1

set                  group one                  type  1
set                  group two                  type  2
set                  group one                  spin  2.8 0.0 0.0 1.0
set                  group two                   spin  2.8 0.0 0.0 1.0
set                  type 1                         mass 32
set                  type 2                         mass 32

#variable       mu0bar4P              equal  1.0e-7
#variable       magnetonbohr       equal   5.788*1.0e-5
#variable       gg                          equal   1
#variable       hbar                       equal   6.582*1.0e-7
#variable       coeffyeka               equal   0.160205062*1.0e12
#variable       coeff                       equal  3*v_mu0bar4P*v_magnetonbohr*v_magnetonbohr*v_gg
#variable       m1                          equal   2.8
#variable       m2                          equal   2.8

pair_style             spin/dipole/cut 50
pair_coeff             * * 50

neighbor              0.3 bin
neigh_modify       every 1 delay 0 check yes

compute     dipole_energy       all       pair spin/dipole/cut
compute     pe_energy            all        pe

#-------------------------------  definition output.txt file to save loop results  ---------------------------

#print                                       "loop results"    file loop.txt              screen no
#print                                        "---------------"   append loop.txt       screen no

#variable Udd equal 0.0
#variable udd equal 0.0

#label       loopi
#variable    i loop \${nt}

#variable fx equal 0.0
#variable fy equal 0.0
#variable fz equal 0.0

#label       loopj
#variable    j loop \${ntj}

#if "\$i > \${nt}" then "jump SELF break"

#if "\$j > \${nt}" then "jump SELF break"

#if "\$i == \$j" then "next j" &
#"jump SELF loopj" &

#variable dx equal x[\$i]-x[\$j]
#variable dy equal y[\$i]-y[\$j]
#variable dz equal z[\$i]-z[\$j]

#variable        r2menhayer1_norm       equal   sqrt(v_dx*v_dx+v_dy*v_dy+v_dz*v_dz)
#variable        r2menhayer1_norm3     equal    v_r2menhayer1_norm*v_r2menhayer1_norm*v_r2menhayer1_norm
#variable        r2menhayer1_norm5     equal    v_r2menhayer1_norm*v_r2menhayer1_norm*v_r2menhayer1_norm*v_r2menhayer1_norm*v_r2menhayer1_norm
#variable        r2menhayer1_norm7     equal    v_r2menhayer1_norm*v_r2menhayer1_norm*v_r2menhayer1_norm*v_r2menhayer1_norm*v_r2menhayer1_norm*v_r2menhayer1_norm*v_r2menhayer1_norm
#variable        m1dotr2menhayer1       equal    v_m1*v_dz
#variable        m2dotr2menhayer1       equal    v_m2*v_dz
#variable        m1dotm2                       equal    v_m1*v_m2

#variable       FX1    equal       (v_m1dotm2*v_dx/v_r2menhayer1_norm5)-(5*v_m1*v_dz*v_m2*v_dz*v_dx/v_r2menhayer1_norm7)
#variable       FY1    equal  (v_m1dotm2*v_dy/v_r2menhayer1_norm5)-(5*v_m1*v_dz*v_m2*v_dz*v_dy/v_r2menhayer1_norm7)
#variable       FZ1    equal  (v_m1dotm2*v_dz/v_r2menhayer1_norm5)-(5*v_m1*v_dz*v_m2*v_dz*v_dz/v_r2menhayer1_norm7)+(v_m1*v_dz*v_m2/v_r2menhayer1_norm5)+(v_m2*v_dz*v_m1/v_r2menhayer1_norm5)
#variable       FX      equal (v_coeff)*(v_FX1)*v_coeffyeka
#variable       FY      equal (v_coeff)*(v_FY1)*v_coeffyeka
#variable       FZ      equal (v_coeff)*(v_FZ1)*v_coeffyeka

#print     "FX(\$j)to(\$i)=\${FX}"   append loop.txt    screen no
#print     "FY(\$j)to(\$i)=\${FY}"   append loop.txt    screen no
#print     "FZ(\$j)to(\$i)=\${FZ}"   append loop.txt    screen no

#print      "-------------------------"  append loop.txt   screen no

#variable        Udd1                              equal   ((v_m1dotm2/v_r2menhayer1_norm3)-(3*v_m1dotr2menhayer1*v_m2dotr2menhayer1/v_r2menhayer1_norm5))
#variable        Udd                                equal (v_coeff/3)*(v_Udd1)*v_coeffyeka

#print     "Udd(\$i)(\$j)=\${Udd}"   append loop.txt    screen no
#print     "-------------------------"  append loop.txt     screen no

##group yek id == \$i
##fix \$j yek addforce  v_FX v_FY v_FZ

#variable udd equal \${udd}+\${Udd}

#variable fx equal \${fx}+\${FX}
#variable fy equal \${fy}+\${FY}
#variable fz equal \${fz}+\${FZ}

#label       break
#next        j
#jump        SELF loopj

#print     "fx to(\$i)=\${fx}"   append loop.txt    screen no
#print     "fy to(\$i)=\${fy}"   append loop.txt    screen no
#print     "fz to(\$i)=\${fz}"   append loop.txt    screen no
#print        "-------------------------" append loop.txt screen no

#group yek id == \$i
#fix \$i yek addforce  v_fx v_fy v_fz

#label       break
#next        i
#jump        SELF loopi

#variable dipole_eng equal \${udd}/2

#print " all commands have been done succesfully" append loop.txt screen no

fix        1_nvt            all   nvt temp 293 293 \$(100.0*dt)
fix        2_langvin     all   langevin/spin 293 0.01 21
thermo                    100
thermo_style           custom step pe c_dipole_energy #v_dipole_eng

dump 1 all custom 10 tmp.lammpstrj id type x y z
run 20000
``````

We have two types of particles with magnetic moments M1 and M2 that have only a dipole-dipole interaction.
When I look at the output files,this D-D interaction seems to be absent among the other defined interactions.
I extinguished the other interactions to see how bold the D-D interaction is.
I calculated the interaction energy between the particles using the spin / dipole / cut command. According to the manual, if there is a dipole-dipole magnetic interaction between particles, a mechanical force is created between particle i and particle j (between pairs of particles) and we expect the particles to move, but this did not happen, the amount of force applied to the particles was zero and the particles did not move. Why?
The lines that start with ‘#’ are algorithm that I wrote for calculating this mechanical force according to the formula provided in the lammps manual, and this force is not zero.
I hope I was able to express my problem clearly
All The best

This is not at all clear and the many commented lines make it particularly hard to read.

So here is what I figured out by creating my own (really) simple example (added below).

First off, I have never done any calculations with the SPIN package outside of just running the examples to test for their technical correctness (no memory leaks, no uninitialized variables, no out of range memory accesses etc.). So this is what I just figured out in a bit over half an hour using my dusty knowledge about magnetic spins from when I was a grad student (i.e. over 25 years ago), looking through information in the manual, the examples, and the source code.

The most important point: magnetic interactions need a special treatment. They do not evolve like, e.g. coulomb forces and you cannot treat them like that. Because of that the SPIN package differentiates between “mechanical” forces on the atoms due to the evolution of the spins and “magnetic” forces.
By default, the SPIN package assumes a “frozen” lattice, i.e. the “mechanical” force is not computed and only the evolution of the spins considered.
Thus to see the interaction from the pair style you must use compute property/atom to access the “magnetic” force (fmx, fmy, fmz).
To enable the “mechanical” force, you can for example add fix nve/spin as shown below.

This is what is a clear and minimal example demonstrating just the required items looks like.

``````units metal
atom_style spin
atom_modify map array

region box block -5 5 -5 5 -5 5
create_box 2 box
create_atoms 1 single -1 0 0
create_atoms 2 single  1 0 0

mass * 55.00
set atom 1 spin 2.2 -1.0 0.0 0.0
set atom 2 spin 2.2 -1.0 0.0 0.0

pair_style spin/dipole/cut 8.0
pair_coeff * * 8.0

compute 1 all property/atom fmx fmy fmz

#fix 2 all nve/spin lattice moving

dump 1 all custom 1 dump.forces id fx fy fz c_1[*]
run 0 post no
``````