merging stable and exaalt branches into exaaltstable
This commit is contained in:
36
.gitlab-ci.yml
Normal file
36
.gitlab-ci.yml
Normal file
@ -0,0 +1,36 @@
|
||||
image: ubuntu:latest
|
||||
|
||||
test:
|
||||
|
||||
before_script:
|
||||
|
||||
# Install Linux Packages:
|
||||
- apt-get update
|
||||
- hostname
|
||||
- export HOME=/builds/exaalt/
|
||||
- env
|
||||
- apt-get --yes --force-yes install gfortran libblas-dev liblapack-dev
|
||||
- apt-get --yes --force-yes install cmake python gcc cmake-data g++ git wget
|
||||
- apt-get --yes --force-yes install pkg-config python-numpy python3-numpy libopenmpi-dev
|
||||
|
||||
# Build LATTE:
|
||||
- cd /builds/exaalt/
|
||||
- git clone https://github.com/lanl/LATTE.git
|
||||
- cd LATTE
|
||||
- cp ./makefiles/makefile.CHOICES.gfort.lapack.lmp makefile.CHOICES
|
||||
- make
|
||||
|
||||
# Build LAMMPS:
|
||||
- cd /builds/exaalt/lammps/lib/latte/
|
||||
- cp Makefile.lammps.gfortran Makefile.lammps
|
||||
- cd /builds/exaalt/lammps/src/
|
||||
- make yes-latte
|
||||
- make yes-molecule
|
||||
- make serial
|
||||
|
||||
script:
|
||||
|
||||
# Test LAMMPS-LATTE Example:
|
||||
- cd /builds/exaalt/lammps/examples/latte/
|
||||
- ../../src/lmp_serial -in in.latte.water
|
||||
|
||||
36
examples/latte/TBparam/bondints.nonortho
Normal file
36
examples/latte/TBparam/bondints.nonortho
Normal file
@ -0,0 +1,36 @@
|
||||
Noints= 34
|
||||
Element1 Element2 Kind H0 B1 B2 B3 B4 B5 R1 Rcut H0 B1 B2 B3 B4 B5 R1 Rcut
|
||||
N O sss -11.430028 -2.257346 -1.152844 0.000000 0.000000 1.200000 3.500000 4.000000 0.340064 -1.703613 -0.622348 0.036738 -0.040158 1.200000 3.500000 4.000000
|
||||
N O sps 11.597479 -1.382001 -0.765170 0.000000 0.000000 1.200000 3.500000 4.000000 -0.370946 -1.040947 -0.931097 0.252441 -0.115450 1.200000 3.500000 4.000000
|
||||
O N sps 12.143744 -0.822913 -0.676127 0.000000 0.000000 1.200000 3.500000 4.000000 -0.420014 -1.107918 -0.905594 0.188424 -0.088365 1.200000 3.500000 4.000000
|
||||
N O pps 9.465191 -1.082032 -0.769214 0.000000 0.000000 1.200000 3.500000 4.000000 -0.314073 0.499050 -2.914288 2.067657 -0.738439 1.200000 3.500000 4.000000
|
||||
N O ppp -4.676789 -2.171480 -0.288002 0.000000 0.000000 1.200000 3.500000 4.000000 0.223937 -1.991867 -0.537630 -0.081270 -0.004130 1.200000 3.500000 4.000000
|
||||
C O sss -14.369472 -2.077439 -0.875471 0.000000 0.000000 1.200000 3.500000 4.000000 0.375339 -1.547372 -0.642492 0.020614 -0.026699 1.200000 3.500000 4.000000
|
||||
C O sps 9.576296 -1.156217 -0.494803 0.000000 0.000000 1.200000 3.500000 4.000000 -0.373027 -0.776043 -1.019920 0.257539 -0.102838 1.200000 3.500000 4.000000
|
||||
O C sps 14.037374 -1.192632 -0.654572 0.000000 0.000000 1.200000 3.500000 4.000000 -0.458068 -1.035067 -0.937868 0.190562 -0.077841 1.200000 3.500000 4.000000
|
||||
C O pps 9.331152 -0.718120 -0.822100 0.000000 0.000000 1.200000 3.500000 4.000000 -0.322293 0.795473 -3.476601 2.589965 -0.897800 1.200000 3.500000 4.000000
|
||||
C O ppp -5.334367 -2.263939 -0.204910 0.000000 0.000000 1.200000 3.500000 4.000000 0.244570 -1.922717 -0.573671 -0.057280 -0.004108 1.200000 3.500000 4.000000
|
||||
C N sss -7.010061 -1.730597 -0.575559 0.000000 0.000000 1.500000 3.500000 4.000000 0.263438 -1.754525 -0.584215 -0.007801 -0.021729 1.500000 3.500000 4.000000
|
||||
C N sps 7.543283 -1.293768 -0.624363 0.000000 0.000000 1.500000 3.500000 4.000000 -0.326609 -1.197485 -0.807786 0.134891 -0.084373 1.500000 3.500000 4.000000
|
||||
N C sps 9.090970 -1.494255 -0.616711 0.000000 0.000000 1.500000 3.500000 4.000000 -0.337943 -1.335442 -0.769693 0.119373 -0.079493 1.500000 3.500000 4.000000
|
||||
C N pps 6.892240 -0.931920 -0.769164 0.000000 0.000000 1.500000 3.500000 4.000000 -0.350240 -0.467439 -1.849316 1.854403 -0.988471 1.500000 3.500000 4.000000
|
||||
C N ppp -2.903346 -2.149349 -0.253006 0.000000 0.000000 1.500000 3.500000 4.000000 0.158424 -2.114409 -0.582346 -0.051076 -0.006183 1.500000 3.500000 4.000000
|
||||
C C sss -9.404207 -1.363297 -0.507128 0.000000 0.000000 1.400000 3.500000 4.000000 0.346977 -1.519820 -0.570812 -0.013518 -0.015829 1.400000 3.500000 4.000000
|
||||
C C sps 8.662429 -1.047410 -0.661999 0.000000 0.000000 1.400000 3.500000 4.000000 -0.400467 -0.984048 -0.853949 0.157178 -0.073381 1.400000 3.500000 4.000000
|
||||
C C pps 6.811512 -0.552299 -0.776890 0.000000 0.000000 1.400000 3.500000 4.000000 -0.382417 0.102889 -2.786680 2.646356 -1.134320 1.400000 3.500000 4.000000
|
||||
C C ppp -3.550127 -1.925572 -0.132715 0.000000 0.000000 1.400000 3.500000 4.000000 0.214357 -1.948923 -0.578323 -0.034356 -0.007257 1.400000 3.500000 4.000000
|
||||
H C sss -9.072577 -1.393093 -0.430611 0.000000 0.000000 1.100000 3.500000 4.000000 0.416003 -1.459596 -0.654874 0.009140 -0.012658 1.100000 3.500000 4.000000
|
||||
H C sps 8.176008 -0.985177 -0.427403 0.000000 0.000000 1.100000 3.500000 4.000000 -0.495695 -0.901626 -1.007214 0.189808 -0.057087 1.100000 3.500000 4.000000
|
||||
H H sss -9.340000 -1.145903 -0.391777 0.000000 0.000000 0.750000 3.500000 4.000000 0.575007 -1.391261 -0.778831 0.080209 -0.017759 0.750000 3.500000 4.000000
|
||||
O O sss -12.737687 -1.851608 -0.666621 0.000000 0.000000 1.200000 3.500000 4.000000 0.296445 -1.911896 -0.663451 0.038054 -0.046608 1.200000 3.500000 4.000000
|
||||
O O sps 13.683050 -1.684554 -0.468349 0.000000 0.000000 1.200000 3.500000 4.000000 -0.362143 -1.285274 -0.939591 0.204641 -0.106438 1.200000 3.500000 4.000000
|
||||
O O pps 9.460772 -1.211748 -0.581016 0.000000 0.000000 1.200000 3.500000 4.000000 -0.312044 0.121814 -2.519352 1.681266 -0.644566 1.200000 3.500000 4.000000
|
||||
O O ppp -4.494595 -2.709223 -0.284124 0.000000 0.000000 1.200000 3.500000 4.000000 0.193010 -2.168462 -0.580629 -0.105104 0.004891 1.200000 3.500000 4.000000
|
||||
H O sss -12.230931 -1.808632 -0.421164 0.000000 0.000000 1.000000 3.500000 4.000000 0.404725 -1.702546 -0.707938 0.074904 -0.039922 1.000000 3.500000 4.000000
|
||||
H O sps 9.466088 -1.321262 -0.386336 0.000000 0.000000 1.000000 3.500000 4.000000 -0.447660 -0.952979 -1.163537 0.400616 -0.156965 1.000000 3.500000 4.000000
|
||||
N N sss -7.710330 -2.365312 -0.525527 0.000000 0.000000 1.500000 3.500000 4.000000 0.231654 -1.879002 -0.572765 -0.004579 -0.031106 1.500000 3.500000 4.000000
|
||||
N N sps 8.222314 -1.612118 -0.690081 0.000000 0.000000 1.500000 3.500000 4.000000 -0.305271 -1.385158 -0.751032 0.114531 -0.090839 1.500000 3.500000 4.000000
|
||||
N N pps 7.178570 -1.176467 -0.571049 0.000000 0.000000 1.500000 3.500000 4.000000 -0.324668 -0.547805 -1.638658 1.495168 -0.827868 1.500000 3.500000 4.000000
|
||||
N N ppp -2.829344 -2.408049 -0.387709 0.000000 0.000000 1.500000 3.500000 4.000000 0.142909 -2.162036 -0.571942 -0.071640 -0.004682 1.500000 3.500000 4.000000
|
||||
H N sss -12.095890 -1.519057 -0.277247 0.000000 0.000000 1.000000 3.500000 4.000000 0.446693 -1.500463 -0.657448 0.065741 -0.037004 1.000000 3.500000 4.000000
|
||||
H N sps 9.851338 -1.231616 -0.370836 0.000000 0.000000 1.000000 3.500000 4.000000 -0.501530 -0.785734 -1.123232 0.394878 -0.148501 1.000000 3.500000 4.000000
|
||||
7
examples/latte/TBparam/electrons.dat
Normal file
7
examples/latte/TBparam/electrons.dat
Normal file
@ -0,0 +1,7 @@
|
||||
Noelem= 5
|
||||
Element basis Numel Es Ep Ed Ef Mass HubbardU Wss Wpp Wdd Wff
|
||||
N sp 5.0 -18.58 -7.09 0.0 0.0 14.0067 15.93 0.0 -0.6950 0.0 0.0
|
||||
O sp 6.0 -23.96 -9.02 0.0 0.0 15.9994 12.15 0.0 -0.7577 0.0 0.0
|
||||
H s 1.0 -6.35 0.0 0.0 0.0 1.0079 12.85 -1.7937 0.0 0.0 0.0
|
||||
C sp 4.0 -13.75 -5.28 0.0 0.0 12.01 10.0 0.0 -0.621 0.0 0.0
|
||||
Ti sd 4.0 -5.5 0.0 -3.0 0.0 47.867 10.0 0.0 0.0 0.0 0.0
|
||||
12
examples/latte/TBparam/ppots.nonortho
Normal file
12
examples/latte/TBparam/ppots.nonortho
Normal file
@ -0,0 +1,12 @@
|
||||
Nopps= 10
|
||||
Ele1 Ele2 A0 A1 A2 A3 A4 A5 A6 C R1 Rcut
|
||||
N O 13.182426 20.050322 -46.806321 38.206953 -12.319656 0.000000 0.000000 0.000000 1.600000 1.700000
|
||||
C N 88.953762 10.294988 -27.706877 22.101434 -6.836438 0.000000 0.000000 0.000000 1.600000 1.700000
|
||||
C O 0.944093 30.116337 -59.608215 45.107654 -13.178839 0.000000 0.000000 0.000000 1.600000 1.700000
|
||||
C H 104.889589 3.971095 -23.823043 26.408093 -11.317522 0.000000 0.000000 0.000000 1.200000 1.300000
|
||||
C C 3.962931 24.467772 -51.156024 39.031644 -11.342979 0.000000 0.000000 0.000000 1.600000 1.700000
|
||||
H H 38.512100 3.887860 -37.769100 57.083500 -34.512200 0.000000 0.000000 0.000000 0.900000 1.000000
|
||||
N N 43.228899 15.004605 -36.621777 29.234888 -8.912743 0.000000 0.000000 0.000000 1.600000 1.700000
|
||||
N H 0.625470 28.081241 -63.414297 53.286361 -17.352234 0.000000 0.000000 0.000000 1.300000 1.400000
|
||||
O O 10.999870 19.303033 -45.747853 37.946431 -11.935755 0.000000 0.000000 0.000000 1.500000 1.600000
|
||||
O H 0.481176 33.175383 -81.158683 74.935408 -26.792315 0.000000 0.000000 0.000000 1.200000 1.300000
|
||||
63
examples/latte/data.sucrose_non_opt.lmp
Normal file
63
examples/latte/data.sucrose_non_opt.lmp
Normal file
@ -0,0 +1,63 @@
|
||||
LAMMPS Description
|
||||
|
||||
45 atoms
|
||||
|
||||
3 atom types
|
||||
|
||||
0.0000000000000000 18.917000000000002 xlo xhi
|
||||
0.0000000000000000 17.350999999999999 ylo yhi
|
||||
0.0000000000000000 15.472000000000000 zlo zhi
|
||||
|
||||
Masses
|
||||
|
||||
1 15.994915008544922
|
||||
2 12.000000000000000
|
||||
3 1.0078250169754028
|
||||
|
||||
Atoms
|
||||
|
||||
1 1 1 0.0 11.47359 7.39174 7.26456
|
||||
2 1 2 0.0 12.66159 8.24474 7.53356
|
||||
3 1 3 0.0 13.49759 7.72474 7.00656
|
||||
4 1 2 0.0 12.92859 8.18374 9.02956
|
||||
5 1 1 0.0 13.69659 9.10274 10.46556
|
||||
6 1 2 0.0 12.83959 10.10474 6.64056
|
||||
7 1 3 0.0 13.24359 10.33074 7.58456
|
||||
8 1 1 0.0 13.17359 9.67874 5.60956
|
||||
9 1 2 0.0 11.20559 10.26374 6.86456
|
||||
10 1 3 0.0 11.22159 11.15674 6.18156
|
||||
11 1 1 0.0 10.78559 10.69674 8.19156
|
||||
12 1 2 0.0 10.23459 9.20474 6.34356
|
||||
13 1 3 0.0 9.23359 9.62574 6.11656
|
||||
14 1 1 0.0 10.73959 8.65074 5.08856
|
||||
15 1 2 0.0 10.18759 8.08774 7.38056
|
||||
16 1 3 0.0 10.03259 8.49174 8.42656
|
||||
17 1 1 0.0 9.22959 7.03374 7.08156
|
||||
18 1 2 0.0 7.79359 7.27874 7.34356
|
||||
19 1 1 0.0 7.44259 8.64274 6.96956
|
||||
20 1 2 0.0 7.01059 9.43674 8.13856
|
||||
21 1 3 0.0 5.95059 9.74974 7.96256
|
||||
22 1 2 0.0 7.08359 8.51474 9.35656
|
||||
23 1 3 0.0 8.19359 8.08474 9.80956
|
||||
24 1 1 0.0 5.86059 8.56174 10.14056
|
||||
25 1 2 0.0 7.34259 7.10674 8.80356
|
||||
26 1 3 0.0 6.37259 6.54074 8.80556
|
||||
27 1 1 0.0 8.32159 6.38474 9.58156
|
||||
28 1 2 0.0 7.89859 10.67174 8.17156
|
||||
29 1 1 0.0 6.06859 12.11474 7.59256
|
||||
30 1 2 0.0 7.47359 7.05174 5.99256
|
||||
31 1 1 0.0 5.66359 6.54374 6.50656
|
||||
32 1 3 0.0 12.00659 8.11374 9.61556
|
||||
33 1 3 0.0 13.35859 7.21774 9.30856
|
||||
34 1 3 0.0 13.67759 8.46774 11.22956
|
||||
35 1 3 0.0 12.44459 9.34474 5.00556
|
||||
36 1 3 0.0 11.54859 11.18274 8.59756
|
||||
37 1 3 0.0 11.00959 7.71574 5.30056
|
||||
38 1 3 0.0 5.09459 8.45474 9.52056
|
||||
39 1 3 0.0 7.92859 6.23074 10.47756
|
||||
40 1 3 0.0 8.53259 10.62974 7.23156
|
||||
41 1 3 0.0 8.58159 10.63874 9.05856
|
||||
42 1 3 0.0 6.42359 13.37374 7.86056
|
||||
43 1 3 0.0 7.58559 6.90074 4.62256
|
||||
44 1 3 0.0 7.35159 5.27974 6.61456
|
||||
45 1 3 0.0 5.22759 6.18974 5.69256
|
||||
41
examples/latte/data.water
Normal file
41
examples/latte/data.water
Normal file
@ -0,0 +1,41 @@
|
||||
LAMMPS Description
|
||||
|
||||
24 atoms
|
||||
|
||||
2 atom types
|
||||
|
||||
0.0000000000000000 6.2670000000000003 xlo xhi
|
||||
0.0000000000000000 6.2670000000000003 ylo yhi
|
||||
0.0000000000000000 6.2670000000000003 zlo zhi
|
||||
|
||||
Masses
|
||||
|
||||
1 15.994915008544922
|
||||
2 1.0078250169754028
|
||||
|
||||
Atoms
|
||||
|
||||
1 1 1 0.0 3.08800 3.70000 3.12400
|
||||
2 1 2 0.0 4.05800 3.70000 3.12400
|
||||
3 1 2 0.0 2.76400 3.13200 3.84100
|
||||
4 1 1 0.0 2.47000 0.39000 1.36000
|
||||
5 1 2 0.0 1.54000 0.37000 1.73000
|
||||
6 1 2 0.0 2.48000 0.00000 0.44000
|
||||
7 1 1 0.0 1.99300 0.41700 5.25000
|
||||
8 1 2 0.0 2.39300 1.32700 5.16000
|
||||
9 1 2 0.0 0.99300 0.49700 5.31000
|
||||
10 1 1 0.0 2.05300 6.09700 3.48000
|
||||
11 1 2 0.0 2.12300 5.20700 3.02000
|
||||
12 1 2 0.0 1.11300 0.17000 3.40000
|
||||
13 1 1 0.0 4.90000 5.37700 2.14000
|
||||
14 1 2 0.0 5.51000 6.17700 2.18000
|
||||
15 1 2 0.0 3.95000 5.68700 2.21000
|
||||
16 1 1 0.0 0.92000 3.82700 0.56000
|
||||
17 1 2 0.0 0.00000 3.54700 0.27000
|
||||
18 1 2 0.0 1.23000 4.59700 0.00000
|
||||
19 1 1 0.0 0.89000 2.03700 3.41000
|
||||
20 1 2 0.0 0.72000 2.86700 2.87000
|
||||
21 1 2 0.0 1.79000 1.66700 3.19000
|
||||
22 1 1 0.0 4.45000 4.61700 5.43000
|
||||
23 1 2 0.0 4.75000 3.89700 4.81000
|
||||
24 1 2 0.0 4.06000 4.21700 6.26000
|
||||
43
examples/latte/in.latte.sucrose.min
Normal file
43
examples/latte/in.latte.sucrose.min
Normal file
@ -0,0 +1,43 @@
|
||||
# simple water model with LATTE
|
||||
|
||||
units metal
|
||||
atom_style full
|
||||
atom_modify sort 0 0.0 # turn off sorting of the coordinates
|
||||
|
||||
read_data data.sucrose_non_opt.lmp
|
||||
|
||||
# replicate system if requested
|
||||
|
||||
variable x index 1
|
||||
variable y index 1
|
||||
variable z index 1
|
||||
|
||||
variable nrep equal v_x*v_y*v_z
|
||||
if "${nrep} > 1" then "replicate $x $y $z"
|
||||
|
||||
# initialize system
|
||||
|
||||
velocity all create 0.0 87287 loop geom
|
||||
|
||||
pair_style zero 1.0
|
||||
pair_coeff * *
|
||||
|
||||
neighbor 1.0 bin
|
||||
neigh_modify every 1 delay 0 check yes
|
||||
|
||||
timestep 0.00025
|
||||
|
||||
fix 1 all nve
|
||||
|
||||
fix 2 all latte NULL
|
||||
fix_modify 2 energy yes
|
||||
|
||||
thermo_style custom step temp pe etotal
|
||||
|
||||
# minimization
|
||||
|
||||
thermo 1
|
||||
min_style cg
|
||||
min_modify dmax 0.1
|
||||
min_modify line quadratic
|
||||
minimize 1.0e-6 1.0e-6 10000 10000
|
||||
40
examples/latte/in.latte.water
Normal file
40
examples/latte/in.latte.water
Normal file
@ -0,0 +1,40 @@
|
||||
# simple water model with LATTE
|
||||
|
||||
units metal
|
||||
atom_style full
|
||||
atom_modify sort 0 0.0 # turn off sorting of the coordinates
|
||||
|
||||
read_data data.water
|
||||
|
||||
# replicate system if requested
|
||||
|
||||
variable x index 1
|
||||
variable y index 1
|
||||
variable z index 1
|
||||
|
||||
variable nrep equal v_x*v_y*v_z
|
||||
if "${nrep} > 1" then "replicate $x $y $z"
|
||||
|
||||
# initialize system
|
||||
|
||||
velocity all create 0.0 87287 loop geom
|
||||
|
||||
pair_style zero 1.0
|
||||
pair_coeff * *
|
||||
|
||||
neighbor 1.0 bin
|
||||
neigh_modify every 1 delay 0 check yes
|
||||
|
||||
timestep 0.00025
|
||||
|
||||
fix 1 all nve
|
||||
|
||||
fix 2 all latte NULL
|
||||
fix_modify 2 energy yes
|
||||
|
||||
thermo_style custom step temp pe etotal
|
||||
|
||||
# dynamics
|
||||
|
||||
thermo 10
|
||||
run 100
|
||||
41
examples/latte/in.latte.water.min
Normal file
41
examples/latte/in.latte.water.min
Normal file
@ -0,0 +1,41 @@
|
||||
# simple water model with LATTE
|
||||
|
||||
units metal
|
||||
atom_style full
|
||||
atom_modify sort 0 0.0 # turn off sorting of the coordinates
|
||||
|
||||
read_data data.water
|
||||
|
||||
# replicate system if requested
|
||||
|
||||
variable x index 1
|
||||
variable y index 1
|
||||
variable z index 1
|
||||
|
||||
variable nrep equal v_x*v_y*v_z
|
||||
if "${nrep} > 1" then "replicate $x $y $z"
|
||||
|
||||
# initialize system
|
||||
|
||||
velocity all create 0.0 87287 loop geom
|
||||
|
||||
pair_style zero 1.0
|
||||
pair_coeff * *
|
||||
|
||||
neighbor 1.0 bin
|
||||
neigh_modify every 1 delay 0 check yes
|
||||
|
||||
timestep 0.00025
|
||||
|
||||
fix 1 all nve
|
||||
|
||||
fix 2 all latte NULL
|
||||
fix_modify 2 energy yes
|
||||
|
||||
thermo_style custom step temp pe etotal
|
||||
|
||||
# minimization
|
||||
|
||||
thermo 1
|
||||
min_style fire
|
||||
minimize 1.0e-9 1.0e-9 1000 1000
|
||||
39
examples/latte/latte.in
Normal file
39
examples/latte/latte.in
Normal file
@ -0,0 +1,39 @@
|
||||
LATTE INPUT FILE
|
||||
================
|
||||
#This input file resumes the content of MDcontroller and TBparam/control.in
|
||||
#The parser will only read it if it's present inside the running folder.
|
||||
#In case this file is not present Latte will read the two files as original.
|
||||
#The order of the kewords is not important in this file.
|
||||
#To get a full description of these keywords please see:
|
||||
## https://github.com/lanl/LATTE/blob/master/Manual/LATTE_manual.pdf
|
||||
|
||||
#General controls
|
||||
CONTROL{
|
||||
xControl= 1
|
||||
BASISTYPE= NONORTHO
|
||||
COORDSFILE= "./coords.dat"
|
||||
KBT= 0.0
|
||||
ENTROPYKIND= 1
|
||||
PPOTON= 1
|
||||
SPINON= 0 SPINTOL= 1.0e-4
|
||||
ELECTRO= 1 ELECMETH= 0 ELEC_QTOL= 1.0e-8
|
||||
MAXSCF= 450
|
||||
BREAKTOL= 1.0E-6 MINSP2ITER= 22 SP2CONV= REL
|
||||
FULLQCONV= 1 QITER= 3
|
||||
QMIX= 0.25 SPINMIX= 0.25 MDMIX= 0.25
|
||||
SPARSEON= 1 THRESHOLDON= 1 NUMTHRESH= 1.0e-6 FILLINSTOP= 100 BLKSZ= 4
|
||||
MSPARSE= 1500
|
||||
RELAX= 0 RELAXTYPE= SD MAXITER= 100000 RLXFTOL= 0.0000001
|
||||
SKIN= 1.0
|
||||
CHARGE= 0
|
||||
XBO= 1
|
||||
XBODISON= 1
|
||||
XBODISORDER= 5
|
||||
KON= 0
|
||||
}
|
||||
|
||||
#Controls for QMD (if using lammps MAXITER must be set to -1)
|
||||
MDCONTROL{
|
||||
MAXITER= -1
|
||||
}
|
||||
|
||||
27
lib/latte/Makefile.lammps.gfortran
Normal file
27
lib/latte/Makefile.lammps.gfortran
Normal file
@ -0,0 +1,27 @@
|
||||
# Settings that the LAMMPS build will import when this package is installed
|
||||
# Change all the flags and paths accordingly
|
||||
# If using PROGRESS/BML set PROGRESS to ON
|
||||
# For more information about these libraries see:
|
||||
# BML: https://github.com/qmmd/bml
|
||||
# PROGRESS: https://github.com/losalamos/qmd-progress
|
||||
# METIS: http://glaros.dtc.umn.edu/gkhome/metis/metis/download
|
||||
|
||||
latte_PATH = ${HOME}/LATTE
|
||||
progress_PATH = ${HOME}/qmd-progress
|
||||
bml_PATH = ${HOME}/bml
|
||||
metis_PATH = ${HOME}/Programs/metis-5.1.0
|
||||
|
||||
latte_SYSINC = -I${latte_PATH}/src -I${bml_PATH}/install/include -I${progress_PATH}/install/include
|
||||
|
||||
#latte_SYSLIB = -fopenmp ${latte_PATH}/src/latte_c_bind.o ${latte_PATH}/liblatte.a -lgfortran \
|
||||
# -lm -Wl,--no-as-needed -L${MKLROOT}/lib/intel64 -lmkl_lapack95_lp64 -lmkl_gf_lp64 \
|
||||
# -lmkl_gnu_thread -lmkl_core -lmkl_gnu_thread -lmkl_core -ldl -lpthread -lm
|
||||
|
||||
latte_SYSLIB = -fopenmp ${latte_PATH}/src/latte_c_bind.o ${latte_PATH}/liblatte.a -lgfortran \
|
||||
-llapack -lblas
|
||||
|
||||
# Uncomment the following line to use PROGRESS/BML and metis.
|
||||
#latte_SYSLIB += -L${progress_PATH}/install/lib -lprogress -L${bml_PATH}/install/lib -lbml
|
||||
#latte_SYSLIB += -L${metis_PATH}/install -lmetis
|
||||
|
||||
|
||||
27
lib/latte/Makefile.lammps.gfortran.dev
Normal file
27
lib/latte/Makefile.lammps.gfortran.dev
Normal file
@ -0,0 +1,27 @@
|
||||
# Settings that the LAMMPS build will import when this package is installed
|
||||
# Change all the flags and paths accordingly
|
||||
# If using PROGRESS/BML set PROGRESS to ON
|
||||
# For more information about these libraries see:
|
||||
# BML: https://github.com/qmmd/bml
|
||||
# PROGRESS: https://github.com/losalamos/qmd-progress
|
||||
# METIS: http://glaros.dtc.umn.edu/gkhome/metis/metis/download
|
||||
|
||||
latte_PATH = ${HOME}/LATTE_dev
|
||||
progress_PATH = ${HOME}/qmd-progress
|
||||
bml_PATH = ${HOME}/bml
|
||||
metis_PATH = ${HOME}/Programs/metis-5.1.0
|
||||
|
||||
latte_SYSINC = -I${latte_PATH}/src -I${bml_PATH}/install/include -I${progress_PATH}/install/include
|
||||
|
||||
#latte_SYSLIB = -fopenmp ${latte_PATH}/src/latte_c_bind.o ${latte_PATH}/liblatte.a -lgfortran \
|
||||
# -lm -Wl,--no-as-needed -L${MKLROOT}/lib/intel64 -lmkl_lapack95_lp64 -lmkl_gf_lp64 \
|
||||
# -lmkl_gnu_thread -lmkl_core -lmkl_gnu_thread -lmkl_core -ldl -lpthread -lm
|
||||
|
||||
latte_SYSLIB = -fopenmp ${latte_PATH}/src/latte_c_bind.o ${latte_PATH}/liblatte.a -lgfortran \
|
||||
-llapack -lblas
|
||||
|
||||
# Uncomment the following line to use PROGRESS/BML and metis.
|
||||
latte_SYSLIB += -L${progress_PATH}/install/lib -lprogress -L${bml_PATH}/install/lib -lbml
|
||||
#latte_SYSLIB += -L${metis_PATH}/install -lmetis
|
||||
|
||||
|
||||
29
lib/latte/Makefile.lammps.ifort
Normal file
29
lib/latte/Makefile.lammps.ifort
Normal file
@ -0,0 +1,29 @@
|
||||
# Settings that the LAMMPS build will import when this package is installed
|
||||
# Change all the flags and paths accordingly
|
||||
# If using PROGRESS/BML set PROGRESS to ON
|
||||
# For more information about these libraries see:
|
||||
# BML: https://github.com/qmmd/bml
|
||||
# PROGRESS: https://github.com/losalamos/qmd-progress
|
||||
# METIS: http://glaros.dtc.umn.edu/gkhome/metis/metis/download
|
||||
|
||||
latte_PATH = ${HOME}/LATTE
|
||||
progress_PATH = ${HOME}/qmd-progress
|
||||
bml_PATH = ${HOME}/bml
|
||||
metis_PATH = ${HOME}/Programs/metis-5.1.0
|
||||
|
||||
latte_SYSINC = -I${latte_PATH}/src -I${bml_PATH}/install/include -I${progress_PATH}/install/include
|
||||
latte_SYSLIB = -openmp ${latte_PATH}/src/latte_c_bind.o ${latte_PATH}/liblatte.a \
|
||||
-lifcore -lsvml -lompstub -limf -L${MKLROOT}/lib/intel64 -lmkl_lapack95_lp64 -lmkl_intel_lp64 \
|
||||
-lmkl_intel_thread -lmkl_core -lmkl_intel_thread -lpthread -openmp -O0 \
|
||||
|
||||
# Alternative linking line
|
||||
#latte_SYSLIB = -qopenmp ${latte_PATH}/src/latte_c_bind.o ${latte_PATH}/liblatte.a \
|
||||
# -L${MKLROOT}/lib/intel64 -lifcore -lsvml -lifport -mkl=parallel -lpthread -qopenmp -O0 \
|
||||
|
||||
# Uncomment the following line to use PROGRESS/BML
|
||||
#latte_SYSLIB += -L${progress_PATH}/install/lib -lprogress -L${bml_PATH}/install/lib -lbml -L${metis_PATH}/install -lmetis
|
||||
# Uncomment the following line to use PROGRESS/BML
|
||||
latte_SYSLIB += -L${progress_PATH}/install/lib -lprogress -L${bml_PATH}/install/lib -lbml -L${metis_PATH}/install -lmetis
|
||||
|
||||
|
||||
latte_SYSPATH = -L/opt/intel/composer_xe_2013_sp1.2.144/compiler/lib/intel64
|
||||
43
lib/latte/README
Normal file
43
lib/latte/README
Normal file
@ -0,0 +1,43 @@
|
||||
This directory contains build settings for the LATTE library which
|
||||
is required to use the LATTE package and its fix latte command in a
|
||||
LAMMPS input script.
|
||||
|
||||
Information about the LATTE DFTB code can be found at:
|
||||
https://github.com/losalamos/LATTE
|
||||
|
||||
The LATTE development effort is led by Marc Cawkwell and
|
||||
Anders Niklasson at Los Alamos National Laboratory.
|
||||
|
||||
To download, build, and install LATTE as a library on your system,
|
||||
follow these steps:
|
||||
|
||||
- Download or clone the LATTE source code from:
|
||||
https://github.com/losalamos/LATTE.
|
||||
|
||||
- Modify the makefile.CHOICES according to your system architecture
|
||||
and compilers.
|
||||
|
||||
- Set the MAKELIB flag to ON in makefile.CHOICES and finally, build the
|
||||
code with the make command.
|
||||
|
||||
Note that if you unpack and build LATTE in this directory and you
|
||||
download a new LAMMPS tarball, the files you have added here will be
|
||||
lost. So you likely want to build it somewhere else. The recommended
|
||||
place is the home directory.
|
||||
|
||||
To build LAMMPS with the LATTE library you should follow the following
|
||||
instructions:
|
||||
|
||||
- copy makefile.lammps.* to makefile.lammps in the /lammps/lib/latte directory.
|
||||
|
||||
- Change the path, flags and compilers on the makefile.lammps according
|
||||
to your compilers, architecture and the LATTE location.
|
||||
|
||||
- Finally, you should execute the following commands:
|
||||
$ cd lammps/src
|
||||
$ make yes-latte
|
||||
$ make g++ (or whatever target you wish)
|
||||
|
||||
Note that the Makefile.lammps file in this directory is required to
|
||||
allow the LAMMPS build to find the necessary LATTE files. You should
|
||||
not normally need to edit this file.
|
||||
67
src/LATTE/Install.sh
Normal file
67
src/LATTE/Install.sh
Normal file
@ -0,0 +1,67 @@
|
||||
# Install/unInstall package files in LAMMPS
|
||||
# mode = 0/1/2 for uninstall/install/update
|
||||
|
||||
mode=$1
|
||||
|
||||
# enforce using portable C locale
|
||||
LC_ALL=C
|
||||
export LC_ALL
|
||||
|
||||
# arg1 = file, arg2 = file it depends on
|
||||
|
||||
action () {
|
||||
if (test $mode = 0) then
|
||||
rm -f ../$1
|
||||
elif (! cmp -s $1 ../$1) then
|
||||
if (test -z "$2" || test -e ../$2) then
|
||||
cp $1 ..
|
||||
if (test $mode = 2) then
|
||||
echo " updating src/$1"
|
||||
fi
|
||||
fi
|
||||
elif (test -n "$2") then
|
||||
if (test ! -e ../$2) then
|
||||
rm -f ../$1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# all package files with no dependencies
|
||||
|
||||
for file in *.cpp *.h; do
|
||||
action $file
|
||||
done
|
||||
|
||||
# edit 2 Makefile.package files to include/exclude package info
|
||||
|
||||
if (test $1 = 1) then
|
||||
|
||||
if (test -e ../Makefile.package) then
|
||||
sed -i -e 's/[^ \t]*latte[^ \t]* //' ../Makefile.package
|
||||
sed -i -e 's|^PKG_INC =[ \t]*|&-I../../lib/latte |' ../Makefile.package
|
||||
sed -i -e 's|^PKG_PATH =[ \t]*|&-L../../lib/latte |' ../Makefile.package
|
||||
#sed -i -e 's|^PKG_LIB =[ \t]*|&-llatte |' ../Makefile.package
|
||||
sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(latte_SYSINC) |' ../Makefile.package
|
||||
sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(latte_SYSLIB) |' ../Makefile.package
|
||||
sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(latte_SYSPATH) |' ../Makefile.package
|
||||
fi
|
||||
|
||||
if (test -e ../Makefile.package.settings) then
|
||||
sed -i -e '/^include.*latte.*$/d' ../Makefile.package.settings
|
||||
# multiline form needed for BSD sed on Macs
|
||||
sed -i -e '4 i \
|
||||
include ..\/..\/lib\/latte\/Makefile.lammps
|
||||
' ../Makefile.package.settings
|
||||
fi
|
||||
|
||||
elif (test $1 = 0) then
|
||||
|
||||
if (test -e ../Makefile.package) then
|
||||
sed -i -e 's/[^ \t]*latte[^ \t]* //' ../Makefile.package
|
||||
fi
|
||||
|
||||
if (test -e ../Makefile.package.settings) then
|
||||
sed -i -e '/^include.*latte.*$/d' ../Makefile.package.settings
|
||||
fi
|
||||
|
||||
fi
|
||||
28
src/LATTE/README
Normal file
28
src/LATTE/README
Normal file
@ -0,0 +1,28 @@
|
||||
This package provides a fix latte command which is a wrapper on the
|
||||
LATTE DFTB code, so that molecular dynamics can be run with LAMMPS
|
||||
using density-functional tight-binding quantum forces calculated by
|
||||
LATTE. More information on LATTE can be found at "web site". Its
|
||||
authors are Anders Niklasson, etc at LANL.
|
||||
|
||||
Using this package requires the LATTE code to be downloaded and built
|
||||
as a library on your system. The library can be downloaded and built
|
||||
in lib/latte or elsewhere on your system, which must be done before
|
||||
building LAMMPS with this package. Details of the download, build, and
|
||||
install process for LATTE are given in the lib/latte/README file, and
|
||||
scripts are provided to help automate the process.
|
||||
|
||||
Also see the LAMMPS manual for general information on building LAMMPS
|
||||
with external libraries. The settings in the Makefile.lammps file in
|
||||
lib/latte must be correct for LAMMPS to build correctly with this
|
||||
package installed. However, the default settings should be correct in
|
||||
most cases and the Makefile.lammps file usually will not need to be
|
||||
changed.
|
||||
|
||||
Once you have successfully built LAMMPS with this package and the
|
||||
LATTE library you can test it using an input file from the examples
|
||||
dir:
|
||||
|
||||
./lmp_serial < lammps/examples/latte/in.latte
|
||||
|
||||
This pair style was written in collaboration with the LATTE
|
||||
developers.
|
||||
343
src/LATTE/fix_latte.cpp
Normal file
343
src/LATTE/fix_latte.cpp
Normal file
@ -0,0 +1,343 @@
|
||||
/* ----------------------------------------------------------------------
|
||||
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||
http://lammps.sandia.gov, Sandia National Laboratories
|
||||
Steve Plimpton, sjplimp@sandia.gov
|
||||
|
||||
Copyright (2003) Sandia Corporation. Under the terms of Contract
|
||||
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
|
||||
certain rights in this software. This software is distributed under
|
||||
the GNU General Public License.
|
||||
|
||||
See the README file in the top-level LAMMPS directory.
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
// NOTES on possible future issues:
|
||||
// LATTE compute and return 6-value virial tensor
|
||||
// can LATTE compute per-atom energy and per-atom virial
|
||||
// for minimize, what about charge DOFs
|
||||
// implement charge DOF integration
|
||||
// pass neighbor list to LATTE: half or full
|
||||
// will we ever auto-adjust the timestep in reset_dt()
|
||||
// could pass an input file to LATTE, specified in LAMMPS input script
|
||||
// what units options can LAMMPS be using
|
||||
// should LATTE take triclinic box from LAMMPS
|
||||
// does Coulomb potential = pe[i]/q[i], is it 0 when q = 0
|
||||
// how will this work for serial/parallel LAMMPS with serial/parallel LATTE
|
||||
// INPORTANT NOTE: ADD checks for metal units !!!!!!!!!!!!!
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "fix_latte.h"
|
||||
#include "atom.h"
|
||||
#include "comm.h"
|
||||
#include "update.h"
|
||||
#include "neighbor.h"
|
||||
#include "domain.h"
|
||||
#include "force.h"
|
||||
#include "neigh_request.h"
|
||||
#include "neigh_list.h"
|
||||
#include "modify.h"
|
||||
#include "compute.h"
|
||||
#include "memory.h"
|
||||
#include "error.h"
|
||||
|
||||
using namespace LAMMPS_NS;
|
||||
using namespace FixConst;
|
||||
|
||||
extern "C" {
|
||||
void latte(int *, int *, double *, int *, int *,
|
||||
double *, double *, double *, double *,
|
||||
double *, double *, double *, int*,
|
||||
double *, double *, double *, double * );
|
||||
}
|
||||
|
||||
#define INVOKED_PERATOM 8
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
FixLatte::FixLatte(LAMMPS *lmp, int narg, char **arg) :
|
||||
Fix(lmp, narg, arg)
|
||||
{
|
||||
if (narg != 4) error->all(FLERR,"Illegal fix latte command");
|
||||
|
||||
if (comm->nprocs != 1)
|
||||
error->all(FLERR,"Fix latte currently runs only in serial");
|
||||
|
||||
scalar_flag = 1;
|
||||
global_freq = 1;
|
||||
extscalar = 1;
|
||||
virial_flag = 1;
|
||||
|
||||
// store ID of compute pe/atom used to generate Coulomb potential for LATTE
|
||||
// NULL means LATTE will compute Coulombic potential
|
||||
|
||||
coulomb = 0;
|
||||
id_pe = NULL;
|
||||
|
||||
if (strcmp(arg[3],"NULL") != 0) {
|
||||
coulomb = 1;
|
||||
|
||||
int n = strlen(arg[3]) + 1;
|
||||
id_pe = new char[n];
|
||||
strcpy(id_pe,arg[3]);
|
||||
|
||||
int ipe = modify->find_compute(id_pe);
|
||||
if (ipe < 0) error->all(FLERR,"Could not find fix latte compute ID");
|
||||
if (modify->compute[ipe]->peatomflag == 0)
|
||||
error->all(FLERR,"Fix latte compute ID does not compute pe/atom");
|
||||
}
|
||||
|
||||
// initializations
|
||||
|
||||
nmax = 0;
|
||||
qpotential = NULL;
|
||||
flatte = NULL;
|
||||
|
||||
latte_energy = 0.0;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
FixLatte::~FixLatte()
|
||||
{
|
||||
delete [] id_pe;
|
||||
memory->destroy(qpotential);
|
||||
memory->destroy(flatte);
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
int FixLatte::setmask()
|
||||
{
|
||||
int mask = 0;
|
||||
//mask |= INITIAL_INTEGRATE;
|
||||
//mask |= FINAL_INTEGRATE;
|
||||
mask |= PRE_REVERSE;
|
||||
mask |= POST_FORCE;
|
||||
mask |= MIN_POST_FORCE;
|
||||
mask |= THERMO_ENERGY;
|
||||
return mask;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
void FixLatte::init()
|
||||
{
|
||||
// error checks
|
||||
|
||||
if (domain->dimension == 2)
|
||||
error->all(FLERR,"Fix latte requires 3d problem");
|
||||
|
||||
if (coulomb) {
|
||||
if (atom->q_flag == 0 || force->pair == NULL || force->kspace == NULL)
|
||||
error->all(FLERR,"Fix latte cannot compute Coulombic potential");
|
||||
|
||||
int ipe = modify->find_compute(id_pe);
|
||||
if (ipe < 0) error->all(FLERR,"Could not find fix latte compute ID");
|
||||
c_pe = modify->compute[ipe];
|
||||
}
|
||||
|
||||
// must be fully periodic or fully non-periodic
|
||||
|
||||
if (domain->nonperiodic == 0) pbcflag = 1;
|
||||
else if (!domain->xperiodic && !domain->yperiodic && !domain->zperiodic)
|
||||
pbcflag = 0;
|
||||
else error->all(FLERR,"Fix latte requires 3d simulation");
|
||||
|
||||
// create qpotential & flatte if needed
|
||||
// for now, assume nlocal will never change
|
||||
|
||||
if (coulomb && qpotential == NULL) {
|
||||
memory->create(qpotential,atom->nlocal,"latte:qpotential");
|
||||
memory->create(flatte,atom->nlocal,3,"latte:flatte");
|
||||
}
|
||||
|
||||
/*
|
||||
// warn if any integrate fix comes after this one
|
||||
// is it actually necessary for q(n) update to come after x,v update ??
|
||||
|
||||
int after = 0;
|
||||
int flag = 0;
|
||||
for (int i = 0; i < modify->nfix; i++) {
|
||||
if (strcmp(id,modify->fix[i]->id) == 0) after = 1;
|
||||
else if ((modify->fmask[i] & INITIAL_INTEGRATE) && after) flag = 1;
|
||||
}
|
||||
if (flag && comm->me == 0)
|
||||
error->warning(FLERR,"Fix latte should come after all other "
|
||||
"integration fixes");
|
||||
*/
|
||||
|
||||
/*
|
||||
// need a full neighbor list
|
||||
// could we use a half list?
|
||||
// perpetual list, built whenever re-neighboring occurs
|
||||
|
||||
int irequest = neighbor->request(this,instance_me);
|
||||
neighbor->requests[irequest]->pair = 0;
|
||||
neighbor->requests[irequest]->fix = 1;
|
||||
neighbor->requests[irequest]->half = 0;
|
||||
neighbor->requests[irequest]->full = 1;
|
||||
*/
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
void FixLatte::init_list(int id, NeighList *ptr)
|
||||
{
|
||||
// list = ptr;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
void FixLatte::setup(int vflag)
|
||||
{
|
||||
post_force(vflag);
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
void FixLatte::min_setup(int vflag)
|
||||
{
|
||||
post_force(vflag);
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
integrate electronic degrees of freedom
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
void FixLatte::initial_integrate(int vflag) {}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
store eflag, so can use it in post_force to tally per-atom energies
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
void FixLatte::pre_reverse(int eflag, int vflag)
|
||||
{
|
||||
eflag_caller = eflag;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
void FixLatte::post_force(int vflag)
|
||||
{
|
||||
int eflag = eflag_caller;
|
||||
if (eflag || vflag) ev_setup(eflag,vflag);
|
||||
// else evflag = 0;
|
||||
else evflag = eflag_global = vflag_global = eflag_atom = vflag_atom = 0;
|
||||
|
||||
// compute Coulombic potential = pe[i]/q[i]
|
||||
// invoke compute pe/atom
|
||||
// wrap with clear/add and trigger pe/atom calculation every step
|
||||
|
||||
if (coulomb) {
|
||||
modify->clearstep_compute();
|
||||
|
||||
if (!(c_pe->invoked_flag & INVOKED_PERATOM)) {
|
||||
c_pe->compute_peratom();
|
||||
c_pe->invoked_flag |= INVOKED_PERATOM;
|
||||
}
|
||||
|
||||
modify->addstep_compute(update->ntimestep+1);
|
||||
|
||||
double *pe = c_pe->vector_atom;
|
||||
double *q = atom->q;
|
||||
int nlocal = atom->nlocal;
|
||||
|
||||
for (int i = 0; i < nlocal; i++)
|
||||
if (q[i]) qpotential[i] = pe[i]/q[i];
|
||||
else qpotential[i] = 0.0;
|
||||
}
|
||||
|
||||
// hardwire these unsupported flags for now
|
||||
|
||||
int coulombflag = 0;
|
||||
// pe_peratom = 0;
|
||||
// virial_global = 1; // set via vflag_global at some point
|
||||
// virial_peratom = 0;
|
||||
neighflag = 0;
|
||||
|
||||
// set flags used by LATTE
|
||||
|
||||
int flags[6];
|
||||
|
||||
flags[0] = pbcflag; // 1 for fully periodic, 0 for fully non-periodic
|
||||
flags[1] = coulombflag; // 1 for LAMMPS computes Coulombics, 0 for LATTE
|
||||
flags[2] = eflag_atom; // 1 to return per-atom energies, 0 for no
|
||||
flags[3] = vflag_global; // 1 to return global virial 0 for no
|
||||
flags[4] = vflag_atom; // 1 to return per-atom virial, 0 for no
|
||||
flags[5] = neighflag; // 1 to pass neighbor list to LATTE, 0 for no
|
||||
|
||||
// setup LATTE arguments
|
||||
|
||||
int natoms = atom->nlocal;
|
||||
double *coords = &atom->x[0][0];
|
||||
int *type = atom->type;
|
||||
int ntypes = atom->ntypes;
|
||||
double *mass = &atom->mass[1];
|
||||
double *boxlo = domain->boxlo;
|
||||
double *boxhi = domain->boxhi;
|
||||
|
||||
double *forces;
|
||||
if (coulomb) forces = &flatte[0][0];
|
||||
else forces = &atom->f[0][0];
|
||||
|
||||
int maxiter = -1;
|
||||
|
||||
latte(flags,&natoms,coords,type,&ntypes,mass,boxlo,boxhi,&domain->xy,
|
||||
&domain->xz,&domain->yz,
|
||||
forces,&maxiter,&latte_energy,&atom->v[0][0],&update->dt,virial);
|
||||
|
||||
// sum LATTE forces to LAMMPS (Coulombic) forces
|
||||
|
||||
if (coulomb) {
|
||||
double **f = atom->f;
|
||||
int nlocal = atom->nlocal;
|
||||
for (int i = 0; i < nlocal; i++) {
|
||||
f[i][0] += flatte[i][0];
|
||||
f[i][1] += flatte[i][1];
|
||||
f[i][2] += flatte[i][2];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
void FixLatte::min_post_force(int vflag)
|
||||
{
|
||||
post_force(vflag);
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
integrate electronic degrees of freedom
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
void FixLatte::final_integrate() {}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
void FixLatte::reset_dt()
|
||||
{
|
||||
//dtv = update->dt;
|
||||
//dtf = 0.5 * update->dt * force->ftm2v;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
DFTB energy from LATTE
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
double FixLatte::compute_scalar()
|
||||
{
|
||||
return latte_energy;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
memory usage of local arrays
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
double FixLatte::memory_usage()
|
||||
{
|
||||
double bytes = 0.0;
|
||||
if (coulomb) bytes += nmax * sizeof(double);
|
||||
if (coulomb) bytes += nmax*3 * sizeof(double);
|
||||
return bytes;
|
||||
}
|
||||
72
src/LATTE/fix_latte.h
Normal file
72
src/LATTE/fix_latte.h
Normal file
@ -0,0 +1,72 @@
|
||||
/* -*- c++ -*- ----------------------------------------------------------
|
||||
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||
http://lammps.sandia.gov, Sandia National Laboratories
|
||||
Steve Plimpton, sjplimp@sandia.gov
|
||||
|
||||
Copyright (2003) Sandia Corporation. Under the terms of Contract
|
||||
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
|
||||
certain rights in this software. This software is distributed under
|
||||
the GNU General Public License.
|
||||
|
||||
See the README file in the top-level LAMMPS directory.
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
#ifdef FIX_CLASS
|
||||
|
||||
FixStyle(latte,FixLatte)
|
||||
|
||||
#else
|
||||
|
||||
#ifndef LMP_FIX_LATTE_H
|
||||
#define LMP_FIX_LATTE_H
|
||||
|
||||
#include "fix.h"
|
||||
|
||||
namespace LAMMPS_NS {
|
||||
|
||||
class FixLatte : public Fix {
|
||||
public:
|
||||
FixLatte(class LAMMPS *, int, char **);
|
||||
virtual ~FixLatte();
|
||||
int setmask();
|
||||
void init();
|
||||
void init_list(int, class NeighList *);
|
||||
void setup(int);
|
||||
void min_setup(int);
|
||||
void initial_integrate(int);
|
||||
void pre_reverse(int, int);
|
||||
void post_force(int);
|
||||
void min_post_force(int);
|
||||
void final_integrate();
|
||||
void reset_dt();
|
||||
double compute_scalar();
|
||||
double memory_usage();
|
||||
|
||||
protected:
|
||||
char *id_pe;
|
||||
int coulomb,pbcflag,pe_peratom,virial_global,virial_peratom,neighflag;
|
||||
int eflag_caller;
|
||||
|
||||
int nmax;
|
||||
double *qpotential;
|
||||
double **flatte;
|
||||
double latte_energy;
|
||||
|
||||
class NeighList *list;
|
||||
class Compute *c_pe;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* ERROR/WARNING messages:
|
||||
|
||||
E: Illegal ... command
|
||||
|
||||
Self-explanatory. Check the input script syntax and compare to the
|
||||
documentation for the command. You can use -echo screen as a
|
||||
command-line option when running LAMMPS to see the offending line.
|
||||
|
||||
*/
|
||||
@ -53,8 +53,8 @@ endif
|
||||
# PACKEXT = subset that require an external (downloaded) library
|
||||
|
||||
PACKAGE = asphere body class2 colloid compress coreshell dipole gpu \
|
||||
granular kim kokkos kspace manybody mc meam misc molecule \
|
||||
mpiio mscg opt peri poems \
|
||||
granular kim kokkos kspace latte manybody mc meam misc \
|
||||
molecule mpiio mscg opt peri poems \
|
||||
python qeq reax replica rigid shock snap srd voronoi
|
||||
|
||||
PACKUSER = user-atc user-awpmd user-cgdna user-cgsdk user-colvars \
|
||||
@ -64,7 +64,7 @@ PACKUSER = user-atc user-awpmd user-cgdna user-cgsdk user-colvars \
|
||||
user-quip user-reaxc user-smd user-smtbq user-sph user-tally \
|
||||
user-vtk
|
||||
|
||||
PACKLIB = compress gpu kim kokkos meam mpiio mscg poems \
|
||||
PACKLIB = compress gpu kim kokkos latte meam mpiio mscg poems \
|
||||
python reax voronoi \
|
||||
user-atc user-awpmd user-colvars user-h5md user-lb user-molfile \
|
||||
user-netcdf user-qmmm user-quip user-smd user-vtk
|
||||
|
||||
Reference in New Issue
Block a user