10
0
mirror of https://github.com/QuantumPackage/qp2.git synced 2024-07-22 10:47:38 +02:00
This commit is contained in:
Anthony Scemama 2021-01-12 14:23:33 +01:00
parent 6377f4df63
commit 76b10b9bf2
4 changed files with 27 additions and 24 deletions

View File

@ -2,8 +2,6 @@
* Version 2.2 * Version 2.2
** New features
** Changes ** Changes
- Python3 replaces Python2 - Python3 replaces Python2
@ -73,6 +71,10 @@
- S^2 in single precision - S^2 in single precision
- Added Shank function - Added Shank function
- Added utilities for periodic calculations - Added utilities for periodic calculations
- Added ~V_ne_psi_energy~
- Added ~h_core_huess~ routine
- Fixed Laplacians in real space (indices)
-
ao_one_e_integral_zero ao_one_e_integral_zero
banned_excitations banned_excitations

View File

@ -80,7 +80,7 @@ git:
./create_git_sha1.sh ./create_git_sha1.sh
${QP_EZFIO}/Ocaml/ezfio.ml: ${QP_EZFIO}/Ocaml/ezfio.ml:
$(NINJA) -C ${QP_ROOT}/config ${QP_ROOT}/lib/libezfio_irp.a ninja -C ${QP_ROOT}/config ${QP_ROOT}/lib/libezfio_irp.a
qp_edit.ml: ../scripts/ezfio_interface/qp_edit_template qp_edit.ml: ../scripts/ezfio_interface/qp_edit_template

View File

@ -1,3 +1,4 @@
! -*- mode: f90 -*-
program pt2 program pt2
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -15,51 +16,51 @@ program pt2
! !
END_DOC END_DOC
if (.not. is_zmq_slave) then if (.not. is_zmq_slave) then
read_wf = .True. read_wf = .True.
threshold_generators = 1.d0 threshold_generators = 1.d0
SOFT_TOUCH read_wf threshold_generators SOFT_TOUCH read_wf threshold_generators
PROVIDE mo_two_e_integrals_in_map PROVIDE mo_two_e_integrals_in_map
PROVIDE psi_energy PROVIDE psi_energy
call run call run
else else
call run_slave_cipsi call run_slave_cipsi
endif endif
end end program pt2
subroutine run subroutine run
implicit none implicit none
use selection_types use selection_types
integer :: i,j,k integer :: i,j,k
logical, external :: detEq logical, external :: detEq
type(pt2_type) :: pt2_data, pt2_data_err type(pt2_type) :: pt2_data, pt2_data_err
integer :: degree integer :: degree
integer :: n_det_before, to_select integer :: n_det_before, to_select
double precision :: threshold_davidson_in double precision :: threshold_davidson_in
double precision :: relative_error double precision :: relative_error
double precision, allocatable :: E_CI_before(:) double precision, allocatable :: E_CI_before(:)
allocate ( E_CI_before(N_states)) allocate ( E_CI_before(N_states))
call pt2_alloc(pt2_data, N_states) call pt2_alloc(pt2_data, N_states)
call pt2_alloc(pt2_data_err, N_states) call pt2_alloc(pt2_data_err, N_states)
E_CI_before(:) = psi_energy(:) + nuclear_repulsion E_CI_before(:) = psi_energy(:) + nuclear_repulsion
relative_error=PT2_relative_error relative_error=PT2_relative_error
if (do_pt2) then if (do_pt2) then
call ZMQ_pt2(psi_energy_with_nucl_rep, pt2_data, pt2_data_err, relative_error, 0) ! Stochastic PT2 call ZMQ_pt2(psi_energy_with_nucl_rep, pt2_data, pt2_data_err, relative_error, 0) ! Stochastic PT2
else else
call ZMQ_selection(0, pt2_data) call ZMQ_selection(0, pt2_data)
endif endif
call print_summary(psi_energy_with_nucl_rep(1:N_states), & call print_summary(psi_energy_with_nucl_rep(1:N_states), &
pt2_data, pt2_data_err, N_det,N_configuration,N_states,psi_s2) pt2_data, pt2_data_err, N_det,N_configuration,N_states,psi_s2)
call save_energy(E_CI_before, pt2_data % pt2) call save_energy(E_CI_before, pt2_data % pt2)
call pt2_dealloc(pt2_data) call pt2_dealloc(pt2_data)
call pt2_dealloc(pt2_data_err) call pt2_dealloc(pt2_data_err)
deallocate(E_CI_before) deallocate(E_CI_before)
end end subroutine run

View File

@ -28,14 +28,14 @@ subroutine svd(A,LDA,U,LDU,D,Vt,LDVt,m,n)
! Find optimal size for temp arrays ! Find optimal size for temp arrays
allocate(work(1)) allocate(work(1))
lwork = -1 lwork = -1
call dgesvd('A','A', m, n, A_tmp, LDA, & call dgesvd('S','S', m, n, A_tmp, LDA, &
D, U, LDU, Vt, LDVt, work, lwork, info) D, U, LDU, Vt, LDVt, work, lwork, info)
! /!\ int(WORK(1)) becomes negative when WORK(1) > 2147483648 ! /!\ int(WORK(1)) becomes negative when WORK(1) > 2147483648
lwork = max(int(work(1)), 5*MIN(M,N)) lwork = max(int(work(1)), 10*MIN(M,N))
deallocate(work) deallocate(work)
allocate(work(lwork)) allocate(work(lwork))
call dgesvd('A','A', m, n, A_tmp, LDA, & call dgesvd('S','S', m, n, A_tmp, LDA, &
D, U, LDU, Vt, LDVt, work, lwork, info) D, U, LDU, Vt, LDVt, work, lwork, info)
deallocate(A_tmp,work) deallocate(A_tmp,work)