XAS: enable excitation for beta spin channel

svn-origin-rev: 18295
This commit is contained in:
Dorothea Golze 2018-03-06 16:41:07 +00:00
parent 84796ecda6
commit 02ebe2af46
11 changed files with 274 additions and 119 deletions

View file

@ -7571,7 +7571,7 @@ CONTAINS
CALL keyword_create(keyword, name="STATE_TYPE", &
variants=(/"TYPE"/), &
description="Type of the orbitas that are excited for the xas spectra calculation", &
description="Type of the orbitals that are excited for the xas spectra calculation", &
usage="STATE_TYPE 1S", &
default_i_val=xas_1s_type, &
enum_c_vals=s2a("1S", "2S", "2P"), &
@ -7587,6 +7587,13 @@ CONTAINS
CALL section_add_keyword(section, keyword)
CALL keyword_release(keyword)
CALL keyword_create(keyword, name="SPIN_CHANNEL", &
description="# Spin channel of the excited orbital", &
usage="SPIN_CHANNEL 1", &
default_i_val=1)
CALL section_add_keyword(section, keyword)
CALL keyword_release(keyword)
CALL keyword_create(keyword, name="ATOMS_LIST", &
variants=(/"AT_LIST"/), &
description="Indexes of the atoms to be excited. "// &

View file

@ -205,7 +205,7 @@ CONTAINS
CHARACTER(len=*), PARAMETER :: routineN = 'qs_loc_env_destroy', &
routineP = moduleN//':'//routineN
INTEGER :: i, j
INTEGER :: i, ii, j
CPASSERT(ASSOCIATED(qs_loc_env))
@ -220,7 +220,8 @@ CONTAINS
IF (ASSOCIATED(qs_loc_env%moloc_coeff)) THEN
DO i = 1, SIZE(qs_loc_env%moloc_coeff, 1)
CALL cp_fm_release(qs_loc_env%moloc_coeff(i)%matrix)
ii = LBOUND(qs_loc_env%moloc_coeff, 1)+i-1
CALL cp_fm_release(qs_loc_env%moloc_coeff(ii)%matrix)
END DO
DEALLOCATE (qs_loc_env%moloc_coeff)
END IF

View file

@ -462,9 +462,8 @@ CONTAINS
routineP = moduleN//':'//routineN
INTEGER :: dim_op, handle, i, iatom, imo, imoloc, &
ispin, j, l_spin, lb, my_nspins, nao, &
naosub, natoms, nmo, nmosub, nspins, &
s_spin, ub
ispin, j, l_spin, lb, nao, naosub, &
natoms, nmo, nmosub, nspins, s_spin, ub
REAL(KIND=dp) :: my_occ, occ_imo
REAL(KIND=dp), DIMENSION(:), POINTER :: occupations
REAL(KIND=dp), DIMENSION(:, :), POINTER :: vecbuffer
@ -489,13 +488,11 @@ CONTAINS
nspins = SIZE(mos, 1)
s_spin = 1
l_spin = nspins
my_nspins = nspins
IF (PRESENT(myspin)) THEN
s_spin = myspin
l_spin = myspin
my_nspins = 1
END IF
ALLOCATE (moloc_coeff(my_nspins))
ALLOCATE (moloc_coeff(s_spin:l_spin))
DO ispin = s_spin, l_spin
NULLIFY (tmp_fm_struct, mo_coeff)
CALL get_mo_set(mos(ispin)%mo_set, mo_coeff=mo_coeff, nao=nao, nmo=nmo)
@ -1180,16 +1177,17 @@ CONTAINS
!> \param do_homo ...
!> \param do_xas ...
!> \param nloc_xas ...
!> \param spin_xas ...
!> \par History
!> 2009 created
! **************************************************************************************************
SUBROUTINE qs_loc_control_init(qs_loc_env, loc_section, do_homo, do_xas, nloc_xas)
SUBROUTINE qs_loc_control_init(qs_loc_env, loc_section, do_homo, do_xas, nloc_xas, spin_xas)
TYPE(qs_loc_env_new_type), POINTER :: qs_loc_env
TYPE(section_vals_type), POINTER :: loc_section
LOGICAL, INTENT(IN) :: do_homo
LOGICAL, INTENT(IN), OPTIONAL :: do_xas
INTEGER, INTENT(IN), OPTIONAL :: nloc_xas
INTEGER, INTENT(IN), OPTIONAL :: nloc_xas, spin_xas
CHARACTER(len=*), PARAMETER :: routineN = 'qs_loc_control_init', &
routineP = moduleN//':'//routineN
@ -1204,7 +1202,7 @@ CONTAINS
CALL get_qs_loc_env(qs_loc_env, localized_wfn_control=localized_wfn_control)
localized_wfn_control%do_homo = do_homo
CALL read_loc_section(localized_wfn_control, loc_section, &
qs_loc_env%do_localize, do_xas, nloc_xas)
qs_loc_env%do_localize, do_xas, nloc_xas, spin_xas)
END SUBROUTINE qs_loc_control_init
@ -1402,23 +1400,25 @@ CONTAINS
!> \param localize ...
!> \param do_xas ...
!> \param nloc_xas ...
!> \param spin_channel_xas ...
!> \par History
!> 05.2005 created [MI]
! **************************************************************************************************
SUBROUTINE read_loc_section(localized_wfn_control, loc_section, &
localize, do_xas, nloc_xas)
localize, do_xas, nloc_xas, spin_channel_xas)
TYPE(localized_wfn_control_type), POINTER :: localized_wfn_control
TYPE(section_vals_type), POINTER :: loc_section
LOGICAL, INTENT(OUT) :: localize
LOGICAL, INTENT(IN), OPTIONAL :: do_xas
INTEGER, INTENT(IN), OPTIONAL :: nloc_xas
INTEGER, INTENT(IN), OPTIONAL :: nloc_xas, spin_channel_xas
CHARACTER(LEN=*), PARAMETER :: routineN = 'read_loc_section', &
routineP = moduleN//':'//routineN
INTEGER :: i, ind, ir, n_list, n_rep, n_state, &
nline, output_unit
nline, other_spin, output_unit, &
spin_xas
INTEGER, DIMENSION(:), POINTER :: list, loc_list
LOGICAL :: my_do_xas
REAL(dp), POINTER :: ene(:)
@ -1426,10 +1426,12 @@ CONTAINS
TYPE(section_vals_type), POINTER :: loc_print_section
my_do_xas = .FALSE.
spin_xas = 1
IF (PRESENT(do_xas)) THEN
my_do_xas = do_xas
CPASSERT(PRESENT(nloc_xas))
END IF
IF (PRESENT(spin_channel_xas)) spin_xas = spin_channel_xas
CPASSERT(ASSOCIATED(loc_section))
NULLIFY (logger)
logger => cp_get_default_logger()
@ -1495,9 +1497,12 @@ CONTAINS
localized_wfn_control%loc_states(:, 1) = loc_list(:)
localized_wfn_control%loc_states(:, 2) = loc_list(:)
localized_wfn_control%nloc_states(1) = n_list
localized_wfn_control%nloc_states(2) = n_list
IF (my_do_xas) THEN
localized_wfn_control%nloc_states(2) = 0
localized_wfn_control%loc_states(:, 2) = 0
other_spin = 2
IF (spin_xas == 2) other_spin = 1
localized_wfn_control%nloc_states(other_spin) = 0
localized_wfn_control%loc_states(:, other_spin) = 0
END IF
DEALLOCATE (loc_list)
END IF
@ -1544,12 +1549,12 @@ CONTAINS
IF (localized_wfn_control%set_of_states == 0) THEN
IF (my_do_xas) THEN
localized_wfn_control%set_of_states = state_loc_range
localized_wfn_control%nloc_states(1) = nloc_xas
localized_wfn_control%lu_bound_states(1, 1) = 1
localized_wfn_control%lu_bound_states(2, 1) = nloc_xas
localized_wfn_control%nloc_states(2) = 0
localized_wfn_control%lu_bound_states(1, 2) = 0
localized_wfn_control%lu_bound_states(2, 2) = 0
localized_wfn_control%nloc_states(:) = 0
localized_wfn_control%lu_bound_states(1, :) = 0
localized_wfn_control%lu_bound_states(2, :) = 0
localized_wfn_control%nloc_states(spin_xas) = nloc_xas
localized_wfn_control%lu_bound_states(1, spin_xas) = 1
localized_wfn_control%lu_bound_states(2, spin_xas) = nloc_xas
ELSE
localized_wfn_control%set_of_states = state_loc_all
END IF
@ -1582,8 +1587,8 @@ CONTAINS
CASE (state_loc_range)
WRITE (UNIT=output_unit, FMT="(T2,A,T65,I8,A,I8)") &
"LOCALIZE| Orbitals to be localized: Those with index between ", &
localized_wfn_control%lu_bound_states(1, 1), " and ", &
localized_wfn_control%lu_bound_states(2, 1)
localized_wfn_control%lu_bound_states(1, spin_xas), " and ", &
localized_wfn_control%lu_bound_states(2, spin_xas)
CASE (state_loc_list)
WRITE (UNIT=output_unit, FMT="(T2,A)") &
"LOCALIZE| Orbitals to be localized: Those with index in the following list"
@ -1691,14 +1696,16 @@ CONTAINS
!> \param nmoloc ...
!> \param nmo ...
!> \param nspins ...
!> \param my_spin ...
!> \par History
!> 04.2005 created [MI]
! **************************************************************************************************
SUBROUTINE set_loc_wfn_lists(localized_wfn_control, nmoloc, nmo, nspins)
SUBROUTINE set_loc_wfn_lists(localized_wfn_control, nmoloc, nmo, nspins, my_spin)
TYPE(localized_wfn_control_type) :: localized_wfn_control
INTEGER, DIMENSION(2), INTENT(IN) :: nmoloc, nmo
INTEGER, INTENT(IN) :: nspins
INTEGER, INTENT(IN), OPTIONAL :: my_spin
CHARACTER(len=*), PARAMETER :: routineN = 'set_loc_wfn_lists', &
routineP = moduleN//':'//routineN
@ -1728,9 +1735,9 @@ CONTAINS
localized_wfn_control%loc_states = 0
DO ispin = 1, nspins
localized_wfn_control%lu_bound_states(1, ispin) = &
localized_wfn_control%lu_bound_states(1, 1)
localized_wfn_control%lu_bound_states(1, my_spin)
localized_wfn_control%lu_bound_states(2, ispin) = &
localized_wfn_control%lu_bound_states(1, 1)+nmoloc(ispin)-1
localized_wfn_control%lu_bound_states(1, my_spin)+nmoloc(ispin)-1
max_iloc = localized_wfn_control%lu_bound_states(2, ispin)
DO i = 1, nmoloc(ispin)
localized_wfn_control%loc_states(i, ispin) = localized_wfn_control%lu_bound_states(1, ispin)+i-1

View file

@ -39,6 +39,7 @@ MODULE xas_control
INTEGER :: ref_count
INTEGER :: nexc_atoms
INTEGER :: nexc_search
INTEGER :: spin_channel
INTEGER :: state_type
INTEGER :: xas_method
INTEGER :: dipole_form
@ -109,6 +110,9 @@ CONTAINS
CALL section_vals_val_get(xas_section, "STATE_SEARCH", &
i_val=xas_control%nexc_search)
CALL section_vals_val_get(xas_section, "SPIN_CHANNEL", &
i_val=xas_control%spin_channel)
CALL section_vals_val_get(xas_section, "XAS_CORE", &
r_val=xas_control%xas_core_occupation)
@ -255,6 +259,7 @@ CONTAINS
xas_control%ref_count = 1
xas_control%xas_method = xas_tp_hh
xas_control%nexc_atoms = 1
xas_control%spin_channel = 1
xas_control%nexc_search = -1
xas_control%state_type = xas_1s_type
xas_control%xas_restart = .FALSE.

View file

@ -73,6 +73,7 @@ MODULE xas_env_types
INTEGER :: iter_count
INTEGER :: nao, exc_state, xas_estate
INTEGER :: nexc_search, nexc_atoms
INTEGER :: spin_channel
INTEGER :: nvirtual, nvirtual2
INTEGER :: unoccupied_max_iter
INTEGER, DIMENSION(:), POINTER :: state_of_atom
@ -139,6 +140,7 @@ CONTAINS
!> \param xas_estate ...
!> \param nexc_atoms ...
!> \param nexc_search ...
!> \param spin_channel ...
!> \param scf_env ...
!> \param scf_control ...
! **************************************************************************************************
@ -148,7 +150,8 @@ CONTAINS
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, scf_env, scf_control)
stogto_overlap, occ_estate, xas_nelectron, xas_estate, nexc_atoms, nexc_search, spin_channel, &
scf_env, scf_control)
TYPE(xas_environment_type), POINTER :: xas_env
INTEGER, INTENT(OUT), OPTIONAL :: iter_count, exc_state, nao, nvirtual, &
@ -177,7 +180,8 @@ CONTAINS
TYPE(cp_2d_r_p_type), DIMENSION(:), OPTIONAL, &
POINTER :: stogto_overlap
REAL(dp), INTENT(OUT), OPTIONAL :: occ_estate, xas_nelectron
INTEGER, INTENT(OUT), OPTIONAL :: xas_estate, nexc_atoms, nexc_search
INTEGER, INTENT(OUT), OPTIONAL :: xas_estate, nexc_atoms, nexc_search, &
spin_channel
TYPE(qs_scf_env_type), OPTIONAL, POINTER :: scf_env
TYPE(scf_control_type), OPTIONAL, POINTER :: scf_control
@ -194,6 +198,7 @@ CONTAINS
IF (PRESENT(occ_estate)) occ_estate = xas_env%occ_estate
IF (PRESENT(xas_estate)) xas_estate = xas_env%xas_estate
IF (PRESENT(nexc_search)) nexc_search = xas_env%nexc_search
IF (PRESENT(spin_channel)) spin_channel = xas_env%spin_channel
IF (PRESENT(nexc_atoms)) nexc_atoms = xas_env%nexc_atoms
IF (PRESENT(unoccupied_eps)) unoccupied_eps = xas_env%unoccupied_eps
IF (PRESENT(unoccupied_max_iter)) unoccupied_max_iter = xas_env%unoccupied_max_iter
@ -226,6 +231,7 @@ CONTAINS
!> \param xas_env ...
!> \param iter_count ...
!> \param nexc_search ...
!> \param spin_channel ...
!> \param nexc_atoms ...
!> \param nvirtual ...
!> \param nvirtual2 ...
@ -238,13 +244,13 @@ CONTAINS
!> \param scf_env ...
!> \param scf_control ...
! **************************************************************************************************
SUBROUTINE set_xas_env(xas_env, iter_count, nexc_search, nexc_atoms, &
SUBROUTINE set_xas_env(xas_env, iter_count, 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)
TYPE(xas_environment_type), POINTER :: xas_env
INTEGER, INTENT(IN), OPTIONAL :: iter_count, nexc_search, nexc_atoms, &
nvirtual, nvirtual2
INTEGER, INTENT(IN), OPTIONAL :: iter_count, nexc_search, spin_channel, &
nexc_atoms, nvirtual, nvirtual2
REAL(dp), INTENT(IN), OPTIONAL :: ip_energy, occ_estate
TYPE(qs_loc_env_new_type), OPTIONAL, POINTER :: qs_loc_env
INTEGER, INTENT(IN), OPTIONAL :: xas_estate
@ -258,6 +264,7 @@ CONTAINS
IF (PRESENT(iter_count)) xas_env%iter_count = iter_count
IF (PRESENT(nexc_search)) xas_env%nexc_search = nexc_search
IF (PRESENT(spin_channel)) xas_env%spin_channel = spin_channel
IF (PRESENT(nexc_atoms)) xas_env%nexc_atoms = nexc_atoms
IF (PRESENT(nvirtual)) xas_env%nvirtual = nvirtual
IF (PRESENT(nvirtual2)) xas_env%nvirtual2 = nvirtual2

View file

@ -153,8 +153,8 @@ CONTAINS
CHARACTER(LEN=*), PARAMETER :: routineN = 'xas', routineP = moduleN//':'//routineN
INTEGER :: handle, homo, i, iat, iatom, ispin, my_homo(2), my_nelectron(2), nao, nexc_atoms, &
nexc_search, nmo, nspins, output_unit, state_to_be_excited
INTEGER :: handle, homo, i, iat, iatom, ispin, my_homo(2), my_nelectron(2), my_spin, nao, &
nexc_atoms, nexc_search, nmo, nspins, output_unit, state_to_be_excited
INTEGER, DIMENSION(2) :: added_mos
INTEGER, DIMENSION(:), POINTER :: state_of_atom
LOGICAL :: ch_method_flags, converged, my_uocc(2), &
@ -279,15 +279,16 @@ CONTAINS
CPABORT("XAS with TP method requires LSD calculations")
END IF
! Set of states among which there is the state to be excited
CALL get_mo_set(mos(1)%mo_set, nao=nao, homo=homo)
IF (xas_control%nexc_search < 0) xas_control%nexc_search = homo
nexc_search = xas_control%nexc_search
CALL get_xas_env(xas_env=xas_env, &
state_of_atom=state_of_atom, all_vectors=all_vectors, &
groundstate_coeff=groundstate_coeff, excvec_coeff=excvec_coeff, &
nexc_atoms=nexc_atoms, occ_estate=occ_estate, xas_nelectron=xas_nelectron)
nexc_atoms=nexc_atoms, occ_estate=occ_estate, xas_nelectron=xas_nelectron, &
spin_channel=my_spin)
! Set of states among which there is the state to be excited
CALL get_mo_set(mos(my_spin)%mo_set, nao=nao, homo=homo)
IF (xas_control%nexc_search < 0) xas_control%nexc_search = homo
nexc_search = xas_control%nexc_search
CALL set_xas_env(xas_env=xas_env, nexc_search=nexc_search)
@ -295,20 +296,20 @@ CONTAINS
CALL get_xas_env(xas_env=xas_env, qs_loc_env=qs_loc_env)
IF (qs_loc_env%do_localize) THEN
IF (output_unit > 0) THEN
WRITE (UNIT=output_unit, FMT="(/,T10,A,/)") &
"Localize a sub-set of MOs with spin alpha,"// &
WRITE (UNIT=output_unit, FMT="(/,T2,A34,I3,A36/)") &
"Localize a sub-set of MOs of spin ", my_spin, ","// &
" to better identify the core states"
IF ( &
qs_loc_env%localized_wfn_control%set_of_states == state_loc_range) THEN
WRITE (UNIT=output_unit, FMT="( A , I7, A, I7)") " The sub-set contains states from ", &
qs_loc_env%localized_wfn_control%lu_bound_states(1, 1), " to ", &
qs_loc_env%localized_wfn_control%lu_bound_states(2, 1)
qs_loc_env%localized_wfn_control%lu_bound_states(1, my_spin), " to ", &
qs_loc_env%localized_wfn_control%lu_bound_states(2, my_spin)
ELSEIF (qs_loc_env%localized_wfn_control%set_of_states == state_loc_list) THEN
WRITE (UNIT=output_unit, FMT="( A )") " The sub-set contains states given in the input list"
END IF
END IF
CALL qs_loc_driver(qs_env, qs_loc_env, print_loc_section, myspin=1)
CALL qs_loc_driver(qs_env, qs_loc_env, print_loc_section, myspin=my_spin)
END IF
CPASSERT(ASSOCIATED(groundstate_coeff))
@ -382,7 +383,7 @@ CONTAINS
qs_env)
IF (skip_scf) THEN
CALL get_mo_set(mos(1)%mo_set, mo_coeff=mo_coeff)
CALL get_mo_set(mos(my_spin)%mo_set, mo_coeff=mo_coeff)
CALL cp_fm_to_fm(mo_coeff, all_vectors, ncol=nexc_search, &
source_start=1, target_start=1)
END IF
@ -411,7 +412,7 @@ CONTAINS
state_to_be_excited = state_of_atom(iat)
! Take the state_to_be_excited vector from the full set and copy into excvec_coeff
CALL get_mo_set(mos(1)%mo_set, nmo=nmo)
CALL get_mo_set(mos(my_spin)%mo_set, nmo=nmo)
CALL get_xas_env(xas_env, occ_estate=occ_estate, xas_nelectron=xas_nelectron)
tmp = xas_nelectron+1.0_dp-occ_estate
IF (nmo < tmp) &
@ -427,7 +428,7 @@ CONTAINS
END IF
CALL set_xas_env(xas_env=xas_env, xas_estate=state_to_be_excited)
CALL get_mo_set(mos(1)%mo_set, mo_coeff=mo_coeff)
CALL get_mo_set(mos(my_spin)%mo_set, mo_coeff=mo_coeff)
CPASSERT(ASSOCIATED(excvec_coeff))
CALL cp_fm_get_submatrix(mo_coeff, vecbuffer, 1, state_to_be_excited, &
nao, 1, transpose=.TRUE.)
@ -447,8 +448,8 @@ CONTAINS
"Start Core Level Spectroscopy Calculation with TP approach for ATOM ", iatom
WRITE (UNIT=output_unit, FMT='(T10,A,T50,f10.4)') "Occupation of the core orbital", &
occ_estate
WRITE (UNIT=output_unit, FMT='(T10,A,T50,f10.4)') "Number of electrons in Spin 1", &
xas_nelectron
WRITE (UNIT=output_unit, FMT='(T10,A28,I3, T50,F10.4)') "Number of electrons in Spin ", &
my_spin, xas_nelectron
END IF
END IF
@ -578,9 +579,9 @@ CONTAINS
CHARACTER(len=*), PARAMETER :: routineN = 'xas_env_init', routineP = moduleN//':'//routineN
CHARACTER(LEN=default_string_length) :: name_sto
INTEGER :: homo, i, iat, iatom, ik, ikind, ispin, j, l, lfomo, n_mo(2), n_rep, nao, natom, &
ncubes, nelectron, nexc_atoms, nexc_search, nj, nk, nkind, nmo, nmoloc(2), norb(0:3), &
nsgf_gto, nsgf_sto, nspins, nvirtual, nvirtual2
INTEGER :: homo, i, iat, iatom, ik, ikind, ispin, j, l, lfomo, my_spin, n_mo(2), n_rep, nao, &
natom, ncubes, nelectron, nexc_atoms, nexc_search, nj, nk, nkind, nmo, nmoloc(2), &
norb(0:3), nsgf_gto, nsgf_sto, nspins, nvirtual, nvirtual2
INTEGER, ALLOCATABLE, DIMENSION(:) :: first_sgf, kind_type_tmp, kind_z_tmp, &
last_sgf
INTEGER, DIMENSION(4, 7) :: ne
@ -638,22 +639,23 @@ CONTAINS
CALL scf_c_release(scf_control)
CALL get_xas_env(xas_env, scf_control=scf_control)
my_spin = xas_control%spin_channel
nexc_search = xas_control%nexc_search
IF (nexc_search < 0) THEN
! ground state occupation
CALL get_mo_set(mos(1)%mo_set, nmo=nmo, lfomo=lfomo)
CALL get_mo_set(mos(my_spin)%mo_set, nmo=nmo, lfomo=lfomo)
nexc_search = lfomo-1
END IF
nexc_atoms = xas_control%nexc_atoms
ALLOCATE (xas_env%exc_atoms(nexc_atoms))
xas_env%exc_atoms = xas_control%exc_atoms
CALL set_xas_env(xas_env=xas_env, nexc_search=nexc_search, &
nexc_atoms=nexc_atoms)
nexc_atoms=nexc_atoms, spin_channel=my_spin)
CALL mpools_get(mpools, ao_mo_fm_pools=xas_env%ao_mo_fm_pools)
NULLIFY (mo_coeff)
CALL get_mo_set(mos(1)%mo_set, nao=nao, homo=homo, nmo=nmo, mo_coeff=mo_coeff, nelectron=nelectron)
CALL get_mo_set(mos(my_spin)%mo_set, nao=nao, homo=homo, nmo=nmo, mo_coeff=mo_coeff, nelectron=nelectron)
nvirtual2 = 0
IF (xas_control%added_mos .GT. 0) THEN
@ -874,15 +876,15 @@ CONTAINS
CALL get_xas_env(xas_env=xas_env, qs_loc_env=qs_loc_env)
loc_section => section_vals_get_subs_vals(xas_section, "LOCALIZE")
CALL qs_loc_control_init(qs_loc_env, loc_section, do_homo=.TRUE., &
do_xas=.TRUE., nloc_xas=nexc_search)
do_xas=.TRUE., nloc_xas=nexc_search, spin_xas=my_spin)
IF (.NOT. qs_loc_env%do_localize) THEN
qs_loc_env%localized_wfn_control%localization_method = do_loc_none
ELSE
nmoloc = qs_loc_env%localized_wfn_control%nloc_states
CALL set_loc_wfn_lists(qs_loc_env%localized_wfn_control, nmoloc, n_mo, nspins)
CALL set_loc_wfn_lists(qs_loc_env%localized_wfn_control, nmoloc, n_mo, nspins, my_spin)
CALL set_loc_centers(qs_loc_env%localized_wfn_control, nmoloc, nspins)
CALL qs_loc_env_init(qs_loc_env, qs_loc_env%localized_wfn_control, &
qs_env, myspin=1, do_localize=qs_loc_env%do_localize)
qs_env, myspin=my_spin, do_localize=qs_loc_env%do_localize)
END IF
END IF
@ -1003,8 +1005,8 @@ CONTAINS
CHARACTER(LEN=*), PARAMETER :: routineN = 'cls_calculate_spectrum', &
routineP = moduleN//':'//routineN
INTEGER :: homo, i, lfomo, nabs, nmo, nvirtual, &
output_unit, xas_estate
INTEGER :: homo, i, lfomo, my_spin, nabs, nmo, &
nvirtual, output_unit, xas_estate
LOGICAL :: append_cube, length
REAL(dp) :: rc(3)
REAL(dp), DIMENSION(:), POINTER :: all_evals
@ -1028,10 +1030,10 @@ CONTAINS
CALL get_qs_env(qs_env=qs_env, &
mos=mos, particle_set=particle_set)
CALL get_mo_set(mos(1)%mo_set, homo=homo, lfomo=lfomo, nmo=nmo)
CALL get_xas_env(xas_env=xas_env, all_vectors=all_vectors, xas_estate=xas_estate, &
all_evals=all_evals, dip_fm_set=dip_fm_set, excvec_coeff=excvec_coeff, &
ostrength_sm=ostrength_sm, nvirtual=nvirtual)
ostrength_sm=ostrength_sm, nvirtual=nvirtual, spin_channel=my_spin)
CALL get_mo_set(mos(my_spin)%mo_set, homo=homo, lfomo=lfomo, nmo=nmo)
nabs = nvirtual-lfomo+1
ALLOCATE (sp_em(6, homo))
@ -1049,7 +1051,7 @@ CONTAINS
CALL rRc_xyz_ao(op_sm, qs_env, rc, order=1, minimum_image=.TRUE.)
CALL spectrum_dip_vel(dip_fm_set, op_sm, mos, excvec_coeff, &
all_vectors, all_evals, &
sp_em, sp_ab, xas_estate, nvirtual)
sp_em, sp_ab, xas_estate, nvirtual, my_spin)
DO i = 1, SIZE(ostrength_sm, 1)
CALL dbcsr_set(ostrength_sm(i)%matrix, 0.0_dp)
END DO
@ -1060,11 +1062,11 @@ CONTAINS
END DO
CALL spectrum_dip_vel(dip_fm_set, op_sm, mos, excvec_coeff, &
all_vectors, all_evals, &
sp_em, sp_ab, xas_estate, nvirtual)
sp_em, sp_ab, xas_estate, nvirtual, my_spin)
END IF
END IF
CALL get_mo_set(mos(1)%mo_set, lfomo=lfomo)
CALL get_mo_set(mos(my_spin)%mo_set, lfomo=lfomo)
! writw thw spectrum, if the file exists it is appended
IF (.NOT. xas_control%xas_method == xas_dscf) THEN
length = (.NOT. xas_control%dipole_form == xas_dip_vel)
@ -1198,7 +1200,7 @@ CONTAINS
routineP = moduleN//':'//routineN
CHARACTER(LEN=default_string_length) :: my_mittle, my_pos
INTEGER :: homo, istate0, nspins, nstates
INTEGER :: homo, istate0, my_spin, nspins, nstates
REAL(dp), DIMENSION(:, :), POINTER :: centers
TYPE(section_vals_type), POINTER :: print_key
@ -1214,8 +1216,9 @@ CONTAINS
ALLOCATE (centers(6, nstates))
centers = 0.0_dp
END IF
my_spin = xas_control%spin_channel
CALL get_mo_set(mos(1)%mo_set, homo=homo)
CALL get_mo_set(mos(my_spin)%mo_set, homo=homo)
istate0 = 0
my_pos = "REWIND"
@ -1288,12 +1291,13 @@ CONTAINS
!> \param sp_ab ...
!> \param estate index of the excited state
!> \param nstate ...
!> \param my_spin ...
!> \par History
!> 06.2005 created [MI]
!> \author MI
! **************************************************************************************************
SUBROUTINE spectrum_dip_vel(fm_set, op_sm, mos, excvec, &
all_vectors, all_evals, sp_em, sp_ab, estate, nstate)
all_vectors, all_evals, sp_em, sp_ab, estate, nstate, my_spin)
TYPE(cp_fm_p_type), DIMENSION(:, :), POINTER :: fm_set
TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: op_sm
@ -1301,7 +1305,7 @@ CONTAINS
TYPE(cp_fm_type), POINTER :: excvec, all_vectors
REAL(dp), DIMENSION(:), POINTER :: all_evals
REAL(dp), DIMENSION(:, :), POINTER :: sp_em, sp_ab
INTEGER, INTENT(IN) :: estate, nstate
INTEGER, INTENT(IN) :: estate, nstate, my_spin
CHARACTER(LEN=*), PARAMETER :: routineN = 'spectrum_dip_vel', &
routineP = moduleN//':'//routineN
@ -1315,17 +1319,17 @@ CONTAINS
CPASSERT(ASSOCIATED(mos))
NULLIFY (eigenvalues, occupation_numbers, fm_work)
CALL get_mo_set(mos(1)%mo_set, eigenvalues=eigenvalues, occupation_numbers=occupation_numbers, &
CALL get_mo_set(mos(my_spin)%mo_set, eigenvalues=eigenvalues, occupation_numbers=occupation_numbers, &
nao=nao, nmo=nmo, homo=homo, lfomo=lfomo)
CALL cp_fm_create(fm_work, all_vectors%matrix_struct)
DO i = 1, SIZE(fm_set, 2)
CPASSERT(ASSOCIATED(fm_set(1, i)%matrix))
CALL cp_fm_set_all(fm_set(1, i)%matrix, 0.0_dp)
CPASSERT(ASSOCIATED(fm_set(my_spin, i)%matrix))
CALL cp_fm_set_all(fm_set(my_spin, i)%matrix, 0.0_dp)
CALL cp_fm_set_all(fm_work, 0.0_dp)
CALL cp_dbcsr_sm_fm_multiply(op_sm(i)%matrix, all_vectors, fm_work, ncol=nstate)
CALL cp_gemm("T", "N", 1, nstate, nao, 1.0_dp, excvec, &
fm_work, 0.0_dp, fm_set(1, i)%matrix, b_first_col=1)
fm_work, 0.0_dp, fm_set(my_spin, i)%matrix, b_first_col=1)
END DO
CALL cp_fm_release(fm_work)
@ -1335,9 +1339,8 @@ CONTAINS
DO istate = 1, nstate
ene_f = all_evals(istate)
DO i = 1, 3
CALL cp_fm_get_element(fm_set(1, i)%matrix, 1, istate, dip(i))
CALL cp_fm_get_element(fm_set(my_spin, i)%matrix, 1, istate, dip(i))
END DO
IF (istate <= homo) THEN
sp_em(1, istate) = ene_f-ene_i
@ -1464,8 +1467,9 @@ CONTAINS
routineP = moduleN//':'//routineN
INTEGER :: homo, i, iat, iatom, ikind, isgf, &
istate, j, my_kind, nao, natom, &
nexc_atoms, nexc_search, output_unit
istate, j, my_kind, my_spin, nao, &
natom, nexc_atoms, nexc_search, &
output_unit
INTEGER, ALLOCATABLE, DIMENSION(:) :: first_sgf
INTEGER, DIMENSION(3) :: perd0
INTEGER, DIMENSION(:), POINTER :: atom_of_state, mykind_of_kind, &
@ -1502,13 +1506,14 @@ CONTAINS
perd0(1:3) = cell%perd(1:3)
cell%perd(1:3) = 1
CALL get_mo_set(mos(1)%mo_set, mo_coeff=mo_coeff, maxocc=maxocc, nao=nao, homo=homo)
CALL get_xas_env(xas_env=xas_env, &
centers_wfn=centers_wfn, atom_of_state=atom_of_state, &
mykind_of_kind=mykind_of_kind, &
type_of_state=type_of_state, state_of_atom=state_of_atom, &
stogto_overlap=stogto_overlap, nexc_atoms=nexc_atoms, nexc_search=nexc_search)
stogto_overlap=stogto_overlap, nexc_atoms=nexc_atoms, &
spin_channel=my_spin, nexc_search=nexc_search)
CALL get_mo_set(mos(my_spin)%mo_set, mo_coeff=mo_coeff, maxocc=maxocc, nao=nao, homo=homo)
! scratch array for the state
ALLOCATE (vecbuffer(1, nao))
@ -1524,9 +1529,9 @@ CONTAINS
atom_of_state = 0
DO istate = 1, nexc_search
centers_wfn(1, istate) = localized_wfn_control%centers_set(1)%array(1, istate)
centers_wfn(2, istate) = localized_wfn_control%centers_set(1)%array(2, istate)
centers_wfn(3, istate) = localized_wfn_control%centers_set(1)%array(3, istate)
centers_wfn(1, istate) = localized_wfn_control%centers_set(my_spin)%array(1, istate)
centers_wfn(2, istate) = localized_wfn_control%centers_set(my_spin)%array(2, istate)
centers_wfn(3, istate) = localized_wfn_control%centers_set(my_spin)%array(3, istate)
! Assign the state to the closest atom
distmin = 100.0_dp

View file

@ -106,7 +106,7 @@ CONTAINS
routineP = moduleN//':'//routineN
CHARACTER(LEN=default_path_length) :: filename
INTEGER :: group, handle, i, ia, ie, ispin, nao, nao_read, nelectron, nexc_atoms, &
INTEGER :: group, handle, i, ia, ie, ispin, my_spin, nao, nao_read, nelectron, nexc_atoms, &
nexc_atoms_read, nexc_search, nexc_search_read, nmo, nmo_read, output_unit, rst_unit, &
source, xas_estate, xas_estate_read, xas_method_read
LOGICAL :: file_exists
@ -168,7 +168,8 @@ CONTAINS
CALL mp_bcast(file_exists, source, group)
CALL get_xas_env(xas_env=xas_env, occ_estate=occ_estate, xas_estate=xas_estate, &
xas_nelectron=xas_nelectron, nexc_search=nexc_search, nexc_atoms=nexc_atoms)
xas_nelectron=xas_nelectron, nexc_search=nexc_search, &
nexc_atoms=nexc_atoms, spin_channel=my_spin)
IF (file_exists) THEN
CALL get_qs_env(qs_env=qs_env, mos=mos, matrix_s=matrix_s)
@ -190,7 +191,7 @@ CONTAINS
CALL set_xas_env(xas_env=xas_env, xas_estate=xas_estate_read)
estate = xas_estate_read
CALL get_mo_set(mo_set=mos(1)%mo_set, nao=nao)
CALL get_mo_set(mo_set=mos(my_spin)%mo_set, nao=nao)
ALLOCATE (vecbuffer(1, nao))
DO ispin = 1, SIZE(mos)
@ -370,7 +371,7 @@ CONTAINS
CHARACTER(LEN=*), PARAMETER :: routineN = 'xas_initialize_rho', &
routineP = moduleN//':'//routineN
INTEGER :: handle, ispin, nelectron
INTEGER :: handle, ispin, my_spin, nelectron
TYPE(cp_para_env_type), POINTER :: para_env
TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: rho_ao
TYPE(mo_set_p_type), DIMENSION(:), POINTER :: mos
@ -388,9 +389,10 @@ CONTAINS
xas_env=xas_env, &
para_env=para_env)
my_spin = xas_env%spin_channel
CALL qs_rho_get(rho, rho_ao=rho_ao)
DO ispin = 1, SIZE(mos)
IF (ispin == 1) THEN
IF (ispin == my_spin) THEN
IF (xas_env%homo_occ == 0) THEN
CALL get_mo_set(mos(ispin)%mo_set, nelectron=nelectron)
nelectron = nelectron-1
@ -437,7 +439,7 @@ CONTAINS
CHARACTER(LEN=*), PARAMETER :: routineN = 'find_excited_core_orbital', &
routineP = moduleN//':'//routineN
INTEGER :: i, ic_max, ir_max, m, n, nao, &
INTEGER :: i, ic_max, ir_max, m, my_spin, n, nao, &
nexc_search, nmo, xas_estate
INTEGER, DIMENSION(:), POINTER :: col_indices
REAL(dp) :: a_max, b_max, ip_energy, occ_estate
@ -450,10 +452,10 @@ CONTAINS
! Some elements from the xas_env
CALL get_xas_env(xas_env=xas_env, excvec_coeff=excvec_coeff, &
excvec_overlap=excvec_overlap, nexc_search=nexc_search, &
xas_estate=xas_estate, occ_estate=occ_estate)
xas_estate=xas_estate, occ_estate=occ_estate, spin_channel=my_spin)
CPASSERT(ASSOCIATED(excvec_overlap))
CALL get_mo_set(mos(1)%mo_set, mo_coeff=mo_coeff, nao=nao, nmo=nmo, &
CALL get_mo_set(mos(my_spin)%mo_set, mo_coeff=mo_coeff, nao=nao, nmo=nmo, &
eigenvalues=eigenvalues, occupation_numbers=occupation_numbers)
ALLOCATE (vecbuffer(1, nao))
vecbuffer = 0.0_dp

View file

@ -142,8 +142,9 @@ CONTAINS
CHARACTER(LEN=*), PARAMETER :: routineN = 'xas_do_tp_scf', routineP = moduleN//':'//routineN
INTEGER :: handle, handle2, ispin, iter_count, &
nspin, output_unit
INTEGER :: handle, handle2, hole_spin, ispin, &
iter_count, my_spin, nspin, occ_spin, &
output_unit
LOGICAL :: diis_step, energy_only, exit_loop, gapw
REAL(KIND=dp) :: t1, t2
TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
@ -181,7 +182,7 @@ CONTAINS
qs_charges=qs_charges, &
ks_env=ks_env, para_env=para_env)
CALL get_xas_env(xas_env, scf_control=scf_control)
CALL get_xas_env(xas_env, scf_control=scf_control, spin_channel=my_spin)
energy_only = .FALSE.
output_unit = cp_print_key_unit_nr(logger, xas_section, "PRINT%PROGRAM_RUN_INFO", &
@ -239,10 +240,18 @@ CONTAINS
matrix_s, scf_control, scf_section, &
diis_step)
CALL find_excited_core_orbital(xas_env, mos, matrix_s)
CALL set_mo_occupation(mo_set=mos(1)%mo_set, &
! set occupation for the respective spin channels
IF (my_spin == 1) THEN
hole_spin = 1 ! hole is generated in channel 1
occ_spin = 2
ELSE
hole_spin = 2
occ_spin = 1
ENDIF
CALL set_mo_occupation(mo_set=mos(hole_spin)%mo_set, &
smear=scf_control%smear, &
xas_env=xas_env)
CALL set_mo_occupation(mo_set=mos(2)%mo_set, &
CALL set_mo_occupation(mo_set=mos(occ_spin)%mo_set, &
smear=scf_control%smear)
DO ispin = 1, nspin
! does not yet handle k-points
@ -389,10 +398,8 @@ CONTAINS
CHARACTER(LEN=*), PARAMETER :: routineN = 'cls_prepare_states', &
routineP = moduleN//':'//routineN
INTEGER :: handle, i, ikind, isgf, ispin, istate, &
j, my_kind, my_state, nao, natom, &
nexc_search, nmo, nvirtual2, uno_iter, &
xas_estate
INTEGER :: handle, i, ikind, isgf, ispin, istate, j, my_kind, my_spin, my_state, nao, natom, &
nexc_search, nmo, nvirtual2, uno_iter, xas_estate
INTEGER, ALLOCATABLE, DIMENSION(:) :: first_sgf
INTEGER, DIMENSION(:), POINTER :: mykind_of_kind
REAL(dp), DIMENSION(:, :), POINTER :: centers_wfn
@ -446,10 +453,11 @@ CONTAINS
all_vectors=all_vectors, all_evals=all_evals, &
excvec_coeff=excvec_coeff, &
nvirtual2=nvirtual2, xas_estate=xas_estate, &
excvec_overlap=excvec_overlap, nexc_search=nexc_search, scf_control=scf_control)
excvec_overlap=excvec_overlap, nexc_search=nexc_search, &
spin_channel=my_spin, scf_control=scf_control)
CPASSERT(ASSOCIATED(excvec_overlap))
CALL get_mo_set(mos(1)%mo_set, mo_coeff=mo_coeff, nao=nao, &
CALL get_mo_set(mos(my_spin)%mo_set, mo_coeff=mo_coeff, nao=nao, &
eigenvalues=eigenvalues)
ALLOCATE (vecbuffer(1, nao))
@ -502,9 +510,9 @@ CONTAINS
!Search for the core state to be excited
max_overlap = 0.0_dp
DO istate = 1, nexc_search
centers_wfn(1, istate) = localized_wfn_control%centers_set(1)%array(1, istate)
centers_wfn(2, istate) = localized_wfn_control%centers_set(1)%array(2, istate)
centers_wfn(3, istate) = localized_wfn_control%centers_set(1)%array(3, istate)
centers_wfn(1, istate) = localized_wfn_control%centers_set(my_spin)%array(1, istate)
centers_wfn(2, istate) = localized_wfn_control%centers_set(my_spin)%array(2, istate)
centers_wfn(3, istate) = localized_wfn_control%centers_set(my_spin)%array(3, istate)
rc(1:3) = centers_wfn(1:3, istate)
rac = pbc(ra, rc, cell)
@ -531,7 +539,7 @@ CONTAINS
xas_estate = my_state
END DO ! istate
CALL get_mo_set(mos(1)%mo_set, mo_coeff=mo_coeff)
CALL get_mo_set(mos(my_spin)%mo_set, mo_coeff=mo_coeff)
CALL cp_fm_get_submatrix(mo_coeff, vecbuffer, 1, xas_estate, &
nao, 1, transpose=.TRUE.)
CALL cp_fm_set_submatrix(excvec_coeff, vecbuffer2, 1, 1, &
@ -543,7 +551,7 @@ CONTAINS
!Calculate the virtual states from the KS matrix matrix_ks(1)
IF (nvirtual2 .GT. 0) THEN
NULLIFY (mo_coeff)
CALL get_mo_set(mos(1)%mo_set, mo_coeff=mo_coeff, nmo=nmo)
CALL get_mo_set(mos(my_spin)%mo_set, mo_coeff=mo_coeff, nmo=nmo)
IF (output_unit > 0) THEN
WRITE (UNIT=output_unit, FMT="(/,/,T2,A,I5,A,I6,A)") " Calculation of ", nvirtual2, &
" additional virtual states of the subspace complementary to the "// &
@ -558,22 +566,22 @@ CONTAINS
CALL make_preconditioner(local_preconditioner, &
precon_type=ot_precond_full_kinetic, &
solver_type=ot_precond_solver_default, &
matrix_h=matrix_ks(1)%matrix, &
matrix_h=matrix_ks(my_spin)%matrix, &
matrix_s=matrix_s(1)%matrix, &
matrix_t=kinetic(1)%matrix, &
convert_precond_to_dbcsr=.TRUE., &
mo_set=mos(1)%mo_set, energy_gap=0.2_dp)
mo_set=mos(my_spin)%mo_set, energy_gap=0.2_dp)
CALL get_xas_env(xas_env=xas_env, unoccupied_orbs=uno_orbs, &
unoccupied_evals=uno_evals, unoccupied_eps=uno_eps, unoccupied_max_iter=uno_iter)
CALL cp_fm_init_random(uno_orbs, nvirtual2)
CALL ot_eigensolver(matrix_h=matrix_ks(1)%matrix, matrix_s=matrix_s(1)%matrix, &
CALL ot_eigensolver(matrix_h=matrix_ks(my_spin)%matrix, matrix_s=matrix_s(1)%matrix, &
matrix_c_fm=uno_orbs, matrix_orthogonal_space_fm=mo_coeff, &
preconditioner=local_preconditioner, eps_gradient=uno_eps, &
iter_max=uno_iter, size_ortho_space=nmo)
CALL calculate_subspace_eigenvalues(uno_orbs, matrix_ks(1)%matrix, &
CALL calculate_subspace_eigenvalues(uno_orbs, matrix_ks(my_spin)%matrix, &
uno_evals, do_rotation=.TRUE.)
CALL destroy_preconditioner(local_preconditioner)
@ -587,7 +595,7 @@ CONTAINS
NULLIFY (all_vectors, all_evals)
CALL get_xas_env(xas_env=xas_env, all_vectors=all_vectors, &
all_evals=all_evals)
CALL get_mo_set(mos(1)%mo_set, eigenvalues=eigenvalues, mo_coeff=mo_coeff, &
CALL get_mo_set(mos(my_spin)%mo_set, eigenvalues=eigenvalues, mo_coeff=mo_coeff, &
nmo=nmo)
CALL cp_fm_to_fm(mo_coeff, all_vectors, ncol=nmo, &
@ -630,8 +638,8 @@ CONTAINS
CHARACTER(LEN=*), PARAMETER :: routineN = 'xes_scf_once', routineP = moduleN//':'//routineN
INTEGER :: handle, ispin, istate, nmo, nvirtual, &
nvirtual2, output_unit
INTEGER :: handle, ispin, istate, my_spin, nmo, &
nvirtual, nvirtual2, output_unit
REAL(KIND=dp), DIMENSION(:), POINTER :: all_evals, eigenvalues
TYPE(cp_fm_type), POINTER :: all_vectors, mo_coeff
TYPE(cp_logger_type), POINTER :: logger
@ -657,7 +665,7 @@ CONTAINS
matrix_ks=matrix_ks, mos=mos, para_env=para_env)
xas_control => dft_control%xas_control
CALL get_xas_env(xas_env, scf_control=scf_control)
CALL get_xas_env(xas_env, scf_control=scf_control, spin_channel=my_spin)
dft_section => section_vals_get_subs_vals(qs_env%input, "DFT")
xas_section => section_vals_get_subs_vals(dft_section, "XAS")
@ -699,7 +707,7 @@ CONTAINS
END IF
CALL get_xas_env(xas_env=xas_env, all_vectors=all_vectors, &
all_evals=all_evals, nvirtual2=nvirtual2)
CALL get_mo_set(mos(1)%mo_set, eigenvalues=eigenvalues, mo_coeff=mo_coeff, nmo=nmo)
CALL get_mo_set(mos(my_spin)%mo_set, eigenvalues=eigenvalues, mo_coeff=mo_coeff, nmo=nmo)
CALL cp_fm_to_fm(mo_coeff, all_vectors, ncol=nmo, &
source_start=1, target_start=1)

View file

@ -0,0 +1,110 @@
&FORCE_EVAL
METHOD Quickstep
&DFT
LSD
BASIS_SET_FILE_NAME BASIS_def2_QZVP_RI_ALL
POTENTIAL_FILE_NAME POTENTIAL
CHARGE 0
MULTIPLICITY 3
&MGRID
CUTOFF 150
&END MGRID
&POISSON
PERIODIC NONE
POISSON_SOLVER MT
&END
&QS
METHOD GAPW
&END QS
&SCF
MAX_SCF 2
SCF_GUESS ATOMIC
EPS_SCF 1.0E-6
&DIAGONALIZATION
&END
&END SCF
&XC
&XC_FUNCTIONAL PBE
&END XC_FUNCTIONAL
&END XC
&PRINT
&MO
EIGENVALUES
MO_RANGE 1 50
OCCUPATION_NUMBERS
&END
&END
&XAS
&SCF
EPS_SCF 8.5E-2
MAX_SCF 30
&END
METHOD TP_FH
DIPOLE_FORM VELOCITY
STATE_TYPE 1s
STATE_SEARCH 2
SPIN_CHANNEL 2
ATOMS_LIST 1
ADDED_MOS 10
&LOCALIZE
&END
&PRINT
&PROGRAM_RUN_INFO
&END
&RESTART
&END
&XES_SPECTRUM
&END
&XAS_SPECTRUM
&END
&END
&END
&END DFT
&SUBSYS
&CELL
ABC [angstrom] 6.0 6.0 6.0
PERIODIC NONE
&END CELL
&COORD
O 0.00000000 0.00000000 -0.00423076
O 0.00000000 -0.00000000 1.21423076
&END
&KIND H
BASIS_SET def2-QZVP
POTENTIAL ALL
&END KIND
&KIND O
BASIS_SET def2-QZVP
POTENTIAL ALL
&END KIND
&KIND N
BASIS_SET def2-QZVP
POTENTIAL ALL
&END KIND
&KIND C
BASIS_SET def2-QZVP
POTENTIAL ALL
&END KIND
&KIND F
BASIS_SET def2-QZVP
POTENTIAL ALL
&END KIND
&END SUBSYS
&END FORCE_EVAL
&GLOBAL
PROJECT 7782-44-7
RUN_TYPE energy
WALLTIME 10700
&END GLOBAL

View file

@ -29,4 +29,6 @@ Fe.inp 1 6e-14 -
# GAPW with an external potential
H2O_constant_extpot_GAPW.inp 1 2e-13 -17.156932432160339
H2O_uniform_efield_GAPW.inp 1 6e-14 -17.15696477358598
#XAS with for beta channel
O2_xas_beta_spin.inp 84 1e-14 -20.79715369081585
#EOF

View file

@ -1,4 +1,4 @@
83
84
Total energy:!3
POTENTIAL ENERGY!4
Total energy \[eV\]:!4
@ -82,6 +82,7 @@ IC HOMO-LUMO gap (eV)!5
HOMO SCF Cycle: 4!9
DEBUG| Sum of differences:!5
1\[\ \ \ 1\]\ -\ 2\[\ \ \ 1\]!7
Ionization potential of the excited atom:!7
#
# these are the tests the can be selected for regtesting.
# do regtest will grep for test_grep (first column) and look if the numeric value