75#include "./base/base_uses.f90"
81 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'force_env_types'
94 CHARACTER(LEN=10),
DIMENSION(501:510),
PARAMETER,
PUBLIC :: &
146 INTEGER :: ref_count = 0, in_use = 0, method_name_id = 0
147 REAL(kind=
dp) :: additional_potential = 0.0_dp
192 cpassert(
ASSOCIATED(force_env))
193 cpassert(force_env%ref_count > 0)
194 force_env%ref_count = force_env%ref_count + 1
209 INTEGER :: i, my_group
212 IF (
ASSOCIATED(force_env))
THEN
213 cpassert(force_env%ref_count > 0)
214 force_env%ref_count = force_env%ref_count - 1
215 IF (force_env%ref_count == 0)
THEN
217 IF (
ASSOCIATED(force_env%sub_force_env))
THEN
218 DO i = 1,
SIZE(force_env%sub_force_env)
219 IF (.NOT.
ASSOCIATED(force_env%sub_force_env(i)%force_env)) cycle
222 my_group = force_env%mixed_env%group_distribution(force_env%para_env%mepos)
223 my_logger => force_env%mixed_env%sub_logger(my_group + 1)%p
228 my_group = force_env%embed_env%group_distribution(force_env%para_env%mepos)
229 my_logger => force_env%embed_env%sub_logger(my_group + 1)%p
240 DEALLOCATE (force_env%sub_force_env)
243 SELECT CASE (force_env%in_use)
246 DEALLOCATE (force_env%fist_env)
249 DEALLOCATE (force_env%qs_env)
252 DEALLOCATE (force_env%eip_env)
255 DEALLOCATE (force_env%pwdft_env)
258 DEALLOCATE (force_env%mixed_env)
261 DEALLOCATE (force_env%nnp_env)
264 DEALLOCATE (force_env%embed_env)
268 DEALLOCATE (force_env%ipi_env)
273 cpassert(.NOT.
ASSOCIATED(force_env%fist_env))
274 cpassert(.NOT.
ASSOCIATED(force_env%qs_env))
275 cpassert(.NOT.
ASSOCIATED(force_env%eip_env))
276 cpassert(.NOT.
ASSOCIATED(force_env%pwdft_env))
277 cpassert(.NOT.
ASSOCIATED(force_env%mixed_env))
278 cpassert(.NOT.
ASSOCIATED(force_env%nnp_env))
279 cpassert(.NOT.
ASSOCIATED(force_env%embed_env))
280 cpassert(.NOT.
ASSOCIATED(force_env%ipi_env))
281 IF (
ASSOCIATED(force_env%meta_env))
THEN
283 DEALLOCATE (force_env%meta_env)
285 IF (
ASSOCIATED(force_env%fp_env))
THEN
287 DEALLOCATE (force_env%fp_env)
289 IF (
ASSOCIATED(force_env%qmmm_env))
THEN
291 DEALLOCATE (force_env%qmmm_env)
293 IF (
ASSOCIATED(force_env%qmmmx_env))
THEN
295 DEALLOCATE (force_env%qmmmx_env)
299 DEALLOCATE (force_env)
340 meta_env, fp_env, subsys, para_env, potential_energy, additional_potential, &
341 kinetic_energy, harmonic_shell, kinetic_shell, cell, sub_force_env, &
342 qmmm_env, qmmmx_env, eip_env, pwdft_env, globenv, input, force_env_section, &
343 method_name_id, root_section, mixed_env, nnp_env, embed_env, ipi_env)
345 INTEGER,
INTENT(out),
OPTIONAL :: in_use
349 TYPE(
fp_type),
OPTIONAL,
POINTER :: fp_env
352 REAL(kind=
dp),
INTENT(OUT),
OPTIONAL :: potential_energy, additional_potential, &
353 kinetic_energy, harmonic_shell, &
355 TYPE(
cell_type),
OPTIONAL,
POINTER :: cell
357 POINTER :: sub_force_env
364 INTEGER,
INTENT(out),
OPTIONAL :: method_name_id
367 TYPE(
nnp_type),
OPTIONAL,
POINTER :: nnp_env
371 REAL(kind=
dp) :: eip_kinetic_energy, eip_potential_energy
380 cpassert(force_env%ref_count > 0)
382 SELECT CASE (force_env%in_use)
384 cpassert(
ASSOCIATED(force_env%qs_env))
385 cpassert(.NOT.
PRESENT(fist_env))
386 cpassert(.NOT.
PRESENT(eip_env))
387 cpassert(.NOT.
PRESENT(pwdft_env))
388 cpassert(.NOT.
PRESENT(ipi_env))
393 IF (
PRESENT(potential_energy)) potential_energy =
qs_energy%total
394 cpassert(.NOT.
PRESENT(kinetic_energy))
396 cpassert(
ASSOCIATED(force_env%fist_env))
397 cpassert(.NOT.
PRESENT(input))
401 IF (
PRESENT(potential_energy)) potential_energy = thermo%pot
402 IF (
PRESENT(kinetic_energy)) kinetic_energy = thermo%kin
403 IF (
PRESENT(kinetic_shell)) kinetic_shell = thermo%kin_shell
404 IF (
PRESENT(harmonic_shell)) harmonic_shell = thermo%harm_shell
406 cpassert(
ASSOCIATED(force_env%eip_env))
407 cpassert(.NOT.
PRESENT(qs_env))
408 cpassert(.NOT.
PRESENT(fist_env))
409 cpassert(.NOT.
PRESENT(ipi_env))
411 eip_potential_energy=eip_potential_energy, &
412 eip_kinetic_energy=eip_kinetic_energy, &
414 IF (
PRESENT(potential_energy))
THEN
415 potential_energy = eip_potential_energy
417 IF (
PRESENT(kinetic_energy)) kinetic_energy = eip_kinetic_energy
418 cpassert(.NOT.
PRESENT(kinetic_energy))
420 cpassert(
ASSOCIATED(force_env%pwdft_env))
421 cpassert(.NOT.
PRESENT(qs_env))
422 cpassert(.NOT.
PRESENT(fist_env))
423 cpassert(.NOT.
PRESENT(ipi_env))
426 IF (
PRESENT(potential_energy)) potential_energy = pwdft_energy%etotal
427 cpassert(.NOT.
PRESENT(kinetic_energy))
431 potential_energy=potential_energy, &
432 kinetic_energy=kinetic_energy)
436 potential_energy=potential_energy, &
437 kinetic_energy=kinetic_energy)
439 cpassert(
ASSOCIATED(force_env%mixed_env))
440 cpassert(.NOT.
PRESENT(input))
442 mixed_energy=mixed_energy, &
444 IF (
PRESENT(potential_energy)) potential_energy = mixed_energy%pot
445 IF (
PRESENT(kinetic_energy)) kinetic_energy = mixed_energy%kin
448 cpassert(
ASSOCIATED(force_env%embed_env))
449 cpassert(.NOT.
PRESENT(input))
451 pot_energy=potential_energy, &
454 cpassert(
ASSOCIATED(force_env%nnp_env))
455 cpassert(.NOT.
PRESENT(ipi_env))
457 nnp_potential_energy=potential_energy, &
459 cpassert(.NOT.
PRESENT(kinetic_energy))
462 ipi_energy=potential_energy, &
465 cpabort(
"unknown in_use flag value ")
468 IF (
PRESENT(force_env_section)) force_env_section => force_env%force_env_section
469 IF (
PRESENT(in_use)) in_use = force_env%in_use
470 IF (
PRESENT(method_name_id)) method_name_id = force_env%method_name_id
471 IF (
PRESENT(fist_env))
THEN
472 fist_env => force_env%fist_env
474 IF (
PRESENT(qs_env))
THEN
475 qs_env => force_env%qs_env
477 IF (
PRESENT(eip_env))
THEN
478 eip_env => force_env%eip_env
480 IF (
PRESENT(pwdft_env))
THEN
481 pwdft_env => force_env%pwdft_env
483 IF (
PRESENT(nnp_env))
THEN
484 nnp_env => force_env%nnp_env
486 IF (
PRESENT(ipi_env))
THEN
487 ipi_env => force_env%ipi_env
489 IF (
PRESENT(para_env)) para_env => force_env%para_env
491 IF (
ASSOCIATED(force_env%meta_env))
THEN
492 IF (
PRESENT(potential_energy))
THEN
493 potential_energy = potential_energy + &
494 force_env%meta_env%epot_s + &
495 force_env%meta_env%epot_walls + &
496 force_env%meta_env%plumed_bias + &
497 force_env%meta_env%hills_env%energy
499 IF (
PRESENT(kinetic_energy))
THEN
500 kinetic_energy = kinetic_energy + force_env%meta_env%ekin_s
504 IF (
ASSOCIATED(force_env%fp_env) .AND.
PRESENT(potential_energy))
THEN
505 IF (force_env%fp_env%use_fp)
THEN
506 potential_energy = potential_energy + force_env%fp_env%energy
509 IF (
PRESENT(potential_energy))
THEN
510 potential_energy = potential_energy + force_env%additional_potential
512 IF (
PRESENT(additional_potential))
THEN
513 additional_potential = force_env%additional_potential
515 IF (
PRESENT(cell))
THEN
519 IF (
PRESENT(fp_env)) fp_env => force_env%fp_env
520 IF (
PRESENT(meta_env)) meta_env => force_env%meta_env
521 IF (
PRESENT(sub_force_env)) sub_force_env => force_env%sub_force_env
522 IF (
PRESENT(qmmm_env)) qmmm_env => force_env%qmmm_env
523 IF (
PRESENT(qmmmx_env)) qmmmx_env => force_env%qmmmx_env
524 IF (
PRESENT(mixed_env)) mixed_env => force_env%mixed_env
525 IF (
PRESENT(embed_env)) embed_env => force_env%embed_env
526 IF (
PRESENT(ipi_env)) ipi_env => force_env%ipi_env
527 IF (
PRESENT(globenv)) globenv => force_env%globenv
528 IF (
PRESENT(root_section)) root_section => force_env%root_section
563 INTEGER :: n_particle
585 REAL(kind=
dp),
DIMENSION(*),
INTENT(OUT) :: frc
586 INTEGER,
INTENT(IN) :: n
588 CHARACTER(LEN=*),
PARAMETER :: routinen =
'force_env_get_frc'
593 CALL timeset(routinen, handle)
594 cpassert(force_env%ref_count > 0)
597 CALL timestop(handle)
612 REAL(kind=
dp),
DIMENSION(*),
INTENT(OUT) :: pos
613 INTEGER,
INTENT(IN) :: n
615 CHARACTER(LEN=*),
PARAMETER :: routinen =
'force_env_get_pos'
620 CALL timeset(routinen, handle)
621 cpassert(force_env%ref_count > 0)
624 CALL timestop(handle)
639 REAL(kind=
dp),
DIMENSION(*),
INTENT(OUT) :: vel
640 INTEGER,
INTENT(IN) :: n
642 CHARACTER(LEN=*),
PARAMETER :: routinen =
'force_env_get_vel'
647 CALL timeset(routinen, handle)
648 cpassert(force_env%ref_count > 0)
651 CALL timestop(handle)
668 method_name_id, additional_potential)
672 TYPE(
fp_type),
OPTIONAL,
POINTER :: fp_env
674 INTEGER,
OPTIONAL :: method_name_id
675 REAL(kind=
dp),
INTENT(IN),
OPTIONAL :: additional_potential
677 cpassert(force_env%ref_count > 0)
678 IF (
PRESENT(meta_env))
THEN
679 IF (
ASSOCIATED(force_env%meta_env))
THEN
681 DEALLOCATE (force_env%meta_env)
683 force_env%meta_env => meta_env
685 IF (
PRESENT(fp_env))
THEN
686 IF (
ASSOCIATED(force_env%fp_env))
CALL fp_env_release(force_env%fp_env)
687 force_env%fp_env => fp_env
689 IF (
PRESENT(force_env_section))
THEN
690 IF (
ASSOCIATED(force_env_section))
THEN
693 force_env%force_env_section => force_env_section
696 IF (
PRESENT(additional_potential))
THEN
697 force_env%additional_potential = additional_potential
699 IF (
PRESENT(method_name_id))
THEN
700 force_env%method_name_id = method_name_id
716 INTEGER,
DIMENSION(:),
POINTER :: i_force_eval
717 INTEGER :: nforce_eval
719 INTEGER :: iforce_eval, main_force_eval
720 INTEGER,
DIMENSION(:),
POINTER :: my_i_force_eval
726 i_vals=my_i_force_eval)
727 ALLOCATE (i_force_eval(nforce_eval))
728 IF (nforce_eval > 0)
THEN
729 IF (nforce_eval ==
SIZE(my_i_force_eval))
THEN
730 i_force_eval = my_i_force_eval
733 cpassert(nforce_eval -
SIZE(my_i_force_eval) == 1)
734 DO iforce_eval = 1, nforce_eval
735 IF (any(my_i_force_eval == iforce_eval)) cycle
736 main_force_eval = iforce_eval
739 i_force_eval(1) = main_force_eval
740 i_force_eval(2:nforce_eval) = my_i_force_eval
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 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.
The environment for the empirical interatomic potential methods.
subroutine, public eip_env_release(eip_env)
Releases the given eip environment (see doc/ReferenceCounting.html).
subroutine, public eip_env_get(eip_env, eip_model, eip_energy, eip_energy_var, eip_forces, coord_avg, coord_var, count, subsys, atomic_kind_set, particle_set, local_particles, molecule_kind_set, molecule_set, local_molecules, eip_input, force_env_input, cell, cell_ref, use_ref_cell, eip_kinetic_energy, eip_potential_energy, virial)
Returns various attributes of the eip environment.
subroutine, public get_embed_env(embed_env, atomic_kind_set, particle_set, local_particles, local_molecules, molecule_kind_set, molecule_set, cell, cell_ref, para_env, sub_para_env, subsys, input, results, pot_energy)
Get the embed environment.
subroutine, public embed_env_release(embed_env)
...
subroutine, public fist_env_release(fist_env)
releases the given fist_env (see doc/ReferenceCounting.html)
subroutine, public fist_env_get(fist_env, atomic_kind_set, particle_set, ewald_pw, local_particles, local_molecules, molecule_kind_set, molecule_set, cell, cell_ref, ewald_env, fist_nonbond_env, thermo, para_env, subsys, qmmm, qmmm_env, input, shell_model, shell_model_ad, shell_particle_set, core_particle_set, multipoles, results, exclusions, efield)
Purpose: Get the FIST environment.
Interface for the force calculations.
integer function, public force_env_get_natom(force_env)
returns the number of atoms
subroutine, public force_env_get_vel(force_env, vel, n)
returns the particle velocities in a dimension(*) array
integer, parameter, public use_qmmm
subroutine, public multiple_fe_list(force_env_sections, root_section, i_force_eval, nforce_eval)
returns the order of the multiple force_env
integer, parameter, public use_mixed_force
character(len=10), dimension(501:510), parameter, public use_prog_name
integer, parameter, public use_eip_force
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, parameter, public use_embed
integer, parameter, public use_qmmmx
subroutine, public force_env_retain(force_env)
retains the given force env
subroutine, public force_env_get_pos(force_env, pos, n)
returns the particle positions in a dimension(*) array
subroutine, public force_env_set(force_env, meta_env, fp_env, force_env_section, method_name_id, additional_potential)
changes some attributes of the force_env
integer, parameter, public use_qs_force
subroutine, public force_env_get_frc(force_env, frc, n)
returns the particle forces in a dimension(*) array
integer, parameter, public use_pwdft_force
integer, parameter, public use_nnp_force
recursive subroutine, public force_env_release(force_env)
releases the given force env
integer, parameter, public use_ipi
integer, parameter, public use_fist_force
integer function, public force_env_get_nparticle(force_env)
returns the number of particles in a force environment
types used in the flexible partitioning scheme
subroutine, public fp_env_release(fp_env)
...
Define type storing the global information of a run. Keep the amount of stored data small....
subroutine, public globenv_release(globenv)
Releases the global environment globenv.
The environment for the empirical interatomic potential methods.
subroutine, public ipi_env_get(ipi_env, ipi_energy, ipi_forces, subsys, atomic_kind_set, particle_set, local_particles, molecule_kind_set, molecule_set, local_molecules, force_env_input, cell, cell_ref, virial, sockfd)
Returns various attributes of the ipi environment.
subroutine, public ipi_env_release(ipi_env)
Releases the given ipi environment (see doc/ReferenceCounting.html).
i–PI server mode: Communication with i–PI clients
subroutine, public shutdown_server(ipi_env)
Shut down the i–PI server.
Defines the basic variable types.
integer, parameter, public dp
Interface to the message passing library MPI.
subroutine, public mp_para_env_release(para_env)
releases the para object (to be called when you don't want anymore the shared copy of this object)
subroutine, public mixed_env_release(mixed_env)
releases the given mixed_env (see doc/ReferenceCounting.html)
subroutine, public get_mixed_env(mixed_env, atomic_kind_set, particle_set, local_particles, local_molecules, molecule_kind_set, molecule_set, cell, cell_ref, mixed_energy, para_env, sub_para_env, subsys, input, results, cdft_control)
Get the MIXED environment.
Data types for neural network potentials.
subroutine, public nnp_env_get(nnp_env, nnp_forces, subsys, atomic_kind_set, particle_set, local_particles, molecule_kind_set, molecule_set, local_molecules, nnp_input, force_env_input, cell, cell_ref, use_ref_cell, nnp_potential_energy, virial)
Returns various attributes of the nnp environment.
subroutine, public nnp_env_release(nnp_env)
Release data structure that holds all the information for neural network potentials.
The type definitions for the PWDFT environment.
subroutine, public pwdft_env_get(pwdft_env, pwdft_input, force_env_input, xc_input, cp_subsys, qs_subsys, para_env, energy, forces, stress, sctx, gs_handler, ks_handler)
Returns various attributes of the pwdft environment.
subroutine, public pwdft_env_release(pwdft_env)
Releases the given pwdft environment.
Basic container type for QM/MM.
subroutine, public qmmm_env_release(qmmm_env)
releases the given qmmm_env (see doc/ReferenceCounting.html)
subroutine, public qmmm_env_get(qmmm_env, subsys, potential_energy, kinetic_energy)
...
Basic container type for QM/MM with force mixing.
subroutine, public qmmmx_env_release(qmmmx_env)
releases the given qmmmx_env (see doc/ReferenceCounting.html)
subroutine, public qmmmx_env_get(qmmmx_env, subsys, potential_energy, kinetic_energy)
...
Perform a QUICKSTEP wavefunction optimization (single point).
subroutine, public get_qs_env(qs_env, atomic_kind_set, qs_kind_set, cell, super_cell, cell_ref, use_ref_cell, kpoints, dft_control, mos, sab_orb, sab_all, qmmm, qmmm_periodic, mimic, sac_ae, sac_ppl, sac_lri, sap_ppnl, sab_vdw, sab_scp, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, matrix_vhxc, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, xcint_weights, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, rhoz_cneo_set, ecoul_1c, rho0_s_rs, rho0_s_gs, rhoz_cneo_s_rs, rhoz_cneo_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, harris_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, wanniercentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs, do_rixs, tb_tblite)
Get the QUICKSTEP environment.
subroutine, public qs_env_release(qs_env)
releases the given qs_env (see doc/ReferenceCounting.html)
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,...
The empirical interatomic potential environment.
Embedding environment type.
allows for the creation of an array of force_env
wrapper to abstract the force evaluation of the various methods
contains the initially parsed file and the initial parallel environment
stores all the informations relevant to an mpi environment
Main data type collecting all relevant data for neural network potentials.
The PWDFT environment type.