FIST: add silicon EIP Stillinger-Weber and Tersoff models (#5095)

Co-authored-by: Thomas D. Kuehne <tkuehne@cp2k.org>
This commit is contained in:
Dynamics of Condensed Matter 2026-04-25 15:11:05 +02:00 committed by GitHub
parent 7ab56ede36
commit e887d2c5ab
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 2544 additions and 68 deletions

View file

@ -44,7 +44,8 @@ MODULE bibliography
VandeVondele2007, Ortiz1994, Becke1988, Perdew1996, Zhang1998, &
Perdew2008, Lee1988, Heyd2006, Vydrov2006, Heyd2003, Heyd2004, &
Vosko1980, Aguado2003, Essmann1995, Ewald1921, Darden1993, &
Siepmann1995, Tersoff1988, Tosi1964a, Tosi1964b, Yamada2000, &
Bazant1996, Bazant1997, Goedecker2002, Lenosky2000, Siepmann1995, &
Stillinger1985, Tersoff1988, Tosi1964a, Tosi1964b, Yamada2000, &
Dudarev1997, Dudarev1998, Dewar1977, Dewar1985, Rocha2006, &
Stewart1989, Thiel1992, Repasky2002, Stewart2007, Weber2008, &
Hunt2003, Guidon2008, Elber1987, Jonsson1998, Jonsson2000_1, &
@ -327,12 +328,43 @@ CONTAINS
source="J. Phys. Chem. Solids", volume="25", pages="45-52", &
year=1964, doi="10.1016/0022-3697(64)90160-X")
CALL add_reference(key=Stillinger1985, &
authors=s2a("F. H. Stillinger", "T. A. Weber"), &
title="Computer simulation of local order in condensed phases of silicon", &
source="Phys. Rev. B", volume="31", pages="5262-5271", &
year=1985, doi="10.1103/PhysRevB.31.5262")
CALL add_reference(key=Tersoff1988, &
authors=s2a("J. Tersoff"), &
title="Empirical interatomic potential for silicon with improved elastic properties", &
source="Phys. Rev. B", volume="38", pages="9902-9905", &
year=1988, doi="10.1103/PhysRevB.38.9902")
CALL add_reference(key=Bazant1996, &
authors=s2a("M. Z. Bazant", "E. Kaxiras"), &
title="Modeling of covalent bonding in solids by inversion of cohesive energy curves", &
source="Phys. Rev. Lett.", volume="77", pages="4370-4373", &
year=1996, doi="10.1103/PhysRevLett.77.4370")
CALL add_reference(key=Bazant1997, &
authors=s2a("M. Z. Bazant", "E. Kaxiras", "J. F. Justo"), &
title="Environment-dependent interatomic potential for bulk silicon", &
source="Phys. Rev. B", volume="56", pages="8542-8552", &
year=1997, doi="10.1103/PhysRevB.56.8542")
CALL add_reference(key=Lenosky2000, &
authors=s2a("T. J. Lenosky", "B. Sadigh", "E. Alonso", "V. V. Bulatov", &
"T. Diaz de la Rubia", "J. Kim", "A. F. Voter", "J. D. Kress"), &
title="Highly optimized empirical potential model of silicon", &
source="Model. Simul. Mater. Sci. Eng.", volume="8", pages="825-841", &
year=2000, doi="10.1088/0965-0393/8/6/305")
CALL add_reference(key=Goedecker2002, &
authors=s2a("S. Goedecker"), &
title="Optimization and parallelization of a force field for silicon using OpenMP", &
source="Comput. Phys. Commun.", volume="148", pages="124-135", &
year=2002, doi="10.1016/S0010-4655(02)00466-6")
CALL add_reference(key=Siepmann1995, &
authors=s2a("J. I. Siepmann", "M. Sprik"), &
title="Influence of surface topology and electrostatic potential on water/electrode systems ", &

View file

@ -9,7 +9,7 @@
!> \brief Methods and functions on the EIP environment
!> \par History
!> 03.2006 initial create [tdk]
!> \author Thomas D. Kuehne (tkuehne@phys.chem.ethz.ch)
!> \author Thomas D. Kuehne (tkuehne@cp2k.org)
! **************************************************************************************************
MODULE eip_environment
USE atomic_kind_types, ONLY: atomic_kind_type,&
@ -60,7 +60,7 @@ CONTAINS
!> \param subsys_section ...
!> \par History
!> 03.2006 initial create [tdk]
!> \author Thomas D. Kuehne (tkuehne@phys.chem.ethz.ch)
!> \author Thomas D. Kuehne (tkuehne@cp2k.org)
! **************************************************************************************************
SUBROUTINE eip_init(eip_env, root_section, para_env, force_env_section, &
subsys_section)
@ -107,7 +107,7 @@ CONTAINS
!> \param subsys_section ...
!> \par History
!> 03.2006 initial create [tdk]
!> \author Thomas D. Kuehne (tkuehne@phys.chem.ethz.ch)
!> \author Thomas D. Kuehne (tkuehne@cp2k.org)
! **************************************************************************************************
SUBROUTINE eip_init_subsys(eip_env, subsys, subsys_section)
TYPE(eip_environment_type), POINTER :: eip_env
@ -186,7 +186,7 @@ CONTAINS
!> \param eip_env The eip environment to retain
!> \par History
!> 03.2006 initial create [tdk]
!> \author Thomas D. Kuehne (tkuehne@phys.chem.ethz.ch)
!> \author Thomas D. Kuehne (tkuehne@cp2k.org)
! **************************************************************************************************
SUBROUTINE eip_init_model(eip_env)
TYPE(eip_environment_type), POINTER :: eip_env

View file

@ -9,7 +9,7 @@
!> \brief The environment for the empirical interatomic potential methods.
!> \par History
!> 03.2006 initial create [tdk]
!> \author Thomas D. Kuehne (tkuehne@phys.chem.ethz.ch)
!> \author Thomas D. Kuehne (tkuehne@cp2k.org)
! **************************************************************************************************
MODULE eip_environment_types
USE atomic_kind_list_types, ONLY: atomic_kind_list_create,&
@ -78,7 +78,7 @@ MODULE eip_environment_types
!> \param virial Dummy virial pointer
!> \par History
!> 03.2006 initial create [tdk]
!> \author Thomas D. Kuehne (tkuehne@phys.chem.ethz.ch)
!> \author Thomas D. Kuehne (tkuehne@cp2k.org)
! **************************************************************************************************
TYPE eip_environment_type
INTEGER :: eip_model = 0
@ -104,7 +104,7 @@ CONTAINS
!> \param eip_env The eip environment to release
!> \par History
!> 03.2006 initial create [tdk]
!> \author Thomas D. Kuehne (tkuehne@phys.chem.ethz.ch)
!> \author Thomas D. Kuehne (tkuehne@cp2k.org)
! **************************************************************************************************
SUBROUTINE eip_env_release(eip_env)
@ -162,7 +162,7 @@ CONTAINS
!> eip_environment_type
!> \par History
!> 03.2006 initial create [tdk]
!> \author Thomas D. Kuehne (tkuehne@phys.chem.ethz.ch)
!> \author Thomas D. Kuehne (tkuehne@cp2k.org)
! **************************************************************************************************
SUBROUTINE eip_env_get(eip_env, eip_model, eip_energy, eip_energy_var, &
eip_forces, coord_avg, coord_var, count, subsys, &
@ -265,7 +265,7 @@ CONTAINS
!> \param eip_potential_energy The EIP potential energy
!> \par History
!> 03.2006 initial create [tdk]
!> \author Thomas D. Kuehne (tkuehne@phys.chem.ethz.ch)
!> \author Thomas D. Kuehne (tkuehne@cp2k.org)
!> \note
!> For possible missing arguments see the attributes of eip_environment_type
! **************************************************************************************************
@ -367,7 +367,7 @@ CONTAINS
!> \param eip_env The eip environment to be reinitialized
!> \par History
!> 03.2006 initial create [tdk]
!> \author Thomas D. Kuehne (tkuehne@phys.chem.ethz.ch)
!> \author Thomas D. Kuehne (tkuehne@cp2k.org)
! **************************************************************************************************
SUBROUTINE eip_env_clear(eip_env)
@ -403,7 +403,7 @@ CONTAINS
!> \param eip_env The eip environment to be created
!> \par History
!> 03.2006 initial create [tdk]
!> \author Thomas D. Kuehne (tkuehne@phys.chem.ethz.ch)
!> \author Thomas D. Kuehne (tkuehne@cp2k.org)
! **************************************************************************************************
SUBROUTINE eip_env_create(eip_env)

File diff suppressed because it is too large Load diff

View file

@ -60,7 +60,9 @@ MODULE force_env_methods
USE cp_units, ONLY: cp_unit_from_cp2k
USE eip_environment_types, ONLY: eip_environment_type
USE eip_silicon, ONLY: eip_bazant,&
eip_lenosky
eip_lenosky,&
eip_stillinger_weber,&
eip_tersoff
USE embed_types, ONLY: embed_env_type,&
opt_dmfet_pot_type,&
opt_embed_pot_type
@ -87,7 +89,8 @@ MODULE force_env_methods
USE grrm_utils, ONLY: write_grrm
USE input_constants, ONLY: &
debug_run, dfet, dmfet, mix_cdft, mix_coupled, mix_generic, mix_linear_combination, &
mix_minimum, mix_restrained, mixed_cdft_serial, use_bazant_eip, use_lenosky_eip
mix_minimum, mix_restrained, mixed_cdft_serial, use_bazant_eip, use_lenosky_eip, &
use_stillinger_weber_eip, use_tersoff_eip
USE input_section_types, ONLY: section_vals_get_subs_vals,&
section_vals_retain,&
section_vals_type,&
@ -271,11 +274,18 @@ CONTAINS
e_gap = force_env%pwdft_env%energy%band_gap
e_entropy = force_env%pwdft_env%energy%entropy
CASE (use_eip_force)
IF (force_env%eip_env%eip_model == use_lenosky_eip) THEN
SELECT CASE (force_env%eip_env%eip_model)
CASE (use_lenosky_eip)
CALL eip_lenosky(force_env%eip_env)
ELSE IF (force_env%eip_env%eip_model == use_bazant_eip) THEN
CASE (use_bazant_eip)
CALL eip_bazant(force_env%eip_env)
END IF
CASE (use_stillinger_weber_eip)
CALL eip_stillinger_weber(force_env%eip_env)
CASE (use_tersoff_eip)
CALL eip_tersoff(force_env%eip_env)
CASE DEFAULT
CPABORT("Unknown EIP model.")
END SELECT
CASE (use_qmmm)
CALL qmmm_calc_energy_force(force_env%qmmm_env, &
calculate_forces, energy_consistency, linres=linres_run)

View file

@ -725,7 +725,9 @@ MODULE input_constants
! EIP models
INTEGER, PARAMETER, PUBLIC :: use_bazant_eip = 1, &
use_lenosky_eip = 2
use_lenosky_eip = 2, &
use_stillinger_weber_eip = 3, &
use_tersoff_eip = 4
! ddapc restraint forms
INTEGER, PARAMETER, PUBLIC :: do_ddapc_restraint = 773, &

View file

@ -9,14 +9,22 @@
!> \brief Creates the EIP section of the input
!> \par History
!> 03.2006 created
!> \author Thomas D. Kuehne (tkuehne@phys.chem.ethz.ch)
!> \author Thomas D. Kuehne (tkuehne@cp2k.org)
! **************************************************************************************************
MODULE input_cp2k_eip
USE bibliography, ONLY: Bazant1996,&
Bazant1997,&
Goedecker2002,&
Lenosky2000,&
Stillinger1985,&
Tersoff1988
USE cp_output_handling, ONLY: cp_print_key_section_create,&
high_print_level,&
medium_print_level
USE input_constants, ONLY: use_bazant_eip,&
use_lenosky_eip
use_lenosky_eip,&
use_stillinger_weber_eip,&
use_tersoff_eip
USE input_keyword_types, ONLY: keyword_create,&
keyword_release,&
keyword_type
@ -44,7 +52,7 @@ CONTAINS
!> \param section the section to create
!> \par History
!> 03.2006 created
!> \author Thomas D. Kuehne (tkuehne@phys.chem.ethz.ch)
!> \author Thomas D. Kuehne (tkuehne@cp2k.org)
! **************************************************************************************************
SUBROUTINE create_eip_section(section)
TYPE(section_type), POINTER :: section
@ -58,19 +66,30 @@ CONTAINS
CALL section_create(section, __LOCATION__, name="EIP", &
description="This section contains all information to run an "// &
"Empirical Interatomic Potential (EIP) calculation.", &
n_keywords=1, n_subsections=1, repeats=.FALSE.)
n_keywords=1, n_subsections=1, repeats=.FALSE., &
citations=[Bazant1996, Bazant1997, Goedecker2002, Lenosky2000, &
Stillinger1985, Tersoff1988])
NULLIFY (subsection, keyword)
CALL keyword_create(keyword, __LOCATION__, name="EIP_MODEL", &
description="Selects the empirical interaction potential model", &
description="Selects the empirical interaction potential model. "// &
"EDIP is accepted as an alias of BAZANT and uses the identical "// &
"implementation. EIP is currently supported only for a single "// &
"MPI rank. BAZANT and LENOSKY retain OpenMP parallelization, "// &
"while STILLINGER_WEBER and TERSOFF currently run without "// &
"OpenMP parallelization.", &
usage="EIP_MODEL BAZANT", type_of_var=enum_t, &
n_var=1, repeats=.FALSE., variants=["EIP-MODEL"], &
enum_c_vals=s2a("BAZANT", "EDIP", "LENOSKY"), &
enum_i_vals=[use_bazant_eip, use_bazant_eip, use_lenosky_eip], &
enum_c_vals=s2a("BAZANT", "EDIP", "LENOSKY", &
"STILLINGER_WEBER", "TERSOFF"), &
enum_i_vals=[use_bazant_eip, use_bazant_eip, use_lenosky_eip, &
use_stillinger_weber_eip, use_tersoff_eip], &
enum_desc=s2a("Bazant potentials", &
"Environment-Dependent Interatomic Potential", &
"Lenosky potentials"), &
"Lenosky potentials", &
"Stillinger-Weber potentials", &
"Tersoff potentials"), &
default_i_val=use_lenosky_eip)
CALL section_add_keyword(section, keyword)
CALL keyword_release(keyword)
@ -86,7 +105,7 @@ CONTAINS
!> \param section the section to create
!> \par History
!> 03.2006 created
!> \author Thomas D. Kuehne (tkuehne@phys.chem.ethz.ch)
!> \author Thomas D. Kuehne (tkuehne@cp2k.org)
! **************************************************************************************************
SUBROUTINE create_eip_print_section(section)
TYPE(section_type), POINTER :: section

View file

@ -0,0 +1,30 @@
&GLOBAL
PRINT_LEVEL LOW
PROJECT Si_1000
RUN_TYPE MD
&END GLOBAL
&MOTION
&MD
ENSEMBLE NVE
STEPS 10
TEMPERATURE 300.0
TIMESTEP 1.0
&END MD
&END MOTION
&FORCE_EVAL
METHOD EIP
&EIP
EIP_MODEL BAZANT
&END EIP
&SUBSYS
&CELL
ABC 27.1550 27.1550 27.1550
&END CELL
&TOPOLOGY
COORD_FILE_FORMAT XYZ
COORD_FILE_NAME ../sample_xyz/Si_1000.xyz
&END TOPOLOGY
&END SUBSYS
&END FORCE_EVAL

View file

@ -0,0 +1,30 @@
&GLOBAL
PRINT_LEVEL LOW
PROJECT Si_1000_Lenosky
RUN_TYPE MD
&END GLOBAL
&MOTION
&MD
ENSEMBLE NVE
STEPS 10
TEMPERATURE 300.0
TIMESTEP 1.0
&END MD
&END MOTION
&FORCE_EVAL
METHOD EIP
&EIP
EIP_MODEL LENOSKY
&END EIP
&SUBSYS
&CELL
ABC 27.1550 27.1550 27.1550
&END CELL
&TOPOLOGY
COORD_FILE_FORMAT XYZ
COORD_FILE_NAME ../sample_xyz/Si_1000.xyz
&END TOPOLOGY
&END SUBSYS
&END FORCE_EVAL

View file

@ -0,0 +1,30 @@
&GLOBAL
PRINT_LEVEL LOW
PROJECT Si_1000_SW
RUN_TYPE MD
&END GLOBAL
&MOTION
&MD
ENSEMBLE NVE
STEPS 10
TEMPERATURE 300.0
TIMESTEP 1.0
&END MD
&END MOTION
&FORCE_EVAL
METHOD EIP
&EIP
EIP_MODEL STILLINGER_WEBER
&END EIP
&SUBSYS
&CELL
ABC 27.1550 27.1550 27.1550
&END CELL
&TOPOLOGY
COORD_FILE_FORMAT XYZ
COORD_FILE_NAME ../sample_xyz/Si_1000.xyz
&END TOPOLOGY
&END SUBSYS
&END FORCE_EVAL

View file

@ -0,0 +1,30 @@
&GLOBAL
PRINT_LEVEL LOW
PROJECT Si_1000_Tersoff
RUN_TYPE MD
&END GLOBAL
&MOTION
&MD
ENSEMBLE NVE
STEPS 10
TEMPERATURE 300.0
TIMESTEP 1.0
&END MD
&END MOTION
&FORCE_EVAL
METHOD EIP
&EIP
EIP_MODEL TERSOFF
&END EIP
&SUBSYS
&CELL
ABC 27.1550 27.1550 27.1550
&END CELL
&TOPOLOGY
COORD_FILE_FORMAT XYZ
COORD_FILE_NAME ../sample_xyz/Si_1000.xyz
&END TOPOLOGY
&END SUBSYS
&END FORCE_EVAL

View file

@ -5,7 +5,10 @@
# for details see cp2k/tools/do_regtest
#
# EIP
"Si_1000.inp" = [{matcher="M002", tol=1.0E-14, ref=-0.170183162315E+03}]
"Si_1000_bazant.inp" = [{matcher="M002", tol=1.0E-14, ref=-0.170183162315E+03}]
"Si_1000_lenosky.inp" = [{matcher="M002", tol=1.0E-14, ref=-0.780798471651E+02}]
"Si_1000_stillinger_weber.inp" = [{matcher="M002", tol=1.0E-14, ref=-0.158634664291E+03}]
"Si_1000_tersoff.inp" = [{matcher="M002", tol=1.0E-14, ref=-0.169526339303E+03}]
# CHARMM INTRA Forces Test
"pot_input.inp" = [{matcher="M002", tol=1.0E-14, ref=0.427871243040E-01}]
"pot_bond.inp" = [{matcher="M002", tol=1.0E-14, ref=0.183201063777E-01}]

View file

@ -1,28 +1,5 @@
&GLOBAL
PRINT_LEVEL LOW
PROJECT Si_1000
RUN_TYPE MD
&END GLOBAL
&MOTION
&MD
ENSEMBLE NVE
STEPS 10
TEMPERATURE 300.0
TIMESTEP 1.0
&END MD
&END MOTION
&FORCE_EVAL
METHOD EIP
&EIP
EIP_MODEL BAZANT
&END EIP
&SUBSYS
&CELL
ABC 27.1550 27.1550 27.1550
&END CELL
&COORD
1000
Si 1000 atom diamond supercell for EIP regtests
Si 0.000000 0.000000 0.000000
Si 0.000000 2.715500 2.715500
Si 2.715500 0.000000 2.715500
@ -1023,6 +1000,3 @@
Si 25.797250 25.797250 23.081750
Si 25.797250 23.081750 25.797250
Si 23.081750 25.797250 25.797250
&END COORD
&END SUBSYS
&END FORCE_EVAL