Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F69495679
mc.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Tue, Jul 2, 01:51
Size
2 KB
Mime Type
text/x-python
Expires
Thu, Jul 4, 01:51 (2 d)
Engine
blob
Format
Raw Data
Handle
18644944
Attached To
rLAMMPS lammps
mc.py
View Options
#!/usr/bin/env python -i
# preceeding line should have path for Python on your machine
# mc.py
# Purpose: mimic operation of example/MC/in.mc via Python
# Syntax: mc.py in.mc
# in.mc = LAMMPS input script
from
__future__
import
print_function
import
sys
,
random
,
math
# set these parameters
# make sure neigh skin (in in.mc) > 2*deltamove
nloop
=
3000
deltaperturb
=
0.2
deltamove
=
0.1
kT
=
0.05
random
.
seed
(
27848
)
# parse command line
argv
=
sys
.
argv
if
len
(
argv
)
!=
2
:
print
(
"Syntax: mc.py in.mc"
)
sys
.
exit
()
infile
=
sys
.
argv
[
1
]
from
lammps
import
lammps
lmp
=
lammps
()
# run infile one line at a time
# just sets up MC problem
lines
=
open
(
infile
,
'r'
)
.
readlines
()
for
line
in
lines
:
lmp
.
command
(
line
)
lmp
.
command
(
"variable e equal pe"
)
# run 0 to get energy of perfect lattice
# emin = minimum energy
lmp
.
command
(
"run 0"
)
natoms
=
lmp
.
extract_global
(
"natoms"
,
0
)
emin
=
lmp
.
extract_compute
(
"thermo_pe"
,
0
,
0
)
/
natoms
lmp
.
command
(
"variable emin equal $e"
)
# disorder the system
# estart = initial energy
x
=
lmp
.
extract_atom
(
"x"
,
3
)
for
i
in
range
(
natoms
):
x
[
i
][
0
]
+=
deltaperturb
*
(
2
*
random
.
random
()
-
1
)
x
[
i
][
1
]
+=
deltaperturb
*
(
2
*
random
.
random
()
-
1
)
lmp
.
command
(
"variable elast equal $e"
)
lmp
.
command
(
"thermo_style custom step v_emin v_elast pe"
)
lmp
.
command
(
"run 0"
)
x
=
lmp
.
extract_atom
(
"x"
,
3
)
lmp
.
command
(
"variable elast equal $e"
)
estart
=
lmp
.
extract_compute
(
"thermo_pe"
,
0
,
0
)
/
natoms
# loop over Monte Carlo moves
# extract x after every run, in case reneighboring changed ptr in LAMMPS
elast
=
estart
naccept
=
0
for
i
in
range
(
nloop
):
iatom
=
random
.
randrange
(
0
,
natoms
)
x0
=
x
[
iatom
][
0
]
y0
=
x
[
iatom
][
1
]
x
[
iatom
][
0
]
+=
deltamove
*
(
2
*
random
.
random
()
-
1
)
x
[
iatom
][
1
]
+=
deltamove
*
(
2
*
random
.
random
()
-
1
)
lmp
.
command
(
"run 1 pre no post no"
)
x
=
lmp
.
extract_atom
(
"x"
,
3
)
e
=
lmp
.
extract_compute
(
"thermo_pe"
,
0
,
0
)
/
natoms
if
e
<=
elast
:
elast
=
e
lmp
.
command
(
"variable elast equal $e"
)
naccept
+=
1
elif
random
.
random
()
<=
math
.
exp
(
natoms
*
(
elast
-
e
)
/
kT
):
elast
=
e
lmp
.
command
(
"variable elast equal $e"
)
naccept
+=
1
else
:
x
[
iatom
][
0
]
=
x0
x
[
iatom
][
1
]
=
y0
# final energy and stats
lmp
.
command
(
"variable nbuild equal nbuild"
)
nbuild
=
lmp
.
extract_variable
(
"nbuild"
,
None
,
0
)
lmp
.
command
(
"run 0"
)
estop
=
lmp
.
extract_compute
(
"thermo_pe"
,
0
,
0
)
/
natoms
print
(
"MC stats:"
)
print
(
" starting energy ="
,
estart
)
print
(
" final energy ="
,
estop
)
print
(
" minimum energy of perfect lattice ="
,
emin
)
print
(
" accepted MC moves ="
,
naccept
)
print
(
" neighbor list rebuilds ="
,
nbuild
)
Event Timeline
Log In to Comment