42#include "./base/base_uses.f90"
48 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_loc_dipole'
63 SUBROUTINE loc_dipole(input, dft_control, qs_loc_env, logger, qs_env)
70 CHARACTER(len=*),
PARAMETER :: routinen =
'loc_dipole'
72 CHARACTER(LEN=default_string_length) :: description, descriptionthisdip, iter
73 COMPLEX(KIND=dp) :: zeta
74 COMPLEX(KIND=dp),
DIMENSION(3) :: ggamma, zphase
75 INTEGER :: handle, i, ikind, ispins, j, n_rep, &
77 LOGICAL :: do_berry, first_time, floating, ghost
78 REAL(kind=
dp) :: charge_tot, theta, zeff, zwfc
79 REAL(kind=
dp),
DIMENSION(3) :: ci, dipole, dipole_old, gvec, rcc, ria
80 REAL(kind=
dp),
DIMENSION(:),
POINTER :: ref_point
87 CALL timeset(routinen, handle)
92 NULLIFY (cell, particle_set, qs_kind_set, ref_point, results)
95 particle_set=particle_set, &
96 qs_kind_set=qs_kind_set, &
102 description =
'[DIPOLE]'
103 descriptionthisdip =
'[TOTAL_DIPOLE]'
109 charge_tot = real(dft_control%charge, kind=
dp)
110 ria =
twopi*matmul(cell%h_inv, rcc)
111 zphase = cmplx(cos(ria), sin(ria), kind=
dp)**charge_tot
115 DO i = 1,
SIZE(particle_set)
117 CALL get_qs_kind(qs_kind_set(ikind), ghost=ghost, floating=floating)
118 IF (.NOT. ghost .AND. .NOT. floating)
THEN
119 CALL get_qs_kind(qs_kind_set(ikind), core_charge=zeff)
120 ria =
pbc(particle_set(i)%r, cell)
122 gvec =
twopi*cell%h_inv(j, :)
123 theta = sum(ria(:)*gvec(:))
124 zeta = cmplx(cos(theta), sin(theta), kind=
dp)**(zeff)
125 ggamma(j) = ggamma(j)*zeta
132 zwfc = 3.0_dp - real(dft_control%nspins,
dp)
134 DO ispins = 1, dft_control%nspins
135 DO i = 1,
SIZE(qs_loc_env%localized_wfn_control%centers_set(ispins)%array, 2)
136 ria =
pbc(qs_loc_env%localized_wfn_control%centers_set(ispins)%array(1:3, i), cell)
138 gvec =
twopi*cell%h_inv(j, :)
139 theta = sum(ria(:)*gvec(:))
140 zeta = cmplx(cos(theta), sin(theta), kind=
dp)**(-zwfc)
141 ggamma(j) = ggamma(j)*zeta
145 ggamma = ggamma*zphase
146 ci = aimag(log(ggamma))/
twopi
147 dipole = matmul(cell%hmat, ci)
150 DO i = 1,
SIZE(particle_set)
152 CALL get_qs_kind(qs_kind_set(ikind), ghost=ghost, floating=floating)
153 IF (.NOT. ghost .AND. .NOT. floating)
THEN
154 CALL get_qs_kind(qs_kind_set(ikind), core_charge=zeff)
155 ria =
pbc(particle_set(i)%r, cell)
156 dipole = dipole + zeff*(ria - rcc)
162 zwfc = 3.0_dp - real(dft_control%nspins,
dp)
164 DO ispins = 1, dft_control%nspins
165 DO i = 1,
SIZE(qs_loc_env%localized_wfn_control%centers_set(ispins)%array, 2)
166 ria =
pbc(qs_loc_env%localized_wfn_control%centers_set(ispins)%array(1:3, i), cell)
167 dipole = dipole - zwfc*(ria - rcc)
174 middle_name=
"TOTAL_DIPOLE")
175 IF (unit_nr > 0)
THEN
177 WRITE (unit=unit_nr, fmt=
"(A,T31,A,T88,A,T136,A)") &
178 "# iter_level",
"dipole(x,y,z)[atomic units]", &
179 "dipole(x,y,z)[debye]", &
180 "delta_dipole(x,y,z)[atomic units]"
183 CALL get_results(results, descriptionthisdip, n_rep=n_rep)
187 CALL get_results(results, descriptionthisdip, dipole_old, nval=n_rep)
190 WRITE (unit=unit_nr, fmt=
"(a,9(es18.8))") &
191 iter(1:15), dipole, dipole*
debye,
pbc(dipole - dipole_old, cell)
193 WRITE (unit=unit_nr, fmt=
"(a,9(es18.8))") &
194 iter(1:15), dipole, dipole*
debye, (dipole - dipole_old)
201 CALL put_results(results, descriptionthisdip, dipole)
204 CALL timestop(handle)
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...
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...
character(len=default_string_length) function, public cp_iter_string(iter_info, print_key, for_file)
returns the iteration string, a string that is useful to create unique filenames (once you trim it)
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,...
integer, parameter, public cp_p_file
integer function, public cp_print_key_should_output(iteration_info, basis_section, print_key_path, used_print_key, first_time)
returns what should be done with the given property if btest(res,cp_p_store) then the property should...
set of type/routines to handle the storage of results in force_envs
subroutine, public cp_results_erase(results, description, nval)
erase a part of result_list
set of type/routines to handle the storage of results in force_envs
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
Definition of mathematical constants and functions.
complex(kind=dp), parameter, public z_one
real(kind=dp), parameter, public twopi
Calculates the moment integrals <a|r^m|b>
subroutine, public get_reference_point(rpoint, drpoint, qs_env, fist_env, reference, ref_point, ifirst, ilast)
...
Define the data structure for the particle information.
Definition of physical constants:
real(kind=dp), parameter, public debye
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, 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.
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, cneo_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, monovalent, floating, name, element_symbol, pao_basis_size, pao_model_file, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
subroutine, public loc_dipole(input, dft_control, qs_loc_env, logger, qs_env)
Computes and prints the Dipole (using localized charges)
New version of the module for the localization of the molecular orbitals This should be able to use d...
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...
contains arbitrary information which need to be stored
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...