Commit JT 020618

- Documentation
- Memory leaks solved
This commit is contained in:
julient31 2018-02-06 10:42:22 -07:00
parent 642c8f9859
commit 6490ee46b7
11 changed files with 84 additions and 94 deletions

Binary file not shown.

View File

@ -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.

View File

@ -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}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -54,6 +54,7 @@ ComputeSpin::ComputeSpin(LAMMPS *lmp, int narg, char **arg) :
ComputeSpin::~ComputeSpin() ComputeSpin::~ComputeSpin()
{ {
memory->destroy(vector);
} }
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */

View File

@ -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
int nprocs_tmp = comm->nprocs;
if (nprocs_tmp == 1) {
mpi_flag = 0;
} else if (nprocs_tmp >= 1) {
mpi_flag = 1;
} else error->all(FLERR,"Illegal fix/integration/spin command");
// defining mech_flag
int iarg = 3;
while (iarg < narg) { while (iarg < narg) {
if (strcmp(arg[iarg],"serial") == 0){ if (strcmp(arg[iarg],"lattice") == 0) {
mpi_flag = 0;
iarg += 1;
} else if (strcmp(arg[iarg],"mpi") == 0) {
mpi_flag = 1;
iarg += 1;
} else 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
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");
}
// 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");
*/
} }
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
@ -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]);

View File

@ -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.

View File

@ -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);