From cb585f348e66d60b3b0c0d5a69f5117b53b9c8e6 Mon Sep 17 00:00:00 2001 From: thfroitzheim <92028749+thfroitzheim@users.noreply.github.com> Date: Sat, 6 Jul 2024 10:52:45 +0200 Subject: [PATCH] Further preparation for the new CEH version. Fix d-orbital ordering, fix diatomic-frame derivative, update Hamiltonian construction in CEH --- src/tblite/ceh/h0.f90 | 96 +- src/tblite/integral/diat_trafo.f90 | 922 ++++++++++--- src/tblite/integral/dipole.f90 | 103 +- src/tblite/integral/multipole.f90 | 108 +- src/tblite/integral/overlap.f90 | 191 ++- src/tblite/integral/trafo.f90 | 56 +- test/unit/test_ceh.f90 | 660 ++++----- test/unit/test_hamiltonian.f90 | 189 ++- test/unit/test_integral_multipole.f90 | 122 +- test/unit/test_integral_overlap.f90 | 1795 +++++++++++++++++++++---- 10 files changed, 2985 insertions(+), 1257 deletions(-) diff --git a/src/tblite/ceh/h0.f90 b/src/tblite/ceh/h0.f90 index 156b15fd..6bec9f4c 100644 --- a/src/tblite/ceh/h0.f90 +++ b/src/tblite/ceh/h0.f90 @@ -25,9 +25,9 @@ module tblite_ceh_h0 use tblite_xtb_spec, only : tb_h0spec use tblite_xtb_h0, only : tb_hamiltonian use tblite_integral_dipole, only: get_dipole_integrals, dipole_cgto, & - & dipole_cgto_diat_scal, maxl, msao - use tblite_integral_diat_trafo, only: relvec + & maxl, msao, smap use tblite_adjlist, only : adjacency_list + use tblite_integral_diat_trafo, only: diat_trafo implicit none private @@ -105,15 +105,15 @@ subroutine get_hamiltonian(mol, trans, list, bas, h0, selfenergy, & real(wp), intent(out) :: overlap(:, :) !> Dipole moment integral matrix real(wp), intent(out) :: dpint(:, :, :) - !> Diatomic frame scaled overlap integral matrix + !> Diatomic frame-scaled overlap integral matrix real(wp), intent(out) :: overlap_diat(:, :) !> Effective Hamiltonian real(wp), intent(out) :: hamiltonian(:, :) integer :: itr, img, inl, ii, jj, is, js, jzp, izp, nao - integer :: iat, ish, jat, jsh, k, iao, jao, ij - real(wp) :: hij, rr, r2, vec(3), vec_diat_trafo(3), dtmpj(3) - real(wp), allocatable :: stmp(:), dtmpi(:, :), stmp_diat(:) + integer :: iat, ish, jat, jsh, k, iao, jao, ij, iaosh, jaosh + real(wp) :: hij, rr, r2, vec(3), dtmpj(3) + real(wp), allocatable :: stmp(:), dtmpi(:, :), block_overlap(:,:) integer :: kl, l overlap(:, :) = 0.0_wp @@ -122,12 +122,13 @@ subroutine get_hamiltonian(mol, trans, list, bas, h0, selfenergy, & hamiltonian(:, :) = 0.0_wp ! Allocate temporary matrices for overlap, diatomic frame scaled overlap and dipole moment integrals - allocate(stmp(msao(bas%maxl)**2), stmp_diat(msao(bas%maxl)**2), dtmpi(3, msao(bas%maxl)**2)) + allocate(stmp(msao(bas%maxl)**2), dtmpi(3, msao(bas%maxl)**2), & + & block_overlap(smap(bas%maxl+1),smap(bas%maxl+1))) !$omp parallel do schedule(runtime) default(none) & !$omp shared(mol, bas, trans, list, overlap, overlap_diat, dpint, hamiltonian, h0, selfenergy) & - !$omp private(iat, jat, izp, jzp, itr, is, js, ish, jsh, ii, jj, iao, jao, nao, ij, k) & - !$omp private(r2, vec, vec_diat_trafo, stmp, stmp_diat, dtmpi, dtmpj, hij, rr, inl, img) + !$omp private(iat, jat, izp, jzp, itr, is, js, ish, jsh, ii, jj, iao, jao, nao, ij, iaosh, jaosh, k) & + !$omp private(r2, vec, stmp, block_overlap, dtmpi, dtmpj, hij, rr, inl, img) do iat = 1, mol%nat izp = mol%id(iat) is = bas%ish_at(iat) @@ -140,19 +141,20 @@ subroutine get_hamiltonian(mol, trans, list, bas, h0, selfenergy, & vec(:) = mol%xyz(:, iat) - mol%xyz(:, jat) - trans(:, itr) r2 = vec(1)**2 + vec(2)**2 + vec(3)**2 rr = sqrt(sqrt(r2) / (h0%rad(jzp) + h0%rad(izp))) - call relvec(vec, sqrt(r2), vec_diat_trafo) + + ! Get the overlap and dipole integrals for the current diatomic pair + block_overlap = 0.0_wp do ish = 1, bas%nsh_id(izp) ii = bas%iao_sh(is+ish) + iaosh = smap(ish-1) ! Offset for the block overlap matrix do jsh = 1, bas%nsh_id(jzp) jj = bas%iao_sh(js+jsh) + jaosh = smap(jsh-1) ! Offset for the block overlap matrix - call dipole_cgto_diat_scal(bas%cgto(jsh,jzp), bas%cgto(ish,izp), r2, vec, & - bas%intcut, vec_diat_trafo, h0%ksig(izp,jzp), h0%kpi(izp,jzp), h0%kdel(izp,jzp), & - & stmp, stmp_diat, dtmpi) - - hij = 0.5_wp * (selfenergy(is+ish) + selfenergy(js+jsh)) & - * h0%hscale(jsh, ish, jzp, izp) + call dipole_cgto(bas%cgto(jsh,jzp), bas%cgto(ish,izp), & + & r2, vec, bas%intcut, stmp, dtmpi) + ! Store the overlap and dipole matrix nao = msao(bas%cgto(jsh, jzp)%ang) do iao = 1, msao(bas%cgto(ish, izp)%ang) do jao = 1, nao @@ -166,8 +168,8 @@ subroutine get_hamiltonian(mol, trans, list, bas, h0, selfenergy, & + stmp(ij) !$omp atomic - overlap_diat(jj+jao, ii+iao) = overlap_diat(jj+jao, ii+iao) & - + stmp_diat(ij) + block_overlap(jaosh+jao, iaosh+iao) = block_overlap(jaosh+jao, iaosh+iao) & + + stmp(ij) do k = 1, 3 !$omp atomic @@ -175,32 +177,61 @@ subroutine get_hamiltonian(mol, trans, list, bas, h0, selfenergy, & + dtmpi(k, ij) end do - !$omp atomic - hamiltonian(jj+jao, ii+iao) = hamiltonian(jj+jao, ii+iao) & - + stmp_diat(ij) * hij - if (iat /= jat) then !$omp atomic overlap(ii+iao, jj+jao) = overlap(ii+iao, jj+jao) & + stmp(ij) - !$omp atomic - overlap_diat(ii+iao, jj+jao) = overlap_diat(ii+iao, jj+jao) & - + stmp_diat(ij) - do k = 1, 3 !$omp atomic dpint(k, ii+iao, jj+jao) = dpint(k, ii+iao, jj+jao) & + dtmpj(k) end do + end if + end do + end do + end do + end do + + ! Diatomic frame transformation and scaling of the overlap + call diat_trafo(block_overlap, vec, h0%ksig(izp,jzp), h0%kpi(izp,jzp), h0%kdel(izp,jzp), & + & bas%nsh_at(jat)-1, bas%nsh_at(iat)-1) + + ! Setup the Hamiltonian and store the diatomic frame scaled overlap. + do ish = 1, bas%nsh_id(izp) + ii = bas%iao_sh(is+ish) + iaosh = smap(ish-1) ! Offset for the block overlap matrix + do jsh = 1, bas%nsh_id(jzp) + jj = bas%iao_sh(js+jsh) + jaosh = smap(jsh-1) ! Offset for the block overlap matrix + + hij = 0.5_wp * h0%hscale(jsh, ish, jzp, izp) * (selfenergy(is+ish) + selfenergy(js+jsh)) + + nao = msao(bas%cgto(jsh, jzp)%ang) + do iao = 1, msao(bas%cgto(ish, izp)%ang) + do jao = 1, nao + ij = jao + nao*(iao-1) + + !$omp atomic + overlap_diat(jj+jao, ii+iao) = overlap_diat(jj+jao, ii+iao) & + + block_overlap(jaosh+jao, iaosh+iao) + + !$omp atomic + hamiltonian(jj+jao, ii+iao) = hamiltonian(jj+jao, ii+iao) & + + block_overlap(jaosh+jao, iaosh+iao) * hij + + if (iat /= jat) then + !$omp atomic + overlap_diat(ii+iao, jj+jao) = overlap_diat(ii+iao, jj+jao) & + + block_overlap(jaosh+jao, iaosh+iao) + !$omp atomic hamiltonian(ii+iao, jj+jao) = hamiltonian(ii+iao, jj+jao) & - + stmp_diat(ij) * hij + + block_overlap(jaosh+jao, iaosh+iao) * hij end if end do end do - end do end do @@ -223,10 +254,6 @@ subroutine get_hamiltonian(mol, trans, list, bas, h0, selfenergy, & jj = bas%iao_sh(is+jsh) call dipole_cgto(bas%cgto(jsh,izp), bas%cgto(ish,izp), & & r2, vec, bas%intcut, stmp, dtmpi) - - hij = 0.5_wp * (selfenergy(is+ish) + selfenergy(is+jsh)) & - & * h0%hscale(ish, jsh, izp, izp) - nao = msao(bas%cgto(jsh, izp)%ang) do iao = 1, msao(bas%cgto(ish, izp)%ang) do jao = 1, nao @@ -239,13 +266,10 @@ subroutine get_hamiltonian(mol, trans, list, bas, h0, selfenergy, & dpint(:, jj+jao, ii+iao) = dpint(:, jj+jao, ii+iao) & + dtmpi(:, ij) - - hamiltonian(jj+jao, ii+iao) = hamiltonian(jj+jao, ii+iao) & - + stmp(ij) * hij end do end do end do - ! diagonal term (AO(i) == AO(j)) + ! diagonal term (AO(i) == AO(j)) as on-site off-diagonal the hamiltonian is zero do iao = 1, msao(bas%cgto(ish, izp)%ang) hamiltonian(ii+iao, ii+iao) = selfenergy(is + ish) enddo diff --git a/src/tblite/integral/diat_trafo.f90 b/src/tblite/integral/diat_trafo.f90 index 1bf5768f..dc067419 100644 --- a/src/tblite/integral/diat_trafo.f90 +++ b/src/tblite/integral/diat_trafo.f90 @@ -15,7 +15,7 @@ ! along with tblite. If not, see . !> @file tblite/integral/diat_trafo.f90 -!> Provides help tools for evaluation of the diatomic overlap +!> Evaluation of the diatomic scaled overlap module tblite_integral_diat_trafo use mctc_env, only : wp use tblite_blas, only: gemm @@ -23,206 +23,234 @@ module tblite_integral_diat_trafo implicit none private - public :: relvec, diat_trafo + public :: diat_trafo, diat_trafo_grad + + !> Dimension of trafo matrix for highest angular momentum. + integer, parameter :: sdim(0:6) = [1, 4, 9, 16, 25, 36, 49] contains !> Transformation to the diatomic frame and back: - !> 1. set up the transformation matrix, - !> 2. transform to the diatomic frame - !> 3. scale in the diatomic frame (bonding type specific) - !> 4. transform back - !> The transformation can be applied to both the overlap and each dimension of its derivative - pure subroutine diat_trafo(block_overlap, vec_diat_trafo, ksig, kpi, kdel, maxl) - !> Transformation vector for the diatomic frame - real(wp),intent(inout) :: block_overlap(9,9) - real(wp),intent(in) :: vec_diat_trafo(3) + pure subroutine diat_trafo(block_overlap, vec, ksig, kpi, kdel, maxlj, maxli) + !> Diatomic block of CGTOs to be transformed (+ scaled) + real(wp),intent(inout) :: block_overlap(:,:) + !> Transformation vector for the diatomic frame (i.e. vector between the two centers) + real(wp),intent(in) :: vec(3) + !> Scaling parameters for different bonding contributions real(wp),intent(in) :: ksig, kpi, kdel - integer,intent(in) :: maxl - real(wp) :: trafomat(9,9) - real(wp), allocatable :: eff_tra_mat(:,:), eff_block_overlap(:,:), tmp(:,:), & - & transformed_s(:,:) - - ! 1. Calculate the transformation matrix - call harmtr(maxl, vec_diat_trafo, trafomat) - select case (maxl) - case (0) - allocate(eff_tra_mat(1,1),transformed_s(1,1), & - & eff_block_overlap(1,1), tmp(1,1), source=0.0_wp) - eff_tra_mat(1,1) = trafomat(1,1) - eff_block_overlap(1,1) = block_overlap(1,1) - case (1) - allocate(eff_tra_mat(4,4), transformed_s(4,4), & - & eff_block_overlap(4,4), tmp(4,4), source=0.0_wp) - eff_tra_mat(1:4,1:4) = trafomat(1:4,1:4) - eff_block_overlap(1:4,1:4) = block_overlap(1:4,1:4) - case (2) - allocate(eff_tra_mat(9,9), transformed_s(9,9), & - & eff_block_overlap(9,9), tmp(9,9), source=0.0_wp) - eff_tra_mat(1:9,1:9) = trafomat(1:9,1:9) - eff_block_overlap(1:9,1:9) = block_overlap(1:9,1:9) - end select - - ! 2. Transform the submatrix - ! trans_block_s = matmul(matmul(transpose(trafomat), block_overlap),trafomat) - ! trans_block_s = O^T * S * O + !> Highest angular momentum of atom j (first index) + integer,intent(in) :: maxlj + !> Highest angular momentum of atom i (second index) + integer,intent(in) :: maxli + + integer :: dimj, dimi, maxl + real(wp), allocatable :: trafomat(:,:), tmp(:,:), transformed_s(:,:) + + ! Select the dimensions of the transformation matrix + dimj = sdim(maxlj) + dimi = sdim(maxli) + maxl = max(maxlj, maxli) + + allocate(trafomat(sdim(maxl), sdim(maxl)), transformed_s(dimj,dimi), & + & tmp(dimj,dimi), source=0.0_wp) + + ! 1. Setup the transformation matrix + call harmtr(maxl, vec, trafomat) + + ! 2. Transform the overlap submatrix to the diatomic frame: S' = O^T * S * O if (maxl > 0) then - call gemm(amat=eff_tra_mat,bmat=eff_block_overlap,cmat=tmp,transa='T',transb='N') - call gemm(amat=tmp,bmat=eff_tra_mat,cmat=transformed_s,transa='N',transb='N') + call gemm(amat=trafomat(1:dimj,1:dimj), bmat=block_overlap(1:dimj,1:dimi), & + & cmat=tmp, transa='T', transb='N') + call gemm(amat=tmp, bmat=trafomat(1:dimi,1:dimi), & + & cmat=transformed_s, transa='N', transb='N') else - transformed_s(1,1) = eff_block_overlap(1,1) + transformed_s(1,1) = block_overlap(1,1) endif - ! 3.1. Scale elements in diatomic frame - ! 3.2. Scale elements with equivalent bonding situation in the - ! diatomic frame. - transformed_s(1,1) = transformed_s(1,1)*ksig ! Sigma bond s <-> s + ! 3. Scale elements in the diatomic frame + call scale_diatomic_frame(transformed_s, ksig, kpi, kdel, maxlj, maxli) + + ! 4. Transform the overlap submatrix back to original frame: Ssc = O * Ssc' * O^T + block_overlap = 0.0_wp if (maxl > 0) then - transformed_s(1,3) = transformed_s(1,3)*ksig ! Sigma bond s <-> pz - transformed_s(3,1) = transformed_s(3,1)*ksig ! Sigma bond pz <-> s - transformed_s(3,3) = transformed_s(3,3)*ksig ! Sigma bond pz <-> pz - transformed_s(4,4) = transformed_s(4,4)*kpi ! Pi bond px <-> px - transformed_s(2,2) = transformed_s(2,2)*kpi ! Pi bond py <-> py - if (maxl > 1) then - transformed_s(5,1) = transformed_s(5,1)*ksig ! Sigma bond dz2 <-> s - transformed_s(1,5) = transformed_s(1,5)*ksig ! Sigma bond s <-> dz2 - transformed_s(3,5) = transformed_s(3,5)*ksig ! Sigma bond pz <-> dz2 - transformed_s(5,3) = transformed_s(5,3)*ksig ! Sigma bond dz2 <-> pz - transformed_s(5,5) = transformed_s(5,5)*ksig ! Sigma bond dz2 <-> dz2 - transformed_s(4,6) = transformed_s(4,6)*kpi ! Pi bond px <-> dxz - transformed_s(6,4) = transformed_s(6,4)*kpi ! Pi bond dxz <-> px - transformed_s(6,6) = transformed_s(6,6)*kpi ! Pi bond dxz <-> dxz - transformed_s(2,7) = transformed_s(2,7)*kpi ! Pi bond py <-> dyz - transformed_s(7,2) = transformed_s(7,2)*kpi ! Pi bond dyz <-> py - transformed_s(7,7) = transformed_s(7,7)*kpi ! Pi bond dyz <-> dyz - transformed_s(8,8) = transformed_s(8,8)*kdel ! Delta bond dx2-y2 <-> dx2-y2 - transformed_s(9,9) = transformed_s(9,9)*kdel ! Delta bond dxy <-> dxy - endif + call gemm(amat=trafomat(1:dimj,1:dimj), bmat=transformed_s, & + & cmat=tmp, transa='N', transb='N') + call gemm(amat=tmp, bmat=trafomat(1:dimi,1:dimi), & + & cmat=block_overlap(1:dimj,1:dimi), transa='N', transb='T') + else + block_overlap(1,1) = transformed_s(1,1) endif - ! 4. Transform back to original frame - ! block_overlap = matmul(matmul(trafomat, trans_block_s),transpose(trafomat)) - ! block_overlap = O * S * O^T + end subroutine diat_trafo + + !> Gradient of the diatomic frame scaled overlap transformation: + pure subroutine diat_trafo_grad(block_overlap, block_doverlap, vec, ksig, kpi, kdel, maxlj, maxli) + !> Diatomic block of CGTO overlap to be transformed (+ scaled) + real(wp),intent(inout) :: block_overlap(:,:) + !> Derivative of diatomic block of CGTO overlap to be transformed (+ scaled) + real(wp),intent(inout) :: block_doverlap(:,:,:) + !> Transformation vector for the diatomic frame (i.e. vector between the two centers) + real(wp),intent(in) :: vec(3) + !> Scaling parameters for different bonding contributions + real(wp),intent(in) :: ksig, kpi, kdel + !> Highest angular momentum of atom j (first index) + integer,intent(in) :: maxlj + !> Highest angular momentum of atom i (second index) + integer,intent(in) :: maxli + + integer :: ic, dimj, dimi, maxl + real(wp), allocatable :: trafomat(:,:,:), dtrafomat(:,:,:), tmp(:,:), & + & interm_oso(:,:), interm_doso(:,:,:), interm_odso(:,:,:), interm_osdo(:,:,:) + + ! Select the dimensions of the transformation matrix + dimj = sdim(maxlj) + dimi = sdim(maxli) + maxl = max(maxlj, maxli) + + allocate(trafomat(3,sdim(maxl), sdim(maxl)), dtrafomat(3,sdim(maxl), sdim(maxl)), & + & interm_oso(dimj,dimi), interm_doso(3,dimj,dimi), interm_osdo(3,dimj, dimi), & + & interm_odso(3,dimj,dimi), tmp(dimj,dimi), source=0.0_wp) + + ! 1. Setup the transformation matrix and its derivative for all directions. + ! For the case vec || z-axis, the x- and y-derivatives are ill-defined + ! and have to be evaluated assuming either x or y orientation. + call d_harmtr(maxl, vec, trafomat, dtrafomat) + + ! 2. Transform the overlap submatrix to the diatomic frame: S' = O^T * S * O if (maxl > 0) then - call gemm(amat=eff_tra_mat,bmat=transformed_s,cmat=tmp,transa='N',transb='N') - call gemm(amat=tmp,bmat=eff_tra_mat,cmat=eff_block_overlap,transa='N',transb='T') + ! interm_oso = O^T * S * O + call gemm(amat=trafomat(3,1:dimj,1:dimj), bmat=block_overlap(1:dimj,1:dimi), & + & cmat=tmp,transa='T', transb='N') + call gemm(amat=tmp, bmat=trafomat(3,1:dimi,1:dimi), & + & cmat=interm_oso, transa='N', transb='N') + do ic = 1, 3 + ! interm_doso = dO^T * S * O + call gemm(amat=dtrafomat(ic,1:dimj,1:dimj), bmat=block_overlap(1:dimj,1:dimi), & + & cmat=tmp, transa='T', transb='N') + call gemm(amat=tmp, bmat=trafomat(ic,1:dimi,1:dimi), & + & cmat=interm_doso(ic,:,:), transa='N', transb='N') + ! interm_osdo = O^T * S * dO + call gemm(amat=trafomat(ic,1:dimj,1:dimj), bmat=block_overlap(1:dimj,1:dimi), & + & cmat=tmp, transa='T', transb='N') + call gemm(amat=tmp, bmat=dtrafomat(ic,1:dimi,1:dimi), & + & cmat=interm_osdo(ic,:,:), transa='N', transb='N') + ! interm_odso = O^T * dS * O + call gemm(amat=trafomat(ic,1:dimj,1:dimj), bmat=block_doverlap(ic,1:dimj,1:dimi), & + & cmat=tmp, transa='T', transb='N') + call gemm(amat=tmp, bmat=trafomat(ic,1:dimi,1:dimi), & + & cmat=interm_odso(ic,:,:), transa='N', transb='N') + end do else - eff_block_overlap(1,1) = transformed_s(1,1) + interm_oso(1,1) = block_overlap(1,1) + interm_doso(:,1,1) = 0.0_wp + interm_odso(:,1,1) = block_doverlap(:,1,1) + interm_osdo(:,1,1) = 0.0_wp endif - block_overlap = 0.0_wp - select case (maxl) - case (0) - block_overlap(1,1) = eff_block_overlap(1,1) - case (1) - block_overlap(1:4,1:4) = eff_block_overlap(1:4,1:4) - case (2) - block_overlap(1:9,1:9) = eff_block_overlap(1:9,1:9) - end select - end subroutine diat_trafo - subroutine relvec(vec, rkl, veckl) - !> Original vector between atoms A and B - real(wp), intent(in) :: vec(3) - !> Distance between the two atoms - real(wp), intent(in) :: rkl - !> Normalized vector from atom k to atom l - real(wp), intent(out) :: veckl(3) - - real(wp), parameter :: eps = 4.0e-08_wp - real(wp) :: sq - - veckl(1:3) = vec(1:3) / rkl - if ( abs(1.0_wp-abs(veckl(1))) .lt. eps ) then - veckl(1) = sign(1.0_wp,veckl(1)) - veckl(2) = 0.0_wp - veckl(3) = 0.0_wp - else if ( abs(1.0_wp-abs(veckl(2))) .lt. eps ) then - veckl(1) = 0.0_wp - veckl(2) = sign(1.0_wp,veckl(2)) - veckl(3) = 0.0_wp - else if ( abs(1.0_wp-abs(veckl(3))) .lt. eps ) then - veckl(1) = 0.0_wp - veckl(2) = 0.0_wp - veckl(3) = sign(1.0_wp,veckl(3)) - else if ( (abs(veckl(1)) .lt. eps) .and. .not. eff_equality(veckl(1),0.0_wp) ) then - veckl(1) = 0.0_wp - sq = sqrt( veckl(2)**2 + veckl(3)**2 ) - veckl(2) = veckl(2)/sq - veckl(3) = veckl(3)/sq - else if ( (abs(veckl(2)) .lt. eps) .and. .not. eff_equality(veckl(2),0.0_wp) ) then - veckl(2) = 0.0_wp - sq = sqrt( veckl(1)**2 + veckl(3)**2 ) - veckl(1) = veckl(1)/sq - veckl(3) = veckl(3)/sq - else if ( (abs(veckl(3)) .lt. eps) .and. .not. eff_equality(veckl(3),0.0_wp) ) then - veckl(3) = 0.0_wp - sq = sqrt(veckl(1)**2 + veckl(2)**2) - veckl(1) = veckl(1)/sq - veckl(2) = veckl(2)/sq + ! 3. Scale overlap and each dimension of the derivative in the diatomic frame + call scale_diatomic_frame(interm_oso, ksig, kpi, kdel, maxlj, maxli) + do ic = 1, 3 + call scale_diatomic_frame(interm_doso(ic,:,:), ksig, kpi, kdel, maxlj, maxli) + call scale_diatomic_frame(interm_osdo(ic,:,:), ksig, kpi, kdel, maxlj, maxli) + call scale_diatomic_frame(interm_odso(ic,:,:), ksig, kpi, kdel, maxlj, maxli) + end do + + ! 4. Transform diatomic frame quantities (S', (dOSO)', (OSdO)' and (OdSO)') back to original frame + if (maxl > 0) then + ! block_overlap = O * S' * O^T + call gemm(amat=trafomat(3,1:dimj,1:dimj), bmat=interm_oso, & + & cmat=tmp, transa='N', transb='N') + call gemm(amat=tmp, bmat=trafomat(3,1:dimi,1:dimi), & + & cmat=block_overlap(1:dimj,1:dimi), transa='N', transb='T') + + do ic = 1, 3 + ! block_doverlap = dO * S' * O^T + O * S' * dO^T + call gemm(amat=dtrafomat(ic,1:dimj,1:dimj), bmat=interm_oso, & + & cmat=tmp, transa='N', transb='N') + call gemm(alpha=1.0_wp, amat=tmp, bmat=trafomat(ic,1:dimi,1:dimi), & + & cmat=block_doverlap(ic,1:dimj,1:dimi), transa='N', transb='T') + + call gemm(amat=trafomat(ic,1:dimj,1:dimj), bmat=interm_oso, & + & cmat=tmp, transa='N', transb='N') + call gemm(alpha=1.0_wp, amat=tmp, bmat=dtrafomat(ic,1:dimi,1:dimi), beta=1.0_wp, & + & cmat=block_doverlap(ic,1:dimj,1:dimi), transa='N', transb='T') + + ! block_doverlap += O * (dOSO)' * O^T + O * (OSdO)' * O^T + call gemm(amat=trafomat(ic,1:dimj,1:dimj), bmat=interm_doso(ic,:,:), & + & cmat=tmp, transa='N', transb='N') + call gemm(alpha=1.0_wp, amat=tmp, bmat=trafomat(ic,1:dimi,1:dimi), beta=1.0_wp, & + & cmat=block_doverlap(ic,1:dimj,1:dimi), transa='N', transb='T') + + call gemm(amat=trafomat(ic,1:dimj,1:dimj), bmat=interm_odso(ic,:,:), & + & cmat=tmp, transa='N', transb='N') + call gemm(amat=tmp, bmat=trafomat(ic,1:dimi,1:dimi), beta=1.0_wp, & + & cmat=block_doverlap(ic,1:dimj,1:dimi), transa='N', transb='T') + + ! block_doverlap += O * (OdSO)' * O^T + call gemm(amat=trafomat(ic,1:dimj,1:dimj), bmat=interm_osdo(ic,:,:), & + & cmat=tmp, transa='N', transb='N') + call gemm(alpha=1.0_wp, amat=tmp, bmat=trafomat(ic,1:dimi,1:dimi), beta=1.0_wp, & + & cmat=block_doverlap(ic,1:dimj,1:dimi), transa='N', transb='T') + end do + else + block_overlap(1,1) = interm_oso(1,1) + block_doverlap(:,1,1) = interm_odso(:,1,1) endif - end subroutine relvec + end subroutine diat_trafo_grad - logical pure function eff_equality(num1, num2) - !> Numbers to compare - real(wp), intent(in) :: num1, num2 - - ! Logical deciding if numbers are (almost) equal or not - eff_equality = (abs( num1 - num2 ) .le. 1.0e-12_wp) - end function eff_equality - pure subroutine harmtr(maxl,veckl,trafomat) + pure subroutine harmtr(maxl,vec,trafomat) !> Maximum angular momentum integer, intent(in) :: maxl !> Normalized vector from atom k to atom l - real(wp), intent(in) :: veckl(3) + real(wp), intent(in) :: vec(3) !> Transformation matrix - real(wp), intent(out) :: trafomat(9,9) - - real(wp) :: cos2p, cos2t, cosp, cost, sin2p, sin2t, sinp, sint, sqrt3 - - ! ------------------------------------------------------------------ - if (maxl > 2) then - error stop "ERROR: f function or higher ang. mom. not implemented in harmtr" - endif + real(wp), intent(out) :: trafomat(sdim(maxl),sdim(maxl)) + real(wp) :: cos2p, cos2t, cosp, cost, sin2p, sin2t, sinp, sint, sqrt3, len + real(wp) :: norm_vec(3) trafomat = 0.0_wp - ! ----------------------------- - ! *** s functions (trafomat(1x1)) *** - ! ----------------------------- + + ! ----------------------------- + ! s functions (trafomat(1x1)) + ! ----------------------------- + trafomat(1,1) = 1.0 if ( maxl == 0 ) return - ! ----------------------------- - ! *** p functions (trafomat(4x4)) *** - ! ----------------------------- - cost = veckl(3) + ! Normalize the vector + len = sqrt(sum(vec**2)) + norm_vec = vec / len + + ! Prepare spherical coordinats + cost = norm_vec(3) if ( abs(cost) .eq. 1.0_wp ) then + ! Here, phi is arbitrary as the vector is parallel to the z-axis. + ! We choose the x-axis as the arbitrary direction. sint = 0.0_wp cosp = 1.0_wp sinp = 0.0_wp else if ( abs(cost) .eq. 0.0_wp ) then sint = 1.0_wp - cosp = veckl(1) - sinp = veckl(2) + cosp = norm_vec(1) + sinp = norm_vec(2) else - sint = SQRT(1.0_wp-COST**2) - cosp = veckl(1)/SINT - sinp = veckl(2)/SINT + sint = SQRT(norm_vec(1)**2 + norm_vec(2)**2) + cosp = norm_vec(1)/SINT + sinp = norm_vec(2)/SINT endif - !> tblite ordering with adapted column ordering + ! ----------------------------- + ! p functions (trafomat(4x4)) + ! ----------------------------- + + ! Adapted to tblite ordering from MSINDO ! 1st index: - ! MSINDO defintion of p function ordering is converted to - ! tblite definition of p function ordering. E.g. for first entry: - ! trafomat(2,:)_MSINDO -> trafomat(px,:) -> trafomat(4:)_tblite - ! 2nd index: - ! Final ordering of p functions (see below) corresponds to the - ! tblite ordering of p functions. For the second index, the ordering - ! 3, 4, 2 holds, corresponding (in MSINDO convention) - ! to the tblite ordering of p functions, i.e. - ! y, z, x + ! (2,:)_MSINDO -> (px,:) -> (4,:)_tblite + ! (3,:)_MSINDO -> (py,:) -> (2,:)_tblite + ! (4,:)_MSINDO -> (pz,:) -> (3,:)_tblite trafomat(4,3) = SINT*COSP trafomat(2,3) = SINT*SINP trafomat(3,3) = COST @@ -235,9 +263,9 @@ pure subroutine harmtr(maxl,veckl,trafomat) if ( maxl <= 1 ) return -! ----------------------------- -! *** d functions (trafomat(9x9)) *** -! ----------------------------- + ! ----------------------------- + ! d functions (trafomat(9x9)) + ! ----------------------------- COS2T = COST**2 - SINT**2 SIN2T = 2.0_wp * SINT*COST @@ -245,35 +273,545 @@ pure subroutine harmtr(maxl,veckl,trafomat) SIN2P = 2.0_wp * SINP*COSP SQRT3 = SQRT(3.0_wp) - !> Original MSINDO ordering - !> The MSINDO d SAO ordering corresponds to the - !> tblite ordering of d SAOs - trafomat(5,5) = (3.0_wp * COST**2 - 1.0_wp) * 0.5_wp - trafomat(6,5) = SQRT3*SIN2T*COSP*0.5_wp - trafomat(7,5) = SQRT3*SIN2T*SINP*0.5_wp - trafomat(8,5) = SQRT3*SINT**2*COS2P*0.5_wp - trafomat(9,5) = SQRT3*SINT**2*SIN2P*0.5_wp - trafomat(5,6) = -SQRT3*SIN2T*0.5_wp - trafomat(6,6) = COS2T*COSP - trafomat(7,6) = COS2T*SINP - trafomat(8,6) = SIN2T*COS2P*0.5_wp - trafomat(9,6) = SIN2T*SIN2P*0.5_wp - trafomat(5,7) = 0.0_wp - trafomat(6,7) = -COST*SINP - trafomat(7,7) = COST*COSP - trafomat(8,7) = -SINT*SIN2P - trafomat(9,7) = SINT*COS2P - trafomat(5,8) = SQRT3*SINT**2 * 0.5_wp - trafomat(6,8) = -SIN2T*COSP*0.5_wp - trafomat(7,8) = -SIN2T*SINP*0.5_wp - trafomat(8,8) = (1.0_wp + COST**2) * COS2P * 0.5_wp - trafomat(9,8) = (1.0_wp + COST**2) * SIN2P * 0.5_wp - trafomat(5,9) = 0.0_wp - trafomat(6,9) = SINT*SINP - trafomat(7,9) = -SINT*COSP - trafomat(8,9) = -COST*SIN2P - trafomat(9,9) = COST*COS2P + ! Changed from MSINDO ordering (0,-1,1,-2,2) to tblite ordering (-2,-1,0,1,2) of d-functions + ! (5,:)_MSINDO -> (dz2,:) -> (7,:)_tblite + ! (6,:)_MSINDO -> (dxz,:) -> (8,:)_tblite + ! (7,:)_MSINDO -> (dyz,:) -> (6,:)_tblite + ! (8,:)_MSINDO -> (dx2-y2,:) -> (5,:)_tblite + ! (9,:)_MSINDO -> (dxy,:) -> (9,:)_tblite + trafomat(7,7) = (3.0_wp * COST**2 - 1.0_wp) * 0.5_wp + trafomat(8,7) = SQRT3*SIN2T*COSP*0.5_wp + trafomat(6,7) = SQRT3*SIN2T*SINP*0.5_wp + trafomat(9,7) = SQRT3*SINT**2*COS2P*0.5_wp + trafomat(5,7) = SQRT3*SINT**2*SIN2P*0.5_wp + trafomat(7,8) = -SQRT3*SIN2T*0.5_wp + trafomat(8,8) = COS2T*COSP + trafomat(6,8) = COS2T*SINP + trafomat(9,8) = SIN2T*COS2P*0.5_wp + trafomat(5,8) = SIN2T*SIN2P*0.5_wp + trafomat(7,6) = 0.0_wp + trafomat(8,6) = -COST*SINP + trafomat(6,6) = COST*COSP + trafomat(9,6) = -SINT*SIN2P + trafomat(5,6) = SINT*COS2P + trafomat(7,9) = SQRT3*SINT**2 * 0.5_wp + trafomat(8,9) = -SIN2T*COSP*0.5_wp + trafomat(6,9) = -SIN2T*SINP*0.5_wp + trafomat(9,9) = (1.0_wp + COST**2) * COS2P * 0.5_wp + trafomat(5,9) = (1.0_wp + COST**2) * SIN2P * 0.5_wp + trafomat(7,5) = 0.0_wp + trafomat(8,5) = SINT*SINP + trafomat(6,5) = -SINT*COSP + trafomat(9,5) = -COST*SIN2P + trafomat(5,5) = COST*COS2P + + if ( maxl <= 2 ) return + + ! ------------------------------- + ! f functions (trafomat(16x16)) + ! ------------------------------- + + ! f-functions are not transformed to the diatomic frame! + trafomat(10,10) = 1.0_wp + trafomat(11,11) = 1.0_wp + trafomat(12,12) = 1.0_wp + trafomat(13,13) = 1.0_wp + trafomat(14,14) = 1.0_wp + trafomat(15,15) = 1.0_wp + trafomat(16,16) = 1.0_wp + + if ( maxl <= 3 ) return + + ! ------------------------------- + ! g functions (trafomat(25x25)) + ! ------------------------------- + + ! g-functions are not transformed to the diatomic frame! + trafomat(17,17) = 1.0_wp + trafomat(18,18) = 1.0_wp + trafomat(19,19) = 1.0_wp + trafomat(20,20) = 1.0_wp + trafomat(21,21) = 1.0_wp + trafomat(22,22) = 1.0_wp + trafomat(23,23) = 1.0_wp + trafomat(24,24) = 1.0_wp + trafomat(25,25) = 1.0_wp + + if ( maxl <= 4 ) return end subroutine harmtr + pure subroutine d_harmtr(maxl,vec,trafomat, dtrafomat) + !> Maximum angular momentum + integer, intent(in) :: maxl + !> Normalized vector from atom k to atom l + real(wp), intent(in) :: vec(3) + !> Transformation matrix + real(wp), intent(out) :: trafomat(3,sdim(maxl),sdim(maxl)) + !> Derivative of transformation matrix + real(wp), intent(out) :: dtrafomat(3,sdim(maxl),sdim(maxl)) + + real(wp), parameter :: eps = 1.0e-08_wp + + !> Derivative of transformation matrix w.r.t. theta (x- or z-direction) + real(wp) :: trafomat_dt(sdim(maxl),sdim(maxl)) + !> Derivative of transformation matrix w.r.t. theta (y-direction) + real(wp) :: trafomat_dty(sdim(maxl),sdim(maxl)) + !> Derivative of transformation matrix w.r.t. phi (x- or z-direction) + real(wp) :: trafomat_dp(sdim(maxl),sdim(maxl)) + !> Derivative of transformation matrix w.r.t. phi (y-direction) + real(wp) :: trafomat_dpy(sdim(maxl),sdim(maxl)) + + ! Intermediate variables for the trigonometric functions + ! Separte version for y for the case: vec || z-axis + real(wp) :: cos2p, cos2t, cosp, cost, sin2p, sin2t, sinp + real(wp) :: cos2py, cospy, sin2py, sinpy + real(wp) :: dcos2t, dsin2t, dcos2p, dsin2p + real(wp) :: dcos2py, dsin2py + real(wp) :: dpdx, dpdy, dpdz, dtdx, dtdy, dtdz + real(wp) :: norm_vec(3), sint, sqrt3, len + + trafomat = 0.0_wp + trafomat_dt = 0.0_wp + trafomat_dty = 0.0_wp + trafomat_dp = 0.0_wp + trafomat_dpy = 0.0_wp + + ! ----------------------------- + ! s functions (trafomat(1x1)) + ! ----------------------------- + + trafomat(:,1,1) = 1.0_wp + dtrafomat(:,1,1) = 0.0_wp + + if ( maxl == 0 ) return + + ! Normalize the vector + len = sqrt(sum(vec**2)) + norm_vec = vec / len + + ! Prepare spherical coordinats + cost = norm_vec(3) + if ( abs(cost) .eq. 1.0_wp ) then + sint = 0.0_wp + ! Here, phi is arbitrary as the vector is parallel to the z-axis. + ! In turn, the derivative is ill defined and has to be evaluated + ! assuming either x or y orientation for the infinitesimal change. + ! This is only require for the p- and d-functions, which are transformed. + cosp = 1.0_wp + sinp = 0.0_wp + if ( maxl == 1 .or. maxl == 2 ) then + cospy = 0.0_wp + sinpy = -1.0_wp + else + cospy = cosp + sinpy = sinp + end if + else if ( abs(cost) .eq. 0.0_wp ) then + sint = 1.0_wp + cosp = norm_vec(1) + sinp = norm_vec(2) + cospy = cosp + sinpy = sinp + else + sint = SQRT(norm_vec(1)**2 + norm_vec(2)**2) + cosp = norm_vec(1)/SINT + sinp = norm_vec(2)/SINT + cospy = cosp + sinpy = sinp + endif + + ! Prepare sperical coordinate derivative + ! In the case of (exactly) vec || z-axis, the phi derivative vanishes. + if( norm_vec(1)**2 + norm_vec(2)**2 .eq. 0.0_wp ) then + dpdx = 0.0_wp + dpdy = 0.0_wp + else + dpdx = -sinp / sqrt(vec(1)**2 + vec(2)**2) + dpdy = cospy / sqrt(vec(1)**2 + vec(2)**2) + end if + dpdz = 0.0_wp + dtdx = cost * cosp / len + dtdy = cost * sinpy / len + dtdz = -sint / len + + ! ----------------------------- + ! p functions (trafomat(4x4)) + ! ----------------------------- + + ! Adapted to tblite ordering from MSINDO + ! 1st index: + ! (2,:)_MSINDO -> (px,:) -> (4,:)_tblite + ! (3,:)_MSINDO -> (py,:) -> (2,:)_tblite + ! (4,:)_MSINDO -> (pz,:) -> (3,:)_tblite + + ! x-direction + trafomat(1,4,3) = SINT*COSP + trafomat(1,2,3) = SINT*SINP + trafomat(1,3,3) = COST + trafomat(1,4,4) = COST*COSP + trafomat(1,2,4) = COST*SINP + trafomat(1,3,4) = -SINT + trafomat(1,4,2) = -SINP + trafomat(1,2,2) = COSP + trafomat(1,3,2) = 0.0_wp + ! y-direction + trafomat(2,4,3) = SINT*COSPY + trafomat(2,2,3) = SINT*SINPY + trafomat(2,3,3) = COST + trafomat(2,4,4) = COST*COSPY + trafomat(2,2,4) = COST*SINPY + trafomat(2,3,4) = -SINT + trafomat(2,4,2) = -SINPY + trafomat(2,2,2) = COSPY + trafomat(2,3,2) = 0.0_wp + ! z-direction equal to x-direction + trafomat(3,:,:) = trafomat(1,:,:) + + ! derivative w.r.t. theta (x- or z-direction) + trafomat_dt(4,3) = COST*COSP + trafomat_dt(2,3) = COST*SINP + trafomat_dt(3,3) = -SINT + trafomat_dt(4,4) = -SINT*COSP + trafomat_dt(2,4) = -SINT*SINP + trafomat_dt(3,4) = -COST + trafomat_dt(4,2) = 0.0_wp + trafomat_dt(2,2) = 0.0_wp + trafomat_dt(3,2) = 0.0_wp + ! y-direction + trafomat_dty(4,3) = COST*COSPY + trafomat_dty(2,3) = COST*SINPY + trafomat_dty(3,3) = -SINT + trafomat_dty(4,4) = -SINT*COSPY + trafomat_dty(2,4) = -SINT*SINPY + trafomat_dty(3,4) = -COST + trafomat_dty(4,2) = 0.0_wp + trafomat_dty(2,2) = 0.0_wp + trafomat_dty(3,2) = 0.0_wp + + ! derivative w.r.t. phi (x- or z-direction) + trafomat_dp(4,3) = -SINT*SINP + trafomat_dp(2,3) = SINT*COSP + trafomat_dp(3,3) = 0.0_wp + trafomat_dp(4,4) = -COST*SINP + trafomat_dp(2,4) = COST*COSP + trafomat_dp(3,4) = 0.0_wp + trafomat_dp(4,2) = -COSP + trafomat_dp(2,2) = -SINP + trafomat_dp(3,2) = 0.0_wp + ! y-direction + trafomat_dpy(4,3) = -SINT*SINPY + trafomat_dpy(2,3) = SINT*COSPY + trafomat_dpy(3,3) = 0.0_wp + trafomat_dpy(4,4) = -COST*SINPY + trafomat_dpy(2,4) = COST*COSPY + trafomat_dpy(3,4) = 0.0_wp + trafomat_dpy(4,2) = -COSPY + trafomat_dpy(2,2) = -SINPY + trafomat_dpy(3,2) = 0.0_wp + + + if ( maxl <= 1 ) then + dtrafomat(1, 1:4, 1:4) = dpdx * trafomat_dp(1:4, 1:4) + dtdx * trafomat_dt(1:4, 1:4) + dtrafomat(2, 1:4, 1:4) = dpdy * trafomat_dpy(1:4, 1:4) + dtdy * trafomat_dty(1:4, 1:4) + dtrafomat(3, 1:4, 1:4) = dtdz * trafomat_dt(1:4, 1:4) + return + end if + + ! ----------------------------- + ! d functions (trafomat(9x9)) + ! ----------------------------- + + SQRT3 = SQRT(3.0_wp) + COS2T = COST**2 - SINT**2 + SIN2T = 2.0_wp * SINT*COST + COS2P = COSP**2 - SINP**2 + SIN2P = 2.0_wp * SINP*COSP + COS2PY = COSPY**2 - SINPY**2 + SIN2PY = 2.0_wp * SINPY*COSPY + + DCOS2T = -2.0_wp * SIN2T + DSIN2T = 2.0_wp * COS2T + DCOS2P = -2.0_wp * SIN2P + DSIN2P = 2.0_wp * COS2P + DCOS2PY = -2.0_wp * SIN2PY + DSIN2PY = 2.0_wp * COS2PY + + + ! Changed from MSINDO ordering (0,-1,1,-2,2) to tblite ordering (-2,-1,0,1,2) of d-functions + ! (5,:)_MSINDO -> (dz2,:) -> (7,:)_tblite + ! (6,:)_MSINDO -> (dxz,:) -> (8,:)_tblite + ! (7,:)_MSINDO -> (dyz,:) -> (6,:)_tblite + ! (8,:)_MSINDO -> (dx2-y2,:) -> (5,:)_tblite + ! (9,:)_MSINDO -> (dxy,:) -> (9,:)_tblite + ! x-direction + trafomat(1,7,7) = (3.0_wp * COST**2 - 1.0_wp) * 0.5_wp + trafomat(1,8,7) = SQRT3*SIN2T*COSP*0.5_wp + trafomat(1,6,7) = SQRT3*SIN2T*SINP*0.5_wp + trafomat(1,9,7) = SQRT3*SINT**2*COS2P*0.5_wp + trafomat(1,5,7) = SQRT3*SINT**2*SIN2P*0.5_wp + trafomat(1,7,8) = -SQRT3*SIN2T*0.5_wp + trafomat(1,8,8) = COS2T*COSP + trafomat(1,6,8) = COS2T*SINP + trafomat(1,9,8) = SIN2T*COS2P*0.5_wp + trafomat(1,5,8) = SIN2T*SIN2P*0.5_wp + trafomat(1,7,6) = 0.0_wp + trafomat(1,8,6) = -COST*SINP + trafomat(1,6,6) = COST*COSP + trafomat(1,9,6) = -SINT*SIN2P + trafomat(1,5,6) = SINT*COS2P + trafomat(1,7,9) = SQRT3*SINT**2 * 0.5_wp + trafomat(1,8,9) = -SIN2T*COSP*0.5_wp + trafomat(1,6,9) = -SIN2T*SINP*0.5_wp + trafomat(1,9,9) = (1.0_wp + COST**2) * COS2P * 0.5_wp + trafomat(1,5,9) = (1.0_wp + COST**2) * SIN2P * 0.5_wp + trafomat(1,7,5) = 0.0_wp + trafomat(1,8,5) = SINT*SINP + trafomat(1,6,5) = -SINT*COSP + trafomat(1,9,5) = -COST*SIN2P + trafomat(1,5,5) = COST*COS2P + ! y-direction + trafomat(2,7,7) = (3.0_wp * COST**2 - 1.0_wp) * 0.5_wp + trafomat(2,8,7) = SQRT3*SIN2T*COSPY*0.5_wp + trafomat(2,6,7) = SQRT3*SIN2T*SINPY*0.5_wp + trafomat(2,9,7) = SQRT3*SINT**2*COS2PY*0.5_wp + trafomat(2,5,7) = SQRT3*SINT**2*SIN2PY*0.5_wp + trafomat(2,7,8) = -SQRT3*SIN2T*0.5_wp + trafomat(2,8,8) = COS2T*COSPY + trafomat(2,6,8) = COS2T*SINPY + trafomat(2,9,8) = SIN2T*COS2PY*0.5_wp + trafomat(2,5,8) = SIN2T*SIN2PY*0.5_wp + trafomat(2,7,6) = 0.0_wp + trafomat(2,8,6) = -COST*SINPY + trafomat(2,6,6) = COST*COSPY + trafomat(2,9,6) = -SINT*SIN2PY + trafomat(2,5,6) = SINT*COS2PY + trafomat(2,7,9) = SQRT3*SINT**2 * 0.5_wp + trafomat(2,8,9) = -SIN2T*COSPY*0.5_wp + trafomat(2,6,9) = -SIN2T*SINPY*0.5_wp + trafomat(2,9,9) = (1.0_wp + COST**2) * COS2PY * 0.5_wp + trafomat(2,5,9) = (1.0_wp + COST**2) * SIN2PY * 0.5_wp + trafomat(2,7,5) = 0.0_wp + trafomat(2,8,5) = SINT*SINPY + trafomat(2,6,5) = -SINT*COSPY + trafomat(2,9,5) = -COST*SIN2PY + trafomat(2,5,5) = COST*COS2PY + ! z-direction + trafomat(3,:,:) = trafomat(1,:,:) + + ! derivative w.r.t. theta (x- or z-direction) + trafomat_dt(7,7) = -3.0_wp*SIN2T*0.5_wp + trafomat_dt(8,7) = SQRT3*DSIN2T*COSP*0.5_wp + trafomat_dt(6,7) = SQRT3*DSIN2T*SINP*0.5_wp + trafomat_dt(9,7) = SQRT3*SIN2T*COS2P*0.5_wp + trafomat_dt(5,7) = SQRT3*SIN2T*SIN2P*0.5_wp + trafomat_dt(7,8) = -SQRT3*DSIN2T*0.5_wp + trafomat_dt(8,8) = DCOS2T*COSP + trafomat_dt(6,8) = DCOS2T*SINP + trafomat_dt(9,8) = DSIN2T*COS2P*0.5_wp + trafomat_dt(5,8) = DSIN2T*SIN2P*0.5_wp + trafomat_dt(7,6) = 0.0_wp + trafomat_dt(8,6) = SINT*SINP + trafomat_dt(6,6) = -SINT*COSP + trafomat_dt(9,6) = -COST*SIN2P + trafomat_dt(5,6) = COST*COS2P + trafomat_dt(7,9) = SQRT3*SIN2T*0.5_wp + trafomat_dt(8,9) = -DSIN2T*COSP*0.5_wp + trafomat_dt(6,9) = -DSIN2T*SINP*0.5_wp + trafomat_dt(9,9) = -SIN2T*COS2P*0.5_wp + trafomat_dt(5,9) = -SIN2T*SIN2P*0.5_wp + trafomat_dt(7,5) = 0.0_wp + trafomat_dt(8,5) = COST*SINP + trafomat_dt(6,5) = -COST*COSP + trafomat_dt(9,5) = SINT*SIN2P + trafomat_dt(5,5) = -SINT*COS2P + ! y-direction + trafomat_dty(7,7) = -3.0_wp*SIN2T*0.5_wp + trafomat_dty(8,7) = SQRT3*DSIN2T*COSPY*0.5_wp + trafomat_dty(6,7) = SQRT3*DSIN2T*SINPY*0.5_wp + trafomat_dty(9,7) = SQRT3*SIN2T*COS2PY*0.5_wp + trafomat_dty(5,7) = SQRT3*SIN2T*SIN2PY*0.5_wp + trafomat_dty(7,8) = -SQRT3*DSIN2T*0.5_wp + trafomat_dty(8,8) = DCOS2T*COSPY + trafomat_dty(6,8) = DCOS2T*SINPY + trafomat_dty(9,8) = DSIN2T*COS2PY*0.5_wp + trafomat_dty(5,8) = DSIN2T*SIN2PY*0.5_wp + trafomat_dty(7,6) = 0.0_wp + trafomat_dty(8,6) = SINT*SINPY + trafomat_dty(6,6) = -SINT*COSPY + trafomat_dty(9,6) = -COST*SIN2PY + trafomat_dty(5,6) = COST*COS2PY + trafomat_dty(7,9) = SQRT3*SIN2T*0.5_wp + trafomat_dty(8,9) = -DSIN2T*COSPY*0.5_wp + trafomat_dty(6,9) = -DSIN2T*SINPY*0.5_wp + trafomat_dty(9,9) = -SIN2T*COS2PY*0.5_wp + trafomat_dty(5,9) = -SIN2T*SIN2PY*0.5_wp + trafomat_dty(7,5) = 0.0_wp + trafomat_dty(8,5) = COST*SINPY + trafomat_dty(6,5) = -COST*COSPY + trafomat_dty(9,5) = SINT*SIN2PY + trafomat_dty(5,5) = -SINT*COS2PY + + ! derivative w.r.t. phi (x- or z-direction) + trafomat_dp(7,7) = 0.0_wp + trafomat_dp(8,7) = -SQRT3*SIN2T*SINP*0.5_wp + trafomat_dp(6,7) = SQRT3*SIN2T*COSP*0.5_wp + trafomat_dp(9,7) = SQRT3*SINT**2*DCOS2P*0.5_wp + trafomat_dp(5,7) = SQRT3*SINT**2*DSIN2P*0.5_wp + trafomat_dp(7,8) = 0.0_wp + trafomat_dp(8,8) = -COS2T*SINP + trafomat_dp(6,8) = COS2T*COSP + trafomat_dp(9,8) = SIN2T*DCOS2P*0.5_wp + trafomat_dp(5,8) = SIN2T*DSIN2P*0.5_wp + trafomat_dp(7,6) = 0.0_wp + trafomat_dp(8,6) = -COST*COSP + trafomat_dp(6,6) = -COST*SINP + trafomat_dp(9,6) = -SINT*DSIN2P + trafomat_dp(5,6) = SINT*DCOS2P + trafomat_dp(7,9) = 0.0_wp + trafomat_dp(8,9) = SIN2T*SINP*0.5_wp + trafomat_dp(6,9) = -SIN2T*COSP*0.5_wp + trafomat_dp(9,9) = (1.0+COST**2)*DCOS2P*0.5_wp + trafomat_dp(5,9) = (1.0+COST**2)*DSIN2P*0.5_wp + trafomat_dp(7,5) = 0.0_wp + trafomat_dp(8,5) = SINT*COSP + trafomat_dp(6,5) = SINT*SINP + trafomat_dp(9,5) = -COST*DSIN2P + trafomat_dp(5,5) = COST*DCOS2P + ! y-direction + trafomat_dpy(7,7) = 0.0_wp + trafomat_dpy(8,7) = -SQRT3*SIN2T*SINP*0.5_wp + trafomat_dpy(6,7) = SQRT3*SIN2T*COSP*0.5_wp + trafomat_dpy(9,7) = SQRT3*SINT**2*DCOS2P*0.5_wp + trafomat_dpy(5,7) = SQRT3*SINT**2*DSIN2P*0.5_wp + trafomat_dpy(7,8) = 0.0_wp + trafomat_dpy(8,8) = -COS2T*SINP + trafomat_dpy(6,8) = COS2T*COSP + trafomat_dpy(9,8) = SIN2T*DCOS2P*0.5_wp + trafomat_dpy(5,8) = SIN2T*DSIN2P*0.5_wp + trafomat_dpy(7,6) = 0.0_wp + trafomat_dpy(8,6) = -COST*COSP + trafomat_dpy(6,6) = -COST*SINP + trafomat_dpy(9,6) = -SINT*DSIN2P + trafomat_dpy(5,6) = SINT*DCOS2P + trafomat_dpy(7,9) = 0.0_wp + trafomat_dpy(8,9) = SIN2T*SINP*0.5_wp + trafomat_dpy(6,9) = -SIN2T*COSP*0.5_wp + trafomat_dpy(9,9) = (1.0+COST**2)*DCOS2P*0.5_wp + trafomat_dpy(5,9) = (1.0+COST**2)*DSIN2P*0.5_wp + trafomat_dpy(7,5) = 0.0_wp + trafomat_dpy(8,5) = SINT*COSP + trafomat_dpy(6,5) = SINT*SINP + trafomat_dpy(9,5) = -COST*DSIN2P + trafomat_dpy(5,5) = COST*DCOS2P + + if ( maxl <= 2 ) then + ! Transform to cartesian coordinates + dtrafomat(1, 1:9, 1:9) = dpdx * trafomat_dp(1:9, 1:9) + dtdx * trafomat_dt(1:9, 1:9) + dtrafomat(2, 1:9, 1:9) = dpdy * trafomat_dpy(1:9, 1:9) + dtdy * trafomat_dty(1:9, 1:9) + dtrafomat(3, 1:9, 1:9) = dtdz * trafomat_dt(1:9, 1:9) + return + end if + + ! ------------------------------- + ! f functions (trafomat(16x16)) + ! ------------------------------- + + ! f-functions are not transformed to the diatomic frame! + ! Hence, the derivative remains 0! + trafomat(:,10,10) = 1.0_wp + trafomat(:,11,11) = 1.0_wp + trafomat(:,12,12) = 1.0_wp + trafomat(:,13,13) = 1.0_wp + trafomat(:,14,14) = 1.0_wp + trafomat(:,15,15) = 1.0_wp + trafomat(:,16,16) = 1.0_wp + + if ( maxl <= 3 ) then + ! Transform to cartesian coordinates + dtrafomat(1, 1:16, 1:16) = dpdx * trafomat_dp(1:16, 1:16) + dtdx * trafomat_dt(1:16, 1:16) + dtrafomat(2, 1:16, 1:16) = dpdy * trafomat_dpy(1:16, 1:16) + dtdy * trafomat_dty(1:16, 1:16) + dtrafomat(3, 1:16, 1:16) = dtdz * trafomat_dt(1:16, 1:16) + return + end if + + ! ------------------------------- + ! g functions (trafomat(25x25)) + ! ------------------------------- + + ! g-functions are not transformed to the diatomic frame! + ! Hence, the derivative remains 0! + trafomat(:,17,17) = 1.0_wp + trafomat(:,18,18) = 1.0_wp + trafomat(:,19,19) = 1.0_wp + trafomat(:,20,20) = 1.0_wp + trafomat(:,21,21) = 1.0_wp + trafomat(:,22,22) = 1.0_wp + trafomat(:,23,23) = 1.0_wp + trafomat(:,24,24) = 1.0_wp + trafomat(:,25,25) = 1.0_wp + + if ( maxl <= 4 ) then + ! Transform to cartesian coordinates + dtrafomat(1, 1:25, 1:25) = dpdx * trafomat_dp(1:25, 1:25) + dtdx * trafomat_dt(1:25, 1:25) + dtrafomat(2, 1:25, 1:25) = dpdy * trafomat_dpy(1:25, 1:25) + dtdy * trafomat_dty(1:25, 1:25) + dtrafomat(3, 1:25, 1:25) = dtdz * trafomat_dt(1:25, 1:25) + return + end if + + end subroutine d_harmtr + + pure subroutine scale_diatomic_frame(diat_mat, ksig, kpi, kdel, maxlj, maxli) + !> Block matrix in the diatomic frame to be scaled + real(wp),intent(inout) :: diat_mat(:,:) + !> Scaling parameters for different bonding contributions + real(wp),intent(in) :: ksig, kpi, kdel + !> Highest angular momentum of atom j (first index) + integer,intent(in) :: maxlj + !> Highest angular momentum of atom i (second index) + integer,intent(in) :: maxli + + integer :: maxl + + maxl = max(maxlj, maxli) + + diat_mat(1,1) = diat_mat(1,1)*ksig ! Sigma bond s <-> s + if(maxlj > 0) then + diat_mat(3,1) = diat_mat(3,1)*ksig ! Sigma bond pz <-> s + end if + if(maxli > 0) then + diat_mat(1,3) = diat_mat(1,3)*ksig ! Sigma bond s <-> pz + end if + if(maxlj > 0 .and. maxli > 0) then + diat_mat(3,3) = diat_mat(3,3)*ksig ! Sigma bond pz <-> pz + diat_mat(4,4) = diat_mat(4,4)*kpi ! Pi bond px <-> px + diat_mat(2,2) = diat_mat(2,2)*kpi ! Pi bond py <-> py + if(maxlj > 1) then + diat_mat(7,3) = diat_mat(7,3)*ksig ! Sigma bond dz2 <-> pz + diat_mat(8,4) = diat_mat(8,4)*kpi ! Pi bond dxz <-> px + diat_mat(6,2) = diat_mat(6,2)*kpi ! Pi bond dyz <-> py + end if + if(maxli > 1) then + diat_mat(3,7) = diat_mat(3,7)*ksig ! Sigma bond pz <-> dz2 + diat_mat(4,8) = diat_mat(4,8)*kpi ! Pi bond px <-> dxz + diat_mat(2,6) = diat_mat(2,6)*kpi ! Pi bond py <-> dyz + end if + end if + if (maxlj > 1) then + diat_mat(7,1) = diat_mat(7,1)*ksig ! Sigma bond dz2 <-> s + end if + if (maxli > 1) then + diat_mat(1,7) = diat_mat(1,7)*ksig ! Sigma bond s <-> dz2 + end if + if (maxlj > 1 .and. maxli > 1) then + diat_mat(7,7) = diat_mat(7,7)*ksig ! Sigma bond dz2 <-> dz2 + diat_mat(8,8) = diat_mat(8,8)*kpi ! Pi bond dxz <-> dxz + diat_mat(6,6) = diat_mat(6,6)*kpi ! Pi bond dyz <-> dyz + diat_mat(9,9) = diat_mat(9,9)*kdel ! Delta bond dx2-y2 <-> dx2-y2 + diat_mat(5,5) = diat_mat(5,5)*kdel ! Delta bond dxy <-> dxy + endif + ! f- and g-functions remain unscaled + + end subroutine scale_diatomic_frame + end module tblite_integral_diat_trafo diff --git a/src/tblite/integral/dipole.f90 b/src/tblite/integral/dipole.f90 index 329f8ab6..e614255d 100644 --- a/src/tblite/integral/dipole.f90 +++ b/src/tblite/integral/dipole.f90 @@ -24,24 +24,26 @@ module tblite_integral_dipole use mctc_io_constants, only : pi use tblite_basis_type, only : basis_type, cgto_type use tblite_integral_trafo, only : transform0, transform1, transform2 - use tblite_integral_diat_trafo, only: relvec, diat_trafo + use tblite_integral_diat_trafo, only: diat_trafo implicit none private - public :: dipole_cgto, dipole_cgto_diat_scal, dipole_grad_cgto + public :: dipole_cgto, dipole_cgto_diat, dipole_grad_cgto public :: get_dipole_integrals - public :: maxl, msao + public :: maxl, msao, smap interface get_dipole_integrals module procedure :: get_dipole_integrals_lat - module procedure :: get_dipole_integrals_diat_overlap_lat + module procedure :: get_dipole_integrals_diat_lat end interface get_dipole_integrals integer, parameter :: maxl = 6 integer, parameter :: maxl2 = maxl*2 integer, parameter :: msao(0:maxl) = [1, 3, 5, 7, 9, 11, 13] integer, parameter :: mlao(0:maxl) = [1, 3, 6, 10, 15, 21, 28] + integer, parameter :: smap(0:maxl) = [0, 1, 4, 9, 16, 25, 36] integer, parameter :: lmap(0:maxl) = [0, 1, 4, 10, 20, 35, 56] + integer, parameter :: sdim(0:maxl) = [1, 4, 9, 16, 25, 36, 49] real(wp), parameter :: sqrtpi = sqrt(pi) real(wp), parameter :: sqrtpi3 = sqrtpi**3 @@ -367,8 +369,8 @@ pure subroutine dipole_cgto(cgtoj, cgtoi, r2, vec, intcut, overlap, dpint) end subroutine dipole_cgto -pure subroutine dipole_cgto_diat_scal(cgtoj, cgtoi, r2, vec, intcut, & -& vec_diat_trafo, ksig, kpi, kdel, overlap, overlap_scaled, dpint) +pure subroutine dipole_cgto_diat(cgtoj, cgtoi, r2, vec, intcut, & +& ksig, kpi, kdel, overlap, overlap_diat, dpint) !> Description of contracted Gaussian function on center i type(cgto_type), intent(in) :: cgtoi !> Description of contracted Gaussian function on center j @@ -379,26 +381,22 @@ pure subroutine dipole_cgto_diat_scal(cgtoj, cgtoi, r2, vec, intcut, & real(wp), intent(in) :: vec(3) !> Maximum value of integral prefactor to consider real(wp), intent(in) :: intcut - !> Transformation vector for the diatomic frame - real(wp), intent(in) :: vec_diat_trafo(3) !> Scaling factors for the diatomic frame for the three differnt bonding motifs real(wp), intent(in) :: ksig, kpi, kdel - !> Overlap integrals (scaled and unscaled) for the given pair i and j + !> Overlap integrals (unscaled and diatomic frame-scaled) for the given pair i and j real(wp), intent(out) :: overlap(msao(cgtoj%ang), msao(cgtoi%ang)), & - & overlap_scaled(msao(cgtoj%ang), msao(cgtoi%ang)) + & overlap_diat(msao(cgtoj%ang), msao(cgtoi%ang)) !> Dipole moment integrals for the given pair i and j real(wp), intent(out) :: dpint(3, msao(cgtoj%ang), msao(cgtoi%ang)) - !> Block overlap matrix as a technical intermediate for the diatomic frame - real(wp) :: block_overlap(9,9) - !> Offset array for the block overlap matrix - !> (number of AOs that appear before the current angular momentum) - integer, parameter :: offset_nao(8) = [0, 1, 4, 9, 16, 25, 36, 49] - integer :: ip, jp, mli, mlj, l + integer :: ip, jp, mli, mlj, l, mapj, mapi real(wp) :: eab, oab, est, s1d(0:maxl2), rpi(3), rpj(3), cc, val, dip(3), pre real(wp) :: s3d(mlao(cgtoj%ang), mlao(cgtoi%ang)) real(wp) :: d3d(3, mlao(cgtoj%ang), mlao(cgtoi%ang)) + !> Block overlap matrix as a technical intermediate for the diatomic frame + real(wp) :: block_overlap(sdim(cgtoj%ang),sdim(cgtoi%ang)) + s3d(:, :) = 0.0_wp d3d(:, :, :) = 0.0_wp @@ -430,27 +428,21 @@ pure subroutine dipole_cgto_diat_scal(cgtoj, cgtoi, r2, vec, intcut, & call transform0(cgtoj%ang, cgtoi%ang, s3d, overlap) call transform1(cgtoj%ang, cgtoi%ang, d3d, dpint) - !> ---------- OVERLAP SCALING IN THE DIATOMIC FRAME ----------- - !> Transform 9x9 submatrix (in the case with s,p,d) to diatomic frame, - !> scale the elements with the corresponding factor, - !> transform them back and add them to the scaled overlap matrix + ! Write the cgto overlap into the diatomic matrix block_overlap = 0.0_wp - !> 1. Fill the 9x9 submatrix (initialized with 0's) - !> with the correct overlap matrix elements - block_overlap(offset_nao(cgtoj%ang+1)+1:offset_nao(cgtoj%ang+1)+msao(cgtoj%ang), & - & offset_nao(cgtoi%ang+1)+1:offset_nao(cgtoi%ang+1)+msao(cgtoi%ang)) = & + mapj = smap(cgtoj%ang) + mapi = smap(cgtoi%ang) + block_overlap(mapj+1:mapj+msao(cgtoj%ang), mapi+1:mapi+msao(cgtoi%ang)) = & & overlap(1:msao(cgtoj%ang), 1:msao(cgtoi%ang)) - !> 2. Set up transformation matrix, transform the submatrix, - !> scale the elements with the corresponding factor, transform back - !> according to: trans_block_s = O^T * S * O - call diat_trafo(block_overlap, vec_diat_trafo, ksig, kpi, kdel, max(cgtoj%ang,cgtoi%ang)) - !> 3. Fill the overlap_scaled matrix with the back-transformed submatrix - overlap_scaled(1:msao(cgtoj%ang), 1:msao(cgtoi%ang)) = & - & block_overlap(offset_nao(cgtoj%ang+1)+1:offset_nao(cgtoj%ang+1)+msao(cgtoj%ang), & - & offset_nao(cgtoi%ang+1)+1:offset_nao(cgtoi%ang+1)+msao(cgtoi%ang)) - !> ---------------------------------------------------------------- - -end subroutine dipole_cgto_diat_scal + + ! Do the transformation and scaling + call diat_trafo(block_overlap, vec, ksig, kpi, kdel, cgtoj%ang, cgtoi%ang) + + ! Write back the scaled diatomic frame overlap + overlap_diat(1:msao(cgtoj%ang), 1:msao(cgtoi%ang)) = & + & block_overlap(mapj+1:mapj+msao(cgtoj%ang), mapi+1:mapi+msao(cgtoi%ang)) + +end subroutine dipole_cgto_diat pure subroutine dipole_grad_cgto(cgtoj, cgtoi, r2, vec, intcut, overlap, dpint, & & doverlap, ddpint) @@ -589,9 +581,9 @@ subroutine get_dipole_integrals_lat(mol, trans, cutoff, bas, overlap, dpint) end subroutine get_dipole_integrals_lat !> Evaluate dipole integrals for a molecular structure -!> with scaled overlap elements in the diatomic frame -subroutine get_dipole_integrals_diat_overlap_lat(mol, & - & trans, cutoff, bas, scal_fac, overlap, overlap_scaled, dpint) +!> with diatomic-frame-scaled overlap elements +subroutine get_dipole_integrals_diat_lat(mol, & + & trans, cutoff, bas, scal_fac, overlap, overlap_diat, dpint) !> Molecular structure data type(structure_type), intent(in) :: mol !> Lattice points within a given realspace cutoff @@ -604,12 +596,10 @@ subroutine get_dipole_integrals_diat_overlap_lat(mol, & real(wp), intent(in) :: scal_fac(:,:) !> Overlap matrix real(wp), intent(out) :: overlap(:, :) - !> Overlap matrix with scaled elements in the diatomic frame - real(wp), intent(out) :: overlap_scaled(:, :) + !> Overlap matrix with diatomic frame-scaled elements + real(wp), intent(out) :: overlap_diat(:, :) !> Dipole moment integral matrix real(wp), intent(out) :: dpint(:, :, :) - !> Transformation vector for the diatomic frame - real(wp) :: vec_diat_trafo(3) !> Scaling factors for the diatomic frame for the three differnt bonding motifs !> (sigma, pi, delta) real(wp) :: ksig, kpi, kdel @@ -617,7 +607,7 @@ subroutine get_dipole_integrals_diat_overlap_lat(mol, & integer :: iat, jat, izp, jzp, itr, is, js integer :: ish, jsh, ii, jj, iao, jao, nao real(wp) :: r2, vec(3), cutoff2 - real(wp), allocatable :: stmp(:), dtmp(:, :), sscaledtmp(:) + real(wp), allocatable :: stmp(:), dtmp(:, :), stmp_diat(:) if (size(scal_fac,1) /= 3) then error stop 'Error: scal_fac must have the dimension of 3, & @@ -625,18 +615,18 @@ subroutine get_dipole_integrals_diat_overlap_lat(mol, & end if overlap(:, :) = 0.0_wp - overlap_scaled(:, :) = 0.0_wp + overlap_diat(:, :) = 0.0_wp dpint(:, :, :) = 0.0_wp - allocate(stmp(msao(bas%maxl)**2), sscaledtmp(msao(bas%maxl)**2), & + allocate(stmp(msao(bas%maxl)**2), stmp_diat(msao(bas%maxl)**2), & & dtmp(3, msao(bas%maxl)**2)) cutoff2 = cutoff**2 !$omp parallel do schedule(runtime) default(none) & - !$omp shared(mol, bas, trans, cutoff2, overlap, overlap_scaled, dpint, scal_fac) & - !$omp private(r2, vec, stmp, dtmp, sscaledtmp) & + !$omp shared(mol, bas, trans, cutoff2, overlap, overlap_diat, dpint, scal_fac) & + !$omp private(r2, vec, stmp, dtmp, stmp_diat) & !$omp private(iat, jat, izp, jzp, itr, is, js, ish, jsh, ii, jj, iao, jao, nao) & - !$omp private(ksig, kpi, kdel, vec_diat_trafo) + !$omp private(ksig, kpi, kdel) do iat = 1, mol%nat izp = mol%id(iat) is = bas%ish_at(iat) @@ -648,7 +638,6 @@ subroutine get_dipole_integrals_diat_overlap_lat(mol, & r2 = vec(1)**2 + vec(2)**2 + vec(3)**2 if (r2 > cutoff2) cycle if (iat /= jat) then - call relvec(vec, sqrt(r2), vec_diat_trafo) !> Determine scaling factors from atom parameters ksig = 2.0_wp / (1.0_wp / scal_fac(1,mol%num(mol%id(iat))) & & + 1.0_wp / scal_fac(1,mol%num(mol%id(jat))) ) @@ -662,16 +651,16 @@ subroutine get_dipole_integrals_diat_overlap_lat(mol, & do jsh = 1, bas%nsh_id(jzp) jj = bas%iao_sh(js+jsh) stmp = 0.0_wp - sscaledtmp = 0.0_wp + stmp_diat = 0.0_wp dtmp = 0.0_wp if (iat /= jat) then - call dipole_cgto_diat_scal(bas%cgto(jsh, jzp), bas%cgto(ish, izp), & - & r2, vec, bas%intcut, vec_diat_trafo, ksig, kpi, kdel, & - & stmp, sscaledtmp, dtmp) + call dipole_cgto_diat(bas%cgto(jsh, jzp), bas%cgto(ish, izp), & + & r2, vec, bas%intcut, ksig, kpi, kdel, & + & stmp, stmp_diat, dtmp) else call dipole_cgto(bas%cgto(jsh, jzp), bas%cgto(ish, izp), & & r2, vec, bas%intcut, stmp, dtmp) - sscaledtmp = stmp + stmp_diat = stmp endif nao = msao(bas%cgto(jsh, jzp)%ang) @@ -681,8 +670,8 @@ subroutine get_dipole_integrals_diat_overlap_lat(mol, & overlap(jj+jao, ii+iao) = overlap(jj+jao, ii+iao) & & + stmp(jao + nao*(iao-1)) - overlap_scaled(jj+jao, ii+iao) = overlap_scaled(jj+jao, ii+iao) & - & + sscaledtmp(jao + nao*(iao-1)) + overlap_diat(jj+jao, ii+iao) = overlap_diat(jj+jao, ii+iao) & + & + stmp_diat(jao + nao*(iao-1)) dpint(:, jj+jao, ii+iao) = dpint(:, jj+jao, ii+iao) & & + dtmp(:, jao + nao*(iao-1)) @@ -696,6 +685,6 @@ subroutine get_dipole_integrals_diat_overlap_lat(mol, & end do end do -end subroutine get_dipole_integrals_diat_overlap_lat +end subroutine get_dipole_integrals_diat_lat end module tblite_integral_dipole diff --git a/src/tblite/integral/multipole.f90 b/src/tblite/integral/multipole.f90 index da81b201..1996ffe4 100644 --- a/src/tblite/integral/multipole.f90 +++ b/src/tblite/integral/multipole.f90 @@ -24,24 +24,26 @@ module tblite_integral_multipole use mctc_io_constants, only : pi use tblite_basis_type, only : basis_type, cgto_type use tblite_integral_trafo, only : transform0, transform1, transform2 - use tblite_integral_diat_trafo, only: relvec, diat_trafo + use tblite_integral_diat_trafo, only: diat_trafo implicit none private - public :: multipole_cgto, multipole_cgto_diat_scal, multipole_grad_cgto + public :: multipole_cgto, multipole_cgto_diat, multipole_grad_cgto public :: get_multipole_integrals - public :: maxl, msao + public :: maxl, msao, smap interface get_multipole_integrals module procedure :: get_multipole_integrals_lat - module procedure :: get_multipole_integrals_diat_overlap_lat + module procedure :: get_multipole_integrals_diat_lat end interface get_multipole_integrals integer, parameter :: maxl = 6 integer, parameter :: maxl2 = maxl*2 integer, parameter :: msao(0:maxl) = [1, 3, 5, 7, 9, 11, 13] integer, parameter :: mlao(0:maxl) = [1, 3, 6, 10, 15, 21, 28] + integer, parameter :: smap(0:maxl) = [0, 1, 4, 9, 16, 25, 36] integer, parameter :: lmap(0:maxl) = [0, 1, 4, 10, 20, 35, 56] + integer, parameter :: sdim(0:maxl) = [1, 4, 9, 16, 25, 36, 49] real(wp), parameter :: sqrtpi = sqrt(pi) real(wp), parameter :: sqrtpi3 = sqrtpi**3 @@ -422,9 +424,8 @@ pure subroutine multipole_cgto(cgtoj, cgtoi, r2, vec, intcut, overlap, dpint, qp end subroutine multipole_cgto - -pure subroutine multipole_cgto_diat_scal(cgtoj, cgtoi, r2, vec, intcut, vec_diat_trafo, & -& ksig, kpi, kdel, overlap, overlap_scaled, dpint, qpint) +pure subroutine multipole_cgto_diat(cgtoj, cgtoi, r2, vec, intcut, & +& ksig, kpi, kdel, overlap, overlap_diat, dpint, qpint) !> Description of contracted Gaussian function on center i type(cgto_type), intent(in) :: cgtoi !> Description of contracted Gaussian function on center j @@ -435,30 +436,26 @@ pure subroutine multipole_cgto_diat_scal(cgtoj, cgtoi, r2, vec, intcut, vec_diat real(wp), intent(in) :: vec(3) !> Maximum value of integral prefactor to consider real(wp), intent(in) :: intcut - !> Transformation vector for the diatomic frame - real(wp), intent(in) :: vec_diat_trafo(3) !> Scaling factors for the diatomic frame for the three differnt bonding motifs real(wp), intent(in) :: ksig, kpi, kdel !> Overlap integrals for the given pair i and j real(wp), intent(out) :: overlap(msao(cgtoj%ang), msao(cgtoi%ang)) - !> Scaled overlap integrals for the given pair i and j - real(wp), intent(out) :: overlap_scaled(msao(cgtoj%ang), msao(cgtoi%ang)) + !> Diatomic frame-scaled overlap integrals for the given pair i and j + real(wp), intent(out) :: overlap_diat(msao(cgtoj%ang), msao(cgtoi%ang)) !> Dipole moment integrals for the given pair i and j real(wp), intent(out) :: dpint(3, msao(cgtoj%ang), msao(cgtoi%ang)) !> Quadrupole moment integrals for the given pair i and j real(wp), intent(out) :: qpint(6, msao(cgtoj%ang), msao(cgtoi%ang)) - !> Block overlap matrix as a technical intermediate for the diatomic frame - real(wp) :: block_overlap(9,9) - !> Offset array for the block overlap matrix - !> (number of AOs that appear before the current angular momentum) - integer, parameter :: offset_nao(8) = [0, 1, 4, 9, 16, 25, 36, 49] - integer :: ip, jp, mli, mlj, l + integer :: ip, jp, mli, mlj, l, mapj, mapi real(wp) :: eab, oab, est, s1d(0:maxl2), rpi(3), rpj(3), cc, val, dip(3), quad(6), pre, tr real(wp) :: s3d(mlao(cgtoj%ang), mlao(cgtoi%ang)) real(wp) :: d3d(3, mlao(cgtoj%ang), mlao(cgtoi%ang)) real(wp) :: q3d(6, mlao(cgtoj%ang), mlao(cgtoi%ang)) + !> Block overlap matrix as a technical intermediate for the diatomic frame + real(wp) :: block_overlap(sdim(cgtoj%ang),sdim(cgtoi%ang)) + s3d(:, :) = 0.0_wp d3d(:, :, :) = 0.0_wp q3d(:, :, :) = 0.0_wp @@ -506,27 +503,21 @@ pure subroutine multipole_cgto_diat_scal(cgtoj, cgtoi, r2, vec, intcut, vec_diat end do end do - !> ---------- OVERLAP SCALING IN THE DIATOMIC FRAME ----------- - !> Transform 9x9 submatrix (in the case with s,p,d) to diatomic frame, - !> scale the elements with the corresponding factor, - !> transform them back and add them to the scaled overlap matrix + ! Write the cgto overlap into the diatomic matrix block_overlap = 0.0_wp - !> 1. Fill the 9x9 submatrix (initialized with 0's) - !> with the correct overlap matrix elements - block_overlap(offset_nao(cgtoj%ang+1)+1:offset_nao(cgtoj%ang+1)+msao(cgtoj%ang), & - & offset_nao(cgtoi%ang+1)+1:offset_nao(cgtoi%ang+1)+msao(cgtoi%ang)) = & + mapj = smap(cgtoj%ang) + mapi = smap(cgtoi%ang) + block_overlap(mapj+1:mapj+msao(cgtoj%ang), mapi+1:mapi+msao(cgtoi%ang)) = & & overlap(1:msao(cgtoj%ang), 1:msao(cgtoi%ang)) - !> 2. Set up transformation matrix, transform the submatrix, - !> scale the elements with the corresponding factor, transform back - !> according to: trans_block_s = O^T * S * O - call diat_trafo(block_overlap, vec_diat_trafo, ksig, kpi, kdel, max(cgtoj%ang,cgtoi%ang)) - !> 3. Fill the overlap_scaled matrix with the back-transformed submatrix - overlap_scaled(1:msao(cgtoj%ang), 1:msao(cgtoi%ang)) = & - & block_overlap(offset_nao(cgtoj%ang+1)+1:offset_nao(cgtoj%ang+1)+msao(cgtoj%ang), & - & offset_nao(cgtoi%ang+1)+1:offset_nao(cgtoi%ang+1)+msao(cgtoi%ang)) - !> ---------------------------------------------------------------- - -end subroutine multipole_cgto_diat_scal + + ! Do the transformation and scaling + call diat_trafo(block_overlap, vec, ksig, kpi, kdel, cgtoj%ang, cgtoi%ang) + + ! Write back the scaled diatomic frame overlap + overlap_diat(1:msao(cgtoj%ang), 1:msao(cgtoi%ang)) = & + & block_overlap(mapj+1:mapj+msao(cgtoj%ang), mapi+1:mapi+msao(cgtoi%ang)) + +end subroutine multipole_cgto_diat pure subroutine multipole_grad_cgto(cgtoj, cgtoi, r2, vec, intcut, overlap, dpint, qpint, & & doverlap, ddpintj, dqpintj, ddpinti, dqpinti) @@ -778,9 +769,9 @@ subroutine get_multipole_integrals_lat(mol, trans, cutoff, bas, overlap, dpint, end subroutine get_multipole_integrals_lat !> Evaluate multipole integrals for a molecular structure -!> with scaled overlap elements in the diatomic frame -subroutine get_multipole_integrals_diat_overlap_lat(mol, & - & trans, cutoff, bas, scal_fac, overlap, overlap_scaled, & +!> with diatomic-frame-scaled overlap elements +subroutine get_multipole_integrals_diat_lat(mol, & + & trans, cutoff, bas, scal_fac, overlap, overlap_diat, & & dpint, qpint) !> Molecular structure data type(structure_type), intent(in) :: mol @@ -794,22 +785,20 @@ subroutine get_multipole_integrals_diat_overlap_lat(mol, & real(wp), intent(in) :: scal_fac(:,:) !> Overlap matrix real(wp), intent(out) :: overlap(:, :) - !> Overlap matrix with scaled elements in the diatomic frame - real(wp), intent(out) :: overlap_scaled(:, :) + !> Overlap matrix with diatomic frame-scaled elements + real(wp), intent(out) :: overlap_diat(:, :) !> Dipole moment integral matrix real(wp), intent(out) :: dpint(:, :, :) !> Quadrupole moment integral matrix real(wp), intent(out) :: qpint(:, :, :) - !> Transformation vector for the diatomic frame - real(wp) :: vec_diat_trafo(3) - !> Scaling factors for the diatomic frame for the three differnt bonding motifs - !> (sigma, pi, delta) + + !> Scaling factors for the diatomic frame for sigma-, pi-, delta-bonding real(wp) :: ksig, kpi, kdel integer :: iat, jat, izp, jzp, itr, is, js integer :: ish, jsh, ii, jj, iao, jao, nao real(wp) :: r2, vec(3), cutoff2 - real(wp), allocatable :: stmp(:), dtmp(:, :), qtmp(:, :), sscaledtmp(:) + real(wp), allocatable :: stmp(:), dtmp(:, :), qtmp(:, :), stmp_diat(:) if (size(scal_fac,1) /= 3) then error stop 'Error: scal_fac must have the dimension of 3, & @@ -817,19 +806,19 @@ subroutine get_multipole_integrals_diat_overlap_lat(mol, & end if overlap(:, :) = 0.0_wp - overlap_scaled(:, :) = 0.0_wp + overlap_diat(:, :) = 0.0_wp dpint(:, :, :) = 0.0_wp qpint(:, :, :) = 0.0_wp allocate(stmp(msao(bas%maxl)**2), dtmp(3, msao(bas%maxl)**2), qtmp(6, msao(bas%maxl)**2), & - & sscaledtmp(msao(bas%maxl)**2)) + & stmp_diat(msao(bas%maxl)**2)) cutoff2 = cutoff**2 !$omp parallel do schedule(runtime) default(none) & - !$omp shared(mol, bas, trans, cutoff2, overlap, overlap_scaled, dpint, qpint, scal_fac) & - !$omp private(r2, vec, stmp, dtmp, qtmp, sscaledtmp) & + !$omp shared(mol, bas, trans, cutoff2, overlap, overlap_diat, dpint, qpint, scal_fac) & + !$omp private(r2, vec, stmp, dtmp, qtmp, stmp_diat) & !$omp private(iat, jat, izp, jzp, itr, is, js, ish, jsh, ii, jj, iao, jao, nao) & - !$omp private(ksig, kpi, kdel, vec_diat_trafo) + !$omp private(ksig, kpi, kdel) do iat = 1, mol%nat izp = mol%id(iat) is = bas%ish_at(iat) @@ -841,7 +830,6 @@ subroutine get_multipole_integrals_diat_overlap_lat(mol, & r2 = vec(1)**2 + vec(2)**2 + vec(3)**2 if (r2 > cutoff2) cycle if (iat /= jat) then - call relvec(vec, sqrt(r2), vec_diat_trafo) !> Determine scaling factors from atom parameters ksig = 2.0_wp / (1.0_wp / scal_fac(1,mol%num(mol%id(iat))) & & + 1.0_wp / scal_fac(1,mol%num(mol%id(jat))) ) @@ -855,17 +843,17 @@ subroutine get_multipole_integrals_diat_overlap_lat(mol, & do jsh = 1, bas%nsh_id(jzp) jj = bas%iao_sh(js+jsh) stmp = 0.0_wp - sscaledtmp = 0.0_wp + stmp_diat = 0.0_wp dtmp = 0.0_wp qtmp = 0.0_wp if (iat /= jat) then - call multipole_cgto_diat_scal(bas%cgto(jsh, jzp), bas%cgto(ish, izp), & - & r2, vec, bas%intcut, vec_diat_trafo, ksig, kpi, kdel, stmp, & - & sscaledtmp, dtmp, qtmp) + call multipole_cgto_diat(bas%cgto(jsh, jzp), bas%cgto(ish, izp), & + & r2, vec, bas%intcut, ksig, kpi, kdel, stmp, & + & stmp_diat, dtmp, qtmp) else call multipole_cgto(bas%cgto(jsh, jzp), bas%cgto(ish, izp), & & r2, vec, bas%intcut, stmp, dtmp, qtmp) - sscaledtmp = stmp + stmp_diat = stmp endif nao = msao(bas%cgto(jsh, jzp)%ang) @@ -875,8 +863,8 @@ subroutine get_multipole_integrals_diat_overlap_lat(mol, & overlap(jj+jao, ii+iao) = overlap(jj+jao, ii+iao) & & + stmp(jao + nao*(iao-1)) - overlap_scaled(jj+jao, ii+iao) = overlap_scaled(jj+jao, ii+iao) & - & + sscaledtmp(jao + nao*(iao-1)) + overlap_diat(jj+jao, ii+iao) = overlap_diat(jj+jao, ii+iao) & + & + stmp_diat(jao + nao*(iao-1)) dpint(:, jj+jao, ii+iao) = dpint(:, jj+jao, ii+iao) & & + dtmp(:, jao + nao*(iao-1)) @@ -893,6 +881,6 @@ subroutine get_multipole_integrals_diat_overlap_lat(mol, & end do end do -end subroutine get_multipole_integrals_diat_overlap_lat +end subroutine get_multipole_integrals_diat_lat end module tblite_integral_multipole diff --git a/src/tblite/integral/overlap.f90 b/src/tblite/integral/overlap.f90 index eb06e572..34bb5f3e 100644 --- a/src/tblite/integral/overlap.f90 +++ b/src/tblite/integral/overlap.f90 @@ -23,25 +23,27 @@ module tblite_integral_overlap use mctc_io, only : structure_type use mctc_io_constants, only : pi use tblite_basis_type, only : basis_type, cgto_type - use tblite_integral_diat_trafo, only: relvec, diat_trafo + use tblite_integral_diat_trafo, only: diat_trafo, diat_trafo_grad use tblite_integral_trafo, only : transform0, transform1, transform2 implicit none private - public :: overlap_cgto, overlap_cgto_diat_scal, overlap_grad_cgto, overlap_grad_cgto_diat_scal + public :: overlap_cgto, overlap_cgto_diat, overlap_grad_cgto, overlap_grad_cgto_diat public :: get_overlap - public :: maxl, msao + public :: maxl, msao, smap interface get_overlap module procedure :: get_overlap_lat - module procedure :: get_overlap_diatframe_lat + module procedure :: get_overlap_diat_lat end interface get_overlap integer, parameter :: maxl = 6 integer, parameter :: maxl2 = maxl*2 integer, parameter :: msao(0:maxl) = [1, 3, 5, 7, 9, 11, 13] integer, parameter :: mlao(0:maxl) = [1, 3, 6, 10, 15, 21, 28] + integer, parameter :: smap(0:maxl) = [0, 1, 4, 9, 16, 25, 36] integer, parameter :: lmap(0:maxl) = [0, 1, 4, 10, 20, 35, 56] + integer, parameter :: sdim(0:maxl) = [1, 4, 9, 16, 25, 36, 49] real(wp), parameter :: sqrtpi = sqrt(pi) real(wp), parameter :: sqrtpi3 = sqrtpi**3 @@ -337,9 +339,8 @@ pure subroutine overlap_cgto(cgtoj, cgtoi, r2, vec, intcut, overlap) end subroutine overlap_cgto - -pure subroutine overlap_cgto_diat_scal(cgtoj, cgtoi, r2, vec, intcut, & -& vec_diat_trafo, ksig, kpi, kdel, overlap, overlap_scaled) +pure subroutine overlap_cgto_diat(cgtoj, cgtoi, r2, vec, intcut, & +& ksig, kpi, kdel, overlap, overlap_diat) !> Description of contracted Gaussian function on center i type(cgto_type), intent(in) :: cgtoi !> Description of contracted Gaussian function on center j @@ -352,21 +353,16 @@ pure subroutine overlap_cgto_diat_scal(cgtoj, cgtoi, r2, vec, intcut, & real(wp), intent(in) :: ksig, kpi, kdel !> Maximum value of integral prefactor to consider real(wp), intent(in) :: intcut - !> Transformation vector for the diatomic frame - real(wp), intent(in) :: vec_diat_trafo(3) - !> Overlap integrals (scaled and unscaled) for the given pair i and j + !> Overlap integrals (unscaled and diatomic frame-scaled) for the given pair i and j real(wp), intent(out) :: overlap(msao(cgtoj%ang), msao(cgtoi%ang)), & - & overlap_scaled(msao(cgtoj%ang), msao(cgtoi%ang)) - - !> Block overlap matrix as a technical intermediate for the diatomic frame - real(wp) :: block_overlap(9,9) - !> Offset array for the block overlap matrix - !> (number of AOs that appear before the current angular momentum) - integer, parameter :: offset_nao(8) = [0, 1, 4, 9, 16, 25, 36, 49] + & overlap_diat(msao(cgtoj%ang), msao(cgtoi%ang)) - integer :: ip, jp, mli, mlj, l + integer :: ip, jp, mli, mlj, l, mapj, mapi real(wp) :: eab, oab, est, s1d(0:maxl2), rpi(3), rpj(3), cc, val, pre real(wp) :: s3d(mlao(cgtoj%ang), mlao(cgtoi%ang)) + + !> Block overlap matrix as a technical intermediate for the diatomic frame + real(wp) :: block_overlap(sdim(cgtoj%ang),sdim(cgtoi%ang)) s3d(:, :) = 0.0_wp @@ -396,34 +392,28 @@ pure subroutine overlap_cgto_diat_scal(cgtoj, cgtoi, r2, vec, intcut, & call transform0(cgtoj%ang, cgtoi%ang, s3d, overlap) - ! ---------- OVERLAP SCALING IN THE DIATOMIC FRAME ----------- - ! Transform 9x9 submatrix (in the case with s,p,d) to diatomic frame, - ! scale the elements with the corresponding factor, - ! transform them back and add them to the scaled overlap matrix + ! Write the cgto overlap and gradient into the diatomic matrix block_overlap = 0.0_wp - ! 1. Fill the 9x9 submatrix (initialized with 0's) - ! with the correct overlap matrix elements - block_overlap(offset_nao(cgtoj%ang+1)+1:offset_nao(cgtoj%ang+1)+msao(cgtoj%ang), & - & offset_nao(cgtoi%ang+1)+1:offset_nao(cgtoi%ang+1)+msao(cgtoi%ang)) = & + mapj = smap(cgtoj%ang) + mapi = smap(cgtoi%ang) + block_overlap(mapj+1:mapj+msao(cgtoj%ang), mapi+1:mapi+msao(cgtoi%ang)) = & & overlap(1:msao(cgtoj%ang), 1:msao(cgtoi%ang)) - ! 2. Set up transformation matrix, transform the submatrix, - ! scale the elements with the corresponding factor, transform back - ! according to: trans_block_s = O^T * S * O - call diat_trafo(block_overlap, vec_diat_trafo, ksig, kpi, kdel, max(cgtoj%ang,cgtoi%ang)) - ! 3. Fill the overlap_scaled matrix with the back-transformed submatrix - overlap_scaled(1:msao(cgtoj%ang), 1:msao(cgtoi%ang)) = & - & block_overlap(offset_nao(cgtoj%ang+1)+1:offset_nao(cgtoj%ang+1)+msao(cgtoj%ang), & - & offset_nao(cgtoi%ang+1)+1:offset_nao(cgtoi%ang+1)+msao(cgtoi%ang)) - ! ---------------------------------------------------------------- -end subroutine overlap_cgto_diat_scal + ! Do the transformation and scaling + call diat_trafo(block_overlap, vec, ksig, kpi, kdel, cgtoj%ang, cgtoi%ang) + + ! Write back the scaled diatomic frame overlap + overlap_diat(1:msao(cgtoj%ang), 1:msao(cgtoi%ang)) = & + & block_overlap(mapj+1:mapj+msao(cgtoj%ang), mapi+1:mapi+msao(cgtoi%ang)) + +end subroutine overlap_cgto_diat pure subroutine overlap_grad_cgto(cgtoj, cgtoi, r2, vec, intcut, overlap, doverlap) - !> Description of contracted Gaussian function on center i - type(cgto_type), intent(in) :: cgtoi !> Description of contracted Gaussian function on center j type(cgto_type), intent(in) :: cgtoj + !> Description of contracted Gaussian function on center i + type(cgto_type), intent(in) :: cgtoi !> Square distance between center i and j real(wp), intent(in) :: r2 !> Distance vector between center i and j, ri - rj @@ -474,18 +464,16 @@ pure subroutine overlap_grad_cgto(cgtoj, cgtoi, r2, vec, intcut, overlap, doverl end subroutine overlap_grad_cgto -pure subroutine overlap_grad_cgto_diat_scal(cgtoj, cgtoi, r2, vec, intcut, & -& vec_diat_trafo, ksig, kpi, kdel, overlap, doverlap, overlap_scaled, doverlap_scaled) - !> Description of contracted Gaussian function on center i - type(cgto_type), intent(in) :: cgtoi +pure subroutine overlap_grad_cgto_diat(cgtoj, cgtoi, r2, vec, intcut, & +& ksig, kpi, kdel, overlap, doverlap, overlap_diat, doverlap_diat) !> Description of contracted Gaussian function on center j type(cgto_type), intent(in) :: cgtoj + !> Description of contracted Gaussian function on center i + type(cgto_type), intent(in) :: cgtoi !> Square distance between center i and j real(wp), intent(in) :: r2 !> Distance vector between center i and j, ri - rj real(wp), intent(in) :: vec(3) - !> Transformation vector for the diatomic frame - real(wp), intent(in) :: vec_diat_trafo(3) !> Scaling factors for the diatomic frame for the three differnt bonding motifs real(wp), intent(in) :: ksig, kpi, kdel !> Maximum value of integral prefactor to consider @@ -494,24 +482,21 @@ pure subroutine overlap_grad_cgto_diat_scal(cgtoj, cgtoi, r2, vec, intcut, & real(wp), intent(out) :: overlap(msao(cgtoj%ang), msao(cgtoi%ang)) !> Overlap integral gradient for the given pair i and j real(wp), intent(out) :: doverlap(3, msao(cgtoj%ang), msao(cgtoi%ang)) - !> Overlap integrals for the given pair i and j - real(wp), intent(out) :: overlap_scaled(msao(cgtoj%ang), msao(cgtoi%ang)) - !> Overlap integral gradient for the given pair i and j - real(wp), intent(out) :: doverlap_scaled(3, msao(cgtoj%ang), msao(cgtoi%ang)) + !> Diatomic-frame-scaled overlap integrals for the given pair i and j + real(wp), intent(out) :: overlap_diat(msao(cgtoj%ang), msao(cgtoi%ang)) + !> Diatomic-frame-scaled overlap integral gradient for the given pair i and j + real(wp), intent(out) :: doverlap_diat(3, msao(cgtoj%ang), msao(cgtoi%ang)) - !> Block overlap matrix as a technical intermediate for the diatomic frame - !> The derivative is for each dimension (x,y,z) separate - real(wp) :: block_overlap(9,9) - real(wp) :: block_doverlap(9,9) - !> Offset array for the block overlap matrix - !> (number of AOs that appear before the current angular momentum) - integer, parameter :: offset_nao(8) = [0, 1, 4, 9, 16, 25, 36, 49] - - integer :: ip, jp, mli, mlj, l, k + integer :: ip, jp, mli, mlj, l, ic, mapi, mapj real(wp) :: eab, oab, est, s1d(0:maxl2), rpi(3), rpj(3), cc, val, grad(3), pre real(wp) :: s3d(mlao(cgtoj%ang), mlao(cgtoi%ang)) real(wp) :: ds3d(3, mlao(cgtoj%ang), mlao(cgtoi%ang)) + !> Block overlap matrix as a technical intermediate for the diatomic frame + !> The derivative is for each dimension (x,y,z) separate + real(wp) :: block_overlap(sdim(cgtoj%ang),sdim(cgtoi%ang)) + real(wp) :: block_doverlap(3,sdim(cgtoj%ang),sdim(cgtoi%ang)) + s3d(:, :) = 0.0_wp ds3d(:, :, :) = 0.0_wp @@ -543,44 +528,25 @@ pure subroutine overlap_grad_cgto_diat_scal(cgtoj, cgtoi, r2, vec, intcut, & call transform0(cgtoj%ang, cgtoi%ang, s3d, overlap) call transform1(cgtoj%ang, cgtoi%ang, ds3d, doverlap) - !> ---------- OVERLAP SCALING IN THE DIATOMIC FRAME ----------- - !> Transform 9x9 submatrix (in the case with s,p,d) to diatomic frame, - !> scale the elements with the corresponding factor, - !> transform them back and add them to the scaled overlap matrix + ! Write the cgto overlap and gradient into the diatomic matrix block_overlap = 0.0_wp - !> 1. Fill the 9x9 submatrix (initialized with 0's) - !> with the correct overlap matrix elements - block_overlap(offset_nao(cgtoj%ang+1)+1:offset_nao(cgtoj%ang+1)+msao(cgtoj%ang), & - & offset_nao(cgtoi%ang+1)+1:offset_nao(cgtoi%ang+1)+msao(cgtoi%ang)) = & + mapj = smap(cgtoj%ang) + mapi = smap(cgtoi%ang) + block_overlap(mapj+1:mapj+msao(cgtoj%ang), mapi+1:mapi+msao(cgtoi%ang)) = & & overlap(1:msao(cgtoj%ang), 1:msao(cgtoi%ang)) - !> 2. Set up transformation matrix, transform the submatrix, - !> scale the elements with the corresponding factor, transform back - !> according to: trans_block_s = O^T * S * O - call diat_trafo(block_overlap, vec_diat_trafo, ksig, kpi, kdel, max(cgtoj%ang,cgtoi%ang)) - !> 3. Fill the overlap_scaled matrix with the back-transformed submatrix - overlap_scaled(1:msao(cgtoj%ang), 1:msao(cgtoi%ang)) = & - & block_overlap(offset_nao(cgtoj%ang+1)+1:offset_nao(cgtoj%ang+1)+msao(cgtoj%ang), & - & offset_nao(cgtoi%ang+1)+1:offset_nao(cgtoi%ang+1)+msao(cgtoi%ang)) - - !> After we have transformed and scaled the overlap itself, - !> we do the same for each dimension of the derivative of the overlap. - do k = 1, 3 - !> reinitialize the submatrix for each dimension to 0 - block_doverlap = 0.0_wp - !> 1. Fill the 9x9 submatrix for each dimension with the derivative matrix elements - block_doverlap(offset_nao(cgtoj%ang+1)+1:offset_nao(cgtoj%ang+1)+msao(cgtoj%ang), & - & offset_nao(cgtoi%ang+1)+1:offset_nao(cgtoi%ang+1)+msao(cgtoi%ang)) = & - & doverlap(k,1:msao(cgtoj%ang), 1:msao(cgtoi%ang)) - !> 2. Set up and perform the transformation - call diat_trafo(block_doverlap, vec_diat_trafo, ksig, kpi, kdel, max(cgtoj%ang,cgtoi%ang)) - !> 3. Fill the doverlap_scaled matrix with the back-transformed submatrix for each dimension - doverlap_scaled(k,1:msao(cgtoj%ang), 1:msao(cgtoi%ang)) = & - & block_doverlap(offset_nao(cgtoj%ang+1)+1:offset_nao(cgtoj%ang+1)+msao(cgtoj%ang), & - & offset_nao(cgtoi%ang+1)+1:offset_nao(cgtoi%ang+1)+msao(cgtoi%ang)) - end do - !> ---------------------------------------------------------------- - -end subroutine overlap_grad_cgto_diat_scal + block_doverlap(:,mapj+1:mapj+msao(cgtoj%ang), mapi+1:mapi+msao(cgtoi%ang)) = & + & doverlap(:,1:msao(cgtoj%ang), 1:msao(cgtoi%ang)) + + ! Do the transformation and scaling + call diat_trafo_grad(block_overlap, block_doverlap, vec, ksig, kpi, kdel, cgtoj%ang, cgtoi%ang) + + ! Write back the scaled diatomic frame overlap and gradient + overlap_diat(1:msao(cgtoj%ang), 1:msao(cgtoi%ang)) = & + & block_overlap(mapj+1:mapj+msao(cgtoj%ang), mapi+1:mapi+msao(cgtoi%ang)) + doverlap_diat(:, 1:msao(cgtoj%ang), 1:msao(cgtoi%ang)) = & + & block_doverlap(:, mapj+1:mapj+msao(cgtoj%ang), mapi+1:mapi+msao(cgtoi%ang)) + +end subroutine overlap_grad_cgto_diat !> Evaluate overlap for a molecular structure @@ -644,9 +610,8 @@ subroutine get_overlap_lat(mol, trans, cutoff, bas, overlap) end subroutine get_overlap_lat -!> Evaluate overlap for a molecular structure, -!> with scaled elements in the diatomic frame -subroutine get_overlap_diatframe_lat(mol, trans, cutoff, bas, scal_fac, overlap, overlap_scaled) +!> Evaluate overlap and diatomic frame scaling +subroutine get_overlap_diat_lat(mol, trans, cutoff, bas, scal_fac, overlap, overlap_diat) !> Molecular structure data type(structure_type), intent(in) :: mol !> Lattice points within a given realspace cutoff @@ -659,10 +624,8 @@ subroutine get_overlap_diatframe_lat(mol, trans, cutoff, bas, scal_fac, overlap, real(wp), intent(in) :: scal_fac(:,:) !> Overlap matrix real(wp), intent(out) :: overlap(:, :) - !> Overlap matrix with scaled elements in the diatomic frame - real(wp), intent(out) :: overlap_scaled(:, :) - !> Transformation vector for the diatomic frame - real(wp) :: vec_diat_trafo(3) + !> Overlap matrix with diatomic frame-scaled elements in the diatomic frame + real(wp), intent(out) :: overlap_diat(:, :) !> Scaling factors for the diatomic frame for the three differnt bonding motifs !> (sigma, pi, delta) real(wp) :: ksig, kpi, kdel @@ -670,7 +633,7 @@ subroutine get_overlap_diatframe_lat(mol, trans, cutoff, bas, scal_fac, overlap, integer :: iat, jat, izp, jzp, itr, is, js integer :: ish, jsh, ii, jj, iao, jao, nao real(wp) :: r2, vec(3), cutoff2 - real(wp), allocatable :: stmp(:), sscaledtmp(:) + real(wp), allocatable :: stmp(:), stmp_diat(:) if (size(scal_fac,1) /= 3) then error stop 'Error: scal_fac must have the dimension of 3, & @@ -678,16 +641,16 @@ subroutine get_overlap_diatframe_lat(mol, trans, cutoff, bas, scal_fac, overlap, end if overlap(:, :) = 0.0_wp - overlap_scaled(:, :) = 0.0_wp + overlap_diat(:, :) = 0.0_wp - allocate(stmp(msao(bas%maxl)**2), sscaledtmp(msao(bas%maxl)**2)) + allocate(stmp(msao(bas%maxl)**2), stmp_diat(msao(bas%maxl)**2)) cutoff2 = cutoff**2 !$omp parallel do schedule(runtime) default(none) & - !$omp shared(mol, bas, trans, cutoff2, overlap, overlap_scaled,scal_fac) & - !$omp private(r2, vec, stmp, sscaledtmp) & + !$omp shared(mol, bas, trans, cutoff2, overlap, overlap_diat, scal_fac) & + !$omp private(r2, vec, stmp, stmp_diat) & !$omp private(iat, jat, izp, jzp, itr, is, js, ish, jsh, ii, jj, iao, jao, nao) & - !$omp private(ksig, kpi, kdel, vec_diat_trafo) + !$omp private(ksig, kpi, kdel) do iat = 1, mol%nat izp = mol%id(iat) is = bas%ish_at(iat) @@ -699,7 +662,6 @@ subroutine get_overlap_diatframe_lat(mol, trans, cutoff, bas, scal_fac, overlap, r2 = vec(1)**2 + vec(2)**2 + vec(3)**2 if (r2 > cutoff2) cycle if (iat /= jat) then - call relvec(vec, sqrt(r2), vec_diat_trafo) !> Determine scaling factors from atom parameters ksig = 2.0_wp / (1.0_wp / scal_fac(1,mol%num(mol%id(iat))) & & + 1.0_wp / scal_fac(1,mol%num(mol%id(jat))) ) @@ -713,15 +675,14 @@ subroutine get_overlap_diatframe_lat(mol, trans, cutoff, bas, scal_fac, overlap, do jsh = 1, bas%nsh_id(jzp) jj = bas%iao_sh(js+jsh) stmp = 0.0_wp - sscaledtmp = 0.0_wp + stmp_diat = 0.0_wp if (iat /= jat) then - call overlap_cgto_diat_scal(bas%cgto(jsh, jzp), bas%cgto(ish, izp), & - & r2, vec, bas%intcut, vec_diat_trafo, & - & ksig, kpi, kdel, stmp, sscaledtmp) + call overlap_cgto_diat(bas%cgto(jsh, jzp), bas%cgto(ish, izp), & + & r2, vec, bas%intcut, ksig, kpi, kdel, stmp, stmp_diat) else call overlap_cgto(bas%cgto(jsh, jzp), bas%cgto(ish, izp), & & r2, vec, bas%intcut, stmp) - sscaledtmp = stmp + stmp_diat = stmp endif nao = msao(bas%cgto(jsh, jzp)%ang) @@ -731,8 +692,8 @@ subroutine get_overlap_diatframe_lat(mol, trans, cutoff, bas, scal_fac, overlap, overlap(jj+jao, ii+iao) = overlap(jj+jao, ii+iao) & & + stmp(jao + nao*(iao-1)) - overlap_scaled(jj+jao, ii+iao) = overlap_scaled(jj+jao, ii+iao) & - & + sscaledtmp(jao + nao*(iao-1)) + overlap_diat(jj+jao, ii+iao) = overlap_diat(jj+jao, ii+iao) & + & + stmp_diat(jao + nao*(iao-1)) end do end do @@ -743,6 +704,6 @@ subroutine get_overlap_diatframe_lat(mol, trans, cutoff, bas, scal_fac, overlap, end do end do -end subroutine get_overlap_diatframe_lat +end subroutine get_overlap_diat_lat end module tblite_integral_overlap diff --git a/src/tblite/integral/trafo.f90 b/src/tblite/integral/trafo.f90 index ae98ac37..42623554 100644 --- a/src/tblite/integral/trafo.f90 +++ b/src/tblite/integral/trafo.f90 @@ -107,12 +107,12 @@ pure subroutine transform0(lj, li, cart, sphr) case(0, 1) sphr = cart case(2) - ! sphr = matmul(dtrafo, cart) - sphr(1, :) = cart(3, :) - 0.5_wp * (cart(1, :) + cart(2, :)) - sphr(2, :) = s3 * cart(5, :) - sphr(3, :) = s3 * cart(6, :) - sphr(4, :) = s3_4 * (cart(1, :) - cart(2, :)) - sphr(5, :) = s3 * cart(4, :) + !sphr = matmul(dtrafo, cart) + sphr(3, :) = cart(3, :) - 0.5_wp * (cart(1, :) + cart(2, :)) + sphr(4, :) = s3 * cart(5, :) + sphr(2, :) = s3 * cart(6, :) + sphr(5, :) = s3_4 * (cart(1, :) - cart(2, :)) + sphr(1, :) = s3 * cart(4, :) case(3) sphr = matmul(ftrafo, cart) case(4) @@ -124,34 +124,34 @@ pure subroutine transform0(lj, li, cart, sphr) case(2) select case(lj) case(0, 1) - ! sphr = matmul(cart, transpose(dtrafo)) - sphr(:, 1) = cart(:, 3) - 0.5_wp * (cart(:, 1) + cart(:, 2)) - sphr(:, 2) = s3 * cart(:, 5) - sphr(:, 3) = s3 * cart(:, 6) - sphr(:, 4) = s3_4 * (cart(:, 1) - cart(:, 2)) - sphr(:, 5) = s3 * cart(:, 4) + !sphr = matmul(cart, transpose(dtrafo)) + sphr(:, 3) = cart(:, 3) - 0.5_wp * (cart(:, 1) + cart(:, 2)) + sphr(:, 4) = s3 * cart(:, 5) + sphr(:, 2) = s3 * cart(:, 6) + sphr(:, 5) = s3_4 * (cart(:, 1) - cart(:, 2)) + sphr(:, 1) = s3 * cart(:, 4) case(2) - ! sphr = matmul(dtrafo, matmul(cart, transpose(dtrafo))) - sphr(1, 1) = cart(3, 3) & + !sphr = matmul(dtrafo, matmul(cart, transpose(dtrafo))) + sphr(3, 3) = cart(3, 3) & & - 0.5_wp * (cart(3, 1) + cart(3, 2) + cart(1, 3) + cart(2, 3)) & & + 0.25_wp * (cart(1, 1) + cart(1, 2) + cart(2, 1) + cart(2, 2)) - sphr([2, 3, 5], 1) = s3 * cart([5, 6, 4], 3) & + sphr([4, 2, 1], 3) = s3 * cart([5, 6, 4], 3) & & - s3_4 * (cart([5, 6, 4], 1) + cart([5, 6, 4], 2)) - sphr(4, 1) = s3_4 * (cart(1, 3) - cart(2, 3)) & + sphr(5, 3) = s3_4 * (cart(1, 3) - cart(2, 3)) & & - s3 * 0.25_wp * (cart(1, 1) - cart(2, 1) + cart(1, 2) - cart(2, 2)) - sphr(1, 2) = s3 * cart(3, 5) - s3_4 * (cart(1, 5) + cart(2, 5)) - sphr([2, 3, 5], 2) = 3 * cart([5, 6, 4], 5) - sphr(4, 2) = 1.5_wp * (cart(1, 5) - cart(2, 5)) - sphr(1, 3) = s3 * cart(3, 6) - s3_4 * (cart(1, 6) + cart(2, 6)) - sphr([2, 3, 5], 3) = 3 * cart([5, 6, 4], 6) - sphr(4, 3) = 1.5_wp * (cart(1, 6) - cart(2, 6)) - sphr(1, 4) = s3_4 * (cart(3, 1) - cart(3, 2)) & + sphr(3, 4) = s3 * cart(3, 5) - s3_4 * (cart(1, 5) + cart(2, 5)) + sphr([4, 2, 1], 4) = 3 * cart([5, 6, 4], 5) + sphr(5, 4) = 1.5_wp * (cart(1, 5) - cart(2, 5)) + sphr(3, 2) = s3 * cart(3, 6) - s3_4 * (cart(1, 6) + cart(2, 6)) + sphr([4, 2, 1], 2) = 3 * cart([5, 6, 4], 6) + sphr(5, 2) = 1.5_wp * (cart(1, 6) - cart(2, 6)) + sphr(3, 5) = s3_4 * (cart(3, 1) - cart(3, 2)) & & - s3 * 0.25_wp * (cart(1, 1) - cart(1, 2) + cart(2, 1) - cart(2, 2)) - sphr([2, 3, 5], 4) = 1.5_wp * (cart([5, 6, 4], 1) - cart([5, 6, 4], 2)) - sphr(4, 4) = 0.75_wp * (cart(1, 1) - cart(2, 1) - cart(1, 2) + cart(2, 2)) - sphr(1, 5) = s3 * cart(3, 4) - s3_4 * (cart(1, 4) + cart(2, 4)) - sphr([2, 3, 5], 5) = 3 * cart([5, 6, 4], 4) - sphr(4, 5) = 1.5_wp * (cart(1, 4) - cart(2, 4)) + sphr([4, 2, 1], 5) = 1.5_wp * (cart([5, 6, 4], 1) - cart([5, 6, 4], 2)) + sphr(5, 5) = 0.75_wp * (cart(1, 1) - cart(2, 1) - cart(1, 2) + cart(2, 2)) + sphr(3, 1) = s3 * cart(3, 4) - s3_4 * (cart(1, 4) + cart(2, 4)) + sphr([4, 2, 1], 1) = 3 * cart([5, 6, 4], 4) + sphr(5, 1) = 1.5_wp * (cart(1, 4) - cart(2, 4)) case(3) sphr = matmul(ftrafo, matmul(cart, transpose(dtrafo))) case(4) diff --git a/test/unit/test_ceh.f90 b/test/unit/test_ceh.f90 index 37e4d41b..148502dd 100644 --- a/test/unit/test_ceh.f90 +++ b/test/unit/test_ceh.f90 @@ -474,114 +474,114 @@ subroutine test_hamiltonian_s2(error) integer, parameter :: nao = 18 real(wp), parameter :: hamiltonian(nao, nao) = reshape([& - & -5.7642093144110E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -1.8327174566928E-01_wp, +0.0000000000000E+00_wp, +2.2661674580606E-01_wp, & - & +0.0000000000000E+00_wp, -2.1711090569016E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, -5.3180811904793E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, -1.1516226432909E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +2.1604179999700E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, -5.3180811904793E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -2.2661674580606E-01_wp, +0.0000000000000E+00_wp, +2.6953901229836E-01_wp, & - & +0.0000000000000E+00_wp, -1.8797977314300E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -5.3180811904793E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -1.1516226432909E-01_wp, +0.0000000000000E+00_wp, +2.1604179999700E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, -2.9175444046022E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -2.1711090569016E-01_wp, +0.0000000000000E+00_wp, +1.8797977314300E-01_wp, & - & +0.0000000000000E+00_wp, -7.5823435266772E-02_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, -2.9175444046022E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -2.1604179999700E-01_wp, +0.0000000000000E+00_wp, +2.3389877153471E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -2.9175444046022E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, -2.1604179999700E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +2.3389877153471E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, -2.9175444046022E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, -1.6808397034405E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, -2.9175444046022E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, -1.6808397034405E-01_wp, & - & -1.8327174566928E-01_wp, +0.0000000000000E+00_wp, -2.2661674580606E-01_wp, & - & +0.0000000000000E+00_wp, -2.1711090569016E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -5.7642093144110E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, -1.1516226432909E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -2.1604179999700E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, -5.3180811904793E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +2.2661674580606E-01_wp, +0.0000000000000E+00_wp, +2.6953901229836E-01_wp, & - & +0.0000000000000E+00_wp, +1.8797977314300E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, -5.3180811904793E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -1.1516226432909E-01_wp, +0.0000000000000E+00_wp, -2.1604179999700E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -5.3180811904793E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -2.1711090569016E-01_wp, +0.0000000000000E+00_wp, -1.8797977314300E-01_wp, & - & +0.0000000000000E+00_wp, -7.5823435266772E-02_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, -2.9175444046022E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +2.1604179999700E-01_wp, +0.0000000000000E+00_wp, +2.3389877153471E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, -2.9175444046022E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +2.1604179999700E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +2.3389877153471E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -2.9175444046022E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, -1.6808397034405E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, -2.9175444046022E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, -1.6808397034405E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, -2.9175444046022E-01_wp],& + & -5.76420931441104E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -1.83271745669283E-01_wp, 0.00000000000000E+00_wp, 2.26616745806055E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -2.17110905690164E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, -5.31808119047928E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, -1.15162264329086E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 2.16041799997000E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -5.31808119047928E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -2.26616745806056E-01_wp, 0.00000000000000E+00_wp, 2.69539012298359E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -1.87979773142995E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -5.31808119047928E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -1.15162264329086E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 2.16041799997000E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, -2.91754440460222E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, -1.68083970344050E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -2.91754440460222E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, -2.16041799997000E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 2.33898771534709E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -2.91754440460222E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -2.17110905690164E-01_wp, 0.00000000000000E+00_wp, 1.87979773142995E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -7.58234352667724E-02_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, -2.91754440460222E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -2.16041799997000E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 2.33898771534709E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -2.91754440460222E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -1.68083970344050E-01_wp,& + & -1.83271745669283E-01_wp, 0.00000000000000E+00_wp, -2.26616745806056E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -2.17110905690164E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -5.76420931441104E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, -1.15162264329086E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -2.16041799997000E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, -5.31808119047928E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 2.26616745806055E-01_wp, 0.00000000000000E+00_wp, 2.69539012298359E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 1.87979773142995E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -5.31808119047928E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -1.15162264329086E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, -2.16041799997000E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -5.31808119047928E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, -1.68083970344050E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, -2.91754440460222E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 2.16041799997000E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 2.33898771534709E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -2.91754440460222E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -2.17110905690164E-01_wp, 0.00000000000000E+00_wp, -1.87979773142995E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -7.58234352667724E-02_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -2.91754440460222E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 2.16041799997000E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 2.33898771534709E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, -2.91754440460222E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -1.68083970344050E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -2.91754440460222E-01_wp],& & shape(hamiltonian)) type(structure_type) :: mol @@ -598,63 +598,63 @@ subroutine test_hamiltonian_sih4(error) integer, parameter :: nao = 13 real(wp), parameter :: hamiltonian(nao, nao) = reshape([& - & -5.2140420559246E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -2.2761846976247E-01_wp, -2.2761846976247E-01_wp, -2.2761846976247E-01_wp, & - & -2.2761846976247E-01_wp, +0.0000000000000E+00_wp, -4.8639401015524E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, -1.6954715848881E-01_wp, +1.6954715848881E-01_wp, & - & +1.6954715848881E-01_wp, -1.6954715848881E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, -4.8639401015524E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +1.6954715848881E-01_wp, & - & +1.6954715848881E-01_wp, -1.6954715848881E-01_wp, -1.6954715848881E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -4.8639401015524E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -1.6954715848881E-01_wp, +1.6954715848881E-01_wp, -1.6954715848881E-01_wp, & - & +1.6954715848881E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, -2.4597945091348E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, -1.0301163014236E-17_wp, -1.0301163014236E-17_wp, & - & -1.0301163014236E-17_wp, -1.0301163014236E-17_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, -2.4597945091348E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +1.5146408363682E-01_wp, & - & -1.5146408363682E-01_wp, -1.5146408363682E-01_wp, +1.5146408363682E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -2.4597945091348E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +1.5146408363682E-01_wp, -1.5146408363682E-01_wp, +1.5146408363682E-01_wp, & - & -1.5146408363682E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, -2.4597945091348E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, -2.4597945091348E-01_wp, -1.5146408363682E-01_wp, & - & -1.5146408363682E-01_wp, +1.5146408363682E-01_wp, +1.5146408363682E-01_wp, & - & -2.2761846976247E-01_wp, -1.6954715848881E-01_wp, +1.6954715848881E-01_wp, & - & -1.6954715848881E-01_wp, -1.0301163014236E-17_wp, +1.5146408363682E-01_wp, & - & +1.5146408363682E-01_wp, +0.0000000000000E+00_wp, -1.5146408363682E-01_wp, & - & -4.7036092200061E-01_wp, -3.3693071890466E-02_wp, -3.3693071890466E-02_wp, & - & -3.3693071890466E-02_wp, -2.2761846976247E-01_wp, +1.6954715848881E-01_wp, & - & +1.6954715848881E-01_wp, +1.6954715848881E-01_wp, -1.0301163014236E-17_wp, & - & -1.5146408363682E-01_wp, -1.5146408363682E-01_wp, +0.0000000000000E+00_wp, & - & -1.5146408363682E-01_wp, -3.3693071890466E-02_wp, -4.7036092200061E-01_wp, & - & -3.3693071890466E-02_wp, -3.3693071890466E-02_wp, -2.2761846976247E-01_wp, & - & +1.6954715848881E-01_wp, -1.6954715848881E-01_wp, -1.6954715848881E-01_wp, & - & -1.0301163014236E-17_wp, -1.5146408363682E-01_wp, +1.5146408363682E-01_wp, & - & +0.0000000000000E+00_wp, +1.5146408363682E-01_wp, -3.3693071890466E-02_wp, & - & -3.3693071890466E-02_wp, -4.7036092200061E-01_wp, -3.3693071890466E-02_wp, & - & -2.2761846976247E-01_wp, -1.6954715848881E-01_wp, -1.6954715848881E-01_wp, & - & +1.6954715848881E-01_wp, -1.0301163014236E-17_wp, +1.5146408363682E-01_wp, & - & -1.5146408363682E-01_wp, +0.0000000000000E+00_wp, +1.5146408363682E-01_wp, & - & -3.3693071890466E-02_wp, -3.3693071890466E-02_wp, -3.3693071890466E-02_wp, & - & -4.7036092200061E-01_wp],shape(hamiltonian)) + & -5.21404205592464E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -2.27618469762468E-01_wp, -2.27618469762468E-01_wp, -2.27618469762468E-01_wp,& + & -2.27618469762468E-01_wp, 0.00000000000000E+00_wp, -4.86394010155240E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, -1.69547158488809E-01_wp, 1.69547158488809E-01_wp,& + & 1.69547158488809E-01_wp, -1.69547158488809E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, -4.86394010155240E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 1.69547158488809E-01_wp,& + & 1.69547158488809E-01_wp, -1.69547158488809E-01_wp, -1.69547158488809E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -4.86394010155240E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -1.69547158488809E-01_wp, 1.69547158488809E-01_wp, -1.69547158488809E-01_wp,& + & 1.69547158488809E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -2.45979450913480E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, -1.51464083636824E-01_wp, -1.51464083636824E-01_wp,& + & 1.51464083636824E-01_wp, 1.51464083636824E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, -2.45979450913480E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 1.51464083636824E-01_wp,& + & -1.51464083636824E-01_wp, 1.51464083636824E-01_wp, -1.51464083636824E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -2.45979450913480E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -2.53371538867122E-17_wp, -2.53371538867122E-17_wp, -2.53371538867122E-17_wp,& + & -2.53371538867122E-17_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -2.45979450913480E-01_wp,& + & 0.00000000000000E+00_wp, 1.51464083636824E-01_wp, -1.51464083636824E-01_wp,& + & -1.51464083636824E-01_wp, 1.51464083636824E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, -2.45979450913480E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -2.27618469762468E-01_wp, -1.69547158488809E-01_wp, 1.69547158488809E-01_wp,& + & -1.69547158488809E-01_wp, -1.51464083636824E-01_wp, 1.51464083636824E-01_wp,& + & -2.53371538867122E-17_wp, 1.51464083636824E-01_wp, 0.00000000000000E+00_wp,& + & -4.70360922000613E-01_wp, -3.36930718904659E-02_wp, -3.36930718904659E-02_wp,& + & -3.36930718904659E-02_wp, -2.27618469762468E-01_wp, 1.69547158488809E-01_wp,& + & 1.69547158488809E-01_wp, 1.69547158488809E-01_wp, -1.51464083636824E-01_wp,& + & -1.51464083636824E-01_wp, -2.53371538867122E-17_wp, -1.51464083636824E-01_wp,& + & 0.00000000000000E+00_wp, -3.36930718904659E-02_wp, -4.70360922000613E-01_wp,& + & -3.36930718904659E-02_wp, -3.36930718904659E-02_wp, -2.27618469762468E-01_wp,& + & 1.69547158488809E-01_wp, -1.69547158488809E-01_wp, -1.69547158488809E-01_wp,& + & 1.51464083636824E-01_wp, 1.51464083636824E-01_wp, -2.53371538867122E-17_wp,& + & -1.51464083636824E-01_wp, 0.00000000000000E+00_wp, -3.36930718904659E-02_wp,& + & -3.36930718904659E-02_wp, -4.70360922000613E-01_wp, -3.36930718904659E-02_wp,& + & -2.27618469762468E-01_wp, -1.69547158488809E-01_wp, -1.69547158488809E-01_wp,& + & 1.69547158488809E-01_wp, 1.51464083636824E-01_wp, -1.51464083636824E-01_wp,& + & -2.53371538867122E-17_wp, 1.51464083636824E-01_wp, 0.00000000000000E+00_wp,& + & -3.36930718904659E-02_wp, -3.36930718904659E-02_wp, -3.36930718904659E-02_wp,& + & -4.70360922000613E-01_wp],shape(hamiltonian)) type(structure_type) :: mol @@ -712,114 +712,114 @@ subroutine test_overlap_diat_s2(error) integer, parameter :: nao = 18 real(wp), parameter :: overlap_diat(nao, nao) = reshape([& - & +9.9999999986933E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +4.8217737784357E-01_wp, +0.0000000000000E+00_wp, -5.5752294134525E-01_wp, & - & +0.0000000000000E+00_wp, +5.5764799996744E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +9.9999999999806E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +2.6810514555495E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -5.4029331669609E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +9.9999999999806E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +5.5752294134525E-01_wp, +0.0000000000000E+00_wp, -6.2750412685952E-01_wp, & - & +0.0000000000000E+00_wp, +4.7011372384704E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +9.9999999999806E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +2.6810514555495E-01_wp, +0.0000000000000E+00_wp, -5.4029331669609E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +9.9999999983021E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +5.5764799996744E-01_wp, +0.0000000000000E+00_wp, -4.7011372384704E-01_wp, & - & +0.0000000000000E+00_wp, +2.2909719098522E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +9.9999999983021E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +5.4029331669609E-01_wp, +0.0000000000000E+00_wp, -7.0671490080821E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +9.9999999983021E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +5.4029331669609E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -7.0671490080821E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +9.9999999983021E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +5.0785835962169E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +9.9999999983021E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +5.0785835962169E-01_wp, & - & +4.8217737784357E-01_wp, +0.0000000000000E+00_wp, +5.5752294134525E-01_wp, & - & +0.0000000000000E+00_wp, +5.5764799996744E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +9.9999999986933E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +2.6810514555495E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +5.4029331669609E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +9.9999999999806E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -5.5752294134525E-01_wp, +0.0000000000000E+00_wp, -6.2750412685952E-01_wp, & - & +0.0000000000000E+00_wp, -4.7011372384704E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +9.9999999999806E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +2.6810514555495E-01_wp, +0.0000000000000E+00_wp, +5.4029331669609E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +9.9999999999806E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +5.5764799996744E-01_wp, +0.0000000000000E+00_wp, +4.7011372384704E-01_wp, & - & +0.0000000000000E+00_wp, +2.2909719098522E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +9.9999999983021E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -5.4029331669609E-01_wp, +0.0000000000000E+00_wp, -7.0671490080821E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +9.9999999983021E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, -5.4029331669609E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -7.0671490080821E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +9.9999999983021E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +5.0785835962169E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +9.9999999983021E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +5.0785835962169E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +9.9999999983021E-01_wp],& + & 9.99999999869332E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 4.82177377843569E-01_wp, 0.00000000000000E+00_wp, -5.57522941345255E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 5.57647999967445E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 9.99999999998060E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 2.68105145554947E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -5.40293316696089E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 9.99999999998060E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 5.57522941345255E-01_wp, 0.00000000000000E+00_wp, -6.27504126859521E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 4.70113723847041E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 9.99999999998060E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 2.68105145554947E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, -5.40293316696089E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 9.99999999830205E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 5.07858359621690E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 9.99999999830205E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 5.40293316696089E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -7.06714900808214E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 9.99999999830205E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 5.57647999967445E-01_wp, 0.00000000000000E+00_wp, -4.70113723847041E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 2.29097190985218E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 9.99999999830205E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 5.40293316696089E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, -7.06714900808214E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 9.99999999830206E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 5.07858359621690E-01_wp,& + & 4.82177377843569E-01_wp, 0.00000000000000E+00_wp, 5.57522941345255E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 5.57647999967445E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 9.99999999869332E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 2.68105145554947E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 5.40293316696089E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 9.99999999998060E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -5.57522941345255E-01_wp, 0.00000000000000E+00_wp, -6.27504126859521E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -4.70113723847041E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 9.99999999998060E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 2.68105145554947E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 5.40293316696089E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 9.99999999998060E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 5.07858359621690E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 9.99999999830205E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, -5.40293316696089E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -7.06714900808214E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 9.99999999830205E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 5.57647999967445E-01_wp, 0.00000000000000E+00_wp, 4.70113723847041E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 2.29097190985218E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 9.99999999830205E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & -5.40293316696089E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, -7.06714900808214E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 9.99999999830205E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 5.07858359621690E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 9.99999999830206E-01_wp],& & shape(overlap_diat)) type(structure_type) :: mol @@ -836,63 +836,63 @@ subroutine test_overlap_diat_sih4(error) integer, parameter :: nao = 13 real(wp), parameter :: overlap_diat(nao, nao) = reshape([& - & +9.9999999986933E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +6.9611295875884E-01_wp, +6.9611295875884E-01_wp, +6.9611295875884E-01_wp, & - & +6.9611295875884E-01_wp, +0.0000000000000E+00_wp, +9.9999999999806E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +4.8315900715143E-01_wp, -4.8315900715143E-01_wp, & - & -4.8315900715143E-01_wp, +4.8315900715143E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +9.9999999999806E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, -4.8315900715143E-01_wp, & - & -4.8315900715143E-01_wp, +4.8315900715143E-01_wp, +4.8315900715143E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +9.9999999999806E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +4.8315900715143E-01_wp, -4.8315900715143E-01_wp, +4.8315900715143E-01_wp, & - & -4.8315900715143E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +9.9999999983021E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +3.2066591762028E-17_wp, +3.2066591762028E-17_wp, & - & +3.2066591762028E-17_wp, +3.2066591762028E-17_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +9.9999999983021E-01_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, -4.7149403711788E-01_wp, & - & +4.7149403711788E-01_wp, +4.7149403711788E-01_wp, -4.7149403711788E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +9.9999999983021E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & -4.7149403711788E-01_wp, +4.7149403711788E-01_wp, -4.7149403711788E-01_wp, & - & +4.7149403711788E-01_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +9.9999999983021E-01_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, +0.0000000000000E+00_wp, & - & +0.0000000000000E+00_wp, +9.9999999983021E-01_wp, +4.7149403711788E-01_wp, & - & +4.7149403711788E-01_wp, -4.7149403711788E-01_wp, -4.7149403711788E-01_wp, & - & +6.9611295875884E-01_wp, +4.8315900715143E-01_wp, -4.8315900715143E-01_wp, & - & +4.8315900715143E-01_wp, +3.2066591762028E-17_wp, -4.7149403711788E-01_wp, & - & -4.7149403711788E-01_wp, +0.0000000000000E+00_wp, +4.7149403711788E-01_wp, & - & +9.9999999988150E-01_wp, +1.0863266473352E-01_wp, +1.0863266473352E-01_wp, & - & +1.0863266473352E-01_wp, +6.9611295875884E-01_wp, -4.8315900715143E-01_wp, & - & -4.8315900715143E-01_wp, -4.8315900715143E-01_wp, +3.2066591762028E-17_wp, & - & +4.7149403711788E-01_wp, +4.7149403711788E-01_wp, +0.0000000000000E+00_wp, & - & +4.7149403711788E-01_wp, +1.0863266473352E-01_wp, +9.9999999988150E-01_wp, & - & +1.0863266473352E-01_wp, +1.0863266473352E-01_wp, +6.9611295875884E-01_wp, & - & -4.8315900715143E-01_wp, +4.8315900715143E-01_wp, +4.8315900715143E-01_wp, & - & +3.2066591762028E-17_wp, +4.7149403711788E-01_wp, -4.7149403711788E-01_wp, & - & +0.0000000000000E+00_wp, -4.7149403711788E-01_wp, +1.0863266473352E-01_wp, & - & +1.0863266473352E-01_wp, +9.9999999988150E-01_wp, +1.0863266473352E-01_wp, & - & +6.9611295875884E-01_wp, +4.8315900715143E-01_wp, +4.8315900715143E-01_wp, & - & -4.8315900715143E-01_wp, +3.2066591762028E-17_wp, -4.7149403711788E-01_wp, & - & +4.7149403711788E-01_wp, +0.0000000000000E+00_wp, -4.7149403711788E-01_wp, & - & +1.0863266473352E-01_wp, +1.0863266473352E-01_wp, +1.0863266473352E-01_wp, & - & +9.9999999988150E-01_wp],shape(overlap_diat)) + & 9.99999999869332E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 6.96112958758842E-01_wp, 6.96112958758842E-01_wp, 6.96112958758842E-01_wp,& + & 6.96112958758842E-01_wp, 0.00000000000000E+00_wp, 9.99999999998060E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 4.83159007151425E-01_wp, -4.83159007151425E-01_wp,& + & -4.83159007151425E-01_wp, 4.83159007151425E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 9.99999999998060E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -4.83159007151425E-01_wp,& + & -4.83159007151425E-01_wp, 4.83159007151425E-01_wp, 4.83159007151425E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 9.99999999998060E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 4.83159007151425E-01_wp, -4.83159007151425E-01_wp, 4.83159007151425E-01_wp,& + & -4.83159007151425E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 9.99999999830206E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 4.71494037117879E-01_wp, 4.71494037117879E-01_wp,& + & -4.71494037117879E-01_wp, -4.71494037117879E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 9.99999999830206E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -4.71494037117879E-01_wp,& + & 4.71494037117879E-01_wp, -4.71494037117879E-01_wp, 4.71494037117879E-01_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 9.99999999830205E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 7.88722757783780E-17_wp, 7.88722757783780E-17_wp, 7.88722757783780E-17_wp,& + & 7.88722757783780E-17_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 9.99999999830206E-01_wp,& + & 0.00000000000000E+00_wp, -4.71494037117879E-01_wp, 4.71494037117879E-01_wp,& + & 4.71494037117879E-01_wp, -4.71494037117879E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 9.99999999830205E-01_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 6.96112958758842E-01_wp, 4.83159007151425E-01_wp, -4.83159007151425E-01_wp,& + & 4.83159007151425E-01_wp, 4.71494037117879E-01_wp, -4.71494037117879E-01_wp,& + & 7.88722757783780E-17_wp, -4.71494037117879E-01_wp, 0.00000000000000E+00_wp,& + & 9.99999999881495E-01_wp, 1.08632664733521E-01_wp, 1.08632664733521E-01_wp,& + & 1.08632664733521E-01_wp, 6.96112958758842E-01_wp, -4.83159007151425E-01_wp,& + & -4.83159007151425E-01_wp, -4.83159007151425E-01_wp, 4.71494037117879E-01_wp,& + & 4.71494037117879E-01_wp, 7.88722757783780E-17_wp, 4.71494037117879E-01_wp,& + & 0.00000000000000E+00_wp, 1.08632664733521E-01_wp, 9.99999999881495E-01_wp,& + & 1.08632664733521E-01_wp, 1.08632664733521E-01_wp, 6.96112958758842E-01_wp,& + & -4.83159007151425E-01_wp, 4.83159007151425E-01_wp, 4.83159007151425E-01_wp,& + & -4.71494037117879E-01_wp, -4.71494037117879E-01_wp, 7.88722757783780E-17_wp,& + & 4.71494037117879E-01_wp, 0.00000000000000E+00_wp, 1.08632664733521E-01_wp,& + & 1.08632664733521E-01_wp, 9.99999999881495E-01_wp, 1.08632664733521E-01_wp,& + & 6.96112958758842E-01_wp, 4.83159007151425E-01_wp, 4.83159007151425E-01_wp,& + & -4.83159007151425E-01_wp, -4.71494037117879E-01_wp, 4.71494037117879E-01_wp,& + & 7.88722757783780E-17_wp, -4.71494037117879E-01_wp, 0.00000000000000E+00_wp,& + & 1.08632664733521E-01_wp, 1.08632664733521E-01_wp, 1.08632664733521E-01_wp,& + & 9.99999999881495E-01_wp],shape(overlap_diat)) type(structure_type) :: mol diff --git a/test/unit/test_hamiltonian.f90 b/test/unit/test_hamiltonian.f90 index 023a0ba0..ec134bce 100644 --- a/test/unit/test_hamiltonian.f90 +++ b/test/unit/test_hamiltonian.f90 @@ -49,10 +49,10 @@ subroutine collect_hamiltonian(testsuite) type(unittest_type), allocatable, intent(out) :: testsuite(:) testsuite = [ & - new_unittest("hamiltonian-1", test_hamiltonian_h2), & - new_unittest("hamiltonian-2", test_hamiltonian_lih), & - new_unittest("hamiltonian-3", test_hamiltonian_s2), & - new_unittest("hamiltonian-4", test_hamiltonian_sih4) & + new_unittest("hamiltonian-h2", test_hamiltonian_h2), & + new_unittest("hamiltonian-lih", test_hamiltonian_lih), & + new_unittest("hamiltonian-s2", test_hamiltonian_s2), & + new_unittest("hamiltonian-sih4", test_hamiltonian_sih4) & ] end subroutine collect_hamiltonian @@ -221,117 +221,116 @@ subroutine test_hamiltonian_s2(error) integer, parameter :: nao = 18 real(wp), parameter :: hamiltonian(nao, nao) = reshape([& - &-7.35145168796515E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-7.35145168755863E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-1.92782975482911E-1_wp, 0.00000000000000E+0_wp, 2.36427123283500E-1_wp,& - & 0.00000000000000E+0_wp,-2.05951876707027E-1_wp, 0.00000000000000E+0_wp,& + &-1.92782989368414E-1_wp, 0.00000000000000E+0_wp, 2.36427133955232E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-4.17765769259727E-1_wp, 0.00000000000000E+0_wp,& + &-2.05951879709695E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp,-4.17765769244149E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-9.33756583233484E-2_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp,-9.33756600277693E-2_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 1.20176383632229E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 1.20176385073852E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-4.17765769259727E-1_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-4.17765769244149E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-2.36427123283500E-1_wp, 0.00000000000000E+0_wp, 2.58607486007645E-1_wp,& - & 0.00000000000000E+0_wp,-1.23733827935453E-1_wp, 0.00000000000000E+0_wp,& + &-2.36427133955232E-1_wp, 0.00000000000000E+0_wp, 2.58607490728104E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-1.23733826451155E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-4.17765769259727E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-4.17765769244149E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-9.33756583233484E-2_wp, 0.00000000000000E+0_wp, 1.20176385073852E-1_wp,& + &-9.33756600277693E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 1.20176383632229E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp,-2.27200179621343E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-2.27200176444941E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-2.05951876707027E-1_wp, 0.00000000000000E+0_wp, 1.23733827935453E-1_wp,& - & 0.00000000000000E+0_wp,-9.40352501984679E-3_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp,-1.00344447885664E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-2.27200176444941E-2_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-2.27200179621343E-2_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp,-1.20176383632229E-1_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 2.45142819682488E-2_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-1.20176385073852E-1_wp, 0.00000000000000E+0_wp, 2.45142826956687E-2_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-2.27200179621343E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-2.05951879709695E-1_wp, 0.00000000000000E+0_wp, 1.23733826451155E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-2.27200176444941E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-1.20176385073852E-1_wp, 0.00000000000000E+0_wp,& + &-9.40352474081307E-3_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 2.45142826956687E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp,-2.27200179621343E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-2.27200176444941E-2_wp, 0.00000000000000E+0_wp,& + &-1.20176383632229E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 2.45142819682488E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-1.00344450863216E-2_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-2.27200179621343E-2_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.0000000000000E+0_wp,-2.27200176444941E-2_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-1.00344447885664E-2_wp,& + &-1.92782989368414E-1_wp, 0.00000000000000E+0_wp,-2.36427133955232E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-2.05951879709695E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-7.35145168755863E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-1.00344450863216E-2_wp,& - &-1.92782975482911E-1_wp, 0.00000000000000E+0_wp,-2.36427123283500E-1_wp,& - & 0.00000000000000E+0_wp,-2.05951876707027E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-7.35145168796515E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp,-9.33756600277693E-2_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-1.20176383632229E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp,-4.17765769244149E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-9.33756583233484E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-1.20176385073852E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-4.17765769259727E-1_wp, 0.00000000000000E+0_wp,& + & 2.36427133955232E-1_wp, 0.00000000000000E+0_wp, 2.58607490728104E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 1.23733826451155E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-4.17765769244149E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 2.36427123283500E-1_wp, 0.00000000000000E+0_wp, 2.58607486007645E-1_wp,& - & 0.00000000000000E+0_wp, 1.23733827935453E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-4.17765769259727E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-9.33756600277693E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp,-1.20176383632229E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-4.17765769244149E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-9.33756583233484E-2_wp, 0.00000000000000E+0_wp,-1.20176385073852E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp,-1.00344447885664E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-4.17765769259727E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-2.05951876707027E-1_wp, 0.00000000000000E+0_wp,-1.23733827935453E-1_wp,& - & 0.00000000000000E+0_wp,-9.40352501984679E-3_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp,-2.27200179621343E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 1.20176383632229E-1_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 2.45142819682488E-2_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-2.27200176444941E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-2.27200179621343E-2_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 1.20176385073852E-1_wp, 0.00000000000000E+0_wp, 2.45142826956687E-2_wp,& + &-2.05951879709695E-1_wp, 0.00000000000000E+0_wp,-1.23733826451155E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-9.40352474081307E-3_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-2.27200176444941E-2_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 1.20176385073852E-1_wp, 0.00000000000000E+0_wp,& + &-2.27200179621343E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 2.45142826956687E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 1.20176383632229E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 2.45142819682488E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-2.27200176444941E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp,-2.27200179621343E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-1.00344450863216E-2_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-1.00344447885664E-2_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-2.27200176444941E-2_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-1.00344450863216E-2_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-2.27200176444941E-2_wp],& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-2.27200179621343E-2_wp],& & shape(hamiltonian)) - type(structure_type) :: mol call get_structure(mol, "MB16-43", "S2") @@ -346,63 +345,63 @@ subroutine test_hamiltonian_sih4(error) integer, parameter :: nao = 13 real(wp), parameter :: hamiltonian(nao, nao) = reshape([& - &-5.52421008291552E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-5.52421014706411E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-3.36004319357359E-1_wp,-3.36004319357359E-1_wp,-3.36004319357359E-1_wp,& - &-3.36004319357359E-1_wp, 0.00000000000000E+0_wp,-2.35769696282905E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-3.36004320989251E-1_wp,-3.36004320989251E-1_wp,-3.36004320989251E-1_wp,& + &-3.36004320989251E-1_wp, 0.00000000000000E+0_wp,-2.35769691508991E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-1.53874698227418E-1_wp, 1.53874698227418E-1_wp,& - & 1.53874698227418E-1_wp,-1.53874698227418E-1_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-2.35769696282905E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 1.53874698227418E-1_wp,& - & 1.53874698227418E-1_wp,-1.53874698227418E-1_wp,-1.53874698227418E-1_wp,& + & 0.00000000000000E+0_wp,-1.53874698572085E-1_wp, 1.53874698572085E-1_wp,& + & 1.53874698572085E-1_wp,-1.53874698572085E-1_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp,-2.35769691508991E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-2.35769696282905E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 1.53874698572085E-1_wp,& + & 1.53874698572085E-1_wp,-1.53874698572085E-1_wp,-1.53874698572085E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-1.53874698227418E-1_wp, 1.53874698227418E-1_wp,-1.53874698227418E-1_wp,& - & 1.53874698227418E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-4.13801969884815E-2_wp,& + &-2.35769691508991E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-1.53874698572085E-1_wp, 1.53874698572085E-1_wp,-1.53874698572085E-1_wp,& + & 1.53874698572085E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-4.13801903077918E-2_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp,-1.23912378597848E-1_wp,-1.23912378597848E-1_wp,& + & 1.23912378597848E-1_wp, 1.23912378597848E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp,-4.13801903077918E-2_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 1.23912378597848E-1_wp,& + &-1.23912378597848E-1_wp, 1.23912378597848E-1_wp,-1.23912378597848E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-4.13801969884815E-2_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 1.23912381895039E-1_wp,& - &-1.23912381895039E-1_wp,-1.23912381895039E-1_wp, 1.23912381895039E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-4.13801903077918E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-4.13801969884815E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 1.23912381895039E-1_wp,-1.23912381895039E-1_wp, 1.23912381895039E-1_wp,& - &-1.23912381895039E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-4.13801969884815E-2_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-4.13801903077918E-2_wp,& + & 0.00000000000000E+0_wp, 1.23912378597848E-1_wp,-1.23912378597848E-1_wp,& + &-1.23912378597848E-1_wp, 1.23912378597848E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp,-4.13801903077918E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-4.13801969884815E-2_wp,-1.23912381895039E-1_wp,& - &-1.23912381895039E-1_wp, 1.23912381895039E-1_wp, 1.23912381895039E-1_wp,& - &-3.36004319357359E-1_wp,-1.53874698227418E-1_wp, 1.53874698227418E-1_wp,& - &-1.53874698227418E-1_wp, 0.00000000000000E+0_wp, 1.23912381895039E-1_wp,& - & 1.23912381895039E-1_wp, 0.00000000000000E+0_wp,-1.23912381895039E-1_wp,& - &-3.91823590300894E-1_wp,-4.31486728881255E-2_wp,-4.31486728881255E-2_wp,& - &-4.31486728881255E-2_wp,-3.36004319357359E-1_wp, 1.53874698227418E-1_wp,& - & 1.53874698227418E-1_wp, 1.53874698227418E-1_wp, 0.00000000000000E+0_wp,& - &-1.23912381895039E-1_wp,-1.23912381895039E-1_wp, 0.00000000000000E+0_wp,& - &-1.23912381895039E-1_wp,-4.31486728881255E-2_wp,-3.91823590300894E-1_wp,& - &-4.31486728881255E-2_wp,-4.31486728881255E-2_wp,-3.36004319357359E-1_wp,& - & 1.53874698227418E-1_wp,-1.53874698227418E-1_wp,-1.53874698227418E-1_wp,& - & 0.00000000000000E+0_wp,-1.23912381895039E-1_wp, 1.23912381895039E-1_wp,& - & 0.00000000000000E+0_wp, 1.23912381895039E-1_wp,-4.31486728881255E-2_wp,& - &-4.31486728881255E-2_wp,-3.91823590300894E-1_wp,-4.31486728881255E-2_wp,& - &-3.36004319357359E-1_wp,-1.53874698227418E-1_wp,-1.53874698227418E-1_wp,& - & 1.53874698227418E-1_wp, 0.00000000000000E+0_wp, 1.23912381895039E-1_wp,& - &-1.23912381895039E-1_wp, 0.00000000000000E+0_wp, 1.23912381895039E-1_wp,& - &-4.31486728881255E-2_wp,-4.31486728881255E-2_wp,-4.31486728881255E-2_wp,& - &-3.91823590300894E-1_wp],shape(hamiltonian)) + &-3.36004320989251E-1_wp,-1.53874698572085E-1_wp, 1.53874698572085E-1_wp,& + &-1.53874698572085E-1_wp,-1.23912378597848E-1_wp, 1.23912378597848E-1_wp,& + & 0.00000000000000E+0_wp, 1.23912378597848E-1_wp, 0.00000000000000E+0_wp,& + &-3.91823589869151E-1_wp,-4.31486730191658E-2_wp,-4.31486730191658E-2_wp,& + &-4.31486730191658E-2_wp,-3.36004320989251E-1_wp, 1.53874698572085E-1_wp,& + & 1.53874698572085E-1_wp, 1.53874698572085E-1_wp,-1.23912378597848E-1_wp,& + &-1.23912378597848E-1_wp, 0.00000000000000E+0_wp,-1.23912378597848E-1_wp,& + & 0.00000000000000E+0_wp,-4.31486730191658E-2_wp,-3.91823589869151E-1_wp,& + &-4.31486730191658E-2_wp,-4.31486730191658E-2_wp,-3.36004320989251E-1_wp,& + & 1.53874698572085E-1_wp,-1.53874698572085E-1_wp,-1.53874698572085E-1_wp,& + & 1.23912378597848E-1_wp, 1.23912378597848E-1_wp, 0.00000000000000E+0_wp,& + &-1.23912378597848E-1_wp, 0.00000000000000E+0_wp,-4.31486730191658E-2_wp,& + &-4.31486730191658E-2_wp,-3.91823589869151E-1_wp,-4.31486730191658E-2_wp,& + &-3.36004320989251E-1_wp,-1.53874698572085E-1_wp,-1.53874698572085E-1_wp,& + & 1.53874698572085E-1_wp, 1.23912378597848E-1_wp,-1.23912378597848E-1_wp,& + & 0.00000000000000E+0_wp, 1.23912378597848E-1_wp, 0.00000000000000E+0_wp,& + &-4.31486730191658E-2_wp,-4.31486730191658E-2_wp,-4.31486730191658E-2_wp,& + &-3.91823589869151E-1_wp],shape(hamiltonian)) type(structure_type) :: mol diff --git a/test/unit/test_integral_multipole.f90 b/test/unit/test_integral_multipole.f90 index 76d0f711..7c8effd2 100644 --- a/test/unit/test_integral_multipole.f90 +++ b/test/unit/test_integral_multipole.f90 @@ -44,7 +44,7 @@ subroutine collect_integral_multipole(testsuite) testsuite = [ & new_unittest("overlap-dipole-diat-alh3", test_overlap_dipole_diat_alh3), & - new_unittest("overlap-quadrupole-diat-alh3", test_overlap_quadrupole_diat_alh3), & + new_unittest("overlap-multipole-diat-alh3", test_overlap_multipole_diat_alh3), & new_unittest("dipole-trans-ss", test_dipole_ss), & new_unittest("dipole-trans-pp", test_dipole_pp), & new_unittest("dipole-trans-dd", test_dipole_dd), & @@ -270,13 +270,13 @@ subroutine test_overlap_dipole_diat_mol(error, mol, ref) real(wp), intent(in) :: ref(:, :) type(basis_type) :: bas - real(wp), allocatable :: lattr(:, :), overlap(:, :), overlap_scaled(:, :) + real(wp), allocatable :: lattr(:, :), overlap(:, :), overlap_diat(:, :) real(wp), allocatable :: dipole(:, :, :) real(wp) :: cutoff integer :: ii, jj real(wp) :: scalfac(3,86) - scalfac = 1.0_wp + scalfac = 1.2_wp call make_basis(bas, mol, 6) call check(error, bas%nao, size(ref, 1)) @@ -285,13 +285,13 @@ subroutine test_overlap_dipole_diat_mol(error, mol, ref) cutoff = get_cutoff(bas) call get_lattice_points(mol%periodic, mol%lattice, cutoff, lattr) - allocate(overlap(bas%nao, bas%nao), overlap_scaled(bas%nao, bas%nao)) + allocate(overlap(bas%nao, bas%nao), overlap_diat(bas%nao, bas%nao)) allocate(dipole(3, bas%nao, bas%nao)) - call get_dipole_integrals(mol, lattr, cutoff, bas, scalfac, overlap, overlap_scaled, dipole) + call get_dipole_integrals(mol, lattr, cutoff, bas, scalfac, overlap, overlap_diat, dipole) - do ii = 1, size(overlap_scaled, 2) - do jj = 1, size(overlap_scaled, 1) - call check(error, overlap_scaled(jj, ii), ref(jj, ii), thr=thr) + do ii = 1, size(overlap_diat, 2) + do jj = 1, size(overlap_diat, 1) + call check(error, overlap_diat(jj, ii), ref(jj, ii), thr=thr) if (allocated(error)) return end do end do @@ -305,15 +305,15 @@ subroutine test_overlap_dipole_diat_alh3(error) type(error_type), allocatable, intent(out) :: error integer, parameter :: nao = 12 - real(wp), parameter :: overlap(nao, nao) = reshape([& + real(wp), parameter :: overlap_diat(nao, nao) = reshape([& & 9.99999999869333E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 4.02664545809937E-1_wp, 4.02664545809937E-1_wp, 4.02664545809939E-1_wp,& + & 4.83197454971925E-1_wp, 4.83197454971925E-1_wp, 4.83197454971926E-1_wp,& & 0.00000000000000E+0_wp, 9.99999999998060E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 4.32775379754938E-1_wp,-4.32775379754938E-1_wp, 0.00000000000000E+0_wp,& + & 5.19330455705926E-1_wp,-5.19330455705926E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999998060E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& @@ -321,11 +321,11 @@ subroutine test_overlap_dipole_diat_alh3(error) & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 9.99999999998060E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-2.49862982000156E-1_wp,-2.49862982000156E-1_wp, 4.99725964000314E-1_wp,& + &-2.99835578400188E-1_wp,-2.99835578400188E-1_wp, 5.99671156800377E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 9.99999999830206E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-2.26789082148469E-1_wp,-2.26789082148469E-1_wp,-2.26789082148469E-1_wp,& + &-4.08220347867244E-1_wp, 4.08220347867244E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999830206E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& @@ -333,36 +333,36 @@ subroutine test_overlap_dipole_diat_alh3(error) & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 9.99999999830206E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-2.72146898578163E-1_wp,-2.72146898578163E-1_wp,-2.72146898578163E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 9.99999999830206E-1_wp, 0.00000000000000E+0_wp,& - &-1.96405106441530E-1_wp,-1.96405106441530E-1_wp, 3.92810212883060E-1_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999830206E-1_wp,& - &-3.40183623222704E-1_wp, 3.40183623222704E-1_wp, 0.00000000000000E+0_wp,& - & 4.02664545809937E-1_wp, 4.32775379754938E-1_wp, 0.00000000000000E+0_wp,& - &-2.49862982000156E-1_wp,-2.26789082148469E-1_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-1.96405106441530E-1_wp,-3.40183623222704E-1_wp,& - & 9.99999999881495E-1_wp, 3.54600353330803E-2_wp, 3.54600353330805E-2_wp,& - & 4.02664545809937E-1_wp,-4.32775379754938E-1_wp, 0.00000000000000E+0_wp,& - &-2.49862982000156E-1_wp,-2.26789082148469E-1_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-1.96405106441530E-1_wp, 3.40183623222704E-1_wp,& - & 3.54600353330803E-2_wp, 9.99999999881495E-1_wp, 3.54600353330805E-2_wp,& - & 4.02664545809939E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 4.99725964000314E-1_wp,-2.26789082148469E-1_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 3.92810212883060E-1_wp, 0.00000000000000E+0_wp,& - & 3.54600353330805E-2_wp, 3.54600353330805E-2_wp, 9.99999999881495E-1_wp],& - & shape(overlap)) + &-2.35686127729836E-1_wp,-2.35686127729836E-1_wp, 4.71372255459672E-1_wp,& + & 4.83197454971925E-1_wp, 5.19330455705926E-1_wp, 0.00000000000000E+0_wp,& + &-2.99835578400188E-1_wp,-4.08220347867244E-1_wp, 0.00000000000000E+0_wp,& + &-2.72146898578163E-1_wp, 0.00000000000000E+0_wp,-2.35686127729836E-1_wp,& + & 9.99999999881495E-1_wp, 4.25520423996964E-2_wp, 4.25520423996966E-2_wp,& + & 4.83197454971925E-1_wp,-5.19330455705926E-1_wp, 0.00000000000000E+0_wp,& + &-2.99835578400188E-1_wp, 4.08220347867244E-1_wp, 0.00000000000000E+0_wp,& + &-2.72146898578163E-1_wp, 0.00000000000000E+0_wp,-2.35686127729836E-1_wp,& + & 4.25520423996964E-2_wp, 9.99999999881495E-1_wp, 4.25520423996966E-2_wp,& + & 4.83197454971927E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 5.99671156800377E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-2.72146898578163E-1_wp, 0.00000000000000E+0_wp, 4.71372255459672E-1_wp,& + & 4.25520423996966E-2_wp, 4.25520423996966E-2_wp, 9.99999999881495E-1_wp],& + & shape(overlap_diat)) type(structure_type) :: mol call get_structure(mol, "MB16-43", "AlH3") - call test_overlap_dipole_diat_mol(error, mol, overlap) + call test_overlap_dipole_diat_mol(error, mol, overlap_diat) end subroutine test_overlap_dipole_diat_alh3 -subroutine test_overlap_quadrupole_diat_mol(error, mol, ref) +subroutine test_overlap_multipole_diat_mol(error, mol, ref) !> Error handling type(error_type), allocatable, intent(out) :: error @@ -371,13 +371,13 @@ subroutine test_overlap_quadrupole_diat_mol(error, mol, ref) real(wp), intent(in) :: ref(:, :) type(basis_type) :: bas - real(wp), allocatable :: lattr(:, :), overlap(:, :), overlap_scaled(:, :) + real(wp), allocatable :: lattr(:, :), overlap(:, :), overlap_diat(:, :) real(wp), allocatable :: dipole(:, :, :), quadrupole(:, :, :) real(wp) :: cutoff integer :: ii, jj real(wp) :: scalfac(3,86) - scalfac = 1.0_wp + scalfac = 1.2_wp call make_basis(bas, mol, 6) call check(error, bas%nao, size(ref, 1)) @@ -386,22 +386,22 @@ subroutine test_overlap_quadrupole_diat_mol(error, mol, ref) cutoff = get_cutoff(bas) call get_lattice_points(mol%periodic, mol%lattice, cutoff, lattr) - allocate(overlap(bas%nao, bas%nao), overlap_scaled(bas%nao, bas%nao)) + allocate(overlap(bas%nao, bas%nao), overlap_diat(bas%nao, bas%nao)) allocate(dipole(3, bas%nao, bas%nao), quadrupole(6, bas%nao, bas%nao)) - call get_multipole_integrals(mol, lattr, cutoff, bas, scalfac, overlap, overlap_scaled, & + call get_multipole_integrals(mol, lattr, cutoff, bas, scalfac, overlap, overlap_diat, & & dipole, quadrupole) - do ii = 1, size(overlap_scaled, 2) - do jj = 1, size(overlap_scaled, 1) - call check(error, overlap_scaled(jj, ii), ref(jj, ii), thr=thr) + do ii = 1, size(overlap_diat, 2) + do jj = 1, size(overlap_diat, 1) + call check(error, overlap_diat(jj, ii), ref(jj, ii), thr=thr) if (allocated(error)) return end do end do -end subroutine test_overlap_quadrupole_diat_mol +end subroutine test_overlap_multipole_diat_mol -subroutine test_overlap_quadrupole_diat_alh3(error) +subroutine test_overlap_multipole_diat_alh3(error) !> Error handling type(error_type), allocatable, intent(out) :: error @@ -411,11 +411,11 @@ subroutine test_overlap_quadrupole_diat_alh3(error) & 9.99999999869333E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 4.02664545809937E-1_wp, 4.02664545809937E-1_wp, 4.02664545809939E-1_wp,& + & 4.83197454971925E-1_wp, 4.83197454971925E-1_wp, 4.83197454971926E-1_wp,& & 0.00000000000000E+0_wp, 9.99999999998060E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 4.32775379754938E-1_wp,-4.32775379754938E-1_wp, 0.00000000000000E+0_wp,& + & 5.19330455705926E-1_wp,-5.19330455705926E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999998060E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& @@ -423,11 +423,11 @@ subroutine test_overlap_quadrupole_diat_alh3(error) & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 9.99999999998060E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-2.49862982000156E-1_wp,-2.49862982000156E-1_wp, 4.99725964000314E-1_wp,& + &-2.99835578400188E-1_wp,-2.99835578400188E-1_wp, 5.99671156800377E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 9.99999999830206E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-2.26789082148469E-1_wp,-2.26789082148469E-1_wp,-2.26789082148469E-1_wp,& + &-4.08220347867244E-1_wp, 4.08220347867244E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999830206E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& @@ -435,33 +435,33 @@ subroutine test_overlap_quadrupole_diat_alh3(error) & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 9.99999999830206E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-2.72146898578163E-1_wp,-2.72146898578163E-1_wp,-2.72146898578163E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 9.99999999830206E-1_wp, 0.00000000000000E+0_wp,& - &-1.96405106441530E-1_wp,-1.96405106441530E-1_wp, 3.92810212883060E-1_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999830206E-1_wp,& - &-3.40183623222704E-1_wp, 3.40183623222704E-1_wp, 0.00000000000000E+0_wp,& - & 4.02664545809937E-1_wp, 4.32775379754938E-1_wp, 0.00000000000000E+0_wp,& - &-2.49862982000156E-1_wp,-2.26789082148469E-1_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-1.96405106441530E-1_wp,-3.40183623222704E-1_wp,& - & 9.99999999881495E-1_wp, 3.54600353330803E-2_wp, 3.54600353330805E-2_wp,& - & 4.02664545809937E-1_wp,-4.32775379754938E-1_wp, 0.00000000000000E+0_wp,& - &-2.49862982000156E-1_wp,-2.26789082148469E-1_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-1.96405106441530E-1_wp, 3.40183623222704E-1_wp,& - & 3.54600353330803E-2_wp, 9.99999999881495E-1_wp, 3.54600353330805E-2_wp,& - & 4.02664545809939E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 4.99725964000314E-1_wp,-2.26789082148469E-1_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 3.92810212883060E-1_wp, 0.00000000000000E+0_wp,& - & 3.54600353330805E-2_wp, 3.54600353330805E-2_wp, 9.99999999881495E-1_wp],& + &-2.35686127729836E-1_wp,-2.35686127729836E-1_wp, 4.71372255459672E-1_wp,& + & 4.83197454971925E-1_wp, 5.19330455705926E-1_wp, 0.00000000000000E+0_wp,& + &-2.99835578400188E-1_wp,-4.08220347867244E-1_wp, 0.00000000000000E+0_wp,& + &-2.72146898578163E-1_wp, 0.00000000000000E+0_wp,-2.35686127729836E-1_wp,& + & 9.99999999881495E-1_wp, 4.25520423996964E-2_wp, 4.25520423996966E-2_wp,& + & 4.83197454971925E-1_wp,-5.19330455705926E-1_wp, 0.00000000000000E+0_wp,& + &-2.99835578400188E-1_wp, 4.08220347867244E-1_wp, 0.00000000000000E+0_wp,& + &-2.72146898578163E-1_wp, 0.00000000000000E+0_wp,-2.35686127729836E-1_wp,& + & 4.25520423996964E-2_wp, 9.99999999881495E-1_wp, 4.25520423996966E-2_wp,& + & 4.83197454971927E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 5.99671156800377E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-2.72146898578163E-1_wp, 0.00000000000000E+0_wp, 4.71372255459672E-1_wp,& + & 4.25520423996966E-2_wp, 4.25520423996966E-2_wp, 9.99999999881495E-1_wp],& & shape(overlap)) type(structure_type) :: mol call get_structure(mol, "MB16-43", "AlH3") - call test_overlap_quadrupole_diat_mol(error, mol, overlap) + call test_overlap_multipole_diat_mol(error, mol, overlap) -end subroutine test_overlap_quadrupole_diat_alh3 +end subroutine test_overlap_multipole_diat_alh3 end module test_integral_multipole diff --git a/test/unit/test_integral_overlap.f90 b/test/unit/test_integral_overlap.f90 index f955d708..c5002c68 100644 --- a/test/unit/test_integral_overlap.f90 +++ b/test/unit/test_integral_overlap.f90 @@ -24,7 +24,7 @@ module test_integral_overlap use tblite_basis_slater, only : slater_to_gauss use tblite_cutoff, only : get_lattice_points use tblite_integral_overlap - use tblite_integral_diat_trafo, only : relvec + implicit none private @@ -43,22 +43,41 @@ subroutine collect_integral_overlap(testsuite) type(unittest_type), allocatable, intent(out) :: testsuite(:) testsuite = [ & - new_unittest("overlap-1", test_overlap_alh3), & - new_unittest("overlap-diat-1", test_overlap_diat_alh3), & - new_unittest("overlap-2", test_overlap_bh3), & - new_unittest("overlap-3", test_overlap_beh2), & - new_unittest("overlap-4", test_overlap_ch4), & - new_unittest("overlap-5", test_overlap_cl2), & - new_unittest("overlap-diat-5", test_overlap_diat_cl2), & - new_unittest("overlap-6", test_overlap_f2), & - new_unittest("overlap-7", test_overlap_h2), & - new_unittest("overlap-8", test_overlap_lih), & + new_unittest("overlap-alh3", test_overlap_alh3), & + new_unittest("overlap-diat-alh3", test_overlap_diat_alh3), & + new_unittest("overlap-bh3", test_overlap_bh3), & + new_unittest("overlap-beh2", test_overlap_beh2), & + new_unittest("overlap-ch4", test_overlap_ch4), & + new_unittest("overlap-cl2", test_overlap_cl2), & + new_unittest("overlap-diat-cl2", test_overlap_diat_cl2), & + new_unittest("overlap-f2", test_overlap_f2), & + new_unittest("overlap-h2", test_overlap_h2), & + new_unittest("overlap-lih", test_overlap_lih), & + new_unittest("overlap-diat-cecl3", test_overlap_diat_cecl3), & new_unittest("overlap-grad-ss", test_overlap_grad_ss), & new_unittest("overlap-grad-pp", test_overlap_grad_pp), & new_unittest("overlap-grad-dd", test_overlap_grad_dd), & + new_unittest("overlap-grad-ff", test_overlap_grad_ff), & new_unittest("overlap-diat-grad-ss", test_overlap_diat_grad_ss), & + new_unittest("overlap-diat-grad-ss_z", test_overlap_diat_grad_ss_z), & + new_unittest("overlap-diat-grad-sp", test_overlap_diat_grad_sp), & + new_unittest("overlap-diat-grad-sp_z", test_overlap_diat_grad_sp_z), & new_unittest("overlap-diat-grad-pp", test_overlap_diat_grad_pp), & - new_unittest("overlap-diat-grad-dd", test_overlap_diat_grad_dd) & + new_unittest("overlap-diat-grad-pp_z", test_overlap_diat_grad_pp_z), & + new_unittest("overlap-diat-grad-sd", test_overlap_diat_grad_sd), & + new_unittest("overlap-diat-grad-sd_z", test_overlap_diat_grad_sd_z), & + new_unittest("overlap-diat-grad-pd", test_overlap_diat_grad_pd), & + new_unittest("overlap-diat-grad-pd_z", test_overlap_diat_grad_pd_z), & + new_unittest("overlap-diat-grad-dd", test_overlap_diat_grad_dd), & + new_unittest("overlap-diat-grad-dd_z", test_overlap_diat_grad_dd_z), & + new_unittest("overlap-diat-grad-sf", test_overlap_diat_grad_sf), & + new_unittest("overlap-diat-grad-sf_z", test_overlap_diat_grad_sf_z), & + new_unittest("overlap-diat-grad-pf", test_overlap_diat_grad_pf), & + new_unittest("overlap-diat-grad-pf_z", test_overlap_diat_grad_pf_z), & + new_unittest("overlap-diat-grad-df", test_overlap_diat_grad_df), & + new_unittest("overlap-diat-grad-df_z", test_overlap_diat_grad_df_z), & + new_unittest("overlap-diat-grad-ff", test_overlap_diat_grad_ff), & + new_unittest("overlap-diat-grad-ff_z", test_overlap_diat_grad_ff_z) & ] end subroutine collect_integral_overlap @@ -69,29 +88,134 @@ subroutine make_basis(bas, mol, ng) type(structure_type), intent(in) :: mol integer, intent(in) :: ng - integer, parameter :: nsh(20) = [& - & 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 2, 3] - integer, parameter :: lsh(3, 20) = reshape([& - & 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, & - & 0, 1, 0, 0, 1, 0, 0, 1, 2, 0, 1, 0, 0, 1, 2, 0, 1, 2, 0, 1, 2, & - & 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 0, 0, 1, 2], & + + integer, parameter :: nsh(86) = [& + & 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 2, 3, & ! 1-20 + & 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, & ! 21-40 + & 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 2, 3, 3, 4, 3, 3, & ! 41-60 + & 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, & ! 61-80 + & 3, 3, 3, 3, 3, 3] + integer, parameter :: lsh(4, 86) = reshape([& + & 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, & ! 1-6 + & 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 1, 2, 0, & ! 7-12 + & 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, & ! 13-18 + & 0, 1, 0, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, & ! 19-24 + & 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 0, 0, & ! 25-30 + & 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, & ! 31-36 + & 0, 1, 0, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, & ! 37-42 + & 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 0, 0, & ! 43-48 + & 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, & ! 49-54 + & 0, 1, 0, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 1, 2, 0, & ! 55-60 + & 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, & ! 61-66 + & 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, & ! 67-72 + & 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, & ! 73-78 + & 0, 1, 2, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, & ! 79-84 + & 0, 1, 2, 0, 0, 1, 2, 0], & & shape(lsh)) - integer, parameter :: pqn(3, 20) = reshape([& - & 1, 0, 0, 1, 2, 0, 2, 2, 0, 2, 2, 0, 2, 2, 0, 2, 2, 0, 2, 2, 0, & - & 2, 2, 0, 2, 2, 0, 2, 2, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, & - & 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 0, 4, 4, 3], & + integer, parameter :: pqn(4, 86) = reshape([& + & 1, 0, 0, 0, 1, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, & ! 1-6 + & 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 3, 0, 3, 3, 0, 0, 3, 3, 3, 0, & ! 7-12 + & 3, 3, 3, 0, 3, 3, 3, 0, 3, 3, 3, 0, 3, 3, 3, 0, 3, 3, 3, 0, 3, 3, 3, 0, & ! 13-18 + & 4, 4, 0, 0, 4, 4, 3, 0, 4, 4, 3, 0, 4, 4, 3, 0, 4, 4, 3, 0, 4, 4, 3, 0, & ! 19-24 + & 4, 4, 3, 0, 4, 4, 3, 0, 4, 4, 3, 0, 4, 4, 3, 0, 4, 4, 3, 0, 4, 4, 0, 0, & ! 25-30 + & 4, 4, 4, 0, 4, 4, 4, 0, 4, 4, 4, 0, 4, 4, 4, 0, 4, 4, 4, 0, 4, 4, 4, 0, & ! 31-36 + & 5, 5, 0, 0, 5, 5, 4, 0, 5, 5, 4, 0, 5, 5, 4, 0, 5, 5, 4, 0, 5, 5, 4, 0, & ! 37-42 + & 5, 5, 4, 0, 5, 5, 4, 0, 5, 5, 4, 0, 5, 5, 4, 0, 5, 5, 4, 0, 5, 5, 0, 0, & ! 43-48 + & 5, 5, 5, 0, 5, 5, 5, 0, 5, 5, 5, 0, 5, 5, 5, 0, 5, 5, 5, 0, 5, 5, 5, 0, & ! 49-54 + & 6, 6, 0, 0, 6, 6, 5, 0, 6, 6, 5, 0, 6, 6, 5, 4, 6, 6, 5, 0, 6, 6, 5, 0, & ! 55-60 + & 6, 6, 5, 0, 6, 6, 5, 0, 6, 6, 5, 0, 6, 6, 5, 0, 6, 6, 5, 0, 6, 6, 5, 0, & ! 61-66 + & 6, 6, 5, 0, 6, 6, 5, 0, 6, 6, 5, 0, 6, 6, 5, 0, 6, 6, 5, 0, 6, 6, 5, 0, & ! 67-72 + & 6, 6, 5, 0, 6, 6, 5, 0, 6, 6, 5, 0, 6, 6, 5, 0, 6, 6, 5, 0, 6, 6, 5, 0, & ! 73-78 + & 6, 6, 5, 0, 6, 6, 0, 0, 6, 6, 5, 0, 6, 6, 5, 0, 6, 6, 5, 0, 6, 6, 5, 0, & ! 79-84 + & 6, 6, 5, 0, 6, 6, 5, 0], & & shape(pqn)) - real(wp), parameter :: zeta(3, 20) = reshape([& - & 1.230000_wp, 0.000000_wp, 0.000000_wp, 1.669667_wp, 1.500000_wp, 0.000000_wp, & - & 0.750060_wp, 0.557848_wp, 0.000000_wp, 1.034720_wp, 0.949332_wp, 0.000000_wp, & - & 1.479444_wp, 1.479805_wp, 0.000000_wp, 2.096432_wp, 1.800000_wp, 0.000000_wp, & - & 2.339881_wp, 2.014332_wp, 0.000000_wp, 2.439742_wp, 2.137023_wp, 0.000000_wp, & - & 2.416361_wp, 2.308399_wp, 0.000000_wp, 3.084104_wp, 2.312051_wp, 2.815609_wp, & - & 0.763787_wp, 0.573553_wp, 0.000000_wp, 1.184203_wp, 0.717769_wp, 1.300000_wp, & - & 1.352531_wp, 1.391201_wp, 1.000000_wp, 1.773917_wp, 1.718996_wp, 1.250000_wp, & - & 1.816945_wp, 1.903247_wp, 1.167533_wp, 1.981333_wp, 2.025643_wp, 1.702555_wp, & - & 2.485265_wp, 2.199650_wp, 2.476089_wp, 2.329679_wp, 2.149419_wp, 1.950531_wp, & - & 0.875961_wp, 0.631694_wp, 0.000000_wp, 1.267130_wp, 0.786247_wp, 1.380000_wp],& + real(wp), parameter :: zeta(4, 86) = reshape([& + & 1.230000_wp, 0.000000_wp, 0.000000_wp, 0.000000_wp, & + & 1.669667_wp, 1.500000_wp, 0.000000_wp, 0.000000_wp, & ! 2 + & 0.750060_wp, 0.557848_wp, 0.000000_wp, 0.000000_wp, & + & 1.034720_wp, 0.949332_wp, 0.000000_wp, 0.000000_wp, & + & 1.479444_wp, 1.479805_wp, 0.000000_wp, 0.000000_wp, & + & 2.096432_wp, 1.800000_wp, 0.000000_wp, 0.000000_wp, & + & 2.339881_wp, 2.014332_wp, 0.000000_wp, 0.000000_wp, & + & 2.439742_wp, 2.137023_wp, 0.000000_wp, 0.000000_wp, & + & 2.416361_wp, 2.308399_wp, 0.000000_wp, 0.000000_wp, & + & 3.084104_wp, 2.312051_wp, 2.815609_wp, 0.000000_wp, & ! 10 + & 0.763787_wp, 0.573553_wp, 0.000000_wp, 0.000000_wp, & + & 1.184203_wp, 0.717769_wp, 1.300000_wp, 0.000000_wp, & + & 1.352531_wp, 1.391201_wp, 1.000000_wp, 0.000000_wp, & + & 1.773917_wp, 1.718996_wp, 1.250000_wp, 0.000000_wp, & + & 1.816945_wp, 1.903247_wp, 1.167533_wp, 0.000000_wp, & + & 1.981333_wp, 2.025643_wp, 1.702555_wp, 0.000000_wp, & + & 2.485265_wp, 2.199650_wp, 2.476089_wp, 0.000000_wp, & + & 2.329679_wp, 2.149419_wp, 1.950531_wp, 0.000000_wp, & ! 18 + & 0.875961_wp, 0.631694_wp, 0.000000_wp, 0.000000_wp, & + & 1.267130_wp, 0.786247_wp, 1.380000_wp, 0.000000_wp, & + & 2.224492_wp, 1.554183_wp, 2.009535_wp, 0.000000_wp, & + & 2.588796_wp, 0.994410_wp, 1.885617_wp, 0.000000_wp, & + & 3.043706_wp, 4.030076_wp, 1.663291_wp, 0.000000_wp, & + & 2.250127_wp, 2.706815_wp, 1.675019_wp, 0.000000_wp, & + & 2.206053_wp, 2.820197_wp, 1.861022_wp, 0.000000_wp, & + & 1.572970_wp, 1.986214_wp, 2.837906_wp, 0.000000_wp, & + & 1.808266_wp, 1.736758_wp, 2.797674_wp, 0.000000_wp, & + & 2.007589_wp, 2.250756_wp, 2.982916_wp, 0.000000_wp, & + & 2.181599_wp, 2.384590_wp, 3.095025_wp, 0.000000_wp, & + & 2.263767_wp, 2.203629_wp, 0.000000_wp, 0.000000_wp, & + & 2.638221_wp, 2.067523_wp, 2.113616_wp, 0.000000_wp, & + & 2.528919_wp, 2.194417_wp, 1.776619_wp, 0.000000_wp, & + & 3.556676_wp, 2.420754_wp, 1.465797_wp, 0.000000_wp, & + & 2.896526_wp, 2.454218_wp, 2.278836_wp, 0.000000_wp, & + & 3.289210_wp, 2.565269_wp, 1.645016_wp, 0.000000_wp, & + & 5.209881_wp, 2.843367_wp, 2.758388_wp, 0.000000_wp, & ! 36 + & 1.269729_wp, 1.887305_wp, 0.000000_wp, 0.000000_wp, & + & 1.868807_wp, 1.785463_wp, 2.160122_wp, 0.000000_wp, & + & 0.920018_wp, 1.457324_wp, 2.229013_wp, 0.000000_wp, & + & 6.506473_wp, 1.432023_wp, 2.119714_wp, 0.000000_wp, & + & 2.109733_wp, 2.799447_wp, 2.018973_wp, 0.000000_wp, & + & 2.584133_wp, 3.027953_wp, 2.087336_wp, 0.000000_wp, & + & 2.621415_wp, 3.134876_wp, 2.132598_wp, 0.000000_wp, & + & 2.739844_wp, 2.181678_wp, 2.546096_wp, 0.000000_wp, & + & 1.840571_wp, 2.974826_wp, 3.106937_wp, 0.000000_wp, & + & 1.756228_wp, 3.394247_wp, 3.202653_wp, 0.000000_wp, & + & 3.050188_wp, 2.349519_wp, 3.353329_wp, 0.000000_wp, & + & 2.419991_wp, 2.288929_wp, 0.000000_wp, 0.000000_wp, & + & 2.878139_wp, 2.446597_wp, 2.757735_wp, 0.000000_wp, & + & 3.038232_wp, 2.320821_wp, 1.775133_wp, 0.000000_wp, & + & 2.687507_wp, 2.385653_wp, 2.125961_wp, 0.000000_wp, & + & 2.810717_wp, 2.452747_wp, 2.018718_wp, 0.000000_wp, & + & 2.906869_wp, 2.493771_wp, 1.900737_wp, 0.000000_wp, & + & 4.175313_wp, 2.869379_wp, 2.968948_wp, 0.000000_wp, & ! 54 + & 1.242993_wp, 1.991420_wp, 0.000000_wp, 0.000000_wp, & + & 1.314003_wp, 1.164384_wp, 2.127596_wp, 0.000000_wp, & + & 2.817373_wp, 1.698633_wp, 2.273697_wp, 0.000000_wp, & + & 2.845039_wp, 1.460181_wp, 2.534989_wp, 2.534989_wp, & + & 2.816971_wp, 1.475453_wp, 2.543502_wp, 0.000000_wp, & + & 2.788903_wp, 1.490724_wp, 2.552016_wp, 0.000000_wp, & + & 2.760835_wp, 1.505995_wp, 2.560529_wp, 0.000000_wp, & + & 2.732767_wp, 1.521266_wp, 2.569042_wp, 0.000000_wp, & + & 2.704699_wp, 1.536537_wp, 2.577556_wp, 0.000000_wp, & + & 2.676631_wp, 1.551808_wp, 2.586069_wp, 0.000000_wp, & + & 2.648563_wp, 1.567079_wp, 2.594583_wp, 0.000000_wp, & + & 2.620495_wp, 1.582351_wp, 2.603096_wp, 0.000000_wp, & + & 2.592427_wp, 1.597622_wp, 2.611609_wp, 0.000000_wp, & + & 2.564359_wp, 1.612893_wp, 2.620123_wp, 0.000000_wp, & + & 2.536291_wp, 1.628164_wp, 2.628636_wp, 0.000000_wp, & + & 2.508223_wp, 1.643435_wp, 2.637150_wp, 0.000000_wp, & + & 2.480155_wp, 1.658706_wp, 2.645663_wp, 0.000000_wp, & + & 3.195377_wp, 2.248538_wp, 2.414921_wp, 0.000000_wp, & + & 3.141220_wp, 2.487234_wp, 2.219335_wp, 0.000000_wp, & + & 3.176612_wp, 3.395385_wp, 2.375027_wp, 0.000000_wp, & + & 3.145383_wp, 2.583611_wp, 2.471393_wp, 0.000000_wp, & + & 1.815656_wp, 2.481062_wp, 3.185853_wp, 0.000000_wp, & + & 2.117984_wp, 2.858570_wp, 3.470484_wp, 0.000000_wp, & + & 2.712412_wp, 3.378860_wp, 3.641249_wp, 0.000000_wp, & + & 2.805724_wp, 2.825702_wp, 3.720644_wp, 0.000000_wp, & + & 2.619513_wp, 2.696078_wp, 0.000000_wp, 0.000000_wp, & + & 3.053831_wp, 2.616838_wp, 3.321796_wp, 0.000000_wp, & + & 3.021350_wp, 2.592502_wp, 4.246744_wp, 0.000000_wp, & + & 3.164052_wp, 2.632387_wp, 3.046255_wp, 0.000000_wp, & + & 2.961334_wp, 2.713884_wp, 2.310225_wp, 0.000000_wp, & + & 2.982405_wp, 2.959607_wp, 2.437783_wp, 0.000000_wp, & + & 3.079362_wp, 2.685897_wp, 2.103113_wp, 0.000000_wp], & ! 86 & shape(zeta)) integer :: isp, izp, ish, stat @@ -158,12 +282,12 @@ subroutine test_overlap_diat_mol(error, mol, ref) real(wp), intent(in) :: ref(:, :) type(basis_type) :: bas - real(wp), allocatable :: lattr(:, :), overlap(:, :), overlap_scaled(:, :) + real(wp), allocatable :: lattr(:, :), overlap(:, :), overlap_diat(:, :) real(wp) :: cutoff integer :: ii, jj real(wp) :: scalfac(3,86) - scalfac = 1.0_wp + scalfac = 1.2_wp call make_basis(bas, mol, 6) call check(error, bas%nao, size(ref, 1)) @@ -172,12 +296,12 @@ subroutine test_overlap_diat_mol(error, mol, ref) cutoff = get_cutoff(bas) call get_lattice_points(mol%periodic, mol%lattice, cutoff, lattr) - allocate(overlap(bas%nao, bas%nao), overlap_scaled(bas%nao, bas%nao)) - call get_overlap(mol, lattr, cutoff, bas, scalfac, overlap, overlap_scaled) + allocate(overlap(bas%nao, bas%nao), overlap_diat(bas%nao, bas%nao)) + call get_overlap(mol, lattr, cutoff, bas, scalfac, overlap, overlap_diat) - do ii = 1, size(overlap_scaled, 2) - do jj = 1, size(overlap_scaled, 1) - call check(error, overlap_scaled(jj, ii), ref(jj, ii), thr=thr) + do ii = 1, size(overlap_diat, 2) + do jj = 1, size(overlap_diat, 1) + call check(error, overlap_diat(jj, ii), ref(jj, ii), thr=thr) if (allocated(error)) return end do end do @@ -211,7 +335,7 @@ subroutine test_overlap_alh3(error) & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 9.99999999830206E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-2.26789082148469E-1_wp,-2.26789082148469E-1_wp,-2.26789082148469E-1_wp,& + &-3.40183623222704E-1_wp, 3.40183623222704E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999830206E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& @@ -219,28 +343,29 @@ subroutine test_overlap_alh3(error) & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 9.99999999830206E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-2.26789082148469E-1_wp,-2.26789082148469E-1_wp,-2.26789082148469E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 9.99999999830206E-1_wp, 0.00000000000000E+0_wp,& - &-1.96405106441530E-1_wp,-1.96405106441530E-1_wp, 3.92810212883060E-1_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999830206E-1_wp,& - &-3.40183623222704E-1_wp, 3.40183623222704E-1_wp, 0.00000000000000E+0_wp,& + &-1.96405106441530E-1_wp,-1.96405106441530E-1_wp, 3.92810212883060E-1_wp,& & 4.02664545809937E-1_wp, 4.32775379754938E-1_wp, 0.00000000000000E+0_wp,& - &-2.49862982000156E-1_wp,-2.26789082148469E-1_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-1.96405106441530E-1_wp,-3.40183623222704E-1_wp,& + &-2.49862982000156E-1_wp,-3.40183623222704E-1_wp, 0.00000000000000E+0_wp,& + &-2.26789082148469E-1_wp, 0.00000000000000E+0_wp,-1.96405106441530E-1_wp,& & 9.99999999881495E-1_wp, 3.54600353330803E-2_wp, 3.54600353330805E-2_wp,& & 4.02664545809937E-1_wp,-4.32775379754938E-1_wp, 0.00000000000000E+0_wp,& - &-2.49862982000156E-1_wp,-2.26789082148469E-1_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-1.96405106441530E-1_wp, 3.40183623222704E-1_wp,& + &-2.49862982000156E-1_wp, 3.40183623222704E-1_wp, 0.00000000000000E+0_wp,& + &-2.26789082148469E-1_wp, 0.00000000000000E+0_wp,-1.96405106441530E-1_wp,& & 3.54600353330803E-2_wp, 9.99999999881495E-1_wp, 3.54600353330805E-2_wp,& & 4.02664545809939E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 4.99725964000314E-1_wp,-2.26789082148469E-1_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 3.92810212883060E-1_wp, 0.00000000000000E+0_wp,& + & 4.99725964000314E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-2.26789082148469E-1_wp, 0.00000000000000E+0_wp, 3.92810212883060E-1_wp,& & 3.54600353330805E-2_wp, 3.54600353330805E-2_wp, 9.99999999881495E-1_wp],& & shape(overlap)) + type(structure_type) :: mol call get_structure(mol, "MB16-43", "AlH3") @@ -254,15 +379,15 @@ subroutine test_overlap_diat_alh3(error) type(error_type), allocatable, intent(out) :: error integer, parameter :: nao = 12 - real(wp), parameter :: overlap(nao, nao) = reshape([& + real(wp), parameter :: overlap_diat(nao, nao) = reshape([& & 9.99999999869333E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 4.02664545809937E-1_wp, 4.02664545809937E-1_wp, 4.02664545809939E-1_wp,& + & 4.83197454971925E-1_wp, 4.83197454971925E-1_wp, 4.83197454971926E-1_wp,& & 0.00000000000000E+0_wp, 9.99999999998060E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 4.32775379754938E-1_wp,-4.32775379754938E-1_wp, 0.00000000000000E+0_wp,& + & 5.19330455705926E-1_wp,-5.19330455705926E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999998060E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& @@ -270,11 +395,11 @@ subroutine test_overlap_diat_alh3(error) & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 9.99999999998060E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-2.49862982000156E-1_wp,-2.49862982000156E-1_wp, 4.99725964000314E-1_wp,& + &-2.99835578400188E-1_wp,-2.99835578400188E-1_wp, 5.99671156800377E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 9.99999999830206E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-2.26789082148469E-1_wp,-2.26789082148469E-1_wp,-2.26789082148469E-1_wp,& + &-4.08220347867244E-1_wp, 4.08220347867244E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999830206E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& @@ -282,32 +407,33 @@ subroutine test_overlap_diat_alh3(error) & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 9.99999999830206E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-2.72146898578163E-1_wp,-2.72146898578163E-1_wp,-2.72146898578163E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 9.99999999830206E-1_wp, 0.00000000000000E+0_wp,& - &-1.96405106441530E-1_wp,-1.96405106441530E-1_wp, 3.92810212883060E-1_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999830206E-1_wp,& - &-3.40183623222704E-1_wp, 3.40183623222704E-1_wp, 0.00000000000000E+0_wp,& - & 4.02664545809937E-1_wp, 4.32775379754938E-1_wp, 0.00000000000000E+0_wp,& - &-2.49862982000156E-1_wp,-2.26789082148469E-1_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-1.96405106441530E-1_wp,-3.40183623222704E-1_wp,& - & 9.99999999881495E-1_wp, 3.54600353330803E-2_wp, 3.54600353330805E-2_wp,& - & 4.02664545809937E-1_wp,-4.32775379754938E-1_wp, 0.00000000000000E+0_wp,& - &-2.49862982000156E-1_wp,-2.26789082148469E-1_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-1.96405106441530E-1_wp, 3.40183623222704E-1_wp,& - & 3.54600353330803E-2_wp, 9.99999999881495E-1_wp, 3.54600353330805E-2_wp,& - & 4.02664545809939E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 4.99725964000314E-1_wp,-2.26789082148469E-1_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 3.92810212883060E-1_wp, 0.00000000000000E+0_wp,& - & 3.54600353330805E-2_wp, 3.54600353330805E-2_wp, 9.99999999881495E-1_wp],& - & shape(overlap)) + &-2.35686127729836E-1_wp,-2.35686127729836E-1_wp, 4.71372255459672E-1_wp,& + & 4.83197454971925E-1_wp, 5.19330455705926E-1_wp, 0.00000000000000E+0_wp,& + &-2.99835578400188E-1_wp,-4.08220347867244E-1_wp, 0.00000000000000E+0_wp,& + &-2.72146898578163E-1_wp, 0.00000000000000E+0_wp,-2.35686127729836E-1_wp,& + & 9.99999999881495E-1_wp, 4.25520423996964E-2_wp, 4.25520423996966E-2_wp,& + & 4.83197454971925E-1_wp,-5.19330455705926E-1_wp, 0.00000000000000E+0_wp,& + &-2.99835578400188E-1_wp, 4.08220347867244E-1_wp, 0.00000000000000E+0_wp,& + &-2.72146898578163E-1_wp, 0.00000000000000E+0_wp,-2.35686127729836E-1_wp,& + & 4.25520423996964E-2_wp, 9.99999999881495E-1_wp, 4.25520423996966E-2_wp,& + & 4.83197454971927E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 5.99671156800377E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-2.72146898578163E-1_wp, 0.00000000000000E+0_wp, 4.71372255459672E-1_wp,& + & 4.25520423996966E-2_wp, 4.25520423996966E-2_wp, 9.99999999881495E-1_wp],& + & shape(overlap_diat)) + type(structure_type) :: mol call get_structure(mol, "MB16-43", "AlH3") - call test_overlap_diat_mol(error, mol, overlap) + call test_overlap_diat_mol(error, mol, overlap_diat) end subroutine test_overlap_diat_alh3 @@ -419,110 +545,110 @@ subroutine test_overlap_cl2(error) & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 9.17210205959034E-2_wp, 0.00000000000000E+0_wp,-1.66880110378166E-1_wp,& - & 0.00000000000000E+0_wp, 1.08719248478375E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 1.08719248478375E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 9.99999999998060E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 6.66413853324784E-2_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-7.28795473739356E-2_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-7.28795473739356E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999998060E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 1.66880110378166E-1_wp, 0.00000000000000E+0_wp,-2.43857348208300E-1_wp,& - & 0.00000000000000E+0_wp, 1.54878516243462E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 1.54878516243462E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 9.99999999998060E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 6.66413853324784E-2_wp, 0.00000000000000E+0_wp,-7.28795473739356E-2_wp,& + & 6.66413853324784E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp,-7.28795473739356E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 9.99999999830205E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 9.99999999830206E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 1.08719248478375E-1_wp, 0.00000000000000E+0_wp,-1.54878516243462E-1_wp,& - & 0.00000000000000E+0_wp, 1.20587356016693E-1_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 1.65407586749691E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999830205E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 7.28795473739356E-2_wp, 0.00000000000000E+0_wp,-8.83217466681701E-2_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 7.28795473739356E-2_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-8.83217466681701E-2_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 9.99999999830205E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 7.28795473739356E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-8.83217466681701E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 9.99999999830206E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 1.08719248478375E-1_wp, 0.00000000000000E+0_wp,-1.54878516243462E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 1.20587356016693E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 9.99999999830206E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 9.99999999830205E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 1.65407586749691E-2_wp, 0.00000000000000E+0_wp,& + & 7.28795473739356E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp,-8.83217466681701E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.0000000000000E+0_wp, 9.99999999830205E-1_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999830206E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 1.65407586749691E-2_wp,& & 9.17210205959034E-2_wp, 0.00000000000000E+0_wp, 1.66880110378166E-1_wp,& - & 0.00000000000000E+0_wp, 1.08719248478375E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 1.08719248478375E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 9.99999999869332E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 6.66413853324784E-2_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 7.28795473739356E-2_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 7.28795473739356E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 9.99999999998060E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& &-1.66880110378166E-1_wp, 0.00000000000000E+0_wp,-2.43857348208300E-1_wp,& - & 0.00000000000000E+0_wp,-1.54878516243462E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-1.54878516243462E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999998060E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 6.66413853324784E-2_wp, 0.00000000000000E+0_wp, 7.28795473739356E-2_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 6.66413853324784E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 7.28795473739356E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 9.99999999998060E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 1.08719248478375E-1_wp, 0.00000000000000E+0_wp, 1.54878516243462E-1_wp,& - & 0.00000000000000E+0_wp, 1.20587356016693E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 1.65407586749691E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 9.99999999830206E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 9.99999999830205E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-7.28795473739356E-2_wp, 0.00000000000000E+0_wp,-8.83217466681701E-2_wp,& + & 0.00000000000000E+0_wp,-7.28795473739356E-2_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-8.83217466681701E-2_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999830205E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-7.28795473739356E-2_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-8.83217466681701E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 1.08719248478375E-1_wp, 0.00000000000000E+0_wp, 1.54878516243462E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 1.20587356016693E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 9.99999999830205E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 9.99999999830206E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 1.65407586749691E-2_wp, 0.00000000000000E+0_wp,& + &-7.28795473739356E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp,-8.83217466681701E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 9.99999999830206E-1_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 9.99999999830205E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 1.65407586749691E-2_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999830205E-1_wp],& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999830206E-1_wp],& & shape(overlap)) type(structure_type) :: mol @@ -542,111 +668,111 @@ subroutine test_overlap_diat_cl2(error) & 9.99999999869332E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 9.17210205959034E-2_wp, 0.00000000000000E+0_wp,-1.66880110378166E-1_wp,& - & 0.00000000000000E+0_wp, 1.08719248478375E-1_wp, 0.00000000000000E+0_wp,& + & 1.10065224715084E-1_wp, 0.00000000000000E+0_wp,-2.00256132453799E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 1.30463098174050E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 9.99999999998060E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 6.66413853324784E-2_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 7.99696623989741E-2_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-8.74554568487227E-2_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-7.28795473739356E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999998060E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 1.66880110378166E-1_wp, 0.00000000000000E+0_wp,-2.43857348208300E-1_wp,& - & 0.00000000000000E+0_wp, 1.54878516243462E-1_wp, 0.00000000000000E+0_wp,& + & 2.00256132453799E-1_wp, 0.00000000000000E+0_wp,-2.92628817849960E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 1.85854219492155E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 9.99999999998060E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 6.66413853324784E-2_wp, 0.00000000000000E+0_wp,-7.28795473739356E-2_wp,& + & 7.99696623989741E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp,-8.74554568487227E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 9.99999999830205E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 9.99999999830206E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 1.08719248478375E-1_wp, 0.00000000000000E+0_wp,-1.54878516243462E-1_wp,& - & 0.00000000000000E+0_wp, 1.20587356016693E-1_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 1.98489104099629E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999830205E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 7.28795473739356E-2_wp, 0.00000000000000E+0_wp,-8.83217466681701E-2_wp,& + & 0.00000000000000E+0_wp, 8.74554568487227E-2_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-1.05986096001804E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 9.99999999830205E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 7.28795473739356E-2_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-8.83217466681701E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 9.99999999830206E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 1.30463098174050E-1_wp, 0.00000000000000E+0_wp,-1.85854219492155E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 1.44704827220032E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 9.99999999830206E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 9.99999999830205E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 1.65407586749691E-2_wp, 0.00000000000000E+0_wp,& + & 8.74554568487227E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp,-1.05986096001804E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.0000000000000E+0_wp, 9.99999999830205E-1_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999830206E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 1.65407586749691E-2_wp,& - & 9.17210205959034E-2_wp, 0.00000000000000E+0_wp, 1.66880110378166E-1_wp,& - & 0.00000000000000E+0_wp, 1.08719248478375E-1_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 1.98489104099629E-2_wp,& + & 1.10065224715084E-1_wp, 0.00000000000000E+0_wp, 2.00256132453799E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 1.30463098174050E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 9.99999999869332E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 6.66413853324784E-2_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 7.99696623989741E-2_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 8.74554568487227E-2_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 7.28795473739356E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 9.99999999998060E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-1.66880110378166E-1_wp, 0.00000000000000E+0_wp,-2.43857348208300E-1_wp,& - & 0.00000000000000E+0_wp,-1.54878516243462E-1_wp, 0.00000000000000E+0_wp,& + &-2.00256132453799E-1_wp, 0.00000000000000E+0_wp,-2.92628817849960E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + &-1.85854219492155E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999998060E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 6.66413853324784E-2_wp, 0.00000000000000E+0_wp, 7.28795473739356E-2_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 7.99696623989741E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 8.74554568487227E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 9.99999999998060E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 1.08719248478375E-1_wp, 0.00000000000000E+0_wp, 1.54878516243462E-1_wp,& - & 0.00000000000000E+0_wp, 1.20587356016693E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 1.98489104099629E-2_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 9.99999999830206E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 9.99999999830205E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-7.28795473739356E-2_wp, 0.00000000000000E+0_wp,-8.83217466681701E-2_wp,& + & 0.00000000000000E+0_wp,-8.74554568487227E-2_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,-1.05986096001804E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999830205E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp,-7.28795473739356E-2_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - &-8.83217466681701E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 1.30463098174050E-1_wp, 0.00000000000000E+0_wp, 1.85854219492155E-1_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 1.44704827220032E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 9.99999999830205E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 9.99999999830206E-1_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 1.65407586749691E-2_wp, 0.00000000000000E+0_wp,& + &-8.74554568487227E-2_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp,-1.05986096001804E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 9.99999999830206E-1_wp, 0.00000000000000E+0_wp,& + & 0.00000000000000E+0_wp, 9.99999999830205E-1_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 1.65407586749691E-2_wp,& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 1.98489104099629E-2_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 0.00000000000000E+0_wp,& - & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999830205E-1_wp],& + & 0.00000000000000E+0_wp, 0.00000000000000E+0_wp, 9.99999999830206E-1_wp],& & shape(overlap)) type(structure_type) :: mol @@ -735,6 +861,638 @@ subroutine test_overlap_lih(error) end subroutine test_overlap_lih +subroutine test_overlap_diat_cecl3(error) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + integer, parameter :: nao = 43 + real(wp), parameter :: overlap(nao, nao) = reshape([& + & 1.00000000017687E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp,& + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 8.69412276329442E-02_wp, 1.09663227357883E-01_wp, & + & 6.85934472373425E-02_wp, 7.46686270912962E-02_wp, 5.39873838622696E-02_wp, & + & 4.95948688317373E-02_wp, -1.55903398924374E-02_wp, 3.37686648082453E-02_wp, & + & -2.12649579080578E-02_wp, 8.67139986554086E-02_wp, -1.13584328085048E-01_wp, & + & -5.71130711953149E-02_wp, 7.77825760830674E-02_wp, -5.83831463741125E-02_wp, & + & 4.28687369766487E-02_wp, -2.37076059225061E-02_wp, -2.93565217287235E-02_wp, & + & -2.26374693772444E-02_wp, 8.73543363380361E-02_wp, 3.61731541134505E-02_wp, & + & -5.71022949696438E-02_wp, -1.33816329028274E-01_wp, -3.17825201816373E-02_wp, & + & -1.35622823871297E-02_wp, -2.40602114448212E-02_wp, 5.01713186690479E-02_wp, & + & 5.44912525773983E-02_wp, 0.00000000000000E+00_wp, 1.00000000002709E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 2.77555756156289E-17_wp, 0.00000000000000E+00_wp, & + & 5.55111512312578E-17_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -3.40201809683547E-01_wp, & + & -4.14280857819152E-02_wp, -1.19418786053541E-01_wp, -1.29995461121435E-01_wp, & + & -4.72851062125490E-03_wp, -4.34379010897963E-03_wp, -1.71048248105265E-02_wp, & + & -2.36191595818926E-02_wp, -3.36400249951174E-02_wp, 3.52869972519298E-01_wp, & + & -5.63511977455039E-02_wp, -1.03417073813248E-01_wp, 1.40844227841612E-01_wp, & + & -8.05377110703101E-03_wp, 5.91360720857850E-03_wp, 1.17908981123966E-02_wp, & + & -2.13786714107248E-02_wp, 3.38405303098483E-02_wp, -1.11927689146485E-01_wp, & + & 1.29184921393787E-01_wp, 3.25455034102347E-02_wp, 7.62687348214290E-02_wp, & + & -5.17690901910778E-02_wp, -2.20909800759548E-02_wp, -3.71443619535530E-03_wp, & + & -1.14661853993300E-02_wp, -2.84111485232627E-02_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 1.00000000002709E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -5.55111512312578E-17_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & -2.12793435363904E-01_wp, -1.19418786053541E-01_wp, 7.47962781286959E-02_wp, & + & -8.13110923174573E-02_wp, -2.36191595818926E-02_wp, 2.68161297325115E-02_wp, & + & 4.18598977604196E-02_wp, 1.82588424513004E-02_wp, 9.30329270286544E-03_wp, & + & 1.77431941562336E-01_wp, -1.03417073813248E-01_wp, 9.73200705922398E-02_wp, & + & 7.08200378325435E-02_wp, -2.13786714107248E-02_wp, -3.46284778301005E-02_wp, & + & -3.79011924083843E-02_wp, 2.37135902185714E-02_wp, -8.28936173267027E-03_wp, & + & 1.76687050868385E-01_wp, 3.25455034102347E-02_wp, 9.84260921377083E-02_wp, & + & -1.20396462500221E-01_wp, -1.14661853993300E-02_wp, 1.10648156497081E-02_wp, & + & -3.77677054156251E-02_wp, -4.09323723050175E-02_wp, 1.96588187822549E-02_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 1.00000000002709E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 5.55111512312578E-17_wp, 0.00000000000000E+00_wp, & + & -2.77555756156289E-17_wp, -2.31640110135961E-01_wp, -1.29995461121435E-01_wp, & + & -8.13110923174573E-02_wp, 6.09790994241015E-02_wp, 2.28025303637907E-02_wp, & + & -2.36191595818926E-02_wp, -1.16465091900958E-02_wp, 1.42627952967513E-02_wp, & + & 4.31596987206192E-02_wp, -2.41645444821936E-01_wp, 1.40844227841612E-01_wp, & + & 7.08200378325435E-02_wp, 5.28706271385305E-02_wp, -2.12103821177911E-02_wp, & + & -2.13786714107248E-02_wp, -8.07440995582121E-03_wp, -1.06651162567620E-02_wp, & + & 4.57526496102248E-02_wp, 4.14057132845683E-01_wp, 7.62687348214290E-02_wp, & + & -1.20396462500221E-01_wp, -1.32341154522262E-01_wp, -1.09127406617264E-02_wp, & + & -1.14661853993300E-02_wp, 1.37409144503486E-02_wp, 1.72266574885550E-02_wp, & + & -1.29632440844008E-02_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 9.99999999778610E-01_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 8.20155010090769E-02_wp, & + & 9.28979457969490E-02_wp, 8.00569085802895E-02_wp, 3.56083920092022E-02_wp, & + & 3.58620481214061E-02_wp, 6.49720464580809E-02_wp, 9.89663399650733E-03_wp, & + & 2.86445384905872E-02_wp, -3.63460078236818E-02_wp, -8.86514552275003E-02_wp, & + & 1.07106300572797E-01_wp, 7.22242203094390E-02_wp, -4.50177541095921E-02_wp, & + & 4.63175554736653E-02_wp, -6.21718876923976E-02_wp, 4.41008058157470E-03_wp, & + & 2.92431802609242E-02_wp, 4.19093396272880E-02_wp, -4.83242438420612E-02_wp, & + & 3.82018892333236E-02_wp, 3.90978820690418E-02_wp, 7.46019922122533E-02_wp, & + & -3.05116894672468E-02_wp, -1.58559058503109E-02_wp, 2.58807011549745E-03_wp, & + & -4.23724796435138E-02_wp, -5.46710758908302E-02_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 9.99999999778610E-01_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 7.53425656833336E-02_wp, 8.53395943076514E-02_wp, 2.20043365124130E-02_wp, & + & 8.00569085802895E-02_wp, 6.49720464580809E-02_wp, 2.48213604227393E-02_wp, & + & -4.12640911091508E-02_wp, 2.13736344720395E-02_wp, -4.31605738168390E-03_wp, & + & 6.50937154430233E-02_wp, -7.86444738413934E-02_wp, 3.13009539865031E-04_wp, & + & 7.22242203094390E-02_wp, -6.21718876923976E-02_wp, 7.29603146759239E-03_wp, & + & -4.67218548895194E-02_wp, -5.71517669530143E-03_wp, -5.66727024069538E-03_wp, & + & -2.06209903237694E-02_wp, 1.63015647136606E-02_wp, -3.38005258954584E-04_wp, & + & 3.90978820690418E-02_wp, -1.58559058503109E-02_wp, -1.20233934496212E-04_wp, & + & 1.48991414842628E-02_wp, -2.81564588294365E-03_wp, -3.12937259411050E-02_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 9.99999999778609E-01_wp, 0.00000000000000E+00_wp, 4.80740671595891E-17_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, -2.36842285309118E-02_wp, -7.20467680720084E-03_wp, & + & -6.03429612836281E-02_wp, -4.90559450776114E-03_wp, 9.89663399650732E-03_wp, & + & -4.12640911091508E-02_wp, -2.76120606165884E-02_wp, -2.80963191173944E-02_wp, & + & -3.89816083520694E-03_wp, -3.59986382289629E-02_wp, 2.75278884074025E-02_wp, & + & 6.03006889788791E-02_wp, -1.88511048183665E-02_wp, 4.41008058157471E-03_wp, & + & -4.67218548895194E-02_wp, -1.18825152389580E-02_wp, 3.19951378324389E-02_wp, & + & 1.70996375352673E-03_wp, -3.65827353559851E-02_wp, -8.92221837554665E-03_wp, & + & 6.06254946164389E-02_wp, 3.30062041606793E-02_wp, 2.58807011549746E-03_wp, & + & 1.48991414842628E-02_wp, -1.14945896141096E-02_wp, -5.51167977457504E-02_wp, & + & -4.43725612524172E-03_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 9.99999999778610E-01_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 5.13000216813875E-02_wp, & + & 8.00569085802895E-02_wp, 1.49825391521149E-02_wp, 2.22727564867189E-02_wp, & + & 2.86445384905872E-02_wp, 2.13736344720395E-02_wp, -2.80963191173944E-02_wp, & + & 7.98374374734485E-03_wp, -4.25294966518297E-02_wp, -4.45761925024143E-02_wp, & + & 7.22242203094390E-02_wp, -2.14349010640342E-04_wp, -2.26360646654454E-02_wp, & + & 2.92431802609242E-02_wp, -5.71517669530144E-03_wp, 3.19951378324389E-02_wp, & + & 2.86402855372428E-03_wp, 3.82652025183376E-02_wp, 7.62837881761689E-02_wp, & + & 3.90978820690418E-02_wp, 1.25039201181341E-03_wp, -1.17765372388225E-01_wp, & + & -4.23724796435138E-02_wp, -2.81564588294364E-03_wp, -5.51167977457504E-02_wp, & + & 9.53463736577520E-03_wp, 5.68398395712986E-02_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 4.80740671595891E-17_wp, & + & 0.00000000000000E+00_wp, 9.99999999778609E-01_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & -3.23048840672788E-02_wp, 1.12518921460422E-03_wp, -3.15334189104662E-02_wp, & + & -6.94186677160610E-02_wp, -3.63460078236819E-02_wp, -4.31605738168388E-03_wp, & + & -3.89816083520693E-03_wp, -4.25294966518297E-02_wp, -4.20968008654698E-02_wp, & + & -3.43736973355472E-02_wp, 2.34893769725024E-03_wp, 2.80042045879740E-02_wp, & + & -7.46695782592206E-02_wp, 4.19093396272880E-02_wp, -5.66727024069537E-03_wp, & + & 1.70996375352671E-03_wp, 3.82652025183376E-02_wp, -4.55187727956170E-02_wp, & + & 8.28521011474394E-02_wp, 5.94862619285365E-02_wp, -6.70334685509428E-02_wp, & + & -9.41199197927978E-02_wp, -5.46710758908302E-02_wp, -3.12937259411051E-02_wp, & + & -4.43725612524171E-03_wp, 5.68398395712986E-02_wp, 3.13346757662612E-02_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 9.99999999954551E-01_wp, 0.00000000000000E+00_wp, 1.11022302462516E-16_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, -6.37703812927541E-03_wp, -2.24936604198012E-02_wp, & + & -7.22571944109632E-03_wp, 1.99127981578240E-02_wp, 5.81512727763616E-03_wp, & + & -1.72393727662213E-02_wp, -2.14384122602978E-03_wp, 1.29355636537831E-02_wp, & + & 2.79559437246025E-02_wp, 7.40406770098628E-03_wp, -2.55601123198589E-02_wp, & + & -7.00152224711212E-03_wp, -2.04737585704892E-02_wp, 5.71402985740158E-03_wp, & + & 1.64261267820631E-02_wp, 6.55758393614611E-04_wp, 1.09396897005001E-02_wp, & + & -3.25759068310625E-02_wp, -2.32970808181820E-02_wp, 1.42279516174685E-02_wp, & + & 2.18832031916388E-02_wp, 3.48981234262437E-02_wp, -1.02121852619804E-02_wp, & + & -6.78822012440303E-03_wp, -1.93575430061701E-03_wp, -2.57527981119962E-02_wp, & + & -2.95098567978740E-02_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 9.99999999954551E-01_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -3.40431849326325E-02_wp, & + & -4.74827302104553E-02_wp, -1.58927481291258E-02_wp, -2.11545204817318E-02_wp, & + & -2.63941704687171E-02_wp, -2.11135912416699E-02_wp, 1.60699196580794E-02_wp, & + & -1.07444245139649E-02_wp, 2.19190965349443E-02_wp, -3.06985789568106E-02_wp, & + & 4.54124683874554E-02_wp, 4.52717213649874E-03_wp, -2.15442376617703E-02_wp, & + & 2.77251308119991E-02_wp, -9.78968090562189E-03_wp, 2.20763678154631E-02_wp, & + & 5.41731475723263E-03_wp, 2.10798636529092E-02_wp, -1.66394753076522E-02_wp, & + & 1.12164550839581E-02_wp, 2.25211882161450E-03_wp, 3.09187955546773E-02_wp, & + & -1.08132873910535E-02_wp, -8.10584518942799E-04_wp, 1.20817835115180E-02_wp, & + & -6.24737443153229E-03_wp, -2.73626654703935E-02_wp, 0.00000000000000E+00_wp, & + & 2.77555756156289E-17_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 1.11022302462516E-16_wp, & + & 0.00000000000000E+00_wp, 9.99999999954550E-01_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & -1.28090757033867E-03_wp, -1.23204005913030E-02_wp, 2.49038884936724E-02_wp, & + & -8.75229503253804E-03_wp, -1.60649283629892E-02_wp, 1.43945681826134E-02_wp, & + & 2.29720108902036E-02_wp, 1.37607056483274E-02_wp, 4.08008511942591E-03_wp, & + & -6.45075714555441E-03_wp, -1.77211746261234E-03_wp, 2.88573809092836E-02_wp, & + & -5.59343295542887E-04_wp, -6.89049708634549E-03_wp, -2.15630999197224E-02_wp, & + & -1.47401248948007E-02_wp, 1.93252201033651E-02_wp, -3.00247894938941E-03_wp, & + & 2.12528120885591E-03_wp, -2.57616878551625E-03_wp, -9.21701378652493E-03_wp, & + & -4.47883417102252E-04_wp, 1.72123004852782E-03_wp, 3.87219849948905E-03_wp, & + & 4.60884129645277E-03_wp, 1.05925682350414E-02_wp, -1.67051092576148E-03_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 9.99999999954551E-01_wp, 0.00000000000000E+00_wp, 5.55111512312578E-17_wp, & + & 0.00000000000000E+00_wp, 2.32909205984756E-02_wp, 2.60524728274164E-02_wp, & + & 1.76031258469667E-02_wp, 1.77388758768520E-02_wp, 1.34622945224013E-02_wp, & + & 1.98904123574332E-02_wp, -9.39476671196776E-03_wp, 1.35431887132267E-02_wp, & + & -5.30263009400632E-03_wp, -2.25774856886379E-02_wp, 2.85240889524626E-02_wp, & + & 8.00111168452364E-03_wp, -1.95333031990455E-02_wp, 1.78063068515174E-02_wp, & + & -1.19714716143595E-02_wp, 1.69654313272323E-02_wp, 8.19806673481372E-03_wp, & + & 6.90421382037361E-03_wp, -2.26881057605045E-02_wp, -9.07844125129397E-03_wp, & + & 7.72420256658115E-03_wp, 3.35841236773789E-02_wp, 9.71809772688050E-03_wp, & + & 3.71972593593363E-03_wp, 1.72717431621451E-02_wp, -1.37604829309815E-02_wp, & + & -1.66617157727234E-02_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 2.77555756156289E-17_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 9.99999999954550E-01_wp, & + & 0.00000000000000E+00_wp, -1.66533453693773E-16_wp, -8.72157531858014E-04_wp, & + & -8.75229503253805E-03_wp, 1.69568159524313E-02_wp, -5.42556064348706E-03_wp, & + & -9.29097453288089E-03_wp, 1.37607056483274E-02_wp, 1.56414192434809E-02_wp, & + & 3.55422714503404E-03_wp, 6.96070362833565E-03_wp, 4.41748009542106E-03_wp, & + & -5.59343295542888E-04_wp, -1.97615416138547E-02_wp, -2.20587677537982E-03_wp, & + & 4.95776309493031E-03_wp, 1.93252201033651E-02_wp, 1.00940411888978E-02_wp, & + & -6.57678604430529E-03_wp, 1.43932135734599E-03_wp, -7.86211035482032E-03_wp, & + & -4.47883417102248E-04_wp, 3.40967488112168E-02_wp, -1.04037311751583E-03_wp, & + & -4.15510671194854E-03_wp, 1.05925682350414E-02_wp, -1.70496114723901E-02_wp, & + & -3.24497991168268E-02_wp, 7.47010245689619E-03_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 9.99999999954550E-01_wp, 0.00000000000000E+00_wp, & + & 1.34091864220632E-02_wp, 3.45519482653732E-03_wp, 6.25995549018286E-03_wp, & + & 3.07262139246520E-02_wp, 2.19190965349443E-02_wp, 3.36169334446591E-03_wp, & + & -6.32974114816765E-03_wp, 1.15088725091117E-02_wp, 2.06202786830572E-02_wp, & + & -1.19030608012565E-02_wp, 4.39408073360094E-03_wp, 1.75536480937154E-03_wp, & + & -2.76499015081222E-02_wp, 2.10798636529093E-02_wp, -2.01631062617650E-03_wp, & + & 8.55988639565553E-03_wp, 4.69913239680737E-03_wp, -1.84673717546551E-02_wp, & + & 2.85284441435993E-02_wp, 2.26838862024821E-02_wp, -3.86126634519725E-03_wp, & + & -4.16800783537248E-02_wp, -2.73626654703935E-02_wp, -3.96213612481711E-03_wp, & + & -2.07142641033214E-02_wp, 9.26442849949040E-03_wp, 2.01405830947493E-02_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, -1.11022302462516E-16_wp, 0.00000000000000E+00_wp, & + & 9.99999999954551E-01_wp, 2.81785548509627E-02_wp, 2.32672185743682E-02_wp, & + & 3.19286677421413E-02_wp, 2.38149248312371E-02_wp, 2.22115769413314E-02_wp, & + & 2.28581711018306E-02_wp, 9.47310434010206E-03_wp, 2.11477642204028E-02_wp, & + & -1.90384369106144E-03_wp, 3.15424946469630E-02_wp, -2.93108178909011E-02_wp, & + & -2.98275876071079E-02_wp, 2.89865919149946E-02_wp, -2.83688082507035E-02_wp, & + & 2.34835834975460E-02_wp, 2.79363404761069E-03_wp, -2.12898936281053E-02_wp, & + & -2.83300770467368E-03_wp, 2.29901709038050E-02_wp, 3.00639987805416E-02_wp, & + & -2.15949193473986E-02_wp, -2.25160768370592E-02_wp, -3.08515669011558E-02_wp, & + & -1.89302474912947E-02_wp, 1.91025315773589E-03_wp, 1.84855092937346E-02_wp, & + & 5.24876072680659E-03_wp, 8.69412276329442E-02_wp, -3.40201809683547E-01_wp, & + & -2.12793435363904E-01_wp, -2.31640110135961E-01_wp, 8.20155010090769E-02_wp, & + & 7.53425656833336E-02_wp, -2.36842285309118E-02_wp, 5.13000216813875E-02_wp, & + & -3.23048840672788E-02_wp, -6.37703812927541E-03_wp, -3.40431849326325E-02_wp, & + & -1.28090757033867E-03_wp, 2.32909205984756E-02_wp, -8.72157531858011E-04_wp, & + & 1.34091864220632E-02_wp, 2.81785548509627E-02_wp, 9.99999999869332E-01_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 9.52137814488968E-05_wp, & + & -3.36928188670201E-04_wp, -1.89691378004237E-04_wp, 4.99549878650670E-06_wp, & + & -3.01084193947362E-06_wp, 1.14329075205538E-04_wp, -2.14716191083883E-05_wp, & + & -1.69511123039559E-06_wp, -1.01512838117467E-04_wp, 1.12758480338272E-04_wp, & + & -1.31040324396565E-04_wp, -2.23144270067549E-04_wp, -3.69794278272637E-04_wp, & + & 7.55446878381371E-05_wp, 4.55857897636091E-05_wp, -2.44516968961120E-05_wp, & + & 1.28642570924251E-04_wp, 9.32081069771156E-05_wp, 1.09663227357883E-01_wp, & + & -4.14280857819152E-02_wp, -1.19418786053541E-01_wp, -1.29995461121435E-01_wp, & + & 9.28979457969490E-02_wp, 8.53395943076514E-02_wp, -7.20467680720085E-03_wp, & + & 8.00569085802895E-02_wp, 1.12518921460423E-03_wp, -2.24936604198012E-02_wp, & + & -4.74827302104553E-02_wp, -1.23204005913030E-02_wp, 2.60524728274164E-02_wp, & + & -8.75229503253804E-03_wp, 3.45519482653731E-03_wp, 2.32672185743682E-02_wp, & + & 0.00000000000000E+00_wp, 9.99999999998060E-01_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 3.36928188670201E-04_wp, -9.41758669062715E-04_wp, -5.84225011720663E-04_wp, & + & 1.53854928347468E-05_wp, -1.07377169272165E-05_wp, 4.07737526840130E-04_wp, & + & -4.66396749143034E-05_wp, -6.57520964570179E-06_wp, -3.30286014739083E-04_wp, & + & 1.31040324396565E-04_wp, -2.04150976546664E-05_wp, -2.26089711420990E-04_wp, & + & -3.74675458323373E-04_wp, 2.52051845112027E-05_wp, 1.52095173725851E-05_wp, & + & -1.65836799186663E-05_wp, 1.63404821497647E-04_wp, 1.43467330644811E-04_wp, & + & 6.85934472373425E-02_wp, -1.19418786053541E-01_wp, 7.47962781286959E-02_wp, & + & -8.13110923174573E-02_wp, 8.00569085802895E-02_wp, 2.20043365124130E-02_wp, & + & -6.03429612836281E-02_wp, 1.49825391521149E-02_wp, -3.15334189104662E-02_wp, & + & -7.22571944109633E-03_wp, -1.58927481291258E-02_wp, 2.49038884936724E-02_wp, & + & 1.76031258469667E-02_wp, 1.69568159524313E-02_wp, 6.25995549018286E-03_wp, & + & 3.19286677421413E-02_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 9.99999999998060E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 1.89691378004237E-04_wp, -5.84225011720663E-04_wp, & + & -2.32983327085689E-04_wp, 8.66206935257109E-06_wp, -6.57520964570179E-06_wp, & + & 1.86202195665234E-04_wp, -8.81555136696621E-05_wp, -2.76074508981215E-06_wp, & + & -2.21688220693919E-04_wp, 2.23144270067549E-04_wp, -2.26089711420990E-04_wp, & + & -2.72645831427766E-04_wp, -6.38022547981310E-04_wp, 1.63404821497647E-04_wp, & + & 7.35308666900574E-05_wp, -1.02189065578875E-04_wp, 2.07503254464807E-04_wp, & + & 2.01611185625156E-04_wp, 7.46686270912962E-02_wp, -1.29995461121435E-01_wp, & + & -8.13110923174573E-02_wp, 6.09790994241015E-02_wp, 3.56083920092022E-02_wp, & + & 8.00569085802895E-02_wp, -4.90559450776115E-03_wp, 2.22727564867189E-02_wp, & + & -6.94186677160610E-02_wp, 1.99127981578240E-02_wp, -2.11545204817318E-02_wp, & + & -8.75229503253804E-03_wp, 1.77388758768520E-02_wp, -5.42556064348706E-03_wp, & + & 3.07262139246520E-02_wp, 2.38149248312371E-02_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 9.99999999998060E-01_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -4.99549878650671E-06_wp, & + & 1.53854928347468E-05_wp, 8.66206935257109E-06_wp, 9.57086406720181E-05_wp, & + & -6.33015324737798E-05_wp, -6.57520964570179E-06_wp, 6.91507707790898E-07_wp, & + & -3.56389145477078E-05_wp, 6.77924535368498E-06_wp, 3.69794278272637E-04_wp, & + & -3.74675458323373E-04_wp, -6.38022547981310E-04_wp, -9.44974883405076E-04_wp, & + & 2.45721973530458E-04_wp, 1.63404821497647E-04_wp, -4.67989527259473E-05_wp, & + & 4.18431888622898E-04_wp, 2.63356233815959E-04_wp, 5.39873838622696E-02_wp, & + & -4.72851062125489E-03_wp, -2.36191595818926E-02_wp, 2.28025303637907E-02_wp, & + & 3.58620481214061E-02_wp, 6.49720464580809E-02_wp, 9.89663399650732E-03_wp, & + & 2.86445384905872E-02_wp, -3.63460078236818E-02_wp, 5.81512727763616E-03_wp, & + & -2.63941704687171E-02_wp, -1.60649283629892E-02_wp, 1.34622945224013E-02_wp, & + & -9.29097453288089E-03_wp, 2.19190965349443E-02_wp, 2.22115769413314E-02_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 9.99999999830205E-01_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & -3.01084193947362E-06_wp, 1.07377169272165E-05_wp, 6.57520964570179E-06_wp, & + & 6.33015324737798E-05_wp, -3.73996719315490E-05_wp, -4.64599908927517E-06_wp, & + & 2.45641225072744E-07_wp, -2.26199417185387E-05_wp, 4.42393841717257E-06_wp, & + & 7.55446878381371E-05_wp, -2.52051845112026E-05_wp, -1.63404821497647E-04_wp, & + & -2.45721973530458E-04_wp, 2.47089644023801E-05_wp, 1.61116888311556E-05_wp, & + & -4.94256032779233E-06_wp, 1.09891385286233E-04_wp, 8.63251486754047E-05_wp, & + & 4.95948688317373E-02_wp, -4.34379010897964E-03_wp, 2.68161297325115E-02_wp, & + & -2.36191595818926E-02_wp, 6.49720464580809E-02_wp, 2.48213604227393E-02_wp, & + & -4.12640911091509E-02_wp, 2.13736344720395E-02_wp, -4.31605738168389E-03_wp, & + & -1.72393727662213E-02_wp, -2.11135912416699E-02_wp, 1.43945681826134E-02_wp, & + & 1.98904123574332E-02_wp, 1.37607056483274E-02_wp, 3.36169334446591E-03_wp, & + & 2.28581711018306E-02_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 9.99999999830205E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 1.14329075205538E-04_wp, -4.07737526840130E-04_wp, & + & -1.86202195665234E-04_wp, 6.57520964570179E-06_wp, -4.64599908927517E-06_wp, & + & 1.38897990982117E-04_wp, -4.86344418783074E-05_wp, -2.20750442352880E-06_wp, & + & -1.45294009909431E-04_wp, 4.55857897636091E-05_wp, -1.52095173725851E-05_wp, & + & -7.35308666900573E-05_wp, -1.63404821497647E-04_wp, 1.61116888311556E-05_wp, & + & 7.73094926501920E-06_wp, -1.90066643814781E-05_wp, 5.65625287713878E-05_wp, & + & 6.13425902955612E-05_wp, -1.55903398924374E-02_wp, -1.71048248105265E-02_wp, & + & 4.18598977604196E-02_wp, -1.16465091900958E-02_wp, 9.89663399650731E-03_wp, & + & -4.12640911091508E-02_wp, -2.76120606165884E-02_wp, -2.80963191173944E-02_wp, & + & -3.89816083520695E-03_wp, -2.14384122602977E-03_wp, 1.60699196580794E-02_wp, & + & 2.29720108902036E-02_wp, -9.39476671196776E-03_wp, 1.56414192434809E-02_wp, & + & -6.32974114816765E-03_wp, 9.47310434010206E-03_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 9.99999999830206E-01_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -2.14716191083883E-05_wp, & + & 4.66396749143034E-05_wp, 8.81555136696621E-05_wp, -6.91507707790898E-07_wp, & + & 2.45641225072744E-07_wp, -4.86344418783074E-05_wp, -2.10150359335817E-05_wp, & + & 7.21083315540951E-07_wp, 8.28198172373845E-06_wp, -2.44516968961120E-05_wp, & + & 1.65836799186663E-05_wp, 1.02189065578875E-04_wp, 4.67989527259473E-05_wp, & + & -4.94256032779232E-06_wp, -1.90066643814781E-05_wp, -2.64669742429983E-05_wp, & + & -5.36365868268805E-05_wp, -6.09820101131120E-06_wp, 3.37686648082453E-02_wp, & + & -2.36191595818926E-02_wp, 1.82588424513004E-02_wp, 1.42627952967512E-02_wp, & + & 2.86445384905872E-02_wp, 2.13736344720395E-02_wp, -2.80963191173944E-02_wp, & + & 7.98374374734485E-03_wp, -4.25294966518297E-02_wp, 1.29355636537831E-02_wp, & + & -1.07444245139649E-02_wp, 1.37607056483274E-02_wp, 1.35431887132267E-02_wp, & + & 3.55422714503404E-03_wp, 1.15088725091117E-02_wp, 2.11477642204028E-02_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 9.99999999830205E-01_wp, 0.00000000000000E+00_wp, & + & -1.69511123039559E-06_wp, 6.57520964570179E-06_wp, 2.76074508981216E-06_wp, & + & 3.56389145477078E-05_wp, -2.26199417185387E-05_wp, -2.20750442352880E-06_wp, & + & 7.21083315540952E-07_wp, -9.95740806845498E-06_wp, 2.82716000311223E-06_wp, & + & 1.28642570924251E-04_wp, -1.63404821497647E-04_wp, -2.07503254464807E-04_wp, & + & -4.18431888622897E-04_wp, 1.09891385286233E-04_wp, 5.65625287713878E-05_wp, & + & -5.36365868268805E-05_wp, 1.47306249222992E-04_wp, 1.20892448538428E-04_wp, & + & -2.12649579080578E-02_wp, -3.36400249951174E-02_wp, 9.30329270286542E-03_wp, & + & 4.31596987206192E-02_wp, -3.63460078236819E-02_wp, -4.31605738168392E-03_wp, & + & -3.89816083520695E-03_wp, -4.25294966518297E-02_wp, -4.20968008654698E-02_wp, & + & 2.79559437246025E-02_wp, 2.19190965349444E-02_wp, 4.08008511942590E-03_wp, & + & -5.30263009400631E-03_wp, 6.96070362833566E-03_wp, 2.06202786830572E-02_wp, & + & -1.90384369106144E-03_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 9.99999999830206E-01_wp, -1.01512838117467E-04_wp, 3.30286014739083E-04_wp, & + & 2.21688220693919E-04_wp, -6.77924535368497E-06_wp, 4.42393841717257E-06_wp, & + & -1.45294009909431E-04_wp, 8.28198172373844E-06_wp, 2.82716000311223E-06_wp, & + & 1.11625581646469E-04_wp, 9.32081069771156E-05_wp, -1.43467330644811E-04_wp, & + & -2.01611185625156E-04_wp, -2.63356233815959E-04_wp, 8.63251486754046E-05_wp, & + & 6.13425902955612E-05_wp, -6.09820101131119E-06_wp, 1.20892448538428E-04_wp, & + & 6.12520710210726E-05_wp, 8.67139986554086E-02_wp, 3.52869972519298E-01_wp, & + & 1.77431941562336E-01_wp, -2.41645444821936E-01_wp, -8.86514552275003E-02_wp, & + & 6.50937154430233E-02_wp, -3.59986382289629E-02_wp, -4.45761925024143E-02_wp, & + & -3.43736973355472E-02_wp, 7.40406770098628E-03_wp, -3.06985789568106E-02_wp, & + & -6.45075714555441E-03_wp, -2.25774856886379E-02_wp, 4.41748009542107E-03_wp, & + & -1.19030608012565E-02_wp, 3.15424946469630E-02_wp, 9.52137814488968E-05_wp, & + & 3.36928188670201E-04_wp, 1.89691378004237E-04_wp, -4.99549878650670E-06_wp, & + & -3.01084193947362E-06_wp, 1.14329075205538E-04_wp, -2.14716191083883E-05_wp, & + & -1.69511123039559E-06_wp, -1.01512838117467E-04_wp, 9.99999999869332E-01_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 8.24984479851205E-05_wp, & + & 1.96296194806693E-04_wp, 5.54539527348801E-07_wp, -2.76572801639242E-04_wp, & + & -1.09131970490034E-04_wp, 2.18813964986787E-07_wp, -6.67465544040966E-05_wp, & + & -3.08299360534131E-07_wp, 3.81531587038920E-05_wp, -1.13584328085048E-01_wp, & + & -5.63511977455039E-02_wp, -1.03417073813248E-01_wp, 1.40844227841612E-01_wp, & + & 1.07106300572798E-01_wp, -7.86444738413934E-02_wp, 2.75278884074025E-02_wp, & + & 7.22242203094389E-02_wp, 2.34893769725024E-03_wp, -2.55601123198589E-02_wp, & + & 4.54124683874554E-02_wp, -1.77211746261233E-03_wp, 2.85240889524626E-02_wp, & + & -5.59343295542886E-04_wp, 4.39408073360095E-03_wp, -2.93108178909011E-02_wp, & + & -3.36928188670201E-04_wp, -9.41758669062715E-04_wp, -5.84225011720663E-04_wp, & + & 1.53854928347468E-05_wp, 1.07377169272165E-05_wp, -4.07737526840130E-04_wp, & + & 4.66396749143034E-05_wp, 6.57520964570179E-06_wp, 3.30286014739083E-04_wp, & + & 0.00000000000000E+00_wp, 9.99999999998060E-01_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & -1.96296194806693E-04_wp, -3.22041577165287E-04_wp, -1.14683436360897E-06_wp, & + & 5.71975805721029E-04_wp, 2.33926970269965E-04_wp, -4.69032930059591E-07_wp, & + & 1.53453012266193E-04_wp, 8.06130068702386E-07_wp, -1.36261835578487E-04_wp, & + & -5.71130711953149E-02_wp, -1.03417073813248E-01_wp, 9.73200705922398E-02_wp, & + & 7.08200378325435E-02_wp, 7.22242203094389E-02_wp, 3.13009539865045E-04_wp, & + & 6.03006889788791E-02_wp, -2.14349010640352E-04_wp, 2.80042045879740E-02_wp, & + & -7.00152224711211E-03_wp, 4.52717213649874E-03_wp, 2.88573809092836E-02_wp, & + & 8.00111168452365E-03_wp, -1.97615416138547E-02_wp, 1.75536480937154E-03_wp, & + & -2.98275876071079E-02_wp, -1.89691378004237E-04_wp, -5.84225011720663E-04_wp, & + & -2.32983327085689E-04_wp, 8.66206935257109E-06_wp, 6.57520964570179E-06_wp, & + & -1.86202195665234E-04_wp, 8.81555136696621E-05_wp, 2.76074508981215E-06_wp, & + & 2.21688220693919E-04_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 9.99999999998060E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, -5.54539527348801E-07_wp, -1.14683436360897E-06_wp, & + & 8.39122168161397E-05_wp, 1.61583974295499E-06_wp, 8.06130068702386E-07_wp, & + & 3.64987134453440E-05_wp, 6.12105527417005E-07_wp, -5.14250999299680E-05_wp, & + & -2.81827665248565E-07_wp, 7.77825760830674E-02_wp, 1.40844227841612E-01_wp, & + & 7.08200378325435E-02_wp, 5.28706271385305E-02_wp, -4.50177541095921E-02_wp, & + & 7.22242203094389E-02_wp, -1.88511048183665E-02_wp, -2.26360646654454E-02_wp, & + & -7.46695782592206E-02_wp, -2.04737585704892E-02_wp, -2.15442376617703E-02_wp, & + & -5.59343295542893E-04_wp, -1.95333031990455E-02_wp, -2.20587677537982E-03_wp, & + & -2.76499015081222E-02_wp, 2.89865919149946E-02_wp, 4.99549878650671E-06_wp, & + & 1.53854928347468E-05_wp, 8.66206935257109E-06_wp, 9.57086406720181E-05_wp, & + & 6.33015324737798E-05_wp, 6.57520964570179E-06_wp, -6.91507707790898E-07_wp, & + & 3.56389145477078E-05_wp, -6.77924535368498E-06_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 9.99999999998060E-01_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 2.76572801639242E-04_wp, & + & 5.71975805721029E-04_wp, 1.61583974295499E-06_wp, -7.21973578621338E-04_wp, & + & -3.65551535952679E-04_wp, 8.06130068702386E-07_wp, -2.16208620672635E-04_wp, & + & -1.03268826055672E-06_wp, 8.91322458394565E-05_wp, -5.83831463741125E-02_wp, & + & -8.05377110703100E-03_wp, -2.13786714107248E-02_wp, -2.12103821177911E-02_wp, & + & 4.63175554736653E-02_wp, -6.21718876923976E-02_wp, 4.41008058157470E-03_wp, & + & 2.92431802609242E-02_wp, 4.19093396272880E-02_wp, 5.71402985740159E-03_wp, & + & 2.77251308119991E-02_wp, -6.89049708634549E-03_wp, 1.78063068515174E-02_wp, & + & 4.95776309493032E-03_wp, 2.10798636529093E-02_wp, -2.83688082507035E-02_wp, & + & -3.01084193947362E-06_wp, -1.07377169272165E-05_wp, -6.57520964570179E-06_wp, & + & -6.33015324737798E-05_wp, -3.73996719315490E-05_wp, -4.64599908927517E-06_wp, & + & 2.45641225072744E-07_wp, -2.26199417185387E-05_wp, 4.42393841717257E-06_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 9.99999999830205E-01_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & -1.09131970490034E-04_wp, -2.33926970269965E-04_wp, -8.06130068702387E-07_wp, & + & 3.65551535952679E-04_wp, 1.55708719431824E-04_wp, -3.37779234265429E-07_wp, & + & 9.68084081921723E-05_wp, 5.17901618054598E-07_wp, -6.93663114292701E-05_wp, & + & 4.28687369766487E-02_wp, 5.91360720857849E-03_wp, -3.46284778301005E-02_wp, & + & -2.13786714107248E-02_wp, -6.21718876923976E-02_wp, 7.29603146759238E-03_wp, & + & -4.67218548895194E-02_wp, -5.71517669530143E-03_wp, -5.66727024069538E-03_wp, & + & 1.64261267820631E-02_wp, -9.78968090562189E-03_wp, -2.15630999197224E-02_wp, & + & -1.19714716143595E-02_wp, 1.93252201033651E-02_wp, -2.01631062617651E-03_wp, & + & 2.34835834975460E-02_wp, 1.14329075205538E-04_wp, 4.07737526840130E-04_wp, & + & 1.86202195665234E-04_wp, -6.57520964570179E-06_wp, -4.64599908927517E-06_wp, & + & 1.38897990982117E-04_wp, -4.86344418783074E-05_wp, -2.20750442352880E-06_wp, & + & -1.45294009909431E-04_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 9.99999999830205E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 2.18813964986787E-07_wp, 4.69032930059591E-07_wp, & + & -3.64987134453440E-05_wp, -8.06130068702386E-07_wp, -3.37779234265429E-07_wp, & + & -1.27556892913121E-05_wp, -2.67921067336703E-07_wp, 2.12542538776661E-05_wp, & + & 1.81700110721510E-07_wp, -2.37076059225061E-02_wp, 1.17908981123966E-02_wp, & + & -3.79011924083843E-02_wp, -8.07440995582129E-03_wp, 4.41008058157471E-03_wp, & + & -4.67218548895194E-02_wp, -1.18825152389580E-02_wp, 3.19951378324389E-02_wp, & + & 1.70996375352672E-03_wp, 6.55758393614615E-04_wp, 2.20763678154631E-02_wp, & + & -1.47401248948007E-02_wp, 1.69654313272323E-02_wp, 1.00940411888978E-02_wp, & + & 8.55988639565554E-03_wp, 2.79363404761070E-03_wp, -2.14716191083883E-05_wp, & + & -4.66396749143034E-05_wp, -8.81555136696621E-05_wp, 6.91507707790898E-07_wp, & + & 2.45641225072744E-07_wp, -4.86344418783074E-05_wp, -2.10150359335817E-05_wp, & + & 7.21083315540951E-07_wp, 8.28198172373845E-06_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 9.99999999830206E-01_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -6.67465544040966E-05_wp, & + & -1.53453012266193E-04_wp, -6.12105527417006E-07_wp, 2.16208620672635E-04_wp, & + & 9.68084081921723E-05_wp, -2.67921067336703E-07_wp, 6.15385941191151E-05_wp, & + & 3.77489132096825E-07_wp, -3.38447711064139E-05_wp, -2.93565217287235E-02_wp, & + & -2.13786714107248E-02_wp, 2.37135902185714E-02_wp, -1.06651162567620E-02_wp, & + & 2.92431802609242E-02_wp, -5.71517669530143E-03_wp, 3.19951378324389E-02_wp, & + & 2.86402855372428E-03_wp, 3.82652025183376E-02_wp, 1.09396897005001E-02_wp, & + & 5.41731475723262E-03_wp, 1.93252201033651E-02_wp, 8.19806673481372E-03_wp, & + & -6.57678604430529E-03_wp, 4.69913239680737E-03_wp, -2.12898936281053E-02_wp, & + & -1.69511123039559E-06_wp, -6.57520964570179E-06_wp, -2.76074508981216E-06_wp, & + & -3.56389145477078E-05_wp, -2.26199417185387E-05_wp, -2.20750442352880E-06_wp, & + & 7.21083315540952E-07_wp, -9.95740806845498E-06_wp, 2.82716000311223E-06_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 9.99999999830205E-01_wp, 0.00000000000000E+00_wp, & + & -3.08299360534131E-07_wp, -8.06130068702386E-07_wp, 5.14250999299680E-05_wp, & + & 1.03268826055672E-06_wp, 5.17901618054598E-07_wp, 2.12542538776661E-05_wp, & + & 3.77489132096825E-07_wp, -2.76169058108372E-05_wp, -1.35914068297143E-07_wp, & + & -2.26374693772444E-02_wp, 3.38405303098482E-02_wp, -8.28936173267023E-03_wp, & + & 4.57526496102248E-02_wp, 4.19093396272880E-02_wp, -5.66727024069539E-03_wp, & + & 1.70996375352672E-03_wp, 3.82652025183376E-02_wp, -4.55187727956170E-02_wp, & + & -3.25759068310625E-02_wp, 2.10798636529092E-02_wp, -3.00247894938940E-03_wp, & + & 6.90421382037361E-03_wp, 1.43932135734599E-03_wp, -1.84673717546551E-02_wp, & + & -2.83300770467367E-03_wp, -1.01512838117467E-04_wp, -3.30286014739083E-04_wp, & + & -2.21688220693919E-04_wp, 6.77924535368497E-06_wp, 4.42393841717257E-06_wp, & + & -1.45294009909431E-04_wp, 8.28198172373844E-06_wp, 2.82716000311223E-06_wp, & + & 1.11625581646469E-04_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 9.99999999830206E-01_wp, 3.81531587038920E-05_wp, 1.36261835578487E-04_wp, & + & 2.81827665248565E-07_wp, -8.91322458394565E-05_wp, -6.93663114292701E-05_wp, & + & 1.81700110721510E-07_wp, -3.38447711064139E-05_wp, -1.35914068297143E-07_wp, & + & -1.84534116858889E-05_wp, 8.73543363380361E-02_wp, -1.11927689146485E-01_wp, & + & 1.76687050868385E-01_wp, 4.14057132845683E-01_wp, -4.83242438420612E-02_wp, & + & -2.06209903237694E-02_wp, -3.65827353559851E-02_wp, 7.62837881761689E-02_wp, & + & 8.28521011474394E-02_wp, -2.32970808181820E-02_wp, -1.66394753076522E-02_wp, & + & 2.12528120885591E-03_wp, -2.26881057605045E-02_wp, -7.86211035482033E-03_wp, & + & 2.85284441435993E-02_wp, 2.29901709038050E-02_wp, 1.12758480338272E-04_wp, & + & 1.31040324396565E-04_wp, 2.23144270067549E-04_wp, 3.69794278272637E-04_wp, & + & 7.55446878381371E-05_wp, 4.55857897636091E-05_wp, -2.44516968961120E-05_wp, & + & 1.28642570924251E-04_wp, 9.32081069771156E-05_wp, 8.24984479851205E-05_wp, & + & -1.96296194806693E-04_wp, -5.54539527348801E-07_wp, 2.76572801639242E-04_wp, & + & -1.09131970490034E-04_wp, 2.18813964986787E-07_wp, -6.67465544040966E-05_wp, & + & -3.08299360534131E-07_wp, 3.81531587038920E-05_wp, 9.99999999869332E-01_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 3.61731541134506E-02_wp, & + & 1.29184921393787E-01_wp, 3.25455034102347E-02_wp, 7.62687348214290E-02_wp, & + & 3.82018892333236E-02_wp, 1.63015647136606E-02_wp, -8.92221837554666E-03_wp, & + & 3.90978820690418E-02_wp, 5.94862619285365E-02_wp, 1.42279516174685E-02_wp, & + & 1.12164550839581E-02_wp, -2.57616878551625E-03_wp, -9.07844125129397E-03_wp, & + & -4.47883417102248E-04_wp, 2.26838862024821E-02_wp, 3.00639987805416E-02_wp, & + & -1.31040324396565E-04_wp, -2.04150976546664E-05_wp, -2.26089711420990E-04_wp, & + & -3.74675458323373E-04_wp, -2.52051845112027E-05_wp, -1.52095173725851E-05_wp, & + & 1.65836799186663E-05_wp, -1.63404821497647E-04_wp, -1.43467330644811E-04_wp, & + & 1.96296194806693E-04_wp, -3.22041577165287E-04_wp, -1.14683436360897E-06_wp, & + & 5.71975805721029E-04_wp, -2.33926970269965E-04_wp, 4.69032930059591E-07_wp, & + & -1.53453012266193E-04_wp, -8.06130068702386E-07_wp, 1.36261835578487E-04_wp, & + & 0.00000000000000E+00_wp, 9.99999999998060E-01_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & -5.71022949696438E-02_wp, 3.25455034102347E-02_wp, 9.84260921377083E-02_wp, & + & -1.20396462500221E-01_wp, 3.90978820690418E-02_wp, -3.38005258954589E-04_wp, & + & 6.06254946164389E-02_wp, 1.25039201181343E-03_wp, -6.70334685509428E-02_wp, & + & 2.18832031916388E-02_wp, 2.25211882161450E-03_wp, -9.21701378652493E-03_wp, & + & 7.72420256658115E-03_wp, 3.40967488112168E-02_wp, -3.86126634519724E-03_wp, & + & -2.15949193473986E-02_wp, -2.23144270067549E-04_wp, -2.26089711420990E-04_wp, & + & -2.72645831427766E-04_wp, -6.38022547981310E-04_wp, -1.63404821497647E-04_wp, & + & -7.35308666900574E-05_wp, 1.02189065578875E-04_wp, -2.07503254464807E-04_wp, & + & -2.01611185625156E-04_wp, 5.54539527348801E-07_wp, -1.14683436360897E-06_wp, & + & 8.39122168161397E-05_wp, 1.61583974295499E-06_wp, -8.06130068702386E-07_wp, & + & -3.64987134453440E-05_wp, -6.12105527417005E-07_wp, 5.14250999299680E-05_wp, & + & 2.81827665248565E-07_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 9.99999999998060E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, -1.33816329028274E-01_wp, 7.62687348214290E-02_wp, & + & -1.20396462500221E-01_wp, -1.32341154522262E-01_wp, 7.46019922122534E-02_wp, & + & 3.90978820690418E-02_wp, 3.30062041606792E-02_wp, -1.17765372388225E-01_wp, & + & -9.41199197927978E-02_wp, 3.48981234262437E-02_wp, 3.09187955546773E-02_wp, & + & -4.47883417102249E-04_wp, 3.35841236773789E-02_wp, -1.04037311751581E-03_wp, & + & -4.16800783537248E-02_wp, -2.25160768370592E-02_wp, -3.69794278272637E-04_wp, & + & -3.74675458323373E-04_wp, -6.38022547981310E-04_wp, -9.44974883405076E-04_wp, & + & -2.45721973530458E-04_wp, -1.63404821497647E-04_wp, 4.67989527259473E-05_wp, & + & -4.18431888622898E-04_wp, -2.63356233815959E-04_wp, -2.76572801639242E-04_wp, & + & 5.71975805721029E-04_wp, 1.61583974295499E-06_wp, -7.21973578621338E-04_wp, & + & 3.65551535952679E-04_wp, -8.06130068702386E-07_wp, 2.16208620672635E-04_wp, & + & 1.03268826055672E-06_wp, -8.91322458394565E-05_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 9.99999999998060E-01_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, -3.17825201816373E-02_wp, & + & -5.17690901910778E-02_wp, -1.14661853993300E-02_wp, -1.09127406617264E-02_wp, & + & -3.05116894672468E-02_wp, -1.58559058503109E-02_wp, 2.58807011549745E-03_wp, & + & -4.23724796435138E-02_wp, -5.46710758908302E-02_wp, -1.02121852619804E-02_wp, & + & -1.08132873910535E-02_wp, 1.72123004852782E-03_wp, 9.71809772688051E-03_wp, & + & -4.15510671194854E-03_wp, -2.73626654703935E-02_wp, -3.08515669011558E-02_wp, & + & 7.55446878381371E-05_wp, 2.52051845112026E-05_wp, 1.63404821497647E-04_wp, & + & 2.45721973530458E-04_wp, 2.47089644023801E-05_wp, 1.61116888311556E-05_wp, & + & -4.94256032779233E-06_wp, 1.09891385286233E-04_wp, 8.63251486754047E-05_wp, & + & -1.09131970490034E-04_wp, 2.33926970269965E-04_wp, 8.06130068702387E-07_wp, & + & -3.65551535952679E-04_wp, 1.55708719431824E-04_wp, -3.37779234265429E-07_wp, & + & 9.68084081921723E-05_wp, 5.17901618054598E-07_wp, -6.93663114292701E-05_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 9.99999999830205E-01_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & -1.35622823871297E-02_wp, -2.20909800759548E-02_wp, 1.10648156497081E-02_wp, & + & -1.14661853993300E-02_wp, -1.58559058503109E-02_wp, -1.20233934496220E-04_wp, & + & 1.48991414842628E-02_wp, -2.81564588294364E-03_wp, -3.12937259411051E-02_wp, & + & -6.78822012440303E-03_wp, -8.10584518942798E-04_wp, 3.87219849948905E-03_wp, & + & 3.71972593593363E-03_wp, 1.05925682350414E-02_wp, -3.96213612481712E-03_wp, & + & -1.89302474912948E-02_wp, 4.55857897636091E-05_wp, 1.52095173725851E-05_wp, & + & 7.35308666900573E-05_wp, 1.63404821497647E-04_wp, 1.61116888311556E-05_wp, & + & 7.73094926501920E-06_wp, -1.90066643814781E-05_wp, 5.65625287713878E-05_wp, & + & 6.13425902955612E-05_wp, 2.18813964986787E-07_wp, -4.69032930059591E-07_wp, & + & 3.64987134453440E-05_wp, 8.06130068702386E-07_wp, -3.37779234265429E-07_wp, & + & -1.27556892913121E-05_wp, -2.67921067336703E-07_wp, 2.12542538776661E-05_wp, & + & 1.81700110721510E-07_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 9.99999999830205E-01_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, -2.40602114448212E-02_wp, -3.71443619535532E-03_wp, & + & -3.77677054156251E-02_wp, 1.37409144503486E-02_wp, 2.58807011549745E-03_wp, & + & 1.48991414842628E-02_wp, -1.14945896141096E-02_wp, -5.51167977457504E-02_wp, & + & -4.43725612524170E-03_wp, -1.93575430061701E-03_wp, 1.20817835115180E-02_wp, & + & 4.60884129645277E-03_wp, 1.72717431621451E-02_wp, -1.70496114723901E-02_wp, & + & -2.07142641033214E-02_wp, 1.91025315773589E-03_wp, -2.44516968961120E-05_wp, & + & -1.65836799186663E-05_wp, -1.02189065578875E-04_wp, -4.67989527259473E-05_wp, & + & -4.94256032779232E-06_wp, -1.90066643814781E-05_wp, -2.64669742429983E-05_wp, & + & -5.36365868268805E-05_wp, -6.09820101131120E-06_wp, -6.67465544040966E-05_wp, & + & 1.53453012266193E-04_wp, 6.12105527417006E-07_wp, -2.16208620672635E-04_wp, & + & 9.68084081921723E-05_wp, -2.67921067336703E-07_wp, 6.15385941191151E-05_wp, & + & 3.77489132096825E-07_wp, -3.38447711064139E-05_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 9.99999999830206E-01_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 5.01713186690479E-02_wp, & + & -1.14661853993300E-02_wp, -4.09323723050174E-02_wp, 1.72266574885550E-02_wp, & + & -4.23724796435138E-02_wp, -2.81564588294364E-03_wp, -5.51167977457504E-02_wp, & + & 9.53463736577521E-03_wp, 5.68398395712986E-02_wp, -2.57527981119962E-02_wp, & + & -6.24737443153230E-03_wp, 1.05925682350414E-02_wp, -1.37604829309815E-02_wp, & + & -3.24497991168268E-02_wp, 9.26442849949040E-03_wp, 1.84855092937346E-02_wp, & + & 1.28642570924251E-04_wp, 1.63404821497647E-04_wp, 2.07503254464807E-04_wp, & + & 4.18431888622897E-04_wp, 1.09891385286233E-04_wp, 5.65625287713878E-05_wp, & + & -5.36365868268805E-05_wp, 1.47306249222992E-04_wp, 1.20892448538428E-04_wp, & + & -3.08299360534131E-07_wp, 8.06130068702386E-07_wp, -5.14250999299680E-05_wp, & + & -1.03268826055672E-06_wp, 5.17901618054598E-07_wp, 2.12542538776661E-05_wp, & + & 3.77489132096825E-07_wp, -2.76169058108372E-05_wp, -1.35914068297143E-07_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 9.99999999830205E-01_wp, 0.00000000000000E+00_wp, & + & 5.44912525773983E-02_wp, -2.84111485232627E-02_wp, 1.96588187822549E-02_wp, & + & -1.29632440844007E-02_wp, -5.46710758908302E-02_wp, -3.12937259411051E-02_wp, & + & -4.43725612524171E-03_wp, 5.68398395712986E-02_wp, 3.13346757662612E-02_wp, & + & -2.95098567978740E-02_wp, -2.73626654703935E-02_wp, -1.67051092576148E-03_wp, & + & -1.66617157727234E-02_wp, 7.47010245689617E-03_wp, 2.01405830947493E-02_wp, & + & 5.24876072680661E-03_wp, 9.32081069771156E-05_wp, 1.43467330644811E-04_wp, & + & 2.01611185625156E-04_wp, 2.63356233815959E-04_wp, 8.63251486754046E-05_wp, & + & 6.13425902955612E-05_wp, -6.09820101131119E-06_wp, 1.20892448538428E-04_wp, & + & 6.12520710210726E-05_wp, 3.81531587038920E-05_wp, -1.36261835578487E-04_wp, & + & -2.81827665248565E-07_wp, 8.91322458394565E-05_wp, -6.93663114292701E-05_wp, & + & 1.81700110721510E-07_wp, -3.38447711064139E-05_wp, -1.35914068297143E-07_wp, & + & -1.84534116858889E-05_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, 0.00000000000000E+00_wp, & + & 9.99999999830206E-01_wp],& + & shape(overlap)) + + type(structure_type) :: mol + + call get_structure(mol, "f-block", "CeCl3") + call test_overlap_diat_mol(error, mol, overlap) + +end subroutine test_overlap_diat_cecl3 subroutine test_overlap_grad_ss(error) @@ -751,8 +1509,9 @@ subroutine test_overlap_grad_ss(error) call slater_to_gauss(ng, 2, 0, 1.0_wp, cgtoi, .true., stat) call slater_to_gauss(ng, 1, 0, 1.0_wp, cgtoj, .true., stat) + ! Randomly oriented vector of length 0.5 call random_number(vec) - vec = vec - 0.5_wp + vec = (vec - 0.5_wp)*(sum(vec**2))*0.5_wp r2 = sum(vec**2) call overlap_grad_cgto(cgtoi, cgtoj, r2, vec, 100.0_wp, overlap, doverlapj) @@ -802,8 +1561,9 @@ subroutine test_overlap_grad_pp(error) call slater_to_gauss(ng, 3, 1, 1.0_wp, cgtoi, .true., stat) call slater_to_gauss(ng, 2, 1, 1.0_wp, cgtoj, .true., stat) + ! Randomly oriented vector of length 0.5 call random_number(vec) - vec = vec - 0.5_wp + vec = (vec - 0.5_wp)*(sum(vec**2))*0.5_wp r2 = sum(vec**2) call overlap_grad_cgto(cgtoi, cgtoj, r2, vec, 100.0_wp, overlap, doverlapj) @@ -861,8 +1621,9 @@ subroutine test_overlap_grad_dd(error) call slater_to_gauss(ng, 4, 2, 1.0_wp, cgtoi, .true., stat) call slater_to_gauss(ng, 3, 2, 1.0_wp, cgtoj, .true., stat) + ! Randomly oriented vector of length 0.5 call random_number(vec) - vec = vec - 0.5_wp + vec = (vec - 0.5_wp)*(sum(vec**2))*0.5_wp r2 = sum(vec**2) call overlap_grad_cgto(cgtoi, cgtoj, r2, vec, 100.0_wp, overlap, doverlapj) @@ -905,155 +1666,422 @@ subroutine test_overlap_grad_dd(error) end subroutine test_overlap_grad_dd -subroutine test_overlap_diat_grad_ss(error) +subroutine test_overlap_grad_ff(error) !> Error handling type(error_type), allocatable, intent(out) :: error integer, parameter :: ng = 6 - integer :: stat, i + integer :: stat, i, j, k type(cgto_type) :: cgtoi, cgtoj - real(wp) :: vec(3), r2, vec_diat_trafo(3) - real(wp) :: overlap(1, 1), doverlapi(3, 1, 1), doverlapj(3, 1, 1), sr(1, 1), sl(1, 1) - real(wp) :: overlap_scaled(1, 1), doverlapi_scaled(3, 1, 1), doverlapj_scaled(3, 1, 1), sr_scaled(1, 1), sl_scaled(1, 1) + real(wp) :: vec(3), r2 + real(wp) :: overlap(7, 7), doverlapi(3, 7, 7), doverlapj(3, 7, 7), sl(7, 7), sr(7, 7) real(wp), parameter :: step = 1.0e-6_wp - real(wp) :: ksig, kpi, kdel - call slater_to_gauss(ng, 2, 0, 1.0_wp, cgtoi, .true., stat) - call slater_to_gauss(ng, 1, 0, 1.0_wp, cgtoj, .true., stat) + call slater_to_gauss(ng, 5, 3, 1.0_wp, cgtoi, .true., stat) + call slater_to_gauss(ng, 4, 3, 1.0_wp, cgtoj, .true., stat) + ! Randomly oriented vector of length 0.5 call random_number(vec) - vec = vec - 0.5_wp + vec = (vec - 0.5_wp)*(sum(vec**2))*0.5_wp r2 = sum(vec**2) - call relvec(vec, sqrt(r2), vec_diat_trafo) - - ksig = 0.5_wp - kpi = 0.5_wp - kdel = 0.5_wp - - call overlap_grad_cgto_diat_scal(cgtoi, cgtoj, r2, vec, 100.0_wp, & - & vec_diat_trafo, ksig, kpi, kdel, overlap, doverlapj, overlap_scaled, doverlapj_scaled) + call overlap_grad_cgto(cgtoi, cgtoj, r2, vec, 100.0_wp, overlap, doverlapj) vec(:) = -vec - call overlap_grad_cgto_diat_scal(cgtoj, cgtoi, r2, vec, 100.0_wp, & - & vec_diat_trafo, ksig, kpi, kdel, overlap, doverlapi, overlap_scaled, doverlapi_scaled) + call overlap_grad_cgto(cgtoj, cgtoi, r2, vec, 100.0_wp, overlap, doverlapi) - do i = 1, 3 - call check(error, doverlapi(i, 1, 1), -doverlapj(i, 1, 1), thr=thr) - if (allocated(error)) exit - call check(error, doverlapi_scaled(i, 1, 1), -doverlapj_scaled(i, 1, 1), thr=thr) - if (allocated(error)) exit - end do + lp: do i = 1, 3 + do j = 1, 7 + do k = 1, 7 + call check(error, doverlapi(i, j, k), -doverlapj(i, k, j), thr=thr) + if (allocated(error)) exit lp + end do + end do + end do lp if (allocated(error)) return do i = 1, 3 vec(i) = vec(i) + step r2 = sum(vec**2) - call overlap_cgto_diat_scal(cgtoj, cgtoi, r2, vec,& - & 100.0_wp, vec_diat_trafo, ksig, kpi, kdel, sr, sr_scaled) - + call overlap_cgto(cgtoj, cgtoi, r2, vec, 100.0_wp, sr) vec(i) = vec(i) - 2*step r2 = sum(vec**2) - call overlap_cgto_diat_scal(cgtoj, cgtoi, r2, vec,& - & 100.0_wp, vec_diat_trafo, ksig, kpi, kdel, sl, sl_scaled) - + call overlap_cgto(cgtoj, cgtoi, r2, vec, 100.0_wp, sl) vec(i) = vec(i) + step doverlapj(i, :, :) = 0.5_wp * (sr - sl) / step - doverlapj_scaled(i, :, :) = 0.5_wp * (sr_scaled - sl_scaled) / step end do - do i = 1, 3 - call check(error, doverlapi(i, 1, 1), doverlapj(i, 1, 1), thr=thr) - if (allocated(error)) exit - call check(error, doverlapi_scaled(i, 1, 1), doverlapj_scaled(i, 1, 1), thr=thr) - if (allocated(error)) exit - end do + num: do i = 1, 3 + do j = 1, 7 + do k = 1, 7 + call check(error, doverlapi(i, j, k), doverlapj(i, j, k), thr=thr) + if (allocated(error)) exit num + end do + end do + end do num if (allocated(error)) return -end subroutine test_overlap_diat_grad_ss - - -subroutine test_overlap_diat_grad_pp(error) +end subroutine test_overlap_grad_ff +subroutine test_overlap_diat_grad_gen(vec, ksig, kpi, kdel, cgtoi, cgtoj, error) + !> Vector between the two centers + real(wp), intent(inout) :: vec(3) + !> Scaling factors for the diatomic frame overlap + real(wp), intent(in) :: ksig, kpi, kdel + !> CGTOs for the tested diatomic frame overlap calculation + type(cgto_type), intent(in) :: cgtoi, cgtoj !> Error handling type(error_type), allocatable, intent(out) :: error - integer, parameter :: ng = 6 integer :: stat, i, j, k - type(cgto_type) :: cgtoi, cgtoj - real(wp) :: vec(3), r2, vec_diat_trafo(3) - real(wp) :: overlap(3, 3), doverlapi(3, 3, 3), doverlapj(3, 3, 3), sr(3, 3), sl(3, 3) - real(wp) :: overlap_scaled(3, 3), doverlapi_scaled(3, 3, 3), doverlapj_scaled(3, 3, 3), sr_scaled(3, 3), sl_scaled(3, 3) - real(wp), parameter :: step = 1.0e-6_wp - real(wp) :: ksig, kpi, kdel - - call slater_to_gauss(ng, 3, 1, 1.0_wp, cgtoi, .true., stat) - call slater_to_gauss(ng, 2, 1, 1.0_wp, cgtoj, .true., stat) - - call random_number(vec) - vec = vec - 0.5_wp - r2 = sum(vec**2) + real(wp) :: r2 + real(wp) :: overlap(msao(cgtoi%ang), msao(cgtoj%ang)), overlap_diat(msao(cgtoi%ang), msao(cgtoj%ang)), & + & sl(msao(cgtoj%ang), msao(cgtoi%ang)), sr(msao(cgtoj%ang), msao(cgtoi%ang)), & + & sl_diat(msao(cgtoj%ang), msao(cgtoi%ang)), sr_diat(msao(cgtoj%ang), msao(cgtoi%ang)) - call relvec(vec, sqrt(r2), vec_diat_trafo) + real(wp) :: doverlapi(3, msao(cgtoi%ang), msao(cgtoj%ang)), doverlapi_diat(3, msao(cgtoi%ang), msao(cgtoj%ang)), & + & doverlapj(3, msao(cgtoj%ang), msao(cgtoi%ang)), doverlapj_diat(3, msao(cgtoj%ang), msao(cgtoi%ang)), & + & doverlaptmp(3, msao(cgtoj%ang), msao(cgtoi%ang)), doverlaptmp_diat(3, msao(cgtoj%ang), msao(cgtoi%ang)) - ksig = 0.5_wp - kpi = 0.5_wp - kdel = 0.5_wp + real(wp), parameter :: step = 1.0e-6_wp - call overlap_grad_cgto_diat_scal(cgtoi, cgtoj, r2, vec, 100.0_wp, & - & vec_diat_trafo, ksig, kpi, kdel, overlap, doverlapj, overlap_scaled, doverlapj_scaled) + r2 = sum(vec**2) + + ! Test antisymmetry w.r.t. the exchange of the two centers + call overlap_grad_cgto_diat(cgtoi, cgtoj, r2, vec, 100.0_wp, & + & ksig, kpi, kdel, overlap, doverlapi, overlap_diat, doverlapi_diat) vec(:) = -vec - call overlap_grad_cgto_diat_scal(cgtoj, cgtoi, r2, vec, 100.0_wp, & - & vec_diat_trafo, ksig, kpi, kdel, overlap, doverlapi, overlap_scaled, doverlapi_scaled) + call overlap_grad_cgto_diat(cgtoj, cgtoi, r2, vec, 100.0_wp, & + & ksig, kpi, kdel, overlap, doverlapj, overlap_diat, doverlapj_diat) lp: do i = 1, 3 - do j = 1, 3 - do k = 1, 3 - call check(error, doverlapi(i, j, k), -doverlapj(i, k, j), thr=thr) + do j = 1, msao(cgtoi%ang) + do k = 1, msao(cgtoj%ang) + call check(error, doverlapi(i, j, k), -doverlapj(i, k, j), thr=thr2) if (allocated(error)) exit lp - call check(error, doverlapi_scaled(i, j, k), -doverlapj_scaled(i, k, j), thr=thr) + call check(error, doverlapi_diat(i, j, k), -doverlapj_diat(i, k, j), thr=thr2) if (allocated(error)) exit lp end do end do end do lp - if (allocated(error)) return + if (allocated(error)) return + ! Test the analytical againts the numerical gradient do i = 1, 3 vec(i) = vec(i) + step r2 = sum(vec**2) - !call overlap_cgto(cgtoj, cgtoi, r2, vec, 100.0_wp, sr) - call overlap_cgto_diat_scal(cgtoj, cgtoi, r2, vec,& - & 100.0_wp, vec_diat_trafo, ksig, kpi, kdel, sr, sr_scaled) + call overlap_cgto_diat(cgtoj, cgtoi, r2, vec,& + & 100.0_wp, ksig, kpi, kdel, sr, sr_diat) vec(i) = vec(i) - 2*step r2 = sum(vec**2) - !call overlap_cgto(cgtoj, cgtoi, r2, vec, 100.0_wp, sl) - call overlap_cgto_diat_scal(cgtoj, cgtoi, r2, vec,& - & 100.0_wp, vec_diat_trafo, ksig, kpi, kdel, sl, sl_scaled) + call overlap_cgto_diat(cgtoj, cgtoi, r2, vec,& + & 100.0_wp, ksig, kpi, kdel, sl, sl_diat) vec(i) = vec(i) + step - doverlapj(i, :, :) = 0.5_wp * (sr - sl) / step - doverlapj_scaled(i, :, :) = 0.5_wp * (sr_scaled - sl_scaled) / step + doverlaptmp(i, :, :) = 0.5_wp * (sr - sl) / step + doverlaptmp_diat(i, :, :) = 0.5_wp * (sr_diat - sl_diat) / step end do num: do i = 1, 3 - do j = 1, 3 - do k = 1, 3 - call check(error, doverlapi(i, j, k), doverlapj(i, j, k), thr=thr) - if (allocated(error)) exit num - call check(error, doverlapi_scaled(i, j, k), doverlapj_scaled(i, j, k), thr=thr) - if (allocated(error)) exit num + do j = 1, msao(cgtoi%ang) + do k = 1, msao(cgtoj%ang) + call check(error, doverlapj(i, k, j), doverlaptmp(i, k, j), thr=thr2) + if (allocated(error)) then + write(*,*) "Error", doverlapj(i, k, j), doverlaptmp(i, k, j) + exit num + end if + call check(error, doverlapj_diat(i, k, j), doverlaptmp_diat(i, k, j), thr=thr2) + if (allocated(error)) then + write(*,*) "Error", doverlapj(i, k, j), doverlaptmp(i, k, j) + exit num + end if end do end do end do num if (allocated(error)) return +end subroutine test_overlap_diat_grad_gen + +subroutine test_overlap_diat_grad_ss(error) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + integer, parameter :: ng = 6 + + type(cgto_type) :: cgtoi, cgtoj + real(wp) :: vec(3) + real(wp) :: ksig, kpi, kdel + integer :: stat + + call slater_to_gauss(ng, 2, 0, 1.0_wp, cgtoi, .true., stat) + call slater_to_gauss(ng, 1, 0, 2.0_wp, cgtoj, .true., stat) + + ! Randomly oriented vector of length 0.5 + call random_number(vec) + vec = (vec - 0.5_wp)*(sum(vec**2))*0.5_wp + + ksig = 0.1_wp + kpi = 0.2_wp + kdel = 0.5_wp + + call test_overlap_diat_grad_gen(vec, ksig, kpi, kdel, cgtoi, cgtoj, error) + +end subroutine test_overlap_diat_grad_ss + +subroutine test_overlap_diat_grad_ss_z(error) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + integer, parameter :: ng = 6 + + type(cgto_type) :: cgtoi, cgtoj + real(wp) :: vec(3) + real(wp) :: ksig, kpi, kdel + integer :: stat + + call slater_to_gauss(ng, 2, 0, 1.0_wp, cgtoi, .true., stat) + call slater_to_gauss(ng, 1, 0, 2.0_wp, cgtoj, .true., stat) + + ! Vector along the z-axis to test the ill-defined gradient + vec(1) = 0.0_wp + vec(2) = 0.0_wp + vec(3) = 0.5_wp + + ksig = 0.1_wp + kpi = 0.2_wp + kdel = 0.5_wp + + call test_overlap_diat_grad_gen(vec, ksig, kpi, kdel, cgtoi, cgtoj, error) + +end subroutine test_overlap_diat_grad_ss_z + +subroutine test_overlap_diat_grad_sp(error) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + integer, parameter :: ng = 6 + + type(cgto_type) :: cgtoi, cgtoj + real(wp) :: vec(3) + real(wp) :: ksig, kpi, kdel + integer :: stat + + call slater_to_gauss(ng, 4, 0, 1.0_wp, cgtoi, .true., stat) + call slater_to_gauss(ng, 3, 1, 2.0_wp, cgtoj, .true., stat) + + ! Randomly oriented vector of length 0.5 + call random_number(vec) + vec = (vec - 0.5_wp)*(sum(vec**2))*0.5_wp + + ksig = 0.1_wp + kpi = 0.2_wp + kdel = 0.5_wp + + call test_overlap_diat_grad_gen(vec, ksig, kpi, kdel, cgtoi, cgtoj, error) + +end subroutine test_overlap_diat_grad_sp + +subroutine test_overlap_diat_grad_sp_z(error) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + integer, parameter :: ng = 6 + + type(cgto_type) :: cgtoi, cgtoj + real(wp) :: vec(3) + real(wp) :: ksig, kpi, kdel + integer :: stat + + call slater_to_gauss(ng, 4, 0, 1.0_wp, cgtoi, .true., stat) + call slater_to_gauss(ng, 3, 1, 2.0_wp, cgtoj, .true., stat) + + ! Vector along the z-axis to test the ill-defined gradient + vec(1) = 0.0_wp + vec(2) = 0.0_wp + vec(3) = 0.5_wp + + ksig = 0.1_wp + kpi = 0.2_wp + kdel = 0.5_wp + + call test_overlap_diat_grad_gen(vec, ksig, kpi, kdel, cgtoi, cgtoj, error) + +end subroutine test_overlap_diat_grad_sp_z + +subroutine test_overlap_diat_grad_pp(error) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + integer, parameter :: ng = 6 + + type(cgto_type) :: cgtoi, cgtoj + real(wp) :: vec(3) + real(wp) :: ksig, kpi, kdel + integer :: stat + + call slater_to_gauss(ng, 3, 1, 1.5_wp, cgtoi, .true., stat) + call slater_to_gauss(ng, 2, 1, 1.0_wp, cgtoj, .true., stat) + + ! Randomly oriented vector of length 0.5 + call random_number(vec) + vec = (vec - 0.5_wp)*(sum(vec**2)) + + ksig = 0.1_wp + kpi = 0.2_wp + kdel = 0.5_wp + + call test_overlap_diat_grad_gen(vec, ksig, kpi, kdel, cgtoi, cgtoj, error) + end subroutine test_overlap_diat_grad_pp +subroutine test_overlap_diat_grad_pp_z(error) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + integer, parameter :: ng = 6 + + type(cgto_type) :: cgtoi, cgtoj + real(wp) :: vec(3) + real(wp) :: ksig, kpi, kdel + integer :: stat + + call slater_to_gauss(ng, 3, 1, 1.5_wp, cgtoi, .true., stat) + call slater_to_gauss(ng, 2, 1, 1.0_wp, cgtoj, .true., stat) + + ! Vector along the z-axis to test the ill-defined gradient + vec(1) = 0.0_wp + vec(2) = 0.0_wp + vec(3) = 0.5_wp + + ksig = 0.1_wp + kpi = 0.2_wp + kdel = 0.5_wp + + call test_overlap_diat_grad_gen(vec, ksig, kpi, kdel, cgtoi, cgtoj, error) + +end subroutine test_overlap_diat_grad_pp_z + +subroutine test_overlap_diat_grad_sd(error) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + integer, parameter :: ng = 6 + + type(cgto_type) :: cgtoi, cgtoj + real(wp) :: vec(3) + real(wp) :: ksig, kpi, kdel + integer :: stat + + + call slater_to_gauss(ng, 4, 0, 1.0_wp, cgtoi, .true., stat) + call slater_to_gauss(ng, 3, 2, 1.8_wp, cgtoj, .true., stat) + + ! Randomly oriented vector of length 0.5 + call random_number(vec) + vec = (vec - 0.5_wp)*(sum(vec**2))*0.5_wp + + ksig = 0.1_wp + kpi = 0.2_wp + kdel = 0.5_wp + + call test_overlap_diat_grad_gen(vec, ksig, kpi, kdel, cgtoi, cgtoj, error) + +end subroutine test_overlap_diat_grad_sd + +subroutine test_overlap_diat_grad_sd_z(error) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + integer, parameter :: ng = 6 + + type(cgto_type) :: cgtoi, cgtoj + real(wp) :: vec(3) + real(wp) :: ksig, kpi, kdel + integer :: stat + + call slater_to_gauss(ng, 4, 0, 1.0_wp, cgtoi, .true., stat) + call slater_to_gauss(ng, 3, 2, 1.8_wp, cgtoj, .true., stat) + + ! Vector along the z-axis to test the ill-defined gradient + vec(1) = 0.0_wp + vec(2) = 0.0_wp + vec(3) = 0.5_wp + + ksig = 0.1_wp + kpi = 0.2_wp + kdel = 0.5_wp + + call test_overlap_diat_grad_gen(vec, ksig, kpi, kdel, cgtoi, cgtoj, error) + +end subroutine test_overlap_diat_grad_sd_z + +subroutine test_overlap_diat_grad_pd(error) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + integer, parameter :: ng = 6 + + type(cgto_type) :: cgtoi, cgtoj + real(wp) :: vec(3) + real(wp) :: ksig, kpi, kdel + integer :: stat + + call slater_to_gauss(ng, 4, 1, 1.5_wp, cgtoi, .true., stat) + call slater_to_gauss(ng, 3, 2, 1.5_wp, cgtoj, .true., stat) + + ! Randomly oriented vector of length 0.5 + call random_number(vec) + vec = (vec - 0.5_wp)*(sum(vec**2))*0.5_wp + + ksig = 0.1_wp + kpi = 0.2_wp + kdel = 0.5_wp + + call test_overlap_diat_grad_gen(vec, ksig, kpi, kdel, cgtoi, cgtoj, error) + +end subroutine test_overlap_diat_grad_pd + +subroutine test_overlap_diat_grad_pd_z(error) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + integer, parameter :: ng = 6 + + type(cgto_type) :: cgtoi, cgtoj + real(wp) :: vec(3) + real(wp) :: ksig, kpi, kdel + integer :: stat + + call slater_to_gauss(ng, 4, 1, 1.5_wp, cgtoi, .true., stat) + call slater_to_gauss(ng, 3, 2, 1.5_wp, cgtoj, .true., stat) + + ! Vector along the z-axis to test the ill-defined gradient + vec(1) = 0.0_wp + vec(2) = 0.0_wp + vec(3) = 0.5_wp + + ksig = 0.1_wp + kpi = 0.2_wp + kdel = 0.5_wp + + call test_overlap_diat_grad_gen(vec, ksig, kpi, kdel, cgtoi, cgtoj, error) + +end subroutine test_overlap_diat_grad_pd_z subroutine test_overlap_diat_grad_dd(error) @@ -1061,76 +2089,277 @@ subroutine test_overlap_diat_grad_dd(error) type(error_type), allocatable, intent(out) :: error integer, parameter :: ng = 6 - integer :: stat, i, j, k + type(cgto_type) :: cgtoi, cgtoj - real(wp) :: vec(3), r2, vec_diat_trafo(3) - real(wp) :: overlap(5, 5), doverlapi(3, 5, 5), doverlapj(3, 5, 5), sl(5, 5), sr(5, 5) - real(wp) :: overlap_scaled(5, 5), doverlapi_scaled(3, 5, 5), doverlapj_scaled(3, 5, 5), sr_scaled(5, 5), sl_scaled(5, 5) - real(wp), parameter :: step = 1.0e-6_wp + real(wp) :: vec(3) real(wp) :: ksig, kpi, kdel + integer :: stat call slater_to_gauss(ng, 4, 2, 1.0_wp, cgtoi, .true., stat) - call slater_to_gauss(ng, 3, 2, 1.0_wp, cgtoj, .true., stat) + call slater_to_gauss(ng, 3, 2, 1.3_wp, cgtoj, .true., stat) + ! Randomly oriented vector of length 0.7 call random_number(vec) - vec = vec - 0.5_wp - r2 = sum(vec**2) + vec = (vec - 0.5_wp)*(sum(vec**2))*0.7_wp + + ksig = 0.1_wp + kpi = 0.2_wp + kdel = 0.5_wp + + call test_overlap_diat_grad_gen(vec, ksig, kpi, kdel, cgtoi, cgtoj, error) + +end subroutine test_overlap_diat_grad_dd + +subroutine test_overlap_diat_grad_dd_z(error) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + integer, parameter :: ng = 6 + + type(cgto_type) :: cgtoi, cgtoj + real(wp) :: vec(3) + real(wp) :: ksig, kpi, kdel + integer :: stat + + call slater_to_gauss(ng, 4, 2, 1.0_wp, cgtoi, .true., stat) + call slater_to_gauss(ng, 3, 2, 1.3_wp, cgtoj, .true., stat) - call relvec(vec, sqrt(r2), vec_diat_trafo) + ! Vector along the z-axis to test the ill-defined gradient + vec(1) = 0.0_wp + vec(2) = 0.0_wp + vec(3) = 0.7_wp ksig = 0.1_wp - kpi = 0.5_wp - kdel = 0.2_wp + kpi = 0.2_wp + kdel = 0.5_wp - call overlap_grad_cgto_diat_scal(cgtoi, cgtoj, r2, vec, 100.0_wp, & - & vec_diat_trafo, ksig, kpi, kdel, overlap, doverlapj, overlap_scaled, doverlapj_scaled) + call test_overlap_diat_grad_gen(vec, ksig, kpi, kdel, cgtoi, cgtoj, error) - vec(:) = -vec +end subroutine test_overlap_diat_grad_dd_z - call overlap_grad_cgto_diat_scal(cgtoj, cgtoi, r2, vec, 100.0_wp, & - & vec_diat_trafo, ksig, kpi, kdel, overlap, doverlapi, overlap_scaled, doverlapi_scaled) +subroutine test_overlap_diat_grad_sf(error) - lp: do i = 1, 3 - do j = 1, 5 - do k = 1, 5 - call check(error, doverlapi(i, j, k), -doverlapj(i, k, j), thr=thr) - if (allocated(error)) exit lp - call check(error, doverlapi_scaled(i, j, k), -doverlapj_scaled(i, k, j), thr=thr) - if (allocated(error)) exit lp - end do - end do - end do lp - if (allocated(error)) return + !> Error handling + type(error_type), allocatable, intent(out) :: error - do i = 1, 3 - vec(i) = vec(i) + step - r2 = sum(vec**2) - call overlap_cgto_diat_scal(cgtoj, cgtoi, r2, vec,& - & 100.0_wp, vec_diat_trafo, ksig, kpi, kdel, sr, sr_scaled) - - vec(i) = vec(i) - 2*step - r2 = sum(vec**2) - call overlap_cgto_diat_scal(cgtoj, cgtoi, r2, vec,& - & 100.0_wp, vec_diat_trafo, ksig, kpi, kdel, sl, sl_scaled) + integer, parameter :: ng = 6 - vec(i) = vec(i) + step - doverlapj(i, :, :) = 0.5_wp * (sr - sl) / step - doverlapj_scaled(i, :, :) = 0.5_wp * (sr_scaled - sl_scaled) / step - end do + type(cgto_type) :: cgtoi, cgtoj + real(wp) :: vec(3) + real(wp) :: ksig, kpi, kdel + integer :: stat - num: do i = 1, 3 - do j = 1, 5 - do k = 1, 5 - call check(error, doverlapi(i, j, k), doverlapj(i, j, k), thr=thr) - if (allocated(error)) exit num - call check(error, doverlapi_scaled(i, j, k), doverlapj_scaled(i, j, k), thr=thr) - if (allocated(error)) exit num - end do - end do - end do num - if (allocated(error)) return + call slater_to_gauss(ng, 5, 0, 2.0_wp, cgtoi, .true., stat) + call slater_to_gauss(ng, 4, 3, 1.0_wp, cgtoj, .true., stat) -end subroutine test_overlap_diat_grad_dd + ! Randomly oriented vector of length 0.5 + call random_number(vec) + vec = (vec - 0.5_wp)*(sum(vec**2))*0.5_wp + + ksig = 0.1_wp + kpi = 0.2_wp + kdel = 0.5_wp + + call test_overlap_diat_grad_gen(vec, ksig, kpi, kdel, cgtoi, cgtoj, error) + +end subroutine test_overlap_diat_grad_sf + +subroutine test_overlap_diat_grad_sf_z(error) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + integer, parameter :: ng = 6 + + type(cgto_type) :: cgtoi, cgtoj + real(wp) :: vec(3) + real(wp) :: ksig, kpi, kdel + integer :: stat + + call slater_to_gauss(ng, 5, 0, 2.0_wp, cgtoi, .true., stat) + call slater_to_gauss(ng, 4, 3, 1.0_wp, cgtoj, .true., stat) + + ! Vector along the z-axis to test the ill-defined gradient + vec(1) = 0.0_wp + vec(2) = 0.0_wp + vec(3) = 0.5_wp + + ksig = 0.1_wp + kpi = 0.2_wp + kdel = 0.5_wp + + call test_overlap_diat_grad_gen(vec, ksig, kpi, kdel, cgtoi, cgtoj, error) + +end subroutine test_overlap_diat_grad_sf_z + +subroutine test_overlap_diat_grad_pf(error) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + integer, parameter :: ng = 6 + + type(cgto_type) :: cgtoi, cgtoj + real(wp) :: vec(3) + real(wp) :: ksig, kpi, kdel + integer :: stat, i + + call slater_to_gauss(ng, 5, 1, 1.0_wp, cgtoi, .true., stat) + call slater_to_gauss(ng, 4, 3, 2.0_wp, cgtoj, .true., stat) + + + ! Randomly oriented vector of length 0.5 + call random_number(vec) + vec = (vec - 0.5_wp)*(sum(vec**2))*0.5_wp + + ksig = 0.1_wp + kpi = 0.2_wp + kdel = 0.5_wp + + call test_overlap_diat_grad_gen(vec, ksig, kpi, kdel, cgtoi, cgtoj, error) + +end subroutine test_overlap_diat_grad_pf + +subroutine test_overlap_diat_grad_pf_z(error) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + integer, parameter :: ng = 6 + + type(cgto_type) :: cgtoi, cgtoj + real(wp) :: vec(3) + real(wp) :: ksig, kpi, kdel + integer :: stat + + call slater_to_gauss(ng, 5, 1, 1.0_wp, cgtoi, .true., stat) + call slater_to_gauss(ng, 4, 3, 2.0_wp, cgtoj, .true., stat) + + ! Vector along the z-axis to test the ill-defined gradient + vec(1) = 0.0_wp + vec(2) = 0.0_wp + vec(3) = 0.5_wp + + ksig = 0.1_wp + kpi = 0.2_wp + kdel = 0.5_wp + + call test_overlap_diat_grad_gen(vec, ksig, kpi, kdel, cgtoi, cgtoj, error) + +end subroutine test_overlap_diat_grad_pf_z + +subroutine test_overlap_diat_grad_df(error) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + integer, parameter :: ng = 6 + + type(cgto_type) :: cgtoi, cgtoj + real(wp) :: vec(3) + real(wp) :: ksig, kpi, kdel + integer :: stat + + call slater_to_gauss(ng, 5, 2, 1.3_wp, cgtoi, .true., stat) + call slater_to_gauss(ng, 4, 3, 1.4_wp, cgtoj, .true., stat) + + ! Randomly oriented vector of length 0.5 + call random_number(vec) + vec = (vec - 0.5_wp)*(sum(vec**2))*0.5_wp + + ksig = 0.1_wp + kpi = 0.2_wp + kdel = 0.5_wp + + call test_overlap_diat_grad_gen(vec, ksig, kpi, kdel, cgtoi, cgtoj, error) + +end subroutine test_overlap_diat_grad_df + +subroutine test_overlap_diat_grad_df_z(error) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + integer, parameter :: ng = 6 + + type(cgto_type) :: cgtoi, cgtoj + real(wp) :: vec(3) + real(wp) :: ksig, kpi, kdel + integer :: stat + + call slater_to_gauss(ng, 5, 2, 1.3_wp, cgtoi, .true., stat) + call slater_to_gauss(ng, 4, 3, 1.4_wp, cgtoj, .true., stat) + + ! Vector along the z-axis to test the ill-defined gradient + vec(1) = 0.0_wp + vec(2) = 0.0_wp + vec(3) = 0.5_wp + + ksig = 0.1_wp + kpi = 0.2_wp + kdel = 0.5_wp + + call test_overlap_diat_grad_gen(vec, ksig, kpi, kdel, cgtoi, cgtoj, error) + +end subroutine test_overlap_diat_grad_df_z + +subroutine test_overlap_diat_grad_ff(error) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + integer, parameter :: ng = 6 + + type(cgto_type) :: cgtoi, cgtoj + real(wp) :: vec(3) + real(wp) :: ksig, kpi, kdel + integer :: stat + + call slater_to_gauss(ng, 5, 3, 1.6_wp, cgtoi, .true., stat) + call slater_to_gauss(ng, 4, 3, 1.0_wp, cgtoj, .true., stat) + + ! Randomly oriented vector of length 0.5 + call random_number(vec) + vec = (vec - 0.5_wp)*(sum(vec**2))*0.5_wp + vec(1) = 0.0_wp + vec(2) = 0.0_wp + vec(3) = 0.1_wp + + ksig = 0.1_wp + kpi = 0.2_wp + kdel = 0.5_wp + + call test_overlap_diat_grad_gen(vec, ksig, kpi, kdel, cgtoi, cgtoj, error) + +end subroutine test_overlap_diat_grad_ff + +subroutine test_overlap_diat_grad_ff_z(error) + + !> Error handling + type(error_type), allocatable, intent(out) :: error + + integer, parameter :: ng = 6 + + type(cgto_type) :: cgtoi, cgtoj + real(wp) :: vec(3) + real(wp) :: ksig, kpi, kdel + integer :: stat + + call slater_to_gauss(ng, 5, 3, 1.6_wp, cgtoi, .true., stat) + call slater_to_gauss(ng, 4, 3, 1.0_wp, cgtoj, .true., stat) + + ! Vector along the z-axis to test the ill-defined gradient + vec(1) = 0.0_wp + vec(2) = 0.0_wp + vec(3) = 0.5_wp + + ksig = 0.1_wp + kpi = 0.2_wp + kdel = 0.5_wp + + call test_overlap_diat_grad_gen(vec, ksig, kpi, kdel, cgtoi, cgtoj, error) +end subroutine test_overlap_diat_grad_ff_z end module test_integral_overlap