117 SUBROUTINE make_field(dft_control, field, sim_step, sim_time)
119 REAL(
dp),
INTENT(OUT) :: field(3)
120 INTEGER,
INTENT(IN) :: sim_step
121 REAL(kind=
dp),
INTENT(IN) :: sim_time
123 INTEGER :: i, lower, nfield, upper
124 REAL(
dp) :: c, env, nu, pol(3), strength
128 c = 137.03599962875_dp
131 nfield =
SIZE(dft_control%efield_fields)
133 efield => dft_control%efield_fields(i)%efield
134 IF (.NOT. efield%envelop_id ==
custom_env .AND. efield%wavelength > epsilon(0.0_dp)) nu = c/(efield%wavelength)
135 strength = sqrt(efield%strength/(3.50944_dp*10.0_dp**16))
136 IF (dot_product(efield%polarisation, efield%polarisation) == 0)
THEN
137 pol(:) = 1.0_dp/3.0_dp
139 pol(:) = efield%polarisation(:)/(sqrt(dot_product(efield%polarisation, efield%polarisation)))
142 IF (sim_step .GE. efield%envelop_i_vars(1) .AND. &
143 (sim_step .LE. efield%envelop_i_vars(2) .OR. efield%envelop_i_vars(2) .LT. 0))
THEN
144 field = field + strength*cos(sim_time*nu*2.0_dp*
pi + &
145 efield%phase_offset*
pi)*pol(:)
147 ELSE IF (efield%envelop_id ==
ramp_env)
THEN
148 IF (sim_step .GE. efield%envelop_i_vars(1) .AND. sim_step .LE. efield%envelop_i_vars(2)) &
149 strength = strength*(sim_step - efield%envelop_i_vars(1))/(efield%envelop_i_vars(2) - efield%envelop_i_vars(1))
150 IF (sim_step .GE. efield%envelop_i_vars(3) .AND. sim_step .LE. efield%envelop_i_vars(4)) &
151 strength = strength*(efield%envelop_i_vars(4) - sim_step)/(efield%envelop_i_vars(4) - efield%envelop_i_vars(3))
152 IF (sim_step .GT. efield%envelop_i_vars(4) .AND. efield%envelop_i_vars(4) .GT. 0) strength = 0.0_dp
153 IF (sim_step .LE. efield%envelop_i_vars(1)) strength = 0.0_dp
154 field = field + strength*cos(sim_time*nu*2.0_dp*
pi + &
155 efield%phase_offset*
pi)*pol(:)
157 env = exp(-0.5_dp*((sim_time - efield%envelop_r_vars(1))/efield%envelop_r_vars(2))**2.0_dp)
158 field = field + strength*env*cos(sim_time*nu*2.0_dp*
pi + &
159 efield%phase_offset*
pi)*pol(:)
160 ELSE IF (efield%envelop_id ==
custom_env)
THEN
161 dt = efield%envelop_r_vars(1)
162 IF (sim_time .LT. (
SIZE(efield%envelop_r_vars) - 2)*dt)
THEN
164 lower = floor(sim_time/dt)
166 strength = (efield%envelop_r_vars(lower + 2)*(upper*dt - sim_time) + efield%envelop_r_vars(upper + 2)*(sim_time - lower*dt))/dt
170 field = field + strength*pol(:)
188 LOGICAL,
OPTIONAL :: calculate_forces
190 CHARACTER(len=*),
PARAMETER :: routinen =
'calculate_ecore_efield'
192 INTEGER :: atom_a, handle, iatom, ikind, natom, &
194 INTEGER,
DIMENSION(:),
POINTER ::
list
196 REAL(kind=
dp) :: efield_ener, zeff
197 REAL(kind=
dp),
DIMENSION(3) :: field, r
204 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
206 NULLIFY (dft_control)
207 CALL timeset(routinen, handle)
208 CALL get_qs_env(qs_env, dft_control=dft_control)
209 IF (dft_control%apply_efield_field .OR. dft_control%apply_vector_potential)
THEN
211 IF (
PRESENT(calculate_forces)) my_force = calculate_forces
214 atomic_kind_set=atomic_kind_set, &
215 qs_kind_set=qs_kind_set, &
217 particle_set=particle_set, &
220 nkind =
SIZE(atomic_kind_set)
221 CALL make_field(dft_control, field, qs_env%sim_step, qs_env%sim_time)
223 DO ikind = 1,
SIZE(atomic_kind_set)
229 IF (dft_control%apply_efield_field)
THEN
231 r(:) =
pbc(particle_set(atom_a)%r(:), cell)
232 efield_ener = efield_ener - zeff*dot_product(r, field)
236 force(ikind)%efield(:, iatom) = force(ikind)%efield(:, iatom) - field*zeff
241 IF (dft_control%apply_efield_field) energy%efield_core = efield_ener
243 CALL timestop(handle)
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.
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.