mirror of
https://github.com/cp2k/cp2k.git
synced 2026-07-21 06:25:15 -04:00
2970 lines
158 KiB
Fortran
2970 lines
158 KiB
Fortran
!--------------------------------------------------------------------------------------------------!
|
|
! CP2K: A general program to perform molecular dynamics simulations !
|
|
! Copyright 2000-2026 CP2K developers group <https://cp2k.org> !
|
|
! !
|
|
! SPDX-License-Identifier: GPL-2.0-or-later !
|
|
!--------------------------------------------------------------------------------------------------!
|
|
|
|
! **************************************************************************************************
|
|
!> \brief creates the mm section of the input
|
|
!> \note
|
|
!> moved out of input_cp2k
|
|
!> \par History
|
|
!> 04.2004 created
|
|
!> \author fawzi
|
|
! **************************************************************************************************
|
|
MODULE input_cp2k_mm
|
|
USE bibliography, ONLY: &
|
|
Batatia2022, Batzner2022, Bochkarev2024, Clabaut2020, Clabaut2021, Devynck2012, Dick1958, &
|
|
Drautz2019, Foiles1986, Lysogorskiy2021, Mitchell1993, Musaelian2023, Siepmann1995, &
|
|
Tan2025, Tersoff1988, Tosi1964a, Tosi1964b, Wang2018, Yamada2000, Zeng2023
|
|
USE cp_output_handling, ONLY: cp_print_key_section_create,&
|
|
debug_print_level,&
|
|
high_print_level,&
|
|
low_print_level,&
|
|
medium_print_level,&
|
|
silent_print_level
|
|
USE cp_units, ONLY: cp_unit_to_cp2k
|
|
USE force_field_kind_types, ONLY: &
|
|
do_ff_amber, do_ff_charmm, do_ff_cubic, do_ff_fues, do_ff_g87, do_ff_g96, do_ff_harmonic, &
|
|
do_ff_legendre, do_ff_mixed_bend_stretch, do_ff_mm2, do_ff_mm3, do_ff_mm4, do_ff_morse, &
|
|
do_ff_opls, do_ff_quartic, do_ff_undef
|
|
USE fparser, ONLY: docf
|
|
USE input_constants, ONLY: use_mom_ref_coac,&
|
|
use_mom_ref_com,&
|
|
use_mom_ref_user,&
|
|
use_mom_ref_zero
|
|
USE input_cp2k_field, ONLY: create_per_efield_section
|
|
USE input_cp2k_poisson, ONLY: create_poisson_section
|
|
USE input_keyword_types, ONLY: keyword_create,&
|
|
keyword_release,&
|
|
keyword_type
|
|
USE input_section_types, ONLY: section_add_keyword,&
|
|
section_add_subsection,&
|
|
section_create,&
|
|
section_release,&
|
|
section_type
|
|
USE input_val_types, ONLY: char_t,&
|
|
integer_t,&
|
|
lchar_t,&
|
|
real_t
|
|
USE kinds, ONLY: default_string_length,&
|
|
dp
|
|
USE string_utilities, ONLY: newline,&
|
|
s2a
|
|
#include "./base/base_uses.f90"
|
|
|
|
IMPLICIT NONE
|
|
PRIVATE
|
|
|
|
LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .TRUE.
|
|
CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'input_cp2k_mm'
|
|
|
|
PUBLIC :: create_mm_section, create_dipoles_section
|
|
PUBLIC :: create_NONBONDED14_section, create_LJ_section, create_Williams_section, &
|
|
create_Goodwin_section, &
|
|
create_GENPOT_section, create_TABPOT_section, create_neighbor_lists_section
|
|
PUBLIC :: create_CHARGE_section
|
|
!***
|
|
CONTAINS
|
|
|
|
! **************************************************************************************************
|
|
!> \brief Create the input section for FIST.. Come on.. Let's get woohooo
|
|
!> \param section the section to create
|
|
!> \author teo
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_mm_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(section_type), POINTER :: subsection
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="mm", &
|
|
description="This section contains all information to run a MM calculation.", &
|
|
n_keywords=5, n_subsections=0, repeats=.FALSE.)
|
|
|
|
NULLIFY (subsection)
|
|
|
|
CALL create_forcefield_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_neighbor_lists_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_poisson_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_per_efield_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_print_mm_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
END SUBROUTINE create_mm_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief Create the print mm section
|
|
!> \param section the section to create
|
|
!> \author teo
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_print_mm_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
TYPE(section_type), POINTER :: print_key
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="print", &
|
|
description="Section of possible print options in MM code.", &
|
|
n_keywords=0, n_subsections=1, repeats=.FALSE.)
|
|
|
|
NULLIFY (print_key, keyword)
|
|
|
|
CALL cp_print_key_section_create(print_key, __LOCATION__, "DERIVATIVES", &
|
|
description="Controls the printing of derivatives.", &
|
|
print_level=high_print_level, filename="__STD_OUT__")
|
|
CALL section_add_subsection(section, print_key)
|
|
CALL section_release(print_key)
|
|
|
|
CALL cp_print_key_section_create(print_key, __LOCATION__, "EWALD_INFO", &
|
|
description="Controls the printing of Ewald energy components during the "// &
|
|
"evaluation of the electrostatics.", &
|
|
print_level=high_print_level, filename="__STD_OUT__")
|
|
CALL section_add_subsection(section, print_key)
|
|
CALL section_release(print_key)
|
|
|
|
CALL create_dipoles_section(print_key, "DIPOLE", medium_print_level)
|
|
CALL section_add_subsection(section, print_key)
|
|
CALL section_release(print_key)
|
|
|
|
CALL cp_print_key_section_create(print_key, __LOCATION__, "NEIGHBOR_LISTS", &
|
|
description="Activates the printing of the neighbor lists.", &
|
|
print_level=high_print_level, filename="", unit_str="angstrom")
|
|
CALL section_add_subsection(section, print_key)
|
|
CALL section_release(print_key)
|
|
|
|
CALL cp_print_key_section_create(print_key, __LOCATION__, "ITER_INFO", &
|
|
description="Activates the printing of iteration info during the self-consistent "// &
|
|
"calculation of a polarizable forcefield.", &
|
|
print_level=medium_print_level, filename="__STD_OUT__")
|
|
CALL section_add_subsection(section, print_key)
|
|
CALL section_release(print_key)
|
|
|
|
CALL cp_print_key_section_create(print_key, __LOCATION__, "SUBCELL", &
|
|
description="Activates the printing of the subcells used for the "// &
|
|
"generation of neighbor lists.", &
|
|
print_level=high_print_level, filename="__STD_OUT__")
|
|
CALL section_add_subsection(section, print_key)
|
|
CALL section_release(print_key)
|
|
|
|
CALL cp_print_key_section_create(print_key, __LOCATION__, "PROGRAM_BANNER", &
|
|
description="Controls the printing of the banner of the MM program", &
|
|
print_level=silent_print_level, filename="__STD_OUT__")
|
|
CALL section_add_subsection(section, print_key)
|
|
CALL section_release(print_key)
|
|
|
|
CALL cp_print_key_section_create(print_key, __LOCATION__, "PROGRAM_RUN_INFO", &
|
|
description="Controls the printing of information regarding the run.", &
|
|
print_level=low_print_level, filename="__STD_OUT__")
|
|
CALL section_add_subsection(section, print_key)
|
|
CALL section_release(print_key)
|
|
|
|
CALL cp_print_key_section_create(print_key, __LOCATION__, "FF_PARAMETER_FILE", description= &
|
|
"Controls the printing of Force Field parameter file", &
|
|
print_level=debug_print_level + 1, filename="", common_iter_levels=2)
|
|
CALL section_add_subsection(section, print_key)
|
|
CALL section_release(print_key)
|
|
|
|
CALL cp_print_key_section_create(print_key, __LOCATION__, "FF_INFO", description= &
|
|
"Controls the printing of information in the forcefield settings", &
|
|
print_level=high_print_level, filename="__STD_OUT__")
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="spline_info", &
|
|
description="if the printkey is active prints information regarding the splines"// &
|
|
" used in the nonbonded interactions", &
|
|
default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
|
|
CALL section_add_keyword(print_key, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="spline_data", &
|
|
description="if the printkey is active prints on separated files the splined function"// &
|
|
" together with the reference one. Useful to check the spline behavior.", &
|
|
default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
|
|
CALL section_add_keyword(print_key, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL section_add_subsection(section, print_key)
|
|
CALL section_release(print_key)
|
|
|
|
END SUBROUTINE create_print_mm_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief Create the forcefield section. This section is useful to set up the
|
|
!> proper force_field for FIST calculations
|
|
!> \param section the section to create
|
|
!> \author teo
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_forcefield_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
TYPE(section_type), POINTER :: subsection
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="FORCEFIELD", &
|
|
description="Section specifying information regarding how to set up properly"// &
|
|
" a force_field for the classical calculations.", &
|
|
n_keywords=2, n_subsections=2, repeats=.FALSE.)
|
|
|
|
NULLIFY (subsection, keyword)
|
|
|
|
CALL keyword_create( &
|
|
keyword, __LOCATION__, name="PARMTYPE", &
|
|
description="Define the kind of torsion potential", &
|
|
usage="PARMTYPE {OFF,CHM,G87,G96}", &
|
|
enum_c_vals=s2a("OFF", "CHM", "G87", "G96", "AMBER"), &
|
|
enum_desc=s2a("Provides force field parameters through the input file", &
|
|
"Provides force field parameters through an external file with CHARMM format", &
|
|
"Provides force field parameters through an external file with GROMOS 87 format", &
|
|
"Provides force field parameters through an external file with GROMOS 96 format", &
|
|
"Provides force field parameters through an external file with AMBER format (from v.8 on)"), &
|
|
enum_i_vals=[do_ff_undef, &
|
|
do_ff_charmm, &
|
|
do_ff_g87, &
|
|
do_ff_g96, &
|
|
do_ff_amber], &
|
|
default_i_val=do_ff_undef)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="PARM_FILE_NAME", &
|
|
description="Specifies the filename that contains the parameters of the FF.", &
|
|
usage="PARM_FILE_NAME {FILENAME}", type_of_var=lchar_t)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="VDW_SCALE14", &
|
|
description="Scaling factor for the VDW 1-4 ", &
|
|
usage="VDW_SCALE14 1.0", default_r_val=1.0_dp)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="EI_SCALE14", &
|
|
description="Scaling factor for the electrostatics 1-4 ", &
|
|
usage="EI_SCALE14 1.0", default_r_val=0.0_dp)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="SHIFT_CUTOFF", &
|
|
description="Add a constant energy shift to the real-space "// &
|
|
"non-bonding interactions (both Van der Waals and "// &
|
|
"electrostatic) such that the energy at the cutoff radius is "// &
|
|
"zero. This makes the non-bonding interactions continuous at "// &
|
|
"the cutoff.", &
|
|
usage="SHIFT_CUTOFF <LOGICAL>", default_l_val=.TRUE.)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="DO_NONBONDED", &
|
|
description="Controls the computation of all the real-space "// &
|
|
"(short-range) nonbonded interactions. This also "// &
|
|
"includes the real-space corrections for excluded "// &
|
|
"or scaled 1-2, 1-3 and 1-4 interactions. When set "// &
|
|
"to F, the neighborlists are not created and all "// &
|
|
"interactions that depend on them are not computed.", &
|
|
usage="DO_NONBONDED T", default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="DO_ELECTROSTATICS", &
|
|
description="Controls the computation of all the real-space "// &
|
|
"(short-range) electrostatics interactions. This does not "// &
|
|
"affect the QM/MM electrostatic coupling when turned off.", &
|
|
usage="DO_ELECTROSTATICS T", default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="IGNORE_MISSING_CRITICAL_PARAMS", &
|
|
description="Do not abort when critical force-field parameters "// &
|
|
"are missing. CP2K will run as if the terms containing the "// &
|
|
"missing parameters are zero.", &
|
|
usage="IGNORE_MISSING_CRITICAL_PARAMS .TRUE.", default_l_val=.FALSE., &
|
|
lone_keyword_l_val=.TRUE.)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="MULTIPLE_POTENTIAL", &
|
|
description="Enables the possibility to define NONBONDED and NONBONDED14 as a"// &
|
|
" sum of different kinds of potential. Useful for piecewise defined potentials.", &
|
|
usage="MULTIPLE_POTENTIAL T", default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
!Universal scattering potential at very short distances
|
|
CALL keyword_create(keyword, __LOCATION__, name="ZBL_SCATTERING", &
|
|
description="A short range repulsive potential is added, to simulate "// &
|
|
"collisions and scattering.", &
|
|
usage="ZBL_SCATTERING T", default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
!
|
|
! subsections
|
|
!
|
|
CALL create_SPLINE_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_NONBONDED_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_NONBONDED14_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_CHARGE_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_CHARGES_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_SHELL_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_BOND_section(subsection, "BOND")
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_BEND_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_TORSION_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_IMPROPER_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_OPBEND_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_DIPOLE_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_QUADRUPOLE_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
END SUBROUTINE create_forcefield_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the parameters for the splines
|
|
!> \param section the section to create
|
|
!> \author teo
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_SPLINE_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="SPLINE", &
|
|
description="specifies parameters to set up the splines used in the"// &
|
|
" nonboned interactions (both pair body potential and many body potential)", &
|
|
n_keywords=1, n_subsections=0, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="R0_NB", &
|
|
description="Specify the minimum value of the distance interval "// &
|
|
"that brackets the value of emax_spline.", &
|
|
usage="R0_NB <REAL>", default_r_val=cp_unit_to_cp2k(value=0.9_dp, &
|
|
unit_str="bohr"), &
|
|
unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RCUT_NB", &
|
|
description="Cutoff radius for nonbonded interactions. This value overrides"// &
|
|
" the value specified in the potential definition and is global for all potentials.", &
|
|
usage="RCUT_NB {real}", default_r_val=cp_unit_to_cp2k(value=-1.0_dp, &
|
|
unit_str="angstrom"), &
|
|
unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="EMAX_SPLINE", &
|
|
description="Specify the maximum value of the potential up to which"// &
|
|
" splines will be constructed", &
|
|
usage="EMAX_SPLINE <REAL>", &
|
|
default_r_val=0.5_dp, unit_str="hartree")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="EMAX_ACCURACY", &
|
|
description="Specify the maximum value of energy used to check the accuracy"// &
|
|
" requested through EPS_SPLINE. Energy values larger than EMAX_ACCURACY"// &
|
|
" generally do not satisfy the requested accuracy", &
|
|
usage="EMAX_ACCURACY <REAL>", default_r_val=0.02_dp, unit_str="hartree")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="EPS_SPLINE", &
|
|
description="Specify the threshold for the choice of the number of"// &
|
|
" points used in the splines (comparing the splined value with the"// &
|
|
" analytically evaluated one)", &
|
|
usage="EPS_SPLINE <REAL>", default_r_val=1.0E-7_dp, unit_str="hartree")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create( &
|
|
keyword, __LOCATION__, name="NPOINTS", &
|
|
description="Override the default search for an accurate spline by specifying a fixed number of spline points.", &
|
|
usage="NPOINTS 1024", default_i_val=-1)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="UNIQUE_SPLINE", &
|
|
description="For few potentials (Lennard-Jones) one global optimal spline is generated instead"// &
|
|
" of different optimal splines for each kind of potential", &
|
|
usage="UNIQUE_SPLINE <LOGICAL>", lone_keyword_l_val=.TRUE., default_l_val=.FALSE.)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_SPLINE_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the torsion of the MM atoms
|
|
!> \param section the section to create
|
|
!> \author teo
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_TORSION_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="TORSION", &
|
|
description="Specifies the torsion potential of the MM system.", &
|
|
n_keywords=1, n_subsections=0, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword)
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kinds involved in the tors.", &
|
|
usage="ATOMS {KIND1} {KIND2} {KIND3} {KIND4}", type_of_var=char_t, &
|
|
n_var=4)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="KIND", &
|
|
description="Define the kind of torsion potential", &
|
|
usage="KIND CHARMM", &
|
|
enum_c_vals=s2a("CHARMM", "G87", "G96", "AMBER", "OPLS"), &
|
|
enum_desc=s2a("Functional Form (CHARMM|G87|G96|AMBER): K * [ 1 + cos[M*PHI - PHI0]]", &
|
|
"Functional Form (CHARMM|G87|G96|AMBER): K * [ 1 + cos[M*PHI - PHI0]]", &
|
|
"Functional Form (CHARMM|G87|G96|AMBER): K * [ 1 + cos[M*PHI - PHI0]]", &
|
|
"Functional Form (CHARMM|G87|G96|AMBER): K * [ 1 + cos[M*PHI - PHI0]]", &
|
|
"Functional Form: K / 2 * [ 1 + (-1)^(M-1) * cos[M*PHI]]"), &
|
|
enum_i_vals=[do_ff_charmm, &
|
|
do_ff_g87, &
|
|
do_ff_g96, &
|
|
do_ff_amber, &
|
|
do_ff_opls], &
|
|
default_i_val=do_ff_charmm)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="K", &
|
|
description="Defines the force constant of the potential", &
|
|
usage="K {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="hartree")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="PHI0", &
|
|
description="Defines the phase of the potential.", &
|
|
usage="PHI0 {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="rad", default_r_val=0.0_dp)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="M", &
|
|
description="Defines the multiplicity of the potential.", &
|
|
usage="M {integer}", type_of_var=integer_t, &
|
|
n_var=1)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_TORSION_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the improper torsion of the MM atoms
|
|
!> \param section the section to create
|
|
!> \author louis vanduyfhuys
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_IMPROPER_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="IMPROPER", &
|
|
description="Specifies the improper torsion potential of the MM system.", &
|
|
n_keywords=1, n_subsections=0, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword)
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kinds involved in the improper tors.", &
|
|
usage="ATOMS {KIND1} {KIND2} {KIND3} {KIND4}", type_of_var=char_t, &
|
|
n_var=4)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="KIND", &
|
|
description="Define the kind of improper torsion potential", &
|
|
usage="KIND CHARMM", &
|
|
enum_c_vals=s2a("CHARMM", "G87", "G96", "HARMONIC"), &
|
|
enum_desc=s2a("Functional Form (CHARMM): K * [ PHI - PHI0 ]**2", &
|
|
"Functional Form (G87|G96|HARMONIC): 0.5 * K * [ PHI - PHI0 ]**2", &
|
|
"Functional Form (G87|G96|HARMONIC): 0.5 * K * [ PHI - PHI0 ]**2", &
|
|
"Functional Form (G87|G96|HARMONIC): 0.5 * K * [ PHI - PHI0 ]**2"), &
|
|
enum_i_vals=[do_ff_charmm, &
|
|
do_ff_g87, &
|
|
do_ff_g96, &
|
|
do_ff_harmonic], &
|
|
default_i_val=do_ff_charmm)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="K", &
|
|
description="Defines the force constant of the potential", &
|
|
usage="K {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="hartree*rad^-2")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="PHI0", &
|
|
description="Defines the phase of the potential.", &
|
|
usage="PHI0 {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="rad")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_IMPROPER_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the out of plane bend of the MM atoms
|
|
!> \param section the section to create
|
|
!> \author louis vanduyfhuys
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_OPBEND_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="OPBEND", &
|
|
description="Specifies the out of plane bend potential of the MM system."// &
|
|
" (Only defined for atom quadruples which are also defined as an improper"// &
|
|
" pattern in the topology.)", &
|
|
n_keywords=1, n_subsections=0, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword)
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kinds involved in the opbend.", &
|
|
usage="ATOMS {KIND1} {KIND2} {KIND3} {KIND4}", type_of_var=char_t, &
|
|
n_var=4)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="KIND", &
|
|
description="Define the kind of out of plane bend potential", &
|
|
usage="KIND HARMONIC", &
|
|
enum_c_vals=s2a("HARMONIC", "MM2", "MM3", "MM4"), &
|
|
enum_desc=s2a("Functional Form (HARMONIC): 0.5 * K * [ PHI - PHI0 ]**2", &
|
|
"Functional Form (MM2|MM3|MM4): K * [ PHI - PHI0 ]**2", &
|
|
"Functional Form (MM2|MM3|MM4): K * [ PHI - PHI0 ]**2", &
|
|
"Functional Form (MM2|MM3|MM4): K * [ PHI - PHI0 ]**2"), &
|
|
enum_i_vals=[do_ff_harmonic, &
|
|
do_ff_mm2, &
|
|
do_ff_mm3, &
|
|
do_ff_mm4], &
|
|
default_i_val=do_ff_harmonic)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="K", &
|
|
description="Defines the force constant of the potential", &
|
|
usage="K {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="hartree*rad^-2")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="PHI0", &
|
|
description="Defines the phase of the potential.", &
|
|
usage="PHI0 {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="rad")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_OPBEND_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the bend of the MM atoms
|
|
!> \param section the section to create
|
|
!> \author teo
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_BEND_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
TYPE(section_type), POINTER :: subsection
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="BEND", &
|
|
description="Specifies the bend potential of the MM system.", &
|
|
n_keywords=11, n_subsections=1, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword, subsection)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kinds involved in the bend.", &
|
|
usage="ATOMS {KIND1} {KIND2} {KIND3}", type_of_var=char_t, &
|
|
n_var=3)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create( &
|
|
keyword, __LOCATION__, name="KIND", &
|
|
description="Define the kind of bend potential", &
|
|
usage="KIND HARMONIC", &
|
|
enum_c_vals=s2a("HARMONIC", "CHARMM", "AMBER", "G87", "G96", "CUBIC", "MIXED_BEND_STRETCH", "MM3", &
|
|
"LEGENDRE"), &
|
|
enum_desc=s2a("Functional Form (HARMONIC|G87): 1/2*K*(THETA-THETA0)^2", &
|
|
"Functional Form (CHARMM|AMBER): K*(THETA-THETA0)^2", &
|
|
"Functional Form (CHARMM|AMBER): K*(THETA-THETA0)^2", &
|
|
"Functional Form (HARMONIC|G87): 1/2*K*(THETA-THETA0)^2", &
|
|
"Functional Form (G96): 1/2*K*(COS(THETA)-THETA0)^2", &
|
|
"Functional Form (CUBIC): K*(THETA-THETA0)**2*(1+CB*(THETA-THETA0))", &
|
|
"Functional Form (MIXED_BEND_STRETCH): K*(THETA-THETA0)**2*(1+CB*(THETA-THETA0))+"// &
|
|
" KSS*(R12-R012)*(R32-R032)+KBS12*(R12-R012)*(THETA-THETA0)+KBS32*(R32-R032)*(THETA-THETA0)", &
|
|
"Functional Form (MM3): 1/2*K*(THETA-THETA0)**2*(1-0.014*(THETA-THETA0)+5.6E-5*(THETA-THETA0)**2"// &
|
|
" -7.0E-7*(THETA-THETA0)**3+9.0E-10*(THETA-THETA0)**4)+KBS12*(R12-R012)*(THETA-THETA0)+"// &
|
|
" KBS32*(R32-R032)*(THETA-THETA0)", &
|
|
"Functional Form (LEGENDRE): sum_{i=0}^N c_i*P_i(COS(THETA)) "), &
|
|
enum_i_vals=[do_ff_harmonic, &
|
|
do_ff_charmm, &
|
|
do_ff_amber, &
|
|
do_ff_g87, &
|
|
do_ff_g96, &
|
|
do_ff_cubic, &
|
|
do_ff_mixed_bend_stretch, &
|
|
do_ff_mm3, &
|
|
do_ff_legendre], &
|
|
default_i_val=do_ff_charmm)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="K", &
|
|
description="Defines the force constant of the potential", &
|
|
usage="K {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="hartree*rad^-2")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="CB", &
|
|
description="Defines the the cubic force constant of the bend", &
|
|
usage="CB {real}", default_r_val=0.0_dp, type_of_var=real_t, &
|
|
n_var=1, unit_str="rad^-1")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="R012", &
|
|
description="Mixed bend stretch parameter", &
|
|
usage="R012 {real}", default_r_val=0.0_dp, type_of_var=real_t, &
|
|
n_var=1, unit_str="bohr")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
CALL keyword_create(keyword, __LOCATION__, name="R032", &
|
|
description="Mixed bend stretch parameter", &
|
|
usage="R032 {real}", default_r_val=0.0_dp, type_of_var=real_t, &
|
|
n_var=1, unit_str="bohr")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
CALL keyword_create(keyword, __LOCATION__, name="KBS12", &
|
|
description="Mixed bend stretch parameter", &
|
|
usage="KBS12 {real}", default_r_val=0.0_dp, type_of_var=real_t, &
|
|
n_var=1, unit_str="hartree*bohr^-1*rad^-1")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
CALL keyword_create(keyword, __LOCATION__, name="KBS32", &
|
|
description="Mixed bend stretch parameter", &
|
|
usage="KBS32 {real}", default_r_val=0.0_dp, type_of_var=real_t, &
|
|
n_var=1, unit_str="hartree*bohr^-1*rad^-1")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
CALL keyword_create(keyword, __LOCATION__, name="KSS", &
|
|
description="Mixed bend stretch parameter", &
|
|
usage="KSS {real}", default_r_val=0.0_dp, type_of_var=real_t, &
|
|
n_var=1, unit_str="hartree*bohr^-2")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="THETA0", &
|
|
description="Defines the equilibrium angle.", &
|
|
usage="THETA0 {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str='rad')
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="LEGENDRE", &
|
|
description="Specifies the coefficients for the legendre"// &
|
|
" expansion of the bending potential."// &
|
|
" 'THETA0' and 'K' are not used, but need to be specified."// &
|
|
" Use an arbitrary value.", usage="LEGENDRE {REAL} {REAL} ...", &
|
|
default_r_val=0.0d0, type_of_var=real_t, &
|
|
n_var=-1, unit_str="hartree")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
! Create the Urey-Bradley section
|
|
CALL create_BOND_section(subsection, "UB")
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
END SUBROUTINE create_BEND_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the bond of the MM atoms
|
|
!> \param section the section to create
|
|
!> \param label ...
|
|
!> \author teo
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_BOND_section(section, label)
|
|
TYPE(section_type), POINTER :: section
|
|
CHARACTER(LEN=*), INTENT(IN) :: label
|
|
|
|
CHARACTER(LEN=default_string_length) :: tag
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
NULLIFY (keyword)
|
|
|
|
IF (TRIM(label) == "UB") THEN
|
|
tag = " Urey-Bradley "
|
|
CALL section_create(section, __LOCATION__, name=TRIM(label), &
|
|
description="Specifies the Urey-Bradley potential between the external atoms"// &
|
|
" defining the angle", &
|
|
n_keywords=1, n_subsections=0, repeats=.FALSE.)
|
|
|
|
ELSE
|
|
tag = " Bond "
|
|
CALL section_create(section, __LOCATION__, name=TRIM(label), &
|
|
description="Specifies the bond potential", &
|
|
n_keywords=1, n_subsections=0, repeats=.TRUE.)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kinds involved in the bond.", &
|
|
usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
|
|
n_var=2)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
END IF
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="KIND", &
|
|
description="Define the kind of"//TRIM(tag)//"potential.", &
|
|
usage="KIND HARMONIC", &
|
|
enum_c_vals=s2a("HARMONIC", "CHARMM", "AMBER", "G87", "G96", "QUARTIC", &
|
|
"MORSE", "CUBIC", "FUES"), &
|
|
enum_desc=s2a("Functional Form (HARMONIC|G87): 1/2*K*(R-R0)^2", &
|
|
"Functional Form (CHARMM|AMBER): K*(R-R0)^2", &
|
|
"Functional Form (CHARMM|AMBER): K*(R-R0)^2", &
|
|
"Functional Form (HARMONIC|G87): 1/2*K*(R-R0)^2", &
|
|
"Functional Form (G96): 1/4*K*(R^2-R0^2)^2", &
|
|
"Functional Form (QUARTIC): (1/2*K1+[1/3*K2+1/4*K3*|R-R0|]*|R-R0|)(R-R0)^2", &
|
|
"Functional Form (MORSE): K1*[(1-exp(-K2*(R-R0)))^2-1])", &
|
|
"Functional Form (CUBIC): K*(R-R0)^2*(1+cs*(R-R0)+7/12*(cs^2*(R-R0)^2))", &
|
|
"Functional Form (FUES): 1/2*K*R0^2*(1+R0/R*(R0/R-2))"), &
|
|
enum_i_vals=[do_ff_harmonic, &
|
|
do_ff_charmm, &
|
|
do_ff_amber, &
|
|
do_ff_g87, &
|
|
do_ff_g96, &
|
|
do_ff_quartic, &
|
|
do_ff_morse, &
|
|
do_ff_cubic, &
|
|
do_ff_fues], &
|
|
default_i_val=do_ff_charmm)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="K", &
|
|
description="Defines the force constant of the potential. "// &
|
|
"For MORSE potentials 2 numbers are expected. "// &
|
|
"For QUARTIC potentials 3 numbers are expected.", &
|
|
usage="K {real}", type_of_var=real_t, &
|
|
n_var=-1, unit_str="internal_cp2k")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="CS", &
|
|
description="Defines the cubic stretch term.", &
|
|
usage="CS {real}", default_r_val=0.0_dp, type_of_var=real_t, &
|
|
n_var=1, unit_str="bohr^-1")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="R0", &
|
|
description="Defines the equilibrium distance.", &
|
|
usage="R0 {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="bohr")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_BOND_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the charge of the MM atoms
|
|
!> \param section the section to create
|
|
!> \author teo
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_charges_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="charges", &
|
|
description="Allow to specify an array of classical charges, thus avoiding the"// &
|
|
" packing and permitting the usage of different charges for same atomic types.", &
|
|
n_keywords=1, n_subsections=0, repeats=.FALSE.)
|
|
|
|
NULLIFY (keyword)
|
|
CALL keyword_create(keyword, __LOCATION__, name="_DEFAULT_KEYWORD_", &
|
|
description="Value of the charge for the individual atom. Order MUST reflect"// &
|
|
" the one specified for the geometry.", repeats=.TRUE., usage="{Real}", &
|
|
type_of_var=real_t)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_charges_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the charge of the MM atoms
|
|
!> \param section the section to create
|
|
!> \author teo
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_charge_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="charge", &
|
|
description="This section specifies the charge of the MM atoms", &
|
|
n_keywords=1, n_subsections=0, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOM", &
|
|
description="Defines the atomic kind of the charge.", &
|
|
usage="ATOM {KIND1}", type_of_var=char_t, &
|
|
n_var=1)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="CHARGE", &
|
|
description="Defines the charge of the MM atom in electron charge unit.", &
|
|
usage="CHARGE {real}", type_of_var=real_t, &
|
|
n_var=1)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_charge_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the isotropic polarizability of the MM atoms
|
|
!> \param section the section to create
|
|
!> \author Marcel Baer
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_quadrupole_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create( &
|
|
section, __LOCATION__, name="QUADRUPOLE", &
|
|
description="This section specifies that we will perform an SCF quadrupole calculation of the MM atoms. "// &
|
|
"Needs KEYWORD POL_SCF in POISSON secton", &
|
|
n_keywords=1, n_subsections=0, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOM", &
|
|
description="Defines the atomic kind of the SCF quadrupole.", &
|
|
usage="ATOM {KIND1}", type_of_var=char_t, &
|
|
n_var=1)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="CPOL", &
|
|
description="Defines the isotropic polarizability of the MM atom.", &
|
|
usage="CPOL {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str='internal_cp2k')
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_quadrupole_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the isotropic polarizability of the MM atoms
|
|
!> \param section the section to create
|
|
!> \author Marcel Baer
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_dipole_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
TYPE(section_type), POINTER :: subsection
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="DIPOLE", &
|
|
description="This section specifies that we will perform an SCF dipole calculation of the MM atoms. "// &
|
|
"Needs KEYWORD POL_SCF in POISSON secton", &
|
|
n_keywords=1, n_subsections=1, repeats=.TRUE.)
|
|
|
|
NULLIFY (subsection, keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOM", &
|
|
description="Defines the atomic kind of the SCF dipole.", &
|
|
usage="ATOM {KIND1}", type_of_var=char_t, &
|
|
n_var=1)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="APOL", &
|
|
description="Defines the isotropic polarizability of the MM atom.", &
|
|
usage="APOL {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str='angstrom^3')
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL create_DAMPING_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
END SUBROUTINE create_dipole_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the idamping parameters for polarizable atoms
|
|
!> \param section the section to create
|
|
!> \author Rodolphe Vuilleumier
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_damping_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="DAMPING", &
|
|
description="This section specifies optional electric field damping for the polarizable atoms. ", &
|
|
n_keywords=4, n_subsections=0, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOM", &
|
|
description="Defines the atomic kind for this damping function.", &
|
|
usage="ATOM {KIND1}", type_of_var=char_t, &
|
|
n_var=1)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="TYPE", &
|
|
description="Defines the damping type.", &
|
|
usage="TYPE {string}", type_of_var=char_t, &
|
|
n_var=1, default_c_val="TANG-TOENNIES")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ORDER", &
|
|
description="Defines the order for this damping.", &
|
|
usage="ORDER {integer}", type_of_var=integer_t, &
|
|
n_var=1, default_i_val=3)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="BIJ", &
|
|
description="Defines the BIJ parameter for this damping.", &
|
|
usage="BIJ {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str='angstrom^-1')
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="CIJ", &
|
|
description="Defines the CIJ parameter for this damping.", &
|
|
usage="CIJ {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str='')
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_damping_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the charge of the MM atoms
|
|
!> \param section the section to create
|
|
!> \author teo
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_shell_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="SHELL", &
|
|
description="This section specifies the parameters for shell-model potentials", &
|
|
n_keywords=6, n_subsections=0, repeats=.TRUE., &
|
|
citations=[Dick1958, Mitchell1993, Devynck2012])
|
|
|
|
NULLIFY (keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
|
|
description="The kind for which the shell potential parameters are given ", &
|
|
usage="H", default_c_val="DEFAULT")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="CORE_CHARGE", &
|
|
variants=["CORE"], &
|
|
description="Partial charge assigned to the core (electron charge units)", &
|
|
usage="CORE_CHARGE {real}", &
|
|
default_r_val=0.0_dp)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="SHELL_CHARGE", &
|
|
variants=["SHELL"], &
|
|
description="Partial charge assigned to the shell (electron charge units)", &
|
|
usage="SHELL_CHARGE {real}", &
|
|
default_r_val=0.0_dp)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="MASS_FRACTION", &
|
|
variants=["MASS"], &
|
|
description="Fraction of the mass of the atom to be assigned to the shell", &
|
|
usage="MASS_FRACTION {real}", &
|
|
default_r_val=0.1_dp)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="K2_SPRING", &
|
|
variants=s2a("K2", "SPRING"), &
|
|
description="Force constant k2 of the spring potential 1/2*k2*r^2 + 1/24*k4*r^4 "// &
|
|
"binding a core-shell pair when a core-shell potential is employed.", &
|
|
repeats=.FALSE., &
|
|
usage="K2_SPRING {real}", &
|
|
default_r_val=-1.0_dp, &
|
|
unit_str="hartree*bohr^-2")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="K4_SPRING", &
|
|
variants=s2a("K4"), &
|
|
description="Force constant k4 of the spring potential 1/2*k2*r^2 + 1/24*k4*r^4 "// &
|
|
"binding a core-shell pair when a core-shell potential is employed. "// &
|
|
"By default a harmonic spring potential is used, i.e. k4 is zero.", &
|
|
repeats=.FALSE., &
|
|
usage="K4_SPRING {real}", &
|
|
default_r_val=0.0_dp, &
|
|
unit_str="hartree*bohr^-4")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="MAX_DISTANCE", &
|
|
description="Assign a maximum elongation of the spring, "// &
|
|
"if negative no limit is imposed", &
|
|
usage="MAX_DISTANCE 0.0", &
|
|
default_r_val=-1.0_dp, &
|
|
unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="SHELL_CUTOFF", &
|
|
description="Define a screening function to exclude some neighbors "// &
|
|
"of the shell when electrostatic interaction are considered, "// &
|
|
"if negative no screening is operated", &
|
|
usage="SHELL_CUTOFF -1.0", &
|
|
default_r_val=-1.0_dp, &
|
|
unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_shell_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for 1-4 NON-BONDED
|
|
!> Interactions
|
|
!> \param section the section to create
|
|
!> \author teo
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_NONBONDED14_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(section_type), POINTER :: subsection
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="nonbonded14", &
|
|
description="This section specifies the input parameters for 1-4 NON-BONDED interactions.", &
|
|
n_keywords=1, n_subsections=0, repeats=.FALSE.)
|
|
|
|
NULLIFY (subsection)
|
|
CALL create_LJ_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_Williams_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_Goodwin_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_GENPOT_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
END SUBROUTINE create_NONBONDED14_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for 1-4 NON-BONDED
|
|
!> Interactions
|
|
!> \param section the section to create
|
|
!> \author teo
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_NONBONDED_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(section_type), POINTER :: subsection
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="nonbonded", &
|
|
description="This section specifies the input parameters for NON-BONDED interactions.", &
|
|
n_keywords=1, n_subsections=0, repeats=.FALSE.)
|
|
|
|
NULLIFY (subsection)
|
|
CALL create_LJ_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_Williams_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_EAM_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_NEQUIP_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_ACE_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_MACE_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_DEEPMD_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_Goodwin_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_IPBV_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_BMHFT_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_BMHFTD_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_Buck4r_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_Buckmorse_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_GENPOT_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_Tersoff_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_Siepmann_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_Gal_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_Gal21_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
CALL create_TABPOT_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
END SUBROUTINE create_NONBONDED_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for generation of
|
|
!> neighbor lists
|
|
!> \param section the section to create
|
|
!> \author teo [07.2007] - Zurich University
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_neighbor_lists_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
NULLIFY (keyword)
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="neighbor_lists", &
|
|
description="This section specifies the input parameters for the construction of"// &
|
|
" neighbor lists.", &
|
|
n_keywords=1, n_subsections=0, repeats=.FALSE.)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="VERLET_SKIN", &
|
|
description="Defines the Verlet Skin for the generation of the neighbor lists", &
|
|
usage="VERLET_SKIN {real}", default_r_val=cp_unit_to_cp2k(value=1.0_dp, &
|
|
unit_str="angstrom"), &
|
|
unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="neighbor_lists_from_scratch", &
|
|
description="This keyword enables the building of the neighbouring list from scratch.", &
|
|
usage="neighbor_lists_from_scratch logical", &
|
|
default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="GEO_CHECK", &
|
|
description="This keyword enables the check that two atoms are never below the minimum"// &
|
|
" value used to construct the splines during the construction of the neighbouring list."// &
|
|
" Disabling this keyword avoids CP2K to abort in case two atoms are below the minimum"// &
|
|
" value of the radius used to generate the splines.", &
|
|
usage="GEO_CHECK", &
|
|
default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_neighbor_lists_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for a generic potential form
|
|
!> \param section the section to create
|
|
!> \author teo
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_GENPOT_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="GENPOT", &
|
|
description="This section specifies the input parameters for a generic potential type. "// &
|
|
docf(), &
|
|
n_keywords=1, n_subsections=0, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kind involved in the generic potential", &
|
|
usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
|
|
n_var=2)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="FUNCTION", &
|
|
description="Specifies the functional form in mathematical notation.", &
|
|
usage="FUNCTION a\*EXP(-b\*x^2)/x+D\*log10(x)", type_of_var=lchar_t, &
|
|
n_var=1)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="VARIABLES", &
|
|
description="Defines the variable of the functional form.", &
|
|
usage="VARIABLES x", type_of_var=char_t, &
|
|
n_var=-1)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="PARAMETERS", &
|
|
description="Defines the parameters of the functional form", &
|
|
usage="PARAMETERS a b D", type_of_var=char_t, &
|
|
n_var=-1, repeats=.TRUE.)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="VALUES", &
|
|
description="Defines the values of parameter of the functional form", &
|
|
usage="VALUES ", type_of_var=real_t, &
|
|
n_var=-1, repeats=.TRUE., unit_str="internal_cp2k")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="UNITS", &
|
|
description="Optionally, allows to define valid CP2K unit strings for each parameter value. "// &
|
|
"It is assumed that the corresponding parameter value is specified in this unit.", &
|
|
usage="UNITS angstrom eV*angstrom^-1 angstrom^1 K", type_of_var=char_t, &
|
|
n_var=-1, repeats=.TRUE.)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
|
|
description="Defines the cutoff parameter of the generic potential", &
|
|
usage="RCUT {real}", default_r_val=cp_unit_to_cp2k(value=10.0_dp, &
|
|
unit_str="angstrom"), &
|
|
unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RMIN", &
|
|
description="Defines the lower bound of the potential. If not set the range is the"// &
|
|
" full range generate by the spline", usage="RMIN {real}", &
|
|
type_of_var=real_t, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RMAX", &
|
|
description="Defines the upper bound of the potential. If not set the range is the"// &
|
|
" full range generate by the spline", usage="RMAX {real}", &
|
|
type_of_var=real_t, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_GENPOT_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for EAM potential type
|
|
!> \param section the section to create
|
|
!> \author teo
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_EAM_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="EAM", &
|
|
description="This section specifies the input parameters for EAM potential type.", &
|
|
citations=[Foiles1986], n_keywords=1, n_subsections=0, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kind involved in the nonbond potential", &
|
|
usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
|
|
n_var=2)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="PARM_FILE_NAME", &
|
|
variants=["PARMFILE"], &
|
|
description="Specifies the filename that contains the tabulated EAM potential. "// &
|
|
"File structure: the first line of the potential file contains a title. "// &
|
|
"The second line contains: atomic number, mass and lattice constant. "// &
|
|
"These information are parsed but not used in CP2K. The third line contains: "// &
|
|
"dr: increment of r for the tabulated values of density and phi (assuming r starts in 0) [angstrom]; "// &
|
|
"drho: increment of density for the tabulated values of the embedding function (assuming rho starts "// &
|
|
"in 0) [au_c]; cutoff: cutoff of the EAM potential; npoints: number of points in tabulated. Follow "// &
|
|
"in order npoints lines for rho [au_c] and its derivative [au_c*angstrom^-1]; npoints lines for "// &
|
|
"PHI [ev] and its derivative [ev*angstrom^-1] and npoint lines for the embedded function [ev] "// &
|
|
"and its derivative [ev*au_c^-1].", &
|
|
usage="PARM_FILE_NAME {FILENAME}", default_lc_val=" ")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_EAM_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for NEQUIP potential type
|
|
!> \param section the section to create
|
|
!> \author teo
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_NEQUIP_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="NEQUIP", &
|
|
description="This section specifies the input parameters for NEQUIP potential type "// &
|
|
"based on equivariant neural networks, and for ALLEGRO, a local large-scale variant. "// &
|
|
"Note: To enable the prediction of stress, along with energies and forces, the keyword "// &
|
|
"StressForceOutput must be included in the nequip config *.yaml file used to train the "// &
|
|
"model, regardless of whether the model has been trained on the stress. "// &
|
|
"Requires linking with libtorch library from <https://pytorch.org/cppdocs/installing.html>.", &
|
|
citations=[Batzner2022, Musaelian2023, Tan2025], n_keywords=1, n_subsections=0, repeats=.FALSE.)
|
|
|
|
NULLIFY (keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kinds involved in the NEQUIP potential. "// &
|
|
"Provide a list of each element, making sure that the mapping from the ATOMS list "// &
|
|
"to NequIP atom types is correct. This mapping should also be consistent for the "// &
|
|
"atomic coordinates as specified in the sections COORDS or TOPOLOGY.", &
|
|
usage="ATOMS {KIND 1} {KIND 2} .. {KIND N}", type_of_var=char_t, &
|
|
n_var=-1)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="MODEL_TYPE", &
|
|
variants=["MODEL"], &
|
|
description="Specifies the type of model used. Allowed values are NEQUIP or ALLEGRO.", &
|
|
usage="MODEL_TYPE {NEQUIP}", default_lc_val=" ")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="POT_FILE_NAME", &
|
|
variants=["MODEL_FILE_NAME"], &
|
|
description="Specifies the filename that contains the NEQUIP model.", &
|
|
usage="POT_FILE_NAME {FILENAME}", default_lc_val=" ")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="UNIT_LENGTH", &
|
|
description="Units of length in the NEQUIP model.pth file. "// &
|
|
"The units of positions, cell, energies and forces must be self-consistent: "// &
|
|
"e.g. coordinates in Angstrom, energies in eV, forces in eV/Angstrom. ", &
|
|
usage="UNIT_LENGTH angstrom", default_c_val="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="UNIT_ENERGY", &
|
|
description="Units of energy in the NEQUIP model.pth file. "// &
|
|
"The units of positions, energies and forces must be self-consistent: "// &
|
|
"e.g. coordinates in Angstrom, energies in eV, forces in eV/Angstrom. ", &
|
|
usage="UNIT_ENERGY hartree", default_c_val="eV")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="UNIT_FORCES", &
|
|
description="Units of the forces in the NEQUIP model.pth file. "// &
|
|
"The units of positions, energies and forces must be self-consistent: "// &
|
|
"e.g. coordinates in Angstrom, energies in eV, forces in eV/Angstrom. ", &
|
|
usage="UNIT_FORCES hartree/bohr", default_c_val="eV/Angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_NEQUIP_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for MACE potential type
|
|
!> \param section the section to create
|
|
!> \author Xinyue Sun
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_MACE_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="MACE", &
|
|
description="This section specifies the input parameters for MACE potential type, "// &
|
|
"a higher-order equivariant message-passing neural network. "// &
|
|
"The MACE model must be exported to a TorchScript file that takes a single "// &
|
|
"dictionary argument (see the create_cp2k_model.py helper). "// &
|
|
"Requires linking with libtorch library from <https://pytorch.org/cppdocs/installing.html>.", &
|
|
citations=[Batatia2022], n_keywords=1, n_subsections=0, repeats=.FALSE.)
|
|
|
|
NULLIFY (keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kinds involved in the MACE potential. "// &
|
|
"Provide a list of each element, making sure that the mapping from the ATOMS list "// &
|
|
"to MACE atom types is correct. This mapping should also be consistent for the "// &
|
|
"atomic coordinates as specified in the sections COORDS or TOPOLOGY.", &
|
|
usage="ATOMS {KIND 1} {KIND 2} .. {KIND N}", type_of_var=char_t, &
|
|
n_var=-1)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="POT_FILE_NAME", &
|
|
variants=["MODEL_FILE_NAME"], &
|
|
description="Specifies the filename that contains the exported MACE model. "// &
|
|
"MACE models use standardized units (Angstrom for length, eV for energy, "// &
|
|
"eV/Angstrom for forces), so no unit keywords are required.", &
|
|
usage="POT_FILE_NAME {FILENAME}", default_lc_val=" ")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_MACE_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for ACE potential type
|
|
!> \param section the section to create
|
|
!> \author
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_ACE_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CALL section_create(section, __LOCATION__, name="ACE", &
|
|
description="This section specifies the input parameters for Atomic Cluster Expansion type. "// &
|
|
"Mainly intended for accurate representation of "// &
|
|
"potential energy surfaces. "// &
|
|
"Requires linking with ACE library from "// &
|
|
"<a href=""https://github.com/ICAMS/lammps-user-pace"" "// &
|
|
"target=""_blank"">https://github.com/ICAMS/lammps-user-pace</a> .", &
|
|
citations=[Drautz2019, Lysogorskiy2021, Bochkarev2024], &
|
|
n_keywords=1, n_subsections=0, repeats=.FALSE.)
|
|
NULLIFY (keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic species. "// &
|
|
"Provide a list of each element, "// &
|
|
"making sure that the mapping from the ATOMS list to ACE atom types is correct.", &
|
|
usage="ATOMS {KIND 1} {KIND 2} .. {KIND N}", type_of_var=char_t, &
|
|
n_var=-1)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
CALL keyword_create(keyword, __LOCATION__, name="POT_FILE_NAME", &
|
|
variants=["PARMFILE"], &
|
|
description="Specifies the filename that contains the ACE potential parameters.", &
|
|
usage="POT_FILE_NAME {FILENAME}", default_lc_val="test.yaml")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
END SUBROUTINE create_ACE_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for DEEPMD potential type
|
|
!> \param section the section to create
|
|
!> \author ybzhuang
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_DEEPMD_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CALL section_create(section, __LOCATION__, name="DEEPMD", &
|
|
description="This section specifies the input parameters for Deep Potential type. "// &
|
|
"Mainly intended for things like neural network to DFT "// &
|
|
"to achieve correlated-wavefunction-like accuracy. "// &
|
|
"Requires linking with DeePMD-kit library from "// &
|
|
"<a href=""https://docs.deepmodeling.com/projects/deepmd/en/master"" "// &
|
|
"target=""_blank"">https://docs.deepmodeling.com/projects/deepmd/en/master</a> .", &
|
|
citations=[Wang2018, Zeng2023], n_keywords=1, n_subsections=0, repeats=.FALSE.)
|
|
NULLIFY (keyword)
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kinds involved in the Deep Potential. "// &
|
|
"Provide a list of each element, "// &
|
|
"making sure that the mapping from the ATOMS list to DeePMD atom types is correct.", &
|
|
usage="ATOMS {KIND 1} {KIND 2} .. {KIND N}", type_of_var=char_t, &
|
|
n_var=-1)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
CALL keyword_create(keyword, __LOCATION__, name="POT_FILE_NAME", &
|
|
variants=["PARMFILE"], &
|
|
description="Specifies the filename that contains the DeePMD-kit potential.", &
|
|
usage="POT_FILE_NAME {FILENAME}", default_lc_val="graph.pb")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS_DEEPMD_TYPE", &
|
|
description="Specifies the atomic TYPE for the DeePMD-kit potential. "// &
|
|
"Provide a list of index, making sure that the mapping "// &
|
|
"from the ATOMS list to DeePMD atom types is correct. ", &
|
|
usage="ATOMS_DEEPMD_TYPE {TYPE INTEGER 1} {TYPE INTEGER 2} .. "// &
|
|
"{TYPE INTEGER N}", type_of_var=integer_t, &
|
|
n_var=-1)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
END SUBROUTINE create_DEEPMD_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for Lennard-Jones potential type
|
|
!> \param section the section to create
|
|
!> \author teo
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_LJ_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="lennard-jones", &
|
|
description="This section specifies the input parameters for LENNARD-JONES potential type. "// &
|
|
"Functional form: V(r) = 4.0 * EPSILON * [(SIGMA/r)^12-(SIGMA/r)^6].", &
|
|
n_keywords=1, n_subsections=0, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kind involved in the nonbond potential", &
|
|
usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
|
|
n_var=2)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="EPSILON", &
|
|
description="Defines the EPSILON parameter of the LJ potential", &
|
|
usage="EPSILON {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="K_e")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="SIGMA", &
|
|
description="Defines the SIGMA parameter of the LJ potential", &
|
|
usage="SIGMA {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
|
|
description="Defines the cutoff parameter of the LJ potential", &
|
|
usage="RCUT {real}", default_r_val=cp_unit_to_cp2k(value=10.0_dp, &
|
|
unit_str="angstrom"), &
|
|
unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RMIN", &
|
|
description="Defines the lower bound of the potential. If not set the range is the"// &
|
|
" full range generate by the spline", usage="RMIN {real}", &
|
|
type_of_var=real_t, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RMAX", &
|
|
description="Defines the upper bound of the potential. If not set the range is the"// &
|
|
" full range generate by the spline", usage="RMAX {real}", &
|
|
type_of_var=real_t, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_LJ_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for Williams potential type
|
|
!> \param section the section to create
|
|
!> \author teo
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_Williams_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="williams", &
|
|
description="This section specifies the input parameters for WILLIAMS potential type. "// &
|
|
"Functional form: V(r) = A*EXP(-B*r) - C / r^6 .", &
|
|
n_keywords=1, n_subsections=0, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kind involved in the nonbond potential", &
|
|
usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
|
|
n_var=2)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="A", &
|
|
description="Defines the A parameter of the Williams potential", &
|
|
usage="A {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="K_e")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="B", &
|
|
description="Defines the B parameter of the Williams potential", &
|
|
usage="B {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="angstrom^-1")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="C", &
|
|
description="Defines the C parameter of the Williams potential", &
|
|
usage="C {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="K_e*angstrom^6")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
|
|
description="Defines the cutoff parameter of the Williams potential", &
|
|
usage="RCUT {real}", default_r_val=cp_unit_to_cp2k(value=10.0_dp, &
|
|
unit_str="angstrom"), &
|
|
unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RMIN", &
|
|
description="Defines the lower bound of the potential. If not set the range is the"// &
|
|
" full range generate by the spline", usage="RMIN {real}", &
|
|
type_of_var=real_t, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RMAX", &
|
|
description="Defines the upper bound of the potential. If not set the range is the"// &
|
|
" full range generate by the spline", usage="RMAX {real}", &
|
|
type_of_var=real_t, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_Williams_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for Goodwin potential type
|
|
!> \param section the section to create
|
|
!> \author teo
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_Goodwin_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="goodwin", &
|
|
description="This section specifies the input parameters for GOODWIN potential type. "// &
|
|
"Functional form: V(r) = EXP(M*(-(r/DC)**MC+(D/DC)**MC))*VR0*(D/r)**M.", &
|
|
n_keywords=1, n_subsections=0, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword)
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kind involved in the nonbond potential", &
|
|
usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
|
|
n_var=2)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="VR0", &
|
|
description="Defines the VR0 parameter of the Goodwin potential", &
|
|
usage="VR0 {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="K_e")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="D", &
|
|
description="Defines the D parameter of the Goodwin potential", &
|
|
usage="D {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="DC", &
|
|
description="Defines the DC parameter of the Goodwin potential", &
|
|
usage="DC {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="M", &
|
|
description="Defines the M parameter of the Goodwin potential", &
|
|
usage="M {real}", type_of_var=integer_t, &
|
|
n_var=1)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="MC", &
|
|
description="Defines the MC parameter of the Goodwin potential", &
|
|
usage="MC {real}", type_of_var=integer_t, &
|
|
n_var=1)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
|
|
description="Defines the cutoff parameter of the Goodwin potential", &
|
|
usage="RCUT {real}", default_r_val=cp_unit_to_cp2k(value=10.0_dp, &
|
|
unit_str="angstrom"), &
|
|
unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RMIN", &
|
|
description="Defines the lower bound of the potential. If not set the range is the"// &
|
|
" full range generate by the spline", usage="RMIN {real}", &
|
|
type_of_var=real_t, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RMAX", &
|
|
description="Defines the upper bound of the potential. If not set the range is the"// &
|
|
" full range generate by the spline", usage="RMAX {real}", &
|
|
type_of_var=real_t, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_Goodwin_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for IPBV potential type
|
|
!> \param section the section to create
|
|
!> \author teo
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_ipbv_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="ipbv", &
|
|
description="This section specifies the input parameters for IPBV potential type. "// &
|
|
"Functional form: Implicit table function.", &
|
|
n_keywords=1, n_subsections=0, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kind involved in the IPBV nonbond potential", &
|
|
usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
|
|
n_var=2)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
|
|
description="Defines the cutoff parameter of the IPBV potential", &
|
|
usage="RCUT {real}", default_r_val=cp_unit_to_cp2k(value=10.0_dp, &
|
|
unit_str="angstrom"), &
|
|
unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RMIN", &
|
|
description="Defines the lower bound of the potential. If not set the range is the"// &
|
|
" full range generate by the spline", usage="RMIN {real}", &
|
|
type_of_var=real_t, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RMAX", &
|
|
description="Defines the upper bound of the potential. If not set the range is the"// &
|
|
" full range generate by the spline", usage="RMAX {real}", &
|
|
type_of_var=real_t, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_ipbv_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for BMHFT potential type
|
|
!> \param section the section to create
|
|
!> \author teo
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_BMHFT_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="BMHFT", &
|
|
description="This section specifies the input parameters for BMHFT potential type. "// &
|
|
"Functional form: V(r) = A * EXP(-B*r) - C/r^6 - D/r^8. "// &
|
|
"Values available inside cp2k only for the Na/Cl pair.", &
|
|
citations=[Tosi1964a, Tosi1964b], n_keywords=1, n_subsections=0, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kind involved in the BMHFT nonbond potential", &
|
|
usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
|
|
n_var=2)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="MAP_ATOMS", &
|
|
description="Defines the kinds for which internally is defined the BMHFT nonbond potential"// &
|
|
" at the moment only Na and Cl.", &
|
|
usage="MAP_ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
|
|
n_var=2)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
|
|
description="Defines the cutoff parameter of the BMHFT potential", &
|
|
usage="RCUT {real}", default_r_val=7.8_dp, &
|
|
unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="A", &
|
|
description="Defines the A parameter of the Fumi-Tosi Potential", &
|
|
usage="A {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="hartree")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="B", &
|
|
description="Defines the B parameter of the Fumi-Tosi Potential", &
|
|
usage="B {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="angstrom^-1")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="C", &
|
|
description="Defines the C parameter of the Fumi-Tosi Potential", &
|
|
usage="C {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="hartree*angstrom^6")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="D", &
|
|
description="Defines the D parameter of the Fumi-Tosi Potential", &
|
|
usage="D {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="hartree*angstrom^8")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RMIN", &
|
|
description="Defines the lower bound of the potential. If not set the range is the"// &
|
|
" full range generate by the spline", usage="RMIN {real}", &
|
|
type_of_var=real_t, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RMAX", &
|
|
description="Defines the upper bound of the potential. If not set the range is the"// &
|
|
" full range generate by the spline", usage="RMAX {real}", &
|
|
type_of_var=real_t, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_BMHFT_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for BMHFTD potential type
|
|
!> \param section the section to create
|
|
!> \par History
|
|
!> - Unused input keyword ORDER removed (18.10.2021, MK)
|
|
!> \author Mathieu Salanne 05.2010
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_BMHFTD_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="BMHFTD", &
|
|
description="This section specifies the input parameters for the BMHFTD potential type. "// &
|
|
"Functional form: V(r) = A*exp(-B*r) - f_6*(r)C/r^6 - f_8(r)*D/r^8 "// &
|
|
"where f_order(r) = 1 - exp(-BD*r)*\sum_{k=0}^order (BD*r)^k/k! "// &
|
|
"(Tang-Toennies damping function). No pre-defined parameter values are available.", &
|
|
citations=[Tosi1964a, Tosi1964b], n_keywords=1, n_subsections=0, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kind involved in the BMHFTD nonbond potential", &
|
|
usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
|
|
n_var=2)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="MAP_ATOMS", &
|
|
description="Defines the kinds for which internally is defined the BMHFTD nonbond potential"// &
|
|
" at the moment no species included.", &
|
|
usage="MAP_ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
|
|
n_var=2)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
|
|
description="Defines the cutoff parameter of the BMHFTD potential", &
|
|
usage="RCUT {real}", default_r_val=7.8_dp, &
|
|
unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="A", &
|
|
description="Defines the A parameter of the dispersion-damped Fumi-Tosi potential", &
|
|
usage="A {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="hartree")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="B", &
|
|
description="Defines the B parameter of the dispersion-damped Fumi-Tosi potential", &
|
|
usage="B {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="angstrom^-1")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="C", &
|
|
description="Defines the C parameter of the dispersion-damped Fumi-Tosi potential", &
|
|
usage="C {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="hartree*angstrom^6")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="D", &
|
|
description="Defines the D parameter of the dispersion-damped Fumi-Tosi potential", &
|
|
usage="D {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="hartree*angstrom^8")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="BD", &
|
|
description="Defines the BD parameters of the dispersion-damped Fumi-Tosi potential. "// &
|
|
"One or two parameter values are expected. If only one value is provided, then this "// &
|
|
"value will be used both for the 6th and the 8th order term.", &
|
|
usage="BD {real} {real}", type_of_var=real_t, &
|
|
n_var=-1, unit_str="angstrom^-1")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RMIN", &
|
|
description="Defines the lower bound of the potential. If not set the range is the"// &
|
|
" full range generate by the spline", usage="RMIN {real}", &
|
|
type_of_var=real_t, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RMAX", &
|
|
description="Defines the upper bound of the potential. If not set the range is the"// &
|
|
" full range generate by the spline", usage="RMAX {real}", &
|
|
type_of_var=real_t, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_BMHFTD_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for Buckingham 4 ranges potential type
|
|
!> \param section the section to create
|
|
!> \author MI
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_Buck4r_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="BUCK4RANGES", &
|
|
description="This section specifies the input parameters for the Buckingham 4-ranges"// &
|
|
" potential type."//newline// &
|
|
"| Range | Functional Form |"//newline// &
|
|
"| ----- | --------------- |"//newline// &
|
|
"| $ r < r_1 $ | $ V(r) = A\exp(-Br) $ |"//newline// &
|
|
"| $ r_1 \leq r < r_2 $ | $ V(r) = \sum_n \operatorname{POLY1}(n)r_n $ |"//newline// &
|
|
"| $ r_2 \leq r < r_3 $ | $ V(r) = \sum_n \operatorname{POLY2}(n)r_n $ |"//newline// &
|
|
"| $ r \geq r_3 $ | $ V(r) = -C/r_6 $ |"//newline, &
|
|
n_keywords=1, n_subsections=0, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kind involved in the nonbond potential", &
|
|
usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
|
|
n_var=2)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="A", &
|
|
description="Defines the A parameter of the Buckingham potential", &
|
|
usage="A {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="K_e")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="B", &
|
|
description="Defines the B parameter of the Buckingham potential", &
|
|
usage="B {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="angstrom^-1")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="C", &
|
|
description="Defines the C parameter of the Buckingham potential", &
|
|
usage="C {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="K_e*angstrom^6")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="R1", &
|
|
description="Defines the upper bound of the first range ", &
|
|
usage="R1 {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="R2", &
|
|
description="Defines the upper bound of the second range ", &
|
|
usage="R2 {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="R3", &
|
|
description="Defines the upper bound of the third range ", &
|
|
usage="R3 {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="POLY1", &
|
|
description="Coefficients of the polynomial used in the second range "// &
|
|
"This keyword can be repeated several times.", &
|
|
usage="POLY1 C1 C2 C3 ..", &
|
|
n_var=-1, unit_str="K_e", type_of_var=real_t, repeats=.TRUE.)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="POLY2", &
|
|
description="Coefficients of the polynomial used in the third range "// &
|
|
"This keyword can be repeated several times.", &
|
|
usage="POLY2 C1 C2 C3 ..", &
|
|
n_var=-1, unit_str="K_e", type_of_var=real_t, repeats=.TRUE.)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
|
|
description="Defines the cutoff parameter of the Buckingham potential", &
|
|
usage="RCUT {real}", default_r_val=cp_unit_to_cp2k(value=10.0_dp, &
|
|
unit_str="angstrom"), &
|
|
unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RMIN", &
|
|
description="Defines the lower bound of the potential. If not set the range is the"// &
|
|
" full range generate by the spline", usage="RMIN {real}", &
|
|
type_of_var=real_t, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RMAX", &
|
|
description="Defines the upper bound of the potential. If not set the range is the"// &
|
|
" full range generate by the spline", usage="RMAX {real}", &
|
|
type_of_var=real_t, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_Buck4r_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for Buckingham + Morse potential type
|
|
!> \param section the section to create
|
|
!> \author MI
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_Buckmorse_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create( &
|
|
section, __LOCATION__, name="BUCKMORSE", &
|
|
description="This section specifies the input parameters for"// &
|
|
" Buckingham plus Morse potential type"// &
|
|
" Functional Form: V(r) = F0*(B1+B2)*EXP([A1+A2-r]/[B1+B2])-C/r^6+D*{EXP[-2*beta*(r-R0)]-2*EXP[-beta*(r-R0)]}.", &
|
|
citations=[Yamada2000], n_keywords=1, n_subsections=0, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kind involved in the nonbond potential", &
|
|
usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
|
|
n_var=2)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="F0", &
|
|
description="Defines the f0 parameter of Buckingham+Morse potential", &
|
|
usage="F0 {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="K_e*angstrom^-1")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="A1", &
|
|
description="Defines the A1 parameter of Buckingham+Morse potential", &
|
|
usage="A1 {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="A2", &
|
|
description="Defines the A2 parameter of Buckingham+Morse potential", &
|
|
usage="A2 {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="B1", &
|
|
description="Defines the B1 parameter of Buckingham+Morse potential", &
|
|
usage="B1 {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="B2", &
|
|
description="Defines the B2 parameter of Buckingham+Morse potential", &
|
|
usage="B2 {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="C", &
|
|
description="Defines the C parameter of Buckingham+Morse potential", &
|
|
usage="C {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="K_e*angstrom^6")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="D", &
|
|
description="Defines the amplitude for the Morse part ", &
|
|
usage="D {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="K_e")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="R0", &
|
|
description="Defines the equilibrium distance for the Morse part ", &
|
|
usage="R0 {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="Beta", &
|
|
description="Defines the width for the Morse part ", &
|
|
usage="Beta {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="angstrom^-1")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
|
|
description="Defines the cutoff parameter of the Buckingham potential", &
|
|
usage="RCUT {real}", default_r_val=cp_unit_to_cp2k(value=10.0_dp, &
|
|
unit_str="angstrom"), &
|
|
unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RMIN", &
|
|
description="Defines the lower bound of the potential. If not set the range is the"// &
|
|
" full range generate by the spline", usage="RMIN {real}", &
|
|
type_of_var=real_t, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RMAX", &
|
|
description="Defines the upper bound of the potential. If not set the range is the"// &
|
|
" full range generate by the spline", usage="RMAX {real}", &
|
|
type_of_var=real_t, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_Buckmorse_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for Tersoff potential type
|
|
!> (Tersoff, J. PRB 39(8), 5566, 1989)
|
|
!> \param section ...
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_Tersoff_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="TERSOFF", &
|
|
description="This section specifies the input parameters for Tersoff potential type.", &
|
|
citations=[Tersoff1988], n_keywords=1, n_subsections=0, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kind involved in the nonbond potential", &
|
|
usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
|
|
n_var=2)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="A", &
|
|
description="Defines the A parameter of Tersoff potential", &
|
|
usage="A {real}", type_of_var=real_t, &
|
|
default_r_val=cp_unit_to_cp2k(value=1.8308E3_dp, &
|
|
unit_str="eV"), &
|
|
n_var=1, unit_str="eV")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="B", &
|
|
description="Defines the B parameter of Tersoff potential", &
|
|
usage="B {real}", type_of_var=real_t, &
|
|
default_r_val=cp_unit_to_cp2k(value=4.7118E2_dp, &
|
|
unit_str="eV"), &
|
|
n_var=1, unit_str="eV")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="lambda1", &
|
|
description="Defines the lambda1 parameter of Tersoff potential", &
|
|
usage="lambda1 {real}", type_of_var=real_t, &
|
|
default_r_val=cp_unit_to_cp2k(value=2.4799_dp, &
|
|
unit_str="angstrom^-1"), &
|
|
n_var=1, unit_str="angstrom^-1")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="lambda2", &
|
|
description="Defines the lambda2 parameter of Tersoff potential", &
|
|
usage="lambda2 {real}", type_of_var=real_t, &
|
|
default_r_val=cp_unit_to_cp2k(value=1.7322_dp, &
|
|
unit_str="angstrom^-1"), &
|
|
n_var=1, unit_str="angstrom^-1")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="alpha", &
|
|
description="Defines the alpha parameter of Tersoff potential", &
|
|
usage="alpha {real}", type_of_var=real_t, &
|
|
default_r_val=0.0_dp, &
|
|
n_var=1)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="beta", &
|
|
description="Defines the beta parameter of Tersoff potential", &
|
|
usage="beta {real}", type_of_var=real_t, &
|
|
default_r_val=1.0999E-6_dp, &
|
|
n_var=1, unit_str="")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="n", &
|
|
description="Defines the n parameter of Tersoff potential", &
|
|
usage="n {real}", type_of_var=real_t, &
|
|
default_r_val=7.8734E-1_dp, &
|
|
n_var=1, unit_str="")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="c", &
|
|
description="Defines the c parameter of Tersoff potential", &
|
|
usage="c {real}", type_of_var=real_t, &
|
|
default_r_val=1.0039E5_dp, &
|
|
n_var=1, unit_str="")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="d", &
|
|
description="Defines the d parameter of Tersoff potential", &
|
|
usage="d {real}", type_of_var=real_t, &
|
|
default_r_val=1.6218E1_dp, &
|
|
n_var=1, unit_str="")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="h", &
|
|
description="Defines the h parameter of Tersoff potential", &
|
|
usage="h {real}", type_of_var=real_t, &
|
|
default_r_val=-5.9826E-1_dp, &
|
|
n_var=1, unit_str="")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="lambda3", &
|
|
description="Defines the lambda3 parameter of Tersoff potential", &
|
|
usage="lambda3 {real}", type_of_var=real_t, &
|
|
default_r_val=cp_unit_to_cp2k(value=1.7322_dp, &
|
|
unit_str="angstrom^-1"), &
|
|
n_var=1, unit_str="angstrom^-1")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="bigR", &
|
|
description="Defines the bigR parameter of Tersoff potential", &
|
|
usage="bigR {real}", type_of_var=real_t, &
|
|
default_r_val=cp_unit_to_cp2k(value=2.85_dp, &
|
|
unit_str="angstrom"), &
|
|
n_var=1, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="bigD", &
|
|
description="Defines the D parameter of Tersoff potential", &
|
|
usage="bigD {real}", type_of_var=real_t, &
|
|
default_r_val=cp_unit_to_cp2k(value=0.15_dp, &
|
|
unit_str="angstrom"), &
|
|
n_var=1, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
|
|
description="Defines the cutoff parameter of the tersoff potential."// &
|
|
" This parameter is in principle already defined by the values of"// &
|
|
" bigD and bigR. But it is necessary to define it when using the tersoff"// &
|
|
" in conjunction with other potentials (for the same atomic pair) in order to have"// &
|
|
" the same consistent definition of RCUT for all potentials.", &
|
|
usage="RCUT {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_Tersoff_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for Siepmann-Sprik
|
|
!> potential type
|
|
!> (Siepmann and Sprik, J. Chem. Phys. 102(1) 511, 1995)
|
|
!> \param section ...
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_Siepmann_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="SIEPMANN", &
|
|
description="This section specifies the input parameters for the"// &
|
|
" Siepmann-Sprik potential type. Consists of 4 terms:"// &
|
|
" T1+T2+T3+T4. The terms T1=A/rij^alpha and T2=-C/rij^6"// &
|
|
" have to be given via the GENPOT section. The terms T3+T4"// &
|
|
" are obtained from the SIEPMANN section. The Siepmann-Sprik"// &
|
|
" potential is designed for water-metal chemisorption.", &
|
|
citations=[Siepmann1995], n_keywords=1, n_subsections=0, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kind involved in the nonbond potential", &
|
|
usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
|
|
n_var=2)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="B", &
|
|
description="Defines the B parameter of Siepmann potential", &
|
|
usage="B {real}", type_of_var=real_t, &
|
|
default_r_val=cp_unit_to_cp2k(value=0.6_dp, &
|
|
unit_str="angstrom"), &
|
|
n_var=1, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="D", &
|
|
description="Defines the D parameter of Siepmann potential", &
|
|
usage="D {real}", type_of_var=real_t, &
|
|
default_r_val=cp_unit_to_cp2k(value=3.688388_dp, &
|
|
unit_str="internal_cp2k"), &
|
|
n_var=1, unit_str="internal_cp2k")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="E", &
|
|
description="Defines the E parameter of Siepmann potential", &
|
|
usage="E {real}", type_of_var=real_t, &
|
|
default_r_val=cp_unit_to_cp2k(value=9.069025_dp, &
|
|
unit_str="internal_cp2k"), &
|
|
n_var=1, unit_str="internal_cp2k")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="F", &
|
|
description="Defines the F parameter of Siepmann potential", &
|
|
usage="F {real}", type_of_var=real_t, &
|
|
default_r_val=13.3_dp, n_var=1)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
!
|
|
CALL keyword_create(keyword, __LOCATION__, name="beta", &
|
|
description="Defines the beta parameter of Siepmann potential", &
|
|
usage="beta {real}", type_of_var=real_t, &
|
|
default_r_val=10.0_dp, n_var=1)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
!
|
|
CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
|
|
description="Defines the cutoff parameter of Siepmann potential", &
|
|
usage="RCUT {real}", type_of_var=real_t, &
|
|
default_r_val=cp_unit_to_cp2k(value=3.2_dp, &
|
|
unit_str="angstrom"), &
|
|
n_var=1, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
!
|
|
CALL keyword_create(keyword, __LOCATION__, name="ALLOW_OH_FORMATION", &
|
|
description=" The Siepmann-Sprik potential is actually designed for intact"// &
|
|
" water molecules only. If water is treated at the QM level,"// &
|
|
" water molecules can potentially dissociate, i.e."// &
|
|
" some O-H bonds might be stretched leading temporarily"// &
|
|
" to the formation of OH- ions. This keyword allows the"// &
|
|
" the formation of such ions. The T3 term (dipole term)"// &
|
|
" is then switched off for evaluating the interaction"// &
|
|
" between the OH- ion and the metal.", &
|
|
usage="ALLOW_OH_FORMATION TRUE", &
|
|
default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ALLOW_H3O_FORMATION", &
|
|
description=" The Siepmann-Sprik potential is designed for intact water"// &
|
|
" molecules only. If water is treated at the QM level"// &
|
|
" and an acid is present, hydronium ions might occur."// &
|
|
" This keyword allows the formation of hydronium ions."// &
|
|
" The T3 term (dipole term) is switched off for evaluating"// &
|
|
" the interaction between hydronium and the metal.", &
|
|
usage="ALLOW_H3O_FORMATION TRUE", &
|
|
default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ALLOW_O_FORMATION", &
|
|
description=" The Siepmann-Sprik potential is actually designed for intact"// &
|
|
" water molecules only. If water is treated at the QM level,"// &
|
|
" water molecules can potentially dissociate, i.e."// &
|
|
" some O-H bonds might be stretched leading temporarily"// &
|
|
" to the formation of O^2- ions. This keyword allows the"// &
|
|
" the formation of such ions. The T3 term (dipole term)"// &
|
|
" is then switched off for evaluating the interaction"// &
|
|
" between the O^2- ion and the metal.", &
|
|
usage="ALLOW_O_FORMATION .TRUE.", &
|
|
default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_Siepmann_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for GAL19
|
|
!> potential type
|
|
!> (??)
|
|
!> \param section ...
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_Gal_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
TYPE(section_type), POINTER :: subsection
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="GAL19", &
|
|
description="Implementation of the GAL19 forcefield, see associated paper", &
|
|
citations=[Clabaut2020], n_keywords=1, n_subsections=1, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword, subsection)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kind involved in the nonbond potential", &
|
|
usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
|
|
n_var=2)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="METALS", &
|
|
description="Defines the two atomic kinds to be considered as part of the metallic phase in the system", &
|
|
usage="METALS {KIND1} {KIND2} ..", type_of_var=char_t, &
|
|
n_var=2)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="epsilon", &
|
|
description="Defines the epsilon_a parameter of GAL19 potential", &
|
|
usage="epsilon {real}", type_of_var=real_t, &
|
|
default_r_val=cp_unit_to_cp2k(value=0.6_dp, &
|
|
unit_str="kcalmol"), &
|
|
n_var=1, unit_str="kcalmol")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="bxy", &
|
|
description="Defines the b perpendicular parameter of GAL19 potential", &
|
|
usage="bxy {real}", type_of_var=real_t, &
|
|
default_r_val=cp_unit_to_cp2k(value=3.688388_dp, &
|
|
unit_str="internal_cp2k"), &
|
|
n_var=1, unit_str="angstrom^-2")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="bz", &
|
|
description="Defines the b parallel parameter of GAL19 potential", &
|
|
usage="bz {real}", type_of_var=real_t, &
|
|
default_r_val=cp_unit_to_cp2k(value=9.069025_dp, &
|
|
unit_str="internal_cp2k"), &
|
|
n_var=1, unit_str="angstrom^-2")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="r", &
|
|
description="Defines the R_0 parameters of GAL19 potential for the two METALS. "// &
|
|
"This is the only parameter that is shared between the two section of the "// &
|
|
"forcefield in the case of two metals (alloy). "// &
|
|
"If one metal only is present, a second number should be given but won't be read", &
|
|
usage="r {real} {real}", type_of_var=real_t, n_var=2, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="a1", &
|
|
description="Defines the a1 parameter of GAL19 potential", &
|
|
usage="a1 {real}", type_of_var=real_t, &
|
|
default_r_val=10.0_dp, n_var=1, unit_str="kcalmol")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="a2", &
|
|
description="Defines the a2 parameter of GAL19 potential", &
|
|
usage="a2 {real}", type_of_var=real_t, &
|
|
default_r_val=10.0_dp, n_var=1, unit_str="kcalmol")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="a3", &
|
|
description="Defines the a3 parameter of GAL19 potential", &
|
|
usage="a3 {real}", type_of_var=real_t, &
|
|
default_r_val=10.0_dp, n_var=1, unit_str="kcalmol")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="a4", &
|
|
description="Defines the a4 parameter of GAL19 potential", &
|
|
usage="a4 {real}", type_of_var=real_t, &
|
|
default_r_val=10.0_dp, n_var=1, unit_str="kcalmol")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="A", &
|
|
description="Defines the A parameter of GAL19 potential", &
|
|
usage="A {real}", type_of_var=real_t, &
|
|
default_r_val=10.0_dp, n_var=1, unit_str="kcalmol")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="B", &
|
|
description="Defines the B parameter of GAL19 potential", &
|
|
usage="B {real}", type_of_var=real_t, &
|
|
default_r_val=10.0_dp, n_var=1, unit_str="angstrom^-1")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="C", &
|
|
description="Defines the C parameter of GAL19 potential", &
|
|
usage="C {real}", type_of_var=real_t, &
|
|
default_r_val=10.0_dp, n_var=1, unit_str="angstrom^6*kcalmol")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
|
|
description="Defines the cutoff parameter of GAL19 potential", &
|
|
usage="RCUT {real}", type_of_var=real_t, &
|
|
default_r_val=cp_unit_to_cp2k(value=3.2_dp, &
|
|
unit_str="angstrom"), &
|
|
n_var=1, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
CALL keyword_create(keyword, __LOCATION__, name="Fit_express", &
|
|
description="Demands the particular output needed to a least square fit", &
|
|
usage="Fit_express TRUE", &
|
|
default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
CALL create_GCN_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
END SUBROUTINE create_Gal_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for GAL21
|
|
!> potential type
|
|
!> (??)
|
|
!> \param section ...
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_Gal21_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
TYPE(section_type), POINTER :: subsection
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="GAL21", &
|
|
description="Implementation of the GAL21 forcefield, see associated paper", &
|
|
citations=[Clabaut2021], n_keywords=1, n_subsections=1, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword, subsection)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kind involved in the nonbond potential", &
|
|
usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
|
|
n_var=2)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="METALS", &
|
|
description="Defines the two atomic kinds to be considered as part of the metallic phase in the system", &
|
|
usage="METALS {KIND1} {KIND2} ..", type_of_var=char_t, &
|
|
n_var=2)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="epsilon", &
|
|
description="Defines the epsilon parameter of GAL21 potential", &
|
|
usage="epsilon {real} {real} {real}", type_of_var=real_t, &
|
|
n_var=3, unit_str="kcalmol")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="bxy", &
|
|
description="Defines the b perpendicular parameter of GAL21 potential", &
|
|
usage="bxy {real} {real}", type_of_var=real_t, &
|
|
n_var=2, unit_str="angstrom^-2")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="bz", &
|
|
description="Defines the b parallel parameter of GAL21 potential", &
|
|
usage="bz {real} {real}", type_of_var=real_t, &
|
|
n_var=2, unit_str="angstrom^-2")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="r", &
|
|
description="Defines the R_0 parameters of GAL21 potential for the two METALS. "// &
|
|
"This is the only parameter that is shared between the two section of "// &
|
|
"the forcefield in the case of two metals (alloy). "// &
|
|
"If one metal only is present, a second number should be given but won't be read", &
|
|
usage="r {real} {real}", type_of_var=real_t, n_var=2, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="a1", &
|
|
description="Defines the a1 parameter of GAL21 potential", &
|
|
usage="a1 {real} {real} {real}", type_of_var=real_t, &
|
|
n_var=3, unit_str="kcalmol")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="a2", &
|
|
description="Defines the a2 parameter of GAL21 potential", &
|
|
usage="a2 {real} {real} {real}", type_of_var=real_t, &
|
|
n_var=3, unit_str="kcalmol")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="a3", &
|
|
description="Defines the a3 parameter of GAL21 potential", &
|
|
usage="a3 {real} {real} {real}", type_of_var=real_t, &
|
|
n_var=3, unit_str="kcalmol")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="a4", &
|
|
description="Defines the a4 parameter of GAL21 potential", &
|
|
usage="a4 {real} {real} {real}", type_of_var=real_t, &
|
|
n_var=3, unit_str="kcalmol")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="A", &
|
|
description="Defines the A parameter of GAL21 potential", &
|
|
usage="A {real} {real}", type_of_var=real_t, &
|
|
n_var=2, unit_str="kcalmol")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="B", &
|
|
description="Defines the B parameter of GAL21 potential", &
|
|
usage="B {real} {real}", type_of_var=real_t, &
|
|
n_var=2, unit_str="angstrom^-1")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="C", &
|
|
description="Defines the C parameter of GAL21 potential", &
|
|
usage="C {real}", type_of_var=real_t, &
|
|
n_var=1, unit_str="angstrom^6*kcalmol")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="AH", &
|
|
description="Defines the AH parameter of GAL21 potential", &
|
|
usage="AH {real} {real}", type_of_var=real_t, &
|
|
n_var=2, unit_str="kcalmol")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="BH", &
|
|
description="Defines the BH parameter of GAL21 potential", &
|
|
usage="BH {real} {real}", type_of_var=real_t, &
|
|
n_var=2, unit_str="angstrom^-1")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
|
|
description="Defines the cutoff parameter of GAL21 potential", &
|
|
usage="RCUT {real}", type_of_var=real_t, &
|
|
default_r_val=cp_unit_to_cp2k(value=3.2_dp, &
|
|
unit_str="angstrom"), &
|
|
n_var=1, unit_str="angstrom")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="Fit_express", &
|
|
description="Demands the particular output needed to a least square fit", &
|
|
usage="Fit_express TRUE", &
|
|
default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL create_GCN_section(subsection)
|
|
CALL section_add_subsection(section, subsection)
|
|
CALL section_release(subsection)
|
|
|
|
END SUBROUTINE create_Gal21_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for TABPOT potential type
|
|
!> \param section the section to create
|
|
!> \author teo, Alex Mironenko, Da Teng
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_TABPOT_section(section)
|
|
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
|
|
CALL section_create(section, __LOCATION__, name="TABPOT", &
|
|
description="This section specifies the input parameters for TABPOT potential type.", &
|
|
n_keywords=1, n_subsections=0, repeats=.TRUE.)
|
|
|
|
NULLIFY (keyword)
|
|
CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
|
|
description="Defines the atomic kind involved", &
|
|
usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
|
|
n_var=2)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="PARM_FILE_NAME", &
|
|
variants=["PARMFILE"], &
|
|
description="Specifies the filename that contains the tabulated NONBONDED potential. "// &
|
|
"File structure: the third line of the potential file contains a title. "// &
|
|
"The 4th line contains: 'N', number of data points, 'R', lower bound of distance, distance cutoff. "// &
|
|
"Follow "// &
|
|
"in order npoints lines for index, distance [A], energy [kcal/mol], and force [kcal/mol/A]", &
|
|
usage="PARM_FILE_NAME {FILENAME}", default_lc_val="")
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_TABPOT_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief This section specifies the input parameters for the subsection GCN of GAL19 and GAL21
|
|
!> potential type
|
|
!> (??)
|
|
!> \param section ...
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_GCN_section(section)
|
|
TYPE(section_type), POINTER :: section
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(section))
|
|
CALL section_create(section, __LOCATION__, name="GCN", &
|
|
description="Allow to specify the generalized coordination number of the atoms. "// &
|
|
"Those numbers msust be generated by another program ", &
|
|
n_keywords=1, n_subsections=0, repeats=.FALSE.)
|
|
|
|
NULLIFY (keyword)
|
|
CALL keyword_create(keyword, __LOCATION__, name="_DEFAULT_KEYWORD_", &
|
|
description="Value of the GCN for the individual atom. Order MUST reflect"// &
|
|
" the one specified for the geometry.", repeats=.TRUE., usage="{Real}", &
|
|
default_r_val=0.0_dp, type_of_var=real_t)
|
|
CALL section_add_keyword(section, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
END SUBROUTINE create_GCN_section
|
|
|
|
! **************************************************************************************************
|
|
!> \brief creates the input section for the qs part
|
|
!> \param print_key ...
|
|
!> \param label ...
|
|
!> \param print_level ...
|
|
!> \author teo
|
|
! **************************************************************************************************
|
|
SUBROUTINE create_dipoles_section(print_key, label, print_level)
|
|
TYPE(section_type), POINTER :: print_key
|
|
CHARACTER(LEN=*), INTENT(IN) :: label
|
|
INTEGER, INTENT(IN) :: print_level
|
|
|
|
TYPE(keyword_type), POINTER :: keyword
|
|
|
|
CPASSERT(.NOT. ASSOCIATED(print_key))
|
|
CALL cp_print_key_section_create(print_key, __LOCATION__, name=TRIM(label), &
|
|
description="Section controlling the calculation of "//TRIM(label)//"."// &
|
|
" Note that the result in the periodic case might be defined modulo a certain period,"// &
|
|
" determined by the lattice vectors. During MD, this can lead to jumps.", &
|
|
print_level=print_level, filename="__STD_OUT__")
|
|
|
|
NULLIFY (keyword)
|
|
CALL keyword_create(keyword, __LOCATION__, &
|
|
name="PERIODIC", &
|
|
description="Use Berry phase formula (PERIODIC=T) or simple operator (PERIODIC=F). "// &
|
|
"The latter normally requires that the CELL is periodic NONE.", &
|
|
usage="PERIODIC {logical}", &
|
|
repeats=.FALSE., &
|
|
n_var=1, &
|
|
default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
|
|
CALL section_add_keyword(print_key, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="REFERENCE", &
|
|
variants=s2a("REF"), &
|
|
description="Define the reference point for the calculation of the electrostatic moment.", &
|
|
usage="REFERENCE COM", &
|
|
enum_c_vals=s2a("COM", "COAC", "USER_DEFINED", "ZERO"), &
|
|
enum_desc=s2a("Use Center of Mass", &
|
|
"Use Center of Atomic Charges", &
|
|
"Use User Defined Point (Keyword:REF_POINT)", &
|
|
"Use Origin of Coordinate System"), &
|
|
enum_i_vals=[use_mom_ref_com, &
|
|
use_mom_ref_coac, &
|
|
use_mom_ref_user, &
|
|
use_mom_ref_zero], &
|
|
default_i_val=use_mom_ref_zero)
|
|
CALL section_add_keyword(print_key, keyword)
|
|
CALL keyword_release(keyword)
|
|
|
|
CALL keyword_create(keyword, __LOCATION__, name="REFERENCE_POINT", &
|
|
variants=s2a("REF_POINT"), &
|
|
description="Fixed reference point for the calculations of the electrostatic moment.", &
|
|
usage="REFERENCE_POINT x y z", &
|
|
repeats=.FALSE., &
|
|
n_var=3, default_r_vals=[0._dp, 0._dp, 0._dp], &
|
|
type_of_var=real_t, &
|
|
unit_str='bohr')
|
|
CALL section_add_keyword(print_key, keyword)
|
|
CALL keyword_release(keyword)
|
|
END SUBROUTINE create_dipoles_section
|
|
|
|
END MODULE input_cp2k_mm
|