mirror of
https://github.com/LCPQ/quantum_package
synced 2024-12-22 12:23:48 +01:00
Cleaning
This commit is contained in:
parent
c9cf03479a
commit
6882c915d8
2
configure
vendored
2
configure
vendored
@ -102,7 +102,7 @@ curl = Info(
|
||||
default_path=join(QP_ROOT_BIN, "curl"))
|
||||
|
||||
zlib = Info(
|
||||
url='http://www.zlib.net/fossils/zlib-1.2.11.tar.gz',
|
||||
url='http://www.zlib.net/zlib-1.2.11.tar.gz',
|
||||
description=' zlib',
|
||||
default_path=join(QP_ROOT_LIB, "libz.a"))
|
||||
|
||||
|
23
plugins/Alavi/.gitignore
vendored
23
plugins/Alavi/.gitignore
vendored
@ -1,23 +0,0 @@
|
||||
# Automatically created by $QP_ROOT/scripts/module/module_handler.py
|
||||
.ninja_deps
|
||||
.ninja_log
|
||||
AO_Basis
|
||||
Bitmask
|
||||
Determinants
|
||||
Electrons
|
||||
Ezfio_files
|
||||
IRPF90_man
|
||||
IRPF90_temp
|
||||
Integrals_Bielec
|
||||
Integrals_Monoelec
|
||||
MO_Basis
|
||||
Makefile
|
||||
Makefile.depend
|
||||
Nuclei
|
||||
Pseudo
|
||||
Utils
|
||||
alavi_graph
|
||||
ezfio_interface.irp.f
|
||||
irpf90.make
|
||||
irpf90_entities
|
||||
tags
|
@ -1 +0,0 @@
|
||||
Determinants
|
@ -1,23 +0,0 @@
|
||||
=====
|
||||
alavi
|
||||
=====
|
||||
|
||||
Documentation
|
||||
=============
|
||||
|
||||
.. Do not edit this section. It was auto-generated from the
|
||||
.. by the `update_README.py` script.
|
||||
|
||||
`alavi_graph <http://github.com/LCPQ/quantum_package/tree/master/src/Alavi/alavi_graph.irp.f#L1>`_
|
||||
Undocumented
|
||||
|
||||
Needed Modules
|
||||
==============
|
||||
|
||||
.. Do not edit this section. It was auto-generated from the
|
||||
.. by the `update_README.py` script.
|
||||
|
||||
.. image:: tree_dependency.png
|
||||
|
||||
* `Determinants <http://github.com/LCPQ/quantum_package/tree/master/src/Determinants>`_
|
||||
|
@ -1,28 +0,0 @@
|
||||
program alavi_graph
|
||||
implicit none
|
||||
integer :: exc(0:2,2,2),h1,p1,h2,p2,s1,s2
|
||||
double precision :: phase
|
||||
|
||||
read_wf = .True.
|
||||
touch read_wf
|
||||
|
||||
integer :: k,degree
|
||||
double precision :: hii
|
||||
|
||||
do k=1,N_det
|
||||
call get_excitation_degree(psi_det(1,1,1),psi_det(1,1,k),degree,N_int)
|
||||
call i_H_j(psi_det(1,1,k),psi_det(1,1,k),N_int,hii)
|
||||
print*, k,abs(psi_coef(k,1)), hii,degree
|
||||
|
||||
! if (degree == 2) then
|
||||
! call get_excitation(psi_det(1,1,1),psi_det(1,1,k),exc,degree,phase,N_int)
|
||||
! call decode_exc(exc,degree,h1,p1,h2,p2,s1,s2)
|
||||
! print*, h1,h2,hii, abs(psi_coef(k,1))
|
||||
! endif
|
||||
!
|
||||
|
||||
|
||||
enddo
|
||||
end
|
||||
|
||||
!plot "test.dat" u (abs($2)):(abs($3)):4 w p palette
|
Binary file not shown.
Before Width: | Height: | Size: 63 KiB |
@ -5,7 +5,7 @@ subroutine save_casino
|
||||
integer :: getUnitAndOpen, iunit
|
||||
integer, allocatable :: itmp(:)
|
||||
integer :: n_ao_new
|
||||
real, allocatable :: rtmp(:)
|
||||
double precision, allocatable :: rtmp(:)
|
||||
PROVIDE ezfio_filename
|
||||
|
||||
iunit = getUnitAndOpen('gwfn.data','w')
|
||||
|
@ -217,7 +217,7 @@ subroutine pt2_collector(b, tbc, comb, Ncomb, computed, pt2_detail, sumabove, su
|
||||
actually_computed(tbc(i)) = .false.
|
||||
end do
|
||||
|
||||
orgTBDcomb = Nabove(1)
|
||||
orgTBDcomb = int(Nabove(1))
|
||||
firstTBDcomb = 1
|
||||
|
||||
zmq_to_qp_run_socket = new_zmq_to_qp_run_socket()
|
||||
@ -264,7 +264,7 @@ subroutine pt2_collector(b, tbc, comb, Ncomb, computed, pt2_detail, sumabove, su
|
||||
|
||||
double precision :: E0, avg, eqt, prop
|
||||
call do_carlo(tbc, Ncomb+1-firstTBDcomb, comb(firstTBDcomb), pt2_detail, actually_computed, sumabove, sum2above, Nabove)
|
||||
firstTBDcomb = Nabove(1) - orgTBDcomb + 1
|
||||
firstTBDcomb = int(Nabove(1)) - orgTBDcomb + 1
|
||||
if(Nabove(1) < 2d0) cycle
|
||||
call get_first_tooth(actually_computed, tooth)
|
||||
|
||||
|
29
plugins/Psiref_threshold/.gitignore
vendored
29
plugins/Psiref_threshold/.gitignore
vendored
@ -1,29 +0,0 @@
|
||||
# Automatically created by $QP_ROOT/scripts/module/module_handler.py
|
||||
.ninja_deps
|
||||
.ninja_log
|
||||
AO_Basis
|
||||
Bitmask
|
||||
Determinants
|
||||
Electrons
|
||||
Ezfio_files
|
||||
Generators_full
|
||||
Hartree_Fock
|
||||
IRPF90_man
|
||||
IRPF90_temp
|
||||
Integrals_Bielec
|
||||
Integrals_Monoelec
|
||||
MOGuess
|
||||
MO_Basis
|
||||
Makefile
|
||||
Makefile.depend
|
||||
Nuclei
|
||||
Perturbation
|
||||
Properties
|
||||
Pseudo
|
||||
Selectors_full
|
||||
Utils
|
||||
ezfio_interface.irp.f
|
||||
irpf90.make
|
||||
irpf90_entities
|
||||
mrcc_general
|
||||
tags
|
@ -1 +0,0 @@
|
||||
Psiref_Utils
|
@ -1,24 +0,0 @@
|
||||
=======================
|
||||
Psiref_threshold Module
|
||||
=======================
|
||||
|
||||
|
||||
Reference wave function is defined as all determinants with coefficients
|
||||
such that | c_i/c_max | > threshold.
|
||||
|
||||
Documentation
|
||||
=============
|
||||
|
||||
.. Do not edit this section. It was auto-generated from the
|
||||
.. by the `update_README.py` script.
|
||||
|
||||
Needed Modules
|
||||
==============
|
||||
|
||||
.. Do not edit this section. It was auto-generated from the
|
||||
.. by the `update_README.py` script.
|
||||
|
||||
.. image:: tree_dependency.png
|
||||
|
||||
* `Psiref_Utils <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils>`_
|
||||
|
@ -1,66 +0,0 @@
|
||||
use bitmasks
|
||||
|
||||
! BEGIN_PROVIDER [ integer(bit_kind), psi_ref, (N_int,2,psi_det_size) ]
|
||||
!&BEGIN_PROVIDER [ double precision, psi_ref_coef, (psi_det_size,n_states) ]
|
||||
!&BEGIN_PROVIDER [ integer, idx_ref, (psi_det_size) ]
|
||||
!&BEGIN_PROVIDER [ integer, N_det_ref ]
|
||||
! implicit none
|
||||
! BEGIN_DOC
|
||||
! ! Reference wave function, defined as determinants with amplitudes > 0.05
|
||||
! ! idx_ref gives the indice of the ref determinant in psi_det.
|
||||
! END_DOC
|
||||
! integer :: i, k, l
|
||||
! logical :: good
|
||||
! double precision, parameter :: threshold=0.01d0
|
||||
! double precision :: t(N_states)
|
||||
! N_det_ref = 0
|
||||
! do l = 1, N_states
|
||||
! t(l) = threshold * abs_psi_coef_max(l)
|
||||
! enddo
|
||||
! do i=1,N_det
|
||||
! good = .False.
|
||||
! do l=1, N_states
|
||||
! psi_ref_coef(i,l) = 0.d0
|
||||
! good = good.or.(dabs(psi_coef(i,l)) > t(l))
|
||||
! enddo
|
||||
! if (good) then
|
||||
! N_det_ref = N_det_ref+1
|
||||
! do k=1,N_int
|
||||
! psi_ref(k,1,N_det_ref) = psi_det(k,1,i)
|
||||
! psi_ref(k,2,N_det_ref) = psi_det(k,2,i)
|
||||
! enddo
|
||||
! idx_ref(N_det_ref) = i
|
||||
! do k=1,N_states
|
||||
! psi_ref_coef(N_det_ref,k) = psi_coef(i,k)
|
||||
! enddo
|
||||
! endif
|
||||
! enddo
|
||||
! call write_int(output_determinants,N_det_ref, 'Number of determinants in the reference')
|
||||
!
|
||||
!END_PROVIDER
|
||||
|
||||
BEGIN_PROVIDER [ integer(bit_kind), psi_ref, (N_int,2,psi_det_size) ]
|
||||
&BEGIN_PROVIDER [ double precision, psi_ref_coef, (psi_det_size,n_states) ]
|
||||
&BEGIN_PROVIDER [ integer, idx_ref, (psi_det_size) ]
|
||||
&BEGIN_PROVIDER [ integer, N_det_ref ]
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! Reference wave function, defined as determinants with amplitudes > 0.05
|
||||
! idx_ref gives the indice of the ref determinant in psi_det.
|
||||
END_DOC
|
||||
integer :: i, k, l
|
||||
double precision, parameter :: threshold=0.01d0
|
||||
|
||||
call find_reference(threshold, N_det_ref, idx_ref)
|
||||
do l=1,N_states
|
||||
do i=1,N_det_ref
|
||||
psi_ref_coef(i,l) = psi_coef(idx_ref(i), l)
|
||||
enddo
|
||||
enddo
|
||||
do i=1,N_det_ref
|
||||
psi_ref(:,:,i) = psi_det(:,:,idx_ref(i))
|
||||
enddo
|
||||
call write_int(output_determinants,N_det_ref, 'Number of determinants in the reference')
|
||||
|
||||
END_PROVIDER
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 8.3 KiB |
@ -1,33 +0,0 @@
|
||||
[lambda_type]
|
||||
type: Positive_int
|
||||
doc: lambda type
|
||||
interface: ezfio,provider,ocaml
|
||||
default: 0
|
||||
|
||||
[energy]
|
||||
type: double precision
|
||||
doc: Calculated energy
|
||||
interface: ezfio
|
||||
|
||||
[energy_pt2]
|
||||
type: double precision
|
||||
doc: Calculated energy with PT2 contribution
|
||||
interface: ezfio
|
||||
|
||||
[energy]
|
||||
type: double precision
|
||||
doc: Calculated energy
|
||||
interface: ezfio
|
||||
|
||||
[thresh_dressed_ci]
|
||||
type: Threshold
|
||||
doc: Threshold on the convergence of the dressed CI energy
|
||||
interface: ezfio,provider,ocaml
|
||||
default: 1.e-5
|
||||
|
||||
[n_it_max_dressed_ci]
|
||||
type: Strictly_positive_int
|
||||
doc: Maximum number of dressed CI iterations
|
||||
interface: ezfio,provider,ocaml
|
||||
default: 10
|
||||
|
@ -1 +0,0 @@
|
||||
Perturbation Selectors_full Generators_full Psiref_threshold MRCC_Utils ZMQ
|
@ -1,12 +0,0 @@
|
||||
=======
|
||||
mrcepa0
|
||||
=======
|
||||
|
||||
Needed Modules
|
||||
==============
|
||||
.. Do not edit this section It was auto-generated
|
||||
.. by the `update_README.py` script.
|
||||
Documentation
|
||||
=============
|
||||
.. Do not edit this section It was auto-generated
|
||||
.. by the `update_README.py` script.
|
File diff suppressed because it is too large
Load Diff
@ -1,601 +0,0 @@
|
||||
subroutine mrsc2_dressing_slave_tcp(i)
|
||||
implicit none
|
||||
integer, intent(in) :: i
|
||||
BEGIN_DOC
|
||||
! Task for parallel MR-SC2
|
||||
END_DOC
|
||||
call mrsc2_dressing_slave(0,i)
|
||||
end
|
||||
|
||||
|
||||
subroutine mrsc2_dressing_slave_inproc(i)
|
||||
implicit none
|
||||
integer, intent(in) :: i
|
||||
BEGIN_DOC
|
||||
! Task for parallel MR-SC2
|
||||
END_DOC
|
||||
call mrsc2_dressing_slave(1,i)
|
||||
end
|
||||
|
||||
subroutine mrsc2_dressing_slave(thread,iproc)
|
||||
use f77_zmq
|
||||
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! Task for parallel MR-SC2
|
||||
END_DOC
|
||||
integer, intent(in) :: thread, iproc
|
||||
! integer :: j,l
|
||||
integer :: rc
|
||||
|
||||
integer :: worker_id, task_id
|
||||
character*(512) :: task
|
||||
|
||||
integer(ZMQ_PTR),external :: new_zmq_to_qp_run_socket
|
||||
integer(ZMQ_PTR) :: zmq_to_qp_run_socket
|
||||
|
||||
integer(ZMQ_PTR), external :: new_zmq_push_socket
|
||||
integer(ZMQ_PTR) :: zmq_socket_push
|
||||
|
||||
double precision, allocatable :: delta(:,:,:), delta_s2(:,:,:)
|
||||
|
||||
|
||||
|
||||
integer :: i_state, i, i_I, J, k, k2, k1, kk, ll, degree, degree2, m, l, deg, ni, m2
|
||||
integer :: n(2)
|
||||
integer :: p1,p2,h1,h2,s1,s2, blok, I_s, J_s, kn
|
||||
logical :: ok
|
||||
double precision :: phase_iI, phase_Ik, phase_Jl, phase_Ji, phase_al
|
||||
double precision :: diI, hIi, hJi, delta_JI, dkI, HkI, ci_inv(N_states), cj_inv(N_states)
|
||||
double precision :: contrib, contrib_s2, wall, iwall
|
||||
double precision, allocatable :: dleat(:,:,:), dleat_s2(:,:,:)
|
||||
integer, dimension(0:2,2,2) :: exc_iI, exc_Ik, exc_IJ
|
||||
integer(bit_kind) :: det_tmp(N_int, 2), det_tmp2(N_int, 2), inac, virt
|
||||
integer, external :: get_index_in_psi_det_sorted_bit, searchDet, detCmp
|
||||
logical, external :: is_in_wavefunction, isInCassd, detEq
|
||||
integer,allocatable :: komon(:)
|
||||
logical :: komoned
|
||||
!double precision, external :: get_dij
|
||||
|
||||
zmq_to_qp_run_socket = new_zmq_to_qp_run_socket()
|
||||
zmq_socket_push = new_zmq_push_socket(thread)
|
||||
|
||||
call connect_to_taskserver(zmq_to_qp_run_socket,worker_id,thread)
|
||||
|
||||
allocate (dleat(N_states, N_det_non_ref, 2), delta(N_states,0:N_det_non_ref, 2))
|
||||
allocate (dleat_s2(N_states, N_det_non_ref, 2), delta_s2(N_states,0:N_det_non_ref, 2))
|
||||
allocate(komon(0:N_det_non_ref))
|
||||
|
||||
do
|
||||
call get_task_from_taskserver(zmq_to_qp_run_socket,worker_id, task_id, task)
|
||||
if (task_id == 0) exit
|
||||
read (task,*) i_I, J, k1, k2
|
||||
do i_state=1, N_states
|
||||
ci_inv(i_state) = 1.d0 / psi_ref_coef(i_I,i_state)
|
||||
cj_inv(i_state) = 1.d0 / psi_ref_coef(J,i_state)
|
||||
end do
|
||||
n = 0
|
||||
delta(:,0,:) = 0d0
|
||||
delta(:,:nlink(J),1) = 0d0
|
||||
delta(:,:nlink(i_I),2) = 0d0
|
||||
delta_s2(:,0,:) = 0d0
|
||||
delta_s2(:,:nlink(J),1) = 0d0
|
||||
delta_s2(:,:nlink(i_I),2) = 0d0
|
||||
komon(0) = 0
|
||||
komoned = .false.
|
||||
|
||||
|
||||
|
||||
|
||||
do kk = k1, k2
|
||||
k = det_cepa0_idx(linked(kk, i_I))
|
||||
blok = blokMwen(kk, i_I)
|
||||
|
||||
call get_excitation(psi_ref(1,1,i_I),psi_non_ref(1,1,k),exc_Ik,degree,phase_Ik,N_int)
|
||||
|
||||
if(J /= i_I) then
|
||||
call apply_excitation(psi_ref(1,1,J),exc_Ik,det_tmp2,ok,N_int)
|
||||
if(.not. ok) cycle
|
||||
|
||||
l = searchDet(det_cepa0(1,1,cepa0_shortcut(blok)), det_tmp2, cepa0_shortcut(blok+1)-cepa0_shortcut(blok), N_int)
|
||||
if(l == -1) cycle
|
||||
ll = cepa0_shortcut(blok)-1+l
|
||||
l = det_cepa0_idx(ll)
|
||||
ll = child_num(ll, J)
|
||||
else
|
||||
l = k
|
||||
ll = kk
|
||||
end if
|
||||
|
||||
|
||||
if(.not. komoned) then
|
||||
m = 0
|
||||
m2 = 0
|
||||
|
||||
do while(m < nlink(i_I) .and. m2 < nlink(J))
|
||||
m += 1
|
||||
m2 += 1
|
||||
if(linked(m, i_I) < linked(m2, J)) then
|
||||
m2 -= 1
|
||||
cycle
|
||||
else if(linked(m, i_I) > linked(m2, J)) then
|
||||
m -= 1
|
||||
cycle
|
||||
end if
|
||||
i = det_cepa0_idx(linked(m, i_I))
|
||||
|
||||
if(h_cache(J,i) == 0.d0) cycle
|
||||
if(h_cache(i_I,i) == 0.d0) cycle
|
||||
|
||||
komon(0) += 1
|
||||
kn = komon(0)
|
||||
komon(kn) = i
|
||||
|
||||
do i_state = 1,N_states
|
||||
dkI = h_cache(J,i) * dij(i_I, i, i_state)
|
||||
dleat(i_state, kn, 1) = dkI
|
||||
dleat(i_state, kn, 2) = dkI
|
||||
|
||||
dkI = s2_cache(J,i) * dij(i_I, i, i_state)
|
||||
dleat_s2(i_state, kn, 1) = dkI
|
||||
dleat_s2(i_state, kn, 2) = dkI
|
||||
end do
|
||||
|
||||
end do
|
||||
|
||||
komoned = .true.
|
||||
end if
|
||||
|
||||
integer :: hpmin(2)
|
||||
hpmin(1) = 2 - HP(1,k)
|
||||
hpmin(2) = 2 - HP(2,k)
|
||||
|
||||
do m = 1, komon(0)
|
||||
|
||||
i = komon(m)
|
||||
if(HP(1,i) <= hpmin(1) .and. HP(2,i) <= hpmin(2) ) then
|
||||
cycle
|
||||
end if
|
||||
|
||||
call apply_excitation(psi_non_ref(1,1,i),exc_Ik,det_tmp,ok,N_int)
|
||||
if(.not. ok) cycle
|
||||
|
||||
do i_state = 1, N_states
|
||||
contrib = dij(i_I, k, i_state) * dleat(i_state, m, 2)
|
||||
contrib_s2 = dij(i_I, k, i_state) * dleat_s2(i_state, m, 2)
|
||||
delta(i_state,ll,1) += contrib
|
||||
delta_s2(i_state,ll,1) += contrib_s2
|
||||
if(dabs(psi_ref_coef(i_I,i_state)).ge.5.d-5) then
|
||||
delta(i_state,0,1) -= contrib * ci_inv(i_state) * psi_non_ref_coef(l,i_state)
|
||||
delta_s2(i_state,0,1) -= contrib_s2 * ci_inv(i_state) * psi_non_ref_coef(l,i_state)
|
||||
endif
|
||||
|
||||
if(I_i == J) cycle
|
||||
contrib = dij(J, l, i_state) * dleat(i_state, m, 1)
|
||||
contrib_s2 = dij(J, l, i_state) * dleat_s2(i_state, m, 1)
|
||||
delta(i_state,kk,2) += contrib
|
||||
delta_s2(i_state,kk,2) += contrib_s2
|
||||
if(dabs(psi_ref_coef(J,i_state)).ge.5.d-5) then
|
||||
delta(i_state,0,2) -= contrib * cj_inv(i_state) * psi_non_ref_coef(k,i_state)
|
||||
delta_s2(i_state,0,2) -= contrib_s2 * cj_inv(i_state) * psi_non_ref_coef(k,i_state)
|
||||
end if
|
||||
enddo !i_state
|
||||
end do ! while
|
||||
end do ! kk
|
||||
|
||||
|
||||
call push_mrsc2_results(zmq_socket_push, I_i, J, delta, delta_s2, task_id)
|
||||
call task_done_to_taskserver(zmq_to_qp_run_socket,worker_id,task_id)
|
||||
|
||||
! end if
|
||||
|
||||
enddo
|
||||
|
||||
deallocate(delta)
|
||||
|
||||
call disconnect_from_taskserver(zmq_to_qp_run_socket,zmq_socket_push,worker_id)
|
||||
call end_zmq_to_qp_run_socket(zmq_to_qp_run_socket)
|
||||
call end_zmq_push_socket(zmq_socket_push,thread)
|
||||
|
||||
end
|
||||
|
||||
|
||||
subroutine push_mrsc2_results(zmq_socket_push, I_i, J, delta, delta_s2, task_id)
|
||||
use f77_zmq
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! Push integrals in the push socket
|
||||
END_DOC
|
||||
|
||||
integer, intent(in) :: i_I, J
|
||||
integer(ZMQ_PTR), intent(in) :: zmq_socket_push
|
||||
double precision,intent(inout) :: delta(N_states, 0:N_det_non_ref, 2)
|
||||
double precision,intent(inout) :: delta_s2(N_states, 0:N_det_non_ref, 2)
|
||||
integer, intent(in) :: task_id
|
||||
integer :: rc , i_state, i, kk, li
|
||||
integer,allocatable :: idx(:,:)
|
||||
integer :: n(2)
|
||||
logical :: ok
|
||||
|
||||
allocate(idx(N_det_non_ref,2))
|
||||
rc = f77_zmq_send( zmq_socket_push, i_I, 4, ZMQ_SNDMORE)
|
||||
if (rc /= 4) then
|
||||
print *, irp_here, 'f77_zmq_send( zmq_socket_push, i_I, 4, ZMQ_SNDMORE)'
|
||||
stop 'error'
|
||||
endif
|
||||
|
||||
rc = f77_zmq_send( zmq_socket_push, J, 4, ZMQ_SNDMORE)
|
||||
if (rc /= 4) then
|
||||
print *, irp_here, 'f77_zmq_send( zmq_socket_push, J, 4, ZMQ_SNDMORE)'
|
||||
stop 'error'
|
||||
endif
|
||||
|
||||
|
||||
do kk=1,2
|
||||
n(kk)=0
|
||||
if(kk == 1) li = nlink(j)
|
||||
if(kk == 2) li = nlink(i_I)
|
||||
do i=1, li
|
||||
ok = .false.
|
||||
do i_state=1,N_states
|
||||
if(delta(i_state, i, kk) /= 0d0) then
|
||||
ok = .true.
|
||||
exit
|
||||
end if
|
||||
end do
|
||||
|
||||
if(ok) then
|
||||
n(kk) += 1
|
||||
! idx(n,kk) = i
|
||||
if(kk == 1) then
|
||||
idx(n(1),1) = det_cepa0_idx(linked(i, J))
|
||||
else
|
||||
idx(n(2),2) = det_cepa0_idx(linked(i, i_I))
|
||||
end if
|
||||
|
||||
do i_state=1, N_states
|
||||
delta(i_state, n(kk), kk) = delta(i_state, i, kk)
|
||||
end do
|
||||
end if
|
||||
end do
|
||||
|
||||
rc = f77_zmq_send( zmq_socket_push, n(kk), 4, ZMQ_SNDMORE)
|
||||
if (rc /= 4) then
|
||||
print *, irp_here, 'f77_zmq_send( zmq_socket_push, n, 4, ZMQ_SNDMORE)'
|
||||
stop 'error'
|
||||
endif
|
||||
|
||||
if(n(kk) /= 0) then
|
||||
rc = f77_zmq_send( zmq_socket_push, delta(1,0,kk), (n(kk)+1)*8*N_states, ZMQ_SNDMORE) ! delta(1,0,1) = delta_I delta(1,0,2) = delta_J
|
||||
if (rc /= (n(kk)+1)*8*N_states) then
|
||||
print *, irp_here, 'f77_zmq_send( zmq_socket_push, delta, (n(kk)+1)*8*N_states, ZMQ_SNDMORE)'
|
||||
stop 'error'
|
||||
endif
|
||||
|
||||
rc = f77_zmq_send( zmq_socket_push, delta_s2(1,0,kk), (n(kk)+1)*8*N_states, ZMQ_SNDMORE) ! delta_s2(1,0,1) = delta_I delta_s2(1,0,2) = delta_J
|
||||
if (rc /= (n(kk)+1)*8*N_states) then
|
||||
print *, irp_here, 'f77_zmq_send( zmq_socket_push, delta_s2, (n(kk)+1)*8*N_states, ZMQ_SNDMORE)'
|
||||
stop 'error'
|
||||
endif
|
||||
|
||||
rc = f77_zmq_send( zmq_socket_push, idx(1,kk), n(kk)*4, ZMQ_SNDMORE)
|
||||
if (rc /= n(kk)*4) then
|
||||
print *, irp_here, 'f77_zmq_send( zmq_socket_push, delta, 8*n(kk), ZMQ_SNDMORE)'
|
||||
stop 'error'
|
||||
endif
|
||||
end if
|
||||
end do
|
||||
|
||||
|
||||
rc = f77_zmq_send( zmq_socket_push, task_id, 4, 0)
|
||||
if (rc /= 4) then
|
||||
print *, irp_here, 'f77_zmq_send( zmq_socket_push, task_id, 4, 0)'
|
||||
stop 'error'
|
||||
endif
|
||||
|
||||
! ! Activate is zmq_socket_push is a REQ
|
||||
integer :: idummy
|
||||
rc = f77_zmq_recv( zmq_socket_push, idummy, 4, 0)
|
||||
if (rc /= 4) then
|
||||
print *, irp_here, 'f77_zmq_send( zmq_socket_push, idummy, 4, 0)'
|
||||
stop 'error'
|
||||
endif
|
||||
end
|
||||
|
||||
|
||||
|
||||
subroutine pull_mrsc2_results(zmq_socket_pull, I_i, J, n, idx, delta, delta_s2, task_id)
|
||||
use f77_zmq
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! Push integrals in the push socket
|
||||
END_DOC
|
||||
|
||||
integer(ZMQ_PTR), intent(in) :: zmq_socket_pull
|
||||
integer, intent(out) :: i_I, J, n(2)
|
||||
double precision, intent(inout) :: delta(N_states, 0:N_det_non_ref, 2)
|
||||
double precision, intent(inout) :: delta_s2(N_states, 0:N_det_non_ref, 2)
|
||||
integer, intent(out) :: task_id
|
||||
integer :: rc , i, kk
|
||||
integer,intent(inout) :: idx(N_det_non_ref,2)
|
||||
logical :: ok
|
||||
|
||||
rc = f77_zmq_recv( zmq_socket_pull, i_I, 4, ZMQ_SNDMORE)
|
||||
if (rc /= 4) then
|
||||
print *, irp_here, 'f77_zmq_recv( zmq_socket_pull, i_I, 4, ZMQ_SNDMORE)'
|
||||
stop 'error'
|
||||
endif
|
||||
|
||||
rc = f77_zmq_recv( zmq_socket_pull, J, 4, ZMQ_SNDMORE)
|
||||
if (rc /= 4) then
|
||||
print *, irp_here, 'f77_zmq_recv( zmq_socket_pull, J, 4, ZMQ_SNDMORE)'
|
||||
stop 'error'
|
||||
endif
|
||||
|
||||
do kk = 1, 2
|
||||
rc = f77_zmq_recv( zmq_socket_pull, n(kk), 4, ZMQ_SNDMORE)
|
||||
if (rc /= 4) then
|
||||
print *, irp_here, 'f77_zmq_recv( zmq_socket_pull, n, 4, ZMQ_SNDMORE)'
|
||||
stop 'error'
|
||||
endif
|
||||
|
||||
if(n(kk) /= 0) then
|
||||
rc = f77_zmq_recv( zmq_socket_pull, delta(1,0,kk), (n(kk)+1)*8*N_states, ZMQ_SNDMORE)
|
||||
if (rc /= (n(kk)+1)*8*N_states) then
|
||||
print *, irp_here, 'f77_zmq_recv( zmq_socket_pull, delta, (n(kk)+1)*8*N_states, ZMQ_SNDMORE)'
|
||||
stop 'error'
|
||||
endif
|
||||
|
||||
rc = f77_zmq_recv( zmq_socket_pull, delta_s2(1,0,kk), (n(kk)+1)*8*N_states, ZMQ_SNDMORE)
|
||||
if (rc /= (n(kk)+1)*8*N_states) then
|
||||
print *, irp_here, 'f77_zmq_recv( zmq_socket_pull, delta_s2, (n(kk)+1)*8*N_states, ZMQ_SNDMORE)'
|
||||
stop 'error'
|
||||
endif
|
||||
|
||||
rc = f77_zmq_recv( zmq_socket_pull, idx(1,kk), n(kk)*4, ZMQ_SNDMORE)
|
||||
if (rc /= n(kk)*4) then
|
||||
print *, irp_here, 'f77_zmq_recv( zmq_socket_pull, idx(1,kk), n(kk)*4, ZMQ_SNDMORE)'
|
||||
stop 'error'
|
||||
endif
|
||||
end if
|
||||
end do
|
||||
|
||||
rc = f77_zmq_recv( zmq_socket_pull, task_id, 4, 0)
|
||||
if (rc /= 4) then
|
||||
print *, irp_here, 'f77_zmq_recv( zmq_socket_pull, task_id, 4, 0)'
|
||||
stop 'error'
|
||||
endif
|
||||
|
||||
|
||||
! ! Activate is zmq_socket_pull is a REP
|
||||
integer :: idummy
|
||||
rc = f77_zmq_send( zmq_socket_pull, idummy, 4, 0)
|
||||
if (rc /= 4) then
|
||||
print *, irp_here, 'f77_zmq_send( zmq_socket_pull, idummy, 4, 0)'
|
||||
stop 'error'
|
||||
endif
|
||||
end
|
||||
|
||||
|
||||
|
||||
subroutine mrsc2_dressing_collector(delta_ii_,delta_ij_,delta_ii_s2_,delta_ij_s2_)
|
||||
use f77_zmq
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! Collects results from the AO integral calculation
|
||||
END_DOC
|
||||
|
||||
double precision,intent(inout) :: delta_ij_(N_states,N_det_non_ref,N_det_ref)
|
||||
double precision,intent(inout) :: delta_ii_(N_states,N_det_ref)
|
||||
double precision,intent(inout) :: delta_ij_s2_(N_states,N_det_non_ref,N_det_ref)
|
||||
double precision,intent(inout) :: delta_ii_s2_(N_states,N_det_ref)
|
||||
|
||||
! integer :: j,l
|
||||
integer :: rc
|
||||
|
||||
double precision, allocatable :: delta(:,:,:), delta_s2(:,:,:)
|
||||
|
||||
integer(ZMQ_PTR),external :: new_zmq_to_qp_run_socket
|
||||
integer(ZMQ_PTR) :: zmq_to_qp_run_socket
|
||||
|
||||
integer(ZMQ_PTR), external :: new_zmq_pull_socket
|
||||
integer(ZMQ_PTR) :: zmq_socket_pull
|
||||
|
||||
integer*8 :: control, accu
|
||||
integer :: task_id, more
|
||||
|
||||
integer :: I_i, J, l, i_state, n(2), kk
|
||||
integer,allocatable :: idx(:,:)
|
||||
|
||||
delta_ii_(:,:) = 0d0
|
||||
delta_ij_(:,:,:) = 0d0
|
||||
delta_ii_s2_(:,:) = 0d0
|
||||
delta_ij_s2_(:,:,:) = 0d0
|
||||
|
||||
zmq_to_qp_run_socket = new_zmq_to_qp_run_socket()
|
||||
zmq_socket_pull = new_zmq_pull_socket()
|
||||
|
||||
allocate ( delta(N_states,0:N_det_non_ref,2), delta_s2(N_states,0:N_det_non_ref,2) )
|
||||
|
||||
allocate(idx(N_det_non_ref,2))
|
||||
more = 1
|
||||
do while (more == 1)
|
||||
|
||||
call pull_mrsc2_results(zmq_socket_pull, I_i, J, n, idx, delta, delta_s2, task_id)
|
||||
|
||||
|
||||
do l=1, n(1)
|
||||
do i_state=1,N_states
|
||||
delta_ij_(i_state,idx(l,1),i_I) += delta(i_state,l,1)
|
||||
delta_ij_s2_(i_state,idx(l,1),i_I) += delta_s2(i_state,l,1)
|
||||
end do
|
||||
end do
|
||||
|
||||
do l=1, n(2)
|
||||
do i_state=1,N_states
|
||||
delta_ij_(i_state,idx(l,2),J) += delta(i_state,l,2)
|
||||
delta_ij_s2_(i_state,idx(l,2),J) += delta_s2(i_state,l,2)
|
||||
end do
|
||||
end do
|
||||
|
||||
|
||||
if(n(1) /= 0) then
|
||||
do i_state=1,N_states
|
||||
delta_ii_(i_state,i_I) += delta(i_state,0,1)
|
||||
delta_ii_s2_(i_state,i_I) += delta_s2(i_state,0,1)
|
||||
end do
|
||||
end if
|
||||
|
||||
if(n(2) /= 0) then
|
||||
do i_state=1,N_states
|
||||
delta_ii_(i_state,J) += delta(i_state,0,2)
|
||||
delta_ii_s2_(i_state,J) += delta_s2(i_state,0,2)
|
||||
end do
|
||||
end if
|
||||
|
||||
|
||||
if (task_id /= 0) then
|
||||
call zmq_delete_task(zmq_to_qp_run_socket,zmq_socket_pull,task_id,more)
|
||||
endif
|
||||
|
||||
|
||||
enddo
|
||||
deallocate( delta, delta_s2 )
|
||||
|
||||
call end_zmq_to_qp_run_socket(zmq_to_qp_run_socket)
|
||||
call end_zmq_pull_socket(zmq_socket_pull)
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
BEGIN_PROVIDER [ double precision, delta_ij_old, (N_states,N_det_non_ref,N_det_ref) ]
|
||||
&BEGIN_PROVIDER [ double precision, delta_ii_old, (N_states,N_det_ref) ]
|
||||
&BEGIN_PROVIDER [ double precision, delta_ij_s2_old, (N_states,N_det_non_ref,N_det_ref) ]
|
||||
&BEGIN_PROVIDER [ double precision, delta_ii_s2_old, (N_states,N_det_ref) ]
|
||||
implicit none
|
||||
|
||||
integer :: i_state, i, i_I, J, k, kk, degree, degree2, m, l, deg, ni, m2
|
||||
integer :: p1,p2,h1,h2,s1,s2, blok, I_s, J_s, nex, nzer, ntot
|
||||
! integer, allocatable :: linked(:,:), blokMwen(:, :), nlink(:)
|
||||
logical :: ok
|
||||
double precision :: phase_iI, phase_Ik, phase_Jl, phase_Ji, phase_al, diI, hIi, hJi, delta_JI, dkI(N_states), HkI, ci_inv(N_states), dia_hla(N_states)
|
||||
double precision :: contrib, wall, iwall ! , searchance(N_det_ref)
|
||||
integer, dimension(0:2,2,2) :: exc_iI, exc_Ik, exc_IJ
|
||||
integer(bit_kind) :: det_tmp(N_int, 2), det_tmp2(N_int, 2), inac, virt
|
||||
integer, external :: get_index_in_psi_det_sorted_bit, searchDet, detCmp
|
||||
logical, external :: is_in_wavefunction, isInCassd, detEq
|
||||
character*(512) :: task
|
||||
integer(ZMQ_PTR) :: zmq_to_qp_run_socket
|
||||
|
||||
integer :: KKsize = 1000000
|
||||
|
||||
|
||||
call new_parallel_job(zmq_to_qp_run_socket,'mrsc2')
|
||||
|
||||
|
||||
call wall_time(iwall)
|
||||
! allocate(linked(N_det_non_ref, N_det_ref), blokMwen(N_det_non_ref, N_det_ref), nlink(N_det_ref))
|
||||
|
||||
|
||||
! searchance = 0d0
|
||||
! do J = 1, N_det_ref
|
||||
! nlink(J) = 0
|
||||
! do blok=1,cepa0_shortcut(0)
|
||||
! do k=cepa0_shortcut(blok), cepa0_shortcut(blok+1)-1
|
||||
! call get_excitation_degree(psi_ref(1,1,J),det_cepa0(1,1,k),degree,N_int)
|
||||
! if(degree <= 2) then
|
||||
! nlink(J) += 1
|
||||
! linked(nlink(J),J) = k
|
||||
! blokMwen(nlink(J),J) = blok
|
||||
! searchance(J) += 1d0 + log(dfloat(cepa0_shortcut(blok+1) - cepa0_shortcut(blok)))
|
||||
! end if
|
||||
! end do
|
||||
! end do
|
||||
! end do
|
||||
|
||||
|
||||
|
||||
! stop
|
||||
nzer = 0
|
||||
ntot = 0
|
||||
do nex = 3, 0, -1
|
||||
print *, "los ",nex
|
||||
do I_s = N_det_ref, 1, -1
|
||||
! if(mod(I_s,1) == 0) then
|
||||
! call wall_time(wall)
|
||||
! wall = wall-iwall
|
||||
! print *, I_s, "/", N_det_ref, wall * (dfloat(N_det_ref) / dfloat(I_s)), wall, wall * (dfloat(N_det_ref) / dfloat(I_s))-wall
|
||||
! end if
|
||||
|
||||
|
||||
do J_s = 1, I_s
|
||||
|
||||
call get_excitation_degree(psi_ref(1,1,J_s), psi_ref(1,1,I_s), degree, N_int)
|
||||
if(degree /= nex) cycle
|
||||
if(nex == 3) nzer = nzer + 1
|
||||
ntot += 1
|
||||
! if(degree > 3) then
|
||||
! deg += 1
|
||||
! cycle
|
||||
! else if(degree == -10) then
|
||||
! KKsize = 100000
|
||||
! else
|
||||
! KKsize = 1000000
|
||||
! end if
|
||||
|
||||
|
||||
|
||||
if(searchance(I_s) < searchance(J_s)) then
|
||||
i_I = I_s
|
||||
J = J_s
|
||||
else
|
||||
i_I = J_s
|
||||
J = I_s
|
||||
end if
|
||||
|
||||
KKsize = nlink(1)
|
||||
if(nex == 0) KKsize = int(float(nlink(1)) / float(nlink(i_I)) * (float(nlink(1)) / 64d0))
|
||||
|
||||
!if(KKsize == 0) stop "ZZEO"
|
||||
|
||||
do kk = 1 , nlink(i_I), KKsize
|
||||
write(task,*) I_i, J, kk, int(min(kk+KKsize-1, nlink(i_I)))
|
||||
call add_task_to_taskserver(zmq_to_qp_run_socket,task)
|
||||
end do
|
||||
|
||||
! do kk = 1 , nlink(i_I)
|
||||
! k = linked(kk,i_I)
|
||||
! blok = blokMwen(kk,i_I)
|
||||
! write(task,*) I_i, J, k, blok
|
||||
! call add_task_to_taskserver(zmq_to_qp_run_socket,task)
|
||||
!
|
||||
! enddo !kk
|
||||
enddo !J
|
||||
|
||||
enddo !I
|
||||
end do ! nex
|
||||
print *, "tasked"
|
||||
! integer(ZMQ_PTR) ∷ collector_thread
|
||||
! external ∷ ao_bielec_integrals_in_map_collector
|
||||
! rc = pthread_create(collector_thread, mrsc2_dressing_collector)
|
||||
print *, nzer, ntot, float(nzer) / float(ntot)
|
||||
provide nproc
|
||||
!$OMP PARALLEL DEFAULT(none) SHARED(delta_ii_old,delta_ij_old,delta_ii_s2_old,delta_ij_s2_old) PRIVATE(i) NUM_THREADS(nproc+1)
|
||||
i = omp_get_thread_num()
|
||||
if (i==0) then
|
||||
call mrsc2_dressing_collector(delta_ii_old,delta_ij_old,delta_ii_s2_old,delta_ij_s2_old)
|
||||
else
|
||||
call mrsc2_dressing_slave_inproc(i)
|
||||
endif
|
||||
!$OMP END PARALLEL
|
||||
|
||||
! rc = pthread_join(collector_thread)
|
||||
call end_parallel_job(zmq_to_qp_run_socket, 'mrsc2')
|
||||
|
||||
|
||||
END_PROVIDER
|
||||
|
||||
|
||||
|
@ -1,61 +0,0 @@
|
||||
! DO NOT MODIFY BY HAND
|
||||
! Created by $QP_ROOT/scripts/ezfio_interface/ei_handler.py
|
||||
! from file /panfs/panasas/cnt0024/cpq1738/scemama/workdir/quantum_package/src/mrcc_selected/EZFIO.cfg
|
||||
|
||||
|
||||
BEGIN_PROVIDER [ double precision, thresh_dressed_ci ]
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! Threshold on the convergence of the dressed CI energy
|
||||
END_DOC
|
||||
|
||||
logical :: has
|
||||
PROVIDE ezfio_filename
|
||||
|
||||
call ezfio_has_mrcc_selected_thresh_dressed_ci(has)
|
||||
if (has) then
|
||||
call ezfio_get_mrcc_selected_thresh_dressed_ci(thresh_dressed_ci)
|
||||
else
|
||||
print *, 'mrcc_selected/thresh_dressed_ci not found in EZFIO file'
|
||||
stop 1
|
||||
endif
|
||||
|
||||
END_PROVIDER
|
||||
|
||||
BEGIN_PROVIDER [ integer, n_it_max_dressed_ci ]
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! Maximum number of dressed CI iterations
|
||||
END_DOC
|
||||
|
||||
logical :: has
|
||||
PROVIDE ezfio_filename
|
||||
|
||||
call ezfio_has_mrcc_selected_n_it_max_dressed_ci(has)
|
||||
if (has) then
|
||||
call ezfio_get_mrcc_selected_n_it_max_dressed_ci(n_it_max_dressed_ci)
|
||||
else
|
||||
print *, 'mrcc_selected/n_it_max_dressed_ci not found in EZFIO file'
|
||||
stop 1
|
||||
endif
|
||||
|
||||
END_PROVIDER
|
||||
|
||||
BEGIN_PROVIDER [ integer, lambda_type ]
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! lambda type
|
||||
END_DOC
|
||||
|
||||
logical :: has
|
||||
PROVIDE ezfio_filename
|
||||
|
||||
call ezfio_has_mrcc_selected_lambda_type(has)
|
||||
if (has) then
|
||||
call ezfio_get_mrcc_selected_lambda_type(lambda_type)
|
||||
else
|
||||
print *, 'mrcc_selected/lambda_type not found in EZFIO file'
|
||||
stop 1
|
||||
endif
|
||||
|
||||
END_PROVIDER
|
@ -1,18 +0,0 @@
|
||||
program mrsc2sub
|
||||
implicit none
|
||||
double precision, allocatable :: energy(:)
|
||||
allocate (energy(N_states))
|
||||
|
||||
!mrmode : 1=mrcepa0, 2=mrsc2 add, 3=mrcc
|
||||
mrmode = 3
|
||||
|
||||
read_wf = .True.
|
||||
SOFT_TOUCH read_wf
|
||||
call set_generators_bitmasks_as_holes_and_particles
|
||||
call run(N_states,energy)
|
||||
if(do_pt2_end)then
|
||||
call run_pt2(N_states,energy)
|
||||
endif
|
||||
deallocate(energy)
|
||||
end
|
||||
|
@ -1,246 +0,0 @@
|
||||
|
||||
|
||||
subroutine run(N_st,energy)
|
||||
implicit none
|
||||
|
||||
integer, intent(in) :: N_st
|
||||
double precision, intent(out) :: energy(N_st)
|
||||
|
||||
integer :: i,j
|
||||
|
||||
double precision :: E_new, E_old, delta_e
|
||||
integer :: iteration
|
||||
double precision :: E_past(4)
|
||||
|
||||
integer :: n_it_mrcc_max
|
||||
double precision :: thresh_mrcc
|
||||
double precision, allocatable :: lambda(:)
|
||||
allocate (lambda(N_states))
|
||||
|
||||
|
||||
thresh_mrcc = thresh_dressed_ci
|
||||
n_it_mrcc_max = n_it_max_dressed_ci
|
||||
|
||||
if(n_it_mrcc_max == 1) then
|
||||
do j=1,N_states_diag
|
||||
do i=1,N_det
|
||||
psi_coef(i,j) = CI_eigenvectors_dressed(i,j)
|
||||
enddo
|
||||
enddo
|
||||
SOFT_TOUCH psi_coef ci_energy_dressed
|
||||
call write_double(6,ci_energy_dressed(1),"Final MRCC energy")
|
||||
call ezfio_set_mrcepa0_energy(ci_energy_dressed(1))
|
||||
call save_wavefunction
|
||||
energy(:) = ci_energy_dressed(:)
|
||||
else
|
||||
E_new = 0.d0
|
||||
delta_E = 1.d0
|
||||
iteration = 0
|
||||
lambda = 1.d0
|
||||
do while (delta_E > thresh_mrcc)
|
||||
iteration += 1
|
||||
print *, '==========================='
|
||||
print *, 'MRCEPA0 Iteration', iteration
|
||||
print *, '==========================='
|
||||
print *, ''
|
||||
E_old = sum(ci_energy_dressed)
|
||||
call write_double(6,ci_energy_dressed(1),"MRCEPA0 energy")
|
||||
call diagonalize_ci_dressed(lambda)
|
||||
E_new = sum(ci_energy_dressed)
|
||||
delta_E = dabs(E_new - E_old)
|
||||
call save_wavefunction
|
||||
call ezfio_set_mrcepa0_energy(ci_energy_dressed(1))
|
||||
if (iteration >= n_it_mrcc_max) then
|
||||
exit
|
||||
endif
|
||||
enddo
|
||||
call write_double(6,ci_energy_dressed(1),"Final MRCEPA0 energy")
|
||||
energy(:) = ci_energy_dressed(:)
|
||||
endif
|
||||
end
|
||||
|
||||
|
||||
subroutine print_ref_coefs
|
||||
implicit none
|
||||
|
||||
integer :: i,j
|
||||
print *, 'Reference'
|
||||
print *, '========='
|
||||
do i=1,N_det_ref
|
||||
print *, (psi_ref_coef(i,j), j=1,N_states)
|
||||
call debug_det(psi_ref(1,1,i),N_int)
|
||||
enddo
|
||||
print *, ''
|
||||
call write_double(6,ci_energy(1),"Initial CI energy")
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
subroutine run_pt2_old(N_st,energy)
|
||||
implicit none
|
||||
integer :: i,j,k
|
||||
integer, intent(in) :: N_st
|
||||
double precision, intent(in) :: energy(N_st)
|
||||
double precision :: pt2_redundant(N_st), pt2(N_st)
|
||||
double precision :: norm_pert(N_st),H_pert_diag(N_st)
|
||||
|
||||
pt2_redundant = 0.d0
|
||||
pt2 = 0d0
|
||||
!if(lambda_mrcc_pt2(0) == 0) return
|
||||
|
||||
print*,'Last iteration only to compute the PT2'
|
||||
|
||||
print * ,'Computing the redundant PT2 contribution'
|
||||
|
||||
if (mrmode == 1) then
|
||||
|
||||
N_det_generators = lambda_mrcc_kept(0)
|
||||
N_det_selectors = lambda_mrcc_kept(0)
|
||||
|
||||
do i=1,N_det_generators
|
||||
j = lambda_mrcc_kept(i)
|
||||
do k=1,N_int
|
||||
psi_det_generators(k,1,i) = psi_non_ref(k,1,j)
|
||||
psi_det_generators(k,2,i) = psi_non_ref(k,2,j)
|
||||
psi_selectors(k,1,i) = psi_non_ref(k,1,j)
|
||||
psi_selectors(k,2,i) = psi_non_ref(k,2,j)
|
||||
enddo
|
||||
do k=1,N_st
|
||||
psi_coef_generators(i,k) = psi_non_ref_coef(j,k)
|
||||
psi_selectors_coef(i,k) = psi_non_ref_coef(j,k)
|
||||
enddo
|
||||
enddo
|
||||
|
||||
else
|
||||
|
||||
N_det_generators = N_det_non_ref
|
||||
N_det_selectors = N_det_non_ref
|
||||
|
||||
do i=1,N_det_generators
|
||||
j = i
|
||||
do k=1,N_int
|
||||
psi_det_generators(k,1,i) = psi_non_ref(k,1,j)
|
||||
psi_det_generators(k,2,i) = psi_non_ref(k,2,j)
|
||||
psi_selectors(k,1,i) = psi_non_ref(k,1,j)
|
||||
psi_selectors(k,2,i) = psi_non_ref(k,2,j)
|
||||
enddo
|
||||
do k=1,N_st
|
||||
psi_coef_generators(i,k) = psi_non_ref_coef(j,k)
|
||||
psi_selectors_coef(i,k) = psi_non_ref_coef(j,k)
|
||||
enddo
|
||||
enddo
|
||||
|
||||
endif
|
||||
|
||||
SOFT_TOUCH N_det_selectors psi_selectors_coef psi_selectors N_det_generators psi_det_generators psi_coef_generators ci_eigenvectors_dressed ci_eigenvectors_s2_dressed ci_electronic_energy_dressed
|
||||
SOFT_TOUCH psi_ref_coef_diagonalized psi_ref_energy_diagonalized
|
||||
|
||||
call H_apply_mrcepa_PT2(pt2_redundant, norm_pert, H_pert_diag, N_st)
|
||||
|
||||
print * ,'Computing the remaining contribution'
|
||||
|
||||
threshold_selectors = max(threshold_selectors,threshold_selectors_pt2)
|
||||
threshold_generators = max(threshold_generators,threshold_generators_pt2)
|
||||
|
||||
N_det_generators = N_det_non_ref + N_det_ref
|
||||
N_det_selectors = N_det_non_ref + N_det_ref
|
||||
|
||||
psi_det_generators(:,:,:N_det_ref) = psi_ref(:,:,:N_det_ref)
|
||||
psi_selectors(:,:,:N_det_ref) = psi_ref(:,:,:N_det_ref)
|
||||
psi_coef_generators(:N_det_ref,:) = psi_ref_coef(:N_det_ref,:)
|
||||
psi_selectors_coef(:N_det_ref,:) = psi_ref_coef(:N_det_ref,:)
|
||||
|
||||
do i=N_det_ref+1,N_det_generators
|
||||
j = i-N_det_ref
|
||||
do k=1,N_int
|
||||
psi_det_generators(k,1,i) = psi_non_ref(k,1,j)
|
||||
psi_det_generators(k,2,i) = psi_non_ref(k,2,j)
|
||||
psi_selectors(k,1,i) = psi_non_ref(k,1,j)
|
||||
psi_selectors(k,2,i) = psi_non_ref(k,2,j)
|
||||
enddo
|
||||
do k=1,N_st
|
||||
psi_coef_generators(i,k) = psi_non_ref_coef(j,k)
|
||||
psi_selectors_coef(i,k) = psi_non_ref_coef(j,k)
|
||||
enddo
|
||||
enddo
|
||||
|
||||
SOFT_TOUCH N_det_selectors psi_selectors_coef psi_selectors N_det_generators psi_det_generators psi_coef_generators ci_eigenvectors_dressed ci_eigenvectors_s2_dressed ci_electronic_energy_dressed
|
||||
SOFT_TOUCH psi_ref_coef_diagonalized psi_ref_energy_diagonalized
|
||||
|
||||
call H_apply_mrcepa_PT2(pt2, norm_pert, H_pert_diag, N_st)
|
||||
|
||||
|
||||
print *, "Redundant PT2 :",pt2_redundant
|
||||
print *, "Full PT2 :",pt2
|
||||
print *, lambda_mrcc_kept(0), N_det, N_det_ref, psi_coef(1,1), psi_ref_coef(1,1)
|
||||
pt2 = pt2 - pt2_redundant
|
||||
|
||||
print *, 'Final step'
|
||||
print *, 'N_det = ', N_det
|
||||
print *, 'N_states = ', N_states
|
||||
print *, 'PT2 = ', pt2
|
||||
print *, 'E = ', energy
|
||||
print *, 'E+PT2 = ', energy+pt2
|
||||
print *, '-----'
|
||||
|
||||
|
||||
call ezfio_set_mrcepa0_energy_pt2(energy(1)+pt2(1))
|
||||
|
||||
end
|
||||
|
||||
subroutine run_pt2(N_st,energy)
|
||||
implicit none
|
||||
integer :: i,j,k
|
||||
integer, intent(in) :: N_st
|
||||
double precision, intent(in) :: energy(N_st)
|
||||
double precision :: pt2(N_st)
|
||||
double precision :: norm_pert(N_st),H_pert_diag(N_st)
|
||||
|
||||
pt2 = 0d0
|
||||
!if(lambda_mrcc_pt2(0) == 0) return
|
||||
|
||||
print*,'Last iteration only to compute the PT2'
|
||||
|
||||
N_det_generators = N_det_ref
|
||||
N_det_selectors = N_det_non_ref
|
||||
|
||||
do i=1,N_det_generators
|
||||
do k=1,N_int
|
||||
psi_det_generators(k,1,i) = psi_ref(k,1,i)
|
||||
psi_det_generators(k,2,i) = psi_ref(k,2,i)
|
||||
enddo
|
||||
do k=1,N_st
|
||||
psi_coef_generators(i,k) = psi_ref_coef(i,k)
|
||||
enddo
|
||||
enddo
|
||||
do i=1,N_det
|
||||
do k=1,N_int
|
||||
psi_selectors(k,1,i) = psi_det_sorted(k,1,i)
|
||||
psi_selectors(k,2,i) = psi_det_sorted(k,2,i)
|
||||
enddo
|
||||
do k=1,N_st
|
||||
psi_selectors_coef(i,k) = psi_coef_sorted(i,k)
|
||||
enddo
|
||||
enddo
|
||||
|
||||
SOFT_TOUCH N_det_selectors psi_selectors_coef psi_selectors N_det_generators psi_det_generators psi_coef_generators ci_eigenvectors_dressed ci_eigenvectors_s2_dressed ci_electronic_energy_dressed
|
||||
SOFT_TOUCH psi_ref_coef_diagonalized psi_ref_energy_diagonalized
|
||||
|
||||
call H_apply_mrcepa_PT2(pt2, norm_pert, H_pert_diag, N_st)
|
||||
|
||||
! call ezfio_set_full_ci_energy_pt2(energy+pt2)
|
||||
|
||||
print *, 'Final step'
|
||||
print *, 'N_det = ', N_det
|
||||
print *, 'N_states = ', N_states
|
||||
print *, 'PT2 = ', pt2
|
||||
print *, 'E = ', energy
|
||||
print *, 'E+PT2 = ', energy+pt2
|
||||
print *, '-----'
|
||||
|
||||
call ezfio_set_mrcepa0_energy_pt2(energy(1)+pt2(1))
|
||||
|
||||
end
|
||||
|
@ -1 +0,0 @@
|
||||
Psiref_CAS Determinants Davidson
|
@ -1,12 +0,0 @@
|
||||
============
|
||||
mrsc2_no_amp
|
||||
============
|
||||
|
||||
Needed Modules
|
||||
==============
|
||||
.. Do not edit this section It was auto-generated
|
||||
.. by the `update_README.py` script.
|
||||
Documentation
|
||||
=============
|
||||
.. Do not edit this section It was auto-generated
|
||||
.. by the `update_README.py` script.
|
@ -1,129 +0,0 @@
|
||||
BEGIN_PROVIDER [double precision, CI_eigenvectors_sc2_no_amp, (N_det,N_states_diag)]
|
||||
&BEGIN_PROVIDER [double precision, CI_eigenvectors_s2_sc2_no_amp, (N_states_diag)]
|
||||
&BEGIN_PROVIDER [double precision, CI_electronic_energy_sc2_no_amp, (N_states_diag)]
|
||||
implicit none
|
||||
integer :: i,j,k,l
|
||||
integer, allocatable :: idx(:)
|
||||
integer, allocatable :: holes_part(:,:)
|
||||
double precision, allocatable :: e_corr(:,:)
|
||||
double precision, allocatable :: accu(:)
|
||||
double precision, allocatable :: ihpsi_current(:)
|
||||
double precision, allocatable :: H_jj(:),H_jj_total(:),S2_jj(:)
|
||||
integer :: number_of_particles, number_of_holes, n_h,n_p
|
||||
allocate(e_corr(N_det_non_ref,N_states),ihpsi_current(N_states),accu(N_states),H_jj(N_det_non_ref),idx(0:N_det_non_ref))
|
||||
allocate(H_jj_total(N_det),S2_jj(N_det))
|
||||
allocate(holes_part(N_det,2))
|
||||
accu = 0.d0
|
||||
do i = 1, N_det_non_ref
|
||||
holes_part(i,1) = number_of_holes(psi_non_ref(1,1,i))
|
||||
holes_part(i,2) = number_of_particles(psi_non_ref(1,1,i))
|
||||
call i_h_psi(psi_non_ref(1,1,i), psi_ref, psi_ref_coef, N_int, N_det_ref,&
|
||||
size(psi_ref_coef_interm_norm,1), N_states,ihpsi_current)
|
||||
do j = 1, N_states
|
||||
e_corr(i,j) = psi_non_ref_coef(i,j) * ihpsi_current(j) * inv_norm_psi_ref(j)
|
||||
accu(j) += e_corr(i,j)
|
||||
enddo
|
||||
enddo
|
||||
print *, 'accu = ',accu
|
||||
double precision :: hjj,diag_h_mat_elem
|
||||
do i = 1, N_det_non_ref
|
||||
H_jj(i) = 0.d0
|
||||
n_h = holes_part(i,1)
|
||||
n_p = holes_part(i,2)
|
||||
integer :: degree
|
||||
! do j = 1, N_det_non_ref
|
||||
! call get_excitation_degree(psi_non_ref(1,1,i),psi_non_ref(1,1,j),degree,N_int)
|
||||
! if(degree .gt. 2)then
|
||||
! if(n_h + holes_part(j,1) .gt. 2 .or. n_p + holes_part(j,2) .gt. 2 ) then
|
||||
! H_jj(i) += e_corr(j,1)
|
||||
! endif
|
||||
! endif
|
||||
! enddo
|
||||
call filter_not_connected(psi_non_ref,psi_non_ref(1,1,i),N_int,N_det_non_ref,idx)
|
||||
do j = 1, idx(0)
|
||||
if(n_h + holes_part(idx(j),1) .gt. 2 .or. n_p + holes_part(idx(j),2) .gt. 2 ) then
|
||||
H_jj(i) += e_corr(idx(j),1)
|
||||
endif
|
||||
enddo
|
||||
enddo
|
||||
|
||||
do i=1,N_Det
|
||||
H_jj_total(i) = diag_h_mat_elem(psi_det(1,1,i),N_int)
|
||||
call get_s2(psi_det(1,1,i),psi_det(1,1,i),N_int,S2_jj(i))
|
||||
enddo
|
||||
do i = 1, N_det_non_ref
|
||||
H_jj_total(idx_non_ref(i)) += H_jj(i)
|
||||
enddo
|
||||
|
||||
|
||||
print *, 'coef'
|
||||
call davidson_diag_hjj_sjj(psi_det,CI_eigenvectors_sc2_no_amp,H_jj_total,S2_jj,CI_electronic_energy_sc2_no_amp,size(CI_eigenvectors_sc2_no_amp,1),N_Det,N_states,N_states_diag,N_int,6)
|
||||
do i = 1, N_det
|
||||
hjj = diag_h_mat_elem(psi_det(1,1,i),N_int)
|
||||
! if(hjj<-210.d0)then
|
||||
! call debug_det(psi_det(1,1,i),N_int)
|
||||
! print *, CI_eigenvectors_sc2_no_amp((i),1),hjj, H_jj_total(i)
|
||||
! endif
|
||||
enddo
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
print *, 'ref',N_det_ref
|
||||
do i =1, N_det_ref
|
||||
call debug_det(psi_det(1,1,idx_ref(i)),N_int)
|
||||
print *, CI_eigenvectors_sc2_no_amp(idx_ref(i),1), H_jj_total(idx_ref(i))
|
||||
enddo
|
||||
print *, 'non ref',N_det_non_ref
|
||||
do i=1, N_det_non_ref
|
||||
hjj = diag_h_mat_elem(psi_non_ref(1,1,i),N_int)
|
||||
! print *, CI_eigenvectors_sc2_no_amp(idx_non_ref(i),1),H_jj_total(idx_non_ref(i)), H_jj(i)
|
||||
! if(dabs(CI_eigenvectors_sc2_no_amp(idx_non_ref(i),1)).gt.1.d-1)then
|
||||
! if(hjj<-210.d0)then
|
||||
! call debug_det(psi_det(1,1,idx_non_ref(i)),N_int)
|
||||
! write(*,'(10(F16.10,X))') CI_eigenvectors_sc2_no_amp(idx_non_ref(i),1),hjj, H_jj(i),H_jj_total(idx_non_ref(i))
|
||||
! endif
|
||||
enddo
|
||||
! do i = 1, N_det
|
||||
! print *, CI_eigenvectors_sc2_no_amp(i,1)
|
||||
! enddo
|
||||
do i=1,N_states_diag
|
||||
CI_eigenvectors_s2_sc2_no_amp(i) = S2_jj(i)
|
||||
enddo
|
||||
|
||||
deallocate(e_corr,ihpsi_current,accu,H_jj,idx,H_jj_total,s2_jj,holes_part)
|
||||
END_PROVIDER
|
||||
|
||||
BEGIN_PROVIDER [ double precision, CI_energy_sc2_no_amp, (N_states_diag) ]
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! N_states lowest eigenvalues of the CI matrix
|
||||
END_DOC
|
||||
|
||||
integer :: j
|
||||
character*(8) :: st
|
||||
call write_time(output_determinants)
|
||||
do j=1,min(N_det,N_states_diag)
|
||||
CI_energy_sc2_no_amp(j) = CI_electronic_energy_sc2_no_amp(j) + nuclear_repulsion
|
||||
enddo
|
||||
do j=1,min(N_det,N_states)
|
||||
write(st,'(I4)') j
|
||||
call write_double(output_determinants,CI_energy_sc2_no_amp(j),'Energy of state '//trim(st))
|
||||
call write_double(output_determinants,CI_eigenvectors_s2_sc2_no_amp(j),'S^2 of state '//trim(st))
|
||||
enddo
|
||||
|
||||
END_PROVIDER
|
||||
|
||||
subroutine diagonalize_CI_sc2_no_amp
|
||||
implicit none
|
||||
integer :: i,j
|
||||
do j=1,N_states
|
||||
do i=1,N_det
|
||||
psi_coef(i,j) = CI_eigenvectors_sc2_no_amp(i,j)
|
||||
enddo
|
||||
enddo
|
||||
SOFT_TOUCH ci_eigenvectors_s2_sc2_no_amp ci_eigenvectors_sc2_no_amp ci_electronic_energy_sc2_no_amp ci_energy_sc2_no_amp psi_coef
|
||||
|
||||
end
|
||||
|
@ -1,14 +0,0 @@
|
||||
program pouet
|
||||
provide ao_bielec_integrals_in_map
|
||||
call bla
|
||||
end
|
||||
subroutine bla
|
||||
implicit none
|
||||
integer :: i
|
||||
do i = 1, 10
|
||||
call diagonalize_CI_sc2_no_amp
|
||||
TOUCH psi_coef
|
||||
enddo
|
||||
print *, "E+PT2 = ", ci_energy_sc2_no_amp(:)
|
||||
|
||||
end
|
@ -11,10 +11,10 @@ end
|
||||
subroutine do_print
|
||||
implicit none
|
||||
integer :: i,j
|
||||
real :: off_diag, diag
|
||||
double precision :: off_diag, diag
|
||||
|
||||
off_diag = 0.
|
||||
diag = 0.
|
||||
off_diag = 0.d0
|
||||
diag = 0.d0
|
||||
do j=1,mo_tot_num
|
||||
do i=1,mo_tot_num
|
||||
off_diag += abs(mo_overlap(i,j))
|
||||
|
Loading…
Reference in New Issue
Block a user