53#include "../base/base_uses.f90"
72 SUBROUTINE cp_eval_at(gopt_env, x, f, gradient, master, &
73 final_evaluation, para_env)
79 TYPE(gopt_f_type),
POINTER :: gopt_env
80 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: x
81 REAL(KIND=
dp),
INTENT(out),
OPTIONAL :: f
82 REAL(KIND=
dp),
DIMENSION(:),
OPTIONAL, &
84 INTEGER,
INTENT(IN) :: master
85 LOGICAL,
INTENT(IN),
OPTIONAL :: final_evaluation
86 TYPE(mp_para_env_type),
POINTER :: para_env
93 LOGICAL,
PRIVATE,
PARAMETER :: debug_this_module = .true.
94 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'cg_optimizer'
111 RECURSIVE SUBROUTINE geoopt_cg(force_env, gopt_param, globenv, geo_section, &
112 gopt_env, x0, do_update)
118 TYPE(gopt_f_type),
POINTER :: gopt_env
119 REAL(kind=dp),
DIMENSION(:),
POINTER :: x0
120 LOGICAL,
INTENT(OUT),
OPTIONAL :: do_update
122 CHARACTER(len=*),
PARAMETER :: routinen =
'geoopt_cg'
124 INTEGER :: handle, output_unit
125 LOGICAL :: my_do_update
130 CALL timeset(routinen, handle)
134 spgr => gopt_env%spgr
143 IF (spgr%keep_space_group)
THEN
144 SELECT CASE (gopt_env%type_id)
151 SELECT CASE (gopt_env%cell_method_id)
158 spgr%keep_space_group = .false.
160 cpabort(
"KEEP_SPACE_GROUP not implemented for motion method MD.")
162 spgr%keep_space_group = .false.
165 spgr%keep_space_group = .false.
169 CALL cp_cg_main(force_env, x0, gopt_param, output_unit, globenv, &
170 gopt_env, do_update=my_do_update)
173 "PRINT%PROGRAM_RUN_INFO")
174 IF (
PRESENT(do_update)) do_update = my_do_update
176 CALL timestop(handle)
193 RECURSIVE SUBROUTINE cp_cg_main(force_env, x0, gopt_param, output_unit, globenv, &
196 REAL(kind=dp),
DIMENSION(:),
POINTER :: x0
198 INTEGER,
INTENT(IN) :: output_unit
200 TYPE(gopt_f_type),
POINTER :: gopt_env
201 LOGICAL,
INTENT(OUT),
OPTIONAL :: do_update
203 CHARACTER(len=*),
PARAMETER :: routinen =
'cp_cg_main'
205 CHARACTER(LEN=5) :: wildcard
206 INTEGER :: handle, iter_nr, its, max_steep_steps, &
208 LOGICAL :: conv, fletcher_reeves, &
209 save_consistent_energy_force, &
211 REAL(kind=dp) :: emin, eold, opt_energy, res_lim, t_diff, &
213 REAL(kind=dp),
ALLOCATABLE,
DIMENSION(:) :: xold
214 REAL(kind=dp),
DIMENSION(:),
POINTER :: g, h, xi
221 CALL timeset(routinen, handle)
223 NULLIFY (logger, g, h, xi, spgr)
224 root_section => force_env%root_section
227 maxiter = gopt_param%max_iter
228 max_steep_steps = gopt_param%max_steep_steps
229 fletcher_reeves = gopt_param%Fletcher_Reeves
230 res_lim = gopt_param%restart_limit
231 ALLOCATE (g(
SIZE(x0)))
232 ALLOCATE (h(
SIZE(x0)))
233 ALLOCATE (xi(
SIZE(x0)))
234 ALLOCATE (xold(
SIZE(x0)))
237 spgr => gopt_env%spgr
239 IF (spgr%keep_space_group)
THEN
245 save_consistent_energy_force = gopt_env%require_consistent_energy_force
246 gopt_env%require_consistent_energy_force = .false.
248 CALL cp_eval_at(gopt_env, x0, opt_energy, xi, gopt_env%force_env%para_env%mepos, &
249 .false., gopt_env%force_env%para_env)
251 gopt_env%require_consistent_energy_force = save_consistent_energy_force
254 IF (spgr%keep_space_group)
THEN
263 CALL cp_iterate(logger%iter_info, increment=0, iter_nr_out=iter_nr)
267 t_diff = t_now - t_old
269 CALL gopt_f_io_init(gopt_env, output_unit, opt_energy, wildcard, used_time=t_diff, its=iter_nr)
271 DO its = iter_nr + 1, maxiter
272 CALL cp_iterate(logger%iter_info, last=(its == maxiter))
277 IF (spgr%keep_space_group)
THEN
286 CALL cg_linmin(gopt_env, x0, xi, g, opt_energy, output_unit, gopt_param, globenv)
289 IF (spgr%keep_space_group)
THEN
295 IF (should_stop)
EXIT
299 t_diff = t_now - t_old
301 CALL gopt_f_io(gopt_env, force_env, root_section, its, opt_energy, &
302 output_unit, eold, emin, wildcard, gopt_param,
SIZE(x0), x0 - xold, xi, conv, &
305 emin = min(emin, opt_energy)
307 IF (conv .OR. (its == maxiter))
EXIT
309 save_consistent_energy_force = gopt_env%require_consistent_energy_force
310 gopt_env%require_consistent_energy_force = .false.
312 CALL cp_eval_at(gopt_env, x0, opt_energy, xi, gopt_env%force_env%para_env%mepos, &
313 .false., gopt_env%force_env%para_env)
315 gopt_env%require_consistent_energy_force = save_consistent_energy_force
318 IF (spgr%keep_space_group)
THEN
327 IF (spgr%keep_space_group)
THEN
334 IF ((dot_product(g, h)*dot_product(g, h)) > (res_lim*res_lim*dot_product(g, g)*dot_product(h, h)) &
335 .OR. its + 1 <= max_steep_steps)
THEN
344 IF (its == maxiter .AND. (.NOT. conv))
THEN
349 IF (
PRESENT(do_update)) do_update = conv
350 CALL cp_iterate(logger%iter_info, last=.true., increment=0)
352 gopt_env%force_env%para_env, gopt_env%force_env%para_env%mepos, output_unit)
359 CALL timestop(handle)
361 END SUBROUTINE cp_cg_main
subroutine cp_eval_at(gopt_env, x, f, gradient, master, final_evaluation, para_env)
evaluete the potential energy and its gradients using an array with same dimension as the particle_se...
Handles all functions related to the CELL.
Routines for Geometry optimization using Conjugate Gradients.
recursive subroutine, public geoopt_cg(force_env, gopt_param, globenv, geo_section, gopt_env, x0, do_update)
Driver for conjugate gradient optimization technique.
Utilities for Geometry optimization using Conjugate Gradients.
subroutine, public get_conjugate_direction(gopt_env, fletcher_reeves, g, xi, h)
Computes the Conjugate direction for the next search.
recursive subroutine, public cg_linmin(gopt_env, xvec, xi, g, opt_energy, output_unit, gopt_param, globenv)
Main driver for line minimization routines for CG.
Routines to handle the external control of CP2K.
subroutine, public external_control(should_stop, flag, globenv, target_time, start_time, force_check)
External manipulations during a run : when the <PROJECT_NAME>.EXIT_$runtype command is sent the progr...
various routines to log and control the output. The idea is that decisions about where to log should ...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer function, public cp_print_key_unit_nr(logger, basis_section, print_key_path, extension, middle_name, local, log_filename, ignore_should_output, file_form, file_position, file_action, file_status, do_backup, on_file, is_new_file, mpi_io, fout)
...
subroutine, public cp_print_key_finished_output(unit_nr, logger, basis_section, print_key_path, local, ignore_should_output, on_file, mpi_io)
should be called after you finish working with a unit obtained with cp_print_key_unit_nr,...
subroutine, public cp_iterate(iteration_info, last, iter_nr, increment, iter_nr_out)
adds one to the actual iteration
types that represent a subsys, i.e. a part of the system
Interface for the force calculations.
recursive subroutine, public force_env_get(force_env, in_use, fist_env, qs_env, meta_env, fp_env, subsys, para_env, potential_energy, additional_potential, kinetic_energy, harmonic_shell, kinetic_shell, cell, sub_force_env, qmmm_env, qmmmx_env, eip_env, pwdft_env, globenv, input, force_env_section, method_name_id, root_section, mixed_env, nnp_env, embed_env, ipi_env)
returns various attributes about the force environment
Define type storing the global information of a run. Keep the amount of stored data small....
contains a functional that calculates the energy and its derivatives for the geometry optimizer
subroutine, public print_geo_opt_header(gopt_env, output_unit, label)
...
subroutine, public gopt_f_io_init(gopt_env, output_unit, opt_energy, wildcard, its, used_time)
Handles the Output during an optimization run.
recursive subroutine, public gopt_f_io_finalize(gopt_env, force_env, x0, conv, its, root_section, para_env, master, output_unit)
Handles the Output at the end of an optimization run.
subroutine, public gopt_f_io(gopt_env, force_env, root_section, its, opt_energy, output_unit, eold, emin, wildcard, gopt_param, ndf, dx, xi, conv, pred, rat, step, rad, used_time)
Handles the Output during an optimization run.
subroutine, public print_geo_opt_nc(gopt_env, output_unit)
...
subroutine, public gopt_f_ii(its, output_unit)
Prints iteration step of the optimization procedure on screen.
contains a functional that calculates the energy and its derivatives for the geometry optimizer
contains typo and related routines to handle parameters controlling the GEO_OPT module
Defines the basic variable types.
integer, parameter, public dp
Machine interface based on Fortran 2003 and POSIX.
real(kind=dp) function, public m_walltime()
returns time from a real-time clock, protected against rolling early/easily
Interface to the message passing library MPI.
Space Group Symmetry Type Module (version 1.0, Ferbruary 12, 2021)
Space Group Symmetry Module (version 1.0, January 16, 2020)
subroutine, public print_spgr(spgr)
routine prints Space Group Information.
subroutine, public spgr_apply_rotations_coord(spgr, coord)
routine applies the rotation matrices to the coordinates.
subroutine, public identify_space_group(subsys, geo_section, gopt_env, iunit)
routine indentifies the space group and finds rotation matrices.
subroutine, public spgr_apply_rotations_force(spgr, force)
routine applies the rotation matrices to the forces.
Type defining parameters related to the simulation cell.
type of a logger, at the moment it contains just a print level starting at which level it should be l...
represents a system: atoms, molecules, their pos,vel,...
wrapper to abstract the force evaluation of the various methods
contains the initially parsed file and the initial parallel environment
calculates the potential energy of a system, and its derivatives
stores all the informations relevant to an mpi environment