24 final_evaluation, para_env)
73#include "../base/base_uses.f90"
76 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: x
77 REAL(KIND=
dp),
INTENT(OUT),
OPTIONAL :: f
78 REAL(KIND=
dp),
DIMENSION(:),
OPTIONAL, &
80 INTEGER,
INTENT(IN) :: master
81 LOGICAL,
INTENT(IN),
OPTIONAL :: final_evaluation
84 CHARACTER(len=*),
PARAMETER :: routineN =
'cp_eval_at'
86 INTEGER :: handle, idg, idir, ip, &
87 nparticle, nsize, shell_index
88 LOGICAL :: my_final_evaluation
89 REAL(KIND=
dp) :: f_ts, potential_energy
90 REAL(KIND=
dp),
DIMENSION(3, 3) :: av_ptens
91 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: cell_gradient, gradient_ts
103 NULLIFY (core_particles)
104 NULLIFY (gradient_ts)
106 NULLIFY (shell_particles)
112 CALL timeset(routinen, handle)
114 CALL force_env_get(gopt_env%force_env, subsys=subsys, cell=cell)
116 core_particles=core_particles, &
117 particles=particles, &
118 shell_particles=shell_particles, &
121 spgr => gopt_env%spgr
123 my_final_evaluation = .false.
124 IF (
PRESENT(final_evaluation)) my_final_evaluation = final_evaluation
126 SELECT CASE (gopt_env%type_id)
130 SELECT CASE (gopt_env%type_id)
134 calc_force=
PRESENT(gradient), &
135 require_consistent_energy_force=gopt_env%require_consistent_energy_force)
141 IF (
PRESENT(gradient))
THEN
142 IF (master == para_env%mepos)
THEN
144 IF (spgr%keep_space_group)
THEN
152 ALLOCATE (gradient_ts(particles%n_els*3))
156 CALL cp_eval_at_ts(gopt_env, x, f_ts, gradient_ts, calc_force=.true.)
159 IF (
PRESENT(f)) f = f_ts
161 IF (
PRESENT(gradient))
THEN
162 IF (master == para_env%mepos)
THEN
163 cpassert(
ASSOCIATED(gradient))
164 gradient = gradient_ts
167 DEALLOCATE (gradient_ts)
174 IF (.NOT. virial%pv_availability) &
175 CALL cp_abort(__location__, &
176 "For a cell optimization task with CELL_OPT/TYPE "// &
177 "DIRECT_CELL_OPT, the FORCE_EVAL/STRESS_TENSOR "// &
178 "keyword MUST be defined in the input file for the "// &
179 "evaluation of the stress tensor, but none is found!")
180 IF (gopt_env%cell_env%keep_volume)
THEN
193 calc_force=
PRESENT(gradient), &
194 require_consistent_energy_force=gopt_env%require_consistent_energy_force)
196 CALL force_env_get(gopt_env%force_env, potential_energy=potential_energy)
203 IF (
PRESENT(gradient))
THEN
204 cpassert(any(virial_avg%pv_total /= 0))
206 av_ptens(:, :) = virial_avg%pv_total(:, :)/cell%deth
207 IF (master == para_env%mepos)
THEN
208 cpassert(
ASSOCIATED(gradient))
211 cpassert((
SIZE(gradient) == nsize + 6))
214 IF (spgr%keep_space_group)
THEN
219 cell_gradient => gradient(nsize + 1:nsize + 6)
220 cell_gradient = 0.0_dp
221 CALL get_dg_dh(cell_gradient, av_ptens, gopt_env%cell_env%pres_ext, cell, gopt_env%cell_env%mtrx, &
222 keep_angles=gopt_env%cell_env%keep_angles, &
223 keep_symmetry=gopt_env%cell_env%keep_symmetry, &
224 pres_int=gopt_env%cell_env%pres_int, &
225 pres_constr=gopt_env%cell_env%pres_constr, &
226 constraint_id=gopt_env%cell_env%constraint_id)
230 CALL para_env%bcast(gopt_env%cell_env%pres_int, 0)
231 IF (gopt_env%cell_env%constraint_id /=
fix_none) &
232 CALL para_env%bcast(gopt_env%cell_env%pres_constr, 0)
235 CASE (default_shellcore_method_id)
237 DO ip = 1, particles%n_els
238 shell_index = particles%els(ip)%shell_index
239 IF (shell_index /= 0)
THEN
241 idg = 3*(shell_index - 1) + idir
242 shell_particles%els(shell_index)%r(idir) = core_particles%els(ip)%r(idir) - x(idg)
246 CALL write_structure_data(particles%els, cell, gopt_env%motion_section)
249 CALL force_env_calc_energy_force(gopt_env%force_env, &
250 calc_force=
PRESENT(gradient), &
251 require_consistent_energy_force=gopt_env%require_consistent_energy_force)
255 CALL force_env_get(gopt_env%force_env, potential_energy=f)
259 IF (
PRESENT(gradient))
THEN
260 IF (master == para_env%mepos)
THEN
261 cpassert(
ASSOCIATED(gradient))
263 DO ip = 1, shell_particles%n_els
266 gradient(idg) = -(core_particles%els(ip)%f(idir) - shell_particles%els(ip)%f(idir))
272 cpabort(
"Invalid or not yet implemented type of optimization")
275 CALL timestop(handle)
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 the type to compute averages during an MD.
subroutine, public create_averages(averages, averages_section, virial_avg, force_env)
Creates averages environment.
subroutine, public release_averages(averages)
releases the given averages env
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public henkelman1999
Handles all functions related to the CELL.
subroutine, public write_cell(cell, subsys_section, tag)
Write the cell parameters to the output unit.
contains a functional that calculates the energy and its derivatives for the geometry optimizer
subroutine, public rescale_new_cell_volume(vol, x, idg)
Rescale x(idg+1:idg+6) according to vol.
subroutine, public get_dg_dh(gradient, av_ptens, pres_ext, cell, mtrx, keep_angles, keep_symmetry, pres_int, pres_constr, constraint_id)
Computes the derivatives for the cell.
subroutine, public gopt_new_logger_release(new_logger, root_section, para_env, project_name, id_run)
releases a new logger used for cell optimization algorithm
subroutine, public gopt_new_logger_create(new_logger, root_section, para_env, project_name, id_run)
creates a new logger used for cell optimization algorithm
Handles all functions related to the CELL.
various routines to log and control the output. The idea is that decisions about where to log should ...
subroutine, public cp_rm_default_logger()
the cousin of cp_add_default_logger, decrements the stack, so that the default logger is what it has ...
subroutine, public cp_add_default_logger(logger)
adds a default logger. MUST be called before logging occours
types that represent a subsys, i.e. a part of the system
subroutine, public unpack_subsys_particles(subsys, f, r, s, v, fscale, cell)
Unpack components of a subsystem particle sets into a single vector.
subroutine, public cp_subsys_get(subsys, ref_count, atomic_kinds, atomic_kind_set, particles, particle_set, local_particles, molecules, molecule_set, molecule_kinds, molecule_kind_set, local_molecules, para_env, colvar_p, shell_particles, core_particles, gci, multipoles, natom, nparticle, ncore, nshell, nkind, atprop, virial, results, cell, cell_ref, use_ref_cell)
returns information about various attributes of the given subsys
subroutine, public pack_subsys_particles(subsys, f, r, s, v, fscale, cell)
Pack components of a subsystem particle sets into a single vector.
Contains types used for a Dimer Method calculations.
recursive subroutine, public cp_eval_at_ts(gopt_env, x, f, gradient, calc_force)
Computes the dimer energy/gradients (including the rotation of the dimer)
Interface for the force calculations.
recursive subroutine, public force_env_calc_energy_force(force_env, calc_force, consistent_energies, skip_external_control, eval_energy_forces, require_consistent_energy_force, linres, calc_stress_tensor)
Interface routine for force and energy calculations.
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
integer function, public force_env_get_nparticle(force_env)
returns the number of particles in a force environment
performs geometry optimization
subroutine, public cp_geo_opt(force_env, globenv, eval_opt_geo, rm_restart_info)
Main driver to perform geometry optimization.
contains a functional that calculates the energy and its derivatives for the geometry optimizer
subroutine, public apply_cell_change(gopt_env, cell, x, update_forces)
Apply coordinate transformations after cell (shape) change.
contains a functional that calculates the energy and its derivatives for the geometry optimizer
Defines the basic variable types.
integer, parameter, public dp
Perform a molecular dynamics (MD) run using QUICKSTEP.
subroutine, public qs_mol_dyn(force_env, globenv, averages, rm_restart_info, hmc_e_initial, hmc_e_final, mdctrl)
Main driver module for Molecular Dynamics.
Interface to the message passing library MPI.
represent a simple array based list of the given type
Define methods related to particle_type.
subroutine, public write_structure_data(particle_set, cell, input_section)
Write structure data requested by a separate structure data input section to the output unit....
Space Group Symmetry Type Module (version 1.0, Ferbruary 12, 2021)
Space Group Symmetry Module (version 1.0, January 16, 2020)
subroutine, public spgr_apply_rotations_stress(spgr, cell, stress)
routine applies the rotation matrices to the stress tensor.
subroutine, public spgr_apply_rotations_coord(spgr, coord)
routine applies the rotation matrices to the coordinates.
subroutine, public spgr_apply_rotations_force(spgr, force)
routine applies the rotation matrices to the forces.
subroutine, public spgr_write_stress_tensor(stress, spgr)
Variable precision output of the symmetrized stress tensor.
subroutine, public virial_update(virial, subsys, para_env)
Updates the virial given the virial and subsys.
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,...
calculates the potential energy of a system, and its derivatives
stores all the informations relevant to an mpi environment
represent a list of objects