mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-12-09 13:13:29 +01:00
110 lines
2.9 KiB
Fortran
110 lines
2.9 KiB
Fortran
|
|
! ---
|
|
|
|
program fci_tc_bi
|
|
|
|
BEGIN_DOC
|
|
! Selected Full Configuration Interaction with stochastic selection
|
|
! and PT2.
|
|
!
|
|
! This program performs a |CIPSI|-like selected |CI| using a
|
|
! stochastic scheme for both the selection of the important Slater
|
|
! determinants and the computation of the |PT2| correction. This
|
|
! |CIPSI|-like algorithm will be performed for the lowest states of
|
|
! the variational space (see :option:`determinants n_states`). The
|
|
! |FCI| program will stop when reaching at least one the two following
|
|
! conditions:
|
|
!
|
|
! * number of Slater determinants > :option:`determinants n_det_max`
|
|
! * abs(|PT2|) less than :option:`perturbation pt2_max`
|
|
!
|
|
! The following other options can be of interest:
|
|
!
|
|
! :option:`determinants read_wf`
|
|
! When set to |false|, the program starts with a ROHF-like Slater
|
|
! determinant as a guess wave function. When set to |true|, the
|
|
! program starts with the wave function(s) stored in the |EZFIO|
|
|
! directory as guess wave function(s).
|
|
!
|
|
! :option:`determinants s2_eig`
|
|
! When set to |true|, the selection will systematically add all the
|
|
! necessary Slater determinants in order to have a pure spin wave
|
|
! function with an |S^2| value corresponding to
|
|
! :option:`determinants expected_s2`.
|
|
!
|
|
! For excited states calculations, it is recommended to start with
|
|
! :ref:`cis` or :ref:`cisd` guess wave functions, eventually in
|
|
! a restricted set of |MOs|, and to set :option:`determinants s2_eig`
|
|
! to |true|.
|
|
!
|
|
END_DOC
|
|
|
|
implicit none
|
|
|
|
my_grid_becke = .True.
|
|
PROVIDE tc_grid1_a tc_grid1_r
|
|
my_n_pt_r_grid = tc_grid1_r
|
|
my_n_pt_a_grid = tc_grid1_a
|
|
touch my_grid_becke my_n_pt_r_grid my_n_pt_a_grid
|
|
|
|
pruning = -1.d0
|
|
touch pruning
|
|
|
|
! pt2_relative_error = 0.01d0
|
|
! touch pt2_relative_error
|
|
|
|
call run_cipsi_tc()
|
|
|
|
end
|
|
|
|
! ---
|
|
|
|
subroutine run_cipsi_tc()
|
|
|
|
implicit none
|
|
|
|
if (.not. is_zmq_slave) then
|
|
|
|
PROVIDE psi_det psi_coef mo_bi_ortho_tc_two_e mo_bi_ortho_tc_one_e
|
|
|
|
if((elec_alpha_num+elec_beta_num) .ge. 3) then
|
|
if(three_body_h_tc) then
|
|
call provide_all_three_ints_bi_ortho()
|
|
endif
|
|
endif
|
|
|
|
FREE int2_grad1_u12_ao int2_grad1_u12_ao_t int2_grad1_u12_ao_transp
|
|
FREE int2_grad1_u12_bimo_transp
|
|
|
|
write(json_unit,json_array_open_fmt) 'fci_tc'
|
|
|
|
if(do_pt2) then
|
|
call run_stochastic_cipsi()
|
|
else
|
|
call run_cipsi()
|
|
endif
|
|
|
|
write(json_unit,json_dict_uopen_fmt)
|
|
write(json_unit,json_dict_close_fmtx)
|
|
write(json_unit,json_array_close_fmtx)
|
|
call json_close
|
|
|
|
else
|
|
|
|
PROVIDE mo_bi_ortho_tc_one_e mo_bi_ortho_tc_two_e pt2_min_parallel_tasks
|
|
|
|
if((elec_alpha_num+elec_beta_num) .ge. 3) then
|
|
if(three_body_h_tc) then
|
|
call provide_all_three_ints_bi_ortho()
|
|
endif
|
|
endif
|
|
|
|
FREE int2_grad1_u12_ao int2_grad1_u12_ao_t int2_grad1_u12_ao_transp
|
|
FREE int2_grad1_u12_bimo_transp
|
|
|
|
call run_slave_cipsi
|
|
|
|
endif
|
|
|
|
end
|