54#include "./base/base_uses.f90"
63 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'molecular_moments'
80 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(IN) :: mo_local
84 INTEGER :: akind, first_atom, i, iatom, ikind, imol, imol_now, iounit, iproc, ispin, j, lx, &
85 ly, lz, molkind, n, n1, n2, natom, ncol_global, nm, nmol, nmols, norder, nrow_global, ns, &
87 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: states
88 INTEGER,
DIMENSION(2) :: nstates
89 LOGICAL :: floating, ghost
90 REAL(kind=
dp) :: zeff, zmom, zwfc
91 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: charge_set
92 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: moment_set
93 REAL(kind=
dp),
DIMENSION(3) :: rcc, ria
94 REAL(kind=
dp),
DIMENSION(:),
POINTER :: ref_point
100 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_s, moments
106 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
110 CALL get_qs_env(qs_env, dft_control=dft_control)
111 nspins = dft_control%nspins
112 zwfc = 3.0_dp - real(nspins, kind=
dp)
115 cpassert(norder >= 0)
118 CALL get_qs_env(qs_env, qs_kind_set=qs_kind_set, cell=cell)
119 particle_set => qs_loc_env%particle_set
120 para_env => qs_loc_env%para_env
121 local_molecules => qs_loc_env%local_molecules
122 molkind =
SIZE(local_molecules%n_el)
123 nmols =
SIZE(molecule_set)
124 ALLOCATE (charge_set(nmols), moment_set(nm, nmols))
130 DO imol = 1,
SIZE(molecule_set)
131 molecule_kind => molecule_set(imol)%molecule_kind
132 first_atom = molecule_set(imol)%first_atom
136 ref_point=ref_point, ifirst=first_atom, &
137 ilast=first_atom + natom - 1)
138 ALLOCATE (moments(nm))
140 ALLOCATE (moments(i)%matrix)
141 CALL dbcsr_copy(moments(i)%matrix, matrix_s(1)%matrix,
'MOM MAT')
142 CALL dbcsr_set(moments(i)%matrix, 0.0_dp)
148 IF (
ASSOCIATED(molecule_set(imol)%lmi))
THEN
149 nstates(1) = molecule_set(imol)%lmi(ispin)%nstates
153 nstates(2) = para_env%mepos
154 CALL para_env%maxloc(nstates)
155 IF (nstates(1) == 0) cycle
158 ALLOCATE (states(ns))
159 IF (iproc == para_env%mepos)
THEN
160 states(:) = molecule_set(imol)%lmi(ispin)%states(:)
164 CALL para_env%bcast(states, iproc)
166 associate(mo_localized => mo_local(ispin))
167 CALL cp_fm_get_info(mo_localized, ncol_global=ncol_global, nrow_global=nrow_global)
169 para_env=mo_localized%matrix_struct%para_env, &
170 context=mo_localized%matrix_struct%context)
177 CALL cp_fm_to_fm(mo_localized, mvector, 1, states(i), i)
183 moment_set(i, imol) = moment_set(i, imol) - zwfc*sum(momv%local_data)
198 DO ikind = 1, molkind
199 nmol =
SIZE(local_molecules%list(ikind)%array)
201 imol_now = local_molecules%list(ikind)%array(imol)
202 molecule_kind => molecule_set(imol_now)%molecule_kind
203 first_atom = molecule_set(imol_now)%first_atom
207 ref_point=ref_point, ifirst=first_atom, &
208 ilast=first_atom + natom - 1)
211 i = first_atom + iatom - 1
212 atomic_kind => particle_set(i)%atomic_kind
214 CALL get_qs_kind(qs_kind_set(akind), ghost=ghost, floating=floating)
215 IF (.NOT. ghost .AND. .NOT. floating)
THEN
216 CALL get_qs_kind(qs_kind_set(akind), core_charge=zeff)
217 charge_set(imol_now) = charge_set(imol_now) + zeff
221 IF (
ASSOCIATED(molecule_set(imol_now)%lmi(ispin)%states))
THEN
222 ns =
SIZE(molecule_set(imol_now)%lmi(ispin)%states)
223 charge_set(imol_now) = charge_set(imol_now) - zwfc*ns
234 j = first_atom + iatom - 1
235 atomic_kind => particle_set(j)%atomic_kind
237 CALL get_qs_kind(qs_kind_set(akind), ghost=ghost, floating=floating)
238 IF (.NOT. ghost .AND. .NOT. floating)
THEN
239 CALL get_qs_kind(qs_kind_set(akind), core_charge=zeff)
240 ria = particle_set(j)%r - rcc
243 IF (lx /= 0) zmom = zmom*ria(1)**lx
244 IF (ly /= 0) zmom = zmom*ria(2)**ly
245 IF (lz /= 0) zmom = zmom*ria(3)**lz
246 moment_set(i, imol_now) = moment_set(i, imol_now) + zmom
253 CALL para_env%sum(moment_set)
254 CALL para_env%sum(charge_set)
257 extension=
".MolMom", middle_name=
"MOLECULAR_MOMENTS")
259 DO i = 1,
SIZE(charge_set)
260 WRITE (unit=iounit, fmt=
'(A,I6,A,F12.6)')
" # molecule nr:", i,
" Charge:", charge_set(i)
264 WRITE (unit=iounit, fmt=
'(T4,A,I2,10(T16,6F12.6))')
"Order:", n, moment_set(n1:n2, i)
271 DEALLOCATE (charge_set, moment_set)
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.
Handles all functions related to the CELL.
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dbcsr_deallocate_matrix(matrix)
...
subroutine, public dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
...
subroutine, public dbcsr_set(matrix, alpha)
...
DBCSR operations in CP2K.
subroutine, public cp_dbcsr_sm_fm_multiply(matrix, fm_in, fm_out, ncol, alpha, beta)
multiply a dbcsr with a fm matrix
basic linear algebra operations for full matrices
subroutine, public cp_fm_schur_product(matrix_a, matrix_b, matrix_c)
computes the schur product of two matrices c_ij = a_ij * b_ij
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_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
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 ...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer function, public cp_print_key_unit_nr(logger, basis_section, print_key_path, extension, middle_name, local, log_filename, ignore_should_output, file_form, file_position, file_action, file_status, do_backup, on_file, is_new_file, mpi_io, fout)
...
subroutine, public cp_print_key_finished_output(unit_nr, logger, basis_section, print_key_path, local, ignore_should_output, on_file, mpi_io)
should be called after you finish working with a unit obtained with cp_print_key_unit_nr,...
stores a lists of integer that are local to a processor. The idea is that these integers represent ob...
Defines the basic variable types.
integer, parameter, public dp
Interface to the message passing library MPI.
Set of routines handling the localization for molecular properties.
subroutine, public calculate_molecular_moments(qs_env, qs_loc_env, mo_local, loc_print_key, molecule_set)
Calculates electrical molecular moments using local operators r-r_ref r_ref: center of mass of the mo...
Define the molecule kind structure types and the corresponding functionality.
subroutine, public get_molecule_kind(molecule_kind, atom_list, bond_list, bend_list, ub_list, impr_list, opbend_list, colv_list, fixd_list, g3x3_list, g4x6_list, vsite_list, torsion_list, shell_list, name, mass, charge, kind_number, natom, nbend, nbond, nub, nimpr, nopbend, nconstraint, nconstraint_fixd, nfixd, ncolv, ng3x3, ng4x6, nvsite, nfixd_restraint, ng3x3_restraint, ng4x6_restraint, nvsite_restraint, nrestraints, nmolecule, nsgf, nshell, ntorsion, molecule_list, nelectron, nelectron_alpha, nelectron_beta, bond_kind_set, bend_kind_set, ub_kind_set, impr_kind_set, opbend_kind_set, torsion_kind_set, molname_generated)
Get informations about a molecule kind.
Define the data structure for the molecule information.
Calculates the moment integrals <a|r^m|b>
subroutine, public get_reference_point(rpoint, drpoint, qs_env, fist_env, reference, ref_point, ifirst, ilast)
...
Provides Cartesian and spherical orbital pointers and indices.
integer, dimension(:), allocatable, public ncoset
integer, dimension(:, :), allocatable, public indco
Define the data structure for the particle information.
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.
Define the quickstep kind type and their sub types.
subroutine, public get_qs_kind(qs_kind, basis_set, basis_type, ncgf, nsgf, all_potential, tnadd_potential, gth_potential, sgp_potential, upf_potential, se_parameter, dftb_parameter, xtb_parameter, dftb3_param, zatom, zeff, elec_conf, mao, lmax_dftb, alpha_core_charge, ccore_charge, core_charge, core_charge_radius, paw_proj_set, paw_atom, hard_radius, hard0_radius, max_rad_local, covalent_radius, vdw_radius, gpw_type_forced, harmonics, max_iso_not0, max_s_harm, grid_atom, ngrid_ang, ngrid_rad, lmax_rho0, dft_plus_u_atom, l_of_dft_plus_u, n_of_dft_plus_u, u_minus_j, u_of_dft_plus_u, j_of_dft_plus_u, alpha_of_dft_plus_u, beta_of_dft_plus_u, j0_of_dft_plus_u, occupation_of_dft_plus_u, dispersion, bs_occupation, magnetization, no_optimize, addel, laddel, naddel, orbitals, max_scf, eps_scf, smear, u_ramping, u_minus_j_target, eps_u_ramping, init_u_ramping_each_scf, reltmat, ghost, floating, name, element_symbol, pao_basis_size, pao_model_file, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
New version of the module for the localization of the molecular orbitals This should be able to use d...
Calculates the moment integrals <a|r^m|b> and <a|r x d/dr|b>
subroutine, public build_local_moment_matrix(qs_env, moments, nmoments, ref_point, ref_points, basis_type)
...
Provides all information about an atomic kind.
Type defining parameters related to the simulation cell.
keeps the information about the structure of a full matrix
type of a logger, at the moment it contains just a print level starting at which level it should be l...
structure to store local (to a processor) ordered lists of integers.
stores all the informations relevant to an mpi environment
Provides all information about a quickstep kind.
contains all the info needed by quickstep to calculate the spread of a selected set of orbitals and i...