28 USE dbcsr_api,
ONLY: dbcsr_get_info,&
57 #include "./base/base_uses.f90"
68 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'optbas_fenv_manipulation'
81 TYPE(basis_optimization_type) :: basis_optimization
83 TYPE(section_vals_type),
POINTER :: input_file
85 CHARACTER(LEN=default_string_length) ::
atom
86 CHARACTER(LEN=default_string_length), &
87 DIMENSION(:),
POINTER :: abasinfo, obasinfo
88 INTEGER :: ibasis, ikind, jkind, nbasis, nkind
89 TYPE(section_vals_type),
POINTER :: dft_section, feval_section, &
90 kind_section, subsys_section
107 c_val=basis_optimization%work_basis_file)
113 c_val=
atom, i_rep_section=ikind)
117 CALL cp_abort(__location__, &
118 "Basis set optimization: Only one single BASIS_SET allowed per KIND in the reference input")
121 c_vals=obasinfo, i_rep_val=1, i_rep_section=ikind)
122 ALLOCATE (abasinfo(2))
123 abasinfo(1) =
"AUX_OPT"
124 IF (
SIZE(obasinfo) == 1)
THEN
125 abasinfo(2) = obasinfo(1)
127 abasinfo(2) = obasinfo(2)
130 c_vals_ptr=abasinfo, i_rep_val=2, i_rep_section=ikind)
132 cpassert(nbasis == 2)
134 DO jkind = 1, basis_optimization%nkind
135 IF (
atom == basis_optimization%kind_basis(jkind)%element)
THEN
139 c_vals=abasinfo, i_rep_val=2, i_rep_section=ikind)
140 ibasis = basis_optimization%combination(bas_id, jkind)
141 cpassert(
SIZE(abasinfo) == 2)
142 cpassert(abasinfo(1) ==
"AUX_OPT")
143 abasinfo(2) = trim(adjustl(basis_optimization%kind_basis(jkind)%flex_basis(ibasis)%basis_name))
156 TYPE(qs_environment_type),
POINTER :: qs_env
159 INTEGER,
DIMENSION(2) :: nelectron_spin
160 LOGICAL :: natom_mismatch
161 TYPE(atomic_kind_type),
DIMENSION(:),
POINTER :: atomic_kind_set
162 TYPE(cp_fm_pool_p_type),
DIMENSION(:),
POINTER :: ao_mo_fm_pools
163 TYPE(dft_control_type),
POINTER :: dft_control
164 TYPE(mo_set_type),
DIMENSION(:),
POINTER :: mos
165 TYPE(mp_para_env_type),
POINTER :: para_env
166 TYPE(particle_type),
DIMENSION(:),
POINTER :: particle_set
167 TYPE(qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
168 TYPE(section_vals_type),
POINTER :: dft_section
172 dft_control=dft_control, &
173 mos=mos, nelectron_spin=nelectron_spin, &
174 atomic_kind_set=atomic_kind_set, &
175 qs_kind_set=qs_kind_set, &
176 particle_set=particle_set, &
180 CALL mpools_get(qs_env%mpools, ao_mo_fm_pools=ao_mo_fm_pools)
181 DO ispin = 1, dft_control%nspins
182 IF (.NOT.
ASSOCIATED(mos(ispin)%mo_coeff))
THEN
184 fm_pool=ao_mo_fm_pools(ispin)%pool, &
185 name=
"qs_env%mo"//trim(adjustl(cp_to_string(ispin))))
190 id_nr=0, multiplicity=dft_control%multiplicity, dft_section=dft_section, &
191 natom_mismatch=natom_mismatch)
200 TYPE(qs_environment_type),
POINTER :: qs_env
203 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: rho_ao
204 TYPE(dft_control_type),
POINTER :: dft_control
205 TYPE(qs_rho_type),
POINTER :: rho
207 NULLIFY (rho, dft_control, rho_ao)
210 CALL get_qs_env(qs_env, rho=rho, dft_control=dft_control)
212 DO ispin = 1, dft_control%nspins
213 CALL calculate_density_matrix(qs_env%mos(ispin), rho_ao(ispin)%matrix)
217 qs_env%requires_mo_derivs = .false.
230 TYPE(dbcsr_type),
POINTER :: matrix_s
231 TYPE(cp_fm_type),
INTENT(OUT) :: matrix_s_inv
232 TYPE(mp_para_env_type),
POINTER :: para_env
233 TYPE(cp_blacs_env_type),
POINTER :: context
236 TYPE(cp_fm_struct_type),
POINTER :: fm_struct_tmp
237 TYPE(cp_fm_type) :: work1
239 CALL dbcsr_get_info(matrix_s, nfullrows_total=nao)
241 para_env=para_env, context=context)
243 CALL cp_fm_create(matrix_s_inv, matrix_struct=fm_struct_tmp)
251 CALL cp_fm_release(work1)
263 TYPE(basis_optimization_type) :: opt_bas
265 CHARACTER(*) :: basis_type
266 TYPE(qs_environment_type),
POINTER :: qs_env
268 CHARACTER(default_string_length) :: elem
269 INTEGER :: ibasis, ikind, jkind
270 TYPE(atomic_kind_type),
DIMENSION(:),
POINTER :: atomic_kind_set
271 TYPE(dft_control_type),
POINTER :: dft_control
272 TYPE(gto_basis_set_type),
POINTER :: gto_basis
273 TYPE(qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
275 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control, &
276 atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set)
277 DO ikind = 1,
SIZE(qs_kind_set)
278 DO jkind = 1, opt_bas%nkind
281 IF (elem == opt_bas%kind_basis(jkind)%element)
THEN
282 ibasis = opt_bas%combination(bas_id, jkind)
284 basis_type=basis_type)
285 CALL transfer_data_to_gto(gto_basis, opt_bas%kind_basis(jkind)%flex_basis(ibasis))
300 SUBROUTINE transfer_data_to_gto(gto_basis, basis)
301 TYPE(gto_basis_set_type),
POINTER :: gto_basis
302 TYPE(flex_basis_type) :: basis
304 INTEGER :: ipgf, iset, ishell
306 DO iset = 1, basis%nsets
307 DO ishell = 1, basis%subset(iset)%ncon_tot
308 DO ipgf = 1, basis%subset(iset)%nexp
309 gto_basis%gcc(ipgf, ishell, iset) = basis%subset(iset)%coeff(ipgf, ishell)
312 DO ipgf = 1, basis%subset(iset)%nexp
313 gto_basis%zet(ipgf, iset) = basis%subset(iset)%exps(ipgf)
317 END SUBROUTINE transfer_data_to_gto
void update_basis_set(const int nkinds, const grid_basis_set **const basis_sets, grid_context *data)
Define the atomic kind types and their sub types.
subroutine, public get_atomic_kind(atomic_kind, fist_potential, element_symbol, name, mass, kind_number, natom, atom_list, rcov, rvdw, z, qeff, apol, cpol, mm_radius, shell, shell_active, damping)
Get attributes of an atomic kind.
subroutine, public get_basis_from_container(container, basis_set, inumbas, basis_type)
Retrieve a basis set from the container.
subroutine, public init_orb_basis_set(gto_basis_set)
Initialise a Gaussian-type orbital (GTO) basis set data set.
methods related to the blacs parallel environment
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
DBCSR operations in CP2K.
subroutine, public copy_dbcsr_to_fm(matrix, fm)
Copy a DBCSR matrix to a BLACS matrix.
basic linear algebra operations for full matrices
subroutine, public cp_fm_upper_to_full(matrix, work)
given an upper triangular matrix computes the corresponding full matrix
various cholesky decomposition related routines
subroutine, public cp_fm_cholesky_invert(matrix, n, info_out)
used to replace the cholesky decomposition by the inverse
subroutine, public cp_fm_cholesky_decompose(matrix, n, info_out)
used to replace a symmetric positive def. matrix M with its cholesky decomposition U: M = U^T * U,...
pool for for elements that are retained and released
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
subroutine, public cp_fm_create(matrix, matrix_struct, name, use_sp)
creates a new full matrix with the given structure
various routines to log and control the output. The idea is that decisions about where to log should ...
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer, parameter, public debug_print_level
Defines the basic variable types.
integer, parameter, public default_string_length
Interface to the message passing library MPI.
subroutine, public modify_input_settings(basis_optimization, bas_id, input_file)
change settings in the training input files to initialize all needed structures and adjust settings t...
subroutine, public calculate_ks_matrix(qs_env)
...
subroutine, public calculate_overlap_inverse(matrix_s, matrix_s_inv, para_env, context)
...
subroutine, public allocate_mo_sets(qs_env)
...
Define the data structure for the particle information.
collects routines that calculate density matrices
Utility subroutine for qs energy calculation.
subroutine, public qs_energies_init(qs_env, calc_forces)
Refactoring of qs_energies_scf. Driver routine for the initial setup and calculations for a qs energy...
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_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, 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, rhs)
Get the QUICKSTEP environment.
Calculate the interaction radii for the operator matrix calculation.
subroutine, public init_interaction_radii(qs_control, qs_kind_set)
Initialize all the atomic kind radii for a given threshold value.
Define the quickstep kind type and their sub types.
routines that build the Kohn-Sham matrix (i.e calculate the coulomb and xc parts
subroutine, public qs_ks_update_qs_env(qs_env, calculate_forces, just_energy, print_active)
updates the Kohn Sham matrix of the given qs_env (facility method)
subroutine, public qs_ks_did_change(ks_env, s_mstruct_changed, rho_changed, potential_changed, full_reset)
tells that some of the things relevant to the ks calculation did change. has to be called when change...
wrapper for the pools of matrixes
subroutine, public mpools_get(mpools, ao_mo_fm_pools, ao_ao_fm_pools, mo_mo_fm_pools, ao_mosub_fm_pools, mosub_mosub_fm_pools, maxao_maxmo_fm_pool, maxao_maxao_fm_pool, maxmo_maxmo_fm_pool)
returns various attributes of the mpools (notably the pools contained in it)
Definition and initialisation of the mo data type.
subroutine, public read_mo_set_from_restart(mo_array, atomic_kind_set, qs_kind_set, particle_set, para_env, id_nr, multiplicity, dft_section, natom_mismatch, cdft, out_unit)
...
Definition and initialisation of the mo data type.
subroutine, public init_mo_set(mo_set, fm_pool, fm_ref, fm_struct, name)
initializes an allocated mo_set. eigenvalues, mo_coeff, occupation_numbers are valid only after this ...
methods of the rho structure (defined in qs_rho_types)
subroutine, public qs_rho_update_rho(rho_struct, qs_env, rho_xc_external, local_rho_set, task_list_external, task_list_external_soft, pw_env_external, para_env_external)
updates rho_r and rho_g to the rhorho_ao. if use_kinetic_energy_density also computes tau_r and tau_g...
superstucture that hold various representations of the density and keeps track of which ones are vali...
subroutine, public qs_rho_get(rho_struct, rho_ao, rho_ao_im, rho_ao_kp, rho_ao_im_kp, rho_r, drho_r, rho_g, drho_g, tau_r, tau_g, rho_r_valid, drho_r_valid, rho_g_valid, drho_g_valid, tau_r_valid, tau_g_valid, tot_rho_r, tot_rho_g, rho_r_sccs, soft_valid, complex_rho_ao)
returns info about the density described by this object. If some representation is not available an e...
Utilities for string manipulations.
elemental subroutine, public uppercase(string)
Convert all lower case characters in a string to upper case.