Bug-fixes and upgrades to the Active Space Module

- bug fixes of some incorrect indices
- extension to support UKS calculations
- implementation of an FCIDump checksum to ease testing
- addition of regression tests
- minor documentation improvements

After this PR, the active space module can be used in conjunction with HF-style calculations. This includes:

- GAPW with the ALL electron potential
- GAPW with the GTH-HF potential
- GPW with the GTH-HF potential

Regression tests for all of the above scenarios have been added in `tests/QS/regtest-as-1`.
```
% ../tools/regtesting/do_regtest -cp2kdir ../ -version sdbg -arch local -nobuild -restrictdir QS/regtest-as-1
<...>
--------------------------------- Summary --------------------------------
Number of FAILED  tests 0
Number of WRONG   tests 0
Number of CORRECT tests 26
Total number of   tests 26
GREPME 0 0 26 0 26 X

Summary: correct: 26 / 26; 3min
Status: OK
```
This commit is contained in:
Max Rossmannek 2020-12-18 09:14:16 +01:00 committed by GitHub
parent 5bf4af4099
commit 6964239efd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 1450 additions and 167 deletions

View file

@ -140,17 +140,38 @@ MODULE qs_active_space_methods
PUBLIC :: active_space_main
TYPE, EXTENDS(eri_type_eri_element_func) :: eri_fcidump_print
INTEGER :: unit_nr
INTEGER :: unit_nr, bra_start, ket_start
CONTAINS
PROCEDURE :: func => eri_fcidump_print_func
END TYPE
TYPE, EXTENDS(eri_type_eri_element_func) :: eri_fcidump_checksum
INTEGER :: bra_start = 0, ket_start = 0
REAL(KIND=dp) :: checksum = 0.0_dp
CONTAINS
PROCEDURE, PASS :: set => eri_fcidump_set
PROCEDURE :: func => eri_fcidump_checksum_func
END TYPE eri_fcidump_checksum
! **************************************************************************************************
CONTAINS
! **************************************************************************************************
!> \brief ...
!> \brief Sets the starting indices of the bra and ket.
!> \param this object reference
!> \param bra_start starting index of the bra
!> \param ket_start starting index of the ket
! **************************************************************************************************
SUBROUTINE eri_fcidump_set(this, bra_start, ket_start)
CLASS(eri_fcidump_checksum) :: this
INTEGER, INTENT(IN) :: bra_start, ket_start
this%bra_start = bra_start
this%ket_start = ket_start
END SUBROUTINE eri_fcidump_set
! **************************************************************************************************
!> \brief Main method for determining the active space Hamiltonian
!> \param input ...
!> \param logger ...
!> \param qs_env ...
@ -164,8 +185,8 @@ CONTAINS
CHARACTER(len=10) :: cshell, lnam(5)
INTEGER :: eri_method, eri_operator, eri_print, handle, i, iatom, ishell, isp, ispin, iw, j, &
jm, m, mselect, n1, n2, nactive, nao, natom, ncol, nel, ninactive, ninactive_alpha, &
ninactive_beta, nmo, nn1, nn2, nspins, ntot, zval
jm, m, mselect, n1, n2, nao, natom, ncol, nel, nelec_active, nelec_inactive, &
nelec_inactive_alpha, nelec_inactive_beta, nelec_total, nmo, nn1, nn2, nspins, zval
INTEGER, DIMENSION(2) :: nactive_orb, nepol, ninactive_orb
INTEGER, DIMENSION(5) :: nshell
INTEGER, DIMENSION(:), POINTER :: invals
@ -250,9 +271,9 @@ CONTAINS
END IF
END IF
CALL section_vals_val_get(as_input, "ACTIVE_ELECTRONS", i_val=nactive)
IF (nactive <= 0) CPABORT("Specify a positive number of active electrons.")
CALL get_qs_env(qs_env, nelectron_total=ntot, nelectron_spin=nepol)
CALL section_vals_val_get(as_input, "ACTIVE_ELECTRONS", i_val=nelec_active)
IF (nelec_active <= 0) CPABORT("Specify a positive number of active electrons.")
CALL get_qs_env(qs_env, nelectron_total=nelec_total, nelectron_spin=nepol)
CALL get_qs_env(qs_env, dft_control=dft_control)
nspins = dft_control%nspins
CALL section_vals_val_get(as_input, "INACTIVE_ELECTRONS", explicit=explicit)
@ -262,51 +283,53 @@ CONTAINS
CALL cp_abort(__LOCATION__, "Number of Inactive Electrons has to be specified"// &
" in spin polarised case.")
END IF
ninactive_alpha = invals(1)
ninactive_beta = invals(2)
ninactive = ninactive_alpha + ninactive_beta
nelec_inactive_alpha = invals(1)
nelec_inactive_beta = invals(2)
nelec_inactive = nelec_inactive_alpha + nelec_inactive_beta
ELSE
IF (explicit) THEN
ninactive = invals(1)
nelec_inactive = invals(1)
ELSE
ninactive = ntot - nactive
nelec_inactive = nelec_total - nelec_active
END IF
ninactive_alpha = ninactive
ninactive_beta = 0
END IF
CPASSERT(ninactive >= 0)
CPASSERT(ninactive_alpha >= 0)
CPASSERT(ninactive_beta >= 0)
CPASSERT(ntot == ninactive + nactive)
IF (nspins > 1) THEN
CPASSERT(nepol(1) >= ninactive_alpha)
CPASSERT(nepol(2) >= ninactive_beta)
nelec_inactive_alpha = nelec_inactive
nelec_inactive_beta = 0
END IF
IF (iw > 0) THEN
IF (nspins < 2) THEN
WRITE (iw, '(T4,A,T69,I10)') "Total number of electrons", ntot
WRITE (iw, '(T4,A,T69,I10)') "Number of active electrons", nactive
WRITE (iw, '(T4,A,T69,I10)') "Number of inactive electrons", ninactive
WRITE (iw, '(T4,A,T69,I10)') "Total number of electrons", nelec_total
WRITE (iw, '(T4,A,T69,I10)') "Number of active electrons", nelec_active
WRITE (iw, '(T4,A,T69,I10)') "Number of inactive electrons", nelec_inactive
ELSE
WRITE (iw, '(T4,A,T69,I10)') "Total number of electrons", ntot
WRITE (iw, '(T4,A,T69,I10)') "Number of active electrons", nactive
WRITE (iw, '(T4,A,T69,I10)') "Number of inactive electrons", ninactive
WRITE (iw, '(T4,A,T69,I10)') "Number of inactive electrons (alpha)", ninactive_alpha
WRITE (iw, '(T4,A,T69,I10)') "Number of inactive electrons (beta)", ninactive_beta
WRITE (iw, '(T4,A,T69,I10)') "Total number of electrons", nelec_total
WRITE (iw, '(T4,A,T69,I10)') "Number of active electrons", nelec_active
WRITE (iw, '(T4,A,T69,I10)') "Number of inactive electrons", nelec_inactive
WRITE (iw, '(T4,A,T69,I10)') "Number of inactive electrons (alpha)", nelec_inactive_alpha
WRITE (iw, '(T4,A,T69,I10)') "Number of inactive electrons (beta)", nelec_inactive_beta
END IF
END IF
active_space_env%nactive = nactive
active_space_env%ninactive = ninactive
IF (nspins == 1) THEN
active_space_env%nelectrons(1) = ntot
active_space_env%nelectrons(2) = 0
ELSE
active_space_env%nelectrons(1) = nepol(1)
active_space_env%nelectrons(2) = nepol(2)
CPASSERT(nelec_inactive >= 0)
CPASSERT(nelec_inactive_alpha >= 0)
CPASSERT(nelec_inactive_beta >= 0)
CPASSERT(nelec_total == nelec_inactive + nelec_active)
IF (nspins > 1) THEN
CPASSERT(nepol(1) >= nelec_inactive_alpha)
CPASSERT(nepol(2) >= nelec_inactive_beta)
END IF
active_space_env%ninspin(1) = ninactive_alpha
active_space_env%ninspin(2) = ninactive_beta
active_space_env%nelec_active = nelec_active
active_space_env%nelec_inactive = nelec_inactive
IF (nspins == 1) THEN
active_space_env%nelec_total(1) = nelec_total
active_space_env%nelec_total(2) = 0
ELSE
active_space_env%nelec_total(1) = nepol(1)
active_space_env%nelec_total(2) = nepol(2)
END IF
active_space_env%nelec_inactive_spinwise(1) = nelec_inactive_alpha
active_space_env%nelec_inactive_spinwise(2) = nelec_inactive_beta
active_space_env%multiplicity = dft_control%multiplicity
active_space_env%nspins = nspins
@ -325,10 +348,10 @@ CONTAINS
CALL section_vals_val_get(as_input, "INACTIVE_ORBITALS", i_vals=invals)
IF (.NOT. explicit) THEN
IF (nspins == 1) THEN
ninactive_orb(1) = active_space_env%ninspin(1)/2
ninactive_orb(1) = active_space_env%nelec_inactive_spinwise(1)/2
ELSE
DO ispin = 1, nspins
ninactive_orb(ispin) = active_space_env%ninspin(ispin)
ninactive_orb(ispin) = active_space_env%nelec_inactive_spinwise(ispin)
END DO
END IF
ELSE
@ -338,11 +361,11 @@ CONTAINS
END DO
END IF
IF (nspins == 1) THEN
CPASSERT(MOD(ninactive, 2) == 0)
CPASSERT(ninactive_orb(1) >= ninactive/2)
CPASSERT(MOD(nelec_inactive, 2) == 0)
CPASSERT(ninactive_orb(1) >= nelec_inactive/2)
ELSE
CPASSERT(ninactive_orb(1) >= ninactive_alpha)
CPASSERT(ninactive_orb(2) >= ninactive_beta)
CPASSERT(ninactive_orb(1) >= nelec_inactive_alpha)
CPASSERT(ninactive_orb(2) >= nelec_inactive_beta)
END IF
CALL get_qs_env(qs_env, mos=mos)
@ -363,7 +386,7 @@ CONTAINS
active_space_env%mos_active(ispin)%mo_set => mo_set
mo_set => active_space_env%mos_inactive(ispin)%mo_set
nmo = ninactive_orb(ispin)
nel = active_space_env%ninspin(ispin)
nel = active_space_env%nelec_inactive_spinwise(ispin)
NULLIFY (mo_set)
CALL allocate_mo_set(mo_set, nao, nmo, nel, REAL(nel, KIND=dp), maxocc, 0.0_dp)
CALL init_mo_set(mo_set, fm_ref=fm_ref, name="Inactive Space MO")
@ -474,11 +497,11 @@ CONTAINS
"[atomic units]"
DO i = 1, ninactive_orb(ispin), 4
jm = MIN(3, ninactive_orb(ispin) - i)
WRITE (iw, '(T3,4(F14.6,A5))') (eigenvalues(i + j, 1), " [I]", j=0, jm)
WRITE (iw, '(T3,4(F14.6,A5))') (eigenvalues(i + j, ispin), " [I]", j=0, jm)
END DO
DO i = ninactive_orb(ispin) + 1, ninactive_orb(ispin) + nactive_orb(ispin), 4
jm = MIN(3, ninactive_orb(ispin) + nactive_orb(ispin) - i)
WRITE (iw, '(T3,4(F14.6,A5))') (eigenvalues(i + j, 1), " [A]", j=0, jm)
WRITE (iw, '(T3,4(F14.6,A5))') (eigenvalues(i + j, ispin), " [A]", j=0, jm)
END DO
END DO
END IF
@ -668,7 +691,7 @@ CONTAINS
nn1 = (n1*(n1 + 1))/2
nn2 = (n2*(n2 + 1))/2
CALL dbcsr_csr_create(eri_mat, nn1, nn2, 0_int_8, 0, 0, para_env%group)
CALL get_mo_set(active_space_env%mos_active(i)%mo_set, nmo=active_space_env%eri%norb)
CALL get_mo_set(active_space_env%mos_active(1)%mo_set, nmo=active_space_env%eri%norb)! here replace i with 1, i can be > nspins
END DO
SELECT CASE (eri_method)
@ -708,12 +731,12 @@ CONTAINS
! set the reference active space density matrix
nspins = active_space_env%nspins
ALLOCATE (active_space_env%p_ref(nspins))
ALLOCATE (active_space_env%p_active(nspins))
DO isp = 1, nspins
mo_set => active_space_env%mos_active(isp)%mo_set
CALL get_mo_set(mo_set, mo_coeff=mo_coeff, nmo=nmo)
NULLIFY (active_space_env%p_ref(isp)%matrix)
CALL create_subspace_matrix(mo_coeff, active_space_env%p_ref(isp)%matrix, nmo)
NULLIFY (active_space_env%p_active(isp)%matrix)
CALL create_subspace_matrix(mo_coeff, active_space_env%p_active(isp)%matrix, nmo)
END DO
SELECT CASE (mselect)
CASE DEFAULT
@ -722,9 +745,9 @@ CONTAINS
focc = 2.0_dp
IF (nspins == 2) focc = 1.0_dp
DO isp = 1, nspins
fmat => active_space_env%p_ref(isp)%matrix
fmat => active_space_env%p_active(isp)%matrix
CALL cp_fm_set_all(fmat, alpha=0.0_dp)
n1 = active_space_env%nelectrons(isp) - active_space_env%ninspin(isp)
n1 = active_space_env%nelec_total(isp) - active_space_env%nelec_inactive_spinwise(isp)
DO i = 1, nactive_orb(isp)
fel = MIN(focc, REAL(n1, KIND=dp))
CALL cp_fm_set_element(fmat, i, i, fel)
@ -757,7 +780,7 @@ CONTAINS
! **************************************************************************************************
!> \brief computes the one-electron operators in the subspace of the provided orbital set
!> \param mos ...
!> \param mos the molecular orbital set within the active subspace
!> \param qs_env ...
!> \param active_space_env ...
!> \par History
@ -844,8 +867,8 @@ CONTAINS
! **************************************************************************************************
!> \brief computes a one-electron operator in the subspace of the provided orbital set
!> \param orbitals ...
!> \param nmo ...
!> \param orbitals the orbital coefficient matrix
!> \param nmo the number of orbitals
!> \param op_matrix operator matrix in AO basis
!> \param op_sub operator in orbital basis
!> \par History
@ -890,9 +913,9 @@ CONTAINS
! **************************************************************************************************
!> \brief creates a matrix of subspace size
!> \param orbitals ...
!> \param orbitals the orbital coefficient matrix
!> \param op_sub operator in orbital basis
!> \param n ...
!> \param n the number of orbitals
!> \par History
!> 04.2016 created [JGH]
! **************************************************************************************************
@ -920,7 +943,7 @@ CONTAINS
! **************************************************************************************************
!> \brief computes a electron repulsion integrals using GPW technology
!> \param mos ...
!> \param mos the molecular orbital set within the active subspace
!> \param eri_env ...
!> \param qs_env ...
!> \param iw ...
@ -1155,7 +1178,7 @@ CONTAINS
END IF
wfn_r%pw%cr3d = rho_r%pw%cr3d*wfn3%pw%cr3d*wfn4%pw%cr3d
erint = pw_integrate_function(wfn_r%pw)
IF (erint > eri_env%eps_integral) THEN
IF (ABS(erint) > eri_env%eps_integral) THEN
intcount = intcount + 1
IF (print2 .AND. iw > 0) THEN
WRITE (iw, "(T4,'ERI_GPW|',T20,2I4,' [',I1,']',2I4,' [',I1,']',T58,G20.14)") &
@ -1475,6 +1498,7 @@ CONTAINS
CALL pw_pool_give_back_pw(auxbas_pw_pool, wf_g%pw)
END SUBROUTINE print_orbital_cubes
! **************************************************************************************************
!> \brief Writes a FCIDUMP file
!> \param active_space_env ...
@ -1488,10 +1512,12 @@ CONTAINS
TYPE(section_vals_type), POINTER :: as_input
INTEGER :: i, i1, i2, i3, i4, isym, iw, nspins
REAL(KIND=dp) :: esub, mval
REAL(KIND=dp) :: checksum, esub
REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :) :: fmat
TYPE(cp_fm_type), POINTER :: matrix
TYPE(cp_logger_type), POINTER :: logger
TYPE(eri_fcidump_checksum) :: eri_checksum
checksum = 0.0_dp
logger => cp_get_default_logger()
IF (BTEST(cp_print_key_should_output(logger%iter_info, &
@ -1503,7 +1529,7 @@ CONTAINS
IF (nspins == 1) THEN
ASSOCIATE (norb=>active_space_env%eri%norb, &
ms2=>0, & ! active_space_env%multiplicity ?
nelec=>active_space_env%nactive)
nelec=>active_space_env%nelec_active)
IF (iw > 0) THEN
WRITE (iw, "(A,A,I4,A,I4,A,I2,A)") "&FCI", " NORB=", norb, ",NELEC=", nelec, ",MS2=", ms2, ","
@ -1515,23 +1541,19 @@ CONTAINS
END IF
!
! Print integrals: ERI
CALL active_space_env%eri%eri_foreach(1, eri_fcidump_print(iw))
CALL active_space_env%eri%eri_foreach(1, eri_fcidump_print(iw, 1, 1))
CALL eri_checksum%set(1, 1)
CALL active_space_env%eri%eri_foreach(1, eri_checksum)
! Print integrals: Fij
! replicate Fock matrix
ALLOCATE (fmat(norb, norb))
fmat = 0.0_dp
matrix => active_space_env%fock_sub(1)%matrix
DO i1 = 1, norb
DO i2 = i1, norb
CALL cp_fm_get_element(matrix, i1, i2, mval)
fmat(i1, i2) = mval
fmat(i2, i1) = mval
END DO
END DO
CALL replicate_and_symmetrize_matrix(norb, active_space_env%fock_sub(1)%matrix, fmat)
IF (iw > 0) THEN
i3 = 0; i4 = 0
DO i1 = 1, norb
DO i2 = i1, norb
checksum = checksum + ABS(fmat(i1, i2))
WRITE (iw, "(ES23.16,4I4)") fmat(i1, i2), i1, i2, i3, i4
END DO
END DO
@ -1540,16 +1562,108 @@ CONTAINS
! Print energy
esub = active_space_env%energy_inactive
i1 = 0; i2 = 0; i3 = 0; i4 = 0
checksum = checksum + ABS(esub)
IF (iw > 0) WRITE (iw, "(ES23.16,4I4)") esub, i1, i2, i3, i4
END ASSOCIATE
ELSE
CPABORT("Option not yet available")
ASSOCIATE (norb=>active_space_env%eri%norb, &
ms2=>0, & ! active_space_env%multiplicity ?
nelec=>active_space_env%nelec_active)
IF (iw > 0) THEN
WRITE (iw, "(A,A,I4,A,I4,A,I2,A)") "&FCI", " NORB=", norb, ",NELEC=", nelec, ",MS2=", ms2, ","
isym = 1
WRITE (iw, "(A,1000(I1,','))") " ORBSYM=", (isym, i=1, norb)
isym = 0
WRITE (iw, "(A,I1,A)") " ISYM=", isym, ","
WRITE (iw, "(A,I1,A)") " UHF=", 1, ","
WRITE (iw, "(A)") " /"
END IF
!
! Print integrals: ERI
! alpha-alpha
CALL active_space_env%eri%eri_foreach(1, eri_fcidump_print(iw, 1, 1))
CALL eri_checksum%set(1, 1)
CALL active_space_env%eri%eri_foreach(1, eri_checksum)
! alpha-beta
CALL active_space_env%eri%eri_foreach(2, eri_fcidump_print(iw, 1, norb + 1))
CALL eri_checksum%set(1, norb + 1)
CALL active_space_env%eri%eri_foreach(2, eri_checksum)
! beta-beta
CALL active_space_env%eri%eri_foreach(3, eri_fcidump_print(iw, norb + 1, norb + 1))
CALL eri_checksum%set(norb + 1, norb + 1)
CALL active_space_env%eri%eri_foreach(3, eri_checksum)
! Print integrals: Fij
! alpha
ALLOCATE (fmat(norb, norb))
CALL replicate_and_symmetrize_matrix(norb, active_space_env%fock_sub(1)%matrix, fmat)
IF (iw > 0) THEN
i3 = 0; i4 = 0
DO i1 = 1, norb
DO i2 = i1, norb
checksum = checksum + ABS(fmat(i1, i2))
WRITE (iw, "(ES23.16,4I4)") fmat(i1, i2), i1, i2, i3, i4
END DO
END DO
END IF
DEALLOCATE (fmat)
! beta
ALLOCATE (fmat(norb, norb))
CALL replicate_and_symmetrize_matrix(norb, active_space_env%fock_sub(2)%matrix, fmat)
IF (iw > 0) THEN
i3 = 0; i4 = 0
DO i1 = 1, norb
DO i2 = i1, norb
checksum = checksum + ABS(fmat(i1, i2))
WRITE (iw, "(ES23.16,4I4)") fmat(i1, i2), i1 + norb, i2 + norb, i3, i4
END DO
END DO
END IF
DEALLOCATE (fmat)
! Print energy
esub = active_space_env%energy_inactive
i1 = 0; i2 = 0; i3 = 0; i4 = 0
checksum = checksum + ABS(esub)
IF (iw > 0) WRITE (iw, "(ES23.16,4I4)") esub, i1, i2, i3, i4
END ASSOCIATE
END IF
!
CALL cp_print_key_finished_output(iw, logger, as_input, "FCIDUMP")
!>>
iw = cp_logger_get_default_io_unit(logger)
IF (iw > 0) WRITE (iw, '(T4,A,T66,F12.8)') "FCIDUMP| Checksum:", eri_checksum%checksum + checksum
!<<
END IF
END SUBROUTINE fcidump
! **************************************************************************************************
!> \brief replicate and symmetrize a matrix
!> \param norb the number of orbitals
!> \param distributed_matrix ...
!> \param replicated_matrix ...
! **************************************************************************************************
SUBROUTINE replicate_and_symmetrize_matrix(norb, distributed_matrix, replicated_matrix)
INTEGER, INTENT(IN) :: norb
TYPE(cp_fm_type), INTENT(IN), POINTER :: distributed_matrix
REAL(dp), DIMENSION(:, :), INTENT(INOUT) :: replicated_matrix
INTEGER :: i1, i2
REAL(dp) :: mval
replicated_matrix(:, :) = 0.0_dp
DO i1 = 1, norb
DO i2 = i1, norb
CALL cp_fm_get_element(distributed_matrix, i1, i2, mval)
replicated_matrix(i1, i2) = mval
replicated_matrix(i2, i1) = mval
END DO
END DO
END SUBROUTINE replicate_and_symmetrize_matrix
! **************************************************************************************************
!> \brief Calculates active space Fock matrix and inactive energy
!> \param active_space_env ...
@ -1560,89 +1674,36 @@ CONTAINS
TYPE(active_space_type), POINTER :: active_space_env
INTEGER :: i1, i12, i12l, i2, i3, i34, i34l, i4, &
irange(2), irptr, is, nelec, nindex, &
norb, nspins
REAL(KIND=dp) :: eeri, eref, erint, esub, mval
REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :) :: ks_mat, ks_ref, p_mat
CHARACTER(len=*), PARAMETER :: routineN = 'subspace_fock_matrix', &
routineP = moduleN//':'//routineN
INTEGER :: i1, i2, is, norb, nspins
REAL(KIND=dp) :: eeri, eref, esub, mval
REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :) :: ks_a_mat, ks_a_ref, ks_b_mat, ks_b_ref, &
ks_mat, ks_ref, p_a_mat, p_b_mat, p_mat
TYPE(cp_fm_type), POINTER :: matrix
TYPE(dbcsr_csr_type), POINTER :: eri
TYPE(dbcsr_csr_type), POINTER :: eri, eri_aa, eri_ab, eri_bb
eref = active_space_env%energy_ref
nspins = active_space_env%nspins
IF (nspins == 1) THEN
nelec = active_space_env%nactive
CALL get_mo_set(active_space_env%mos_active(1)%mo_set, nmo=norb)
!
! Loop over ERI, calculate subspace HF energy and Fock matrix
!
! replicate KS, Core, and P matrices
ALLOCATE (ks_mat(norb, norb), ks_ref(norb, norb), p_mat(norb, norb))
ks_mat = 0.0_dp
ks_ref = 0.0_dp
p_mat = 0.0_dp
DO i1 = 1, norb
DO i2 = i1, norb
matrix => active_space_env%p_ref(1)%matrix
CALL cp_fm_get_element(matrix, i1, i2, mval)
p_mat(i1, i2) = mval
p_mat(i2, i1) = mval
matrix => active_space_env%ks_sub(1)%matrix
CALL cp_fm_get_element(matrix, i1, i2, mval)
ks_mat(i1, i2) = mval
ks_mat(i2, i1) = mval
END DO
END DO
CALL replicate_and_symmetrize_matrix(norb, active_space_env%p_active(1)%matrix, p_mat)
CALL replicate_and_symmetrize_matrix(norb, active_space_env%ks_sub(1)%matrix, ks_mat)
!
!
eri => active_space_env%eri%eri(1)%csr_mat
CALL build_subspace_fock_matrix(norb, eri, p_mat, ks_ref)
!
! calculate energy
eeri = 0.0_dp
eri => active_space_env%eri%eri(1)%csr_mat
nindex = (norb*(norb + 1))/2
irange = get_irange_csr(nindex, eri%mp_group)
DO i1 = 1, norb
DO i2 = i1, norb
i12 = csr_idx_to_combined(i1, i2, norb)
IF (i12 >= irange(1) .AND. i12 <= irange(2)) THEN
i12l = i12 - irange(1) + 1
irptr = eri%rowptr_local(i12l) - 1
DO i34l = 1, eri%nzerow_local(i12l)
i34 = eri%colind_local(irptr + i34l)
CALL csr_idx_from_combined(i34, norb, i3, i4)
erint = eri%nzval_local%r_dp(irptr + i34l)
! Coulomb
ks_ref(i1, i2) = ks_ref(i1, i2) + erint*p_mat(i3, i4)
IF (i3 /= i4) THEN
ks_ref(i1, i2) = ks_ref(i1, i2) + erint*p_mat(i3, i4)
END IF
IF (i12 /= i34) THEN
ks_ref(i3, i4) = ks_ref(i3, i4) + erint*p_mat(i1, i2)
IF (i1 /= i2) THEN
ks_ref(i3, i4) = ks_ref(i3, i4) + erint*p_mat(i1, i2)
END IF
END IF
! Exchange
erint = -0.5_dp*erint
ks_ref(i1, i3) = ks_ref(i1, i3) + erint*p_mat(i2, i4)
IF (i1 /= i2) THEN
ks_ref(i2, i3) = ks_ref(i2, i3) + erint*p_mat(i1, i4)
END IF
IF (i3 /= i4) THEN
ks_ref(i1, i4) = ks_ref(i1, i4) + erint*p_mat(i2, i3)
END IF
IF (i1 /= i2 .AND. i3 /= i4) THEN
ks_ref(i2, i4) = ks_ref(i2, i4) + erint*p_mat(i1, i3)
END IF
END DO
END IF
END DO
END DO
!
DO i1 = 1, norb
DO i2 = i1, norb
ks_ref(i1, i2) = ks_ref(i2, i1)
END DO
END DO
CALL mp_sum(ks_ref, eri%mp_group)
!
eeri = 0.5_dp*SUM(ks_ref*p_mat)
esub = eref - SUM(ks_mat(1:norb, 1:norb)*p_mat(1:norb, 1:norb)) + eeri
ks_mat(1:norb, 1:norb) = ks_mat(1:norb, 1:norb) - ks_ref(1:norb, 1:norb)
@ -1669,10 +1730,233 @@ CONTAINS
END DO
END DO
ELSE
CPABORT("Spin option not yet available")
CALL get_mo_set(active_space_env%mos_active(1)%mo_set, nmo=norb)
!
! Loop over ERI, calculate subspace HF energy and Fock matrix
!
! replicate KS, Core, and P matrices
ALLOCATE (ks_a_mat(norb, norb), ks_b_mat(norb, norb), &
& ks_a_ref(norb, norb), ks_b_ref(norb, norb), &
& p_a_mat(norb, norb), p_b_mat(norb, norb))
ks_a_ref(:, :) = 0.0_dp; ks_b_ref(:, :) = 0.0_dp
CALL replicate_and_symmetrize_matrix(norb, active_space_env%p_active(1)%matrix, p_a_mat)
CALL replicate_and_symmetrize_matrix(norb, active_space_env%p_active(2)%matrix, p_b_mat)
CALL replicate_and_symmetrize_matrix(norb, active_space_env%ks_sub(1)%matrix, ks_a_mat)
CALL replicate_and_symmetrize_matrix(norb, active_space_env%ks_sub(2)%matrix, ks_b_mat)
!
!
eri_aa => active_space_env%eri%eri(1)%csr_mat
eri_ab => active_space_env%eri%eri(2)%csr_mat
eri_bb => active_space_env%eri%eri(3)%csr_mat
CALL build_subspace_spin_fock_matrix(norb, eri_aa, eri_ab, p_a_mat, p_b_mat, ks_a_ref, tr_mixed_eri=.FALSE.)
CALL build_subspace_spin_fock_matrix(norb, eri_bb, eri_ab, p_b_mat, p_a_mat, ks_b_ref, tr_mixed_eri=.TRUE.)
!
! calculate energy
eeri = 0.0_dp
eeri = 0.5_dp*(SUM(ks_a_ref*p_a_mat) + SUM(ks_b_ref*p_b_mat))
esub = eref - SUM(ks_a_mat*p_a_mat) - SUM(ks_b_mat*p_b_mat) + eeri
ks_a_mat(:, :) = ks_a_mat(:, :) - ks_a_ref(:, :)
ks_b_mat(:, :) = ks_b_mat(:, :) - ks_b_ref(:, :)
!
active_space_env%energy_inactive = esub
!
IF (ASSOCIATED(active_space_env%fock_sub)) THEN
DO is = 1, SIZE(active_space_env%fock_sub)
CALL cp_fm_release(active_space_env%fock_sub(is)%matrix)
END DO
DEALLOCATE (active_space_env%fock_sub)
END IF
ALLOCATE (active_space_env%fock_sub(nspins))
DO is = 1, nspins
matrix => active_space_env%ks_sub(is)%matrix
CALL cp_fm_create(active_space_env%fock_sub(is)%matrix, matrix%matrix_struct, &
name="Active Fock operator")
END DO
matrix => active_space_env%fock_sub(1)%matrix
DO i1 = 1, norb
DO i2 = 1, norb
mval = ks_a_mat(i1, i2)
CALL cp_fm_set_element(matrix, i1, i2, mval)
END DO
END DO
matrix => active_space_env%fock_sub(2)%matrix
DO i1 = 1, norb
DO i2 = 1, norb
mval = ks_b_mat(i1, i2)
CALL cp_fm_set_element(matrix, i1, i2, mval)
END DO
END DO
END IF
END SUBROUTINE subspace_fock_matrix
! **************************************************************************************************
!> \brief build subspace fockian
!> \param norb number of orbitals
!> \param eri two electon integrals in MO
!> \param p_mat density matrix
!> \param ks_ref fockian matrix
! **************************************************************************************************
SUBROUTINE build_subspace_fock_matrix(norb, eri, p_mat, ks_ref)
INTEGER, INTENT(IN) :: norb
TYPE(dbcsr_csr_type), INTENT(IN) :: eri
REAL(dp), DIMENSION(:, :), INTENT(IN) :: p_mat
REAL(dp), DIMENSION(:, :), INTENT(INOUT) :: ks_ref
INTEGER :: i1, i12, i12l, i2, i3, i34, i34l, i4, &
irptr, nindex
INTEGER, DIMENSION(2) :: irange
REAL(dp) :: erint
nindex = (norb*(norb + 1))/2
irange = get_irange_csr(nindex, eri%mp_group)
DO i1 = 1, norb
DO i2 = i1, norb
i12 = csr_idx_to_combined(i1, i2, norb)
IF (i12 >= irange(1) .AND. i12 <= irange(2)) THEN
i12l = i12 - irange(1) + 1
irptr = eri%rowptr_local(i12l) - 1
DO i34l = 1, eri%nzerow_local(i12l)
i34 = eri%colind_local(irptr + i34l)
CALL csr_idx_from_combined(i34, norb, i3, i4)
erint = eri%nzval_local%r_dp(irptr + i34l)
! Coulomb
ks_ref(i1, i2) = ks_ref(i1, i2) + erint*p_mat(i3, i4)
IF (i3 /= i4) THEN
ks_ref(i1, i2) = ks_ref(i1, i2) + erint*p_mat(i3, i4)
END IF
IF (i12 /= i34) THEN
ks_ref(i3, i4) = ks_ref(i3, i4) + erint*p_mat(i1, i2)
IF (i1 /= i2) THEN
ks_ref(i3, i4) = ks_ref(i3, i4) + erint*p_mat(i1, i2)
END IF
END IF
! Exchange
erint = -0.5_dp*erint
ks_ref(i1, i3) = ks_ref(i1, i3) + erint*p_mat(i2, i4)
IF (i1 /= i2) THEN
ks_ref(i2, i3) = ks_ref(i2, i3) + erint*p_mat(i1, i4)
END IF
IF (i3 /= i4) THEN
ks_ref(i1, i4) = ks_ref(i1, i4) + erint*p_mat(i2, i3)
END IF
IF (i1 /= i2 .AND. i3 /= i4) THEN
ks_ref(i2, i4) = ks_ref(i2, i4) + erint*p_mat(i1, i3)
END IF
END DO
END IF
END DO
END DO
!
DO i1 = 1, norb
DO i2 = i1, norb
ks_ref(i2, i1) = ks_ref(i1, i2)
END DO
END DO
CALL mp_sum(ks_ref, eri%mp_group)
END SUBROUTINE build_subspace_fock_matrix
! **************************************************************************************************
!> \brief build subspace fockian for unrestricted spins
!> \param norb number of orbitals
!> \param eri_aa two electon integrals in MO with parallel spins
!> \param eri_ab two electon integrals in MO with anti-parallel spins
!> \param p_a_mat density matrix for up-spin
!> \param p_b_mat density matrix for down-spin
!> \param ks_a_ref fockian matrix for up-spin
!> \param tr_mixed_eri boolean to indicate Coulomb interaction alignment
! **************************************************************************************************
SUBROUTINE build_subspace_spin_fock_matrix(norb, eri_aa, eri_ab, p_a_mat, p_b_mat, ks_a_ref, tr_mixed_eri)
INTEGER, INTENT(IN) :: norb
TYPE(dbcsr_csr_type), INTENT(IN) :: eri_aa, eri_ab
REAL(dp), DIMENSION(:, :), INTENT(IN) :: p_a_mat, p_b_mat
REAL(dp), DIMENSION(:, :), INTENT(INOUT) :: ks_a_ref
LOGICAL, INTENT(IN) :: tr_mixed_eri
INTEGER :: i1, i12, i12l, i2, i3, i34, i34l, i4, &
irptr, nindex
INTEGER, DIMENSION(2) :: irange
REAL(dp) :: erint
nindex = (norb*(norb + 1))/2
irange = get_irange_csr(nindex, eri_aa%mp_group)
DO i1 = 1, norb
DO i2 = i1, norb
i12 = csr_idx_to_combined(i1, i2, norb)
IF (i12 >= irange(1) .AND. i12 <= irange(2)) THEN
i12l = i12 - irange(1) + 1
irptr = eri_aa%rowptr_local(i12l) - 1
DO i34l = 1, eri_aa%nzerow_local(i12l)
i34 = eri_aa%colind_local(irptr + i34l)
CALL csr_idx_from_combined(i34, norb, i3, i4)
erint = eri_aa%nzval_local%r_dp(irptr + i34l)
! Coulomb
!F_ij += (ij|kl)*d_kl
ks_a_ref(i1, i2) = ks_a_ref(i1, i2) + erint*p_a_mat(i3, i4)
IF (i12 /= i34) THEN
!F_kl += (ij|kl)*d_ij
ks_a_ref(i3, i4) = ks_a_ref(i3, i4) + erint*p_a_mat(i1, i2)
END IF
! Exchange
erint = -1.0_dp*erint
!F_ik -= (ij|kl)*d_jl
ks_a_ref(i1, i3) = ks_a_ref(i1, i3) + erint*p_a_mat(i2, i4)
IF (i1 /= i2) THEN
!F_jk -= (ij|kl)*d_il
ks_a_ref(i2, i3) = ks_a_ref(i2, i3) + erint*p_a_mat(i1, i4)
END IF
IF (i3 /= i4) THEN
!F_il -= (ij|kl)*d_jk
ks_a_ref(i1, i4) = ks_a_ref(i1, i4) + erint*p_a_mat(i2, i3)
END IF
IF (i1 /= i2 .AND. i3 /= i4) THEN
!F_jl -= (ij|kl)*d_ik
ks_a_ref(i2, i4) = ks_a_ref(i2, i4) + erint*p_a_mat(i1, i3)
END IF
END DO
END IF
END DO
END DO
!
irange = get_irange_csr(nindex, eri_ab%mp_group)
DO i1 = 1, norb
DO i2 = i1, norb
i12 = csr_idx_to_combined(i1, i2, norb)
IF (i12 >= irange(1) .AND. i12 <= irange(2)) THEN
i12l = i12 - irange(1) + 1
irptr = eri_ab%rowptr_local(i12l) - 1
DO i34l = 1, eri_ab%nzerow_local(i12l)
i34 = eri_ab%colind_local(irptr + i34l)
CALL csr_idx_from_combined(i34, norb, i3, i4)
erint = eri_ab%nzval_local%r_dp(irptr + i34l)
! Coulomb
IF (tr_mixed_eri) THEN
!F_kl += (kl beta|ij alpha )*d_alpha_ij
ks_a_ref(i3, i4) = ks_a_ref(i3, i4) + erint*p_b_mat(i1, i2)
ELSE
!F_ij += (ij alpha|kl beta )*d_beta_kl
ks_a_ref(i1, i2) = ks_a_ref(i1, i2) + erint*p_b_mat(i3, i4)
ENDIF
END DO
END IF
END DO
END DO
!
DO i1 = 1, norb
DO i2 = i1, norb
ks_a_ref(i2, i1) = ks_a_ref(i1, i2)
END DO
END DO
CALL mp_sum(ks_a_ref, eri_aa%mp_group)
END SUBROUTINE build_subspace_spin_fock_matrix
! **************************************************************************************************
!> \brief Creates a local basis
!> \param pro_basis_set ...
@ -1763,7 +2047,7 @@ CONTAINS
CALL qs_rho_get(rho, rho_ao=rho_ao)
nspins = active_space_env%nspins
p_ref => active_space_env%p_ref
p_ref => active_space_env%p_active
mos => active_space_env%mos_active
DO ispin = 1, nspins
pinact => active_space_env%pmat_inactive(ispin)%matrix
@ -1856,10 +2140,35 @@ CONTAINS
! write to the actual file only on the master
IF (this%unit_nr > 0) THEN
WRITE (this%unit_nr, "(ES23.16,4I4)") val, i, j, k, l
WRITE (this%unit_nr, "(ES23.16,4I4)") val, i + this%bra_start - 1, j + this%bra_start - 1, &
& k + this%ket_start - 1, l + this%ket_start - 1
END IF
cont = .TRUE.
END FUNCTION eri_fcidump_print_func
! **************************************************************************************************
!> \brief checksum each value on the master node
!> \param this object reference
!> \param i i-index
!> \param j j-index
!> \param k k-index
!> \param l l-index
!> \param val value of the integral at (i,j,k.l)
!> \return always true to dump all integrals
! **************************************************************************************************
LOGICAL FUNCTION eri_fcidump_checksum_func(this, i, j, k, l, val) RESULT(cont)
CLASS(eri_fcidump_checksum), INTENT(inout) :: this
INTEGER, INTENT(in) :: i, j, k, l
REAL(KIND=dp), INTENT(in) :: val
MARK_USED(i)
MARK_USED(j)
MARK_USED(k)
MARK_USED(l)
this%checksum = this%checksum + ABS(val)
cont = .TRUE.
END FUNCTION eri_fcidump_checksum_func
END MODULE qs_active_space_methods

View file

@ -71,10 +71,10 @@ MODULE qs_active_space_types
END TYPE eri_type_eri_element_func
TYPE active_space_type
INTEGER :: nactive
INTEGER :: ninactive
INTEGER, DIMENSION(2) :: ninspin
INTEGER, DIMENSION(2) :: nelectrons
INTEGER :: nelec_active
INTEGER :: nelec_inactive
INTEGER, DIMENSION(2) :: nelec_inactive_spinwise
INTEGER, DIMENSION(2) :: nelec_total
INTEGER :: multiplicity
INTEGER :: nspins
LOGICAL :: molecule
@ -86,7 +86,7 @@ MODULE qs_active_space_types
TYPE(mo_set_p_type), DIMENSION(:), POINTER :: mos_active
TYPE(mo_set_p_type), DIMENSION(:), POINTER :: mos_inactive
TYPE(eri_type) :: eri
TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: p_ref
TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: p_active
TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: ks_sub
TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: vxc_sub
TYPE(cp_fm_p_type), DIMENSION(:), POINTER :: h_sub
@ -118,8 +118,8 @@ MODULE qs_active_space_types
CONTAINS
! **************************************************************************************************
!> \brief ...
!> \param active_space_env ...
!> \brief Creates an active space environment type, nullifying all quantities.
!> \param active_space_env the active space environment to be initialized
! **************************************************************************************************
SUBROUTINE create_active_space_type(active_space_env)
TYPE(active_space_type), POINTER :: active_space_env
@ -130,15 +130,15 @@ CONTAINS
ALLOCATE (active_space_env)
NULLIFY (active_space_env%mos_active, active_space_env%mos_inactive)
NULLIFY (active_space_env%ks_sub, active_space_env%p_ref)
NULLIFY (active_space_env%ks_sub, active_space_env%p_active)
NULLIFY (active_space_env%vxc_sub, active_space_env%h_sub)
NULLIFY (active_space_env%fock_sub, active_space_env%pmat_inactive)
END SUBROUTINE create_active_space_type
! **************************************************************************************************
!> \brief ...
!> \param active_space_env ...
!> \brief Releases all quantities in the active space environment.
!> \param active_space_env the active space environment to be released
! **************************************************************************************************
SUBROUTINE release_active_space_type(active_space_env)
TYPE(active_space_type), POINTER :: active_space_env
@ -163,11 +163,11 @@ CONTAINS
CALL release_eri_type(active_space_env%eri)
IF (ASSOCIATED(active_space_env%p_ref)) THEN
DO isp = 1, SIZE(active_space_env%p_ref)
CALL cp_fm_release(active_space_env%p_ref(isp)%matrix)
IF (ASSOCIATED(active_space_env%p_active)) THEN
DO isp = 1, SIZE(active_space_env%p_active)
CALL cp_fm_release(active_space_env%p_active(isp)%matrix)
END DO
DEALLOCATE (active_space_env%p_ref)
DEALLOCATE (active_space_env%p_active)
END IF
IF (ASSOCIATED(active_space_env%ks_sub)) THEN
@ -207,8 +207,8 @@ CONTAINS
END SUBROUTINE release_active_space_type
! **************************************************************************************************
!> \brief ...
!> \param eri_env ...
!> \brief Releases the ERI environment type.
!> \param eri_env the ERI environment to be released
! **************************************************************************************************
SUBROUTINE release_eri_type(eri_env)
TYPE(eri_type) :: eri_env
@ -279,8 +279,8 @@ CONTAINS
! **************************************************************************************************
!> \brief calculates index range for processor in group mp_group
!> \param nindex ...
!> \param mp_group ...
!> \param nindex the number of indices
!> \param mp_group message-passing group ID
!> \return a range tuple
!> \par History
!> 04.2016 created [JGH]

View file

@ -0,0 +1,33 @@
# runs are executed in the same order as in this file
# the second field tells which test should be run in order to compare with the last available output
# e.g. 0 means do not compare anything, running is enough
# 1 compares the last total energy in the file
# for details see cp2k/tools/do_regtest
#
h2_gapw_2-2.inp 1 1e-12 -1.12703481947359
h2_gapw_2-2.inp 92 1e-8 4.08762365
h2_gapw_2-3.inp 1 1e-12 -1.12703481947359
h2_gapw_2-3.inp 92 1e-8 6.34129968
h2_gapw_2-4.inp 1 1e-12 -1.12703481947359
h2_gapw_2-4.inp 92 1e-8 10.57997133
h2_gapw_pp_2-2.inp 1 1e-12 -1.12609343153655
h2_gapw_pp_2-2.inp 92 1e-8 4.08439200
h2_gapw_pp_2-3.inp 1 1e-12 -1.12609343153655
h2_gapw_pp_2-3.inp 92 1e-8 6.33490411
h2_gapw_pp_2-4.inp 1 1e-12 -1.12609343153655
h2_gapw_pp_2-4.inp 92 1e-8 10.58497448
h2_gpw_pp_2-2.inp 1 1e-12 -1.12622646044780
h2_gpw_pp_2-2.inp 92 1e-8 4.08480362
h2_gpw_pp_2-3.inp 1 1e-12 -1.12622646044780
h2_gpw_pp_2-3.inp 92 1e-8 6.33542725
h2_gpw_pp_2-4.inp 1 1e-12 -1.12622646044780
h2_gpw_pp_2-4.inp 92 1e-8 10.58532335
h2o_gapw_2-2.inp 1 1e-12 -76.011970410506123
h2o_gapw_2-2.inp 92 1e-8 77.48403361
ch2_gapw_2-3.inp 1 1e-12 -38.91914381184247
ch2_gapw_2-3.inp 92 1e-8 50.38752107
ch2_gapw_pp_2-3.inp 1 1e-12 -6.51646227467145
ch2_gapw_pp_2-3.inp 92 1e-8 17.95445655
ch2_gpw_pp_2-3.inp 1 1e-12 -6.51682932586237
ch2_gpw_pp_2-3.inp 92 1e-8 17.95513412
#EOF

View file

@ -0,0 +1,78 @@
&FORCE_EVAL
METHOD Quickstep
&DFT
&QS
METHOD GAPW
&END QS
UKS TRUE
MULTIPLICITY 3
&XC
&XC_FUNCTIONAL NONE
&END XC_FUNCTIONAL
&HF 1.0
&END HF
&END XC
&POISSON
POISSON_SOLVER ANALYTIC
PERIODIC NONE
&END POISSON
&MGRID
CUTOFF 500
&END MGRID
&SCF
ADDED_MOS 17
MAX_SCF 20
&PRINT
&RESTART OFF
&END RESTART
&END PRINT
&END SCF
&PRINT
&AO_MATRICES
CORE_HAMILTONIAN TRUE
KINETIC_ENERGY TRUE
POTENTIAL_ENERGY TRUE
&END AO_MATRICES
&ACTIVE_SPACE
ACTIVE_ELECTRONS 2
ACTIVE_ORBITALS 3 3
INACTIVE_ELECTRONS 3 3
ISOLATED_SYSTEM TRUE
&ERI
METHOD FULL_GPW
PERIODICITY 0 0 0
&END ERI
&ERI_GPW
CUTOFF 500
&END ERI_GPW
&FCIDUMP
FILENAME __STD_OUT__
&END FCIDUMP
&END ACTIVE_SPACE
&END PRINT
&END DFT
&SUBSYS
&CELL
ABC 6.0 6.0 6.0
PERIODIC NONE
&END CELL
&COORD
C 0.000 0.000 0.112
H 0.000 0.974 0.335
H 0.000 -0.974 -0.335
&END COORD
&KIND H
BASIS_SET 6-31G*
POTENTIAL ALL
&END KIND
&KIND C
BASIS_SET 6-31G*
POTENTIAL ALL
&END KIND
&END SUBSYS
&END FORCE_EVAL
&GLOBAL
RUN_TYPE ENERGY
PRINT_LEVEL LOW
PROJECT ch2_gapw
&END GLOBAL

View file

@ -0,0 +1,78 @@
&FORCE_EVAL
METHOD Quickstep
&DFT
&QS
METHOD GAPW
&END QS
UKS TRUE
MULTIPLICITY 3
&XC
&XC_FUNCTIONAL NONE
&END XC_FUNCTIONAL
&HF 1.0
&END HF
&END XC
&POISSON
POISSON_SOLVER ANALYTIC
PERIODIC NONE
&END POISSON
&MGRID
CUTOFF 500
&END MGRID
&SCF
ADDED_MOS 17
MAX_SCF 20
&PRINT
&RESTART OFF
&END RESTART
&END PRINT
&END SCF
&PRINT
&AO_MATRICES
CORE_HAMILTONIAN TRUE
KINETIC_ENERGY TRUE
POTENTIAL_ENERGY TRUE
&END AO_MATRICES
&ACTIVE_SPACE
ACTIVE_ELECTRONS 2
ACTIVE_ORBITALS 3 3
INACTIVE_ELECTRONS 2 2
ISOLATED_SYSTEM TRUE
&ERI
METHOD FULL_GPW
PERIODICITY 0 0 0
&END ERI
&ERI_GPW
CUTOFF 500
&END ERI_GPW
&FCIDUMP
FILENAME __STD_OUT__
&END FCIDUMP
&END ACTIVE_SPACE
&END PRINT
&END DFT
&SUBSYS
&CELL
ABC 6.0 6.0 6.0
PERIODIC NONE
&END CELL
&COORD
C 0.000 0.000 0.112
H 0.000 0.974 0.335
H 0.000 -0.974 -0.335
&END COORD
&KIND H
BASIS_SET 6-31G*
POTENTIAL GTH-HF
&END KIND
&KIND C
BASIS_SET 6-31G*
POTENTIAL GTH-HF
&END KIND
&END SUBSYS
&END FORCE_EVAL
&GLOBAL
RUN_TYPE ENERGY
PRINT_LEVEL LOW
PROJECT ch2_gapw_pp
&END GLOBAL

View file

@ -0,0 +1,78 @@
&FORCE_EVAL
METHOD Quickstep
&DFT
&QS
METHOD GPW
&END QS
UKS TRUE
MULTIPLICITY 3
&XC
&XC_FUNCTIONAL NONE
&END XC_FUNCTIONAL
&HF 1.0
&END HF
&END XC
&POISSON
POISSON_SOLVER ANALYTIC
PERIODIC NONE
&END POISSON
&MGRID
CUTOFF 500
&END MGRID
&SCF
ADDED_MOS 17
MAX_SCF 20
&PRINT
&RESTART OFF
&END RESTART
&END PRINT
&END SCF
&PRINT
&AO_MATRICES
CORE_HAMILTONIAN TRUE
KINETIC_ENERGY TRUE
POTENTIAL_ENERGY TRUE
&END AO_MATRICES
&ACTIVE_SPACE
ACTIVE_ELECTRONS 2
ACTIVE_ORBITALS 3 3
INACTIVE_ELECTRONS 2 2
ISOLATED_SYSTEM TRUE
&ERI
METHOD FULL_GPW
PERIODICITY 0 0 0
&END ERI
&ERI_GPW
CUTOFF 500
&END ERI_GPW
&FCIDUMP
FILENAME __STD_OUT__
&END FCIDUMP
&END ACTIVE_SPACE
&END PRINT
&END DFT
&SUBSYS
&CELL
ABC 6.0 6.0 6.0
PERIODIC NONE
&END CELL
&COORD
C 0.000 0.000 0.112
H 0.000 0.974 0.335
H 0.000 -0.974 -0.335
&END COORD
&KIND H
BASIS_SET 6-31G*
POTENTIAL GTH-HF
&END KIND
&KIND C
BASIS_SET 6-31G*
POTENTIAL GTH-HF
&END KIND
&END SUBSYS
&END FORCE_EVAL
&GLOBAL
RUN_TYPE ENERGY
PRINT_LEVEL LOW
PROJECT ch2_gpw_pp
&END GLOBAL

View file

@ -0,0 +1,70 @@
&FORCE_EVAL
METHOD Quickstep
&DFT
&QS
METHOD GAPW
&END QS
&XC
&XC_FUNCTIONAL NONE
&END XC_FUNCTIONAL
&HF 1.0
&END HF
&END XC
&POISSON
POISSON_SOLVER ANALYTIC
PERIODIC NONE
&END POISSON
&MGRID
CUTOFF 500
&END MGRID
&SCF
ADDED_MOS 3
MAX_SCF 10
&PRINT
&RESTART OFF
&END RESTART
&END PRINT
&END SCF
&PRINT
&AO_MATRICES
CORE_HAMILTONIAN TRUE
KINETIC_ENERGY TRUE
POTENTIAL_ENERGY TRUE
&END AO_MATRICES
&ACTIVE_SPACE
ACTIVE_ELECTRONS 2
ACTIVE_ORBITALS 2
ISOLATED_SYSTEM TRUE
&ERI
METHOD FULL_GPW
PERIODICITY 0 0 0
&END ERI
&ERI_GPW
CUTOFF 500
&END ERI_GPW
&FCIDUMP
FILENAME __STD_OUT__
&END FCIDUMP
&END ACTIVE_SPACE
&END PRINT
&END DFT
&SUBSYS
&CELL
ABC 6.0 6.0 6.0
PERIODIC NONE
&END CELL
&COORD
H 0.000 0.000 0.356
H 0.000 0.000 -0.356
&END COORD
&KIND H
BASIS_SET 6-31G*
POTENTIAL ALL
&END KIND
&END SUBSYS
&END FORCE_EVAL
&GLOBAL
RUN_TYPE ENERGY
PRINT_LEVEL LOW
PROJECT h2_gapw
&END GLOBAL

View file

@ -0,0 +1,70 @@
&FORCE_EVAL
METHOD Quickstep
&DFT
&QS
METHOD GAPW
&END QS
&XC
&XC_FUNCTIONAL NONE
&END XC_FUNCTIONAL
&HF 1.0
&END HF
&END XC
&POISSON
POISSON_SOLVER ANALYTIC
PERIODIC NONE
&END POISSON
&MGRID
CUTOFF 500
&END MGRID
&SCF
ADDED_MOS 3
MAX_SCF 10
&PRINT
&RESTART OFF
&END RESTART
&END PRINT
&END SCF
&PRINT
&AO_MATRICES
CORE_HAMILTONIAN TRUE
KINETIC_ENERGY TRUE
POTENTIAL_ENERGY TRUE
&END AO_MATRICES
&ACTIVE_SPACE
ACTIVE_ELECTRONS 2
ACTIVE_ORBITALS 3
ISOLATED_SYSTEM TRUE
&ERI
METHOD FULL_GPW
PERIODICITY 0 0 0
&END ERI
&ERI_GPW
CUTOFF 500
&END ERI_GPW
&FCIDUMP
FILENAME __STD_OUT__
&END FCIDUMP
&END ACTIVE_SPACE
&END PRINT
&END DFT
&SUBSYS
&CELL
ABC 6.0 6.0 6.0
PERIODIC NONE
&END CELL
&COORD
H 0.000 0.000 0.356
H 0.000 0.000 -0.356
&END COORD
&KIND H
BASIS_SET 6-31G*
POTENTIAL ALL
&END KIND
&END SUBSYS
&END FORCE_EVAL
&GLOBAL
RUN_TYPE ENERGY
PRINT_LEVEL LOW
PROJECT h2_gapw
&END GLOBAL

View file

@ -0,0 +1,70 @@
&FORCE_EVAL
METHOD Quickstep
&DFT
&QS
METHOD GAPW
&END QS
&XC
&XC_FUNCTIONAL NONE
&END XC_FUNCTIONAL
&HF 1.0
&END HF
&END XC
&POISSON
POISSON_SOLVER ANALYTIC
PERIODIC NONE
&END POISSON
&MGRID
CUTOFF 500
&END MGRID
&SCF
ADDED_MOS 3
MAX_SCF 10
&PRINT
&RESTART OFF
&END RESTART
&END PRINT
&END SCF
&PRINT
&AO_MATRICES
CORE_HAMILTONIAN TRUE
KINETIC_ENERGY TRUE
POTENTIAL_ENERGY TRUE
&END AO_MATRICES
&ACTIVE_SPACE
ACTIVE_ELECTRONS 2
ACTIVE_ORBITALS 4
ISOLATED_SYSTEM TRUE
&ERI
METHOD FULL_GPW
PERIODICITY 0 0 0
&END ERI
&ERI_GPW
CUTOFF 500
&END ERI_GPW
&FCIDUMP
FILENAME __STD_OUT__
&END FCIDUMP
&END ACTIVE_SPACE
&END PRINT
&END DFT
&SUBSYS
&CELL
ABC 6.0 6.0 6.0
PERIODIC NONE
&END CELL
&COORD
H 0.000 0.000 0.356
H 0.000 0.000 -0.356
&END COORD
&KIND H
BASIS_SET 6-31G*
POTENTIAL ALL
&END KIND
&END SUBSYS
&END FORCE_EVAL
&GLOBAL
RUN_TYPE ENERGY
PRINT_LEVEL LOW
PROJECT h2_gapw
&END GLOBAL

View file

@ -0,0 +1,70 @@
&FORCE_EVAL
METHOD Quickstep
&DFT
&QS
METHOD GAPW
&END QS
&XC
&XC_FUNCTIONAL NONE
&END XC_FUNCTIONAL
&HF 1.0
&END HF
&END XC
&POISSON
POISSON_SOLVER ANALYTIC
PERIODIC NONE
&END POISSON
&MGRID
CUTOFF 500
&END MGRID
&SCF
ADDED_MOS 3
MAX_SCF 10
&PRINT
&RESTART OFF
&END RESTART
&END PRINT
&END SCF
&PRINT
&AO_MATRICES
CORE_HAMILTONIAN TRUE
KINETIC_ENERGY TRUE
POTENTIAL_ENERGY TRUE
&END AO_MATRICES
&ACTIVE_SPACE
ACTIVE_ELECTRONS 2
ACTIVE_ORBITALS 2
ISOLATED_SYSTEM TRUE
&ERI
METHOD FULL_GPW
PERIODICITY 0 0 0
&END ERI
&ERI_GPW
CUTOFF 500
&END ERI_GPW
&FCIDUMP
FILENAME __STD_OUT__
&END FCIDUMP
&END ACTIVE_SPACE
&END PRINT
&END DFT
&SUBSYS
&CELL
ABC 6.0 6.0 6.0
PERIODIC NONE
&END CELL
&COORD
H 0.000 0.000 0.356
H 0.000 0.000 -0.356
&END COORD
&KIND H
BASIS_SET 6-31G*
POTENTIAL GTH-HF
&END KIND
&END SUBSYS
&END FORCE_EVAL
&GLOBAL
RUN_TYPE ENERGY
PRINT_LEVEL LOW
PROJECT h2_gapw_pp
&END GLOBAL

View file

@ -0,0 +1,70 @@
&FORCE_EVAL
METHOD Quickstep
&DFT
&QS
METHOD GAPW
&END QS
&XC
&XC_FUNCTIONAL NONE
&END XC_FUNCTIONAL
&HF 1.0
&END HF
&END XC
&POISSON
POISSON_SOLVER ANALYTIC
PERIODIC NONE
&END POISSON
&MGRID
CUTOFF 500
&END MGRID
&SCF
ADDED_MOS 3
MAX_SCF 10
&PRINT
&RESTART OFF
&END RESTART
&END PRINT
&END SCF
&PRINT
&AO_MATRICES
CORE_HAMILTONIAN TRUE
KINETIC_ENERGY TRUE
POTENTIAL_ENERGY TRUE
&END AO_MATRICES
&ACTIVE_SPACE
ACTIVE_ELECTRONS 2
ACTIVE_ORBITALS 3
ISOLATED_SYSTEM TRUE
&ERI
METHOD FULL_GPW
PERIODICITY 0 0 0
&END ERI
&ERI_GPW
CUTOFF 500
&END ERI_GPW
&FCIDUMP
FILENAME __STD_OUT__
&END FCIDUMP
&END ACTIVE_SPACE
&END PRINT
&END DFT
&SUBSYS
&CELL
ABC 6.0 6.0 6.0
PERIODIC NONE
&END CELL
&COORD
H 0.000 0.000 0.356
H 0.000 0.000 -0.356
&END COORD
&KIND H
BASIS_SET 6-31G*
POTENTIAL GTH-HF
&END KIND
&END SUBSYS
&END FORCE_EVAL
&GLOBAL
RUN_TYPE ENERGY
PRINT_LEVEL LOW
PROJECT h2_gapw_pp
&END GLOBAL

View file

@ -0,0 +1,70 @@
&FORCE_EVAL
METHOD Quickstep
&DFT
&QS
METHOD GAPW
&END QS
&XC
&XC_FUNCTIONAL NONE
&END XC_FUNCTIONAL
&HF 1.0
&END HF
&END XC
&POISSON
POISSON_SOLVER ANALYTIC
PERIODIC NONE
&END POISSON
&MGRID
CUTOFF 500
&END MGRID
&SCF
ADDED_MOS 3
MAX_SCF 10
&PRINT
&RESTART OFF
&END RESTART
&END PRINT
&END SCF
&PRINT
&AO_MATRICES
CORE_HAMILTONIAN TRUE
KINETIC_ENERGY TRUE
POTENTIAL_ENERGY TRUE
&END AO_MATRICES
&ACTIVE_SPACE
ACTIVE_ELECTRONS 2
ACTIVE_ORBITALS 4
ISOLATED_SYSTEM TRUE
&ERI
METHOD FULL_GPW
PERIODICITY 0 0 0
&END ERI
&ERI_GPW
CUTOFF 500
&END ERI_GPW
&FCIDUMP
FILENAME __STD_OUT__
&END FCIDUMP
&END ACTIVE_SPACE
&END PRINT
&END DFT
&SUBSYS
&CELL
ABC 6.0 6.0 6.0
PERIODIC NONE
&END CELL
&COORD
H 0.000 0.000 0.356
H 0.000 0.000 -0.356
&END COORD
&KIND H
BASIS_SET 6-31G*
POTENTIAL GTH-HF
&END KIND
&END SUBSYS
&END FORCE_EVAL
&GLOBAL
RUN_TYPE ENERGY
PRINT_LEVEL LOW
PROJECT h2_gapw_pp
&END GLOBAL

View file

@ -0,0 +1,70 @@
&FORCE_EVAL
METHOD Quickstep
&DFT
&QS
METHOD GPW
&END QS
&XC
&XC_FUNCTIONAL NONE
&END XC_FUNCTIONAL
&HF 1.0
&END HF
&END XC
&POISSON
POISSON_SOLVER ANALYTIC
PERIODIC NONE
&END POISSON
&MGRID
CUTOFF 500
&END MGRID
&SCF
ADDED_MOS 3
MAX_SCF 10
&PRINT
&RESTART OFF
&END RESTART
&END PRINT
&END SCF
&PRINT
&AO_MATRICES
CORE_HAMILTONIAN TRUE
KINETIC_ENERGY TRUE
POTENTIAL_ENERGY TRUE
&END AO_MATRICES
&ACTIVE_SPACE
ACTIVE_ELECTRONS 2
ACTIVE_ORBITALS 2
ISOLATED_SYSTEM TRUE
&ERI
METHOD FULL_GPW
PERIODICITY 0 0 0
&END ERI
&ERI_GPW
CUTOFF 500
&END ERI_GPW
&FCIDUMP
FILENAME __STD_OUT__
&END FCIDUMP
&END ACTIVE_SPACE
&END PRINT
&END DFT
&SUBSYS
&CELL
ABC 6.0 6.0 6.0
PERIODIC NONE
&END CELL
&COORD
H 0.000 0.000 0.356
H 0.000 0.000 -0.356
&END COORD
&KIND H
BASIS_SET 6-31G*
POTENTIAL GTH-HF
&END KIND
&END SUBSYS
&END FORCE_EVAL
&GLOBAL
RUN_TYPE ENERGY
PRINT_LEVEL LOW
PROJECT h2_gpw_pp
&END GLOBAL

View file

@ -0,0 +1,70 @@
&FORCE_EVAL
METHOD Quickstep
&DFT
&QS
METHOD GPW
&END QS
&XC
&XC_FUNCTIONAL NONE
&END XC_FUNCTIONAL
&HF 1.0
&END HF
&END XC
&POISSON
POISSON_SOLVER ANALYTIC
PERIODIC NONE
&END POISSON
&MGRID
CUTOFF 500
&END MGRID
&SCF
ADDED_MOS 3
MAX_SCF 10
&PRINT
&RESTART OFF
&END RESTART
&END PRINT
&END SCF
&PRINT
&AO_MATRICES
CORE_HAMILTONIAN TRUE
KINETIC_ENERGY TRUE
POTENTIAL_ENERGY TRUE
&END AO_MATRICES
&ACTIVE_SPACE
ACTIVE_ELECTRONS 2
ACTIVE_ORBITALS 3
ISOLATED_SYSTEM TRUE
&ERI
METHOD FULL_GPW
PERIODICITY 0 0 0
&END ERI
&ERI_GPW
CUTOFF 500
&END ERI_GPW
&FCIDUMP
FILENAME __STD_OUT__
&END FCIDUMP
&END ACTIVE_SPACE
&END PRINT
&END DFT
&SUBSYS
&CELL
ABC 6.0 6.0 6.0
PERIODIC NONE
&END CELL
&COORD
H 0.000 0.000 0.356
H 0.000 0.000 -0.356
&END COORD
&KIND H
BASIS_SET 6-31G*
POTENTIAL GTH-HF
&END KIND
&END SUBSYS
&END FORCE_EVAL
&GLOBAL
RUN_TYPE ENERGY
PRINT_LEVEL LOW
PROJECT h2_gpw_pp
&END GLOBAL

View file

@ -0,0 +1,70 @@
&FORCE_EVAL
METHOD Quickstep
&DFT
&QS
METHOD GPW
&END QS
&XC
&XC_FUNCTIONAL NONE
&END XC_FUNCTIONAL
&HF 1.0
&END HF
&END XC
&POISSON
POISSON_SOLVER ANALYTIC
PERIODIC NONE
&END POISSON
&MGRID
CUTOFF 500
&END MGRID
&SCF
ADDED_MOS 3
MAX_SCF 10
&PRINT
&RESTART OFF
&END RESTART
&END PRINT
&END SCF
&PRINT
&AO_MATRICES
CORE_HAMILTONIAN TRUE
KINETIC_ENERGY TRUE
POTENTIAL_ENERGY TRUE
&END AO_MATRICES
&ACTIVE_SPACE
ACTIVE_ELECTRONS 2
ACTIVE_ORBITALS 4
ISOLATED_SYSTEM TRUE
&ERI
METHOD FULL_GPW
PERIODICITY 0 0 0
&END ERI
&ERI_GPW
CUTOFF 500
&END ERI_GPW
&FCIDUMP
FILENAME __STD_OUT__
&END FCIDUMP
&END ACTIVE_SPACE
&END PRINT
&END DFT
&SUBSYS
&CELL
ABC 6.0 6.0 6.0
PERIODIC NONE
&END CELL
&COORD
H 0.000 0.000 0.356
H 0.000 0.000 -0.356
&END COORD
&KIND H
BASIS_SET 6-31G*
POTENTIAL GTH-HF
&END KIND
&END SUBSYS
&END FORCE_EVAL
&GLOBAL
RUN_TYPE ENERGY
PRINT_LEVEL LOW
PROJECT h2_gpw_pp
&END GLOBAL

View file

@ -0,0 +1,75 @@
&FORCE_EVAL
METHOD Quickstep
&DFT
&QS
METHOD GAPW
&END QS
&XC
&XC_FUNCTIONAL NONE
&END XC_FUNCTIONAL
&HF 1.0
&END HF
&END XC
&POISSON
POISSON_SOLVER ANALYTIC
PERIODIC NONE
&END POISSON
&MGRID
CUTOFF 500
&END MGRID
&SCF
ADDED_MOS 17
MAX_SCF 20
&PRINT
&RESTART OFF
&END RESTART
&END PRINT
&END SCF
&PRINT
&AO_MATRICES
CORE_HAMILTONIAN TRUE
KINETIC_ENERGY TRUE
POTENTIAL_ENERGY TRUE
&END AO_MATRICES
&ACTIVE_SPACE
ACTIVE_ELECTRONS 2
ACTIVE_ORBITALS 2
ISOLATED_SYSTEM TRUE
&ERI
METHOD FULL_GPW
PERIODICITY 0 0 0
&END ERI
&ERI_GPW
CUTOFF 500
&END ERI_GPW
&FCIDUMP
FILENAME __STD_OUT__
&END FCIDUMP
&END ACTIVE_SPACE
&END PRINT
&END DFT
&SUBSYS
&CELL
ABC 6.0 6.0 6.0
PERIODIC NONE
&END CELL
&COORD
O 0.000 0.000 0.115
H 0.000 0.754 -0.459
H 0.000 -0.754 -0.459
&END COORD
&KIND H
BASIS_SET 6-31G*
POTENTIAL ALL
&END KIND
&KIND O
BASIS_SET 6-31G*
POTENTIAL ALL
&END KIND
&END SUBSYS
&END FORCE_EVAL
&GLOBAL
RUN_TYPE ENERGY
PRINT_LEVEL LOW
PROJECT h2_gapw
&END GLOBAL

View file

@ -272,3 +272,4 @@ QS/regtest-nlmo
QS/regtest-hfx-ri libint
Fist/regtest-gal19
NNP/regtest-1
QS/regtest-as-1 libint

View file

@ -1,4 +1,4 @@
91
92
Total energy:!3
MD| Potential energy!5
Total energy \[eV\]:!4
@ -90,6 +90,7 @@ XAS excitation energy (eV): !7
Electronic density on regular grids:!7
Final localization: !3
Ionization potentials for XPS !8
FCIDUMP| Checksum: !3
#
# 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