add NWChem wrapper to client/server mode for AIMD

This commit is contained in:
Steve Plimpton
2019-09-27 15:28:48 -06:00
parent aa2b885783
commit 214850088b
27 changed files with 7779 additions and 18 deletions

View File

@ -72,6 +72,7 @@ client or server code:
examples/message examples/message
examples/COUPLE/README examples/COUPLE/README
examples/COUPLE/lammps_mc examples/COUPLE/lammps_mc
examples/COUPLE/lammps_nwchem
examples/COUPLE/lammps_vasp :ul examples/COUPLE/lammps_vasp :ul
The examples/message dir couples a client instance of LAMMPS to a The examples/message dir couples a client instance of LAMMPS to a
@ -80,6 +81,10 @@ server instance of LAMMPS.
The lammps_mc dir shows how to couple LAMMPS as a server to a simple The lammps_mc dir shows how to couple LAMMPS as a server to a simple
Monte Carlo client code as the driver. Monte Carlo client code as the driver.
The lammps_nwchem dir shows how to couple LAMMPS as a client code
running MD timestepping to NWChem acting as a server providing quantum
DFT forces, through a Python wrapper script on NWChem.
The lammps_vasp dir shows how to couple LAMMPS as a client code The lammps_vasp dir shows how to couple LAMMPS as a client code
running MD timestepping to VASP acting as a server providing quantum running MD timestepping to VASP acting as a server providing quantum
DFT forces, through a Python wrapper script on VASP. DFT forces, through a Python wrapper script on VASP.

View File

@ -64,8 +64,9 @@ in this pseudo code is a pointer to an instance of the CSlib.
See the src/MESSAGE/server_md.cpp and src/MESSAGE/fix_client_md.cpp See the src/MESSAGE/server_md.cpp and src/MESSAGE/fix_client_md.cpp
files for details on how LAMMPS uses these messages. See the files for details on how LAMMPS uses these messages. See the
examples/COUPLE/lammps_vasp/vasp_wrapper.py file for an example of how examples/COUPLE/lammps_vasp/vasp_wrap.py or
a quantum code (VASP) can use these messages. examples/COUPLE/lammps_nwchem/nwchem_wrap.py files for examples of how
a quantum code (VASP or NWChem) can use these messages.
The following pseudo-code uses these values, defined as enums. The following pseudo-code uses these values, defined as enums.

View File

@ -6,23 +6,16 @@ codes or calling LAMMPS as a library. The examples are provided for
demonstration purposes. The physics they calculate is too simple to demonstration purposes. The physics they calculate is too simple to
model a realistic problem. model a realistic problem.
In many of the examples included here, LAMMPS must first be built as a
library.
See these sections of the LAMMPS manaul for details: See these sections of the LAMMPS manaul for details:
2.5 Building LAMMPS as a library (doc/Section_start.html#start_5) Build LAMMPS as a library (doc/Build_basics.html)
6.10 Coupling LAMMPS to other codes (doc/Section_howto.html#howto_10) Link LAMMPS as a library to another code (doc/Build_link.html)
6.29 Using LAMMPS in client/server mode (doc/Section_howto.html#howto_29) Coupling LAMMPS to other codes (doc/Howto_couple.html)
Using LAMMPS in client/server mode (doc/Howto_client_server.html)
In all of the examples included here, LAMMPS must first be built as a Library interface to LAMMPS (doc/Howto_library.html)
library. Basically, in the src dir you type one of
make mode=lib machine
make mode=shlib machine
to create the static library liblammps_machine.a or the shared library
liblammps_machine.so for your code to link against. A soft link
(liblammps.a or liblammps.so) is also created that points to the most
recently built static or shared library. Your code build can simply
use the soft link if you prefer.
The library interface to LAMMPS is in src/library.cpp. Routines can The library interface to LAMMPS is in src/library.cpp. Routines can
be easily added to this file so an external program can perform the be easily added to this file so an external program can perform the
@ -36,10 +29,12 @@ simple simple example of driver code calling LAMMPS as a lib
multiple example of driver code calling multiple instances of LAMMPS multiple example of driver code calling multiple instances of LAMMPS
lammps_mc client/server coupling of Monte Carlo client lammps_mc client/server coupling of Monte Carlo client
with LAMMPS server for energy evaluation with LAMMPS server for energy evaluation
lammps_nwchem client/server coupling of LAMMPS client with
NWChem quantum DFT as server for quantum forces
lammps_quest MD with quantum forces, coupling to Quest DFT code lammps_quest MD with quantum forces, coupling to Quest DFT code
lammps_spparks grain-growth Monte Carlo with strain via MD, lammps_spparks grain-growth Monte Carlo with strain via MD,
coupling to SPPARKS kinetic MC code coupling to SPPARKS kinetic MC code
lammps_vasp client/server coupling of LAMMPS client with lammps_vasp client/server coupling of LAMMPS client with
VASP quantum DFT as server for quantum forces VASP quantum DFT as server for quantum forces
library collection of useful inter-code communication routines library collection of useful inter-code communication routines
fortran a simple wrapper on the LAMMPS library API that fortran a simple wrapper on the LAMMPS library API that

View File

@ -0,0 +1,197 @@
Sample LAMMPS MD wrapper on NWChem via client/server coupling
See the MESSAGE package (doc/Section_messages.html#MESSAGE) and
Section_howto.html#howto10 for more details on how client/server
coupling works in LAMMPS.
In this dir, the nwchem_wrap.py is a wrapper on the NWChem electronic
structure code so it can work as a "server" code which LAMMPS drives
as a "client" code to perform ab initio MD. LAMMPS performs the MD
timestepping, sends NWChem a current set of coordinates each timestep,
NWChem computes forces and energy (and virial) and returns that info
to LAMMPS.
Messages are exchanged between NWChem and LAMMPS via a client/server
library (CSlib), which is included in the LAMMPS distribution in
lib/message. As explained below you can choose to exchange data
between the two programs either via files or sockets (ZMQ). If the
nwchem_wrap.py program became parallel, or the CSlib library calls were
integrated into NWChem directly, then data could also be exchanged via
MPI.
There are 2 examples provided in the planeware and ao_basis
sub-directories. See details below.
----------------
Build LAMMPS with its MESSAGE package installed:
See the Build extras doc page and its MESSAGE package
section for details.
CMake:
-D PKG_MESSAGE=yes # include the MESSAGE package
-D MESSAGE_ZMQ=value # build with ZeroMQ support, value = no (default) or yes
Traditional make:
cd lammps/lib/message
python Install.py -m -z # build CSlib with MPI and ZMQ support
cd lammps/src
make yes-message
make mpi
You can leave off the -z if you do not have ZMQ on your system.
----------------
Build the CSlib in a form usable by the nwchem_wrapper.py script:
% cd lammps/lib/message/cslib/src
% make shlib # build serial and parallel shared lib with ZMQ support
% make shlib zmq=no # build serial and parallel shared lib w/out ZMQ support
This will make a shared library versions of the CSlib, which Python
requires. Python must be able to find both the cslib.py script and
the libcsnompi.so library in your lammps/lib/message/cslib/src
directory. If it is not able to do this, you will get an error when
you run nwchem_wrapper.py.
You can do this by augmenting two environment variables, either from
the command line, or in your shell start-up script. Here is the
sample syntax for the csh or tcsh shells:
setenv PYTHONPATH ${PYTHONPATH}:/home/sjplimp/lammps/lib/message/cslib/src
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/home/sjplimp/lammps/lib/message/cslib/src
----------------
Prepare to use NWChem and the nwchem_wrap.py script
You can run the nwchem_wrap.py script as-is to test that the coupling
between it and LAMMPS is functional. This will use the included
nwchem_lammps.out files output by a previous NWChem run.
But note that the as-is version of nwchem_wrap.py will not attempt to
run NWChem.
To do this, you must edit the 1st nwchemcmd line at the top of
nwchem_wrapper.py to be the launch command needed to run NWChem on
your system. It can be a command to run NWChem in serial or in
parallel, e.g. an mpirun command. Then comment out the 2nd nwchemcmd
line immediately following it.
Ensure you have the necessary NWChem input file in this directory,
suitable for the NWChem calculation you want to perform.
Example input files are provided for both atom-centered AO basis sets
and plane-wave basis sets. Note that the NWChem template file should
be matched to the LAMMPS input script (# of atoms and atom types, box
size, etc).
Once you run NWChem yourself, the nwchem_lammps.out file will be
overwritten.
The syntax of the wrapper is:
nwchem_wrap.py file/zmq ao/pw input_template
* file/zmg = messaging mode, must match LAMMPS messaging mode
* ao/pw = basis set mode, selects between atom-centered and plane-wave
the input_template file must correspond to the appropriate basis set mode:
the "ao" mode supports the scf and dft modules in NWChem,
the "pw" mode supports the nwpw module.
* input_template = NWChem input file used as template, must include a
"geometry" block with the atoms in the simulation, dummy
xyz coordinates should be included (but are not used).
Atom ordering must match LAMMPS input.
During a simulation, the molecular orbitals from the previous timestep
will be used as the initial guess for the next NWChem calculation. If
a file named "nwchem_lammps.movecs" is in the directory the wrapper is
called from, these orbitals will be used as the initial guess orbitals
in the first step of the simulation.
----------------
Example directories
(1) planewave
Demonstrates coupling of the nwpw module in NWChem with LAMMPS. Only fully
periodic boundary conditions and orthogonal simulation boxes are currently
supported by the wrapper. The included files provide an example run using a
2 atom unit cell of tungsten.
Files:
* data.W LAMMPS input with geometry information
* in.client.W LAMMPS simulation input
* log.client.output LAMMPS simulation output
* w.nw NWChem template input file
* nwchem_lammps.out NWChem output
(2) ao_basis
Demonstrates coupling of the scf (or dft) modules in NWChem with
LAMMPS. Only fully aperiodic boundary conditions are currently
supported by the wrapper. The included files provide an example run
using a single water molecule.
Files:
* data.h2o LAMMPS input with geometry information
* in.client.h2o LAMMPS simulation input
* log.client.output LAMMPS simulation output
* h2o.nw NWChem template input file
* nwchem_lammps.out NWChem output
As noted above, you can run the nwchem_wrap.py script as-is to test that
the coupling between it and LAMMPS is functional. This will use the included
nwchem_lammps.out files.
----------------
To run in client/server mode:
NOTE: The nwchem_wrap.py script must be run with Python version 2, not
3. This is because it used the CSlib python wrapper, which only
supports version 2. We plan to upgrade CSlib to support Python 3.
Both the client (LAMMPS) and server (nwchem_wrap.py) must use the same
messaging mode, namely file or zmq. This is an argument to the
nwchem_wrap.py code; it can be selected by setting the "mode" variable
when you run LAMMPS. The default mode = file.
Here we assume LAMMPS was built to run in parallel, and the MESSAGE
package was installed with socket (ZMQ) support. This means either of
the messaging modes can be used and LAMMPS can be run in serial or
parallel. The nwchem_wrap.py code is always run in serial, but it
launches NWChem from Python via an mpirun command which can run NWChem
itself in parallel.
When you run, the server should print out thermodynamic info every
timestep which corresponds to the forces and virial computed by NWChem.
NWChem will also generate output files each timestep. Output files from
previous timesteps are archived in a "nwchem_logs" directory.
The examples below are commands you should use in two different
terminal windows. The order of the two commands (client or server
launch) does not matter. You can run them both in the same window if
you append a "&" character to the first one to run it in the
background.
--------------
File mode of messaging:
% mpirun -np 1 lmp_mpi -v mode file < in.client.W
% python nwchem_wrap.py file pw w.nw
% mpirun -np 2 lmp_mpi -v mode file < in.client.h2o
% python nwchem_wrap.py file ao h2o_dft.nw
ZMQ mode of messaging:
% mpirun -np 1 lmp_mpi -v mode zmq < in.client.W
% python nwchem_wrap.py zmq pw w.nw
% mpirun -np 2 lmp_mpi -v mode zmq < in.client.h2o
% python nwchem_wrap.py zmq ao h2o_dft.nw

View File

@ -0,0 +1,20 @@
LAMMPS H2O data file
3 atoms
2 atom types
-10.0 10.0 xlo xhi
-10.0 10.0 ylo yhi
-10.0 10.0 zlo zhi
Masses
1 15.994915008544922
2 1.0078250169754028
Atoms
1 1 0.0 0.0 0.0
2 2 0.0 0.756723 -0.585799
3 2 0.0 -0.756723 -0.585799

View File

@ -0,0 +1,25 @@
echo
memory global 40 mb stack 23 mb heap 5 mb
geometry units angstrom noautosym
O 0.0 0.0 0.0
H 1.0 0.5 0.0
H -1.0 0.5 0.0
end
basis
O library 6-31g*
H library 6-31g*
end
scf
maxiter 100
end
#dft
# xc b3lyp
#end
task scf gradient
#task dft gradient

View File

@ -0,0 +1,33 @@
# H2O with NWChem
variable mode index file
if "${mode} == file" then &
"message client md file tmp.couple" &
elif "${mode} == zmq" &
"message client md zmq localhost:5555" &
variable x index 1
variable y index 1
variable z index 1
units metal
atom_style atomic
atom_modify sort 0 0.0 map yes
boundary m m m
read_data data.h2o
replicate $x $y $z
velocity all create 300.0 87287 loop geom
neighbor 0.3 bin
neigh_modify delay 0 every 10 check no
fix 1 all nve
fix 2 all client/md
fix_modify 2 energy yes
thermo 1
run 3

View File

@ -0,0 +1,77 @@
LAMMPS (18 Sep 2018)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87)
using 1 OpenMP thread(s) per MPI task
# H2O with NWChem
variable mode index file
if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555"
message client md zmq localhost:5555
variable x index 1
variable y index 1
variable z index 1
units metal
atom_style atomic
atom_modify sort 0 0.0 map yes
boundary m m m
read_data data.h2o
orthogonal box = (-10 -10 -10) to (10 10 10)
1 by 1 by 1 MPI processor grid
reading atoms ...
3 atoms
replicate $x $y $z
replicate 1 $y $z
replicate 1 1 $z
replicate 1 1 1
orthogonal box = (-10 -10 -10) to (10 10 10)
1 by 1 by 1 MPI processor grid
3 atoms
Time spent = 5.8016e-05 secs
velocity all create 300.0 87287 loop geom
neighbor 0.3 bin
neigh_modify delay 0 every 10 check no
fix 1 all nve
fix 2 all client/md
fix_modify 2 energy yes
thermo 1
run 3
Per MPI rank memory allocation (min/avg/max) = 0.02705 | 0.02705 | 0.02705 Mbytes
Step Temp E_pair E_mol TotEng Press Volume
0 300 0 0 -2068.2746 10.354878 8000
1 368.98118 0 0 -2068.2567 12.735851 8000
2 459.96278 0 0 -2068.2332 15.876195 8000
3 572.94479 0 0 -2068.204 19.775912 8000
Loop time of 0.0174769 on 1 procs for 3 steps with 3 atoms
Performance: 14.831 ns/day, 1.618 hours/ns, 171.655 timesteps/s
8.4% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 2.555e-06 | 2.555e-06 | 2.555e-06 | 0.0 | 0.01
Output | 8.4169e-05 | 8.4169e-05 | 8.4169e-05 | 0.0 | 0.48
Modify | 0.017383 | 0.017383 | 0.017383 | 0.0 | 99.46
Other | | 7.694e-06 | | | 0.04
Nlocal: 3 ave 3 max 3 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0
Neighbor list builds = 0
Dangerous builds not checked
Total wall time: 0:00:01

View File

@ -0,0 +1,622 @@
argument 1 = nwchem_lammps.nw
============================== echo of input deck ==============================
echo
memory global 40 mb stack 23 mb heap 5 mb
geometry units angstrom noautosym
O 0 0 0
H 0 0.756723 -0.585799
H 0 -0.756723 -0.585799
end
scf
vectors input nwchem_lammps.movecs
end
dft
vectors input nwchem_lammps.movecs
end
basis
O library 6-31g*
H library 6-31g*
end
scf
maxiter 100
end
task scf gradient
================================================================================
Northwest Computational Chemistry Package (NWChem) 6.8
------------------------------------------------------
Environmental Molecular Sciences Laboratory
Pacific Northwest National Laboratory
Richland, WA 99352
Copyright (c) 1994-2017
Pacific Northwest National Laboratory
Battelle Memorial Institute
NWChem is an open-source computational chemistry package
distributed under the terms of the
Educational Community License (ECL) 2.0
A copy of the license is included with this distribution
in the LICENSE.TXT file
ACKNOWLEDGMENT
--------------
This software and its documentation were developed at the
EMSL at Pacific Northwest National Laboratory, a multiprogram
national laboratory, operated for the U.S. Department of Energy
by Battelle under Contract Number DE-AC05-76RL01830. Support
for this work was provided by the Department of Energy Office
of Biological and Environmental Research, Office of Basic
Energy Sciences, and the Office of Advanced Scientific Computing.
Job information
---------------
hostname = mcq
program = /usr/bin/nwchem
date = Mon Sep 23 16:28:27 2019
compiled = Wed_Aug_15_19:14:19_2018
source = /home/edo/debichem-team/nwchem/nwchem-6.8.1
nwchem branch = 6.8.1
nwchem revision = v6.8-133-ge032219
ga revision = 5.6.5
use scalapack = T
input = nwchem_lammps.nw
prefix = nwchem_lammps.
data base = ./nwchem_lammps.db
status = restart
nproc = 1
time left = -1s
Memory information
------------------
heap = 655358 doubles = 5.0 Mbytes
stack = 3014651 doubles = 23.0 Mbytes
global = 5242880 doubles = 40.0 Mbytes (distinct from heap & stack)
total = 8912889 doubles = 68.0 Mbytes
verify = yes
hardfail = no
Directory information
---------------------
0 permanent = .
0 scratch = .
Previous task information
-------------------------
Theory = scf
Operation = gradient
Status = ok
Qmmm = F
Ignore = F
Geometries in the database
--------------------------
Name Natoms Last Modified
-------------------------------- ------ ------------------------
1 geometry 3 Mon Sep 23 16:26:29 2019
The geometry named "geometry" is the default for restart
Basis sets in the database
--------------------------
Name Natoms Last Modified
-------------------------------- ------ ------------------------
1 ao basis 2 Mon Sep 23 16:26:29 2019
The basis set named "ao basis" is the default AO basis for restart
NWChem Input Module
-------------------
Scaling coordinates for geometry "geometry" by 1.889725989
(inverse scale = 0.529177249)
------
auto-z
------
Geometry "geometry" -> ""
-------------------------
Output coordinates in angstroms (scale by 1.889725989 to convert to a.u.)
No. Tag Charge X Y Z
---- ---------------- ---------- -------------- -------------- --------------
1 O 8.0000 0.00000000 0.00000000 0.11715980
2 H 1.0000 0.00000000 0.75672300 -0.46863920
3 H 1.0000 0.00000000 -0.75672300 -0.46863920
Atomic Mass
-----------
O 15.994910
H 1.007825
Effective nuclear repulsion energy (a.u.) 9.1972032776
Nuclear Dipole moment (a.u.)
----------------------------
X Y Z
---------------- ---------------- ----------------
0.0000000000 0.0000000000 0.0000000000
Z-matrix (autoz)
--------
Units are Angstrom for bonds and degrees for angles
Type Name I J K L M Value
----------- -------- ----- ----- ----- ----- ----- ----------
1 Stretch 1 2 0.95697
2 Stretch 1 3 0.95697
3 Bend 2 1 3 104.51122
XYZ format geometry
-------------------
3
geometry
O 0.00000000 0.00000000 0.11715980
H 0.00000000 0.75672300 -0.46863920
H 0.00000000 -0.75672300 -0.46863920
==============================================================================
internuclear distances
------------------------------------------------------------------------------
center one | center two | atomic units | angstroms
------------------------------------------------------------------------------
2 H | 1 O | 1.80841 | 0.95697
3 H | 1 O | 1.80841 | 0.95697
------------------------------------------------------------------------------
number of included internuclear distances: 2
==============================================================================
==============================================================================
internuclear angles
------------------------------------------------------------------------------
center 1 | center 2 | center 3 | degrees
------------------------------------------------------------------------------
2 H | 1 O | 3 H | 104.51
------------------------------------------------------------------------------
number of included internuclear angles: 1
==============================================================================
Basis "ao basis" -> "" (cartesian)
-----
O (Oxygen)
----------
Exponent Coefficients
-------------- ---------------------------------------------------------
1 S 5.48467170E+03 0.001831
1 S 8.25234950E+02 0.013950
1 S 1.88046960E+02 0.068445
1 S 5.29645000E+01 0.232714
1 S 1.68975700E+01 0.470193
1 S 5.79963530E+00 0.358521
2 S 1.55396160E+01 -0.110778
2 S 3.59993360E+00 -0.148026
2 S 1.01376180E+00 1.130767
3 P 1.55396160E+01 0.070874
3 P 3.59993360E+00 0.339753
3 P 1.01376180E+00 0.727159
4 S 2.70005800E-01 1.000000
5 P 2.70005800E-01 1.000000
6 D 8.00000000E-01 1.000000
H (Hydrogen)
------------
Exponent Coefficients
-------------- ---------------------------------------------------------
1 S 1.87311370E+01 0.033495
1 S 2.82539370E+00 0.234727
1 S 6.40121700E-01 0.813757
2 S 1.61277800E-01 1.000000
Summary of "ao basis" -> "" (cartesian)
------------------------------------------------------------------------------
Tag Description Shells Functions and Types
---------------- ------------------------------ ------ ---------------------
O 6-31g* 6 15 3s2p1d
H 6-31g* 2 2 2s
NWChem SCF Module
-----------------
ao basis = "ao basis"
functions = 19
atoms = 3
closed shells = 5
open shells = 0
charge = 0.00
wavefunction = RHF
input vectors = ./nwchem_lammps.movecs
output vectors = ./nwchem_lammps.movecs
use symmetry = F
symmetry adapt = F
Summary of "ao basis" -> "ao basis" (cartesian)
------------------------------------------------------------------------------
Tag Description Shells Functions and Types
---------------- ------------------------------ ------ ---------------------
O 6-31g* 6 15 3s2p1d
H 6-31g* 2 2 2s
Forming initial guess at 0.0s
Loading old vectors from job with title :
Starting SCF solution at 0.0s
----------------------------------------------
Quadratically convergent ROHF
Convergence threshold : 1.000E-04
Maximum no. of iterations : 100
Final Fock-matrix accuracy: 1.000E-07
----------------------------------------------
#quartets = 1.540D+03 #integrals = 8.874D+03 #direct = 0.0% #cached =100.0%
Integral file = ./nwchem_lammps.aoints.0
Record size in doubles = 65536 No. of integs per rec = 43688
Max. records in memory = 2 Max. records in file = 326674
No. of bits per label = 8 No. of bits per value = 64
iter energy gnorm gmax time
----- ------------------- --------- --------- --------
1 -75.9732571733 7.14D-01 3.37D-01 0.3
2 -76.0055117003 3.10D-01 1.79D-01 0.3
3 -76.0098071888 1.15D-01 5.21D-02 0.3
4 -76.0105377099 2.55D-03 9.57D-04 0.3
5 -76.0105386346 9.48D-06 3.52D-06 0.3
Final RHF results
------------------
Total SCF energy = -76.010538634624
One-electron energy = -123.058850386783
Two-electron energy = 37.851108474513
Nuclear repulsion energy = 9.197203277646
Time for solution = 0.1s
Final eigenvalues
-----------------
1
1 -20.5603
2 -1.3419
3 -0.7071
4 -0.5711
5 -0.4979
6 0.2108
7 0.3042
8 1.0227
9 1.1318
10 1.1678
11 1.1719
12 1.3809
13 1.4341
14 2.0201
15 2.0337
ROHF Final Molecular Orbital Analysis
-------------------------------------
Vector 2 Occ=2.000000D+00 E=-1.341930D+00
MO Center= -7.7D-08, 1.6D-07, -5.6D-02, r^2= 5.0D-01
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
2 0.475861 1 O s 6 0.439201 1 O s
1 -0.209676 1 O s
Vector 3 Occ=2.000000D+00 E=-7.070591D-01
MO Center= 5.8D-08, -1.2D-07, -1.0D-01, r^2= 7.7D-01
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
4 0.507651 1 O py 8 0.306488 1 O py
16 0.230979 2 H s 18 -0.230979 3 H s
Vector 4 Occ=2.000000D+00 E=-5.710712D-01
MO Center= 6.9D-07, -2.0D-07, 1.7D-01, r^2= 6.9D-01
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
5 0.555446 1 O pz 9 0.403175 1 O pz
6 0.325535 1 O s 2 0.164591 1 O s
Vector 5 Occ=2.000000D+00 E=-4.979251D-01
MO Center= -9.5D-08, -7.1D-08, 9.7D-02, r^2= 6.0D-01
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
3 0.639615 1 O px 7 0.511470 1 O px
Vector 6 Occ=0.000000D+00 E= 2.108019D-01
MO Center= -5.7D-07, 1.0D-06, -6.5D-01, r^2= 2.6D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
6 1.415545 1 O s 17 -1.041449 2 H s
19 -1.041447 3 H s 9 -0.508218 1 O pz
5 -0.217054 1 O pz
Vector 7 Occ=0.000000D+00 E= 3.042327D-01
MO Center= -1.9D-09, -9.8D-07, -6.2D-01, r^2= 2.7D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
17 1.395012 2 H s 19 -1.395014 3 H s
8 -0.833805 1 O py 4 -0.329272 1 O py
Vector 8 Occ=0.000000D+00 E= 1.022735D+00
MO Center= -1.1D-10, 6.2D-07, -4.7D-02, r^2= 1.4D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
16 0.838912 2 H s 18 -0.838911 3 H s
8 -0.662620 1 O py 17 -0.459236 2 H s
19 0.459235 3 H s 14 -0.343167 1 O dyz
Vector 9 Occ=0.000000D+00 E= 1.131842D+00
MO Center= 2.2D-07, 3.1D-07, 2.0D-01, r^2= 1.6D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
6 1.636696 1 O s 2 -0.921950 1 O s
9 0.708679 1 O pz 16 0.548799 2 H s
18 0.548800 3 H s 17 -0.474050 2 H s
19 -0.474049 3 H s 5 -0.419243 1 O pz
10 -0.387486 1 O dxx 15 -0.318053 1 O dzz
Vector 10 Occ=0.000000D+00 E= 1.167786D+00
MO Center= 2.2D-05, 5.1D-09, 1.1D-01, r^2= 1.1D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
7 -1.036049 1 O px 3 0.962745 1 O px
Vector 11 Occ=0.000000D+00 E= 1.171944D+00
MO Center= -2.2D-05, -4.7D-07, -3.9D-02, r^2= 1.1D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
5 0.761007 1 O pz 16 0.661205 2 H s
18 0.661206 3 H s 6 -0.462694 1 O s
9 -0.370404 1 O pz 17 -0.357353 2 H s
19 -0.357353 3 H s 13 0.249348 1 O dyy
Vector 12 Occ=0.000000D+00 E= 1.380937D+00
MO Center= -2.5D-09, 2.4D-07, 5.7D-02, r^2= 1.4D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
8 1.537091 1 O py 4 -1.037376 1 O py
17 -0.915091 2 H s 19 0.915090 3 H s
Vector 13 Occ=0.000000D+00 E= 1.434077D+00
MO Center= 5.4D-08, -5.6D-07, -3.9D-01, r^2= 1.4D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
6 3.574401 1 O s 2 -1.418426 1 O s
9 -1.174649 1 O pz 17 -0.784923 2 H s
19 -0.784925 3 H s 13 -0.644454 1 O dyy
5 0.506381 1 O pz 15 -0.402328 1 O dzz
16 -0.323132 2 H s 18 -0.323132 3 H s
Vector 14 Occ=0.000000D+00 E= 2.020054D+00
MO Center= -2.1D-08, 1.2D-08, 1.6D-01, r^2= 6.2D-01
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
15 1.008815 1 O dzz 13 -0.580616 1 O dyy
10 -0.366779 1 O dxx 6 -0.227333 1 O s
Vector 15 Occ=0.000000D+00 E= 2.033720D+00
MO Center= -5.0D-08, 6.6D-08, 1.2D-01, r^2= 6.1D-01
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
11 1.732051 1 O dxy
center of mass
--------------
x = 0.00000000 y = 0.00000000 z = 0.09751017
moments of inertia (a.u.)
------------------
6.315433940446 0.000000000000 0.000000000000
0.000000000000 2.193636332720 0.000000000000
0.000000000000 0.000000000000 4.121797607726
Mulliken analysis of the total density
--------------------------------------
Atom Charge Shell Charges
----------- ------ -------------------------------------------------------
1 O 8 8.87 2.00 0.90 2.90 0.92 2.07 0.08
2 H 1 0.57 0.46 0.10
3 H 1 0.57 0.46 0.10
Multipole analysis of the density wrt the origin
------------------------------------------------
L x y z total open nuclear
- - - - ----- ---- -------
0 0 0 0 0.000000 0.000000 10.000000
1 1 0 0 -0.000002 0.000000 0.000000
1 0 1 0 0.000001 0.000000 0.000000
1 0 0 1 -0.875296 0.000000 0.000000
2 2 0 0 -5.372336 0.000000 0.000000
2 1 1 0 -0.000002 0.000000 0.000000
2 1 0 1 0.000001 0.000000 0.000000
2 0 2 0 -3.071804 0.000000 4.089795
2 0 1 1 0.000000 0.000000 0.000000
2 0 0 2 -4.444596 0.000000 1.960717
Parallel integral file used 1 records with 0 large values
NWChem Gradients Module
-----------------------
wavefunction = RHF
RHF ENERGY GRADIENTS
atom coordinates gradient
x y z x y z
1 O 0.000000 0.000000 0.221400 0.000001 0.000000 0.014490
2 H 0.000000 1.429999 -0.885600 -0.000001 0.007296 -0.007245
3 H 0.000000 -1.429999 -0.885600 -0.000000 -0.007296 -0.007245
----------------------------------------
| Time | 1-e(secs) | 2-e(secs) |
----------------------------------------
| CPU | 0.00 | 0.07 |
----------------------------------------
| WALL | 0.00 | 0.03 |
----------------------------------------
Task times cpu: 0.2s wall: 0.1s
NWChem Input Module
-------------------
Summary of allocated global arrays
-----------------------------------
No active global arrays
GA Statistics for process 0
------------------------------
create destroy get put acc scatter gather read&inc
calls: 225 225 3182 894 878 0 0 68
number of processes/call 1.00e+00 1.00e+00 1.00e+00 0.00e+00 0.00e+00
bytes total: 8.62e+05 5.44e+05 1.23e+05 0.00e+00 0.00e+00 5.44e+02
bytes remote: 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00
Max memory consumed for GA by this process: 39432 bytes
MA_summarize_allocated_blocks: starting scan ...
MA_summarize_allocated_blocks: scan completed: 0 heap blocks, 0 stack blocks
MA usage statistics:
allocation statistics:
heap stack
---- -----
current number of blocks 0 0
maximum number of blocks 18 28
current total bytes 0 0
maximum total bytes 1060104 16000888
maximum total K-bytes 1061 16001
maximum total M-bytes 2 17
CITATION
--------
Please cite the following reference when publishing
results obtained with NWChem:
M. Valiev, E.J. Bylaska, N. Govind, K. Kowalski,
T.P. Straatsma, H.J.J. van Dam, D. Wang, J. Nieplocha,
E. Apra, T.L. Windus, W.A. de Jong
"NWChem: a comprehensive and scalable open-source
solution for large scale molecular simulations"
Comput. Phys. Commun. 181, 1477 (2010)
doi:10.1016/j.cpc.2010.04.018
AUTHORS
-------
E. Apra, E. J. Bylaska, W. A. de Jong, N. Govind, K. Kowalski,
T. P. Straatsma, M. Valiev, H. J. J. van Dam, D. Wang, T. L. Windus,
J. Hammond, J. Autschbach, K. Bhaskaran-Nair, J. Brabec, K. Lopata,
S. A. Fischer, S. Krishnamoorthy, M. Jacquelin, W. Ma, M. Klemm, O. Villa,
Y. Chen, V. Anisimov, F. Aquino, S. Hirata, M. T. Hackler, V. Konjkov,
D. Mejia-Rodriguez, T. Risthaus, M. Malagoli, A. Marenich,
A. Otero-de-la-Roza, J. Mullin, P. Nichols, R. Peverati, J. Pittner, Y. Zhao,
P.-D. Fan, A. Fonari, M. J. Williamson, R. J. Harrison, J. R. Rehr,
M. Dupuis, D. Silverstein, D. M. A. Smith, J. Nieplocha, V. Tipparaju,
M. Krishnan, B. E. Van Kuiken, A. Vazquez-Mayagoitia, L. Jensen, M. Swart,
Q. Wu, T. Van Voorhis, A. A. Auer, M. Nooijen, L. D. Crosby, E. Brown,
G. Cisneros, G. I. Fann, H. Fruchtl, J. Garza, K. Hirao, R. A. Kendall,
J. A. Nichols, K. Tsemekhman, K. Wolinski, J. Anchell, D. E. Bernholdt,
P. Borowski, T. Clark, D. Clerc, H. Dachsel, M. J. O. Deegan, K. Dyall,
D. Elwood, E. Glendening, M. Gutowski, A. C. Hess, J. Jaffe, B. G. Johnson,
J. Ju, R. Kobayashi, R. Kutteh, Z. Lin, R. Littlefield, X. Long, B. Meng,
T. Nakajima, S. Niu, L. Pollack, M. Rosing, K. Glaesemann, G. Sandrone,
M. Stave, H. Taylor, G. Thomas, J. H. van Lenthe, A. T. Wong, Z. Zhang.
Total times cpu: 0.2s wall: 0.1s

View File

@ -0,0 +1,197 @@
Sample LAMMPS MD wrapper on NWChem via client/server coupling
See the MESSAGE package (doc/Section_messages.html#MESSAGE) and
Section_howto.html#howto10 for more details on how client/server
coupling works in LAMMPS.
In this dir, the nwchem_wrap.py is a wrapper on the NWChem electronic
structure code so it can work as a "server" code which LAMMPS drives
as a "client" code to perform ab initio MD. LAMMPS performs the MD
timestepping, sends NWChem a current set of coordinates each timestep,
NWChem computes forces and energy (and virial) and returns that info
to LAMMPS.
Messages are exchanged between NWChem and LAMMPS via a client/server
library (CSlib), which is included in the LAMMPS distribution in
lib/message. As explained below you can choose to exchange data
between the two programs either via files or sockets (ZMQ). If the
nwchem_wrap.py program became parallel, or the CSlib library calls were
integrated into NWChem directly, then data could also be exchanged via
MPI.
There are 2 examples provided in the planeware and ao_basis
sub-directories. See details below.
----------------
Build LAMMPS with its MESSAGE package installed:
See the Build extras doc page and its MESSAGE package
section for details.
CMake:
-D PKG_MESSAGE=yes # include the MESSAGE package
-D MESSAGE_ZMQ=value # build with ZeroMQ support, value = no (default) or yes
Traditional make:
cd lammps/lib/message
python Install.py -m -z # build CSlib with MPI and ZMQ support
cd lammps/src
make yes-message
make mpi
You can leave off the -z if you do not have ZMQ on your system.
----------------
Build the CSlib in a form usable by the nwchem_wrapper.py script:
% cd lammps/lib/message/cslib/src
% make shlib # build serial and parallel shared lib with ZMQ support
% make shlib zmq=no # build serial and parallel shared lib w/out ZMQ support
This will make a shared library versions of the CSlib, which Python
requires. Python must be able to find both the cslib.py script and
the libcsnompi.so library in your lammps/lib/message/cslib/src
directory. If it is not able to do this, you will get an error when
you run nwchem_wrapper.py.
You can do this by augmenting two environment variables, either from
the command line, or in your shell start-up script. Here is the
sample syntax for the csh or tcsh shells:
setenv PYTHONPATH ${PYTHONPATH}:/home/sjplimp/lammps/lib/message/cslib/src
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/home/sjplimp/lammps/lib/message/cslib/src
----------------
Prepare to use NWChem and the nwchem_wrap.py script
You can run the nwchem_wrap.py script as-is to test that the coupling
between it and LAMMPS is functional. This will use the included
nwchem_lammps.out files output by a previous NWChem run.
But note that the as-is version of nwchem_wrap.py will not attempt to
run NWChem.
To do this, you must edit the 1st nwchemcmd line at the top of
nwchem_wrapper.py to be the launch command needed to run NWChem on
your system. It can be a command to run NWChem in serial or in
parallel, e.g. an mpirun command. Then comment out the 2nd nwchemcmd
line immediately following it.
Ensure you have the necessary NWChem input file in this directory,
suitable for the NWChem calculation you want to perform.
Example input files are provided for both atom-centered AO basis sets
and plane-wave basis sets. Note that the NWChem template file should
be matched to the LAMMPS input script (# of atoms and atom types, box
size, etc).
Once you run NWChem yourself, the nwchem_lammps.out file will be
overwritten.
The syntax of the wrapper is:
nwchem_wrap.py file/zmq ao/pw input_template
* file/zmg = messaging mode, must match LAMMPS messaging mode
* ao/pw = basis set mode, selects between atom-centered and plane-wave
the input_template file must correspond to the appropriate basis set mode:
the "ao" mode supports the scf and dft modules in NWChem,
the "pw" mode supports the nwpw module.
* input_template = NWChem input file used as template, must include a
"geometry" block with the atoms in the simulation, dummy
xyz coordinates should be included (but are not used).
Atom ordering must match LAMMPS input.
During a simulation, the molecular orbitals from the previous timestep
will be used as the initial guess for the next NWChem calculation. If
a file named "nwchem_lammps.movecs" is in the directory the wrapper is
called from, these orbitals will be used as the initial guess orbitals
in the first step of the simulation.
----------------
Example directories
(1) planewave
Demonstrates coupling of the nwpw module in NWChem with LAMMPS. Only fully
periodic boundary conditions and orthogonal simulation boxes are currently
supported by the wrapper. The included files provide an example run using a
2 atom unit cell of tungsten.
Files:
* data.W LAMMPS input with geometry information
* in.client.W LAMMPS simulation input
* log.client.output LAMMPS simulation output
* w.nw NWChem template input file
* nwchem_lammps.out NWChem output
(2) ao_basis
Demonstrates coupling of the scf (or dft) modules in NWChem with
LAMMPS. Only fully aperiodic boundary conditions are currently
supported by the wrapper. The included files provide an example run
using a single water molecule.
Files:
* data.h2o LAMMPS input with geometry information
* in.client.h2o LAMMPS simulation input
* log.client.output LAMMPS simulation output
* h2o.nw NWChem template input file
* nwchem_lammps.out NWChem output
As noted above, you can run the nwchem_wrap.py script as-is to test that
the coupling between it and LAMMPS is functional. This will use the included
nwchem_lammps.out files.
----------------
To run in client/server mode:
NOTE: The nwchem_wrap.py script must be run with Python version 2, not
3. This is because it used the CSlib python wrapper, which only
supports version 2. We plan to upgrade CSlib to support Python 3.
Both the client (LAMMPS) and server (nwchem_wrap.py) must use the same
messaging mode, namely file or zmq. This is an argument to the
nwchem_wrap.py code; it can be selected by setting the "mode" variable
when you run LAMMPS. The default mode = file.
Here we assume LAMMPS was built to run in parallel, and the MESSAGE
package was installed with socket (ZMQ) support. This means either of
the messaging modes can be used and LAMMPS can be run in serial or
parallel. The nwchem_wrap.py code is always run in serial, but it
launches NWChem from Python via an mpirun command which can run NWChem
itself in parallel.
When you run, the server should print out thermodynamic info every
timestep which corresponds to the forces and virial computed by NWChem.
NWChem will also generate output files each timestep. Output files from
previous timesteps are archived in a "nwchem_logs" directory.
The examples below are commands you should use in two different
terminal windows. The order of the two commands (client or server
launch) does not matter. You can run them both in the same window if
you append a "&" character to the first one to run it in the
background.
--------------
File mode of messaging:
% mpirun -np 1 lmp_mpi -v mode file < in.client.W
% python nwchem_wrap.py file pw w.nw
% mpirun -np 2 lmp_mpi -v mode file < in.client.h2o
% python nwchem_wrap.py file ao h2o_dft.nw
ZMQ mode of messaging:
% mpirun -np 1 lmp_mpi -v mode zmq < in.client.W
% python nwchem_wrap.py zmq pw w.nw
% mpirun -np 2 lmp_mpi -v mode zmq < in.client.h2o
% python nwchem_wrap.py zmq ao h2o_dft.nw

View File

@ -0,0 +1,20 @@
LAMMPS H2O data file
3 atoms
2 atom types
-10.0 10.0 xlo xhi
-10.0 10.0 ylo yhi
-10.0 10.0 zlo zhi
Masses
1 15.994915008544922
2 1.0078250169754028
Atoms
1 1 0.0 0.0 0.0
2 2 0.0 0.756723 -0.585799
3 2 0.0 -0.756723 -0.585799

View File

@ -0,0 +1,25 @@
echo
memory global 40 mb stack 23 mb heap 5 mb
geometry units angstrom noautosym
O 0.0 0.0 0.0
H 1.0 0.5 0.0
H -1.0 0.5 0.0
end
basis
O library 6-31g*
H library 6-31g*
end
scf
maxiter 100
end
#dft
# xc b3lyp
#end
task scf gradient
#task dft gradient

View File

@ -0,0 +1,33 @@
# H2O with NWChem
variable mode index file
if "${mode} == file" then &
"message client md file tmp.couple" &
elif "${mode} == zmq" &
"message client md zmq localhost:5555" &
variable x index 1
variable y index 1
variable z index 1
units metal
atom_style atomic
atom_modify sort 0 0.0 map yes
boundary m m m
read_data data.h2o
replicate $x $y $z
velocity all create 300.0 87287 loop geom
neighbor 0.3 bin
neigh_modify delay 0 every 10 check no
fix 1 all nve
fix 2 all client/md
fix_modify 2 energy yes
thermo 1
run 3

View File

@ -0,0 +1,77 @@
LAMMPS (18 Sep 2018)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87)
using 1 OpenMP thread(s) per MPI task
# H2O with NWChem
variable mode index file
if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555"
message client md zmq localhost:5555
variable x index 1
variable y index 1
variable z index 1
units metal
atom_style atomic
atom_modify sort 0 0.0 map yes
boundary m m m
read_data data.h2o
orthogonal box = (-10 -10 -10) to (10 10 10)
1 by 1 by 1 MPI processor grid
reading atoms ...
3 atoms
replicate $x $y $z
replicate 1 $y $z
replicate 1 1 $z
replicate 1 1 1
orthogonal box = (-10 -10 -10) to (10 10 10)
1 by 1 by 1 MPI processor grid
3 atoms
Time spent = 5.8016e-05 secs
velocity all create 300.0 87287 loop geom
neighbor 0.3 bin
neigh_modify delay 0 every 10 check no
fix 1 all nve
fix 2 all client/md
fix_modify 2 energy yes
thermo 1
run 3
Per MPI rank memory allocation (min/avg/max) = 0.02705 | 0.02705 | 0.02705 Mbytes
Step Temp E_pair E_mol TotEng Press Volume
0 300 0 0 -2068.2746 10.354878 8000
1 368.98118 0 0 -2068.2567 12.735851 8000
2 459.96278 0 0 -2068.2332 15.876195 8000
3 572.94479 0 0 -2068.204 19.775912 8000
Loop time of 0.0174769 on 1 procs for 3 steps with 3 atoms
Performance: 14.831 ns/day, 1.618 hours/ns, 171.655 timesteps/s
8.4% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 2.555e-06 | 2.555e-06 | 2.555e-06 | 0.0 | 0.01
Output | 8.4169e-05 | 8.4169e-05 | 8.4169e-05 | 0.0 | 0.48
Modify | 0.017383 | 0.017383 | 0.017383 | 0.0 | 99.46
Other | | 7.694e-06 | | | 0.04
Nlocal: 3 ave 3 max 3 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0
Neighbor list builds = 0
Dangerous builds not checked
Total wall time: 0:00:01

View File

@ -0,0 +1,622 @@
argument 1 = nwchem_lammps.nw
============================== echo of input deck ==============================
echo
memory global 40 mb stack 23 mb heap 5 mb
geometry units angstrom noautosym
O 0 0 0
H 0 0.756723 -0.585799
H 0 -0.756723 -0.585799
end
scf
vectors input nwchem_lammps.movecs
end
dft
vectors input nwchem_lammps.movecs
end
basis
O library 6-31g*
H library 6-31g*
end
scf
maxiter 100
end
task scf gradient
================================================================================
Northwest Computational Chemistry Package (NWChem) 6.8
------------------------------------------------------
Environmental Molecular Sciences Laboratory
Pacific Northwest National Laboratory
Richland, WA 99352
Copyright (c) 1994-2017
Pacific Northwest National Laboratory
Battelle Memorial Institute
NWChem is an open-source computational chemistry package
distributed under the terms of the
Educational Community License (ECL) 2.0
A copy of the license is included with this distribution
in the LICENSE.TXT file
ACKNOWLEDGMENT
--------------
This software and its documentation were developed at the
EMSL at Pacific Northwest National Laboratory, a multiprogram
national laboratory, operated for the U.S. Department of Energy
by Battelle under Contract Number DE-AC05-76RL01830. Support
for this work was provided by the Department of Energy Office
of Biological and Environmental Research, Office of Basic
Energy Sciences, and the Office of Advanced Scientific Computing.
Job information
---------------
hostname = mcq
program = /usr/bin/nwchem
date = Mon Sep 23 16:28:27 2019
compiled = Wed_Aug_15_19:14:19_2018
source = /home/edo/debichem-team/nwchem/nwchem-6.8.1
nwchem branch = 6.8.1
nwchem revision = v6.8-133-ge032219
ga revision = 5.6.5
use scalapack = T
input = nwchem_lammps.nw
prefix = nwchem_lammps.
data base = ./nwchem_lammps.db
status = restart
nproc = 1
time left = -1s
Memory information
------------------
heap = 655358 doubles = 5.0 Mbytes
stack = 3014651 doubles = 23.0 Mbytes
global = 5242880 doubles = 40.0 Mbytes (distinct from heap & stack)
total = 8912889 doubles = 68.0 Mbytes
verify = yes
hardfail = no
Directory information
---------------------
0 permanent = .
0 scratch = .
Previous task information
-------------------------
Theory = scf
Operation = gradient
Status = ok
Qmmm = F
Ignore = F
Geometries in the database
--------------------------
Name Natoms Last Modified
-------------------------------- ------ ------------------------
1 geometry 3 Mon Sep 23 16:26:29 2019
The geometry named "geometry" is the default for restart
Basis sets in the database
--------------------------
Name Natoms Last Modified
-------------------------------- ------ ------------------------
1 ao basis 2 Mon Sep 23 16:26:29 2019
The basis set named "ao basis" is the default AO basis for restart
NWChem Input Module
-------------------
Scaling coordinates for geometry "geometry" by 1.889725989
(inverse scale = 0.529177249)
------
auto-z
------
Geometry "geometry" -> ""
-------------------------
Output coordinates in angstroms (scale by 1.889725989 to convert to a.u.)
No. Tag Charge X Y Z
---- ---------------- ---------- -------------- -------------- --------------
1 O 8.0000 0.00000000 0.00000000 0.11715980
2 H 1.0000 0.00000000 0.75672300 -0.46863920
3 H 1.0000 0.00000000 -0.75672300 -0.46863920
Atomic Mass
-----------
O 15.994910
H 1.007825
Effective nuclear repulsion energy (a.u.) 9.1972032776
Nuclear Dipole moment (a.u.)
----------------------------
X Y Z
---------------- ---------------- ----------------
0.0000000000 0.0000000000 0.0000000000
Z-matrix (autoz)
--------
Units are Angstrom for bonds and degrees for angles
Type Name I J K L M Value
----------- -------- ----- ----- ----- ----- ----- ----------
1 Stretch 1 2 0.95697
2 Stretch 1 3 0.95697
3 Bend 2 1 3 104.51122
XYZ format geometry
-------------------
3
geometry
O 0.00000000 0.00000000 0.11715980
H 0.00000000 0.75672300 -0.46863920
H 0.00000000 -0.75672300 -0.46863920
==============================================================================
internuclear distances
------------------------------------------------------------------------------
center one | center two | atomic units | angstroms
------------------------------------------------------------------------------
2 H | 1 O | 1.80841 | 0.95697
3 H | 1 O | 1.80841 | 0.95697
------------------------------------------------------------------------------
number of included internuclear distances: 2
==============================================================================
==============================================================================
internuclear angles
------------------------------------------------------------------------------
center 1 | center 2 | center 3 | degrees
------------------------------------------------------------------------------
2 H | 1 O | 3 H | 104.51
------------------------------------------------------------------------------
number of included internuclear angles: 1
==============================================================================
Basis "ao basis" -> "" (cartesian)
-----
O (Oxygen)
----------
Exponent Coefficients
-------------- ---------------------------------------------------------
1 S 5.48467170E+03 0.001831
1 S 8.25234950E+02 0.013950
1 S 1.88046960E+02 0.068445
1 S 5.29645000E+01 0.232714
1 S 1.68975700E+01 0.470193
1 S 5.79963530E+00 0.358521
2 S 1.55396160E+01 -0.110778
2 S 3.59993360E+00 -0.148026
2 S 1.01376180E+00 1.130767
3 P 1.55396160E+01 0.070874
3 P 3.59993360E+00 0.339753
3 P 1.01376180E+00 0.727159
4 S 2.70005800E-01 1.000000
5 P 2.70005800E-01 1.000000
6 D 8.00000000E-01 1.000000
H (Hydrogen)
------------
Exponent Coefficients
-------------- ---------------------------------------------------------
1 S 1.87311370E+01 0.033495
1 S 2.82539370E+00 0.234727
1 S 6.40121700E-01 0.813757
2 S 1.61277800E-01 1.000000
Summary of "ao basis" -> "" (cartesian)
------------------------------------------------------------------------------
Tag Description Shells Functions and Types
---------------- ------------------------------ ------ ---------------------
O 6-31g* 6 15 3s2p1d
H 6-31g* 2 2 2s
NWChem SCF Module
-----------------
ao basis = "ao basis"
functions = 19
atoms = 3
closed shells = 5
open shells = 0
charge = 0.00
wavefunction = RHF
input vectors = ./nwchem_lammps.movecs
output vectors = ./nwchem_lammps.movecs
use symmetry = F
symmetry adapt = F
Summary of "ao basis" -> "ao basis" (cartesian)
------------------------------------------------------------------------------
Tag Description Shells Functions and Types
---------------- ------------------------------ ------ ---------------------
O 6-31g* 6 15 3s2p1d
H 6-31g* 2 2 2s
Forming initial guess at 0.0s
Loading old vectors from job with title :
Starting SCF solution at 0.0s
----------------------------------------------
Quadratically convergent ROHF
Convergence threshold : 1.000E-04
Maximum no. of iterations : 100
Final Fock-matrix accuracy: 1.000E-07
----------------------------------------------
#quartets = 1.540D+03 #integrals = 8.874D+03 #direct = 0.0% #cached =100.0%
Integral file = ./nwchem_lammps.aoints.0
Record size in doubles = 65536 No. of integs per rec = 43688
Max. records in memory = 2 Max. records in file = 326674
No. of bits per label = 8 No. of bits per value = 64
iter energy gnorm gmax time
----- ------------------- --------- --------- --------
1 -75.9732571733 7.14D-01 3.37D-01 0.3
2 -76.0055117003 3.10D-01 1.79D-01 0.3
3 -76.0098071888 1.15D-01 5.21D-02 0.3
4 -76.0105377099 2.55D-03 9.57D-04 0.3
5 -76.0105386346 9.48D-06 3.52D-06 0.3
Final RHF results
------------------
Total SCF energy = -76.010538634624
One-electron energy = -123.058850386783
Two-electron energy = 37.851108474513
Nuclear repulsion energy = 9.197203277646
Time for solution = 0.1s
Final eigenvalues
-----------------
1
1 -20.5603
2 -1.3419
3 -0.7071
4 -0.5711
5 -0.4979
6 0.2108
7 0.3042
8 1.0227
9 1.1318
10 1.1678
11 1.1719
12 1.3809
13 1.4341
14 2.0201
15 2.0337
ROHF Final Molecular Orbital Analysis
-------------------------------------
Vector 2 Occ=2.000000D+00 E=-1.341930D+00
MO Center= -7.7D-08, 1.6D-07, -5.6D-02, r^2= 5.0D-01
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
2 0.475861 1 O s 6 0.439201 1 O s
1 -0.209676 1 O s
Vector 3 Occ=2.000000D+00 E=-7.070591D-01
MO Center= 5.8D-08, -1.2D-07, -1.0D-01, r^2= 7.7D-01
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
4 0.507651 1 O py 8 0.306488 1 O py
16 0.230979 2 H s 18 -0.230979 3 H s
Vector 4 Occ=2.000000D+00 E=-5.710712D-01
MO Center= 6.9D-07, -2.0D-07, 1.7D-01, r^2= 6.9D-01
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
5 0.555446 1 O pz 9 0.403175 1 O pz
6 0.325535 1 O s 2 0.164591 1 O s
Vector 5 Occ=2.000000D+00 E=-4.979251D-01
MO Center= -9.5D-08, -7.1D-08, 9.7D-02, r^2= 6.0D-01
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
3 0.639615 1 O px 7 0.511470 1 O px
Vector 6 Occ=0.000000D+00 E= 2.108019D-01
MO Center= -5.7D-07, 1.0D-06, -6.5D-01, r^2= 2.6D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
6 1.415545 1 O s 17 -1.041449 2 H s
19 -1.041447 3 H s 9 -0.508218 1 O pz
5 -0.217054 1 O pz
Vector 7 Occ=0.000000D+00 E= 3.042327D-01
MO Center= -1.9D-09, -9.8D-07, -6.2D-01, r^2= 2.7D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
17 1.395012 2 H s 19 -1.395014 3 H s
8 -0.833805 1 O py 4 -0.329272 1 O py
Vector 8 Occ=0.000000D+00 E= 1.022735D+00
MO Center= -1.1D-10, 6.2D-07, -4.7D-02, r^2= 1.4D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
16 0.838912 2 H s 18 -0.838911 3 H s
8 -0.662620 1 O py 17 -0.459236 2 H s
19 0.459235 3 H s 14 -0.343167 1 O dyz
Vector 9 Occ=0.000000D+00 E= 1.131842D+00
MO Center= 2.2D-07, 3.1D-07, 2.0D-01, r^2= 1.6D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
6 1.636696 1 O s 2 -0.921950 1 O s
9 0.708679 1 O pz 16 0.548799 2 H s
18 0.548800 3 H s 17 -0.474050 2 H s
19 -0.474049 3 H s 5 -0.419243 1 O pz
10 -0.387486 1 O dxx 15 -0.318053 1 O dzz
Vector 10 Occ=0.000000D+00 E= 1.167786D+00
MO Center= 2.2D-05, 5.1D-09, 1.1D-01, r^2= 1.1D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
7 -1.036049 1 O px 3 0.962745 1 O px
Vector 11 Occ=0.000000D+00 E= 1.171944D+00
MO Center= -2.2D-05, -4.7D-07, -3.9D-02, r^2= 1.1D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
5 0.761007 1 O pz 16 0.661205 2 H s
18 0.661206 3 H s 6 -0.462694 1 O s
9 -0.370404 1 O pz 17 -0.357353 2 H s
19 -0.357353 3 H s 13 0.249348 1 O dyy
Vector 12 Occ=0.000000D+00 E= 1.380937D+00
MO Center= -2.5D-09, 2.4D-07, 5.7D-02, r^2= 1.4D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
8 1.537091 1 O py 4 -1.037376 1 O py
17 -0.915091 2 H s 19 0.915090 3 H s
Vector 13 Occ=0.000000D+00 E= 1.434077D+00
MO Center= 5.4D-08, -5.6D-07, -3.9D-01, r^2= 1.4D+00
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
6 3.574401 1 O s 2 -1.418426 1 O s
9 -1.174649 1 O pz 17 -0.784923 2 H s
19 -0.784925 3 H s 13 -0.644454 1 O dyy
5 0.506381 1 O pz 15 -0.402328 1 O dzz
16 -0.323132 2 H s 18 -0.323132 3 H s
Vector 14 Occ=0.000000D+00 E= 2.020054D+00
MO Center= -2.1D-08, 1.2D-08, 1.6D-01, r^2= 6.2D-01
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
15 1.008815 1 O dzz 13 -0.580616 1 O dyy
10 -0.366779 1 O dxx 6 -0.227333 1 O s
Vector 15 Occ=0.000000D+00 E= 2.033720D+00
MO Center= -5.0D-08, 6.6D-08, 1.2D-01, r^2= 6.1D-01
Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function
----- ------------ --------------- ----- ------------ ---------------
11 1.732051 1 O dxy
center of mass
--------------
x = 0.00000000 y = 0.00000000 z = 0.09751017
moments of inertia (a.u.)
------------------
6.315433940446 0.000000000000 0.000000000000
0.000000000000 2.193636332720 0.000000000000
0.000000000000 0.000000000000 4.121797607726
Mulliken analysis of the total density
--------------------------------------
Atom Charge Shell Charges
----------- ------ -------------------------------------------------------
1 O 8 8.87 2.00 0.90 2.90 0.92 2.07 0.08
2 H 1 0.57 0.46 0.10
3 H 1 0.57 0.46 0.10
Multipole analysis of the density wrt the origin
------------------------------------------------
L x y z total open nuclear
- - - - ----- ---- -------
0 0 0 0 0.000000 0.000000 10.000000
1 1 0 0 -0.000002 0.000000 0.000000
1 0 1 0 0.000001 0.000000 0.000000
1 0 0 1 -0.875296 0.000000 0.000000
2 2 0 0 -5.372336 0.000000 0.000000
2 1 1 0 -0.000002 0.000000 0.000000
2 1 0 1 0.000001 0.000000 0.000000
2 0 2 0 -3.071804 0.000000 4.089795
2 0 1 1 0.000000 0.000000 0.000000
2 0 0 2 -4.444596 0.000000 1.960717
Parallel integral file used 1 records with 0 large values
NWChem Gradients Module
-----------------------
wavefunction = RHF
RHF ENERGY GRADIENTS
atom coordinates gradient
x y z x y z
1 O 0.000000 0.000000 0.221400 0.000001 0.000000 0.014490
2 H 0.000000 1.429999 -0.885600 -0.000001 0.007296 -0.007245
3 H 0.000000 -1.429999 -0.885600 -0.000000 -0.007296 -0.007245
----------------------------------------
| Time | 1-e(secs) | 2-e(secs) |
----------------------------------------
| CPU | 0.00 | 0.07 |
----------------------------------------
| WALL | 0.00 | 0.03 |
----------------------------------------
Task times cpu: 0.2s wall: 0.1s
NWChem Input Module
-------------------
Summary of allocated global arrays
-----------------------------------
No active global arrays
GA Statistics for process 0
------------------------------
create destroy get put acc scatter gather read&inc
calls: 225 225 3182 894 878 0 0 68
number of processes/call 1.00e+00 1.00e+00 1.00e+00 0.00e+00 0.00e+00
bytes total: 8.62e+05 5.44e+05 1.23e+05 0.00e+00 0.00e+00 5.44e+02
bytes remote: 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00
Max memory consumed for GA by this process: 39432 bytes
MA_summarize_allocated_blocks: starting scan ...
MA_summarize_allocated_blocks: scan completed: 0 heap blocks, 0 stack blocks
MA usage statistics:
allocation statistics:
heap stack
---- -----
current number of blocks 0 0
maximum number of blocks 18 28
current total bytes 0 0
maximum total bytes 1060104 16000888
maximum total K-bytes 1061 16001
maximum total M-bytes 2 17
CITATION
--------
Please cite the following reference when publishing
results obtained with NWChem:
M. Valiev, E.J. Bylaska, N. Govind, K. Kowalski,
T.P. Straatsma, H.J.J. van Dam, D. Wang, J. Nieplocha,
E. Apra, T.L. Windus, W.A. de Jong
"NWChem: a comprehensive and scalable open-source
solution for large scale molecular simulations"
Comput. Phys. Commun. 181, 1477 (2010)
doi:10.1016/j.cpc.2010.04.018
AUTHORS
-------
E. Apra, E. J. Bylaska, W. A. de Jong, N. Govind, K. Kowalski,
T. P. Straatsma, M. Valiev, H. J. J. van Dam, D. Wang, T. L. Windus,
J. Hammond, J. Autschbach, K. Bhaskaran-Nair, J. Brabec, K. Lopata,
S. A. Fischer, S. Krishnamoorthy, M. Jacquelin, W. Ma, M. Klemm, O. Villa,
Y. Chen, V. Anisimov, F. Aquino, S. Hirata, M. T. Hackler, V. Konjkov,
D. Mejia-Rodriguez, T. Risthaus, M. Malagoli, A. Marenich,
A. Otero-de-la-Roza, J. Mullin, P. Nichols, R. Peverati, J. Pittner, Y. Zhao,
P.-D. Fan, A. Fonari, M. J. Williamson, R. J. Harrison, J. R. Rehr,
M. Dupuis, D. Silverstein, D. M. A. Smith, J. Nieplocha, V. Tipparaju,
M. Krishnan, B. E. Van Kuiken, A. Vazquez-Mayagoitia, L. Jensen, M. Swart,
Q. Wu, T. Van Voorhis, A. A. Auer, M. Nooijen, L. D. Crosby, E. Brown,
G. Cisneros, G. I. Fann, H. Fruchtl, J. Garza, K. Hirao, R. A. Kendall,
J. A. Nichols, K. Tsemekhman, K. Wolinski, J. Anchell, D. E. Bernholdt,
P. Borowski, T. Clark, D. Clerc, H. Dachsel, M. J. O. Deegan, K. Dyall,
D. Elwood, E. Glendening, M. Gutowski, A. C. Hess, J. Jaffe, B. G. Johnson,
J. Ju, R. Kobayashi, R. Kutteh, Z. Lin, R. Littlefield, X. Long, B. Meng,
T. Nakajima, S. Niu, L. Pollack, M. Rosing, K. Glaesemann, G. Sandrone,
M. Stave, H. Taylor, G. Thomas, J. H. van Lenthe, A. T. Wong, Z. Zhang.
Total times cpu: 0.2s wall: 0.1s

View File

@ -0,0 +1,448 @@
#!/usr/bin/env python
# ----------------------------------------------------------------------
# LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
# http://lammps.sandia.gov, Sandia National Laboratories
# Steve Plimpton, sjplimp@sandia.gov
# ----------------------------------------------------------------------
# Syntax: nwchem_wrap.py file/zmq ao/pw input_template
# file/zmg = messaging mode, must match LAMMPS messaging mode
# ao/pw = basis set mode, selects between atom-centered and plane-wave
# the input_template file must correspond to the appropriate basis set mode:
# the "ao" mode supports the scf and dft modules in NWChem,
# the "pw" mode supports the nwpw module.
# input_template = NWChem input file used as template, must include a
# "geometry" block with the atoms in the simulation, dummy
# xyz coordinates should be included (but are not used).
# Atom ordering must match LAMMPS input.
# wrapper on NWChem
# receives message with list of coords
# creates NWChem inputs
# invokes NWChem to calculate self-consistent energy of that config
# reads NWChem outputs
# sends message with energy, forces, pressure to client
from __future__ import print_function
import sys
version = sys.version_info[0]
if version == 3:
sys.exit("The CSlib python wrapper does not yet support python 3")
import subprocess
import re
import os
import shutil
from cslib import CSlib
# comment out 2nd line once 1st line is correct for your system
nwchemcmd = "mpirun -np 1 /usr/bin/nwchem nwchem_lammps.nw > "
nwchemcmd = "touch tmp"
# enums matching FixClientMD class in LAMMPS
SETUP,STEP = range(1,2+1)
DIM,PERIODICITY,ORIGIN,BOX,NATOMS,NTYPES,TYPES,COORDS,UNITS,CHARGE = range(1,10+1)
FORCES,ENERGY,VIRIAL,ERROR = range(1,4+1)
# -------------------------------------
# functions
# error message and exit
def error(txt):
print("ERROR:",txt)
sys.exit(1)
# -------------------------------------
# read initial input file to setup problem
# return natoms
def nwchem_setup_ao(input):
template = open(input,'r')
geometry_block = False
natoms = 0
while True:
line = template.readline()
if not line: break
if geometry_block and re.search("end",line):
geometry_block = False
if geometry_block and not re.match("#",line) :
natoms += 1
if re.search("geometry",line):
geometry_block = True
return natoms
# -------------------------------------
# write a new input file for NWChem
# assumes the NWChem input geometry is to be specified in angstroms
def nwchem_input_write_ao(input,coords):
template = open(input,'r')
new_input = open("nwchem_lammps.nw",'w')
geometry_block = False
i = 0
while True:
line = template.readline()
if not line: break
if geometry_block and not re.match("#",line) and re.search("end",line):
geometry_block = False
if os.path.exists("nwchem_lammps.movecs"):
# The below is hacky, but one of these lines will be ignored
# by NWChem depending on if the input file is for scf/dft.
append = "\nscf\n vectors input nwchem_lammps.movecs\nend\n"
append2 = "\ndft\n vectors input nwchem_lammps.movecs\nend\n"
line = line + append + append2
if geometry_block and not re.match("#",line):
x = coords[3*i+0]
y = coords[3*i+1]
z = coords[3*i+2]
coord_string = " %g %g %g \n" % (x,y,z)
atom_string = line.split()[0]
line = atom_string + coord_string
i += 1
if (not re.match("#",line)) and re.search("geometry",line):
geometry_block = True
line = "geometry units angstrom noautosym\n"
print(line,file=new_input,end='')
new_input.close()
# -------------------------------------
# read a NWChem output nwchem_lammps.out file
def nwchem_read_ao(natoms, log):
nwchem_output = open(log, 'r')
energy_pattern = r"Total \w+ energy"
gradient_pattern = "x y z x y z"
eout = 0.0
fout = []
while True:
line = nwchem_output.readline()
if not line: break
# pattern match for energy
if re.search(energy_pattern,line):
eout = float(line.split()[4])
# pattern match for forces
if re.search(gradient_pattern, line):
for i in range(natoms):
line = nwchem_output.readline()
forces = line.split()
fout += [float(forces[5]), float(forces[6]), float(forces[7])]
# convert units
hartree2eV = 27.21138602
bohr2angstrom = 0.52917721092
eout = eout * hartree2eV
fout = [i * hartree2eV/bohr2angstrom for i in fout]
print(eout)
return eout,fout
# -------------------------------------
# read initial planewave input file to setup problem
# return natoms,box
def nwchem_setup_pw(input):
template = open(input,'r')
geometry_block = False
system_block = False
coord_pattern = r"^\s*\w{1,2}(?:\s+-?(?:\d+.?\d*|\d*.?\d+)){3}"
natoms = 0
box = []
while True:
line = template.readline()
if not line: break
if geometry_block and re.search("system crystal",line):
system_block = True
for i in range(3):
line = template.readline()
line = re.sub(r'd|D', 'e', line)
box += [float(line.split()[1])]
if geometry_block and not system_block and re.match("#",line) and re.search("end",line):
geometry_block = False
if system_block and re.search("end",line):
system_block = False
if geometry_block and not re.match("#",line) and re.search(coord_pattern,line):
natoms += 1
if re.search("geometry",line) and not re.match("#",line):
geometry_block = True
return natoms,box
# -------------------------------------
# write a new planewave input file for NWChem
# assumes the NWChem input geometry is to be specified fractional coordinates
def nwchem_input_write_pw(input,coords,box):
template = open(input,'r')
new_input = open("nwchem_lammps.nw",'w')
writing_atoms = False
geometry_block = False
system_block = False
coord_pattern = r"^\s*\w{1,2}(?:\s+-?(?:\d+.?\d*|\d*.?\d+)){3}"
i = 0
while True:
line = template.readline()
if not line: break
if geometry_block and re.search("system crystal",line):
system_block = True
if geometry_block and not system_block and not re.match("#",line) and re.search("end",line):
geometry_block = False
if os.path.exists("nwchem_lammps.movecs"):
append = "\nnwpw\n vectors input nwchem_lammps.movecs\nend\n"
line = line + append
if system_block and re.search("end",line):
system_block = False
if geometry_block and not re.match("#",line) and re.search(coord_pattern,line):
x = coords[3*i+0] / box[0]
y = coords[3*i+1] / box[1]
z = coords[3*i+2] / box[2]
coord_string = " %g %g %g \n" % (x,y,z)
atom_string = line.split()[0]
line = atom_string + coord_string
i += 1
if re.search("geometry",line) and not re.match("#",line):
geometry_block = True
print(line,file=new_input,end='')
new_input.close()
# -------------------------------------
# read a NWChem output nwchem_lammps.out file for planewave calculation
def nwchem_read_pw(log):
nw_output = open(log, 'r')
eout = 0.0
sout = []
fout = []
reading_forces = False
while True:
line = nw_output.readline()
if not line: break
# pattern match for energy
if re.search("PSPW energy",line):
eout = float(line.split()[4])
# pattern match for forces
if re.search("C\.O\.M", line):
reading_forces = False
if reading_forces:
forces = line.split()
fout += [float(forces[3]), float(forces[4]), float(forces[5])]
if re.search("Ion Forces",line):
reading_forces = True
# pattern match for stress
if re.search("=== total gradient ===",line):
stensor = []
for i in range(3):
line = nw_output.readline()
line = line.replace("S ="," ")
stress = line.split()
stensor += [float(stress[1]), float(stress[2]), float(stress[3])]
sxx = stensor[0]
syy = stensor[4]
szz = stensor[8]
sxy = 0.5 * (float(stensor[1]) + float(stensor[3]))
sxz = 0.5 * (stensor[2] + stensor[6])
syz = 0.5 * (stensor[5] + stensor[7])
sout = [sxx,syy,szz,sxy,sxz,syz]
# convert units
hartree2eV = 27.21138602
bohr2angstrom = 0.52917721092
austress2bar = 294210156.97
eout = eout * hartree2eV
fout = [i * hartree2eV/bohr2angstrom for i in fout]
sout = [i * austress2bar for i in sout]
return eout,fout,sout
# -------------------------------------
# main program
# command-line args
#
if len(sys.argv) != 4:
print("Syntax: python nwchem_wrap.py file/zmq ao/pw input_template")
sys.exit(1)
comm_mode = sys.argv[1]
basis_type = sys.argv[2]
input_template = sys.argv[3]
if comm_mode == "file": cs = CSlib(1,comm_mode,"tmp.couple",None)
elif comm_mode == "zmq": cs = CSlib(1,comm_mode,"*:5555",None)
else:
print("Syntax: python nwchem_wrap.py file/zmq")
sys.exit(1)
natoms = 0
box = []
if basis_type == "ao":
natoms = nwchem_setup_ao(input_template)
elif basis_type == "pw":
natoms,box = nwchem_setup_pw(input_template)
# initial message for AIMD protocol
msgID,nfield,fieldID,fieldtype,fieldlen = cs.recv()
if msgID != 0: error("Bad initial client/server handshake")
protocol = cs.unpack_string(1)
if protocol != "md": error("Mismatch in client/server protocol")
cs.send(0,0)
# endless server loop
i = 0
if not os.path.exists("nwchem_logs"):
os.mkdir("nwchem_logs")
while 1:
# recv message from client
# msgID = 0 = all-done message
msgID,nfield,fieldID,fieldtype,fieldlen = cs.recv()
if msgID < 0: break
# SETUP receive at beginning of each run
# required fields: DIM, PERIODICITY, ORIGIN, BOX,
# NATOMS, COORDS
# optional fields: others in enum above, but NWChem ignores them
if msgID == SETUP:
origin = []
box_lmp = []
natoms_recv = ntypes_recv = 0
types = []
coords = []
for field in fieldID:
if field == DIM:
dim = cs.unpack_int(DIM)
if dim != 3: error("NWChem only performs 3d simulations")
elif field == PERIODICITY:
periodicity = cs.unpack(PERIODICITY,1)
if basis_type == "ao":
if periodicity[0] or periodicity[1] or periodicity[2]:
error("NWChem AO basis wrapper only currently supports fully aperiodic systems")
elif basis_type == "pw":
if not periodicity[0] or not periodicity[1] or not periodicity[2]:
error("NWChem PW basis wrapper only currently supports fully periodic systems")
elif field == ORIGIN:
origin = cs.unpack(ORIGIN,1)
elif field == BOX:
box_lmp = cs.unpack(BOX,1)
if (basis_type == "pw"):
if (box[0] != box_lmp[0] or box[1] != box_lmp[4] or box[2] != box_lmp[8]):
error("NWChem wrapper mismatch in box dimensions")
elif field == NATOMS:
natoms_recv = cs.unpack_int(NATOMS)
if natoms != natoms_recv:
error("NWChem wrapper mismatch in number of atoms")
elif field == COORDS:
coords = cs.unpack(COORDS,1)
if not origin or not box_lmp or not natoms or not coords:
error("Required NWChem wrapper setup field not received");
# STEP receive at each timestep of run or minimization
# required fields: COORDS
# optional fields: ORIGIN, BOX
elif msgID == STEP:
coords = []
for field in fieldID:
if field == COORDS:
coords = cs.unpack(COORDS,1)
if not coords: error("Required NWChem wrapper step field not received");
else: error("NWChem wrapper received unrecognized message")
# unpack coords from client
# create NWChem input
if basis_type == "ao":
nwchem_input_write_ao(input_template,coords)
elif basis_type == "pw":
nwchem_input_write_pw(input_template,coords,box)
# invoke NWChem
i += 1
log = "nwchem_lammps.out"
archive = "nwchem_logs/nwchem_lammps" + str(i) + ".out"
cmd = nwchemcmd + log
print("\nLaunching NWChem ...")
print(cmd)
subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True)
shutil.copyfile(log,archive)
# process NWChem output
if basis_type == "ao":
energy,forces = nwchem_read_ao(natoms,log)
virial = [0,0,0,0,0,0]
elif basis_type == "pw":
energy,forces,virial = nwchem_read_pw(log)
# return forces, energy to client
cs.send(msgID,3)
cs.pack(FORCES,4,3*natoms,forces)
cs.pack_double(ENERGY,energy)
cs.pack(VIRIAL,4,6,virial)
# final reply to client
cs.send(0,0)
# clean-up
del cs

View File

@ -0,0 +1,15 @@
LAMMPS W data file
2 atoms
1 atom types
0.0 3.16 xlo xhi
0.0 3.16 ylo yhi
0.0 3.16 zlo zhi
Atoms
1 1 0.000 0.000 0.000
2 1 1.58 1.58 1.58

View File

@ -0,0 +1,34 @@
# small W unit cell for use with NWChem
variable mode index file
if "${mode} == file" then &
"message client md file tmp.couple" &
elif "${mode} == zmq" &
"message client md zmq localhost:5555" &
variable x index 1
variable y index 1
variable z index 1
units metal
atom_style atomic
atom_modify sort 0 0.0 map yes
read_data data.W
mass 1 183.85
replicate $x $y $z
velocity all create 300.0 87287 loop geom
neighbor 0.3 bin
neigh_modify delay 0 every 10 check no
fix 1 all nve
fix 2 all client/md
fix_modify 2 energy yes
thermo 1
run 3

View File

@ -0,0 +1,76 @@
LAMMPS (18 Sep 2018)
# small W unit cell for use with NWChem
variable mode index file
if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555"
message client md file tmp.couple
variable x index 1
variable y index 1
variable z index 1
units metal
atom_style atomic
atom_modify sort 0 0.0 map yes
read_data data.W
orthogonal box = (0 0 0) to (3.16 3.16 3.16)
1 by 1 by 1 MPI processor grid
reading atoms ...
2 atoms
mass 1 183.85
replicate $x $y $z
replicate 1 $y $z
replicate 1 1 $z
replicate 1 1 1
orthogonal box = (0 0 0) to (3.16 3.16 3.16)
1 by 1 by 1 MPI processor grid
2 atoms
Time spent = 0.000187325 secs
velocity all create 300.0 87287 loop geom
neighbor 0.3 bin
neigh_modify delay 0 every 10 check no
fix 1 all nve
fix 2 all client/md
fix_modify 2 energy yes
thermo 1
run 3
Per MPI rank memory allocation (min/avg/max) = 1.8 | 1.8 | 1.8 Mbytes
Step Temp E_pair E_mol TotEng Press
0 300 0 0 -549.75686 36815830
1 300 0 0 -549.75686 36815830
2 300 0 0 -549.75686 36815830
3 300 0 0 -549.75686 36815830
Loop time of 0.400933 on 1 procs for 3 steps with 2 atoms
Performance: 0.646 ns/day, 37.123 hours/ns, 7.483 timesteps/s
0.1% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 4.755e-06 | 4.755e-06 | 4.755e-06 | 0.0 | 0.00
Output | 0.00010114 | 0.00010114 | 0.00010114 | 0.0 | 0.03
Modify | 0.40082 | 0.40082 | 0.40082 | 0.0 | 99.97
Other | | 1.232e-05 | | | 0.00
Nlocal: 2 ave 2 max 2 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 7 ave 7 max 7 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0
Neighbor list builds = 0
Dangerous builds not checked
Total wall time: 0:00:09

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,28 @@
echo
#**** Enter the geometry using fractional coordinates ****
geometry units angstrom noautosym
system crystal
lat_a 3.16d0
lat_b 3.16d0
lat_c 3.16d0
end
W 0.0 0.0 0.0
W 0.5 0.5 0.5
end
#***** setup the nwpw gamma point code ****
nwpw
simulation_cell
ngrid 16 16 16
end
ewald_ncut 8
mulliken
lcao #old default
end
nwpw
tolerances 1.0d-9 1.0d-9
end
task pspw stress

View File

@ -0,0 +1,448 @@
#!/usr/bin/env python
# ----------------------------------------------------------------------
# LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
# http://lammps.sandia.gov, Sandia National Laboratories
# Steve Plimpton, sjplimp@sandia.gov
# ----------------------------------------------------------------------
# Syntax: nwchem_wrap.py file/zmq ao/pw input_template
# file/zmg = messaging mode, must match LAMMPS messaging mode
# ao/pw = basis set mode, selects between atom-centered and plane-wave
# the input_template file must correspond to the appropriate basis set mode:
# the "ao" mode supports the scf and dft modules in NWChem,
# the "pw" mode supports the nwpw module.
# input_template = NWChem input file used as template, must include a
# "geometry" block with the atoms in the simulation, dummy
# xyz coordinates should be included (but are not used).
# Atom ordering must match LAMMPS input.
# wrapper on NWChem
# receives message with list of coords
# creates NWChem inputs
# invokes NWChem to calculate self-consistent energy of that config
# reads NWChem outputs
# sends message with energy, forces, pressure to client
from __future__ import print_function
import sys
version = sys.version_info[0]
if version == 3:
sys.exit("The CSlib python wrapper does not yet support python 3")
import subprocess
import re
import os
import shutil
from cslib import CSlib
# comment out 2nd line once 1st line is correct for your system
nwchemcmd = "mpirun -np 1 /usr/bin/nwchem nwchem_lammps.nw > "
nwchemcmd = "touch tmp"
# enums matching FixClientMD class in LAMMPS
SETUP,STEP = range(1,2+1)
DIM,PERIODICITY,ORIGIN,BOX,NATOMS,NTYPES,TYPES,COORDS,UNITS,CHARGE = range(1,10+1)
FORCES,ENERGY,VIRIAL,ERROR = range(1,4+1)
# -------------------------------------
# functions
# error message and exit
def error(txt):
print("ERROR:",txt)
sys.exit(1)
# -------------------------------------
# read initial input file to setup problem
# return natoms
def nwchem_setup_ao(input):
template = open(input,'r')
geometry_block = False
natoms = 0
while True:
line = template.readline()
if not line: break
if geometry_block and re.search("end",line):
geometry_block = False
if geometry_block and not re.match("#",line) :
natoms += 1
if re.search("geometry",line):
geometry_block = True
return natoms
# -------------------------------------
# write a new input file for NWChem
# assumes the NWChem input geometry is to be specified in angstroms
def nwchem_input_write_ao(input,coords):
template = open(input,'r')
new_input = open("nwchem_lammps.nw",'w')
geometry_block = False
i = 0
while True:
line = template.readline()
if not line: break
if geometry_block and not re.match("#",line) and re.search("end",line):
geometry_block = False
if os.path.exists("nwchem_lammps.movecs"):
# The below is hacky, but one of these lines will be ignored
# by NWChem depending on if the input file is for scf/dft.
append = "\nscf\n vectors input nwchem_lammps.movecs\nend\n"
append2 = "\ndft\n vectors input nwchem_lammps.movecs\nend\n"
line = line + append + append2
if geometry_block and not re.match("#",line):
x = coords[3*i+0]
y = coords[3*i+1]
z = coords[3*i+2]
coord_string = " %g %g %g \n" % (x,y,z)
atom_string = line.split()[0]
line = atom_string + coord_string
i += 1
if (not re.match("#",line)) and re.search("geometry",line):
geometry_block = True
line = "geometry units angstrom noautosym\n"
print(line,file=new_input,end='')
new_input.close()
# -------------------------------------
# read a NWChem output nwchem_lammps.out file
def nwchem_read_ao(natoms, log):
nwchem_output = open(log, 'r')
energy_pattern = r"Total \w+ energy"
gradient_pattern = "x y z x y z"
eout = 0.0
fout = []
while True:
line = nwchem_output.readline()
if not line: break
# pattern match for energy
if re.search(energy_pattern,line):
eout = float(line.split()[4])
# pattern match for forces
if re.search(gradient_pattern, line):
for i in range(natoms):
line = nwchem_output.readline()
forces = line.split()
fout += [float(forces[5]), float(forces[6]), float(forces[7])]
# convert units
hartree2eV = 27.21138602
bohr2angstrom = 0.52917721092
eout = eout * hartree2eV
fout = [i * hartree2eV/bohr2angstrom for i in fout]
print(eout)
return eout,fout
# -------------------------------------
# read initial planewave input file to setup problem
# return natoms,box
def nwchem_setup_pw(input):
template = open(input,'r')
geometry_block = False
system_block = False
coord_pattern = r"^\s*\w{1,2}(?:\s+-?(?:\d+.?\d*|\d*.?\d+)){3}"
natoms = 0
box = []
while True:
line = template.readline()
if not line: break
if geometry_block and re.search("system crystal",line):
system_block = True
for i in range(3):
line = template.readline()
line = re.sub(r'd|D', 'e', line)
box += [float(line.split()[1])]
if geometry_block and not system_block and re.match("#",line) and re.search("end",line):
geometry_block = False
if system_block and re.search("end",line):
system_block = False
if geometry_block and not re.match("#",line) and re.search(coord_pattern,line):
natoms += 1
if re.search("geometry",line) and not re.match("#",line):
geometry_block = True
return natoms,box
# -------------------------------------
# write a new planewave input file for NWChem
# assumes the NWChem input geometry is to be specified fractional coordinates
def nwchem_input_write_pw(input,coords,box):
template = open(input,'r')
new_input = open("nwchem_lammps.nw",'w')
writing_atoms = False
geometry_block = False
system_block = False
coord_pattern = r"^\s*\w{1,2}(?:\s+-?(?:\d+.?\d*|\d*.?\d+)){3}"
i = 0
while True:
line = template.readline()
if not line: break
if geometry_block and re.search("system crystal",line):
system_block = True
if geometry_block and not system_block and not re.match("#",line) and re.search("end",line):
geometry_block = False
if os.path.exists("nwchem_lammps.movecs"):
append = "\nnwpw\n vectors input nwchem_lammps.movecs\nend\n"
line = line + append
if system_block and re.search("end",line):
system_block = False
if geometry_block and not re.match("#",line) and re.search(coord_pattern,line):
x = coords[3*i+0] / box[0]
y = coords[3*i+1] / box[1]
z = coords[3*i+2] / box[2]
coord_string = " %g %g %g \n" % (x,y,z)
atom_string = line.split()[0]
line = atom_string + coord_string
i += 1
if re.search("geometry",line) and not re.match("#",line):
geometry_block = True
print(line,file=new_input,end='')
new_input.close()
# -------------------------------------
# read a NWChem output nwchem_lammps.out file for planewave calculation
def nwchem_read_pw(log):
nw_output = open(log, 'r')
eout = 0.0
sout = []
fout = []
reading_forces = False
while True:
line = nw_output.readline()
if not line: break
# pattern match for energy
if re.search("PSPW energy",line):
eout = float(line.split()[4])
# pattern match for forces
if re.search("C\.O\.M", line):
reading_forces = False
if reading_forces:
forces = line.split()
fout += [float(forces[3]), float(forces[4]), float(forces[5])]
if re.search("Ion Forces",line):
reading_forces = True
# pattern match for stress
if re.search("=== total gradient ===",line):
stensor = []
for i in range(3):
line = nw_output.readline()
line = line.replace("S ="," ")
stress = line.split()
stensor += [float(stress[1]), float(stress[2]), float(stress[3])]
sxx = stensor[0]
syy = stensor[4]
szz = stensor[8]
sxy = 0.5 * (float(stensor[1]) + float(stensor[3]))
sxz = 0.5 * (stensor[2] + stensor[6])
syz = 0.5 * (stensor[5] + stensor[7])
sout = [sxx,syy,szz,sxy,sxz,syz]
# convert units
hartree2eV = 27.21138602
bohr2angstrom = 0.52917721092
austress2bar = 294210156.97
eout = eout * hartree2eV
fout = [i * hartree2eV/bohr2angstrom for i in fout]
sout = [i * austress2bar for i in sout]
return eout,fout,sout
# -------------------------------------
# main program
# command-line args
#
if len(sys.argv) != 4:
print("Syntax: python nwchem_wrap.py file/zmq ao/pw input_template")
sys.exit(1)
comm_mode = sys.argv[1]
basis_type = sys.argv[2]
input_template = sys.argv[3]
if comm_mode == "file": cs = CSlib(1,comm_mode,"tmp.couple",None)
elif comm_mode == "zmq": cs = CSlib(1,comm_mode,"*:5555",None)
else:
print("Syntax: python nwchem_wrap.py file/zmq")
sys.exit(1)
natoms = 0
box = []
if basis_type == "ao":
natoms = nwchem_setup_ao(input_template)
elif basis_type == "pw":
natoms,box = nwchem_setup_pw(input_template)
# initial message for AIMD protocol
msgID,nfield,fieldID,fieldtype,fieldlen = cs.recv()
if msgID != 0: error("Bad initial client/server handshake")
protocol = cs.unpack_string(1)
if protocol != "md": error("Mismatch in client/server protocol")
cs.send(0,0)
# endless server loop
i = 0
if not os.path.exists("nwchem_logs"):
os.mkdir("nwchem_logs")
while 1:
# recv message from client
# msgID = 0 = all-done message
msgID,nfield,fieldID,fieldtype,fieldlen = cs.recv()
if msgID < 0: break
# SETUP receive at beginning of each run
# required fields: DIM, PERIODICITY, ORIGIN, BOX,
# NATOMS, COORDS
# optional fields: others in enum above, but NWChem ignores them
if msgID == SETUP:
origin = []
box_lmp = []
natoms_recv = ntypes_recv = 0
types = []
coords = []
for field in fieldID:
if field == DIM:
dim = cs.unpack_int(DIM)
if dim != 3: error("NWChem only performs 3d simulations")
elif field == PERIODICITY:
periodicity = cs.unpack(PERIODICITY,1)
if basis_type == "ao":
if periodicity[0] or periodicity[1] or periodicity[2]:
error("NWChem AO basis wrapper only currently supports fully aperiodic systems")
elif basis_type == "pw":
if not periodicity[0] or not periodicity[1] or not periodicity[2]:
error("NWChem PW basis wrapper only currently supports fully periodic systems")
elif field == ORIGIN:
origin = cs.unpack(ORIGIN,1)
elif field == BOX:
box_lmp = cs.unpack(BOX,1)
if (basis_type == "pw"):
if (box[0] != box_lmp[0] or box[1] != box_lmp[4] or box[2] != box_lmp[8]):
error("NWChem wrapper mismatch in box dimensions")
elif field == NATOMS:
natoms_recv = cs.unpack_int(NATOMS)
if natoms != natoms_recv:
error("NWChem wrapper mismatch in number of atoms")
elif field == COORDS:
coords = cs.unpack(COORDS,1)
if not origin or not box_lmp or not natoms or not coords:
error("Required NWChem wrapper setup field not received");
# STEP receive at each timestep of run or minimization
# required fields: COORDS
# optional fields: ORIGIN, BOX
elif msgID == STEP:
coords = []
for field in fieldID:
if field == COORDS:
coords = cs.unpack(COORDS,1)
if not coords: error("Required NWChem wrapper step field not received");
else: error("NWChem wrapper received unrecognized message")
# unpack coords from client
# create NWChem input
if basis_type == "ao":
nwchem_input_write_ao(input_template,coords)
elif basis_type == "pw":
nwchem_input_write_pw(input_template,coords,box)
# invoke NWChem
i += 1
log = "nwchem_lammps.out"
archive = "nwchem_logs/nwchem_lammps" + str(i) + ".out"
cmd = nwchemcmd + log
print("\nLaunching NWChem ...")
print(cmd)
subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True)
shutil.copyfile(log,archive)
# process NWChem output
if basis_type == "ao":
energy,forces = nwchem_read_ao(natoms,log)
virial = [0,0,0,0,0,0]
elif basis_type == "pw":
energy,forces,virial = nwchem_read_pw(log)
# return forces, energy to client
cs.send(msgID,3)
cs.pack(FORCES,4,3*natoms,forces)
cs.pack_double(ENERGY,energy)
cs.pack(VIRIAL,4,6,virial)
# final reply to client
cs.send(0,0)
# clean-up
del cs

View File

@ -0,0 +1,15 @@
LAMMPS W data file
2 atoms
1 atom types
0.0 3.16 xlo xhi
0.0 3.16 ylo yhi
0.0 3.16 zlo zhi
Atoms
1 1 0.000 0.000 0.000
2 1 1.58 1.58 1.58

View File

@ -0,0 +1,34 @@
# small W unit cell for use with NWChem
variable mode index file
if "${mode} == file" then &
"message client md file tmp.couple" &
elif "${mode} == zmq" &
"message client md zmq localhost:5555" &
variable x index 1
variable y index 1
variable z index 1
units metal
atom_style atomic
atom_modify sort 0 0.0 map yes
read_data data.W
mass 1 183.85
replicate $x $y $z
velocity all create 300.0 87287 loop geom
neighbor 0.3 bin
neigh_modify delay 0 every 10 check no
fix 1 all nve
fix 2 all client/md
fix_modify 2 energy yes
thermo 1
run 3

View File

@ -0,0 +1,76 @@
LAMMPS (18 Sep 2018)
# small W unit cell for use with NWChem
variable mode index file
if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555"
message client md file tmp.couple
variable x index 1
variable y index 1
variable z index 1
units metal
atom_style atomic
atom_modify sort 0 0.0 map yes
read_data data.W
orthogonal box = (0 0 0) to (3.16 3.16 3.16)
1 by 1 by 1 MPI processor grid
reading atoms ...
2 atoms
mass 1 183.85
replicate $x $y $z
replicate 1 $y $z
replicate 1 1 $z
replicate 1 1 1
orthogonal box = (0 0 0) to (3.16 3.16 3.16)
1 by 1 by 1 MPI processor grid
2 atoms
Time spent = 0.000187325 secs
velocity all create 300.0 87287 loop geom
neighbor 0.3 bin
neigh_modify delay 0 every 10 check no
fix 1 all nve
fix 2 all client/md
fix_modify 2 energy yes
thermo 1
run 3
Per MPI rank memory allocation (min/avg/max) = 1.8 | 1.8 | 1.8 Mbytes
Step Temp E_pair E_mol TotEng Press
0 300 0 0 -549.75686 36815830
1 300 0 0 -549.75686 36815830
2 300 0 0 -549.75686 36815830
3 300 0 0 -549.75686 36815830
Loop time of 0.400933 on 1 procs for 3 steps with 2 atoms
Performance: 0.646 ns/day, 37.123 hours/ns, 7.483 timesteps/s
0.1% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 4.755e-06 | 4.755e-06 | 4.755e-06 | 0.0 | 0.00
Output | 0.00010114 | 0.00010114 | 0.00010114 | 0.0 | 0.03
Modify | 0.40082 | 0.40082 | 0.40082 | 0.0 | 99.97
Other | | 1.232e-05 | | | 0.00
Nlocal: 2 ave 2 max 2 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 7 ave 7 max 7 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0
Neighbor list builds = 0
Dangerous builds not checked
Total wall time: 0:00:09

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,28 @@
echo
#**** Enter the geometry using fractional coordinates ****
geometry units angstrom noautosym
system crystal
lat_a 3.16d0
lat_b 3.16d0
lat_c 3.16d0
end
W 0.0 0.0 0.0
W 0.5 0.5 0.5
end
#***** setup the nwpw gamma point code ****
nwpw
simulation_cell
ngrid 16 16 16
end
ewald_ncut 8
mulliken
lcao #old default
end
nwpw
tolerances 1.0d-9 1.0d-9
end
task pspw stress