1!--------------------------------------------------------------------------------------------------!
2!   CP2K: A general program to perform molecular dynamics simulations                              !
3!   Copyright (C) 2000 - 2020  CP2K developers group                                               !
4!--------------------------------------------------------------------------------------------------!
5
6! **************************************************************************************************
7!> \brief creates the mm section of the input
8!> \note
9!>      moved out of input_cp2k
10!> \par History
11!>      04.2004 created
12!> \author fawzi
13! **************************************************************************************************
14MODULE input_cp2k_mm
15   USE bibliography,                    ONLY: &
16        Devynck2012, Dick1958, Foiles1986, Mitchell1993, QUIP_ref, Siepmann1995, Tersoff1988, &
17        Tosi1964a, Tosi1964b, Yamada2000
18   USE cp_output_handling,              ONLY: cp_print_key_section_create,&
19                                              debug_print_level,&
20                                              high_print_level,&
21                                              low_print_level,&
22                                              medium_print_level,&
23                                              silent_print_level
24   USE cp_units,                        ONLY: cp_unit_to_cp2k
25   USE force_field_kind_types,          ONLY: &
26        do_ff_amber, do_ff_charmm, do_ff_cubic, do_ff_fues, do_ff_g87, do_ff_g96, do_ff_harmonic, &
27        do_ff_legendre, do_ff_mixed_bend_stretch, do_ff_mm2, do_ff_mm3, do_ff_mm4, do_ff_morse, &
28        do_ff_opls, do_ff_quartic, do_ff_undef
29   USE input_constants,                 ONLY: use_mom_ref_coac,&
30                                              use_mom_ref_com,&
31                                              use_mom_ref_user,&
32                                              use_mom_ref_zero
33   USE input_cp2k_field,                ONLY: create_per_efield_section
34   USE input_cp2k_poisson,              ONLY: create_poisson_section
35   USE input_keyword_types,             ONLY: keyword_create,&
36                                              keyword_release,&
37                                              keyword_type
38   USE input_section_types,             ONLY: section_add_keyword,&
39                                              section_add_subsection,&
40                                              section_create,&
41                                              section_release,&
42                                              section_type
43   USE input_val_types,                 ONLY: char_t,&
44                                              integer_t,&
45                                              lchar_t,&
46                                              real_t
47   USE kinds,                           ONLY: default_string_length,&
48                                              dp
49   USE string_utilities,                ONLY: s2a
50#include "./base/base_uses.f90"
51
52   IMPLICIT NONE
53   PRIVATE
54
55   LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .TRUE.
56   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'input_cp2k_mm'
57
58   PUBLIC :: create_mm_section, create_dipoles_section
59   PUBLIC :: create_NONBONDED14_section, create_LJ_section, create_Williams_section, &
60             create_Goodwin_section, &
61             create_GENPOT_section, create_neighbor_lists_section
62   PUBLIC :: create_CHARGE_section
63!***
64CONTAINS
65
66! **************************************************************************************************
67!> \brief Create the input section for FIST.. Come on.. Let's get woohooo
68!> \param section the section to create
69!> \author teo
70! **************************************************************************************************
71   SUBROUTINE create_mm_section(section)
72      TYPE(section_type), POINTER                        :: section
73
74      CHARACTER(len=*), PARAMETER :: routineN = 'create_mm_section', &
75         routineP = moduleN//':'//routineN
76
77      TYPE(section_type), POINTER                        :: subsection
78
79      CPASSERT(.NOT. ASSOCIATED(section))
80      CALL section_create(section, __LOCATION__, name="mm", &
81                          description="This section contains all information to run a MM calculation.", &
82                          n_keywords=5, n_subsections=0, repeats=.FALSE.)
83
84      NULLIFY (subsection)
85
86      CALL create_forcefield_section(subsection)
87      CALL section_add_subsection(section, subsection)
88      CALL section_release(subsection)
89
90      CALL create_neighbor_lists_section(subsection)
91      CALL section_add_subsection(section, subsection)
92      CALL section_release(subsection)
93
94      CALL create_poisson_section(subsection)
95      CALL section_add_subsection(section, subsection)
96      CALL section_release(subsection)
97
98      CALL create_per_efield_section(subsection)
99      CALL section_add_subsection(section, subsection)
100      CALL section_release(subsection)
101
102      CALL create_print_mm_section(subsection)
103      CALL section_add_subsection(section, subsection)
104      CALL section_release(subsection)
105
106   END SUBROUTINE create_mm_section
107
108! **************************************************************************************************
109!> \brief Create the print mm section
110!> \param section the section to create
111!> \author teo
112! **************************************************************************************************
113   SUBROUTINE create_print_mm_section(section)
114      TYPE(section_type), POINTER                        :: section
115
116      CHARACTER(len=*), PARAMETER :: routineN = 'create_print_mm_section', &
117         routineP = moduleN//':'//routineN
118
119      TYPE(keyword_type), POINTER                        :: keyword
120      TYPE(section_type), POINTER                        :: print_key
121
122      CPASSERT(.NOT. ASSOCIATED(section))
123      CALL section_create(section, __LOCATION__, name="print", &
124                          description="Section of possible print options in MM code.", &
125                          n_keywords=0, n_subsections=1, repeats=.FALSE.)
126
127      NULLIFY (print_key, keyword)
128
129      CALL cp_print_key_section_create(print_key, __LOCATION__, "DERIVATIVES", &
130                                       description="Controls the printing of derivatives.", &
131                                       print_level=high_print_level, filename="__STD_OUT__")
132      CALL section_add_subsection(section, print_key)
133      CALL section_release(print_key)
134
135      CALL cp_print_key_section_create(print_key, __LOCATION__, "EWALD_INFO", &
136                                       description="Controls the printing of Ewald energy components during the "// &
137                                       "evaluation of the electrostatics.", &
138                                       print_level=high_print_level, filename="__STD_OUT__")
139      CALL section_add_subsection(section, print_key)
140      CALL section_release(print_key)
141
142      CALL create_dipoles_section(print_key, "DIPOLE", medium_print_level)
143      CALL section_add_subsection(section, print_key)
144      CALL section_release(print_key)
145
146      CALL cp_print_key_section_create(print_key, __LOCATION__, "NEIGHBOR_LISTS", &
147                                       description="Activates the printing of the neighbor lists.", &
148                                       print_level=high_print_level, filename="", unit_str="angstrom")
149      CALL section_add_subsection(section, print_key)
150      CALL section_release(print_key)
151
152      CALL cp_print_key_section_create(print_key, __LOCATION__, "ITER_INFO", &
153                                       description="Activates the printing of iteration info during the self-consistent "// &
154                                       "calculation of a polarizable forcefield.", &
155                                       print_level=medium_print_level, filename="__STD_OUT__")
156      CALL section_add_subsection(section, print_key)
157      CALL section_release(print_key)
158
159      CALL cp_print_key_section_create(print_key, __LOCATION__, "SUBCELL", &
160                                       description="Activates the printing of the subcells used for the"// &
161                                       "generation of neighbor lists.", &
162                                       print_level=high_print_level, filename="__STD_OUT__")
163      CALL section_add_subsection(section, print_key)
164      CALL section_release(print_key)
165
166      CALL cp_print_key_section_create(print_key, __LOCATION__, "PROGRAM_BANNER", &
167                                       description="Controls the printing of the banner of the MM program", &
168                                       print_level=silent_print_level, filename="__STD_OUT__")
169      CALL section_add_subsection(section, print_key)
170      CALL section_release(print_key)
171
172      CALL cp_print_key_section_create(print_key, __LOCATION__, "PROGRAM_RUN_INFO", &
173                                       description="Controls the printing of information regarding the run.", &
174                                       print_level=low_print_level, filename="__STD_OUT__")
175      CALL section_add_subsection(section, print_key)
176      CALL section_release(print_key)
177
178      CALL cp_print_key_section_create(print_key, __LOCATION__, "FF_PARAMETER_FILE", description= &
179                                       "Controls the printing of Force Field parameter file", &
180                                       print_level=debug_print_level + 1, filename="", common_iter_levels=2)
181      CALL section_add_subsection(section, print_key)
182      CALL section_release(print_key)
183
184      CALL cp_print_key_section_create(print_key, __LOCATION__, "FF_INFO", description= &
185                                       "Controls the printing of information in the forcefield settings", &
186                                       print_level=high_print_level, filename="__STD_OUT__")
187
188      CALL keyword_create(keyword, __LOCATION__, name="spline_info", &
189                          description="if the printkey is active prints information regarding the splines"// &
190                          " used in the nonbonded interactions", &
191                          default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
192      CALL section_add_keyword(print_key, keyword)
193      CALL keyword_release(keyword)
194
195      CALL keyword_create(keyword, __LOCATION__, name="spline_data", &
196                          description="if the printkey is active prints on separated files the splined function"// &
197                          " together with the reference one. Useful to check the spline behavior.", &
198                          default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
199      CALL section_add_keyword(print_key, keyword)
200      CALL keyword_release(keyword)
201
202      CALL section_add_subsection(section, print_key)
203      CALL section_release(print_key)
204
205   END SUBROUTINE create_print_mm_section
206
207! **************************************************************************************************
208!> \brief Create the forcefield section. This section is useful to set up the
209!>      proper force_field for FIST calculations
210!> \param section the section to create
211!> \author teo
212! **************************************************************************************************
213   SUBROUTINE create_forcefield_section(section)
214      TYPE(section_type), POINTER                        :: section
215
216      CHARACTER(len=*), PARAMETER :: routineN = 'create_forcefield_section', &
217         routineP = moduleN//':'//routineN
218
219      TYPE(keyword_type), POINTER                        :: keyword
220      TYPE(section_type), POINTER                        :: subsection
221
222      CPASSERT(.NOT. ASSOCIATED(section))
223      CALL section_create(section, __LOCATION__, name="FORCEFIELD", &
224                          description="Section specifying information regarding how to set up properly"// &
225                          " a force_field for the classical calculations.", &
226                          n_keywords=2, n_subsections=2, repeats=.FALSE.)
227
228      NULLIFY (subsection, keyword)
229
230      CALL keyword_create( &
231         keyword, __LOCATION__, name="PARMTYPE", &
232         description="Define the kind of torsion potential", &
233         usage="PARMTYPE {OFF,CHM,G87,G96}", &
234         enum_c_vals=s2a("OFF", "CHM", "G87", "G96", "AMBER"), &
235         enum_desc=s2a("Provides force field parameters through the input file", &
236                       "Provides force field parameters through an external file with CHARMM format", &
237                       "Provides force field parameters through an external file with GROMOS 87 format", &
238                       "Provides force field parameters through an external file with GROMOS 96 format", &
239                       "Provides force field parameters through an external file with AMBER format (from v.8 on)"), &
240         enum_i_vals=(/do_ff_undef, &
241                       do_ff_charmm, &
242                       do_ff_g87, &
243                       do_ff_g96, &
244                       do_ff_amber/), &
245         default_i_val=do_ff_undef)
246      CALL section_add_keyword(section, keyword)
247      CALL keyword_release(keyword)
248
249      CALL keyword_create(keyword, __LOCATION__, name="PARM_FILE_NAME", &
250                          description="Specifies the filename that contains the parameters of the FF.", &
251                          usage="PARM_FILE_NAME {FILENAME}", type_of_var=lchar_t)
252      CALL section_add_keyword(section, keyword)
253      CALL keyword_release(keyword)
254
255      CALL keyword_create(keyword, __LOCATION__, name="VDW_SCALE14", &
256                          description="Scaling factor for the VDW 1-4 ", &
257                          usage="VDW_SCALE14 1.0", default_r_val=1.0_dp)
258      CALL section_add_keyword(section, keyword)
259      CALL keyword_release(keyword)
260
261      CALL keyword_create(keyword, __LOCATION__, name="EI_SCALE14", &
262                          description="Scaling factor for the electrostatics 1-4 ", &
263                          usage="EI_SCALE14 1.0", default_r_val=0.0_dp)
264      CALL section_add_keyword(section, keyword)
265      CALL keyword_release(keyword)
266
267      CALL keyword_create(keyword, __LOCATION__, name="SHIFT_CUTOFF", &
268                          description="Add a constant energy shift to the real-space "// &
269                          "non-bonding interactions (both Van der Waals and "// &
270                          "electrostatic) such that the energy at the cutoff radius is "// &
271                          "zero. This makes the non-bonding interactions continuous at "// &
272                          "the cutoff.", &
273                          usage="SHIFT_CUTOFF <LOGICAL>", default_l_val=.TRUE.)
274      CALL section_add_keyword(section, keyword)
275      CALL keyword_release(keyword)
276
277      CALL keyword_create(keyword, __LOCATION__, name="DO_NONBONDED", &
278                          description="Controls the computation of all the real-space "// &
279                          "(short-range) nonbonded interactions. This also "// &
280                          "includes the real-space corrections for excluded "// &
281                          "or scaled 1-2, 1-3 and 1-4 interactions. When set "// &
282                          "to F, the neighborlists are not created and all "// &
283                          "interactions that depend on them are not computed.", &
284                          usage="DO_NONBONDED T", default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
285      CALL section_add_keyword(section, keyword)
286      CALL keyword_release(keyword)
287
288      CALL keyword_create(keyword, __LOCATION__, name="IGNORE_MISSING_CRITICAL_PARAMS", &
289                          description="Do not abort when critical force-field parameters "// &
290                          "are missing. CP2K will run as if the terms containing the "// &
291                          "missing parameters are zero.", &
292                          usage="IGNORE_MISSING_BOND_PARAMS T", default_l_val=.FALSE., &
293                          lone_keyword_l_val=.TRUE.)
294      CALL section_add_keyword(section, keyword)
295      CALL keyword_release(keyword)
296
297      CALL keyword_create(keyword, __LOCATION__, name="MULTIPLE_POTENTIAL", &
298                          description="Enables the possibility to define NONBONDED and NONBONDED14 as a"// &
299                          " sum of different kinds of potential. Useful for piecewise defined potentials.", &
300                          usage="MULTIPLE_POTENTIAL T", default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
301      CALL section_add_keyword(section, keyword)
302      CALL keyword_release(keyword)
303      !Universal scattering potential at very short distances
304      CALL keyword_create(keyword, __LOCATION__, name="ZBL_SCATTERING", &
305                          description="A short range repulsive potential is added, to simulate "// &
306                          "collisions and scattering.", &
307                          usage="ZBL_SCATTERING T", default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
308      CALL section_add_keyword(section, keyword)
309      CALL keyword_release(keyword)
310
311      !
312      ! subsections
313      !
314      CALL create_SPLINE_section(subsection)
315      CALL section_add_subsection(section, subsection)
316      CALL section_release(subsection)
317
318      CALL create_NONBONDED_section(subsection)
319      CALL section_add_subsection(section, subsection)
320      CALL section_release(subsection)
321
322      CALL create_NONBONDED14_section(subsection)
323      CALL section_add_subsection(section, subsection)
324      CALL section_release(subsection)
325
326      CALL create_CHARGE_section(subsection)
327      CALL section_add_subsection(section, subsection)
328      CALL section_release(subsection)
329
330      CALL create_CHARGES_section(subsection)
331      CALL section_add_subsection(section, subsection)
332      CALL section_release(subsection)
333
334      CALL create_SHELL_section(subsection)
335      CALL section_add_subsection(section, subsection)
336      CALL section_release(subsection)
337
338      CALL create_BOND_section(subsection, "BOND")
339      CALL section_add_subsection(section, subsection)
340      CALL section_release(subsection)
341
342      CALL create_BEND_section(subsection)
343      CALL section_add_subsection(section, subsection)
344      CALL section_release(subsection)
345
346      CALL create_TORSION_section(subsection)
347      CALL section_add_subsection(section, subsection)
348      CALL section_release(subsection)
349
350      CALL create_IMPROPER_section(subsection)
351      CALL section_add_subsection(section, subsection)
352      CALL section_release(subsection)
353
354      CALL create_OPBEND_section(subsection)
355      CALL section_add_subsection(section, subsection)
356      CALL section_release(subsection)
357
358      CALL create_DIPOLE_section(subsection)
359      CALL section_add_subsection(section, subsection)
360      CALL section_release(subsection)
361
362      CALL create_QUADRUPOLE_section(subsection)
363      CALL section_add_subsection(section, subsection)
364      CALL section_release(subsection)
365
366   END SUBROUTINE create_forcefield_section
367
368! **************************************************************************************************
369!> \brief This section specifies the parameters for the splines
370!> \param section the section to create
371!> \author teo
372! **************************************************************************************************
373   SUBROUTINE create_SPLINE_section(section)
374      TYPE(section_type), POINTER                        :: section
375
376      CHARACTER(len=*), PARAMETER :: routineN = 'create_SPLINE_section', &
377         routineP = moduleN//':'//routineN
378
379      TYPE(keyword_type), POINTER                        :: keyword
380
381      CPASSERT(.NOT. ASSOCIATED(section))
382      CALL section_create(section, __LOCATION__, name="SPLINE", &
383                          description="specifies parameters to set up the splines used in the"// &
384                          " nonboned interactions (both pair body potential and many body potential)", &
385                          n_keywords=1, n_subsections=0, repeats=.TRUE.)
386
387      NULLIFY (keyword)
388
389      CALL keyword_create(keyword, __LOCATION__, name="R0_NB", &
390                          description="Specify the minimum value of the distance interval "// &
391                          " that brackets the value of emax_spline.", &
392                          usage="R0_NB <REAL>", default_r_val=cp_unit_to_cp2k(value=0.9_dp, &
393                                                                              unit_str="bohr"), &
394                          unit_str="angstrom")
395      CALL section_add_keyword(section, keyword)
396      CALL keyword_release(keyword)
397
398      CALL keyword_create(keyword, __LOCATION__, name="RCUT_NB", &
399                          description="Cutoff radius for nonbonded interactions. This value overrides "// &
400                          " the value specified in the potential definition and is global for all potentials.", &
401                          usage="RCUT_NB {real}", default_r_val=cp_unit_to_cp2k(value=-1.0_dp, &
402                                                                                unit_str="angstrom"), &
403                          unit_str="angstrom")
404      CALL section_add_keyword(section, keyword)
405      CALL keyword_release(keyword)
406
407      CALL keyword_create(keyword, __LOCATION__, name="EMAX_SPLINE", &
408                          description="Specify the maximum value of the potential up to which"// &
409                          " splines will be constructed", &
410                          usage="EMAX_SPLINE <REAL>", &
411                          default_r_val=0.5_dp, unit_str="hartree")
412      CALL section_add_keyword(section, keyword)
413      CALL keyword_release(keyword)
414
415      CALL keyword_create(keyword, __LOCATION__, name="EMAX_ACCURACY", &
416                          description="Specify the maximum value of energy used to check the accuracy"// &
417                          " requested through EPS_SPLINE. Energy values larger than EMAX_ACCURACY"// &
418                          " generally do not  satisfy the requested accuracy", &
419                          usage="EMAX_ACCURACY <REAL>", default_r_val=0.02_dp, unit_str="hartree")
420      CALL section_add_keyword(section, keyword)
421      CALL keyword_release(keyword)
422
423      CALL keyword_create(keyword, __LOCATION__, name="EPS_SPLINE", &
424                          description="Specify the threshold for the choice of the number of"// &
425                          " points used in the splines (comparing the splined value with the "// &
426                          " analytically evaluated one)", &
427                          usage="EPS_SPLINE <REAL>", default_r_val=1.0E-7_dp, unit_str="hartree")
428      CALL section_add_keyword(section, keyword)
429      CALL keyword_release(keyword)
430
431      CALL keyword_create( &
432         keyword, __LOCATION__, name="NPOINTS", &
433         description="Override the default search for an accurate spline by specifying a fixed number of spline points.", &
434         usage="NPOINTS 1024", default_i_val=-1)
435      CALL section_add_keyword(section, keyword)
436      CALL keyword_release(keyword)
437
438      CALL keyword_create(keyword, __LOCATION__, name="UNIQUE_SPLINE", &
439                          description="For few potentials (Lennard-Jones) one global optimal spline is generated instead"// &
440                          " of different optimal splines for each kind of potential", &
441                          usage="UNIQUE_SPLINE <LOGICAL>", lone_keyword_l_val=.TRUE., default_l_val=.FALSE.)
442      CALL section_add_keyword(section, keyword)
443      CALL keyword_release(keyword)
444
445   END SUBROUTINE create_SPLINE_section
446
447! **************************************************************************************************
448!> \brief This section specifies the torsion of the MM atoms
449!> \param section the section to create
450!> \author teo
451! **************************************************************************************************
452   SUBROUTINE create_TORSION_section(section)
453      TYPE(section_type), POINTER                        :: section
454
455      CHARACTER(len=*), PARAMETER :: routineN = 'create_TORSION_section', &
456         routineP = moduleN//':'//routineN
457
458      TYPE(keyword_type), POINTER                        :: keyword
459
460      CPASSERT(.NOT. ASSOCIATED(section))
461      CALL section_create(section, __LOCATION__, name="TORSION", &
462                          description="Specifies the torsion potential of the MM system.", &
463                          n_keywords=1, n_subsections=0, repeats=.TRUE.)
464
465      NULLIFY (keyword)
466      CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
467                          description="Defines the atomic kinds involved in the tors.", &
468                          usage="ATOMS {KIND1} {KIND2} {KIND3} {KIND4}", type_of_var=char_t, &
469                          n_var=4)
470      CALL section_add_keyword(section, keyword)
471      CALL keyword_release(keyword)
472
473      CALL keyword_create(keyword, __LOCATION__, name="KIND", &
474                          description="Define the kind of torsion potential", &
475                          usage="KIND CHARMM", &
476                          enum_c_vals=s2a("CHARMM", "G87", "G96", "AMBER", "OPLS"), &
477                          enum_desc=s2a("Functional Form (CHARMM|G87|G96|AMBER): K * [ 1 +  cos[M*PHI - PHI0]]", &
478                                        "Functional Form (CHARMM|G87|G96|AMBER): K * [ 1 +  cos[M*PHI - PHI0]]", &
479                                        "Functional Form (CHARMM|G87|G96|AMBER): K * [ 1 +  cos[M*PHI - PHI0]]", &
480                                        "Functional Form (CHARMM|G87|G96|AMBER): K * [ 1 +  cos[M*PHI - PHI0]]", &
481                                        "Functional Form: K / 2 * [ 1 + (-1)^(M-1) * cos[M*PHI]]"), &
482                          enum_i_vals=(/do_ff_charmm, &
483                                        do_ff_g87, &
484                                        do_ff_g96, &
485                                        do_ff_amber, &
486                                        do_ff_opls/), &
487                          default_i_val=do_ff_charmm)
488      CALL section_add_keyword(section, keyword)
489      CALL keyword_release(keyword)
490
491      CALL keyword_create(keyword, __LOCATION__, name="K", &
492                          description="Defines the force constant of the potential", &
493                          usage="K {real}", type_of_var=real_t, &
494                          n_var=1, unit_str="hartree")
495      CALL section_add_keyword(section, keyword)
496      CALL keyword_release(keyword)
497
498      CALL keyword_create(keyword, __LOCATION__, name="PHI0", &
499                          description="Defines the phase of the potential.", &
500                          usage="PHI0 {real}", type_of_var=real_t, &
501                          n_var=1, unit_str="rad", default_r_val=0.0_dp)
502      CALL section_add_keyword(section, keyword)
503      CALL keyword_release(keyword)
504
505      CALL keyword_create(keyword, __LOCATION__, name="M", &
506                          description="Defines the multiplicity of the potential.", &
507                          usage="M {integer}", type_of_var=integer_t, &
508                          n_var=1)
509      CALL section_add_keyword(section, keyword)
510      CALL keyword_release(keyword)
511
512   END SUBROUTINE create_TORSION_section
513
514! **************************************************************************************************
515!> \brief This section specifies the improper torsion of the MM atoms
516!> \param section the section to create
517!> \author louis vanduyfhuys
518! **************************************************************************************************
519   SUBROUTINE create_IMPROPER_section(section)
520      TYPE(section_type), POINTER                        :: section
521
522      CHARACTER(len=*), PARAMETER :: routineN = 'create_IMPROPER_section', &
523         routineP = moduleN//':'//routineN
524
525      TYPE(keyword_type), POINTER                        :: keyword
526
527      CPASSERT(.NOT. ASSOCIATED(section))
528      CALL section_create(section, __LOCATION__, name="IMPROPER", &
529                          description="Specifies the improper torsion potential of the MM system.", &
530                          n_keywords=1, n_subsections=0, repeats=.TRUE.)
531
532      NULLIFY (keyword)
533      CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
534                          description="Defines the atomic kinds involved in the improper tors.", &
535                          usage="ATOMS {KIND1} {KIND2} {KIND3} {KIND4}", type_of_var=char_t, &
536                          n_var=4)
537      CALL section_add_keyword(section, keyword)
538      CALL keyword_release(keyword)
539
540      CALL keyword_create(keyword, __LOCATION__, name="KIND", &
541                          description="Define the kind of improper torsion potential", &
542                          usage="KIND CHARMM", &
543                          enum_c_vals=s2a("CHARMM", "G87", "G96", "HARMONIC"), &
544                          enum_desc=s2a("Functional Form (CHARMM): K * [ PHI - PHI0 ]**2", &
545                                        "Functional Form (G87|G96|HARMONIC): 0.5 * K * [ PHI - PHI0 ]**2", &
546                                        "Functional Form (G87|G96|HARMONIC): 0.5 * K * [ PHI - PHI0 ]**2", &
547                                        "Functional Form (G87|G96|HARMONIC): 0.5 * K * [ PHI - PHI0 ]**2"), &
548                          enum_i_vals=(/do_ff_charmm, &
549                                        do_ff_g87, &
550                                        do_ff_g96, &
551                                        do_ff_harmonic/), &
552                          default_i_val=do_ff_charmm)
553      CALL section_add_keyword(section, keyword)
554      CALL keyword_release(keyword)
555
556      CALL keyword_create(keyword, __LOCATION__, name="K", &
557                          description="Defines the force constant of the potential", &
558                          usage="K {real}", type_of_var=real_t, &
559                          n_var=1, unit_str="hartree*rad^-2")
560      CALL section_add_keyword(section, keyword)
561      CALL keyword_release(keyword)
562
563      CALL keyword_create(keyword, __LOCATION__, name="PHI0", &
564                          description="Defines the phase of the potential.", &
565                          usage="PHI0 {real}", type_of_var=real_t, &
566                          n_var=1, unit_str="rad")
567      CALL section_add_keyword(section, keyword)
568      CALL keyword_release(keyword)
569
570   END SUBROUTINE create_IMPROPER_section
571
572! **************************************************************************************************
573!> \brief This section specifies the out of plane bend of the MM atoms
574!> \param section the section to create
575!> \author louis vanduyfhuys
576! **************************************************************************************************
577   SUBROUTINE create_OPBEND_section(section)
578      TYPE(section_type), POINTER                        :: section
579
580      CHARACTER(len=*), PARAMETER :: routineN = 'create_OPBEND_section', &
581         routineP = moduleN//':'//routineN
582
583      TYPE(keyword_type), POINTER                        :: keyword
584
585      CPASSERT(.NOT. ASSOCIATED(section))
586      CALL section_create(section, __LOCATION__, name="OPBEND", &
587                          description="Specifies the out of plane bend potential of the MM system."// &
588                          "(Only defined for atom quadruples which are also defined as an improper"// &
589                          " pattern in the topology.)", &
590                          n_keywords=1, n_subsections=0, repeats=.TRUE.)
591
592      NULLIFY (keyword)
593      CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
594                          description="Defines the atomic kinds involved in the opbend.", &
595                          usage="ATOMS {KIND1} {KIND2} {KIND3} {KIND4}", type_of_var=char_t, &
596                          n_var=4)
597      CALL section_add_keyword(section, keyword)
598      CALL keyword_release(keyword)
599
600      CALL keyword_create(keyword, __LOCATION__, name="KIND", &
601                          description="Define the kind of out of plane bend potential", &
602                          usage="KIND HARMONIC", &
603                          enum_c_vals=s2a("HARMONIC", "MM2", "MM3", "MM4"), &
604                          enum_desc=s2a("Functional Form (HARMONIC): 0.5 * K * [ PHI - PHI0 ]**2", &
605                                        "Functional Form (MM2|MM3|MM4): K * [ PHI - PHI0 ]**2", &
606                                        "Functional Form (MM2|MM3|MM4): K * [ PHI - PHI0 ]**2", &
607                                        "Functional Form (MM2|MM3|MM4): K * [ PHI - PHI0 ]**2"), &
608                          enum_i_vals=(/do_ff_harmonic, &
609                                        do_ff_mm2, &
610                                        do_ff_mm3, &
611                                        do_ff_mm4/), &
612                          default_i_val=do_ff_harmonic)
613      CALL section_add_keyword(section, keyword)
614      CALL keyword_release(keyword)
615
616      CALL keyword_create(keyword, __LOCATION__, name="K", &
617                          description="Defines the force constant of the potential", &
618                          usage="K {real}", type_of_var=real_t, &
619                          n_var=1, unit_str="hartree*rad^-2")
620      CALL section_add_keyword(section, keyword)
621      CALL keyword_release(keyword)
622
623      CALL keyword_create(keyword, __LOCATION__, name="PHI0", &
624                          description="Defines the phase of the potential.", &
625                          usage="PHI0 {real}", type_of_var=real_t, &
626                          n_var=1, unit_str="rad")
627      CALL section_add_keyword(section, keyword)
628      CALL keyword_release(keyword)
629
630   END SUBROUTINE create_OPBEND_section
631
632! **************************************************************************************************
633!> \brief This section specifies the bend of the MM atoms
634!> \param section the section to create
635!> \author teo
636! **************************************************************************************************
637   SUBROUTINE create_BEND_section(section)
638      TYPE(section_type), POINTER                        :: section
639
640      CHARACTER(len=*), PARAMETER :: routineN = 'create_BEND_section', &
641         routineP = moduleN//':'//routineN
642
643      TYPE(keyword_type), POINTER                        :: keyword
644      TYPE(section_type), POINTER                        :: subsection
645
646      CPASSERT(.NOT. ASSOCIATED(section))
647      CALL section_create(section, __LOCATION__, name="BEND", &
648                          description="Specifies the bend potential of the MM system.", &
649                          n_keywords=11, n_subsections=1, repeats=.TRUE.)
650
651      NULLIFY (keyword, subsection)
652
653      CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
654                          description="Defines the atomic kinds involved in the bend.", &
655                          usage="ATOMS {KIND1} {KIND2} {KIND3}", type_of_var=char_t, &
656                          n_var=3)
657      CALL section_add_keyword(section, keyword)
658      CALL keyword_release(keyword)
659
660      CALL keyword_create( &
661         keyword, __LOCATION__, name="KIND", &
662         description="Define the kind of bend potential", &
663         usage="KIND HARMONIC", &
664         enum_c_vals=s2a("HARMONIC", "CHARMM", "AMBER", "G87", "G96", "CUBIC", "MIXED_BEND_STRETCH", "MM3", &
665                         "LEGENDRE"), &
666         enum_desc=s2a("Functional Form (HARMONIC|G87): 1/2*K*(THETA-THETA0)^2", &
667                       "Functional Form (CHARMM|AMBER): K*(THETA-THETA0)^2", &
668                       "Functional Form (CHARMM|AMBER): K*(THETA-THETA0)^2", &
669                       "Functional Form (HARMONIC|G87): 1/2*K*(THETA-THETA0)^2", &
670                       "Functional Form (G96): 1/2*K*(COS(THETA)-THETA0)^2", &
671                       "Functional Form (CUBIC): K*(THETA-THETA0)**2*(1+CB*(THETA-THETA0))", &
672                       "Functional Form (MIXED_BEND_STRETCH): K*(THETA-THETA0)**2*(1+CB*(THETA-THETA0))+"// &
673                       " KSS*(R12-R012)*(R32-R032)+KBS12*(R12-R012)*(THETA-THETA0)+KBS32*(R32-R032)*(THETA-THETA0)", &
674                       "Functional Form (MM3): 1/2*K*(THETA-THETA0)**2*(1-0.014*(THETA-THETA0)+5.6E-5*(THETA-THETA0)**2"// &
675                       " -7.0E-7*(THETA-THETA0)**3+9.0E-10*(THETA-THETA0)**4)+KBS12*(R12-R012)*(THETA-THETA0)+"// &
676                       " KBS32*(R32-R032)*(THETA-THETA0)", &
677                       "Functional Form (LEGENDRE): sum_{i=0}^N c_i*P_i(COS(THETA)) "), &
678         enum_i_vals=(/do_ff_harmonic, &
679                       do_ff_charmm, &
680                       do_ff_amber, &
681                       do_ff_g87, &
682                       do_ff_g96, &
683                       do_ff_cubic, &
684                       do_ff_mixed_bend_stretch, &
685                       do_ff_mm3, &
686                       do_ff_legendre/), &
687         default_i_val=do_ff_charmm)
688      CALL section_add_keyword(section, keyword)
689      CALL keyword_release(keyword)
690
691      CALL keyword_create(keyword, __LOCATION__, name="K", &
692                          description="Defines the force constant of the potential", &
693                          usage="K {real}", type_of_var=real_t, &
694                          n_var=1, unit_str="hartree*rad^-2")
695      CALL section_add_keyword(section, keyword)
696      CALL keyword_release(keyword)
697
698      CALL keyword_create(keyword, __LOCATION__, name="CB", &
699                          description="Defines the the cubic force constant of the bend", &
700                          usage="CB {real}", default_r_val=0.0_dp, type_of_var=real_t, &
701                          n_var=1, unit_str="rad^-1")
702      CALL section_add_keyword(section, keyword)
703      CALL keyword_release(keyword)
704
705      CALL keyword_create(keyword, __LOCATION__, name="R012", &
706                          description="Mixed bend stretch parameter", &
707                          usage="R012 {real}", default_r_val=0.0_dp, type_of_var=real_t, &
708                          n_var=1, unit_str="bohr")
709      CALL section_add_keyword(section, keyword)
710      CALL keyword_release(keyword)
711      CALL keyword_create(keyword, __LOCATION__, name="R032", &
712                          description="Mixed bend stretch parameter", &
713                          usage="R032 {real}", default_r_val=0.0_dp, type_of_var=real_t, &
714                          n_var=1, unit_str="bohr")
715      CALL section_add_keyword(section, keyword)
716      CALL keyword_release(keyword)
717      CALL keyword_create(keyword, __LOCATION__, name="KBS12", &
718                          description="Mixed bend stretch parameter", &
719                          usage="KBS12 {real}", default_r_val=0.0_dp, type_of_var=real_t, &
720                          n_var=1, unit_str="hartree*bohr^-1*rad^-1")
721      CALL section_add_keyword(section, keyword)
722      CALL keyword_release(keyword)
723      CALL keyword_create(keyword, __LOCATION__, name="KBS32", &
724                          description="Mixed bend stretch parameter", &
725                          usage="KBS32 {real}", default_r_val=0.0_dp, type_of_var=real_t, &
726                          n_var=1, unit_str="hartree*bohr^-1*rad^-1")
727      CALL section_add_keyword(section, keyword)
728      CALL keyword_release(keyword)
729      CALL keyword_create(keyword, __LOCATION__, name="KSS", &
730                          description="Mixed bend stretch parameter", &
731                          usage="KSS {real}", default_r_val=0.0_dp, type_of_var=real_t, &
732                          n_var=1, unit_str="hartree*bohr^-2")
733      CALL section_add_keyword(section, keyword)
734      CALL keyword_release(keyword)
735
736      CALL keyword_create(keyword, __LOCATION__, name="THETA0", &
737                          description="Defines the equilibrium angle.", &
738                          usage="THETA0 {real}", type_of_var=real_t, &
739                          n_var=1, unit_str='rad')
740      CALL section_add_keyword(section, keyword)
741      CALL keyword_release(keyword)
742
743      CALL keyword_create(keyword, __LOCATION__, name="LEGENDRE", &
744                          description="Specifies the coefficients for the legendre"// &
745                          " expansion of the bending potential."// &
746                          "'THETA0' and 'K' are not used, but need to be specified."// &
747                          "Use an arbitrary value.", usage="LEGENDRE {REAL} {REAL} ...", &
748                          default_r_val=0.0d0, type_of_var=real_t, &
749                          n_var=-1, unit_str="hartree")
750      CALL section_add_keyword(section, keyword)
751      CALL keyword_release(keyword)
752
753      ! Create the Urey-Bradley section
754      CALL create_BOND_section(subsection, "UB")
755      CALL section_add_subsection(section, subsection)
756      CALL section_release(subsection)
757
758   END SUBROUTINE create_BEND_section
759
760! **************************************************************************************************
761!> \brief This section specifies the bond of the MM atoms
762!> \param section the section to create
763!> \param label ...
764!> \author teo
765! **************************************************************************************************
766   SUBROUTINE create_BOND_section(section, label)
767      TYPE(section_type), POINTER                        :: section
768      CHARACTER(LEN=*), INTENT(IN)                       :: label
769
770      CHARACTER(len=*), PARAMETER :: routineN = 'create_BOND_section', &
771         routineP = moduleN//':'//routineN
772
773      CHARACTER(LEN=default_string_length)               :: tag
774      TYPE(keyword_type), POINTER                        :: keyword
775
776      CPASSERT(.NOT. ASSOCIATED(section))
777      NULLIFY (keyword)
778
779      IF (TRIM(label) == "UB") THEN
780         tag = " Urey-Bradley "
781         CALL section_create(section, __LOCATION__, name=TRIM(label), &
782                             description="Specifies the Urey-Bradley potential between the external atoms"// &
783                             " defining the angle", &
784                             n_keywords=1, n_subsections=0, repeats=.FALSE.)
785
786      ELSE
787         tag = " Bond "
788         CALL section_create(section, __LOCATION__, name=TRIM(label), &
789                             description="Specifies the bond potential", &
790                             n_keywords=1, n_subsections=0, repeats=.TRUE.)
791
792         CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
793                             description="Defines the atomic kinds involved in the bond.", &
794                             usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
795                             n_var=2)
796         CALL section_add_keyword(section, keyword)
797         CALL keyword_release(keyword)
798      END IF
799
800      CALL keyword_create(keyword, __LOCATION__, name="KIND", &
801                          description="Define the kind of"//TRIM(tag)//"potential.", &
802                          usage="KIND HARMONIC", &
803                          enum_c_vals=s2a("HARMONIC", "CHARMM", "AMBER", "G87", "G96", "QUARTIC", &
804                                          "MORSE", "CUBIC", "FUES"), &
805                          enum_desc=s2a("Functional Form (HARMONIC|G87): 1/2*K*(R-R0)^2", &
806                                        "Functional Form (CHARMM|AMBER): K*(R-R0)^2", &
807                                        "Functional Form (CHARMM|AMBER): K*(R-R0)^2", &
808                                        "Functional Form (HARMONIC|G87): 1/2*K*(R-R0)^2", &
809                                        "Functional Form (G96): 1/4*K*(R^2-R0^2)^2", &
810                                        "Functional Form (QUARTIC): (1/2*K1+[1/3*K2+1/4*K3*|R-R0|]*|R-R0|)(R-R0)^2", &
811                                        "Functional Form (MORSE): K1*[(1-exp(-K2*(R-R0)))^2-1])", &
812                                        "Functional Form (CUBIC): K*(R-R0)^2*(1+cs*(R-R0)+7/12*(cs^2*(R-R0)^2))", &
813                                        "Functional Form (FUES): 1/2*K*R0^2*(1+R0/R*(R0/R-2))"), &
814                          enum_i_vals=(/do_ff_harmonic, &
815                                        do_ff_charmm, &
816                                        do_ff_amber, &
817                                        do_ff_g87, &
818                                        do_ff_g96, &
819                                        do_ff_quartic, &
820                                        do_ff_morse, &
821                                        do_ff_cubic, &
822                                        do_ff_fues/), &
823                          default_i_val=do_ff_charmm)
824      CALL section_add_keyword(section, keyword)
825      CALL keyword_release(keyword)
826
827      CALL keyword_create(keyword, __LOCATION__, name="K", &
828                          description="Defines the force constant of the potential. "// &
829                          "For MORSE potentials 2 numbers are expected. "// &
830                          "For QUARTIC potentials 3 numbers are expected.", &
831                          usage="K {real}", type_of_var=real_t, &
832                          n_var=-1, unit_str="internal_cp2k")
833      CALL section_add_keyword(section, keyword)
834      CALL keyword_release(keyword)
835
836      CALL keyword_create(keyword, __LOCATION__, name="CS", &
837                          description="Defines the cubic stretch term.", &
838                          usage="CS {real}", default_r_val=0.0_dp, type_of_var=real_t, &
839                          n_var=1, unit_str="bohr^-1")
840      CALL section_add_keyword(section, keyword)
841      CALL keyword_release(keyword)
842
843      CALL keyword_create(keyword, __LOCATION__, name="R0", &
844                          description="Defines the equilibrium distance.", &
845                          usage="R0 {real}", type_of_var=real_t, &
846                          n_var=1, unit_str="bohr")
847      CALL section_add_keyword(section, keyword)
848      CALL keyword_release(keyword)
849
850   END SUBROUTINE create_BOND_section
851
852! **************************************************************************************************
853!> \brief This section specifies the charge of the MM atoms
854!> \param section the section to create
855!> \author teo
856! **************************************************************************************************
857   SUBROUTINE create_charges_section(section)
858      TYPE(section_type), POINTER                        :: section
859
860      CHARACTER(len=*), PARAMETER :: routineN = 'create_charges_section', &
861         routineP = moduleN//':'//routineN
862
863      TYPE(keyword_type), POINTER                        :: keyword
864
865      CPASSERT(.NOT. ASSOCIATED(section))
866      CALL section_create(section, __LOCATION__, name="charges", &
867                          description="Allow to specify an array of classical charges, thus avoiding the"// &
868                          " packing and permitting the usage of different charges for same atomic types.", &
869                          n_keywords=1, n_subsections=0, repeats=.FALSE.)
870
871      NULLIFY (keyword)
872      CALL keyword_create(keyword, __LOCATION__, name="_DEFAULT_KEYWORD_", &
873                          description="Value of the charge for the individual atom. Order MUST reflect"// &
874                          " the one specified for the geometry.", repeats=.TRUE., usage="{Real}", &
875                          type_of_var=real_t)
876      CALL section_add_keyword(section, keyword)
877      CALL keyword_release(keyword)
878
879   END SUBROUTINE create_charges_section
880
881! **************************************************************************************************
882!> \brief This section specifies the charge of the MM atoms
883!> \param section the section to create
884!> \author teo
885! **************************************************************************************************
886   SUBROUTINE create_charge_section(section)
887      TYPE(section_type), POINTER                        :: section
888
889      CHARACTER(len=*), PARAMETER :: routineN = 'create_charge_section', &
890         routineP = moduleN//':'//routineN
891
892      TYPE(keyword_type), POINTER                        :: keyword
893
894      CPASSERT(.NOT. ASSOCIATED(section))
895      CALL section_create(section, __LOCATION__, name="charge", &
896                          description="This section specifies the charge of the MM atoms", &
897                          n_keywords=1, n_subsections=0, repeats=.TRUE.)
898
899      NULLIFY (keyword)
900
901      CALL keyword_create(keyword, __LOCATION__, name="ATOM", &
902                          description="Defines the atomic kind of the charge.", &
903                          usage="ATOM {KIND1}", type_of_var=char_t, &
904                          n_var=1)
905      CALL section_add_keyword(section, keyword)
906      CALL keyword_release(keyword)
907
908      CALL keyword_create(keyword, __LOCATION__, name="CHARGE", &
909                          description="Defines the charge of the MM atom in electron charge unit.", &
910                          usage="CHARGE {real}", type_of_var=real_t, &
911                          n_var=1)
912      CALL section_add_keyword(section, keyword)
913      CALL keyword_release(keyword)
914
915   END SUBROUTINE create_charge_section
916
917! **************************************************************************************************
918!> \brief This section specifies the isotropic polarizability of the MM atoms
919!> \param section the section to create
920!> \author Marcel Baer
921! **************************************************************************************************
922   SUBROUTINE create_quadrupole_section(section)
923      TYPE(section_type), POINTER                        :: section
924
925      CHARACTER(len=*), PARAMETER :: routineN = 'create_quadrupole_section', &
926         routineP = moduleN//':'//routineN
927
928      TYPE(keyword_type), POINTER                        :: keyword
929
930      CPASSERT(.NOT. ASSOCIATED(section))
931      CALL section_create( &
932         section, __LOCATION__, name="QUADRUPOLE", &
933         description="This section specifies that we will perform an SCF quadrupole calculation of the MM atoms. "// &
934         "Needs KEYWORD POL_SCF in POISSON secton", &
935         n_keywords=1, n_subsections=0, repeats=.TRUE.)
936
937      NULLIFY (keyword)
938
939      CALL keyword_create(keyword, __LOCATION__, name="ATOM", &
940                          description="Defines the atomic kind of the SCF quadrupole.", &
941                          usage="ATOM {KIND1}", type_of_var=char_t, &
942                          n_var=1)
943      CALL section_add_keyword(section, keyword)
944      CALL keyword_release(keyword)
945
946      CALL keyword_create(keyword, __LOCATION__, name="CPOL", &
947                          description="Defines the isotropic polarizability of the MM atom.", &
948                          usage="CPOL {real}", type_of_var=real_t, &
949                          n_var=1, unit_str='internal_cp2k')
950      CALL section_add_keyword(section, keyword)
951      CALL keyword_release(keyword)
952
953   END SUBROUTINE create_quadrupole_section
954
955! **************************************************************************************************
956!> \brief This section specifies the isotropic polarizability of the MM atoms
957!> \param section the section to create
958!> \author Marcel Baer
959! **************************************************************************************************
960   SUBROUTINE create_dipole_section(section)
961      TYPE(section_type), POINTER                        :: section
962
963      CHARACTER(len=*), PARAMETER :: routineN = 'create_dipole_section', &
964         routineP = moduleN//':'//routineN
965
966      TYPE(keyword_type), POINTER                        :: keyword
967      TYPE(section_type), POINTER                        :: subsection
968
969      CPASSERT(.NOT. ASSOCIATED(section))
970      CALL section_create(section, __LOCATION__, name="DIPOLE", &
971                          description="This section specifies that we will perform an SCF dipole calculation of the MM atoms. "// &
972                          "Needs KEYWORD POL_SCF in POISSON secton", &
973                          n_keywords=1, n_subsections=1, repeats=.TRUE.)
974
975      NULLIFY (subsection, keyword)
976
977      CALL keyword_create(keyword, __LOCATION__, name="ATOM", &
978                          description="Defines the atomic kind of the SCF dipole.", &
979                          usage="ATOM {KIND1}", type_of_var=char_t, &
980                          n_var=1)
981      CALL section_add_keyword(section, keyword)
982      CALL keyword_release(keyword)
983
984      CALL keyword_create(keyword, __LOCATION__, name="APOL", &
985                          description="Defines the isotropic polarizability of the MM atom.", &
986                          usage="APOL {real}", type_of_var=real_t, &
987                          n_var=1, unit_str='angstrom^3')
988      CALL section_add_keyword(section, keyword)
989      CALL keyword_release(keyword)
990
991      CALL create_DAMPING_section(subsection)
992      CALL section_add_subsection(section, subsection)
993      CALL section_release(subsection)
994   END SUBROUTINE create_dipole_section
995
996! **************************************************************************************************
997!> \brief This section specifies the idamping parameters for polarizable atoms
998!> \param section the section to create
999!> \author Rodolphe Vuilleumier
1000! **************************************************************************************************
1001   SUBROUTINE create_damping_section(section)
1002      TYPE(section_type), POINTER                        :: section
1003
1004      CHARACTER(len=*), PARAMETER :: routineN = 'create_damping_section', &
1005         routineP = moduleN//':'//routineN
1006
1007      TYPE(keyword_type), POINTER                        :: keyword
1008
1009      CPASSERT(.NOT. ASSOCIATED(section))
1010      CALL section_create(section, __LOCATION__, name="DAMPING", &
1011                          description="This section specifies optional electric field damping for the polarizable atoms. ", &
1012                          n_keywords=4, n_subsections=0, repeats=.TRUE.)
1013
1014      NULLIFY (keyword)
1015
1016      CALL keyword_create(keyword, __LOCATION__, name="ATOM", &
1017                          description="Defines the atomic kind for this damping function.", &
1018                          usage="ATOM {KIND1}", type_of_var=char_t, &
1019                          n_var=1)
1020      CALL section_add_keyword(section, keyword)
1021      CALL keyword_release(keyword)
1022
1023      CALL keyword_create(keyword, __LOCATION__, name="TYPE", &
1024                          description="Defines the damping type.", &
1025                          usage="TYPE {string}", type_of_var=char_t, &
1026                          n_var=1, default_c_val="TANG-TOENNIES")
1027      CALL section_add_keyword(section, keyword)
1028      CALL keyword_release(keyword)
1029
1030      CALL keyword_create(keyword, __LOCATION__, name="ORDER", &
1031                          description="Defines the order for this damping.", &
1032                          usage="ORDER {integer}", type_of_var=integer_t, &
1033                          n_var=1, default_i_val=3)
1034      CALL section_add_keyword(section, keyword)
1035      CALL keyword_release(keyword)
1036
1037      CALL keyword_create(keyword, __LOCATION__, name="BIJ", &
1038                          description="Defines the BIJ parameter for this damping.", &
1039                          usage="BIJ {real}", type_of_var=real_t, &
1040                          n_var=1, unit_str='angstrom^-1')
1041      CALL section_add_keyword(section, keyword)
1042      CALL keyword_release(keyword)
1043
1044      CALL keyword_create(keyword, __LOCATION__, name="CIJ", &
1045                          description="Defines the CIJ parameter for this damping.", &
1046                          usage="CIJ {real}", type_of_var=real_t, &
1047                          n_var=1, unit_str='')
1048      CALL section_add_keyword(section, keyword)
1049      CALL keyword_release(keyword)
1050
1051   END SUBROUTINE create_damping_section
1052
1053! **************************************************************************************************
1054!> \brief This section specifies the charge of the MM atoms
1055!> \param section the section to create
1056!> \author teo
1057! **************************************************************************************************
1058   SUBROUTINE create_shell_section(section)
1059      TYPE(section_type), POINTER                        :: section
1060
1061      CHARACTER(len=*), PARAMETER :: routineN = 'create_shell_section', &
1062         routineP = moduleN//':'//routineN
1063
1064      TYPE(keyword_type), POINTER                        :: keyword
1065
1066      CPASSERT(.NOT. ASSOCIATED(section))
1067      CALL section_create(section, __LOCATION__, name="SHELL", &
1068                          description="This section specifies the parameters for shell-model potentials", &
1069                          n_keywords=6, n_subsections=0, repeats=.TRUE., &
1070                          citations=(/Dick1958, Mitchell1993, Devynck2012/))
1071
1072      NULLIFY (keyword)
1073
1074      CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
1075                          description="The kind for which the shell potential parameters are given ", &
1076                          usage="H", default_c_val="DEFAULT")
1077      CALL section_add_keyword(section, keyword)
1078      CALL keyword_release(keyword)
1079
1080      CALL keyword_create(keyword, __LOCATION__, name="CORE_CHARGE", &
1081                          variants=(/"CORE"/), &
1082                          description="Partial charge assigned to the core (electron charge units)", &
1083                          usage="CORE_CHARGE {real}", &
1084                          default_r_val=0.0_dp)
1085      CALL section_add_keyword(section, keyword)
1086      CALL keyword_release(keyword)
1087
1088      CALL keyword_create(keyword, __LOCATION__, name="SHELL_CHARGE", &
1089                          variants=(/"SHELL"/), &
1090                          description="Partial charge assigned to the shell (electron charge units)", &
1091                          usage="SHELL_CHARGE {real}", &
1092                          default_r_val=0.0_dp)
1093      CALL section_add_keyword(section, keyword)
1094      CALL keyword_release(keyword)
1095
1096      CALL keyword_create(keyword, __LOCATION__, name="MASS_FRACTION", &
1097                          variants=(/"MASS"/), &
1098                          description="Fraction of the mass of the atom to be assigned to the shell", &
1099                          usage="MASS_FRACTION {real}", &
1100                          default_r_val=0.1_dp)
1101      CALL section_add_keyword(section, keyword)
1102      CALL keyword_release(keyword)
1103
1104      CALL keyword_create(keyword, __LOCATION__, name="K2_SPRING", &
1105                          variants=s2a("K2", "SPRING"), &
1106                          description="Force constant k2 of the spring potential 1/2*k2*r^2 + 1/24*k4*r^4 "// &
1107                          "binding a core-shell pair when a core-shell potential is employed.", &
1108                          repeats=.FALSE., &
1109                          usage="K2_SPRING {real}", &
1110                          default_r_val=-1.0_dp, &
1111                          unit_str="hartree*bohr^-2")
1112      CALL section_add_keyword(section, keyword)
1113      CALL keyword_release(keyword)
1114
1115      CALL keyword_create(keyword, __LOCATION__, name="K4_SPRING", &
1116                          variants=s2a("K4"), &
1117                          description="Force constant k4 of the spring potential 1/2*k2*r^2 + 1/24*k4*r^4 "// &
1118                          "binding a core-shell pair when a core-shell potential is employed. "// &
1119                          "By default a harmonic spring potential is used, i.e. k4 is zero.", &
1120                          repeats=.FALSE., &
1121                          usage="K4_SPRING {real}", &
1122                          default_r_val=0.0_dp, &
1123                          unit_str="hartree*bohr^-4")
1124      CALL section_add_keyword(section, keyword)
1125      CALL keyword_release(keyword)
1126
1127      CALL keyword_create(keyword, __LOCATION__, name="MAX_DISTANCE", &
1128                          description="Assign a maximum elongation of the spring, "// &
1129                          "if negative no limit is imposed", &
1130                          usage="MAX_DISTANCE 0.0", &
1131                          default_r_val=-1.0_dp, &
1132                          unit_str="angstrom")
1133      CALL section_add_keyword(section, keyword)
1134      CALL keyword_release(keyword)
1135
1136      CALL keyword_create(keyword, __LOCATION__, name="SHELL_CUTOFF", &
1137                          description="Define a screening function to exclude some neighbors "// &
1138                          " of the shell when electrostatic interaction are considered, "// &
1139                          "if negative no screening is operated", &
1140                          usage="SHELL_CUTOFF -1.0", &
1141                          default_r_val=-1.0_dp, &
1142                          unit_str="angstrom")
1143      CALL section_add_keyword(section, keyword)
1144      CALL keyword_release(keyword)
1145
1146   END SUBROUTINE create_shell_section
1147
1148! **************************************************************************************************
1149!> \brief This section specifies the input parameters for 1-4 NON-BONDED
1150!>      Interactions
1151!> \param section the section to create
1152!> \author teo
1153! **************************************************************************************************
1154   SUBROUTINE create_NONBONDED14_section(section)
1155      TYPE(section_type), POINTER                        :: section
1156
1157      CHARACTER(len=*), PARAMETER :: routineN = 'create_NONBONDED14_section', &
1158         routineP = moduleN//':'//routineN
1159
1160      TYPE(section_type), POINTER                        :: subsection
1161
1162      CPASSERT(.NOT. ASSOCIATED(section))
1163      CALL section_create(section, __LOCATION__, name="nonbonded14", &
1164                          description="This section specifies the input parameters for 1-4 NON-BONDED interactions.", &
1165                          n_keywords=1, n_subsections=0, repeats=.FALSE.)
1166
1167      NULLIFY (subsection)
1168      CALL create_LJ_section(subsection)
1169      CALL section_add_subsection(section, subsection)
1170      CALL section_release(subsection)
1171
1172      CALL create_Williams_section(subsection)
1173      CALL section_add_subsection(section, subsection)
1174      CALL section_release(subsection)
1175
1176      CALL create_Goodwin_section(subsection)
1177      CALL section_add_subsection(section, subsection)
1178      CALL section_release(subsection)
1179
1180      CALL create_GENPOT_section(subsection)
1181      CALL section_add_subsection(section, subsection)
1182      CALL section_release(subsection)
1183
1184   END SUBROUTINE create_NONBONDED14_section
1185
1186! **************************************************************************************************
1187!> \brief This section specifies the input parameters for 1-4 NON-BONDED
1188!>      Interactions
1189!> \param section the section to create
1190!> \author teo
1191! **************************************************************************************************
1192   SUBROUTINE create_NONBONDED_section(section)
1193      TYPE(section_type), POINTER                        :: section
1194
1195      CHARACTER(len=*), PARAMETER :: routineN = 'create_NONBONDED_section', &
1196         routineP = moduleN//':'//routineN
1197
1198      TYPE(section_type), POINTER                        :: subsection
1199
1200      CPASSERT(.NOT. ASSOCIATED(section))
1201      CALL section_create(section, __LOCATION__, name="nonbonded", &
1202                          description="This section specifies the input parameters for NON-BONDED interactions.", &
1203                          n_keywords=1, n_subsections=0, repeats=.FALSE.)
1204
1205      NULLIFY (subsection)
1206      CALL create_LJ_section(subsection)
1207      CALL section_add_subsection(section, subsection)
1208      CALL section_release(subsection)
1209
1210      CALL create_Williams_section(subsection)
1211      CALL section_add_subsection(section, subsection)
1212      CALL section_release(subsection)
1213
1214      CALL create_EAM_section(subsection)
1215      CALL section_add_subsection(section, subsection)
1216      CALL section_release(subsection)
1217
1218      CALL create_QUIP_section(subsection)
1219      CALL section_add_subsection(section, subsection)
1220      CALL section_release(subsection)
1221
1222      CALL create_Goodwin_section(subsection)
1223      CALL section_add_subsection(section, subsection)
1224      CALL section_release(subsection)
1225
1226      CALL create_IPBV_section(subsection)
1227      CALL section_add_subsection(section, subsection)
1228      CALL section_release(subsection)
1229
1230      CALL create_BMHFT_section(subsection)
1231      CALL section_add_subsection(section, subsection)
1232      CALL section_release(subsection)
1233
1234      CALL create_BMHFTD_section(subsection)
1235      CALL section_add_subsection(section, subsection)
1236      CALL section_release(subsection)
1237
1238      CALL create_Buck4r_section(subsection)
1239      CALL section_add_subsection(section, subsection)
1240      CALL section_release(subsection)
1241
1242      CALL create_Buckmorse_section(subsection)
1243      CALL section_add_subsection(section, subsection)
1244      CALL section_release(subsection)
1245
1246      CALL create_GENPOT_section(subsection)
1247      CALL section_add_subsection(section, subsection)
1248      CALL section_release(subsection)
1249
1250      CALL create_Tersoff_section(subsection)
1251      CALL section_add_subsection(section, subsection)
1252      CALL section_release(subsection)
1253
1254      CALL create_Siepmann_section(subsection)
1255      CALL section_add_subsection(section, subsection)
1256      CALL section_release(subsection)
1257
1258   END SUBROUTINE create_NONBONDED_section
1259
1260! **************************************************************************************************
1261!> \brief This section specifies the input parameters for generation of
1262!>      neighbor lists
1263!> \param section the section to create
1264!> \author teo [07.2007] - Zurich University
1265! **************************************************************************************************
1266   SUBROUTINE create_neighbor_lists_section(section)
1267      TYPE(section_type), POINTER                        :: section
1268
1269      CHARACTER(len=*), PARAMETER :: routineN = 'create_neighbor_lists_section', &
1270         routineP = moduleN//':'//routineN
1271
1272      TYPE(keyword_type), POINTER                        :: keyword
1273
1274      NULLIFY (keyword)
1275      CPASSERT(.NOT. ASSOCIATED(section))
1276      CALL section_create(section, __LOCATION__, name="neighbor_lists", &
1277                          description="This section specifies the input parameters for the construction of"// &
1278                          " neighbor lists.", &
1279                          n_keywords=1, n_subsections=0, repeats=.FALSE.)
1280
1281      CALL keyword_create(keyword, __LOCATION__, name="VERLET_SKIN", &
1282                          description="Defines the Verlet Skin for the generation of the neighbor lists", &
1283                          usage="VERLET_SKIN {real}", default_r_val=cp_unit_to_cp2k(value=1.0_dp, &
1284                                                                                    unit_str="angstrom"), &
1285                          unit_str="angstrom")
1286      CALL section_add_keyword(section, keyword)
1287      CALL keyword_release(keyword)
1288
1289      CALL keyword_create(keyword, __LOCATION__, name="neighbor_lists_from_scratch", &
1290                          description="This keyword enables the building of the neighbouring list from scratch.", &
1291                          usage="neighbor_lists_from_scratch logical", &
1292                          default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1293      CALL section_add_keyword(section, keyword)
1294      CALL keyword_release(keyword)
1295
1296      CALL keyword_create(keyword, __LOCATION__, name="GEO_CHECK", &
1297                          description="This keyword enables the check that two atoms are never below the minimum"// &
1298                          " value used to construct the splines during the construction of the neighbouring list."// &
1299                          " Disabling this keyword avoids CP2K to abort in case two atoms are below the minimum "// &
1300                          " value of the radius used to generate the splines.", &
1301                          usage="GEO_CHECK", &
1302                          default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
1303      CALL section_add_keyword(section, keyword)
1304      CALL keyword_release(keyword)
1305
1306   END SUBROUTINE create_neighbor_lists_section
1307
1308! **************************************************************************************************
1309!> \brief This section specifies the input parameters for a generic potential form
1310!> \param section the section to create
1311!> \author teo
1312! **************************************************************************************************
1313   SUBROUTINE create_GENPOT_section(section)
1314      TYPE(section_type), POINTER                        :: section
1315
1316      CHARACTER(len=*), PARAMETER :: routineN = 'create_GENPOT_section', &
1317         routineP = moduleN//':'//routineN
1318
1319      TYPE(keyword_type), POINTER                        :: keyword
1320
1321      CPASSERT(.NOT. ASSOCIATED(section))
1322      CALL section_create(section, __LOCATION__, name="GENPOT", &
1323                          description="This section specifies the input parameters for a generic potential type. "// &
1324                          "A functional form is specified. Mathematical Operators recognized are +, -, *, /, ** "// &
1325                          "or alternatively ^, whereas symbols for brackets must be (). "// &
1326                          "The function parser recognizes the (single argument) Fortran 90 intrinsic functions "// &
1327                          "abs, exp, log10, log, sqrt, sinh, cosh, tanh, sin, cos, tan, asin, acos, atan, erf, erfc. "// &
1328                          "Parsing for intrinsic functions is not case sensitive.", &
1329                          n_keywords=1, n_subsections=0, repeats=.TRUE.)
1330
1331      NULLIFY (keyword)
1332
1333      CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
1334                          description="Defines the atomic kind involved in the generic potential", &
1335                          usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
1336                          n_var=2)
1337      CALL section_add_keyword(section, keyword)
1338      CALL keyword_release(keyword)
1339
1340      CALL keyword_create(keyword, __LOCATION__, name="FUNCTION", &
1341                          description="Specifies the functional form in mathematical notation.", &
1342                          usage="FUNCTION a*EXP(-b*x^2)/x+D*log10(x)", type_of_var=lchar_t, &
1343                          n_var=1)
1344      CALL section_add_keyword(section, keyword)
1345      CALL keyword_release(keyword)
1346
1347      CALL keyword_create(keyword, __LOCATION__, name="VARIABLES", &
1348                          description="Defines the variable of the functional form.", &
1349                          usage="VARIABLES x", type_of_var=char_t, &
1350                          n_var=-1)
1351      CALL section_add_keyword(section, keyword)
1352      CALL keyword_release(keyword)
1353
1354      CALL keyword_create(keyword, __LOCATION__, name="PARAMETERS", &
1355                          description="Defines the parameters of the functional form", &
1356                          usage="PARAMETERS a b D", type_of_var=char_t, &
1357                          n_var=-1, repeats=.TRUE.)
1358      CALL section_add_keyword(section, keyword)
1359      CALL keyword_release(keyword)
1360
1361      CALL keyword_create(keyword, __LOCATION__, name="VALUES", &
1362                          description="Defines the values of parameter of the functional form", &
1363                          usage="VALUES ", type_of_var=real_t, &
1364                          n_var=-1, repeats=.TRUE., unit_str="internal_cp2k")
1365      CALL section_add_keyword(section, keyword)
1366      CALL keyword_release(keyword)
1367
1368      CALL keyword_create(keyword, __LOCATION__, name="UNITS", &
1369                          description="Optionally, allows to define valid CP2K unit strings for each parameter value. "// &
1370                          "It is assumed that the corresponding parameter value is specified in this unit.", &
1371                          usage="UNITS angstrom eV*angstrom^-1 angstrom^1 K", type_of_var=char_t, &
1372                          n_var=-1, repeats=.TRUE.)
1373      CALL section_add_keyword(section, keyword)
1374      CALL keyword_release(keyword)
1375
1376      CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
1377                          description="Defines the cutoff parameter of the generic potential", &
1378                          usage="RCUT {real}", default_r_val=cp_unit_to_cp2k(value=10.0_dp, &
1379                                                                             unit_str="angstrom"), &
1380                          unit_str="angstrom")
1381      CALL section_add_keyword(section, keyword)
1382      CALL keyword_release(keyword)
1383
1384      CALL keyword_create(keyword, __LOCATION__, name="RMIN", &
1385                          description="Defines the lower bound of the potential. If not set the range is the"// &
1386                          " full range generate by the spline", usage="RMIN {real}", &
1387                          type_of_var=real_t, unit_str="angstrom")
1388      CALL section_add_keyword(section, keyword)
1389      CALL keyword_release(keyword)
1390
1391      CALL keyword_create(keyword, __LOCATION__, name="RMAX", &
1392                          description="Defines the upper bound of the potential. If not set the range is the"// &
1393                          " full range generate by the spline", usage="RMAX {real}", &
1394                          type_of_var=real_t, unit_str="angstrom")
1395      CALL section_add_keyword(section, keyword)
1396      CALL keyword_release(keyword)
1397
1398   END SUBROUTINE create_GENPOT_section
1399
1400! **************************************************************************************************
1401!> \brief This section specifies the input parameters for EAM  potential type
1402!> \param section the section to create
1403!> \author teo
1404! **************************************************************************************************
1405   SUBROUTINE create_EAM_section(section)
1406      TYPE(section_type), POINTER                        :: section
1407
1408      CHARACTER(len=*), PARAMETER :: routineN = 'create_EAM_section', &
1409         routineP = moduleN//':'//routineN
1410
1411      TYPE(keyword_type), POINTER                        :: keyword
1412
1413      CPASSERT(.NOT. ASSOCIATED(section))
1414      CALL section_create(section, __LOCATION__, name="EAM", &
1415                          description="This section specifies the input parameters for EAM potential type.", &
1416                          citations=(/Foiles1986/), n_keywords=1, n_subsections=0, repeats=.TRUE.)
1417
1418      NULLIFY (keyword)
1419
1420      CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
1421                          description="Defines the atomic kind involved in the nonbond potential", &
1422                          usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
1423                          n_var=2)
1424      CALL section_add_keyword(section, keyword)
1425      CALL keyword_release(keyword)
1426
1427      CALL keyword_create(keyword, __LOCATION__, name="PARM_FILE_NAME", &
1428                          variants=(/"PARMFILE"/), &
1429                          description="Specifies the filename that contains the tabulated EAM potential. "// &
1430                          "File structure: the first line of the potential file contains a title. "// &
1431                          "The second line contains: atomic number, mass and lattice constant. "// &
1432                          "These information are parsed but not used in CP2K. The third line contains: "// &
1433                          "dr: increment of r for the tabulated values of density and phi (assuming r starts in 0) [angstrom]; "// &
1434                          "drho: increment of density for the tabulated values of the embedding function (assuming rho starts "// &
1435                          "in 0) [au_c]; cutoff: cutoff of the EAM potential; npoints: number of points in tabulated. Follow "// &
1436                          "in order npoints lines for rho [au_c] and its derivative [au_c*angstrom^-1]; npoints lines for "// &
1437                          "PHI [ev] and its derivative [ev*angstrom^-1] and npoint lines for the embedded function [ev] "// &
1438                          "and its derivative [ev*au_c^-1].", &
1439                          usage="PARM_FILE_NAME {FILENAME}", default_lc_val=" ")
1440      CALL section_add_keyword(section, keyword)
1441      CALL keyword_release(keyword)
1442
1443   END SUBROUTINE create_EAM_section
1444
1445! **************************************************************************************************
1446!> \brief This section specifies the input parameters for QUIP  potential type
1447!> \param section the section to create
1448!> \author teo
1449! **************************************************************************************************
1450   SUBROUTINE create_QUIP_section(section)
1451      TYPE(section_type), POINTER                        :: section
1452
1453      CHARACTER(len=*), PARAMETER :: routineN = 'create_QUIP_section', &
1454         routineP = moduleN//':'//routineN
1455
1456      TYPE(keyword_type), POINTER                        :: keyword
1457
1458      CPASSERT(.NOT. ASSOCIATED(section))
1459      CALL section_create(section, __LOCATION__, name="QUIP", &
1460                          description="This section specifies the input parameters for QUIP potential type. "// &
1461                          "Mainly intended for things like GAP corrections to DFT "// &
1462                          "to achieve correlated-wavefunction-like accuracy. "// &
1463                          "Requires linking with quip library from <a href=""http://www.libatoms.org"" "// &
1464                          "target=""_blank"">http://www.libatoms.org</a> .", &
1465                          citations=(/QUIP_ref/), n_keywords=1, n_subsections=0, repeats=.TRUE.)
1466
1467      NULLIFY (keyword)
1468
1469      CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
1470                          description="Defines the atomic kinds involved in the QUIP potential. "// &
1471                          "For more than 2 elements, &QUIP section must be repeated until each element "// &
1472                          "has been mentioned at least once. Set IGNORE_MISSING_CRITICAL_PARAMS to T "// &
1473                          "in enclosing &FORCEFIELD section to avoid having to list every pair of elements separately.", &
1474                          usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
1475                          n_var=2)
1476      CALL section_add_keyword(section, keyword)
1477      CALL keyword_release(keyword)
1478
1479      CALL keyword_create(keyword, __LOCATION__, name="PARM_FILE_NAME", &
1480                          variants=(/"PARMFILE"/), &
1481                          description="Specifies the filename that contains the QUIP potential.", &
1482                          usage="PARM_FILE_NAME {FILENAME}", default_lc_val="quip_params.xml")
1483      CALL section_add_keyword(section, keyword)
1484      CALL keyword_release(keyword)
1485
1486      CALL keyword_create(keyword, __LOCATION__, name="INIT_ARGS", &
1487                          description="Specifies the potential initialization arguments for the QUIP potential. "// &
1488                          "If blank (default) first potential defined in QUIP parameter file will be used.", &
1489                          usage="INIT_ARGS", default_c_vals=(/""/), &
1490                          n_var=-1, type_of_var=char_t)
1491      CALL section_add_keyword(section, keyword)
1492      CALL keyword_release(keyword)
1493
1494      CALL keyword_create(keyword, __LOCATION__, name="CALC_ARGS", &
1495                          description="Specifies the potential calculation arguments for the QUIP potential.", &
1496                          usage="CALC_ARGS", default_c_vals=(/""/), &
1497                          n_var=-1, type_of_var=char_t)
1498      CALL section_add_keyword(section, keyword)
1499      CALL keyword_release(keyword)
1500
1501   END SUBROUTINE create_QUIP_section
1502
1503! **************************************************************************************************
1504!> \brief This section specifies the input parameters for Lennard-Jones potential type
1505!> \param section the section to create
1506!> \author teo
1507! **************************************************************************************************
1508   SUBROUTINE create_LJ_section(section)
1509      TYPE(section_type), POINTER                        :: section
1510
1511      CHARACTER(len=*), PARAMETER :: routineN = 'create_LJ_section', &
1512         routineP = moduleN//':'//routineN
1513
1514      TYPE(keyword_type), POINTER                        :: keyword
1515
1516      CPASSERT(.NOT. ASSOCIATED(section))
1517      CALL section_create(section, __LOCATION__, name="lennard-jones", &
1518                          description="This section specifies the input parameters for LENNARD-JONES potential type."// &
1519                          "Functional form: V(r) = 4.0 * EPSILON * [(SIGMA/r)^12-(SIGMA/r)^6].", &
1520                          n_keywords=1, n_subsections=0, repeats=.TRUE.)
1521
1522      NULLIFY (keyword)
1523
1524      CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
1525                          description="Defines the atomic kind involved in the nonbond potential", &
1526                          usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
1527                          n_var=2)
1528      CALL section_add_keyword(section, keyword)
1529      CALL keyword_release(keyword)
1530
1531      CALL keyword_create(keyword, __LOCATION__, name="EPSILON", &
1532                          description="Defines the EPSILON parameter of the LJ potential", &
1533                          usage="EPSILON {real}", type_of_var=real_t, &
1534                          n_var=1, unit_str="K_e")
1535      CALL section_add_keyword(section, keyword)
1536      CALL keyword_release(keyword)
1537
1538      CALL keyword_create(keyword, __LOCATION__, name="SIGMA", &
1539                          description="Defines the SIGMA parameter of the LJ potential", &
1540                          usage="SIGMA {real}", type_of_var=real_t, &
1541                          n_var=1, unit_str="angstrom")
1542      CALL section_add_keyword(section, keyword)
1543      CALL keyword_release(keyword)
1544
1545      CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
1546                          description="Defines the cutoff parameter of the LJ potential", &
1547                          usage="RCUT {real}", default_r_val=cp_unit_to_cp2k(value=10.0_dp, &
1548                                                                             unit_str="angstrom"), &
1549                          unit_str="angstrom")
1550      CALL section_add_keyword(section, keyword)
1551      CALL keyword_release(keyword)
1552
1553      CALL keyword_create(keyword, __LOCATION__, name="RMIN", &
1554                          description="Defines the lower bound of the potential. If not set the range is the"// &
1555                          " full range generate by the spline", usage="RMIN {real}", &
1556                          type_of_var=real_t, unit_str="angstrom")
1557      CALL section_add_keyword(section, keyword)
1558      CALL keyword_release(keyword)
1559
1560      CALL keyword_create(keyword, __LOCATION__, name="RMAX", &
1561                          description="Defines the upper bound of the potential. If not set the range is the"// &
1562                          " full range generate by the spline", usage="RMAX {real}", &
1563                          type_of_var=real_t, unit_str="angstrom")
1564      CALL section_add_keyword(section, keyword)
1565      CALL keyword_release(keyword)
1566
1567   END SUBROUTINE create_LJ_section
1568
1569! **************************************************************************************************
1570!> \brief This section specifies the input parameters for Williams potential type
1571!> \param section the section to create
1572!> \author teo
1573! **************************************************************************************************
1574   SUBROUTINE create_Williams_section(section)
1575      TYPE(section_type), POINTER                        :: section
1576
1577      CHARACTER(len=*), PARAMETER :: routineN = 'create_Williams_section', &
1578         routineP = moduleN//':'//routineN
1579
1580      TYPE(keyword_type), POINTER                        :: keyword
1581
1582      CPASSERT(.NOT. ASSOCIATED(section))
1583      CALL section_create(section, __LOCATION__, name="williams", &
1584                          description="This section specifies the input parameters for WILLIAMS potential type."// &
1585                          "Functional form: V(r) = A*EXP(-B*r) - C / r^6 .", &
1586                          n_keywords=1, n_subsections=0, repeats=.TRUE.)
1587
1588      NULLIFY (keyword)
1589
1590      CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
1591                          description="Defines the atomic kind involved in the nonbond potential", &
1592                          usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
1593                          n_var=2)
1594      CALL section_add_keyword(section, keyword)
1595      CALL keyword_release(keyword)
1596
1597      CALL keyword_create(keyword, __LOCATION__, name="A", &
1598                          description="Defines the A parameter of the Williams potential", &
1599                          usage="A {real}", type_of_var=real_t, &
1600                          n_var=1, unit_str="K_e")
1601      CALL section_add_keyword(section, keyword)
1602      CALL keyword_release(keyword)
1603
1604      CALL keyword_create(keyword, __LOCATION__, name="B", &
1605                          description="Defines the B parameter of the Williams potential", &
1606                          usage="B {real}", type_of_var=real_t, &
1607                          n_var=1, unit_str="angstrom^-1")
1608      CALL section_add_keyword(section, keyword)
1609      CALL keyword_release(keyword)
1610
1611      CALL keyword_create(keyword, __LOCATION__, name="C", &
1612                          description="Defines the C parameter of the Williams potential", &
1613                          usage="C {real}", type_of_var=real_t, &
1614                          n_var=1, unit_str="K_e*angstrom^6")
1615      CALL section_add_keyword(section, keyword)
1616      CALL keyword_release(keyword)
1617
1618      CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
1619                          description="Defines the cutoff parameter of the Williams potential", &
1620                          usage="RCUT {real}", default_r_val=cp_unit_to_cp2k(value=10.0_dp, &
1621                                                                             unit_str="angstrom"), &
1622                          unit_str="angstrom")
1623      CALL section_add_keyword(section, keyword)
1624      CALL keyword_release(keyword)
1625
1626      CALL keyword_create(keyword, __LOCATION__, name="RMIN", &
1627                          description="Defines the lower bound of the potential. If not set the range is the"// &
1628                          " full range generate by the spline", usage="RMIN {real}", &
1629                          type_of_var=real_t, unit_str="angstrom")
1630      CALL section_add_keyword(section, keyword)
1631      CALL keyword_release(keyword)
1632
1633      CALL keyword_create(keyword, __LOCATION__, name="RMAX", &
1634                          description="Defines the upper bound of the potential. If not set the range is the"// &
1635                          " full range generate by the spline", usage="RMAX {real}", &
1636                          type_of_var=real_t, unit_str="angstrom")
1637      CALL section_add_keyword(section, keyword)
1638      CALL keyword_release(keyword)
1639
1640   END SUBROUTINE create_Williams_section
1641
1642! **************************************************************************************************
1643!> \brief This section specifies the input parameters for Goodwin potential type
1644!> \param section the section to create
1645!> \author teo
1646! **************************************************************************************************
1647   SUBROUTINE create_Goodwin_section(section)
1648      TYPE(section_type), POINTER                        :: section
1649
1650      CHARACTER(len=*), PARAMETER :: routineN = 'create_Goodwin_section', &
1651         routineP = moduleN//':'//routineN
1652
1653      TYPE(keyword_type), POINTER                        :: keyword
1654
1655      CPASSERT(.NOT. ASSOCIATED(section))
1656      CALL section_create(section, __LOCATION__, name="goodwin", &
1657                          description="This section specifies the input parameters for GOODWIN potential type."// &
1658                          "Functional form: V(r) = EXP(M*(-(r/DC)**MC+(D/DC)**MC))*VR0*(D/r)**M.", &
1659                          n_keywords=1, n_subsections=0, repeats=.TRUE.)
1660
1661      NULLIFY (keyword)
1662      CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
1663                          description="Defines the atomic kind involved in the nonbond potential", &
1664                          usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
1665                          n_var=2)
1666      CALL section_add_keyword(section, keyword)
1667      CALL keyword_release(keyword)
1668
1669      CALL keyword_create(keyword, __LOCATION__, name="VR0", &
1670                          description="Defines the VR0 parameter of the Goodwin potential", &
1671                          usage="VR0 {real}", type_of_var=real_t, &
1672                          n_var=1, unit_str="K_e")
1673      CALL section_add_keyword(section, keyword)
1674      CALL keyword_release(keyword)
1675
1676      CALL keyword_create(keyword, __LOCATION__, name="D", &
1677                          description="Defines the D parameter of the Goodwin potential", &
1678                          usage="D {real}", type_of_var=real_t, &
1679                          n_var=1, unit_str="angstrom")
1680      CALL section_add_keyword(section, keyword)
1681      CALL keyword_release(keyword)
1682
1683      CALL keyword_create(keyword, __LOCATION__, name="DC", &
1684                          description="Defines the DC parameter of the Goodwin potential", &
1685                          usage="DC {real}", type_of_var=real_t, &
1686                          n_var=1, unit_str="angstrom")
1687      CALL section_add_keyword(section, keyword)
1688      CALL keyword_release(keyword)
1689
1690      CALL keyword_create(keyword, __LOCATION__, name="M", &
1691                          description="Defines the M parameter of the Goodwin potential", &
1692                          usage="M {real}", type_of_var=integer_t, &
1693                          n_var=1)
1694      CALL section_add_keyword(section, keyword)
1695      CALL keyword_release(keyword)
1696
1697      CALL keyword_create(keyword, __LOCATION__, name="MC", &
1698                          description="Defines the MC parameter of the Goodwin potential", &
1699                          usage="MC {real}", type_of_var=integer_t, &
1700                          n_var=1)
1701      CALL section_add_keyword(section, keyword)
1702      CALL keyword_release(keyword)
1703
1704      CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
1705                          description="Defines the cutoff parameter of the Goodwin potential", &
1706                          usage="RCUT {real}", default_r_val=cp_unit_to_cp2k(value=10.0_dp, &
1707                                                                             unit_str="angstrom"), &
1708                          unit_str="angstrom")
1709      CALL section_add_keyword(section, keyword)
1710      CALL keyword_release(keyword)
1711
1712      CALL keyword_create(keyword, __LOCATION__, name="RMIN", &
1713                          description="Defines the lower bound of the potential. If not set the range is the"// &
1714                          " full range generate by the spline", usage="RMIN {real}", &
1715                          type_of_var=real_t, unit_str="angstrom")
1716      CALL section_add_keyword(section, keyword)
1717      CALL keyword_release(keyword)
1718
1719      CALL keyword_create(keyword, __LOCATION__, name="RMAX", &
1720                          description="Defines the upper bound of the potential. If not set the range is the"// &
1721                          " full range generate by the spline", usage="RMAX {real}", &
1722                          type_of_var=real_t, unit_str="angstrom")
1723      CALL section_add_keyword(section, keyword)
1724      CALL keyword_release(keyword)
1725
1726   END SUBROUTINE create_Goodwin_section
1727
1728! **************************************************************************************************
1729!> \brief This section specifies the input parameters for IPBV potential type
1730!> \param section the section to create
1731!> \author teo
1732! **************************************************************************************************
1733   SUBROUTINE create_ipbv_section(section)
1734      TYPE(section_type), POINTER                        :: section
1735
1736      CHARACTER(len=*), PARAMETER :: routineN = 'create_ipbv_section', &
1737         routineP = moduleN//':'//routineN
1738
1739      TYPE(keyword_type), POINTER                        :: keyword
1740
1741      CPASSERT(.NOT. ASSOCIATED(section))
1742      CALL section_create(section, __LOCATION__, name="ipbv", &
1743                          description="This section specifies the input parameters for IPBV potential type."// &
1744                          "Functional form: Implicit table function.", &
1745                          n_keywords=1, n_subsections=0, repeats=.TRUE.)
1746
1747      NULLIFY (keyword)
1748
1749      CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
1750                          description="Defines the atomic kind involved in the IPBV nonbond potential", &
1751                          usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
1752                          n_var=2)
1753      CALL section_add_keyword(section, keyword)
1754      CALL keyword_release(keyword)
1755
1756      CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
1757                          description="Defines the cutoff parameter of the IPBV potential", &
1758                          usage="RCUT {real}", default_r_val=cp_unit_to_cp2k(value=10.0_dp, &
1759                                                                             unit_str="angstrom"), &
1760                          unit_str="angstrom")
1761      CALL section_add_keyword(section, keyword)
1762      CALL keyword_release(keyword)
1763
1764      CALL keyword_create(keyword, __LOCATION__, name="RMIN", &
1765                          description="Defines the lower bound of the potential. If not set the range is the"// &
1766                          " full range generate by the spline", usage="RMIN {real}", &
1767                          type_of_var=real_t, unit_str="angstrom")
1768      CALL section_add_keyword(section, keyword)
1769      CALL keyword_release(keyword)
1770
1771      CALL keyword_create(keyword, __LOCATION__, name="RMAX", &
1772                          description="Defines the upper bound of the potential. If not set the range is the"// &
1773                          " full range generate by the spline", usage="RMAX {real}", &
1774                          type_of_var=real_t, unit_str="angstrom")
1775      CALL section_add_keyword(section, keyword)
1776      CALL keyword_release(keyword)
1777
1778   END SUBROUTINE create_ipbv_section
1779
1780! **************************************************************************************************
1781!> \brief This section specifies the input parameters for BMHFT potential type
1782!> \param section the section to create
1783!> \author teo
1784! **************************************************************************************************
1785   SUBROUTINE create_BMHFT_section(section)
1786      TYPE(section_type), POINTER                        :: section
1787
1788      CHARACTER(len=*), PARAMETER :: routineN = 'create_BMHFT_section', &
1789         routineP = moduleN//':'//routineN
1790
1791      TYPE(keyword_type), POINTER                        :: keyword
1792
1793      CPASSERT(.NOT. ASSOCIATED(section))
1794      CALL section_create(section, __LOCATION__, name="BMHFT", &
1795                          description="This section specifies the input parameters for BMHFT potential type."// &
1796                          "Functional form: V(r) = A * EXP(-B*r) - C/r^6 - D/r^8."// &
1797                          "Values available inside cp2k only for the Na/Cl pair.", &
1798                          citations=(/Tosi1964a, Tosi1964b/), n_keywords=1, n_subsections=0, repeats=.TRUE.)
1799
1800      NULLIFY (keyword)
1801
1802      CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
1803                          description="Defines the atomic kind involved in the BMHFT nonbond potential", &
1804                          usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
1805                          n_var=2)
1806      CALL section_add_keyword(section, keyword)
1807      CALL keyword_release(keyword)
1808
1809      CALL keyword_create(keyword, __LOCATION__, name="MAP_ATOMS", &
1810                          description="Defines the kinds for which internally is defined the BMHFT nonbond potential"// &
1811                          " at the moment only Na and Cl.", &
1812                          usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
1813                          n_var=2)
1814      CALL section_add_keyword(section, keyword)
1815      CALL keyword_release(keyword)
1816
1817      CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
1818                          description="Defines the cutoff parameter of the BMHFT potential", &
1819                          usage="RCUT {real}", default_r_val=7.8_dp, &
1820                          unit_str="angstrom")
1821      CALL section_add_keyword(section, keyword)
1822      CALL keyword_release(keyword)
1823
1824      CALL keyword_create(keyword, __LOCATION__, name="A", &
1825                          description="Defines the A parameter of the Fumi-Tosi Potential", &
1826                          usage="A {real}", type_of_var=real_t, &
1827                          n_var=1, unit_str="hartree")
1828      CALL section_add_keyword(section, keyword)
1829      CALL keyword_release(keyword)
1830
1831      CALL keyword_create(keyword, __LOCATION__, name="B", &
1832                          description="Defines the B parameter of the Fumi-Tosi Potential", &
1833                          usage="B {real}", type_of_var=real_t, &
1834                          n_var=1, unit_str="angstrom^-1")
1835      CALL section_add_keyword(section, keyword)
1836      CALL keyword_release(keyword)
1837
1838      CALL keyword_create(keyword, __LOCATION__, name="C", &
1839                          description="Defines the C parameter of the Fumi-Tosi Potential", &
1840                          usage="C {real}", type_of_var=real_t, &
1841                          n_var=1, unit_str="hartree*angstrom^6")
1842      CALL section_add_keyword(section, keyword)
1843      CALL keyword_release(keyword)
1844
1845      CALL keyword_create(keyword, __LOCATION__, name="D", &
1846                          description="Defines the D parameter of the Fumi-Tosi Potential", &
1847                          usage="D {real}", type_of_var=real_t, &
1848                          n_var=1, unit_str="hartree*angstrom^8")
1849      CALL section_add_keyword(section, keyword)
1850      CALL keyword_release(keyword)
1851
1852      CALL keyword_create(keyword, __LOCATION__, name="RMIN", &
1853                          description="Defines the lower bound of the potential. If not set the range is the"// &
1854                          " full range generate by the spline", usage="RMIN {real}", &
1855                          type_of_var=real_t, unit_str="angstrom")
1856      CALL section_add_keyword(section, keyword)
1857      CALL keyword_release(keyword)
1858
1859      CALL keyword_create(keyword, __LOCATION__, name="RMAX", &
1860                          description="Defines the upper bound of the potential. If not set the range is the"// &
1861                          " full range generate by the spline", usage="RMAX {real}", &
1862                          type_of_var=real_t, unit_str="angstrom")
1863      CALL section_add_keyword(section, keyword)
1864      CALL keyword_release(keyword)
1865
1866   END SUBROUTINE create_BMHFT_section
1867
1868! **************************************************************************************************
1869!> \brief This section specifies the input parameters for BMHFTD potential type
1870!> \param section the section to create
1871!> \author Mathieu Salanne 05.2010
1872! **************************************************************************************************
1873   SUBROUTINE create_BMHFTD_section(section)
1874      TYPE(section_type), POINTER                        :: section
1875
1876      CHARACTER(len=*), PARAMETER :: routineN = 'create_BMHFTD_section', &
1877         routineP = moduleN//':'//routineN
1878
1879      TYPE(keyword_type), POINTER                        :: keyword
1880
1881      CPASSERT(.NOT. ASSOCIATED(section))
1882      CALL section_create(section, __LOCATION__, name="BMHFTD", &
1883                          description="This section specifies the input parameters for BMHFTD potential type."// &
1884                          "Functional form: V(r) = A*exp(-B*r) - f_6*(r)C/r^6 - f_8(r)*D/r^8."// &
1885                          "where f_order(r)=1-exp(-BD * r) * \sum_{k=0}^order (BD * r)^k / k! ."// &
1886                          "(Tang-Toennies damping function)"// &
1887                          "No values available inside cp2k.", &
1888                          citations=(/Tosi1964a, Tosi1964b/), n_keywords=1, n_subsections=0, repeats=.TRUE.)
1889
1890      NULLIFY (keyword)
1891
1892      CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
1893                          description="Defines the atomic kind involved in the BMHFTD nonbond potential", &
1894                          usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
1895                          n_var=2)
1896      CALL section_add_keyword(section, keyword)
1897      CALL keyword_release(keyword)
1898
1899      CALL keyword_create(keyword, __LOCATION__, name="MAP_ATOMS", &
1900                          description="Defines the kinds for which internally is defined the BMHFTD nonbond potential"// &
1901                          " at the moment no species included.", &
1902                          usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
1903                          n_var=2)
1904      CALL section_add_keyword(section, keyword)
1905      CALL keyword_release(keyword)
1906
1907      CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
1908                          description="Defines the cutoff parameter of the BMHFTD potential", &
1909                          usage="RCUT {real}", default_r_val=7.8_dp, &
1910                          unit_str="angstrom")
1911      CALL section_add_keyword(section, keyword)
1912      CALL keyword_release(keyword)
1913
1914      CALL keyword_create(keyword, __LOCATION__, name="A", &
1915                          description="Defines the A parameter of the dispersion-damped Fumi-Tosi Potential", &
1916                          usage="A {real}", type_of_var=real_t, &
1917                          n_var=1, unit_str="hartree")
1918      CALL section_add_keyword(section, keyword)
1919      CALL keyword_release(keyword)
1920
1921      CALL keyword_create(keyword, __LOCATION__, name="B", &
1922                          description="Defines the B parameter of the dispersion-damped Fumi-Tosi Potential", &
1923                          usage="B {real}", type_of_var=real_t, &
1924                          n_var=1, unit_str="angstrom^-1")
1925      CALL section_add_keyword(section, keyword)
1926      CALL keyword_release(keyword)
1927
1928      CALL keyword_create(keyword, __LOCATION__, name="C", &
1929                          description="Defines the C parameter of the dispersion-damped Fumi-Tosi Potential", &
1930                          usage="C {real}", type_of_var=real_t, &
1931                          n_var=1, unit_str="hartree*angstrom^6")
1932      CALL section_add_keyword(section, keyword)
1933      CALL keyword_release(keyword)
1934
1935      CALL keyword_create(keyword, __LOCATION__, name="D", &
1936                          description="Defines the D parameter of the dispersion-damped Fumi-Tosi Potential", &
1937                          usage="D {real}", type_of_var=real_t, &
1938                          n_var=1, unit_str="hartree*angstrom^8")
1939      CALL section_add_keyword(section, keyword)
1940      CALL keyword_release(keyword)
1941
1942      CALL keyword_create(keyword, __LOCATION__, name="BD", &
1943                          description="Defines the BD parameter of the dispersion-damped Fumi-Tosi Potential", &
1944                          usage="D {real}", type_of_var=real_t, &
1945                          n_var=1, unit_str="angstrom^-1")
1946      CALL section_add_keyword(section, keyword)
1947      CALL keyword_release(keyword)
1948
1949      CALL keyword_create(keyword, __LOCATION__, name="ORDER", &
1950                          description="Defines the order for this damping.", &
1951                          usage="ORDER {integer}", type_of_var=integer_t, &
1952                          n_var=1, default_i_val=3)
1953      CALL section_add_keyword(section, keyword)
1954      CALL keyword_release(keyword)
1955
1956      CALL keyword_create(keyword, __LOCATION__, name="RMIN", &
1957                          description="Defines the lower bound of the potential. If not set the range is the"// &
1958                          " full range generate by the spline", usage="RMIN {real}", &
1959                          type_of_var=real_t, unit_str="angstrom")
1960      CALL section_add_keyword(section, keyword)
1961      CALL keyword_release(keyword)
1962
1963      CALL keyword_create(keyword, __LOCATION__, name="RMAX", &
1964                          description="Defines the upper bound of the potential. If not set the range is the"// &
1965                          " full range generate by the spline", usage="RMAX {real}", &
1966                          type_of_var=real_t, unit_str="angstrom")
1967      CALL section_add_keyword(section, keyword)
1968      CALL keyword_release(keyword)
1969
1970   END SUBROUTINE create_BMHFTD_section
1971
1972! **************************************************************************************************
1973!> \brief This section specifies the input parameters for Buckingham 4 ranges potential type
1974!> \param section the section to create
1975!> \author MI
1976! **************************************************************************************************
1977   SUBROUTINE create_Buck4r_section(section)
1978      TYPE(section_type), POINTER                        :: section
1979
1980      CHARACTER(len=*), PARAMETER :: routineN = 'create_Buck4r_section', &
1981         routineP = moduleN//':'//routineN
1982
1983      TYPE(keyword_type), POINTER                        :: keyword
1984
1985      CPASSERT(.NOT. ASSOCIATED(section))
1986      CALL section_create(section, __LOCATION__, name="BUCK4RANGES", &
1987                          description="This section specifies the input parameters for the Buckingham 4-ranges"// &
1988                          " potential type."// &
1989                          " Functional form:<ul>"// &
1990                          "<li>V(r) = A*EXP(-B*r) for r &lt; r<sub>1</sub></li>"// &
1991                          "<li>V(r) = Sum_n POLY1(n)*r<sup>n</sup> for r<sub>1</sub> &le; r &lt; r<sub>2</sub></li>"// &
1992                          "<li>V(r) = Sum_n POLY2(n)*r<sup>n</sup> for r<sub>2</sub> &le; r &lt; r<sub>3</sub></li>"// &
1993                          "<li>V(r) = -C/r<sup>6</sup> for r &ge; r<sub>3</sub></li></ul>", &
1994                          n_keywords=1, n_subsections=0, repeats=.TRUE.)
1995
1996      NULLIFY (keyword)
1997
1998      CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
1999                          description="Defines the atomic kind involved in the nonbond potential", &
2000                          usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
2001                          n_var=2)
2002      CALL section_add_keyword(section, keyword)
2003      CALL keyword_release(keyword)
2004
2005      CALL keyword_create(keyword, __LOCATION__, name="A", &
2006                          description="Defines the A parameter of the Buckingham potential", &
2007                          usage="A {real}", type_of_var=real_t, &
2008                          n_var=1, unit_str="K_e")
2009      CALL section_add_keyword(section, keyword)
2010      CALL keyword_release(keyword)
2011
2012      CALL keyword_create(keyword, __LOCATION__, name="B", &
2013                          description="Defines the B parameter of the Buckingham potential", &
2014                          usage="B {real}", type_of_var=real_t, &
2015                          n_var=1, unit_str="angstrom^-1")
2016      CALL section_add_keyword(section, keyword)
2017      CALL keyword_release(keyword)
2018
2019      CALL keyword_create(keyword, __LOCATION__, name="C", &
2020                          description="Defines the C parameter of the Buckingham  potential", &
2021                          usage="C {real}", type_of_var=real_t, &
2022                          n_var=1, unit_str="K_e*angstrom^6")
2023      CALL section_add_keyword(section, keyword)
2024      CALL keyword_release(keyword)
2025
2026      CALL keyword_create(keyword, __LOCATION__, name="R1", &
2027                          description="Defines the upper bound of the first range ", &
2028                          usage="R1 {real}", type_of_var=real_t, &
2029                          n_var=1, unit_str="angstrom")
2030      CALL section_add_keyword(section, keyword)
2031      CALL keyword_release(keyword)
2032
2033      CALL keyword_create(keyword, __LOCATION__, name="R2", &
2034                          description="Defines the upper bound of the second range ", &
2035                          usage="R2 {real}", type_of_var=real_t, &
2036                          n_var=1, unit_str="angstrom")
2037      CALL section_add_keyword(section, keyword)
2038      CALL keyword_release(keyword)
2039
2040      CALL keyword_create(keyword, __LOCATION__, name="R3", &
2041                          description="Defines the upper bound of the third range ", &
2042                          usage="R3 {real}", type_of_var=real_t, &
2043                          n_var=1, unit_str="angstrom")
2044      CALL section_add_keyword(section, keyword)
2045      CALL keyword_release(keyword)
2046
2047      CALL keyword_create(keyword, __LOCATION__, name="POLY1", &
2048                          description="Coefficients of the polynomial used in the second range"// &
2049                          "This keyword can be repeated several times.", &
2050                          usage="POLY1 C1 C2 C3 ..", &
2051                          n_var=-1, unit_str="K_e", type_of_var=real_t, repeats=.TRUE.)
2052      CALL section_add_keyword(section, keyword)
2053      CALL keyword_release(keyword)
2054
2055      CALL keyword_create(keyword, __LOCATION__, name="POLY2", &
2056                          description="Coefficients of the polynomial used in the third range"// &
2057                          "This keyword can be repeated several times.", &
2058                          usage="POLY1 C1 C2 C3 ..", &
2059                          n_var=-1, unit_str="K_e", type_of_var=real_t, repeats=.TRUE.)
2060      CALL section_add_keyword(section, keyword)
2061      CALL keyword_release(keyword)
2062
2063      CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
2064                          description="Defines the cutoff parameter of the Buckingham potential", &
2065                          usage="RCUT {real}", default_r_val=cp_unit_to_cp2k(value=10.0_dp, &
2066                                                                             unit_str="angstrom"), &
2067                          unit_str="angstrom")
2068      CALL section_add_keyword(section, keyword)
2069      CALL keyword_release(keyword)
2070
2071      CALL keyword_create(keyword, __LOCATION__, name="RMIN", &
2072                          description="Defines the lower bound of the potential. If not set the range is the"// &
2073                          " full range generate by the spline", usage="RMIN {real}", &
2074                          type_of_var=real_t, unit_str="angstrom")
2075      CALL section_add_keyword(section, keyword)
2076      CALL keyword_release(keyword)
2077
2078      CALL keyword_create(keyword, __LOCATION__, name="RMAX", &
2079                          description="Defines the upper bound of the potential. If not set the range is the"// &
2080                          " full range generate by the spline", usage="RMAX {real}", &
2081                          type_of_var=real_t, unit_str="angstrom")
2082      CALL section_add_keyword(section, keyword)
2083      CALL keyword_release(keyword)
2084
2085   END SUBROUTINE create_Buck4r_section
2086
2087! **************************************************************************************************
2088!> \brief This section specifies the input parameters for Buckingham + Morse potential type
2089!> \param section the section to create
2090!> \author MI
2091! **************************************************************************************************
2092   SUBROUTINE create_Buckmorse_section(section)
2093      TYPE(section_type), POINTER                        :: section
2094
2095      CHARACTER(len=*), PARAMETER :: routineN = 'create_Buckmorse_section', &
2096         routineP = moduleN//':'//routineN
2097
2098      TYPE(keyword_type), POINTER                        :: keyword
2099
2100      CPASSERT(.NOT. ASSOCIATED(section))
2101      CALL section_create( &
2102         section, __LOCATION__, name="BUCKMORSE", &
2103         description="This section specifies the input parameters for"// &
2104         " Buckingham plus Morse potential type "// &
2105         " 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)]}.", &
2106         citations=(/Yamada2000/), n_keywords=1, n_subsections=0, repeats=.TRUE.)
2107
2108      NULLIFY (keyword)
2109
2110      CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
2111                          description="Defines the atomic kind involved in the nonbond potential", &
2112                          usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
2113                          n_var=2)
2114      CALL section_add_keyword(section, keyword)
2115      CALL keyword_release(keyword)
2116
2117      CALL keyword_create(keyword, __LOCATION__, name="F0", &
2118                          description="Defines the f0 parameter of Buckingham+Morse potential", &
2119                          usage="F0 {real}", type_of_var=real_t, &
2120                          n_var=1, unit_str="K_e*angstrom^-1")
2121      CALL section_add_keyword(section, keyword)
2122      CALL keyword_release(keyword)
2123
2124      CALL keyword_create(keyword, __LOCATION__, name="A1", &
2125                          description="Defines the A1 parameter of Buckingham+Morse potential", &
2126                          usage="A1 {real}", type_of_var=real_t, &
2127                          n_var=1, unit_str="angstrom")
2128      CALL section_add_keyword(section, keyword)
2129      CALL keyword_release(keyword)
2130
2131      CALL keyword_create(keyword, __LOCATION__, name="A2", &
2132                          description="Defines the A2 parameter of Buckingham+Morse potential", &
2133                          usage="A2 {real}", type_of_var=real_t, &
2134                          n_var=1, unit_str="angstrom")
2135      CALL section_add_keyword(section, keyword)
2136      CALL keyword_release(keyword)
2137
2138      CALL keyword_create(keyword, __LOCATION__, name="B1", &
2139                          description="Defines the B1 parameter of Buckingham+Morse potential", &
2140                          usage="B1 {real}", type_of_var=real_t, &
2141                          n_var=1, unit_str="angstrom")
2142      CALL section_add_keyword(section, keyword)
2143      CALL keyword_release(keyword)
2144
2145      CALL keyword_create(keyword, __LOCATION__, name="B2", &
2146                          description="Defines the B2 parameter of Buckingham+Morse potential", &
2147                          usage="B2 {real}", type_of_var=real_t, &
2148                          n_var=1, unit_str="angstrom")
2149      CALL section_add_keyword(section, keyword)
2150      CALL keyword_release(keyword)
2151
2152      CALL keyword_create(keyword, __LOCATION__, name="C", &
2153                          description="Defines the C parameter of Buckingham+Morse  potential", &
2154                          usage="C {real}", type_of_var=real_t, &
2155                          n_var=1, unit_str="K_e*angstrom^6")
2156      CALL section_add_keyword(section, keyword)
2157      CALL keyword_release(keyword)
2158
2159      CALL keyword_create(keyword, __LOCATION__, name="D", &
2160                          description="Defines the amplitude for the Morse part ", &
2161                          usage="D {real}", type_of_var=real_t, &
2162                          n_var=1, unit_str="K_e")
2163      CALL section_add_keyword(section, keyword)
2164      CALL keyword_release(keyword)
2165
2166      CALL keyword_create(keyword, __LOCATION__, name="R0", &
2167                          description="Defines the equilibrium distance for the Morse part ", &
2168                          usage="R0 {real}", type_of_var=real_t, &
2169                          n_var=1, unit_str="angstrom")
2170      CALL section_add_keyword(section, keyword)
2171      CALL keyword_release(keyword)
2172
2173      CALL keyword_create(keyword, __LOCATION__, name="Beta", &
2174                          description="Defines the width for the Morse part ", &
2175                          usage="Beta {real}", type_of_var=real_t, &
2176                          n_var=1, unit_str="angstrom^-1")
2177      CALL section_add_keyword(section, keyword)
2178      CALL keyword_release(keyword)
2179
2180      CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
2181                          description="Defines the cutoff parameter of the Buckingham potential", &
2182                          usage="RCUT {real}", default_r_val=cp_unit_to_cp2k(value=10.0_dp, &
2183                                                                             unit_str="angstrom"), &
2184                          unit_str="angstrom")
2185      CALL section_add_keyword(section, keyword)
2186      CALL keyword_release(keyword)
2187
2188      CALL keyword_create(keyword, __LOCATION__, name="RMIN", &
2189                          description="Defines the lower bound of the potential. If not set the range is the"// &
2190                          " full range generate by the spline", usage="RMIN {real}", &
2191                          type_of_var=real_t, unit_str="angstrom")
2192      CALL section_add_keyword(section, keyword)
2193      CALL keyword_release(keyword)
2194
2195      CALL keyword_create(keyword, __LOCATION__, name="RMAX", &
2196                          description="Defines the upper bound of the potential. If not set the range is the"// &
2197                          " full range generate by the spline", usage="RMAX {real}", &
2198                          type_of_var=real_t, unit_str="angstrom")
2199      CALL section_add_keyword(section, keyword)
2200      CALL keyword_release(keyword)
2201
2202   END SUBROUTINE create_Buckmorse_section
2203
2204! **************************************************************************************************
2205!> \brief This section specifies the input parameters for Tersoff potential type
2206!>      (Tersoff, J. PRB 39(8), 5566, 1989)
2207!> \param section ...
2208! **************************************************************************************************
2209   SUBROUTINE create_Tersoff_section(section)
2210      TYPE(section_type), POINTER                        :: section
2211
2212      CHARACTER(len=*), PARAMETER :: routineN = 'create_Tersoff_section', &
2213         routineP = moduleN//':'//routineN
2214
2215      TYPE(keyword_type), POINTER                        :: keyword
2216
2217      CPASSERT(.NOT. ASSOCIATED(section))
2218      CALL section_create(section, __LOCATION__, name="TERSOFF", &
2219                          description="This section specifies the input parameters for Tersoff potential type.", &
2220                          citations=(/Tersoff1988/), n_keywords=1, n_subsections=0, repeats=.TRUE.)
2221
2222      NULLIFY (keyword)
2223
2224      CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
2225                          description="Defines the atomic kind involved in the nonbond potential", &
2226                          usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
2227                          n_var=2)
2228      CALL section_add_keyword(section, keyword)
2229      CALL keyword_release(keyword)
2230
2231      CALL keyword_create(keyword, __LOCATION__, name="A", &
2232                          description="Defines the A parameter of Tersoff potential", &
2233                          usage="A {real}", type_of_var=real_t, &
2234                          default_r_val=cp_unit_to_cp2k(value=1.8308E3_dp, &
2235                                                        unit_str="eV"), &
2236                          n_var=1, unit_str="eV")
2237      CALL section_add_keyword(section, keyword)
2238      CALL keyword_release(keyword)
2239
2240      CALL keyword_create(keyword, __LOCATION__, name="B", &
2241                          description="Defines the B parameter of Tersoff potential", &
2242                          usage="B {real}", type_of_var=real_t, &
2243                          default_r_val=cp_unit_to_cp2k(value=4.7118E2_dp, &
2244                                                        unit_str="eV"), &
2245                          n_var=1, unit_str="eV")
2246      CALL section_add_keyword(section, keyword)
2247      CALL keyword_release(keyword)
2248
2249      CALL keyword_create(keyword, __LOCATION__, name="lambda1", &
2250                          description="Defines the lambda1 parameter of Tersoff potential", &
2251                          usage="lambda1 {real}", type_of_var=real_t, &
2252                          default_r_val=cp_unit_to_cp2k(value=2.4799_dp, &
2253                                                        unit_str="angstrom^-1"), &
2254                          n_var=1, unit_str="angstrom^-1")
2255      CALL section_add_keyword(section, keyword)
2256      CALL keyword_release(keyword)
2257
2258      CALL keyword_create(keyword, __LOCATION__, name="lambda2", &
2259                          description="Defines the lambda2 parameter of Tersoff potential", &
2260                          usage="lambda2 {real}", type_of_var=real_t, &
2261                          default_r_val=cp_unit_to_cp2k(value=1.7322_dp, &
2262                                                        unit_str="angstrom^-1"), &
2263                          n_var=1, unit_str="angstrom^-1")
2264      CALL section_add_keyword(section, keyword)
2265      CALL keyword_release(keyword)
2266
2267      CALL keyword_create(keyword, __LOCATION__, name="alpha", &
2268                          description="Defines the alpha parameter of Tersoff potential", &
2269                          usage="alpha {real}", type_of_var=real_t, &
2270                          default_r_val=0.0_dp, &
2271                          n_var=1)
2272      CALL section_add_keyword(section, keyword)
2273      CALL keyword_release(keyword)
2274
2275      CALL keyword_create(keyword, __LOCATION__, name="beta", &
2276                          description="Defines the beta parameter of Tersoff potential", &
2277                          usage="beta {real}", type_of_var=real_t, &
2278                          default_r_val=1.0999E-6_dp, &
2279                          n_var=1, unit_str="")
2280      CALL section_add_keyword(section, keyword)
2281      CALL keyword_release(keyword)
2282
2283      CALL keyword_create(keyword, __LOCATION__, name="n", &
2284                          description="Defines the n parameter of Tersoff potential", &
2285                          usage="n {real}", type_of_var=real_t, &
2286                          default_r_val=7.8734E-1_dp, &
2287                          n_var=1, unit_str="")
2288      CALL section_add_keyword(section, keyword)
2289      CALL keyword_release(keyword)
2290
2291      CALL keyword_create(keyword, __LOCATION__, name="c", &
2292                          description="Defines the c parameter of Tersoff potential", &
2293                          usage="c {real}", type_of_var=real_t, &
2294                          default_r_val=1.0039E5_dp, &
2295                          n_var=1, unit_str="")
2296      CALL section_add_keyword(section, keyword)
2297      CALL keyword_release(keyword)
2298
2299      CALL keyword_create(keyword, __LOCATION__, name="d", &
2300                          description="Defines the d parameter of Tersoff potential", &
2301                          usage="d {real}", type_of_var=real_t, &
2302                          default_r_val=1.6218E1_dp, &
2303                          n_var=1, unit_str="")
2304      CALL section_add_keyword(section, keyword)
2305      CALL keyword_release(keyword)
2306
2307      CALL keyword_create(keyword, __LOCATION__, name="h", &
2308                          description="Defines the h parameter of Tersoff potential", &
2309                          usage="h {real}", type_of_var=real_t, &
2310                          default_r_val=-5.9826E-1_dp, &
2311                          n_var=1, unit_str="")
2312      CALL section_add_keyword(section, keyword)
2313      CALL keyword_release(keyword)
2314
2315      CALL keyword_create(keyword, __LOCATION__, name="lambda3", &
2316                          description="Defines the lambda3 parameter of Tersoff potential", &
2317                          usage="lambda3 {real}", type_of_var=real_t, &
2318                          default_r_val=cp_unit_to_cp2k(value=1.7322_dp, &
2319                                                        unit_str="angstrom^-1"), &
2320                          n_var=1, unit_str="angstrom^-1")
2321      CALL section_add_keyword(section, keyword)
2322      CALL keyword_release(keyword)
2323
2324      CALL keyword_create(keyword, __LOCATION__, name="bigR", &
2325                          description="Defines the bigR parameter of Tersoff potential", &
2326                          usage="bigR {real}", type_of_var=real_t, &
2327                          default_r_val=cp_unit_to_cp2k(value=2.85_dp, &
2328                                                        unit_str="angstrom"), &
2329                          n_var=1, unit_str="angstrom")
2330      CALL section_add_keyword(section, keyword)
2331      CALL keyword_release(keyword)
2332
2333      CALL keyword_create(keyword, __LOCATION__, name="bigD", &
2334                          description="Defines the D parameter of Tersoff potential", &
2335                          usage="bigD {real}", type_of_var=real_t, &
2336                          default_r_val=cp_unit_to_cp2k(value=0.15_dp, &
2337                                                        unit_str="angstrom"), &
2338                          n_var=1, unit_str="angstrom")
2339      CALL section_add_keyword(section, keyword)
2340      CALL keyword_release(keyword)
2341
2342      CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
2343                          description="Defines the cutoff parameter of the tersoff potential. "// &
2344                          " This parameter is in principle already defined by the values of "// &
2345                          " bigD and bigR. But it is necessary to define it when using the tersoff "// &
2346                          " in conjunction with other potentials (for the same atomic pair) in order to have"// &
2347                          " the same consistent definition of RCUT for all potentials.", &
2348                          usage="RCUT {real}", type_of_var=real_t, &
2349                          n_var=1, unit_str="angstrom")
2350      CALL section_add_keyword(section, keyword)
2351      CALL keyword_release(keyword)
2352
2353   END SUBROUTINE create_Tersoff_section
2354
2355! **************************************************************************************************
2356!> \brief This section specifies the input parameters for Siepmann-Sprik
2357!>        potential type
2358!>      (Siepmann and Sprik, J. Chem. Phys. 102(1) 511, 1995)
2359!> \param section ...
2360! **************************************************************************************************
2361   SUBROUTINE create_Siepmann_section(section)
2362      TYPE(section_type), POINTER                        :: section
2363
2364      CHARACTER(len=*), PARAMETER :: routineN = 'create_Siepmann_section', &
2365         routineP = moduleN//':'//routineN
2366
2367      TYPE(keyword_type), POINTER                        :: keyword
2368
2369      CPASSERT(.NOT. ASSOCIATED(section))
2370      CALL section_create(section, __LOCATION__, name="SIEPMANN", &
2371                          description="This section specifies the input parameters for the"// &
2372                          " Siepmann-Sprik potential type. Consists of 4 terms:"// &
2373                          " T1+T2+T3+T4. The terms T1=A/rij^alpha and T2=-C/rij^6"// &
2374                          " have to be given via the GENPOT section. The terms T3+T4"// &
2375                          " are obtained from the SIEPMANN section. The Siepmann-Sprik"// &
2376                          " potential is designed for water-metal chemisorption.", &
2377                          citations=(/Siepmann1995/), n_keywords=1, n_subsections=0, repeats=.TRUE.)
2378
2379      NULLIFY (keyword)
2380
2381      CALL keyword_create(keyword, __LOCATION__, name="ATOMS", &
2382                          description="Defines the atomic kind involved in the nonbond potential", &
2383                          usage="ATOMS {KIND1} {KIND2}", type_of_var=char_t, &
2384                          n_var=2)
2385      CALL section_add_keyword(section, keyword)
2386      CALL keyword_release(keyword)
2387
2388      CALL keyword_create(keyword, __LOCATION__, name="B", &
2389                          description="Defines the B parameter of Siepmann potential", &
2390                          usage="B {real}", type_of_var=real_t, &
2391                          default_r_val=cp_unit_to_cp2k(value=0.6_dp, &
2392                                                        unit_str="angstrom"), &
2393                          n_var=1, unit_str="angstrom")
2394      CALL section_add_keyword(section, keyword)
2395      CALL keyword_release(keyword)
2396
2397      CALL keyword_create(keyword, __LOCATION__, name="D", &
2398                          description="Defines the D parameter of Siepmann potential", &
2399                          usage="D {real}", type_of_var=real_t, &
2400                          default_r_val=cp_unit_to_cp2k(value=3.688388_dp, &
2401                                                        unit_str="internal_cp2k"), &
2402                          n_var=1, unit_str="internal_cp2k")
2403      CALL section_add_keyword(section, keyword)
2404      CALL keyword_release(keyword)
2405
2406      CALL keyword_create(keyword, __LOCATION__, name="E", &
2407                          description="Defines the E parameter of Siepmann potential", &
2408                          usage="E {real}", type_of_var=real_t, &
2409                          default_r_val=cp_unit_to_cp2k(value=9.069025_dp, &
2410                                                        unit_str="internal_cp2k"), &
2411                          n_var=1, unit_str="internal_cp2k")
2412      CALL section_add_keyword(section, keyword)
2413      CALL keyword_release(keyword)
2414
2415      CALL keyword_create(keyword, __LOCATION__, name="F", &
2416                          description="Defines the F parameter of Siepmann potential", &
2417                          usage="B {real}", type_of_var=real_t, &
2418                          default_r_val=13.3_dp, n_var=1)
2419      CALL section_add_keyword(section, keyword)
2420      CALL keyword_release(keyword)
2421!
2422      CALL keyword_create(keyword, __LOCATION__, name="beta", &
2423                          description="Defines the beta parameter of Siepmann potential", &
2424                          usage="beta {real}", type_of_var=real_t, &
2425                          default_r_val=10.0_dp, n_var=1)
2426      CALL section_add_keyword(section, keyword)
2427      CALL keyword_release(keyword)
2428!
2429      CALL keyword_create(keyword, __LOCATION__, name="RCUT", &
2430                          description="Defines the cutoff parameter of Siepmann potential", &
2431                          usage="RCUT {real}", type_of_var=real_t, &
2432                          default_r_val=cp_unit_to_cp2k(value=3.2_dp, &
2433                                                        unit_str="angstrom"), &
2434                          n_var=1, unit_str="angstrom")
2435      CALL section_add_keyword(section, keyword)
2436      CALL keyword_release(keyword)
2437!
2438      CALL keyword_create(keyword, __LOCATION__, name="ALLOW_OH_FORMATION", &
2439                          description=" The Siepmann-Sprik potential is actually designed for intact"// &
2440                          " water molecules only. If water is treated at the QM level,"// &
2441                          " water molecules can potentially dissociate, i.e."// &
2442                          " some O-H bonds might be stretched leading temporarily"// &
2443                          " to the formation of OH- ions. This keyword allows the"// &
2444                          " the formation of such ions. The T3 term (dipole term)"// &
2445                          " is then switched off for evaluating the interaction"// &
2446                          " between the OH- ion and the metal.", &
2447                          usage="ALLOW_OH_FORMATION TRUE", &
2448                          default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
2449      CALL section_add_keyword(section, keyword)
2450      CALL keyword_release(keyword)
2451
2452      CALL keyword_create(keyword, __LOCATION__, name="ALLOW_H3O_FORMATION", &
2453                          description=" The Siepmann-Sprik potential is designed for intact water"// &
2454                          " molecules only. If water is treated at the QM level"// &
2455                          " and an acid is present, hydronium ions might occur."// &
2456                          " This keyword allows the formation of hydronium ions."// &
2457                          " The T3 term (dipole term) is switched off for evaluating"// &
2458                          " the interaction between hydronium and the metal.", &
2459                          usage="ALLOW_H3O_FORMATION TRUE", &
2460                          default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
2461      CALL section_add_keyword(section, keyword)
2462      CALL keyword_release(keyword)
2463
2464      CALL keyword_create(keyword, __LOCATION__, name="ALLOW_O_FORMATION", &
2465                          description=" The Siepmann-Sprik potential is actually designed for intact"// &
2466                          " water molecules only. If water is treated at the QM level,"// &
2467                          " water molecules can potentially dissociate, i.e."// &
2468                          " some O-H bonds might be stretched leading temporarily"// &
2469                          " to the formation of O^2- ions. This keyword allows the"// &
2470                          " the formation of such ions. The T3 term (dipole term)"// &
2471                          " is then switched off for evaluating the interaction"// &
2472                          " between the O^2- ion and the metal.", &
2473                          usage="ALLOW_O2-_FORMATION TRUE", &
2474                          default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
2475      CALL section_add_keyword(section, keyword)
2476      CALL keyword_release(keyword)
2477
2478   END SUBROUTINE create_Siepmann_section
2479
2480! **************************************************************************************************
2481!> \brief creates the input section for the qs part
2482!> \param print_key ...
2483!> \param label ...
2484!> \param print_level ...
2485!> \author teo
2486! **************************************************************************************************
2487   SUBROUTINE create_dipoles_section(print_key, label, print_level)
2488      TYPE(section_type), POINTER                        :: print_key
2489      CHARACTER(LEN=*), INTENT(IN)                       :: label
2490      INTEGER, INTENT(IN)                                :: print_level
2491
2492      CHARACTER(len=*), PARAMETER :: routineN = 'create_dipoles_section', &
2493         routineP = moduleN//':'//routineN
2494
2495      TYPE(keyword_type), POINTER                        :: keyword
2496
2497      CPASSERT(.NOT. ASSOCIATED(print_key))
2498      CALL cp_print_key_section_create(print_key, __LOCATION__, name=TRIM(label), &
2499                                       description="Section controlling the calculation of "//TRIM(label)//"."// &
2500                                       " Note that the result in the periodic case might be defined modulo a certain period,"// &
2501                                       " determined by the lattice vectors. During MD, this can lead to jumps.", &
2502                                       print_level=print_level, filename="__STD_OUT__")
2503
2504      NULLIFY (keyword)
2505      CALL keyword_create(keyword, __LOCATION__, &
2506                          name="PERIODIC", &
2507                          description="Use Berry phase formula (PERIODIC=T) or simple operator (PERIODIC=F). "// &
2508                          "The latter normally requires that the CELL is periodic NONE.", &
2509                          usage="PERIODIC {logical}", &
2510                          repeats=.FALSE., &
2511                          n_var=1, &
2512                          default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
2513      CALL section_add_keyword(print_key, keyword)
2514      CALL keyword_release(keyword)
2515
2516      CALL keyword_create(keyword, __LOCATION__, name="REFERENCE", &
2517                          variants=s2a("REF"), &
2518                          description="Define the reference point for the calculation of the electrostatic moment.", &
2519                          usage="REFERENCE COM", &
2520                          enum_c_vals=s2a("COM", "COAC", "USER_DEFINED", "ZERO"), &
2521                          enum_desc=s2a("Use Center of Mass", &
2522                                        "Use Center of Atomic Charges", &
2523                                        "Use User Defined Point (Keyword:REF_POINT)", &
2524                                        "Use Origin of Coordinate System"), &
2525                          enum_i_vals=(/use_mom_ref_com, &
2526                                        use_mom_ref_coac, &
2527                                        use_mom_ref_user, &
2528                                        use_mom_ref_zero/), &
2529                          default_i_val=use_mom_ref_zero)
2530      CALL section_add_keyword(print_key, keyword)
2531      CALL keyword_release(keyword)
2532
2533      CALL keyword_create(keyword, __LOCATION__, name="REFERENCE_POINT", &
2534                          variants=s2a("REF_POINT"), &
2535                          description="Fixed reference point for the calculations of the electrostatic moment.", &
2536                          usage="REFERENCE_POINT x y z", &
2537                          repeats=.FALSE., &
2538                          n_var=3, default_r_vals=(/0._dp, 0._dp, 0._dp/), &
2539                          type_of_var=real_t, &
2540                          unit_str='bohr')
2541      CALL section_add_keyword(print_key, keyword)
2542      CALL keyword_release(keyword)
2543   END SUBROUTINE create_dipoles_section
2544
2545END MODULE input_cp2k_mm
2546