Merge pull request #3278 from yury-lysogorskiy/feature/ml-pace-multispecies

ML_PACE package hybrid support and small updates
This commit is contained in:
Axel Kohlmeyer
2022-06-02 19:27:53 -04:00
committed by GitHub
6 changed files with 91 additions and 75 deletions

View File

@ -24,6 +24,24 @@ function(validate_option name values)
endif() endif()
endfunction(validate_option) endfunction(validate_option)
# helper function for getting the most recently modified file or folder from a glob pattern
function(get_newest_file path variable)
file(GLOB _dirs ${path})
set(_besttime 2000-01-01T00:00:00)
set(_bestfile "<unknown>")
foreach(_dir ${_dirs})
file(TIMESTAMP ${_dir} _newtime)
if(_newtime IS_NEWER_THAN _besttime)
set(_bestfile ${_dir})
set(_besttime ${_newtime})
endif()
endforeach()
if(_bestfile STREQUAL "<unknown>")
message(FATAL_ERROR "Could not find valid path at: ${path}")
endif()
set(${variable} ${_bestfile} PARENT_SCOPE)
endfunction()
function(get_lammps_version version_header variable) function(get_lammps_version version_header variable)
file(STRINGS ${version_header} line REGEX LAMMPS_VERSION) file(STRINGS ${version_header} line REGEX LAMMPS_VERSION)
set(MONTHS x Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) set(MONTHS x Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)

View File

@ -1,6 +1,6 @@
set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.10.25.fix.tar.gz" CACHE STRING "URL for PACE evaluator library sources") set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.10.25.fix2.tar.gz" CACHE STRING "URL for PACE evaluator library sources")
set(PACELIB_MD5 "e0572de57039d4afedefb25707b6ceae" CACHE STRING "MD5 checksum of PACE evaluator library tarball") set(PACELIB_MD5 "32394d799bc282bb57696c78c456e64f" CACHE STRING "MD5 checksum of PACE evaluator library tarball")
mark_as_advanced(PACELIB_URL) mark_as_advanced(PACELIB_URL)
mark_as_advanced(PACELIB_MD5) mark_as_advanced(PACELIB_MD5)
@ -13,8 +13,8 @@ execute_process(
COMMAND ${CMAKE_COMMAND} -E tar xzf libpace.tar.gz COMMAND ${CMAKE_COMMAND} -E tar xzf libpace.tar.gz
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
) )
get_newest_file(${CMAKE_BINARY_DIR}/lammps-user-pace-* lib-pace)
file(GLOB lib-pace ${CMAKE_BINARY_DIR}/lammps-user-pace-*)
# enforce building libyaml-cpp as static library and turn off optional features # enforce building libyaml-cpp as static library and turn off optional features
set(YAML_BUILD_SHARED_LIBS OFF) set(YAML_BUILD_SHARED_LIBS OFF)
set(YAML_CPP_BUILD_CONTRIB OFF) set(YAML_CPP_BUILD_CONTRIB OFF)

View File

@ -1,36 +1,36 @@
# simple test of fcc Cu with ACE product # simple test of fcc Cu with ACE product
units metal units metal
atom_style atomic atom_style atomic
neighbor 0.3 bin neighbor 0.3 bin
neigh_modify every 2 delay 10 check yes neigh_modify every 2 delay 10 check yes
variable a equal 3.597 variable a equal 3.597
lattice fcc $a lattice fcc $a
region box block 0 4 0 4 0 4 region box block 0 4 0 4 0 4
create_box 1 box create_box 1 box
create_atoms 1 box create_atoms 1 box
mass 1 26.98 mass 1 26.98
pair_style pace product pair_style pace product
pair_coeff * * Cu-PBE-core-rep.ace Cu pair_coeff * * Cu-PBE-core-rep.ace Cu
velocity all create 300 8728 loop geom velocity all create 300 8728 loop geom
timestep 0.0005 timestep 0.0005
fix 1 all nve fix 1 all nve
compute eatom all pe/atom compute eatom all pe/atom
compute energy all reduce sum c_eatom compute energy all reduce sum c_eatom
variable delenergy equal c_energy-pe variable delenergy equal c_energy-pe
compute satom all stress/atom NULL compute satom all stress/atom NULL
compute str all reduce sum c_satom[1] c_satom[2] c_satom[3] compute str all reduce sum c_satom[1] c_satom[2] c_satom[3]
variable delpress equal -(c_str[1]+c_str[2]+c_str[3])/(3*vol)-press variable delpress equal -(c_str[1]+c_str[2]+c_str[3])/(3*vol)-press
thermo 10 thermo 10
thermo_style custom step temp epair etotal press v_delenergy v_delpress thermo_style custom step temp epair etotal press v_delenergy v_delpress
run 100 run 100

View File

@ -1,36 +1,36 @@
# simple test of fcc Cu with ACE recursive # simple test of fcc Cu with ACE recursive
units metal units metal
atom_style atomic atom_style atomic
neighbor 0.3 bin neighbor 0.3 bin
neigh_modify every 2 delay 10 check yes neigh_modify every 2 delay 10 check yes
variable a equal 3.597 variable a equal 3.597
lattice fcc $a lattice fcc $a
region box block 0 4 0 4 0 4 region box block 0 4 0 4 0 4
create_box 1 box create_box 1 box
create_atoms 1 box create_atoms 1 box
mass 1 26.98 mass 1 26.98
pair_style pace recursive pair_style pace recursive
pair_coeff * * Cu-PBE-core-rep.ace Cu pair_coeff * * Cu-PBE-core-rep.ace Cu
velocity all create 300 8728 loop geom velocity all create 300 8728 loop geom
timestep 0.0005 timestep 0.0005
fix 1 all nve fix 1 all nve
compute eatom all pe/atom compute eatom all pe/atom
compute energy all reduce sum c_eatom compute energy all reduce sum c_eatom
variable delenergy equal c_energy-pe variable delenergy equal c_energy-pe
compute satom all stress/atom NULL compute satom all stress/atom NULL
compute str all reduce sum c_satom[1] c_satom[2] c_satom[3] compute str all reduce sum c_satom[1] c_satom[2] c_satom[3]
variable delpress equal -(c_str[1]+c_str[2]+c_str[3])/(3*vol)-press variable delpress equal -(c_str[1]+c_str[2]+c_str[3])/(3*vol)-press
thermo 10 thermo 10
thermo_style custom step temp epair etotal press v_delenergy v_delpress thermo_style custom step temp epair etotal press v_delenergy v_delpress
run 100 run 100

View File

@ -15,7 +15,7 @@ from install_helpers import fullpath, geturl, checkmd5sum
# settings # settings
thisdir = fullpath('.') thisdir = fullpath('.')
version = 'v.2021.10.25.fix' version = 'v.2021.10.25.fix2'
# known checksums for different PACE versions. used to validate the download. # known checksums for different PACE versions. used to validate the download.
checksums = { \ checksums = { \
@ -23,7 +23,8 @@ checksums = { \
'v.2021.4.9' : '4db54962fbd6adcf8c18d46e1798ceb5', 'v.2021.4.9' : '4db54962fbd6adcf8c18d46e1798ceb5',
'v.2021.9.28' : 'f98363bb98adc7295ea63974738c2a1b', 'v.2021.9.28' : 'f98363bb98adc7295ea63974738c2a1b',
'v.2021.10.25' : 'a2ac3315c41a1a4a5c912bcb1bc9c5cc', 'v.2021.10.25' : 'a2ac3315c41a1a4a5c912bcb1bc9c5cc',
'v.2021.10.25.fix': 'e0572de57039d4afedefb25707b6ceae' 'v.2021.10.25.fix': 'e0572de57039d4afedefb25707b6ceae',
'v.2021.10.25.fix2': '32394d799bc282bb57696c78c456e64f'
} }

View File

@ -146,18 +146,8 @@ void PairPACE::compute(int eflag, int vflag)
// the pointer to the list of neighbors of "i" // the pointer to the list of neighbors of "i"
firstneigh = list->firstneigh; firstneigh = list->firstneigh;
if (inum != nlocal) error->all(FLERR, "inum: {} nlocal: {} are different", inum, nlocal);
// Aidan Thompson told RD (26 July 2019) that practically always holds:
// inum = nlocal
// i = ilist(ii) < inum
// j = jlist(jj) < nall
// neighborlist contains neighbor atoms plus skin atoms,
// skin atoms can be removed by setting skin to zero but here
// they are disregarded anyway
//determine the maximum number of neighbours //determine the maximum number of neighbours
int max_jnum = -1; int max_jnum = 0;
int nei = 0; int nei = 0;
for (ii = 0; ii < list->inum; ii++) { for (ii = 0; ii < list->inum; ii++) {
i = ilist[ii]; i = ilist[ii];
@ -190,7 +180,7 @@ void PairPACE::compute(int eflag, int vflag)
try { try {
aceimpl->ace->compute_atom(i, x, type, jnum, jlist); aceimpl->ace->compute_atom(i, x, type, jnum, jlist);
} catch (exception &e) { } catch (std::exception &e) {
error->one(FLERR, e.what()); error->one(FLERR, e.what());
} }
@ -269,7 +259,7 @@ void PairPACE::settings(int narg, char **arg)
recursive = false; recursive = false;
iarg += 1; iarg += 1;
} else if (strcmp(arg[iarg], "chunksize") == 0) { } else if (strcmp(arg[iarg], "chunksize") == 0) {
chunksize = utils::inumeric(FLERR,arg[iarg+1],false,lmp); chunksize = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
iarg += 2; iarg += 2;
} else } else
error->all(FLERR, "Illegal pair_style command"); error->all(FLERR, "Illegal pair_style command");
@ -325,27 +315,34 @@ void PairPACE::coeff(int narg, char **arg)
const int n = atom->ntypes; const int n = atom->ntypes;
for (int i = 1; i <= n; i++) { for (int i = 1; i <= n; i++) {
char *elemname = elemtypes[i - 1]; char *elemname = arg[2 + i];
int atomic_number = AtomicNumberByName_pace(elemname); if (strcmp(elemname, "NULL") == 0) {
if (atomic_number == -1) error->all(FLERR, "'{}' is not a valid element\n", elemname); // species_type=-1 value will not reach ACE Evaluator::compute_atom,
// but if it will ,then error will be thrown there
SPECIES_TYPE mu = aceimpl->basis_set->get_species_index_by_name(elemname); aceimpl->ace->element_type_mapping(i) = -1;
if (mu != -1) { map[i] = -1;
if (comm->me == 0) if (comm->me == 0) utils::logmesg(lmp, "Skipping LAMMPS atom type #{}(NULL)\n", i);
utils::logmesg(lmp, "Mapping LAMMPS atom type #{}({}) -> ACE species type #{}\n", i,
elemname, mu);
map[i] = mu;
// set up LAMMPS atom type to ACE species mapping for ace evaluator
aceimpl->ace->element_type_mapping(i) = mu;
} else { } else {
error->all(FLERR, "Element {} is not supported by ACE-potential from file {}", elemname, int atomic_number = AtomicNumberByName_pace(elemname);
potential_file_name); if (atomic_number == -1) error->all(FLERR, "'{}' is not a valid element\n", elemname);
SPECIES_TYPE mu = aceimpl->basis_set->get_species_index_by_name(elemname);
if (mu != -1) {
if (comm->me == 0)
utils::logmesg(lmp, "Mapping LAMMPS atom type #{}({}) -> ACE species type #{}\n", i,
elemname, mu);
map[i] = mu;
// set up LAMMPS atom type to ACE species mapping for ace evaluator
aceimpl->ace->element_type_mapping(i) = mu;
} else {
error->all(FLERR, "Element {} is not supported by ACE-potential from file {}", elemname,
potential_file_name);
}
} }
} }
// initialize scale factor // initialize scale factor
for (int i = 1; i <= n; i++) { for (int i = 1; i <= n; i++) {
for (int j = i; j <= n; j++) { scale[i][j] = 1.0; } for (int j = i; j <= n; j++) scale[i][j] = 1.0;
} }
aceimpl->ace->set_basis(*aceimpl->basis_set, 1); aceimpl->ace->set_basis(*aceimpl->basis_set, 1);