mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-12-22 20:34:58 +01:00
added check_sym
This commit is contained in:
parent
645148d74c
commit
0b3c2804a2
@ -5,6 +5,8 @@ import os
|
|||||||
keywords = """
|
keywords = """
|
||||||
check_double_excitation
|
check_double_excitation
|
||||||
copy_buffer
|
copy_buffer
|
||||||
|
filter_only_connected_to_hf_single
|
||||||
|
filter_only_connected_to_hf_double
|
||||||
declarations
|
declarations
|
||||||
decls_main
|
decls_main
|
||||||
deinit_thread
|
deinit_thread
|
||||||
@ -256,14 +258,14 @@ class H_apply(object):
|
|||||||
|
|
||||||
def filter_only_1h1p(self):
|
def filter_only_1h1p(self):
|
||||||
self["filter_only_1h1p_single"] = """
|
self["filter_only_1h1p_single"] = """
|
||||||
! ! DIR$ FORCEINLINE
|
|
||||||
if (is_a_1h1p(hole).eqv..False.) cycle
|
if (is_a_1h1p(hole).eqv..False.) cycle
|
||||||
"""
|
"""
|
||||||
self["filter_only_1h1p_double"] = """
|
self["filter_only_1h1p_double"] = """
|
||||||
! ! DIR$ FORCEINLINE
|
|
||||||
if (is_a_1h1p(key).eqv..False.) cycle
|
if (is_a_1h1p(key).eqv..False.) cycle
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def filter_only_2h2p(self):
|
def filter_only_2h2p(self):
|
||||||
self["filter_only_2h2p_single"] = """
|
self["filter_only_2h2p_single"] = """
|
||||||
! ! DIR$ FORCEINLINE
|
! ! DIR$ FORCEINLINE
|
||||||
@ -294,6 +296,16 @@ class H_apply(object):
|
|||||||
if (is_a_two_holes_two_particles(hole)) cycle
|
if (is_a_two_holes_two_particles(hole)) cycle
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def filter_only_connected_to_hf(self):
|
||||||
|
self["filter_only_connected_to_hf_single"] = """
|
||||||
|
call connected_to_hf(hole,yes_no)
|
||||||
|
if (yes_no.eqv..False.) cycle
|
||||||
|
"""
|
||||||
|
self["filter_only_connected_to_hf_double"] = """
|
||||||
|
call connected_to_hf(key,yes_no)
|
||||||
|
if (yes_no.eqv..False.) cycle
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
def set_perturbation(self,pert):
|
def set_perturbation(self,pert):
|
||||||
if self.perturbation is not None:
|
if self.perturbation is not None:
|
||||||
|
@ -53,7 +53,11 @@ subroutine run
|
|||||||
implicit none
|
implicit none
|
||||||
integer :: i
|
integer :: i
|
||||||
|
|
||||||
call H_apply_cisd
|
if(pseudo_sym)then
|
||||||
|
call H_apply_cisd_sym
|
||||||
|
else
|
||||||
|
call H_apply_cisd
|
||||||
|
endif
|
||||||
print *, 'N_det = ', N_det
|
print *, 'N_det = ', N_det
|
||||||
print*,'******************************'
|
print*,'******************************'
|
||||||
print *, 'Energies of the states:'
|
print *, 'Energies of the states:'
|
||||||
|
@ -5,5 +5,9 @@ BEGIN_SHELL [ /usr/bin/env python2 ]
|
|||||||
from generate_h_apply import H_apply
|
from generate_h_apply import H_apply
|
||||||
H = H_apply("cisd",do_double_exc=True)
|
H = H_apply("cisd",do_double_exc=True)
|
||||||
print H
|
print H
|
||||||
|
|
||||||
|
H = H_apply("cisd_sym",do_double_exc=True)
|
||||||
|
H.filter_only_connected_to_hf()
|
||||||
|
print H
|
||||||
END_SHELL
|
END_SHELL
|
||||||
|
|
||||||
|
@ -89,3 +89,16 @@ doc: Weight of the states in state-average calculations.
|
|||||||
interface: ezfio
|
interface: ezfio
|
||||||
size: (determinants.n_states)
|
size: (determinants.n_states)
|
||||||
|
|
||||||
|
|
||||||
|
[thresh_sym]
|
||||||
|
type: Threshold
|
||||||
|
doc: Thresholds to check if a determinant is connected with HF
|
||||||
|
interface: ezfio,provider,ocaml
|
||||||
|
default: 1.e-15
|
||||||
|
|
||||||
|
[pseudo_sym]
|
||||||
|
type: logical
|
||||||
|
doc: If |true|, discard any Slater determinants with an interaction smaller than thresh_sym with HF.
|
||||||
|
interface: ezfio,provider,ocaml
|
||||||
|
default: False
|
||||||
|
|
||||||
|
@ -150,6 +150,7 @@ subroutine $subroutine_diexcOrg(key_in,key_mask,hole_1,particl_1,hole_2, particl
|
|||||||
logical :: is_a_2h1p
|
logical :: is_a_2h1p
|
||||||
logical :: is_a_2h
|
logical :: is_a_2h
|
||||||
logical :: b_cycle
|
logical :: b_cycle
|
||||||
|
logical :: yes_no
|
||||||
check_double_excitation = .True.
|
check_double_excitation = .True.
|
||||||
iproc = iproc_in
|
iproc = iproc_in
|
||||||
|
|
||||||
@ -284,6 +285,7 @@ subroutine $subroutine_diexcOrg(key_in,key_mask,hole_1,particl_1,hole_2, particl
|
|||||||
$only_1h_double
|
$only_1h_double
|
||||||
$only_1p_double
|
$only_1p_double
|
||||||
$only_2h1p_double
|
$only_2h1p_double
|
||||||
|
$filter_only_connected_to_hf_double
|
||||||
key_idx += 1
|
key_idx += 1
|
||||||
do k=1,N_int
|
do k=1,N_int
|
||||||
keys_out(k,1,key_idx) = key(k,1)
|
keys_out(k,1,key_idx) = key(k,1)
|
||||||
@ -339,6 +341,7 @@ subroutine $subroutine_diexcOrg(key_in,key_mask,hole_1,particl_1,hole_2, particl
|
|||||||
$only_1h_double
|
$only_1h_double
|
||||||
$only_1p_double
|
$only_1p_double
|
||||||
$only_2h1p_double
|
$only_2h1p_double
|
||||||
|
$filter_only_connected_to_hf_double
|
||||||
key_idx += 1
|
key_idx += 1
|
||||||
do k=1,N_int
|
do k=1,N_int
|
||||||
keys_out(k,1,key_idx) = key(k,1)
|
keys_out(k,1,key_idx) = key(k,1)
|
||||||
@ -412,6 +415,7 @@ subroutine $subroutine_monoexc(key_in, hole_1,particl_1,fock_diag_tmp,i_generato
|
|||||||
logical :: is_a_1h
|
logical :: is_a_1h
|
||||||
logical :: is_a_1p
|
logical :: is_a_1p
|
||||||
logical :: is_a_2p
|
logical :: is_a_2p
|
||||||
|
logical :: yes_no
|
||||||
|
|
||||||
do k=1,N_int
|
do k=1,N_int
|
||||||
key_mask(k,1) = 0_bit_kind
|
key_mask(k,1) = 0_bit_kind
|
||||||
@ -493,6 +497,7 @@ subroutine $subroutine_monoexc(key_in, hole_1,particl_1,fock_diag_tmp,i_generato
|
|||||||
$filter_only_1h1p_single
|
$filter_only_1h1p_single
|
||||||
$filter_only_1h2p_single
|
$filter_only_1h2p_single
|
||||||
$filter_only_2h2p_single
|
$filter_only_2h2p_single
|
||||||
|
$filter_only_connected_to_hf_single
|
||||||
key_idx += 1
|
key_idx += 1
|
||||||
do k=1,N_int
|
do k=1,N_int
|
||||||
keys_out(k,1,key_idx) = hole(k,1)
|
keys_out(k,1,key_idx) = hole(k,1)
|
||||||
|
@ -2257,3 +2257,38 @@ subroutine i_H_j_double_alpha_beta(key_i,key_j,Nint,hij)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
subroutine connected_to_hf(key_i,yes_no)
|
||||||
|
implicit none
|
||||||
|
use bitmasks
|
||||||
|
integer(bit_kind), intent(in) :: key_i(N_int,2)
|
||||||
|
logical , intent(out) :: yes_no
|
||||||
|
double precision :: hij,phase
|
||||||
|
integer :: exc(0:2,2,2)
|
||||||
|
integer :: degree
|
||||||
|
integer :: m,p
|
||||||
|
yes_no = .True.
|
||||||
|
call get_excitation_degree(ref_bitmask,key_i,degree,N_int)
|
||||||
|
if(degree == 2)then
|
||||||
|
call i_H_j(ref_bitmask,key_i,N_int,hij)
|
||||||
|
if(dabs(hij) .lt. thresh_sym)then
|
||||||
|
yes_no = .False.
|
||||||
|
endif
|
||||||
|
else if(degree == 1)then
|
||||||
|
call get_single_excitation(ref_bitmask,key_i,exc,phase,N_int)
|
||||||
|
! Single alpha
|
||||||
|
if (exc(0,1,1) == 1) then
|
||||||
|
m = exc(1,1,1)
|
||||||
|
p = exc(1,2,1)
|
||||||
|
! Single beta
|
||||||
|
else
|
||||||
|
m = exc(1,1,2)
|
||||||
|
p = exc(1,2,2)
|
||||||
|
endif
|
||||||
|
hij = mo_one_e_integrals(m,p)
|
||||||
|
if(dabs(hij) .lt. thresh_sym)then
|
||||||
|
yes_no = .False.
|
||||||
|
endif
|
||||||
|
else if(degree == 0)then
|
||||||
|
yes_no = .True.
|
||||||
|
endif
|
||||||
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user