forked from lijiext/lammps
parent
642c8f9859
commit
6490ee46b7
Binary file not shown.
|
@ -0,0 +1,11 @@
|
||||||
|
\documentclass[preview]{standalone}
|
||||||
|
\usepackage{varwidth}
|
||||||
|
\usepackage[utf8x]{inputenc}
|
||||||
|
\usepackage{amsmath,amssymb,amsthm,bm}
|
||||||
|
\begin{document}
|
||||||
|
\begin{varwidth}{50in}
|
||||||
|
\begin{equation}
|
||||||
|
\bm{H}_{aniso} = -\sum_{{ i}=1}^{N} K_{an}(\bm{r}_{i})\, \left( \vec{s}_{i} \cdot \vec{n}_{i} \right)^2, \nonumber
|
||||||
|
\end{equation}
|
||||||
|
\end{varwidth}
|
||||||
|
\end{document}
|
Binary file not shown.
|
@ -0,0 +1,11 @@
|
||||||
|
\documentclass[preview]{standalone}
|
||||||
|
\usepackage{varwidth}
|
||||||
|
\usepackage[utf8x]{inputenc}
|
||||||
|
\usepackage{amsmath,amssymb,amsthm,bm}
|
||||||
|
\begin{document}
|
||||||
|
\begin{varwidth}{50in}
|
||||||
|
\begin{equation}
|
||||||
|
\bm{H}_{zeeman} = -\mu_{B}\mu_0\sum_{i=0}^{N}g_{i} \vec{s}_{i} \cdot \vec{H}_{ext} \nonumber
|
||||||
|
\end{equation}
|
||||||
|
\end{varwidth}
|
||||||
|
\end{document}
|
|
@ -20,14 +20,13 @@ style = {zeeman} or {aniso} :l
|
||||||
x y z = vector direction of the field
|
x y z = vector direction of the field
|
||||||
{aniso} args = K x y z
|
{aniso} args = K x y z
|
||||||
K = intensity of the magnetic anisotropy (in eV)
|
K = intensity of the magnetic anisotropy (in eV)
|
||||||
x y z = vector direction of the anisotropy
|
x y z = vector direction of the anisotropy :pre
|
||||||
:ule
|
:ule
|
||||||
|
|
||||||
[Examples:]
|
[Examples:]
|
||||||
|
|
||||||
fix 1 all force/spin zeeman 0.1 0.0 0.0 1.0
|
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
|
fix 1 all force/spin aniso 0.001 0.0 0.0 1.0 :pre
|
||||||
|
|
||||||
|
|
||||||
[Description:]
|
[Description:]
|
||||||
|
|
||||||
|
@ -35,48 +34,40 @@ Impose a force torque to each magnetic spin in the group.
|
||||||
|
|
||||||
Style {zeeman} is used for the simulation of the interaction
|
Style {zeeman} is used for the simulation of the interaction
|
||||||
between the magnetic spins in the defined group and an external
|
between the magnetic spins in the defined group and an external
|
||||||
magnetic field.
|
magnetic field:
|
||||||
|
|
||||||
|
:c,image(Eqs/force_spin_zeeman.pdf)
|
||||||
|
|
||||||
|
with mu0 the vacuum permeability, muB the Bohr magneton (muB = 5.788 eV/T
|
||||||
|
in metal units),
|
||||||
|
|
||||||
Style {aniso} is used to simulate an easy axis or an easy plane
|
Style {aniso} is used to simulate an easy axis or an easy plane
|
||||||
for the magnetic spins in the defined group.
|
for the magnetic spins in the defined group:
|
||||||
If K>0, an easy axis is defined, and if K<0, an easy plane is
|
|
||||||
defined.
|
|
||||||
|
|
||||||
In both cases, x y z impose is the vector direction for the force.
|
:c,image(Eqs/force_spin_aniso.pdf)
|
||||||
|
|
||||||
|
with n defining the direction of the anisotropy, and K (in eV) its intensity.
|
||||||
|
If K>0, an easy axis is defined, and if K<0, an easy plane is defined.
|
||||||
|
|
||||||
|
In both cases, the choice of (x y z) imposes the vector direction for the force.
|
||||||
Only the direction of the vector is important; it's length is ignored.
|
Only the direction of the vector is important; it's length is ignored.
|
||||||
|
|
||||||
:line
|
:line
|
||||||
|
|
||||||
|
|
||||||
[Restart, fix_modify, output, run start/stop, minimize info:]
|
[Restart, fix_modify, output, run start/stop, minimize info:]
|
||||||
|
|
||||||
No information about this fix is written to "binary restart
|
No information about this fix is written to "binary restart
|
||||||
files"_restart.html.
|
files"_restart.html.
|
||||||
|
|
||||||
The "fix_modify"_fix_modify.html {energy} option is supported by this
|
[Restrictions:]
|
||||||
fix to add the gravitational potential energy of the system to the
|
|
||||||
system's potential energy as part of "thermodynamic
|
|
||||||
output"_thermo_style.html.
|
|
||||||
|
|
||||||
The "fix_modify"_fix_modify.html {respa} option is supported by this
|
The {force/spin} style is part of the SPIN package.
|
||||||
fix. This allows to set at which level of the "r-RESPA"_run_style.html
|
This style is only enabled if LAMMPS was built with this package, and
|
||||||
integrator the fix is adding its forces. Default is the outermost level.
|
if the atom_style "spin" was declared.
|
||||||
|
See the "Making LAMMPS"_Section_start.html#start_3 section for more info.
|
||||||
This fix computes a global scalar which can be accessed by various
|
|
||||||
"output commands"_Section_howto.html#howto_15. This scalar is the
|
|
||||||
gravitational potential energy of the particles in the defined field,
|
|
||||||
namely mass * (g dot x) for each particles, where x and mass are the
|
|
||||||
particles position and mass, and g is the gravitational field. The
|
|
||||||
scalar value calculated by this fix is "extensive".
|
|
||||||
|
|
||||||
No parameter of this fix can be used with the {start/stop} keywords of
|
|
||||||
the "run"_run.html command. This fix is not invoked during "energy
|
|
||||||
minimization"_minimize.html.
|
|
||||||
|
|
||||||
[Restrictions:] none
|
|
||||||
|
|
||||||
[Related commands:]
|
[Related commands:]
|
||||||
|
|
||||||
"atom_style sphere"_atom_style.html, "fix addforce"_fix_addforce.html
|
"atom_style spin"_atom_style.html
|
||||||
|
|
||||||
[Default:] none
|
[Default:] none
|
||||||
|
|
|
@ -1,11 +1,3 @@
|
||||||
<script type="text/javascript"
|
|
||||||
src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
|
|
||||||
</script>
|
|
||||||
<script type="text/x-mathjax-config">
|
|
||||||
MathJax.Hub.Config({ TeX: { equationNumbers: {autoNumber: "AMS"} } });
|
|
||||||
</script>
|
|
||||||
|
|
||||||
|
|
||||||
"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
|
"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
|
||||||
|
|
||||||
:link(lws,http://lammps.sandia.gov)
|
:link(lws,http://lammps.sandia.gov)
|
||||||
|
@ -33,7 +25,7 @@ pair_coeff 1 2 exchange 6.0 -0.01575 0.0 1.965 :pre
|
||||||
[Description:]
|
[Description:]
|
||||||
|
|
||||||
Style {pair/spin/exchange} computes the exchange interaction between
|
Style {pair/spin/exchange} computes the exchange interaction between
|
||||||
pairs of magnetic spins.
|
pairs of magnetic spins:
|
||||||
|
|
||||||
:c,image(Eqs/pair_spin_exchange_interaction.pdf)
|
:c,image(Eqs/pair_spin_exchange_interaction.pdf)
|
||||||
|
|
||||||
|
@ -46,18 +38,15 @@ This function is defined as:
|
||||||
|
|
||||||
:c,image(Eqs/pair_spin_exchange_function.pdf)
|
:c,image(Eqs/pair_spin_exchange_function.pdf)
|
||||||
|
|
||||||
where a, b and d are the three constants defined in the associated "pair_coeff"
|
where a, b and d are the three constant coefficients defined in the associated
|
||||||
command.
|
"pair_coeff" command.
|
||||||
|
|
||||||
More explanations the {pair/spin/exchange} and its parametrization are reported
|
The coefficients a, b, and c need to be fitted so that the function above matches with
|
||||||
|
the value of the exchange interaction for the N neighbor shells taken into account.
|
||||||
|
|
||||||
|
Examles and more explanations about this function and its parametrization are reported
|
||||||
in "(Tranchida)"_#Tranchida1.
|
in "(Tranchida)"_#Tranchida1.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
The {lj/cut} and {lj/cut/coul/long} pair styles support the use of the
|
|
||||||
{inner}, {middle}, and {outer} keywords of the "run_style
|
|
||||||
respa"_run_style.html command, meaning the pairwise forces can be
|
|
||||||
|
|
||||||
:line
|
:line
|
||||||
|
|
||||||
[Restrictions:]
|
[Restrictions:]
|
||||||
|
@ -69,9 +58,8 @@ See the "Making LAMMPS"_Section_start.html#start_3 section for more info.
|
||||||
|
|
||||||
[Related commands:]
|
[Related commands:]
|
||||||
|
|
||||||
"eam"
|
"atom_style spin"_atom_style.html, "pair_coeff"_pair_coeff.html,
|
||||||
|
"pair_eam"_pair_eam.html,
|
||||||
"pair_coeff"_pair_coeff.html
|
|
||||||
|
|
||||||
[Default:] none
|
[Default:] none
|
||||||
|
|
||||||
|
|
|
@ -87,8 +87,8 @@ neigh_modify every 10 check yes delay 20
|
||||||
#fix 2 all langevin/spin 0.0 0.0 0.0 21
|
#fix 2 all langevin/spin 0.0 0.0 0.0 21
|
||||||
|
|
||||||
#Magnetic integration fix
|
#Magnetic integration fix
|
||||||
#fix 3 all integration/spin mpi
|
fix 3 all integration/spin lattice yes
|
||||||
fix 3 all integration/spin serial lattice yes
|
#fix 3 all integration/spin lattice no
|
||||||
|
|
||||||
#compute real time, total magnetization, magnetic energy, and spin temperature
|
#compute real time, total magnetization, magnetic energy, and spin temperature
|
||||||
#Iteration | Time | Mx | My | Mz | |M| | Em | Tm
|
#Iteration | Time | Mx | My | Mz | |M| | Em | Tm
|
||||||
|
@ -120,5 +120,6 @@ thermo_modify format float %20.15g
|
||||||
dump 1 all custom 50 dump_cobalt.lammpstrj type x y z spx spy spz
|
dump 1 all custom 50 dump_cobalt.lammpstrj type x y z spx spy spz
|
||||||
|
|
||||||
#Running the simulations for N timesteps
|
#Running the simulations for N timesteps
|
||||||
run 1000
|
run 10
|
||||||
|
#run 1000
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,7 @@ ComputeSpin::ComputeSpin(LAMMPS *lmp, int narg, char **arg) :
|
||||||
|
|
||||||
ComputeSpin::~ComputeSpin()
|
ComputeSpin::~ComputeSpin()
|
||||||
{
|
{
|
||||||
|
memory->destroy(vector);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
|
@ -73,16 +73,20 @@ FixIntegrationSpin::FixIntegrationSpin(LAMMPS *lmp, int narg, char **arg) :
|
||||||
extra = SPIN;
|
extra = SPIN;
|
||||||
} else error->all(FLERR,"Illegal fix integration/spin command");
|
} else error->all(FLERR,"Illegal fix integration/spin command");
|
||||||
|
|
||||||
int iarg = 3;
|
// defining mpi_flag
|
||||||
|
|
||||||
while (iarg < narg) {
|
int nprocs_tmp = comm->nprocs;
|
||||||
if (strcmp(arg[iarg],"serial") == 0){
|
if (nprocs_tmp == 1) {
|
||||||
mpi_flag = 0;
|
mpi_flag = 0;
|
||||||
iarg += 1;
|
} else if (nprocs_tmp >= 1) {
|
||||||
} else if (strcmp(arg[iarg],"mpi") == 0) {
|
|
||||||
mpi_flag = 1;
|
mpi_flag = 1;
|
||||||
iarg += 1;
|
} else error->all(FLERR,"Illegal fix/integration/spin command");
|
||||||
} else if (strcmp(arg[iarg],"lattice") == 0) {
|
|
||||||
|
// defining mech_flag
|
||||||
|
|
||||||
|
int iarg = 3;
|
||||||
|
while (iarg < narg) {
|
||||||
|
if (strcmp(arg[iarg],"lattice") == 0) {
|
||||||
if (iarg+2 > narg) error->all(FLERR,"Illegal fix/integration/spin command");
|
if (iarg+2 > narg) error->all(FLERR,"Illegal fix/integration/spin command");
|
||||||
if (strcmp(arg[iarg+1],"no") == 0) mech_flag = 0;
|
if (strcmp(arg[iarg+1],"no") == 0) mech_flag = 0;
|
||||||
else if (strcmp(arg[iarg+1],"yes") == 0) mech_flag = 1;
|
else if (strcmp(arg[iarg+1],"yes") == 0) mech_flag = 1;
|
||||||
|
@ -94,8 +98,8 @@ FixIntegrationSpin::FixIntegrationSpin(LAMMPS *lmp, int narg, char **arg) :
|
||||||
if (extra == SPIN && !atom->mumag_flag)
|
if (extra == SPIN && !atom->mumag_flag)
|
||||||
error->all(FLERR,"Fix integration/spin requires spin attribute mumag");
|
error->all(FLERR,"Fix integration/spin requires spin attribute mumag");
|
||||||
|
|
||||||
//if (mpi_flag == NONE)
|
if (mpi_flag == 0 && nprocs_tmp == 1)
|
||||||
// error->all(FLERR,"Illegal fix/integration/spin command");
|
error->all(FLERR,"Illegal fix/integration/spin command");
|
||||||
|
|
||||||
magpair_flag = 0;
|
magpair_flag = 0;
|
||||||
exch_flag = 0;
|
exch_flag = 0;
|
||||||
|
@ -134,6 +138,7 @@ int FixIntegrationSpin::setmask()
|
||||||
|
|
||||||
void FixIntegrationSpin::init()
|
void FixIntegrationSpin::init()
|
||||||
{
|
{
|
||||||
|
|
||||||
// set timesteps
|
// set timesteps
|
||||||
|
|
||||||
dtv = update->dt;
|
dtv = update->dt;
|
||||||
|
@ -202,29 +207,20 @@ void FixIntegrationSpin::init()
|
||||||
if (locklangevinspin->temp_flag == 1) temp_flag = 1;
|
if (locklangevinspin->temp_flag == 1) temp_flag = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nsectors = 0;
|
||||||
memory->create(rsec,3,"integration/spin:rsec");
|
memory->create(rsec,3,"integration/spin:rsec");
|
||||||
|
|
||||||
// perform the sectoring if mpi integration
|
// perform the sectoring if mpi integration
|
||||||
|
|
||||||
if (mpi_flag) {
|
if (mpi_flag) sectoring();
|
||||||
sectoring();
|
|
||||||
|
|
||||||
// grow tables of stacking variables
|
// grow tables of stacking variables (mpi)
|
||||||
|
|
||||||
stack_head = memory->grow(stack_head,nsectors,"integration/spin:stack_head");
|
stack_head = memory->grow(stack_head,nsectors,"integration/spin:stack_head");
|
||||||
stack_foot = memory->grow(stack_foot,nsectors,"integration/spin:stack_foot");
|
stack_foot = memory->grow(stack_foot,nsectors,"integration/spin:stack_foot");
|
||||||
forward_stacks = memory->grow(forward_stacks,atom->nmax,"integration/spin:forward_stacks");
|
forward_stacks = memory->grow(forward_stacks,atom->nmax,"integration/spin:forward_stacks");
|
||||||
backward_stacks = memory->grow(backward_stacks,atom->nmax,"integration/spin:backward_stacks");
|
backward_stacks = memory->grow(backward_stacks,atom->nmax,"integration/spin:backward_stacks");
|
||||||
}
|
|
||||||
|
|
||||||
// grow tables of stacking variables
|
|
||||||
/*
|
|
||||||
stack_head = memory->grow(stack_head,nsectors,"integration/spin:stack_head");
|
|
||||||
stack_foot = memory->grow(stack_foot,nsectors,"integration/spin:stack_foot");
|
|
||||||
forward_stacks = memory->grow(forward_stacks,atom->nmax,"integration/spin:forward_stacks");
|
|
||||||
backward_stacks = memory->grow(backward_stacks,atom->nmax,"integration/spin:backward_stacks");
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
@ -358,7 +354,7 @@ void FixIntegrationSpin::setup_pre_neighbor()
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
store in two linked lists the advance order of the spins
|
store in two linked lists the advance order of the spins (mpi)
|
||||||
---------------------------------------------------------------------- */
|
---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void FixIntegrationSpin::pre_neighbor()
|
void FixIntegrationSpin::pre_neighbor()
|
||||||
|
@ -591,23 +587,9 @@ int FixIntegrationSpin::coords2sector(double *x)
|
||||||
sublo[dim]=sublotmp[dim];
|
sublo[dim]=sublotmp[dim];
|
||||||
}
|
}
|
||||||
|
|
||||||
//#define M1
|
|
||||||
#if defined M1
|
|
||||||
double rix = (x[0] - sublo[0])/rsec[0];
|
|
||||||
double riy = (x[1] - sublo[1])/rsec[1];
|
|
||||||
double riz = (x[2] - sublo[2])/rsec[2];
|
|
||||||
|
|
||||||
seci[0] = static_cast<int>(rix);
|
|
||||||
seci[1] = static_cast<int>(riy);
|
|
||||||
seci[2] = static_cast<int>(riz);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define M2
|
|
||||||
#if defined M2
|
|
||||||
seci[0] = x[0] > (sublo[0] + rsec[0]);
|
seci[0] = x[0] > (sublo[0] + rsec[0]);
|
||||||
seci[1] = x[1] > (sublo[1] + rsec[1]);
|
seci[1] = x[1] > (sublo[1] + rsec[1]);
|
||||||
seci[2] = x[2] > (sublo[2] + rsec[2]);
|
seci[2] = x[2] > (sublo[2] + rsec[2]);
|
||||||
#endif
|
|
||||||
|
|
||||||
nseci = (seci[0] + 2*seci[1] + 4*seci[2]);
|
nseci = (seci[0] + 2*seci[1] + 4*seci[2]);
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,8 @@ class FixIntegrationSpin : public Fix {
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
int extra;
|
int extra;
|
||||||
int mpi_flag; //mpi_flag = if parallel algorithm
|
int mpi_flag; // mpi_flag = 0 if serial algorithm
|
||||||
|
// mpi_flag = 1 if parallel algorithm
|
||||||
int mech_flag; // mech_flag = 0 if spins only
|
int mech_flag; // mech_flag = 0 if spins only
|
||||||
// mech_flag = 1 if spin-lattice calc.
|
// mech_flag = 1 if spin-lattice calc.
|
||||||
|
|
||||||
|
|
|
@ -278,6 +278,10 @@ Atom::~Atom()
|
||||||
memory->destroy(tri);
|
memory->destroy(tri);
|
||||||
memory->destroy(body);
|
memory->destroy(body);
|
||||||
|
|
||||||
|
memory->destroy(mumag);
|
||||||
|
memory->destroy(sp);
|
||||||
|
memory->destroy(fm);
|
||||||
|
|
||||||
memory->destroy(vfrac);
|
memory->destroy(vfrac);
|
||||||
memory->destroy(s0);
|
memory->destroy(s0);
|
||||||
memory->destroy(x0);
|
memory->destroy(x0);
|
||||||
|
|
Loading…
Reference in New Issue