mirror of
https://github.com/LCPQ/quantum_package
synced 2024-08-25 14:01:46 +02:00
Fixed ddcc1a5
This commit is contained in:
parent
78741169d8
commit
c2cbe390e1
@ -132,7 +132,7 @@ program cassd_zmq
|
|||||||
enddo
|
enddo
|
||||||
print *, 'Max excitation degree in the CAS :', exc_max
|
print *, 'Max excitation degree in the CAS :', exc_max
|
||||||
|
|
||||||
if(do_pt2_end)then
|
if(do_pt2)then
|
||||||
print*,'Last iteration only to compute the PT2'
|
print*,'Last iteration only to compute the PT2'
|
||||||
threshold_selectors = max(threshold_selectors,threshold_selectors_pt2)
|
threshold_selectors = max(threshold_selectors,threshold_selectors_pt2)
|
||||||
threshold_generators = max(threshold_generators,threshold_generators_pt2)
|
threshold_generators = max(threshold_generators,threshold_generators_pt2)
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
[energy]
|
|
||||||
type: double precision
|
|
||||||
doc: "Calculated CAS-SD energy"
|
|
||||||
interface: ezfio
|
|
@ -1,16 +0,0 @@
|
|||||||
use bitmasks
|
|
||||||
BEGIN_SHELL [ /usr/bin/env python ]
|
|
||||||
from generate_h_apply import *
|
|
||||||
|
|
||||||
s = H_apply("DDCI_selection")
|
|
||||||
s.set_selection_pt2("epstein_nesbet_2x2")
|
|
||||||
s.set_filter_2h_2p()
|
|
||||||
print s
|
|
||||||
|
|
||||||
s = H_apply("DDCI_PT2")
|
|
||||||
s.set_perturbation("epstein_nesbet_2x2")
|
|
||||||
s.set_filter_2h_2p()
|
|
||||||
print s
|
|
||||||
|
|
||||||
END_SHELL
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
Perturbation Selectors_full Generators_CAS Davidson
|
|
@ -1,130 +0,0 @@
|
|||||||
====================
|
|
||||||
DDCI_selected Module
|
|
||||||
====================
|
|
||||||
|
|
||||||
Documentation
|
|
||||||
=============
|
|
||||||
|
|
||||||
.. Do not edit this section. It was auto-generated from the
|
|
||||||
.. by the `update_README.py` script.
|
|
||||||
|
|
||||||
`ddci <http://github.com/LCPQ/quantum_package/tree/master/src/DDCI_selected/ddci.irp.f#L1>`_
|
|
||||||
Undocumented
|
|
||||||
|
|
||||||
|
|
||||||
`h_apply_ddci_pt2 <http://github.com/LCPQ/quantum_package/tree/master/src/DDCI_selected/H_apply.irp.f_shell_15#L1271>`_
|
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
|
||||||
|
|
||||||
|
|
||||||
`h_apply_ddci_pt2_diexc <http://github.com/LCPQ/quantum_package/tree/master/src/DDCI_selected/H_apply.irp.f_shell_15#L776>`_
|
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
|
||||||
particles.
|
|
||||||
Assume N_int is already provided.
|
|
||||||
|
|
||||||
|
|
||||||
`h_apply_ddci_pt2_monoexc <http://github.com/LCPQ/quantum_package/tree/master/src/DDCI_selected/H_apply.irp.f_shell_15#L1086>`_
|
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
|
||||||
particles.
|
|
||||||
Assume N_int is already provided.
|
|
||||||
|
|
||||||
|
|
||||||
`h_apply_ddci_selection <http://github.com/LCPQ/quantum_package/tree/master/src/DDCI_selected/H_apply.irp.f_shell_15#L530>`_
|
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
|
||||||
|
|
||||||
|
|
||||||
`h_apply_ddci_selection_diexc <http://github.com/LCPQ/quantum_package/tree/master/src/DDCI_selected/H_apply.irp.f_shell_15#L1>`_
|
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
|
||||||
particles.
|
|
||||||
Assume N_int is already provided.
|
|
||||||
|
|
||||||
|
|
||||||
`h_apply_ddci_selection_monoexc <http://github.com/LCPQ/quantum_package/tree/master/src/DDCI_selected/H_apply.irp.f_shell_15#L331>`_
|
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
|
||||||
particles.
|
|
||||||
Assume N_int is already provided.
|
|
||||||
|
|
||||||
Needed Modules
|
|
||||||
==============
|
|
||||||
|
|
||||||
.. Do not edit this section. It was auto-generated from the
|
|
||||||
.. by the `update_README.py` script.
|
|
||||||
|
|
||||||
.. image:: tree_dependency.png
|
|
||||||
|
|
||||||
* `Perturbation <http://github.com/LCPQ/quantum_package/tree/master/src/Perturbation>`_
|
|
||||||
* `Selectors_full <http://github.com/LCPQ/quantum_package/tree/master/src/Selectors_full>`_
|
|
||||||
* `Generators_CAS <http://github.com/LCPQ/quantum_package/tree/master/src/Generators_CAS>`_
|
|
||||||
|
|
||||||
Needed Modules
|
|
||||||
==============
|
|
||||||
.. Do not edit this section It was auto-generated
|
|
||||||
.. by the `update_README.py` script.
|
|
||||||
|
|
||||||
|
|
||||||
.. image:: tree_dependency.png
|
|
||||||
|
|
||||||
* `Perturbation <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation>`_
|
|
||||||
* `Selectors_full <http://github.com/LCPQ/quantum_package/tree/master/plugins/Selectors_full>`_
|
|
||||||
* `Generators_CAS <http://github.com/LCPQ/quantum_package/tree/master/plugins/Generators_CAS>`_
|
|
||||||
|
|
||||||
Documentation
|
|
||||||
=============
|
|
||||||
.. Do not edit this section It was auto-generated
|
|
||||||
.. by the `update_README.py` script.
|
|
||||||
|
|
||||||
|
|
||||||
`ddci <http://github.com/LCPQ/quantum_package/tree/master/plugins/DDCI_selected/ddci.irp.f#L1>`_
|
|
||||||
Undocumented
|
|
||||||
|
|
||||||
|
|
||||||
h_apply_ddci_pt2
|
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
|
||||||
|
|
||||||
|
|
||||||
h_apply_ddci_pt2_diexc
|
|
||||||
Undocumented
|
|
||||||
|
|
||||||
|
|
||||||
h_apply_ddci_pt2_diexcorg
|
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
|
||||||
particles.
|
|
||||||
Assume N_int is already provided.
|
|
||||||
|
|
||||||
|
|
||||||
h_apply_ddci_pt2_diexcp
|
|
||||||
Undocumented
|
|
||||||
|
|
||||||
|
|
||||||
h_apply_ddci_pt2_monoexc
|
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
|
||||||
particles.
|
|
||||||
Assume N_int is already provided.
|
|
||||||
|
|
||||||
|
|
||||||
h_apply_ddci_selection
|
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
|
||||||
|
|
||||||
|
|
||||||
h_apply_ddci_selection_diexc
|
|
||||||
Undocumented
|
|
||||||
|
|
||||||
|
|
||||||
h_apply_ddci_selection_diexcorg
|
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
|
||||||
particles.
|
|
||||||
Assume N_int is already provided.
|
|
||||||
|
|
||||||
|
|
||||||
h_apply_ddci_selection_diexcp
|
|
||||||
Undocumented
|
|
||||||
|
|
||||||
|
|
||||||
h_apply_ddci_selection_monoexc
|
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
|
||||||
particles.
|
|
||||||
Assume N_int is already provided.
|
|
||||||
|
|
@ -1,77 +0,0 @@
|
|||||||
program ddci
|
|
||||||
implicit none
|
|
||||||
integer :: i,k
|
|
||||||
|
|
||||||
|
|
||||||
double precision, allocatable :: pt2(:), norm_pert(:), H_pert_diag(:),E_before(:)
|
|
||||||
integer :: N_st, degree
|
|
||||||
N_st = N_states_diag
|
|
||||||
allocate (pt2(N_st), norm_pert(N_st),H_pert_diag(N_st),E_before(N_st))
|
|
||||||
character*(64) :: perturbation
|
|
||||||
|
|
||||||
pt2 = 1.d0
|
|
||||||
diag_algorithm = "Lapack"
|
|
||||||
if (N_det > N_det_max) then
|
|
||||||
call diagonalize_CI
|
|
||||||
call save_wavefunction
|
|
||||||
psi_det = psi_det_sorted
|
|
||||||
psi_coef = psi_coef_sorted
|
|
||||||
N_det = N_det_max
|
|
||||||
soft_touch N_det psi_det psi_coef
|
|
||||||
call diagonalize_CI
|
|
||||||
call save_wavefunction
|
|
||||||
print *, 'N_det = ', N_det
|
|
||||||
print *, 'N_states = ', N_states
|
|
||||||
print *, 'PT2 = ', pt2
|
|
||||||
print *, 'E = ', CI_energy
|
|
||||||
print *, 'E+PT2 = ', CI_energy+pt2
|
|
||||||
print *, '-----'
|
|
||||||
endif
|
|
||||||
call set_bitmask_particl_as_input(reunion_of_bitmask)
|
|
||||||
call set_bitmask_hole_as_input(reunion_of_bitmask)
|
|
||||||
|
|
||||||
do while (N_det < N_det_max.and.maxval(abs(pt2(1:N_st))) > pt2_max)
|
|
||||||
call H_apply_DDCI_selection(pt2, norm_pert, H_pert_diag, N_st)
|
|
||||||
|
|
||||||
PROVIDE psi_coef
|
|
||||||
PROVIDE psi_det
|
|
||||||
PROVIDE psi_det_sorted
|
|
||||||
|
|
||||||
if (N_det > N_det_max) then
|
|
||||||
psi_det = psi_det_sorted
|
|
||||||
psi_coef = psi_coef_sorted
|
|
||||||
N_det = N_det_max
|
|
||||||
soft_touch N_det psi_det psi_coef
|
|
||||||
endif
|
|
||||||
call diagonalize_CI
|
|
||||||
call save_wavefunction
|
|
||||||
print *, 'N_det = ', N_det
|
|
||||||
print *, 'N_states = ', N_states
|
|
||||||
print *, 'PT2 = ', pt2
|
|
||||||
print *, 'E = ', CI_energy
|
|
||||||
print *, 'E+PT2 = ', E_before+pt2
|
|
||||||
print *, '-----'
|
|
||||||
if(N_states_diag.gt.1)then
|
|
||||||
print*,'Variational Energy difference'
|
|
||||||
do i = 2, N_st
|
|
||||||
print*,'Delta E = ',CI_energy(i) - CI_energy(1)
|
|
||||||
enddo
|
|
||||||
endif
|
|
||||||
if(N_states.gt.1)then
|
|
||||||
print*,'Variational + perturbative Energy difference'
|
|
||||||
do i = 2, N_st
|
|
||||||
print*,'Delta E = ',E_before(i)+ pt2(i) - (E_before(1) + pt2(1))
|
|
||||||
enddo
|
|
||||||
endif
|
|
||||||
E_before = CI_energy
|
|
||||||
call ezfio_set_ddci_selected_energy(CI_energy)
|
|
||||||
enddo
|
|
||||||
if(do_pt2_end)then
|
|
||||||
call H_apply_DDCI_pt2(pt2, norm_pert, H_pert_diag, N_st)
|
|
||||||
print *, 'N_det = ', N_det
|
|
||||||
print *, 'N_states = ', N_states
|
|
||||||
print *, 'PT2 = ', pt2
|
|
||||||
print *, 'E = ', CI_energy
|
|
||||||
print *, 'E+PT2 = ', CI_energy+pt2
|
|
||||||
endif
|
|
||||||
end
|
|
Binary file not shown.
Before Width: | Height: | Size: 112 KiB |
@ -139,13 +139,20 @@ program fci_zmq
|
|||||||
enddo
|
enddo
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if (N_det < N_det_max) then
|
||||||
|
threshold_davidson = threshold_davidson_in
|
||||||
|
call diagonalize_CI
|
||||||
|
call save_wavefunction
|
||||||
|
call ezfio_set_full_ci_zmq_energy(CI_energy(1))
|
||||||
|
endif
|
||||||
|
|
||||||
if (do_pt2) then
|
if (do_pt2) then
|
||||||
pt2 = 0.d0
|
pt2 = 0.d0
|
||||||
if (N_states == 1) then
|
if (N_states == 1) then
|
||||||
threshold_selectors = 1.d0
|
threshold_selectors = 1.d0
|
||||||
threshold_generators = 1d0
|
threshold_generators = 1d0
|
||||||
SOFT_TOUCH threshold_selectors threshold_generators
|
SOFT_TOUCH threshold_selectors threshold_generators
|
||||||
call ZMQ_pt2(CI_energy, pt2,relative_error) ! Stochastic PT2
|
call ZMQ_pt2(CI_energy, pt2, relative_error) ! Stochastic PT2
|
||||||
threshold_selectors = threshold_selectors_save
|
threshold_selectors = threshold_selectors_save
|
||||||
threshold_generators = threshold_generators_save
|
threshold_generators = threshold_generators_save
|
||||||
SOFT_TOUCH threshold_selectors threshold_generators
|
SOFT_TOUCH threshold_selectors threshold_generators
|
||||||
@ -155,15 +162,7 @@ program fci_zmq
|
|||||||
SOFT_TOUCH threshold_selectors threshold_generators
|
SOFT_TOUCH threshold_selectors threshold_generators
|
||||||
call ZMQ_selection(0, pt2) ! Deterministic PT2
|
call ZMQ_selection(0, pt2) ! Deterministic PT2
|
||||||
endif
|
endif
|
||||||
endif
|
call ezfio_set_full_ci_zmq_energy_pt2(CI_energy(1)+pt2(1))
|
||||||
|
|
||||||
if (N_det < N_det_max) then
|
|
||||||
threshold_davidson = threshold_davidson_in
|
|
||||||
call diagonalize_CI
|
|
||||||
call save_wavefunction
|
|
||||||
call ezfio_set_full_ci_zmq_energy(CI_energy(1))
|
|
||||||
call ezfio_set_full_ci_zmq_energy_pt2(CI_energy(1)+pt2(1))
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
1
plugins/Selectors_CASSD/NEEDED_CHILDREN_MODULES
Normal file
1
plugins/Selectors_CASSD/NEEDED_CHILDREN_MODULES
Normal file
@ -0,0 +1 @@
|
|||||||
|
|
12
plugins/Selectors_CASSD/README.rst
Normal file
12
plugins/Selectors_CASSD/README.rst
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
===============
|
||||||
|
Selectors_CASSD
|
||||||
|
===============
|
||||||
|
|
||||||
|
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.
|
95
plugins/Selectors_CASSD/selectors.irp.f
Normal file
95
plugins/Selectors_CASSD/selectors.irp.f
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
use bitmasks
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [ integer, psi_selectors_size ]
|
||||||
|
implicit none
|
||||||
|
psi_selectors_size = psi_det_size
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [ integer, N_det_selectors]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! For Single reference wave functions, the number of selectors is 1 : the
|
||||||
|
! Hartree-Fock determinant
|
||||||
|
END_DOC
|
||||||
|
N_det_selectors = N_det
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [ integer(bit_kind), psi_selectors, (N_int,2,psi_selectors_size) ]
|
||||||
|
&BEGIN_PROVIDER [ double precision, psi_selectors_coef, (psi_selectors_size,N_states) ]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Determinants on which we apply <i|H|psi> for perturbation.
|
||||||
|
END_DOC
|
||||||
|
integer :: i, k, l, m
|
||||||
|
logical :: good
|
||||||
|
|
||||||
|
do i=1,N_det_generators
|
||||||
|
do k=1,N_int
|
||||||
|
psi_selectors(k,1,i) = psi_det_generators(k,1,i)
|
||||||
|
psi_selectors(k,2,i) = psi_det_generators(k,2,i)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
do k=1,N_states
|
||||||
|
do i=1,N_det_generators
|
||||||
|
psi_selectors_coef(i,k) = psi_coef_generators(i,k)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
|
||||||
|
m=N_det_generators
|
||||||
|
|
||||||
|
do i=1,N_det
|
||||||
|
do l=1,n_cas_bitmask
|
||||||
|
good = .True.
|
||||||
|
do k=1,N_int
|
||||||
|
good = good .and. ( &
|
||||||
|
iand(not(cas_bitmask(k,1,l)), psi_det_sorted(k,1,i)) == &
|
||||||
|
iand(not(cas_bitmask(k,1,l)), HF_bitmask(k,1)) .and. ( &
|
||||||
|
iand(not(cas_bitmask(k,2,l)), psi_det_sorted(k,2,i)) == &
|
||||||
|
iand(not(cas_bitmask(k,2,l)), HF_bitmask(k,2) )) )
|
||||||
|
enddo
|
||||||
|
if (good) then
|
||||||
|
exit
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
if (.not.good) then
|
||||||
|
m = m+1
|
||||||
|
do k=1,N_int
|
||||||
|
psi_selectors(k,1,m) = psi_det_sorted(k,1,i)
|
||||||
|
psi_selectors(k,2,m) = psi_det_sorted(k,2,i)
|
||||||
|
enddo
|
||||||
|
psi_selectors_coef(m,:) = psi_coef_sorted(i,:)
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
if (N_det /= m) then
|
||||||
|
print *, N_det, m
|
||||||
|
stop 'N_det /= m'
|
||||||
|
endif
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [ double precision, psi_selectors_coef_transp, (N_states,psi_selectors_size) ]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Transposed psi_selectors
|
||||||
|
END_DOC
|
||||||
|
integer :: i,k
|
||||||
|
|
||||||
|
do i=1,N_det_selectors
|
||||||
|
do k=1,N_states
|
||||||
|
psi_selectors_coef_transp(k,i) = psi_selectors_coef(i,k)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [ double precision, psi_selectors_diag_h_mat, (psi_selectors_size) ]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Diagonal elements of the H matrix for each selectors
|
||||||
|
END_DOC
|
||||||
|
integer :: i
|
||||||
|
double precision :: diag_H_mat_elem
|
||||||
|
do i = 1, N_det_selectors
|
||||||
|
psi_selectors_diag_h_mat(i) = diag_H_mat_elem(psi_selectors(1,1,i),N_int)
|
||||||
|
enddo
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
|
121
plugins/Selectors_CASSD/zmq.irp.f
Normal file
121
plugins/Selectors_CASSD/zmq.irp.f
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
subroutine zmq_put_psi(zmq_to_qp_run_socket,worker_id, energy, size_energy)
|
||||||
|
use f77_zmq
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Put the wave function on the qp_run scheduler
|
||||||
|
END_DOC
|
||||||
|
integer(ZMQ_PTR), intent(in) :: zmq_to_qp_run_socket
|
||||||
|
integer, intent(in) :: worker_id
|
||||||
|
integer, intent(in) :: size_energy
|
||||||
|
double precision, intent(out) :: energy(size_energy)
|
||||||
|
integer :: rc
|
||||||
|
integer*8 :: rc8
|
||||||
|
character*(256) :: msg
|
||||||
|
|
||||||
|
write(msg,*) 'put_psi ', worker_id, N_states, N_det, psi_det_size, n_det_generators, n_det_selectors
|
||||||
|
|
||||||
|
rc = f77_zmq_send(zmq_to_qp_run_socket,trim(msg),len(trim(msg)),ZMQ_SNDMORE)
|
||||||
|
if (rc /= len(trim(msg))) then
|
||||||
|
print *, 'f77_zmq_send(zmq_to_qp_run_socket,trim(msg),len(trim(msg)),ZMQ_SNDMORE)'
|
||||||
|
stop 'error'
|
||||||
|
endif
|
||||||
|
|
||||||
|
rc8 = f77_zmq_send8(zmq_to_qp_run_socket,psi_det,N_int*2_8*N_det*bit_kind,ZMQ_SNDMORE)
|
||||||
|
if (rc8 /= N_int*2_8*N_det*bit_kind) then
|
||||||
|
print *, 'f77_zmq_send8(zmq_to_qp_run_socket,psi_det,N_int*2_8*N_det*bit_kind,ZMQ_SNDMORE)'
|
||||||
|
stop 'error'
|
||||||
|
endif
|
||||||
|
|
||||||
|
rc8 = f77_zmq_send8(zmq_to_qp_run_socket,psi_coef,psi_det_size*N_states*8_8,ZMQ_SNDMORE)
|
||||||
|
if (rc8 /= psi_det_size*N_states*8_8) then
|
||||||
|
print *, 'f77_zmq_send8(zmq_to_qp_run_socket,psi_coef,psi_det_size*N_states*8_8,ZMQ_SNDMORE)'
|
||||||
|
stop 'error'
|
||||||
|
endif
|
||||||
|
|
||||||
|
rc = f77_zmq_send(zmq_to_qp_run_socket,energy,size_energy*8,0)
|
||||||
|
if (rc /= size_energy*8) then
|
||||||
|
print *, 'f77_zmq_send(zmq_to_qp_run_socket,energy,size_energy*8,0)'
|
||||||
|
stop 'error'
|
||||||
|
endif
|
||||||
|
|
||||||
|
rc = f77_zmq_recv(zmq_to_qp_run_socket,msg,len(msg),0)
|
||||||
|
if (msg(1:rc) /= 'put_psi_reply 1') then
|
||||||
|
print *, rc, trim(msg)
|
||||||
|
print *, 'Error in put_psi_reply'
|
||||||
|
stop 'error'
|
||||||
|
endif
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
subroutine zmq_get_psi(zmq_to_qp_run_socket, worker_id, energy, size_energy)
|
||||||
|
use f77_zmq
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Get the wave function from the qp_run scheduler
|
||||||
|
END_DOC
|
||||||
|
integer(ZMQ_PTR), intent(in) :: zmq_to_qp_run_socket
|
||||||
|
integer, intent(in) :: worker_id
|
||||||
|
integer, intent(in) :: size_energy
|
||||||
|
double precision, intent(out) :: energy(size_energy)
|
||||||
|
integer :: rc
|
||||||
|
integer*8 :: rc8
|
||||||
|
character*(64) :: msg
|
||||||
|
|
||||||
|
write(msg,*) 'get_psi ', worker_id
|
||||||
|
|
||||||
|
rc = f77_zmq_send(zmq_to_qp_run_socket,trim(msg),len(trim(msg)),0)
|
||||||
|
if (rc /= len(trim(msg))) then
|
||||||
|
print *, 'f77_zmq_send(zmq_to_qp_run_socket,trim(msg),len(trim(msg)),0)'
|
||||||
|
stop 'error'
|
||||||
|
endif
|
||||||
|
|
||||||
|
rc = f77_zmq_recv(zmq_to_qp_run_socket,msg,len(msg),0)
|
||||||
|
if (msg(1:13) /= 'get_psi_reply') then
|
||||||
|
print *, rc, trim(msg)
|
||||||
|
print *, 'Error in get_psi_reply'
|
||||||
|
stop 'error'
|
||||||
|
endif
|
||||||
|
|
||||||
|
integer :: N_states_read, N_det_read, psi_det_size_read
|
||||||
|
integer :: N_det_selectors_read, N_det_generators_read
|
||||||
|
read(msg(14:rc),*) N_states_read, N_det_read, psi_det_size_read, &
|
||||||
|
N_det_generators_read, N_det_selectors_read
|
||||||
|
|
||||||
|
N_states = N_states_read
|
||||||
|
N_det = N_det_read
|
||||||
|
psi_det_size = psi_det_size_read
|
||||||
|
TOUCH psi_det_size N_det N_states
|
||||||
|
|
||||||
|
rc8 = f77_zmq_recv8(zmq_to_qp_run_socket,psi_det,N_int*2_8*N_det*bit_kind,0)
|
||||||
|
if (rc8 /= N_int*2_8*N_det*bit_kind) then
|
||||||
|
print *, 'f77_zmq_recv(zmq_to_qp_run_socket,psi_det,N_int*2*N_det*bit_kind,ZMQ_SNDMORE)'
|
||||||
|
stop 'error'
|
||||||
|
endif
|
||||||
|
|
||||||
|
rc8 = f77_zmq_recv8(zmq_to_qp_run_socket,psi_coef,psi_det_size*N_states*8_8,0)
|
||||||
|
if (rc8 /= psi_det_size*N_states*8_8) then
|
||||||
|
print *, '77_zmq_recv8(zmq_to_qp_run_socket,psi_coef,psi_det_size*N_states*8_8,ZMQ_SNDMORE)'
|
||||||
|
stop 'error'
|
||||||
|
endif
|
||||||
|
TOUCH psi_det psi_coef
|
||||||
|
|
||||||
|
rc = f77_zmq_recv(zmq_to_qp_run_socket,energy,size_energy*8,0)
|
||||||
|
if (rc /= size_energy*8) then
|
||||||
|
print *, '77_zmq_recv(zmq_to_qp_run_socket,energy,size_energy*8,0)'
|
||||||
|
stop 'error'
|
||||||
|
endif
|
||||||
|
|
||||||
|
if (N_det_generators_read > 0) then
|
||||||
|
N_det_generators = N_det_generators_read
|
||||||
|
TOUCH N_det_generators
|
||||||
|
endif
|
||||||
|
if (N_det_selectors_read > 0) then
|
||||||
|
N_det_selectors = N_det_selectors_read
|
||||||
|
TOUCH N_det_selectors
|
||||||
|
endif
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
@ -410,13 +410,6 @@ end
|
|||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
|
|
||||||
BEGIN_PROVIDER [ integer, HP, (2,N_det_non_ref) ]
|
|
||||||
integer :: i
|
|
||||||
do i=1,N_det_non_ref
|
|
||||||
call getHP(psi_non_ref(1,1,i), HP(1,i), HP(2,i), N_int)
|
|
||||||
end do
|
|
||||||
END_PROVIDER
|
|
||||||
|
|
||||||
BEGIN_PROVIDER [ integer, cepa0_shortcut, (0:N_det_non_ref+1) ]
|
BEGIN_PROVIDER [ integer, cepa0_shortcut, (0:N_det_non_ref+1) ]
|
||||||
&BEGIN_PROVIDER [ integer, det_cepa0_idx, (N_det_non_ref) ]
|
&BEGIN_PROVIDER [ integer, det_cepa0_idx, (N_det_non_ref) ]
|
||||||
&BEGIN_PROVIDER [ integer(bit_kind), det_cepa0_active, (N_int,2,N_det_non_ref) ]
|
&BEGIN_PROVIDER [ integer(bit_kind), det_cepa0_active, (N_int,2,N_det_non_ref) ]
|
||||||
|
@ -39,6 +39,7 @@ subroutine mrsc2_dressing_slave(thread,iproc)
|
|||||||
|
|
||||||
double precision, allocatable :: delta(:,:,:), delta_s2(:,:,:)
|
double precision, allocatable :: delta(:,:,:), delta_s2(:,:,:)
|
||||||
|
|
||||||
|
integer, allocatable :: hp(:,:)
|
||||||
|
|
||||||
|
|
||||||
integer :: i_state, i, i_I, J, k, k2, k1, kk, ll, degree, degree2, m, l, deg, ni, m2
|
integer :: i_state, i, i_I, J, k, k2, k1, kk, ll, degree, degree2, m, l, deg, ni, m2
|
||||||
@ -66,6 +67,12 @@ subroutine mrsc2_dressing_slave(thread,iproc)
|
|||||||
allocate (dleat_s2(N_states, N_det_non_ref, 2), delta_s2(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))
|
allocate(komon(0:N_det_non_ref))
|
||||||
|
|
||||||
|
allocate(hp(2,N_det_non_ref))
|
||||||
|
do i=1,N_det_non_ref
|
||||||
|
call getHP(psi_non_ref(1,1,i), HP(1,i), HP(2,i), N_int)
|
||||||
|
end do
|
||||||
|
|
||||||
|
|
||||||
do
|
do
|
||||||
call get_task_from_taskserver(zmq_to_qp_run_socket,worker_id, task_id, task)
|
call get_task_from_taskserver(zmq_to_qp_run_socket,worker_id, task_id, task)
|
||||||
if (task_id == 0) exit
|
if (task_id == 0) exit
|
||||||
@ -171,7 +178,6 @@ subroutine mrsc2_dressing_slave(thread,iproc)
|
|||||||
call apply_excitation(psi_non_ref(1,1,i),exc_Ik,det_tmp,ok,N_int)
|
call apply_excitation(psi_non_ref(1,1,i),exc_Ik,det_tmp,ok,N_int)
|
||||||
if(.not. ok) cycle
|
if(.not. ok) cycle
|
||||||
if(HP(1,i) + HP(1,k) <= 2 .and. HP(2,i) + HP(2,k) <= 2) then
|
if(HP(1,i) + HP(1,k) <= 2 .and. HP(2,i) + HP(2,k) <= 2) then
|
||||||
! if(is_in_wavefunction(det_tmp, N_int)) cycle
|
|
||||||
cycle
|
cycle
|
||||||
end if
|
end if
|
||||||
|
|
||||||
|
@ -106,9 +106,9 @@ END_PROVIDER
|
|||||||
ao_ortho_canonical_coef(i,i) = 1.d0
|
ao_ortho_canonical_coef(i,i) = 1.d0
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
call ortho_lowdin(ao_overlap,size(ao_overlap,1),ao_num,ao_ortho_canonical_coef,size(ao_ortho_canonical_coef,1),ao_num)
|
!call ortho_lowdin(ao_overlap,size(ao_overlap,1),ao_num,ao_ortho_canonical_coef,size(ao_ortho_canonical_coef,1),ao_num)
|
||||||
ao_ortho_canonical_num=ao_num
|
!ao_ortho_canonical_num=ao_num
|
||||||
return
|
!return
|
||||||
|
|
||||||
if (ao_cartesian) then
|
if (ao_cartesian) then
|
||||||
|
|
||||||
|
@ -361,7 +361,7 @@ subroutine find_rotation(A,LDA,B,m,C,n)
|
|||||||
|
|
||||||
double precision, allocatable :: A_inv(:,:)
|
double precision, allocatable :: A_inv(:,:)
|
||||||
allocate(A_inv(LDA,n))
|
allocate(A_inv(LDA,n))
|
||||||
call get_pseudo_inverse(A,m,n,A_inv,LDA)
|
call get_pseudo_inverse(A,LDA,m,n,A_inv,LDA)
|
||||||
|
|
||||||
integer :: i,j,k
|
integer :: i,j,k
|
||||||
call dgemm('N','N',n,n,m,1.d0,A_inv,n,B,LDA,0.d0,C,n)
|
call dgemm('N','N',n,n,m,1.d0,A_inv,n,B,LDA,0.d0,C,n)
|
||||||
|
@ -844,7 +844,7 @@ subroutine get_task_from_taskserver(zmq_to_qp_run_socket,worker_id,task_id,task)
|
|||||||
integer, intent(out) :: task_id
|
integer, intent(out) :: task_id
|
||||||
character*(512), intent(out) :: task
|
character*(512), intent(out) :: task
|
||||||
|
|
||||||
character*(512) :: message
|
character*(1024) :: message
|
||||||
character*(64) :: reply
|
character*(64) :: reply
|
||||||
integer :: rc, sze
|
integer :: rc, sze
|
||||||
|
|
||||||
@ -858,7 +858,8 @@ subroutine get_task_from_taskserver(zmq_to_qp_run_socket,worker_id,task_id,task)
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
message = repeat(' ',512)
|
message = repeat(' ',512)
|
||||||
rc = f77_zmq_recv(zmq_to_qp_run_socket, message, 510, 0)
|
rc = f77_zmq_recv(zmq_to_qp_run_socket, message, 1024, 0)
|
||||||
|
rc = min(1024,rc)
|
||||||
read(message(1:rc),*) reply
|
read(message(1:rc),*) reply
|
||||||
if (trim(reply) == 'get_task_reply') then
|
if (trim(reply) == 'get_task_reply') then
|
||||||
read(message(1:rc),*) reply, task_id
|
read(message(1:rc),*) reply, task_id
|
||||||
|
@ -8,7 +8,7 @@ source $QP_ROOT/tests/bats/common.bats.sh
|
|||||||
rm -rf work/h2o.ezfio/determinants/
|
rm -rf work/h2o.ezfio/determinants/
|
||||||
qp_edit -c $INPUT
|
qp_edit -c $INPUT
|
||||||
ezfio set_file $INPUT
|
ezfio set_file $INPUT
|
||||||
ezfio set perturbation do_pt2_end True
|
ezfio set perturbation do_pt2 True
|
||||||
ezfio set determinants n_det_max 16384
|
ezfio set determinants n_det_max 16384
|
||||||
qp_set_mo_class $INPUT -core "[1]" -inact "[2,5]" -act "[3,4,6,7]" -virt "[8-24]"
|
qp_set_mo_class $INPUT -core "[1]" -inact "[2,5]" -act "[3,4,6,7]" -virt "[8-24]"
|
||||||
qp_run cassd_zmq $INPUT
|
qp_run cassd_zmq $INPUT
|
||||||
@ -17,7 +17,7 @@ source $QP_ROOT/tests/bats/common.bats.sh
|
|||||||
|
|
||||||
ezfio set determinants n_det_max 1024
|
ezfio set determinants n_det_max 1024
|
||||||
ezfio set determinants read_wf True
|
ezfio set determinants read_wf True
|
||||||
ezfio set perturbation do_pt2_end True
|
ezfio set perturbation do_pt2 True
|
||||||
qp_run cassd_zmq $INPUT
|
qp_run cassd_zmq $INPUT
|
||||||
ezfio set determinants read_wf False
|
ezfio set determinants read_wf False
|
||||||
energy="$(ezfio get cas_sd_zmq energy)"
|
energy="$(ezfio get cas_sd_zmq energy)"
|
||||||
|
@ -7,7 +7,7 @@ function run_FCI() {
|
|||||||
test_exe full_ci || skip
|
test_exe full_ci || skip
|
||||||
qp_edit -c $1
|
qp_edit -c $1
|
||||||
ezfio set_file $1
|
ezfio set_file $1
|
||||||
ezfio set perturbation do_pt2_end True
|
ezfio set perturbation do_pt2 True
|
||||||
ezfio set determinants n_det_max $2
|
ezfio set determinants n_det_max $2
|
||||||
ezfio set davidson threshold_davidson 1.e-10
|
ezfio set davidson threshold_davidson 1.e-10
|
||||||
|
|
||||||
@ -23,7 +23,7 @@ function run_FCI_ZMQ() {
|
|||||||
test_exe fci_zmq || skip
|
test_exe fci_zmq || skip
|
||||||
qp_edit -c $1
|
qp_edit -c $1
|
||||||
ezfio set_file $1
|
ezfio set_file $1
|
||||||
ezfio set perturbation do_pt2_end True
|
ezfio set perturbation do_pt2 True
|
||||||
ezfio set determinants n_det_max $2
|
ezfio set determinants n_det_max $2
|
||||||
ezfio set davidson threshold_davidson 1.e-10
|
ezfio set davidson threshold_davidson 1.e-10
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ function run_FCI_ZMQ() {
|
|||||||
test_exe fci_zmq|| skip
|
test_exe fci_zmq|| skip
|
||||||
qp_edit -c $1
|
qp_edit -c $1
|
||||||
ezfio set_file $1
|
ezfio set_file $1
|
||||||
ezfio set perturbation do_pt2_end True
|
ezfio set perturbation do_pt2 True
|
||||||
ezfio set determinants n_det_max $2
|
ezfio set determinants n_det_max $2
|
||||||
ezfio set davidson threshold_davidson 1.e-10
|
ezfio set davidson threshold_davidson 1.e-10
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user