41#include "./base/base_uses.f90"
47 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_loc_dipole'
62 SUBROUTINE loc_dipole(input, dft_control, qs_loc_env, logger, qs_env)
69 CHARACTER(len=*),
PARAMETER :: routinen =
'loc_dipole'
71 CHARACTER(LEN=default_string_length) :: description, descriptionthisdip, iter
72 COMPLEX(KIND=dp) :: zeta
73 COMPLEX(KIND=dp),
DIMENSION(3) :: ggamma, zphase
74 INTEGER :: handle, i, ikind, ispins, j, n_rep, &
76 LOGICAL :: do_berry, first_time, floating, ghost
77 REAL(kind=
dp) :: charge_tot, theta, zeff, zwfc
78 REAL(kind=
dp),
DIMENSION(3) :: ci, dipole, dipole_old, gvec, rcc, ria
79 REAL(kind=
dp),
DIMENSION(:),
POINTER :: ref_point
86 CALL timeset(routinen, handle)
91 NULLIFY (cell, particle_set, qs_kind_set, ref_point, results)
94 particle_set=particle_set, &
95 qs_kind_set=qs_kind_set, &
101 description =
'[DIPOLE]'
102 descriptionthisdip =
'[TOTAL_DIPOLE]'
108 charge_tot = real(dft_control%charge, kind=
dp)
109 ria =
twopi*matmul(cell%h_inv, rcc)
110 zphase = cmplx(cos(ria), sin(ria), kind=
dp)**charge_tot
111 ggamma = cmplx(1.0_dp, 0.0_dp, kind=
dp)
114 DO i = 1,
SIZE(particle_set)
116 CALL get_qs_kind(qs_kind_set(ikind), ghost=ghost, floating=floating)
117 IF (.NOT. ghost .AND. .NOT. floating)
THEN
118 CALL get_qs_kind(qs_kind_set(ikind), core_charge=zeff)
119 ria =
pbc(particle_set(i)%r, cell)
121 gvec =
twopi*cell%h_inv(j, :)
122 theta = sum(ria(:)*gvec(:))
123 zeta = cmplx(cos(theta), sin(theta), kind=
dp)**(zeff)
124 ggamma(j) = ggamma(j)*zeta
131 zwfc = 3.0_dp - real(dft_control%nspins,
dp)
133 DO ispins = 1, dft_control%nspins
134 DO i = 1,
SIZE(qs_loc_env%localized_wfn_control%centers_set(ispins)%array, 2)
135 ria =
pbc(qs_loc_env%localized_wfn_control%centers_set(ispins)%array(1:3, i), cell)
137 gvec =
twopi*cell%h_inv(j, :)
138 theta = sum(ria(:)*gvec(:))
139 zeta = cmplx(cos(theta), sin(theta), kind=
dp)**(-zwfc)
140 ggamma(j) = ggamma(j)*zeta
144 ggamma = ggamma*zphase
145 ci = aimag(log(ggamma))/
twopi
146 dipole = matmul(cell%hmat, ci)
149 DO i = 1,
SIZE(particle_set)
151 CALL get_qs_kind(qs_kind_set(ikind), ghost=ghost, floating=floating)
152 IF (.NOT. ghost .AND. .NOT. floating)
THEN
153 CALL get_qs_kind(qs_kind_set(ikind), core_charge=zeff)
154 ria =
pbc(particle_set(i)%r, cell)
155 dipole = dipole + zeff*(ria - rcc)
161 zwfc = 3.0_dp - real(dft_control%nspins,
dp)
163 DO ispins = 1, dft_control%nspins
164 DO i = 1,
SIZE(qs_loc_env%localized_wfn_control%centers_set(ispins)%array, 2)
165 ria =
pbc(qs_loc_env%localized_wfn_control%centers_set(ispins)%array(1:3, i), cell)
166 dipole = dipole - zwfc*(ria - rcc)
173 middle_name=
"TOTAL_DIPOLE")
174 IF (unit_nr > 0)
THEN
176 WRITE (unit=unit_nr, fmt=
"(A,T31,A,T88,A,T136,A)") &
177 "# iter_level",
"dipole(x,y,z)[atomic units]", &
178 "dipole(x,y,z)[debye]", &
179 "delta_dipole(x,y,z)[atomic units]"
182 CALL get_results(results, descriptionthisdip, n_rep=n_rep)
186 CALL get_results(results, descriptionthisdip, dipole_old, nval=n_rep)
189 WRITE (unit=unit_nr, fmt=
"(a,9(es18.8))") &
190 iter(1:15), dipole, dipole*
debye,
pbc(dipole - dipole_old, cell)
192 WRITE (unit=unit_nr, fmt=
"(a,9(es18.8))") &
193 iter(1:15), dipole, dipole*
debye, (dipole - dipole_old)
200 CALL put_results(results, descriptionthisdip, dipole)
203 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.
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, 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.
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...