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
238 DEALLOCATE (force_env%sub_force_env)
241 SELECT CASE (force_env%in_use)
244 DEALLOCATE (force_env%fist_env)
247 DEALLOCATE (force_env%qs_env)
250 DEALLOCATE (force_env%eip_env)
253 DEALLOCATE (force_env%pwdft_env)
256 DEALLOCATE (force_env%mixed_env)
259 DEALLOCATE (force_env%nnp_env)
262 DEALLOCATE (force_env%embed_env)
266 DEALLOCATE (force_env%ipi_env)
271 cpassert(.NOT.
ASSOCIATED(force_env%fist_env))
272 cpassert(.NOT.
ASSOCIATED(force_env%qs_env))
273 cpassert(.NOT.
ASSOCIATED(force_env%eip_env))
274 cpassert(.NOT.
ASSOCIATED(force_env%pwdft_env))
275 cpassert(.NOT.
ASSOCIATED(force_env%mixed_env))
276 cpassert(.NOT.
ASSOCIATED(force_env%nnp_env))
277 cpassert(.NOT.
ASSOCIATED(force_env%embed_env))
278 cpassert(.NOT.
ASSOCIATED(force_env%ipi_env))
279 IF (
ASSOCIATED(force_env%meta_env))
THEN
281 DEALLOCATE (force_env%meta_env)
283 IF (
ASSOCIATED(force_env%fp_env))
THEN
285 DEALLOCATE (force_env%fp_env)
287 IF (
ASSOCIATED(force_env%qmmm_env))
THEN
289 DEALLOCATE (force_env%qmmm_env)
291 IF (
ASSOCIATED(force_env%qmmmx_env))
THEN
293 DEALLOCATE (force_env%qmmmx_env)
297 DEALLOCATE (force_env)
338 meta_env, fp_env, subsys, para_env, potential_energy, additional_potential, &
339 kinetic_energy, harmonic_shell, kinetic_shell, cell, sub_force_env, &
340 qmmm_env, qmmmx_env, eip_env, pwdft_env, globenv, input, force_env_section, &
341 method_name_id, root_section, mixed_env, nnp_env, embed_env, ipi_env)
343 INTEGER,
INTENT(out),
OPTIONAL :: in_use
347 TYPE(
fp_type),
OPTIONAL,
POINTER :: fp_env
350 REAL(kind=
dp),
INTENT(OUT),
OPTIONAL :: potential_energy, additional_potential, &
351 kinetic_energy, harmonic_shell, &
353 TYPE(
cell_type),
OPTIONAL,
POINTER :: cell
355 POINTER :: sub_force_env
362 INTEGER,
INTENT(out),
OPTIONAL :: method_name_id
365 TYPE(
nnp_type),
OPTIONAL,
POINTER :: nnp_env
369 REAL(kind=
dp) :: eip_kinetic_energy, eip_potential_energy
378 cpassert(force_env%ref_count > 0)
380 SELECT CASE (force_env%in_use)
382 cpassert(
ASSOCIATED(force_env%qs_env))
383 cpassert(.NOT.
PRESENT(fist_env))
384 cpassert(.NOT.
PRESENT(eip_env))
385 cpassert(.NOT.
PRESENT(pwdft_env))
386 cpassert(.NOT.
PRESENT(ipi_env))
391 IF (
PRESENT(potential_energy)) potential_energy =
qs_energy%total
392 cpassert(.NOT.
PRESENT(kinetic_energy))
394 cpassert(
ASSOCIATED(force_env%fist_env))
395 cpassert(.NOT.
PRESENT(input))
399 IF (
PRESENT(potential_energy)) potential_energy = thermo%pot
400 IF (
PRESENT(kinetic_energy)) kinetic_energy = thermo%kin
401 IF (
PRESENT(kinetic_shell)) kinetic_shell = thermo%kin_shell
402 IF (
PRESENT(harmonic_shell)) harmonic_shell = thermo%harm_shell
404 cpassert(
ASSOCIATED(force_env%eip_env))
405 cpassert(.NOT.
PRESENT(qs_env))
406 cpassert(.NOT.
PRESENT(fist_env))
407 cpassert(.NOT.
PRESENT(ipi_env))
409 eip_potential_energy=eip_potential_energy, &
410 eip_kinetic_energy=eip_kinetic_energy, &
412 IF (
PRESENT(potential_energy))
THEN
413 potential_energy = eip_potential_energy
415 IF (
PRESENT(kinetic_energy)) kinetic_energy = eip_kinetic_energy
416 cpassert(.NOT.
PRESENT(kinetic_energy))
418 cpassert(
ASSOCIATED(force_env%pwdft_env))
419 cpassert(.NOT.
PRESENT(qs_env))
420 cpassert(.NOT.
PRESENT(fist_env))
421 cpassert(.NOT.
PRESENT(ipi_env))
424 IF (
PRESENT(potential_energy)) potential_energy = pwdft_energy%etotal
425 cpassert(.NOT.
PRESENT(kinetic_energy))
429 potential_energy=potential_energy, &
430 kinetic_energy=kinetic_energy)
434 potential_energy=potential_energy, &
435 kinetic_energy=kinetic_energy)
437 cpassert(
ASSOCIATED(force_env%mixed_env))
438 cpassert(.NOT.
PRESENT(input))
440 mixed_energy=mixed_energy, &
442 IF (
PRESENT(potential_energy)) potential_energy = mixed_energy%pot
443 IF (
PRESENT(kinetic_energy)) kinetic_energy = mixed_energy%kin
446 cpassert(
ASSOCIATED(force_env%embed_env))
447 cpassert(.NOT.
PRESENT(input))
449 pot_energy=potential_energy, &
452 cpassert(
ASSOCIATED(force_env%nnp_env))
453 cpassert(.NOT.
PRESENT(ipi_env))
455 nnp_potential_energy=potential_energy, &
457 cpassert(.NOT.
PRESENT(kinetic_energy))
460 ipi_energy=potential_energy, &
463 cpabort(
"unknown in_use flag value ")
466 IF (
PRESENT(force_env_section)) force_env_section => force_env%force_env_section
467 IF (
PRESENT(in_use)) in_use = force_env%in_use
468 IF (
PRESENT(method_name_id)) method_name_id = force_env%method_name_id
469 IF (
PRESENT(fist_env))
THEN
470 fist_env => force_env%fist_env
472 IF (
PRESENT(qs_env))
THEN
473 qs_env => force_env%qs_env
475 IF (
PRESENT(eip_env))
THEN
476 eip_env => force_env%eip_env
478 IF (
PRESENT(pwdft_env))
THEN
479 pwdft_env => force_env%pwdft_env
481 IF (
PRESENT(nnp_env))
THEN
482 nnp_env => force_env%nnp_env
484 IF (
PRESENT(ipi_env))
THEN
485 ipi_env => force_env%ipi_env
487 IF (
PRESENT(para_env)) para_env => force_env%para_env
489 IF (
ASSOCIATED(force_env%meta_env))
THEN
490 IF (
PRESENT(potential_energy))
THEN
491 potential_energy = potential_energy + &
492 force_env%meta_env%epot_s + &
493 force_env%meta_env%epot_walls + &
494 force_env%meta_env%hills_env%energy
496 IF (
PRESENT(kinetic_energy))
THEN
497 kinetic_energy = kinetic_energy + force_env%meta_env%ekin_s
501 IF (
ASSOCIATED(force_env%fp_env) .AND.
PRESENT(potential_energy))
THEN
502 IF (force_env%fp_env%use_fp)
THEN
503 potential_energy = potential_energy + force_env%fp_env%energy
506 IF (
PRESENT(potential_energy))
THEN
507 potential_energy = potential_energy + force_env%additional_potential
509 IF (
PRESENT(additional_potential))
THEN
510 additional_potential = force_env%additional_potential
512 IF (
PRESENT(cell))
THEN
516 IF (
PRESENT(fp_env)) fp_env => force_env%fp_env
517 IF (
PRESENT(meta_env)) meta_env => force_env%meta_env
518 IF (
PRESENT(sub_force_env)) sub_force_env => force_env%sub_force_env
519 IF (
PRESENT(qmmm_env)) qmmm_env => force_env%qmmm_env
520 IF (
PRESENT(qmmmx_env)) qmmmx_env => force_env%qmmmx_env
521 IF (
PRESENT(mixed_env)) mixed_env => force_env%mixed_env
522 IF (
PRESENT(embed_env)) embed_env => force_env%embed_env
523 IF (
PRESENT(ipi_env)) ipi_env => force_env%ipi_env
524 IF (
PRESENT(globenv)) globenv => force_env%globenv
525 IF (
PRESENT(root_section)) root_section => force_env%root_section
560 INTEGER :: n_particle
582 REAL(kind=
dp),
DIMENSION(*),
INTENT(OUT) :: frc
583 INTEGER,
INTENT(IN) :: n
585 CHARACTER(LEN=*),
PARAMETER :: routinen =
'force_env_get_frc'
590 CALL timeset(routinen, handle)
591 cpassert(force_env%ref_count > 0)
594 CALL timestop(handle)
609 REAL(kind=
dp),
DIMENSION(*),
INTENT(OUT) :: pos
610 INTEGER,
INTENT(IN) :: n
612 CHARACTER(LEN=*),
PARAMETER :: routinen =
'force_env_get_pos'
617 CALL timeset(routinen, handle)
618 cpassert(force_env%ref_count > 0)
621 CALL timestop(handle)
636 REAL(kind=
dp),
DIMENSION(*),
INTENT(OUT) :: vel
637 INTEGER,
INTENT(IN) :: n
639 CHARACTER(LEN=*),
PARAMETER :: routinen =
'force_env_get_vel'
644 CALL timeset(routinen, handle)
645 cpassert(force_env%ref_count > 0)
648 CALL timestop(handle)
665 method_name_id, additional_potential)
669 TYPE(
fp_type),
OPTIONAL,
POINTER :: fp_env
671 INTEGER,
OPTIONAL :: method_name_id
672 REAL(kind=
dp),
INTENT(IN),
OPTIONAL :: additional_potential
674 cpassert(force_env%ref_count > 0)
675 IF (
PRESENT(meta_env))
THEN
676 IF (
ASSOCIATED(force_env%meta_env))
THEN
678 DEALLOCATE (force_env%meta_env)
680 force_env%meta_env => meta_env
682 IF (
PRESENT(fp_env))
THEN
683 IF (
ASSOCIATED(force_env%fp_env))
CALL fp_env_release(force_env%fp_env)
684 force_env%fp_env => fp_env
686 IF (
PRESENT(force_env_section))
THEN
687 IF (
ASSOCIATED(force_env_section))
THEN
690 force_env%force_env_section => force_env_section
693 IF (
PRESENT(additional_potential))
THEN
694 force_env%additional_potential = additional_potential
696 IF (
PRESENT(method_name_id))
THEN
697 force_env%method_name_id = method_name_id
713 INTEGER,
DIMENSION(:),
POINTER :: i_force_eval
714 INTEGER :: nforce_eval
716 INTEGER :: iforce_eval, main_force_eval
717 INTEGER,
DIMENSION(:),
POINTER :: my_i_force_eval
723 i_vals=my_i_force_eval)
724 ALLOCATE (i_force_eval(nforce_eval))
725 IF (nforce_eval > 0)
THEN
726 IF (nforce_eval ==
SIZE(my_i_force_eval))
THEN
727 i_force_eval = my_i_force_eval
730 cpassert(nforce_eval -
SIZE(my_i_force_eval) == 1)
731 DO iforce_eval = 1, nforce_eval
732 IF (any(my_i_force_eval == iforce_eval)) cycle
733 main_force_eval = iforce_eval
736 i_force_eval(1) = main_force_eval
737 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)
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 qs_env_release(qs_env)
releases the given qs_env (see doc/ReferenceCounting.html)
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, 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, 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, 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, ecoul_1c, rho0_s_rs, rho0_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)
Get the QUICKSTEP environment.
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.