Commit modifs before release 2 (04/02/18)

This commit is contained in:
julient31 2018-04-02 10:03:45 -06:00
parent a315599bac
commit 8709f6044b
7 changed files with 115 additions and 35 deletions

View File

@ -36,7 +36,8 @@ This section describes how to perform common tasks using LAMMPS.
6.24 "Setting parameters for the kspace_style pppm/disp command"_#howto_24
6.25 "Polarizable models"_#howto_25
6.26 "Adiabatic core/shell model"_#howto_26
6.27 "Drude induced dipoles"_#howto_27 :all(b)
6.27 "Drude induced dipoles"_#howto_27
6.28 "Magnetic spins"_#howto_28 :all(b)
The example input scripts included in the LAMMPS distribution and
highlighted in "Section 7"_Section_example.html also show how to
@ -2837,6 +2838,7 @@ CS-Info # header of additional section :pre
4 2
5 3
6 3
The interactions between the
7 4
8 4
(...) :pre
@ -2906,6 +2908,54 @@ with a Coulomb pair style. It may be useful to use {coul/long/cs} or
similar from the CORESHELL package if the core and Drude particle come
too close, which can cause numerical issues.
:line
6.28 Magnetic spins :link(howto_28),h4
The magnetic spin simualtions are enabled by the SPIN package, whose
implementation is detailed in "Tranchida"_#Tranchida7.
The model representents the simulation of atomic magnetic spins coupled
to lattice vibrations. The dynamics of those magnetic spins can be used
to simulate a broad range a phenomena related to magneto-elasticity, or
or to study the influence of defects on the magnetic properties of
materials.
The magnetic spins are interacting with each others and with the
lattice via pair interactions. Typically, the magnetic exchange
interaction can be defined using the
"pair/spin/exchange"_pair_spin_exchange.html command. This exchange
applies a magnetic torque to a given spin, considering the orientation
of its neighboring spins and their relative distances.
It also applies a force on the atoms as a function of the spin
orientations and their associated inter-atomic distances.
The command "fix precession/spin"_fix_precession_spin.html allows to
apply a constant magnetic torque on all the spins in the system. This
torque can be an external magnetic field (Zeeman interaction), or an
uniaxial magnetic anisotropy.
A Langevin thermostat can be applied to those magnetic spins using
"fix langevin/spin"_fix_langevin_spin.html. Typically, this thermostat
can be coupled to another Langevin thermostat applied to the atoms
using "fix langevin"_fix_langevin.html in order to simulate
thermostated spin-lattice system.
The magnetic Gilbert damping can also be applied using "fix
langevin/spin"_fix_langevin_spin.html. It allows to either dissipate
the thermal energy of the Langevin thermostat, or to perform a
relaxation of the magnetic configuration toward an equilibrium state.
All the computed magnetic properties can be outputed by two main
commands. The first one is "compute spin"_compute_spin.html, that
enables to evaluate magnetic averaged quantities, such as the total
magnetization of the system along x, y, or z, the spin temperature, or
the magnetic energy. The second command is "compute
property/atom"_compute_property_atom.html. It enables to output all the
per atom magnetic quantities. Typically, the orientation of a given
magnetic spin, or the magnetic force acting on this spin.
:line
:line
@ -2957,3 +3007,7 @@ Phys, 79, 926 (1983).
:link(howto-Lamoureux)
[(Lamoureux and Roux)] G. Lamoureux, B. Roux, J. Chem. Phys 119, 3025 (2003)
:link(Tranchida7)
[(Tranchida)] Tranchida, Plimpton, Thibaudeau and Thompson,
arXiv preprint arXiv:1801.10233, (2018).

View File

@ -19,6 +19,7 @@ input = one or more atom attributes :l
x, y, z, xs, ys, zs, xu, yu, zu, ix, iy, iz,
vx, vy, vz, fx, fy, fz,
q, mux, muy, muz, mu,
sp, spx, spy, spz, fmx, fmy, fmz,
radius, diameter, omegax, omegay, omegaz,
angmomx, angmomy, angmomz,
shapex,shapey, shapez,
@ -46,6 +47,9 @@ input = one or more atom attributes :l
q = atom charge
mux,muy,muz = orientation of dipole moment of atom
mu = magnitude of dipole moment of atom
sp = atomic magnetic spin moment
spx, spy, spz = direction of the atomic magnetic spin
fmx, fmy, fmz = magnetic force
radius,diameter = radius,diameter of spherical particle
omegax,omegay,omegaz = angular velocity of spherical particle
angmomx,angmomy,angmomz = angular momentum of aspherical particle
@ -82,7 +86,8 @@ input = one or more atom attributes :l
compute 1 all property/atom xs vx fx mux
compute 2 all property/atom type
compute 1 all property/atom ix iy iz :pre
compute 1 all property/atom ix iy iz
compute 3 all property/atom sp spx spy spz :pre
[Description:]
@ -152,6 +157,10 @@ The vector or array values will be in whatever "units"_units.html the
corresponding attribute is in, e.g. velocity units for vx, charge
units for q, etc.
For the spin quantities, sp is in the units of the Bohr magneton, spx,
spy, and spz are adimentional quantities, and fmx, fmy and fmz are
given in rad.THz.
[Restrictions:] none
[Related commands:]

View File

@ -6,22 +6,22 @@
:line
fix integration/spin command :h3
fix nve/spin command :h3
[Syntax:]
fix ID group-ID integration/spin keyword values :pre
fix ID group-ID nve/spin keyword values :pre
ID, group-ID are documented in "fix"_fix.html command :ulb,l
integration/spin = style name of this fix command :l
nve/spin = style name of this fix command :l
keyword = {lattice} :l
{lattice} value = {no} or {yes} :pre
:ule
[Examples:]
fix 3 all integration/spin lattice yes
fix 1 all integration/spin lattice no :pre
fix 3 all nve/spin lattice yes
fix 1 all nve/spin lattice no :pre
[Description:]
@ -32,7 +32,7 @@ of fixed atoms (lattice = no), or if atoms are moving (lattice = yes).
By default (lattice = yes), a spin-lattice integration is performed.
The {integration/spin} fix applies a Suzuki-Trotter decomposition to
The {nve/spin} fix applies a Suzuki-Trotter decomposition to
the equations of motion of the spin lattice system, following the scheme:
:c,image(Eqs/fix_integration_spin_stdecomposition.jpg)
@ -51,9 +51,8 @@ This fix style can only be used if LAMMPS was built with the
SPIN package. See the "Making LAMMPS"_Section_start.html#start_3
section for more info on packages.
When the spin algorithm is used for serial calculations, it is
necessary to define a map via the atom_modify command.
Typically, by adding the command:
To use the spin algorithm, it is necessary to define a map with
the atom_modify command. Typically, by adding the command:
atom_modify map array :pre

View File

@ -6,14 +6,14 @@
:line
fix force/spin command :h3
fix precession/spin command :h3
[Syntax:]
fix ID group force/spin style args :pre
fix ID group precession/spin style args :pre
ID, group are documented in "fix"_fix.html command :ulb,l
force/spin = style name of this fix command :l
precession/spin = style name of this fix command :l
style = {zeeman} or {aniso} :l
{zeeman} args = H x y z
H = intensity of the magnetic field (in Tesla)
@ -25,8 +25,8 @@ style = {zeeman} or {aniso} :l
[Examples:]
fix 1 all force/spin zeeman 0.1 0.0 0.0 1.0
fix 1 all force/spin aniso 0.001 0.0 0.0 1.0 :pre
fix 1 all precession/spin zeeman 0.1 0.0 0.0 1.0
fix 1 all precession/spin aniso 0.001 0.0 0.0 1.0 :pre
[Description:]
@ -61,7 +61,7 @@ files"_restart.html.
[Restrictions:]
The {force/spin} style is part of the SPIN package.
The {precession/spin} style is part of the SPIN package.
This style is only enabled if LAMMPS was built with this package, and
if the atom_style "spin" was declared.
See the "Making LAMMPS"_Section_start.html#start_3 section for more info.

View File

@ -54,4 +54,4 @@ thermo 10
compute outsp all property/atom spx spy spz sp fmx fmy fmz
dump 100 all custom 1 dump_cobalt_hcp.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3]
run 20000
run 2000

View File

@ -67,6 +67,8 @@ FixNVESpin::FixNVESpin(LAMMPS *lmp, int narg, char **arg) :
sector_flag = NONE;
mech_flag = 1;
nlocal_max = 0;
// checking if map array or hash is defined
if (atom->map_style == 0)
@ -220,11 +222,14 @@ void FixNVESpin::init()
if (sector_flag) sectoring();
// init. size tables of stacking variables (sectoring)
nlocal_max = atom->nlocal;
stack_head = memory->grow(stack_head,nsectors,"NVE/spin:stack_head");
stack_foot = memory->grow(stack_foot,nsectors,"NVE/spin:stack_foot");
forward_stacks = memory->grow(forward_stacks,atom->nmax,"NVE/spin:forward_stacks");
backward_stacks = memory->grow(backward_stacks,atom->nmax,"NVE/spin:backward_stacks");
forward_stacks = memory->grow(forward_stacks,nlocal_max,"NVE/spin:forward_stacks");
backward_stacks = memory->grow(backward_stacks,nlocal_max,"NVE/spin:backward_stacks");
if (nlocal_max == 0)
error->all(FLERR,"Incorrect value of nlocal_max");
}
@ -359,6 +364,12 @@ void FixNVESpin::pre_neighbor()
double **x = atom->x;
int nlocal = atom->nlocal;
if (nlocal_max < nlocal) { // grow linked lists if necessary
nlocal_max = nlocal;
forward_stacks = memory->grow(forward_stacks,nlocal_max,"NVE/spin:forward_stacks");
backward_stacks = memory->grow(backward_stacks,nlocal_max,"NVE/spin:backward_stacks");
}
for (int j = 0; j < nsectors; j++) {
stack_head[j] = -1;
stack_foot[j] = -1;
@ -455,7 +466,7 @@ void FixNVESpin::ComputeInteractionsSpin(int ii)
temp_cut = 0.0;
if (exch_flag) { // exchange
if (exch_flag) { // exchange
temp_cut = lockpairspinexchange->cut_spin_exchange[itype][jtype];
cut_2 = temp_cut*temp_cut;
if (rsq <= cut_2) {
@ -474,7 +485,7 @@ void FixNVESpin::ComputeInteractionsSpin(int ii)
}
}
if (soc_dmi_flag) { // soc_dmi
if (soc_dmi_flag) { // soc_dmi
temp_cut = lockpairspinsocdmi->cut_soc_dmi[itype][jtype];
cut_2 = temp_cut*temp_cut;
if (rsq <= cut_2) {
@ -482,7 +493,7 @@ void FixNVESpin::ComputeInteractionsSpin(int ii)
}
}
if (me_flag) { // me
if (me_flag) { // me
temp_cut = lockpairspinme->cut_spin_me[itype][jtype];
cut_2 = temp_cut*temp_cut;
if (rsq <= cut_2) {
@ -496,19 +507,19 @@ void FixNVESpin::ComputeInteractionsSpin(int ii)
}
if (magprecession_flag) { // magnetic precession
if (zeeman_flag) { // zeeman
if (zeeman_flag) { // zeeman
lockprecessionspin->compute_zeeman(i,fmi);
}
if (aniso_flag) { // aniso
if (aniso_flag) { // aniso
lockprecessionspin->compute_anisotropy(i,spi,fmi);
}
}
if (maglangevin_flag) { // mag. langevin
if (tdamp_flag) { // transverse damping
if (maglangevin_flag) { // mag. langevin
if (tdamp_flag) { // transverse damping
locklangevinspin->add_tdamping(spi,fmi);
}
if (temp_flag) { // spin temperature
if (temp_flag) { // spin temperature
locklangevinspin->add_temperature(fmi);
}
}
@ -522,7 +533,7 @@ void FixNVESpin::ComputeInteractionsSpin(int ii)
}
/* ----------------------------------------------------------------------
divide each domain into sectors
divide each domain into 8 sectors
---------------------------------------------------------------------- */
void FixNVESpin::sectoring()

View File

@ -11,6 +11,11 @@
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ------------------------------------------------------------------------
Contributing authors: Julien Tranchida (SNL)
Aidan Thompson (SNL)
------------------------------------------------------------------------- */
#ifdef FIX_CLASS
FixStyle(nve/spin,FixNVESpin)
@ -44,13 +49,15 @@ class FixNVESpin : public Fix {
void pre_neighbor();
protected:
int sector_flag; // sector_flag = 0 if serial algorithm
// sector_flag = 1 if parallel algorithm
int mech_flag; // mech_flag = 0 if spins only
// mech_flag = 1 if spin-lattice calc.
int sector_flag; // sector_flag = 0 if serial algorithm
// sector_flag = 1 if parallel algorithm
int mech_flag; // mech_flag = 0 if spins only
// mech_flag = 1 if spin-lattice calc.
double dtv, dtf, dts; // velocity, force, and spin timesteps
double dtv, dtf, dts; // velocity, force, and spin timesteps
int nlocal_max; // max value of nlocal (for lists size)
int magpair_flag; // magnetic pair flags
int exch_flag;
int soc_neel_flag, soc_dmi_flag;