forked from lijiext/lammps
Adding a new test problem for large damping in the LL equation.
This commit is contained in:
parent
ac6cb062e6
commit
e24b4bec01
|
@ -45,6 +45,8 @@ directory.
|
|||
results (computed by the python script).
|
||||
Note: This example is a reworked version of a test problem
|
||||
provided by Martin Kroger (ETHZ).
|
||||
Note 2: Two versions of this test are deployed, one at low
|
||||
damping (0.01) and one at large damping (1.0).
|
||||
|
||||
- validation_nve:
|
||||
simulates a small assembly of magnetic atoms (54). The atoms are
|
||||
|
|
|
@ -12,13 +12,19 @@ cd validation_damped_precession/
|
|||
rm res_lammps.dat res_llg.dat
|
||||
cd ..
|
||||
|
||||
# test 3: langevin, damping and Zeeman
|
||||
cd validation_langevin_precession/
|
||||
# test 3: langevin, damping and Zeeman, low damping (0.01)
|
||||
cd validation_langevin_precession_d0.01/
|
||||
./run-test-prec.sh
|
||||
rm average_spin test-prec-spin.in res_lammps.dat res_langevin.dat
|
||||
cd ..
|
||||
|
||||
# test 4: NVE run, test Etot preservation
|
||||
# test 4: langevin, damping and Zeeman, large damping (1.0)
|
||||
cd validation_langevin_precession_d1.0/
|
||||
./run-test-prec.sh
|
||||
rm average_spin test-prec-spin.in res_lammps.dat res_langevin.dat
|
||||
cd ..
|
||||
|
||||
# test 5: NVE run, test Etot preservation
|
||||
cd validation_nve/
|
||||
./run-test-nve.sh
|
||||
rm nve_spin_lattice.pdf res_lammps.dat
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import numpy as np, pylab, tkinter
|
||||
import matplotlib.pyplot as plt
|
||||
import mpmath as mp
|
||||
|
||||
mub=5.78901e-5 # Bohr magneton (eV/T)
|
||||
kb=8.617333262145e-5 # Boltzman constant (eV/K)
|
||||
g=2.0 # Lande factor (adim)
|
||||
|
||||
Hz=10.0 # mag. field (T)
|
||||
|
||||
#Definition of the Langevin function
|
||||
def func(t):
|
||||
return mp.coth(g*mub*Hz/(kb*t))-1.0/(g*mub*Hz/(kb*t))
|
||||
|
||||
npoints=200
|
||||
ti=0.01
|
||||
tf=20.0
|
||||
for i in range (0,npoints):
|
||||
temp=ti+i*(tf-ti)/npoints
|
||||
print('%lf %lf %lf' % (temp,func(temp),-g*mub*Hz*func(temp)))
|
|
@ -0,0 +1,37 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
#Program fitting the exchange interaction
|
||||
#Model curve: Bethe-Slater function
|
||||
import numpy as np, pylab, tkinter
|
||||
import matplotlib.pyplot as plt
|
||||
from scipy.optimize import curve_fit
|
||||
from decimal import *
|
||||
import sys, string, os
|
||||
|
||||
|
||||
argv = sys.argv
|
||||
if len(argv) != 3:
|
||||
print("Syntax: ./plot_precession.py res_lammps.dat res_langevin.dat")
|
||||
sys.exit()
|
||||
|
||||
lammps_file = sys.argv[1]
|
||||
langevin_file = sys.argv[2]
|
||||
|
||||
T_lmp,S_lmp,E_lmp = np.loadtxt(lammps_file, skiprows=0, usecols=(0,2,3),unpack=True)
|
||||
T_lan,S_lan,E_lan = np.loadtxt(langevin_file, skiprows=0, usecols=(0,1,2),unpack=True)
|
||||
|
||||
plt.figure()
|
||||
plt.subplot(211)
|
||||
plt.ylabel('<Sz>')
|
||||
plt.plot(T_lmp, S_lmp, 'b-', label='LAMMPS')
|
||||
plt.plot(T_lan, S_lan, 'r--', label='Langevin')
|
||||
|
||||
plt.subplot(212)
|
||||
plt.ylabel('E (in eV)')
|
||||
plt.plot(T_lmp, E_lmp, 'b-', label='LAMMPS')
|
||||
plt.plot(T_lan, E_lan, 'r--', label='Langevin')
|
||||
|
||||
plt.xlabel('T (in K)')
|
||||
pylab.xlim([0,20.0])
|
||||
plt.legend()
|
||||
plt.show()
|
|
@ -0,0 +1,33 @@
|
|||
#!/bin/bash
|
||||
|
||||
tempi=0.0
|
||||
tempf=20.0
|
||||
|
||||
rm res_*.dat
|
||||
|
||||
# compute Lammps
|
||||
N=20
|
||||
for (( i=0; i<$N; i++ ))
|
||||
do
|
||||
temp="$(echo "$tempi+$i*($tempf-$tempi)/$N" | bc -l)"
|
||||
sed s/temperature/${temp}/g test-prec-spin.template > \
|
||||
test-prec-spin.in
|
||||
|
||||
# test standard Lammps
|
||||
./../../../../src/lmp_serial -in test-prec-spin.in
|
||||
|
||||
# test spin/kk with Kokkos Lammps
|
||||
# mpirun -np 1 ../../../../src/lmp_kokkos_mpi_only \
|
||||
# -k on -sf kk -in test-prec-spin.in
|
||||
|
||||
Hz="$(tail -n 1 average_spin | awk -F " " '{print $3}')"
|
||||
sz="$(tail -n 1 average_spin | awk -F " " '{print $5}')"
|
||||
en="$(tail -n 1 average_spin | awk -F " " '{print $6}')"
|
||||
echo $temp $Hz $sz $en >> res_lammps.dat
|
||||
done
|
||||
|
||||
# compute Langevin
|
||||
python3 langevin.py > res_langevin.dat
|
||||
|
||||
# plot results
|
||||
python3 plot_precession.py res_lammps.dat res_langevin.dat
|
|
@ -0,0 +1,48 @@
|
|||
#LAMMPS in.run
|
||||
|
||||
units metal
|
||||
atom_style spin
|
||||
# atom_style spin/kk
|
||||
atom_modify map array
|
||||
boundary p p p
|
||||
|
||||
# read_data singlespin.data
|
||||
|
||||
lattice sc 3.0
|
||||
region box block 0.0 1.0 0.0 1.0 0.0 1.0
|
||||
create_box 1 box
|
||||
create_atoms 1 box
|
||||
|
||||
mass 1 1.0
|
||||
set type 1 spin 1.0 0.0 0.0 1.0
|
||||
|
||||
# defines a pair/style for neighbor list, but do not use it
|
||||
pair_style spin/exchange 4.0
|
||||
pair_coeff * * exchange 1.0 0.0 0.0 1.0
|
||||
|
||||
group bead type 1
|
||||
|
||||
variable H equal 10.0
|
||||
variable Kan equal 0.0
|
||||
variable Temperature equal temperature
|
||||
variable RUN equal 1000000
|
||||
|
||||
fix 1 all nve/spin lattice no
|
||||
fix 2 all precession/spin zeeman ${H} 0.0 0.0 1.0 anisotropy ${Kan} 0.0 0.0 1.0
|
||||
fix_modify 2 energy yes
|
||||
# fix 3 all langevin/spin ${Temperature} 0.01 12345
|
||||
fix 3 all langevin/spin ${Temperature} 1.0 12345
|
||||
|
||||
compute compute_spin all spin
|
||||
compute outsp all property/atom spx spy spz sp
|
||||
compute magsz all reduce ave c_outsp[3]
|
||||
|
||||
thermo 50000
|
||||
thermo_style custom step time temp vol pe c_compute_spin[5] etotal
|
||||
|
||||
variable magnetic_energy equal c_compute_spin[5]
|
||||
|
||||
fix avespin all ave/time 1 ${RUN} ${RUN} v_Temperature v_H v_Kan c_magsz v_magnetic_energy file average_spin
|
||||
|
||||
timestep 0.1
|
||||
run ${RUN}
|
Loading…
Reference in New Issue