mirror of
https://github.com/LCPQ/quantum_package
synced 2025-01-05 11:00:10 +01:00
Changed psi_svd into psi_bilinear
This commit is contained in:
parent
e23dba89ba
commit
24faf493f3
@ -23,7 +23,7 @@ Documentation
|
|||||||
.. Do not edit this section. It was auto-generated from the
|
.. Do not edit this section. It was auto-generated from the
|
||||||
.. by the `update_README.py` script.
|
.. by the `update_README.py` script.
|
||||||
|
|
||||||
`apply_excitation_operator <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils_new/mrcc_dress.irp.f#L138>`_
|
`apply_excitation_operator <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils_new/mrcc_dress.irp.f#L132>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
@ -13,11 +13,11 @@ Documentation
|
|||||||
.. Do not edit this section. It was auto-generated from the
|
.. Do not edit this section. It was auto-generated from the
|
||||||
.. by the `update_README.py` script.
|
.. by the `update_README.py` script.
|
||||||
|
|
||||||
`get_index_in_psi_ref_sorted_bit <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_utils.irp.f#L136>`_
|
`get_index_in_psi_ref_sorted_bit <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_utils.irp.f#L140>`_
|
||||||
Returns the index of the determinant in the ``psi_ref_sorted_bit`` array
|
Returns the index of the determinant in the ``psi_ref_sorted_bit`` array
|
||||||
|
|
||||||
|
|
||||||
`h_matrix_ref <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_utils.irp.f#L70>`_
|
`h_matrix_ref <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_utils.irp.f#L74>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
@ -32,16 +32,25 @@ Documentation
|
|||||||
Set of determinants which are not part of the reference, defined from the application
|
Set of determinants which are not part of the reference, defined from the application
|
||||||
of the reference bitmask on the determinants.
|
of the reference bitmask on the determinants.
|
||||||
idx_non_ref gives the indice of the determinant in psi_det.
|
idx_non_ref gives the indice of the determinant in psi_det.
|
||||||
|
idx_non_ref_rev gives the reverse.
|
||||||
|
|
||||||
|
|
||||||
`is_in_psi_ref <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_utils.irp.f#L122>`_
|
`idx_non_ref_rev <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_utils.irp.f#L21>`_
|
||||||
True if the determinant ``det`` is in the wave function
|
|
||||||
|
|
||||||
|
|
||||||
`n_det_non_ref <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_utils.irp.f#L21>`_
|
|
||||||
Set of determinants which are not part of the reference, defined from the application
|
Set of determinants which are not part of the reference, defined from the application
|
||||||
of the reference bitmask on the determinants.
|
of the reference bitmask on the determinants.
|
||||||
idx_non_ref gives the indice of the determinant in psi_det.
|
idx_non_ref gives the indice of the determinant in psi_det.
|
||||||
|
idx_non_ref_rev gives the reverse.
|
||||||
|
|
||||||
|
|
||||||
|
`is_in_psi_ref <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_utils.irp.f#L126>`_
|
||||||
|
True if the determinant ``det`` is in the wave function
|
||||||
|
|
||||||
|
|
||||||
|
`n_det_non_ref <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_utils.irp.f#L22>`_
|
||||||
|
Set of determinants which are not part of the reference, defined from the application
|
||||||
|
of the reference bitmask on the determinants.
|
||||||
|
idx_non_ref gives the indice of the determinant in psi_det.
|
||||||
|
idx_non_ref_rev gives the reverse.
|
||||||
|
|
||||||
|
|
||||||
`particles_operators <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_excitations_operators.irp.f#L4>`_
|
`particles_operators <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_excitations_operators.irp.f#L4>`_
|
||||||
@ -51,7 +60,7 @@ Documentation
|
|||||||
been done going from psi_ref to psi_non_ref
|
been done going from psi_ref to psi_non_ref
|
||||||
|
|
||||||
|
|
||||||
`psi_coef_ref_diagonalized <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_utils.irp.f#L82>`_
|
`psi_coef_ref_diagonalized <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_utils.irp.f#L86>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
@ -59,20 +68,22 @@ Documentation
|
|||||||
Set of determinants which are not part of the reference, defined from the application
|
Set of determinants which are not part of the reference, defined from the application
|
||||||
of the reference bitmask on the determinants.
|
of the reference bitmask on the determinants.
|
||||||
idx_non_ref gives the indice of the determinant in psi_det.
|
idx_non_ref gives the indice of the determinant in psi_det.
|
||||||
|
idx_non_ref_rev gives the reverse.
|
||||||
|
|
||||||
|
|
||||||
`psi_non_ref_coef <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_utils.irp.f#L19>`_
|
`psi_non_ref_coef <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_utils.irp.f#L19>`_
|
||||||
Set of determinants which are not part of the reference, defined from the application
|
Set of determinants which are not part of the reference, defined from the application
|
||||||
of the reference bitmask on the determinants.
|
of the reference bitmask on the determinants.
|
||||||
idx_non_ref gives the indice of the determinant in psi_det.
|
idx_non_ref gives the indice of the determinant in psi_det.
|
||||||
|
idx_non_ref_rev gives the reverse.
|
||||||
|
|
||||||
|
|
||||||
`psi_non_ref_coef_sorted_bit <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_utils.irp.f#L58>`_
|
`psi_non_ref_coef_sorted_bit <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_utils.irp.f#L62>`_
|
||||||
Reference determinants sorted to accelerate the search of a random determinant in the wave
|
Reference determinants sorted to accelerate the search of a random determinant in the wave
|
||||||
function.
|
function.
|
||||||
|
|
||||||
|
|
||||||
`psi_non_ref_sorted_bit <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_utils.irp.f#L57>`_
|
`psi_non_ref_sorted_bit <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_utils.irp.f#L61>`_
|
||||||
Reference determinants sorted to accelerate the search of a random determinant in the wave
|
Reference determinants sorted to accelerate the search of a random determinant in the wave
|
||||||
function.
|
function.
|
||||||
|
|
||||||
@ -82,11 +93,11 @@ Documentation
|
|||||||
function.
|
function.
|
||||||
|
|
||||||
|
|
||||||
`psi_ref_energy <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_utils.irp.f#L101>`_
|
`psi_ref_energy <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_utils.irp.f#L105>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
`psi_ref_energy_diagonalized <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_utils.irp.f#L83>`_
|
`psi_ref_energy_diagonalized <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils/psi_ref_utils.irp.f#L87>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
@ -141,8 +141,9 @@ Documentation
|
|||||||
After calling this subroutine, N_det, psi_det and psi_coef need to be touched
|
After calling this subroutine, N_det, psi_det and psi_coef need to be touched
|
||||||
|
|
||||||
|
|
||||||
`create_wf_of_psi_svd_matrix <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/spindeterminants.irp.f#L415>`_
|
`create_wf_of_psi_bilinear_matrix <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/spindeterminants.irp.f#L417>`_
|
||||||
Matrix of wf coefficients. Outer product of alpha and beta determinants
|
Generate a wave function containing all possible products
|
||||||
|
of alpha and beta determinants
|
||||||
|
|
||||||
|
|
||||||
`davidson_converged <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/davidson.irp.f#L382>`_
|
`davidson_converged <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/davidson.irp.f#L382>`_
|
||||||
@ -233,10 +234,6 @@ Documentation
|
|||||||
Return an integer*8 corresponding to a determinant index for searching
|
Return an integer*8 corresponding to a determinant index for searching
|
||||||
|
|
||||||
|
|
||||||
`det_svd <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/det_svd.irp.f#L1>`_
|
|
||||||
Computes the SVD of the Alpha x Beta determinant coefficient matrix
|
|
||||||
|
|
||||||
|
|
||||||
`det_to_occ_pattern <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/occ_pattern.irp.f#L2>`_
|
`det_to_occ_pattern <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/occ_pattern.irp.f#L2>`_
|
||||||
Transform a determinant to an occupation pattern
|
Transform a determinant to an occupation pattern
|
||||||
|
|
||||||
@ -347,7 +344,7 @@ Documentation
|
|||||||
Determinants are taken from the psi_det_sorted_ab array
|
Determinants are taken from the psi_det_sorted_ab array
|
||||||
|
|
||||||
|
|
||||||
`generate_all_alpha_beta_det_products <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/spindeterminants.irp.f#L469>`_
|
`generate_all_alpha_beta_det_products <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/spindeterminants.irp.f#L472>`_
|
||||||
Create a wave function from all possible alpha x beta determinants
|
Create a wave function from all possible alpha x beta determinants
|
||||||
|
|
||||||
|
|
||||||
@ -633,6 +630,26 @@ Documentation
|
|||||||
Wave function sorted by determinants contribution to the norm (state-averaged)
|
Wave function sorted by determinants contribution to the norm (state-averaged)
|
||||||
|
|
||||||
|
|
||||||
|
`psi_bilinear_matrix <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/spindeterminants.irp.f#L400>`_
|
||||||
|
Coefficient matrix if the wave function is expressed in a bilinear form :
|
||||||
|
D_a^t C D_b
|
||||||
|
|
||||||
|
|
||||||
|
`psi_bilinear_matrix_columns <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/spindeterminants.irp.f#L362>`_
|
||||||
|
Sparse coefficient matrix if the wave function is expressed in a bilinear form :
|
||||||
|
D_a^t C D_b
|
||||||
|
|
||||||
|
|
||||||
|
`psi_bilinear_matrix_rows <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/spindeterminants.irp.f#L361>`_
|
||||||
|
Sparse coefficient matrix if the wave function is expressed in a bilinear form :
|
||||||
|
D_a^t C D_b
|
||||||
|
|
||||||
|
|
||||||
|
`psi_bilinear_matrix_values <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/spindeterminants.irp.f#L360>`_
|
||||||
|
Sparse coefficient matrix if the wave function is expressed in a bilinear form :
|
||||||
|
D_a^t C D_b
|
||||||
|
|
||||||
|
|
||||||
`psi_cas <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/psi_cas.irp.f#L3>`_
|
`psi_cas <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/psi_cas.irp.f#L3>`_
|
||||||
CAS wave function, defined from the application of the CAS bitmask on the
|
CAS wave function, defined from the application of the CAS bitmask on the
|
||||||
determinants. idx_cas gives the indice of the CAS determinant in psi_det.
|
determinants. idx_cas gives the indice of the CAS determinant in psi_det.
|
||||||
@ -774,34 +791,6 @@ Documentation
|
|||||||
psi_occ_pattern(:,2,j) = jth occ_pattern of the wave function : represent all the double occupation
|
psi_occ_pattern(:,2,j) = jth occ_pattern of the wave function : represent all the double occupation
|
||||||
|
|
||||||
|
|
||||||
`psi_svd_alpha <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/spindeterminants.irp.f#L509>`_
|
|
||||||
SVD wave function
|
|
||||||
|
|
||||||
|
|
||||||
`psi_svd_beta <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/spindeterminants.irp.f#L510>`_
|
|
||||||
SVD wave function
|
|
||||||
|
|
||||||
|
|
||||||
`psi_svd_coefs <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/spindeterminants.irp.f#L511>`_
|
|
||||||
SVD wave function
|
|
||||||
|
|
||||||
|
|
||||||
`psi_svd_matrix <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/spindeterminants.irp.f#L399>`_
|
|
||||||
Matrix of wf coefficients. Outer product of alpha and beta determinants
|
|
||||||
|
|
||||||
|
|
||||||
`psi_svd_matrix_columns <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/spindeterminants.irp.f#L362>`_
|
|
||||||
Matrix of wf coefficients. Outer product of alpha and beta determinants
|
|
||||||
|
|
||||||
|
|
||||||
`psi_svd_matrix_rows <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/spindeterminants.irp.f#L361>`_
|
|
||||||
Matrix of wf coefficients. Outer product of alpha and beta determinants
|
|
||||||
|
|
||||||
|
|
||||||
`psi_svd_matrix_values <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/spindeterminants.irp.f#L360>`_
|
|
||||||
Matrix of wf coefficients. Outer product of alpha and beta determinants
|
|
||||||
|
|
||||||
|
|
||||||
`put_gess <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/guess_triplet.irp.f#L1>`_
|
`put_gess <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants/guess_triplet.irp.f#L1>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
|
@ -1,61 +0,0 @@
|
|||||||
program det_svd
|
|
||||||
implicit none
|
|
||||||
BEGIN_DOC
|
|
||||||
! Computes the SVD of the Alpha x Beta determinant coefficient matrix
|
|
||||||
END_DOC
|
|
||||||
integer :: i,j,k
|
|
||||||
|
|
||||||
read_wf = .True.
|
|
||||||
TOUCH read_wf
|
|
||||||
|
|
||||||
print *, 'SVD matrix before filling'
|
|
||||||
print *, '========================='
|
|
||||||
print *, ''
|
|
||||||
print *, 'N_det = ', N_det
|
|
||||||
print *, 'N_det_alpha = ', N_det_alpha_unique
|
|
||||||
print *, 'N_det_beta = ', N_det_beta_unique
|
|
||||||
print *, ''
|
|
||||||
|
|
||||||
! do i=1,N_det_alpha_unique
|
|
||||||
! do j=1,N_det_beta_unique
|
|
||||||
! print *, i,j,psi_svd_matrix(i,j,:)
|
|
||||||
! enddo
|
|
||||||
! enddo
|
|
||||||
|
|
||||||
print *, ''
|
|
||||||
print *, 'Energy = ', ci_energy
|
|
||||||
print *, ''
|
|
||||||
|
|
||||||
print *, psi_svd_coefs(1:20,1)
|
|
||||||
|
|
||||||
call generate_all_alpha_beta_det_products
|
|
||||||
print *, ''
|
|
||||||
print *, 'Energy = ', ci_energy
|
|
||||||
print *, ''
|
|
||||||
|
|
||||||
print *, 'SVD matrix after filling'
|
|
||||||
print *, '========================'
|
|
||||||
print *, ''
|
|
||||||
print *, 'N_det = ', N_det
|
|
||||||
print *, 'N_det_alpha = ', N_det_alpha_unique
|
|
||||||
print *, 'N_det_beta = ', N_det_beta_unique
|
|
||||||
print *, ''
|
|
||||||
print *, ''
|
|
||||||
call diagonalize_ci
|
|
||||||
print *, 'Energy = ', ci_energy
|
|
||||||
|
|
||||||
do i=1,N_det_alpha_unique
|
|
||||||
do j=1,N_det_beta_unique
|
|
||||||
do k=1,N_states
|
|
||||||
if (dabs(psi_svd_matrix(i,j,k)) < 1.d-15) then
|
|
||||||
psi_svd_matrix(i,j,k) = 0.d0
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
|
|
||||||
print *, ''
|
|
||||||
print *, psi_svd_coefs(1:20,1)
|
|
||||||
call save_wavefunction
|
|
||||||
|
|
||||||
end
|
|
@ -344,9 +344,9 @@ subroutine write_spindeterminants
|
|||||||
call ezfio_set_spindeterminants_psi_det_beta(psi_det_beta_unique)
|
call ezfio_set_spindeterminants_psi_det_beta(psi_det_beta_unique)
|
||||||
deallocate(tmpdet)
|
deallocate(tmpdet)
|
||||||
|
|
||||||
call ezfio_set_spindeterminants_psi_coef_matrix_values(psi_svd_matrix_values)
|
call ezfio_set_spindeterminants_psi_coef_matrix_values(psi_bilinear_matrix_values)
|
||||||
call ezfio_set_spindeterminants_psi_coef_matrix_rows(psi_svd_matrix_rows)
|
call ezfio_set_spindeterminants_psi_coef_matrix_rows(psi_bilinear_matrix_rows)
|
||||||
call ezfio_set_spindeterminants_psi_coef_matrix_columns(psi_svd_matrix_columns)
|
call ezfio_set_spindeterminants_psi_coef_matrix_columns(psi_bilinear_matrix_columns)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -357,13 +357,14 @@ end
|
|||||||
! !
|
! !
|
||||||
!==============================================================================!
|
!==============================================================================!
|
||||||
|
|
||||||
BEGIN_PROVIDER [ double precision, psi_svd_matrix_values, (N_det,N_states) ]
|
BEGIN_PROVIDER [ double precision, psi_bilinear_matrix_values, (N_det,N_states) ]
|
||||||
&BEGIN_PROVIDER [ integer, psi_svd_matrix_rows, (N_det) ]
|
&BEGIN_PROVIDER [ integer, psi_bilinear_matrix_rows, (N_det) ]
|
||||||
&BEGIN_PROVIDER [ integer, psi_svd_matrix_columns, (N_det) ]
|
&BEGIN_PROVIDER [ integer, psi_bilinear_matrix_columns, (N_det) ]
|
||||||
use bitmasks
|
use bitmasks
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Matrix of wf coefficients. Outer product of alpha and beta determinants
|
! Sparse coefficient matrix if the wave function is expressed in a bilinear form :
|
||||||
|
! D_a^t C D_b
|
||||||
END_DOC
|
END_DOC
|
||||||
integer :: i,j,k, l
|
integer :: i,j,k, l
|
||||||
integer(bit_kind) :: tmp_det(N_int,2)
|
integer(bit_kind) :: tmp_det(N_int,2)
|
||||||
@ -382,41 +383,43 @@ BEGIN_PROVIDER [ double precision, psi_svd_matrix_values, (N_det,N_states) ]
|
|||||||
j = get_index_in_psi_det_beta_unique (psi_det(1,2,k),N_int)
|
j = get_index_in_psi_det_beta_unique (psi_det(1,2,k),N_int)
|
||||||
|
|
||||||
do l=1,N_states
|
do l=1,N_states
|
||||||
psi_svd_matrix_values(k,l) = psi_coef(k,l)
|
psi_bilinear_matrix_values(k,l) = psi_coef(k,l)
|
||||||
enddo
|
enddo
|
||||||
psi_svd_matrix_rows(k) = i
|
psi_bilinear_matrix_rows(k) = i
|
||||||
psi_svd_matrix_columns(k) = j
|
psi_bilinear_matrix_columns(k) = j
|
||||||
to_sort(k) = N_det_alpha_unique * (j-1) + i
|
to_sort(k) = N_det_alpha_unique * (j-1) + i
|
||||||
iorder(k) = k
|
iorder(k) = k
|
||||||
enddo
|
enddo
|
||||||
call isort(to_sort, iorder, N_det)
|
call isort(to_sort, iorder, N_det)
|
||||||
call iset_order(psi_svd_matrix_rows,iorder,N_det)
|
call iset_order(psi_bilinear_matrix_rows,iorder,N_det)
|
||||||
call iset_order(psi_svd_matrix_columns,iorder,N_det)
|
call iset_order(psi_bilinear_matrix_columns,iorder,N_det)
|
||||||
call dset_order(psi_svd_matrix_values,iorder,N_det)
|
call dset_order(psi_bilinear_matrix_values,iorder,N_det)
|
||||||
deallocate(iorder,to_sort)
|
deallocate(iorder,to_sort)
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
BEGIN_PROVIDER [ double precision, psi_svd_matrix, (N_det_alpha_unique,N_det_beta_unique,N_states) ]
|
BEGIN_PROVIDER [ double precision, psi_bilinear_matrix, (N_det_alpha_unique,N_det_beta_unique,N_states) ]
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Matrix of wf coefficients. Outer product of alpha and beta determinants
|
! Coefficient matrix if the wave function is expressed in a bilinear form :
|
||||||
|
! D_a^t C D_b
|
||||||
END_DOC
|
END_DOC
|
||||||
integer :: i,j,k,istate
|
integer :: i,j,k,istate
|
||||||
psi_svd_matrix = 0.d0
|
psi_bilinear_matrix = 0.d0
|
||||||
do k=1,N_det
|
do k=1,N_det
|
||||||
i = psi_svd_matrix_rows(k)
|
i = psi_bilinear_matrix_rows(k)
|
||||||
j = psi_svd_matrix_columns(k)
|
j = psi_bilinear_matrix_columns(k)
|
||||||
do istate=1,N_states
|
do istate=1,N_states
|
||||||
psi_svd_matrix(i,j,istate) = psi_svd_matrix_values(k,istate)
|
psi_bilinear_matrix(i,j,istate) = psi_bilinear_matrix_values(k,istate)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
subroutine create_wf_of_psi_svd_matrix
|
subroutine create_wf_of_psi_bilinear_matrix
|
||||||
use bitmasks
|
use bitmasks
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Matrix of wf coefficients. Outer product of alpha and beta determinants
|
! Generate a wave function containing all possible products
|
||||||
|
! of alpha and beta determinants
|
||||||
END_DOC
|
END_DOC
|
||||||
integer :: i,j,k
|
integer :: i,j,k
|
||||||
integer(bit_kind) :: tmp_det(N_int,2)
|
integer(bit_kind) :: tmp_det(N_int,2)
|
||||||
@ -437,8 +440,8 @@ subroutine create_wf_of_psi_svd_matrix
|
|||||||
idx = get_index_in_psi_det_sorted_bit(tmp_det,N_int)
|
idx = get_index_in_psi_det_sorted_bit(tmp_det,N_int)
|
||||||
if (idx > 0) then
|
if (idx > 0) then
|
||||||
do k=1,N_states
|
do k=1,N_states
|
||||||
psi_coef_sorted_bit(idx,k) = psi_svd_matrix(i,j,k)
|
psi_coef_sorted_bit(idx,k) = psi_bilinear_matrix(i,j,k)
|
||||||
norm(k) += psi_svd_matrix(i,j,k)
|
norm(k) += psi_bilinear_matrix(i,j,k)
|
||||||
enddo
|
enddo
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
@ -506,51 +509,4 @@ subroutine generate_all_alpha_beta_det_products
|
|||||||
SOFT_TOUCH psi_det psi_coef N_det
|
SOFT_TOUCH psi_det psi_coef N_det
|
||||||
end
|
end
|
||||||
|
|
||||||
BEGIN_PROVIDER [ double precision, psi_svd_alpha, (N_det_alpha_unique,N_det_alpha_unique,N_states) ]
|
|
||||||
&BEGIN_PROVIDER [ double precision, psi_svd_beta , (N_det_beta_unique,N_det_beta_unique,N_states) ]
|
|
||||||
&BEGIN_PROVIDER [ double precision, psi_svd_coefs, (N_det_beta_unique,N_states) ]
|
|
||||||
implicit none
|
|
||||||
BEGIN_DOC
|
|
||||||
! SVD wave function
|
|
||||||
END_DOC
|
|
||||||
|
|
||||||
integer :: lwork, info, istate
|
|
||||||
double precision, allocatable :: work(:), tmp(:,:), copy(:,:)
|
|
||||||
allocate (work(1),tmp(N_det_beta_unique,N_det_beta_unique), &
|
|
||||||
copy(size(psi_svd_matrix,1),size(psi_svd_matrix,2)))
|
|
||||||
|
|
||||||
do istate = 1,N_states
|
|
||||||
copy(:,:) = psi_svd_matrix(:,:,istate)
|
|
||||||
lwork=-1
|
|
||||||
call dgesvd('A','A', N_det_alpha_unique, N_det_beta_unique, &
|
|
||||||
copy, size(copy,1), &
|
|
||||||
psi_svd_coefs(1,istate), psi_svd_alpha(1,1,istate), &
|
|
||||||
size(psi_svd_alpha,1), &
|
|
||||||
tmp, size(psi_svd_beta,2), &
|
|
||||||
work, lwork, info)
|
|
||||||
lwork = work(1)
|
|
||||||
deallocate(work)
|
|
||||||
allocate(work(lwork))
|
|
||||||
call dgesvd('A','A', N_det_alpha_unique, N_det_beta_unique, &
|
|
||||||
copy, size(copy,1), &
|
|
||||||
psi_svd_coefs(1,istate), psi_svd_alpha(1,1,istate), &
|
|
||||||
size(psi_svd_alpha,1), &
|
|
||||||
tmp, size(psi_svd_beta,2), &
|
|
||||||
work, lwork, info)
|
|
||||||
deallocate(work)
|
|
||||||
if (info /= 0) then
|
|
||||||
print *, irp_here//': error in det SVD'
|
|
||||||
stop 1
|
|
||||||
endif
|
|
||||||
integer :: i,j
|
|
||||||
do j=1,N_det_beta_unique
|
|
||||||
do i=1,N_det_beta_unique
|
|
||||||
psi_svd_beta(i,j,istate) = tmp(j,i)
|
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
deallocate(tmp,copy)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
END_PROVIDER
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user