CP2K 2.4 (Revision 12889)

input_cp2k_resp.f90

Go to the documentation of this file.
00001 !-----------------------------------------------------------------------------!
00002 !   CP2K: A general program to perform molecular dynamics simulations         !
00003 !   Copyright (C) 2000 - 2013  CP2K developers group                          !
00004 !-----------------------------------------------------------------------------!
00005 
00006 ! *****************************************************************************
00012 MODULE input_cp2k_resp
00013   USE cp_output_handling,              ONLY: cp_print_key_section_create
00014   USE cp_units,                        ONLY: cp_unit_to_cp2k
00015   USE f77_blas
00016   USE input_constants
00017   USE input_keyword_types,             ONLY: keyword_create,&
00018                                              keyword_release,&
00019                                              keyword_type
00020   USE input_section_types,             ONLY: section_add_keyword,&
00021                                              section_add_subsection,&
00022                                              section_create,&
00023                                              section_release,&
00024                                              section_type
00025   USE input_val_types,                 ONLY: char_t,&
00026                                              integer_t,&
00027                                              real_t
00028   USE kinds,                           ONLY: dp
00029   USE string_utilities,                ONLY: s2a
00030 #include "cp_common_uses.h"
00031 
00032   IMPLICIT NONE
00033   PRIVATE
00034 
00035   LOGICAL, PRIVATE, PARAMETER :: debug_this_module=.TRUE.
00036   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'input_cp2k_resp'
00037 
00038   PUBLIC :: create_resp_section
00039 
00040 CONTAINS
00041 
00042 ! *****************************************************************************
00049   SUBROUTINE create_resp_section(section,error)
00050     TYPE(section_type), POINTER              :: section
00051     TYPE(cp_error_type), INTENT(inout)       :: error
00052 
00053     CHARACTER(len=*), PARAMETER :: routineN = 'create_resp_section', 
00054       routineP = moduleN//':'//routineN
00055 
00056     LOGICAL                                  :: failure
00057     TYPE(keyword_type), POINTER              :: keyword
00058     TYPE(section_type), POINTER              :: subsection
00059 
00060     failure=.FALSE.
00061 
00062     CPPrecondition(.NOT.ASSOCIATED(section),cp_failure_level,routineP,error,failure)
00063     IF (.NOT. failure) THEN
00064        CALL section_create(section,name="RESP",&
00065             description="Requests a RESP fit of charges. When using a periodic "//&
00066             "Poisson solver and a periodic cell, the periodic RESP routines are "//&
00067             "used. If the Hartree potential matches with the one of an isolated "//&
00068             "system (i.e. isolated Poisson solver and big, nonperiodic cells), "//&
00069             "the nonperiodic RESP routines are automatically used. The subsections "//&
00070             "NONPERIODIC_SYS and PERIODIC_SYS do not request a nonperiodic or periodic "//&
00071             "solution, they only determine the sampling of the fitting points. All "//&
00072             "restraints are harmonic!",&
00073             n_keywords=2, n_subsections=2, repeats=.FALSE., required=.FALSE.,&
00074             error=error)
00075 
00076        NULLIFY(keyword, subsection)
00077 
00078        CALL keyword_create(keyword, name="stride",&
00079             description="The stride (X,Y,Z) used to write the cube file "//&
00080             "(larger values result in smaller cube files). You can provide "//&
00081             "3 numbers (for X,Y,Z) or 1 number valid for all components.",&
00082             usage="STRIDE 2 2 2",n_var=-1,default_i_vals=(/2,2,2/), type_of_var=integer_t,error=error)
00083        CALL section_add_keyword(section,keyword,error=error)
00084        CALL keyword_release(keyword,error=error)
00085 
00086        CALL keyword_create(keyword, name="INTEGER_TOTAL_CHARGE",&
00087             description="Forces the total charge to be integer",&
00088             usage="INTEGER_TOTAL_CHARGE TRUE",&
00089             default_l_val=.TRUE., error=error)
00090        CALL section_add_keyword(section,keyword,error=error)
00091        CALL keyword_release(keyword,error=error)
00092 
00093        CALL keyword_create(keyword, name="RESTRAIN_HEAVIES_TO_ZERO",&
00094             description="Restrain non-hydrogen atoms to zero.",&
00095             usage="RESTRAIN_HEAVIES_TO_ZERO FALSE",&
00096             default_l_val=.TRUE., error=error)
00097        CALL section_add_keyword(section,keyword,error=error)
00098        CALL keyword_release(keyword,error=error)
00099 
00100        CALL keyword_create(keyword, name="RESTRAIN_HEAVIES_STRENGTH",&
00101             description="If defined, enforce the restraint of non-hydrogen "//&
00102             "atoms to zero. Its value is the strength of the restraint on "//&
00103             "the heavy atoms.",&
00104             usage="RESTRAIN_HEAVIES_STRENGTH 0.0001 ",&
00105             default_r_val=1.0E-6_dp ,error=error)
00106        CALL section_add_keyword(section,keyword,error=error)
00107        CALL keyword_release(keyword,error=error)
00108 
00109        CALL keyword_create(keyword, name="WIDTH",&
00110             description="Specifies the value of the width of the Gaussian "//&
00111                         "charge distribution carried by each atom. Needs only "//&
00112                         "to be specified when using a periodic Poisson solver.",&
00113             usage="WIDTH <real> ",n_var=1,type_of_var=real_t,&
00114             default_r_val=cp_unit_to_cp2k(value=11.249_dp,unit_str="angstrom^-2",error=error), &
00115             unit_str="angstrom^-2",error=error)
00116        CALL section_add_keyword(section,keyword,error=error)
00117        CALL keyword_release(keyword,error=error)
00118 
00119        CALL create_constraint_section(subsection,error)
00120        CALL section_add_subsection(section, subsection, error=error)
00121        CALL section_release(subsection,error=error)
00122 
00123        CALL create_restraint_section(subsection,error)
00124        CALL section_add_subsection(section, subsection, error=error)
00125        CALL section_release(subsection,error=error)
00126 
00127        CALL create_nonperiodic_sys_section(subsection,error)
00128        CALL section_add_subsection(section, subsection, error=error)
00129        CALL section_release(subsection,error=error)
00130 
00131        CALL create_periodic_sys_section(subsection,error)
00132        CALL section_add_subsection(section, subsection, error=error)
00133        CALL section_release(subsection,error=error)
00134 
00135        CALL create_print_resp_section(subsection, error=error)
00136        CALL section_add_subsection(section,subsection,error=error)
00137        CALL section_release(subsection,error=error)
00138 
00139     END IF
00140   END SUBROUTINE create_resp_section
00141 
00142 ! *****************************************************************************
00149   SUBROUTINE create_constraint_section(section,error)
00150     TYPE(section_type), POINTER              :: section
00151     TYPE(cp_error_type), INTENT(inout)       :: error
00152 
00153     CHARACTER(len=*), PARAMETER :: routineN = 'create_constraint_section', 
00154       routineP = moduleN//':'//routineN
00155 
00156     LOGICAL                                  :: failure
00157     TYPE(keyword_type), POINTER              :: keyword
00158 
00159     failure=.FALSE.
00160 
00161     CPPrecondition(.NOT.ASSOCIATED(section),cp_failure_level,routineP,error,failure)
00162     IF (.NOT. failure) THEN
00163        CALL section_create(section,name="CONSTRAINT",&
00164             description="specifies a linear constraint on the fitted charges."//&
00165                         "This can be used to give equal values to equivalent atoms." //&
00166                         "sum over atom_list c_i * q_i = t",&
00167             n_keywords=1, n_subsections=0, repeats=.TRUE., required=.TRUE.,&
00168             error=error)
00169 
00170        NULLIFY(keyword)
00171 
00172        CALL keyword_create(keyword, name="TARGET",&
00173             description="the target value for the constraint",&
00174             usage="TARGET 0.0",&
00175             n_var=1,default_r_val=0.0_dp,error=error)
00176        CALL section_add_keyword(section,keyword,error=error)
00177        CALL keyword_release(keyword,error=error)
00178 
00179        CALL keyword_create(keyword, name="EQUAL_CHARGES",&
00180             description="All atoms in ATOM_LIST are constrained to have the "//&
00181             "same charges. When using this keyword, TARGET and ATOM_COEF do "//& 
00182             "not need to be set and will be ignored. Instead of using this "//&
00183             "keyword, the constraint section could be repeated.",&
00184             usage="EQUAL_CHARGES",&
00185             default_l_val=.FALSE.,lone_keyword_l_val=.TRUE.,error=error)
00186        CALL section_add_keyword(section,keyword,error=error)
00187        CALL keyword_release(keyword,error=error)
00188 
00189        CALL keyword_create(keyword,name="ATOM_LIST",&
00190             description="Defines the list of atoms involved in this constraint",&
00191             usage="ATOM_LIST 3 4",&
00192             type_of_var=integer_t, n_var=-1,required=.TRUE.,repeats=.TRUE.,&
00193             error=error)
00194        CALL section_add_keyword(section,keyword,error=error)
00195        CALL keyword_release(keyword,error=error)
00196 
00197        CALL keyword_create(keyword,name="ATOM_COEF",&
00198             description="Defines the coefficient of the atom in this "//&
00199                         "linear constraint",&
00200             usage="ATOM_COEF 1.0 -1.0",&
00201             type_of_var=real_t, n_var=-1, error=error)
00202        CALL section_add_keyword(section,keyword,error=error)
00203        CALL keyword_release(keyword,error=error)
00204 
00205     END IF
00206 
00207   END SUBROUTINE create_constraint_section
00208 
00209 ! *****************************************************************************
00216   SUBROUTINE create_restraint_section(section,error)
00217     TYPE(section_type), POINTER              :: section
00218     TYPE(cp_error_type), INTENT(inout)       :: error
00219 
00220     CHARACTER(len=*), PARAMETER :: routineN = 'create_restraint_section', 
00221       routineP = moduleN//':'//routineN
00222 
00223     LOGICAL                                  :: failure
00224     TYPE(keyword_type), POINTER              :: keyword
00225 
00226     failure=.FALSE.
00227 
00228     CPPrecondition(.NOT.ASSOCIATED(section),cp_failure_level,routineP,error,failure)
00229     IF (.NOT. failure) THEN
00230        CALL section_create(section,name="RESTRAINT",&
00231             description="specifies a restraint on the fitted charges."//&
00232                         "This can be used to restrain values to zero." //&
00233                         "s*(sum over atom_list q_i - t)**2",&
00234             n_keywords=1, n_subsections=0, repeats=.TRUE., required=.TRUE.,&
00235             error=error)
00236 
00237        NULLIFY(keyword)
00238 
00239        CALL keyword_create(keyword, name="TARGET",&
00240             description="the target value for the restraint",&
00241             usage="TARGET 0.0",&
00242             n_var=1,default_r_val=0.0_dp,error=error)
00243        CALL section_add_keyword(section,keyword,error=error)
00244        CALL keyword_release(keyword,error=error)
00245 
00246        CALL keyword_create(keyword, name="STRENGTH",&
00247             description="the target value for the constraint",&
00248             usage="STRENGTH 0.001",&
00249             n_var=1,default_r_val=0.001_dp,error=error)
00250        CALL section_add_keyword(section,keyword,error=error)
00251        CALL keyword_release(keyword,error=error)
00252 
00253        CALL keyword_create(keyword,name="ATOM_LIST",&
00254             description="Defines the list of atoms involved in this restraint",&
00255             usage="ATOM_LIST 3 4",&
00256             type_of_var=integer_t, n_var=-1, required=.TRUE.,repeats=.TRUE.,&
00257             error=error)
00258        CALL section_add_keyword(section,keyword,error=error)
00259        CALL keyword_release(keyword,error=error)
00260 
00261        CALL keyword_create(keyword,name="ATOM_COEF",&
00262             description="Defines the coefficient of the atom in this "//&
00263                         "linear restraint. If given, the restraint will be: "//&
00264                         "s*(sum over atom_list c_i * q_i - t)**2 ",&
00265             usage="ATOM_COEF 1.0 -1.0",&
00266             type_of_var=real_t, n_var=-1, error=error)
00267        CALL section_add_keyword(section,keyword,error=error)
00268        CALL keyword_release(keyword,error=error)
00269 
00270     END IF
00271 
00272   END SUBROUTINE create_restraint_section
00273 
00274 ! *****************************************************************************
00282   SUBROUTINE create_nonperiodic_sys_section(section,error)
00283     TYPE(section_type), POINTER              :: section
00284     TYPE(cp_error_type), INTENT(inout)       :: error
00285 
00286     CHARACTER(len=*), PARAMETER :: 
00287       routineN = 'create_nonperiodic_sys_section', 
00288       routineP = moduleN//':'//routineN
00289 
00290     LOGICAL                                  :: failure
00291     TYPE(keyword_type), POINTER              :: keyword
00292 
00293     failure=.FALSE.
00294 
00295     CPPrecondition(.NOT.ASSOCIATED(section),cp_failure_level,routineP,error,failure)
00296     IF (.NOT. failure) THEN
00297        CALL section_create(section,name="NONPERIODIC_SYS",&
00298             description="Specifies the parameter for sampling the RESP fitting points "//&
00299                         "for non-periodic systems, i.e. systems that do not involve " //&
00300                         "surfaces. This section can be used with periodic and nonperiodic "//&
00301                         "Poisson solvers, it only affects the sampling of grid points. "//&
00302                         "All grid points in the shell defined by rmin and rmax are accepted "//&
00303                         "for fitting.",&
00304             n_keywords=1, n_subsections=0, repeats=.FALSE., required=.TRUE.,&
00305             error=error)
00306 
00307        NULLIFY(keyword)
00308 
00309        CALL keyword_create(keyword, name="X_LOW",&
00310             description="Specifies the lower boundary of the box along X used to sample the potential.",&
00311             usage="X_LOW  -15.", type_of_var=real_t, n_var=1, unit_str='angstrom', error=error)
00312        CALL section_add_keyword(section,keyword,error=error)
00313        CALL keyword_release(keyword,error=error)
00314 
00315        CALL keyword_create(keyword, name="X_HI",&
00316             description="Specifies the upper boundary of the box along X used to sample the potential.",&
00317             usage="X_HI  5.", type_of_var=real_t, n_var=1, unit_str='angstrom', error=error)
00318        CALL section_add_keyword(section,keyword,error=error)
00319        CALL keyword_release(keyword,error=error)
00320 
00321        CALL keyword_create(keyword, name="Y_LOW",&
00322             description="Specifies the lower boundary of the box along Y used to sample the potential.",&
00323             usage="Y_LOW  -15.", type_of_var=real_t, n_var=1, unit_str='angstrom', error=error)
00324        CALL section_add_keyword(section,keyword,error=error)
00325        CALL keyword_release(keyword,error=error)
00326 
00327        CALL keyword_create(keyword, name="Y_HI",&
00328             description="Specifies the upper boundary of the box along Y used to sample the potential.",&
00329             usage="Y_HI  5.", type_of_var=real_t, n_var=1, unit_str='angstrom', error=error)
00330        CALL section_add_keyword(section,keyword,error=error)
00331        CALL keyword_release(keyword,error=error)
00332 
00333        CALL keyword_create(keyword, name="Z_LOW",&
00334             description="Specifies the lower boundary of the box along Z used to sample the potential.",&
00335             usage="Z_LOW  -15.", type_of_var=real_t, n_var=1, unit_str='angstrom', error=error)
00336        CALL section_add_keyword(section,keyword,error=error)
00337        CALL keyword_release(keyword,error=error)
00338 
00339        CALL keyword_create(keyword, name="Z_HI",&
00340             description="Specifies the upper boundary of the box along Z used to sample the potential.",&
00341             usage="Z_HI  5.", type_of_var=real_t, n_var=1, unit_str='angstrom', error=error)
00342        CALL section_add_keyword(section,keyword,error=error)
00343        CALL keyword_release(keyword,error=error)
00344 
00345        CALL keyword_create(keyword, name="RMAX",&
00346             description="Specifies the maximum distance a fit point is away from an atom. "//&
00347                         "Valid for all atomic kinds for which no RMAX_KIND are specified.",&
00348             usage="RMAX 2.5",&
00349             default_r_val=cp_unit_to_cp2k(value=2.5_dp, unit_str="angstrom", error=error),&
00350             unit_str='angstrom', error=error)
00351        CALL section_add_keyword(section,keyword,error=error)
00352        CALL keyword_release(keyword,error=error)
00353 
00354        CALL keyword_create(keyword, name="RMIN",&
00355             description="Specifies the minimum distance a fit point is away from an atom. "//&
00356                         "Valid for all atomic kinds for which no RMIN_KIND are specified.",&
00357             usage="RMIN 2.1",&
00358             default_r_val=cp_unit_to_cp2k(value=2.1_dp, unit_str="angstrom", error=error),&
00359             unit_str='angstrom', error=error)
00360        CALL section_add_keyword(section,keyword,error=error)
00361        CALL keyword_release(keyword,error=error)
00362 
00363        CALL keyword_create(keyword, name="RMAX_KIND",&
00364             description="Specifies the maximum distance a fit point is away from an atom "//&
00365                         "of a given kind",&
00366             usage="RMAX 2.5 Br", required=.FALSE., repeats=.TRUE.,&
00367             n_var=-1,type_of_var=char_t, error=error)
00368        CALL section_add_keyword(section,keyword,error=error)
00369        CALL keyword_release(keyword,error=error)
00370 
00371        CALL keyword_create(keyword, name="RMIN_KIND",&
00372             description="Specifies the minimum distance a fit point is away from an atom "//&
00373                         "of a given kind",&
00374             usage="RMIN 2.1 Br", required=.FALSE., repeats=.TRUE.,&
00375             n_var=-1,type_of_var=char_t, error=error)
00376        CALL section_add_keyword(section,keyword,error=error)
00377        CALL keyword_release(keyword,error=error)
00378 
00379     END IF
00380 
00381   END SUBROUTINE create_nonperiodic_sys_section
00382 ! *****************************************************************************
00390   SUBROUTINE create_periodic_sys_section(section,error)
00391     TYPE(section_type), POINTER              :: section
00392     TYPE(cp_error_type), INTENT(inout)       :: error
00393 
00394     CHARACTER(len=*), PARAMETER :: routineN = 'create_periodic_sys_section', 
00395       routineP = moduleN//':'//routineN
00396 
00397     LOGICAL                                  :: failure
00398     TYPE(keyword_type), POINTER              :: keyword
00399 
00400     failure=.FALSE.
00401 
00402     CPPrecondition(.NOT.ASSOCIATED(section),cp_failure_level,routineP,error,failure)
00403     IF (.NOT. failure) THEN
00404        CALL section_create(section,name="PERIODIC_SYS",&
00405             description="Specifies the parameter for sampling the RESP fitting "//&
00406                         "points for periodic systems, i.e. systems that involve " //&
00407                        "surfaces. This section can only be used with periodic  "//&
00408                         "Poisson solver and cell. To see, which grid points were "//&
00409                         "used, switch on COORD_FIT_POINTS in the PRINT section.",&
00410             n_keywords=1, n_subsections=0, repeats=.TRUE., required=.TRUE.,&
00411             error=error)
00412 
00413        NULLIFY(keyword)
00414 
00415        CALL keyword_create(keyword,name="ATOM_LIST",&
00416             description="Specifies the list of indexes of atoms used to define "//&
00417                         "the region for the RESP fitting. The list should "//&
00418                         "contain indexes of atoms of the first surface layer." ,&
00419             usage="ATOM_LIST 1 2 3 or 1..3",&
00420             type_of_var=integer_t, n_var=-1,required=.TRUE.,repeats=.TRUE.,&
00421             error=error)
00422        CALL section_add_keyword(section,keyword,error=error)
00423        CALL keyword_release(keyword,error=error)
00424 
00425        CALL keyword_create(keyword, name="RANGE",&
00426             description="Range where the fitting points are sampled. A range of "//&
00427             "3 to 5 Angstroms means that the fitting points are sampled in the region "//&
00428             "of 3 to 5 Angstroms above the surface which is defined by atom indexes given "//&
00429             "in ATOM_LIST.",&
00430             usage="RANGE <real> <real>",unit_str="angstrom",n_var=2,type_of_var=real_t,&
00431             required=.TRUE.,error=error)
00432        CALL section_add_keyword(section,keyword,error=error)
00433        CALL keyword_release(keyword,error=error)
00434 
00435        CALL keyword_create(keyword, name="LENGTH",&
00436             description="Length of the sampling box, i.e. a box of this length and "//&
00437             "the height specified by RANGE is defined above each surface atom given "//&
00438             "in ATOM_LIST. The grid points in the boxes are accepted as fitting point. "//&
00439             "Should be in the range of the nearest neighbour distance (a bit larger to be "//&
00440             "on the safe side). Allows for a refined sampling of grid points in case of "//&
00441             "corrugated surfaces.",&
00442             usage="LENGTH <real> ",unit_str="angstrom",n_var=1,type_of_var=real_t,&
00443             default_r_val=cp_unit_to_cp2k(value=3.0_dp,unit_str="angstrom", error=error),error=error)
00444        CALL section_add_keyword(section,keyword,error=error)
00445        CALL keyword_release(keyword,error=error)
00446 
00447        CALL keyword_create(keyword, name="SURF_DIRECTION",&
00448             description="Specifies what above the surface means. Defines the direction.",&
00449             usage="SURF_DIRECTION Z",&
00450             enum_c_vals=s2a( "X", "Y", "Z", "-X", "-Y", "-Z"),&
00451             enum_i_vals=(/ do_resp_x_dir, do_resp_y_dir, do_resp_z_dir,&
00452                            do_resp_minus_x_dir, do_resp_minus_y_dir, do_resp_minus_z_dir /),&
00453             enum_desc=s2a("surface layers are piled up in x-direction", &
00454                           "surface layers are piled up in y-direction",&
00455                           "surface layers are piled up in z-direction",&
00456                           "surface layers are piled up in -x-direction",&
00457                           "surface layers are piled up in -y-direction",&
00458                           "surface layers are piled up in -z-direction"),&
00459             default_i_val=do_resp_z_dir, error=error)
00460        CALL section_add_keyword(section,keyword,error=error)
00461        CALL keyword_release(keyword,error=error)
00462 
00463     END IF
00464 
00465   END SUBROUTINE create_periodic_sys_section
00466 
00467 ! *****************************************************************************
00474   SUBROUTINE create_print_resp_section(section,error)
00475     TYPE(section_type), POINTER              :: section
00476     TYPE(cp_error_type), INTENT(inout)       :: error
00477 
00478     CHARACTER(len=*), PARAMETER :: routineN = 'create_print_resp_section', 
00479       routineP = moduleN//':'//routineN
00480 
00481     LOGICAL                                  :: failure
00482     TYPE(keyword_type), POINTER              :: keyword
00483     TYPE(section_type), POINTER              :: print_key
00484 
00485     failure=.FALSE.
00486     CPPrecondition(.NOT.ASSOCIATED(section),cp_failure_level,routineP,error,failure)
00487     IF (.NOT. failure) THEN
00488        NULLIFY(print_key, keyword)
00489        CALL section_create(section,name="print",&
00490             description="Section of possible print options specific for the RESP code.",&
00491             n_keywords=0, n_subsections=1, repeats=.FALSE., required=.TRUE.,&
00492             error=error)
00493 
00494        CALL cp_print_key_section_create(print_key,"PROGRAM_RUN_INFO",&
00495             description="Controls the printing of information regarding the run.",&
00496             print_level=low_print_level,filename="__STD_OUT__",&
00497             error=error)
00498        CALL section_add_subsection(section,print_key,error=error)
00499        CALL section_release(print_key,error=error)
00500 
00501        CALL cp_print_key_section_create(print_key,"COORD_FIT_POINTS",&
00502             description="Controls the printing of the coordinates of the "// &
00503             "grid points used for periodic RESP fitting. This section "//&
00504             "is intended to be only used for testing (you can get large files).",&
00505             print_level=high_print_level,add_last=add_last_numeric,&
00506             filename="RESP_FIT_POINTS",&
00507             common_iter_levels=3, error=error)
00508        CALL section_add_subsection(section,print_key,error=error)
00509        CALL section_release(print_key,error=error)
00510 
00511        CALL cp_print_key_section_create(print_key,"RESP_CHARGES_TO_FILE",&
00512             description="Controls the printing of the RESP charges "// &
00513             "to a file.",&
00514             print_level=high_print_level,add_last=add_last_numeric,&
00515             filename="RESP_CHARGES",&
00516             common_iter_levels=3, error=error)
00517        CALL section_add_subsection(section,print_key,error=error)
00518        CALL section_release(print_key,error=error)
00519 
00520        CALL cp_print_key_section_create(print_key,"V_RESP_CUBE",&
00521             description="Controls the printing of the potential generated "//&
00522             "by the RESP CHARGES to a cube file. Prints the relative "//&
00523             "root-mean-square (RRMS) and root-mean-square (RMS) errors.",&
00524             print_level=high_print_level,add_last=add_last_numeric,&
00525             filename="RESP_POTENTIAL",&
00526             common_iter_levels=3, error=error)
00527        CALL keyword_create(keyword, name="stride",&
00528             description="The stride (X,Y,Z) used to write the cube file "//&
00529             "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"//&
00530             " 1 number valid for all components.",&
00531             usage="STRIDE 2 2 2",n_var=-1,default_i_vals=(/2,2,2/), type_of_var=integer_t,error=error)
00532        CALL section_add_keyword(print_key,keyword,error=error)
00533        CALL keyword_release(keyword,error=error)
00534        CALL keyword_create(keyword, name="APPEND",&
00535             description="append the cube files when they already exist",&
00536             default_l_val=.FALSE., lone_keyword_l_val=.TRUE.,error=error)
00537        CALL section_add_keyword(print_key,keyword,error=error)
00538        CALL keyword_release(keyword,error=error)
00539        CALL section_add_subsection(section,print_key,error=error)
00540        CALL section_release(print_key,error=error)
00541    ENDIF
00542   END SUBROUTINE create_print_resp_section
00543 
00544 END MODULE input_cp2k_resp