102#include "./base/base_uses.f90"
107 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'xas_tp_scf'
133 SUBROUTINE xas_do_tp_scf(dft_control, xas_env, iatom, istate, scf_env, qs_env, &
134 xas_section, scf_section, converged, should_stop)
138 INTEGER,
INTENT(IN) :: iatom, istate
142 LOGICAL,
INTENT(OUT) :: converged, should_stop
144 CHARACTER(LEN=*),
PARAMETER :: routinen =
'xas_do_tp_scf'
146 INTEGER :: handle, handle2, hole_spin, ispin, &
147 iter_count, my_spin, nspin, occ_spin, &
149 LOGICAL :: diis_step, energy_only, exit_loop, gapw
150 REAL(kind=
dp) :: t1, t2
153 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_ks, matrix_s
154 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: rho_ao_kp
160 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
167 CALL timeset(routinen, handle)
168 NULLIFY (
xas_control, matrix_s, matrix_ks, para_env, rho_ao_kp)
169 NULLIFY (rho, energy, scf_control, logger, ks_env, mos, atomic_kind_set)
170 NULLIFY (qs_charges, particle_set, qs_kind_set)
176 cpassert(
ASSOCIATED(xas_env))
177 cpassert(
ASSOCIATED(scf_env))
178 cpassert(
ASSOCIATED(qs_env))
181 atomic_kind_set=atomic_kind_set, &
182 matrix_s=matrix_s, energy=energy, &
183 qs_charges=qs_charges, &
184 ks_env=ks_env, para_env=para_env)
186 CALL get_xas_env(xas_env, scf_control=scf_control, spin_channel=my_spin)
188 energy_only = .false.
191 IF (output_unit > 0)
THEN
192 WRITE (unit=output_unit, fmt=
"(/,/,T2,A)")
"XAS_TP_SCF WAVEFUNCTION OPTIMIZATION"
196 gapw = dft_control%qs_control%gapw
202 CALL get_qs_env(qs_env, matrix_ks=matrix_ks, rho=rho, mos=mos)
207 nspin = dft_control%nspins
209 IF (output_unit > 0)
THEN
210 WRITE (unit=output_unit, &
211 fmt=
"(/,T3,A,T12,A,T31,A,T40,A,T60,A,T75,A/,T3,A)") &
212 "Step",
"Update method",
"Time",
"Convergence",
"Total energy",
"Change", &
218 energy%tot_old = 0.0_dp
220 CALL timeset(routinen//
"_inner_loop", handle2)
223 IF (output_unit > 0)
CALL m_flush(output_unit)
225 iter_count = iter_count + 1
226 CALL cp_iterate(logger%iter_info, last=.false., iter_nr=iter_count)
232 SELECT CASE (scf_env%method)
234 CALL cp_abort(__location__, &
235 "unknown scf method method for core level spectroscopy"// &
240 scf_env%iter_count = iter_count
242 matrix_s, scf_control, scf_section, &
248 IF (my_spin == 1)
THEN
256 smear=scf_control%smear, &
259 smear=scf_control%smear)
263 scf_env%p_mix_new(ispin, 1)%matrix)
266 energy%efermi = 0.0_dp
268 energy%kTS = energy%kTS + mos(ispin)%kTS
269 energy%efermi = energy%efermi + mos(ispin)%mu
271 energy%efermi = energy%efermi/real(nspin, kind=
dp)
275 SELECT CASE (scf_env%mixing_method)
278 scf_env%mixing_store, rho_ao_kp, para_env, scf_env%iter_delta, scf_env%iter_count, &
284 delta=scf_env%iter_delta)
287 CALL cp_abort(__location__, &
288 "unknown scf mixing method: "// &
294 IF (output_unit > 0 .AND. scf_env%print_iter_line)
THEN
295 WRITE (unit=output_unit, &
296 fmt=
"(T2,I5,1X,A,T20,E8.2,1X,F6.1,1X,F14.8,1X,F20.10,1X,ES9.2)") &
297 iter_count, trim(scf_env%iter_method), &
298 scf_env%iter_param, t2 - t1, scf_env%iter_delta, energy%total, &
299 energy%total - energy%tot_old
301 energy%tot_old = energy%total
304 CALL external_control(should_stop,
"XASSCF", target_time=qs_env%target_time, &
305 start_time=qs_env%start_time)
306 IF (scf_env%iter_delta < scf_control%eps_scf)
THEN
307 IF (output_unit > 0)
THEN
308 WRITE (unit=output_unit, fmt=
"(/,T3,A,I5,A/)") &
309 "*** SCF run converged in ", iter_count,
" steps ***"
312 ELSE IF (should_stop .OR. iter_count == scf_control%max_scf)
THEN
313 IF (output_unit > 0)
THEN
314 WRITE (unit=output_unit, fmt=
"(/,T3,A,/)") &
315 "*** SCF run NOT converged ***"
325 CALL cp_iterate(logger%iter_info, last=.true., iter_nr=iter_count)
333 CALL get_qs_env(qs_env=qs_env, mos=mos, particle_set=particle_set, qs_kind_set=qs_kind_set)
337 CALL timestop(handle2)
345 IF (scf_env%mixing_method > 0)
THEN
348 CALL dbcsr_copy(rho_ao_kp(ispin, 1)%matrix, scf_env%p_mix_new(ispin, 1)%matrix)
355 CALL gspace_mixing(qs_env, scf_env%mixing_method, scf_env%mixing_store, rho, para_env, &
360 CALL timestop(handle2)
364 IF (output_unit > 0)
THEN
365 WRITE (unit=output_unit, fmt=
"(/,(T3,A,T55,F25.14))") &
366 "Ionization potential of the excited atom: ", xas_env%IP_energy
373 CALL cls_prepare_states(
xas_control, xas_env, qs_env, iatom, xas_section, output_unit)
378 "PRINT%PROGRAM_RUN_INFO")
381 CALL timestop(handle)
397 SUBROUTINE cls_prepare_states(xas_control, xas_env, qs_env, iatom, xas_section, output_unit)
402 INTEGER,
INTENT(IN) :: iatom
404 INTEGER,
INTENT(IN) :: output_unit
406 CHARACTER(LEN=*),
PARAMETER :: routinen =
'cls_prepare_states'
408 INTEGER :: handle, i, ikind, isgf, ispin, istate, j, my_kind, my_spin, my_state, nao, natom, &
409 nexc_search, nmo, nvirtual2, uno_iter, xas_estate
410 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: first_sgf
411 INTEGER,
DIMENSION(:),
POINTER :: mykind_of_kind
412 REAL(
dp),
DIMENSION(:, :),
POINTER :: centers_wfn
413 REAL(kind=
dp) :: component, dist, max_overlap, ra(3), &
414 rac(3), rc(3), sto_state_overlap, &
416 REAL(kind=
dp),
DIMENSION(:),
POINTER :: all_evals, eigenvalues, uno_evals
417 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: vecbuffer, vecbuffer2
422 TYPE(
cp_fm_type),
POINTER :: all_vectors, excvec_coeff, &
423 excvec_overlap, mo_coeff, uno_orbs
424 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: kinetic, matrix_ks, matrix_s
431 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
436 CALL timeset(routinen, handle)
438 NULLIFY (atomic_kind, dft_control, matrix_s, matrix_ks, qs_kind_set, kinetic)
439 NULLIFY (cell, particle_set, local_preconditioner, vecbuffer, vecbuffer2)
440 NULLIFY (dft_control, loc_section, mos, mo_coeff, eigenvalues)
441 NULLIFY (centers_wfn, mykind_of_kind, qs_loc_env, localized_wfn_control, stogto_overlap)
442 NULLIFY (all_evals, all_vectors, excvec_coeff, excvec_overlap, uno_evals, para_env, blacs_env)
444 cpassert(
ASSOCIATED(xas_env))
448 dft_control=dft_control, &
449 matrix_ks=matrix_ks, &
453 particle_set=particle_set, &
454 qs_kind_set=qs_kind_set, &
460 all_vectors=all_vectors, all_evals=all_evals, &
461 excvec_coeff=excvec_coeff, &
462 nvirtual2=nvirtual2, xas_estate=xas_estate, &
463 excvec_overlap=excvec_overlap, nexc_search=nexc_search, &
464 spin_channel=my_spin, scf_control=scf_control)
465 cpassert(
ASSOCIATED(excvec_overlap))
467 CALL get_mo_set(mos(my_spin), mo_coeff=mo_coeff, nao=nao, &
468 eigenvalues=eigenvalues)
470 ALLOCATE (vecbuffer(1, nao))
472 ALLOCATE (vecbuffer2(1, nao))
474 natom =
SIZE(particle_set, 1)
475 ALLOCATE (first_sgf(natom))
477 ALLOCATE (centers_wfn(3, nexc_search))
481 IF (scf_control%use_ot)
THEN
482 IF (output_unit > 0)
THEN
483 WRITE (unit=output_unit, fmt=
"(/,/,T2,A)")
" Eigenstates are derived "// &
484 "from the MOs optimized by OT. Follows localization of the core states"// &
485 " to identify the excited orbital."
489 mykind_of_kind=mykind_of_kind, qs_loc_env=qs_loc_env, &
490 stogto_overlap=stogto_overlap)
492 localized_wfn_control=localized_wfn_control)
495 CALL qs_loc_driver(qs_env, qs_loc_env, print_loc_section, myspin=1)
496 ra(1:3) = particle_set(iatom)%r(1:3)
498 NULLIFY (atomic_kind)
499 atomic_kind => particle_set(iatom)%atomic_kind
502 my_kind = mykind_of_kind(ikind)
506 nao, 1, transpose=.true.)
510 DO ispin = 1, dft_control%nspins
511 CALL get_mo_set(mos(ispin), mo_coeff=mo_coeff, nmo=nmo, &
512 eigenvalues=eigenvalues)
514 matrix_ks(ispin)%matrix, eigenvalues, &
520 DO istate = 1, nexc_search
521 centers_wfn(1, istate) = localized_wfn_control%centers_set(my_spin)%array(1, istate)
522 centers_wfn(2, istate) = localized_wfn_control%centers_set(my_spin)%array(2, istate)
523 centers_wfn(3, istate) = localized_wfn_control%centers_set(my_spin)%array(3, istate)
525 rc(1:3) = centers_wfn(1:3, istate)
526 rac =
pbc(ra, rc, cell)
527 dist = rac(1)*rac(1) + rac(2)*rac(2) + rac(3)*rac(3)
529 IF (dist < 1.0_dp)
THEN
531 nao, 1, transpose=.true.)
532 sto_state_overlap = 0.0_dp
533 DO i = 1,
SIZE(stogto_overlap(my_kind)%array, 1)
535 DO j = 1,
SIZE(stogto_overlap(my_kind)%array, 2)
536 isgf = first_sgf(iatom) + j - 1
537 component = component + stogto_overlap(my_kind)%array(i, j)*vecbuffer(1, isgf)
539 sto_state_overlap = sto_state_overlap + &
543 IF (sto_state_overlap .GT. max_overlap)
THEN
544 max_overlap = sto_state_overlap
548 xas_estate = my_state
551 CALL get_mo_set(mos(my_spin), mo_coeff=mo_coeff)
553 nao, 1, transpose=.true.)
555 nao, 1, transpose=.true.)
561 IF (nvirtual2 .GT. 0)
THEN
563 CALL get_mo_set(mos(my_spin), mo_coeff=mo_coeff, nmo=nmo)
564 IF (output_unit > 0)
THEN
565 WRITE (unit=output_unit, fmt=
"(/,/,T2,A,I5,A,I6,A)")
" Calculation of ", nvirtual2, &
566 " additional virtual states of the subspace complementary to the"// &
567 " lowest ", nmo,
" states"
570 NULLIFY (uno_orbs, uno_evals, local_preconditioner)
571 ALLOCATE (local_preconditioner)
578 matrix_h=matrix_ks(my_spin)%matrix, &
579 matrix_s=matrix_s(1)%matrix, &
580 matrix_t=kinetic(1)%matrix, &
581 convert_precond_to_dbcsr=.true., &
582 mo_set=mos(my_spin), energy_gap=0.2_dp)
584 CALL get_xas_env(xas_env=xas_env, unoccupied_orbs=uno_orbs, &
585 unoccupied_evals=uno_evals, unoccupied_eps=uno_eps, unoccupied_max_iter=uno_iter)
588 CALL ot_eigensolver(matrix_h=matrix_ks(my_spin)%matrix, matrix_s=matrix_s(1)%matrix, &
589 matrix_c_fm=uno_orbs, matrix_orthogonal_space_fm=mo_coeff, &
591 iter_max=uno_iter, size_ortho_space=nmo)
594 uno_evals, do_rotation=.true.)
597 DEALLOCATE (local_preconditioner)
604 NULLIFY (all_vectors, all_evals)
605 CALL get_xas_env(xas_env=xas_env, all_vectors=all_vectors, &
607 CALL get_mo_set(mos(my_spin), eigenvalues=eigenvalues, mo_coeff=mo_coeff, &
610 CALL cp_fm_to_fm(mo_coeff, all_vectors, ncol=nmo, &
611 source_start=1, target_start=1)
613 all_evals(istate) = eigenvalues(istate)
615 IF (nvirtual2 .GT. 0)
THEN
616 CALL cp_fm_to_fm(uno_orbs, all_vectors, ncol=nvirtual2, &
617 source_start=1, target_start=1 + nmo)
618 DO istate = 1, nvirtual2
619 all_evals(istate + nmo) = uno_evals(istate)
624 DEALLOCATE (vecbuffer)
625 DEALLOCATE (vecbuffer2)
626 DEALLOCATE (centers_wfn, first_sgf)
628 CALL timestop(handle)
630 END SUBROUTINE cls_prepare_states
646 LOGICAL,
INTENT(OUT) :: converged, should_stop
648 CHARACTER(LEN=*),
PARAMETER :: routinen =
'xes_scf_once'
650 INTEGER :: handle, ispin, istate, my_spin, nmo, &
651 nvirtual, nvirtual2, output_unit, &
653 REAL(kind=
dp),
DIMENSION(:),
POINTER :: all_evals, eigenvalues
654 TYPE(
cp_fm_type),
POINTER :: all_vectors, mo_coeff
665 NULLIFY (dft_control, scf_control, scf_env, matrix_ks, mos, para_env,
xas_control)
666 NULLIFY (dft_section, xas_section, scf_section, all_vectors, mo_coeff, all_evals, eigenvalues)
671 CALL timeset(routinen, handle)
673 cpassert(
ASSOCIATED(xas_env))
674 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control, &
675 matrix_ks=matrix_ks, mos=mos, para_env=para_env)
678 CALL get_xas_env(xas_env, scf_control=scf_control, spin_channel=my_spin)
684 IF (xas_env%homo_occ == 0)
THEN
688 IF (.NOT.
ASSOCIATED(scf_env))
THEN
695 CALL scf_env_do_scf(scf_env=scf_env, scf_control=scf_control, qs_env=qs_env, &
696 converged=converged, should_stop=should_stop, total_scf_steps=tsteps)
702 NULLIFY (mo_coeff, eigenvalues)
703 IF (scf_control%use_ot)
THEN
704 IF (output_unit > 0)
THEN
705 WRITE (unit=output_unit, fmt=
"(/,T10,A,/)") &
706 "Get eigenstates and eigenvalues from ground state MOs"
708 DO ispin = 1,
SIZE(mos)
709 CALL get_mo_set(mos(ispin), mo_coeff=mo_coeff, &
710 eigenvalues=eigenvalues)
712 matrix_ks(ispin)%matrix, eigenvalues, &
716 CALL get_xas_env(xas_env=xas_env, all_vectors=all_vectors, &
717 all_evals=all_evals, nvirtual2=nvirtual2)
718 CALL get_mo_set(mos(my_spin), eigenvalues=eigenvalues, mo_coeff=mo_coeff, nmo=nmo)
720 CALL cp_fm_to_fm(mo_coeff, all_vectors, ncol=nmo, &
721 source_start=1, target_start=1)
723 all_evals(istate) = eigenvalues(istate)
726 IF (nvirtual2 /= 0)
THEN
727 IF (output_unit > 0)
THEN
728 WRITE (unit=output_unit, fmt=
"(/,T10,A,/)") &
729 "WARNING: for this XES calculation additional unoccupied MOs are not needed"
733 CALL set_xas_env(xas_env=xas_env, nvirtual=nvirtual, nvirtual2=nvirtual2)
736 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.
various utilities that regard array of different kinds: output, allocation,... maybe it is not a good...
methods related to the blacs parallel environment
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
...
Routines to handle the external control of CP2K.
subroutine, public external_control(should_stop, flag, globenv, target_time, start_time, force_check)
External manipulations during a run : when the <PROJECT_NAME>.EXIT_$runtype command is sent the progr...
represent a full matrix distributed on many processors
subroutine, public cp_fm_set_submatrix(fm, new_values, start_row, start_col, n_rows, n_cols, alpha, beta, transpose)
sets a submatrix of a full matrix fm(start_row:start_row+n_rows,start_col:start_col+n_cols) = alpha*o...
subroutine, public cp_fm_get_submatrix(fm, target_m, start_row, start_col, n_rows, n_cols, transpose)
gets a submatrix of a full matrix op(target_m)(1:n_rows,1:n_cols) =fm(start_row:start_row+n_rows,...
subroutine, public cp_fm_init_random(matrix, ncol, start_col)
fills a matrix with random numbers
various routines to log and control the output. The idea is that decisions about where to log should ...
integer function, public cp_logger_get_default_io_unit(logger)
returns the unit nr for the ionode (-1 on all other processors) skips as well checks if the procs cal...
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,...
integer, parameter, public cp_p_file
subroutine, public cp_iterate(iteration_info, last, iter_nr, increment, iter_nr_out)
adds one to the actual iteration
subroutine, public cp_rm_iter_level(iteration_info, level_name, n_rlevel_att)
Removes an iteration level.
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...
subroutine, public cp_add_iter_level(iteration_info, level_name, n_rlevel_new)
Adds an iteration level.
Defines the basic variable types.
integer, parameter, public dp
Machine interface based on Fortran 2003 and POSIX.
subroutine, public m_flush(lunit)
flushes units if the &GLOBAL flag is set accordingly
real(kind=dp) function, public m_walltime()
returns time from a real-time clock, protected against rolling early/easily
Interface to the message passing library MPI.
Define methods related to particle_type.
subroutine, public get_particle_set(particle_set, qs_kind_set, first_sgf, last_sgf, nsgf, nmao, basis)
Get the components of a particle set.
Define the data structure for the particle information.
subroutine, public init_preconditioner(preconditioner_env, para_env, blacs_env)
...
subroutine, public destroy_preconditioner(preconditioner_env)
...
computes preconditioners, and implements methods to apply them currently used in qs_ot
subroutine, public make_preconditioner(preconditioner_env, precon_type, solver_type, matrix_h, matrix_s, matrix_t, mo_set, energy_gap, convert_precond_to_dbcsr, chol_type)
...
container for information about total charges on the grids
collects routines that calculate density matrices
module that contains the definitions of the scf types
integer, parameter, public broyden_mixing_nr
integer, parameter, public no_mixing_nr
integer, parameter, public direct_mixing_nr
integer, parameter, public multisecant_mixing_nr
integer, parameter, public pulay_mixing_nr
integer, parameter, public gspace_mixing_nr
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 gspace_mixing(qs_env, mixing_method, mixing_store, rho, para_env, iter_count)
Driver for the g-space mixing, calls the proper routine given the requested method.
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...
Driver for the localization that should be general for all the methods available and all the definiti...
subroutine, public qs_loc_driver(qs_env, qs_loc_env, print_loc_section, myspin, ext_mo_coeff)
set up the calculation of localized orbitals
New version of the module for the localization of the molecular orbitals This should be able to use d...
subroutine, public get_qs_loc_env(qs_loc_env, cell, local_molecules, localized_wfn_control, moloc_coeff, op_sm_set, op_fm_set, para_env, particle_set, weights, dim_op)
...
subroutine, public self_consistency_check(rho_ao, p_delta, para_env, p_out, delta)
...
Definition and initialisation of the mo data type.
subroutine, public write_mo_set_to_restart(mo_array, particle_set, dft_section, qs_kind_set)
...
collects routines that perform operations directly related to MOs
Set occupation of molecular orbitals.
Definition and initialisation of the mo data type.
subroutine, public get_mo_set(mo_set, maxocc, homo, lfomo, nao, nelectron, n_el_f, nmo, eigenvalues, occupation_numbers, mo_coeff, mo_coeff_b, uniform_occupation, kts, mu, flexible_electron_count)
Get the components of a MO set data structure.
an eigen-space solver for the generalised symmetric eigenvalue problem for sparse matrices,...
subroutine, public ot_eigensolver(matrix_h, matrix_s, matrix_orthogonal_space_fm, matrix_c_fm, preconditioner, eps_gradient, iter_max, size_ortho_space, silent, ot_settings)
...
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...
Different diagonalization schemes that can be used for the iterative solution of the eigenvalue probl...
subroutine, public general_eigenproblem(scf_env, mos, matrix_ks, matrix_s, scf_control, scf_section, diis_step)
the inner loop of scf, specific to diagonalization with S matrix basically, in goes the ks matrix out...
Utility routines for qs_scf.
subroutine, public qs_scf_env_initialize(qs_env, scf_env, scf_control, scf_section)
initializes input parameters if needed or restores values from previous runs to fill scf_env with the...
groups fairly general SCF methods, so that modules other than qs_scf can use them too split off from ...
subroutine, public scf_env_density_mixing(p_mix_new, mixing_store, rho_ao, para_env, iter_delta, iter_count, diis, invert)
perform (if requested) a density mixing
subroutine, public qs_scf_print_summary(output_unit, qs_env)
writes a summary of information after scf
module that contains the definitions of the scf types
integer, parameter, public general_diag_method_nr
Routines for the Quickstep SCF run.
subroutine, public scf_env_cleanup(scf_env)
perform cleanup operations (like releasing temporary storage) at the end of the scf
subroutine, public scf_env_do_scf(scf_env, scf_control, qs_env, converged, should_stop, total_scf_steps)
perform an scf loop
parameters that control an scf iteration
Defines control structures, which contain the parameters and the settings for the calculations.
define create destroy get and put information in xas_env to calculate the x-ray absorption spectra
subroutine, public set_xas_env(xas_env, nexc_search, spin_channel, nexc_atoms, nvirtual, nvirtual2, ip_energy, occ_estate, qs_loc_env, xas_estate, xas_nelectron, homo_occ, scf_env, scf_control)
...
subroutine, public get_xas_env(xas_env, exc_state, nao, nvirtual, nvirtual2, centers_wfn, atom_of_state, exc_atoms, nexc_states, type_of_state, mykind_of_atom, mykind_of_kind, state_of_atom, spectrum, groundstate_coeff, ostrength_sm, dip_fm_set, excvec_coeff, excvec_overlap, unoccupied_orbs, unoccupied_evals, unoccupied_max_iter, unoccupied_eps, all_vectors, all_evals, my_gto_basis, qs_loc_env, stogto_overlap, occ_estate, xas_nelectron, xas_estate, nexc_atoms, nexc_search, spin_channel, scf_env, scf_control)
...
Initialize the XAS orbitals for specific core excitations Either the GS orbitals are used as initial ...
subroutine, public xas_write_restart(xas_env, xas_section, qs_env, xas_method, iatom, istate)
...
subroutine, public find_excited_core_orbital(xas_env, mos, matrix_s)
Find the index of the core orbital that has been excited by XAS.
xas_scf for the tp method It is repeaated for every atom that have to be excited
subroutine, public xas_do_tp_scf(dft_control, xas_env, iatom, istate, scf_env, qs_env, xas_section, scf_section, converged, should_stop)
perform an scf loop to calculate the xas spectrum given by the excitation of a inner state of a selec...
subroutine, public xes_scf_once(qs_env, xas_env, converged, should_stop)
SCF for emission spectra calculations: vacancy in valence.
Provides all information about an atomic kind.
Type defining parameters related to the simulation cell.
represent a pointer to a 2d array
represent a blacs multidimensional parallel environment (for the mpi corrispective see cp_paratypes/m...
type of a logger, at the moment it contains just a print level starting at which level it should be l...
stores all the informations relevant to an mpi environment
Container for information about total charges on the grids.
Provides all information about a quickstep kind.
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...
A type that holds controlling information for the calculation of the spread of wfn and the optimizati...
contains all the info needed by quickstep to calculate the spread of a selected set of orbitals and i...
keeps the density in various representations, keeping track of which ones are valid.
A type that holds controlling information for a xas calculation.