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%hills_env%energy
498 IF (
PRESENT(kinetic_energy))
THEN
499 kinetic_energy = kinetic_energy + force_env%meta_env%ekin_s
503 IF (
ASSOCIATED(force_env%fp_env) .AND.
PRESENT(potential_energy))
THEN
504 IF (force_env%fp_env%use_fp)
THEN
505 potential_energy = potential_energy + force_env%fp_env%energy
508 IF (
PRESENT(potential_energy))
THEN
509 potential_energy = potential_energy + force_env%additional_potential
511 IF (
PRESENT(additional_potential))
THEN
512 additional_potential = force_env%additional_potential
514 IF (
PRESENT(cell))
THEN
518 IF (
PRESENT(fp_env)) fp_env => force_env%fp_env
519 IF (
PRESENT(meta_env)) meta_env => force_env%meta_env
520 IF (
PRESENT(sub_force_env)) sub_force_env => force_env%sub_force_env
521 IF (
PRESENT(qmmm_env)) qmmm_env => force_env%qmmm_env
522 IF (
PRESENT(qmmmx_env)) qmmmx_env => force_env%qmmmx_env
523 IF (
PRESENT(mixed_env)) mixed_env => force_env%mixed_env
524 IF (
PRESENT(embed_env)) embed_env => force_env%embed_env
525 IF (
PRESENT(ipi_env)) ipi_env => force_env%ipi_env
526 IF (
PRESENT(globenv)) globenv => force_env%globenv
527 IF (
PRESENT(root_section)) root_section => force_env%root_section
562 INTEGER :: n_particle
584 REAL(kind=
dp),
DIMENSION(*),
INTENT(OUT) :: frc
585 INTEGER,
INTENT(IN) :: n
587 CHARACTER(LEN=*),
PARAMETER :: routinen =
'force_env_get_frc'
592 CALL timeset(routinen, handle)
593 cpassert(force_env%ref_count > 0)
596 CALL timestop(handle)
611 REAL(kind=
dp),
DIMENSION(*),
INTENT(OUT) :: pos
612 INTEGER,
INTENT(IN) :: n
614 CHARACTER(LEN=*),
PARAMETER :: routinen =
'force_env_get_pos'
619 CALL timeset(routinen, handle)
620 cpassert(force_env%ref_count > 0)
623 CALL timestop(handle)
638 REAL(kind=
dp),
DIMENSION(*),
INTENT(OUT) :: vel
639 INTEGER,
INTENT(IN) :: n
641 CHARACTER(LEN=*),
PARAMETER :: routinen =
'force_env_get_vel'
646 CALL timeset(routinen, handle)
647 cpassert(force_env%ref_count > 0)
650 CALL timestop(handle)
667 method_name_id, additional_potential)
671 TYPE(
fp_type),
OPTIONAL,
POINTER :: fp_env
673 INTEGER,
OPTIONAL :: method_name_id
674 REAL(kind=
dp),
INTENT(IN),
OPTIONAL :: additional_potential
676 cpassert(force_env%ref_count > 0)
677 IF (
PRESENT(meta_env))
THEN
678 IF (
ASSOCIATED(force_env%meta_env))
THEN
680 DEALLOCATE (force_env%meta_env)
682 force_env%meta_env => meta_env
684 IF (
PRESENT(fp_env))
THEN
685 IF (
ASSOCIATED(force_env%fp_env))
CALL fp_env_release(force_env%fp_env)
686 force_env%fp_env => fp_env
688 IF (
PRESENT(force_env_section))
THEN
689 IF (
ASSOCIATED(force_env_section))
THEN
692 force_env%force_env_section => force_env_section
695 IF (
PRESENT(additional_potential))
THEN
696 force_env%additional_potential = additional_potential
698 IF (
PRESENT(method_name_id))
THEN
699 force_env%method_name_id = method_name_id
715 INTEGER,
DIMENSION(:),
POINTER :: i_force_eval
716 INTEGER :: nforce_eval
718 INTEGER :: iforce_eval, main_force_eval
719 INTEGER,
DIMENSION(:),
POINTER :: my_i_force_eval
725 i_vals=my_i_force_eval)
726 ALLOCATE (i_force_eval(nforce_eval))
727 IF (nforce_eval > 0)
THEN
728 IF (nforce_eval ==
SIZE(my_i_force_eval))
THEN
729 i_force_eval = my_i_force_eval
732 cpassert(nforce_eval -
SIZE(my_i_force_eval) == 1)
733 DO iforce_eval = 1, nforce_eval
734 IF (any(my_i_force_eval == iforce_eval)) cycle
735 main_force_eval = iforce_eval
738 i_force_eval(1) = main_force_eval
739 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, 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.