1
0
mirror of https://gitlab.com/scemama/qp_plugins_scemama.git synced 2024-12-22 12:23:37 +01:00

minor modifs in casscf

This commit is contained in:
Emmanuel Giner 2021-07-22 23:31:08 +02:00
parent 14f4a79a4b
commit bc2ecb8b2d
2 changed files with 34 additions and 6 deletions

View File

@ -55,3 +55,21 @@ doc: Threshold on the convergence of the CASCF energy.
interface: ezfio,provider,ocaml
default: 1.e-06
[pt2_min_casscf]
type: Threshold
doc: Minimum value of the pt2_max parameter for the CIPSI in the CASSCF iterations.
interface: ezfio,provider,ocaml
default: 1.e-04
[n_big_act_orb]
type: integer
doc: Number of active orbitals from which the active space is considered as large, and therefore pt2_min_casscf is activated.
interface: ezfio,provider,ocaml
default: 16
[adaptive_pt2_max]
type: logical
doc: If |true|, the pt2_max value in the CIPSI iterations will automatically adapt, otherwise it is fixed at the value given in the EZFIO folder
interface: ezfio,provider,ocaml
default: True

View File

@ -6,8 +6,6 @@ program casscf
call reorder_orbitals_for_casscf
! no_vvvv_integrals = .True.
! touch no_vvvv_integrals
pt2_max = 0.005
SOFT_TOUCH pt2_max
n_det_max_full = 500
touch n_det_max_full
pt2_relative_error = 0.02
@ -30,6 +28,10 @@ subroutine run
state_following_casscf = .True.
touch state_following_casscf
ept2_before = 0.d0
if(adaptive_pt2_max)then
pt2_max = 0.005
SOFT_TOUCH pt2_max
endif
do while (.not.converged)
call run_stochastic_cipsi
energy_old = energy
@ -66,8 +68,13 @@ subroutine run
converged = dabs(delta_E) < thresh_casscf
endif
ept2_before = E_PT2
pt2_max = dabs(energy_improvement / (pt2_relative_error))
pt2_max = min(pt2_max, pt2_max_before)
if(adaptive_pt2_max)then
pt2_max = dabs(energy_improvement / (pt2_relative_error))
pt2_max = min(pt2_max, pt2_max_before)
if(n_act_orb.ge.n_big_act_orb)then
pt2_max = max(pt2_max,pt2_min_casscf)
endif
endif
print*,''
call write_double(6,pt2_max, 'PT2_MAX for next iteration = ')
@ -76,12 +83,15 @@ subroutine run
call save_mos
if(.not.converged)then
iteration += 1
N_det = max(N_det/2 ,N_states)
N_det = max(N_det/8 ,N_states)
psi_det = psi_det_sorted
psi_coef = psi_coef_sorted
read_wf = .True.
call clear_mo_map
SOFT_TOUCH mo_coef N_det pt2_max psi_det psi_coef
SOFT_TOUCH mo_coef N_det psi_det psi_coef
if(adaptive_pt2_max)then
SOFT_TOUCH pt2_max
endif
if(iteration .gt. 3)then
state_following_casscf = state_following_casscf_save
soft_touch state_following_casscf