diff --git a/plugins/Full_CI_ZMQ/fci_zmq.irp.f b/plugins/Full_CI_ZMQ/fci_zmq.irp.f index fcc38954..585e40e3 100644 --- a/plugins/Full_CI_ZMQ/fci_zmq.irp.f +++ b/plugins/Full_CI_ZMQ/fci_zmq.irp.f @@ -9,7 +9,13 @@ program fci_zmq double precision :: threshold_davidson_in allocate (pt2(N_states)) - + + IF (correlation_energy_ratio_max .NE. 1.d0) THEN + + DOUBLE PRECISION :: hf_energy_ref + CALL ezfio_get_hartree_fock_energy(hf_energy_ref) + END IF + pt2 = 1.d0 threshold_davidson_in = threshold_davidson threshold_davidson = threshold_davidson_in * 100.d0 @@ -41,15 +47,34 @@ program fci_zmq E_CI_before(1:N_states) = CI_energy(1:N_states) n_det_before = 0 + do while ( (N_det < N_det_max) .and. (maxval(abs(pt2(1:N_states))) > pt2_max) ) + + + IF (correlation_energy_ratio_max .NE. 1.d0) THEN + DOUBLE PRECISION :: correlation_energy_var, correlation_energy_var_ratio + + correlation_energy_var = MAXVAL(E_CI_before) - hf_energy_ref + correlation_energy_var_ratio = correlation_energy_var / (correlation_energy_var + MAXVAL(pt2(:))) + + IF (correlation_energy_ratio_max < correlation_energy_var_ratio) THEN + EXIT + ENDIF - print *, 'N_det = ', N_det - print *, 'N_states = ', N_states + ENDIF + + + print *, 'N_det = ', N_det + print *, 'N_states = ', N_states + IF (correlation_energy_ratio_max .NE. 1.d0) THEN + print*, 'correlation_ratio = ', correlation_energy_var + ENDIF + do k=1, N_states print*,'State ',k - print *, 'PT2 = ', pt2(k) - print *, 'E = ', CI_energy(k) - print *, 'E(before)+PT2 = ', E_CI_before(k)+pt2(k) + print *, 'PT2 = ', pt2(k) + print *, 'E = ', CI_energy(k) + print *, 'E(before)+PT2 = ', E_CI_before(k)+pt2(k) enddo print *, '-----' if(N_states.gt.1)then diff --git a/plugins/Perturbation/EZFIO.cfg b/plugins/Perturbation/EZFIO.cfg index 4f0457a2..19c6c52d 100644 --- a/plugins/Perturbation/EZFIO.cfg +++ b/plugins/Perturbation/EZFIO.cfg @@ -14,10 +14,17 @@ default: 0.0001 [var_pt2_ratio] type: Normalized_float doc: The selection process stops when the energy ratio variational/(variational+PT2) - is equal to var_pt2_ratio + is equal to var_pt2_ratio. (Obsolete. Need to be removed) interface: ezfio,provider,ocaml default: 0.75 +[correlation_energy_ratio_max] +type: Normalized_float +doc: The selection process stops at a fixed correlation ratio (usefull for getting same accuracy between molecules) + Defined as (E_CI-E_HF)/ (E_CI+PT2 - E_HF) If Ratio eq 1 it will not be used. (E_HF) is not required. +interface: ezfio,provider,ocaml +default: 1.00 + [threshold_generators_pt2] type: Threshold doc: Thresholds on generators (fraction of the norm) for final PT2 calculation diff --git a/plugins/qmcpack/qp_convert_qmcpack_to_ezfio.py b/plugins/qmcpack/qp_convert_qmcpack_to_ezfio.py index a1f47ccd..3298129d 100755 --- a/plugins/qmcpack/qp_convert_qmcpack_to_ezfio.py +++ b/plugins/qmcpack/qp_convert_qmcpack_to_ezfio.py @@ -183,9 +183,6 @@ def get_nb_permutation(str_): def order_l_l_sym(l_l_sym): - - l_order_mo = [i for i,_ in enumerate(l_l_sym)] - n = 1 for i in range(len(l_l_sym)): if n != 1: @@ -195,11 +192,11 @@ def order_l_l_sym(l_l_sym): l = l_l_sym[i] n = get_nb_permutation(l[2]) - l_l_sym[i:i + n], l_order_mo[i:i+n] = zip(*sorted(zip(l_l_sym[i:i + n],l_order_mo[i:i+n]), - key=lambda x: x[0][2], - cmp=compare_gamess_style)) + l_l_sym[i:i + n] = sorted(l_l_sym[i:i + n], + key=lambda x: x[2], + cmp=compare_gamess_style) - return l_l_sym, l_order_mo + return l_l_sym #========================== @@ -208,13 +205,8 @@ def order_l_l_sym(l_l_sym): l_sym_without_header = sym_raw.split("\n")[3:-2] l_l_sym_raw = [i.split() for i in l_sym_without_header] -print len(l_l_sym_raw) - l_l_sym_expend_sym = expend_sym_l(l_l_sym_raw) -print len(l_l_sym_expend_sym) - -l_l_sym_ordered, l_order_mo = order_l_l_sym(l_l_sym_expend_sym) - +l_l_sym_ordered = order_l_l_sym(l_l_sym_expend_sym) #======== #MO COEF @@ -356,7 +348,6 @@ d_rep={"+":"1","-":"0"} det_without_header = det_raw[pos+2::] - for line_raw in det_without_header.split("\n"): line = line_raw @@ -364,10 +355,8 @@ for line_raw in det_without_header.split("\n"): try: float(line) except ValueError: - line_order = [line_raw[i] for i in l_order_mo] line= "".join([d_rep[x] if x in d_rep else x for x in line_raw]) print line.strip() print "END_DET" -