(git:6344619)
Loading...
Searching...
No Matches
ec_methods.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2026 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8! **************************************************************************************************
9!> \brief Routines used for Harris functional
10!> Kohn-Sham calculation
11!> \par History
12!> 10.2020 created
13!> \author Fabian Belleflamme
14! **************************************************************************************************
18 USE cp_dbcsr_api, ONLY: dbcsr_init_p,&
20 dbcsr_type_no_symmetry
25 USE cp_fm_types, ONLY: cp_fm_get_info,&
28 USE kinds, ONLY: dp
37 USE qs_mo_types, ONLY: allocate_mo_set,&
41#include "./base/base_uses.f90"
42
43 IMPLICIT NONE
44
45 PRIVATE
46
47! *** Global parameters ***
48
49 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'ec_methods'
50
51 PUBLIC :: ec_mos_init
52
53CONTAINS
54
55! **************************************************************************************************
56!> \brief Allocate and initiate molecular orbitals environment
57!>
58!> \param qs_env ...
59!> \param matrix_s Used as template
60!> \param
61!>
62!> \par History
63!> 2020.10 created [Fabian Belleflamme]
64!> \author Fabian Belleflamme
65! **************************************************************************************************
66 SUBROUTINE ec_mos_init(qs_env, matrix_s)
67 TYPE(qs_environment_type), POINTER :: qs_env
68 TYPE(dbcsr_type) :: matrix_s
69
70 CHARACTER(len=*), PARAMETER :: routinen = 'ec_mos_init'
71
72 INTEGER :: handle, ispin, multiplicity, n_ao, &
73 nelectron, nmo, nspins
74 INTEGER, DIMENSION(2) :: n_mo, nelectron_spin
75 REAL(dp) :: maxocc
76 TYPE(cp_blacs_env_type), POINTER :: blacs_env
77 TYPE(cp_fm_struct_type), POINTER :: fm_struct
78 TYPE(cp_fm_type), POINTER :: mo_coeff
79 TYPE(dbcsr_type), POINTER :: mo_coeff_b
80 TYPE(dft_control_type), POINTER :: dft_control
81 TYPE(mo_set_type), DIMENSION(:), POINTER :: mos
82 TYPE(mp_para_env_type), POINTER :: para_env
83 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
84 TYPE(qs_matrix_pools_type), POINTER :: my_mpools
85
86 CALL timeset(routinen, handle)
87
88 NULLIFY (blacs_env, dft_control, mo_coeff, mo_coeff_b, mos, my_mpools, qs_kind_set)
89
90 CALL get_qs_env(qs_env=qs_env, &
91 dft_control=dft_control, &
92 blacs_env=blacs_env, &
93 qs_kind_set=qs_kind_set, &
94 nelectron_spin=nelectron_spin, &
95 para_env=para_env)
96 nspins = dft_control%nspins
97
98 ! Start setup
99 CALL get_qs_kind_set(qs_kind_set, nsgf=n_ao, nelectron=nelectron)
100
101 ! the total number of electrons
102 nelectron = nelectron - dft_control%charge
103 multiplicity = dft_control%multiplicity
104
105 ! setting maxocc and n_mo
106 IF (dft_control%nspins == 1) THEN
107 maxocc = 2.0_dp
108 nelectron_spin(1) = nelectron
109 nelectron_spin(2) = 0
110 IF (modulo(nelectron, 2) == 0) THEN
111 n_mo(1) = nelectron/2
112 ELSE
113 n_mo(1) = int(nelectron/2._dp) + 1
114 END IF
115 n_mo(2) = 0
116 ELSE
117 maxocc = 1.0_dp
118
119 ! The simplist spin distribution is written here. Special cases will
120 ! need additional user input
121 IF (modulo(nelectron + multiplicity - 1, 2) /= 0) THEN
122 cpabort("LSD: try to use a different multiplicity")
123 END IF
124
125 nelectron_spin(1) = (nelectron + multiplicity - 1)/2
126 nelectron_spin(2) = (nelectron - multiplicity + 1)/2
127
128 IF (nelectron_spin(2) < 0) THEN
129 cpabort("LSD: too few electrons for this multiplicity")
130 END IF
131
132 n_mo(1) = nelectron_spin(1)
133 n_mo(2) = nelectron_spin(2)
134
135 END IF
136
137 ! Allocate MO set
138 ALLOCATE (mos(nspins))
139 DO ispin = 1, nspins
140 CALL allocate_mo_set(mo_set=mos(ispin), &
141 nao=n_ao, &
142 nmo=n_mo(ispin), &
143 nelectron=nelectron_spin(ispin), &
144 n_el_f=real(nelectron_spin(ispin), dp), &
145 maxocc=maxocc, &
146 flexible_electron_count=dft_control%relax_multiplicity)
147 END DO
148
149 CALL set_qs_env(qs_env, mos=mos)
150
151 ! finish initialization of the MOs
152 NULLIFY (mo_coeff, mo_coeff_b)
153 DO ispin = 1, SIZE(mos)
154 CALL get_mo_set(mos(ispin), mo_coeff=mo_coeff, mo_coeff_b=mo_coeff_b, &
155 nmo=nmo, nao=n_ao)
156
157 IF (.NOT. ASSOCIATED(mo_coeff)) THEN
158 CALL cp_fm_struct_create(fm_struct, nrow_global=n_ao, &
159 ncol_global=nmo, para_env=para_env, &
160 context=blacs_env)
161
162 CALL init_mo_set(mos(ispin), &
163 fm_struct=fm_struct, &
164 name="qs_env%mo"//trim(adjustl(cp_to_string(ispin))))
165 CALL cp_fm_struct_release(fm_struct)
166 END IF
167
168 IF (.NOT. ASSOCIATED(mo_coeff_b)) THEN
169 CALL cp_fm_get_info(mos(ispin)%mo_coeff, ncol_global=nmo)
170 CALL dbcsr_init_p(mos(ispin)%mo_coeff_b)
171 CALL cp_dbcsr_m_by_n_from_row_template(mos(ispin)%mo_coeff_b, &
172 template=matrix_s, &
173 n=nmo, &
174 sym=dbcsr_type_no_symmetry)
175 END IF
176 END DO
177
178 CALL mpools_release(mpools=my_mpools)
179
180 CALL timestop(handle)
181
182 END SUBROUTINE ec_mos_init
183
184END MODULE ec_methods
static GRID_HOST_DEVICE int modulo(int a, int m)
Equivalent of Fortran's MODULO, which always return a positive number. https://gcc....
methods related to the blacs parallel environment
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dbcsr_init_p(matrix)
...
DBCSR operations in CP2K.
subroutine, public cp_dbcsr_m_by_n_from_row_template(matrix, template, n, sym)
Utility function to create dbcsr matrix, m x n matrix (n arbitrary) with the same processor grid and ...
represent the structure of a full matrix
subroutine, public cp_fm_struct_create(fmstruct, para_env, context, nrow_global, ncol_global, nrow_block, ncol_block, descriptor, first_p_pos, local_leading_dimension, template_fmstruct, square_blocks, force_block)
allocates and initializes a full matrix structure
subroutine, public cp_fm_struct_release(fmstruct)
releases a full matrix structure
represent a full matrix distributed on many processors
Definition cp_fm_types.F:15
subroutine, public cp_fm_get_info(matrix, name, nrow_global, ncol_global, nrow_block, ncol_block, nrow_local, ncol_local, row_indices, col_indices, local_data, context, nrow_locals, ncol_locals, matrix_struct, para_env)
returns all kind of information about the full matrix
various routines to log and control the output. The idea is that decisions about where to log should ...
Routines used for Harris functional Kohn-Sham calculation.
Definition ec_methods.F:15
subroutine, public ec_mos_init(qs_env, matrix_s)
Allocate and initiate molecular orbitals environment.
Definition ec_methods.F:67
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
Interface to the message passing library MPI.
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 set_qs_env(qs_env, super_cell, mos, qmmm, qmmm_periodic, mimic, ewald_env, ewald_pw, mpools, rho_external, external_vxc, mask, scf_control, rel_control, qs_charges, ks_env, ks_qmmm_env, wf_history, scf_env, active_space, input, oce, rho_atom_set, rho0_atom_set, rho0_mpole, run_rtp, rtp, rhoz_set, rhoz_tot, ecoul_1c, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, efield, rhoz_cneo_set, linres_control, xas_env, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, ls_scf_env, do_transport, transport_env, lri_env, lri_density, exstate_env, ec_env, dispersion_env, harris_env, gcp_env, mp2_env, bs_env, kg_env, force, kpoints, wanniercentres, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs, do_rixs, tb_tblite)
Set the QUICKSTEP environment.
Define the quickstep kind type and their sub types.
subroutine, public get_qs_kind_set(qs_kind_set, all_potential_present, tnadd_potential_present, gth_potential_present, sgp_potential_present, paw_atom_present, dft_plus_u_atom_present, maxcgf, maxsgf, maxco, maxco_proj, maxgtops, maxlgto, maxlprj, maxnset, maxsgf_set, ncgf, npgf, nset, nsgf, nshell, maxpol, maxlppl, maxlppnl, maxppnl, nelectron, maxder, max_ngrid_rad, max_sph_harm, maxg_iso_not0, lmax_rho0, basis_rcut, do_mtlr_present, basis_type, total_zeff_corr, npgf_seg, cneo_potential_present, nkind_q, natom_q)
Get attributes of an atomic kind set.
wrapper for the pools of matrixes
subroutine, public mpools_release(mpools)
releases the given mpools
Definition and initialisation of the mo data type.
Definition qs_mo_types.F:22
subroutine, public init_mo_set(mo_set, fm_pool, fm_ref, fm_struct, name, counter, complex_coeff)
initializes an allocated mo_set. eigenvalues, mo_coeff, occupation_numbers are valid only after this ...
subroutine, public allocate_mo_set(mo_set, nao, nmo, nelectron, n_el_f, maxocc, flexible_electron_count)
Allocates a mo set and partially initializes it (nao,nmo,nelectron, and flexible_electron_count are v...
subroutine, public get_mo_set(mo_set, maxocc, homo, lfomo, nao, nelectron, n_el_f, nmo, eigenvalues, occupation_numbers, mo_coeff, mo_coeff_b, uniform_occupation, kts, mu, flexible_electron_count, cmo_coeff)
Get the components of a MO set data structure.
represent a blacs multidimensional parallel environment (for the mpi corrispective see cp_paratypes/m...
keeps the information about the structure of a full matrix
represent a full matrix
stores all the informations relevant to an mpi environment
Provides all information about a quickstep kind.
container for the pools of matrixes used by qs