LCOV - code coverage report
Current view: top level - src/motion - gopt_param_types.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:85b8a9b) Lines: 94.4 % 36 34
Test Date: 2026-06-14 06:48:14 Functions: 33.3 % 3 1

            Line data    Source code
       1              : !--------------------------------------------------------------------------------------------------!
       2              : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3              : !   Copyright 2000-2026 CP2K developers group <https://cp2k.org>                                   !
       4              : !                                                                                                  !
       5              : !   SPDX-License-Identifier: GPL-2.0-or-later                                                      !
       6              : !--------------------------------------------------------------------------------------------------!
       7              : 
       8              : ! **************************************************************************************************
       9              : !> \brief contains typo and related routines to handle parameters controlling the
      10              : !>      GEO_OPT module
      11              : !> \par History
      12              : !>      none
      13              : ! **************************************************************************************************
      14              : MODULE gopt_param_types
      15              : 
      16              :    USE input_constants,                 ONLY: default_bfgs_method_id,&
      17              :                                               default_cell_method_id,&
      18              :                                               default_cg_method_id,&
      19              :                                               default_lbfgs_method_id,&
      20              :                                               default_ts_method_id,&
      21              :                                               none_ts_method_id
      22              :    USE input_section_types,             ONLY: section_vals_type,&
      23              :                                               section_vals_val_get
      24              :    USE kinds,                           ONLY: dp
      25              : #include "../base/base_uses.f90"
      26              : 
      27              :    IMPLICIT NONE
      28              :    PRIVATE
      29              : 
      30              :    LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .TRUE.
      31              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'gopt_param_types'
      32              : 
      33              :    PUBLIC :: gopt_param_type
      34              :    PUBLIC :: gopt_param_read
      35              : 
      36              : ! **************************************************************************************************
      37              : !> \brief stores the parameters nedeed for a geometry optimization
      38              : !> \param method_id the optimization method
      39              : !> \param wanted_proj_gradient the wanted accuracy on the projected gradient
      40              : !> \param wanted_rel_f_error ...
      41              : !> \param max_h_rank maximum rank of the hessian approximation
      42              : !> \param max_f_per_iter maximum number of function evaluations per iteration
      43              : !> \param max_iter maximum number of iterations
      44              : !> \par History
      45              : !>      08.2003 created [fawzi]
      46              : !> \author Fawzi Mohamed
      47              : ! **************************************************************************************************
      48              :    TYPE cg_ls_param_type
      49              :       INTEGER         :: brent_max_iter = 0, type_id = default_cell_method_id
      50              :       REAL(KIND=dp) :: brent_tol = 0.0_dp, brack_limit = 0.0_dp, initial_step = 0.0_dp, max_step = 0.0_dp
      51              :       LOGICAL         :: grad_only = .FALSE.
      52              :    END TYPE cg_ls_param_type
      53              : 
      54              : ! **************************************************************************************************
      55              :    TYPE gopt_param_type
      56              :       LOGICAL                  :: Fletcher_Reeves = .FALSE.
      57              :       INTEGER                  :: method_id = default_cell_method_id, type_id = default_cell_method_id
      58              :       INTEGER                  :: ts_method_id = 0, shellcore_method_id = 0
      59              :       INTEGER                  :: max_f_per_iter = 0, max_iter = 0, max_h_rank = 0
      60              :       INTEGER                  :: max_steep_steps = 0, print_control = 0
      61              :       REAL(KIND=dp)            :: restart_limit = 0.0_dp
      62              :       REAL(KIND=dp)            :: trust_radius = -1.0_dp, wanted_proj_gradient = 0.0_dp, wanted_rel_f_error = 0.0_dp
      63              :       REAL(KIND=dp)            :: max_dr = 0.0_dp, max_force = 0.0_dp, rms_dr = 0.0_dp, rms_force = 0.0_dp
      64              :       REAL(KIND=dp)            :: dimer_angle_tol = 0.0_dp
      65              :       TYPE(cg_ls_param_type)   :: cg_ls = cg_ls_param_type()
      66              :    END TYPE gopt_param_type
      67              : 
      68              : CONTAINS
      69              : 
      70              : ! **************************************************************************************************
      71              : !> \brief reads the parameters of the geopmetry optimizer
      72              : !> \param gopt_param ...
      73              : !> \param gopt_section ...
      74              : !> \param type_id ...
      75              : !> \par History
      76              : !>      08.2003 created [fawzi]
      77              : !> \author Fawzi Mohamed
      78              : ! **************************************************************************************************
      79         1121 :    SUBROUTINE gopt_param_read(gopt_param, gopt_section, type_id)
      80              :       TYPE(gopt_param_type), INTENT(OUT)                 :: gopt_param
      81              :       TYPE(section_vals_type), POINTER                   :: gopt_section
      82              :       INTEGER, INTENT(IN), OPTIONAL                      :: type_id
      83              : 
      84              :       LOGICAL                                            :: explicit
      85              : 
      86         1121 :       CPASSERT(ASSOCIATED(gopt_section))
      87              : 
      88         1121 :       IF (PRESENT(type_id)) THEN
      89          248 :          gopt_param%type_id = type_id
      90              :       ELSE
      91          873 :          CALL section_vals_val_get(gopt_section, "TYPE", i_val=gopt_param%type_id)
      92              :       END IF
      93         1121 :       CALL section_vals_val_get(gopt_section, "OPTIMIZER", i_val=gopt_param%method_id)
      94              : 
      95         1121 :       CALL section_vals_val_get(gopt_section, "MAX_ITER", i_val=gopt_param%max_iter)
      96         1121 :       CALL section_vals_val_get(gopt_section, "MAX_DR", r_val=gopt_param%max_dr)
      97         1121 :       CALL section_vals_val_get(gopt_section, "MAX_FORCE", r_val=gopt_param%max_force)
      98         1121 :       CALL section_vals_val_get(gopt_section, "RMS_DR", r_val=gopt_param%rms_dr)
      99         1121 :       CALL section_vals_val_get(gopt_section, "RMS_FORCE", r_val=gopt_param%rms_force)
     100              : 
     101         1211 :       SELECT CASE (gopt_param%method_id)
     102              :       CASE (default_lbfgs_method_id)
     103           90 :          CALL section_vals_val_get(gopt_section, "LBFGS%MAX_H_RANK", i_val=gopt_param%max_h_rank)
     104           90 :          CALL section_vals_val_get(gopt_section, "LBFGS%MAX_F_PER_ITER", i_val=gopt_param%max_f_per_iter)
     105           90 :          CALL section_vals_val_get(gopt_section, "LBFGS%TRUST_RADIUS", r_val=gopt_param%trust_radius)
     106           90 :          CALL section_vals_val_get(gopt_section, "LBFGS%WANTED_PROJ_GRADIENT", r_val=gopt_param%wanted_proj_gradient)
     107           90 :          CALL section_vals_val_get(gopt_section, "LBFGS%WANTED_REL_F_ERROR", r_val=gopt_param%wanted_rel_f_error)
     108           90 :          CALL section_vals_val_get(gopt_section, "LBFGS%__CONTROL_VAL", explicit=explicit)
     109           90 :          IF (explicit) THEN
     110            0 :             CALL section_vals_val_get(gopt_section, "LBFGS%__CONTROL_VAL", i_val=gopt_param%print_control)
     111              :          ELSE
     112           90 :             CALL section_vals_val_get(gopt_section, "LBFGS%PRINT_LEVEL", i_val=gopt_param%print_control)
     113              :          END IF
     114              :       CASE (default_bfgs_method_id)
     115              :          ! Do nothing
     116              :       CASE (default_cg_method_id)
     117          158 :          CALL section_vals_val_get(gopt_section, "CG%FLETCHER_REEVES", l_val=gopt_param%Fletcher_Reeves)
     118          158 :          CALL section_vals_val_get(gopt_section, "CG%MAX_STEEP_STEPS", i_val=gopt_param%max_steep_steps)
     119          158 :          CALL section_vals_val_get(gopt_section, "CG%RESTART_LIMIT", r_val=gopt_param%restart_limit)
     120          158 :          CALL section_vals_val_get(gopt_section, "CG%LINE_SEARCH%TYPE", i_val=gopt_param%cg_ls%type_id)
     121              :          CALL section_vals_val_get(gopt_section, "CG%LINE_SEARCH%GOLD%INITIAL_STEP", &
     122          158 :                                    r_val=gopt_param%cg_ls%initial_step)
     123              :          CALL section_vals_val_get(gopt_section, "CG%LINE_SEARCH%GOLD%BRENT_TOL", &
     124          158 :                                    r_val=gopt_param%cg_ls%brent_tol)
     125              :          CALL section_vals_val_get(gopt_section, "CG%LINE_SEARCH%GOLD%BRENT_MAX_ITER", &
     126          158 :                                    i_val=gopt_param%cg_ls%brent_max_iter)
     127              :          CALL section_vals_val_get(gopt_section, "CG%LINE_SEARCH%GOLD%BRACK_LIMIT", &
     128          158 :                                    r_val=gopt_param%cg_ls%brack_limit)
     129              :          CALL section_vals_val_get(gopt_section, "CG%LINE_SEARCH%2PNT%MAX_ALLOWED_STEP", &
     130          158 :                                    r_val=gopt_param%cg_ls%max_step)
     131              :          CALL section_vals_val_get(gopt_section, "CG%LINE_SEARCH%2PNT%LINMIN_GRAD_ONLY", &
     132         1369 :                                    l_val=gopt_param%cg_ls%grad_only)
     133              :       END SELECT
     134              : 
     135         1121 :       IF (gopt_param%type_id == default_ts_method_id) THEN
     136           24 :          CALL section_vals_val_get(gopt_section, "TRANSITION_STATE%METHOD", i_val=gopt_param%ts_method_id)
     137              :       ELSE
     138         1097 :          gopt_param%ts_method_id = none_ts_method_id
     139              :       END IF
     140              : 
     141         1121 :    END SUBROUTINE gopt_param_read
     142              : 
     143            0 : END MODULE gopt_param_types
        

Generated by: LCOV version 2.0-1