From 11f223416c8b3e2a1a3cbdbbd25214b988663311 Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 13 May 2019 16:59:39 -0600 Subject: [PATCH] Commit JT 051319 - added a cubic anisotropy in fix_precession_spin - added associated doc and examples - corrected neb/spin commands in doc/src/ - added tools/spin/ description --- doc/src/Commands_all.txt | 2 +- doc/src/Eqs/fix_spin_cubic.jpg | Bin 0 -> 25265 bytes doc/src/Eqs/fix_spin_cubic.tex | 21 +++ doc/src/Tools.txt | 15 ++ doc/src/commands_list.txt | 4 +- doc/src/fix_precession_spin.txt | 39 +++- doc/src/neb_spin.txt | 2 +- examples/SPIN/iron/in.spin.iron_cubic | 60 ++++++ examples/SPIN/nickel/in.spin.nickel_cubic | 60 ++++++ src/.gitignore | 2 + src/SPIN/fix_precession_spin.cpp | 215 +++++++++++++++++----- src/SPIN/fix_precession_spin.h | 26 ++- tools/README | 1 + 13 files changed, 392 insertions(+), 55 deletions(-) create mode 100644 doc/src/Eqs/fix_spin_cubic.jpg create mode 100644 doc/src/Eqs/fix_spin_cubic.tex create mode 100644 examples/SPIN/iron/in.spin.iron_cubic create mode 100644 examples/SPIN/nickel/in.spin.nickel_cubic diff --git a/doc/src/Commands_all.txt b/doc/src/Commands_all.txt index 52c2e67e2e..58ca148555 100644 --- a/doc/src/Commands_all.txt +++ b/doc/src/Commands_all.txt @@ -83,7 +83,7 @@ An alphabetic list of all general LAMMPS commands. "molecule"_molecule.html, "ndx2group"_group2ndx.html, "neb"_neb.html, -"neb_spin"_neb_spin.html, +"neb/spin"_neb_spin.html, "neigh_modify"_neigh_modify.html, "neighbor"_neighbor.html, "newton"_newton.html, diff --git a/doc/src/Eqs/fix_spin_cubic.jpg b/doc/src/Eqs/fix_spin_cubic.jpg new file mode 100644 index 0000000000000000000000000000000000000000..871641111c9e43edfd878c4fa138da7231b5bbd9 GIT binary patch literal 25265 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 WoxJv>LVj6aouHM1&Gt%ukNp?f^sWQ| literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/fix_spin_cubic.tex b/doc/src/Eqs/fix_spin_cubic.tex new file mode 100644 index 0000000000..9c402294d7 --- /dev/null +++ b/doc/src/Eqs/fix_spin_cubic.tex @@ -0,0 +1,21 @@ +\documentclass[preview]{standalone} +\usepackage{varwidth} +\usepackage[utf8x]{inputenc} +\usepackage{amsmath,amssymb,amsthm,bm} +\begin{document} +\begin{varwidth}{50in} + \begin{equation} + \bm{H}_{cubic} = -\sum_{{ i}=1}^{N} K_{1} + \Big[ + \left(\vec{s}_{i} \cdot \vec{n1} \right)^2 + \left(\vec{s}_{i} \cdot \vec{n2} \right)^2 + + \left(\vec{s}_{i} \cdot \vec{n2} \right)^2 + \left(\vec{s}_{i} \cdot \vec{n3} \right)^2 + + \left(\vec{s}_{i} \cdot \vec{n1} \right)^2 + \left(\vec{s}_{i} \cdot \vec{n3} \right)^2 \Big] + +K_{2}^{(c)} \left(\vec{s}_{i} \cdot \vec{n1} \right)^2 + \left(\vec{s}_{i} \cdot \vec{n2} \right)^2 + \left(\vec{s}_{i} \cdot \vec{n3} \right)^2 \nonumber + \end{equation} +\end{varwidth} +\end{document} diff --git a/doc/src/Tools.txt b/doc/src/Tools.txt index af9fd4298c..eb7b6d81b8 100644 --- a/doc/src/Tools.txt +++ b/doc/src/Tools.txt @@ -77,6 +77,7 @@ Post-processing tools :h3 "python"_#pythontools, "reax"_#reax_tool, "smd"_#smd, +"spin"_#spin, "xmgrace"_#xmgrace :tb(c=6,ea=c,a=l) Miscellaneous tools :h3 @@ -511,6 +512,20 @@ Ernst Mach Institute in Germany (georg.ganzenmueller at emi.fhg.de). :line +spin tool :h4,link(spin) + +The spin sub-directory contains a C file interpolate.c which can +be compiled and used to perform a cubic polynomial interpolation of +the MEP following a GNEB calculation. + +See the README file in tools/spin/interpolate_gneb for more details. + +This tool was written by the SPIN package author, Julien +Tranchida at Sandia National Labs (jtranch at sandia.gov, and by Aleksei +Ivanov, at University of Iceland (ali5 at hi.is). + +:line + vim tool :h4,link(vim) The files in the tools/vim directory are add-ons to the VIM editor diff --git a/doc/src/commands_list.txt b/doc/src/commands_list.txt index cf716df9ac..e224dc8096 100644 --- a/doc/src/commands_list.txt +++ b/doc/src/commands_list.txt @@ -62,12 +62,12 @@ Commands :h1 mass message min_modify - min_spin + min/spin min_style minimize molecule neb - neb_spin + neb/spin neigh_modify neighbor newton diff --git a/doc/src/fix_precession_spin.txt b/doc/src/fix_precession_spin.txt index 05814931ea..708b2bd7aa 100644 --- a/doc/src/fix_precession_spin.txt +++ b/doc/src/fix_precession_spin.txt @@ -14,19 +14,23 @@ fix ID group precession/spin style args :pre ID, group are documented in "fix"_fix.html command :ulb,l precession/spin = style name of this fix command :l -style = {zeeman} or {anisotropy} :l +style = {zeeman} or {anisotropy} or {cubic} :l {zeeman} args = H x y z H = intensity of the magnetic field (in Tesla) x y z = vector direction of the field {anisotropy} args = K x y z K = intensity of the magnetic anisotropy (in eV) x y z = vector direction of the anisotropy :pre + {cubic} args = K1 K2c n1x n1y n1x n2x n2y n2z n3x n3y n3z + K1 and K2c = intensity of the magnetic anisotropy (in eV) + n1x to n3z = three direction vectors of the cubic anisotropy :pre :ule [Examples:] fix 1 all precession/spin zeeman 0.1 0.0 0.0 1.0 -fix 1 all precession/spin anisotropy 0.001 0.0 0.0 1.0 +fix 1 3 precession/spin anisotropy 0.001 0.0 0.0 1.0 +fix 1 iron precession/spin cubic 0.001 0.0005 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 fix 1 all precession/spin zeeman 0.1 0.0 0.0 1.0 anisotropy 0.001 0.0 0.0 1.0 :pre [Description:] @@ -50,10 +54,29 @@ for the magnetic spins in the defined group: 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. +Style {cubic} is used to simulate a cubic anisotropy, with three +possible easy axis for the magnetic spins in the defined group: -Both styles can be combined within one single command line. +:c,image(Eqs/fix_spin_cubic.jpg) + +with K1 and K2c (in eV) the intensity coefficients and +n1, n2 and n3 defining the three anisotropic directions +defined by the command (from n1x to n3z). +For n1 = (100), n2 = (010), and n3 = (001), K1 < 0 defines an +iron type anisotropy (easy axis along the (001)-type cube +edges), and K1 > 0 defines a nickel type anisotropy (easy axis +along the (111)-type cube diagonals). +K2^c > 0 also defines easy axis along the (111)-type cube +diagonals. +See chapter 2 of "(Skomski)"_#Skomski1 for more details on cubic +anisotropies. + +In all cases, the choice of (x y z) only imposes the vector +directions for the forces. Only the direction of the vector is +important; it's length is ignored (the entered vectors are +normalized). + +Those styles can be combined within one single command line. :line @@ -85,3 +108,9 @@ package"_Build_package.html doc page for more info. "atom_style spin"_atom_style.html [Default:] none + +:line + +:link(Skomski1) +[(Skomski)] Skomski, R. (2008). Simple models of magnetism. +Oxford University Press. diff --git a/doc/src/neb_spin.txt b/doc/src/neb_spin.txt index 70c0fe2ab5..7dbd924cd2 100644 --- a/doc/src/neb_spin.txt +++ b/doc/src/neb_spin.txt @@ -6,7 +6,7 @@ :line -neb command :h3 +neb/spin command :h3 [Syntax:] diff --git a/examples/SPIN/iron/in.spin.iron_cubic b/examples/SPIN/iron/in.spin.iron_cubic new file mode 100644 index 0000000000..d4703a2959 --- /dev/null +++ b/examples/SPIN/iron/in.spin.iron_cubic @@ -0,0 +1,60 @@ +# bcc iron in a 3d periodic box + +clear +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice bcc 2.8665 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +create_atoms 1 box + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 55.845 +set group all spin 2.2 -1.0 0.0 0.0 +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 3.5 +pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe +pair_coeff * * spin/exchange exchange 3.4 0.02726 0.2171 1.841 +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin cubic 0.001 0.0005 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 + +fix 3 all nve/spin lattice yes +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magx equal c_out_mag[1] +variable magy equal c_out_mag[2] +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magx v_magy v_magz v_magnorm v_tmag v_emag pe etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +run 2000 +# min_style spin +# min_modify alpha_damp 1.0 discrete_factor 10 +# minimize 1.0e-16 1.0e-16 10000 10000 diff --git a/examples/SPIN/nickel/in.spin.nickel_cubic b/examples/SPIN/nickel/in.spin.nickel_cubic new file mode 100644 index 0000000000..3c97b284ae --- /dev/null +++ b/examples/SPIN/nickel/in.spin.nickel_cubic @@ -0,0 +1,60 @@ +# fcc nickel in a 3d periodic box + +clear +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice fcc 3.524 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +create_atoms 1 box + +# setting mass, mag. moments, and interactions for cobalt + +mass 1 58.69 + +set group all spin/random 31 0.63 +#set group all spin 0.63 0.0 0.0 1.0 +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 4.0 +pair_coeff * * eam/alloy Ni99.eam.alloy Ni +pair_coeff * * spin/exchange exchange 4.0 0.50 0.2280246862 1.229983475 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin cubic -0.0001 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 & + zeeman 0.0 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 + +fix 3 all nve/spin lattice yes +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magnorm v_emag temp v_tmag etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 50 all custom 1 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] + +run 2000 + diff --git a/src/.gitignore b/src/.gitignore index 9e10059ddb..764bc8c2f3 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -156,6 +156,8 @@ /fix_nve_spin.h /fix_precession_spin.cpp /fix_precession_spin.h +/fix_setforce_spin.cpp +/fix_setforce_spin.h /min_spin.cpp /min_spin.h /neb_spin.cpp diff --git a/src/SPIN/fix_precession_spin.cpp b/src/SPIN/fix_precession_spin.cpp index 9ee691c227..1ea134d367 100644 --- a/src/SPIN/fix_precession_spin.cpp +++ b/src/SPIN/fix_precession_spin.cpp @@ -25,8 +25,8 @@ #include #include #include - #include "atom.h" +#include "error.h" #include "domain.h" #include "error.h" #include "fix_precession_spin.h" @@ -35,6 +35,7 @@ #include "math_const.h" #include "memory.h" #include "modify.h" +#include "neigh_list.h" #include "respa.h" #include "update.h" #include "variable.h" @@ -71,8 +72,12 @@ FixPrecessionSpin::FixPrecessionSpin(LAMMPS *lmp, int narg, char **arg) : Fix(lm Ka = 0.0; nax = nay = naz = 0.0; Kax = Kay = Kaz = 0.0; + k1c = k2c = 0.0; + nc1x = nc1y = nc1z = 0.0; + nc2x = nc2y = nc2z = 0.0; + nc3x = nc3y = nc3z = 0.0; - zeeman_flag = aniso_flag = 0; + zeeman_flag = aniso_flag = cubic_flag = 0; int iarg = 3; while (iarg < narg) { @@ -92,14 +97,61 @@ FixPrecessionSpin::FixPrecessionSpin(LAMMPS *lmp, int narg, char **arg) : Fix(lm nay = force->numeric(FLERR,arg[iarg+3]); naz = force->numeric(FLERR,arg[iarg+4]); iarg += 5; + } else if (strcmp(arg[iarg],"cubic") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal fix precession/spin command"); + cubic_flag = 1; + k1c = force->numeric(FLERR,arg[iarg+1]); + k2c = force->numeric(FLERR,arg[iarg+2]); + nc1x = force->numeric(FLERR,arg[iarg+3]); + nc1y = force->numeric(FLERR,arg[iarg+4]); + nc1z = force->numeric(FLERR,arg[iarg+5]); + nc2x = force->numeric(FLERR,arg[iarg+6]); + nc2y = force->numeric(FLERR,arg[iarg+7]); + nc2z = force->numeric(FLERR,arg[iarg+8]); + nc3x = force->numeric(FLERR,arg[iarg+9]); + nc3y = force->numeric(FLERR,arg[iarg+10]); + nc3z = force->numeric(FLERR,arg[iarg+11]); + iarg += 12; } else error->all(FLERR,"Illegal precession/spin command"); } + // normalize vectors + + double inorm; + if (zeeman_flag) { + inorm = 1.0/sqrt(nhx*nhx + nhy*nhy + nhz*nhz); + nhx *= inorm; + nhy *= inorm; + nhz *= inorm; + } + + if (aniso_flag) { + inorm = 1.0/sqrt(nax*nax + nay*nay + naz*naz); + nax *= inorm; + nay *= inorm; + naz *= inorm; + } + + if (cubic_flag) { + inorm = 1.0/sqrt(nc1x*nc1x + nc1y*nc1y + nc1z*nc1z); + nc1x *= inorm; + nc1y *= inorm; + nc1z *= inorm; + inorm = 1.0/sqrt(nc2x*nc2x + nc2y*nc2y + nc2z*nc2z); + nc2x *= inorm; + nc2y *= inorm; + nc2z *= inorm; + inorm = 1.0/sqrt(nc3x*nc3x + nc3y*nc3y + nc3z*nc3z); + nc3x *= inorm; + nc3y *= inorm; + nc3z *= inorm; + } + degree2rad = MY_PI/180.0; time_origin = update->ntimestep; eflag = 0; - emag = 0.0; + eprec = 0.0; } /* ---------------------------------------------------------------------- */ @@ -130,8 +182,12 @@ void FixPrecessionSpin::init() const double mub = 5.78901e-5; // in eV/T const double gyro = mub/hbar; // in rad.THz/T - H_field *= gyro; // in rad.THz - Ka /= hbar; // in rad.THz + // convert field quantities to rad.THz + + H_field *= gyro; + Kah = Ka/hbar; + k1ch = k1c/hbar; + k2ch = k2c/hbar; if (strstr(update->integrate_style,"respa")) { ilevel_respa = ((Respa *) update->integrate)->nlevels-1; @@ -185,53 +241,60 @@ void FixPrecessionSpin::post_force(int /* vflag */) if (varflag != CONSTANT) { modify->clearstep_compute(); modify->addstep_compute(update->ntimestep + 1); - set_magneticprecession(); // update mag. field if time-dep. + set_magneticprecession(); // update mag. field if time-dep. } - double **sp = atom->sp; + int *mask = atom->mask; double **fm = atom->fm; - double spi[3], fmi[3]; + double **sp = atom->sp; const int nlocal = atom->nlocal; - + double spi[3], fmi[3], epreci; + eflag = 0; - emag = 0.0; - + eprec = 0.0; for (int i = 0; i < nlocal; i++) { - spi[0] = sp[i][0]; - spi[1] = sp[i][1]; - spi[2] = sp[i][2]; - fmi[0] = fmi[1] = fmi[2] = 0.0; + if (mask[i] & groupbit) { + epreci = 0.0; + spi[0] = sp[i][0]; + spi[1] = sp[i][1]; + spi[2] = sp[i][2]; + fmi[0] = fmi[1] = fmi[2] = 0.0; - if (zeeman_flag) { // compute Zeeman interaction - compute_zeeman(i,fmi); - emag -= (spi[0]*fmi[0] + spi[1]*fmi[1] + spi[2]*fmi[2]); + if (zeeman_flag) { // compute Zeeman interaction + compute_zeeman(i,fmi); + epreci -= hbar*(spi[0]*fmi[0] + spi[1]*fmi[1] + spi[2]*fmi[2]); + } + + if (aniso_flag) { // compute magnetic anisotropy + compute_anisotropy(spi,fmi); + epreci -= compute_anisotropy_energy(spi); + } + + if (cubic_flag) { // compute cubic anisotropy + compute_cubic(spi,fmi); + epreci -= compute_cubic_energy(spi); + } + + eprec += epreci; + fm[i][0] += fmi[0]; + fm[i][1] += fmi[1]; + fm[i][2] += fmi[2]; } - - if (aniso_flag) { // compute magnetic anisotropy - compute_anisotropy(spi,fmi); - emag -= 0.5*(spi[0]*fmi[0] + spi[1]*fmi[1] + spi[2]*fmi[2]); - } - - fm[i][0] += fmi[0]; - fm[i][1] += fmi[1]; - fm[i][2] += fmi[2]; } - emag *= hbar; } /* ---------------------------------------------------------------------- */ void FixPrecessionSpin::compute_single_precession(int i, double spi[3], double fmi[3]) { - if (zeeman_flag) { - compute_zeeman(i,fmi); - } - if (aniso_flag) { - compute_anisotropy(spi,fmi); + int *mask = atom->mask; + if (mask[i] & groupbit) { + if (zeeman_flag) compute_zeeman(i,fmi); + if (aniso_flag) compute_anisotropy(spi,fmi); + if (cubic_flag) compute_cubic(spi,fmi); } } - /* ---------------------------------------------------------------------- */ void FixPrecessionSpin::compute_zeeman(int i, double fmi[3]) @@ -254,6 +317,16 @@ void FixPrecessionSpin::compute_anisotropy(double spi[3], double fmi[3]) /* ---------------------------------------------------------------------- */ +double FixPrecessionSpin::compute_anisotropy_energy(double spi[3]) +{ + double energy = 0.0; + double scalar = nax*spi[0] + nay*spi[1] + naz*spi[2]; + energy = Ka*scalar*scalar; + return energy; +} + +/* ---------------------------------------------------------------------- */ + void FixPrecessionSpin::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == ilevel_respa) post_force(vflag); @@ -264,17 +337,75 @@ void FixPrecessionSpin::post_force_respa(int vflag, int ilevel, int /*iloop*/) void FixPrecessionSpin::set_magneticprecession() { if (zeeman_flag) { - hx = H_field*nhx; - hy = H_field*nhy; - hz = H_field*nhz; + hx = H_field*nhx; + hy = H_field*nhy; + hz = H_field*nhz; } if (aniso_flag) { - Kax = 2.0*Ka*nax; - Kay = 2.0*Ka*nay; - Kaz = 2.0*Ka*naz; + Kax = 2.0*Kah*nax; + Kay = 2.0*Kah*nay; + Kaz = 2.0*Kah*naz; } } +/* ---------------------------------------------------------------------- + compute cubic aniso energy of spin i +------------------------------------------------------------------------- */ + +double FixPrecessionSpin::compute_cubic_energy(double spi[3]) +{ + double energy = 0.0; + double skx,sky,skz; + + skx = spi[0]*nc1x+spi[1]*nc1y+spi[2]*nc1z; + sky = spi[0]*nc2x+spi[1]*nc2y+spi[2]*nc2z; + skz = spi[0]*nc3x+spi[1]*nc3y+spi[2]*nc3z; + + energy = k1c*(skx*skx*sky*sky + sky*sky*skz*skz + skx*skx*skz*skz); + energy += k2c*skx*skx*sky*sky*skz*skz; + + return energy; +} + +/* ---------------------------------------------------------------------- + compute cubic anisotropy interaction for spin i +------------------------------------------------------------------------- */ + +void FixPrecessionSpin::compute_cubic(double spi[3], double fmi[3]) +{ + double skx,sky,skz,skx2,sky2,skz2; + double four1,four2,four3,fourx,foury,fourz; + double six1,six2,six3,sixx,sixy,sixz; + + skx = spi[0]*nc1x+spi[1]*nc1y+spi[2]*nc1z; + sky = spi[0]*nc2x+spi[1]*nc2y+spi[2]*nc2z; + skz = spi[0]*nc3x+spi[1]*nc3y+spi[2]*nc3z; + + skx2 = skx*skx; + sky2 = sky*sky; + skz2 = skz*skz; + + four1 = 2.0*skx*(sky2+skz2); + four2 = 2.0*sky*(skx2+skz2); + four3 = 2.0*skz*(skx2+sky2); + + fourx = k1ch*(nc1x*four1 + nc2x*four2 + nc3x*four3); + foury = k1ch*(nc1y*four1 + nc2y*four2 + nc3y*four3); + fourz = k1ch*(nc1z*four1 + nc2z*four2 + nc3z*four3); + + six1 = 2.0*skx*sky2*skz2; + six2 = 2.0*sky*skx2*skz2; + six3 = 2.0*skz*skx2*sky2; + + sixx = k2ch*(nc1x*six1 + nc2x*six2 + nc3x*six3); + sixy = k2ch*(nc1y*six1 + nc2y*six2 + nc3y*six3); + sixz = k2ch*(nc1z*six1 + nc2z*six2 + nc3z*six3); + + fmi[0] += fourx + sixx; + fmi[1] += foury + sixy; + fmi[2] += fourz + sixz; +} + /* ---------------------------------------------------------------------- potential energy in magnetic field ------------------------------------------------------------------------- */ @@ -284,10 +415,10 @@ double FixPrecessionSpin::compute_scalar() // only sum across procs one time if (eflag == 0) { - MPI_Allreduce(&emag,&emag_all,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&eprec,&eprec_all,1,MPI_DOUBLE,MPI_SUM,world); eflag = 1; } - return emag_all; + return eprec_all; } /* ---------------------------------------------------------------------- */ diff --git a/src/SPIN/fix_precession_spin.h b/src/SPIN/fix_precession_spin.h index 1db4d32ae9..0037784a48 100644 --- a/src/SPIN/fix_precession_spin.h +++ b/src/SPIN/fix_precession_spin.h @@ -39,11 +39,20 @@ class FixPrecessionSpin : public Fix { void min_post_force(int); double compute_scalar(); - int zeeman_flag, aniso_flag; + int zeeman_flag, aniso_flag, cubic_flag; void compute_single_precession(int, double *, double *); void compute_zeeman(int, double *); - void compute_anisotropy(double *, double *); + + // uniaxial aniso calculations + void compute_anisotropy(double *, double *); + double compute_anisotropy_energy(double *); + + // cubic aniso calculations + + void compute_cubic(double *, double *); + double compute_cubic_energy(double *); + protected: int style; // style of the magnetic precession @@ -52,7 +61,7 @@ class FixPrecessionSpin : public Fix { int ilevel_respa; int time_origin; int eflag; - double emag, emag_all; + double eprec, eprec_all; int varflag; int magfieldstyle; @@ -67,10 +76,19 @@ class FixPrecessionSpin : public Fix { // magnetic anisotropy intensity and direction - double Ka; + double Ka; // aniso const. in eV + double Kah; // aniso const. in rad.THz double nax, nay, naz; double Kax, Kay, Kaz; // temp. force variables + // cubic anisotropy intensity + + double k1c,k2c; // cubic const. in eV + double k1ch,k2ch; // cubic const. in rad.THz + double nc1x,nc1y,nc1z; + double nc2x,nc2y,nc2z; + double nc3x,nc3y,nc3z; + void set_magneticprecession(); }; diff --git a/tools/README b/tools/README index 6bf7d6b878..54f8d86898 100644 --- a/tools/README +++ b/tools/README @@ -39,6 +39,7 @@ pymol_asphere convert LAMMPS output of ellipsoids to PyMol format python Python scripts for post-processing LAMMPS output reax Tools for analyzing output of ReaxFF simulations smd convert Smooth Mach Dynamics triangles to VTK +spin perform a cubic polynomial interpolation of a GNEB MEP vim add-ons to VIM editor for editing LAMMPS input scripts xmgrace a collection of scripts to generate xmgrace plots