From 3e54005d7ee7b9340722f45d07f026f445c32921 Mon Sep 17 00:00:00 2001 From: Emmanuel Giner Date: Wed, 26 Dec 2018 16:45:57 +0100 Subject: [PATCH 01/16] minor changes in README.rst of many src files --- scripts/module/module_handler.py | 1 + src/ao_one_e_integrals/README.rst | 7 + src/ao_one_e_integrals/spread_dipole_ao.irp.f | 2 + src/aux_quantities/README.rst | 13 +- src/becke_numerical_grid/README.rst | 9 +- src/becke_numerical_grid/example.irp.f | 4 +- src/becke_numerical_grid/grid_becke.irp.f | 8 +- .../grid_becke_vector.irp.f | 6 +- src/davidson/README.rst | 3 + src/davidson/u0_h_u0.irp.f | 2 +- src/determinants/README.rst | 16 + src/dft_keywords/README.rst | 11 +- src/dft_utils_in_r/dm_in_r.irp.f | 134 +- src/dft_utils_one_e/e_xc.irp.f | 12 +- src/dft_utils_one_e/pot_ao.irp.f | 12 +- src/dft_utils_one_e/sr_exc.irp.f | 12 +- src/dft_utils_one_e/sr_pot_ao.irp.f | 12 +- src/dft_utils_two_body/.gitignore | 1 - src/dft_utils_two_body/INSTALL.cfg | 2 - src/dft_utils_two_body/NEED | 3 - src/dft_utils_two_body/mr_dft_energy.irp.f | 44 - .../print_rsdft_variational_energy.irp.f | 16 - src/dft_utils_two_body/psi_energy_erf.irp.f | 81 -- .../routines_save_integrals_dft.irp.f | 26 - src/dft_utils_two_body/slater_rules_erf.irp.f | 226 ---- src/dft_utils_two_body/u0_w_erf_u0.irp.f | 482 ------- .../write_effective_rsdft_hamiltonian.irp.f | 34 - src/dummy/NEED | 2 - src/generators_cas/README.rst | 2 +- src/mo_one_e_integrals/README.rst | 9 +- .../routines_save_integrals_erf.irp.f | 1 + src/mrpt_utils/.gitignore | 1 - src/mrpt_utils/EZFIO.cfg | 7 - src/mrpt_utils/NEED | 3 - src/mrpt_utils/README.rst | 5 - src/mrpt_utils/density_matrix_based.irp.f | 193 --- src/mrpt_utils/energies_cas.irp.f | 1109 ----------------- src/mrpt_utils/excitations_cas.irp.f | 708 ----------- src/mrpt_utils/fock_like_operators.irp.f | 210 ---- src/mrpt_utils/give_2h2p.irp.f | 35 - src/mrpt_utils/h_apply.irp.f | 187 --- src/mrpt_utils/mrpt_dress.irp.f | 187 --- src/mrpt_utils/mrpt_utils.irp.f | 365 ------ src/mrpt_utils/new_way.irp.f | 958 -------------- .../new_way_second_order_coef.irp.f | 796 ------------ src/mrpt_utils/psi_active_prov.irp.f | 579 --------- src/mrpt_utils/second_order_new.irp.f | 757 ----------- src/mrpt_utils/second_order_new_2p.irp.f | 283 ----- .../set_as_holes_and_particles.irp.f | 27 - src/mrpt_utils/utils_bitmask.irp.f | 36 - src/perturbation/NEED | 1 - src/perturbation/pt2_new.irp.f | 71 -- src/scf_utils/README.rst | 4 +- 53 files changed, 119 insertions(+), 7596 deletions(-) delete mode 120000 src/dft_utils_two_body/.gitignore delete mode 100644 src/dft_utils_two_body/INSTALL.cfg delete mode 100644 src/dft_utils_two_body/NEED delete mode 100644 src/dft_utils_two_body/mr_dft_energy.irp.f delete mode 100644 src/dft_utils_two_body/print_rsdft_variational_energy.irp.f delete mode 100644 src/dft_utils_two_body/psi_energy_erf.irp.f delete mode 100644 src/dft_utils_two_body/routines_save_integrals_dft.irp.f delete mode 100644 src/dft_utils_two_body/slater_rules_erf.irp.f delete mode 100644 src/dft_utils_two_body/u0_w_erf_u0.irp.f delete mode 100644 src/dft_utils_two_body/write_effective_rsdft_hamiltonian.irp.f delete mode 120000 src/mrpt_utils/.gitignore delete mode 100644 src/mrpt_utils/EZFIO.cfg delete mode 100644 src/mrpt_utils/NEED delete mode 100644 src/mrpt_utils/README.rst delete mode 100644 src/mrpt_utils/density_matrix_based.irp.f delete mode 100644 src/mrpt_utils/energies_cas.irp.f delete mode 100644 src/mrpt_utils/excitations_cas.irp.f delete mode 100644 src/mrpt_utils/fock_like_operators.irp.f delete mode 100644 src/mrpt_utils/give_2h2p.irp.f delete mode 100644 src/mrpt_utils/h_apply.irp.f delete mode 100644 src/mrpt_utils/mrpt_dress.irp.f delete mode 100644 src/mrpt_utils/mrpt_utils.irp.f delete mode 100644 src/mrpt_utils/new_way.irp.f delete mode 100644 src/mrpt_utils/new_way_second_order_coef.irp.f delete mode 100644 src/mrpt_utils/psi_active_prov.irp.f delete mode 100644 src/mrpt_utils/second_order_new.irp.f delete mode 100644 src/mrpt_utils/second_order_new_2p.irp.f delete mode 100644 src/mrpt_utils/set_as_holes_and_particles.irp.f delete mode 100644 src/mrpt_utils/utils_bitmask.irp.f delete mode 100644 src/perturbation/pt2_new.irp.f diff --git a/scripts/module/module_handler.py b/scripts/module/module_handler.py index 22677d33..a31a1d0c 100755 --- a/scripts/module/module_handler.py +++ b/scripts/module/module_handler.py @@ -84,6 +84,7 @@ def get_dict_child(l_root_abs=None): except IOError: pass else: +# print module_rel if module_rel not in d_ref: d_ref[module_rel] = l_children else: diff --git a/src/ao_one_e_integrals/README.rst b/src/ao_one_e_integrals/README.rst index 60ebfdf4..0901554a 100644 --- a/src/ao_one_e_integrals/README.rst +++ b/src/ao_one_e_integrals/README.rst @@ -4,3 +4,10 @@ AO_one_e_integrals All the one-electron integrals in the |AO| basis are here. +The most important providers for usual quantum-chemistry calculation are: + +# `ao_kinetic_integral` which are the kinetic operator integrals on the |AO| basis (see :file:`kin_ao_ints.irp.f`) +# `ao_nucl_elec_integral` which are the nuclear-elctron operator integrals on the |AO| basis (see :file:`pot_ao_ints.irp.f`) +# `ao_mono_elec_integral` which are the the h_core operator integrals on the |AO| basis (see :file:`ao_mono_ints.irp.f`) + +Note that you can find other interesting integrals related to the position operator in :file:`spread_dipole_ao.irp.f`. diff --git a/src/ao_one_e_integrals/spread_dipole_ao.irp.f b/src/ao_one_e_integrals/spread_dipole_ao.irp.f index 5c3da801..9cff2c97 100644 --- a/src/ao_one_e_integrals/spread_dipole_ao.irp.f +++ b/src/ao_one_e_integrals/spread_dipole_ao.irp.f @@ -222,9 +222,11 @@ subroutine overlap_bourrin_spread(A_center,B_center,alpha,beta,power_A,power_B,overlap_x,lower_exp_val,dx,nx) + BEGIN_DOC ! Computes the following integral : ! int [-infty ; +infty] of [(x-A_center)^(power_A) * (x-B_center)^power_B * exp(-alpha(x-A_center)^2) * exp(-beta(x-B_center)^2) * x ] ! needed for the dipole and those things + END_DOC implicit none integer :: i,j,k,l integer,intent(in) :: power_A,power_B diff --git a/src/aux_quantities/README.rst b/src/aux_quantities/README.rst index 8654090e..7b7154fe 100644 --- a/src/aux_quantities/README.rst +++ b/src/aux_quantities/README.rst @@ -1,6 +1,13 @@ -============ -Data energy and density -============ +============== +aux_quantities +============== This module contains some global variables (such as densities and energies) which are stored in the EZFIO folder in a different place than determinants. This is used in practice to store density matrices which can be obtained from any methods, as long as they are stored in the same MO basis which is used for the calculations. In |RS-DFT| calculations, this can be done to perform damping on the density in order to speed up convergence. + +The main providers of that module are: + +# `data_one_body_alpha_dm_mo` and `data_one_body_beta_dm_mo` which are the one-body alpha and beta densities which are necessary read from the EZFIO folder. + + +Thanks to these providers you can use any density matrix that does not necessary corresponds to that of the current wave function. diff --git a/src/becke_numerical_grid/README.rst b/src/becke_numerical_grid/README.rst index 457e5259..b5019036 100644 --- a/src/becke_numerical_grid/README.rst +++ b/src/becke_numerical_grid/README.rst @@ -1,11 +1,18 @@ ==================== -Becke Numerical Grid +becke_numerical_grid ==================== This module contains all quantities needed to build the Becke's grid used in general for DFT integration. Note that it can be used for whatever integration in R^3 as long as the functions to be integrated are mostly concentrated near the atomic regions. This grid is built as the reunion of a spherical grid around each atom. Each spherical grid contains a certain number of radial and angular points. +The main providers of that module are: + +# :option:`becke_numerical_grid n_points_integration_angular` which is the number of angular integration points. WARNING: it obeys to specific rules so it cannot be any integer number. Some of the possible values are [ 50 | 74 | 266 | 590 | 1202 | 2030 | 5810 ] for instance. See :file:`angular.f` for more details. +# :option:`becke_numerical_grid n_points_radial_grid` which is the number of radial angular points. This can be any strictly positive integer. Nevertheless, a minimum of 50 is in general necessary. +# `final_grid_points` which are the (x,y,z) coordinates of the grid points. +# `final_weight_at_r_vector` which are the weights at each grid point + For a simple example of how to use the grid, see :file:`example.irp.f`. The spherical integration uses Lebedev-Laikov grids, which was used from the code distributed through CCL (http://www.ccl.net/). diff --git a/src/becke_numerical_grid/example.irp.f b/src/becke_numerical_grid/example.irp.f index 32f6990a..2f7759b3 100644 --- a/src/becke_numerical_grid/example.irp.f +++ b/src/becke_numerical_grid/example.irp.f @@ -35,7 +35,7 @@ subroutine example_becke_numerical_grid r(1) = final_grid_points(1,i) r(2) = final_grid_points(2,i) r(3) = final_grid_points(3,i) - weight = final_weight_functions_at_final_grid_points(i) + weight = final_weight_at_r_vector(i) double precision :: distance, f_r ! you compute the function to be integrated distance = dsqrt( (r(1) - center(1))**2 + (r(2) - center(2))**2 + (r(3) - center(3))**2 ) @@ -58,7 +58,7 @@ subroutine example_becke_numerical_grid r(1) = grid_points_per_atom(1,k,j,i) r(2) = grid_points_per_atom(2,k,j,i) r(3) = grid_points_per_atom(3,k,j,i) - weight = final_weight_functions_at_grid_points(k,j,i) + weight = final_weight_at_r(k,j,i) distance = dsqrt( (r(1) - center(1))**2 + (r(2) - center(2))**2 + (r(3) - center(3))**2 ) f_r = dexp(-alpha * distance) integral_2 += f_r * weight diff --git a/src/becke_numerical_grid/grid_becke.irp.f b/src/becke_numerical_grid/grid_becke.irp.f index 6a08e628..b2be30e7 100644 --- a/src/becke_numerical_grid/grid_becke.irp.f +++ b/src/becke_numerical_grid/grid_becke.irp.f @@ -123,7 +123,7 @@ BEGIN_PROVIDER [double precision, grid_points_per_atom, (3,n_points_integration_ enddo END_PROVIDER -BEGIN_PROVIDER [double precision, weight_functions_at_grid_points, (n_points_integration_angular,n_points_radial_grid,nucl_num) ] +BEGIN_PROVIDER [double precision, weight_at_r, (n_points_integration_angular,n_points_radial_grid,nucl_num) ] BEGIN_DOC ! Weight function at grid points : w_n(r) according to the equation (22) ! of Becke original paper (JCP, 88, 1988) @@ -156,7 +156,7 @@ BEGIN_PROVIDER [double precision, weight_functions_at_grid_points, (n_points_int accu += tmp_array(i) enddo accu = 1.d0/accu - weight_functions_at_grid_points(l,k,j) = tmp_array(j) * accu + weight_at_r(l,k,j) = tmp_array(j) * accu enddo enddo enddo @@ -164,7 +164,7 @@ BEGIN_PROVIDER [double precision, weight_functions_at_grid_points, (n_points_int END_PROVIDER -BEGIN_PROVIDER [double precision, final_weight_functions_at_grid_points, (n_points_integration_angular,n_points_radial_grid,nucl_num) ] +BEGIN_PROVIDER [double precision, final_weight_at_r, (n_points_integration_angular,n_points_radial_grid,nucl_num) ] BEGIN_DOC ! Total weight on each grid point which takes into account all Lebedev, Voronoi and radial weights. END_DOC @@ -182,7 +182,7 @@ BEGIN_PROVIDER [double precision, final_weight_functions_at_grid_points, (n_poin do k = 1, n_points_integration_angular ! for each angular point attached to the "jth" atom contrib_integration = derivative_knowles_function(alpha_knowles(int(nucl_charge(j))),m_knowles,x)& *knowles_function(alpha_knowles(int(nucl_charge(j))),m_knowles,x)**2 - final_weight_functions_at_grid_points(k,i,j) = weights_angular_points(k) * weight_functions_at_grid_points(k,i,j) * contrib_integration * dr_radial_integral + final_weight_at_r(k,i,j) = weights_angular_points(k) * weight_at_r(k,i,j) * contrib_integration * dr_radial_integral enddo enddo enddo diff --git a/src/becke_numerical_grid/grid_becke_vector.irp.f b/src/becke_numerical_grid/grid_becke_vector.irp.f index 46431e65..cf86121a 100644 --- a/src/becke_numerical_grid/grid_becke_vector.irp.f +++ b/src/becke_numerical_grid/grid_becke_vector.irp.f @@ -24,14 +24,14 @@ BEGIN_PROVIDER [integer, n_points_final_grid] END_PROVIDER BEGIN_PROVIDER [double precision, final_grid_points, (3,n_points_final_grid)] -&BEGIN_PROVIDER [double precision, final_weight_functions_at_final_grid_points, (n_points_final_grid) ] +&BEGIN_PROVIDER [double precision, final_weight_at_r_vector, (n_points_final_grid) ] &BEGIN_PROVIDER [integer, index_final_points, (3,n_points_final_grid) ] &BEGIN_PROVIDER [integer, index_final_points_reverse, (n_points_integration_angular,n_points_radial_grid,nucl_num) ] implicit none BEGIN_DOC ! final_grid_points(1:3,j) = (/ x, y, z /) of the jth grid point ! -! final_weight_functions_at_final_grid_points(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions +! final_weight_at_r_vector(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions ! ! index_final_points(1:3,i) = gives the angular, radial and atomic indices associated to the ith grid point ! @@ -52,7 +52,7 @@ END_PROVIDER final_grid_points(1,i_count) = grid_points_per_atom(1,k,i,j) final_grid_points(2,i_count) = grid_points_per_atom(2,k,i,j) final_grid_points(3,i_count) = grid_points_per_atom(3,k,i,j) - final_weight_functions_at_final_grid_points(i_count) = final_weight_functions_at_grid_points(k,i,j) + final_weight_at_r_vector(i_count) = final_weight_at_r(k,i,j) index_final_points(1,i_count) = k index_final_points(2,i_count) = i index_final_points(3,i_count) = j diff --git a/src/davidson/README.rst b/src/davidson/README.rst index bd88edfc..1ff7847a 100644 --- a/src/davidson/README.rst +++ b/src/davidson/README.rst @@ -8,4 +8,7 @@ a dressing is used, the dressing column should be defined and the :ref:`davidsondressed` module should be used. If no dressing is required, the :ref:`davidson` module should be used, and it has a default zero dressing vector. +The important providers for that module are: +# `psi_energy` which is the expectation value over the wave function (`psi_det`, `psi_coef`) of the Hamiltonian, dressed or not. It uses the general subroutine `u_0_H_u_0`. +# `psi_energy_bielec` which is the expectation value over the wave function (`psi_det`, `psi_coef`) of the standard two-electrons coulomb operator. It uses the general routine `u_0_H_u_0_bielec`. diff --git a/src/davidson/u0_h_u0.irp.f b/src/davidson/u0_h_u0.irp.f index 5158858f..fee36079 100644 --- a/src/davidson/u0_h_u0.irp.f +++ b/src/davidson/u0_h_u0.irp.f @@ -1,7 +1,7 @@ BEGIN_PROVIDER [ double precision, psi_energy, (N_states) ] implicit none BEGIN_DOC -! Energy of the current wave function +! Electronic energy of the current wave function END_DOC call u_0_H_u_0(psi_energy,psi_coef,N_det,psi_det,N_int,N_states,psi_det_size) integer :: i diff --git a/src/determinants/README.rst b/src/determinants/README.rst index ff83f7c4..63d88b02 100644 --- a/src/determinants/README.rst +++ b/src/determinants/README.rst @@ -3,3 +3,19 @@ Determinants ============ Contains everything for the computation of the Hamiltonian matrix elements in the basis of orthogonal Slater determinants built on a restricted spin-orbitals basis. + +The main providers for this module are: + +# :option:`determinants n_states`: number of states to be computed +# `psi_det`: list of determinants in the wave function used in many routines/providers of the |QP|. +# `psi_coef`: list of coefficients, for all :option:`determinants n_states` states, and all determinants. + +The main routines for this module are: + +# `i_H_j`: computes the Hamiltonian matrix element between two arbitrary Slater determinants. +# `i_H_j_s2`: computes the Hamiltonian and (:math:`S^2`) matrix element between two arbitrary Slater determinants. +# `i_H_j_verbose`: returns the decomposition in terms of one- and two-body components of the Hamiltonian matrix elements between two arbitrary Slater determinants. Also return the fermionic phase factor. +# `i_H_psi`: computes the Hamiltonian matrix element between an arbitrary Slater determinant and a wave function composed of a sum of arbitrary Slater determinants. + + +For an example of how to use these routines and providers, take a look at :file:`example.irp.f`. diff --git a/src/dft_keywords/README.rst b/src/dft_keywords/README.rst index febb0a9f..89980d79 100644 --- a/src/dft_keywords/README.rst +++ b/src/dft_keywords/README.rst @@ -1,12 +1,13 @@ ============ -DFT Keywords +dft_keywords ============ This module contains the main keywords related to a DFT calculation or RS-DFT calculation, such as: -# :option:exchange_functional -# :option:correlation_functional -# :option:HF_exchange : only relevent for the :ref:`ks_scf` program -# :option:density_for_dft : mainly relevent for multi-determinant range separated DFT, see the plugins of eginer. +# :option:`dft_keywords exchange_functional` +# :option:`dft_keywords correlation_functional` +# :option:`dft_keywords HF_exchange` : only relevent for the :ref:`ks_scf` program The keyword for the range separation parameter :math:`\mu` is the :option:`ao_two_e_erf_integrals mu_erf` keyword. + +The keyword for the type of density used in RS-DFT calculation with a multi-configurational wave function is the :option:`density_for_dft density_for_dft` keyword. diff --git a/src/dft_utils_in_r/dm_in_r.irp.f b/src/dft_utils_in_r/dm_in_r.irp.f index 888573cd..33da7ffe 100644 --- a/src/dft_utils_in_r/dm_in_r.irp.f +++ b/src/dft_utils_in_r/dm_in_r.irp.f @@ -103,8 +103,8 @@ end enddo end - BEGIN_PROVIDER [double precision, one_body_dm_mo_alpha_at_grid_points, (n_points_integration_angular,n_points_radial_grid,nucl_num,N_states) ] -&BEGIN_PROVIDER [double precision, one_body_dm_mo_beta_at_grid_points, (n_points_integration_angular,n_points_radial_grid,nucl_num,N_states) ] + BEGIN_PROVIDER [double precision, one_dm_alpha_in_r, (n_points_integration_angular,n_points_radial_grid,nucl_num,N_states) ] +&BEGIN_PROVIDER [double precision, one_dm_beta_in_r, (n_points_integration_angular,n_points_radial_grid,nucl_num,N_states) ] implicit none integer :: i,j,k,l,m,istate double precision :: contrib @@ -114,8 +114,8 @@ end do k = 1, n_points_radial_grid -1 do l = 1, n_points_integration_angular do istate = 1, N_States - one_body_dm_mo_alpha_at_grid_points(l,k,j,istate) = 0.d0 - one_body_dm_mo_beta_at_grid_points(l,k,j,istate) = 0.d0 + one_dm_alpha_in_r(l,k,j,istate) = 0.d0 + one_dm_beta_in_r(l,k,j,istate) = 0.d0 enddo r(1) = grid_points_per_atom(1,l,k,j) r(2) = grid_points_per_atom(2,l,k,j) @@ -124,8 +124,8 @@ end double precision :: dm_a(N_states),dm_b(N_states) call dm_dft_alpha_beta_at_r(r,dm_a,dm_b) do istate=1,N_states - one_body_dm_mo_alpha_at_grid_points(l,k,j,istate) = dm_a(istate) - one_body_dm_mo_beta_at_grid_points(l,k,j,istate) = dm_b(istate) + one_dm_alpha_in_r(l,k,j,istate) = dm_a(istate) + one_dm_beta_in_r(l,k,j,istate) = dm_b(istate) enddo enddo @@ -161,15 +161,15 @@ END_PROVIDER END_PROVIDER - BEGIN_PROVIDER [double precision, one_body_dm_alpha_and_grad_at_r, (4,n_points_final_grid,N_states) ] -&BEGIN_PROVIDER [double precision, one_body_dm_beta_and_grad_at_r, (4,n_points_final_grid,N_states) ] + BEGIN_PROVIDER [double precision, one_dm_and_grad_alpha_in_r, (4,n_points_final_grid,N_states) ] +&BEGIN_PROVIDER [double precision, one_dm_and_grad_beta_in_r, (4,n_points_final_grid,N_states) ] &BEGIN_PROVIDER [double precision, one_body_grad_2_dm_alpha_at_r, (n_points_final_grid,N_states) ] &BEGIN_PROVIDER [double precision, one_body_grad_2_dm_beta_at_r, (n_points_final_grid,N_states) ] BEGIN_DOC -! one_body_dm_alpha_and_grad_at_r(1,i,i_state) = d\dx n_alpha(r_i,istate) -! one_body_dm_alpha_and_grad_at_r(2,i,i_state) = d\dy n_alpha(r_i,istate) -! one_body_dm_alpha_and_grad_at_r(3,i,i_state) = d\dz n_alpha(r_i,istate) -! one_body_dm_alpha_and_grad_at_r(4,i,i_state) = n_alpha(r_i,istate) +! one_dm_and_grad_alpha_in_r(1,i,i_state) = d\dx n_alpha(r_i,istate) +! one_dm_and_grad_alpha_in_r(2,i,i_state) = d\dy n_alpha(r_i,istate) +! one_dm_and_grad_alpha_in_r(3,i,i_state) = d\dz n_alpha(r_i,istate) +! one_dm_and_grad_alpha_in_r(4,i,i_state) = n_alpha(r_i,istate) ! one_body_grad_2_dm_alpha_at_r(i,istate) = d\dx n_alpha(r_i,istate)^2 + d\dy n_alpha(r_i,istate)^2 + d\dz n_alpha(r_i,istate)^2 ! where r_i is the ith point of the grid and istate is the state number END_DOC @@ -188,112 +188,18 @@ END_PROVIDER r(3) = final_grid_points(3,i) !!!! Works also with the ao basis call density_and_grad_alpha_beta_and_all_aos_and_grad_aos_at_r(r,dm_a,dm_b, dm_a_grad, dm_b_grad, aos_array, grad_aos_array) - one_body_dm_alpha_and_grad_at_r(1,i,istate) = dm_a_grad(1,istate) - one_body_dm_alpha_and_grad_at_r(2,i,istate) = dm_a_grad(2,istate) - one_body_dm_alpha_and_grad_at_r(3,i,istate) = dm_a_grad(3,istate) - one_body_dm_alpha_and_grad_at_r(4,i,istate) = dm_a(istate) + one_dm_and_grad_alpha_in_r(1,i,istate) = dm_a_grad(1,istate) + one_dm_and_grad_alpha_in_r(2,i,istate) = dm_a_grad(2,istate) + one_dm_and_grad_alpha_in_r(3,i,istate) = dm_a_grad(3,istate) + one_dm_and_grad_alpha_in_r(4,i,istate) = dm_a(istate) one_body_grad_2_dm_alpha_at_r(i,istate) = dm_a_grad(1,istate) * dm_a_grad(1,istate) + dm_a_grad(2,istate) * dm_a_grad(2,istate) + dm_a_grad(3,istate) * dm_a_grad(3,istate) - one_body_dm_beta_and_grad_at_r(1,i,istate) = dm_b_grad(1,istate) - one_body_dm_beta_and_grad_at_r(2,i,istate) = dm_b_grad(2,istate) - one_body_dm_beta_and_grad_at_r(3,i,istate) = dm_b_grad(3,istate) - one_body_dm_beta_and_grad_at_r(4,i,istate) = dm_b(istate) + one_dm_and_grad_beta_in_r(1,i,istate) = dm_b_grad(1,istate) + one_dm_and_grad_beta_in_r(2,i,istate) = dm_b_grad(2,istate) + one_dm_and_grad_beta_in_r(3,i,istate) = dm_b_grad(3,istate) + one_dm_and_grad_beta_in_r(4,i,istate) = dm_b(istate) one_body_grad_2_dm_beta_at_r(i,istate) = dm_b_grad(1,istate) * dm_b_grad(1,istate) + dm_b_grad(2,istate) * dm_b_grad(2,istate) + dm_b_grad(3,istate) * dm_b_grad(3,istate) enddo enddo END_PROVIDER - - - - BEGIN_PROVIDER [double precision, one_body_dm_mo_alpha_and_grad_at_grid_points, (4,n_points_integration_angular,n_points_radial_grid,nucl_num,N_states) ] -&BEGIN_PROVIDER [double precision, one_body_dm_mo_beta_and_grad_at_grid_points, (4,n_points_integration_angular,n_points_radial_grid,nucl_num,N_states) ] - BEGIN_DOC -! one_body_dm_mo_alpha_and_grad_at_grid_points(1,.....,i_state) = d\dx \rho_{\alpha}^{\istate}(r) -! one_body_dm_mo_alpha_and_grad_at_grid_points(2,.....,i_state) = d\dy \rho_{\alpha}^{\istate}(r) -! one_body_dm_mo_alpha_and_grad_at_grid_points(3,.....,i_state) = d\dz \rho_{\alpha}^{\istate}(r) -! one_body_dm_mo_alpha_and_grad_at_grid_points(4,.....,i_state) = \rho_{\alpha}^{\istate}(r) - END_DOC - implicit none - integer :: i,j,k,l,m,istate - double precision :: contrib - double precision :: r(3) - double precision :: aos_array(ao_num),grad_aos_array(3,ao_num) - do istate = 1, N_States - do j = 1, nucl_num - do k = 1, n_points_radial_grid -1 - do l = 1, n_points_integration_angular - do m = 1, 4 - one_body_dm_mo_alpha_and_grad_at_grid_points(m,l,k,j,istate) = 0.d0 - one_body_dm_mo_beta_and_grad_at_grid_points(m,l,k,j,istate) = 0.d0 - enddo - r(1) = grid_points_per_atom(1,l,k,j) - r(2) = grid_points_per_atom(2,l,k,j) - r(3) = grid_points_per_atom(3,l,k,j) - - !!!!! Works also with the ao basis - double precision :: dm_a(N_states),dm_b(N_states), dm_a_grad(3,N_states), dm_b_grad(3,N_states) - call density_and_grad_alpha_beta_and_all_aos_and_grad_aos_at_r(r,dm_a,dm_b, dm_a_grad, dm_b_grad, aos_array, grad_aos_array) - one_body_dm_mo_alpha_and_grad_at_grid_points(1,l,k,j,istate) = dm_a_grad(1,istate) - one_body_dm_mo_alpha_and_grad_at_grid_points(2,l,k,j,istate) = dm_a_grad(2,istate) - one_body_dm_mo_alpha_and_grad_at_grid_points(3,l,k,j,istate) = dm_a_grad(3,istate) - one_body_dm_mo_alpha_and_grad_at_grid_points(4,l,k,j,istate) = dm_a(istate) - - - one_body_dm_mo_beta_and_grad_at_grid_points(1,l,k,j,istate) = dm_b_grad(1,istate) - one_body_dm_mo_beta_and_grad_at_grid_points(2,l,k,j,istate) = dm_b_grad(2,istate) - one_body_dm_mo_beta_and_grad_at_grid_points(3,l,k,j,istate) = dm_b_grad(3,istate) - one_body_dm_mo_beta_and_grad_at_grid_points(4,l,k,j,istate) = dm_b(istate) - - - enddo - enddo - enddo - enddo - -END_PROVIDER - - - BEGIN_PROVIDER [ double precision, integral_density_alpha_knowles_becke_per_atom, (nucl_num)] -&BEGIN_PROVIDER [ double precision, integral_density_beta_knowles_becke_per_atom, (nucl_num)] - implicit none - double precision :: accu - integer :: i,j,k,l,istate - double precision :: x - double precision :: integrand(n_points_integration_angular), weights(n_points_integration_angular) - double precision :: f_average_angular_alpha,f_average_angular_beta - double precision :: derivative_knowles_function,knowles_function - - ! Run over all nuclei in order to perform the Voronoi partition - ! according ot equation (6) of the paper of Becke (JCP, (88), 1988) - ! Here the m index is referred to the w_m(r) weight functions of equation (22) - ! Run over all points of integrations : there are - ! n_points_radial_grid (i) * n_points_integration_angular (k) - do j = 1, nucl_num - integral_density_alpha_knowles_becke_per_atom(j) = 0.d0 - integral_density_beta_knowles_becke_per_atom(j) = 0.d0 - do i = 1, n_points_radial_grid-1 - ! Angular integration over the solid angle Omega for a FIXED angular coordinate "r" - f_average_angular_alpha = 0.d0 - f_average_angular_beta = 0.d0 - do istate = 1, N_states - do k = 1, n_points_integration_angular - f_average_angular_alpha += weights_angular_points(k) * one_body_dm_mo_alpha_at_grid_points(k,i,j,istate) * weight_functions_at_grid_points(k,i,j) - f_average_angular_beta += weights_angular_points(k) * one_body_dm_mo_beta_at_grid_points(k,i,j,istate) * weight_functions_at_grid_points(k,i,j) - enddo - enddo - ! - x = grid_points_radial(i) ! x value for the mapping of the [0, +\infty] to [0,1] - double precision :: contrib_integration -! print*,m_knowles - contrib_integration = derivative_knowles_function(alpha_knowles(int(nucl_charge(j))),m_knowles,x) & - *knowles_function(alpha_knowles(int(nucl_charge(j))),m_knowles,x)**2 - integral_density_alpha_knowles_becke_per_atom(j) += contrib_integration *f_average_angular_alpha - integral_density_beta_knowles_becke_per_atom(j) += contrib_integration *f_average_angular_beta - enddo - integral_density_alpha_knowles_becke_per_atom(j) *= dr_radial_integral - integral_density_beta_knowles_becke_per_atom(j) *= dr_radial_integral - enddo - -END_PROVIDER - diff --git a/src/dft_utils_one_e/e_xc.irp.f b/src/dft_utils_one_e/e_xc.irp.f index a27eb167..6d89fa7e 100644 --- a/src/dft_utils_one_e/e_xc.irp.f +++ b/src/dft_utils_one_e/e_xc.irp.f @@ -19,7 +19,7 @@ r(1) = final_grid_points(1,i) r(2) = final_grid_points(2,i) r(3) = final_grid_points(3,i) - weight=final_weight_functions_at_final_grid_points(i) + weight = final_weight_at_r_vector(i) rhoa(istate) = one_body_dm_alpha_at_r(i,istate) rhob(istate) = one_body_dm_beta_at_r(i,istate) call ec_LDA(rhoa(istate),rhob(istate),e_c,vc_a,vc_b) @@ -58,11 +58,11 @@ r(1) = final_grid_points(1,i) r(2) = final_grid_points(2,i) r(3) = final_grid_points(3,i) - weight=final_weight_functions_at_final_grid_points(i) - rho_a(istate) = one_body_dm_alpha_and_grad_at_r(4,i,istate) - rho_b(istate) = one_body_dm_beta_and_grad_at_r(4,i,istate) - grad_rho_a(1:3,istate) = one_body_dm_alpha_and_grad_at_r(1:3,i,istate) - grad_rho_b(1:3,istate) = one_body_dm_beta_and_grad_at_r(1:3,i,istate) + weight = final_weight_at_r_vector(i) + rho_a(istate) = one_dm_and_grad_alpha_in_r(4,i,istate) + rho_b(istate) = one_dm_and_grad_beta_in_r(4,i,istate) + grad_rho_a(1:3,istate) = one_dm_and_grad_alpha_in_r(1:3,i,istate) + grad_rho_b(1:3,istate) = one_dm_and_grad_beta_in_r(1:3,i,istate) grad_rho_a_2 = 0.d0 grad_rho_b_2 = 0.d0 grad_rho_a_b = 0.d0 diff --git a/src/dft_utils_one_e/pot_ao.irp.f b/src/dft_utils_one_e/pot_ao.irp.f index 02d5bcb7..e7c0d932 100644 --- a/src/dft_utils_one_e/pot_ao.irp.f +++ b/src/dft_utils_one_e/pot_ao.irp.f @@ -19,7 +19,7 @@ r(1) = final_grid_points(1,i) r(2) = final_grid_points(2,i) r(3) = final_grid_points(3,i) - weight=final_weight_functions_at_final_grid_points(i) + weight = final_weight_at_r_vector(i) rhoa(istate) = one_body_dm_alpha_at_r(i,istate) rhob(istate) = one_body_dm_beta_at_r(i,istate) call ec_LDA_sr(mu_local,rhoa(istate),rhob(istate),e_c,vc_a,vc_b) @@ -94,11 +94,11 @@ r(1) = final_grid_points(1,i) r(2) = final_grid_points(2,i) r(3) = final_grid_points(3,i) - weight=final_weight_functions_at_final_grid_points(i) - rho_a(istate) = one_body_dm_alpha_and_grad_at_r(4,i,istate) - rho_b(istate) = one_body_dm_beta_and_grad_at_r(4,i,istate) - grad_rho_a(1:3,istate) = one_body_dm_alpha_and_grad_at_r(1:3,i,istate) - grad_rho_b(1:3,istate) = one_body_dm_beta_and_grad_at_r(1:3,i,istate) + weight = final_weight_at_r_vector(i) + rho_a(istate) = one_dm_and_grad_alpha_in_r(4,i,istate) + rho_b(istate) = one_dm_and_grad_beta_in_r(4,i,istate) + grad_rho_a(1:3,istate) = one_dm_and_grad_alpha_in_r(1:3,i,istate) + grad_rho_b(1:3,istate) = one_dm_and_grad_beta_in_r(1:3,i,istate) grad_rho_a_2 = 0.d0 grad_rho_b_2 = 0.d0 grad_rho_a_b = 0.d0 diff --git a/src/dft_utils_one_e/sr_exc.irp.f b/src/dft_utils_one_e/sr_exc.irp.f index 6c54769b..0aee350a 100644 --- a/src/dft_utils_one_e/sr_exc.irp.f +++ b/src/dft_utils_one_e/sr_exc.irp.f @@ -19,7 +19,7 @@ r(1) = final_grid_points(1,i) r(2) = final_grid_points(2,i) r(3) = final_grid_points(3,i) - weight=final_weight_functions_at_final_grid_points(i) + weight = final_weight_at_r_vector(i) rhoa(istate) = one_body_dm_alpha_at_r(i,istate) rhob(istate) = one_body_dm_beta_at_r(i,istate) call ec_LDA_sr(mu_erf_dft,rhoa(istate),rhob(istate),e_c,vc_a,vc_b) @@ -58,11 +58,11 @@ r(1) = final_grid_points(1,i) r(2) = final_grid_points(2,i) r(3) = final_grid_points(3,i) - weight=final_weight_functions_at_final_grid_points(i) - rho_a(istate) = one_body_dm_alpha_and_grad_at_r(4,i,istate) - rho_b(istate) = one_body_dm_beta_and_grad_at_r(4,i,istate) - grad_rho_a(1:3,istate) = one_body_dm_alpha_and_grad_at_r(1:3,i,istate) - grad_rho_b(1:3,istate) = one_body_dm_beta_and_grad_at_r(1:3,i,istate) + weight = final_weight_at_r_vector(i) + rho_a(istate) = one_dm_and_grad_alpha_in_r(4,i,istate) + rho_b(istate) = one_dm_and_grad_beta_in_r(4,i,istate) + grad_rho_a(1:3,istate) = one_dm_and_grad_alpha_in_r(1:3,i,istate) + grad_rho_b(1:3,istate) = one_dm_and_grad_beta_in_r(1:3,i,istate) grad_rho_a_2 = 0.d0 grad_rho_b_2 = 0.d0 grad_rho_a_b = 0.d0 diff --git a/src/dft_utils_one_e/sr_pot_ao.irp.f b/src/dft_utils_one_e/sr_pot_ao.irp.f index 8e937a35..1b786cac 100644 --- a/src/dft_utils_one_e/sr_pot_ao.irp.f +++ b/src/dft_utils_one_e/sr_pot_ao.irp.f @@ -17,7 +17,7 @@ r(1) = final_grid_points(1,i) r(2) = final_grid_points(2,i) r(3) = final_grid_points(3,i) - weight=final_weight_functions_at_final_grid_points(i) + weight=final_weight_at_r_vector(i) rhoa(istate) = one_body_dm_alpha_at_r(i,istate) rhob(istate) = one_body_dm_beta_at_r(i,istate) call ec_LDA_sr(mu_erf_dft,rhoa(istate),rhob(istate),e_c,sr_vc_a,sr_vc_b) @@ -92,11 +92,11 @@ r(1) = final_grid_points(1,i) r(2) = final_grid_points(2,i) r(3) = final_grid_points(3,i) - weight=final_weight_functions_at_final_grid_points(i) - rho_a(istate) = one_body_dm_alpha_and_grad_at_r(4,i,istate) - rho_b(istate) = one_body_dm_beta_and_grad_at_r(4,i,istate) - grad_rho_a(1:3,istate) = one_body_dm_alpha_and_grad_at_r(1:3,i,istate) - grad_rho_b(1:3,istate) = one_body_dm_beta_and_grad_at_r(1:3,i,istate) + weight = final_weight_at_r_vector(i) + rho_a(istate) = one_dm_and_grad_alpha_in_r(4,i,istate) + rho_b(istate) = one_dm_and_grad_beta_in_r(4,i,istate) + grad_rho_a(1:3,istate) = one_dm_and_grad_alpha_in_r(1:3,i,istate) + grad_rho_b(1:3,istate) = one_dm_and_grad_beta_in_r(1:3,i,istate) grad_rho_a_2 = 0.d0 grad_rho_b_2 = 0.d0 grad_rho_a_b = 0.d0 diff --git a/src/dft_utils_two_body/.gitignore b/src/dft_utils_two_body/.gitignore deleted file mode 120000 index a10a1637..00000000 --- a/src/dft_utils_two_body/.gitignore +++ /dev/null @@ -1 +0,0 @@ -../../data/module_gitignore \ No newline at end of file diff --git a/src/dft_utils_two_body/INSTALL.cfg b/src/dft_utils_two_body/INSTALL.cfg deleted file mode 100644 index 2b126bf9..00000000 --- a/src/dft_utils_two_body/INSTALL.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[scripts] -qp_cipsi_rsh diff --git a/src/dft_utils_two_body/NEED b/src/dft_utils_two_body/NEED deleted file mode 100644 index 70cf5ffe..00000000 --- a/src/dft_utils_two_body/NEED +++ /dev/null @@ -1,3 +0,0 @@ -dft_utils_one_e -determinants -davidson_undressed diff --git a/src/dft_utils_two_body/mr_dft_energy.irp.f b/src/dft_utils_two_body/mr_dft_energy.irp.f deleted file mode 100644 index ae85ce8e..00000000 --- a/src/dft_utils_two_body/mr_dft_energy.irp.f +++ /dev/null @@ -1,44 +0,0 @@ -BEGIN_PROVIDER [double precision, electronic_energy_mr_dft, (N_states)] - implicit none - BEGIN_DOC - ! Energy for the multi determinantal DFT calculation - END_DOC - - print*,'You are using a variational method which uses the wave function stored in the EZFIO folder' - electronic_energy_mr_dft = total_range_separated_electronic_energy - - -END_PROVIDER - - subroutine print_variational_energy_dft - implicit none - print*,'/////////////////////////' - print*, '****************************************' - print*,'///////////////////' - print*, ' Regular range separated DFT energy ' - write(*, '(A22,X,F32.10)') 'mu_erf = ',mu_erf - write(*, '(A22,X,F16.10)') 'TOTAL ENERGY = ',electronic_energy_mr_dft+nuclear_repulsion - print*, '' - print*, 'Component of the energy ....' - print*, '' - write(*, '(A22,X,F16.10)') 'nuclear_repulsion = ',nuclear_repulsion - write(*, '(A22,X,F16.10)') 'psi_energy_erf = ',psi_energy_erf - write(*, '(A22,X,F16.10)') 'psi_dft_energy_h_cor= ',psi_dft_energy_h_core - write(*, '(A22,X,F16.10)') 'short_range_Hartree = ',short_range_Hartree - write(*, '(A22,X,F16.10)') 'two_elec_energy = ',two_elec_energy_dft - write(*, '(A22,X,F16.10)') 'energy_x = ',energy_x - write(*, '(A22,X,F16.10)') 'energy_c = ',energy_c - write(*, '(A22,X,F16.10)') 'E_xc = ',energy_x + energy_c - write(*, '(A22,X,F16.10)') 'E_Hxc = ',energy_x + energy_c + short_range_Hartree - print*, '' - print*, '****************************************' - print*, '' - write(*, '(A22,X,F16.10)') 'Approx eigenvalue = ',electronic_energy_mr_dft+nuclear_repulsion + Trace_v_Hxc - (short_range_Hartree + energy_x + energy_c) - write(*, '(A22,X,F16.10)') 'Trace_v_xc = ',Trace_v_xc - write(*, '(A22,X,F16.10)') 'Trace_v_Hxc = ',Trace_v_Hxc - - write(*, '(A22,X,F16.10)') ' = ',psi_energy - write(*, '(A22,X,F16.10)') 'psi_energy_bielec = ',psi_energy_bielec - write(*, '(A22,X,F16.10)') 'psi_energy_h_core = ',psi_energy_h_core - end - diff --git a/src/dft_utils_two_body/print_rsdft_variational_energy.irp.f b/src/dft_utils_two_body/print_rsdft_variational_energy.irp.f deleted file mode 100644 index e00e3b4b..00000000 --- a/src/dft_utils_two_body/print_rsdft_variational_energy.irp.f +++ /dev/null @@ -1,16 +0,0 @@ -program DFT_Utils_two_body_main - implicit none - read_wf = .true. - touch read_wf - disk_access_mo_one_integrals = "None" - touch disk_access_mo_one_integrals - disk_access_mo_integrals = "None" - touch disk_access_mo_integrals - disk_access_ao_integrals = "None" - touch disk_access_ao_integrals - density_for_dft = "WFT" - touch density_for_dft - call print_variational_energy_dft - - -end diff --git a/src/dft_utils_two_body/psi_energy_erf.irp.f b/src/dft_utils_two_body/psi_energy_erf.irp.f deleted file mode 100644 index 05ac19ec..00000000 --- a/src/dft_utils_two_body/psi_energy_erf.irp.f +++ /dev/null @@ -1,81 +0,0 @@ - -BEGIN_PROVIDER [ double precision, psi_energy_erf, (N_states) ] - use bitmasks - implicit none - BEGIN_DOC - ! Computes e_0 = / - ! - END_DOC - integer :: i - call u_0_H_u_0_erf(psi_energy_erf,psi_coef,N_det,psi_det,N_int,N_states,psi_det_size) - do i=N_det+1,N_states - psi_energy_erf(i) = 0.d0 - enddo -END_PROVIDER - - -BEGIN_PROVIDER [ double precision, psi_energy_h_core_and_sr_hartree, (N_states) ] - implicit none - BEGIN_DOC -! psi_energy_h_core = - END_DOC - psi_energy_h_core_and_sr_hartree = psi_energy_h_core + short_range_Hartree -END_PROVIDER - - -BEGIN_PROVIDER [ double precision, total_range_separated_electronic_energy, (N_states) ] - implicit none - BEGIN_DOC -! Total_range_separated_electronic_energy = + (1/2) + + E_{x} + E_{c} - END_DOC - total_range_separated_electronic_energy = psi_energy_h_core + short_range_Hartree + psi_energy_erf + energy_x + energy_c -END_PROVIDER - - -BEGIN_PROVIDER [ double precision, two_elec_energy_dft, (N_states) ] - implicit none - BEGIN_DOC -! two_elec_energy_dft = (1/2) + - END_DOC - two_elec_energy_dft = short_range_Hartree + psi_energy_erf -END_PROVIDER - - - BEGIN_PROVIDER [ double precision, ref_bitmask_energy_erf ] -&BEGIN_PROVIDER [ double precision, bi_elec_ref_bitmask_energy_erf ] - use bitmasks - implicit none - BEGIN_DOC - ! Energy with the LONG RANGE INTERACTION of the reference bitmask used in Slater rules - END_DOC - - integer :: occ(N_int*bit_kind_size,2) - integer :: i,j - - call bitstring_to_list(ref_bitmask(1,1), occ(1,1), i, N_int) - call bitstring_to_list(ref_bitmask(1,2), occ(1,2), i, N_int) - - - ref_bitmask_energy_erf = 0.d0 - bi_elec_ref_bitmask_energy_erf = 0.d0 - - do j= 1, elec_alpha_num - do i = j+1, elec_alpha_num - bi_elec_ref_bitmask_energy_erf += mo_two_e_int_erf_jj_anti(occ(i,1),occ(j,1)) - ref_bitmask_energy_erf += mo_two_e_int_erf_jj_anti(occ(i,1),occ(j,1)) - enddo - enddo - - do j= 1, elec_beta_num - do i = j+1, elec_beta_num - bi_elec_ref_bitmask_energy_erf += mo_two_e_int_erf_jj_anti(occ(i,2),occ(j,2)) - ref_bitmask_energy_erf += mo_two_e_int_erf_jj_anti(occ(i,2),occ(j,2)) - enddo - do i= 1, elec_alpha_num - bi_elec_ref_bitmask_energy_erf += mo_two_e_int_erf_jj(occ(i,1),occ(j,2)) - ref_bitmask_energy_erf += mo_two_e_int_erf_jj(occ(i,1),occ(j,2)) - enddo - enddo - -END_PROVIDER - diff --git a/src/dft_utils_two_body/routines_save_integrals_dft.irp.f b/src/dft_utils_two_body/routines_save_integrals_dft.irp.f deleted file mode 100644 index 6809de86..00000000 --- a/src/dft_utils_two_body/routines_save_integrals_dft.irp.f +++ /dev/null @@ -1,26 +0,0 @@ - -subroutine save_one_e_effective_potential - implicit none - BEGIN_DOC -! used to save the effective_one_e_potential into the one-body integrals in the ezfio folder -! this effective_one_e_potential is computed with the current density -! and will couple the WFT with DFT for the next regular WFT calculation - END_DOC - call ezfio_set_mo_one_e_integrals_integral_nuclear(effective_one_e_potential_without_kin) - call ezfio_set_mo_one_e_integrals_integral_kinetic(mo_kinetic_integral) - - print *, 'Effective DFT potential is written on disk on the mo_ne_integral integrals' - call ezfio_set_mo_one_e_integrals_disk_access_mo_one_integrals("Read") - -end - -subroutine write_all_integrals_for_mrdft - implicit none - BEGIN_DOC - ! saves all integrals needed for RS-DFT-MRCI calculation: one-body effective potential and two-elec erf integrals - END_DOC - call save_one_e_effective_potential - call save_erf_bi_elec_integrals_mo - call save_erf_bi_elec_integrals_ao -end - diff --git a/src/dft_utils_two_body/slater_rules_erf.irp.f b/src/dft_utils_two_body/slater_rules_erf.irp.f deleted file mode 100644 index a1c3fd09..00000000 --- a/src/dft_utils_two_body/slater_rules_erf.irp.f +++ /dev/null @@ -1,226 +0,0 @@ -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! THIS FILE CONTAINS EVERYTHING YOU NEED TO COMPUTE THE LONG RANGE PART OF THE INTERACTION -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -subroutine i_H_j_erf(key_i,key_j,Nint,hij) - use bitmasks - implicit none - BEGIN_DOC - ! Returns where i and j are determinants - ! and the W_{ee}^{lr} is the long range two-body interaction - END_DOC - integer, intent(in) :: Nint - integer(bit_kind), intent(in) :: key_i(Nint,2), key_j(Nint,2) - double precision, intent(out) :: hij - - integer :: exc(0:2,2,2) - integer :: degree - double precision :: get_mo_bielec_integral_erf - integer :: m,n,p,q - integer :: i,j,k - integer :: occ(Nint*bit_kind_size,2) - double precision :: diag_H_mat_elem_erf, phase,phase_2 - integer :: n_occ_ab(2) - PROVIDE mo_bielec_integrals_erf_in_map mo_integrals_erf_map int_erf_3_index_exc - - ASSERT (Nint > 0) - ASSERT (Nint == N_int) - ASSERT (sum(popcnt(key_i(:,1))) == elec_alpha_num) - ASSERT (sum(popcnt(key_i(:,2))) == elec_beta_num) - ASSERT (sum(popcnt(key_j(:,1))) == elec_alpha_num) - ASSERT (sum(popcnt(key_j(:,2))) == elec_beta_num) - - hij = 0.d0 - !DIR$ FORCEINLINE - call get_excitation_degree(key_i,key_j,degree,Nint) - integer :: spin - select case (degree) - case (2) - call get_double_excitation(key_i,key_j,exc,phase,Nint) - if (exc(0,1,1) == 1) then - ! Mono alpha, mono beta - if(exc(1,1,1) == exc(1,2,2) )then - hij = phase * int_erf_3_index_exc(exc(1,1,1),exc(1,1,2),exc(1,2,1)) - else if (exc(1,2,1) ==exc(1,1,2))then - hij = phase * int_erf_3_index_exc(exc(1,2,1),exc(1,1,1),exc(1,2,2)) - else - hij = phase*get_mo_bielec_integral_erf( & - exc(1,1,1), & - exc(1,1,2), & - exc(1,2,1), & - exc(1,2,2) ,mo_integrals_erf_map) - endif - else if (exc(0,1,1) == 2) then - ! Double alpha - hij = phase*(get_mo_bielec_integral_erf( & - exc(1,1,1), & - exc(2,1,1), & - exc(1,2,1), & - exc(2,2,1) ,mo_integrals_erf_map) - & - get_mo_bielec_integral_erf( & - exc(1,1,1), & - exc(2,1,1), & - exc(2,2,1), & - exc(1,2,1) ,mo_integrals_erf_map) ) - else if (exc(0,1,2) == 2) then - ! Double beta - hij = phase*(get_mo_bielec_integral_erf( & - exc(1,1,2), & - exc(2,1,2), & - exc(1,2,2), & - exc(2,2,2) ,mo_integrals_erf_map) - & - get_mo_bielec_integral_erf( & - exc(1,1,2), & - exc(2,1,2), & - exc(2,2,2), & - exc(1,2,2) ,mo_integrals_erf_map) ) - endif - case (1) - call get_mono_excitation(key_i,key_j,exc,phase,Nint) - !DIR$ FORCEINLINE - call bitstring_to_list_ab(key_i, occ, n_occ_ab, Nint) - if (exc(0,1,1) == 1) then - ! Mono alpha - m = exc(1,1,1) - p = exc(1,2,1) - spin = 1 - do i = 1, n_occ_ab(1) - hij += -int_erf_3_index_exc(occ(i,1),m,p) + int_erf_3_index(occ(i,1),m,p) - enddo - do i = 1, n_occ_ab(2) - hij += int_erf_3_index(occ(i,2),m,p) - enddo - else - ! Mono beta - m = exc(1,1,2) - p = exc(1,2,2) - spin = 2 - do i = 1, n_occ_ab(2) - hij += -int_erf_3_index_exc(occ(i,2),m,p) + int_erf_3_index(occ(i,2),m,p) - enddo - do i = 1, n_occ_ab(1) - hij += int_erf_3_index(occ(i,1),m,p) - enddo - endif - hij = hij * phase - case (0) - hij = diag_H_mat_elem_erf(key_i,Nint) - end select -end - - -double precision function diag_H_mat_elem_erf(key_i,Nint) - BEGIN_DOC -! returns where |i> is a determinant and -! W_{ee}^{lr} is the two body long-range interaction - END_DOC - implicit none - integer(bit_kind), intent(in) :: key_i(N_int,2) - integer, intent(in) :: Nint - integer :: i,j - integer :: occ(Nint*bit_kind_size,2) - integer :: n_occ_ab(2) - call bitstring_to_list_ab(key_i, occ, n_occ_ab, Nint) - diag_H_mat_elem_erf = 0.d0 - ! alpha - alpha - do i = 1, n_occ_ab(1) - do j = i+1, n_occ_ab(1) - diag_H_mat_elem_erf += mo_two_e_int_erf_jj_anti(occ(i,1),occ(j,1)) - enddo - enddo - - ! beta - beta - do i = 1, n_occ_ab(2) - do j = i+1, n_occ_ab(2) - diag_H_mat_elem_erf += mo_two_e_int_erf_jj_anti(occ(i,2),occ(j,2)) - enddo - enddo - - ! alpha - beta - do i = 1, n_occ_ab(1) - do j = 1, n_occ_ab(2) - diag_H_mat_elem_erf += mo_two_e_int_erf_jj(occ(i,1),occ(j,2)) - enddo - enddo -end -subroutine i_H_j_mono_spin_erf(key_i,key_j,Nint,spin,hij) - use bitmasks - implicit none - BEGIN_DOC - ! Returns where i and j are determinants differing by a single excitation - END_DOC - integer, intent(in) :: Nint, spin - integer(bit_kind), intent(in) :: key_i(Nint,2), key_j(Nint,2) - double precision, intent(out) :: hij - - integer :: exc(0:2,2) - double precision :: phase - - PROVIDE int_erf_3_index_exc mo_bielec_integrals_erf_in_map - - call i_H_j_erf(key_i,key_j,Nint,hij) -end - - - -subroutine i_H_j_double_spin_erf(key_i,key_j,Nint,hij) - use bitmasks - implicit none - BEGIN_DOC - ! Returns where i and j are determinants differing by a same-spin double excitation - END_DOC - integer, intent(in) :: Nint - integer(bit_kind), intent(in) :: key_i(Nint), key_j(Nint) - double precision, intent(out) :: hij - - integer :: exc(0:2,2) - double precision :: phase - double precision, external :: get_mo_bielec_integral_erf - - PROVIDE int_erf_3_index_exc mo_bielec_integrals_erf_in_map - - call get_double_excitation_spin(key_i,key_j,exc,phase,Nint) - hij = phase*(get_mo_bielec_integral_erf( & - exc(1,1), & - exc(2,1), & - exc(1,2), & - exc(2,2), mo_integrals_erf_map) - & - get_mo_bielec_integral_erf( & - exc(1,1), & - exc(2,1), & - exc(2,2), & - exc(1,2), mo_integrals_erf_map) ) -end - -subroutine i_H_j_double_alpha_beta_erf(key_i,key_j,Nint,hij) - use bitmasks - implicit none - BEGIN_DOC - ! Returns where i and j are determinants differing by an opposite-spin double excitation - END_DOC - integer, intent(in) :: Nint - integer(bit_kind), intent(in) :: key_i(Nint,2), key_j(Nint,2) - double precision, intent(out) :: hij - - integer :: exc(0:2,2,2) - double precision :: phase, phase2 - double precision, external :: get_mo_bielec_integral_erf - - PROVIDE int_erf_3_index_exc mo_bielec_integrals_erf_in_map - - call get_mono_excitation_spin(key_i(1,1),key_j(1,1),exc(0,1,1),phase,Nint) - call get_mono_excitation_spin(key_i(1,2),key_j(1,2),exc(0,1,2),phase2,Nint) - phase = phase*phase2 - if (exc(1,1,1) == exc(1,2,2)) then - hij = phase * int_erf_3_index_exc(exc(1,1,1),exc(1,1,2),exc(1,2,1)) - else if (exc(1,2,1) == exc(1,1,2)) then - hij = phase * int_erf_3_index_exc(exc(1,2,1),exc(1,1,1),exc(1,2,2)) - else - hij = phase*get_mo_bielec_integral_erf( & - exc(1,1,1), & - exc(1,1,2), & - exc(1,2,1), & - exc(1,2,2) ,mo_integrals_erf_map) - endif -end - - diff --git a/src/dft_utils_two_body/u0_w_erf_u0.irp.f b/src/dft_utils_two_body/u0_w_erf_u0.irp.f deleted file mode 100644 index daa1501d..00000000 --- a/src/dft_utils_two_body/u0_w_erf_u0.irp.f +++ /dev/null @@ -1,482 +0,0 @@ -subroutine u_0_H_u_0_erf(e_0,u_0,n,keys_tmp,Nint,N_st,sze) - use bitmasks - implicit none - BEGIN_DOC - ! Computes e_0 = / - ! - ! n : number of determinants - ! - END_DOC - integer, intent(in) :: n,Nint, N_st, sze - double precision, intent(out) :: e_0(N_st) - double precision, intent(inout) :: u_0(sze,N_st) - integer(bit_kind),intent(in) :: keys_tmp(Nint,2,n) - - double precision, allocatable :: v_0(:,:), s_0(:,:), u_1(:,:) - double precision :: u_dot_u,u_dot_v,diag_H_mat_elem - integer :: i,j - - allocate (v_0(sze,N_st),s_0(sze,N_st)) - call H_S2_u_0_erf_nstates_openmp(v_0,s_0,u_0,N_st,sze) - double precision :: norm - do i=1,N_st - norm = u_dot_u(u_0(1,i),n) - if (norm /= 0.d0) then - e_0(i) = u_dot_v(v_0(1,i),u_0(1,i),n)/u_dot_u(u_0(1,i),n) - else - e_0(i) = 0.d0 - endif - enddo - deallocate (s_0, v_0) -end - - - - - - -subroutine H_S2_u_0_erf_nstates_openmp(v_0,s_0,u_0,N_st,sze) - use bitmasks - implicit none - BEGIN_DOC - ! Computes v_0 = H|u_0> and s_0 = S^2 |u_0> - ! - ! Assumes that the determinants are in psi_det - ! - ! istart, iend, ishift, istep are used in ZMQ parallelization. - END_DOC - integer, intent(in) :: N_st,sze - double precision, intent(inout) :: v_0(sze,N_st), s_0(sze,N_st), u_0(sze,N_st) - integer :: k - double precision, allocatable :: u_t(:,:), v_t(:,:), s_t(:,:) - !DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: u_t - allocate(u_t(N_st,N_det),v_t(N_st,N_det),s_t(N_st,N_det)) - do k=1,N_st - call dset_order(u_0(1,k),psi_bilinear_matrix_order,N_det) - enddo - v_t = 0.d0 - s_t = 0.d0 - call dtranspose( & - u_0, & - size(u_0, 1), & - u_t, & - size(u_t, 1), & - N_det, N_st) - - call H_S2_u_0_erf_nstates_openmp_work(v_t,s_t,u_t,N_st,sze,1,N_det,0,1) - deallocate(u_t) - - call dtranspose( & - v_t, & - size(v_t, 1), & - v_0, & - size(v_0, 1), & - N_st, N_det) - call dtranspose( & - s_t, & - size(s_t, 1), & - s_0, & - size(s_0, 1), & - N_st, N_det) - deallocate(v_t,s_t) - - do k=1,N_st - call dset_order(v_0(1,k),psi_bilinear_matrix_order_reverse,N_det) - call dset_order(s_0(1,k),psi_bilinear_matrix_order_reverse,N_det) - call dset_order(u_0(1,k),psi_bilinear_matrix_order_reverse,N_det) - enddo - -end - - -subroutine H_S2_u_0_erf_nstates_openmp_work(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep) - use bitmasks - implicit none - BEGIN_DOC - ! Computes v_0 = H|u_0> and s_0 = S^2 |u_0> - ! - ! Default should be 1,N_det,0,1 - END_DOC - integer, intent(in) :: N_st,sze,istart,iend,ishift,istep - double precision, intent(in) :: u_t(N_st,N_det) - double precision, intent(out) :: v_t(N_st,sze), s_t(N_st,sze) - - - PROVIDE ref_bitmask_energy_erf N_int short_range_Hartree - - select case (N_int) - case (1) - call H_S2_u_0_erf_nstates_openmp_work_1(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep) - case (2) - call H_S2_u_0_erf_nstates_openmp_work_2(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep) - case (3) - call H_S2_u_0_erf_nstates_openmp_work_3(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep) - case (4) - call H_S2_u_0_erf_nstates_openmp_work_4(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep) - case default - call H_S2_u_0_erf_nstates_openmp_work_N_int(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep) - end select -end -BEGIN_TEMPLATE - -subroutine H_S2_u_0_erf_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep) - use bitmasks - implicit none - BEGIN_DOC - ! Computes v_t = H|u_t> and s_t = S^2 |u_t> - ! - ! Default should be 1,N_det,0,1 - END_DOC - integer, intent(in) :: N_st,sze,istart,iend,ishift,istep - double precision, intent(in) :: u_t(N_st,N_det) - double precision, intent(out) :: v_t(N_st,sze), s_t(N_st,sze) - - double precision :: hij, sij - integer :: i,j,k,l - integer :: k_a, k_b, l_a, l_b, m_a, m_b - integer :: istate - integer :: krow, kcol, krow_b, kcol_b - integer :: lrow, lcol - integer :: mrow, mcol - integer(bit_kind) :: spindet($N_int) - integer(bit_kind) :: tmp_det($N_int,2) - integer(bit_kind) :: tmp_det2($N_int,2) - integer(bit_kind) :: tmp_det3($N_int,2) - integer(bit_kind), allocatable :: buffer(:,:) - integer :: n_doubles - integer, allocatable :: doubles(:) - integer, allocatable :: singles_a(:) - integer, allocatable :: singles_b(:) - integer, allocatable :: idx(:), idx0(:) - integer :: maxab, n_singles_a, n_singles_b, kcol_prev, nmax - integer*8 :: k8 - - maxab = max(N_det_alpha_unique, N_det_beta_unique)+1 - allocate(idx0(maxab)) - - do i=1,maxab - idx0(i) = i - enddo - - ! Prepare the array of all alpha single excitations - ! ------------------------------------------------- - - PROVIDE N_int nthreads_davidson - !$OMP PARALLEL DEFAULT(NONE) NUM_THREADS(nthreads_davidson) & - !$OMP SHARED(psi_bilinear_matrix_rows, N_det, & - !$OMP psi_bilinear_matrix_columns, & - !$OMP psi_det_alpha_unique, psi_det_beta_unique, & - !$OMP n_det_alpha_unique, n_det_beta_unique, N_int, & - !$OMP psi_bilinear_matrix_transp_rows, & - !$OMP psi_bilinear_matrix_transp_columns, & - !$OMP psi_bilinear_matrix_transp_order, N_st, & - !$OMP psi_bilinear_matrix_order_transp_reverse, & - !$OMP psi_bilinear_matrix_columns_loc, & - !$OMP psi_bilinear_matrix_transp_rows_loc, & - !$OMP istart, iend, istep, irp_here, v_t, s_t, & - !$OMP ishift, idx0, u_t, maxab) & - !$OMP PRIVATE(krow, kcol, tmp_det, spindet, k_a, k_b, i, & - !$OMP lcol, lrow, l_a, l_b, & - !$OMP buffer, doubles, n_doubles, & - !$OMP tmp_det2, hij, sij, idx, l, kcol_prev, & - !$OMP singles_a, n_singles_a, singles_b, & - !$OMP n_singles_b, k8) - - ! Alpha/Beta double excitations - ! ============================= - - allocate( buffer($N_int,maxab), & - singles_a(maxab), & - singles_b(maxab), & - doubles(maxab), & - idx(maxab)) - - kcol_prev=-1 - - ASSERT (iend <= N_det) - ASSERT (istart > 0) - ASSERT (istep > 0) - - !$OMP DO SCHEDULE(dynamic,64) - do k_a=istart+ishift,iend,istep - - krow = psi_bilinear_matrix_rows(k_a) - ASSERT (krow <= N_det_alpha_unique) - - kcol = psi_bilinear_matrix_columns(k_a) - ASSERT (kcol <= N_det_beta_unique) - - tmp_det(1:$N_int,1) = psi_det_alpha_unique(1:$N_int, krow) - tmp_det(1:$N_int,2) = psi_det_beta_unique (1:$N_int, kcol) - - if (kcol /= kcol_prev) then - call get_all_spin_singles_$N_int( & - psi_det_beta_unique, idx0, & - tmp_det(1,2), N_det_beta_unique, & - singles_b, n_singles_b) - endif - kcol_prev = kcol - - ! Loop over singly excited beta columns - ! ------------------------------------- - - do i=1,n_singles_b - lcol = singles_b(i) - - tmp_det2(1:$N_int,2) = psi_det_beta_unique(1:$N_int, lcol) - - l_a = psi_bilinear_matrix_columns_loc(lcol) - ASSERT (l_a <= N_det) - - do j=1,psi_bilinear_matrix_columns_loc(lcol+1) - l_a - lrow = psi_bilinear_matrix_rows(l_a) - ASSERT (lrow <= N_det_alpha_unique) - - buffer(1:$N_int,j) = psi_det_alpha_unique(1:$N_int, lrow) - - ASSERT (l_a <= N_det) - idx(j) = l_a - l_a = l_a+1 - enddo - j = j-1 - - call get_all_spin_singles_$N_int( & - buffer, idx, tmp_det(1,1), j, & - singles_a, n_singles_a ) - - ! Loop over alpha singles - ! ----------------------- - - do k = 1,n_singles_a - l_a = singles_a(k) - ASSERT (l_a <= N_det) - - lrow = psi_bilinear_matrix_rows(l_a) - ASSERT (lrow <= N_det_alpha_unique) - - tmp_det2(1:$N_int,1) = psi_det_alpha_unique(1:$N_int, lrow) - call i_H_j_double_alpha_beta_erf(tmp_det,tmp_det2,$N_int,hij) - call get_s2(tmp_det,tmp_det2,$N_int,sij) - do l=1,N_st - v_t(l,k_a) = v_t(l,k_a) + hij * u_t(l,l_a) - s_t(l,k_a) = s_t(l,k_a) + sij * u_t(l,l_a) - enddo - enddo - - enddo - - enddo - !$OMP END DO - - !$OMP DO SCHEDULE(dynamic,64) - do k_a=istart+ishift,iend,istep - - - ! Single and double alpha excitations - ! =================================== - - - ! Initial determinant is at k_a in alpha-major representation - ! ----------------------------------------------------------------------- - - krow = psi_bilinear_matrix_rows(k_a) - ASSERT (krow <= N_det_alpha_unique) - - kcol = psi_bilinear_matrix_columns(k_a) - ASSERT (kcol <= N_det_beta_unique) - - tmp_det(1:$N_int,1) = psi_det_alpha_unique(1:$N_int, krow) - tmp_det(1:$N_int,2) = psi_det_beta_unique (1:$N_int, kcol) - - ! Initial determinant is at k_b in beta-major representation - ! ---------------------------------------------------------------------- - - k_b = psi_bilinear_matrix_order_transp_reverse(k_a) - - spindet(1:$N_int) = tmp_det(1:$N_int,1) - - ! Loop inside the beta column to gather all the connected alphas - lcol = psi_bilinear_matrix_columns(k_a) - l_a = psi_bilinear_matrix_columns_loc(lcol) - do i=1,N_det_alpha_unique - if (l_a > N_det) exit - lcol = psi_bilinear_matrix_columns(l_a) - if (lcol /= kcol) exit - lrow = psi_bilinear_matrix_rows(l_a) - ASSERT (lrow <= N_det_alpha_unique) - - buffer(1:$N_int,i) = psi_det_alpha_unique(1:$N_int, lrow) - idx(i) = l_a - l_a = l_a+1 - enddo - i = i-1 - - call get_all_spin_singles_and_doubles_$N_int( & - buffer, idx, spindet, i, & - singles_a, doubles, n_singles_a, n_doubles ) - - ! Compute Hij for all alpha singles - ! ---------------------------------- - - tmp_det2(1:$N_int,2) = psi_det_beta_unique (1:$N_int, kcol) - do i=1,n_singles_a - l_a = singles_a(i) - ASSERT (l_a <= N_det) - - lrow = psi_bilinear_matrix_rows(l_a) - ASSERT (lrow <= N_det_alpha_unique) - - tmp_det2(1:$N_int,1) = psi_det_alpha_unique(1:$N_int, lrow) - call i_H_j_mono_spin_erf( tmp_det, tmp_det2, $N_int, 1, hij) - - do l=1,N_st - v_t(l,k_a) = v_t(l,k_a) + hij * u_t(l,l_a) - ! single => sij = 0 - enddo - enddo - - - ! Compute Hij for all alpha doubles - ! ---------------------------------- - - do i=1,n_doubles - l_a = doubles(i) - ASSERT (l_a <= N_det) - - lrow = psi_bilinear_matrix_rows(l_a) - ASSERT (lrow <= N_det_alpha_unique) - - call i_H_j_double_spin_erf( tmp_det(1,1), psi_det_alpha_unique(1, lrow), $N_int, hij) - do l=1,N_st - v_t(l,k_a) = v_t(l,k_a) + hij * u_t(l,l_a) - ! same spin => sij = 0 - enddo - enddo - - - - ! Single and double beta excitations - ! ================================== - - - ! Initial determinant is at k_a in alpha-major representation - ! ----------------------------------------------------------------------- - - krow = psi_bilinear_matrix_rows(k_a) - kcol = psi_bilinear_matrix_columns(k_a) - - tmp_det(1:$N_int,1) = psi_det_alpha_unique(1:$N_int, krow) - tmp_det(1:$N_int,2) = psi_det_beta_unique (1:$N_int, kcol) - - spindet(1:$N_int) = tmp_det(1:$N_int,2) - - ! Initial determinant is at k_b in beta-major representation - ! ----------------------------------------------------------------------- - - k_b = psi_bilinear_matrix_order_transp_reverse(k_a) - - ! Loop inside the alpha row to gather all the connected betas - lrow = psi_bilinear_matrix_transp_rows(k_b) - l_b = psi_bilinear_matrix_transp_rows_loc(lrow) - do i=1,N_det_beta_unique - if (l_b > N_det) exit - lrow = psi_bilinear_matrix_transp_rows(l_b) - if (lrow /= krow) exit - lcol = psi_bilinear_matrix_transp_columns(l_b) - ASSERT (lcol <= N_det_beta_unique) - - buffer(1:$N_int,i) = psi_det_beta_unique(1:$N_int, lcol) - idx(i) = l_b - l_b = l_b+1 - enddo - i = i-1 - - call get_all_spin_singles_and_doubles_$N_int( & - buffer, idx, spindet, i, & - singles_b, doubles, n_singles_b, n_doubles ) - - ! Compute Hij for all beta singles - ! ---------------------------------- - - tmp_det2(1:$N_int,1) = psi_det_alpha_unique(1:$N_int, krow) - do i=1,n_singles_b - l_b = singles_b(i) - ASSERT (l_b <= N_det) - - lcol = psi_bilinear_matrix_transp_columns(l_b) - ASSERT (lcol <= N_det_beta_unique) - - tmp_det2(1:$N_int,2) = psi_det_beta_unique (1:$N_int, lcol) - call i_H_j_mono_spin_erf( tmp_det, tmp_det2, $N_int, 2, hij) - l_a = psi_bilinear_matrix_transp_order(l_b) - ASSERT (l_a <= N_det) - do l=1,N_st - v_t(l,k_a) = v_t(l,k_a) + hij * u_t(l,l_a) - ! single => sij = 0 - enddo - enddo - - ! Compute Hij for all beta doubles - ! ---------------------------------- - - do i=1,n_doubles - l_b = doubles(i) - ASSERT (l_b <= N_det) - - lcol = psi_bilinear_matrix_transp_columns(l_b) - ASSERT (lcol <= N_det_beta_unique) - - call i_H_j_double_spin_erf( tmp_det(1,2), psi_det_beta_unique(1, lcol), $N_int, hij) - l_a = psi_bilinear_matrix_transp_order(l_b) - ASSERT (l_a <= N_det) - - do l=1,N_st - v_t(l,k_a) = v_t(l,k_a) + hij * u_t(l,l_a) - ! same spin => sij = 0 - enddo - enddo - - - ! Diagonal contribution - ! ===================== - - - ! Initial determinant is at k_a in alpha-major representation - ! ----------------------------------------------------------------------- - - krow = psi_bilinear_matrix_rows(k_a) - ASSERT (krow <= N_det_alpha_unique) - - kcol = psi_bilinear_matrix_columns(k_a) - ASSERT (kcol <= N_det_beta_unique) - - tmp_det(1:$N_int,1) = psi_det_alpha_unique(1:$N_int, krow) - tmp_det(1:$N_int,2) = psi_det_beta_unique (1:$N_int, kcol) - - double precision, external :: diag_H_mat_elem_erf, diag_S_mat_elem - - hij = diag_H_mat_elem_erf(tmp_det,$N_int) - sij = diag_S_mat_elem(tmp_det,$N_int) - do l=1,N_st - v_t(l,k_a) = v_t(l,k_a) + hij * u_t(l,k_a) - s_t(l,k_a) = s_t(l,k_a) + sij * u_t(l,k_a) - enddo - - end do - !$OMP END DO - deallocate(buffer, singles_a, singles_b, doubles, idx) - !$OMP END PARALLEL - -end - -SUBST [ N_int ] - -1;; -2;; -3;; -4;; -N_int;; - -END_TEMPLATE - - diff --git a/src/dft_utils_two_body/write_effective_rsdft_hamiltonian.irp.f b/src/dft_utils_two_body/write_effective_rsdft_hamiltonian.irp.f deleted file mode 100644 index ba58d5b4..00000000 --- a/src/dft_utils_two_body/write_effective_rsdft_hamiltonian.irp.f +++ /dev/null @@ -1,34 +0,0 @@ -program write_effective_RSDFT_hamiltonian - implicit none - BEGIN_DOC - ! This programs writes the effective RS-DFT Hamiltonian into the EZFIO folder. - ! The next programs that will run unto the EZFIO folder will, by default, have the one- and two-body integrals loaded from the EZFIO data. - END_DOC - read_wf = .true. - touch read_wf - disk_access_mo_one_integrals = "None" - touch disk_access_mo_one_integrals - disk_access_mo_integrals = "None" - touch disk_access_mo_integrals - disk_access_ao_integrals = "None" - touch disk_access_ao_integrals - call routines_write_int - call routines_compute_energy -end - -subroutine routines_write_int - implicit none - call write_all_integrals_for_mrdft - density_for_dft = "WFT" - touch density_for_dft -end - -subroutine routines_compute_energy - implicit none - call print_variational_energy_dft - call ezfio_set_aux_quantities_data_one_body_alpha_dm_mo(one_body_dm_mo_alpha) - call ezfio_set_aux_quantities_data_one_body_beta_dm_mo(one_body_dm_mo_beta) - -end - - diff --git a/src/dummy/NEED b/src/dummy/NEED index 1d895df2..dbb07f92 100644 --- a/src/dummy/NEED +++ b/src/dummy/NEED @@ -15,7 +15,6 @@ determinants dft_keywords dft_utils_in_r dft_utils_one_e -dft_utils_two_body dressing electrons ezfio_files @@ -32,7 +31,6 @@ mo_one_e_integrals mo_two_e_erf_integrals mo_two_e_integrals mpi -mrpt_utils nuclei perturbation pseudo diff --git a/src/generators_cas/README.rst b/src/generators_cas/README.rst index a59a38c7..a030059c 100644 --- a/src/generators_cas/README.rst +++ b/src/generators_cas/README.rst @@ -7,6 +7,6 @@ The |MOs| belonging to the |CAS| are those which were set as active with the :ref:`qp_set_mo_class` command. This module is intended to be included in the :file:`NEED` file to define -generators on a |CAS|. +the generators as the |CAS| determinants, which can be useful to define post-CAS approaches (see cassd module for instance). diff --git a/src/mo_one_e_integrals/README.rst b/src/mo_one_e_integrals/README.rst index ca4e7e64..15faedf7 100644 --- a/src/mo_one_e_integrals/README.rst +++ b/src/mo_one_e_integrals/README.rst @@ -1,6 +1,13 @@ ================== -MO_one_e_integrals +mo_one_e_integrals ================== All the one-electron integrals in |MO| basis are defined here. +The most important providers for usual quantum-chemistry calculation are: + +# `mo_kinetic_integral` which are the kinetic operator integrals on the |AO| basis (see :file:`kin_mo_ints.irp.f`) +# `mo_nucl_elec_integral` which are the nuclear-elctron operator integrals on the |AO| basis (see :file:`pot_mo_ints.irp.f`) +# `mo_mono_elec_integral` which are the the h_core operator integrals on the |AO| basis (see :file:`mo_mono_ints.irp.f`) + +Note that you can find other interesting integrals related to the position operator in :file:`spread_dipole_mo.irp.f`. diff --git a/src/mo_two_e_erf_integrals/routines_save_integrals_erf.irp.f b/src/mo_two_e_erf_integrals/routines_save_integrals_erf.irp.f index 84b7ec13..00845ba8 100644 --- a/src/mo_two_e_erf_integrals/routines_save_integrals_erf.irp.f +++ b/src/mo_two_e_erf_integrals/routines_save_integrals_erf.irp.f @@ -7,6 +7,7 @@ subroutine save_erf_bi_elec_integrals_mo call ezfio_set_mo_two_e_erf_integrals_disk_access_mo_integrals_erf('Read') end + subroutine save_erf_bielec_ints_mo_into_ints_mo implicit none integer :: i,j,k,l diff --git a/src/mrpt_utils/.gitignore b/src/mrpt_utils/.gitignore deleted file mode 120000 index a10a1637..00000000 --- a/src/mrpt_utils/.gitignore +++ /dev/null @@ -1 +0,0 @@ -../../data/module_gitignore \ No newline at end of file diff --git a/src/mrpt_utils/EZFIO.cfg b/src/mrpt_utils/EZFIO.cfg deleted file mode 100644 index 4eded0b7..00000000 --- a/src/mrpt_utils/EZFIO.cfg +++ /dev/null @@ -1,7 +0,0 @@ -[do_third_order_1h1p] -type: logical -doc: If `True`, compute the third order contribution for the 1h1p -interface: ezfio,provider,ocaml -default: True - - diff --git a/src/mrpt_utils/NEED b/src/mrpt_utils/NEED deleted file mode 100644 index 4620373c..00000000 --- a/src/mrpt_utils/NEED +++ /dev/null @@ -1,3 +0,0 @@ -determinants -davidson -psiref_cas diff --git a/src/mrpt_utils/README.rst b/src/mrpt_utils/README.rst deleted file mode 100644 index e72dbce9..00000000 --- a/src/mrpt_utils/README.rst +++ /dev/null @@ -1,5 +0,0 @@ -========== -MRPT_Utils -========== - -Subroutines and providers required for |MRPT|. diff --git a/src/mrpt_utils/density_matrix_based.irp.f b/src/mrpt_utils/density_matrix_based.irp.f deleted file mode 100644 index b2f3b8cf..00000000 --- a/src/mrpt_utils/density_matrix_based.irp.f +++ /dev/null @@ -1,193 +0,0 @@ -subroutine contrib_1h2p_dm_based(accu) - implicit none - integer :: i_i,i_r,i_v,i_a,i_b - integer :: i,r,v,a,b - integer :: ispin,jspin - integer :: istate - double precision, intent(out) :: accu(N_states) - double precision :: active_int(n_act_orb,2) - double precision :: delta_e(n_act_orb,2,N_states) - double precision :: get_mo_bielec_integral - accu = 0.d0 -!do i_i = 1, 1 - do i_i = 1, n_inact_orb - i = list_inact(i_i) -! do i_r = 1, 1 - do i_r = 1, n_virt_orb - r = list_virt(i_r) -! do i_v = 1, 1 - do i_v = 1, n_virt_orb - v = list_virt(i_v) - do i_a = 1, n_act_orb - a = list_act(i_a) - active_int(i_a,1) = get_mo_bielec_integral(i,a,r,v,mo_integrals_map) ! direct - active_int(i_a,2) = get_mo_bielec_integral(i,a,v,r,mo_integrals_map) ! exchange - do istate = 1, N_states - do jspin=1, 2 - delta_e(i_a,jspin,istate) = one_anhil(i_a,jspin,istate) & - - fock_virt_total_spin_trace(r,istate) & - - fock_virt_total_spin_trace(v,istate) & - + fock_core_inactive_total_spin_trace(i,istate) - delta_e(i_a,jspin,istate) = 1.d0/delta_e(i_a,jspin,istate) - enddo - enddo - enddo - do i_a = 1, n_act_orb - a = list_act(i_a) - do i_b = 1, n_act_orb -! do i_b = i_a, i_a - b = list_act(i_b) - do ispin = 1, 2 ! spin of (i --> r) - do jspin = 1, 2 ! spin of (a --> v) - if(ispin == jspin .and. r.le.v)cycle ! condition not to double count - do istate = 1, N_states - if(ispin == jspin)then - accu(istate) += (active_int(i_a,1) - active_int(i_a,2)) * one_body_dm_mo_spin_index(a,b,istate,ispin) & - * (active_int(i_b,1) - active_int(i_b,2)) & - * delta_e(i_a,jspin,istate) - else - accu(istate) += active_int(i_a,1) * one_body_dm_mo_spin_index(a,b,istate,ispin) * delta_e(i_a,ispin,istate) & - * active_int(i_b,1) - endif - enddo - enddo - enddo - enddo - enddo - enddo - enddo - enddo - - -end - -subroutine contrib_2h1p_dm_based(accu) - implicit none - integer :: i_i,i_j,i_v,i_a,i_b - integer :: i,j,v,a,b - integer :: ispin,jspin - integer :: istate - double precision, intent(out) :: accu(N_states) - double precision :: active_int(n_act_orb,2) - double precision :: delta_e(n_act_orb,2,N_states) - double precision :: get_mo_bielec_integral - accu = 0.d0 - do i_i = 1, n_inact_orb - i = list_inact(i_i) - do i_j = 1, n_inact_orb - j = list_inact(i_j) - do i_v = 1, n_virt_orb - v = list_virt(i_v) - do i_a = 1, n_act_orb - a = list_act(i_a) - active_int(i_a,1) = get_mo_bielec_integral(i,j,v,a,mo_integrals_map) ! direct - active_int(i_a,2) = get_mo_bielec_integral(i,j,a,v,mo_integrals_map) ! exchange - do istate = 1, N_states - do jspin=1, 2 -! delta_e(i_a,jspin,istate) = -! - delta_e(i_a,jspin,istate) = one_creat(i_a,jspin,istate) - fock_virt_total_spin_trace(v,istate) & - + fock_core_inactive_total_spin_trace(i,istate) & - + fock_core_inactive_total_spin_trace(j,istate) - delta_e(i_a,jspin,istate) = 1.d0/delta_e(i_a,jspin,istate) - enddo - enddo - enddo - do i_a = 1, n_act_orb - a = list_act(i_a) - do i_b = 1, n_act_orb -! do i_b = i_a, i_a - b = list_act(i_b) - do ispin = 1, 2 ! spin of (i --> v) - do jspin = 1, 2 ! spin of (j --> a) - if(ispin == jspin .and. i.le.j)cycle ! condition not to double count - do istate = 1, N_states - if(ispin == jspin)then - accu(istate) += (active_int(i_a,1) - active_int(i_a,2)) * one_body_dm_dagger_mo_spin_index(a,b,istate,ispin) & - * (active_int(i_b,1) - active_int(i_b,2)) & - * delta_e(i_a,jspin,istate) - else - accu(istate) += active_int(i_a,1) * one_body_dm_dagger_mo_spin_index(a,b,istate,ispin) * delta_e(i_a,ispin,istate) & - * active_int(i_b,1) - endif - enddo - enddo - enddo - enddo - enddo - enddo - enddo - enddo - - -end - - -!subroutine contrib_2p_dm_based(accu) -!implicit none -!integer :: i_r,i_v,i_a,i_b,i_c,i_d -!integer :: r,v,a,b,c,d -!integer :: ispin,jspin -!integer :: istate -!double precision, intent(out) :: accu(N_states) -!double precision :: active_int(n_act_orb,n_act_orb,2) -!double precision :: delta_e(n_act_orb,n_act_orb,2,2,N_states) -!double precision :: get_mo_bielec_integral -!accu = 0.d0 -!do i_r = 1, n_virt_orb -! r = list_virt(i_r) -! do i_v = 1, n_virt_orb -! v = list_virt(i_v) -! do i_a = 1, n_act_orb -! a = list_act(i_a) -! do i_b = 1, n_act_orb -! b = list_act(i_b) -! active_int(i_a,i_b,1) = get_mo_bielec_integral(a,b,r,v,mo_integrals_map) ! direct -! active_int(i_a,i_b,2) = get_mo_bielec_integral(a,b,v,r,mo_integrals_map) ! direct -! do istate = 1, N_states -! do jspin=1, 2 ! spin of i_a -! do ispin = 1, 2 ! spin of i_b -! delta_e(i_a,i_b,jspin,ispin,istate) = two_anhil(i_a,i_b,jspin,ispin,istate) & -! - fock_virt_total_spin_trace(r,istate) & -! - fock_virt_total_spin_trace(v,istate) -! delta_e(i_a,i_b,jspin,ispin,istate) = 1.d0/delta_e(i_a,i_b,jspin,ispin,istate) -! enddo -! enddo -! enddo -! enddo -! enddo -! ! diagonal terms -! do i_a = 1, n_act_orb -! a = list_act(i_a) -! do i_b = 1, n_act_orb -! b = list_act(i_b) -! do ispin = 1, 2 ! spin of (a --> r) -! do jspin = 1, 2 ! spin of (b --> v) -! if(ispin == jspin .and. r.le.v)cycle ! condition not to double count -! if(ispin == jspin .and. a.le.b)cycle ! condition not to double count -! do istate = 1, N_states -! if(ispin == jspin)then -! double precision :: contrib_spin -! if(ispin == 1)then -! contrib_spin = two_body_dm_aa_diag_act(i_a,i_b) -! else -! contrib_spin = two_body_dm_bb_diag_act(i_a,i_b) -! endif -! accu(istate) += (active_int(i_a,i_b,1) - active_int(i_a,i_b,2)) * contrib_spin & -! * (active_int(i_a,i_b,1) - active_int(i_a,i_b,2)) & -! * delta_e(i_a,i_b,ispin,jspin,istate) -! else -! accu(istate) += 0.5d0 * active_int(i_a,i_b,1) * two_body_dm_ab_diag_act(i_a,i_b) * delta_e(i_a,i_b,ispin,jspin,istate) & -! * active_int(i_a,i_b,1) -! endif -! enddo -! enddo -! enddo -! enddo -! enddo -! enddo -! enddo - - -!end - diff --git a/src/mrpt_utils/energies_cas.irp.f b/src/mrpt_utils/energies_cas.irp.f deleted file mode 100644 index 89a183c9..00000000 --- a/src/mrpt_utils/energies_cas.irp.f +++ /dev/null @@ -1,1109 +0,0 @@ -BEGIN_PROVIDER [ double precision, energy_cas_dyall, (N_states)] - implicit none - integer :: i - double precision :: energies(N_states) - do i = 1, N_states - call u0_H_dyall_u0(energies,psi_active,psi_coef,n_det_ref,psi_det_size,psi_det_size,N_states,i) - energy_cas_dyall(i) = energies(i) - print*, 'energy_cas_dyall(i)', energy_cas_dyall(i) - enddo -END_PROVIDER - - -BEGIN_PROVIDER [ double precision, energy_cas_dyall_no_exchange, (N_states)] - implicit none - integer :: i - double precision :: energies(N_states) - do i = 1, N_states - call u0_H_dyall_u0_no_exchange(energies,psi_active,psi_coef,n_det_ref,psi_det_size,psi_det_size,N_states,i) - energy_cas_dyall_no_exchange(i) = energies(i) - print*, 'energy_cas_dyall(i)_no_exchange', energy_cas_dyall_no_exchange(i) - enddo -END_PROVIDER - - - -BEGIN_PROVIDER [ double precision, one_creat, (n_act_orb,2,N_states)] - implicit none - integer :: i,j - integer :: ispin - integer :: orb, hole_particle,spin_exc - double precision :: norm_out(N_states) - integer(bit_kind), allocatable :: psi_in_out(:,:,:) - double precision, allocatable :: psi_in_out_coef(:,:) - allocate (psi_in_out(N_int,2,n_det_ref),psi_in_out_coef(n_det_ref,N_states)) - use bitmasks - - integer :: iorb - integer :: state_target - double precision :: energies(n_states) - do iorb = 1,n_act_orb - do ispin = 1,2 - orb = list_act(iorb) - hole_particle = 1 - spin_exc = ispin - do i = 1, n_det_ref - do j = 1, n_states - psi_in_out_coef(i,j) = psi_coef(i,j) - enddo - do j = 1, N_int - psi_in_out(j,1,i) = psi_active(j,1,i) - psi_in_out(j,2,i) = psi_active(j,2,i) - enddo - enddo - do state_target = 1,N_states - call apply_exc_to_psi(orb,hole_particle,spin_exc, & - norm_out,psi_in_out,psi_in_out_coef, n_det_ref,n_det_ref,n_det_ref,N_states) - call u0_H_dyall_u0(energies,psi_in_out,psi_in_out_coef,n_det_ref,n_det_ref,n_det_ref,N_states,state_target) - one_creat(iorb,ispin,state_target) = energy_cas_dyall(state_target) - energies(state_target) - enddo - enddo - enddo - deallocate(psi_in_out,psi_in_out_coef) - -END_PROVIDER - -BEGIN_PROVIDER [ double precision, one_anhil, (n_act_orb,2,N_states)] - implicit none - integer :: i,j - integer :: ispin - integer :: orb, hole_particle,spin_exc - double precision :: norm_out(N_states) - integer(bit_kind), allocatable :: psi_in_out(:,:,:) - double precision, allocatable :: psi_in_out_coef(:,:) - use bitmasks - allocate (psi_in_out(N_int,2,n_det_ref),psi_in_out_coef(n_det_ref,N_states)) - - integer :: iorb - integer :: state_target - double precision :: energies(n_states) - do iorb = 1,n_act_orb - do ispin = 1,2 - orb = list_act(iorb) - hole_particle = -1 - spin_exc = ispin - do i = 1, n_det_ref - do j = 1, n_states - psi_in_out_coef(i,j) = psi_coef(i,j) - enddo - do j = 1, N_int - psi_in_out(j,1,i) = psi_active(j,1,i) - psi_in_out(j,2,i) = psi_active(j,2,i) - enddo - enddo - do state_target = 1, N_states - call apply_exc_to_psi(orb,hole_particle,spin_exc, & - norm_out,psi_in_out,psi_in_out_coef, n_det_ref,n_det_ref,n_det_ref,N_states) - call u0_H_dyall_u0(energies,psi_in_out,psi_in_out_coef,n_det_ref,n_det_ref,n_det_ref,N_states,state_target) - one_anhil(iorb,ispin,state_target) = energy_cas_dyall(state_target) - energies(state_target) - enddo - enddo - enddo - deallocate(psi_in_out,psi_in_out_coef) - -END_PROVIDER - -BEGIN_PROVIDER [ double precision, two_creat, (n_act_orb,n_act_orb,2,2,N_states)] - implicit none - integer :: i,j - integer :: ispin,jspin - integer :: orb_i, hole_particle_i,spin_exc_i - integer :: orb_j, hole_particle_j,spin_exc_j - double precision :: norm_out(N_states) - integer(bit_kind), allocatable :: psi_in_out(:,:,:) - double precision, allocatable :: psi_in_out_coef(:,:) - use bitmasks - allocate (psi_in_out(N_int,2,n_det_ref),psi_in_out_coef(n_det_ref,N_states)) - - integer :: iorb,jorb - integer :: state_target - double precision :: energies(n_states) - do iorb = 1,n_act_orb - do ispin = 1,2 - orb_i = list_act(iorb) - hole_particle_i = 1 - spin_exc_i = ispin - do jorb = 1, n_act_orb - do jspin = 1,2 - orb_j = list_act(jorb) - hole_particle_j = 1 - spin_exc_j = jspin - do i = 1, n_det_ref - do j = 1, n_states - psi_in_out_coef(i,j) = psi_coef(i,j) - enddo - do j = 1, N_int - psi_in_out(j,1,i) = psi_active(j,1,i) - psi_in_out(j,2,i) = psi_active(j,2,i) - enddo - enddo - do state_target = 1 , N_states - call apply_exc_to_psi(orb_i,hole_particle_i,spin_exc_i, & - norm_out,psi_in_out,psi_in_out_coef, n_det_ref,n_det_ref,n_det_ref,N_states) - call apply_exc_to_psi(orb_j,hole_particle_j,spin_exc_j, & - norm_out,psi_in_out,psi_in_out_coef, n_det_ref,n_det_ref,n_det_ref,N_states) - call u0_H_dyall_u0(energies,psi_in_out,psi_in_out_coef,n_det_ref,n_det_ref,n_det_ref,N_states,state_target) - two_creat(iorb,jorb,ispin,jspin,state_target) = energy_cas_dyall(state_target) - energies(state_target) - enddo - enddo - enddo - enddo - enddo - deallocate(psi_in_out,psi_in_out_coef) - -END_PROVIDER - -BEGIN_PROVIDER [ double precision, two_anhil, (n_act_orb,n_act_orb,2,2,N_states)] - implicit none - integer :: i,j - integer :: ispin,jspin - integer :: orb_i, hole_particle_i,spin_exc_i - integer :: orb_j, hole_particle_j,spin_exc_j - double precision :: norm_out(N_states) - integer(bit_kind), allocatable :: psi_in_out(:,:,:) - double precision, allocatable :: psi_in_out_coef(:,:) - use bitmasks - allocate (psi_in_out(N_int,2,n_det_ref),psi_in_out_coef(n_det_ref,N_states)) - - integer :: iorb,jorb - integer :: state_target - state_target = 1 - double precision :: energies(n_states) - do iorb = 1,n_act_orb - do ispin = 1,2 - orb_i = list_act(iorb) - hole_particle_i = -1 - spin_exc_i = ispin - do jorb = 1, n_act_orb - do jspin = 1,2 - orb_j = list_act(jorb) - hole_particle_j = -1 - spin_exc_j = jspin - do i = 1, n_det_ref - do j = 1, n_states - psi_in_out_coef(i,j) = psi_coef(i,j) - enddo - do j = 1, N_int - psi_in_out(j,1,i) = psi_active(j,1,i) - psi_in_out(j,2,i) = psi_active(j,2,i) - enddo - enddo - call apply_exc_to_psi(orb_i,hole_particle_i,spin_exc_i, & - norm_out,psi_in_out,psi_in_out_coef, n_det_ref,n_det_ref,n_det_ref,N_states) - call apply_exc_to_psi(orb_j,hole_particle_j,spin_exc_j, & - norm_out,psi_in_out,psi_in_out_coef, n_det_ref,n_det_ref,n_det_ref,N_states) - call u0_H_dyall_u0(energies,psi_in_out,psi_in_out_coef,n_det_ref,n_det_ref,n_det_ref,N_states,state_target) - two_anhil(iorb,jorb,ispin,jspin,state_target) = energy_cas_dyall(state_target) - energies(state_target) - enddo - enddo - enddo - enddo - deallocate(psi_in_out,psi_in_out_coef) - -END_PROVIDER - -BEGIN_PROVIDER [ double precision, one_anhil_one_creat, (n_act_orb,n_act_orb,2,2,N_States)] - implicit none - integer :: i,j - integer :: ispin,jspin - integer :: orb_i, hole_particle_i,spin_exc_i - integer :: orb_j, hole_particle_j,spin_exc_j - double precision :: norm_out(N_states) - integer(bit_kind), allocatable :: psi_in_out(:,:,:) - double precision, allocatable :: psi_in_out_coef(:,:) - use bitmasks - - allocate (psi_in_out(N_int,2,n_det_ref),psi_in_out_coef(n_det_ref,N_states)) - integer :: iorb,jorb - integer :: state_target - double precision :: energies(n_states) - do iorb = 1,n_act_orb - do ispin = 1,2 - orb_i = list_act(iorb) - hole_particle_i = 1 - spin_exc_i = ispin - do jorb = 1, n_act_orb - do jspin = 1,2 - orb_j = list_act(jorb) - hole_particle_j = -1 - spin_exc_j = jspin - do i = 1, n_det_ref - do j = 1, n_states - psi_in_out_coef(i,j) = psi_coef(i,j) - enddo - do j = 1, N_int - psi_in_out(j,1,i) = psi_active(j,1,i) - psi_in_out(j,2,i) = psi_active(j,2,i) - enddo - enddo - do state_target = 1, N_states - call apply_exc_to_psi(orb_j,hole_particle_j,spin_exc_j, & - norm_out,psi_in_out,psi_in_out_coef, n_det_ref,n_det_ref,n_det_ref,N_states) - call apply_exc_to_psi(orb_i,hole_particle_i,spin_exc_i, & - norm_out,psi_in_out,psi_in_out_coef, n_det_ref,n_det_ref,n_det_ref,N_states) - if(orb_i == orb_j .and. ispin .ne. jspin)then - call u0_H_dyall_u0_no_exchange(energies,psi_in_out,psi_in_out_coef,n_det_ref,n_det_ref,n_det_ref,N_states,state_target) - one_anhil_one_creat(iorb,jorb,ispin,jspin,state_target) = energy_cas_dyall_no_exchange(state_target) - energies(state_target) - else - call u0_H_dyall_u0(energies,psi_in_out,psi_in_out_coef,n_det_ref,n_det_ref,n_det_ref,N_states,state_target) - one_anhil_one_creat(iorb,jorb,ispin,jspin,state_target) = energy_cas_dyall(state_target) - energies(state_target) - endif - enddo - enddo - enddo - enddo - enddo - -END_PROVIDER - - -BEGIN_PROVIDER [ double precision, two_anhil_one_creat, (n_act_orb,n_act_orb,n_act_orb,2,2,2,N_states)] - implicit none - integer :: i,j - integer :: ispin,jspin,kspin - integer :: orb_i, hole_particle_i,spin_exc_i - integer :: orb_j, hole_particle_j,spin_exc_j - integer :: orb_k, hole_particle_k,spin_exc_k - double precision :: norm_out(N_states) - integer(bit_kind), allocatable :: psi_in_out(:,:,:) - double precision, allocatable :: psi_in_out_coef(:,:) - use bitmasks - allocate (psi_in_out(N_int,2,n_det_ref),psi_in_out_coef(n_det_ref,N_states)) - - integer :: iorb,jorb - integer :: korb - integer :: state_target - double precision :: energies(n_states) - do iorb = 1,n_act_orb - do ispin = 1,2 - orb_i = list_act(iorb) - hole_particle_i = 1 - spin_exc_i = ispin - do jorb = 1, n_act_orb - do jspin = 1,2 - orb_j = list_act(jorb) - hole_particle_j = -1 - spin_exc_j = jspin - do korb = 1, n_act_orb - do kspin = 1,2 - orb_k = list_act(korb) - hole_particle_k = -1 - spin_exc_k = kspin - do i = 1, n_det_ref - do j = 1, n_states - psi_in_out_coef(i,j) = psi_coef(i,j) - enddo - do j = 1, N_int - psi_in_out(j,1,i) = psi_active(j,1,i) - psi_in_out(j,2,i) = psi_active(j,2,i) - enddo - enddo - - do state_target = 1, N_states - call apply_exc_to_psi(orb_j,hole_particle_j,spin_exc_j, & - norm_out,psi_in_out,psi_in_out_coef, n_det_ref,n_det_ref,n_det_ref,N_states) - call apply_exc_to_psi(orb_k,hole_particle_k,spin_exc_k, & - norm_out,psi_in_out,psi_in_out_coef, n_det_ref,n_det_ref,n_det_ref,N_states) - call apply_exc_to_psi(orb_i,hole_particle_i,spin_exc_i, & - norm_out,psi_in_out,psi_in_out_coef, n_det_ref,n_det_ref,n_det_ref,N_states) - call u0_H_dyall_u0(energies,psi_in_out,psi_in_out_coef,n_det_ref,n_det_ref,n_det_ref,N_states,state_target) - two_anhil_one_creat(iorb,jorb,korb,ispin,jspin,kspin,state_target) = energy_cas_dyall(state_target) - energies(state_target) - enddo - enddo - enddo - enddo - enddo - enddo - enddo - deallocate(psi_in_out,psi_in_out_coef) - -END_PROVIDER - -BEGIN_PROVIDER [ double precision, two_creat_one_anhil, (n_act_orb,n_act_orb,n_act_orb,2,2,2,N_states)] - implicit none - integer :: i,j - integer :: ispin,jspin,kspin - integer :: orb_i, hole_particle_i,spin_exc_i - integer :: orb_j, hole_particle_j,spin_exc_j - integer :: orb_k, hole_particle_k,spin_exc_k - double precision :: norm_out(N_states) - integer(bit_kind), allocatable :: psi_in_out(:,:,:) - double precision, allocatable :: psi_in_out_coef(:,:) - use bitmasks - allocate (psi_in_out(N_int,2,n_det_ref),psi_in_out_coef(n_det_ref,N_states)) - - integer :: iorb,jorb - integer :: korb - integer :: state_target - double precision :: energies(n_states) - do iorb = 1,n_act_orb - do ispin = 1,2 - orb_i = list_act(iorb) - hole_particle_i = 1 - spin_exc_i = ispin - do jorb = 1, n_act_orb - do jspin = 1,2 - orb_j = list_act(jorb) - hole_particle_j = 1 - spin_exc_j = jspin - do korb = 1, n_act_orb - do kspin = 1,2 - orb_k = list_act(korb) - hole_particle_k = -1 - spin_exc_k = kspin - do i = 1, n_det_ref - do j = 1, n_states - psi_in_out_coef(i,j) = psi_coef(i,j) - enddo - do j = 1, N_int - psi_in_out(j,1,i) = psi_active(j,1,i) - psi_in_out(j,2,i) = psi_active(j,2,i) - enddo - enddo - do state_target = 1, N_states - call apply_exc_to_psi(orb_k,hole_particle_k,spin_exc_k, & - norm_out,psi_in_out,psi_in_out_coef, n_det_ref,n_det_ref,n_det_ref,N_states) - call apply_exc_to_psi(orb_i,hole_particle_i,spin_exc_i, & - norm_out,psi_in_out,psi_in_out_coef, n_det_ref,n_det_ref,n_det_ref,N_states) - call apply_exc_to_psi(orb_j,hole_particle_j,spin_exc_j, & - norm_out,psi_in_out,psi_in_out_coef, n_det_ref,n_det_ref,n_det_ref,N_states) - call u0_H_dyall_u0(energies,psi_in_out,psi_in_out_coef,n_det_ref,n_det_ref,n_det_ref,N_states,state_target) - two_creat_one_anhil(iorb,jorb,korb,ispin,jspin,kspin,state_target) = energy_cas_dyall(state_target) - energies(state_target) - enddo - enddo - enddo - enddo - enddo - enddo - enddo - deallocate(psi_in_out,psi_in_out_coef) - -END_PROVIDER - -BEGIN_PROVIDER [ double precision, three_creat, (n_act_orb,n_act_orb,n_act_orb,2,2,2,N_states)] - implicit none - integer :: i,j - integer :: ispin,jspin,kspin - integer :: orb_i, hole_particle_i,spin_exc_i - integer :: orb_j, hole_particle_j,spin_exc_j - integer :: orb_k, hole_particle_k,spin_exc_k - double precision :: norm_out(N_states) - integer(bit_kind), allocatable :: psi_in_out(:,:,:) - double precision, allocatable :: psi_in_out_coef(:,:) - use bitmasks - allocate (psi_in_out(N_int,2,n_det_ref),psi_in_out_coef(n_det_ref,N_states)) - - integer :: iorb,jorb - integer :: korb - integer :: state_target - double precision :: energies(n_states) - do iorb = 1,n_act_orb - do ispin = 1,2 - orb_i = list_act(iorb) - hole_particle_i = 1 - spin_exc_i = ispin - do jorb = 1, n_act_orb - do jspin = 1,2 - orb_j = list_act(jorb) - hole_particle_j = 1 - spin_exc_j = jspin - do korb = 1, n_act_orb - do kspin = 1,2 - orb_k = list_act(korb) - hole_particle_k = 1 - spin_exc_k = kspin - do i = 1, n_det_ref - do j = 1, n_states - psi_in_out_coef(i,j) = psi_coef(i,j) - enddo - do j = 1, N_int - psi_in_out(j,1,i) = psi_active(j,1,i) - psi_in_out(j,2,i) = psi_active(j,2,i) - enddo - enddo - do state_target = 1, N_states - call apply_exc_to_psi(orb_i,hole_particle_i,spin_exc_i, & - norm_out,psi_in_out,psi_in_out_coef, n_det_ref,n_det_ref,n_det_ref,N_states) - call apply_exc_to_psi(orb_j,hole_particle_j,spin_exc_j, & - norm_out,psi_in_out,psi_in_out_coef, n_det_ref,n_det_ref,n_det_ref,N_states) - call apply_exc_to_psi(orb_k,hole_particle_k,spin_exc_k, & - norm_out,psi_in_out,psi_in_out_coef, n_det_ref,n_det_ref,n_det_ref,N_states) - call u0_H_dyall_u0(energies,psi_in_out,psi_in_out_coef,n_det_ref,n_det_ref,n_det_ref,N_states,state_target) - three_creat(iorb,jorb,korb,ispin,jspin,kspin,state_target) = energy_cas_dyall(state_target) - energies(state_target) - enddo - enddo - enddo - enddo - enddo - enddo - enddo - deallocate(psi_in_out,psi_in_out_coef) - -END_PROVIDER - -BEGIN_PROVIDER [ double precision, three_anhil, (n_act_orb,n_act_orb,n_act_orb,2,2,2,N_states)] - implicit none - integer :: i,j - integer :: ispin,jspin,kspin - integer :: orb_i, hole_particle_i,spin_exc_i - integer :: orb_j, hole_particle_j,spin_exc_j - integer :: orb_k, hole_particle_k,spin_exc_k - double precision :: norm_out(N_states) - integer(bit_kind), allocatable :: psi_in_out(:,:,:) - double precision, allocatable :: psi_in_out_coef(:,:) - use bitmasks - allocate (psi_in_out(N_int,2,n_det_ref),psi_in_out_coef(n_det_ref,N_states)) - - integer :: iorb,jorb - integer :: korb - integer :: state_target - double precision :: energies(n_states) - do iorb = 1,n_act_orb - do ispin = 1,2 - orb_i = list_act(iorb) - hole_particle_i = -1 - spin_exc_i = ispin - do jorb = 1, n_act_orb - do jspin = 1,2 - orb_j = list_act(jorb) - hole_particle_j = -1 - spin_exc_j = jspin - do korb = 1, n_act_orb - do kspin = 1,2 - orb_k = list_act(korb) - hole_particle_k = -1 - spin_exc_k = kspin - do i = 1, n_det_ref - do j = 1, n_states - psi_in_out_coef(i,j) = psi_coef(i,j) - enddo - do j = 1, N_int - psi_in_out(j,1,i) = psi_active(j,1,i) - psi_in_out(j,2,i) = psi_active(j,2,i) - enddo - enddo - do state_target = 1, N_states - call apply_exc_to_psi(orb_i,hole_particle_i,spin_exc_i, & - norm_out,psi_in_out,psi_in_out_coef, n_det_ref,n_det_ref,n_det_ref,N_states) - call apply_exc_to_psi(orb_j,hole_particle_j,spin_exc_j, & - norm_out,psi_in_out,psi_in_out_coef, n_det_ref,n_det_ref,n_det_ref,N_states) - call apply_exc_to_psi(orb_k,hole_particle_k,spin_exc_k, & - norm_out,psi_in_out,psi_in_out_coef, n_det_ref,n_det_ref,n_det_ref,N_states) - call u0_H_dyall_u0(energies,psi_in_out,psi_in_out_coef,n_det_ref,n_det_ref,n_det_ref,N_states,state_target) - three_anhil(iorb,jorb,korb,ispin,jspin,kspin,state_target) = energy_cas_dyall(state_target) - energies(state_target) - enddo - enddo - enddo - enddo - enddo - enddo - enddo - deallocate(psi_in_out,psi_in_out_coef) - -END_PROVIDER - - - - BEGIN_PROVIDER [ double precision, one_anhil_one_creat_inact_virt, (n_inact_orb,n_virt_orb,N_States)] -&BEGIN_PROVIDER [ double precision, one_anhil_one_creat_inact_virt_norm, (n_inact_orb,n_virt_orb,N_States,2)] - implicit none - integer :: i,vorb,j - integer :: ispin,jspin - integer :: orb_i, hole_particle_i - integer :: orb_v - double precision :: norm_out(N_states) - integer(bit_kind), allocatable :: psi_in_out(:,:,:) - double precision, allocatable :: psi_in_out_coef(:,:) - use bitmasks - allocate (psi_in_out(N_int,2,n_det_ref),psi_in_out_coef(n_det_ref,N_states)) - - integer :: iorb,jorb,i_ok - integer :: state_target - double precision :: energies(n_states) - double precision :: hij - double precision :: norm(N_states,2),norm_no_inv(N_states,2),norm_bis(N_states,2) - double precision :: energies_alpha_beta(N_states,2) - - - double precision :: thresh_norm - - thresh_norm = 1.d-10 - - - - do vorb = 1,n_virt_orb - orb_v = list_virt(vorb) - do iorb = 1, n_inact_orb - orb_i = list_inact(iorb) - norm = 0.d0 - norm_bis = 0.d0 - do ispin = 1,2 - do state_target =1 , N_states - one_anhil_one_creat_inact_virt_norm(iorb,vorb,state_target,ispin) = 0.d0 - enddo - do i = 1, n_det_ref - do j = 1, N_int - psi_in_out(j,1,i) = psi_ref(j,1,i) - psi_in_out(j,2,i) = psi_ref(j,2,i) - enddo - call do_mono_excitation(psi_in_out(1,1,i),orb_i,orb_v,ispin,i_ok) - if(i_ok.ne.1)then - print*, orb_i,orb_v - call debug_det(psi_in_out,N_int) - print*, 'pb, i_ok ne 0 !!!' - endif - call i_H_j(psi_in_out(1,1,i),psi_ref(1,1,i),N_int,hij) - do j = 1, n_states - double precision :: coef,contrib - coef = psi_coef(i,j) !* psi_coef(i,j) - psi_in_out_coef(i,j) = sign(coef,psi_coef(i,j)) * hij - norm(j,ispin) += psi_in_out_coef(i,j) * psi_in_out_coef(i,j) - enddo - enddo - do j = 1, N_states - if (dabs(norm(j,ispin)) .le. thresh_norm)then - norm(j,ispin) = 0.d0 - norm_no_inv(j,ispin) = norm(j,ispin) - one_anhil_one_creat_inact_virt_norm(iorb,vorb,j,ispin) = 0.d0 - else - norm_no_inv(j,ispin) = norm(j,ispin) - one_anhil_one_creat_inact_virt_norm(iorb,vorb,j,ispin) = 1.d0 / norm(j,ispin) - norm(j,ispin) = 1.d0/dsqrt(norm(j,ispin)) - endif - enddo - do i = 1, N_det - do j = 1, N_states - psi_in_out_coef(i,j) = psi_in_out_coef(i,j) * norm(j,ispin) - norm_bis(j,ispin) += psi_in_out_coef(i,j) * psi_in_out_coef(i,j) - enddo - do j = 1, N_int - psi_in_out(j,1,i) = psi_active(j,1,i) - psi_in_out(j,2,i) = psi_active(j,2,i) - enddo - enddo - do state_target = 1, N_states - energies_alpha_beta(state_target, ispin) = - mo_bielec_integral_jj_exchange(orb_i,orb_v) -! energies_alpha_beta(state_target, ispin) = 0.d0 - if(norm(state_target,ispin) .ne. 0.d0 .and. dabs(norm_no_inv(state_target,ispin)) .gt. thresh_norm)then - call u0_H_dyall_u0(energies,psi_in_out,psi_in_out_coef,n_det_ref,n_det_ref,n_det_ref,N_states,state_target) - energies_alpha_beta(state_target, ispin) += energies(state_target) - endif - enddo - enddo ! ispin - do state_target = 1, N_states - if((norm_no_inv(state_target,1) + norm_no_inv(state_target,2)) .ne. 0.d0)then -! one_anhil_one_creat_inact_virt(iorb,vorb,state_target) = 0.5d0 * & -! ( energy_cas_dyall(state_target) - energies_alpha_beta(state_target,1) + & -! energy_cas_dyall(state_target) - energies_alpha_beta(state_target,2) ) -! print*, energies_alpha_beta(state_target,1) , energies_alpha_beta(state_target,2) -! print*, norm_bis(state_target,1) , norm_bis(state_target,2) - one_anhil_one_creat_inact_virt(iorb,vorb,state_target) = energy_cas_dyall(state_target) - & - ( energies_alpha_beta(state_target,1) + energies_alpha_beta(state_target,2) ) & - /( norm_bis(state_target,1) + norm_bis(state_target,2) ) - else - one_anhil_one_creat_inact_virt(iorb,vorb,state_target) = 0.d0 - endif - enddo - enddo - enddo - deallocate(psi_in_out,psi_in_out_coef) - -END_PROVIDER - - -BEGIN_PROVIDER [ double precision, one_anhil_inact, (n_inact_orb,n_act_orb,N_States)] - implicit none - integer :: i,iorb,j - integer :: ispin,jspin - integer :: orb_i, hole_particle_i - double precision :: norm_out(N_states) - integer(bit_kind), allocatable :: psi_in_out(:,:,:) - double precision, allocatable :: psi_in_out_coef(:,:) - use bitmasks - allocate (psi_in_out(N_int,2,n_det_ref),psi_in_out_coef(n_det_ref,N_states)) - - integer :: jorb,i_ok,aorb,orb_a - integer :: state_target - double precision :: energies(n_states) - double precision :: hij - double precision :: norm(N_states,2),norm_no_inv(N_states,2) - double precision :: energies_alpha_beta(N_states,2) - double precision :: norm_alpha_beta(N_states,2) - - double precision :: thresh_norm - - thresh_norm = 1.d-10 - - do aorb = 1,n_act_orb - orb_a = list_act(aorb) - do iorb = 1, n_inact_orb - orb_i = list_inact(iorb) - do state_target = 1, N_states - one_anhil_inact(iorb,aorb,state_target) = 0.d0 - enddo - norm_alpha_beta = 0.d0 - norm = 0.d0 - norm_bis = 0.d0 - do ispin = 1,2 - do i = 1, n_det_ref - do j = 1, N_int - psi_in_out(j,1,i) = psi_ref(j,1,i) - psi_in_out(j,2,i) = psi_ref(j,2,i) - enddo - call do_mono_excitation(psi_in_out(1,1,i),orb_i,orb_a,ispin,i_ok) - if(i_ok.ne.1)then - do j = 1, n_states - psi_in_out_coef(i,j) = 0.d0 - enddo - else - call i_H_j(psi_in_out(1,1,i),psi_ref(1,1,i),N_int,hij) - do j = 1, n_states - double precision :: coef,contrib - coef = psi_coef(i,j) !* psi_coef(i,j) - psi_in_out_coef(i,j) = sign(coef,psi_coef(i,j)) * hij - norm(j,ispin) += psi_in_out_coef(i,j) * psi_in_out_coef(i,j) - enddo - endif - enddo - do j = 1, N_states - if (dabs(norm(j,ispin)) .le. thresh_norm)then - norm(j,ispin) = 0.d0 - norm_no_inv(j,ispin) = norm(j,ispin) - else - norm_no_inv(j,ispin) = norm(j,ispin) - norm(j,ispin) = 1.d0/dsqrt(norm(j,ispin)) - endif - enddo - double precision :: norm_bis(N_states,2) - do i = 1, N_det - do j = 1, N_states - psi_in_out_coef(i,j) = psi_in_out_coef(i,j) * norm(j,ispin) - norm_bis(j,ispin) += psi_in_out_coef(i,j)* psi_in_out_coef(i,j) - enddo - do j = 1, N_int - psi_in_out(j,1,i) = iand(psi_in_out(j,1,i),cas_bitmask(j,1,1)) - psi_in_out(j,2,i) = iand(psi_in_out(j,2,i),cas_bitmask(j,1,1)) - enddo - enddo - do state_target = 1, N_states - energies_alpha_beta(state_target, ispin) = 0.d0 - if(norm(state_target,ispin) .ne. 0.d0 .and. dabs(norm_no_inv(state_target,ispin)) .gt. thresh_norm)then - call u0_H_dyall_u0(energies,psi_in_out,psi_in_out_coef,n_det_ref,n_det_ref,n_det_ref,N_states,state_target) - energies_alpha_beta(state_target, ispin) += energies(state_target) - endif - enddo - enddo ! ispin - do state_target = 1, N_states - if((norm_no_inv(state_target,1) + norm_no_inv(state_target,2)) .ne. 0.d0)then - one_anhil_inact(iorb,aorb,state_target) = energy_cas_dyall(state_target) - & - ( energies_alpha_beta(state_target,1) + energies_alpha_beta(state_target,2) ) & - /( norm_bis(state_target,1) + norm_bis(state_target,2) ) - else - one_anhil_inact(iorb,aorb,state_target) = 0.d0 - endif - enddo - enddo - enddo - deallocate(psi_in_out,psi_in_out_coef) -END_PROVIDER - - -BEGIN_PROVIDER [ double precision, one_creat_virt, (n_act_orb,n_virt_orb,N_States)] - implicit none - integer :: i,vorb,j - integer :: ispin,jspin - integer :: orb_i, hole_particle_i - integer :: orb_v - double precision :: norm_out(N_states) - integer(bit_kind), allocatable :: psi_in_out(:,:,:) - double precision, allocatable :: psi_in_out_coef(:,:) - use bitmasks - allocate (psi_in_out(N_int,2,n_det_ref),psi_in_out_coef(n_det_ref,N_states)) - - integer :: iorb,jorb,i_ok,aorb,orb_a - integer :: state_target - double precision :: energies(n_states) - double precision :: hij - double precision :: norm(N_states,2),norm_no_inv(N_states,2) - double precision :: energies_alpha_beta(N_states,2) - double precision :: norm_alpha_beta(N_states,2) - - double precision :: thresh_norm - - thresh_norm = 1.d-10 - - do aorb = 1,n_act_orb - orb_a = list_act(aorb) - do vorb = 1, n_virt_orb - orb_v = list_virt(vorb) - do state_target = 1, N_states - one_creat_virt(aorb,vorb,state_target) = 0.d0 - enddo - norm_alpha_beta = 0.d0 - norm = 0.d0 - norm_bis = 0.d0 - do ispin = 1,2 - do i = 1, n_det_ref - do j = 1, N_int - psi_in_out(j,1,i) = psi_ref(j,1,i) - psi_in_out(j,2,i) = psi_ref(j,2,i) - enddo - call do_mono_excitation(psi_in_out(1,1,i),orb_a,orb_v,ispin,i_ok) - if(i_ok.ne.1)then - do j = 1, n_states - psi_in_out_coef(i,j) = 0.d0 - enddo - else - call i_H_j(psi_in_out(1,1,i),psi_ref(1,1,i),N_int,hij) - do j = 1, n_states - double precision :: coef,contrib - coef = psi_coef(i,j) !* psi_coef(i,j) - psi_in_out_coef(i,j) = sign(coef,psi_coef(i,j)) * hij - norm(j,ispin) += psi_in_out_coef(i,j) * psi_in_out_coef(i,j) - enddo - endif - enddo - do j = 1, N_states - if (dabs(norm(j,ispin)) .le. thresh_norm)then - norm(j,ispin) = 0.d0 - norm_no_inv(j,ispin) = norm(j,ispin) - else - norm_no_inv(j,ispin) = norm(j,ispin) - norm(j,ispin) = 1.d0/dsqrt(norm(j,ispin)) - endif - enddo - double precision :: norm_bis(N_states,2) - do i = 1, N_det - do j = 1, N_states - psi_in_out_coef(i,j) = psi_in_out_coef(i,j) * norm(j,ispin) - norm_bis(j,ispin) += psi_in_out_coef(i,j)* psi_in_out_coef(i,j) - enddo - do j = 1, N_int - psi_in_out(j,1,i) = iand(psi_in_out(j,1,i),cas_bitmask(j,1,1)) - psi_in_out(j,2,i) = iand(psi_in_out(j,2,i),cas_bitmask(j,1,1)) - enddo - enddo - do state_target = 1, N_states - energies_alpha_beta(state_target, ispin) = 0.d0 - if(norm(state_target,ispin) .ne. 0.d0 .and. dabs(norm_no_inv(state_target,ispin)) .gt. thresh_norm)then - call u0_H_dyall_u0(energies,psi_in_out,psi_in_out_coef,n_det_ref,n_det_ref,n_det_ref,N_states,state_target) -! print*, energies(state_target) - energies_alpha_beta(state_target, ispin) += energies(state_target) - endif - enddo - enddo ! ispin - do state_target = 1, N_states - if((norm_no_inv(state_target,1) + norm_no_inv(state_target,2)) .ne. 0.d0)then - one_creat_virt(aorb,vorb,state_target) = energy_cas_dyall(state_target) - & - ( energies_alpha_beta(state_target,1) + energies_alpha_beta(state_target,2) ) & - /( norm_bis(state_target,1) + norm_bis(state_target,2) ) - else - one_creat_virt(aorb,vorb,state_target) = 0.d0 - endif -! print*, '********' -! print*, energies_alpha_beta(state_target,1) , energies_alpha_beta(state_target,2) -! print*, norm_bis(state_target,1) , norm_bis(state_target,2) -! print*, one_creat_virt(aorb,vorb,state_target) -! print*, one_anhil(aorb,1,state_target) - enddo - enddo - enddo - deallocate(psi_in_out,psi_in_out_coef) - -END_PROVIDER - - - BEGIN_PROVIDER [ double precision, one_anhil_one_creat_inact_virt_bis, (n_inact_orb,n_virt_orb,N_det,N_States)] -&BEGIN_PROVIDER [ double precision, corr_e_from_1h1p, (N_States)] - implicit none - integer :: i,vorb,j - integer :: ispin,jspin - integer :: orb_i, hole_particle_i - integer :: orb_v - double precision :: norm_out(N_states),diag_elem(N_det),interact_psi0(N_det) - double precision :: delta_e_inact_virt(N_states) - integer(bit_kind), allocatable :: psi_in_out(:,:,:) - double precision, allocatable :: psi_in_out_coef(:,:) - double precision, allocatable :: H_matrix(:,:),eigenvectors(:,:),eigenvalues(:) - use bitmasks - allocate (psi_in_out(N_int,2,n_det_ref),psi_in_out_coef(n_det_ref,N_states),H_matrix(N_det+1,N_det+1)) - allocate (eigenvectors(size(H_matrix,1),N_det+1)) - allocate (eigenvalues(N_det+1)) - - integer :: iorb,jorb,i_ok - integer :: state_target - double precision :: energies(n_states) - double precision :: hij - double precision :: energies_alpha_beta(N_states,2) - - - double precision :: accu(N_states),norm - double precision :: amplitudes_alpha_beta(N_det,2) - double precision :: delta_e_alpha_beta(N_det,2) - - corr_e_from_1h1p = 0.d0 - do vorb = 1,n_virt_orb - orb_v = list_virt(vorb) - do iorb = 1, n_inact_orb - orb_i = list_inact(iorb) -! print*, '---------------------------------------------------------------------------' - do j = 1, N_states - delta_e_inact_virt(j) = fock_core_inactive_total_spin_trace(orb_i,j) & - - fock_virt_total_spin_trace(orb_v,j) - enddo - do ispin = 1,2 - do i = 1, n_det_ref - do j = 1, N_int - psi_in_out(j,1,i) = psi_ref(j,1,i) - psi_in_out(j,2,i) = psi_ref(j,2,i) - enddo - call do_mono_excitation(psi_in_out(1,1,i),orb_i,orb_v,ispin,i_ok) - if(i_ok.ne.1)then - print*, orb_i,orb_v - call debug_det(psi_in_out,N_int) - print*, 'pb, i_ok ne 0 !!!' - endif - interact_psi0(i) = 0.d0 - do j = 1 , N_det - call i_H_j(psi_in_out(1,1,i),psi_ref(1,1,j),N_int,hij) - interact_psi0(i) += hij * psi_coef(j,1) - enddo - do j = 1, N_int - psi_in_out(j,1,i) = psi_active(j,1,i) - psi_in_out(j,2,i) = psi_active(j,2,i) - enddo - call i_H_j_dyall(psi_active(1,1,i),psi_active(1,1,i),N_int,hij) - diag_elem(i) = hij - enddo - do state_target = 1, N_states - ! Building the Hamiltonian matrix - H_matrix(1,1) = energy_cas_dyall(state_target) - do i = 1, N_det - ! interaction with psi0 - H_matrix(1,i+1) = interact_psi0(i)!* psi_coef(i,state_target) - H_matrix(i+1,1) = interact_psi0(i)!* psi_coef(i,state_target) - ! diagonal elements - H_matrix(i+1,i+1) = diag_elem(i) - delta_e_inact_virt(state_target) -! print*, 'H_matrix(i+1,i+1)',H_matrix(i+1,i+1) - do j = i+1, N_det - call i_H_j_dyall(psi_in_out(1,1,i),psi_in_out(1,1,j),N_int,hij) - H_matrix(i+1,j+1) = hij !0.d0 ! - H_matrix(j+1,i+1) = hij !0.d0 ! - enddo - enddo - print*, '***' - do i = 1, N_det+1 - write(*,'(100(F16.10,1X))')H_matrix(i,:) - enddo - call lapack_diag(eigenvalues,eigenvectors,H_matrix,size(H_matrix,1),N_det+1) - corr_e_from_1h1p(state_target) += eigenvalues(1) - energy_cas_dyall(state_target) - norm = 0.d0 - do i = 1, N_det - psi_in_out_coef(i,state_target) = eigenvectors(i+1,1)/eigenvectors(1,1) -!! if(dabs(psi_coef(i,state_target)*) .gt. 1.d-8)then - if(dabs(psi_in_out_coef(i,state_target)) .gt. 1.d-8)then -! if(dabs(interact_psi0(i)) .gt. 1.d-8)then - delta_e_alpha_beta(i,ispin) = H_matrix(1,i+1) / psi_in_out_coef(i,state_target) -! delta_e_alpha_beta(i,ispin) = interact_psi0(i) / psi_in_out_coef(i,state_target) - amplitudes_alpha_beta(i,ispin) = psi_in_out_coef(i,state_target) / psi_coef(i,state_target) - else - amplitudes_alpha_beta(i,ispin) = 0.d0 - delta_e_alpha_beta(i,ispin) = delta_e_inact_virt(state_target) - endif -!! one_anhil_one_creat_inact_virt_bis(iorb,vorb,i,ispin,state_target) = amplitudes_alpha_beta(i,ispin) - norm += psi_in_out_coef(i,state_target) * psi_in_out_coef(i,state_target) - enddo - print*, 'Coef ' - write(*,'(100(1X,F16.10))')psi_coef(1:N_det,state_target) - write(*,'(100(1X,F16.10))')psi_in_out_coef(:,state_target) - double precision :: coef_tmp(N_det) - do i = 1, N_det - coef_tmp(i) = psi_coef(i,1) * interact_psi0(i) / delta_e_alpha_beta(i,ispin) - enddo - write(*,'(100(1X,F16.10))')coef_tmp(:) - print*, 'naked interactions' - write(*,'(100(1X,F16.10))')interact_psi0(:) - print*, '' - - print*, 'norm ',norm - norm = 1.d0/(norm) - accu(state_target) = 0.d0 - do i = 1, N_det - accu(state_target) += psi_in_out_coef(i,state_target) * psi_in_out_coef(i,state_target) * H_matrix(i+1,i+1) - do j = i+1, N_det - accu(state_target) += 2.d0 * psi_in_out_coef(i,state_target) * psi_in_out_coef(j,state_target) * H_matrix(i+1,j+1) - enddo - enddo - accu(state_target) = accu(state_target) * norm - print*, delta_e_inact_virt(state_target) - print*, eigenvalues(1),accu(state_target),eigenvectors(1,1) - print*, energy_cas_dyall(state_target) - accu(state_target), one_anhil_one_creat_inact_virt(iorb,vorb,state_target) + delta_e_inact_virt(state_target) - - enddo - enddo ! ispin - do state_target = 1, N_states - do i = 1, N_det - one_anhil_one_creat_inact_virt_bis(iorb,vorb,i,state_target) = 0.5d0 * & - ( delta_e_alpha_beta(i,1) + delta_e_alpha_beta(i,1)) - enddo - enddo - print*, '***' - write(*,'(100(1X,F16.10))') - write(*,'(100(1X,F16.10))')delta_e_alpha_beta(:,2) - ! write(*,'(100(1X,F16.10))')one_anhil_one_creat_inact_virt_bis(iorb,vorb,:,1,:) - ! write(*,'(100(1X,F16.10))')one_anhil_one_creat_inact_virt_bis(iorb,vorb,:,2,:) - print*, '---------------------------------------------------------------------------' - enddo - enddo - deallocate(psi_in_out,psi_in_out_coef,H_matrix,eigenvectors,eigenvalues) - print*, 'corr_e_from_1h1p,',corr_e_from_1h1p(:) - -END_PROVIDER - -subroutine give_singles_and_partial_doubles_1h1p_contrib(matrix_1h1p,e_corr_from_1h1p_singles) - implicit none - double precision , intent(inout) :: matrix_1h1p(N_det,N_det,N_states) - double precision , intent(out) :: e_corr_from_1h1p_singles(N_states) - integer :: i,vorb,j - integer :: ispin,jspin - integer :: orb_i, hole_particle_i - integer :: orb_v - double precision :: norm_out(N_states),diag_elem(N_det),interact_psi0(N_det) - double precision :: delta_e_inact_virt(N_states) - integer(bit_kind), allocatable :: psi_in_out(:,:,:) - double precision, allocatable :: psi_in_out_coef(:,:) - double precision, allocatable :: H_matrix(:,:),eigenvectors(:,:),eigenvalues(:),interact_cas(:,:) - double precision, allocatable :: delta_e_det(:,:) - use bitmasks - allocate (psi_in_out(N_int,2,n_det_ref),psi_in_out_coef(n_det_ref,N_states),H_matrix(N_det+1,N_det+1)) - allocate (eigenvectors(size(H_matrix,1),N_det+1)) - allocate (eigenvalues(N_det+1),interact_cas(N_det,N_det)) - allocate (delta_e_det(N_det,N_det)) - - integer :: iorb,jorb,i_ok - integer :: state_target - double precision :: energies(n_states) - double precision :: hij - double precision :: energies_alpha_beta(N_states,2) - double precision :: lamda_pt2(N_det) - - - double precision :: accu(N_states),norm - double precision :: amplitudes_alpha_beta(N_det,2) - double precision :: delta_e_alpha_beta(N_det,2) - double precision :: coef_array(N_states) - double precision :: coef_perturb(N_det) - double precision :: coef_perturb_bis(N_det) - - do vorb = 1,n_virt_orb - orb_v = list_virt(vorb) - do iorb = 1, n_inact_orb - orb_i = list_inact(iorb) - do j = 1, N_states - delta_e_inact_virt(j) = fock_core_inactive_total_spin_trace(orb_i,j) & - - fock_virt_total_spin_trace(orb_v,j) - enddo - do ispin = 1,2 - do i = 1, n_det_ref - do j = 1, N_int - psi_in_out(j,1,i) = psi_ref(j,1,i) - psi_in_out(j,2,i) = psi_ref(j,2,i) - enddo - call do_mono_excitation(psi_in_out(1,1,i),orb_i,orb_v,ispin,i_ok) - if(i_ok.ne.1)then - print*, orb_i,orb_v - call debug_det(psi_in_out,N_int) - print*, 'pb, i_ok ne 0 !!!' - endif - interact_psi0(i) = 0.d0 - do j = 1 , N_det - call i_H_j(psi_in_out(1,1,i),psi_ref(1,1,j),N_int,hij) - call get_delta_e_dyall(psi_ref(1,1,j),psi_in_out(1,1,i),delta_e_det(i,j)) - interact_cas(i,j) = hij - interact_psi0(i) += hij * psi_coef(j,1) - enddo - do j = 1, N_int - psi_in_out(j,1,i) = psi_active(j,1,i) - psi_in_out(j,2,i) = psi_active(j,2,i) - enddo - call i_H_j_dyall(psi_active(1,1,i),psi_active(1,1,i),N_int,hij) - diag_elem(i) = hij - enddo - do state_target = 1, N_states - ! Building the Hamiltonian matrix - H_matrix(1,1) = energy_cas_dyall(state_target) - do i = 1, N_det - ! interaction with psi0 - H_matrix(1,i+1) = interact_psi0(i)!* psi_coef(i,state_target) - H_matrix(i+1,1) = interact_psi0(i)!* psi_coef(i,state_target) - ! diagonal elements - H_matrix(i+1,i+1) = diag_elem(i) - delta_e_inact_virt(state_target) -! print*, 'H_matrix(i+1,i+1)',H_matrix(i+1,i+1) - do j = i+1, N_det - call i_H_j_dyall(psi_in_out(1,1,i),psi_in_out(1,1,j),N_int,hij) - H_matrix(i+1,j+1) = hij !0.d0 ! - H_matrix(j+1,i+1) = hij !0.d0 ! - enddo - enddo - call lapack_diag(eigenvalues,eigenvectors,H_matrix,size(H_matrix,1),N_det+1) - e_corr_from_1h1p_singles(state_target) += eigenvalues(1) - energy_cas_dyall(state_target) - - do i = 1, N_det - psi_in_out_coef(i,state_target) = eigenvectors(i+1,1)/eigenvectors(1,1) - coef_perturb(i) = 0.d0 - do j = 1, N_det - coef_perturb(i) += psi_coef(j,state_target) * interact_cas(i,j) *1.d0/delta_e_det(i,j) - enddo - coef_perturb_bis(i) = interact_psi0(i) / (eigenvalues(1) - H_matrix(i+1,i+1)) - if(dabs(interact_psi0(i)) .gt. 1.d-12)then - lamda_pt2(i) = psi_in_out_coef(i,state_target) / interact_psi0(i) - else - lamda_pt2(i) =energy_cas_dyall(state_target) - H_matrix(i+1,i+1) - endif - enddo - if(dabs(eigenvalues(1) - energy_cas_dyall(state_target)).gt.1.d-10)then - print*, '' - do i = 1, N_det+1 - write(*,'(100(F16.10))') H_matrix(i,:) - enddo - accu = 0.d0 - do i = 1, N_det - accu(state_target) += psi_in_out_coef(i,state_target) * interact_psi0(i) - enddo - print*, '' - print*, 'e corr diagonal ',accu(state_target) - accu = 0.d0 - do i = 1, N_det - accu(state_target) += coef_perturb(i) * interact_psi0(i) - enddo - print*, 'e corr perturb ',accu(state_target) - accu = 0.d0 - do i = 1, N_det - accu(state_target) += coef_perturb_bis(i) * interact_psi0(i) - enddo - print*, 'e corr perturb EN',accu(state_target) - print*, '' - print*, 'coef diagonalized' - write(*,'(100(F16.10,1X))')psi_in_out_coef(:,state_target) - print*, 'coef_perturb' - write(*,'(100(F16.10,1X))')coef_perturb(:) - print*, 'coef_perturb EN' - write(*,'(100(F16.10,1X))')coef_perturb_bis(:) - endif - integer :: k - do k = 1, N_det - do i = 1, N_det - matrix_1h1p(i,i,state_target) += interact_cas(k,i) * interact_cas(k,i) * lamda_pt2(k) - do j = i+1, N_det - matrix_1h1p(i,j,state_target) += interact_cas(k,i) * interact_cas(k,j) * lamda_pt2(k) - matrix_1h1p(j,i,state_target) += interact_cas(k,i) * interact_cas(k,j) * lamda_pt2(k) - enddo - enddo - enddo - enddo - enddo ! ispin - enddo - enddo - deallocate(psi_in_out,psi_in_out_coef,H_matrix,eigenvectors,eigenvalues,interact_cas) - deallocate(delta_e_det) -end diff --git a/src/mrpt_utils/excitations_cas.irp.f b/src/mrpt_utils/excitations_cas.irp.f deleted file mode 100644 index 491cda58..00000000 --- a/src/mrpt_utils/excitations_cas.irp.f +++ /dev/null @@ -1,708 +0,0 @@ -subroutine apply_exc_to_psi(orb,hole_particle,spin_exc, & - norm_out,psi_in_out,psi_in_out_coef, ndet,dim_psi_in,dim_psi_coef,N_states_in) - use bitmasks - implicit none - integer, intent(in) :: orb, hole_particle,spin_exc,N_states_in,ndet,dim_psi_in,dim_psi_coef - double precision, intent(out) :: norm_out(N_states_in) - integer(bit_kind), intent(inout) :: psi_in_out(N_int,2,dim_psi_in) - double precision, intent(inout) :: psi_in_out_coef(dim_psi_coef,N_states_in) - BEGIN_DOC - ! apply a contracted excitation to psi_in_out whose coefficients - ! are psi_in_out_coef - ! hole_particle = 1 ===> creation of an electron in psi_in_out - ! = -1 ===> annhilation of an electron in psi_in_out - ! orb ===> is the index of orbital where you want wether to create or - ! annhilate an electron - ! spin_exc ===> is the spin of the electron (1 == alpha) (2 == beta) - ! the wave function gets out normalized to unity - ! - ! norm_out is the sum of the squared of the coefficients - ! on which the excitation has been possible - END_DOC - - integer :: elec_num_tab_local(2) - integer :: i,j,accu_elec,k - integer(bit_kind) :: det_tmp(N_int), det_tmp_bis(N_int) - double precision :: phase - double precision :: norm_factor - - elec_num_tab_local = 0 - do i = 1, ndet - if( psi_in_out_coef (i,1) .ne. 0.d0)then - do j = 1, N_int - elec_num_tab_local(1) += popcnt(psi_in_out(j,1,i)) - elec_num_tab_local(2) += popcnt(psi_in_out(j,2,i)) - enddo - exit - endif - enddo - if(hole_particle == 1)then - do i = 1, ndet - call set_bit_to_integer(orb,psi_in_out(1,spin_exc,i),N_int) - accu_elec = 0 - do j = 1, N_int - accu_elec += popcnt(psi_in_out(j,spin_exc,i)) - enddo - if(accu_elec .ne. elec_num_tab_local(spin_exc)+1)then - do j = 1, N_int - psi_in_out(j,1,i) = 0_bit_kind - psi_in_out(j,2,i) = 0_bit_kind - enddo - do j = 1, N_states_in - psi_in_out_coef(i,j) = 0.d0 - enddo - endif - phase = 1.d0 - do k = 1, orb - do j = 1, N_int - det_tmp(j) = 0_bit_kind - enddo - call set_bit_to_integer(k,det_tmp,N_int) - accu_elec = 0 - do j = 1, N_int - det_tmp_bis(j) = iand(det_tmp(j),(psi_in_out(j,spin_exc,i))) - accu_elec += popcnt(det_tmp_bis(j)) - enddo - if(accu_elec == 1)then - phase = -phase - endif - enddo - do j = 1, N_states_in - psi_in_out_coef(i,j) = psi_in_out_coef(i,j) * phase - enddo - enddo - - else if (hole_particle == -1)then - - do i = 1, ndet - call clear_bit_to_integer(orb,psi_in_out(1,spin_exc,i),N_int) - accu_elec = 0 - do j = 1, N_int - accu_elec += popcnt(psi_in_out(j,spin_exc,i)) - enddo - if(accu_elec .ne. elec_num_tab_local(spin_exc)-1)then - do j = 1, N_int - psi_in_out(j,1,i) = 0_bit_kind - psi_in_out(j,2,i) = 0_bit_kind - enddo - do j = 1, N_states_in - psi_in_out_coef(i,j) = 0.d0 - enddo - endif - - phase = 1.d0 - do k = 1, orb-1 - do j = 1, N_int - det_tmp(j) = 0_bit_kind - enddo - call set_bit_to_integer(k,det_tmp,N_int) - accu_elec = 0 - do j = 1, N_int - det_tmp_bis(j) = iand(det_tmp(j),(psi_in_out(j,spin_exc,i))) - accu_elec += popcnt(det_tmp_bis(j)) - enddo - if(accu_elec == 1)then - phase = -phase - endif - enddo - do j = 1, N_states_in - psi_in_out_coef(i,j) = psi_in_out_coef(i,j) * phase - enddo - enddo - endif - - - norm_out = 0.d0 - do j = 1, N_states_in - do i = 1, ndet - norm_out(j) += psi_in_out_coef(i,j) * psi_in_out_coef(i,j) - enddo - if(norm_out(j).le.1.d-10)then - norm_factor = 0.d0 - else - norm_factor = 1.d0/(dsqrt(norm_out(j))) - endif - do i = 1, ndet - psi_in_out_coef(i,j) = psi_in_out_coef(i,j) * norm_factor - enddo - enddo -end - - -double precision function diag_H_mat_elem_no_elec_check(det_in,Nint) - implicit none - BEGIN_DOC - ! Computes - END_DOC - integer,intent(in) :: Nint - integer(bit_kind),intent(in) :: det_in(Nint,2) - - integer :: i, j, iorb, jorb - integer :: occ(Nint*bit_kind_size,2) - integer :: elec_num_tab_local(2) - - double precision :: core_act - double precision :: alpha_alpha - double precision :: alpha_beta - double precision :: beta_beta - double precision :: mono_elec - core_act = 0.d0 - alpha_alpha = 0.d0 - alpha_beta = 0.d0 - beta_beta = 0.d0 - mono_elec = 0.d0 - - diag_H_mat_elem_no_elec_check = 0.d0 - call bitstring_to_list(det_in(1,1), occ(1,1), elec_num_tab_local(1), N_int) - call bitstring_to_list(det_in(1,2), occ(1,2), elec_num_tab_local(2), N_int) - ! alpha - alpha -! print*, 'elec_num_tab_local(1)',elec_num_tab_local(1) -! print*, 'elec_num_tab_local(2)',elec_num_tab_local(2) - do i = 1, elec_num_tab_local(1) - iorb = occ(i,1) - diag_H_mat_elem_no_elec_check += mo_mono_elec_integral(iorb,iorb) - mono_elec += mo_mono_elec_integral(iorb,iorb) - do j = i+1, elec_num_tab_local(1) - jorb = occ(j,1) - diag_H_mat_elem_no_elec_check += mo_bielec_integral_jj_anti(jorb,iorb) - alpha_alpha += mo_bielec_integral_jj_anti(jorb,iorb) - enddo - enddo - - ! beta - beta - do i = 1, elec_num_tab_local(2) - iorb = occ(i,2) - diag_H_mat_elem_no_elec_check += mo_mono_elec_integral(iorb,iorb) - mono_elec += mo_mono_elec_integral(iorb,iorb) - do j = i+1, elec_num_tab_local(2) - jorb = occ(j,2) - diag_H_mat_elem_no_elec_check += mo_bielec_integral_jj_anti(jorb,iorb) - beta_beta += mo_bielec_integral_jj_anti(jorb,iorb) - enddo - enddo - - - ! alpha - beta - do i = 1, elec_num_tab_local(2) - iorb = occ(i,2) - do j = 1, elec_num_tab_local(1) - jorb = occ(j,1) - diag_H_mat_elem_no_elec_check += mo_bielec_integral_jj(jorb,iorb) - alpha_beta += mo_bielec_integral_jj(jorb,iorb) - enddo - enddo - - - ! alpha - core-act - do i = 1, elec_num_tab_local(1) - iorb = occ(i,1) - do j = 1, n_core_inact_orb - jorb = list_core_inact(j) - diag_H_mat_elem_no_elec_check += 2.d0 * mo_bielec_integral_jj(jorb,iorb) - mo_bielec_integral_jj_exchange(jorb,iorb) - core_act += 2.d0 * mo_bielec_integral_jj(jorb,iorb) - mo_bielec_integral_jj_exchange(jorb,iorb) - enddo - enddo - - ! beta - core-act - do i = 1, elec_num_tab_local(2) - iorb = occ(i,2) - do j = 1, n_core_inact_orb - jorb = list_core_inact(j) - diag_H_mat_elem_no_elec_check += 2.d0 * mo_bielec_integral_jj(jorb,iorb) - mo_bielec_integral_jj_exchange(jorb,iorb) - core_act += 2.d0 * mo_bielec_integral_jj(jorb,iorb) - mo_bielec_integral_jj_exchange(jorb,iorb) - enddo - enddo -! print*,'core_act = ',core_act -! print*,'alpha_alpha = ',alpha_alpha -! print*,'alpha_beta = ',alpha_beta -! print*,'beta_beta = ',beta_beta -! print*,'mono_elec = ',mono_elec - -! do i = 1, n_core_inact_orb -! iorb = list_core_inact(i) -! diag_H_mat_elem_no_elec_check += 2.d0 * fock_core_inactive_total_spin_trace(iorb,1) -! enddo - - -!!!!!!!!!!!! -return -!!!!!!!!!!!! - - - ! alpha - alpha - do i = 1, n_core_inact_orb - iorb = list_core_inact(i) - diag_H_mat_elem_no_elec_check += 1.d0 * mo_mono_elec_integral(iorb,iorb) - do j = i+1, n_core_inact_orb - jorb = list_core_inact(j) - diag_H_mat_elem_no_elec_check += 1.d0 * mo_bielec_integral_jj(jorb,iorb) - 1.d0 * mo_bielec_integral_jj_exchange(jorb,iorb) - enddo - enddo - - do i = 1, n_core_inact_orb - iorb = list_core_inact(i) - diag_H_mat_elem_no_elec_check += 1.d0 * mo_mono_elec_integral(iorb,iorb) - do j = i+1, n_core_inact_orb - jorb = list_core_inact(j) - diag_H_mat_elem_no_elec_check += 1.d0 * mo_bielec_integral_jj(jorb,iorb) - 1.d0 * mo_bielec_integral_jj_exchange(jorb,iorb) - enddo - enddo - - do i = 1, n_core_inact_orb - iorb = list_core_inact(i) - do j = 1, n_core_inact_orb - jorb = list_core_inact(j) - diag_H_mat_elem_no_elec_check += 1.d0 * mo_bielec_integral_jj(jorb,iorb) - enddo - enddo - -end - -subroutine i_H_j_dyall(key_i,key_j,Nint,hij) - use bitmasks - implicit none - BEGIN_DOC - ! Returns where i and j are determinants - END_DOC - integer, intent(in) :: Nint - integer(bit_kind), intent(in) :: key_i(Nint,2), key_j(Nint,2) - double precision, intent(out) :: hij - - integer :: exc(0:2,2,2) - integer :: degree - double precision :: get_mo_bielec_integral - integer :: m,n,p,q - integer :: i,j,k - integer :: occ(Nint*bit_kind_size,2) - double precision :: diag_H_mat_elem_no_elec_check, phase,phase_2 - integer :: n_occ_ab(2) - logical :: has_mipi(Nint*bit_kind_size) - double precision :: mipi(Nint*bit_kind_size), miip(Nint*bit_kind_size) - PROVIDE mo_bielec_integrals_in_map mo_integrals_map - - ASSERT (Nint > 0) - ASSERT (Nint == N_int) - - hij = 0.d0 - !DIR$ FORCEINLINE - call get_excitation_degree(key_i,key_j,degree,Nint) - select case (degree) - case (2) - call get_double_excitation(key_i,key_j,exc,phase,Nint) - if (exc(0,1,1) == 1) then - ! Mono alpha, mono beta - hij = phase*get_mo_bielec_integral( & - exc(1,1,1), & - exc(1,1,2), & - exc(1,2,1), & - exc(1,2,2) ,mo_integrals_map) - else if (exc(0,1,1) == 2) then - ! Double alpha - hij = phase*(get_mo_bielec_integral( & - exc(1,1,1), & - exc(2,1,1), & - exc(1,2,1), & - exc(2,2,1) ,mo_integrals_map) - & - get_mo_bielec_integral( & - exc(1,1,1), & - exc(2,1,1), & - exc(2,2,1), & - exc(1,2,1) ,mo_integrals_map) ) - else if (exc(0,1,2) == 2) then - ! Double beta - hij = phase*(get_mo_bielec_integral( & - exc(1,1,2), & - exc(2,1,2), & - exc(1,2,2), & - exc(2,2,2) ,mo_integrals_map) - & - get_mo_bielec_integral( & - exc(1,1,2), & - exc(2,1,2), & - exc(2,2,2), & - exc(1,2,2) ,mo_integrals_map) ) - endif - case (1) - call get_mono_excitation(key_i,key_j,exc,phase,Nint) - !DIR$ FORCEINLINE - call bitstring_to_list_ab(key_i, occ, n_occ_ab, Nint) - has_mipi = .False. - if (exc(0,1,1) == 1) then - ! Mono alpha - m = exc(1,1,1) - p = exc(1,2,1) - do k = 1, n_occ_ab(1) - i = occ(k,1) - if (.not.has_mipi(i)) then - mipi(i) = get_mo_bielec_integral(m,i,p,i,mo_integrals_map) - miip(i) = get_mo_bielec_integral(m,i,i,p,mo_integrals_map) - has_mipi(i) = .True. - endif - enddo - do k = 1, n_occ_ab(2) - i = occ(k,2) - if (.not.has_mipi(i)) then - mipi(i) = get_mo_bielec_integral(m,i,p,i,mo_integrals_map) - has_mipi(i) = .True. - endif - enddo - - do k = 1, n_occ_ab(1) - hij = hij + mipi(occ(k,1)) - miip(occ(k,1)) - enddo - do k = 1, n_occ_ab(2) - hij = hij + mipi(occ(k,2)) - enddo - - else - ! Mono beta - m = exc(1,1,2) - p = exc(1,2,2) - do k = 1, n_occ_ab(2) - i = occ(k,2) - if (.not.has_mipi(i)) then - mipi(i) = get_mo_bielec_integral(m,i,p,i,mo_integrals_map) - miip(i) = get_mo_bielec_integral(m,i,i,p,mo_integrals_map) - has_mipi(i) = .True. - endif - enddo - do k = 1, n_occ_ab(1) - i = occ(k,1) - if (.not.has_mipi(i)) then - mipi(i) = get_mo_bielec_integral(m,i,p,i,mo_integrals_map) - has_mipi(i) = .True. - endif - enddo - - do k = 1, n_occ_ab(1) - hij = hij + mipi(occ(k,1)) - enddo - do k = 1, n_occ_ab(2) - hij = hij + mipi(occ(k,2)) - miip(occ(k,2)) - enddo - - endif - hij = phase*(hij + mo_mono_elec_integral(m,p) + fock_operator_active_from_core_inact(m,p) ) - - case (0) - hij = diag_H_mat_elem_no_elec_check(key_i,Nint) - end select -end - - -subroutine u0_H_dyall_u0(energies,psi_in,psi_in_coef,ndet,dim_psi_in,dim_psi_coef,N_states_in,state_target) - use bitmasks - implicit none - integer, intent(in) :: N_states_in,ndet,dim_psi_in,dim_psi_coef,state_target - integer(bit_kind), intent(in) :: psi_in(N_int,2,dim_psi_in) - double precision, intent(in) :: psi_in_coef(dim_psi_coef,N_states_in) - double precision, intent(out) :: energies(N_states_in) - - integer :: i,j - double precision :: hij,accu - energies = 0.d0 - accu = 0.d0 - double precision, allocatable :: psi_coef_tmp(:) - allocate(psi_coef_tmp(ndet)) - - do i = 1, ndet - psi_coef_tmp(i) = psi_in_coef(i,state_target) - enddo - - double precision :: hij_bis - do i = 1, ndet - if(psi_coef_tmp(i)==0.d0)cycle - do j = 1, ndet - if(psi_coef_tmp(j)==0.d0)cycle - call i_H_j_dyall(psi_in(1,1,i),psi_in(1,1,j),N_int,hij) - accu += psi_coef_tmp(i) * psi_coef_tmp(j) * hij - enddo - enddo - energies(state_target) = accu - deallocate(psi_coef_tmp) -end - - -double precision function coulomb_value_no_check(det_in,Nint) - implicit none - BEGIN_DOC - ! Computes - END_DOC - integer,intent(in) :: Nint - integer(bit_kind),intent(in) :: det_in(Nint,2) - - integer :: i, j, iorb, jorb - integer :: occ(Nint*bit_kind_size,2) - integer :: elec_num_tab_local(2) - - double precision :: core_act - double precision :: alpha_alpha - double precision :: alpha_beta - double precision :: beta_beta - double precision :: mono_elec - core_act = 0.d0 - alpha_alpha = 0.d0 - alpha_beta = 0.d0 - beta_beta = 0.d0 - mono_elec = 0.d0 - - coulomb_value_no_check = 0.d0 - call bitstring_to_list(det_in(1,1), occ(1,1), elec_num_tab_local(1), N_int) - call bitstring_to_list(det_in(1,2), occ(1,2), elec_num_tab_local(2), N_int) - ! alpha - alpha - do i = 1, elec_num_tab_local(1) - iorb = occ(i,1) - do j = i+1, elec_num_tab_local(1) - jorb = occ(j,1) - coulomb_value_no_check += mo_bielec_integral_jj_anti(jorb,iorb) - alpha_alpha += mo_bielec_integral_jj_anti(jorb,iorb) - enddo - enddo - - ! beta - beta - do i = 1, elec_num_tab_local(2) - iorb = occ(i,2) - do j = i+1, elec_num_tab_local(2) - jorb = occ(j,2) - coulomb_value_no_check += mo_bielec_integral_jj_anti(jorb,iorb) - beta_beta += mo_bielec_integral_jj_anti(jorb,iorb) - enddo - enddo - - - ! alpha - beta - do i = 1, elec_num_tab_local(2) - iorb = occ(i,2) - do j = 1, elec_num_tab_local(1) - jorb = occ(j,1) - coulomb_value_no_check += mo_bielec_integral_jj(jorb,iorb) - alpha_beta += mo_bielec_integral_jj(jorb,iorb) - enddo - enddo - - -end - -subroutine i_H_j_dyall_no_exchange(key_i,key_j,Nint,hij) - use bitmasks - implicit none - BEGIN_DOC - ! Returns where i and j are determinants - END_DOC - integer, intent(in) :: Nint - integer(bit_kind), intent(in) :: key_i(Nint,2), key_j(Nint,2) - double precision, intent(out) :: hij - - integer :: exc(0:2,2,2) - integer :: degree - double precision :: get_mo_bielec_integral - integer :: m,n,p,q - integer :: i,j,k - integer :: occ(Nint*bit_kind_size,2) - double precision :: diag_H_mat_elem_no_elec_check_no_exchange, phase,phase_2 - integer :: n_occ_ab(2) - logical :: has_mipi(Nint*bit_kind_size) - double precision :: mipi(Nint*bit_kind_size) - PROVIDE mo_bielec_integrals_in_map mo_integrals_map - - ASSERT (Nint > 0) - ASSERT (Nint == N_int) - - hij = 0.d0 - !DIR$ FORCEINLINE - call get_excitation_degree(key_i,key_j,degree,Nint) - select case (degree) - case (2) - call get_double_excitation(key_i,key_j,exc,phase,Nint) - if (exc(0,1,1) == 1) then - ! Mono alpha, mono beta - if(exc(1,1,1) == exc(1,2,2) .and. exc(1,2,1) == exc(1,1,2))then - hij = 0.d0 - else - hij = phase*get_mo_bielec_integral( & - exc(1,1,1), & - exc(1,1,2), & - exc(1,2,1), & - exc(1,2,2) ,mo_integrals_map) - endif - else if (exc(0,1,1) == 2) then - ! Double alpha - hij = phase*get_mo_bielec_integral( & - exc(1,1,1), & - exc(2,1,1), & - exc(1,2,1), & - exc(2,2,1) ,mo_integrals_map) - else if (exc(0,1,2) == 2) then - ! Double beta - hij = phase*get_mo_bielec_integral( & - exc(1,1,2), & - exc(2,1,2), & - exc(1,2,2), & - exc(2,2,2) ,mo_integrals_map) - endif - case (1) - call get_mono_excitation(key_i,key_j,exc,phase,Nint) - !DIR$ FORCEINLINE - call bitstring_to_list_ab(key_i, occ, n_occ_ab, Nint) - has_mipi = .False. - if (exc(0,1,1) == 1) then - ! Mono alpha - m = exc(1,1,1) - p = exc(1,2,1) - do k = 1, n_occ_ab(1) - i = occ(k,1) - if (.not.has_mipi(i)) then - mipi(i) = get_mo_bielec_integral(m,i,p,i,mo_integrals_map) - has_mipi(i) = .True. - endif - enddo - do k = 1, n_occ_ab(2) - i = occ(k,2) - if (.not.has_mipi(i)) then - mipi(i) = get_mo_bielec_integral(m,i,p,i,mo_integrals_map) - has_mipi(i) = .True. - endif - enddo - - do k = 1, n_occ_ab(1) - hij = hij + mipi(occ(k,1)) - enddo - do k = 1, n_occ_ab(2) - hij = hij + mipi(occ(k,2)) - enddo - - else - ! Mono beta - m = exc(1,1,2) - p = exc(1,2,2) - do k = 1, n_occ_ab(2) - i = occ(k,2) - if (.not.has_mipi(i)) then - mipi(i) = get_mo_bielec_integral(m,i,p,i,mo_integrals_map) - has_mipi(i) = .True. - endif - enddo - do k = 1, n_occ_ab(1) - i = occ(k,1) - if (.not.has_mipi(i)) then - mipi(i) = get_mo_bielec_integral(m,i,p,i,mo_integrals_map) - has_mipi(i) = .True. - endif - enddo - - do k = 1, n_occ_ab(1) - hij = hij + mipi(occ(k,1)) - enddo - do k = 1, n_occ_ab(2) - hij = hij + mipi(occ(k,2)) - enddo - - endif - hij = phase*(hij + mo_mono_elec_integral(m,p) + fock_operator_active_from_core_inact(m,p) ) - - case (0) - hij = diag_H_mat_elem_no_elec_check_no_exchange(key_i,Nint) - end select -end - - -double precision function diag_H_mat_elem_no_elec_check_no_exchange(det_in,Nint) - implicit none - BEGIN_DOC - ! Computes - END_DOC - integer,intent(in) :: Nint - integer(bit_kind),intent(in) :: det_in(Nint,2) - - integer :: i, j, iorb, jorb - integer :: occ(Nint*bit_kind_size,2) - integer :: elec_num_tab_local(2) - - double precision :: core_act_exchange(2) - core_act_exchange = 0.d0 - diag_H_mat_elem_no_elec_check_no_exchange = 0.d0 - call bitstring_to_list(det_in(1,1), occ(1,1), elec_num_tab_local(1), N_int) - call bitstring_to_list(det_in(1,2), occ(1,2), elec_num_tab_local(2), N_int) - ! alpha - alpha - do i = 1, elec_num_tab_local(1) - iorb = occ(i,1) - diag_H_mat_elem_no_elec_check_no_exchange += mo_mono_elec_integral(iorb,iorb) - do j = i+1, elec_num_tab_local(1) - jorb = occ(j,1) - diag_H_mat_elem_no_elec_check_no_exchange += mo_bielec_integral_jj(jorb,iorb) - enddo - enddo - - ! beta - beta - do i = 1, elec_num_tab_local(2) - iorb = occ(i,2) - diag_H_mat_elem_no_elec_check_no_exchange += mo_mono_elec_integral(iorb,iorb) - do j = i+1, elec_num_tab_local(2) - jorb = occ(j,2) - diag_H_mat_elem_no_elec_check_no_exchange += mo_bielec_integral_jj(jorb,iorb) - enddo - enddo - - - ! alpha - beta - do i = 1, elec_num_tab_local(2) - iorb = occ(i,2) - do j = 1, elec_num_tab_local(1) - jorb = occ(j,1) - diag_H_mat_elem_no_elec_check_no_exchange += mo_bielec_integral_jj(jorb,iorb) - enddo - enddo - - - ! alpha - core-act - do i = 1, elec_num_tab_local(1) - iorb = occ(i,1) - do j = 1, n_core_inact_orb - jorb = list_core_inact(j) - diag_H_mat_elem_no_elec_check_no_exchange += 2.d0 * mo_bielec_integral_jj(jorb,iorb) - core_act_exchange(1) += - mo_bielec_integral_jj_exchange(jorb,iorb) - enddo - enddo - - ! beta - core-act - do i = 1, elec_num_tab_local(2) - iorb = occ(i,2) - do j = 1, n_core_inact_orb - jorb = list_core_inact(j) - diag_H_mat_elem_no_elec_check_no_exchange += 2.d0 * mo_bielec_integral_jj(jorb,iorb) - core_act_exchange(2) += - mo_bielec_integral_jj_exchange(jorb,iorb) - enddo - enddo - -end - -subroutine u0_H_dyall_u0_no_exchange(energies,psi_in,psi_in_coef,ndet,dim_psi_in,dim_psi_coef,N_states_in,state_target) - use bitmasks - implicit none - integer, intent(in) :: N_states_in,ndet,dim_psi_in,dim_psi_coef,state_target - integer(bit_kind), intent(in) :: psi_in(N_int,2,dim_psi_in) - double precision, intent(in) :: psi_in_coef(dim_psi_coef,N_states_in) - double precision, intent(out) :: energies(N_states_in) - - integer :: i,j - double precision :: hij,accu - energies = 0.d0 - accu = 0.d0 - double precision, allocatable :: psi_coef_tmp(:) - allocate(psi_coef_tmp(ndet)) - - do i = 1, ndet - psi_coef_tmp(i) = psi_in_coef(i,state_target) - enddo - - double precision :: hij_bis - do i = 1, ndet - if(psi_coef_tmp(i)==0.d0)cycle - do j = 1, ndet - if(psi_coef_tmp(j)==0.d0)cycle - call i_H_j_dyall_no_exchange(psi_in(1,1,i),psi_in(1,1,j),N_int,hij) - accu += psi_coef_tmp(i) * psi_coef_tmp(j) * hij - enddo - enddo - energies(state_target) = accu - deallocate(psi_coef_tmp) -end diff --git a/src/mrpt_utils/fock_like_operators.irp.f b/src/mrpt_utils/fock_like_operators.irp.f deleted file mode 100644 index d4ce0661..00000000 --- a/src/mrpt_utils/fock_like_operators.irp.f +++ /dev/null @@ -1,210 +0,0 @@ - BEGIN_PROVIDER [double precision, fock_core_inactive, (mo_tot_num)] - BEGIN_DOC -! inactive part of the fock operator with contributions only from the inactive - END_DOC - implicit none - integer :: i,j - double precision :: accu - - integer :: j_inact_core_orb,i_inact_core_orb - do i = 1, n_core_inact_orb - accu = 0.d0 - i_inact_core_orb = list_core_inact(i) - do j = 1, n_core_inact_orb - j_inact_core_orb = list_core_inact(j) - accu += 2.d0 * mo_bielec_integral_jj(i_inact_core_orb,j_inact_core_orb) & - - mo_bielec_integral_jj_exchange(i_inact_core_orb,j_inact_core_orb) - enddo - fock_core_inactive(i_inact_core_orb) = accu + mo_mono_elec_integral(i_inact_core_orb,i_inact_core_orb) - enddo - END_PROVIDER - - BEGIN_PROVIDER [double precision, fock_virt_from_core_inact, (mo_tot_num)] - BEGIN_DOC -! fock operator for the virtuals that comes from the doubly occupied orbitals - END_DOC - implicit none - integer :: i,j - double precision :: accu - - integer :: j_inact_core_orb,i_virt_orb - do i = 1, n_virt_orb - accu = 0.d0 - i_virt_orb = list_virt(i) - do j = 1, n_core_inact_orb -! do j = 1, elec_alpha_num -! j_inact_core_orb = j - j_inact_core_orb = list_core_inact(j) - accu += 2.d0 * mo_bielec_integral_jj(i_virt_orb,j_inact_core_orb) & - - mo_bielec_integral_jj_exchange(i_virt_orb,j_inact_core_orb) - enddo - fock_virt_from_core_inact(i_virt_orb) = accu - enddo - END_PROVIDER - - BEGIN_PROVIDER [double precision, fock_core_inactive_from_act, (mo_tot_num,2,N_states)] - BEGIN_DOC -! inactive part of the fock operator with contributions only from the active - END_DOC - implicit none - integer :: i,j,k - double precision :: accu_coulomb,accu_exchange(2) - double precision :: na,nb,ntot - double precision :: coulomb, exchange - double precision :: get_mo_bielec_integral - integer :: j_act_orb,k_act_orb,i_inact_core_orb - integer :: i_state - - do i_state = 1,N_states - do i = 1, n_core_inact_orb - accu_coulomb = 0.d0 - accu_exchange = 0.d0 - i_inact_core_orb = list_core_inact(i) - do j = 1, n_act_orb - j_act_orb = list_act(j) - na = one_body_dm_mo_alpha(j_act_orb,j_act_orb,i_state) - nb = one_body_dm_mo_beta(j_act_orb,j_act_orb,i_state) - ntot = na + nb - coulomb = mo_bielec_integral_jj(i_inact_core_orb,j_act_orb) - exchange = mo_bielec_integral_jj_exchange(i_inact_core_orb,j_act_orb) - accu_coulomb += ntot * coulomb - accu_exchange(1) += na * exchange - accu_exchange(2) += nb * exchange - do k = j+1, n_act_orb - k_act_orb = list_act(k) - na = one_body_dm_mo_alpha(j_act_orb,k_act_orb,i_state) - nb = one_body_dm_mo_beta(j_act_orb,k_act_orb,i_state) - ntot = na + nb - coulomb = get_mo_bielec_integral(j_act_orb,i_inact_core_orb,k_act_orb,i_inact_core_orb,mo_integrals_map) - exchange = get_mo_bielec_integral(j_act_orb,k_act_orb,i_inact_core_orb,i_inact_core_orb,mo_integrals_map) - accu_coulomb += 2.d0 * ntot * coulomb - accu_exchange(1) += 2.d0 * na * exchange - accu_exchange(2) += 2.d0 * nb * exchange - enddo - enddo - fock_core_inactive_from_act(i_inact_core_orb,1,i_state) = accu_coulomb - accu_exchange(1) - fock_core_inactive_from_act(i_inact_core_orb,2,i_state) = accu_coulomb - accu_exchange(2) - enddo - enddo - END_PROVIDER - - BEGIN_PROVIDER [double precision, fock_virt_from_act, (mo_tot_num,2,N_states)] - BEGIN_DOC -! virtual part of the fock operator with contributions only from the active - END_DOC - implicit none - integer :: i,j,k - double precision :: accu_coulomb,accu_exchange(2) - double precision :: na,nb,ntot - double precision :: coulomb, exchange - double precision :: get_mo_bielec_integral - integer :: j_act_orb,i_virt_orb,k_act_orb - integer :: i_state - ! TODO : inverse loop of i_state - - do i_state = 1, N_states - do i = 1, n_virt_orb - accu_coulomb = 0.d0 - accu_exchange = 0.d0 - i_virt_orb = list_virt(i) - do j = 1, n_act_orb - j_act_orb = list_act(j) - na = one_body_dm_mo_alpha(j_act_orb,j_act_orb,i_state) - nb = one_body_dm_mo_beta(j_act_orb,j_act_orb,i_state) - ntot = na + nb - coulomb = mo_bielec_integral_jj(i_virt_orb,j_act_orb) - exchange = mo_bielec_integral_jj_exchange(i_virt_orb,j_act_orb) - accu_coulomb += ntot * coulomb - accu_exchange(1) += na * exchange - accu_exchange(2) += nb * exchange - do k = j+1, n_act_orb - k_act_orb = list_act(k) - na = one_body_dm_mo_alpha(j_act_orb,k_act_orb,i_state) - nb = one_body_dm_mo_beta(j_act_orb,k_act_orb,i_state) - ntot = na + nb - coulomb = get_mo_bielec_integral(j_act_orb,i_virt_orb,k_act_orb,i_virt_orb,mo_integrals_map) - exchange = get_mo_bielec_integral(j_act_orb,k_act_orb,i_virt_orb,i_virt_orb,mo_integrals_map) - accu_coulomb += 2.d0 * ntot * coulomb - accu_exchange(1) += 2.d0 * na * exchange - accu_exchange(2) += 2.d0 * nb * exchange - enddo - enddo - fock_virt_from_act(i_virt_orb,1,i_state) = accu_coulomb - accu_exchange(1) - fock_virt_from_act(i_virt_orb,2,i_state) = accu_coulomb - accu_exchange(2) - enddo - enddo - END_PROVIDER - - BEGIN_PROVIDER [double precision, fock_core_inactive_total, (mo_tot_num,2,N_states)] -&BEGIN_PROVIDER [double precision, fock_core_inactive_total_spin_trace, (mo_tot_num,N_states)] - BEGIN_DOC -! inactive part of the fock operator - END_DOC - implicit none - integer :: i - integer :: i_inact_core_orb - integer :: i_state - do i_state = 1, N_states - do i = 1, n_core_inact_orb - i_inact_core_orb = list_core_inact(i) - fock_core_inactive_total(i_inact_core_orb,1,i_state) = fock_core_inactive(i_inact_core_orb) + fock_core_inactive_from_act(i_inact_core_orb,1,i_state) - fock_core_inactive_total(i_inact_core_orb,2,i_state) = fock_core_inactive(i_inact_core_orb) + fock_core_inactive_from_act(i_inact_core_orb,2,i_state) - fock_core_inactive_total_spin_trace(i_inact_core_orb,i_state) = 0.5d0 * (fock_core_inactive_total(i_inact_core_orb,1,i_state) + fock_core_inactive_total(i_inact_core_orb,2,i_state)) - enddo - enddo - END_PROVIDER - - BEGIN_PROVIDER [double precision, fock_virt_total, (mo_tot_num,2,N_states)] -&BEGIN_PROVIDER [double precision, fock_virt_total_spin_trace, (mo_tot_num,N_states)] - BEGIN_DOC -! inactive part of the fock operator - END_DOC - implicit none - integer :: i - integer :: i_virt_orb - integer :: i_state - do i_state = 1, N_states - do i = 1, n_virt_orb - i_virt_orb= list_virt(i) - fock_virt_total(i_virt_orb,1,i_state) = fock_virt_from_core_inact(i_virt_orb) + fock_virt_from_act(i_virt_orb,1,i_state)+ mo_mono_elec_integral(i_virt_orb,i_virt_orb) - fock_virt_total(i_virt_orb,2,i_state) = fock_virt_from_core_inact(i_virt_orb) + fock_virt_from_act(i_virt_orb,2,i_state)+ mo_mono_elec_integral(i_virt_orb,i_virt_orb) - fock_virt_total_spin_trace(i_virt_orb,i_state) = 0.5d0 * ( fock_virt_total(i_virt_orb,1,i_state) + fock_virt_total(i_virt_orb,2,i_state) ) - enddo - enddo - END_PROVIDER - - - - - - BEGIN_PROVIDER [double precision, fock_operator_active_from_core_inact, (mo_tot_num,mo_tot_num)] - BEGIN_DOC -! active part of the fock operator with contributions only from the inactive - END_DOC - implicit none - integer :: i,j,k,k_inact_core_orb - integer :: iorb,jorb - double precision :: accu - double precision :: get_mo_bielec_integral,coulomb, exchange - PROVIDE mo_bielec_integrals_in_map - fock_operator_active_from_core_inact = 0.d0 - do i = 1, n_act_orb - iorb = list_act(i) - do j = 1, n_act_orb - jorb = list_act(j) - accu = 0.d0 - do k = 1, n_core_inact_orb - k_inact_core_orb = list_core_inact(k) - coulomb = get_mo_bielec_integral(k_inact_core_orb,iorb,k_inact_core_orb,jorb,mo_integrals_map) - exchange = get_mo_bielec_integral(k_inact_core_orb,jorb,iorb,k_inact_core_orb,mo_integrals_map) - accu += 2.d0 * coulomb - exchange - enddo - fock_operator_active_from_core_inact(iorb,jorb) = accu - enddo - enddo - - END_PROVIDER - - - - diff --git a/src/mrpt_utils/give_2h2p.irp.f b/src/mrpt_utils/give_2h2p.irp.f deleted file mode 100644 index df71e594..00000000 --- a/src/mrpt_utils/give_2h2p.irp.f +++ /dev/null @@ -1,35 +0,0 @@ -subroutine give_2h2p(contrib_2h2p) - implicit none - double precision, intent(out) :: contrib_2h2p(N_states) - integer :: i,j,k,l,m - integer :: iorb,jorb,korb,lorb - - double precision :: get_mo_bielec_integral - double precision :: direct_int,exchange_int - double precision :: numerator,denominator(N_states) - - contrib_2h2p = 0.d0 - do i = 1, n_inact_orb - iorb = list_inact(i) - do j = 1, n_inact_orb - jorb = list_inact(j) - do k = 1, n_virt_orb - korb = list_virt(k) - do l = 1, n_virt_orb - lorb = list_virt(l) - direct_int = get_mo_bielec_integral(iorb,jorb,korb,lorb ,mo_integrals_map) - exchange_int = get_mo_bielec_integral(iorb,jorb,lorb,korb ,mo_integrals_map) - numerator = 3.d0 * direct_int*direct_int + exchange_int*exchange_int -2.d0 * exchange_int * direct_int - do m = 1, N_states - denominator(m) = fock_core_inactive_total_spin_trace(iorb,m) + fock_core_inactive_total_spin_trace(jorb,m) & - -fock_virt_total_spin_trace(korb,m) - fock_virt_total_spin_trace(lorb,m) - contrib_2h2p(m) += numerator / denominator(m) - enddo - enddo - enddo - enddo - enddo - contrib_2h2p = contrib_2h2p*0.5d0 - -end - diff --git a/src/mrpt_utils/h_apply.irp.f b/src/mrpt_utils/h_apply.irp.f deleted file mode 100644 index ee922fc4..00000000 --- a/src/mrpt_utils/h_apply.irp.f +++ /dev/null @@ -1,187 +0,0 @@ -use bitmasks -BEGIN_SHELL [ /usr/bin/env python2 ] -from generate_h_apply import * - -s = H_apply("mrpt") -s.data["parameters"] = ", delta_ij_, Ndet" -s.data["declarations"] += """ - integer, intent(in) :: Ndet - double precision, intent(in) :: delta_ij_(Ndet,Ndet,*) -""" -s.data["keys_work"] = "call mrpt_dress(delta_ij_,Ndet,i_generator,key_idx,keys_out,N_int,iproc,key_mask)" -s.data["params_post"] += ", delta_ij_, Ndet" -s.data["params_main"] += "delta_ij_, Ndet" -s.data["decls_main"] += """ - integer, intent(in) :: Ndet - double precision, intent(in) :: delta_ij_(Ndet,Ndet,*) -""" -s.data["finalization"] = "" -s.data["copy_buffer"] = "" -s.data["generate_psi_guess"] = "" -s.data["size_max"] = "3072" -print s - -s = H_apply("mrpt_1h") -s.filter_only_1h() -s.data["parameters"] = ", delta_ij_, Ndet" -s.data["declarations"] += """ - integer, intent(in) :: Ndet - double precision, intent(in) :: delta_ij_(Ndet,Ndet,*) -""" -s.data["keys_work"] = "call mrpt_dress(delta_ij_,Ndet,i_generator,key_idx,keys_out,N_int,iproc,key_mask)" -s.data["params_post"] += ", delta_ij_, Ndet" -s.data["params_main"] += "delta_ij_, Ndet" -s.data["decls_main"] += """ - integer, intent(in) :: Ndet - double precision, intent(in) :: delta_ij_(Ndet,Ndet,*) -""" -s.data["finalization"] = "" -s.data["copy_buffer"] = "" -s.data["generate_psi_guess"] = "" -s.data["size_max"] = "3072" -print s - -s = H_apply("mrpt_1p") -s.filter_only_1p() -s.data["parameters"] = ", delta_ij_, Ndet" -s.data["declarations"] += """ - integer, intent(in) :: Ndet - double precision, intent(in) :: delta_ij_(Ndet,Ndet,*) -""" -s.data["keys_work"] = "call mrpt_dress(delta_ij_,Ndet,i_generator,key_idx,keys_out,N_int,iproc,key_mask)" -s.data["params_post"] += ", delta_ij_, Ndet" -s.data["params_main"] += "delta_ij_, Ndet" -s.data["decls_main"] += """ - integer, intent(in) :: Ndet - double precision, intent(in) :: delta_ij_(Ndet,Ndet,*) -""" -s.data["finalization"] = "" -s.data["copy_buffer"] = "" -s.data["generate_psi_guess"] = "" -s.data["size_max"] = "3072" -print s - -s = H_apply("mrpt_1h1p") -s.filter_only_1h1p() -s.data["parameters"] = ", delta_ij_, Ndet" -s.data["declarations"] += """ - integer, intent(in) :: Ndet - double precision, intent(in) :: delta_ij_(Ndet,Ndet,*) -""" -s.data["keys_work"] = "call mrpt_dress(delta_ij_,Ndet,i_generator,key_idx,keys_out,N_int,iproc,key_mask)" -s.data["params_post"] += ", delta_ij_, Ndet" -s.data["params_main"] += "delta_ij_, Ndet" -s.data["decls_main"] += """ - integer, intent(in) :: Ndet - double precision, intent(in) :: delta_ij_(Ndet,Ndet,*) -""" -s.data["finalization"] = "" -s.data["copy_buffer"] = "" -s.data["generate_psi_guess"] = "" -s.data["size_max"] = "3072" -print s - -s = H_apply("mrpt_2p") -s.filter_only_2p() -s.data["parameters"] = ", delta_ij_, Ndet" -s.data["declarations"] += """ - integer, intent(in) :: Ndet - double precision, intent(in) :: delta_ij_(Ndet,Ndet,*) -""" -s.data["keys_work"] = "call mrpt_dress(delta_ij_,Ndet,i_generator,key_idx,keys_out,N_int,iproc,key_mask)" -s.data["params_post"] += ", delta_ij_, Ndet" -s.data["params_main"] += "delta_ij_, Ndet" -s.data["decls_main"] += """ - integer, intent(in) :: Ndet - double precision, intent(in) :: delta_ij_(Ndet,Ndet,*) -""" -s.data["finalization"] = "" -s.data["copy_buffer"] = "" -s.data["generate_psi_guess"] = "" -s.data["size_max"] = "3072" -print s - -s = H_apply("mrpt_2h") -s.filter_only_2h() -s.data["parameters"] = ", delta_ij_, Ndet" -s.data["declarations"] += """ - integer, intent(in) :: Ndet - double precision, intent(in) :: delta_ij_(Ndet,Ndet,*) -""" -s.data["keys_work"] = "call mrpt_dress(delta_ij_,Ndet,i_generator,key_idx,keys_out,N_int,iproc,key_mask)" -s.data["params_post"] += ", delta_ij_, Ndet" -s.data["params_main"] += "delta_ij_, Ndet" -s.data["decls_main"] += """ - integer, intent(in) :: Ndet - double precision, intent(in) :: delta_ij_(Ndet,Ndet,*) -""" -s.data["finalization"] = "" -s.data["copy_buffer"] = "" -s.data["generate_psi_guess"] = "" -s.data["size_max"] = "3072" -print s - - -s = H_apply("mrpt_1h2p") -s.filter_only_1h2p() -s.data["parameters"] = ", delta_ij_, Ndet" -s.data["declarations"] += """ - integer, intent(in) :: Ndet - double precision, intent(in) :: delta_ij_(Ndet,Ndet,*) -""" -s.data["keys_work"] = "call mrpt_dress(delta_ij_,Ndet,i_generator,key_idx,keys_out,N_int,iproc,key_mask)" -s.data["params_post"] += ", delta_ij_, Ndet" -s.data["params_main"] += "delta_ij_, Ndet" -s.data["decls_main"] += """ - integer, intent(in) :: Ndet - double precision, intent(in) :: delta_ij_(Ndet,Ndet,*) -""" -s.data["finalization"] = "" -s.data["copy_buffer"] = "" -s.data["generate_psi_guess"] = "" -s.data["size_max"] = "3072" -print s - -s = H_apply("mrpt_2h1p") -s.filter_only_2h1p() -s.data["parameters"] = ", delta_ij_, Ndet" -s.data["declarations"] += """ - integer, intent(in) :: Ndet - double precision, intent(in) :: delta_ij_(Ndet,Ndet,*) -""" -s.data["keys_work"] = "call mrpt_dress(delta_ij_,Ndet,i_generator,key_idx,keys_out,N_int,iproc,key_mask)" -s.data["params_post"] += ", delta_ij_, Ndet" -s.data["params_main"] += "delta_ij_, Ndet" -s.data["decls_main"] += """ - integer, intent(in) :: Ndet - double precision, intent(in) :: delta_ij_(Ndet,Ndet,*) -""" -s.data["finalization"] = "" -s.data["copy_buffer"] = "" -s.data["generate_psi_guess"] = "" -s.data["size_max"] = "3072" -print s - -s = H_apply("mrpt_2h2p") -s.filter_only_2h2p() -s.data["parameters"] = ", delta_ij_, Ndet" -s.data["declarations"] += """ - integer, intent(in) :: Ndet - double precision, intent(in) :: delta_ij_(Ndet,Ndet,*) -""" -s.data["keys_work"] = "call mrpt_dress(delta_ij_,Ndet,i_generator,key_idx,keys_out,N_int,iproc,key_mask)" -s.data["params_post"] += ", delta_ij_, Ndet" -s.data["params_main"] += "delta_ij_, Ndet" -s.data["decls_main"] += """ - integer, intent(in) :: Ndet - double precision, intent(in) :: delta_ij_(Ndet,Ndet,*) -""" -s.data["finalization"] = "" -s.data["copy_buffer"] = "" -s.data["generate_psi_guess"] = "" -s.data["size_max"] = "3072" -print s - - -END_SHELL - diff --git a/src/mrpt_utils/mrpt_dress.irp.f b/src/mrpt_utils/mrpt_dress.irp.f deleted file mode 100644 index c7371ab3..00000000 --- a/src/mrpt_utils/mrpt_dress.irp.f +++ /dev/null @@ -1,187 +0,0 @@ -use omp_lib -use bitmasks - -BEGIN_PROVIDER [ integer(omp_lock_kind), psi_ref_bis_lock, (psi_det_size) ] - implicit none - BEGIN_DOC - ! Locks on ref determinants to fill delta_ij - END_DOC - integer :: i - do i=1,psi_det_size - call omp_init_lock( psi_ref_bis_lock(i) ) - enddo - -END_PROVIDER - - -subroutine mrpt_dress(delta_ij_, Ndet,i_generator,n_selected,det_buffer,Nint,iproc,key_mask) - use bitmasks - implicit none - - integer, intent(in) :: i_generator,n_selected, Nint, iproc - integer, intent(in) :: Ndet - integer(bit_kind),intent(in) :: key_mask(Nint, 2) - integer(bit_kind), intent(in) :: det_buffer(Nint,2,n_selected) - double precision, intent(inout) :: delta_ij_(Ndet,Ndet,*) - - - integer :: i,j,k,l - integer :: idx_alpha(0:psi_det_size) - integer :: degree_alpha(psi_det_size) - logical :: fullMatch - - double precision :: delta_e_inv_array(psi_det_size,N_states) - double precision :: hij_array(psi_det_size) - - integer(bit_kind) :: tq(Nint,2,n_selected) - integer :: N_tq - - double precision :: hialpha,hij - integer :: i_state, i_alpha - - integer(bit_kind),allocatable :: miniList(:,:,:) - integer,allocatable :: idx_miniList(:) - integer :: N_miniList, leng - double precision :: delta_e(N_states),hij_tmp - integer :: index_i,index_j - double precision :: phase_array(N_det),phase - integer :: exc(0:2,2,2),degree - - - leng = max(N_det_generators, N_det) - allocate(miniList(Nint, 2, leng), idx_miniList(leng)) - - !create_minilist_find_previous(key_mask, fullList, miniList, N_fullList, N_miniList, fullMatch, Nint) - call create_minilist_find_previous(key_mask, psi_det_generators, miniList, i_generator-1, N_miniList, fullMatch, Nint) - - if(fullMatch) then - return - end if - - - call find_connections_previous(i_generator,n_selected,det_buffer,Nint,tq,N_tq,miniList,N_minilist) - - if(N_tq > 0) then - call create_minilist(key_mask, psi_ref, miniList, idx_miniList, N_det, N_minilist, Nint) - end if - - - do i_alpha=1,N_tq - call get_excitation_degree_vector(miniList,tq(1,1,i_alpha),degree_alpha,Nint,N_minilist,idx_alpha) - - do j=1,idx_alpha(0) - idx_alpha(j) = idx_miniList(idx_alpha(j)) - enddo - -! double precision :: ihpsi0,coef_pert -! ihpsi0 = 0.d0 -! coef_pert = 0.d0 - phase_array =0.d0 - do i = 1,idx_alpha(0) - index_i = idx_alpha(i) - call i_h_j(tq(1,1,i_alpha),psi_ref(1,1,index_i),Nint,hialpha) - double precision :: coef_array(N_states) - do i_state = 1, N_states - coef_array(i_state) = psi_coef(index_i,i_state) - enddo - call get_delta_e_dyall(psi_ref(1,1,index_i),tq(1,1,i_alpha),delta_e) -! call get_delta_e_dyall_general_mp(psi_ref(1,1,index_i),tq(1,1,i_alpha),delta_e) - hij_array(index_i) = hialpha - call get_excitation(psi_ref(1,1,index_i),tq(1,1,i_alpha),exc,degree,phase,N_int) -! phase_array(index_i) = phase - do i_state = 1,N_states - delta_e_inv_array(index_i,i_state) = 1.d0/delta_e(i_state) - enddo - enddo - - do i=1,idx_alpha(0) - index_i = idx_alpha(i) - hij_tmp = hij_array(index_i) - call omp_set_lock( psi_ref_bis_lock(index_i) ) - do j = 1, idx_alpha(0) - index_j = idx_alpha(j) -! call get_excitation(psi_ref(1,1,index_i),psi_ref(1,1,index_i),exc,degree,phase,N_int) -! if(index_j.ne.index_i)then -! if(phase_array(index_j) * phase_array(index_i) .ne. phase)then -! print*, phase_array(index_j) , phase_array(index_i) ,phase -! call debug_det(psi_ref(1,1,index_i),N_int) -! call debug_det(psi_ref(1,1,index_j),N_int) -! call debug_det(tq(1,1,i_alpha),N_int) -! stop -! endif -! endif - do i_state=1,N_states -! standard dressing first order - delta_ij_(index_i,index_j,i_state) += hij_array(index_j) * hij_tmp * delta_e_inv_array(index_j,i_state) - enddo - enddo - call omp_unset_lock( psi_ref_bis_lock(index_i)) - enddo - enddo - deallocate(miniList, idx_miniList) -end - - - - BEGIN_PROVIDER [ integer(bit_kind), gen_det_ref_sorted, (N_int,2,N_det_generators,2) ] -&BEGIN_PROVIDER [ integer, gen_det_ref_shortcut, (0:N_det_generators,2) ] -&BEGIN_PROVIDER [ integer, gen_det_ref_version, (N_int, N_det_generators,2) ] -&BEGIN_PROVIDER [ integer, gen_det_ref_idx, (N_det_generators,2) ] - gen_det_ref_sorted(:,:,:,1) = psi_det_generators(:,:,:N_det_generators) - gen_det_ref_sorted(:,:,:,2) = psi_det_generators(:,:,:N_det_generators) - call sort_dets_ab_v(gen_det_ref_sorted(:,:,:,1), gen_det_ref_idx(:,1), gen_det_ref_shortcut(0:,1), gen_det_ref_version(:,:,1), N_det_generators, N_int) - call sort_dets_ba_v(gen_det_ref_sorted(:,:,:,2), gen_det_ref_idx(:,2), gen_det_ref_shortcut(0:,2), gen_det_ref_version(:,:,2), N_det_generators, N_int) -END_PROVIDER - - -subroutine find_connections_previous(i_generator,n_selected,det_buffer,Nint,tq,N_tq,miniList,N_miniList) - - use bitmasks - implicit none - - integer, intent(in) :: i_generator,n_selected, Nint - - integer(bit_kind), intent(in) :: det_buffer(Nint,2,n_selected) - integer :: i,j,k,m - logical :: is_in_wavefunction - integer :: degree(psi_det_size) - integer :: idx(0:psi_det_size) - logical :: good - - integer(bit_kind), intent(out) :: tq(Nint,2,n_selected) - integer, intent(out) :: N_tq - - - integer :: nt,ni - logical, external :: is_connected_to - - - integer(bit_kind),intent(in) :: miniList(Nint,2,N_det_generators) - integer,intent(in) :: N_miniList - - - - N_tq = 0 - - - i_loop : do i=1,N_selected - if(is_connected_to(det_buffer(1,1,i), miniList, Nint, N_miniList)) then - cycle - end if - - if (.not. is_in_wavefunction(det_buffer(1,1,i),Nint,N_det)) then - N_tq += 1 - do k=1,N_int - tq(k,1,N_tq) = det_buffer(k,1,i) - tq(k,2,N_tq) = det_buffer(k,2,i) - enddo - endif - enddo i_loop -end - - - - - - - diff --git a/src/mrpt_utils/mrpt_utils.irp.f b/src/mrpt_utils/mrpt_utils.irp.f deleted file mode 100644 index dfb8f2c8..00000000 --- a/src/mrpt_utils/mrpt_utils.irp.f +++ /dev/null @@ -1,365 +0,0 @@ - - BEGIN_PROVIDER [ double precision, delta_ij_mrpt, (N_det,N_det,N_states) ] -&BEGIN_PROVIDER [ double precision, second_order_pt_new, (N_states) ] -&BEGIN_PROVIDER [ double precision, second_order_pt_new_1h, (N_states) ] -&BEGIN_PROVIDER [ double precision, second_order_pt_new_1p, (N_states) ] -&BEGIN_PROVIDER [ double precision, second_order_pt_new_1h1p, (N_states) ] -&BEGIN_PROVIDER [ double precision, second_order_pt_new_2h, (N_states) ] -&BEGIN_PROVIDER [ double precision, second_order_pt_new_2p, (N_states) ] -&BEGIN_PROVIDER [ double precision, second_order_pt_new_1h2p, (N_states) ] -&BEGIN_PROVIDER [ double precision, second_order_pt_new_2h1p, (N_states) ] -&BEGIN_PROVIDER [ double precision, second_order_pt_new_2h2p, (N_states) ] - implicit none - BEGIN_DOC - ! Dressing matrix in N_det basis - END_DOC - integer :: i,j,m - integer :: i_state - double precision :: accu(N_states) - double precision, allocatable :: delta_ij_local(:,:,:) - - - delta_ij_mrpt = 0.d0 - - allocate (delta_ij_local(N_det,N_det,N_states)) - - - ! 1h - delta_ij_local = 0.d0 - call H_apply_mrpt_1h(delta_ij_local,N_det) - accu = 0.d0 - do i_state = 1, N_states - do i = 1, N_det - do j = 1, N_det - accu(i_state) += delta_ij_local(j,i,i_state) * psi_coef(i,i_state) * psi_coef(j,i_state) - delta_ij_mrpt(j,i,i_state) += delta_ij_local(j,i,i_state) - enddo - enddo - second_order_pt_new_1h(i_state) = accu(i_state) - enddo - print*, '1h = ',accu - - ! 1p - delta_ij_local = 0.d0 - call H_apply_mrpt_1p(delta_ij_local,N_det) - accu = 0.d0 - do i_state = 1, N_states - do i = 1, N_det - do j = 1, N_det - accu(i_state) += delta_ij_local(j,i,i_state) * psi_coef(i,i_state) * psi_coef(j,i_state) - delta_ij_mrpt(j,i,i_state) += delta_ij_local(j,i,i_state) - enddo - enddo - second_order_pt_new_1p(i_state) = accu(i_state) - enddo - print*, '1p = ',accu - - ! 1h1p - delta_ij_local = 0.d0 - call H_apply_mrpt_1h1p(delta_ij_local,N_det) - double precision :: e_corr_from_1h1p_singles(N_states) - accu = 0.d0 - do i_state = 1, N_states - do i = 1, N_det - do j = 1, N_det - accu(i_state) += delta_ij_local(j,i,i_state) * psi_coef(i,i_state) * psi_coef(j,i_state) - delta_ij_mrpt(j,i,i_state) += delta_ij_local(j,i,i_state) - enddo - enddo - second_order_pt_new_1h1p(i_state) = accu(i_state) - enddo - print*, '1h1p = ',accu - - ! 1h1p third order - if(do_third_order_1h1p)then - delta_ij_local = 0.d0 - call give_1h1p_sec_order_singles_contrib(delta_ij_local) - accu = 0.d0 - do i_state = 1, N_states - do i = 1, N_det - do j = 1, N_det - accu(i_state) += delta_ij_local(j,i,i_state) * psi_coef(i,i_state) * psi_coef(j,i_state) - delta_ij_mrpt(j,i,i_state) += delta_ij_local(j,i,i_state) - enddo - enddo - second_order_pt_new_1h1p(i_state) = accu(i_state) - enddo - print*, '1h1p(3)',accu - endif - - ! 2h - delta_ij_local = 0.d0 - call H_apply_mrpt_2h(delta_ij_local,N_det) - accu = 0.d0 - do i_state = 1, N_states - do i = 1, N_det - do j = 1, N_det - accu(i_state) += delta_ij_local(j,i,i_state) * psi_coef(i,i_state) * psi_coef(j,i_state) - delta_ij_mrpt(j,i,i_state) += delta_ij_local(j,i,i_state) - enddo - enddo - second_order_pt_new_2h(i_state) = accu(i_state) - enddo - print*, '2h = ',accu - - ! 2p - delta_ij_local = 0.d0 - call H_apply_mrpt_2p(delta_ij_local,N_det) - accu = 0.d0 - do i_state = 1, N_states - do i = 1, N_det - do j = 1, N_det - accu(i_state) += delta_ij_local(j,i,i_state) * psi_coef(i,i_state) * psi_coef(j,i_state) - delta_ij_mrpt(j,i,i_state) += delta_ij_local(j,i,i_state) - enddo - enddo - second_order_pt_new_2p(i_state) = accu(i_state) - enddo - print*, '2p = ',accu - - ! 1h2p - delta_ij_local = 0.d0 - call give_1h2p_contrib(delta_ij_local) - call H_apply_mrpt_1h2p(delta_ij_local,N_det) - accu = 0.d0 - do i_state = 1, N_states - do i = 1, N_det - do j = 1, N_det - accu(i_state) += delta_ij_local(j,i,i_state) * psi_coef(i,i_state) * psi_coef(j,i_state) - delta_ij_mrpt(j,i,i_state) += delta_ij_local(j,i,i_state) - enddo - enddo - second_order_pt_new_1h2p(i_state) = accu(i_state) - enddo - print*, '1h2p = ',accu - - ! 2h1p - delta_ij_local = 0.d0 - call give_2h1p_contrib(delta_ij_local) - call H_apply_mrpt_2h1p(delta_ij_local,N_det) - accu = 0.d0 - do i_state = 1, N_states - do i = 1, N_det - do j = 1, N_det - accu(i_state) += delta_ij_local(j,i,i_state) * psi_coef(i,i_state) * psi_coef(j,i_state) - delta_ij_mrpt(j,i,i_state) += delta_ij_local(j,i,i_state) - enddo - enddo - second_order_pt_new_2h1p(i_state) = accu(i_state) - enddo - print*, '2h1p = ',accu - - ! 2h2p -!delta_ij_local = 0.d0 -!call H_apply_mrpt_2h2p(delta_ij_local,N_det) -!accu = 0.d0 -!do i_state = 1, N_states -!do i = 1, N_det -! do j = 1, N_det -! accu(i_state) += delta_ij_local(j,i,i_state) * psi_coef(i,i_state) * psi_coef(j,i_state) -! delta_ij_mrpt(j,i,i_state) += delta_ij_local(j,i,i_state) -! enddo -!enddo -!second_order_pt_new_2h2p(i_state) = accu(i_state) -!enddo -!print*, '2h2p = ',accu - - double precision :: contrib_2h2p(N_states) - call give_2h2p(contrib_2h2p) - do i_state = 1, N_states - do i = 1, N_det - delta_ij_mrpt(i,i,i_state) += contrib_2h2p(i_state) - enddo - second_order_pt_new_2h2p(i_state) = contrib_2h2p(i_state) - enddo - print*, '2h2p = ',contrib_2h2p(1) - - - ! total - accu = 0.d0 - do i_state = 1, N_states - do i = 1, N_det -! write(*,'(1000(F16.10,x))')delta_ij_mrpt(i,:,:) - do j = i_state, N_det - accu(i_state) += delta_ij_mrpt(j,i,i_state) * psi_coef(i,i_state) * psi_coef(j,i_state) - enddo - enddo - second_order_pt_new(i_state) = accu(i_state) - print*, 'total= ',accu(i_state) - enddo - - - - -END_PROVIDER - - BEGIN_PROVIDER [double precision, Hmatrix_dressed_pt2_new, (N_det,N_det,N_states)] - implicit none - integer :: i,j,i_state - do i_state = 1, N_states - do i = 1,N_det - do j = 1,N_det - Hmatrix_dressed_pt2_new(j,i,i_state) = H_matrix_all_dets(j,i) + delta_ij_mrpt(j,i,i_state) - enddo - enddo - enddo - END_PROVIDER - - - - BEGIN_PROVIDER [double precision, Hmatrix_dressed_pt2_new_symmetrized, (N_det,N_det,N_states)] - implicit none - integer :: i,j,i_state - do i_state = 1, N_states - do i = 1,N_det - do j = i,N_det - Hmatrix_dressed_pt2_new_symmetrized(j,i,i_state) = H_matrix_all_dets(j,i) & - + 0.5d0 * ( delta_ij_mrpt(j,i,i_state) + delta_ij_mrpt(i,j,i_state) ) - Hmatrix_dressed_pt2_new_symmetrized(i,j,i_state) = Hmatrix_dressed_pt2_new_symmetrized(j,i,i_state) - enddo - enddo - enddo - END_PROVIDER - - BEGIN_PROVIDER [ double precision, CI_electronic_dressed_pt2_new_energy, (N_states) ] - &BEGIN_PROVIDER [ double precision, CI_dressed_pt2_new_eigenvectors, (N_det,N_states) ] - &BEGIN_PROVIDER [ double precision, CI_dressed_pt2_new_eigenvectors_s2, (N_states) ] - BEGIN_DOC - ! Eigenvectors/values of the CI matrix - END_DOC - implicit none - double precision :: ovrlp,u_dot_v - integer :: i_good_state - integer, allocatable :: index_good_state_array(:) - logical, allocatable :: good_state_array(:) - double precision, allocatable :: s2_values_tmp(:) - integer :: i_other_state - double precision, allocatable :: eigenvectors(:,:), eigenvalues(:) - integer :: i_state - double precision :: s2,e_0 - integer :: i,j,k - double precision, allocatable :: s2_eigvalues(:) - double precision, allocatable :: e_array(:) - integer, allocatable :: iorder(:) - - ! Guess values for the "N_states" states of the CI_dressed_pt2_new_eigenvectors - do j=1,min(N_states,N_det) - do i=1,N_det - CI_dressed_pt2_new_eigenvectors(i,j) = psi_coef(i,j) - enddo - enddo - - do j=N_det+1,N_states - do i=1,N_det - CI_dressed_pt2_new_eigenvectors(i,j) = 0.d0 - enddo - enddo - - if (diag_algorithm == "Davidson") then - - print*, 'Davidson not yet implemented for the dressing ... ' - stop - - else if (diag_algorithm == "Lapack") then - - allocate (eigenvectors(size(H_matrix_all_dets,1),N_det)) - allocate (eigenvalues(N_det)) - call lapack_diag(eigenvalues,eigenvectors, & - Hmatrix_dressed_pt2_new_symmetrized(1,1,1),size(H_matrix_all_dets,1),N_det) - CI_electronic_dressed_pt2_new_energy(:) = 0.d0 - if (s2_eig) then - i_state = 0 - allocate (s2_eigvalues(N_det)) - allocate(index_good_state_array(N_det),good_state_array(N_det)) - good_state_array = .False. - call u_0_S2_u_0(s2_eigvalues,eigenvectors,N_det,psi_ref,N_int,& - N_det,size(eigenvectors,1)) - do j=1,N_det - ! Select at least n_states states with S^2 values closed to "expected_s2" - if(dabs(s2_eigvalues(j)-expected_s2).le.0.5d0)then - i_state +=1 - index_good_state_array(i_state) = j - good_state_array(j) = .True. - endif - if(i_state.eq.N_states) then - exit - endif - enddo - if(i_state .ne.0)then - ! Fill the first "i_state" states that have a correct S^2 value - do j = 1, i_state - do i=1,N_det - CI_dressed_pt2_new_eigenvectors(i,j) = eigenvectors(i,index_good_state_array(j)) - enddo - CI_electronic_dressed_pt2_new_energy(j) = eigenvalues(index_good_state_array(j)) - CI_dressed_pt2_new_eigenvectors_s2(j) = s2_eigvalues(index_good_state_array(j)) - enddo - i_other_state = 0 - do j = 1, N_det - if(good_state_array(j))cycle - i_other_state +=1 - if(i_state+i_other_state.gt.n_states)then - exit - endif - do i=1,N_det - CI_dressed_pt2_new_eigenvectors(i,i_state+i_other_state) = eigenvectors(i,j) - enddo - CI_electronic_dressed_pt2_new_energy(i_state+i_other_state) = eigenvalues(j) - CI_dressed_pt2_new_eigenvectors_s2(i_state+i_other_state) = s2_eigvalues(i_state+i_other_state) - enddo - - else - print*,'' - print*,'!!!!!!!! WARNING !!!!!!!!!' - print*,' Within the ',N_det,'determinants selected' - print*,' and the ',N_states,'states requested' - print*,' We did not find any state with S^2 values close to ',expected_s2 - print*,' We will then set the first N_states eigenvectors of the H matrix' - print*,' as the CI_dressed_pt2_new_eigenvectors' - print*,' You should consider more states and maybe ask for s2_eig to be .True. or just enlarge the CI space' - print*,'' - do j=1,min(N_states,N_det) - do i=1,N_det - CI_dressed_pt2_new_eigenvectors(i,j) = eigenvectors(i,j) - enddo - CI_electronic_dressed_pt2_new_energy(j) = eigenvalues(j) - CI_dressed_pt2_new_eigenvectors_s2(j) = s2_eigvalues(j) - enddo - endif - deallocate(index_good_state_array,good_state_array) - deallocate(s2_eigvalues) - else - call u_0_S2_u_0(CI_dressed_pt2_new_eigenvectors_s2,eigenvectors,N_det,psi_ref,N_int,& - min(N_det,N_states),size(eigenvectors,1)) - ! Select the "N_states" states of lowest energy - do j=1,min(N_det,N_states) - do i=1,N_det - CI_dressed_pt2_new_eigenvectors(i,j) = eigenvectors(i,j) - enddo - CI_electronic_dressed_pt2_new_energy(j) = eigenvalues(j) - enddo - endif - deallocate(eigenvectors,eigenvalues) - endif - - -END_PROVIDER - - -BEGIN_PROVIDER [ double precision, CI_dressed_pt2_new_energy, (N_states) ] - implicit none - BEGIN_DOC - ! N_states lowest eigenvalues of the CI matrix - END_DOC - - integer :: j - character*(8) :: st - call write_time(6) - do j=1,N_states - CI_dressed_pt2_new_energy(j) = CI_electronic_dressed_pt2_new_energy(j) + nuclear_repulsion - write(st,'(I4)') j - call write_double(6,CI_dressed_pt2_new_energy(j),'Energy of state '//trim(st)) - call write_double(6,CI_dressed_pt2_new_eigenvectors_s2(j),'S^2 of state '//trim(st)) - enddo - -END_PROVIDER diff --git a/src/mrpt_utils/new_way.irp.f b/src/mrpt_utils/new_way.irp.f deleted file mode 100644 index 1775ec41..00000000 --- a/src/mrpt_utils/new_way.irp.f +++ /dev/null @@ -1,958 +0,0 @@ -subroutine give_2h1p_contrib(matrix_2h1p) - use bitmasks - implicit none - double precision , intent(inout) :: matrix_2h1p(N_det,N_det,*) - integer :: i,j,r,a,b - integer :: iorb, jorb, rorb, aorb, borb - integer :: ispin,jspin - integer :: idet,jdet - integer(bit_kind) :: perturb_dets(N_int,2,n_act_orb,2,2) - double precision :: perturb_dets_phase(n_act_orb,2,2) - double precision :: perturb_dets_hij(n_act_orb,2,2) - double precision :: coef_perturb_from_idet(n_act_orb,2,2,N_states) - integer :: inint - integer :: elec_num_tab_local(2),acu_elec - integer(bit_kind) :: det_tmp(N_int,2) - integer :: exc(0:2,2,2) - integer :: accu_elec - double precision :: get_mo_bielec_integral - double precision :: active_int(n_act_orb,2) - double precision :: hij,phase -!matrix_2h1p = 0.d0 - - elec_num_tab_local = 0 - do inint = 1, N_int - elec_num_tab_local(1) += popcnt(psi_ref(inint,1,1)) - elec_num_tab_local(2) += popcnt(psi_ref(inint,2,1)) - enddo - do i = 1, n_inact_orb ! First inactive - iorb = list_inact(i) - do j = 1, n_inact_orb ! Second inactive - jorb = list_inact(j) - do r = 1, n_virt_orb ! First virtual - rorb = list_virt(r) - ! take all the integral you will need for i,j,r fixed - do a = 1, n_act_orb - aorb = list_act(a) - active_int(a,1) = get_mo_bielec_integral(iorb,jorb,rorb,aorb,mo_integrals_map) ! direct - active_int(a,2) = get_mo_bielec_integral(iorb,jorb,aorb,rorb,mo_integrals_map) ! exchange - enddo - - integer :: degree(N_det) - integer :: idx(0:N_det) - double precision :: delta_e(n_act_orb,2,N_states) - integer :: istate - integer :: index_orb_act_mono(N_det,3) - - do idet = 1, N_det - call get_excitation_degree_vector_mono(psi_ref,psi_ref(1,1,idet),degree,N_int,N_det,idx) - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Precomputation of matrix elements - do ispin = 1, 2 ! spin of the couple a-a^dagger (i,r) - do jspin = 1, 2 ! spin of the couple z-a^dagger (j,a) - if(ispin == jspin .and. iorb.le.jorb)cycle ! condition not to double count - do a = 1, n_act_orb ! First active - aorb = list_act(a) - do inint = 1, N_int - det_tmp(inint,1) = psi_ref(inint,1,idet) - det_tmp(inint,2) = psi_ref(inint,2,idet) - enddo - ! Do the excitation inactive -- > virtual - call clear_bit_to_integer(iorb,det_tmp(1,ispin),N_int) ! hole in "iorb" of spin Ispin - call set_bit_to_integer(rorb,det_tmp(1,ispin),N_int) ! particle in "rorb" of spin Ispin - - ! Do the excitation inactive -- > active - call clear_bit_to_integer(jorb,det_tmp(1,jspin),N_int) ! hole in "jorb" of spin Jspin - call set_bit_to_integer(aorb,det_tmp(1,jspin),N_int) ! particle in "aorb" of spin Jspin - - ! Check if the excitation is possible or not on psi_ref(idet) - accu_elec= 0 - do inint = 1, N_int - accu_elec+= popcnt(det_tmp(inint,jspin)) - enddo - if(accu_elec .ne. elec_num_tab_local(jspin))then - perturb_dets_phase(a,jspin,ispin) = 0.0 - perturb_dets_hij(a,jspin,ispin) = 0.d0 - do istate = 1, N_states - coef_perturb_from_idet(a,jspin,ispin,istate) = 0.d0 - enddo - cycle - endif - do inint = 1, N_int - perturb_dets(inint,1,a,jspin,ispin) = det_tmp(inint,1) - perturb_dets(inint,2,a,jspin,ispin) = det_tmp(inint,2) - enddo - call get_double_excitation(psi_ref(1,1,idet),det_tmp,exc,phase,N_int) - perturb_dets_phase(a,jspin,ispin) = phase - do istate = 1, N_states - delta_e(a,jspin,istate) = one_creat(a,jspin,istate) & - - fock_virt_total_spin_trace(rorb,istate) & - + fock_core_inactive_total_spin_trace(iorb,istate) & - + fock_core_inactive_total_spin_trace(jorb,istate) - enddo - if(ispin == jspin)then - perturb_dets_hij(a,jspin,ispin) = phase * (active_int(a,2) - active_int(a,1) ) - else - perturb_dets_hij(a,jspin,ispin) = phase * active_int(a,1) - endif -!!!!!!!!!!!!!!!!!!!!!1 Computation of the coefficient at first order coming from idet -!!!!!!!!!!!!!!!!!!!!! for the excitation (i,j)(ispin,jspin) ---> (r,a)(ispin,jspin) - do istate = 1, N_states - coef_perturb_from_idet(a,jspin,ispin,istate) = perturb_dets_hij(a,jspin,ispin) / delta_e(a,jspin,istate) - enddo - - enddo - enddo - enddo - -!!!!!!!!!!!!!!!!!!!!!!!!!!! determination of the connections between I and the other J determinants mono excited in the CAS -!!!!!!!!!!!!!!!!!!!!!!!!!!!! the determinants I and J must be connected by the following operator -!!!!!!!!!!!!!!!!!!!!!!!!!!!! - do jdet = 1, idx(0) - if(idx(jdet).ne.idet)then - call get_mono_excitation(psi_ref(1,1,idet),psi_ref(1,1,idx(jdet)),exc,phase,N_int) - if (exc(0,1,1) == 1) then - ! Mono alpha - index_orb_act_mono(idx(jdet),1) = list_act_reverse(exc(1,2,1)) !!! a^{\dagger}_a - index_orb_act_mono(idx(jdet),2) = list_act_reverse(exc(1,1,1)) !!! a_{b} - index_orb_act_mono(idx(jdet),3) = 1 - else - ! Mono beta - index_orb_act_mono(idx(jdet),1) = list_act_reverse(exc(1,2,2)) !!! a^{\dagger}_a - index_orb_act_mono(idx(jdet),2) = list_act_reverse(exc(1,1,2)) !!! a_{b} - index_orb_act_mono(idx(jdet),3) = 2 - endif - else - index_orb_act_mono(idx(jdet),1) = -1 - endif - enddo - - integer :: kspin - do jdet = 1, idx(0) - if(idx(jdet).ne.idet)then - ! two determinants | Idet > and | Jdet > which are connected throw a mono excitation operator - ! are connected by the presence of the perturbers determinants |det_tmp> - aorb = index_orb_act_mono(idx(jdet),1) ! a^{\dagger}_{aorb} - borb = index_orb_act_mono(idx(jdet),2) ! a_{borb} - kspin = index_orb_act_mono(idx(jdet),3) ! spin of the excitation - ! the determinants Idet and Jdet interact throw the following operator - ! | Jdet > = a_{borb,kspin} a^{\dagger}_{aorb, kspin} | Idet > - - do ispin = 1, 2 ! you loop on all possible spin for the excitation - ! a^{\dagger}_r a_{i} (ispin) - if(ispin == kspin .and. iorb.le.jorb)cycle ! condition not to double count - - ! | det_tmp > = a^{\dagger}_{rorb,ispin} a^{\dagger}_{aorb,kspin} a_{jorb,kspin} a_{iorb,ispin} | Idet > - do inint = 1, N_int - det_tmp(inint,1) = perturb_dets(inint,1,aorb,kspin,ispin) - det_tmp(inint,2) = perturb_dets(inint,2,aorb,kspin,ispin) - enddo - double precision :: hja - ! you determine the interaction between the excited determinant and the other parent | Jdet > - ! | det_tmp > = a^{\dagger}_{rorb,ispin} a^{\dagger}_{borb,kspin} a_{jorb,kspin} a_{iorb,ispin} | Jdet > - ! hja = < det_tmp | H | Jdet > - call get_double_excitation(psi_ref(1,1,idx(jdet)),det_tmp,exc,phase,N_int) - if(kspin == ispin)then - hja = phase * (active_int(borb,2) - active_int(borb,1) ) - else - hja = phase * active_int(borb,1) - endif - - do istate = 1, N_states - matrix_2h1p(idx(jdet),idet,istate) += hja * coef_perturb_from_idet(aorb,kspin,ispin,istate) - enddo - enddo ! ispin - - else - ! diagonal part of the dressing : interaction of | Idet > with all the perturbers generated by the excitations - ! - ! | det_tmp > = a^{\dagger}_{rorb,ispin} a^{\dagger}_{aorb,kspin} a_{jorb,kspin} a_{iorb,ispin} | Idet > - do ispin = 1, 2 - do kspin = 1, 2 - if(ispin == kspin .and. iorb.le.jorb)cycle ! condition not to double count - do a = 1, n_act_orb ! First active - do istate = 1, N_states - matrix_2h1p(idet,idet,istate) += coef_perturb_from_idet(a,kspin,ispin,istate) * perturb_dets_hij(a,kspin,ispin) - enddo - enddo - enddo - enddo - - endif - - enddo - enddo - enddo - enddo - enddo - - - - - -end - - -subroutine give_1h2p_contrib(matrix_1h2p) - use bitmasks - implicit none - double precision , intent(inout) :: matrix_1h2p(N_det,N_det,*) - integer :: i,v,r,a,b - integer :: iorb, vorb, rorb, aorb, borb - integer :: ispin,jspin - integer :: idet,jdet - integer(bit_kind) :: perturb_dets(N_int,2,n_act_orb,2,2) - double precision :: perturb_dets_phase(n_act_orb,2,2) - double precision :: perturb_dets_hij(n_act_orb,2,2) - double precision :: coef_perturb_from_idet(n_act_orb,2,2,N_states) - integer :: inint - integer :: elec_num_tab_local(2),acu_elec - integer(bit_kind) :: det_tmp(N_int,2) - integer :: exc(0:2,2,2) - integer :: accu_elec - double precision :: get_mo_bielec_integral - double precision :: active_int(n_act_orb,2) - double precision :: hij,phase -!matrix_1h2p = 0.d0 - - elec_num_tab_local = 0 - do inint = 1, N_int - elec_num_tab_local(1) += popcnt(psi_ref(inint,1,1)) - elec_num_tab_local(2) += popcnt(psi_ref(inint,2,1)) - enddo - do i = 1, n_inact_orb ! First inactive - iorb = list_inact(i) - do v = 1, n_virt_orb ! First virtual - vorb = list_virt(v) - do r = 1, n_virt_orb ! Second virtual - rorb = list_virt(r) - ! take all the integral you will need for i,j,r fixed - do a = 1, n_act_orb - aorb = list_act(a) - active_int(a,1) = get_mo_bielec_integral(iorb,aorb,rorb,vorb,mo_integrals_map) ! direct - active_int(a,2) = get_mo_bielec_integral(iorb,aorb,vorb,rorb,mo_integrals_map) ! exchange - enddo - - integer :: degree(N_det) - integer :: idx(0:N_det) - double precision :: delta_e(n_act_orb,2,N_states) - integer :: istate - integer :: index_orb_act_mono(N_det,3) - - do idet = 1, N_det - call get_excitation_degree_vector_mono(psi_ref,psi_ref(1,1,idet),degree,N_int,N_det,idx) - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Precomputation of matrix elements - do ispin = 1, 2 ! spin of the couple a-a^dagger (iorb,rorb) - do jspin = 1, 2 ! spin of the couple a-a^dagger (aorb,vorb) - do a = 1, n_act_orb ! First active - aorb = list_act(a) - if(ispin == jspin .and. vorb.le.rorb)cycle ! condition not to double count - do inint = 1, N_int - det_tmp(inint,1) = psi_ref(inint,1,idet) - det_tmp(inint,2) = psi_ref(inint,2,idet) - enddo - ! Do the excitation inactive -- > virtual - call clear_bit_to_integer(iorb,det_tmp(1,ispin),N_int) ! hole in "iorb" of spin Ispin - call set_bit_to_integer(rorb,det_tmp(1,ispin),N_int) ! particle in "rorb" of spin Ispin - - ! Do the excitation active -- > virtual - call clear_bit_to_integer(aorb,det_tmp(1,jspin),N_int) ! hole in "aorb" of spin Jspin - call set_bit_to_integer(vorb,det_tmp(1,jspin),N_int) ! particle in "vorb" of spin Jspin - - ! Check if the excitation is possible or not on psi_ref(idet) - accu_elec= 0 - do inint = 1, N_int - accu_elec+= popcnt(det_tmp(inint,jspin)) - enddo - if(accu_elec .ne. elec_num_tab_local(jspin))then - perturb_dets_phase(a,jspin,ispin) = 0.0 - perturb_dets_hij(a,jspin,ispin) = 0.d0 - do istate = 1, N_states - coef_perturb_from_idet(a,jspin,ispin,istate) = 0.d0 - enddo - cycle - endif - do inint = 1, N_int - perturb_dets(inint,1,a,jspin,ispin) = det_tmp(inint,1) - perturb_dets(inint,2,a,jspin,ispin) = det_tmp(inint,2) - enddo - do inint = 1, N_int - det_tmp(inint,1) = perturb_dets(inint,1,a,jspin,ispin) - det_tmp(inint,2) = perturb_dets(inint,2,a,jspin,ispin) - enddo - - call get_double_excitation(psi_ref(1,1,idet),det_tmp,exc,phase,N_int) - perturb_dets_phase(a,jspin,ispin) = phase - do istate = 1, N_states - delta_e(a,jspin,istate) = one_anhil(a,jspin,istate) & - - fock_virt_total_spin_trace(rorb,istate) & - - fock_virt_total_spin_trace(vorb,istate) & - + fock_core_inactive_total_spin_trace(iorb,istate) - enddo - if(ispin == jspin)then - perturb_dets_hij(a,jspin,ispin) = phase * (active_int(a,1) - active_int(a,2) ) - else - perturb_dets_hij(a,jspin,ispin) = phase * active_int(a,1) - endif -!!!!!!!!!!!!!!!!!!!!!1 Computation of the coefficient at first order coming from idet -!!!!!!!!!!!!!!!!!!!!! for the excitation (i,j)(ispin,jspin) ---> (r,a)(ispin,jspin) - do istate = 1, N_states - coef_perturb_from_idet(a,jspin,ispin,istate) = perturb_dets_hij(a,jspin,ispin) / delta_e(a,jspin,istate) - enddo - - enddo - enddo - enddo - -!!!!!!!!!!!!!!!!!!!!!!!!!!! determination of the connections between I and the other J determinants mono excited in the CAS -!!!!!!!!!!!!!!!!!!!!!!!!!!!! the determinants I and J must be connected by the following operator -!!!!!!!!!!!!!!!!!!!!!!!!!!!! - do jdet = 1, idx(0) - if(idx(jdet).ne.idet)then - call get_mono_excitation(psi_ref(1,1,idet),psi_ref(1,1,idx(jdet)),exc,phase,N_int) - if (exc(0,1,1) == 1) then - ! Mono alpha - index_orb_act_mono(idx(jdet),1) = list_act_reverse(exc(1,1,1)) !!! a_a - index_orb_act_mono(idx(jdet),2) = list_act_reverse(exc(1,2,1)) !!! a^{\dagger}_{b} - index_orb_act_mono(idx(jdet),3) = 1 - else - ! Mono beta - index_orb_act_mono(idx(jdet),1) = list_act_reverse(exc(1,1,2)) !!! a_a - index_orb_act_mono(idx(jdet),2) = list_act_reverse(exc(1,2,2)) !!! a^{\dagger}_{b} - index_orb_act_mono(idx(jdet),3) = 2 - endif - else - index_orb_act_mono(idx(jdet),1) = -1 - endif - enddo - - integer :: kspin - do jdet = 1, idx(0) - if(idx(jdet).ne.idet)then - ! two determinants | Idet > and | Jdet > which are connected throw a mono excitation operator - ! are connected by the presence of the perturbers determinants |det_tmp> - aorb = index_orb_act_mono(idx(jdet),1) ! a_{aorb} - borb = index_orb_act_mono(idx(jdet),2) ! a^{\dagger}_{borb} - kspin = index_orb_act_mono(idx(jdet),3) ! spin of the excitation - ! the determinants Idet and Jdet interact throw the following operator - ! | Jdet > = a^{\dagger}_{borb,kspin} a_{aorb, kspin} | Idet > - - do ispin = 1, 2 ! you loop on all possible spin for the excitation - ! a^{\dagger}_r a_{i} (ispin) - if(ispin == kspin .and. vorb.le.rorb)cycle ! condition not to double count - - ! | det_tmp > = a^{\dagger}_{rorb,ispin} a^{\dagger}_{vorb,kspin} a_{aorb,kspin} a_{iorb,ispin} | Idet > - do inint = 1, N_int - det_tmp(inint,1) = perturb_dets(inint,1,aorb,kspin,ispin) - det_tmp(inint,2) = perturb_dets(inint,2,aorb,kspin,ispin) - enddo - double precision :: hja - ! you determine the interaction between the excited determinant and the other parent | Jdet > - ! | det_tmp > = a^{\dagger}_{rorb,ispin} a^{\dagger}_{vorb,kspin} a_{borb,kspin} a_{iorb,ispin} | Jdet > - ! hja = < det_tmp | H | Jdet > - - call get_double_excitation(psi_ref(1,1,idx(jdet)),det_tmp,exc,phase,N_int) - if(kspin == ispin)then - hja = phase * (active_int(borb,1) - active_int(borb,2) ) - else - hja = phase * active_int(borb,1) - endif - - do istate = 1, N_states - matrix_1h2p(idx(jdet),idet,istate) += hja * coef_perturb_from_idet(aorb,kspin,ispin,istate) - enddo - enddo ! ispin - - else - ! diagonal part of the dressing : interaction of | Idet > with all the perturbers generated by the excitations - ! - ! | det_tmp > = a^{\dagger}_{rorb,ispin} a^{\dagger}_{vorb,kspin} a_{aorb,kspin} a_{iorb,ispin} | Idet > - do ispin = 1, 2 - do kspin = 1, 2 - do a = 1, n_act_orb ! First active - aorb = list_act(a) - if(ispin == kspin .and. vorb.le.rorb)cycle ! condition not to double count - do istate = 1, N_states - matrix_1h2p(idet,idet,istate) += coef_perturb_from_idet(a,kspin,ispin,istate) * perturb_dets_hij(a,kspin,ispin) - enddo - enddo - enddo - enddo - - endif - - enddo - enddo - enddo - enddo - enddo - - - - - -end - - -subroutine give_1h1p_contrib(matrix_1h1p) - use bitmasks - implicit none - double precision , intent(inout) :: matrix_1h1p(N_det,N_det,*) - integer :: i,j,r,a,b - integer :: iorb, jorb, rorb, aorb, borb - integer :: ispin,jspin - integer :: idet,jdet - integer :: inint - integer :: elec_num_tab_local(2),acu_elec - integer(bit_kind) :: det_tmp(N_int,2) - integer :: exc(0:2,2,2) - integer :: accu_elec - double precision :: get_mo_bielec_integral - double precision :: active_int(n_act_orb,2) - double precision :: hij,phase - integer :: degree(N_det) - integer :: idx(0:N_det) - integer :: istate - double precision :: hja,delta_e_inact_virt(N_states) - integer :: kspin,degree_scalar -!matrix_1h1p = 0.d0 - - elec_num_tab_local = 0 - do inint = 1, N_int - elec_num_tab_local(1) += popcnt(psi_ref(inint,1,1)) - elec_num_tab_local(2) += popcnt(psi_ref(inint,2,1)) - enddo - do i = 1, n_inact_orb ! First inactive - iorb = list_inact(i) - do r = 1, n_virt_orb ! First virtual - rorb = list_virt(r) - do j = 1, N_states - delta_e_inact_virt(j) = fock_core_inactive_total_spin_trace(iorb,j) & - - fock_virt_total_spin_trace(rorb,j) - enddo - do idet = 1, N_det - call get_excitation_degree_vector_mono(psi_ref,psi_ref(1,1,idet),degree,N_int,N_det,idx) - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Precomputation of matrix elements - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Case of the mono excitations - do jdet = 1, idx(0) - do ispin = 1, 2 ! spin of the couple a-a^dagger (i,r) - do inint = 1, N_int - det_tmp(inint,1) = psi_ref(inint,1,idet) - det_tmp(inint,2) = psi_ref(inint,2,idet) - enddo - ! Do the excitation inactive -- > virtual - double precision :: himono,delta_e(N_states),coef_mono(N_states) - call clear_bit_to_integer(iorb,det_tmp(1,ispin),N_int) ! hole in "iorb" of spin Ispin - call set_bit_to_integer(rorb,det_tmp(1,ispin),N_int) ! particle in "rorb" of spin Ispin - call i_H_j(psi_ref(1,1,idet),det_tmp,N_int,himono) - - do state_target = 1, N_states -! delta_e(state_target) = one_anhil_one_creat_inact_virt(i,r,state_target) + delta_e_inact_virt(state_target) - delta_e(state_target) = one_anhil_one_creat_inact_virt_bis(i,r,idet,state_target) - coef_mono(state_target) = himono / delta_e(state_target) - enddo - if(idx(jdet).ne.idet)then - call get_mono_excitation(psi_ref(1,1,idet),psi_ref(1,1,idx(jdet)),exc,phase,N_int) - if (exc(0,1,1) == 1) then - ! Mono alpha - aorb = (exc(1,2,1)) !!! a^{\dagger}_a - borb = (exc(1,1,1)) !!! a_{b} - jspin = 1 - else - ! Mono beta - aorb = (exc(1,2,2)) !!! a^{\dagger}_a - borb = (exc(1,1,2)) !!! a_{b} - jspin = 2 - endif - - call get_excitation_degree(psi_ref(1,1,idx(jdet)),det_tmp,degree_scalar,N_int) - if(degree_scalar .ne. 2)then - print*, 'pb !!!' - print*, degree_scalar - call debug_det(psi_ref(1,1,idx(jdet)),N_int) - call debug_det(det_tmp,N_int) - stop - endif - call get_double_excitation(psi_ref(1,1,idx(jdet)),det_tmp,exc,phase,N_int) - if(ispin == jspin )then - hij = -get_mo_bielec_integral(iorb,aorb,rorb,borb,mo_integrals_map) & - + get_mo_bielec_integral(iorb,aorb,borb,rorb,mo_integrals_map) - else - hij = get_mo_bielec_integral(iorb,borb,rorb,aorb,mo_integrals_map) - endif - hij = hij * phase - double precision :: hij_test - integer :: state_target - call i_H_j(psi_ref(1,1,idx(jdet)),det_tmp,N_int,hij_test) - if(dabs(hij - hij_test).gt.1.d-10)then - print*, 'ahah pb !!' - print*, 'hij .ne. hij_test' - print*, hij,hij_test - call debug_det(psi_ref(1,1,idx(jdet)),N_int) - call debug_det(det_tmp,N_int) - print*, ispin, jspin - print*,iorb,borb,rorb,aorb - print*, phase - call i_H_j_verbose(psi_ref(1,1,idx(jdet)),det_tmp,N_int,hij_test) - stop - endif - do state_target = 1, N_states - matrix_1h1p(idx(jdet),idet,state_target) += hij* coef_mono(state_target) - enddo - else - do state_target = 1, N_states - matrix_1h1p(idet,idet,state_target) += himono * coef_mono(state_target) - enddo - endif - enddo - enddo - - - - enddo - enddo - enddo -end - -subroutine give_1h1p_sec_order_singles_contrib(matrix_1h1p) - use bitmasks - implicit none - double precision , intent(inout) :: matrix_1h1p(N_det,N_det,*) - integer :: i,j,r,a,b - integer :: iorb, jorb, rorb, aorb, borb,s,sorb - integer :: ispin,jspin - integer :: idet,jdet - integer :: inint - integer :: elec_num_tab_local(2),acu_elec - integer(bit_kind) :: det_tmp(N_int,2),det_tmp_bis(N_int,2) - integer(bit_kind) :: det_pert(N_int,2,n_inact_orb,n_virt_orb,2) - double precision :: coef_det_pert(n_inact_orb,n_virt_orb,2,N_states,2) - double precision :: delta_e_det_pert(n_inact_orb,n_virt_orb,2,N_states) - double precision :: hij_det_pert(n_inact_orb,n_virt_orb,2,N_states) - integer :: exc(0:2,2,2) - integer :: accu_elec - double precision :: get_mo_bielec_integral - double precision :: active_int(n_act_orb,2) - double precision :: hij,phase - integer :: degree(N_det) - integer :: idx(0:N_det) - integer :: istate - double precision :: hja,delta_e_inact_virt(N_states) - integer :: kspin,degree_scalar -!matrix_1h1p = 0.d0 - - elec_num_tab_local = 0 - do inint = 1, N_int - elec_num_tab_local(1) += popcnt(psi_ref(inint,1,1)) - elec_num_tab_local(2) += popcnt(psi_ref(inint,2,1)) - enddo - double precision :: himono,delta_e(N_states),coef_mono(N_states) - integer :: state_target - do idet = 1, N_det - call get_excitation_degree_vector_mono(psi_ref,psi_ref(1,1,idet),degree,N_int,N_det,idx) - do i = 1, n_inact_orb ! First inactive - iorb = list_inact(i) - do r = 1, n_virt_orb ! First virtual - rorb = list_virt(r) - do ispin = 1, 2 ! spin of the couple a-a^dagger (i,r) - do state_target = 1, N_states - coef_det_pert(i,r,ispin,state_target,1) = 0.d0 - coef_det_pert(i,r,ispin,state_target,2) = 0.d0 - enddo - do j = 1, N_states - delta_e_inact_virt(j) = fock_core_inactive_total_spin_trace(iorb,j) & - - fock_virt_total_spin_trace(rorb,j) - enddo - do inint = 1, N_int - det_tmp(inint,1) = psi_ref(inint,1,idet) - det_tmp(inint,2) = psi_ref(inint,2,idet) - enddo - ! Do the excitation inactive -- > virtual - call clear_bit_to_integer(iorb,det_tmp(1,ispin),N_int) ! hole in "iorb" of spin Ispin - call set_bit_to_integer(rorb,det_tmp(1,ispin),N_int) ! particle in "rorb" of spin Ispin - call i_H_j(psi_ref(1,1,idet),det_tmp,N_int,himono) - do inint = 1, N_int - det_pert(inint,1,i,r,ispin) = det_tmp(inint,1) - det_pert(inint,2,i,r,ispin) = det_tmp(inint,2) - enddo - do state_target = 1, N_states - delta_e_det_pert(i,r,ispin,state_target) = one_anhil_one_creat_inact_virt(i,r,state_target) + delta_e_inact_virt(state_target) - coef_det_pert(i,r,ispin,state_target,1) = himono / delta_e_det_pert(i,r,ispin,state_target) - enddo - !!!!!!!!!!!!!!!!!!!!!!!!!!!!! Precomputation of matrix elements - !!!!!!!!!!!!!!!!!!!!!!!!!!!!! Case of the mono excitations - enddo ! ispin - enddo ! rorb - enddo ! iorb - - do i = 1, n_inact_orb ! First inactive - iorb = list_inact(i) - do r = 1, n_virt_orb ! First virtual - rorb = list_virt(r) - do ispin = 1, 2 ! spin of the couple a-a^dagger (i,r) - do inint = 1, N_int - det_tmp(inint,1) = det_pert(inint,1,i,r,ispin) - det_tmp(inint,2) = det_pert(inint,2,i,r,ispin) - enddo - do j = 1, n_inact_orb ! First inactive - jorb = list_inact(j) - do s = 1, n_virt_orb ! First virtual - sorb = list_virt(s) - do jspin = 1, 2 ! spin of the couple a-a^dagger (i,r) - if(i==j.and.r==s.and.ispin==jspin)cycle - do inint = 1, N_int - det_tmp_bis(inint,1) = det_pert(inint,1,j,s,jspin) - det_tmp_bis(inint,2) = det_pert(inint,2,j,s,jspin) - enddo - call i_H_j(det_tmp_bis,det_tmp,N_int,himono) - do state_target = 1, N_states - coef_det_pert(i,r,ispin,state_target,2) += & - coef_det_pert(j,s,jspin,state_target,1) * himono / delta_e_det_pert(i,r,ispin,state_target) - enddo - enddo - enddo - enddo - enddo ! ispin - enddo ! rorb - enddo ! iorb - do i = 1, n_inact_orb ! First inactive - iorb = list_inact(i) - do r = 1, n_virt_orb ! First virtual - rorb = list_virt(r) - do ispin = 1, 2 ! spin of the couple a-a^dagger (i,r) - do state_target = 1, N_states - coef_det_pert(i,r,ispin,state_target,1) += coef_det_pert(i,r,ispin,state_target,2) - enddo - - do inint = 1, N_int - det_tmp(inint,1) = det_pert(inint,1,i,r,ispin) - det_tmp(inint,2) = det_pert(inint,2,i,r,ispin) - enddo - do jdet = 1, idx(0) -! - if(idx(jdet).ne.idet)then - call get_mono_excitation(psi_ref(1,1,idet),psi_ref(1,1,idx(jdet)),exc,phase,N_int) - if (exc(0,1,1) == 1) then - ! Mono alpha - aorb = (exc(1,2,1)) !!! a^{\dagger}_a - borb = (exc(1,1,1)) !!! a_{b} - jspin = 1 - else - aorb = (exc(1,2,2)) !!! a^{\dagger}_a - borb = (exc(1,1,2)) !!! a_{b} - jspin = 2 - endif - - call get_excitation_degree(psi_ref(1,1,idx(jdet)),det_tmp,degree_scalar,N_int) - if(degree_scalar .ne. 2)then - print*, 'pb !!!' - print*, degree_scalar - call debug_det(psi_ref(1,1,idx(jdet)),N_int) - call debug_det(det_tmp,N_int) - stop - endif - call get_double_excitation(psi_ref(1,1,idx(jdet)),det_tmp,exc,phase,N_int) - double precision :: hij_test - hij_test = 0.d0 - call i_H_j(psi_ref(1,1,idx(jdet)),det_tmp,N_int,hij_test) - do state_target = 1, N_states - matrix_1h1p(idx(jdet),idet,state_target) += hij_test* coef_det_pert(i,r,ispin,state_target,2) - enddo - else - hij_test = 0.d0 - call i_H_j(psi_ref(1,1,idet),det_tmp,N_int,hij_test) - do state_target = 1, N_states - matrix_1h1p(idet,idet,state_target) += hij_test* coef_det_pert(i,r,ispin,state_target,2) - enddo - endif - enddo - enddo - enddo - enddo - - enddo ! idet -end - - -subroutine give_1p_sec_order_singles_contrib(matrix_1p) - use bitmasks - implicit none - double precision , intent(inout) :: matrix_1p(N_det,N_det,*) - integer :: i,j,r,a,b - integer :: iorb, jorb, rorb, aorb, borb,s,sorb - integer :: ispin,jspin - integer :: idet,jdet - integer :: inint - integer :: elec_num_tab_local(2),acu_elec - integer(bit_kind) :: det_tmp(N_int,2),det_tmp_bis(N_int,2) - integer(bit_kind) :: det_pert(N_int,2,n_act_orb,n_virt_orb,2) - double precision :: coef_det_pert(n_act_orb,n_virt_orb,2,N_states,2) - double precision :: delta_e_det_pert(n_act_orb,n_virt_orb,2,N_states) - double precision :: hij_det_pert(n_act_orb,n_virt_orb,2) - integer :: exc(0:2,2,2) - integer :: accu_elec - double precision :: get_mo_bielec_integral - double precision :: hij,phase - integer :: degree(N_det) - integer :: idx(0:N_det) - integer :: istate - double precision :: hja,delta_e_act_virt(N_states) - integer :: kspin,degree_scalar -!matrix_1p = 0.d0 - - elec_num_tab_local = 0 - do inint = 1, N_int - elec_num_tab_local(1) += popcnt(psi_ref(inint,1,1)) - elec_num_tab_local(2) += popcnt(psi_ref(inint,2,1)) - enddo - double precision :: himono,delta_e(N_states),coef_mono(N_states) - integer :: state_target - do idet = 1, N_det - call get_excitation_degree_vector_mono(psi_ref,psi_ref(1,1,idet),degree,N_int,N_det,idx) - do i = 1, n_act_orb ! First active - iorb = list_act(i) - do r = 1, n_virt_orb ! First virtual - rorb = list_virt(r) - do ispin = 1, 2 ! spin of the couple a-a^dagger (i,r) - do state_target = 1, N_states - coef_det_pert(i,r,ispin,state_target,1) = 0.d0 - coef_det_pert(i,r,ispin,state_target,2) = 0.d0 - enddo - do j = 1, N_states - delta_e_act_virt(j) = - fock_virt_total_spin_trace(rorb,j) - enddo - do inint = 1, N_int - det_tmp(inint,1) = psi_ref(inint,1,idet) - det_tmp(inint,2) = psi_ref(inint,2,idet) - enddo - ! Do the excitation active -- > virtual - call do_mono_excitation(det_tmp,iorb,rorb,ispin,i_ok) - integer :: i_ok - if(i_ok .ne.1)then - do state_target = 1, N_states - coef_det_pert(i,r,ispin,state_target,1) = -1.d+10 - coef_det_pert(i,r,ispin,state_target,2) = -1.d+10 - hij_det_pert(i,r,ispin) = 0.d0 - enddo - do inint = 1, N_int - det_pert(inint,1,i,r,ispin) = 0_bit_kind - det_pert(inint,2,i,r,ispin) = 0_bit_kind - enddo - cycle - endif - call i_H_j(psi_ref(1,1,idet),det_tmp,N_int,himono) - do inint = 1, N_int - det_pert(inint,1,i,r,ispin) = det_tmp(inint,1) - det_pert(inint,2,i,r,ispin) = det_tmp(inint,2) - enddo - do state_target = 1, N_states - delta_e_det_pert(i,r,ispin,state_target) = one_creat_virt(i,r,state_target) + delta_e_act_virt(state_target) - coef_det_pert(i,r,ispin,state_target,1) = himono / delta_e_det_pert(i,r,ispin,state_target) - hij_det_pert(i,r,ispin) = himono - enddo - !!!!!!!!!!!!!!!!!!!!!!!!!!!!! Precomputation of matrix elements - !!!!!!!!!!!!!!!!!!!!!!!!!!!!! Case of the mono excitations - enddo ! ispin - enddo ! rorb - enddo ! iorb - -! do i = 1, n_act_orb ! First active -! do ispin = 1, 2 ! spin of the couple a-a^dagger (i,r) -! if(coef_det_pert(i,1,ispin,1,1) == -1.d+10)cycle -! iorb = list_act(i) -! do r = 1, n_virt_orb ! First virtual -! rorb = list_virt(r) -! do inint = 1, N_int -! det_tmp(inint,1) = det_pert(inint,1,i,r,ispin) -! det_tmp(inint,2) = det_pert(inint,2,i,r,ispin) -! enddo -! do j = 1, n_act_orb ! First active -! do jspin = 1, 2 ! spin of the couple a-a^dagger (i,r) -! if(coef_det_pert(j,1,jspin,1,1) == -1.d+10)cycle -! jorb = list_act(j) -! do s = 1, n_virt_orb ! First virtual -! sorb = list_virt(s) -! if(i==j.and.r==s.and.ispin==jspin)cycle -! do inint = 1, N_int -! det_tmp_bis(inint,1) = det_pert(inint,1,j,s,jspin) -! det_tmp_bis(inint,2) = det_pert(inint,2,j,s,jspin) -! enddo -! call i_H_j(det_tmp_bis,det_tmp,N_int,himono) -! do state_target = 1, N_states -! coef_det_pert(i,r,ispin,state_target,2) += & -! coef_det_pert(j,s,jspin,state_target,1) * himono / delta_e_det_pert(i,r,ispin,state_target) -! enddo -! enddo -! enddo -! enddo -! enddo ! ispin -! enddo ! rorb -! enddo ! iorb - - do i = 1, n_act_orb ! First active - do ispin = 1, 2 ! spin of the couple a-a^dagger (i,r) - if(coef_det_pert(i,1,ispin,1,1) == -1.d+10)cycle - iorb = list_act(i) - do r = 1, n_virt_orb ! First virtual - rorb = list_virt(r) -! do state_target = 1, N_states -! coef_det_pert(i,r,ispin,state_target,1) += coef_det_pert(i,r,ispin,state_target,2) -! enddo - do inint = 1, N_int - det_tmp(inint,1) = det_pert(inint,1,i,r,ispin) - det_tmp(inint,2) = det_pert(inint,2,i,r,ispin) - enddo - do jdet = 1,N_det - double precision :: coef_array(N_states),hij_test - call i_H_j(det_tmp,psi_ref(1,1,jdet),N_int,himono) - call get_delta_e_dyall(psi_ref(1,1,jdet),det_tmp,delta_e) - do state_target = 1, N_states -! matrix_1p(idet,jdet,state_target) += himono * coef_det_pert(i,r,ispin,state_target,1) - matrix_1p(idet,jdet,state_target) += himono * hij_det_pert(i,r,ispin) / delta_e(state_target) - enddo - enddo - enddo - enddo - enddo - - enddo ! idet -end - - - -subroutine give_1h1p_only_doubles_spin_cross(matrix_1h1p) - use bitmasks - implicit none - double precision , intent(inout) :: matrix_1h1p(N_det,N_det,*) - integer :: i,j,r,a,b - integer :: iorb, jorb, rorb, aorb, borb - integer :: ispin,jspin - integer :: idet,jdet - integer :: inint - integer :: elec_num_tab_local(2),acu_elec - integer(bit_kind) :: det_tmp(N_int,2) - integer :: exc(0:2,2,2) - integer :: accu_elec - double precision :: get_mo_bielec_integral - double precision :: active_int(n_act_orb,2) - double precision :: hij,phase - integer :: degree(N_det) - integer :: idx(0:N_det) - integer :: istate - double precision :: hja,delta_e_inact_virt(N_states) - integer(bit_kind) :: pert_det(N_int,2,n_act_orb,n_act_orb,2) - double precision :: pert_det_coef(n_act_orb,n_act_orb,2,N_states) - integer :: kspin,degree_scalar - integer :: other_spin(2) - other_spin(1) = 2 - other_spin(2) = 1 - double precision :: hidouble,delta_e(N_states) -!matrix_1h1p = 0.d0 - - elec_num_tab_local = 0 - do inint = 1, N_int - elec_num_tab_local(1) += popcnt(psi_ref(inint,1,1)) - elec_num_tab_local(2) += popcnt(psi_ref(inint,2,1)) - enddo - do i = 1, n_inact_orb ! First inactive - iorb = list_inact(i) - do r = 1, n_virt_orb ! First virtual - rorb = list_virt(r) - do j = 1, N_states - delta_e_inact_virt(j) = fock_core_inactive_total_spin_trace(iorb,j) & - - fock_virt_total_spin_trace(rorb,j) - enddo - do idet = 1, N_det - call get_excitation_degree_vector_double_alpha_beta(psi_ref,psi_ref(1,1,idet),degree,N_int,N_det,idx) - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Precomputation of matrix elements - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Case of the mono excitations - do ispin = 1, 2 - jspin = other_spin(ispin) - do a = 1, n_act_orb - aorb = list_act(a) - do b = 1, n_act_orb - borb = list_act(b) - do inint = 1, N_int - det_tmp(inint,1) = psi_ref(inint,1,idet) - det_tmp(inint,2) = psi_ref(inint,2,idet) - enddo - ! Do the excitation (i-->a)(ispin) + (b-->r)(other_spin(ispin)) - integer :: i_ok,corb,dorb - call do_mono_excitation(det_tmp,iorb,aorb,ispin,i_ok) - if(i_ok .ne. 1)then - do state_target = 1, N_states - pert_det_coef(a,b,ispin,state_target) = -100000.d0 - enddo - do inint = 1, N_int - pert_det(inint,1,a,b,ispin) = 0_bit_kind - pert_det(inint,2,a,b,ispin) = 0_bit_kind - enddo - cycle - endif - call do_mono_excitation(det_tmp,borb,rorb,jspin,i_ok) - if(i_ok .ne. 1)then - do state_target = 1, N_states - pert_det_coef(a,b,ispin,state_target) = -100000.d0 - enddo - do inint = 1, N_int - pert_det(inint,1,a,b,ispin) = 0_bit_kind - pert_det(inint,2,a,b,ispin) = 0_bit_kind - enddo - cycle - endif - do inint = 1, N_int - pert_det(inint,1,a,b,ispin) = det_tmp(inint,1) - pert_det(inint,2,a,b,ispin) = det_tmp(inint,2) - enddo - - call i_H_j(psi_ref(1,1,idet),det_tmp,N_int,hidouble) - do state_target = 1, N_states - delta_e(state_target) = one_anhil_one_creat(a,b,ispin,jspin,state_target) + delta_e_inact_virt(state_target) - pert_det_coef(a,b,ispin,state_target) = hidouble / delta_e(state_target) - matrix_1h1p(idet,idet,state_target) += hidouble * pert_det_coef(a,b,ispin,state_target) - enddo - enddo - enddo - enddo - do jdet = 1, idx(0) - if(idx(jdet).ne.idet)then - call get_double_excitation(psi_ref(1,1,idet),psi_ref(1,1,idx(jdet)),exc,phase,N_int) - integer :: c,d,state_target - integer(bit_kind) :: det_tmp_bis(N_int,2) - ! excitation from I --> J - ! (a->c) (alpha) + (b->d) (beta) - aorb = exc(1,1,1) - corb = exc(1,2,1) - c = list_act_reverse(corb) - borb = exc(1,1,2) - dorb = exc(1,2,2) - d = list_act_reverse(dorb) - ispin = 1 - jspin = 2 - do inint = 1, N_int - det_tmp(inint,1) = pert_det(inint,1,c,d,1) - det_tmp(inint,2) = pert_det(inint,2,c,d,1) - det_tmp_bis(inint,1) = pert_det(inint,1,c,d,2) - det_tmp_bis(inint,2) = pert_det(inint,2,c,d,2) - enddo - double precision :: hjdouble_1,hjdouble_2 - call i_H_j(psi_ref(1,1,idx(jdet)),det_tmp,N_int,hjdouble_1) - call i_H_j(psi_ref(1,1,idx(jdet)),det_tmp_bis,N_int,hjdouble_2) - do state_target = 1, N_states - matrix_1h1p(idx(jdet),idet,state_target) += (pert_det_coef(c,d,1,state_target) * hjdouble_1 + pert_det_coef(c,d,2,state_target) * hjdouble_2 ) - enddo - endif - enddo - - - - enddo - enddo - enddo - - - - - -end - - diff --git a/src/mrpt_utils/new_way_second_order_coef.irp.f b/src/mrpt_utils/new_way_second_order_coef.irp.f deleted file mode 100644 index 170d3f5e..00000000 --- a/src/mrpt_utils/new_way_second_order_coef.irp.f +++ /dev/null @@ -1,796 +0,0 @@ -subroutine give_2h1p_contrib_sec_order(matrix_2h1p) - use bitmasks - implicit none - double precision , intent(inout) :: matrix_2h1p(N_det,N_det,*) - integer :: i,j,r,a,b - integer :: iorb, jorb, rorb, aorb, borb - integer :: ispin,jspin - integer :: idet,jdet - integer(bit_kind) :: perturb_dets(N_int,2,n_act_orb,2,2) - double precision :: perturb_dets_phase(n_act_orb,2,2) - double precision :: perturb_dets_hij(n_act_orb,2,2) - double precision :: coef_perturb_from_idet(n_act_orb,2,2,N_states,3) - integer :: inint - integer :: elec_num_tab_local(2),acu_elec - integer(bit_kind) :: det_tmp(N_int,2) - integer(bit_kind) :: det_tmp_j(N_int,2) - integer :: exc(0:2,2,2) - integer :: accu_elec - double precision :: get_mo_bielec_integral - double precision :: active_int(n_act_orb,2) - double precision :: hij,phase - integer :: index_orb_act_mono(N_det,6) -!matrix_2h1p = 0.d0 - - elec_num_tab_local = 0 - do inint = 1, N_int - elec_num_tab_local(1) += popcnt(psi_ref(inint,1,1)) - elec_num_tab_local(2) += popcnt(psi_ref(inint,2,1)) - enddo - do i = 1, n_inact_orb ! First inactive - iorb = list_inact(i) - do j = 1, n_inact_orb ! Second inactive - jorb = list_inact(j) - do r = 1, n_virt_orb ! First virtual - rorb = list_virt(r) - ! take all the integral you will need for i,j,r fixed - do a = 1, n_act_orb - aorb = list_act(a) - active_int(a,1) = get_mo_bielec_integral(iorb,jorb,rorb,aorb,mo_integrals_map) ! direct - active_int(a,2) = get_mo_bielec_integral(iorb,jorb,aorb,rorb,mo_integrals_map) ! exchange - perturb_dets_phase(a,1,1) = -1000.d0 - perturb_dets_phase(a,1,2) = -1000.d0 - perturb_dets_phase(a,2,2) = -1000.d0 - perturb_dets_phase(a,2,1) = -1000.d0 - enddo - - integer :: degree(N_det) - integer :: idx(0:N_det) - double precision :: delta_e(n_act_orb,2,N_states) - integer :: istate - - do idet = 1, N_det - call get_excitation_degree_vector_mono_or_exchange(psi_ref,psi_ref(1,1,idet),degree,N_int,N_det,idx) -! if(idet == 81)then -! call get_excitation_degree_vector_mono_or_exchange_verbose(psi_ref(1,1,1),psi_ref(1,1,idet),degree,N_int,N_det,idx) -! endif - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Precomputation of matrix elements - do ispin = 1, 2 ! spin of the couple a-a^dagger (i,r) - do jspin = 1, 2 ! spin of the couple z-a^dagger (j,a) - if(ispin == jspin .and. iorb.le.jorb)cycle ! condition not to double count - do a = 1, n_act_orb ! First active - aorb = list_act(a) - do inint = 1, N_int - det_tmp(inint,1) = psi_ref(inint,1,idet) - det_tmp(inint,2) = psi_ref(inint,2,idet) - enddo - ! Do the excitation inactive -- > virtual - call clear_bit_to_integer(iorb,det_tmp(1,ispin),N_int) ! hole in "iorb" of spin Ispin - call set_bit_to_integer(rorb,det_tmp(1,ispin),N_int) ! particle in "rorb" of spin Ispin - - ! Do the excitation inactive -- > active - call clear_bit_to_integer(jorb,det_tmp(1,jspin),N_int) ! hole in "jorb" of spin Jspin - call set_bit_to_integer(aorb,det_tmp(1,jspin),N_int) ! particle in "aorb" of spin Jspin - - ! Check if the excitation is possible or not on psi_ref(idet) - accu_elec= 0 - do inint = 1, N_int - accu_elec+= popcnt(det_tmp(inint,jspin)) - enddo - if(accu_elec .ne. elec_num_tab_local(jspin))then - perturb_dets_phase(a,jspin,ispin) = -1000.d0 - perturb_dets_hij(a,jspin,ispin) = 0.d0 - do istate = 1, N_states - coef_perturb_from_idet(a,jspin,ispin,istate,1) = 0.d0 - coef_perturb_from_idet(a,jspin,ispin,istate,2) = 0.d0 - enddo - cycle - endif - do inint = 1, N_int - perturb_dets(inint,1,a,jspin,ispin) = det_tmp(inint,1) - perturb_dets(inint,2,a,jspin,ispin) = det_tmp(inint,2) - enddo - call get_double_excitation(psi_ref(1,1,idet),det_tmp,exc,phase,N_int) - perturb_dets_phase(a,jspin,ispin) = phase - do istate = 1, N_states - delta_e(a,jspin,istate) = one_creat(a,jspin,istate) & - - fock_virt_total_spin_trace(rorb,istate) & - + fock_core_inactive_total_spin_trace(iorb,istate) & - + fock_core_inactive_total_spin_trace(jorb,istate) - enddo - if(ispin == jspin)then - perturb_dets_hij(a,jspin,ispin) = phase * (active_int(a,2) - active_int(a,1) ) - else - perturb_dets_hij(a,jspin,ispin) = phase * active_int(a,1) - endif -!!!!!!!!!!!!!!!!!!!!!1 Computation of the coefficient at first order coming from idet -!!!!!!!!!!!!!!!!!!!!! for the excitation (i,j)(ispin,jspin) ---> (r,a)(ispin,jspin) - do istate = 1, N_states - coef_perturb_from_idet(a,jspin,ispin,istate,1) = perturb_dets_hij(a,jspin,ispin) / delta_e(a,jspin,istate) - enddo - - enddo - enddo - enddo - - -!!!!!!!!!!!!!!!!!!!!!!!!!!! determination of the connections between I and the other J determinants mono excited in the CAS -!!!!!!!!!!!!!!!!!!!!!!!!!!!! the determinants I and J must be connected by the following operator -!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!! - integer :: i_hole,i_part - double precision :: hij_test - double precision :: fock_operator_local(n_act_orb,n_act_orb,2) - do jdet = 1, idx(0) - if(idx(jdet).ne.idet)then - if(degree(jdet)==1)then - call get_mono_excitation(psi_ref(1,1,idet),psi_ref(1,1,idx(jdet)),exc,phase,N_int) - if (exc(0,1,1) == 1) then - ! Mono alpha - i_hole = list_act_reverse(exc(1,1,1)) !!! a_a - i_part = list_act_reverse(exc(1,2,1)) !!! a^{\dagger}_{b} - kspin = 1 !!! kspin - index_orb_act_mono(idx(jdet),1) = i_hole - index_orb_act_mono(idx(jdet),2) = i_part - index_orb_act_mono(idx(jdet),3) = kspin - call i_H_j_dyall(psi_active(1,1,idet),psi_active(1,1,idx(jdet)),N_int,hij) - fock_operator_local(i_hole,i_part,kspin) = hij * phase ! phase less fock operator - fock_operator_local(i_part,i_hole,kspin) = hij * phase ! phase less fock operator - else - ! Mono beta - i_hole = list_act_reverse(exc(1,1,2)) !!! a_a - i_part = list_act_reverse(exc(1,2,2)) !!! a^{\dagger}_{b} - kspin = 2 !!! kspin - index_orb_act_mono(idx(jdet),1) = i_hole - index_orb_act_mono(idx(jdet),2) = i_part - index_orb_act_mono(idx(jdet),3) = kspin - call i_H_j_dyall(psi_active(1,1,idet),psi_active(1,1,idx(jdet)),N_int,hij) - fock_operator_local(i_hole,i_part,kspin) = hij * phase ! phase less fock operator - fock_operator_local(i_part,i_hole,kspin) = hij * phase ! phase less fock operator - endif - else if(degree(jdet)==2)then - call get_double_excitation(psi_ref(1,1,idet),psi_ref(1,1,idx(jdet)),exc,phase,N_int) - ! Mono alpha - index_orb_act_mono(idx(jdet),1) = list_act_reverse(exc(1,1,1)) !!! a_a - index_orb_act_mono(idx(jdet),2) = list_act_reverse(exc(1,2,1)) !!! a^{\dagger}_{b} - index_orb_act_mono(idx(jdet),3) = 1 - ! Mono beta - index_orb_act_mono(idx(jdet),4) = list_act_reverse(exc(1,1,2)) !!! a_a - index_orb_act_mono(idx(jdet),5) = list_act_reverse(exc(1,2,2)) !!! a^{\dagger}_{b} - index_orb_act_mono(idx(jdet),6) = 2 - endif - else - index_orb_act_mono(idx(jdet),1) = -1 - endif - enddo - - integer :: kspin - integer :: corb,i_ok - integer(bit_kind) :: det_tmp_bis(N_int,2) - double precision :: hib , hab , hja - double precision :: delta_e_ab(N_states) - double precision :: hib_test,hja_test,hab_test - do jdet = 1, idx(0) - if(idx(jdet).ne.idet)then -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CASE OF THE MONO EXCITATIONS - if(degree(jdet) == 1)then - ! ! two determinants | Idet > and | Jdet > which are connected throw a mono excitation operator - ! ! are connected by the presence of the perturbers determinants |det_tmp> - aorb = index_orb_act_mono(idx(jdet),1) ! a^{\dagger}_{aorb} - borb = index_orb_act_mono(idx(jdet),2) ! a_{borb} - kspin = index_orb_act_mono(idx(jdet),3) ! spin of the excitation - do ispin = 1, 2 ! you loop on all possible spin for the excitation - ! a^{\dagger}_r a_{i} (ispin) - ! ! the determinants Idet and Jdet interact throw the following operator - ! ! | Jdet > = a_{borb,kspin} a^{\dagger}_{aorb, kspin} | Idet > - do jspin = 1, 2 - if (jspin .ne. kspin)then - - do corb = 1, n_act_orb - if(perturb_dets_phase(corb,jspin,ispin).le.-100d0)cycle - ! ! | det_tmp > = a^{\dagger}_{rorb,ispin} a^{\dagger}_{corb,kspin} a_{jorb,kspin} a_{iorb,ispin} | Idet > - do inint = 1, N_int - det_tmp(inint,1) = perturb_dets(inint,1,corb,jspin,ispin) - det_tmp(inint,2) = perturb_dets(inint,2,corb,jspin,ispin) - det_tmp_bis(inint,1) = perturb_dets(inint,1,corb,jspin,ispin) - det_tmp_bis(inint,2) = perturb_dets(inint,2,corb,jspin,ispin) - enddo - ! ! < idet | H | det_tmp > = phase * (ir|cv) - call get_double_excitation(psi_ref(1,1,idet),det_tmp,exc,phase,N_int) - if(ispin == jspin)then - hib= phase * (active_int(corb,1) - active_int(corb,2)) - else - hib= phase * active_int(corb,1) - endif - - ! | det_tmp_bis > = a^{\dagger}_{borb,kspin} a_{aorb,kspin} | det_tmp > - call do_mono_excitation(det_tmp_bis,list_act(aorb),list_act(borb),kspin,i_ok) - if(i_ok .ne. 1)cycle - call get_mono_excitation(det_tmp,det_tmp_bis,exc,phase,N_int) - - ! < det_tmp | H | det_tmp_bis > = F_{aorb,borb} - hab = (fock_operator_local(aorb,borb,kspin) ) * phase - if(hab /= hab)then ! check NaN - print*, '1' - stop - endif - ! < jdet | H | det_tmp_bis > = phase * (ir|cv) - call get_double_excitation(det_tmp_bis,psi_ref(1,1,idx(jdet)),exc,phase,N_int) - if(ispin == jspin)then - hja= phase * (active_int(corb,1) - active_int(corb,2)) - else - hja= phase * (active_int(corb,1)) - endif - do istate = 1, N_states - delta_e_ab(istate) = delta_e(corb,jspin,istate) + one_anhil_one_creat(borb,aorb,kspin,kspin,istate) - matrix_2h1p(idx(jdet),idet,istate) = matrix_2h1p(idx(jdet),idet,istate) + & - hib / delta_e(corb,jspin,istate) * hab / delta_e_ab(istate) * hja - ! ! < det_tmp | H | Idet > / delta_E (Idet --> det_tmp ) - ! ! < det_tmp | H | det_tmp_bis > / delta_E (Idet --> det_tmp --> det_tmp_bis) - ! ! < det_tmp_bis | H | Jdet > - enddo - enddo ! corb - else - if(ispin == kspin .and. iorb.le.jorb)cycle ! condition not to double count - do corb = 1, n_act_orb - if(corb == aorb .or. corb == borb) cycle - if(perturb_dets_phase(corb,jspin,ispin).le.-100d0)cycle - ! ! | det_tmp > = a^{\dagger}_{rorb,ispin} a^{\dagger}_{vorb,kspin} a_{corb,jspin} a_{iorb,ispin} | Idet > - do inint = 1, N_int - det_tmp(inint,1) = perturb_dets(inint,1,corb,jspin,ispin) - det_tmp(inint,2) = perturb_dets(inint,2,corb,jspin,ispin) - det_tmp_bis(inint,1) = perturb_dets(inint,1,corb,jspin,ispin) - det_tmp_bis(inint,2) = perturb_dets(inint,2,corb,jspin,ispin) - enddo - ! < idet | H | det_tmp > = phase * ( (ir|cv) - (iv|cr) ) - call get_double_excitation(psi_ref(1,1,idet),det_tmp,exc,phase,N_int) - if(ispin == jspin)then - hib= phase * (active_int(corb,1) - active_int(corb,2)) - else - hib= phase * active_int(corb,1) - endif - ! | det_tmp_bis > = a^{\dagger}_{borb,kspin} a_{aorb,kspin} | det_tmp > - call do_mono_excitation(det_tmp_bis,list_act(aorb),list_act(borb),kspin,i_ok) - if(i_ok .ne. 1)cycle - call get_mono_excitation(det_tmp,det_tmp_bis,exc,phase,N_int) -! ! < det_tmp | H | det_tmp_bis > = F_{aorb,borb} - hab = fock_operator_local(aorb,borb,kspin) * phase - if(hab /= hab)then ! check NaN - print*, '2' - stop - endif - ! < jdet | H | det_tmp_bis > = phase * ( (ir|cv) - (iv|cr) ) - call get_double_excitation(det_tmp_bis,psi_ref(1,1,idx(jdet)),exc,phase,N_int) - if(ispin == jspin)then - hja= phase * (active_int(corb,1) - active_int(corb,2)) - else - hja= phase * (active_int(corb,1)) - endif - do istate = 1, N_states - delta_e_ab(istate) = delta_e(corb,jspin,istate) + one_anhil_one_creat(borb,aorb,kspin,kspin,istate) - matrix_2h1p(idx(jdet),idet,istate) = matrix_2h1p(idx(jdet),idet,istate) + & - hib / delta_e(corb,jspin,istate) * hab / delta_e_ab(istate) * hja - ! ! < det_tmp | H | Idet > / delta_E (Idet --> det_tmp ) - ! ! < det_tmp | H | det_tmp_bis > / delta_E (Idet --> det_tmp --> det_tmp_bis) - ! ! < det_tmp_bis | H | Jdet > - enddo - enddo ! corb - endif - enddo - enddo - ! - else !! Double excitation operators - ! - if (index_orb_act_mono(idx(jdet),1) == index_orb_act_mono(idx(jdet),5))then !! spin exchange - do ispin = 1, 2 ! you loop on all possible spin for the excitation - ! a^{\dagger}_r a_{i} (ispin) - !!! ! first combination of spin :: | det_tmp > = a^{\dagger}_{aorb,beta} | Idet > - jspin = 2 - aorb = index_orb_act_mono(idx(jdet),1) ! hole of the alpha electron - borb = index_orb_act_mono(idx(jdet),2) ! particle of the alpha electron - if(perturb_dets_phase(aorb,jspin,ispin).le.-100d0)cycle - do inint = 1, N_int - det_tmp(inint,1) = perturb_dets(inint,1,aorb,jspin,ispin) - det_tmp(inint,2) = perturb_dets(inint,2,aorb,jspin,ispin) - det_tmp_bis(inint,1) = perturb_dets(inint,1,aorb,jspin,ispin) - det_tmp_bis(inint,2) = perturb_dets(inint,2,aorb,jspin,ispin) - enddo - ! | det_tmp > = a^{\dagger}_{aorb,beta} | Idet > - call get_double_excitation(det_tmp,psi_ref(1,1,idet),exc,phase,N_int) - if(ispin == jspin)then - hib= phase * (active_int(aorb,1) - active_int(aorb,2)) - else - hib= phase * (active_int(aorb,1)) - endif - if(hib .ne. perturb_dets_hij(aorb,jspin,ispin))then - print*, 'pb !!' - print*, 'hib .ne. perturb_dets_hij(aorb,jspin,ispin)' - stop - endif - enddo !! ispin - - else if(index_orb_act_mono(idx(jdet),1) == index_orb_act_mono(idx(jdet),4))then !! closed shell double excitation - - else - call get_excitation(psi_ref(1,1,idet),psi_ref(1,1,idx(jdet)),exc,degree_scalar,phase,N_int) - integer :: h1,h2,p1,p2,s1,s2 , degree_scalar - call decode_exc(exc,degree,h1,p1,h2,p2,s1,s2) - print*, h1,p1,h2,p2,s1,s2 - call debug_det(psi_ref(1,1,idet),N_int) - call debug_det(psi_ref(1,1,idx(jdet)),N_int) - print*, idet,idx(jdet) - print*, 'pb !!!!!!!!!!!!!' - call get_excitation_degree_vector_mono_or_exchange_verbose(psi_ref(1,1,1),psi_ref(1,1,idet),degree,N_int,N_det,idx) - stop - endif - endif - - else - !! diagonal part of the dressing : interaction of | Idet > with all the perturbers generated by the excitations - !! - !! | det_tmp > = a^{\dagger}_{rorb,ispin} a^{\dagger}_{aorb,kspin} a_{jorb,kspin} a_{iorb,ispin} | Idet > - !!do ispin = 1, 2 - !! do kspin = 1, 2 - !! if(ispin == kspin .and. iorb.le.jorb)cycle ! condition not to double count - !! do a = 1, n_act_orb ! First active - !! do istate = 1, N_states - !! matrix_2h1p(idet,idet,istate) += coef_perturb_from_idet(a,kspin,ispin,istate,2) * perturb_dets_hij(a,kspin,ispin) - !! enddo - !! enddo - !! enddo - !!enddo - ! - endif - - enddo - enddo - enddo - enddo - enddo - - - - - -end - - -subroutine give_1h2p_contrib_sec_order(matrix_1h2p) - use bitmasks - implicit none - double precision , intent(inout) :: matrix_1h2p(N_det,N_det,*) - integer :: i,v,r,a,b,c - integer :: iorb, vorb, rorb, aorb, borb,corb - integer :: ispin,jspin - integer :: idet,jdet - integer(bit_kind) :: perturb_dets(N_int,2,n_act_orb,2,2) - double precision :: perturb_dets_phase(n_act_orb,2,2) - double precision :: perturb_dets_hij(n_act_orb,2,2) - double precision :: perturb_dets_hpsi0(n_act_orb,2,2,N_states) - double precision :: coef_perturb_from_idet(n_act_orb,2,2,N_states,2) - logical :: already_generated(n_act_orb,2,2) - integer :: inint - integer :: elec_num_tab_local(2),acu_elec - integer(bit_kind) :: det_tmp(N_int,2) - integer(bit_kind) :: det_tmp_j(N_int,2) - integer :: exc(0:2,2,2) - integer :: accu_elec - double precision :: get_mo_bielec_integral - double precision :: active_int(n_act_orb,2) - double precision :: hij,phase - double precision :: accu_contrib - integer :: degree(N_det) - integer :: idx(0:N_det) - double precision :: delta_e(n_act_orb,2,N_states) - integer :: istate - integer :: index_orb_act_mono(N_det,6) - double precision :: delta_e_inactive_virt(N_states) - integer :: kspin - double precision :: delta_e_ja(N_states) - double precision :: hja - double precision :: contrib_hij - double precision :: fock_operator_local(n_act_orb,n_act_orb,2) - double precision :: fock_operator_from_core(n_act_orb,n_act_orb) - double precision :: fock_operator_from_virt(n_act_orb,n_act_orb) - double precision :: fock_operator_from_act(n_act_orb,n_act_orb,n_act_orb,2) - accu_contrib = 0.d0 -!matrix_1h2p = 0.d0 - - elec_num_tab_local = 0 - do inint = 1, N_int - elec_num_tab_local(1) += popcnt(psi_ref(inint,1,1)) - elec_num_tab_local(2) += popcnt(psi_ref(inint,2,1)) - enddo - do i = 1, n_inact_orb ! First inactive - iorb = list_inact(i) - do v = 1, n_virt_orb ! First virtual - vorb = list_virt(v) - do r = 1, n_virt_orb ! Second virtual - rorb = list_virt(r) - ! take all the integral you will need for i,j,r fixed - do a = 1, n_act_orb - aorb = list_act(a) - active_int(a,1) = get_mo_bielec_integral(iorb,aorb,rorb,vorb,mo_integrals_map) ! direct - active_int(a,2) = get_mo_bielec_integral(iorb,aorb,vorb,rorb,mo_integrals_map) ! exchange - perturb_dets_phase(a,1,1) = -1000.d0 - perturb_dets_phase(a,1,2) = -1000.d0 - perturb_dets_phase(a,2,2) = -1000.d0 - perturb_dets_phase(a,2,1) = -1000.d0 - already_generated(a,1,1) = .False. - already_generated(a,1,2) = .False. - already_generated(a,2,2) = .False. - already_generated(a,2,1) = .False. - enddo - - - do istate = 1, N_states - delta_e_inactive_virt(istate) = & - - fock_virt_total_spin_trace(rorb,istate) & - - fock_virt_total_spin_trace(vorb,istate) & - + fock_core_inactive_total_spin_trace(iorb,istate) - enddo - do idet = 1, N_det - call get_excitation_degree_vector_mono_or_exchange(psi_ref,psi_ref(1,1,idet),degree,N_int,N_det,idx) - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Precomputation of matrix elements - do ispin = 1, 2 ! spin of the couple a-a^dagger (iorb,rorb) - do jspin = 1, 2 ! spin of the couple a-a^dagger (aorb,vorb) - do a = 1, n_act_orb ! First active - aorb = list_act(a) - do istate = 1, N_states - perturb_dets_hpsi0(a,jspin,ispin,istate) = 0.d0 - coef_perturb_from_idet(a,jspin,ispin,istate,1) = 0.d0 - coef_perturb_from_idet(a,jspin,ispin,istate,2) = 0.d0 - enddo - if(ispin == jspin .and. vorb.le.rorb)cycle ! condition not to double count - do inint = 1, N_int - det_tmp(inint,1) = psi_ref(inint,1,idet) - det_tmp(inint,2) = psi_ref(inint,2,idet) - enddo - ! Do the excitation inactive -- > virtual - call clear_bit_to_integer(iorb,det_tmp(1,ispin),N_int) ! hole in "iorb" of spin Ispin - call set_bit_to_integer(rorb,det_tmp(1,ispin),N_int) ! particle in "rorb" of spin Ispin - - ! Do the excitation active -- > virtual - call clear_bit_to_integer(aorb,det_tmp(1,jspin),N_int) ! hole in "aorb" of spin Jspin - call set_bit_to_integer(vorb,det_tmp(1,jspin),N_int) ! particle in "vorb" of spin Jspin - - ! Check if the excitation is possible or not on psi_ref(idet) - accu_elec= 0 - do inint = 1, N_int - accu_elec+= popcnt(det_tmp(inint,jspin)) - enddo - if(accu_elec .ne. elec_num_tab_local(jspin))then - perturb_dets_phase(a,jspin,ispin) = -1000.0d0 - perturb_dets_hij(a,jspin,ispin) = 0.d0 - do istate = 1, N_states - coef_perturb_from_idet(a,jspin,ispin,istate,1) = 0.d0 - coef_perturb_from_idet(a,jspin,ispin,istate,2) = 0.d0 - enddo - cycle - endif - do inint = 1, N_int - perturb_dets(inint,1,a,jspin,ispin) = det_tmp(inint,1) - perturb_dets(inint,2,a,jspin,ispin) = det_tmp(inint,2) - enddo - do inint = 1, N_int - det_tmp(inint,1) = perturb_dets(inint,1,a,jspin,ispin) - det_tmp(inint,2) = perturb_dets(inint,2,a,jspin,ispin) - enddo - - call get_double_excitation(psi_ref(1,1,idet),det_tmp,exc,phase,N_int) - perturb_dets_phase(a,jspin,ispin) = phase - - do istate = 1, N_states - delta_e(a,jspin,istate) = one_anhil(a,jspin,istate) + delta_e_inactive_virt(istate) - enddo - if(ispin == jspin)then - perturb_dets_hij(a,jspin,ispin) = phase * (active_int(a,1) - active_int(a,2) ) - else - perturb_dets_hij(a,jspin,ispin) = phase * active_int(a,1) - endif - enddo - enddo - enddo - -!!!!!!!!!!!!!!!!!!!!!!!!!!! determination of the connections between I and the other J determinants mono excited in the CAS -!!!!!!!!!!!!!!!!!!!!!!!!!!!! the determinants I and J must be connected by the following operator -!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!! - integer :: i_hole,i_part - double precision :: hij_test - do jdet = 1, idx(0) - if(idx(jdet).ne.idet)then - if(degree(jdet)==1)then - call get_mono_excitation(psi_ref(1,1,idet),psi_ref(1,1,idx(jdet)),exc,phase,N_int) - if (exc(0,1,1) == 1) then - ! Mono alpha - i_hole = list_act_reverse(exc(1,1,1)) !!! a_a - i_part = list_act_reverse(exc(1,2,1)) !!! a^{\dagger}_{b} - kspin = 1 !!! kspin - index_orb_act_mono(idx(jdet),1) = i_hole - index_orb_act_mono(idx(jdet),2) = i_part - index_orb_act_mono(idx(jdet),3) = kspin - call i_H_j_dyall(psi_active(1,1,idet),psi_active(1,1,idx(jdet)),N_int,hij) - fock_operator_local(i_hole,i_part,kspin) = hij * phase ! phase less fock operator - fock_operator_local(i_part,i_hole,kspin) = hij * phase ! phase less fock operator - else - ! Mono beta - i_hole = list_act_reverse(exc(1,1,2)) !!! a_a - i_part = list_act_reverse(exc(1,2,2)) !!! a^{\dagger}_{b} - kspin = 2 !!! kspin - index_orb_act_mono(idx(jdet),1) = i_hole - index_orb_act_mono(idx(jdet),2) = i_part - index_orb_act_mono(idx(jdet),3) = kspin - call i_H_j_dyall(psi_active(1,1,idet),psi_active(1,1,idx(jdet)),N_int,hij) - fock_operator_local(i_hole,i_part,kspin) = hij * phase ! phase less fock operator - fock_operator_local(i_part,i_hole,kspin) = hij * phase ! phase less fock operator - endif - else if(degree(jdet)==2)then - call get_double_excitation(psi_ref(1,1,idet),psi_ref(1,1,idx(jdet)),exc,phase,N_int) - ! Mono alpha - index_orb_act_mono(idx(jdet),1) = list_act_reverse(exc(1,1,1)) !!! a_a - index_orb_act_mono(idx(jdet),2) = list_act_reverse(exc(1,2,1)) !!! a^{\dagger}_{b} - index_orb_act_mono(idx(jdet),3) = 1 - ! Mono beta - index_orb_act_mono(idx(jdet),4) = list_act_reverse(exc(1,1,2)) !!! a_a - index_orb_act_mono(idx(jdet),5) = list_act_reverse(exc(1,2,2)) !!! a^{\dagger}_{b} - index_orb_act_mono(idx(jdet),6) = 2 - endif - else - index_orb_act_mono(idx(jdet),1) = -1 - endif - enddo - - integer ::dorb,i_ok - integer(bit_kind) :: det_tmp_bis(N_int,2) - double precision :: hib , hab - double precision :: delta_e_ab(N_states) - double precision :: hib_test,hja_test,hab_test - - - do jdet = 1, idx(0) - if(idx(jdet).ne.idet)then -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CASE OF THE MONO EXCITATIONS - if(degree(jdet) == 1)then - ! two determinants | Idet > and | Jdet > which are connected throw a mono excitation operator - ! are connected by the presence of the perturbers determinants |det_tmp> - aorb = index_orb_act_mono(idx(jdet),1) ! a_{aorb} - borb = index_orb_act_mono(idx(jdet),2) ! a^{\dagger}_{borb} - kspin = index_orb_act_mono(idx(jdet),3) ! spin of the excitation - ! the determinants Idet and Jdet interact throw the following operator - ! | Jdet > = a^{\dagger}_{borb,kspin} a_{aorb, kspin} | Idet > - - do ispin = 1, 2 ! you loop on all possible spin for the excitation - ! a^{\dagger}_r a_{i} (ispin) - if(ispin == kspin .and. vorb.le.rorb)cycle ! condition not to double count - do jspin = 1, 2 - if (jspin .ne. kspin)then - do corb = 1, n_act_orb - if(perturb_dets_phase(corb,jspin,ispin).le.-100d0)cycle - ! | det_tmp > = a^{\dagger}_{rorb,ispin} a^{\dagger}_{vorb,kspin} a_{corb,kspin} a_{iorb,ispin} | Idet > - do inint = 1, N_int - det_tmp(inint,1) = perturb_dets(inint,1,corb,jspin,ispin) - det_tmp(inint,2) = perturb_dets(inint,2,corb,jspin,ispin) - det_tmp_bis(inint,1) = perturb_dets(inint,1,corb,jspin,ispin) - det_tmp_bis(inint,2) = perturb_dets(inint,2,corb,jspin,ispin) - enddo - ! < idet | H | det_tmp > = phase * (ir|cv) - call get_double_excitation(psi_ref(1,1,idet),det_tmp,exc,phase,N_int) - if(ispin == jspin)then - hib= phase * (active_int(corb,1) - active_int(corb,2)) - else - hib= phase * active_int(corb,1) - endif - - ! | det_tmp_bis > = a^{\dagger}_{borb,kspin} a_{aorb,kspin} | det_tmp > - call do_mono_excitation(det_tmp_bis,list_act(aorb),list_act(borb),kspin,i_ok) - if(i_ok .ne. 1)cycle - call get_mono_excitation(det_tmp,det_tmp_bis,exc,phase,N_int) - - ! < det_tmp | H | det_tmp_bis > = F_{aorb,borb} - hab = (fock_operator_local(aorb,borb,kspin) ) * phase - ! < jdet | H | det_tmp_bis > = phase * (ir|cv) - call get_double_excitation(det_tmp_bis,psi_ref(1,1,idx(jdet)),exc,phase,N_int) - if(ispin == jspin)then - hja= phase * (active_int(corb,1) - active_int(corb,2)) - else - hja= phase * (active_int(corb,1)) - endif - do istate = 1, N_states - delta_e_ab(istate) = delta_e(corb,jspin,istate) + one_anhil_one_creat(borb,aorb,kspin,kspin,istate) - matrix_1h2p(idx(jdet),idet,istate) = matrix_1h2p(idx(jdet),idet,istate) + & - hib / delta_e(corb,jspin,istate) * hab / delta_e_ab(istate) * hja - ! < det_tmp | H | Idet > / delta_E (Idet --> det_tmp ) - ! < det_tmp | H | det_tmp_bis > / delta_E (Idet --> det_tmp --> det_tmp_bis) - ! < det_tmp_bis | H | Jdet > - enddo - enddo ! corb - else - do corb = 1, n_act_orb - if(corb == aorb .or. corb == borb) cycle - if(perturb_dets_phase(corb,jspin,ispin).le.-100d0)cycle - ! | det_tmp > = a^{\dagger}_{rorb,ispin} a^{\dagger}_{vorb,kspin} a_{corb,jspin} a_{iorb,ispin} | Idet > - do inint = 1, N_int - det_tmp(inint,1) = perturb_dets(inint,1,corb,jspin,ispin) - det_tmp(inint,2) = perturb_dets(inint,2,corb,jspin,ispin) - det_tmp_bis(inint,1) = perturb_dets(inint,1,corb,jspin,ispin) - det_tmp_bis(inint,2) = perturb_dets(inint,2,corb,jspin,ispin) - enddo - ! < idet | H | det_tmp > = phase * ( (ir|cv) - (iv|cr) ) - call get_double_excitation(psi_ref(1,1,idet),det_tmp,exc,phase,N_int) - if(ispin == jspin)then - hib= phase * (active_int(corb,1) - active_int(corb,2)) - else - hib= phase * active_int(corb,1) - endif - ! | det_tmp_bis > = a^{\dagger}_{borb,kspin} a_{aorb,kspin} | det_tmp > - call do_mono_excitation(det_tmp_bis,list_act(aorb),list_act(borb),kspin,i_ok) - if(i_ok .ne. 1)cycle - call get_mono_excitation(det_tmp,det_tmp_bis,exc,phase,N_int) -! ! < det_tmp | H | det_tmp_bis > = F_{aorb,borb} - hab = fock_operator_local(aorb,borb,kspin) * phase - ! < jdet | H | det_tmp_bis > = phase * ( (ir|cv) - (iv|cr) ) - call get_double_excitation(det_tmp_bis,psi_ref(1,1,idx(jdet)),exc,phase,N_int) - if(ispin == jspin)then - hja= phase * (active_int(corb,1) - active_int(corb,2)) - else - hja= phase * (active_int(corb,1)) - endif - do istate = 1, N_states - delta_e_ab(istate) = delta_e(corb,jspin,istate) + one_anhil_one_creat(borb,aorb,kspin,kspin,istate) - matrix_1h2p(idx(jdet),idet,istate) = matrix_1h2p(idx(jdet),idet,istate) + & - hib / delta_e(corb,jspin,istate) * hab / delta_e_ab(istate) * hja - ! < det_tmp | H | Idet > / delta_E (Idet --> det_tmp ) - ! < det_tmp | H | det_tmp_bis > / delta_E (Idet --> det_tmp --> det_tmp_bis) - ! < det_tmp_bis | H | Jdet > - enddo - enddo ! corb - - endif - enddo ! jspin - enddo ! ispin - else -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Case of double excitations !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! a^{\dagger}_r a_{i} (ispin) - aorb = index_orb_act_mono(idx(jdet),4) ! hole of a beta electron - borb = index_orb_act_mono(idx(jdet),5) ! propagation of the hole :: mono excitation of alpha spin - do ispin = 1, 2 ! you loop on all possible spin for the excitation - ! a^{\dagger}_r a_{i} (ispin) - ! ! first combination of spin :: | det_tmp > = a_{aorb,beta} | Idet > - jspin = 2 - if(perturb_dets_phase(aorb,jspin,ispin).le.-100d0)cycle - do inint = 1, N_int - det_tmp(inint,1) = perturb_dets(inint,1,aorb,jspin,ispin) - det_tmp(inint,2) = perturb_dets(inint,2,aorb,jspin,ispin) - det_tmp_bis(inint,1) = perturb_dets(inint,1,aorb,jspin,ispin) - det_tmp_bis(inint,2) = perturb_dets(inint,2,aorb,jspin,ispin) - enddo - call get_double_excitation(det_tmp,psi_ref(1,1,idet),exc,phase,N_int) - if(ispin == jspin)then - hib= phase * (active_int(borb,1) - active_int(borb,2)) - else - hib= phase * (active_int(borb,1)) - endif - if( index_orb_act_mono(idx(jdet),1) == index_orb_act_mono(idx(jdet),5))then - call do_mono_excitation(det_tmp_bis,list_act(borb),list_act(aorb),1,i_ok) - if(i_ok .ne. 1)then - call debug_det(psi_ref(1,1,idet),N_int) - call debug_det(psi_ref(1,1,idx(jdet)),N_int) - print*, aorb, borb - call debug_det(det_tmp,N_int) - stop - endif - else - call do_mono_excitation(det_tmp_bis,list_act(aorb),list_act(borb),1,i_ok) - endif - - if(i_ok .ne. 1)cycle - call get_mono_excitation(det_tmp,det_tmp_bis,exc,phase,N_int) - ! < det_tmp | H | det_tmp_bis > = F_{aorb,borb} - if (aorb == borb)then - print*, 'iahaha' - stop - endif - hab = fock_operator_local(aorb,borb,1) * phase - call get_double_excitation(det_tmp_bis,psi_ref(1,1,idx(jdet)),exc,phase,N_int) - if(ispin == jspin)then - hja= phase * (active_int(borb,1) - active_int(borb,2)) - else - hja= phase * (active_int(borb,1)) - endif - do istate = 1, N_states - delta_e_ab(istate) = delta_e(aorb,jspin,istate) + one_anhil_one_creat(borb,aorb,1,1,istate) - matrix_1h2p(idx(jdet),idet,istate) = matrix_1h2p(idx(jdet),idet,istate) + & - hib / delta_e(aorb,jspin,istate) * hab / delta_e_ab(istate) * hja - ! < det_tmp | H | Idet > / delta_E (Idet --> det_tmp ) - ! < det_tmp | H | det_tmp_bis > / delta_E (Idet --> det_tmp --> det_tmp_bis) - ! < det_tmp_bis | H | Jdet > - enddo !! istate - - ! ! second combination of spin :: | det_tmp > = a_{aorb,alpha} | Idet > - jspin = 1 - if(perturb_dets_phase(aorb,jspin,ispin).le.-100d0)cycle - do inint = 1, N_int - det_tmp(inint,1) = perturb_dets(inint,1,aorb,jspin,ispin) - det_tmp(inint,2) = perturb_dets(inint,2,aorb,jspin,ispin) - det_tmp_bis(inint,1) = perturb_dets(inint,1,aorb,jspin,ispin) - det_tmp_bis(inint,2) = perturb_dets(inint,2,aorb,jspin,ispin) - enddo - call get_double_excitation(det_tmp,psi_ref(1,1,idet),exc,phase,N_int) - if(ispin == jspin)then - hib= phase * (active_int(borb,1) - active_int(borb,2)) - else - hib= phase * (active_int(borb,1)) - endif - if( index_orb_act_mono(idx(jdet),1) == index_orb_act_mono(idx(jdet),5))then - call do_mono_excitation(det_tmp_bis,list_act(borb),list_act(aorb),2,i_ok) - if(i_ok .ne. 1)then - call debug_det(psi_ref(1,1,idet),N_int) - call debug_det(psi_ref(1,1,idx(jdet)),N_int) - print*, aorb, borb - call debug_det(det_tmp,N_int) - stop - endif - else - call do_mono_excitation(det_tmp_bis,list_act(aorb),list_act(borb),2,i_ok) - endif - - if(i_ok .ne. 1)cycle - call get_mono_excitation(det_tmp,det_tmp_bis,exc,phase,N_int) - ! < det_tmp | H | det_tmp_bis > = F_{aorb,borb} - hab = fock_operator_local(aorb,borb,2) * phase - call get_double_excitation(det_tmp_bis,psi_ref(1,1,idx(jdet)),exc,phase,N_int) - if(ispin == jspin)then - hja= phase * (active_int(borb,1) - active_int(borb,2)) - else - hja= phase * (active_int(borb,1)) - endif - do istate = 1, N_states - delta_e_ab(istate) = delta_e(aorb,jspin,istate) + one_anhil_one_creat(borb,aorb,1,1,istate) - matrix_1h2p(idx(jdet),idet,istate) = matrix_1h2p(idx(jdet),idet,istate) + & - hib / delta_e(aorb,jspin,istate) * hab / delta_e_ab(istate) * hja - ! < det_tmp | H | Idet > / delta_E (Idet --> det_tmp ) - ! < det_tmp | H | det_tmp_bis > / delta_E (Idet --> det_tmp --> det_tmp_bis) - ! < det_tmp_bis | H | Jdet > - enddo !! istate - enddo !! ispin - - - endif !! en of test if jdet is a single or a double excitation of type K_ab - - else !! jdet is idet - ! diagonal part of the dressing : interaction of | Idet > with all the perturbers generated by the excitations - ! - ! | det_tmp > = a^{\dagger}_{rorb,ispin} a^{\dagger}_{vorb,kspin} a_{aorb,kspin} a_{iorb,ispin} | Idet > - do ispin = 1, 2 - do kspin = 1, 2 - do a = 1, n_act_orb ! First active - if( perturb_dets_phase(a,kspin,ispin) .le. -10.d0)cycle - if(ispin == kspin .and. vorb.le.rorb)cycle ! condition not to double count - contrib_hij = perturb_dets_hij(a,kspin,ispin) * perturb_dets_hij(a,kspin,ispin) - do istate = 1, N_states -! matrix_1h2p(idet,idet,istate) += contrib_hij * delta_e(a,kspin,istate) -! perturb_dets_hpsi0(a,kspin,ispin,istate) += psi_coef(idet,istate) * perturb_dets_hij(a,kspin,ispin) -! coef_perturb_from_idet(a,kspin,ispin,istate,1) += psi_coef(idet,istate) & -! * perturb_dets_hij(a,kspin,ispin) * delta_e(a,kspin,istate) - enddo - enddo - enddo - enddo - - endif - - enddo !! jdet - - - enddo - enddo - enddo - enddo - - - - - -end - diff --git a/src/mrpt_utils/psi_active_prov.irp.f b/src/mrpt_utils/psi_active_prov.irp.f deleted file mode 100644 index bfc2d9b0..00000000 --- a/src/mrpt_utils/psi_active_prov.irp.f +++ /dev/null @@ -1,579 +0,0 @@ - - use bitmasks -BEGIN_PROVIDER [integer(bit_kind), psi_active, (N_int,2,psi_det_size)] - BEGIN_DOC -! active part of psi - END_DOC - implicit none - use bitmasks - integer :: i,j,k,l - provide cas_bitmask -!print*, 'psi_active ' - do i = 1, N_det - do j = 1, N_int - psi_active(j,1,i) = iand(psi_ref(j,1,i),cas_bitmask(j,1,1)) - psi_active(j,2,i) = iand(psi_ref(j,2,i),cas_bitmask(j,1,1)) - enddo - enddo -END_PROVIDER - - -subroutine give_holes_and_particles_in_active_space(det_1,det_2,n_holes_spin,n_particles_spin,n_holes,n_particles,& - holes_active_list,particles_active_list) - implicit none - use bitmasks - integer(bit_kind),intent(in) :: det_1(N_int,2) - integer(bit_kind),intent(in ) :: det_2(N_int,2) - integer, intent(out) :: n_holes_spin(2),n_particles_spin(2) - integer, intent(out) :: n_holes,n_particles - integer, intent(out) :: holes_active_list(2 * n_act_orb,2) - integer, intent(out) :: particles_active_list(2 * n_act_orb,2) - integer :: i - integer(bit_kind) :: holes(N_int,2) - integer(bit_kind) :: particles(N_int,2) - integer(bit_kind) :: det_tmp_2(N_int,2),det_tmp_1(N_int,2) - BEGIN_DOC -! returns the holes and particles operators WITHIN THE ACTIVE SPACE -! that connect det_1 and det_2. By definition, the holes/particles -! are such that one starts from det_1 and goes to det_2 -! -! n_holes is the total number of holes -! n_particles is the total number of particles -! n_holes_spin is the number of number of holes per spin (1=alpha, 2=beta) -! n_particles_spin is the number of number of particles per spin (1=alpha, 2=beta) -! holes_active_list is the index of the holes per spin, that ranges from 1 to n_act_orb -! particles_active_list is the index of the particles per spin, that ranges from 1 to n_act_orb - END_DOC - - call give_active_part_determinant(det_1,det_tmp_1) - call give_active_part_determinant(det_2,det_tmp_2) - do i = 1, N_int - holes(i,1) = iand(det_tmp_1(i,1),xor(det_tmp_1(i,1),det_tmp_2(i,1))) - holes(i,2) = iand(det_tmp_1(i,2),xor(det_tmp_1(i,2),det_tmp_2(i,2))) - particles(i,1) = iand(det_tmp_2(i,1),xor(det_tmp_1(i,1),det_tmp_2(i,1))) - particles(i,2) = iand(det_tmp_2(i,2),xor(det_tmp_1(i,2),det_tmp_2(i,2))) - enddo - - integer :: holes_list(N_int*bit_kind_size,2) - holes_list = 0 - call bitstring_to_list(holes(1,1), holes_list(1,1), n_holes_spin(1), N_int) - call bitstring_to_list(holes(1,2), holes_list(1,2), n_holes_spin(2), N_int) - - n_holes = 0 - do i = 1, n_holes_spin(1) - n_holes +=1 - holes_active_list(i,1) = list_act_reverse(holes_list(i,1)) - enddo - do i = 1, n_holes_spin(2) - n_holes +=1 - holes_active_list(i,2) = list_act_reverse(holes_list(i,2)) - enddo - - - integer :: particles_list(N_int*bit_kind_size,2) - particles_list = 0 - call bitstring_to_list(particles(1,1), particles_list(1,1), n_particles_spin(1), N_int) - call bitstring_to_list(particles(1,2), particles_list(1,2), n_particles_spin(2), N_int) - n_particles = 0 - do i = 1, n_particles_spin(1) - n_particles += 1 - particles_active_list(i,1) = list_act_reverse(particles_list(i,1)) - enddo - do i = 1, n_particles_spin(2) - n_particles += 1 - particles_active_list(i,2) = list_act_reverse(particles_list(i,2)) - enddo - -end - -subroutine give_holes_in_inactive_space(det_1,n_holes_spin,n_holes,holes_list) - BEGIN_DOC -! returns the holes operators WITHIN THE INACTIVE SPACE -! that has lead to det_1. -! -! n_holes is the total number of holes -! n_holes_spin is the number of number of holes per spin (1=alpha, 2=beta) -! holes_inactive_list is the index of the holes per spin, that ranges from 1 to mo_tot_num - END_DOC - implicit none - use bitmasks - integer(bit_kind),intent(in) :: det_1(N_int,2) - integer, intent(out) :: n_holes_spin(2) - integer, intent(out) :: n_holes - integer, intent(out) :: holes_list(N_int*bit_kind_size,2) - integer :: i - integer(bit_kind) :: holes(N_int,2) - integer(bit_kind) :: det_tmp_1(N_int,2) - - call give_core_inactive_part_determinant(det_1,det_tmp_1) - - do i = 1, N_int - holes(i,1) = iand(reunion_of_core_inact_bitmask(i,1),xor(det_tmp_1(i,1),reunion_of_core_inact_bitmask(i,1))) - holes(i,2) = iand(reunion_of_core_inact_bitmask(i,2),xor(det_tmp_1(i,2),reunion_of_core_inact_bitmask(i,2))) - enddo - holes_list = 0 - call bitstring_to_list(holes(1,1), holes_list(1,1), n_holes_spin(1), N_int) - call bitstring_to_list(holes(1,2), holes_list(1,2), n_holes_spin(2), N_int) - n_holes = n_holes_spin(1) + n_holes_spin(2) - -end - -subroutine give_particles_in_virt_space(det_1,n_particles_spin,n_particles,particles_list) - BEGIN_DOC -! returns the holes operators WITHIN THE VIRTUAL SPACE -! that has lead to det_1. -! -! n_particles is the total number of particles -! n_particles_spin is the number of number of particles per spin (1=alpha, 2=beta) -! particles_inactive_list is the index of the particles per spin, that ranges from 1 to mo_tot_num - END_DOC - implicit none - use bitmasks - integer(bit_kind),intent(in) :: det_1(N_int,2) - integer, intent(out) :: n_particles_spin(2) - integer, intent(out) :: n_particles - integer, intent(out) :: particles_list(N_int*bit_kind_size,2) - integer :: i - integer(bit_kind) :: det_tmp_1(N_int,2) - integer(bit_kind) :: particles(N_int,2) - - call give_virt_part_determinant(det_1,det_tmp_1) - - do i = 1, N_int - particles(i,1) = iand(virt_bitmask(i,1),det_tmp_1(i,1)) - particles(i,2) = iand(virt_bitmask(i,2),det_tmp_1(i,2)) - enddo - - particles_list = 0 - call bitstring_to_list(particles(1,1), particles_list(1,1), n_particles_spin(1), N_int) - call bitstring_to_list(particles(1,2), particles_list(1,2), n_particles_spin(2), N_int) - n_particles = n_particles_spin(1) + n_particles_spin(2) - - -end - -subroutine get_delta_e_dyall(det_1,det_2,delta_e_final) - BEGIN_DOC - ! routine that returns the delta_e with the Moller Plesset and Dyall operators - ! - ! with det_1 being a determinant from the cas, and det_2 being a perturber - ! - ! Delta_e(det_1,det_2) = sum (hole) epsilon(hole) + sum(part) espilon(part) + delta_e(act) - ! - ! where hole is necessary in the inactive, part necessary in the virtuals - ! - ! and delta_e(act) is obtained from the contracted application of the excitation - ! - ! operator in the active space that lead from det_1 to det_2 - END_DOC - implicit none - use bitmasks - double precision, intent(out) :: delta_e_final(N_states) - integer(bit_kind), intent(in) :: det_1(N_int,2),det_2(N_int,2) - integer :: i,j,k,l - integer :: i_state - - integer :: n_holes_spin(2) - integer :: n_holes - integer :: holes_list(N_int*bit_kind_size,2) - - - double precision :: delta_e_inactive(N_states) - integer :: i_hole_inact - - call get_excitation_degree(det_1,det_2,degree,N_int) - if(degree>2)then - delta_e_final = -1.d+10 - return - endif - - call give_holes_in_inactive_space(det_2,n_holes_spin,n_holes,holes_list) - delta_e_inactive = 0.d0 - do i = 1, n_holes_spin(1) - i_hole_inact = holes_list(i,1) - do i_state = 1, N_states - delta_e_inactive += fock_core_inactive_total_spin_trace(i_hole_inact,i_state) - enddo - enddo - - do i = 1, n_holes_spin(2) - i_hole_inact = holes_list(i,2) - do i_state = 1, N_states - delta_e_inactive(i_state) += fock_core_inactive_total_spin_trace(i_hole_inact,i_state) - enddo - enddo - - double precision :: delta_e_virt(N_states) - integer :: i_part_virt - integer :: n_particles_spin(2) - integer :: n_particles - integer :: particles_list(N_int*bit_kind_size,2) - - call give_particles_in_virt_space(det_2,n_particles_spin,n_particles,particles_list) - delta_e_virt = 0.d0 - do i = 1, n_particles_spin(1) - i_part_virt = particles_list(i,1) - do i_state = 1, N_states - delta_e_virt += fock_virt_total_spin_trace(i_part_virt,i_state) - enddo - enddo - - do i = 1, n_particles_spin(2) - i_part_virt = particles_list(i,2) - do i_state = 1, N_states - delta_e_virt += fock_virt_total_spin_trace(i_part_virt,i_state) - enddo - enddo - - - integer :: n_holes_spin_act(2),n_particles_spin_act(2) - integer :: n_holes_act,n_particles_act - integer :: holes_active_list(2*n_act_orb,2) - integer :: holes_active_list_spin_traced(4*n_act_orb) - integer :: particles_active_list(2*n_act_orb,2) - integer :: particles_active_list_spin_traced(4*n_act_orb) - double precision :: delta_e_act(N_states) - delta_e_act = 0.d0 - call give_holes_and_particles_in_active_space(det_1,det_2,n_holes_spin_act,n_particles_spin_act, & - n_holes_act,n_particles_act,holes_active_list,particles_active_list) - integer :: icount,icountbis - integer :: hole_list_practical(2,elec_num_tab(1)+elec_num_tab(2)), particle_list_practical(2,elec_num_tab(1)+elec_num_tab(2)) - icount = 0 - icountbis = 0 - do i = 1, n_holes_spin_act(1) - icount += 1 - icountbis += 1 - hole_list_practical(1,icountbis) = 1 - hole_list_practical(2,icountbis) = holes_active_list(i,1) - holes_active_list_spin_traced(icount) = holes_active_list(i,1) - enddo - do i = 1, n_holes_spin_act(2) - icount += 1 - icountbis += 1 - hole_list_practical(1,icountbis) = 2 - hole_list_practical(2,icountbis) = holes_active_list(i,2) - holes_active_list_spin_traced(icount) = holes_active_list(i,2) - enddo - if(icount .ne. n_holes_act) then - print*,'' - print*, icount, n_holes_act - print * , 'pb in holes_active_list_spin_traced !!' - stop - endif - - icount = 0 - icountbis = 0 - do i = 1, n_particles_spin_act(1) - icount += 1 - icountbis += 1 - particle_list_practical(1,icountbis) = 1 - particle_list_practical(2,icountbis) = particles_active_list(i,1) - particles_active_list_spin_traced(icount) = particles_active_list(i,1) - enddo - do i = 1, n_particles_spin_act(2) - icount += 1 - icountbis += 1 - particle_list_practical(1,icountbis) = 2 - particle_list_practical(2,icountbis) = particles_active_list(i,2) - particles_active_list_spin_traced(icount) = particles_active_list(i,2) - enddo - if(icount .ne. n_particles_act) then - print*, icount, n_particles_act - print * , 'pb in particles_active_list_spin_traced !!' - stop - endif - - - integer :: i_hole_act, j_hole_act, k_hole_act - integer :: i_particle_act, j_particle_act, k_particle_act - - - integer :: ispin,jspin,kspin - if (n_holes_act == 0 .and. n_particles_act == 1) then - ispin = particle_list_practical(1,1) - i_particle_act = particle_list_practical(2,1) - do i_state = 1, N_states - delta_e_act(i_state) += one_creat(i_particle_act,ispin,i_state) - enddo - - else if (n_holes_act == 1 .and. n_particles_act == 0) then - ispin = hole_list_practical(1,1) - i_hole_act = hole_list_practical(2,1) - do i_state = 1, N_states - delta_e_act(i_state) += one_anhil(i_hole_act , ispin,i_state) - enddo - - else if (n_holes_act == 1 .and. n_particles_act == 1) then - ! first hole - ispin = hole_list_practical(1,1) - i_hole_act = hole_list_practical(2,1) - ! first particle - jspin = particle_list_practical(1,1) - i_particle_act = particle_list_practical(2,1) - do i_state = 1, N_states - delta_e_act(i_state) += one_anhil_one_creat(i_particle_act,i_hole_act,jspin,ispin,i_state) - enddo - - else if (n_holes_act == 2 .and. n_particles_act == 0) then - ispin = hole_list_practical(1,1) - i_hole_act = hole_list_practical(2,1) - jspin = hole_list_practical(1,2) - j_hole_act = hole_list_practical(2,2) - do i_state = 1, N_states - delta_e_act(i_state) += two_anhil(i_hole_act,j_hole_act,ispin,jspin,i_state) - enddo - - else if (n_holes_act == 0 .and. n_particles_act == 2) then - ispin = particle_list_practical(1,1) - i_particle_act = particle_list_practical(2,1) - jspin = particle_list_practical(1,2) - j_particle_act = particle_list_practical(2,2) - do i_state = 1, N_states - delta_e_act(i_state) += two_creat(i_particle_act,j_particle_act,ispin,jspin,i_state) - enddo - - else if (n_holes_act == 2 .and. n_particles_act == 1) then - ! first hole - ispin = hole_list_practical(1,1) - i_hole_act = hole_list_practical(2,1) - ! second hole - jspin = hole_list_practical(1,2) - j_hole_act = hole_list_practical(2,2) - ! first particle - kspin = particle_list_practical(1,1) - i_particle_act = particle_list_practical(2,1) - do i_state = 1, N_states - delta_e_act(i_state) += two_anhil_one_creat(i_particle_act,i_hole_act,j_hole_act,kspin,ispin,jspin,i_state) - enddo - - else if (n_holes_act == 1 .and. n_particles_act == 2) then - ! first hole - ispin = hole_list_practical(1,1) - i_hole_act = hole_list_practical(2,1) - ! first particle - jspin = particle_list_practical(1,1) - i_particle_act = particle_list_practical(2,1) - ! second particle - kspin = particle_list_practical(1,2) - j_particle_act = particle_list_practical(2,2) - - do i_state = 1, N_states - delta_e_act(i_state) += two_creat_one_anhil(i_particle_act,j_particle_act,i_hole_act,jspin,kspin,ispin,i_state) - enddo - - else if (n_holes_act == 3 .and. n_particles_act == 0) then - ! first hole - ispin = hole_list_practical(1,1) - i_hole_act = hole_list_practical(2,1) - ! second hole - jspin = hole_list_practical(1,2) - j_hole_act = hole_list_practical(2,2) - ! third hole - kspin = hole_list_practical(1,3) - k_hole_act = hole_list_practical(2,3) - do i_state = 1, N_states - delta_e_act(i_state) += three_anhil(i_hole_act,j_hole_act,k_hole_act,ispin,jspin,kspin,i_state) - enddo - - else if (n_holes_act == 0 .and. n_particles_act == 3) then - ! first particle - ispin = particle_list_practical(1,1) - i_particle_act = particle_list_practical(2,1) - ! second particle - jspin = particle_list_practical(1,2) - j_particle_act = particle_list_practical(2,2) - ! second particle - kspin = particle_list_practical(1,3) - k_particle_act = particle_list_practical(2,3) - do i_state = 1, N_states - delta_e_act(i_state) += three_creat(i_particle_act,j_particle_act,k_particle_act,ispin,jspin,kspin,i_state) - enddo - - else if (n_holes_act .eq. 0 .and. n_particles_act .eq.0)then - integer :: degree - integer(bit_kind) :: det_1_active(N_int,2) - integer :: h1,h2,p1,p2,s1,s2 - integer :: exc(0:2,2,2) - integer :: i_hole, i_part - double precision :: phase - call get_excitation_degree(det_1,det_2,degree,N_int) - if(degree == 1)then - call get_excitation(det_1,det_2,exc,degree,phase,N_int) - call decode_exc(exc,degree,h1,p1,h2,p2,s1,s2) - i_hole = list_inact_reverse(h1) - i_part = list_virt_reverse(p1) - do i_state = 1, N_states - delta_e_act(i_state) += one_anhil_one_creat_inact_virt(i_hole,i_part,i_state) - enddo - endif - else if (n_holes_act .ge. 2 .and. n_particles_act .ge.2) then - delta_e_act = -10000000.d0 - endif - -!print*, 'one_anhil_spin_trace' -!print*, one_anhil_spin_trace(1), one_anhil_spin_trace(2) - - - do i_state = 1, n_states - delta_e_final(i_state) = delta_e_act(i_state) + delta_e_inactive(i_state) - delta_e_virt(i_state) - enddo -!write(*,'(100(f16.10,X))'), delta_e_final(1) , delta_e_act(1) , delta_e_inactive(1) , delta_e_virt(1) - -end - - - -subroutine get_delta_e_dyall_general_mp(det_1,det_2,delta_e_final) - BEGIN_DOC - ! routine that returns the delta_e with the Moller Plesset and Dyall operators - ! - ! with det_1 being a determinant from the cas, and det_2 being a perturber - ! - ! Delta_e(det_1,det_2) = sum (hole) epsilon(hole) + sum(part) espilon(part) + delta_e(act) - ! - ! where hole is necessary in the inactive, part necessary in the virtuals - ! - ! and delta_e(act) is obtained as the sum of energies of excitations a la MP - ! - END_DOC - implicit none - use bitmasks - double precision, intent(out) :: delta_e_final(N_states) - integer(bit_kind), intent(in) :: det_1(N_int,2),det_2(N_int,2) - integer :: i,j,k,l - integer :: i_state - - integer :: n_holes_spin(2) - integer :: n_holes - integer :: holes_list(N_int*bit_kind_size,2) - - - double precision :: delta_e_inactive(N_states) - integer :: i_hole_inact - - - call give_holes_in_inactive_space(det_2,n_holes_spin,n_holes,holes_list) - delta_e_inactive = 0.d0 - do i = 1, n_holes_spin(1) - i_hole_inact = holes_list(i,1) - do i_state = 1, N_states - delta_e_inactive += fock_core_inactive_total_spin_trace(i_hole_inact,i_state) - enddo - enddo - - do i = 1, n_holes_spin(2) - i_hole_inact = holes_list(i,2) - do i_state = 1, N_states - delta_e_inactive(i_state) += fock_core_inactive_total_spin_trace(i_hole_inact,i_state) - enddo - enddo - - double precision :: delta_e_virt(N_states) - integer :: i_part_virt - integer :: n_particles_spin(2) - integer :: n_particles - integer :: particles_list(N_int*bit_kind_size,2) - - call give_particles_in_virt_space(det_2,n_particles_spin,n_particles,particles_list) - delta_e_virt = 0.d0 - do i = 1, n_particles_spin(1) - i_part_virt = particles_list(i,1) - do i_state = 1, N_states - delta_e_virt += fock_virt_total_spin_trace(i_part_virt,i_state) - enddo - enddo - - do i = 1, n_particles_spin(2) - i_part_virt = particles_list(i,2) - do i_state = 1, N_states - delta_e_virt += fock_virt_total_spin_trace(i_part_virt,i_state) - enddo - enddo - - - integer :: n_holes_spin_act(2),n_particles_spin_act(2) - integer :: n_holes_act,n_particles_act - integer :: holes_active_list(2*n_act_orb,2) - integer :: holes_active_list_spin_traced(4*n_act_orb) - integer :: particles_active_list(2*n_act_orb,2) - integer :: particles_active_list_spin_traced(4*n_act_orb) - double precision :: delta_e_act(N_states) - delta_e_act = 0.d0 - call give_holes_and_particles_in_active_space(det_1,det_2,n_holes_spin_act,n_particles_spin_act, & - n_holes_act,n_particles_act,holes_active_list,particles_active_list) - integer :: icount,icountbis - integer :: hole_list_practical(2,elec_num_tab(1)+elec_num_tab(2)), particle_list_practical(2,elec_num_tab(1)+elec_num_tab(2)) - icount = 0 - icountbis = 0 - do i = 1, n_holes_spin_act(1) - icount += 1 - icountbis += 1 - hole_list_practical(1,icountbis) = 1 ! spin - hole_list_practical(2,icountbis) = holes_active_list(i,1) ! index of active orb - holes_active_list_spin_traced(icount) = holes_active_list(i,1) - enddo - do i = 1, n_holes_spin_act(2) - icount += 1 - icountbis += 1 - hole_list_practical(1,icountbis) = 2 - hole_list_practical(2,icountbis) = holes_active_list(i,2) - holes_active_list_spin_traced(icount) = holes_active_list(i,2) - enddo - if(icount .ne. n_holes_act) then - print*,'' - print*, icount, n_holes_act - print * , 'pb in holes_active_list_spin_traced !!' - stop - endif - - icount = 0 - icountbis = 0 - do i = 1, n_particles_spin_act(1) - icount += 1 - icountbis += 1 - particle_list_practical(1,icountbis) = 1 - particle_list_practical(2,icountbis) = particles_active_list(i,1) - particles_active_list_spin_traced(icount) = particles_active_list(i,1) - enddo - do i = 1, n_particles_spin_act(2) - icount += 1 - icountbis += 1 - particle_list_practical(1,icountbis) = 2 - particle_list_practical(2,icountbis) = particles_active_list(i,2) - particles_active_list_spin_traced(icount) = particles_active_list(i,2) - enddo - if(icount .ne. n_particles_act) then - print*, icount, n_particles_act - print * , 'pb in particles_active_list_spin_traced !!' - stop - endif - - - integer :: i_hole_act, j_hole_act, k_hole_act - integer :: i_particle_act, j_particle_act, k_particle_act - - - integer :: ispin,jspin,kspin - - do i = 1, n_holes_act - ispin = hole_list_practical(1,i) - i_hole_act = hole_list_practical(2,i) - do i_state = 1, N_states - delta_e_act(i_state) += one_anhil(i_hole_act , ispin,i_state) - enddo - enddo - - do i = 1, n_particles_act - ispin = particle_list_practical(1,i) - i_particle_act = particle_list_practical(2,i) - do i_state = 1, N_states - delta_e_act(i_state) += one_creat(i_particle_act, ispin,i_state) - enddo - enddo - - do i_state = 1, n_states - delta_e_final(i_state) = delta_e_act(i_state) + delta_e_inactive(i_state) - delta_e_virt(i_state) - enddo - -end - diff --git a/src/mrpt_utils/second_order_new.irp.f b/src/mrpt_utils/second_order_new.irp.f deleted file mode 100644 index 43c5f3d4..00000000 --- a/src/mrpt_utils/second_order_new.irp.f +++ /dev/null @@ -1,757 +0,0 @@ - -subroutine give_1h2p_new(matrix_1h2p) - use bitmasks - implicit none - double precision , intent(inout) :: matrix_1h2p(N_det,N_det,*) - integer :: i,v,r,a,b,c - integer :: iorb, vorb, rorb, aorb, borb,corb - integer :: ispin,jspin - integer :: idet,jdet - integer(bit_kind) :: perturb_dets(N_int,2,n_act_orb,2,2) - double precision :: perturb_dets_phase(n_act_orb,2,2) - double precision :: perturb_dets_hij(n_act_orb,2,2) - double precision :: perturb_dets_hpsi0(n_act_orb,2,2,N_states) - logical :: already_generated(n_act_orb,2,2) - integer :: inint - integer :: elec_num_tab_local(2),acu_elec - integer(bit_kind) :: det_tmp(N_int,2) - integer(bit_kind) :: det_tmp_j(N_int,2) - integer :: exc(0:2,2,2) - integer :: accu_elec - double precision :: get_mo_bielec_integral - double precision :: active_int(n_act_orb,2) - double precision :: hij,phase - double precision :: accu_contrib(N_states) - integer :: degree(N_det) - integer :: idx(0:N_det) - double precision :: delta_e(n_act_orb,2,N_states) - double precision :: delta_e_inv(n_act_orb,2,N_states) - double precision :: delta_e_inactive_virt(N_states) - integer :: istate - integer :: index_orb_act_mono(N_det,6) - integer :: kspin - double precision :: delta_e_ja(N_states) - double precision :: hja - double precision :: contrib_hij - double precision :: fock_operator_local(n_act_orb,n_act_orb,2) - double precision :: hij_test - integer ::i_ok - integer(bit_kind) :: det_tmp_bis(N_int,2) - double precision :: hib , hab - double precision :: delta_e_ab(N_states) - double precision :: hib_test,hja_test,hab_test - integer :: i_hole,i_part - double precision :: hia,hjb - integer :: other_spin(2) - other_spin(1) = 2 - other_spin(2) = 1 - - accu_contrib = 0.d0 -!matrix_1h2p = 0.d0 - - elec_num_tab_local = 0 - do inint = 1, N_int - elec_num_tab_local(1) += popcnt(psi_ref(inint,1,1)) - elec_num_tab_local(2) += popcnt(psi_ref(inint,2,1)) - enddo - do i = 1, n_inact_orb ! First inactive - iorb = list_inact(i) - do v = 1, n_virt_orb ! First virtual - vorb = list_virt(v) - do r = 1, n_virt_orb ! Second virtual - rorb = list_virt(r) - ! take all the integral you will need for i,j,r fixed - do a = 1, n_act_orb - aorb = list_act(a) - active_int(a,1) = get_mo_bielec_integral(iorb,aorb,rorb,vorb,mo_integrals_map) ! direct - active_int(a,2) = get_mo_bielec_integral(iorb,aorb,vorb,rorb,mo_integrals_map) ! exchange - perturb_dets_phase(a,1,1) = -1000.d0 - perturb_dets_phase(a,1,2) = -1000.d0 - perturb_dets_phase(a,2,2) = -1000.d0 - perturb_dets_phase(a,2,1) = -1000.d0 - enddo - - - do istate = 1, N_states - delta_e_inactive_virt(istate) = & - - fock_virt_total_spin_trace(rorb,istate) & - - fock_virt_total_spin_trace(vorb,istate) & - + fock_core_inactive_total_spin_trace(iorb,istate) - enddo - do idet = 1, N_det - call get_excitation_degree_vector_mono_or_exchange(psi_ref,psi_ref(1,1,idet),degree,N_int,N_det,idx) - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Precomputation of matrix elements - do ispin = 1, 2 ! spin of the couple a-a^dagger (iorb,rorb) - do jspin = 1, 2 ! spin of the couple a-a^dagger (aorb,vorb) - do a = 1, n_act_orb ! First active - aorb = list_act(a) - do istate = 1, N_states - perturb_dets_hpsi0(a,jspin,ispin,istate) = 0.d0 - enddo - if(ispin == jspin .and. vorb.le.rorb)cycle ! condition not to double count - do inint = 1, N_int - det_tmp(inint,1) = psi_ref(inint,1,idet) - det_tmp(inint,2) = psi_ref(inint,2,idet) - enddo - ! Do the excitation inactive -- > virtual - call clear_bit_to_integer(iorb,det_tmp(1,ispin),N_int) ! hole in "iorb" of spin Ispin - call set_bit_to_integer(rorb,det_tmp(1,ispin),N_int) ! particle in "rorb" of spin Ispin - - ! Do the excitation active -- > virtual - call clear_bit_to_integer(aorb,det_tmp(1,jspin),N_int) ! hole in "aorb" of spin Jspin - call set_bit_to_integer(vorb,det_tmp(1,jspin),N_int) ! particle in "vorb" of spin Jspin - - ! Check if the excitation is possible or not on psi_ref(idet) - accu_elec= 0 - do inint = 1, N_int - accu_elec+= popcnt(det_tmp(inint,jspin)) - enddo - if(accu_elec .ne. elec_num_tab_local(jspin))then - perturb_dets_phase(a,jspin,ispin) = -1000.0d0 - perturb_dets_hij(a,jspin,ispin) = 0.d0 - cycle - endif - do inint = 1, N_int - perturb_dets(inint,1,a,jspin,ispin) = det_tmp(inint,1) - perturb_dets(inint,2,a,jspin,ispin) = det_tmp(inint,2) - enddo - - call get_double_excitation(psi_ref(1,1,idet),det_tmp,exc,phase,N_int) - perturb_dets_phase(a,jspin,ispin) = phase - - do istate = 1, N_states - delta_e(a,jspin,istate) = one_anhil(a,jspin,istate) + delta_e_inactive_virt(istate) - delta_e_inv(a,jspin,istate) = 1.d0 / delta_e(a,jspin,istate) - enddo - if(ispin == jspin)then - perturb_dets_hij(a,jspin,ispin) = phase * (active_int(a,1) - active_int(a,2) ) - else - perturb_dets_hij(a,jspin,ispin) = phase * active_int(a,1) - endif - enddo - enddo - enddo - -!!!!!!!!!!!!!!!!!!!!!!!!!!! determination of the connections between I and the other J determinants mono excited in the CAS -!!!!!!!!!!!!!!!!!!!!!!!!!!!! the determinants I and J must be connected by the following operator -!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!! - do jdet = 1, idx(0) - if(degree(jdet)==1)then - call get_mono_excitation(psi_ref(1,1,idet),psi_ref(1,1,idx(jdet)),exc,phase,N_int) - if (exc(0,1,1) == 1) then - ! Mono alpha - i_hole = list_act_reverse(exc(1,1,1)) !!! a_a - i_part = list_act_reverse(exc(1,2,1)) !!! a^{\dagger}_{b} - kspin = 1 !!! kspin - index_orb_act_mono(idx(jdet),1) = i_hole - index_orb_act_mono(idx(jdet),2) = i_part - index_orb_act_mono(idx(jdet),3) = kspin - call i_H_j_dyall(psi_active(1,1,idet),psi_active(1,1,idx(jdet)),N_int,hij) - fock_operator_local(i_hole,i_part,kspin) = hij * phase ! phase less fock operator - fock_operator_local(i_part,i_hole,kspin) = hij * phase ! phase less fock operator - else - ! Mono beta - i_hole = list_act_reverse(exc(1,1,2)) !!! a_a - i_part = list_act_reverse(exc(1,2,2)) !!! a^{\dagger}_{b} - kspin = 2 !!! kspin - index_orb_act_mono(idx(jdet),1) = i_hole - index_orb_act_mono(idx(jdet),2) = i_part - index_orb_act_mono(idx(jdet),3) = kspin - call i_H_j_dyall(psi_active(1,1,idet),psi_active(1,1,idx(jdet)),N_int,hij) - fock_operator_local(i_hole,i_part,kspin) = hij * phase ! phase less fock operator - fock_operator_local(i_part,i_hole,kspin) = hij * phase ! phase less fock operator - endif - else if(degree(jdet)==2)then - call get_double_excitation(psi_ref(1,1,idet),psi_ref(1,1,idx(jdet)),exc,phase,N_int) - ! Mono alpha - index_orb_act_mono(idx(jdet),1) = list_act_reverse(exc(1,1,1)) !!! a_a ALPHA - index_orb_act_mono(idx(jdet),2) = list_act_reverse(exc(1,2,1)) !!! a^{\dagger}_{b} ALPHA - index_orb_act_mono(idx(jdet),3) = 1 - ! Mono beta - index_orb_act_mono(idx(jdet),4) = list_act_reverse(exc(1,1,2)) !!! a_a BETA - index_orb_act_mono(idx(jdet),5) = list_act_reverse(exc(1,2,2)) !!! a^{\dagger}_{b} BETA - index_orb_act_mono(idx(jdet),6) = 2 - endif - enddo - - - - do jdet = 1, idx(0) -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CASE OF THE MONO EXCITATIONS - if(degree(jdet) == 1)then - ! two determinants | Idet > and | Jdet > which are connected throw a mono excitation operator - ! are connected by the presence of the perturbers determinants |det_tmp> - aorb = index_orb_act_mono(idx(jdet),1) ! a_{aorb} - borb = index_orb_act_mono(idx(jdet),2) ! a^{\dagger}_{borb} - kspin = index_orb_act_mono(idx(jdet),3) ! spin of the excitation - ! the determinants Idet and Jdet interact throw the following operator - ! | Jdet > = a^{\dagger}_{borb,kspin} a_{aorb, kspin} | Idet > - - accu_contrib = 0.d0 - do ispin = 1, 2 ! you loop on all possible spin for the excitation - ! a^{\dagger}_r a_{i} (ispin) - -! if(ispin == kspin .and. vorb.le.rorb)cycle ! condition not to double count - logical :: cycle_same_spin_first_order - cycle_same_spin_first_order = .False. - if(ispin == kspin .and. vorb.le.rorb)then - cycle_same_spin_first_order = .True. - endif -! if(ispin .ne. kspin .and. cycle_same_spin_first_order .eqv. .False. )then ! condition not to double count - if(cycle_same_spin_first_order .eqv. .False. )then ! condition not to double count - - ! FIRST ORDER CONTRIBUTION - - ! | det_tmp > = a^{\dagger}_{rorb,ispin} a^{\dagger}_{vorb,kspin} a_{aorb,kspin} a_{iorb,ispin} | Idet > - if(perturb_dets_phase(aorb,kspin,ispin) .le. -10.d0)cycle - do inint = 1, N_int - det_tmp(inint,1) = perturb_dets(inint,1,aorb,kspin,ispin) - det_tmp(inint,2) = perturb_dets(inint,2,aorb,kspin,ispin) - enddo - call get_double_excitation(psi_ref(1,1,idet),det_tmp,exc,phase,N_int) - if(kspin == ispin)then - hia = phase * (active_int(aorb,1) - active_int(aorb,2) ) - else - hia = phase * active_int(aorb,1) - endif - call get_double_excitation(psi_ref(1,1,idx(jdet)),det_tmp,exc,phase,N_int) - if(kspin == ispin)then - hja = phase * (active_int(borb,1) - active_int(borb,2) ) - else - hja = phase * active_int(borb,1) - endif - - contrib_hij = hja * hia - do istate = 1, N_states - accu_contrib(istate) += contrib_hij * delta_e_inv(aorb,kspin,istate) - enddo - endif - !!!! SECOND ORDER CONTRIBTIONS - ! | det_tmp > = a^{\dagger}_{rorb,ispin} a^{\dagger}_{vorb,jspin} a_{corb,jspin} a_{iorb,ispin} | Idet > - do jspin = 1, 2 - logical :: cycle_same_spin_second_order - cycle_same_spin_second_order = .False. - if(ispin == jspin .and. vorb.le.rorb)then - cycle_same_spin_second_order = .True. - endif - if(cycle_same_spin_second_order .eqv. .False.)then - do corb = 1, n_act_orb - if(perturb_dets_phase(corb,jspin,ispin) .le. -10.d0)cycle - do inint = 1, N_int - det_tmp(inint,1) = perturb_dets(inint,1,corb,jspin,ispin) - det_tmp(inint,2) = perturb_dets(inint,2,corb,jspin,ispin) - det_tmp_bis(inint,1) = perturb_dets(inint,1,corb,jspin,ispin) - det_tmp_bis(inint,2) = perturb_dets(inint,2,corb,jspin,ispin) - enddo - ! | det_tmp_bis > = a^{\dagger}_{borb,kspin} a_{aorb,kspin} a_{iorb,ispin} | Idet > - call do_mono_excitation(det_tmp_bis,list_act(aorb),list_act(borb),kspin,i_ok) - if(i_ok .ne. 1)cycle - call get_mono_excitation(det_tmp,det_tmp_bis,exc,phase,N_int) - hia = perturb_dets_hij(corb,jspin,ispin) - hab = fock_operator_local(aorb,borb,kspin) * phase - - if(dabs(hia).le.1.d-12)cycle - if(dabs(hab).le.1.d-12)cycle - - call get_double_excitation(psi_ref(1,1,idx(jdet)),det_tmp_bis,exc,phase,N_int) - if(jspin == ispin)then - hjb = phase * (active_int(corb,1) - active_int(corb,2) ) - else - hjb = phase * active_int(corb,1) - endif - if(dabs(hjb).le.1.d-12)cycle - do istate = 1, N_states - accu_contrib(istate)+=hia * delta_e_inv(corb,jspin,istate) & ! | Idet > --> | det_tmp > - ! | det_tmp > --> | det_tmp_bis > - *hab / (delta_e(corb,jspin,istate) + one_anhil_one_creat(aorb,borb,kspin,kspin,istate)) & - *hjb - enddo - enddo - endif - enddo - - - - enddo ! ispin - do istate = 1, N_states - matrix_1h2p(idet,idx(jdet),istate) += accu_contrib(istate) - enddo - - else if (degree(jdet) == 2)then - ! CASE OF THE DOUBLE EXCITATIONS, ONLY THIRD ORDER EFFECTS - accu_contrib = 0.d0 - do ispin = 1, 2 ! you loop on all possible spin for the excitation - ! a^{\dagger}_r a_{i} (ispin) - ! if it is standard exchange case, the hole ALPHA == the part. BETA - if (index_orb_act_mono(idx(jdet),1) == index_orb_act_mono(idx(jdet),5))then - aorb = index_orb_act_mono(idx(jdet),1) !! the HOLE of the ALPHA electron - borb = index_orb_act_mono(idx(jdet),4) !! the HOLE of the BETA electron - ! first case :: | det_tmp > == a_{borb,\beta} | Idet > - cycle_same_spin_second_order = .False. - if(ispin == 2 .and. vorb.le.rorb)then - cycle_same_spin_second_order = .True. - endif - if(cycle_same_spin_second_order .eqv. .False.)then ! condition not to double count - if(perturb_dets_phase(borb,2,ispin) .le. -10.d0)cycle - do inint = 1, N_int - det_tmp(inint,1) = perturb_dets(inint,1,borb,2,ispin) - det_tmp(inint,2) = perturb_dets(inint,2,borb,2,ispin) - det_tmp_bis(inint,1) = perturb_dets(inint,1,borb,2,ispin) - det_tmp_bis(inint,2) = perturb_dets(inint,2,borb,2,ispin) - enddo - hia = perturb_dets_hij(borb,2,ispin) - if(dabs(hia).le.1.d-12)cycle - call do_mono_excitation(det_tmp_bis,list_act(aorb),list_act(borb),1,i_ok) - call get_mono_excitation(det_tmp,det_tmp_bis,exc,phase,N_int) - hab = fock_operator_local(aorb,borb,1) * phase - - if(dabs(hab).le.1.d-12)cycle - call get_double_excitation(psi_ref(1,1,idx(jdet)),det_tmp_bis,exc,phase,N_int) - if(ispin == 2)then - hjb = phase * (active_int(aorb,1) - active_int(aorb,2) ) - else if (ispin == 1)then - hjb = phase * active_int(aorb,1) - endif - if(dabs(hjb).le.1.d-12)cycle - do istate = 1, N_states - accu_contrib(istate) += hia * delta_e_inv(borb,2,istate) & ! | Idet > --> | det_tmp > - ! | det_tmp > --> | det_tmp_bis > - * hab / (delta_e(borb,2,istate) + one_anhil_one_creat(aorb,borb,1,1,istate)) & - * hjb - enddo - endif - ! second case :: | det_tmp > == a_{aorb,\alpha} | Idet > - cycle_same_spin_second_order = .False. - if(ispin == 1 .and. vorb.le.rorb)then - cycle_same_spin_second_order = .True. - endif - if(cycle_same_spin_second_order .eqv. .False.)then ! condition not to double count - if(perturb_dets_phase(aorb,1,ispin) .le. -10.d0)cycle - do inint = 1, N_int - det_tmp(inint,1) = perturb_dets(inint,1,aorb,1,ispin) - det_tmp(inint,2) = perturb_dets(inint,2,aorb,1,ispin) - det_tmp_bis(inint,1) = perturb_dets(inint,1,aorb,1,ispin) - det_tmp_bis(inint,2) = perturb_dets(inint,2,aorb,1,ispin) - enddo - hia = perturb_dets_hij(aorb,1,ispin) - if(dabs(hia).le.1.d-12)cycle - call do_mono_excitation(det_tmp_bis,list_act(borb),list_act(aorb),2,i_ok) - call get_mono_excitation(det_tmp,det_tmp_bis,exc,phase,N_int) - hab = fock_operator_local(aorb,borb,2) * phase - - if(dabs(hab).le.1.d-12)cycle - call get_double_excitation(psi_ref(1,1,idx(jdet)),det_tmp_bis,exc,phase,N_int) - if(ispin == 1)then - hjb = phase * (active_int(borb,1) - active_int(borb,2) ) - else if (ispin == 2)then - hjb = phase * active_int(borb,1) - endif - if(dabs(hjb).le.1.d-12)cycle - do istate = 1, N_states - accu_contrib(istate) += hia * delta_e_inv(aorb,1,istate) & ! | Idet > --> | det_tmp > - ! | det_tmp > --> | det_tmp_bis > - * hab / (delta_e(aorb,1,istate) + one_anhil_one_creat(borb,aorb,2,2,istate)) & - * hjb - enddo - endif - - ! if it is a closed shell double excitation, the hole ALPHA == the hole BETA - else if (index_orb_act_mono(idx(jdet),1) == index_orb_act_mono(idx(jdet),4))then - aorb = index_orb_act_mono(idx(jdet),1) !! the HOLE of the ALPHA electron - borb = index_orb_act_mono(idx(jdet),2) !! the PART of the ALPHA electron - ! first case :: | det_tmp > == a_{aorb,\beta} | Idet > - cycle_same_spin_second_order = .False. - if(ispin == 2 .and. vorb.le.rorb)then - cycle_same_spin_second_order = .True. - endif - if(cycle_same_spin_second_order .eqv. .False.)then ! condition not to double count - if(perturb_dets_phase(aorb,2,ispin) .le. -10.d0)cycle - do inint = 1, N_int - det_tmp(inint,1) = perturb_dets(inint,1,aorb,2,ispin) - det_tmp(inint,2) = perturb_dets(inint,2,aorb,2,ispin) - det_tmp_bis(inint,1) = perturb_dets(inint,1,aorb,2,ispin) - det_tmp_bis(inint,2) = perturb_dets(inint,2,aorb,2,ispin) - enddo - hia = perturb_dets_hij(aorb,2,ispin) - if(dabs(hia).le.1.d-12)cycle - call do_mono_excitation(det_tmp_bis,list_act(aorb),list_act(borb),1,i_ok) - call get_mono_excitation(det_tmp,det_tmp_bis,exc,phase,N_int) - hab = fock_operator_local(aorb,borb,1) * phase - - if(dabs(hab).le.1.d-12)cycle - call get_double_excitation(psi_ref(1,1,idx(jdet)),det_tmp_bis,exc,phase,N_int) - if(ispin == 2)then - hjb = phase * (active_int(borb,1) - active_int(borb,2) ) - else if (ispin == 1)then - hjb = phase * active_int(borb,1) - endif - if(dabs(hjb).le.1.d-12)cycle - do istate = 1, N_states - accu_contrib(istate) += hia * delta_e_inv(aorb,2,istate) & ! | Idet > --> | det_tmp > - ! | det_tmp > --> | det_tmp_bis > - * hab / (delta_e(aorb,2,istate) + one_anhil_one_creat(aorb,borb,1,1,istate)) & - * hjb - enddo - endif - - ! second case :: | det_tmp > == a_{aorb,\alpha} | Idet > - cycle_same_spin_second_order = .False. - if(ispin == 1 .and. vorb.le.rorb)then - cycle_same_spin_second_order = .True. - endif - if(cycle_same_spin_second_order .eqv. .False.)then ! condition not to double count - if(perturb_dets_phase(aorb,1,ispin) .le. -10.d0)cycle - do inint = 1, N_int - det_tmp(inint,1) = perturb_dets(inint,1,aorb,1,ispin) - det_tmp(inint,2) = perturb_dets(inint,2,aorb,1,ispin) - det_tmp_bis(inint,1) = perturb_dets(inint,1,aorb,1,ispin) - det_tmp_bis(inint,2) = perturb_dets(inint,2,aorb,1,ispin) - enddo - hia = perturb_dets_hij(aorb,1,ispin) - if(dabs(hia).le.1.d-12)cycle - call do_mono_excitation(det_tmp_bis,list_act(aorb),list_act(borb),2,i_ok) - call get_mono_excitation(det_tmp,det_tmp_bis,exc,phase,N_int) - hab = fock_operator_local(aorb,borb,2) * phase - - if(dabs(hab).le.1.d-12)cycle - call get_double_excitation(psi_ref(1,1,idx(jdet)),det_tmp_bis,exc,phase,N_int) - if(ispin == 1)then - hjb = phase * (active_int(borb,1) - active_int(borb,2) ) - else if (ispin == 2)then - hjb = phase * active_int(borb,1) - endif - if(dabs(hjb).le.1.d-12)cycle - do istate = 1, N_states - accu_contrib(istate) += hia * delta_e_inv(aorb,1,istate) & ! | Idet > --> | det_tmp > - ! | det_tmp > --> | det_tmp_bis > - * hab / (delta_e(aorb,1,istate) + one_anhil_one_creat(aorb,borb,2,2,istate)) & - * hjb - enddo - endif - - - else - ! one should not fall in this case ... - call debug_det(psi_ref(1,1,i),N_int) - call debug_det(psi_ref(1,1,idx(jdet)),N_int) - call get_double_excitation(psi_ref(1,1,idet),psi_ref(1,1,idx(jdet)),exc,phase,N_int) - call decode_exc(exc,2,h1,p1,h2,p2,s1,s2) - integer :: h1, p1, h2, p2, s1, s2 - print*, h1, p1, h2, p2, s1, s2 - - print*, 'pb !!! it is a double but not an exchange case ....' - stop - endif - enddo ! ispin - do istate = 1, N_states - matrix_1h2p(idet,idx(jdet),istate) += accu_contrib(istate) - enddo - - else if (degree(jdet) == 0)then - ! diagonal part of the dressing : interaction of | Idet > with all the perturbers generated by the excitations - ! - ! | det_tmp > = a^{\dagger}_{rorb,ispin} a^{\dagger}_{vorb,kspin} a_{aorb,kspin} a_{iorb,ispin} | Idet > - accu_contrib = 0.d0 - do ispin = 1, 2 - do kspin = 1, 2 - do a = 1, n_act_orb ! First active - if( perturb_dets_phase(a,kspin,ispin) .le. -10.d0)cycle - if(ispin == kspin .and. vorb.le.rorb)cycle ! condition not to double count - contrib_hij = perturb_dets_hij(a,kspin,ispin) * perturb_dets_hij(a,kspin,ispin) - do istate = 1, N_states - accu_contrib(istate) += contrib_hij * delta_e_inv(a,kspin,istate) - enddo - enddo - enddo - enddo - do istate = 1, N_states - matrix_1h2p(idet,idet,istate) += accu_contrib(istate) - enddo - - endif - enddo !! jdet - - - enddo - enddo - enddo - enddo -end - -subroutine give_2h1p_new(matrix_2h1p) - use bitmasks - implicit none - double precision , intent(inout) :: matrix_2h1p(N_det,N_det,*) - integer :: i,j,r,a,b - integer :: iorb, jorb, rorb, aorb, borb - integer :: ispin,jspin - integer :: idet,jdet - integer(bit_kind) :: perturb_dets(N_int,2,n_act_orb,2,2) - double precision :: perturb_dets_phase(n_act_orb,2,2) - double precision :: perturb_dets_hij(n_act_orb,2,2) - integer :: inint - integer :: elec_num_tab_local(2),acu_elec - integer(bit_kind) :: det_tmp(N_int,2) - integer :: exc(0:2,2,2) - integer :: accu_elec - double precision :: get_mo_bielec_integral - double precision :: active_int(n_act_orb,2) - double precision :: hij,phase - integer :: i_hole,i_part - double precision :: delta_e_inv(n_act_orb,2,N_states) - double precision :: fock_operator_local(n_act_orb,n_act_orb,2) - double precision :: delta_e_inactive_virt(N_states) - integer :: degree(N_det) - integer :: idx(0:N_det) - double precision :: delta_e(n_act_orb,2,N_states) - integer :: istate - integer :: index_orb_act_mono(N_det,3) - integer :: kspin - double precision :: hij_test - double precision :: accu_contrib(N_states) - double precision :: contrib_hij - double precision :: hja - integer :: corb,i_ok - integer(bit_kind) :: det_tmp_bis(N_int,2) - double precision :: hia,hjb,hab -!matrix_2h1p = 0.d0 - - elec_num_tab_local = 0 - do inint = 1, N_int - elec_num_tab_local(1) += popcnt(psi_ref(inint,1,1)) - elec_num_tab_local(2) += popcnt(psi_ref(inint,2,1)) - enddo - do i = 1, n_inact_orb ! First inactive - iorb = list_inact(i) - do j = 1, n_inact_orb ! Second inactive - jorb = list_inact(j) - do r = 1, n_virt_orb ! First virtual - rorb = list_virt(r) - ! take all the integral you will need for i,j,r fixed - do a = 1, n_act_orb - aorb = list_act(a) - active_int(a,1) = get_mo_bielec_integral(iorb,jorb,rorb,aorb,mo_integrals_map) ! direct - active_int(a,2) = get_mo_bielec_integral(iorb,jorb,aorb,rorb,mo_integrals_map) ! exchange - perturb_dets_phase(a,1,1) = -1000.d0 - perturb_dets_phase(a,1,2) = -1000.d0 - perturb_dets_phase(a,2,2) = -1000.d0 - perturb_dets_phase(a,2,1) = -1000.d0 - enddo - - do istate = 1, N_states - delta_e_inactive_virt(istate) = & - - fock_virt_total_spin_trace(rorb,istate) & - + fock_core_inactive_total_spin_trace(iorb,istate) & - + fock_core_inactive_total_spin_trace(jorb,istate) - enddo - - do idet = 1, N_det - call get_excitation_degree_vector_mono(psi_ref,psi_ref(1,1,idet),degree,N_int,N_det,idx) - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Precomputation of matrix elements - do ispin = 1, 2 ! spin of the couple a-a^dagger (i,r) - do jspin = 1, 2 ! spin of the couple z-a^dagger (j,a) - if(ispin == jspin .and. iorb.le.jorb)cycle ! condition not to double count - do a = 1, n_act_orb ! First active - aorb = list_act(a) - do inint = 1, N_int - det_tmp(inint,1) = psi_ref(inint,1,idet) - det_tmp(inint,2) = psi_ref(inint,2,idet) - enddo - ! Do the excitation inactive -- > virtual - call clear_bit_to_integer(iorb,det_tmp(1,ispin),N_int) ! hole in "iorb" of spin Ispin - call set_bit_to_integer(rorb,det_tmp(1,ispin),N_int) ! particle in "rorb" of spin Ispin - - ! Do the excitation inactive -- > active - call clear_bit_to_integer(jorb,det_tmp(1,jspin),N_int) ! hole in "jorb" of spin Jspin - call set_bit_to_integer(aorb,det_tmp(1,jspin),N_int) ! particle in "aorb" of spin Jspin - - ! Check if the excitation is possible or not on psi_ref(idet) - accu_elec= 0 - do inint = 1, N_int - accu_elec+= popcnt(det_tmp(inint,jspin)) - enddo - if(accu_elec .ne. elec_num_tab_local(jspin))then - perturb_dets_phase(a,jspin,ispin) = -1000.0d0 - perturb_dets_hij(a,jspin,ispin) = 0.d0 - cycle - endif - do inint = 1, N_int - perturb_dets(inint,1,a,jspin,ispin) = det_tmp(inint,1) - perturb_dets(inint,2,a,jspin,ispin) = det_tmp(inint,2) - enddo - call get_double_excitation(psi_ref(1,1,idet),det_tmp,exc,phase,N_int) - perturb_dets_phase(a,jspin,ispin) = phase - do istate = 1, N_states - delta_e(a,jspin,istate) = one_creat(a,jspin,istate) + delta_e_inactive_virt(istate) - delta_e_inv(a,jspin,istate) = 1.d0 / delta_e(a,jspin,istate) - enddo - if(ispin == jspin)then - perturb_dets_hij(a,jspin,ispin) = phase * (active_int(a,1) - active_int(a,2) ) - else - perturb_dets_hij(a,jspin,ispin) = phase * active_int(a,1) - endif -!!!!!!!!!!!!!!!!!!!!!1 Computation of the coefficient at first order coming from idet -!!!!!!!!!!!!!!!!!!!!! for the excitation (i,j)(ispin,jspin) ---> (r,a)(ispin,jspin) - enddo - enddo - enddo - -!!!!!!!!!!!!!!!!!!!!!!!!!!! determination of the connections between I and the other J determinants mono excited in the CAS -!!!!!!!!!!!!!!!!!!!!!!!!!!!! the determinants I and J must be connected by the following operator -!!!!!!!!!!!!!!!!!!!!!!!!!!!! - do jdet = 1, idx(0) - if(degree(jdet)==1)then - call get_mono_excitation(psi_ref(1,1,idet),psi_ref(1,1,idx(jdet)),exc,phase,N_int) - if (exc(0,1,1) == 1) then - ! Mono alpha - i_part = list_act_reverse(exc(1,2,1)) ! a^{\dagger}_{aorb} - i_hole = list_act_reverse(exc(1,1,1)) ! a_{borb} - kspin = 1 - index_orb_act_mono(idx(jdet),1) = i_part !!! a^{\dagger}_a - index_orb_act_mono(idx(jdet),2) = i_hole !!! a_{b} - index_orb_act_mono(idx(jdet),3) = 1 - call i_H_j_dyall(psi_active(1,1,idet),psi_active(1,1,idx(jdet)),N_int,hij) - fock_operator_local(i_hole,i_part,kspin) = hij * phase ! phase less fock operator - fock_operator_local(i_part,i_hole,kspin) = hij * phase ! phase less fock operator - else - ! Mono beta - i_part = list_act_reverse(exc(1,2,2)) - i_hole = list_act_reverse(exc(1,1,2)) - kspin = 2 - index_orb_act_mono(idx(jdet),1) = i_part !!! a^{\dagger}_a - index_orb_act_mono(idx(jdet),2) = i_hole !!! a_{b} - index_orb_act_mono(idx(jdet),3) = 2 - call i_H_j_dyall(psi_active(1,1,idet),psi_active(1,1,idx(jdet)),N_int,hij) - fock_operator_local(i_hole,i_part,kspin) = hij * phase ! phase less fock operator - fock_operator_local(i_part,i_hole,kspin) = hij * phase ! phase less fock operator - endif - endif - enddo - - do jdet = 1, idx(0) - ! two determinants | Idet > and | Jdet > which are connected throw a mono excitation operator - ! are connected by the presence of the perturbers determinants |det_tmp> - if(degree(jdet) == 1)then - aorb = index_orb_act_mono(idx(jdet),1) ! a^{\dagger}_{aorb} - borb = index_orb_act_mono(idx(jdet),2) ! a_{borb} - kspin = index_orb_act_mono(idx(jdet),3) ! spin of the excitation - ! the determinants Idet and Jdet interact throw the following operator - ! | Jdet > = a_{borb,kspin} a^{\dagger}_{aorb, kspin} | Idet > - - accu_contrib = 0.d0 - do ispin = 1, 2 ! you loop on all possible spin for the excitation - ! a^{\dagger}_r a_{i} (ispin) -! if(ispin == kspin .and. iorb.le.jorb)cycle ! condition not to double count - logical :: cycle_same_spin_first_order - cycle_same_spin_first_order = .False. - if(ispin == kspin .and. iorb.le.jorb)then - cycle_same_spin_first_order = .True. - endif - if(ispin .ne. kspin .or. cycle_same_spin_first_order .eqv. .False. )then! condition not to double count - - ! | det_tmp > = a^{\dagger}_{rorb,ispin} a^{\dagger}_{aorb,kspin} a_{jorb,kspin} a_{iorb,ispin} | Idet > - do inint = 1, N_int - det_tmp(inint,1) = perturb_dets(inint,1,aorb,kspin,ispin) - det_tmp(inint,2) = perturb_dets(inint,2,aorb,kspin,ispin) - enddo - ! you determine the interaction between the excited determinant and the other parent | Jdet > - ! | det_tmp > = a^{\dagger}_{rorb,ispin} a^{\dagger}_{borb,kspin} a_{jorb,kspin} a_{iorb,ispin} | Jdet > - ! hja = < det_tmp | H | Jdet > - call get_double_excitation(psi_ref(1,1,idx(jdet)),det_tmp,exc,phase,N_int) - if(kspin == ispin)then - hja = phase * (active_int(borb,1) - active_int(borb,2) ) - else - hja = phase * active_int(borb,1) - endif -!! if(dabs(hja).le.1.d-10)cycle - - - do istate = 1, N_states - accu_contrib(istate) += hja * perturb_dets_hij(aorb,kspin,ispin) * delta_e_inv(aorb,kspin,istate) - enddo - endif - logical :: cycle_same_spin_second_order - !!!! SECOND ORDER CONTRIBUTIONS - !!!! SECOND ORDER CONTRIBTIONS - ! | det_tmp > = a^{\dagger}_{rorb,ispin} a^{\dagger}_{corb,jspin} a_{jorb,jspin} a_{iorb,ispin} | Idet > - do jspin = 1, 2 - cycle_same_spin_second_order = .False. - if(ispin == jspin .and. iorb.le.jorb)then - cycle_same_spin_second_order = .True. - endif - if(ispin .ne. jspin .or. cycle_same_spin_second_order .eqv. .False. )then! condition not to double count - do corb = 1, n_act_orb - if(perturb_dets_phase(corb,jspin,ispin) .le. -10.d0)cycle - do inint = 1, N_int - det_tmp(inint,1) = perturb_dets(inint,1,corb,jspin,ispin) - det_tmp(inint,2) = perturb_dets(inint,2,corb,jspin,ispin) - det_tmp_bis(inint,1) = perturb_dets(inint,1,corb,jspin,ispin) - det_tmp_bis(inint,2) = perturb_dets(inint,2,corb,jspin,ispin) - enddo - ! | det_tmp_bis > = a^{\dagger}_{aorb,kspin} a_{borb,kspin} a_{iorb,kspin} | Idet > - call do_mono_excitation(det_tmp_bis,list_act(borb),list_act(aorb),kspin,i_ok) - if(i_ok .ne. 1)cycle - hia = perturb_dets_hij(corb,jspin,ispin) - if(dabs(hia).le.1.d-10)cycle - call get_mono_excitation(det_tmp,det_tmp_bis,exc,phase,N_int) - hab = fock_operator_local(borb,aorb,kspin) * phase - if(dabs(hab).le.1.d-10)cycle - - call get_double_excitation(psi_ref(1,1,idx(jdet)),det_tmp_bis,exc,phase,N_int) - if(jspin == ispin)then - hjb = phase * (active_int(corb,1) - active_int(corb,2) ) - else - hjb = phase * active_int(corb,1) - endif - if(dabs(hjb).le.1.d-10)cycle - do istate = 1, N_states - accu_contrib(istate)+=hia * delta_e_inv(corb,jspin,istate) & ! | Idet > --> | det_tmp > - ! | det_tmp > --> | det_tmp_bis > - *hab / (delta_e(corb,jspin,istate) + one_anhil_one_creat(borb,aorb,kspin,kspin,istate)) & - *hjb - enddo - enddo ! jspin - endif - enddo - enddo ! ispin - do istate = 1, N_states - matrix_2h1p(idx(jdet),idet,istate) += accu_contrib(istate) - enddo - - else if (degree(jdet) == 0 )then - ! diagonal part of the dressing : interaction of | Idet > with all the perturbers generated by the excitations - ! - ! | det_tmp > = a^{\dagger}_{rorb,ispin} a^{\dagger}_{aorb,kspin} a_{jorb,kspin} a_{iorb,ispin} | Idet > - accu_contrib = 0.d0 - do ispin = 1, 2 - do kspin = 1, 2 - if(ispin == kspin .and. iorb.le.jorb)cycle ! condition not to double count - do a = 1, n_act_orb ! First active - contrib_hij = perturb_dets_hij(a,kspin,ispin) * perturb_dets_hij(a,kspin,ispin) - if(dabs(contrib_hij).le.1.d-10)cycle - do istate = 1, N_states - accu_contrib(istate) += contrib_hij * delta_e_inv(a,kspin,istate) - enddo - enddo - enddo - enddo - do istate =1, N_states - matrix_2h1p(idet,idet,istate) += accu_contrib(istate) - enddo - - endif - - enddo - enddo - enddo - enddo - enddo - - - - - -end - - diff --git a/src/mrpt_utils/second_order_new_2p.irp.f b/src/mrpt_utils/second_order_new_2p.irp.f deleted file mode 100644 index 302e699b..00000000 --- a/src/mrpt_utils/second_order_new_2p.irp.f +++ /dev/null @@ -1,283 +0,0 @@ - -subroutine give_2p_new(matrix_2p) - use bitmasks - implicit none - double precision , intent(inout) :: matrix_2p(N_det,N_det,*) - integer :: i,v,r,a,b,c - integer :: iorb, vorb, rorb, aorb, borb,corb - integer :: ispin,jspin - integer :: idet,jdet - integer(bit_kind) :: perturb_dets(N_int,2,n_act_orb,n_act_orb,2,2) - double precision :: perturb_dets_phase(n_act_orb,n_act_orb,2,2) - double precision :: perturb_dets_hij(n_act_orb,n_act_orb,2,2) - double precision :: perturb_dets_hpsi0(n_act_orb,n_act_orb,2,2,N_states) - integer :: inint - integer :: elec_num_tab_local(2),acu_elec - integer(bit_kind) :: det_tmp(N_int,2) - integer(bit_kind) :: det_tmp_j(N_int,2) - integer :: exc(0:2,2,2) - integer :: accu_elec - double precision :: get_mo_bielec_integral - double precision :: active_int(n_act_orb,n_act_orb,2) - double precision :: hij,phase - double precision :: accu_contrib(N_states) - integer :: degree(N_det) - integer :: idx(0:N_det) - double precision :: delta_e(n_act_orb,n_act_orb,2,2,N_states) - double precision :: delta_e_inv(n_act_orb,n_act_orb,2,2,N_states) - double precision :: delta_e_inactive_virt(N_states) - integer :: istate - integer :: index_orb_act_mono(N_det,6) - integer :: kspin - double precision :: delta_e_ja(N_states) - double precision :: hja - double precision :: contrib_hij - double precision :: fock_operator_local(n_act_orb,n_act_orb,2) - double precision :: hij_test - integer ::i_ok - integer(bit_kind) :: det_tmp_bis(N_int,2) - double precision :: hib , hab - double precision :: delta_e_ab(N_states) - double precision :: hib_test,hja_test,hab_test - integer :: i_hole,i_part - double precision :: hia,hjb - integer :: other_spin(2) - other_spin(1) = 2 - other_spin(2) = 1 - - accu_contrib = 0.d0 -!matrix_2p = 0.d0 - - elec_num_tab_local = 0 - do inint = 1, N_int - elec_num_tab_local(1) += popcnt(psi_ref(inint,1,1)) - elec_num_tab_local(2) += popcnt(psi_ref(inint,2,1)) - enddo - do v = 1, n_virt_orb ! First virtual - vorb = list_virt(v) - do r = 1, n_virt_orb ! Second virtual - rorb = list_virt(r) - ! take all the integral you will need for r,v fixed - do a = 1, n_act_orb - aorb = list_act(a) - do b = 1, n_act_orb - borb = list_act(b) - active_int(a,b,1) = get_mo_bielec_integral(aorb,borb,rorb,vorb,mo_integrals_map) ! direct ( a--> r | b--> v ) - active_int(a,b,2) = get_mo_bielec_integral(aorb,borb,vorb,rorb,mo_integrals_map) ! exchange ( b--> r | a--> v ) - perturb_dets_phase(a,b,1,1) = -1000.d0 - perturb_dets_phase(a,b,1,2) = -1000.d0 - perturb_dets_phase(a,b,2,2) = -1000.d0 - perturb_dets_phase(a,b,2,1) = -1000.d0 - perturb_dets_phase(b,a,1,1) = -1000.d0 - perturb_dets_phase(b,a,1,2) = -1000.d0 - perturb_dets_phase(b,a,2,2) = -1000.d0 - perturb_dets_phase(b,a,2,1) = -1000.d0 - enddo - enddo - - - do istate = 1, N_states - delta_e_inactive_virt(istate) = & - - fock_virt_total_spin_trace(rorb,istate) & - - fock_virt_total_spin_trace(vorb,istate) - enddo - do idet = 1, N_det -! call get_excitation_degree_vector_mono(psi_ref,psi_ref(1,1,idet),degree,N_int,N_det,idx) - call get_excitation_degree_vector(psi_ref,psi_ref(1,1,idet),degree,N_int,N_det,idx) - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Precomputation of matrix elements - do ispin = 1, 2 ! spin of the couple a-a^dagger (aorb,rorb) - do jspin = 1, 2 ! spin of the couple a-a^dagger (borb,vorb) - do b = 1, n_act_orb ! First active - borb = list_act(b) - do a = 1, n_act_orb ! First active - aorb = list_act(a) -! if(ispin == 2.and. jspin ==1)then -! perturb_dets_phase(a,b,ispin,jspin) = -1000.0d0 -! perturb_dets_hij(a,b,ispin,jspin) = 0.d0 -! cycle ! condition not to double count -! endif - - if(ispin == jspin .and. vorb.le.rorb)then - perturb_dets_phase(a,b,ispin,jspin) = -1000.0d0 - perturb_dets_hij(a,b,ispin,jspin) = 0.d0 - cycle ! condition not to double count - endif - if(ispin == jspin .and. aorb.le.borb) then - perturb_dets_phase(a,b,ispin,jspin) = -1000.0d0 - perturb_dets_hij(a,b,ispin,jspin) = 0.d0 - cycle ! condition not to double count - endif - do inint = 1, N_int - det_tmp(inint,1) = psi_ref(inint,1,idet) - det_tmp(inint,2) = psi_ref(inint,2,idet) - enddo - ! Do the excitation (aorb,ispin) --> (rorb,ispin) - call clear_bit_to_integer(aorb,det_tmp(1,ispin),N_int) ! hole in "aorb" of spin Ispin - call set_bit_to_integer(rorb,det_tmp(1,ispin),N_int) ! particle in "rorb" of spin Ispin - - ! Do the excitation (borb,jspin) --> (vorb,jspin) - call clear_bit_to_integer(borb,det_tmp(1,jspin),N_int) ! hole in "borb" of spin Jspin - call set_bit_to_integer(vorb,det_tmp(1,jspin),N_int) ! particle in "vorb" of spin Jspin - - ! Check if the excitation is possible or not on psi_ref(idet) - accu_elec= 0 - do inint = 1, N_int - accu_elec+= popcnt(det_tmp(inint,1)) + popcnt(det_tmp(inint,2)) - enddo - if(accu_elec .ne. elec_num_tab_local(2)+elec_num_tab_local(1))then - perturb_dets_phase(a,b,ispin,jspin) = -1000.0d0 - perturb_dets_hij(a,b,ispin,jspin) = 0.d0 - cycle - endif - do inint = 1, N_int - perturb_dets(inint,1,a,b,ispin,jspin) = det_tmp(inint,1) - perturb_dets(inint,2,a,b,ispin,jspin) = det_tmp(inint,2) - enddo - - call get_double_excitation(psi_ref(1,1,idet),det_tmp,exc,phase,N_int) - perturb_dets_phase(a,b,ispin,jspin) = phase - - do istate = 1, N_states - delta_e(a,b,ispin,jspin,istate) = two_anhil(a,b,ispin,jspin,istate) + delta_e_inactive_virt(istate) - delta_e_inv(a,b,ispin,jspin,istate) = 1.d0 / delta_e(a,b,ispin,jspin,istate) - enddo - if(ispin == jspin)then - perturb_dets_hij(a,b,ispin,jspin) = phase * (active_int(a,b,2) - active_int(a,b,1) ) - else - perturb_dets_hij(a,b,ispin,jspin) = phase * active_int(a,b,1) - endif - call i_H_j(psi_ref(1,1,idet),det_tmp,N_int,hij) - if(hij.ne.perturb_dets_hij(a,b,ispin,jspin))then - print*, active_int(a,b,1) , active_int(b,a,1) - double precision :: hmono,hdouble - call i_H_j_verbose(psi_ref(1,1,idet),det_tmp,N_int,hij,hmono,hdouble) - print*, 'pb !! hij.ne.perturb_dets_hij(a,b,ispin,jspin)' - print*, ispin,jspin - print*, aorb,rorb,borb,vorb - print*, hij,perturb_dets_hij(a,b,ispin,jspin) - call debug_det(psi_ref(1,1,idet),N_int) - call debug_det(det_tmp,N_int) - stop - endif - enddo ! b - enddo ! a - enddo ! jspin - enddo ! ispin - -!!!!!!!!!!!!!!!!!!!!!!!!!!! determination of the connections between I and the other J determinants mono excited in the CAS -!!!!!!!!!!!!!!!!!!!!!!!!!!!! the determinants I and J must be connected by the following operator -!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!!!!!!!!!!!!! - do jdet = 1, idx(0) - if(degree(jdet)==1)then - call get_mono_excitation(psi_ref(1,1,idet),psi_ref(1,1,idx(jdet)),exc,phase,N_int) - if (exc(0,1,1) == 1) then - ! Mono alpha - i_hole = list_act_reverse(exc(1,1,1)) !!! a_a - i_part = list_act_reverse(exc(1,2,1)) !!! a^{\dagger}_{b} - kspin = 1 !!! kspin - index_orb_act_mono(idx(jdet),1) = i_hole - index_orb_act_mono(idx(jdet),2) = i_part - index_orb_act_mono(idx(jdet),3) = kspin - call i_H_j_dyall(psi_active(1,1,idet),psi_active(1,1,idx(jdet)),N_int,hij) - fock_operator_local(i_hole,i_part,kspin) = hij * phase ! phase less fock operator - fock_operator_local(i_part,i_hole,kspin) = hij * phase ! phase less fock operator - else - ! Mono beta - i_hole = list_act_reverse(exc(1,1,2)) !!! a_a - i_part = list_act_reverse(exc(1,2,2)) !!! a^{\dagger}_{b} - kspin = 2 !!! kspin - index_orb_act_mono(idx(jdet),1) = i_hole - index_orb_act_mono(idx(jdet),2) = i_part - index_orb_act_mono(idx(jdet),3) = kspin - call i_H_j_dyall(psi_active(1,1,idet),psi_active(1,1,idx(jdet)),N_int,hij) - fock_operator_local(i_hole,i_part,kspin) = hij * phase ! phase less fock operator - fock_operator_local(i_part,i_hole,kspin) = hij * phase ! phase less fock operator - endif - else if(degree(jdet)==2)then - call get_double_excitation(psi_ref(1,1,idet),psi_ref(1,1,idx(jdet)),exc,phase,N_int) - if (exc(0,1,1) == 1) then - ! Mono alpha - index_orb_act_mono(idx(jdet),1) = list_act_reverse(exc(1,1,1)) !!! a_a ALPHA - index_orb_act_mono(idx(jdet),2) = list_act_reverse(exc(1,2,1)) !!! a^{\dagger}_{b} ALPHA - index_orb_act_mono(idx(jdet),3) = 1 - ! Mono beta - index_orb_act_mono(idx(jdet),4) = list_act_reverse(exc(1,1,2)) !!! a_a BETA - index_orb_act_mono(idx(jdet),5) = list_act_reverse(exc(1,2,2)) !!! a^{\dagger}_{b} BETA - index_orb_act_mono(idx(jdet),6) = 2 - else if (exc(0,1,1) == 2) then - index_orb_act_mono(idx(jdet),1) = list_act_reverse(exc(1,1,1)) !!! a_a ALPHA - index_orb_act_mono(idx(jdet),2) = list_act_reverse(exc(1,2,1)) !!! a^{\dagger}_{b} ALPHA - index_orb_act_mono(idx(jdet),3) = 1 - index_orb_act_mono(idx(jdet),4) = list_act_reverse(exc(2,1,1)) !!! a_c ALPHA - index_orb_act_mono(idx(jdet),5) = list_act_reverse(exc(2,2,1)) !!! a^{\dagger}_{d} ALPHA - index_orb_act_mono(idx(jdet),6) = 1 - else if (exc(0,1,2) == 2) then - index_orb_act_mono(idx(jdet),1) = list_act_reverse(exc(1,1,2)) !!! a_a BETA - index_orb_act_mono(idx(jdet),2) = list_act_reverse(exc(2,1,2)) !!! a^{\dagger}_{b} BETA - index_orb_act_mono(idx(jdet),3) = 2 - index_orb_act_mono(idx(jdet),4) = list_act_reverse(exc(1,2,2)) !!! a_c BETA - index_orb_act_mono(idx(jdet),5) = list_act_reverse(exc(2,2,2)) !!! a^{\dagger}_{d} BETA - index_orb_act_mono(idx(jdet),6) = 2 - endif - endif - enddo - - - -! do jdet = 1, idx(0) -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CASE OF THE MONO EXCITATIONS -! if(degree(jdet) == 1)then -! ! two determinants | Idet > and | Jdet > which are connected throw a mono excitation operator -! ! are connected by the presence of the perturbers determinants |det_tmp> -! aorb = index_orb_act_mono(idx(jdet),1) ! a_{aorb} -! borb = index_orb_act_mono(idx(jdet),2) ! a^{\dagger}_{borb} -! kspin = index_orb_act_mono(idx(jdet),3) ! spin of the excitation -! ! the determinants Idet and Jdet interact throw the following operator -! ! | Jdet > = a^{\dagger}_{borb,kspin} a_{aorb, kspin} | Idet > - -! accu_contrib = 0.d0 - do ispin = 1, 2 ! you loop on all possible spin for the excitation - ! a^{\dagger}_r a_{a} (ispin) - !!!! SECOND ORDER CONTRIBTIONS - ! | det_tmp > = a^{\dagger}_{rorb,ispin} a^{\dagger}_{vorb,jspin} a_{corb,jspin} a_{iorb,ispin} | Idet > - do jspin = 1, 2 - if(ispin == 2 .and. jspin ==1)cycle - do b = 1, n_act_orb - do a = 1, n_act_orb - logical :: cycle_same_spin_second_order(2) - cycle_same_spin_second_order(1) = .False. - cycle_same_spin_second_order(2) = .False. - if(perturb_dets_phase(a,b,ispin,jspin).le.-10d0)cycle - if(ispin == jspin .and. vorb.le.rorb)then - cycle_same_spin_second_order(1) = .True. - endif - if(ispin == jspin .and. aorb.le.borb)then - cycle_same_spin_second_order(2) = .True. - endif - do inint = 1, N_int - det_tmp(inint,1) = perturb_dets(inint,1,a,b,ispin,jspin) - det_tmp(inint,2) = perturb_dets(inint,2,a,b,ispin,jspin) - enddo - do jdet = 1, idx(0) -! if(idx(jdet).gt.idet)cycle - do istate = 1, N_states - call i_H_j(psi_ref(1,1,idx(jdet)),det_tmp,N_int,hij) - matrix_2p(idx(jdet),idet,istate) += hij * perturb_dets_hij(a,b,ispin,jspin) * delta_e_inv(a,b,ispin,jspin,istate) - enddo - enddo ! jdet - enddo ! b - enddo ! a - enddo ! jspin - enddo ! ispin - -! else if (degree(jdet) == 0)then -! -! endif -! enddo !! jdet - - - enddo - enddo - enddo -end diff --git a/src/mrpt_utils/set_as_holes_and_particles.irp.f b/src/mrpt_utils/set_as_holes_and_particles.irp.f deleted file mode 100644 index d356e4b9..00000000 --- a/src/mrpt_utils/set_as_holes_and_particles.irp.f +++ /dev/null @@ -1,27 +0,0 @@ - -subroutine set_generators_bitmasks_as_holes_and_particles - implicit none - integer :: i,k - do k = 1, N_generators_bitmask - do i = 1, N_int - ! Pure single part - generators_bitmask(i,1,1,k) = holes_operators(i,1) ! holes for pure single exc alpha - generators_bitmask(i,1,2,k) = particles_operators(i,1) ! particles for pure single exc alpha - generators_bitmask(i,2,1,k) = holes_operators(i,2) ! holes for pure single exc beta - generators_bitmask(i,2,2,k) = particles_operators(i,2) ! particles for pure single exc beta - - ! Double excitation - generators_bitmask(i,1,3,k) = holes_operators(i,1) ! holes for first single exc alpha - generators_bitmask(i,1,4,k) = particles_operators(i,1) ! particles for first single exc alpha - generators_bitmask(i,2,3,k) = holes_operators(i,2) ! holes for first single exc beta - generators_bitmask(i,2,4,k) = particles_operators(i,2) ! particles for first single exc beta - - generators_bitmask(i,1,5,k) = holes_operators(i,1) ! holes for second single exc alpha - generators_bitmask(i,1,6,k) = particles_operators(i,1) ! particles for second single exc alpha - generators_bitmask(i,2,5,k) = holes_operators(i,2) ! holes for second single exc beta - generators_bitmask(i,2,6,k) = particles_operators(i,2) ! particles for second single exc beta - - enddo - enddo - touch generators_bitmask -end diff --git a/src/mrpt_utils/utils_bitmask.irp.f b/src/mrpt_utils/utils_bitmask.irp.f deleted file mode 100644 index 1b262eb6..00000000 --- a/src/mrpt_utils/utils_bitmask.irp.f +++ /dev/null @@ -1,36 +0,0 @@ - -subroutine give_active_part_determinant(det_in,det_out) - implicit none - use bitmasks - integer(bit_kind),intent(in) :: det_in(N_int,2) - integer(bit_kind),intent(out) :: det_out(N_int,2) - integer :: i - do i = 1,N_int - det_out(i,1) = iand(det_in(i,1),cas_bitmask(i,1,1)) - det_out(i,2) = iand(det_in(i,2),cas_bitmask(i,1,1)) - enddo -end - -subroutine give_core_inactive_part_determinant(det_in,det_out) - implicit none - use bitmasks - integer(bit_kind),intent(in) :: det_in(N_int,2) - integer(bit_kind),intent(out) :: det_out(N_int,2) - integer :: i - do i = 1,N_int - det_out(i,1) = iand(det_in(i,1),reunion_of_core_inact_bitmask(i,1)) - det_out(i,2) = iand(det_in(i,2),reunion_of_core_inact_bitmask(i,1)) - enddo -end - -subroutine give_virt_part_determinant(det_in,det_out) - implicit none - use bitmasks - integer(bit_kind),intent(in) :: det_in(N_int,2) - integer(bit_kind),intent(out) :: det_out(N_int,2) - integer :: i - do i = 1,N_int - det_out(i,1) = iand(det_in(i,1),virt_bitmask(i,1)) - det_out(i,2) = iand(det_in(i,2),virt_bitmask(i,1)) - enddo -end diff --git a/src/perturbation/NEED b/src/perturbation/NEED index 916d076c..76c1cf2d 100644 --- a/src/perturbation/NEED +++ b/src/perturbation/NEED @@ -1,4 +1,3 @@ determinants hartree_fock davidson -mrpt_utils diff --git a/src/perturbation/pt2_new.irp.f b/src/perturbation/pt2_new.irp.f deleted file mode 100644 index 2f9cfbfb..00000000 --- a/src/perturbation/pt2_new.irp.f +++ /dev/null @@ -1,71 +0,0 @@ -subroutine i_H_psi_pert_new_minilist(key,keys,idx_key,N_minilist,coef,Nint,Ndet,Ndet_max,Nstate,i_H_psi_array,coef_pert) - use bitmasks - implicit none - integer, intent(in) :: Nint, Ndet,Ndet_max,Nstate,idx_key(Ndet), N_minilist - integer(bit_kind), intent(in) :: keys(Nint,2,Ndet) - integer(bit_kind), intent(in) :: key(Nint,2) - double precision, intent(in) :: coef(Ndet_max,Nstate) - double precision, intent(out) :: i_H_psi_array(Nstate) - double precision, intent(out) :: coef_pert - - integer :: idx(0:Ndet) - - integer :: i, ii,j, i_in_key, i_in_coef - double precision :: phase - integer :: exc(0:2,2,2) - double precision :: hij - double precision :: delta_e_final - double precision :: hjj - BEGIN_DOC -! Computes = \sum_J c_J . -! -! Uses filter_connected_i_H_psi0 to get all the |J> to which |i> -! is connected. The |J> are searched in short pre-computed lists. - END_DOC - - ASSERT (Nint > 0) - ASSERT (N_int == Nint) - ASSERT (Nstate > 0) - ASSERT (Ndet > 0) - ASSERT (Ndet_max >= Ndet) - i_H_psi_array = 0.d0 - coef_pert = 0.d0 - - call filter_connected_i_H_psi0(keys,key,Nint,N_minilist,idx) - double precision :: coef_array(Nstate) - if (Nstate == 1) then - - do ii=1,idx(0) - i_in_key = idx(ii) - i_in_coef = idx_key(idx(ii)) - !DIR$ FORCEINLINE - call i_H_j(keys(1,1,i_in_key),key,Nint,hij) - i_H_psi_array(1) = i_H_psi_array(1) + coef(i_in_coef,1)*hij - do i = 1, Nstate - coef_array(i) = coef(i_in_coef,i) - enddo - call get_delta_e_dyall(keys(1,1,i_in_key),key,coef_array,hij,delta_e_final) - - coef_pert += coef(i_in_coef,1)*hij / delta_e_final - enddo - if (coef_pert * i_H_psi_array(1) > 0.d0)then - print*, coef_pert * i_H_psi_array(1) - endif - - else - - do ii=1,idx(0) - i_in_key = idx(ii) - i_in_coef = idx_key(idx(ii)) - !DIR$ FORCEINLINE - call i_H_j(keys(1,1,i_in_key),key,Nint,hij) - i_H_psi_array(1) = i_H_psi_array(1) + coef(i_in_coef,1)*hij - do j = 1, Nstate - i_H_psi_array(j) = i_H_psi_array(j) + coef(i_in_coef,j)*hij - enddo - enddo - - endif - -end - diff --git a/src/scf_utils/README.rst b/src/scf_utils/README.rst index db4f3c2c..a62e26b4 100644 --- a/src/scf_utils/README.rst +++ b/src/scf_utils/README.rst @@ -4,11 +4,11 @@ scf_utils -The scf_utils module performs *Restricted* SCF calculations (the +The scf_utils module is an abstract module which contains the basics to perform *Restricted* SCF calculations (the spatial part of the |MOs| is common for alpha and beta spinorbitals) based on a single-determinant wave function. This module does not produce any executable *and must not do*, but instead it contains everything one needs to perform an orbital optimization based on an Fock matrix. -The ``scf_utils`` module is included in the :file:`NEED` of the various single determinant SCF procedures, such as ``hartree_fock`` or ``kohn_sham``, where a specific definition of the Fock matrix is given (see :file:`hartree_fock fock_matrix_hf.irp.f` for an example). +The ``scf_utils`` module is meant to be included in the :file:`NEED` of the various single determinant SCF procedures, such as ``hartree_fock`` or ``kohn_sham``, where a specific definition of the Fock matrix is given (see :file:`hartree_fock fock_matrix_hf.irp.f` for an example). All SCF programs perform the following actions: From 95b618ceb611931a83c89c94bab2aa710e36f006 Mon Sep 17 00:00:00 2001 From: Emmanuel Giner Date: Fri, 28 Dec 2018 14:26:53 +0100 Subject: [PATCH 02/16] added ROHF_b2.gms.out --- scripts/module/module_handler.py | 1 - tests/input/ROHF_b2.gms.out | 2755 ++++++++++++++++++++++++++++++ 2 files changed, 2755 insertions(+), 1 deletion(-) create mode 100644 tests/input/ROHF_b2.gms.out diff --git a/scripts/module/module_handler.py b/scripts/module/module_handler.py index a31a1d0c..22677d33 100755 --- a/scripts/module/module_handler.py +++ b/scripts/module/module_handler.py @@ -84,7 +84,6 @@ def get_dict_child(l_root_abs=None): except IOError: pass else: -# print module_rel if module_rel not in d_ref: d_ref[module_rel] = l_children else: diff --git a/tests/input/ROHF_b2.gms.out b/tests/input/ROHF_b2.gms.out new file mode 100644 index 00000000..3f2b579a --- /dev/null +++ b/tests/input/ROHF_b2.gms.out @@ -0,0 +1,2755 @@ +----- GAMESS execution script 'rungms' ----- +This job is running on host quad7 +under operating system Linux at Wed Nov 15 13:27:29 CET 2017 +Available scratch disk space (Kbyte units) at beginning of the job is +Filesystem 1K-blocks Used Available Use% Mounted on +/dev/sda1 1922860892 1593693036 231492132 88% /scr +GAMESS temporary binary files will be written to /scr/giner +GAMESS supplementary output files will be written to /scr/giner +Copying input file ROHF_Ag.inp to your run's scratch directory... + + Distributed Data Interface kickoff program. + Initiating 1 compute processes on 1 nodes to run the following command: + /opt/gamess/gamess.00.x ROHF_Ag + + ****************************************************** + * GAMESS VERSION = 5 DEC 2014 (R1) * + * FROM IOWA STATE UNIVERSITY * + * M.W.SCHMIDT, K.K.BALDRIDGE, J.A.BOATZ, S.T.ELBERT, * + * M.S.GORDON, J.H.JENSEN, S.KOSEKI, N.MATSUNAGA, * + * K.A.NGUYEN, S.J.SU, T.L.WINDUS, * + * TOGETHER WITH M.DUPUIS, J.A.MONTGOMERY * + * J.COMPUT.CHEM. 14, 1347-1363(1993) * + **************** 64 BIT LINUX VERSION **************** + + SINCE 1993, STUDENTS AND POSTDOCS WORKING AT IOWA STATE UNIVERSITY + AND ALSO IN THEIR VARIOUS JOBS AFTER LEAVING ISU HAVE MADE IMPORTANT + CONTRIBUTIONS TO THE CODE: + IVANA ADAMOVIC, CHRISTINE AIKENS, YURI ALEXEEV, POOJA ARORA, + ANDREY ASADCHEV, ROB BELL, PRADIPTA BANDYOPADHYAY, JONATHAN BENTZ, + BRETT BODE, KURT BRORSEN, CALEB CARLIN, GALINA CHABAN, WEI CHEN, + CHEOL HO CHOI, PAUL DAY, ALBERT DEFUSCO, NUWAN DESILVA, TIM DUDLEY, + DMITRI FEDOROV, GRAHAM FLETCHER, MARK FREITAG, KURT GLAESEMANN, + DAN KEMP, GRANT MERRILL, NORIYUKI MINEZAWA, JONATHAN MULLIN, + TAKESHI NAGATA, SEAN NEDD, HEATHER NETZLOFF, BOSILJKA NJEGIC, RYAN OLSON, + MIKE PAK, SPENCER PRUITT, LUKE ROSKOP, JIM SHOEMAKER, LYUDMILA SLIPCHENKO, + TONY SMITH, SAROM SOK, JIE SONG, TETSUYA TAKETSUGU, SIMON WEBB, + PENG XU, SOOHAENG YOO, FEDERICO ZAHARIEV + + ADDITIONAL CODE HAS BEEN PROVIDED BY COLLABORATORS IN OTHER GROUPS: + IOWA STATE UNIVERSITY: + JOE IVANIC, AARON WEST, LAIMUTIS BYTAUTAS, KLAUS RUEDENBERG + UNIVERSITY OF TOKYO: KIMIHIKO HIRAO, TAKAHITO NAKAJIMA, + TAKAO TSUNEDA, MUNEAKI KAMIYA, SUSUMU YANAGISAWA, + KIYOSHI YAGI, MAHITO CHIBA, SEIKEN TOKURA, NAOAKI KAWAKAMI + UNIVERSITY OF AARHUS: FRANK JENSEN + UNIVERSITY OF IOWA: VISVALDAS KAIRYS, HUI LI + NATIONAL INST. OF STANDARDS AND TECHNOLOGY: WALT STEVENS, DAVID GARMER + UNIVERSITY OF PISA: BENEDETTA MENNUCCI, JACOPO TOMASI + UNIVERSITY OF MEMPHIS: HENRY KURTZ, PRAKASHAN KORAMBATH + UNIVERSITY OF ALBERTA: TOBY ZENG, MARIUSZ KLOBUKOWSKI + UNIVERSITY OF NEW ENGLAND: MARK SPACKMAN + MIE UNIVERSITY: HIROAKI UMEDA + NAT. INST. OF ADVANCED INDUSTRIAL SCIENCE AND TECHNOLOGY: KAZUO KITAURA + MICHIGAN STATE UNIVERSITY: + KAROL KOWALSKI, MARTA WLOCH, JEFFREY GOUR, JESSE LUTZ, + WEI LI, PIOTR PIECUCH + UNIVERSITY OF SILESIA: MONIKA MUSIAL, STANISLAW KUCHARSKI + FACULTES UNIVERSITAIRES NOTRE-DAME DE LA PAIX: + OLIVIER QUINET, BENOIT CHAMPAGNE + UNIVERSITY OF CALIFORNIA - SANTA BARBARA: BERNARD KIRTMAN + INSTITUTE FOR MOLECULAR SCIENCE: + KAZUYA ISHIMURA, MICHIO KATOUDA, AND SHIGERU NAGASE + UNIVERSITY OF NOTRE DAME: ANNA POMOGAEVA, DAN CHIPMAN + KYUSHU UNIVERSITY: + HARUYUKI NAKANO, + FENG LONG GU, JACEK KORCHOWIEC, MARCIN MAKOWSKI, AND YURIKO AOKI, + HIROTOSHI MORI AND EISAKU MIYOSHI + PENNSYLVANIA STATE UNIVERSITY: + TZVETELIN IORDANOV, CHET SWALINA, JONATHAN SKONE, + SHARON HAMMES-SCHIFFER + WASEDA UNIVERSITY: + MASATO KOBAYASHI, TOMOKO AKAMA, TSUGUKI TOUMA, + TAKESHI YOSHIKAWA, YASUHIRO IKABATA, HIROMI NAKAI + NANJING UNIVERSITY: SHUHUA LI + UNIVERSITY OF NEBRASKA: + PEIFENG SU, DEJUN SI, NANDUN THELLAMUREGE, YALI WANG, HUI LI + UNIVERSITY OF ZURICH: ROBERTO PEVERATI, KIM BALDRIDGE + N. COPERNICUS UNIVERSITY AND JACKSON STATE UNIVERSITY: + MARIA BARYSZ + UNIVERSITY OF COPENHAGEN: CASPER STEINMANN + TOKYO INSTITUTE OF TECHNOLOGY: HIROYA NAKATA + NAGOYA UNIVERSITY: YOSHIO NISHIMOTO, STEPHAN IRLE + + EXECUTION OF GAMESS BEGUN Wed Nov 15 13:27:29 2017 + + ECHO OF THE FIRST FEW INPUT CARDS - + INPUT CARD> $CONTRL + INPUT CARD> EXETYP= RUN + INPUT CARD> COORD= UNIQUE UNITS= BOHR + INPUT CARD> RUNTYP= ENERGY + INPUT CARD> SCFTYP= ROHF + INPUT CARD> CITYP= NONE + INPUT CARD> MULT= 2 + INPUT CARD> ICHARG= +2 + INPUT CARD> MAXIT=200 + INPUT CARD> ISPHER=1 + INPUT CARD> $END + INPUT CARD> + INPUT CARD> $SYSTEM + INPUT CARD> MEMORY=350000000 + INPUT CARD> MEMDDI=200 + INPUT CARD> $END + INPUT CARD> + INPUT CARD> $GUESS + INPUT CARD> GUESS=MOREAD + INPUT CARD> NORB=87 + INPUT CARD> $END + INPUT CARD> NORDER=1 + INPUT CARD> IORDER(34)=31 + INPUT CARD> IORDER(31)=34 + INPUT CARD> + INPUT CARD> $SCF + INPUT CARD> DAMP=.F. SOSCF=.F. DEM=.F. SHIFT=.T. + INPUT CARD> DIRSCF=.F. EXTRAP=.F. DIIS=.T. NOCONV=.F. + INPUT CARD> COUPLE=.F. RSTRCT=.T. + INPUT CARD> $END + INPUT CARD> + INPUT CARD> $TRANS + INPUT CARD> DIRTRF=.FALSE. + INPUT CARD> AOINTS=DIST + INPUT CARD> $END + INPUT CARD> + INPUT CARD> $MCSCF + INPUT CARD> FOCAS=.F. SOSCF=.F. FULLNR=.T. + INPUT CARD> CISTEP=GUGA EKT=.F. QUAD=.F. JACOBI=.f. + INPUT CARD> MAXIT=1000 + INPUT CARD> $END + INPUT CARD> + INPUT CARD> $DRT + INPUT CARD> NMCC=21 NDOC=10 NALP=1 NVAL=4 NEXT=0 ISTSYM=1 + INPUT CARD> GROUP=C1 + INPUT CARD> IEXCIT=2 + INPUT CARD> MXNINT=6000000 + INPUT CARD> NPRT=2 + INPUT CARD> $END + INPUT CARD> + 350000000 WORDS OF MEMORY AVAILABLE + + BASIS OPTIONS + ------------- + GBASIS=N31 IGAUSS= 6 POLAR=NONE + NDFUNC= 0 NFFUNC= 0 DIFFSP= F + NPFUNC= 0 DIFFS= F BASNAM= + + + RUN TITLE + --------- + BLALA + + THE POINT GROUP OF THE MOLECULE IS DN + THE ORDER OF THE PRINCIPAL AXIS IS 2 + + ATOM ATOMIC COORDINATES (BOHR) + CHARGE X Y Z + CU 29.0 0.0000000000 0.0000000000 0.0000000000 + N 7.0 -2.6951374965 0.0000000000 2.6951374965 + N 7.0 2.6951374965 0.0000000000 -2.6951374965 + N 7.0 -2.6951374965 0.0000000000 -2.6951374965 + N 7.0 2.6951374965 0.0000000000 2.6951374965 + H 1.0 -3.2517012440 -1.7594000000 3.2517012440 + H 1.0 3.2517012440 -1.7594000000 -3.2517012440 + H 1.0 -3.2517012440 1.7594000000 -3.2517012440 + H 1.0 3.2517012440 1.7594000000 3.2517012440 + H 1.0 -4.3293319785 0.8793000000 2.1740705094 + H 1.0 4.3293319785 0.8793000000 -2.1740705094 + H 1.0 -4.3293319785 -0.8793000000 -2.1740705094 + H 1.0 4.3293319785 -0.8793000000 2.1740705094 + H 1.0 -2.1740705094 0.8793000000 4.3293319785 + H 1.0 2.1740705094 0.8793000000 -4.3293319785 + H 1.0 -2.1740705094 -0.8793000000 -4.3293319785 + H 1.0 2.1740705094 -0.8793000000 4.3293319785 + + INTERNUCLEAR DISTANCES (ANGS.) + ------------------------------ + + 1 CU 2 N 3 N 4 N 5 N + + 1 CU 0.0000000 2.0169591 * 2.0169591 * 2.0169591 * 2.0169591 * + 2 N 2.0169591 * 0.0000000 4.0339182 2.8524109 * 2.8524109 * + 3 N 2.0169591 * 4.0339182 0.0000000 2.8524109 * 2.8524109 * + 4 N 2.0169591 * 2.8524109 * 2.8524109 * 0.0000000 4.0339182 + 5 N 2.0169591 * 2.8524109 * 2.8524109 * 4.0339182 0.0000000 + 6 H 2.6054987 * 1.0199560 * 4.5467773 3.2949579 3.2949579 + 7 H 2.6054987 * 4.5467773 1.0199560 * 3.2949579 3.2949579 + 8 H 2.6054987 * 3.2949579 3.2949579 1.0199560 * 4.5467773 + 9 H 2.6054987 * 3.2949579 3.2949579 4.5467773 1.0199560 * + 10 H 2.6055124 * 1.0199912 * 4.5467852 2.7574627 * 3.7563330 + 11 H 2.6055124 * 4.5467852 1.0199912 * 3.7563330 2.7574627 * + 12 H 2.6055124 * 2.7574627 * 3.7563330 1.0199912 * 4.5467852 + 13 H 2.6055124 * 3.7563330 2.7574627 * 4.5467852 1.0199912 * + 14 H 2.6055124 * 1.0199912 * 4.5467852 3.7563330 2.7574627 * + 15 H 2.6055124 * 4.5467852 1.0199912 * 2.7574627 * 3.7563330 + 16 H 2.6055124 * 3.7563330 2.7574627 * 1.0199912 * 4.5467852 + 17 H 2.6055124 * 2.7574627 * 3.7563330 4.5467852 1.0199912 * + + 6 H 7 H 8 H 9 H 10 H + + 1 CU 2.6054987 * 2.6054987 * 2.6054987 * 2.6054987 * 2.6055124 * + 2 N 1.0199560 * 4.5467773 3.2949579 3.2949579 1.0199912 * + 3 N 4.5467773 1.0199560 * 3.2949579 3.2949579 4.5467852 + 4 N 3.2949579 3.2949579 1.0199560 * 4.5467773 2.7574627 * + 5 N 3.2949579 3.2949579 4.5467773 1.0199560 * 3.7563330 + 6 H 0.0000000 4.8669490 3.9129141 3.9129141 1.6124990 * + 7 H 4.8669490 0.0000000 3.9129141 3.9129141 5.1271186 + 8 H 3.9129141 3.9129141 0.0000000 4.8669490 2.9640948 * + 9 H 3.9129141 3.9129141 4.8669490 0.0000000 4.0787151 + 10 H 1.6124990 * 5.1271186 2.9640948 * 4.0787151 0.0000000 + 11 H 5.1271186 1.6124990 * 4.0787151 2.9640948 * 5.1272549 + 12 H 2.9640948 * 4.0787151 1.6124990 * 5.1271186 2.4820051 * + 13 H 4.0787151 2.9640948 * 5.1271186 1.6124990 * 4.6755179 + 14 H 1.6124990 * 5.1271186 4.0787151 2.9640948 * 1.6129323 * + 15 H 5.1271186 1.6124990 * 2.9640948 * 4.0787151 4.8669490 + 16 H 4.0787151 2.9640948 * 1.6124990 * 5.1271186 3.7430480 + 17 H 2.9640948 * 4.0787151 5.1271186 1.6124990 * 3.7430480 + + 11 H 12 H 13 H 14 H 15 H + + 1 CU 2.6055124 * 2.6055124 * 2.6055124 * 2.6055124 * 2.6055124 * + 2 N 4.5467852 2.7574627 * 3.7563330 1.0199912 * 4.5467852 + 3 N 1.0199912 * 3.7563330 2.7574627 * 4.5467852 1.0199912 * + 4 N 3.7563330 1.0199912 * 4.5467852 3.7563330 2.7574627 * + 5 N 2.7574627 * 4.5467852 1.0199912 * 2.7574627 * 3.7563330 + 6 H 5.1271186 2.9640948 * 4.0787151 1.6124990 * 5.1271186 + 7 H 1.6124990 * 4.0787151 2.9640948 * 5.1271186 1.6124990 * + 8 H 4.0787151 1.6124990 * 5.1271186 4.0787151 2.9640948 * + 9 H 2.9640948 * 5.1271186 1.6124990 * 2.9640948 * 4.0787151 + 10 H 5.1272549 2.4820051 * 4.6755179 1.6129323 * 4.8669490 + 11 H 0.0000000 4.6755179 2.4820051 * 4.8669490 1.6129323 * + 12 H 4.6755179 0.0000000 5.1272549 3.7430480 3.7430480 + 13 H 2.4820051 * 5.1272549 0.0000000 3.7430480 3.7430480 + 14 H 4.8669490 3.7430480 3.7430480 0.0000000 5.1272549 + 15 H 1.6129323 * 3.7430480 3.7430480 5.1272549 0.0000000 + 16 H 3.7430480 1.6129323 * 4.8669490 4.6755179 2.4820051 * + 17 H 3.7430480 4.8669490 1.6129323 * 2.4820051 * 4.6755179 + + 16 H 17 H + + 1 CU 2.6055124 * 2.6055124 * + 2 N 3.7563330 2.7574627 * + 3 N 2.7574627 * 3.7563330 + 4 N 1.0199912 * 4.5467852 + 5 N 4.5467852 1.0199912 * + 6 H 4.0787151 2.9640948 * + 7 H 2.9640948 * 4.0787151 + 8 H 1.6124990 * 5.1271186 + 9 H 5.1271186 1.6124990 * + 10 H 3.7430480 3.7430480 + 11 H 3.7430480 3.7430480 + 12 H 1.6129323 * 4.8669490 + 13 H 4.8669490 1.6129323 * + 14 H 4.6755179 2.4820051 * + 15 H 2.4820051 * 4.6755179 + 16 H 0.0000000 5.1272549 + 17 H 5.1272549 0.0000000 + + * ... LESS THAN 3.000 + + + ATOMIC BASIS SET + ---------------- + THE CONTRACTED PRIMITIVE FUNCTIONS HAVE BEEN UNNORMALIZED + THE CONTRACTED BASIS FUNCTIONS ARE NOW NORMALIZED TO UNITY + + SHELL TYPE PRIMITIVE EXPONENT CONTRACTION COEFFICIENT(S) + + CU + + 1 S 1 76794.3800000 0.001748161083 + 1 S 2 11530.7000000 0.013396020638 + 1 S 3 2626.5750000 0.066108853150 + 1 S 4 740.4903000 0.229826510951 + 1 S 5 237.3528000 0.478767522812 + 1 S 6 81.1581800 0.353073916823 + + 2 L 7 1610.8140000 0.002364054998 0.003963306847 + 2 L 8 383.6367000 0.031536349971 0.031102228803 + 2 L 9 124.1733000 0.126945199883 0.136134994761 + 2 L 10 46.7467800 -0.022628399979 0.349291386558 + 2 L 11 19.0656900 -0.619207999430 0.462477982202 + 2 L 12 7.8715670 -0.458539299578 0.202010192226 + + 3 L 13 64.4573200 -0.004331075387 -0.007523724515 + 3 L 14 21.8521200 0.074123076623 -0.029756868084 + 3 L 15 9.4053430 0.254210822713 0.068496535589 + 3 L 16 3.9991680 -0.287484325686 0.402714074065 + 3 L 17 1.6702970 -0.729143665148 0.490848968389 + 3 L 18 0.6596270 -0.211395118888 0.175926788670 + + 4 L 19 2.6000880 0.050275770029 -0.170291095031 + 4 L 20 0.9630940 0.265004000152 0.093101327283 + 4 L 21 0.1361610 -1.120155000642 0.981433571362 + + 5 L 22 0.0473320 1.000000000000 1.000000000000 + + 6 D 23 30.8534100 0.091999053845 + 6 D 24 8.2649850 0.398502116657 + 6 D 25 2.4953320 0.691789728916 + + 7 D 26 0.6676580 1.000000000000 + + N + + 17 S 27 4173.5114600 0.001834772160 + 17 S 28 627.4579110 0.013994627002 + 17 S 29 142.9020930 0.068586551812 + 17 S 30 40.2343293 0.232240873040 + 17 S 31 12.8202129 0.469069948082 + 17 S 32 4.3904370 0.360455199063 + + 18 L 33 11.6263619 -0.114961181702 0.067579743878 + 18 L 34 2.7162798 -0.169117478561 0.323907295893 + 18 L 35 0.7722184 1.145851947027 0.740895139755 + + 19 L 36 0.2120315 1.000000000000 1.000000000000 + + H + + 26 S 37 18.7311370 0.033494604338 + 26 S 38 2.8253944 0.234726953484 + 26 S 39 0.6401217 0.813757326146 + + 27 S 40 0.1612778 1.000000000000 + + H + + 34 S 41 18.7311370 0.033494604338 + 34 S 42 2.8253944 0.234726953484 + 34 S 43 0.6401217 0.813757326146 + + 35 S 44 0.1612778 1.000000000000 + + H + + 42 S 45 18.7311370 0.033494604338 + 42 S 46 2.8253944 0.234726953484 + 42 S 47 0.6401217 0.813757326146 + + 43 S 48 0.1612778 1.000000000000 + + TOTAL NUMBER OF BASIS SET SHELLS = 43 + NUMBER OF CARTESIAN GAUSSIAN BASIS FUNCTIONS = 89 + NOTE: THIS RUN WILL RESTRICT THE MO VARIATION SPACE TO SPHERICAL HARMONICS. + THE NUMBER OF ORBITALS KEPT IN THE VARIATIONAL SPACE WILL BE PRINTED LATER. + NUMBER OF ELECTRONS = 67 + CHARGE OF MOLECULE = 2 + SPIN MULTIPLICITY = 2 + NUMBER OF OCCUPIED ORBITALS (ALPHA) = 34 + NUMBER OF OCCUPIED ORBITALS (BETA ) = 33 + TOTAL NUMBER OF ATOMS = 17 + THE NUCLEAR REPULSION ENERGY IS 425.1940993151 + + $CONTRL OPTIONS + --------------- + SCFTYP=ROHF RUNTYP=ENERGY EXETYP=RUN + MPLEVL= 0 CITYP =NONE CCTYP =NONE VBTYP =NONE + DFTTYP=NONE TDDFT =NONE + MULT = 2 ICHARG= 2 NZVAR = 0 COORD =UNIQUE + PP =NONE RELWFN=NONE LOCAL =NONE NUMGRD= F + ISPHER= 1 NOSYM = 0 MAXIT = 200 UNITS =BOHR + PLTORB= F MOLPLT= F AIMPAC= F FRIEND= + NPRINT= 7 IREST = 0 GEOM =INPUT + NORMF = 0 NORMP = 0 ITOL = 20 ICUT = 9 + INTTYP=BEST GRDTYP=BEST QMTTOL= 1.0E-06 + + $SYSTEM OPTIONS + --------------- + REPLICATED MEMORY= 350000000 WORDS (ON EVERY NODE). + DISTRIBUTED MEMDDI= 200 MILLION WORDS IN AGGREGATE, + MEMDDI DISTRIBUTED OVER 1 PROCESSORS IS 200000000 WORDS/PROCESSOR. + TOTAL MEMORY REQUESTED ON EACH PROCESSOR= 550000000 WORDS. + TIMLIM= 525600.00 MINUTES, OR 365.0 DAYS. + PARALL= F BALTYP= DLB KDIAG= 0 COREFL= F + MXSEQ2= 300 MXSEQ3= 150 mem10= 0 + + ---------------- + PROPERTIES INPUT + ---------------- + + MOMENTS FIELD POTENTIAL DENSITY + IEMOM = 1 IEFLD = 0 IEPOT = 0 IEDEN = 0 + WHERE =COMASS WHERE =NUCLEI WHERE =NUCLEI WHERE =NUCLEI + OUTPUT=BOTH OUTPUT=BOTH OUTPUT=BOTH OUTPUT=BOTH + IEMINT= 0 IEFINT= 0 IEDINT= 0 + MORB = 0 + LEVEL SHIFTING IN EFFECT + RESTRICTION OF ORBITAL MIXING IN EFFECT + DIIS IN EFFECT + ORBITAL PRINTING OPTION: NPREO= 1 89 2 1 + + ------------------------------- + INTEGRAL TRANSFORMATION OPTIONS + ------------------------------- + NWORD = 0 + CUTOFF = 1.0E-09 MPTRAN = 0 + DIRTRF = F AOINTS =DIST + + ---------------------- + INTEGRAL INPUT OPTIONS + ---------------------- + NOPK = 1 NORDER= 0 SCHWRZ= T + + ------------------------------------------ + THE POINT GROUP IS DN , NAXIS= 2, ORDER= 4 + ------------------------------------------ + + -- VARIATIONAL SPACE WILL BE RESTRICTED TO PURE SPHERICAL HARMONICS ONLY -- + AFTER EXCLUDING CONTAMINANT COMBINATIONS FROM THE CARTESIAN GAUSSIAN BASIS + SET, THE NUMBER OF SPHERICAL HARMONICS KEPT IN THE VARIATION SPACE IS 87 + + DIMENSIONS OF THE SYMMETRY SUBSPACES ARE + A = 24 B1 = 21 B3 = 21 B2 = 21 + + ..... DONE SETTING UP THE RUN ..... + STEP CPU TIME = 0.12 TOTAL CPU TIME = 0.1 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.1 SECONDS, CPU UTILIZATION IS 92.31% + + ******************** + 1 ELECTRON INTEGRALS + ******************** + ...... END OF ONE-ELECTRON INTEGRALS ...... + STEP CPU TIME = 0.01 TOTAL CPU TIME = 0.1 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.1 SECONDS, CPU UTILIZATION IS 92.86% + + ------------- + GUESS OPTIONS + ------------- + GUESS =MOREAD NORB = 87 NORDER= 0 + MIX = F PRTMO = F PUNMO = F + TOLZ = 1.0E-08 TOLE = 1.0E-05 + SYMDEN= F PURIFY= F + + INITIAL GUESS ORBITALS GENERATED BY MOREAD ROUTINE. + + STATISTICS FOR GENERATION OF SYMMETRY ORBITAL -Q- MATRIX + NUMBER OF CARTESIAN ATOMIC ORBITALS= 89 + NUMBER OF SPHERICAL CONTAMINANTS DROPPED= 2 + NUMBER OF LINEARLY DEPENDENT MOS DROPPED= 0 + TOTAL NUMBER OF MOS IN VARIATION SPACE= 87 + + SYMMETRIES FOR INITIAL GUESS ORBITALS FOLLOW. ALPHA SET(S). + 34 ORBITALS ARE OCCUPIED ( 13 CORE ORBITALS). + 14=A 15=B1 16=B3 17=B2 18=A 19=B2 20=B3 + 21=B1 22=B3 23=B1 24=A 25=B2 26=A 27=B2 + 28=B3 29=B1 30=B3 31=B1 32=A 33=A 34=B2 + 35=A 36=A 37=B3 38=B1 39=B3 40=A 41=A + 42=A 43=A 44=A + + SYMMETRIES FOR INITIAL GUESS ORBITALS FOLLOW. BETA SET(S). + 33 ORBITALS ARE OCCUPIED ( 13 CORE ORBITALS). + 14=A 15=B1 16=B3 17=B2 18=A 19=B2 20=B3 + 21=B1 22=B3 23=B1 24=A 25=B2 26=A 27=B2 + 28=B3 29=B1 30=B3 31=B1 32=A 33=A 34=B2 + 35=A 36=A 37=B3 38=B1 39=B3 40=A 41=A + 42=A 43=A + ...... END OF INITIAL ORBITAL SELECTION ...... + STEP CPU TIME = 0.01 TOTAL CPU TIME = 0.1 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.2 SECONDS, CPU UTILIZATION IS 87.50% + + ---------------------- + AO INTEGRAL TECHNOLOGY + ---------------------- + S,P,L SHELL ROTATED AXIS INTEGRALS, REPROGRAMMED BY + KAZUYA ISHIMURA (IMS) AND JOSE SIERRA (SYNSTAR). + S,P,D,L SHELL ROTATED AXIS INTEGRALS PROGRAMMED BY + KAZUYA ISHIMURA (INSTITUTE FOR MOLECULAR SCIENCE). + S,P,D,F,G SHELL TO TOTAL QUARTET ANGULAR MOMENTUM SUM 5, + ERIC PROGRAM BY GRAHAM FLETCHER (ELORET AND NASA ADVANCED + SUPERCOMPUTING DIVISION, AMES RESEARCH CENTER). + S,P,D,F,G,L SHELL GENERAL RYS QUADRATURE PROGRAMMED BY + MICHEL DUPUIS (PACIFIC NORTHWEST NATIONAL LABORATORY). + + -------------------- + 2 ELECTRON INTEGRALS + -------------------- + + THE -PK- OPTION IS OFF, THE INTEGRALS ARE NOT IN SUPERMATRIX FORM. + STORING 15000 INTEGRALS/RECORD ON DISK, USING 12 BYTES/INTEGRAL. + TWO ELECTRON INTEGRAL EVALUATION REQUIRES 91342 WORDS OF MEMORY. + SCHWARZ INEQUALITY OVERHEAD: 3951 INTEGRALS, T= 0.01 + II,JST,KST,LST = 1 1 1 1 NREC = 1 INTLOC = 1 + II,JST,KST,LST = 2 1 1 1 NREC = 1 INTLOC = 2 + II,JST,KST,LST = 3 1 1 1 NREC = 1 INTLOC = 34 + II,JST,KST,LST = 4 1 1 1 NREC = 1 INTLOC = 214 + II,JST,KST,LST = 5 1 1 1 NREC = 1 INTLOC = 776 + II,JST,KST,LST = 6 1 1 1 NREC = 1 INTLOC = 2074 + II,JST,KST,LST = 7 1 1 1 NREC = 1 INTLOC = 5929 + II,JST,KST,LST = 8 1 1 1 NREC = 1 INTLOC =14065 + II,JST,KST,LST = 9 1 1 1 NREC = 1 INTLOC =14065 + II,JST,KST,LST = 10 1 1 1 NREC = 1 INTLOC =14065 + II,JST,KST,LST = 11 1 1 1 NREC = 1 INTLOC =14065 + II,JST,KST,LST = 12 1 1 1 NREC = 1 INTLOC =14065 + II,JST,KST,LST = 13 1 1 1 NREC = 1 INTLOC =14065 + II,JST,KST,LST = 14 1 1 1 NREC = 1 INTLOC =14065 + II,JST,KST,LST = 15 1 1 1 NREC = 1 INTLOC =14065 + II,JST,KST,LST = 16 1 1 1 NREC = 1 INTLOC =14065 + II,JST,KST,LST = 17 1 1 1 NREC = 1 INTLOC =14065 + II,JST,KST,LST = 18 1 1 1 NREC = 2 INTLOC = 4018 + II,JST,KST,LST = 19 1 1 1 NREC = 6 INTLOC = 7222 + II,JST,KST,LST = 20 1 1 1 NREC = 19 INTLOC = 2051 + II,JST,KST,LST = 21 1 1 1 NREC = 19 INTLOC = 2051 + II,JST,KST,LST = 22 1 1 1 NREC = 19 INTLOC = 2051 + II,JST,KST,LST = 23 1 1 1 NREC = 19 INTLOC = 2051 + II,JST,KST,LST = 24 1 1 1 NREC = 19 INTLOC = 2051 + II,JST,KST,LST = 25 1 1 1 NREC = 19 INTLOC = 2051 + II,JST,KST,LST = 26 1 1 1 NREC = 19 INTLOC = 2051 + II,JST,KST,LST = 27 1 1 1 NREC = 26 INTLOC = 4759 + II,JST,KST,LST = 28 1 1 1 NREC = 37 INTLOC = 4005 + II,JST,KST,LST = 29 1 1 1 NREC = 37 INTLOC = 4005 + II,JST,KST,LST = 30 1 1 1 NREC = 37 INTLOC = 4005 + II,JST,KST,LST = 31 1 1 1 NREC = 37 INTLOC = 4005 + II,JST,KST,LST = 32 1 1 1 NREC = 37 INTLOC = 4005 + II,JST,KST,LST = 33 1 1 1 NREC = 37 INTLOC = 4005 + II,JST,KST,LST = 34 1 1 1 NREC = 37 INTLOC = 4005 + II,JST,KST,LST = 35 1 1 1 NREC = 47 INTLOC = 983 + II,JST,KST,LST = 36 1 1 1 NREC = 61 INTLOC =14537 + II,JST,KST,LST = 37 1 1 1 NREC = 61 INTLOC =14537 + II,JST,KST,LST = 38 1 1 1 NREC = 61 INTLOC =14537 + II,JST,KST,LST = 39 1 1 1 NREC = 61 INTLOC =14537 + II,JST,KST,LST = 40 1 1 1 NREC = 61 INTLOC =14537 + II,JST,KST,LST = 41 1 1 1 NREC = 61 INTLOC =14537 + II,JST,KST,LST = 42 1 1 1 NREC = 61 INTLOC =14537 + II,JST,KST,LST = 43 1 1 1 NREC = 75 INTLOC = 904 + SCHWARZ INEQUALITY TEST SKIPPED 27670 INTEGRAL BLOCKS. + TOTAL NUMBER OF NONZERO TWO-ELECTRON INTEGRALS = 1406679 + 94 INTEGRAL RECORDS WERE STORED ON DISK FILE 8. + ...... END OF TWO-ELECTRON INTEGRALS ..... + STEP CPU TIME = 0.33 TOTAL CPU TIME = 0.5 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.5 SECONDS, CPU UTILIZATION IS 97.92% + + --------------------------- + ROHF SCF CALCULATION + --------------------------- + + NUCLEAR ENERGY = 425.1940993151 + MAXIT =200 NPUNCH= 2 MULT= 2 + EXTRAP=F DAMP=F SHIFT=T RSTRCT=T DIIS=T SOSCF=F + DENSITY MATRIX CONV= 1.00E-05 + ROHF CANONICALIZATION PARAMETERS + C-C O-O V-V + ALPHA -0.5000 0.5000 1.5000 + BETA 1.5000 0.5000 -0.5000 + MEMORY REQUIRED FOR UHF/ROHF ITERS= 123264 WORDS. + + ITER EX TOTAL ENERGY E CHANGE DENSITY CHANGE DIIS ERROR VIR. SHIFT DAMPING + * * * INITIATING DIIS PROCEDURE * * * + 1 0 -1862.9759035833 -1862.9759035833 0.000001601 0.000000367 0.000000000 1.000000000 + 2 1 -1862.9759035833 0.0000000000 0.000000914 0.000000288 0.000000000 1.000000000 + + ----------------- + DENSITY CONVERGED + ----------------- + TIME TO FORM FOCK OPERATORS= 0.1 SECONDS ( 0.0 SEC/ITER) + TIME TO SOLVE SCF EQUATIONS= 0.0 SECONDS ( 0.0 SEC/ITER) + + FINAL ROHF ENERGY IS -1862.9759035833 AFTER 2 ITERATIONS + + -------------------- + SPIN SZ = 0.500 + S-SQUARED = 0.750 + -------------------- + + ------------ + EIGENVECTORS + ------------ + + 1 2 3 4 5 + -329.3214 -41.3530 -36.1428 -36.1428 -36.1728 + A A B1 B3 B2 + 1 CU 1 S 0.996074 0.307741 0.000000 0.000000 0.000000 + 2 CU 1 S -0.013701 1.037574 0.000000 0.000000 0.000000 + 3 CU 1 X 0.000000 -0.000000 0.000000 0.997298 0.000000 + 4 CU 1 Y 0.000000 -0.000000 0.000000 0.000000 0.996734 + 5 CU 1 Z 0.000000 -0.000000 0.997298 0.000000 0.000000 + 6 CU 1 S 0.002496 0.012962 0.000000 0.000000 0.000000 + 7 CU 1 X 0.000000 -0.000000 0.000000 0.007370 0.000000 + 8 CU 1 Y 0.000000 -0.000000 0.000000 0.000000 0.009145 + 9 CU 1 Z 0.000000 -0.000000 0.007370 0.000000 0.000000 + 10 CU 1 S -0.001377 -0.003553 0.000000 0.000000 0.000000 + 11 CU 1 X 0.000000 -0.000000 0.000000 -0.002933 0.000000 + 12 CU 1 Y 0.000000 -0.000000 0.000000 0.000000 -0.001358 + 13 CU 1 Z 0.000000 -0.000000 -0.002933 0.000000 0.000000 + 14 CU 1 S -0.000491 -0.001638 0.000000 0.000000 0.000000 + 15 CU 1 X 0.000000 -0.000000 0.000000 0.000992 0.000000 + 16 CU 1 Y 0.000000 -0.000000 0.000000 0.000000 0.000649 + 17 CU 1 Z 0.000000 -0.000000 0.000992 0.000000 0.000000 + 18 CU 1 XX -0.000015 0.000060 0.000000 0.000000 0.000000 + 19 CU 1 YY 0.000030 -0.000119 0.000000 0.000000 0.000000 + 20 CU 1 ZZ -0.000015 0.000060 0.000000 0.000000 0.000000 + 21 CU 1 XY 0.000000 -0.000000 -0.000001 0.000000 0.000000 + 22 CU 1 XZ 0.000000 -0.000000 0.000000 0.000000 0.000002 + 23 CU 1 YZ 0.000000 -0.000000 0.000000 -0.000001 0.000000 + 24 CU 1 XX 0.000051 0.000295 0.000000 0.000000 0.000000 + 25 CU 1 YY -0.000101 -0.000591 0.000000 0.000000 0.000000 + 26 CU 1 ZZ 0.000051 0.000295 0.000000 0.000000 0.000000 + 27 CU 1 XY 0.000000 -0.000000 0.000005 0.000000 0.000000 + 28 CU 1 XZ 0.000000 -0.000000 0.000000 0.000000 -0.000009 + 29 CU 1 YZ 0.000000 -0.000000 0.000000 0.000005 0.000000 + 30 N 2 S 0.000012 0.000030 -0.000028 0.000028 -0.000000 + 31 N 2 S 0.000116 0.000261 -0.000212 0.000212 -0.000003 + 32 N 2 X -0.000012 -0.000030 -0.000009 -0.000045 0.000006 + 33 N 2 Y 0.000003 0.000002 -0.000002 0.000002 -0.000038 + 34 N 2 Z 0.000012 0.000030 -0.000045 -0.000009 -0.000006 + 35 N 2 S -0.000414 -0.000994 0.001050 -0.001050 0.000039 + 36 N 2 X -0.000073 -0.000171 0.000556 -0.000046 -0.000023 + 37 N 2 Y -0.000012 -0.000012 0.000015 -0.000015 0.000292 + 38 N 2 Z 0.000073 0.000171 -0.000046 0.000556 0.000023 + 39 N 3 S 0.000012 0.000030 0.000028 -0.000028 -0.000000 + 40 N 3 S 0.000116 0.000261 0.000212 -0.000212 -0.000003 + 41 N 3 X 0.000012 0.000030 -0.000009 -0.000045 -0.000006 + 42 N 3 Y 0.000003 0.000002 0.000002 -0.000002 -0.000038 + 43 N 3 Z -0.000012 -0.000030 -0.000045 -0.000009 0.000006 + 44 N 3 S -0.000414 -0.000994 -0.001050 0.001050 0.000039 + 45 N 3 X 0.000073 0.000171 0.000556 -0.000046 0.000023 + 46 N 3 Y -0.000012 -0.000012 -0.000015 0.000015 0.000292 + 47 N 3 Z -0.000073 -0.000171 -0.000046 0.000556 -0.000023 + 48 N 4 S 0.000012 0.000030 0.000028 0.000028 0.000000 + 49 N 4 S 0.000116 0.000261 0.000212 0.000212 0.000003 + 50 N 4 X -0.000012 -0.000030 0.000009 -0.000045 -0.000006 + 51 N 4 Y -0.000003 -0.000002 -0.000002 -0.000002 -0.000038 + 52 N 4 Z -0.000012 -0.000030 -0.000045 0.000009 -0.000006 + 53 N 4 S -0.000414 -0.000994 -0.001050 -0.001050 -0.000039 + 54 N 4 X -0.000073 -0.000171 -0.000556 -0.000046 0.000023 + 55 N 4 Y 0.000012 0.000012 0.000015 0.000015 0.000292 + 56 N 4 Z -0.000073 -0.000171 -0.000046 -0.000556 0.000023 + 57 N 5 S 0.000012 0.000030 -0.000028 -0.000028 0.000000 + 58 N 5 S 0.000116 0.000261 -0.000212 -0.000212 0.000003 + 59 N 5 X 0.000012 0.000030 0.000009 -0.000045 0.000006 + 60 N 5 Y -0.000003 -0.000002 0.000002 0.000002 -0.000038 + 61 N 5 Z 0.000012 0.000030 -0.000045 0.000009 0.000006 + 62 N 5 S -0.000414 -0.000994 0.001050 0.001050 -0.000039 + 63 N 5 X 0.000073 0.000171 -0.000556 -0.000046 -0.000023 + 64 N 5 Y 0.000012 0.000012 -0.000015 -0.000015 0.000292 + 65 N 5 Z 0.000073 0.000171 -0.000046 -0.000556 -0.000023 + 66 H 6 S 0.000038 0.000075 -0.000060 0.000060 0.000036 + 67 H 6 S 0.000047 0.000189 -0.000096 0.000096 0.000195 + 68 H 7 S 0.000038 0.000075 0.000060 -0.000060 0.000036 + 69 H 7 S 0.000047 0.000189 0.000096 -0.000096 0.000195 + 70 H 8 S 0.000038 0.000075 0.000060 0.000060 -0.000036 + 71 H 8 S 0.000047 0.000189 0.000096 0.000096 -0.000195 + 72 H 9 S 0.000038 0.000075 -0.000060 -0.000060 -0.000036 + 73 H 9 S 0.000047 0.000189 -0.000096 -0.000096 -0.000195 + 74 H 10 S 0.000032 0.000063 -0.000006 0.000082 -0.000015 + 75 H 10 S 0.000080 0.000238 0.000041 0.000365 -0.000137 + 76 H 11 S 0.000032 0.000063 0.000006 -0.000082 -0.000015 + 77 H 11 S 0.000080 0.000238 -0.000041 -0.000365 -0.000137 + 78 H 12 S 0.000032 0.000063 0.000006 0.000082 0.000015 + 79 H 12 S 0.000080 0.000238 -0.000041 0.000365 0.000137 + 80 H 13 S 0.000032 0.000063 -0.000006 -0.000082 0.000015 + 81 H 13 S 0.000080 0.000238 0.000041 -0.000365 0.000137 + 82 H 14 S 0.000032 0.000063 -0.000082 0.000006 -0.000015 + 83 H 14 S 0.000080 0.000238 -0.000365 -0.000041 -0.000137 + 84 H 15 S 0.000032 0.000063 0.000082 -0.000006 -0.000015 + 85 H 15 S 0.000080 0.000238 0.000365 0.000041 -0.000137 + 86 H 16 S 0.000032 0.000063 0.000082 0.000006 0.000015 + 87 H 16 S 0.000080 0.000238 0.000365 -0.000041 0.000137 + 88 H 17 S 0.000032 0.000063 -0.000082 -0.000006 0.000015 + 89 H 17 S 0.000080 0.000238 -0.000365 0.000041 0.000137 + + 6 7 8 9 10 + -15.9181 -15.9182 -15.9182 -15.9182 -5.4633 + A B1 B3 B2 A + 1 CU 1 S -0.000002 -0.000000 -0.000000 -0.000000 -0.115186 + 2 CU 1 S -0.000110 -0.000000 -0.000000 -0.000000 -0.451924 + 3 CU 1 X 0.000000 -0.000000 -0.000071 -0.000000 -0.000000 + 4 CU 1 Y 0.000000 -0.000000 -0.000000 0.000001 -0.000000 + 5 CU 1 Z 0.000000 0.000071 -0.000000 -0.000000 -0.000000 + 6 CU 1 S -0.000195 -0.000000 -0.000000 -0.000000 1.084837 + 7 CU 1 X 0.000000 -0.000000 -0.000203 -0.000000 -0.000000 + 8 CU 1 Y 0.000000 -0.000000 -0.000000 -0.000002 -0.000000 + 9 CU 1 Z 0.000000 0.000203 -0.000000 -0.000000 -0.000000 + 10 CU 1 S -0.002333 -0.000000 -0.000000 -0.000000 -0.002435 + 11 CU 1 X 0.000000 -0.000000 -0.003222 -0.000000 -0.000000 + 12 CU 1 Y 0.000000 -0.000000 -0.000000 0.000018 -0.000000 + 13 CU 1 Z 0.000000 0.003222 -0.000000 -0.000000 -0.000000 + 14 CU 1 S -0.001391 -0.000000 -0.000000 -0.000000 -0.003889 + 15 CU 1 X 0.000000 -0.000000 0.002158 -0.000000 -0.000000 + 16 CU 1 Y 0.000000 -0.000000 -0.000000 0.000072 -0.000000 + 17 CU 1 Z 0.000000 -0.002158 -0.000000 -0.000000 -0.000000 + 18 CU 1 XX -0.000024 -0.000000 -0.000000 -0.000000 0.001402 + 19 CU 1 YY 0.000049 -0.000000 -0.000000 -0.000000 -0.002805 + 20 CU 1 ZZ -0.000024 -0.000000 -0.000000 -0.000000 0.001402 + 21 CU 1 XY 0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 22 CU 1 XZ 0.000000 -0.000000 -0.000000 0.000044 -0.000000 + 23 CU 1 YZ 0.000000 -0.000000 0.000000 -0.000000 -0.000000 + 24 CU 1 XX 0.000146 -0.000000 -0.000000 -0.000000 0.002814 + 25 CU 1 YY -0.000292 -0.000000 -0.000000 -0.000000 -0.005628 + 26 CU 1 ZZ 0.000146 -0.000000 -0.000000 -0.000000 0.002814 + 27 CU 1 XY 0.000000 0.000002 -0.000000 -0.000000 -0.000000 + 28 CU 1 XZ 0.000000 -0.000000 -0.000000 -0.000491 -0.000000 + 29 CU 1 YZ 0.000000 -0.000000 -0.000002 -0.000000 -0.000000 + 30 N 2 S 0.498010 0.498026 0.498026 0.498000 0.000169 + 31 N 2 S 0.011833 0.012129 0.012129 0.011878 -0.000299 + 32 N 2 X -0.000484 -0.000440 -0.000409 -0.000414 -0.000389 + 33 N 2 Y -0.000022 -0.000017 -0.000017 -0.000000 -0.000015 + 34 N 2 Z 0.000484 0.000409 0.000440 0.000414 0.000389 + 35 N 2 S -0.006017 -0.007056 -0.007056 -0.005821 -0.000707 + 36 N 2 X 0.000495 0.000147 0.000357 0.000482 0.000070 + 37 N 2 Y 0.000062 0.000037 0.000037 -0.000039 0.000001 + 38 N 2 Z -0.000495 -0.000357 -0.000147 -0.000482 -0.000070 + 39 N 3 S 0.498010 -0.498026 -0.498026 0.498000 0.000169 + 40 N 3 S 0.011833 -0.012129 -0.012129 0.011878 -0.000299 + 41 N 3 X 0.000484 -0.000440 -0.000409 0.000414 0.000389 + 42 N 3 Y -0.000022 0.000017 0.000017 -0.000000 -0.000015 + 43 N 3 Z -0.000484 0.000409 0.000440 -0.000414 -0.000389 + 44 N 3 S -0.006017 0.007056 0.007056 -0.005821 -0.000707 + 45 N 3 X -0.000495 0.000147 0.000357 -0.000482 -0.000070 + 46 N 3 Y 0.000062 -0.000037 -0.000037 -0.000039 0.000001 + 47 N 3 Z 0.000495 -0.000357 -0.000147 0.000482 0.000070 + 48 N 4 S 0.498010 -0.498026 0.498026 -0.498000 0.000169 + 49 N 4 S 0.011833 -0.012129 0.012129 -0.011878 -0.000299 + 50 N 4 X -0.000484 0.000440 -0.000409 0.000414 -0.000389 + 51 N 4 Y 0.000022 -0.000017 0.000017 -0.000000 0.000015 + 52 N 4 Z -0.000484 0.000409 -0.000440 0.000414 -0.000389 + 53 N 4 S -0.006017 0.007056 -0.007056 0.005821 -0.000707 + 54 N 4 X 0.000495 -0.000147 0.000357 -0.000482 0.000070 + 55 N 4 Y -0.000062 0.000037 -0.000037 -0.000039 -0.000001 + 56 N 4 Z 0.000495 -0.000357 0.000147 -0.000482 0.000070 + 57 N 5 S 0.498010 0.498026 -0.498026 -0.498000 0.000169 + 58 N 5 S 0.011833 0.012129 -0.012129 -0.011878 -0.000299 + 59 N 5 X 0.000484 0.000440 -0.000409 -0.000414 0.000389 + 60 N 5 Y 0.000022 0.000017 -0.000017 -0.000000 0.000015 + 61 N 5 Z 0.000484 0.000409 -0.000440 -0.000414 0.000389 + 62 N 5 S -0.006017 -0.007056 0.007056 0.005821 -0.000707 + 63 N 5 X -0.000495 -0.000147 0.000357 0.000482 -0.000070 + 64 N 5 Y -0.000062 -0.000037 0.000037 -0.000039 -0.000001 + 65 N 5 Z -0.000495 -0.000357 0.000147 0.000482 -0.000070 + 66 H 6 S 0.000067 0.000062 0.000062 -0.000002 0.000026 + 67 H 6 S 0.001269 0.001576 0.001576 0.001234 0.000474 + 68 H 7 S 0.000067 -0.000062 -0.000062 -0.000002 0.000026 + 69 H 7 S 0.001269 -0.001576 -0.001576 0.001234 0.000474 + 70 H 8 S 0.000067 -0.000062 0.000062 0.000002 0.000026 + 71 H 8 S 0.001269 -0.001576 0.001576 -0.001234 0.000474 + 72 H 9 S 0.000067 0.000062 -0.000062 0.000002 0.000026 + 73 H 9 S 0.001269 0.001576 -0.001576 -0.001234 0.000474 + 74 H 10 S 0.000022 0.000080 0.000028 0.000054 0.000023 + 75 H 10 S 0.001284 0.001327 0.001771 0.001159 0.000491 + 76 H 11 S 0.000022 -0.000080 -0.000028 0.000054 0.000023 + 77 H 11 S 0.001284 -0.001327 -0.001771 0.001159 0.000491 + 78 H 12 S 0.000022 -0.000080 0.000028 -0.000054 0.000023 + 79 H 12 S 0.001284 -0.001327 0.001771 -0.001159 0.000491 + 80 H 13 S 0.000022 0.000080 -0.000028 -0.000054 0.000023 + 81 H 13 S 0.001284 0.001327 -0.001771 -0.001159 0.000491 + 82 H 14 S 0.000022 0.000028 0.000080 0.000054 0.000023 + 83 H 14 S 0.001284 0.001771 0.001327 0.001159 0.000491 + 84 H 15 S 0.000022 -0.000028 -0.000080 0.000054 0.000023 + 85 H 15 S 0.001284 -0.001771 -0.001327 0.001159 0.000491 + 86 H 16 S 0.000022 -0.000028 0.000080 -0.000054 0.000023 + 87 H 16 S 0.001284 -0.001771 0.001327 -0.001159 0.000491 + 88 H 17 S 0.000022 0.000028 -0.000080 -0.000054 0.000023 + 89 H 17 S 0.001284 0.001771 -0.001327 -0.001159 0.000491 + + 11 12 13 14 15 + -3.7020 -3.7020 -3.8316 -1.5366 -1.5237 + B3 B1 B2 A B1 + 1 CU 1 S 0.000000 -0.000000 0.000000 -0.003857 0.000000 + 2 CU 1 S 0.000000 -0.000000 0.000000 -0.013392 0.000000 + 3 CU 1 X -0.377688 -0.000000 0.000000 0.000000 0.000000 + 4 CU 1 Y 0.000000 -0.000000 -0.378903 0.000000 0.000000 + 5 CU 1 Z 0.000000 -0.377688 0.000000 0.000000 0.012234 + 6 CU 1 S 0.000000 -0.000000 0.000000 0.046180 0.000000 + 7 CU 1 X 1.065794 -0.000000 0.000000 0.000000 0.000000 + 8 CU 1 Y 0.000000 -0.000000 1.065798 0.000000 0.000000 + 9 CU 1 Z 0.000000 1.065794 0.000000 0.000000 -0.037526 + 10 CU 1 S 0.000000 -0.000000 0.000000 -0.020182 0.000000 + 11 CU 1 X -0.005228 -0.000000 0.000000 0.000000 0.000000 + 12 CU 1 Y 0.000000 -0.000000 0.005019 0.000000 0.000000 + 13 CU 1 Z 0.000000 -0.005228 0.000000 0.000000 0.006686 + 14 CU 1 S 0.000000 -0.000000 0.000000 0.012242 0.000000 + 15 CU 1 X 0.002528 -0.000000 0.000000 0.000000 0.000000 + 16 CU 1 Y 0.000000 -0.000000 -0.001058 0.000000 0.000000 + 17 CU 1 Z 0.000000 0.002528 0.000000 0.000000 0.028497 + 18 CU 1 XX 0.000000 -0.000000 0.000000 0.011647 0.000000 + 19 CU 1 YY 0.000000 -0.000000 0.000000 -0.023294 0.000000 + 20 CU 1 ZZ 0.000000 -0.000000 0.000000 0.011647 0.000000 + 21 CU 1 XY 0.000000 -0.000033 0.000000 0.000000 0.000126 + 22 CU 1 XZ 0.000000 -0.000000 -0.000006 0.000000 0.000000 + 23 CU 1 YZ -0.000033 -0.000000 0.000000 0.000000 0.000000 + 24 CU 1 XX 0.000000 -0.000000 0.000000 0.008745 0.000000 + 25 CU 1 YY 0.000000 -0.000000 0.000000 -0.017489 0.000000 + 26 CU 1 ZZ 0.000000 -0.000000 0.000000 0.008745 0.000000 + 27 CU 1 XY 0.000000 0.000022 0.000000 0.000000 -0.000005 + 28 CU 1 XZ 0.000000 -0.000000 0.000028 0.000000 0.000000 + 29 CU 1 YZ 0.000022 -0.000000 0.000000 0.000000 0.000000 + 30 N 2 S 0.000898 -0.000898 0.000001 -0.100838 -0.101871 + 31 N 2 S -0.001281 0.001281 -0.000001 0.206639 0.207041 + 32 N 2 X -0.001791 0.001818 -0.000002 -0.023536 -0.025183 + 33 N 2 Y 0.000002 -0.000002 0.000210 0.000033 -0.000353 + 34 N 2 Z 0.001818 -0.001791 0.000002 0.023536 0.031581 + 35 N 2 S -0.004150 0.004150 -0.000011 0.242752 0.253669 + 36 N 2 X -0.000433 0.002455 0.000004 -0.009783 -0.013038 + 37 N 2 Y -0.000019 0.000019 0.000105 -0.002502 -0.001409 + 38 N 2 Z 0.002455 -0.000433 -0.000004 0.009783 0.014448 + 39 N 3 S -0.000898 0.000898 0.000001 -0.100838 0.101871 + 40 N 3 S 0.001281 -0.001281 -0.000001 0.206639 -0.207041 + 41 N 3 X -0.001791 0.001818 0.000002 0.023536 -0.025183 + 42 N 3 Y -0.000002 0.000002 0.000210 0.000033 0.000353 + 43 N 3 Z 0.001818 -0.001791 -0.000002 -0.023536 0.031581 + 44 N 3 S 0.004150 -0.004150 -0.000011 0.242752 -0.253669 + 45 N 3 X -0.000433 0.002455 -0.000004 0.009783 -0.013038 + 46 N 3 Y 0.000019 -0.000019 0.000105 -0.002502 0.001409 + 47 N 3 Z 0.002455 -0.000433 0.000004 -0.009783 0.014448 + 48 N 4 S 0.000898 0.000898 -0.000001 -0.100838 0.101871 + 49 N 4 S -0.001281 -0.001281 0.000001 0.206639 -0.207041 + 50 N 4 X -0.001791 -0.001818 0.000002 -0.023536 0.025183 + 51 N 4 Y -0.000002 -0.000002 0.000210 -0.000033 -0.000353 + 52 N 4 Z -0.001818 -0.001791 0.000002 -0.023536 0.031581 + 53 N 4 S -0.004150 -0.004150 0.000011 0.242752 -0.253669 + 54 N 4 X -0.000433 -0.002455 -0.000004 -0.009783 0.013038 + 55 N 4 Y 0.000019 0.000019 0.000105 0.002502 -0.001409 + 56 N 4 Z -0.002455 -0.000433 -0.000004 -0.009783 0.014448 + 57 N 5 S -0.000898 -0.000898 -0.000001 -0.100838 -0.101871 + 58 N 5 S 0.001281 0.001281 0.000001 0.206639 0.207041 + 59 N 5 X -0.001791 -0.001818 -0.000002 0.023536 0.025183 + 60 N 5 Y 0.000002 0.000002 0.000210 -0.000033 0.000353 + 61 N 5 Z -0.001818 -0.001791 -0.000002 0.023536 0.031581 + 62 N 5 S 0.004150 0.004150 0.000011 0.242752 0.253669 + 63 N 5 X -0.000433 -0.002455 0.000004 0.009783 0.013038 + 64 N 5 Y -0.000019 -0.000019 0.000105 0.002502 0.001409 + 65 N 5 Z -0.002455 -0.000433 0.000004 0.009783 0.014448 + 66 H 6 S 0.000227 -0.000227 0.000084 0.063256 0.065812 + 67 H 6 S 0.000400 -0.000400 0.000013 -0.006849 -0.012184 + 68 H 7 S -0.000227 0.000227 0.000084 0.063256 -0.065812 + 69 H 7 S -0.000400 0.000400 0.000013 -0.006849 0.012184 + 70 H 8 S 0.000227 0.000227 -0.000084 0.063256 -0.065812 + 71 H 8 S 0.000400 0.000400 -0.000013 -0.006849 0.012184 + 72 H 9 S -0.000227 -0.000227 -0.000084 0.063256 0.065812 + 73 H 9 S -0.000400 -0.000400 -0.000013 -0.006849 -0.012184 + 74 H 10 S 0.000367 -0.000003 -0.000044 0.064287 0.063574 + 75 H 10 S 0.001332 0.000215 0.000002 -0.004221 -0.009441 + 76 H 11 S -0.000367 0.000003 -0.000044 0.064287 -0.063574 + 77 H 11 S -0.001332 -0.000215 0.000002 -0.004221 0.009441 + 78 H 12 S 0.000367 0.000003 0.000044 0.064287 -0.063574 + 79 H 12 S 0.001332 -0.000215 -0.000002 -0.004221 0.009441 + 80 H 13 S -0.000367 -0.000003 0.000044 0.064287 0.063574 + 81 H 13 S -0.001332 0.000215 -0.000002 -0.004221 -0.009441 + 82 H 14 S 0.000003 -0.000367 -0.000044 0.064287 0.068031 + 83 H 14 S -0.000215 -0.001332 0.000002 -0.004221 -0.011885 + 84 H 15 S -0.000003 0.000367 -0.000044 0.064287 -0.068031 + 85 H 15 S 0.000215 0.001332 0.000002 -0.004221 0.011885 + 86 H 16 S 0.000003 0.000367 0.000044 0.064287 -0.068031 + 87 H 16 S -0.000215 0.001332 -0.000002 -0.004221 0.011885 + 88 H 17 S -0.000003 -0.000367 0.000044 0.064287 0.068031 + 89 H 17 S 0.000215 -0.001332 -0.000002 -0.004221 -0.011885 + + 16 17 18 19 20 + -1.5237 -1.5147 -1.0587 -1.0011 -0.9972 + B3 B2 A B2 B3 + 1 CU 1 S 0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 2 CU 1 S 0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 3 CU 1 X -0.012234 -0.000000 -0.000000 -0.000000 0.009696 + 4 CU 1 Y 0.000000 -0.000064 -0.000000 0.008211 -0.000000 + 5 CU 1 Z 0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 6 CU 1 S 0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 7 CU 1 X 0.037526 -0.000000 -0.000000 -0.000000 -0.029744 + 8 CU 1 Y 0.000000 0.000094 -0.000000 -0.024851 -0.000000 + 9 CU 1 Z 0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 10 CU 1 S 0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 11 CU 1 X -0.006686 -0.000000 -0.000000 -0.000000 0.010544 + 12 CU 1 Y 0.000000 -0.000828 -0.000000 0.009652 -0.000000 + 13 CU 1 Z 0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 14 CU 1 S 0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 15 CU 1 X -0.028497 -0.000000 -0.000000 -0.000000 0.000997 + 16 CU 1 Y 0.000000 -0.000116 -0.000000 0.013953 -0.000000 + 17 CU 1 Z 0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 18 CU 1 XX 0.000000 -0.000000 -0.454304 -0.000000 -0.000000 + 19 CU 1 YY 0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 20 CU 1 ZZ 0.000000 -0.000000 0.454304 -0.000000 -0.000000 + 21 CU 1 XY 0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 22 CU 1 XZ 0.000000 -0.019443 -0.000000 0.000909 -0.000000 + 23 CU 1 YZ -0.000126 -0.000000 -0.000000 -0.000000 0.040984 + 24 CU 1 XX 0.000000 -0.000000 -0.260518 -0.000000 -0.000000 + 25 CU 1 YY 0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 26 CU 1 ZZ 0.000000 -0.000000 0.260518 -0.000000 -0.000000 + 27 CU 1 XY 0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 28 CU 1 XZ 0.000000 -0.017516 -0.000000 0.000066 -0.000000 + 29 CU 1 YZ 0.000005 -0.000000 -0.000000 -0.000000 0.024163 + 30 N 2 S -0.101871 -0.102514 -0.000000 -0.000351 -0.002098 + 31 N 2 S 0.207041 0.209393 -0.000000 0.001348 0.004809 + 32 N 2 X -0.031581 -0.031103 0.112576 -0.001215 0.139892 + 33 N 2 Y -0.000353 -0.000916 -0.000000 0.241654 0.005976 + 34 N 2 Z 0.025183 0.031103 0.112576 0.001215 0.199511 + 35 N 2 S 0.253669 0.253953 -0.000000 0.002029 0.007083 + 36 N 2 X -0.014448 -0.013469 0.091970 -0.003084 0.085193 + 37 N 2 Y -0.001409 0.000848 -0.000000 0.158861 0.008214 + 38 N 2 Z 0.013038 0.013469 0.091970 0.003084 0.133986 + 39 N 3 S 0.101871 -0.102514 -0.000000 -0.000351 0.002098 + 40 N 3 S -0.207041 0.209393 -0.000000 0.001348 -0.004809 + 41 N 3 X -0.031581 0.031103 -0.112576 0.001215 0.139892 + 42 N 3 Y 0.000353 -0.000916 -0.000000 0.241654 -0.005976 + 43 N 3 Z 0.025183 -0.031103 -0.112576 -0.001215 0.199511 + 44 N 3 S -0.253669 0.253953 -0.000000 0.002029 -0.007083 + 45 N 3 X -0.014448 0.013469 -0.091970 0.003084 0.085193 + 46 N 3 Y 0.001409 0.000848 -0.000000 0.158861 -0.008214 + 47 N 3 Z 0.013038 -0.013469 -0.091970 -0.003084 0.133986 + 48 N 4 S -0.101871 0.102514 -0.000000 0.000351 -0.002098 + 49 N 4 S 0.207041 -0.209393 -0.000000 -0.001348 0.004809 + 50 N 4 X -0.031581 0.031103 0.112576 0.001215 0.139892 + 51 N 4 Y 0.000353 -0.000916 -0.000000 0.241654 -0.005976 + 52 N 4 Z -0.025183 0.031103 -0.112576 0.001215 -0.199511 + 53 N 4 S 0.253669 -0.253953 -0.000000 -0.002029 0.007083 + 54 N 4 X -0.014448 0.013469 0.091970 0.003084 0.085193 + 55 N 4 Y 0.001409 0.000848 -0.000000 0.158861 -0.008214 + 56 N 4 Z -0.013038 0.013469 -0.091970 0.003084 -0.133986 + 57 N 5 S 0.101871 0.102514 -0.000000 0.000351 0.002098 + 58 N 5 S -0.207041 -0.209393 -0.000000 -0.001348 -0.004809 + 59 N 5 X -0.031581 -0.031103 -0.112576 -0.001215 0.139892 + 60 N 5 Y -0.000353 -0.000916 -0.000000 0.241654 0.005976 + 61 N 5 Z -0.025183 -0.031103 0.112576 -0.001215 -0.199511 + 62 N 5 S -0.253669 -0.253953 -0.000000 -0.002029 -0.007083 + 63 N 5 X -0.014448 -0.013469 -0.091970 -0.003084 0.085193 + 64 N 5 Y -0.001409 0.000848 -0.000000 0.158861 0.008214 + 65 N 5 Z -0.013038 -0.013469 0.091970 -0.003084 -0.133986 + 66 H 6 S 0.065812 0.067235 -0.000000 -0.135845 0.007419 + 67 H 6 S -0.012184 -0.004933 -0.000000 -0.049457 -0.000289 + 68 H 7 S -0.065812 0.067235 -0.000000 -0.135845 -0.007419 + 69 H 7 S 0.012184 -0.004933 -0.000000 -0.049457 0.000289 + 70 H 8 S 0.065812 -0.067235 -0.000000 0.135845 0.007419 + 71 H 8 S -0.012184 0.004933 -0.000000 0.049457 -0.000289 + 72 H 9 S -0.065812 -0.067235 -0.000000 0.135845 -0.007419 + 73 H 9 S 0.012184 0.004933 -0.000000 0.049457 0.000289 + 74 H 10 S 0.068031 0.066025 -0.071515 0.069577 -0.109138 + 75 H 10 S -0.011885 -0.006101 -0.015385 0.022302 -0.046884 + 76 H 11 S -0.068031 0.066025 -0.071515 0.069577 0.109138 + 77 H 11 S 0.011885 -0.006101 -0.015385 0.022302 0.046884 + 78 H 12 S 0.068031 -0.066025 -0.071515 -0.069577 -0.109138 + 79 H 12 S -0.011885 0.006101 -0.015385 -0.022302 -0.046884 + 80 H 13 S -0.068031 -0.066025 -0.071515 -0.069577 0.109138 + 81 H 13 S 0.011885 0.006101 -0.015385 -0.022302 0.046884 + 82 H 14 S 0.063574 0.066025 0.071515 0.069577 0.126579 + 83 H 14 S -0.009441 -0.006101 0.015385 0.022302 0.045195 + 84 H 15 S -0.063574 0.066025 0.071515 0.069577 -0.126579 + 85 H 15 S 0.009441 -0.006101 0.015385 0.022302 -0.045195 + 86 H 16 S 0.063574 -0.066025 0.071515 -0.069577 0.126579 + 87 H 16 S -0.009441 0.006101 0.015385 -0.022302 0.045195 + 88 H 17 S -0.063574 -0.066025 0.071515 -0.069577 -0.126579 + 89 H 17 S 0.009441 0.006101 0.015385 -0.022302 -0.045195 + + 21 22 23 24 25 + -0.9972 -1.0117 -1.0117 -0.9852 -0.9662 + B1 B3 B1 A B2 + 1 CU 1 S -0.000000 -0.000000 -0.000000 -0.001478 -0.000000 + 2 CU 1 S -0.000000 -0.000000 -0.000000 -0.004878 -0.000000 + 3 CU 1 X -0.000000 -0.000286 -0.000000 0.000000 -0.000000 + 4 CU 1 Y -0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 5 CU 1 Z 0.009696 -0.000000 -0.000286 0.000000 -0.000000 + 6 CU 1 S -0.000000 -0.000000 -0.000000 0.018389 -0.000000 + 7 CU 1 X -0.000000 0.001452 -0.000000 0.000000 -0.000000 + 8 CU 1 Y -0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 9 CU 1 Z -0.029744 -0.000000 0.001452 0.000000 -0.000000 + 10 CU 1 S -0.000000 -0.000000 -0.000000 -0.006837 -0.000000 + 11 CU 1 X -0.000000 0.004107 -0.000000 0.000000 -0.000000 + 12 CU 1 Y -0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 13 CU 1 Z 0.010544 -0.000000 0.004107 0.000000 -0.000000 + 14 CU 1 S -0.000000 -0.000000 -0.000000 -0.034401 -0.000000 + 15 CU 1 X -0.000000 0.001785 -0.000000 0.000000 -0.000000 + 16 CU 1 Y -0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 17 CU 1 Z 0.000997 -0.000000 0.001785 0.000000 -0.000000 + 18 CU 1 XX -0.000000 -0.000000 -0.000000 0.069775 -0.000000 + 19 CU 1 YY -0.000000 -0.000000 -0.000000 -0.139549 -0.000000 + 20 CU 1 ZZ -0.000000 -0.000000 -0.000000 0.069775 -0.000000 + 21 CU 1 XY 0.040984 -0.000000 0.409320 0.000000 -0.000000 + 22 CU 1 XZ -0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 23 CU 1 YZ -0.000000 0.409320 -0.000000 0.000000 -0.000000 + 24 CU 1 XX -0.000000 -0.000000 -0.000000 0.041653 -0.000000 + 25 CU 1 YY -0.000000 -0.000000 -0.000000 -0.083306 -0.000000 + 26 CU 1 ZZ -0.000000 -0.000000 -0.000000 0.041653 -0.000000 + 27 CU 1 XY 0.024163 -0.000000 0.240827 0.000000 -0.000000 + 28 CU 1 XZ -0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 29 CU 1 YZ -0.000000 0.240827 -0.000000 0.000000 -0.000000 + 30 N 2 S 0.002098 -0.000036 0.000036 -0.001557 -0.000000 + 31 N 2 S -0.004809 0.000065 -0.000065 0.001548 -0.000000 + 32 N 2 X 0.199511 -0.007049 -0.009714 0.029677 0.178671 + 33 N 2 Y -0.005976 0.197159 -0.197159 0.239119 -0.000000 + 34 N 2 Z 0.139892 -0.009714 -0.007049 -0.029677 0.178671 + 35 N 2 S -0.007083 0.000387 -0.000387 0.009284 -0.000000 + 36 N 2 X 0.133986 -0.008036 -0.011633 0.029880 0.117533 + 37 N 2 Y -0.008214 0.147107 -0.147107 0.153707 -0.000000 + 38 N 2 Z 0.085193 -0.011633 -0.008036 -0.029880 0.117533 + 39 N 3 S -0.002098 0.000036 -0.000036 -0.001557 -0.000000 + 40 N 3 S 0.004809 -0.000065 0.000065 0.001548 -0.000000 + 41 N 3 X 0.199511 -0.007049 -0.009714 -0.029677 -0.178671 + 42 N 3 Y 0.005976 -0.197159 0.197159 0.239119 -0.000000 + 43 N 3 Z 0.139892 -0.009714 -0.007049 0.029677 -0.178671 + 44 N 3 S 0.007083 -0.000387 0.000387 0.009284 -0.000000 + 45 N 3 X 0.133986 -0.008036 -0.011633 -0.029880 -0.117533 + 46 N 3 Y 0.008214 -0.147107 0.147107 0.153707 -0.000000 + 47 N 3 Z 0.085193 -0.011633 -0.008036 0.029880 -0.117533 + 48 N 4 S -0.002098 -0.000036 -0.000036 -0.001557 -0.000000 + 49 N 4 S 0.004809 0.000065 0.000065 0.001548 -0.000000 + 50 N 4 X -0.199511 -0.007049 0.009714 0.029677 -0.178671 + 51 N 4 Y -0.005976 -0.197159 -0.197159 -0.239119 -0.000000 + 52 N 4 Z 0.139892 0.009714 -0.007049 0.029677 0.178671 + 53 N 4 S 0.007083 0.000387 0.000387 0.009284 -0.000000 + 54 N 4 X -0.133986 -0.008036 0.011633 0.029880 -0.117533 + 55 N 4 Y -0.008214 -0.147107 -0.147107 -0.153707 -0.000000 + 56 N 4 Z 0.085193 0.011633 -0.008036 0.029880 0.117533 + 57 N 5 S 0.002098 0.000036 0.000036 -0.001557 -0.000000 + 58 N 5 S -0.004809 -0.000065 -0.000065 0.001548 -0.000000 + 59 N 5 X -0.199511 -0.007049 0.009714 -0.029677 0.178671 + 60 N 5 Y 0.005976 0.197159 0.197159 -0.239119 -0.000000 + 61 N 5 Z 0.139892 0.009714 -0.007049 -0.029677 -0.178671 + 62 N 5 S -0.007083 -0.000387 -0.000387 0.009284 -0.000000 + 63 N 5 X -0.133986 -0.008036 0.011633 -0.029880 0.117533 + 64 N 5 Y 0.008214 0.147107 0.147107 -0.153707 -0.000000 + 65 N 5 Z 0.085193 0.011633 -0.008036 -0.029880 -0.117533 + 66 H 6 S -0.007419 -0.107435 0.107435 -0.144956 -0.000000 + 67 H 6 S 0.000289 -0.033447 0.033447 -0.049285 -0.000000 + 68 H 7 S 0.007419 0.107435 -0.107435 -0.144956 -0.000000 + 69 H 7 S -0.000289 0.033447 -0.033447 -0.049285 -0.000000 + 70 H 8 S 0.007419 -0.107435 -0.107435 -0.144956 -0.000000 + 71 H 8 S -0.000289 -0.033447 -0.033447 -0.049285 -0.000000 + 72 H 9 S -0.007419 0.107435 0.107435 -0.144956 -0.000000 + 73 H 9 S 0.000289 0.033447 0.033447 -0.049285 -0.000000 + 74 H 10 S -0.126579 0.058125 -0.048665 0.060286 -0.124927 + 75 H 10 S -0.045195 0.016649 -0.018630 0.030951 -0.050706 + 76 H 11 S 0.126579 -0.058125 0.048665 0.060286 -0.124927 + 77 H 11 S 0.045195 -0.016649 0.018630 0.030951 -0.050706 + 78 H 12 S 0.126579 0.058125 0.048665 0.060286 0.124927 + 79 H 12 S 0.045195 0.016649 0.018630 0.030951 0.050706 + 80 H 13 S -0.126579 -0.058125 -0.048665 0.060286 0.124927 + 81 H 13 S -0.045195 -0.016649 -0.018630 0.030951 0.050706 + 82 H 14 S 0.109138 0.048665 -0.058125 0.060286 0.124927 + 83 H 14 S 0.046884 0.018630 -0.016649 0.030951 0.050706 + 84 H 15 S -0.109138 -0.048665 0.058125 0.060286 0.124927 + 85 H 15 S -0.046884 -0.018630 0.016649 0.030951 0.050706 + 86 H 16 S -0.109138 0.048665 0.058125 0.060286 -0.124927 + 87 H 16 S -0.046884 0.018630 0.016649 0.030951 -0.050706 + 88 H 17 S 0.109138 -0.048665 -0.058125 0.060286 -0.124927 + 89 H 17 S 0.046884 -0.018630 -0.016649 0.030951 -0.050706 + + 26 27 28 29 30 + -0.9792 -0.8158 -0.8471 -0.8471 -0.9497 + A B2 B3 B1 B3 + 1 CU 1 S 0.005970 0.000000 -0.000000 -0.000000 0.000000 + 2 CU 1 S 0.019541 0.000000 -0.000000 -0.000000 0.000000 + 3 CU 1 X 0.000000 0.000000 -0.039743 -0.000000 -0.000391 + 4 CU 1 Y 0.000000 -0.000070 -0.000000 -0.000000 0.000000 + 5 CU 1 Z 0.000000 0.000000 -0.000000 -0.039743 0.000000 + 6 CU 1 S -0.074855 0.000000 -0.000000 -0.000000 0.000000 + 7 CU 1 X 0.000000 0.000000 0.114338 -0.000000 0.001384 + 8 CU 1 Y 0.000000 0.000326 -0.000000 -0.000000 0.000000 + 9 CU 1 Z 0.000000 0.000000 -0.000000 0.114338 0.000000 + 10 CU 1 S 0.028399 0.000000 -0.000000 -0.000000 0.000000 + 11 CU 1 X 0.000000 0.000000 -0.109464 -0.000000 0.000918 + 12 CU 1 Y 0.000000 0.000775 -0.000000 -0.000000 0.000000 + 13 CU 1 Z 0.000000 0.000000 -0.000000 -0.109464 0.000000 + 14 CU 1 S 0.076514 0.000000 -0.000000 -0.000000 0.000000 + 15 CU 1 X 0.000000 0.000000 0.028847 -0.000000 -0.006775 + 16 CU 1 Y 0.000000 -0.000528 -0.000000 -0.000000 0.000000 + 17 CU 1 Z 0.000000 0.000000 -0.000000 0.028847 0.000000 + 18 CU 1 XX -0.268379 0.000000 -0.000000 -0.000000 0.000000 + 19 CU 1 YY 0.536758 0.000000 -0.000000 -0.000000 0.000000 + 20 CU 1 ZZ -0.268379 0.000000 -0.000000 -0.000000 0.000000 + 21 CU 1 XY 0.000000 0.000000 -0.000000 -0.001441 0.000000 + 22 CU 1 XZ 0.000000 0.139178 -0.000000 -0.000000 0.000000 + 23 CU 1 YZ 0.000000 0.000000 -0.001441 -0.000000 0.621001 + 24 CU 1 XX -0.160822 0.000000 -0.000000 -0.000000 0.000000 + 25 CU 1 YY 0.321644 0.000000 -0.000000 -0.000000 0.000000 + 26 CU 1 ZZ -0.160822 0.000000 -0.000000 -0.000000 0.000000 + 27 CU 1 XY 0.000000 0.000000 -0.000000 -0.000848 0.000000 + 28 CU 1 XZ 0.000000 0.109411 -0.000000 -0.000000 0.000000 + 29 CU 1 YZ 0.000000 0.000000 -0.000848 -0.000000 0.361652 + 30 N 2 S 0.006700 0.030682 -0.025655 0.025655 0.000074 + 31 N 2 S -0.008167 -0.061021 0.052211 -0.052211 -0.000483 + 32 N 2 X -0.113880 -0.195673 0.223084 -0.156712 -0.004538 + 33 N 2 Y 0.063492 -0.003219 0.000945 -0.000945 -0.145821 + 34 N 2 Z 0.113880 0.195673 -0.156712 0.223084 -0.007460 + 35 N 2 S -0.045800 -0.139498 0.094566 -0.094566 0.001118 + 36 N 2 X -0.103032 -0.176245 0.190150 -0.137326 -0.003972 + 37 N 2 Y 0.040781 -0.003569 0.001832 -0.001832 -0.064000 + 38 N 2 Z 0.103032 0.176245 -0.137326 0.190150 -0.005619 + 39 N 3 S 0.006700 0.030682 0.025655 -0.025655 -0.000074 + 40 N 3 S -0.008167 -0.061021 -0.052211 0.052211 0.000483 + 41 N 3 X 0.113880 0.195673 0.223084 -0.156712 -0.004538 + 42 N 3 Y 0.063492 -0.003219 -0.000945 0.000945 0.145821 + 43 N 3 Z -0.113880 -0.195673 -0.156712 0.223084 -0.007460 + 44 N 3 S -0.045800 -0.139498 -0.094566 0.094566 -0.001118 + 45 N 3 X 0.103032 0.176245 0.190150 -0.137326 -0.003972 + 46 N 3 Y 0.040781 -0.003569 -0.001832 0.001832 0.064000 + 47 N 3 Z -0.103032 -0.176245 -0.137326 0.190150 -0.005619 + 48 N 4 S 0.006700 -0.030682 -0.025655 -0.025655 0.000074 + 49 N 4 S -0.008167 0.061021 0.052211 0.052211 -0.000483 + 50 N 4 X -0.113880 0.195673 0.223084 0.156712 -0.004538 + 51 N 4 Y -0.063492 -0.003219 -0.000945 -0.000945 0.145821 + 52 N 4 Z -0.113880 0.195673 0.156712 0.223084 0.007460 + 53 N 4 S -0.045800 0.139498 0.094566 0.094566 0.001118 + 54 N 4 X -0.103032 0.176245 0.190150 0.137326 -0.003972 + 55 N 4 Y -0.040781 -0.003569 -0.001832 -0.001832 0.064000 + 56 N 4 Z -0.103032 0.176245 0.137326 0.190150 0.005619 + 57 N 5 S 0.006700 -0.030682 0.025655 0.025655 -0.000074 + 58 N 5 S -0.008167 0.061021 -0.052211 -0.052211 0.000483 + 59 N 5 X 0.113880 -0.195673 0.223084 0.156712 -0.004538 + 60 N 5 Y -0.063492 -0.003219 0.000945 0.000945 -0.145821 + 61 N 5 Z 0.113880 -0.195673 0.156712 0.223084 0.007460 + 62 N 5 S -0.045800 0.139498 -0.094566 -0.094566 -0.001118 + 63 N 5 X 0.103032 -0.176245 0.190150 0.137326 -0.003972 + 64 N 5 Y -0.040781 -0.003569 0.001832 0.001832 -0.064000 + 65 N 5 Z 0.103032 -0.176245 0.137326 0.190150 0.005619 + 66 H 6 S -0.005937 0.038099 -0.037964 0.037964 0.090164 + 67 H 6 S -0.017920 0.015902 -0.008408 0.008408 0.046711 + 68 H 7 S -0.005937 0.038099 0.037964 -0.037964 -0.090164 + 69 H 7 S -0.017920 0.015902 0.008408 -0.008408 -0.046711 + 70 H 8 S -0.005937 -0.038099 -0.037964 -0.037964 0.090164 + 71 H 8 S -0.017920 -0.015902 -0.008408 -0.008408 0.046711 + 72 H 9 S -0.005937 -0.038099 0.037964 0.037964 -0.090164 + 73 H 9 S -0.017920 -0.015902 0.008408 0.008408 -0.046711 + 74 H 10 S 0.047371 0.037946 -0.064355 0.012457 -0.041059 + 75 H 10 S 0.003766 0.016262 -0.020178 -0.000504 -0.026792 + 76 H 11 S 0.047371 0.037946 0.064355 -0.012457 0.041059 + 77 H 11 S 0.003766 0.016262 0.020178 0.000504 0.026792 + 78 H 12 S 0.047371 -0.037946 -0.064355 -0.012457 -0.041059 + 79 H 12 S 0.003766 -0.016262 -0.020178 0.000504 -0.026792 + 80 H 13 S 0.047371 -0.037946 0.064355 0.012457 0.041059 + 81 H 13 S 0.003766 -0.016262 0.020178 -0.000504 0.026792 + 82 H 14 S 0.047371 0.037946 -0.012457 0.064355 -0.050487 + 83 H 14 S 0.003766 0.016262 0.000504 0.020178 -0.023973 + 84 H 15 S 0.047371 0.037946 0.012457 -0.064355 0.050487 + 85 H 15 S 0.003766 0.016262 -0.000504 -0.020178 0.023973 + 86 H 16 S 0.047371 -0.037946 -0.012457 -0.064355 -0.050487 + 87 H 16 S 0.003766 -0.016262 0.000504 -0.020178 -0.023973 + 88 H 17 S 0.047371 -0.037946 0.012457 0.064355 0.050487 + 89 H 17 S 0.003766 -0.016262 -0.000504 0.020178 0.023973 + + 31 32 33 34 35 + -0.9497 -0.9824 -0.8881 -0.5048 0.0236 + B1 A A B2 A + 1 CU 1 S -0.000000 0.000000 -0.013789 -0.000000 0.012466 + 2 CU 1 S -0.000000 0.000000 -0.053353 -0.000000 0.056009 + 3 CU 1 X -0.000000 0.000000 0.000000 -0.000000 0.000000 + 4 CU 1 Y -0.000000 0.000000 0.000000 0.000014 0.000000 + 5 CU 1 Z -0.000391 0.000000 0.000000 -0.000000 0.000000 + 6 CU 1 S -0.000000 0.000000 0.157836 -0.000000 -0.130198 + 7 CU 1 X -0.000000 0.000000 0.000000 -0.000000 0.000000 + 8 CU 1 Y -0.000000 0.000000 0.000000 -0.000102 0.000000 + 9 CU 1 Z 0.001384 0.000000 0.000000 -0.000000 0.000000 + 10 CU 1 S -0.000000 0.000000 -0.239107 -0.000000 0.460532 + 11 CU 1 X -0.000000 0.000000 0.000000 -0.000000 0.000000 + 12 CU 1 Y -0.000000 0.000000 0.000000 -0.000439 0.000000 + 13 CU 1 Z 0.000918 0.000000 0.000000 -0.000000 0.000000 + 14 CU 1 S -0.000000 0.000000 0.080643 -0.000000 -0.849126 + 15 CU 1 X -0.000000 0.000000 0.000000 -0.000000 0.000000 + 16 CU 1 Y -0.000000 0.000000 0.000000 0.000467 0.000000 + 17 CU 1 Z -0.006775 0.000000 0.000000 -0.000000 0.000000 + 18 CU 1 XX -0.000000 0.463097 -0.240269 -0.000000 -0.037844 + 19 CU 1 YY -0.000000 0.000000 0.480538 -0.000000 0.075689 + 20 CU 1 ZZ -0.000000 -0.463097 -0.240269 -0.000000 -0.037844 + 21 CU 1 XY 0.621001 0.000000 0.000000 -0.000000 0.000000 + 22 CU 1 XZ -0.000000 0.000000 0.000000 0.761930 0.000000 + 23 CU 1 YZ -0.000000 0.000000 0.000000 -0.000000 0.000000 + 24 CU 1 XX -0.000000 0.262614 -0.136141 -0.000000 -0.021771 + 25 CU 1 YY -0.000000 0.000000 0.272281 -0.000000 0.043541 + 26 CU 1 ZZ -0.000000 -0.262614 -0.136141 -0.000000 -0.021771 + 27 CU 1 XY 0.361652 0.000000 0.000000 -0.000000 0.000000 + 28 CU 1 XZ -0.000000 0.000000 0.000000 0.401047 0.000000 + 29 CU 1 YZ -0.000000 0.000000 0.000000 -0.000000 0.000000 + 30 N 2 S -0.000074 0.000000 -0.011539 -0.018299 0.004519 + 31 N 2 S 0.000483 0.000000 0.029146 0.040805 0.021120 + 32 N 2 X -0.007460 0.125536 0.133407 0.061884 0.087169 + 33 N 2 Y 0.145821 0.000000 0.000048 0.000403 0.142423 + 34 N 2 Z -0.004538 0.125536 -0.133407 -0.061884 -0.087169 + 35 N 2 S -0.001118 0.000000 0.024530 0.067974 -0.299245 + 36 N 2 X -0.005619 0.058075 0.091836 0.062999 0.226853 + 37 N 2 Y 0.064000 0.000000 0.001837 0.001417 0.425918 + 38 N 2 Z -0.003972 0.058075 -0.091836 -0.062999 -0.226853 + 39 N 3 S 0.000074 0.000000 -0.011539 -0.018299 0.004519 + 40 N 3 S -0.000483 0.000000 0.029146 0.040805 0.021120 + 41 N 3 X -0.007460 -0.125536 -0.133407 -0.061884 -0.087169 + 42 N 3 Y -0.145821 0.000000 0.000048 0.000403 0.142423 + 43 N 3 Z -0.004538 -0.125536 0.133407 0.061884 0.087169 + 44 N 3 S 0.001118 0.000000 0.024530 0.067974 -0.299245 + 45 N 3 X -0.005619 -0.058075 -0.091836 -0.062999 -0.226853 + 46 N 3 Y -0.064000 0.000000 0.001837 0.001417 0.425918 + 47 N 3 Z -0.003972 -0.058075 0.091836 0.062999 0.226853 + 48 N 4 S 0.000074 0.000000 -0.011539 0.018299 0.004519 + 49 N 4 S -0.000483 0.000000 0.029146 -0.040805 0.021120 + 50 N 4 X 0.007460 0.125536 0.133407 -0.061884 0.087169 + 51 N 4 Y 0.145821 0.000000 -0.000048 0.000403 -0.142423 + 52 N 4 Z -0.004538 -0.125536 0.133407 -0.061884 0.087169 + 53 N 4 S 0.001118 0.000000 0.024530 -0.067974 -0.299245 + 54 N 4 X 0.005619 0.058075 0.091836 -0.062999 0.226853 + 55 N 4 Y 0.064000 0.000000 -0.001837 0.001417 -0.425918 + 56 N 4 Z -0.003972 -0.058075 0.091836 -0.062999 0.226853 + 57 N 5 S -0.000074 0.000000 -0.011539 0.018299 0.004519 + 58 N 5 S 0.000483 0.000000 0.029146 -0.040805 0.021120 + 59 N 5 X 0.007460 -0.125536 -0.133407 0.061884 -0.087169 + 60 N 5 Y -0.145821 0.000000 -0.000048 0.000403 -0.142423 + 61 N 5 Z -0.004538 0.125536 -0.133407 0.061884 -0.087169 + 62 N 5 S -0.001118 0.000000 0.024530 -0.067974 -0.299245 + 63 N 5 X 0.005619 -0.058075 -0.091836 0.062999 -0.226853 + 64 N 5 Y -0.064000 0.000000 -0.001837 0.001417 -0.425918 + 65 N 5 Z -0.003972 0.058075 -0.091836 0.062999 -0.226853 + 66 H 6 S -0.090164 0.000000 -0.027515 -0.004375 0.060617 + 67 H 6 S -0.046711 0.000000 -0.014922 -0.008462 1.001826 + 68 H 7 S 0.090164 0.000000 -0.027515 -0.004375 0.060617 + 69 H 7 S 0.046711 0.000000 -0.014922 -0.008462 1.001826 + 70 H 8 S 0.090164 0.000000 -0.027515 0.004375 0.060617 + 71 H 8 S 0.046711 0.000000 -0.014922 0.008462 1.001826 + 72 H 9 S -0.090164 0.000000 -0.027515 0.004375 0.060617 + 73 H 9 S -0.046711 0.000000 -0.014922 0.008462 1.001826 + 74 H 10 S 0.050487 -0.093876 -0.027528 -0.005115 -0.010641 + 75 H 10 S 0.023973 -0.050857 -0.019749 -0.009852 -0.031787 + 76 H 11 S -0.050487 -0.093876 -0.027528 -0.005115 -0.010641 + 77 H 11 S -0.023973 -0.050857 -0.019749 -0.009852 -0.031787 + 78 H 12 S -0.050487 -0.093876 -0.027528 0.005115 -0.010641 + 79 H 12 S -0.023973 -0.050857 -0.019749 0.009852 -0.031787 + 80 H 13 S 0.050487 -0.093876 -0.027528 0.005115 -0.010641 + 81 H 13 S 0.023973 -0.050857 -0.019749 0.009852 -0.031787 + 82 H 14 S 0.041059 0.093876 -0.027528 -0.005115 -0.010641 + 83 H 14 S 0.026792 0.050857 -0.019749 -0.009852 -0.031787 + 84 H 15 S -0.041059 0.093876 -0.027528 -0.005115 -0.010641 + 85 H 15 S -0.026792 0.050857 -0.019749 -0.009852 -0.031787 + 86 H 16 S -0.041059 0.093876 -0.027528 0.005115 -0.010641 + 87 H 16 S -0.026792 0.050857 -0.019749 0.009852 -0.031787 + 88 H 17 S 0.041059 0.093876 -0.027528 0.005115 -0.010641 + 89 H 17 S 0.026792 0.050857 -0.019749 0.009852 -0.031787 + + 36 37 38 39 40 + -0.0248 -0.0112 -0.0112 -0.0091 0.0626 + A B3 B1 B3 A + 1 CU 1 S -0.000000 -0.000000 0.000000 -0.000000 0.015987 + 2 CU 1 S -0.000000 -0.000000 0.000000 -0.000000 0.169650 + 3 CU 1 X -0.000000 0.013708 0.000000 -0.011368 0.000000 + 4 CU 1 Y -0.000000 -0.000000 0.000000 -0.000000 0.000000 + 5 CU 1 Z -0.000000 -0.000000 -0.013708 -0.000000 0.000000 + 6 CU 1 S -0.000000 -0.000000 0.000000 -0.000000 0.047225 + 7 CU 1 X -0.000000 -0.024820 0.000000 0.022477 0.000000 + 8 CU 1 Y -0.000000 -0.000000 0.000000 -0.000000 0.000000 + 9 CU 1 Z -0.000000 -0.000000 0.024820 -0.000000 0.000000 + 10 CU 1 S -0.000000 -0.000000 0.000000 -0.000000 2.457765 + 11 CU 1 X -0.000000 0.149958 0.000000 -0.110104 0.000000 + 12 CU 1 Y -0.000000 -0.000000 0.000000 -0.000000 0.000000 + 13 CU 1 Z -0.000000 -0.000000 -0.149958 -0.000000 0.000000 + 14 CU 1 S -0.000000 -0.000000 0.000000 -0.000000 2.347565 + 15 CU 1 X -0.000000 0.118506 0.000000 0.150516 0.000000 + 16 CU 1 Y -0.000000 -0.000000 0.000000 -0.000000 0.000000 + 17 CU 1 Z -0.000000 -0.000000 -0.118506 -0.000000 0.000000 + 18 CU 1 XX -0.053635 -0.000000 0.000000 -0.000000 -0.030885 + 19 CU 1 YY -0.000000 -0.000000 0.000000 -0.000000 0.061771 + 20 CU 1 ZZ 0.053635 -0.000000 0.000000 -0.000000 -0.030885 + 21 CU 1 XY -0.000000 -0.000000 -0.042499 -0.000000 0.000000 + 22 CU 1 XZ -0.000000 -0.000000 0.000000 -0.000000 0.000000 + 23 CU 1 YZ -0.000000 0.042499 0.000000 0.020409 0.000000 + 24 CU 1 XX -0.022999 -0.000000 0.000000 -0.000000 -0.020959 + 25 CU 1 YY -0.000000 -0.000000 0.000000 -0.000000 0.041919 + 26 CU 1 ZZ 0.022999 -0.000000 0.000000 -0.000000 -0.020959 + 27 CU 1 XY -0.000000 -0.000000 -0.016580 -0.000000 0.000000 + 28 CU 1 XZ -0.000000 -0.000000 0.000000 -0.000000 0.000000 + 29 CU 1 YZ -0.000000 0.016580 0.000000 0.011717 0.000000 + 30 N 2 S -0.000000 -0.010321 -0.010321 0.016624 -0.038822 + 31 N 2 S -0.000000 0.022458 0.022458 -0.029657 0.090689 + 32 N 2 X -0.122082 0.100503 -0.079770 -0.053389 0.058043 + 33 N 2 Y -0.000000 -0.098001 -0.098001 -0.137309 -0.043440 + 34 N 2 Z -0.122082 0.079770 -0.100503 -0.061259 -0.058043 + 35 N 2 S -0.000000 0.121034 0.121034 -0.248515 0.439898 + 36 N 2 X -0.373552 0.285443 -0.251823 -0.211262 0.076261 + 37 N 2 Y -0.000000 -0.370994 -0.370994 -0.382829 -0.112946 + 38 N 2 Z -0.373552 0.251823 -0.285443 -0.285464 -0.076261 + 39 N 3 S -0.000000 0.010321 0.010321 -0.016624 -0.038822 + 40 N 3 S -0.000000 -0.022458 -0.022458 0.029657 0.090689 + 41 N 3 X 0.122082 0.100503 -0.079770 -0.053389 -0.058043 + 42 N 3 Y -0.000000 0.098001 0.098001 0.137309 -0.043440 + 43 N 3 Z 0.122082 0.079770 -0.100503 -0.061259 0.058043 + 44 N 3 S -0.000000 -0.121034 -0.121034 0.248515 0.439898 + 45 N 3 X 0.373552 0.285443 -0.251823 -0.211262 -0.076261 + 46 N 3 Y -0.000000 0.370994 0.370994 0.382829 -0.112946 + 47 N 3 Z 0.373552 0.251823 -0.285443 -0.285464 0.076261 + 48 N 4 S -0.000000 -0.010321 0.010321 0.016624 -0.038822 + 49 N 4 S -0.000000 0.022458 -0.022458 -0.029657 0.090689 + 50 N 4 X -0.122082 0.100503 0.079770 -0.053389 0.058043 + 51 N 4 Y -0.000000 0.098001 -0.098001 0.137309 0.043440 + 52 N 4 Z 0.122082 -0.079770 -0.100503 0.061259 0.058043 + 53 N 4 S -0.000000 0.121034 -0.121034 -0.248515 0.439898 + 54 N 4 X -0.373552 0.285443 0.251823 -0.211262 0.076261 + 55 N 4 Y -0.000000 0.370994 -0.370994 0.382829 0.112946 + 56 N 4 Z 0.373552 -0.251823 -0.285443 0.285464 0.076261 + 57 N 5 S -0.000000 0.010321 -0.010321 -0.016624 -0.038822 + 58 N 5 S -0.000000 -0.022458 0.022458 0.029657 0.090689 + 59 N 5 X 0.122082 0.100503 0.079770 -0.053389 -0.058043 + 60 N 5 Y -0.000000 -0.098001 0.098001 -0.137309 0.043440 + 61 N 5 Z -0.122082 -0.079770 -0.100503 0.061259 -0.058043 + 62 N 5 S -0.000000 -0.121034 0.121034 0.248515 0.439898 + 63 N 5 X 0.373552 0.285443 0.251823 -0.211262 -0.076261 + 64 N 5 Y -0.000000 -0.370994 0.370994 -0.382829 0.112946 + 65 N 5 Z -0.373552 -0.251823 -0.285443 0.285464 -0.076261 + 66 H 6 S -0.000000 -0.059491 -0.059491 -0.016709 -0.000546 + 67 H 6 S -0.000000 -0.586985 -0.586985 -0.484956 -0.523337 + 68 H 7 S -0.000000 0.059491 0.059491 0.016709 -0.000546 + 69 H 7 S -0.000000 0.586985 0.586985 0.484956 -0.523337 + 70 H 8 S -0.000000 -0.059491 0.059491 -0.016709 -0.000546 + 71 H 8 S -0.000000 -0.586985 0.586985 -0.484956 -0.523337 + 72 H 9 S -0.000000 0.059491 -0.059491 0.016709 -0.000546 + 73 H 9 S -0.000000 0.586985 -0.586985 0.484956 -0.523337 + 74 H 10 S -0.038003 0.058009 -0.008569 -0.034492 0.013049 + 75 H 10 S -0.711165 0.784621 -0.290428 -0.004061 -0.232366 + 76 H 11 S -0.038003 -0.058009 0.008569 0.034492 0.013049 + 77 H 11 S -0.711165 -0.784621 0.290428 0.004061 -0.232366 + 78 H 12 S -0.038003 0.058009 0.008569 -0.034492 0.013049 + 79 H 12 S -0.711165 0.784621 0.290428 -0.004061 -0.232366 + 80 H 13 S -0.038003 -0.058009 -0.008569 0.034492 0.013049 + 81 H 13 S -0.711165 -0.784621 -0.290428 0.004061 -0.232366 + 82 H 14 S 0.038003 -0.008569 0.058009 0.071237 0.013049 + 83 H 14 S 0.711165 -0.290428 0.784621 0.930542 -0.232366 + 84 H 15 S 0.038003 0.008569 -0.058009 -0.071237 0.013049 + 85 H 15 S 0.711165 0.290428 -0.784621 -0.930542 -0.232366 + 86 H 16 S 0.038003 -0.008569 -0.058009 0.071237 0.013049 + 87 H 16 S 0.711165 -0.290428 -0.784621 0.930542 -0.232366 + 88 H 17 S 0.038003 0.008569 0.058009 -0.071237 0.013049 + 89 H 17 S 0.711165 0.290428 0.784621 -0.930542 -0.232366 + + 41 42 43 44 45 + 1.2698 0.7215 0.8612 0.8893 2.1811 + A A A A A + 1 CU 1 S 0.005172 -0.002609 -0.000000 -0.000333 0.003447 + 2 CU 1 S 0.057125 0.027630 -0.000000 0.003862 0.036125 + 3 CU 1 X 0.000000 -0.000000 -0.000000 0.000000 0.000000 + 4 CU 1 Y 0.000000 -0.000000 -0.000000 0.000000 0.000000 + 5 CU 1 Z 0.000000 -0.000000 -0.000000 0.000000 0.000000 + 6 CU 1 S 0.015472 0.108200 -0.000000 0.014266 0.005844 + 7 CU 1 X 0.000000 -0.000000 -0.000000 0.000000 0.000000 + 8 CU 1 Y 0.000000 -0.000000 -0.000000 0.000000 0.000000 + 9 CU 1 Z 0.000000 -0.000000 -0.000000 0.000000 0.000000 + 10 CU 1 S 0.926517 0.778577 -0.000000 0.111938 0.597025 + 11 CU 1 X 0.000000 -0.000000 -0.000000 0.000000 0.000000 + 12 CU 1 Y 0.000000 -0.000000 -0.000000 0.000000 0.000000 + 13 CU 1 Z 0.000000 -0.000000 -0.000000 0.000000 0.000000 + 14 CU 1 S 0.549174 -0.362912 -0.000000 -0.110212 -0.198647 + 15 CU 1 X 0.000000 -0.000000 -0.000000 0.000000 0.000000 + 16 CU 1 Y 0.000000 -0.000000 -0.000000 0.000000 0.000000 + 17 CU 1 Z 0.000000 -0.000000 -0.000000 0.000000 0.000000 + 18 CU 1 XX -0.089421 -0.029078 -0.046328 -0.001001 0.382008 + 19 CU 1 YY 0.178843 0.058157 -0.000000 0.002001 -0.764016 + 20 CU 1 ZZ -0.089421 -0.029078 0.046328 -0.001001 0.382008 + 21 CU 1 XY 0.000000 -0.000000 -0.000000 0.000000 0.000000 + 22 CU 1 XZ 0.000000 -0.000000 -0.000000 0.000000 0.000000 + 23 CU 1 YZ 0.000000 -0.000000 -0.000000 0.000000 0.000000 + 24 CU 1 XX 0.053946 -0.031480 -0.000765 -0.007224 -0.534101 + 25 CU 1 YY -0.107891 0.062960 -0.000000 0.014448 1.068202 + 26 CU 1 ZZ 0.053946 -0.031480 0.000765 -0.007224 -0.534101 + 27 CU 1 XY 0.000000 -0.000000 -0.000000 0.000000 0.000000 + 28 CU 1 XZ 0.000000 -0.000000 -0.000000 0.000000 0.000000 + 29 CU 1 YZ 0.000000 -0.000000 -0.000000 0.000000 0.000000 + 30 N 2 S -0.015113 0.018507 -0.000000 0.020829 -0.014267 + 31 N 2 S -0.893902 -0.175807 -0.000000 -0.172083 -0.253148 + 32 N 2 X 0.015092 -0.236678 0.336314 0.028342 -0.016454 + 33 N 2 Y 0.000928 -0.106278 -0.000000 -0.425549 -0.008638 + 34 N 2 Z -0.015092 0.236678 0.336314 -0.028342 0.016454 + 35 N 2 S 1.953172 0.066598 -0.000000 0.129612 0.590042 + 36 N 2 X -0.220758 0.467392 -0.380277 0.074431 0.122024 + 37 N 2 Y -0.021258 0.436218 -0.000000 0.507307 0.031097 + 38 N 2 Z 0.220758 -0.467392 -0.380277 -0.074431 -0.122024 + 39 N 3 S -0.015113 0.018507 -0.000000 0.020829 -0.014267 + 40 N 3 S -0.893902 -0.175807 -0.000000 -0.172083 -0.253148 + 41 N 3 X -0.015092 0.236678 -0.336314 -0.028342 0.016454 + 42 N 3 Y 0.000928 -0.106278 -0.000000 -0.425549 -0.008638 + 43 N 3 Z 0.015092 -0.236678 -0.336314 0.028342 -0.016454 + 44 N 3 S 1.953172 0.066598 -0.000000 0.129612 0.590042 + 45 N 3 X 0.220758 -0.467392 0.380277 -0.074431 -0.122024 + 46 N 3 Y -0.021258 0.436218 -0.000000 0.507307 0.031097 + 47 N 3 Z -0.220758 0.467392 0.380277 0.074431 0.122024 + 48 N 4 S -0.015113 0.018507 -0.000000 0.020829 -0.014267 + 49 N 4 S -0.893902 -0.175807 -0.000000 -0.172083 -0.253148 + 50 N 4 X 0.015092 -0.236678 0.336314 0.028342 -0.016454 + 51 N 4 Y -0.000928 0.106278 -0.000000 0.425549 0.008638 + 52 N 4 Z 0.015092 -0.236678 -0.336314 0.028342 -0.016454 + 53 N 4 S 1.953172 0.066598 -0.000000 0.129612 0.590042 + 54 N 4 X -0.220758 0.467392 -0.380277 0.074431 0.122024 + 55 N 4 Y 0.021258 -0.436218 -0.000000 -0.507307 -0.031097 + 56 N 4 Z -0.220758 0.467392 0.380277 0.074431 0.122024 + 57 N 5 S -0.015113 0.018507 -0.000000 0.020829 -0.014267 + 58 N 5 S -0.893902 -0.175807 -0.000000 -0.172083 -0.253148 + 59 N 5 X -0.015092 0.236678 -0.336314 -0.028342 0.016454 + 60 N 5 Y -0.000928 0.106278 -0.000000 0.425549 0.008638 + 61 N 5 Z -0.015092 0.236678 0.336314 -0.028342 0.016454 + 62 N 5 S 1.953172 0.066598 -0.000000 0.129612 0.590042 + 63 N 5 X 0.220758 -0.467392 0.380277 -0.074431 -0.122024 + 64 N 5 Y 0.021258 -0.436218 -0.000000 -0.507307 -0.031097 + 65 N 5 Z 0.220758 -0.467392 -0.380277 -0.074431 -0.122024 + 66 H 6 S -0.300761 0.418136 -0.000000 -0.173107 -0.072969 + 67 H 6 S -0.333167 0.064227 -0.000000 0.577446 0.014087 + 68 H 7 S -0.300761 0.418136 -0.000000 -0.173107 -0.072969 + 69 H 7 S -0.333167 0.064227 -0.000000 0.577446 0.014087 + 70 H 8 S -0.300761 0.418136 -0.000000 -0.173107 -0.072969 + 71 H 8 S -0.333167 0.064227 -0.000000 0.577446 0.014087 + 72 H 9 S -0.300761 0.418136 -0.000000 -0.173107 -0.072969 + 73 H 9 S -0.333167 0.064227 -0.000000 0.577446 0.014087 + 74 H 10 S -0.241990 -0.062496 0.326070 0.334359 -0.069388 + 75 H 10 S -0.396855 0.121029 -0.575000 -0.377480 -0.043312 + 76 H 11 S -0.241990 -0.062496 0.326070 0.334359 -0.069388 + 77 H 11 S -0.396855 0.121029 -0.575000 -0.377480 -0.043312 + 78 H 12 S -0.241990 -0.062496 0.326070 0.334359 -0.069388 + 79 H 12 S -0.396855 0.121029 -0.575000 -0.377480 -0.043312 + 80 H 13 S -0.241990 -0.062496 0.326070 0.334359 -0.069388 + 81 H 13 S -0.396855 0.121029 -0.575000 -0.377480 -0.043312 + 82 H 14 S -0.241990 -0.062496 -0.326070 0.334359 -0.069388 + 83 H 14 S -0.396855 0.121029 0.575000 -0.377480 -0.043312 + 84 H 15 S -0.241990 -0.062496 -0.326070 0.334359 -0.069388 + 85 H 15 S -0.396855 0.121029 0.575000 -0.377480 -0.043312 + 86 H 16 S -0.241990 -0.062496 -0.326070 0.334359 -0.069388 + 87 H 16 S -0.396855 0.121029 0.575000 -0.377480 -0.043312 + 88 H 17 S -0.241990 -0.062496 -0.326070 0.334359 -0.069388 + 89 H 17 S -0.396855 0.121029 0.575000 -0.377480 -0.043312 + + 46 47 48 49 50 + 2.0877 0.6431 0.9311 -0.0649 0.4082 + A A A A A + 1 CU 1 S 0.000000 -0.002964 -0.001337 -0.008900 0.000000 + 2 CU 1 S 0.000000 0.023866 0.003932 -0.019798 0.000000 + 3 CU 1 X 0.000000 0.000000 0.000000 -0.000000 0.000000 + 4 CU 1 Y 0.000000 0.000000 0.000000 -0.000000 0.000000 + 5 CU 1 Z 0.000000 0.000000 0.000000 -0.000000 0.000000 + 6 CU 1 S 0.000000 0.108241 0.036272 0.137165 0.000000 + 7 CU 1 X 0.000000 0.000000 0.000000 -0.000000 0.000000 + 8 CU 1 Y 0.000000 0.000000 0.000000 -0.000000 0.000000 + 9 CU 1 Z 0.000000 0.000000 0.000000 -0.000000 0.000000 + 10 CU 1 S 0.000000 0.699999 0.126036 0.055374 0.000000 + 11 CU 1 X 0.000000 0.000000 0.000000 -0.000000 0.000000 + 12 CU 1 Y 0.000000 0.000000 0.000000 -0.000000 0.000000 + 13 CU 1 Z 0.000000 0.000000 0.000000 -0.000000 0.000000 + 14 CU 1 S 0.000000 -0.097902 0.744491 1.382328 0.000000 + 15 CU 1 X 0.000000 0.000000 0.000000 -0.000000 0.000000 + 16 CU 1 Y 0.000000 0.000000 0.000000 -0.000000 0.000000 + 17 CU 1 Z 0.000000 0.000000 0.000000 -0.000000 0.000000 + 18 CU 1 XX 0.664646 -0.015317 0.013184 0.041683 0.131644 + 19 CU 1 YY 0.000000 0.030633 -0.026368 -0.083365 0.000000 + 20 CU 1 ZZ -0.664646 -0.015317 0.013184 0.041683 -0.131644 + 21 CU 1 XY 0.000000 0.000000 0.000000 -0.000000 0.000000 + 22 CU 1 XZ 0.000000 0.000000 0.000000 -0.000000 0.000000 + 23 CU 1 YZ 0.000000 0.000000 0.000000 -0.000000 0.000000 + 24 CU 1 XX -0.899866 -0.029666 -0.002436 0.024231 -0.000318 + 25 CU 1 YY 0.000000 0.059331 0.004872 -0.048462 0.000000 + 26 CU 1 ZZ 0.899866 -0.029666 -0.002436 0.024231 0.000318 + 27 CU 1 XY 0.000000 0.000000 0.000000 -0.000000 0.000000 + 28 CU 1 XZ 0.000000 0.000000 0.000000 -0.000000 0.000000 + 29 CU 1 YZ 0.000000 0.000000 0.000000 -0.000000 0.000000 + 30 N 2 S 0.000000 0.006843 0.035875 -0.025333 0.000000 + 31 N 2 S 0.000000 -0.052409 -0.368171 0.022544 0.000000 + 32 N 2 X 0.052922 -0.227829 0.171689 -0.072024 -0.165161 + 33 N 2 Y 0.000000 0.225007 0.231103 0.083313 0.000000 + 34 N 2 Z 0.052922 0.227829 -0.171689 0.072024 -0.165161 + 35 N 2 S 0.000000 -0.004988 0.525343 0.521268 0.000000 + 36 N 2 X -0.191607 0.384350 -0.172952 -0.242233 0.409214 + 37 N 2 Y 0.000000 -0.526132 -0.372939 0.310667 0.000000 + 38 N 2 Z -0.191607 -0.384350 0.172952 0.242233 0.409214 + 39 N 3 S 0.000000 0.006843 0.035875 -0.025333 0.000000 + 40 N 3 S 0.000000 -0.052409 -0.368171 0.022544 0.000000 + 41 N 3 X -0.052922 0.227829 -0.171689 0.072024 0.165161 + 42 N 3 Y 0.000000 0.225007 0.231103 0.083313 0.000000 + 43 N 3 Z -0.052922 -0.227829 0.171689 -0.072024 0.165161 + 44 N 3 S 0.000000 -0.004988 0.525343 0.521268 0.000000 + 45 N 3 X 0.191607 -0.384350 0.172952 0.242233 -0.409214 + 46 N 3 Y 0.000000 -0.526132 -0.372939 0.310667 0.000000 + 47 N 3 Z 0.191607 0.384350 -0.172952 -0.242233 -0.409214 + 48 N 4 S 0.000000 0.006843 0.035875 -0.025333 0.000000 + 49 N 4 S 0.000000 -0.052409 -0.368171 0.022544 0.000000 + 50 N 4 X 0.052922 -0.227829 0.171689 -0.072024 -0.165161 + 51 N 4 Y 0.000000 -0.225007 -0.231103 -0.083313 0.000000 + 52 N 4 Z -0.052922 -0.227829 0.171689 -0.072024 0.165161 + 53 N 4 S 0.000000 -0.004988 0.525343 0.521268 0.000000 + 54 N 4 X -0.191607 0.384350 -0.172952 -0.242233 0.409214 + 55 N 4 Y 0.000000 0.526132 0.372939 -0.310667 0.000000 + 56 N 4 Z 0.191607 0.384350 -0.172952 -0.242233 -0.409214 + 57 N 5 S 0.000000 0.006843 0.035875 -0.025333 0.000000 + 58 N 5 S 0.000000 -0.052409 -0.368171 0.022544 0.000000 + 59 N 5 X -0.052922 0.227829 -0.171689 0.072024 0.165161 + 60 N 5 Y 0.000000 -0.225007 -0.231103 -0.083313 0.000000 + 61 N 5 Z 0.052922 0.227829 -0.171689 0.072024 -0.165161 + 62 N 5 S 0.000000 -0.004988 0.525343 0.521268 0.000000 + 63 N 5 X 0.191607 -0.384350 0.172952 0.242233 -0.409214 + 64 N 5 Y 0.000000 0.526132 0.372939 -0.310667 0.000000 + 65 N 5 Z -0.191607 -0.384350 0.172952 0.242233 0.409214 + 66 H 6 S 0.000000 -0.239250 0.409439 0.033270 0.000000 + 67 H 6 S 0.000000 0.106355 -0.742444 0.004135 0.000000 + 68 H 7 S 0.000000 -0.239250 0.409439 0.033270 0.000000 + 69 H 7 S 0.000000 0.106355 -0.742444 0.004135 0.000000 + 70 H 8 S 0.000000 -0.239250 0.409439 0.033270 0.000000 + 71 H 8 S 0.000000 0.106355 -0.742444 0.004135 0.000000 + 72 H 9 S 0.000000 -0.239250 0.409439 0.033270 0.000000 + 73 H 9 S 0.000000 0.106355 -0.742444 0.004135 0.000000 + 74 H 10 S -0.043291 0.198653 0.247376 -0.036115 0.321456 + 75 H 10 S -0.136394 0.046653 -0.198050 -0.668606 0.038867 + 76 H 11 S -0.043291 0.198653 0.247376 -0.036115 0.321456 + 77 H 11 S -0.136394 0.046653 -0.198050 -0.668606 0.038867 + 78 H 12 S -0.043291 0.198653 0.247376 -0.036115 0.321456 + 79 H 12 S -0.136394 0.046653 -0.198050 -0.668606 0.038867 + 80 H 13 S -0.043291 0.198653 0.247376 -0.036115 0.321456 + 81 H 13 S -0.136394 0.046653 -0.198050 -0.668606 0.038867 + 82 H 14 S 0.043291 0.198653 0.247376 -0.036115 -0.321456 + 83 H 14 S 0.136394 0.046653 -0.198050 -0.668606 -0.038867 + 84 H 15 S 0.043291 0.198653 0.247376 -0.036115 -0.321456 + 85 H 15 S 0.136394 0.046653 -0.198050 -0.668606 -0.038867 + 86 H 16 S 0.043291 0.198653 0.247376 -0.036115 -0.321456 + 87 H 16 S 0.136394 0.046653 -0.198050 -0.668606 -0.038867 + 88 H 17 S 0.043291 0.198653 0.247376 -0.036115 -0.321456 + 89 H 17 S 0.136394 0.046653 -0.198050 -0.668606 -0.038867 + + 51 52 53 54 55 + -0.2027 0.0991 1.5885 -0.1586 0.9038 + A B1 B1 B1 B1 + 1 CU 1 S -0.009781 -0.000000 0.000000 -0.000000 0.000000 + 2 CU 1 S -0.004698 -0.000000 0.000000 -0.000000 0.000000 + 3 CU 1 X -0.000000 -0.000000 0.000000 -0.000000 0.000000 + 4 CU 1 Y -0.000000 -0.000000 0.000000 -0.000000 0.000000 + 5 CU 1 Z -0.000000 -0.003585 -0.062073 0.000928 -0.015903 + 6 CU 1 S 0.187124 -0.000000 0.000000 -0.000000 0.000000 + 7 CU 1 X -0.000000 -0.000000 0.000000 -0.000000 0.000000 + 8 CU 1 Y -0.000000 -0.000000 0.000000 -0.000000 0.000000 + 9 CU 1 Z -0.000000 -0.022962 -0.073609 -0.034419 0.045519 + 10 CU 1 S 0.407574 -0.000000 0.000000 -0.000000 0.000000 + 11 CU 1 X -0.000000 -0.000000 0.000000 -0.000000 0.000000 + 12 CU 1 Y -0.000000 -0.000000 0.000000 -0.000000 0.000000 + 13 CU 1 Z -0.000000 -0.243826 -2.039214 -0.217934 -0.068843 + 14 CU 1 S 1.613140 -0.000000 0.000000 -0.000000 0.000000 + 15 CU 1 X -0.000000 -0.000000 0.000000 -0.000000 0.000000 + 16 CU 1 Y -0.000000 -0.000000 0.000000 -0.000000 0.000000 + 17 CU 1 Z -0.000000 2.771535 0.452507 1.580821 -0.150019 + 18 CU 1 XX 0.049462 -0.000000 0.000000 -0.000000 0.000000 + 19 CU 1 YY -0.098925 -0.000000 0.000000 -0.000000 0.000000 + 20 CU 1 ZZ 0.049462 -0.000000 0.000000 -0.000000 0.000000 + 21 CU 1 XY -0.000000 0.005568 -0.000073 0.002506 0.039488 + 22 CU 1 XZ -0.000000 -0.000000 0.000000 -0.000000 0.000000 + 23 CU 1 YZ -0.000000 -0.000000 0.000000 -0.000000 0.000000 + 24 CU 1 XX 0.026057 -0.000000 0.000000 -0.000000 0.000000 + 25 CU 1 YY -0.052114 -0.000000 0.000000 -0.000000 0.000000 + 26 CU 1 ZZ 0.026057 -0.000000 0.000000 -0.000000 0.000000 + 27 CU 1 XY -0.000000 0.000452 -0.000071 0.001118 -0.005846 + 28 CU 1 XZ -0.000000 -0.000000 0.000000 -0.000000 0.000000 + 29 CU 1 YZ -0.000000 -0.000000 0.000000 -0.000000 0.000000 + 30 N 2 S 0.050023 -0.038268 -0.023675 0.040983 -0.018621 + 31 N 2 S -0.086962 0.045556 -0.971667 -0.072344 0.067213 + 32 N 2 X -0.014566 -0.071476 -0.090974 -0.006709 -0.131569 + 33 N 2 Y 0.006555 -0.040333 0.000779 0.004507 -0.349082 + 34 N 2 Z 0.014566 0.109375 0.129298 -0.066855 -0.281775 + 35 N 2 S -0.498212 0.850962 2.228741 -0.431767 0.108074 + 36 N 2 X -0.035125 -0.252337 0.301579 -0.044337 0.218713 + 37 N 2 Y 0.022276 -0.042991 -0.005389 0.014404 0.446222 + 38 N 2 Z 0.035125 0.343466 -0.174618 -0.090274 0.572432 + 39 N 3 S 0.050023 0.038268 0.023675 -0.040983 0.018621 + 40 N 3 S -0.086962 -0.045556 0.971667 0.072344 -0.067213 + 41 N 3 X 0.014566 -0.071476 -0.090974 -0.006709 -0.131569 + 42 N 3 Y 0.006555 0.040333 -0.000779 -0.004507 0.349082 + 43 N 3 Z -0.014566 0.109375 0.129298 -0.066855 -0.281775 + 44 N 3 S -0.498212 -0.850962 -2.228741 0.431767 -0.108074 + 45 N 3 X 0.035125 -0.252337 0.301579 -0.044337 0.218713 + 46 N 3 Y 0.022276 0.042991 0.005389 -0.014404 -0.446222 + 47 N 3 Z -0.035125 0.343466 -0.174618 -0.090274 0.572432 + 48 N 4 S 0.050023 0.038268 0.023675 -0.040983 0.018621 + 49 N 4 S -0.086962 -0.045556 0.971667 0.072344 -0.067213 + 50 N 4 X -0.014566 0.071476 0.090974 0.006709 0.131569 + 51 N 4 Y -0.006555 -0.040333 0.000779 0.004507 -0.349082 + 52 N 4 Z -0.014566 0.109375 0.129298 -0.066855 -0.281775 + 53 N 4 S -0.498212 -0.850962 -2.228741 0.431767 -0.108074 + 54 N 4 X -0.035125 0.252337 -0.301579 0.044337 -0.218713 + 55 N 4 Y -0.022276 -0.042991 -0.005389 0.014404 0.446222 + 56 N 4 Z -0.035125 0.343466 -0.174618 -0.090274 0.572432 + 57 N 5 S 0.050023 -0.038268 -0.023675 0.040983 -0.018621 + 58 N 5 S -0.086962 0.045556 -0.971667 -0.072344 0.067213 + 59 N 5 X 0.014566 0.071476 0.090974 0.006709 0.131569 + 60 N 5 Y -0.006555 0.040333 -0.000779 -0.004507 0.349082 + 61 N 5 Z 0.014566 0.109375 0.129298 -0.066855 -0.281775 + 62 N 5 S -0.498212 0.850962 2.228741 -0.431767 0.108074 + 63 N 5 X 0.035125 0.252337 -0.301579 0.044337 -0.218713 + 64 N 5 Y -0.022276 0.042991 0.005389 -0.014404 -0.446222 + 65 N 5 Z 0.035125 0.343466 -0.174618 -0.090274 0.572432 + 66 H 6 S 0.020968 -0.010485 -0.260054 0.024060 -0.425749 + 67 H 6 S 0.100495 -0.974925 -0.245217 0.031301 0.614735 + 68 H 7 S 0.020968 0.010485 0.260054 -0.024060 0.425749 + 69 H 7 S 0.100495 0.974925 0.245217 -0.031301 -0.614735 + 70 H 8 S 0.020968 0.010485 0.260054 -0.024060 0.425749 + 71 H 8 S 0.100495 0.974925 0.245217 -0.031301 -0.614735 + 72 H 9 S 0.020968 -0.010485 -0.260054 0.024060 -0.425749 + 73 H 9 S 0.100495 -0.974925 -0.245217 0.031301 0.614735 + 74 H 10 S 0.018436 -0.015223 -0.263460 0.030018 0.012574 + 75 H 10 S 0.055489 -0.479475 -0.167996 0.041566 -0.033303 + 76 H 11 S 0.018436 0.015223 0.263460 -0.030018 -0.012574 + 77 H 11 S 0.055489 0.479475 0.167996 -0.041566 0.033303 + 78 H 12 S 0.018436 0.015223 0.263460 -0.030018 -0.012574 + 79 H 12 S 0.055489 0.479475 0.167996 -0.041566 0.033303 + 80 H 13 S 0.018436 -0.015223 -0.263460 0.030018 0.012574 + 81 H 13 S 0.055489 -0.479475 -0.167996 0.041566 -0.033303 + 82 H 14 S 0.018436 -0.044493 -0.233238 0.006850 -0.003557 + 83 H 14 S 0.055489 -1.111069 -0.348296 -0.030808 -0.516360 + 84 H 15 S 0.018436 0.044493 0.233238 -0.006850 0.003557 + 85 H 15 S 0.055489 1.111069 0.348296 0.030808 0.516360 + 86 H 16 S 0.018436 0.044493 0.233238 -0.006850 0.003557 + 87 H 16 S 0.055489 1.111069 0.348296 0.030808 0.516360 + 88 H 17 S 0.018436 -0.044493 -0.233238 0.006850 -0.003557 + 89 H 17 S 0.055489 -1.111069 -0.348296 -0.030808 -0.516360 + + 56 57 58 59 60 + 0.9054 2.0589 0.8443 0.7003 0.5499 + B1 B1 B1 B1 B1 + 1 CU 1 S -0.000000 -0.000000 0.000000 0.000000 0.000000 + 2 CU 1 S -0.000000 -0.000000 0.000000 0.000000 0.000000 + 3 CU 1 X -0.000000 -0.000000 0.000000 0.000000 0.000000 + 4 CU 1 Y -0.000000 -0.000000 0.000000 0.000000 0.000000 + 5 CU 1 Z -0.001964 -0.001080 0.004892 0.047713 0.017810 + 6 CU 1 S -0.000000 -0.000000 0.000000 0.000000 0.000000 + 7 CU 1 X -0.000000 -0.000000 0.000000 0.000000 0.000000 + 8 CU 1 Y -0.000000 -0.000000 0.000000 0.000000 0.000000 + 9 CU 1 Z -0.014235 0.000949 0.101158 0.029433 -0.006361 + 10 CU 1 S -0.000000 -0.000000 0.000000 0.000000 0.000000 + 11 CU 1 X -0.000000 -0.000000 0.000000 0.000000 0.000000 + 12 CU 1 Y -0.000000 -0.000000 0.000000 0.000000 0.000000 + 13 CU 1 Z -0.147000 -0.019794 0.822679 1.359612 0.382400 + 14 CU 1 S -0.000000 -0.000000 0.000000 0.000000 0.000000 + 15 CU 1 X -0.000000 -0.000000 0.000000 0.000000 0.000000 + 16 CU 1 Y -0.000000 -0.000000 0.000000 0.000000 0.000000 + 17 CU 1 Z 0.429380 -0.074970 -0.073253 0.462408 -0.253831 + 18 CU 1 XX -0.000000 -0.000000 0.000000 0.000000 0.000000 + 19 CU 1 YY -0.000000 -0.000000 0.000000 0.000000 0.000000 + 20 CU 1 ZZ -0.000000 -0.000000 0.000000 0.000000 0.000000 + 21 CU 1 XY -0.047403 -0.772351 -0.005461 -0.026247 0.136260 + 22 CU 1 XZ -0.000000 -0.000000 0.000000 0.000000 0.000000 + 23 CU 1 YZ -0.000000 -0.000000 0.000000 0.000000 0.000000 + 24 CU 1 XX -0.000000 -0.000000 0.000000 0.000000 0.000000 + 25 CU 1 YY -0.000000 -0.000000 0.000000 0.000000 0.000000 + 26 CU 1 ZZ -0.000000 -0.000000 0.000000 0.000000 0.000000 + 27 CU 1 XY 0.013222 1.019400 -0.005804 0.013088 -0.019409 + 28 CU 1 XZ -0.000000 -0.000000 0.000000 0.000000 0.000000 + 29 CU 1 YZ -0.000000 -0.000000 0.000000 0.000000 0.000000 + 30 N 2 S -0.008302 -0.000225 -0.025973 0.000298 0.005795 + 31 N 2 S 0.082827 0.000687 0.049294 -0.006429 -0.032414 + 32 N 2 X -0.278631 -0.004988 0.219878 0.285190 -0.037077 + 33 N 2 Y 0.256752 -0.074048 0.193753 -0.089732 -0.232333 + 34 N 2 Z -0.216631 -0.003764 -0.183540 0.073739 -0.043869 + 35 N 2 S -0.088524 -0.001847 0.225176 -0.069978 -0.056332 + 36 N 2 X 0.274551 0.022805 -0.526439 -0.950474 -0.141107 + 37 N 2 Y -0.418379 0.259756 -0.177802 -0.046916 0.628452 + 38 N 2 Z 0.241830 0.006631 0.611241 -0.098165 -0.043497 + 39 N 3 S 0.008302 0.000225 0.025973 -0.000298 -0.005795 + 40 N 3 S -0.082827 -0.000687 -0.049294 0.006429 0.032414 + 41 N 3 X -0.278631 -0.004988 0.219878 0.285190 -0.037077 + 42 N 3 Y -0.256752 0.074048 -0.193753 0.089732 0.232333 + 43 N 3 Z -0.216631 -0.003764 -0.183540 0.073739 -0.043869 + 44 N 3 S 0.088524 0.001847 -0.225176 0.069978 0.056332 + 45 N 3 X 0.274551 0.022805 -0.526439 -0.950474 -0.141107 + 46 N 3 Y 0.418379 -0.259756 0.177802 0.046916 -0.628452 + 47 N 3 Z 0.241830 0.006631 0.611241 -0.098165 -0.043497 + 48 N 4 S 0.008302 0.000225 0.025973 -0.000298 -0.005795 + 49 N 4 S -0.082827 -0.000687 -0.049294 0.006429 0.032414 + 50 N 4 X 0.278631 0.004988 -0.219878 -0.285190 0.037077 + 51 N 4 Y 0.256752 -0.074048 0.193753 -0.089732 -0.232333 + 52 N 4 Z -0.216631 -0.003764 -0.183540 0.073739 -0.043869 + 53 N 4 S 0.088524 0.001847 -0.225176 0.069978 0.056332 + 54 N 4 X -0.274551 -0.022805 0.526439 0.950474 0.141107 + 55 N 4 Y -0.418379 0.259756 -0.177802 -0.046916 0.628452 + 56 N 4 Z 0.241830 0.006631 0.611241 -0.098165 -0.043497 + 57 N 5 S -0.008302 -0.000225 -0.025973 0.000298 0.005795 + 58 N 5 S 0.082827 0.000687 0.049294 -0.006429 -0.032414 + 59 N 5 X 0.278631 0.004988 -0.219878 -0.285190 0.037077 + 60 N 5 Y -0.256752 0.074048 -0.193753 0.089732 0.232333 + 61 N 5 Z -0.216631 -0.003764 -0.183540 0.073739 -0.043869 + 62 N 5 S -0.088524 -0.001847 0.225176 -0.069978 -0.056332 + 63 N 5 X -0.274551 -0.022805 0.526439 0.950474 0.141107 + 64 N 5 Y 0.418379 -0.259756 0.177802 0.046916 -0.628452 + 65 N 5 Z 0.241830 0.006631 0.611241 -0.098165 -0.043497 + 66 H 6 S 0.023800 0.057490 -0.048829 -0.233847 0.383744 + 67 H 6 S -0.335695 0.138019 -0.384751 -0.139328 0.015713 + 68 H 7 S -0.023800 -0.057490 0.048829 0.233847 -0.383744 + 69 H 7 S 0.335695 -0.138019 0.384751 0.139328 -0.015713 + 70 H 8 S -0.023800 -0.057490 0.048829 0.233847 -0.383744 + 71 H 8 S 0.335695 -0.138019 0.384751 0.139328 -0.015713 + 72 H 9 S 0.023800 0.057490 -0.048829 -0.233847 0.383744 + 73 H 9 S -0.335695 0.138019 -0.384751 -0.139328 0.015713 + 74 H 10 S -0.453128 -0.018319 -0.156171 -0.289515 -0.301579 + 75 H 10 S 0.802065 -0.066038 -0.134414 -0.201563 -0.027714 + 76 H 11 S 0.453128 0.018319 0.156171 0.289515 0.301579 + 77 H 11 S -0.802065 0.066038 0.134414 0.201563 0.027714 + 78 H 12 S 0.453128 0.018319 0.156171 0.289515 0.301579 + 79 H 12 S -0.802065 0.066038 0.134414 0.201563 0.027714 + 80 H 13 S -0.453128 -0.018319 -0.156171 -0.289515 -0.301579 + 81 H 13 S 0.802065 -0.066038 -0.134414 -0.201563 -0.027714 + 82 H 14 S 0.243858 -0.045330 -0.508138 0.273649 -0.088306 + 83 H 14 S -0.434802 -0.025265 0.174756 -0.152506 0.103169 + 84 H 15 S -0.243858 0.045330 0.508138 -0.273649 0.088306 + 85 H 15 S 0.434802 0.025265 -0.174756 0.152506 -0.103169 + 86 H 16 S -0.243858 0.045330 0.508138 -0.273649 0.088306 + 87 H 16 S 0.434802 0.025265 -0.174756 0.152506 -0.103169 + 88 H 17 S 0.243858 -0.045330 -0.508138 0.273649 -0.088306 + 89 H 17 S -0.434802 -0.025265 0.174756 -0.152506 0.103169 + + 61 62 63 64 65 + 1.0327 -0.0091 0.3049 0.0991 1.5885 + B1 B1 B1 B3 B3 + 1 CU 1 S -0.000000 0.000000 -0.000000 0.000000 -0.000000 + 2 CU 1 S -0.000000 0.000000 -0.000000 0.000000 -0.000000 + 3 CU 1 X -0.000000 0.000000 -0.000000 -0.003585 0.062073 + 4 CU 1 Y -0.000000 0.000000 -0.000000 0.000000 -0.000000 + 5 CU 1 Z -0.003977 0.011368 0.115983 0.000000 -0.000000 + 6 CU 1 S -0.000000 0.000000 -0.000000 0.000000 -0.000000 + 7 CU 1 X -0.000000 0.000000 -0.000000 -0.022962 0.073609 + 8 CU 1 Y -0.000000 0.000000 -0.000000 0.000000 -0.000000 + 9 CU 1 Z 0.043267 -0.022477 -0.099744 0.000000 -0.000000 + 10 CU 1 S -0.000000 0.000000 -0.000000 0.000000 -0.000000 + 11 CU 1 X -0.000000 0.000000 -0.000000 -0.243826 2.039214 + 12 CU 1 Y -0.000000 0.000000 -0.000000 0.000000 -0.000000 + 13 CU 1 Z 0.203013 0.110104 2.068527 0.000000 -0.000000 + 14 CU 1 S -0.000000 0.000000 -0.000000 0.000000 -0.000000 + 15 CU 1 X -0.000000 0.000000 -0.000000 2.771535 -0.452507 + 16 CU 1 Y -0.000000 0.000000 -0.000000 0.000000 -0.000000 + 17 CU 1 Z 1.284295 -0.150516 -1.048507 0.000000 -0.000000 + 18 CU 1 XX -0.000000 0.000000 -0.000000 0.000000 -0.000000 + 19 CU 1 YY -0.000000 0.000000 -0.000000 0.000000 -0.000000 + 20 CU 1 ZZ -0.000000 0.000000 -0.000000 0.000000 -0.000000 + 21 CU 1 XY -0.009093 -0.020409 -0.014712 0.000000 -0.000000 + 22 CU 1 XZ -0.000000 0.000000 -0.000000 0.000000 -0.000000 + 23 CU 1 YZ -0.000000 0.000000 -0.000000 0.005568 0.000073 + 24 CU 1 XX -0.000000 0.000000 -0.000000 0.000000 -0.000000 + 25 CU 1 YY -0.000000 0.000000 -0.000000 0.000000 -0.000000 + 26 CU 1 ZZ -0.000000 0.000000 -0.000000 0.000000 -0.000000 + 27 CU 1 XY 0.004247 -0.011717 -0.000666 0.000000 -0.000000 + 28 CU 1 XZ -0.000000 0.000000 -0.000000 0.000000 -0.000000 + 29 CU 1 YZ -0.000000 0.000000 -0.000000 0.000452 0.000071 + 30 N 2 S 0.025832 0.016624 0.033285 0.038268 -0.023675 + 31 N 2 S -0.469773 -0.029657 -0.147229 -0.045556 -0.971667 + 32 N 2 X 0.174615 0.061259 -0.202801 0.109375 -0.129298 + 33 N 2 Y 0.027225 -0.137309 0.025113 0.040333 0.000779 + 34 N 2 Z -0.351270 0.053389 0.052856 -0.071476 0.090974 + 35 N 2 S 1.020567 -0.248515 -0.263629 -0.850962 2.228741 + 36 N 2 X -0.336136 0.285464 -0.303639 0.343466 0.174618 + 37 N 2 Y -0.062713 -0.382829 -0.044212 0.042991 -0.005389 + 38 N 2 Z 0.644103 0.211262 0.168242 -0.252337 -0.301579 + 39 N 3 S -0.025832 -0.016624 -0.033285 -0.038268 0.023675 + 40 N 3 S 0.469773 0.029657 0.147229 0.045556 0.971667 + 41 N 3 X 0.174615 0.061259 -0.202801 0.109375 -0.129298 + 42 N 3 Y -0.027225 0.137309 -0.025113 -0.040333 -0.000779 + 43 N 3 Z -0.351270 0.053389 0.052856 -0.071476 0.090974 + 44 N 3 S -1.020567 0.248515 0.263629 0.850962 -2.228741 + 45 N 3 X -0.336136 0.285464 -0.303639 0.343466 0.174618 + 46 N 3 Y 0.062713 0.382829 0.044212 -0.042991 0.005389 + 47 N 3 Z 0.644103 0.211262 0.168242 -0.252337 -0.301579 + 48 N 4 S -0.025832 -0.016624 -0.033285 0.038268 -0.023675 + 49 N 4 S 0.469773 0.029657 0.147229 -0.045556 -0.971667 + 50 N 4 X -0.174615 -0.061259 0.202801 0.109375 -0.129298 + 51 N 4 Y 0.027225 -0.137309 0.025113 -0.040333 -0.000779 + 52 N 4 Z -0.351270 0.053389 0.052856 0.071476 -0.090974 + 53 N 4 S -1.020567 0.248515 0.263629 -0.850962 2.228741 + 54 N 4 X 0.336136 -0.285464 0.303639 0.343466 0.174618 + 55 N 4 Y -0.062713 -0.382829 -0.044212 -0.042991 0.005389 + 56 N 4 Z 0.644103 0.211262 0.168242 0.252337 0.301579 + 57 N 5 S 0.025832 0.016624 0.033285 -0.038268 0.023675 + 58 N 5 S -0.469773 -0.029657 -0.147229 0.045556 0.971667 + 59 N 5 X -0.174615 -0.061259 0.202801 0.109375 -0.129298 + 60 N 5 Y -0.027225 0.137309 -0.025113 0.040333 0.000779 + 61 N 5 Z -0.351270 0.053389 0.052856 0.071476 -0.090974 + 62 N 5 S 1.020567 -0.248515 -0.263629 0.850962 -2.228741 + 63 N 5 X 0.336136 -0.285464 0.303639 0.343466 0.174618 + 64 N 5 Y 0.062713 0.382829 0.044212 0.042991 -0.005389 + 65 N 5 Z 0.644103 0.211262 0.168242 0.252337 0.301579 + 66 H 6 S 0.232415 -0.016709 -0.054610 0.010485 -0.260054 + 67 H 6 S -0.738094 -0.484956 0.067989 0.974925 -0.245217 + 68 H 7 S -0.232415 0.016709 0.054610 -0.010485 0.260054 + 69 H 7 S 0.738094 0.484956 -0.067989 -0.974925 0.245217 + 70 H 8 S -0.232415 0.016709 0.054610 0.010485 -0.260054 + 71 H 8 S 0.738094 0.484956 -0.067989 0.974925 -0.245217 + 72 H 9 S 0.232415 -0.016709 -0.054610 -0.010485 0.260054 + 73 H 9 S -0.738094 -0.484956 0.067989 -0.974925 0.245217 + 74 H 10 S 0.224295 0.071237 0.056518 0.044493 -0.233238 + 75 H 10 S -0.480123 0.930542 -0.211556 1.111069 -0.348296 + 76 H 11 S -0.224295 -0.071237 -0.056518 -0.044493 0.233238 + 77 H 11 S 0.480123 -0.930542 0.211556 -1.111069 0.348296 + 78 H 12 S -0.224295 -0.071237 -0.056518 0.044493 -0.233238 + 79 H 12 S 0.480123 -0.930542 0.211556 1.111069 -0.348296 + 80 H 13 S 0.224295 0.071237 0.056518 -0.044493 0.233238 + 81 H 13 S -0.480123 0.930542 -0.211556 -1.111069 0.348296 + 82 H 14 S 0.279928 -0.034492 -0.057318 0.015223 -0.263460 + 83 H 14 S -0.929091 -0.004061 0.293796 0.479475 -0.167996 + 84 H 15 S -0.279928 0.034492 0.057318 -0.015223 0.263460 + 85 H 15 S 0.929091 0.004061 -0.293796 -0.479475 0.167996 + 86 H 16 S -0.279928 0.034492 0.057318 0.015223 -0.263460 + 87 H 16 S 0.929091 0.004061 -0.293796 0.479475 -0.167996 + 88 H 17 S 0.279928 -0.034492 -0.057318 -0.015223 0.263460 + 89 H 17 S -0.929091 -0.004061 0.293796 -0.479475 0.167996 + + 66 67 68 69 70 + -0.1586 0.9038 0.9054 2.0589 0.8443 + B3 B3 B3 B3 B3 + 1 CU 1 S -0.000000 0.000000 0.000000 0.000000 -0.000000 + 2 CU 1 S -0.000000 0.000000 0.000000 0.000000 -0.000000 + 3 CU 1 X 0.000928 0.015903 0.001964 -0.001080 0.004892 + 4 CU 1 Y -0.000000 0.000000 0.000000 0.000000 -0.000000 + 5 CU 1 Z -0.000000 0.000000 0.000000 0.000000 -0.000000 + 6 CU 1 S -0.000000 0.000000 0.000000 0.000000 -0.000000 + 7 CU 1 X -0.034419 -0.045519 0.014235 0.000949 0.101158 + 8 CU 1 Y -0.000000 0.000000 0.000000 0.000000 -0.000000 + 9 CU 1 Z -0.000000 0.000000 0.000000 0.000000 -0.000000 + 10 CU 1 S -0.000000 0.000000 0.000000 0.000000 -0.000000 + 11 CU 1 X -0.217934 0.068843 0.147000 -0.019794 0.822679 + 12 CU 1 Y -0.000000 0.000000 0.000000 0.000000 -0.000000 + 13 CU 1 Z -0.000000 0.000000 0.000000 0.000000 -0.000000 + 14 CU 1 S -0.000000 0.000000 0.000000 0.000000 -0.000000 + 15 CU 1 X 1.580821 0.150019 -0.429380 -0.074970 -0.073253 + 16 CU 1 Y -0.000000 0.000000 0.000000 0.000000 -0.000000 + 17 CU 1 Z -0.000000 0.000000 0.000000 0.000000 -0.000000 + 18 CU 1 XX -0.000000 0.000000 0.000000 0.000000 -0.000000 + 19 CU 1 YY -0.000000 0.000000 0.000000 0.000000 -0.000000 + 20 CU 1 ZZ -0.000000 0.000000 0.000000 0.000000 -0.000000 + 21 CU 1 XY -0.000000 0.000000 0.000000 0.000000 -0.000000 + 22 CU 1 XZ -0.000000 0.000000 0.000000 0.000000 -0.000000 + 23 CU 1 YZ 0.002506 -0.039488 0.047403 -0.772351 -0.005461 + 24 CU 1 XX -0.000000 0.000000 0.000000 0.000000 -0.000000 + 25 CU 1 YY -0.000000 0.000000 0.000000 0.000000 -0.000000 + 26 CU 1 ZZ -0.000000 0.000000 0.000000 0.000000 -0.000000 + 27 CU 1 XY -0.000000 0.000000 0.000000 0.000000 -0.000000 + 28 CU 1 XZ -0.000000 0.000000 0.000000 0.000000 -0.000000 + 29 CU 1 YZ 0.001118 0.005846 -0.013222 1.019400 -0.005804 + 30 N 2 S -0.040983 -0.018621 -0.008302 0.000225 0.025973 + 31 N 2 S 0.072344 0.067213 0.082827 -0.000687 -0.049294 + 32 N 2 X -0.066855 0.281775 0.216631 -0.003764 -0.183540 + 33 N 2 Y -0.004507 -0.349082 0.256752 0.074048 -0.193753 + 34 N 2 Z -0.006709 0.131569 0.278631 -0.004988 0.219878 + 35 N 2 S 0.431767 0.108074 -0.088524 0.001847 -0.225176 + 36 N 2 X -0.090274 -0.572432 -0.241830 0.006631 0.611241 + 37 N 2 Y -0.014404 0.446222 -0.418379 -0.259756 0.177802 + 38 N 2 Z -0.044337 -0.218713 -0.274551 0.022805 -0.526439 + 39 N 3 S 0.040983 0.018621 0.008302 -0.000225 -0.025973 + 40 N 3 S -0.072344 -0.067213 -0.082827 0.000687 0.049294 + 41 N 3 X -0.066855 0.281775 0.216631 -0.003764 -0.183540 + 42 N 3 Y 0.004507 0.349082 -0.256752 -0.074048 0.193753 + 43 N 3 Z -0.006709 0.131569 0.278631 -0.004988 0.219878 + 44 N 3 S -0.431767 -0.108074 0.088524 -0.001847 0.225176 + 45 N 3 X -0.090274 -0.572432 -0.241830 0.006631 0.611241 + 46 N 3 Y 0.014404 -0.446222 0.418379 0.259756 -0.177802 + 47 N 3 Z -0.044337 -0.218713 -0.274551 0.022805 -0.526439 + 48 N 4 S -0.040983 -0.018621 -0.008302 0.000225 0.025973 + 49 N 4 S 0.072344 0.067213 0.082827 -0.000687 -0.049294 + 50 N 4 X -0.066855 0.281775 0.216631 -0.003764 -0.183540 + 51 N 4 Y 0.004507 0.349082 -0.256752 -0.074048 0.193753 + 52 N 4 Z 0.006709 -0.131569 -0.278631 0.004988 -0.219878 + 53 N 4 S 0.431767 0.108074 -0.088524 0.001847 -0.225176 + 54 N 4 X -0.090274 -0.572432 -0.241830 0.006631 0.611241 + 55 N 4 Y 0.014404 -0.446222 0.418379 0.259756 -0.177802 + 56 N 4 Z 0.044337 0.218713 0.274551 -0.022805 0.526439 + 57 N 5 S 0.040983 0.018621 0.008302 -0.000225 -0.025973 + 58 N 5 S -0.072344 -0.067213 -0.082827 0.000687 0.049294 + 59 N 5 X -0.066855 0.281775 0.216631 -0.003764 -0.183540 + 60 N 5 Y -0.004507 -0.349082 0.256752 0.074048 -0.193753 + 61 N 5 Z 0.006709 -0.131569 -0.278631 0.004988 -0.219878 + 62 N 5 S -0.431767 -0.108074 0.088524 -0.001847 0.225176 + 63 N 5 X -0.090274 -0.572432 -0.241830 0.006631 0.611241 + 64 N 5 Y -0.014404 0.446222 -0.418379 -0.259756 0.177802 + 65 N 5 Z 0.044337 0.218713 0.274551 -0.022805 0.526439 + 66 H 6 S -0.024060 -0.425749 0.023800 -0.057490 0.048829 + 67 H 6 S -0.031301 0.614735 -0.335695 -0.138019 0.384751 + 68 H 7 S 0.024060 0.425749 -0.023800 0.057490 -0.048829 + 69 H 7 S 0.031301 -0.614735 0.335695 0.138019 -0.384751 + 70 H 8 S -0.024060 -0.425749 0.023800 -0.057490 0.048829 + 71 H 8 S -0.031301 0.614735 -0.335695 -0.138019 0.384751 + 72 H 9 S 0.024060 0.425749 -0.023800 0.057490 -0.048829 + 73 H 9 S 0.031301 -0.614735 0.335695 0.138019 -0.384751 + 74 H 10 S -0.006850 -0.003557 0.243858 0.045330 0.508138 + 75 H 10 S 0.030808 -0.516360 -0.434802 0.025265 -0.174756 + 76 H 11 S 0.006850 0.003557 -0.243858 -0.045330 -0.508138 + 77 H 11 S -0.030808 0.516360 0.434802 -0.025265 0.174756 + 78 H 12 S -0.006850 -0.003557 0.243858 0.045330 0.508138 + 79 H 12 S 0.030808 -0.516360 -0.434802 0.025265 -0.174756 + 80 H 13 S 0.006850 0.003557 -0.243858 -0.045330 -0.508138 + 81 H 13 S -0.030808 0.516360 0.434802 -0.025265 0.174756 + 82 H 14 S -0.030018 0.012574 -0.453128 0.018319 0.156171 + 83 H 14 S -0.041566 -0.033303 0.802065 0.066038 0.134414 + 84 H 15 S 0.030018 -0.012574 0.453128 -0.018319 -0.156171 + 85 H 15 S 0.041566 0.033303 -0.802065 -0.066038 -0.134414 + 86 H 16 S -0.030018 0.012574 -0.453128 0.018319 0.156171 + 87 H 16 S -0.041566 -0.033303 0.802065 0.066038 0.134414 + 88 H 17 S 0.030018 -0.012574 0.453128 -0.018319 -0.156171 + 89 H 17 S 0.041566 0.033303 -0.802065 -0.066038 -0.134414 + + 71 72 73 74 75 + 0.7003 0.5499 1.0327 0.3049 1.2653 + B3 B3 B3 B3 B2 + 1 CU 1 S -0.000000 -0.000000 -0.000000 -0.000000 0.000000 + 2 CU 1 S -0.000000 -0.000000 -0.000000 -0.000000 0.000000 + 3 CU 1 X 0.047713 -0.017810 -0.003977 0.115983 0.000000 + 4 CU 1 Y -0.000000 -0.000000 -0.000000 -0.000000 0.000787 + 5 CU 1 Z -0.000000 -0.000000 -0.000000 -0.000000 0.000000 + 6 CU 1 S -0.000000 -0.000000 -0.000000 -0.000000 0.000000 + 7 CU 1 X 0.029433 0.006361 0.043267 -0.099744 0.000000 + 8 CU 1 Y -0.000000 -0.000000 -0.000000 -0.000000 0.001247 + 9 CU 1 Z -0.000000 -0.000000 -0.000000 -0.000000 0.000000 + 10 CU 1 S -0.000000 -0.000000 -0.000000 -0.000000 0.000000 + 11 CU 1 X 1.359612 -0.382400 0.203013 2.068527 0.000000 + 12 CU 1 Y -0.000000 -0.000000 -0.000000 -0.000000 0.027481 + 13 CU 1 Z -0.000000 -0.000000 -0.000000 -0.000000 0.000000 + 14 CU 1 S -0.000000 -0.000000 -0.000000 -0.000000 0.000000 + 15 CU 1 X 0.462408 0.253831 1.284295 -1.048507 0.000000 + 16 CU 1 Y -0.000000 -0.000000 -0.000000 -0.000000 -0.077740 + 17 CU 1 Z -0.000000 -0.000000 -0.000000 -0.000000 0.000000 + 18 CU 1 XX -0.000000 -0.000000 -0.000000 -0.000000 0.000000 + 19 CU 1 YY -0.000000 -0.000000 -0.000000 -0.000000 0.000000 + 20 CU 1 ZZ -0.000000 -0.000000 -0.000000 -0.000000 0.000000 + 21 CU 1 XY -0.000000 -0.000000 -0.000000 -0.000000 0.000000 + 22 CU 1 XZ -0.000000 -0.000000 -0.000000 -0.000000 0.262316 + 23 CU 1 YZ -0.026247 -0.136260 -0.009093 -0.014712 0.000000 + 24 CU 1 XX -0.000000 -0.000000 -0.000000 -0.000000 0.000000 + 25 CU 1 YY -0.000000 -0.000000 -0.000000 -0.000000 0.000000 + 26 CU 1 ZZ -0.000000 -0.000000 -0.000000 -0.000000 0.000000 + 27 CU 1 XY -0.000000 -0.000000 -0.000000 -0.000000 0.000000 + 28 CU 1 XZ -0.000000 -0.000000 -0.000000 -0.000000 -0.173012 + 29 CU 1 YZ 0.013088 0.019409 0.004247 -0.000666 0.000000 + 30 N 2 S -0.000298 0.005795 -0.025832 -0.033285 -0.001324 + 31 N 2 S 0.006429 -0.032414 0.469773 0.147229 -0.837679 + 32 N 2 X 0.073739 0.043869 -0.351270 0.052856 -0.096698 + 33 N 2 Y 0.089732 -0.232333 -0.027225 -0.025113 0.018106 + 34 N 2 Z 0.285190 0.037077 0.174615 -0.202801 0.096698 + 35 N 2 S 0.069978 -0.056332 -1.020567 0.263629 1.579039 + 36 N 2 X -0.098165 0.043497 0.644103 0.168242 -0.101509 + 37 N 2 Y 0.046916 0.628452 0.062713 0.044212 -0.032832 + 38 N 2 Z -0.950474 0.141107 -0.336136 -0.303639 0.101509 + 39 N 3 S 0.000298 -0.005795 0.025832 0.033285 -0.001324 + 40 N 3 S -0.006429 0.032414 -0.469773 -0.147229 -0.837679 + 41 N 3 X 0.073739 0.043869 -0.351270 0.052856 0.096698 + 42 N 3 Y -0.089732 0.232333 0.027225 0.025113 0.018106 + 43 N 3 Z 0.285190 0.037077 0.174615 -0.202801 -0.096698 + 44 N 3 S -0.069978 0.056332 1.020567 -0.263629 1.579039 + 45 N 3 X -0.098165 0.043497 0.644103 0.168242 0.101509 + 46 N 3 Y -0.046916 -0.628452 -0.062713 -0.044212 -0.032832 + 47 N 3 Z -0.950474 0.141107 -0.336136 -0.303639 -0.101509 + 48 N 4 S -0.000298 0.005795 -0.025832 -0.033285 0.001324 + 49 N 4 S 0.006429 -0.032414 0.469773 0.147229 0.837679 + 50 N 4 X 0.073739 0.043869 -0.351270 0.052856 0.096698 + 51 N 4 Y -0.089732 0.232333 0.027225 0.025113 0.018106 + 52 N 4 Z -0.285190 -0.037077 -0.174615 0.202801 0.096698 + 53 N 4 S 0.069978 -0.056332 -1.020567 0.263629 -1.579039 + 54 N 4 X -0.098165 0.043497 0.644103 0.168242 0.101509 + 55 N 4 Y -0.046916 -0.628452 -0.062713 -0.044212 -0.032832 + 56 N 4 Z 0.950474 -0.141107 0.336136 0.303639 0.101509 + 57 N 5 S 0.000298 -0.005795 0.025832 0.033285 0.001324 + 58 N 5 S -0.006429 0.032414 -0.469773 -0.147229 0.837679 + 59 N 5 X 0.073739 0.043869 -0.351270 0.052856 -0.096698 + 60 N 5 Y 0.089732 -0.232333 -0.027225 -0.025113 0.018106 + 61 N 5 Z -0.285190 -0.037077 -0.174615 0.202801 -0.096698 + 62 N 5 S -0.069978 0.056332 1.020567 -0.263629 -1.579039 + 63 N 5 X -0.098165 0.043497 0.644103 0.168242 -0.101509 + 64 N 5 Y 0.046916 0.628452 0.062713 0.044212 -0.032832 + 65 N 5 Z 0.950474 -0.141107 0.336136 0.303639 -0.101509 + 66 H 6 S 0.233847 0.383744 -0.232415 0.054610 -0.193864 + 67 H 6 S 0.139328 0.015713 0.738094 -0.067989 -0.343441 + 68 H 7 S -0.233847 -0.383744 0.232415 -0.054610 -0.193864 + 69 H 7 S -0.139328 -0.015713 -0.738094 0.067989 -0.343441 + 70 H 8 S 0.233847 0.383744 -0.232415 0.054610 0.193864 + 71 H 8 S 0.139328 0.015713 0.738094 -0.067989 0.343441 + 72 H 9 S -0.233847 -0.383744 0.232415 -0.054610 0.193864 + 73 H 9 S -0.139328 -0.015713 -0.738094 0.067989 0.343441 + 74 H 10 S -0.273649 -0.088306 -0.279928 0.057318 -0.251955 + 75 H 10 S 0.152506 0.103169 0.929091 -0.293796 -0.193200 + 76 H 11 S 0.273649 0.088306 0.279928 -0.057318 -0.251955 + 77 H 11 S -0.152506 -0.103169 -0.929091 0.293796 -0.193200 + 78 H 12 S -0.273649 -0.088306 -0.279928 0.057318 0.251955 + 79 H 12 S 0.152506 0.103169 0.929091 -0.293796 0.193200 + 80 H 13 S 0.273649 0.088306 0.279928 -0.057318 0.251955 + 81 H 13 S -0.152506 -0.103169 -0.929091 0.293796 0.193200 + 82 H 14 S 0.289515 -0.301579 -0.224295 -0.056518 -0.251955 + 83 H 14 S 0.201563 -0.027714 0.480123 0.211556 -0.193200 + 84 H 15 S -0.289515 0.301579 0.224295 0.056518 -0.251955 + 85 H 15 S -0.201563 0.027714 -0.480123 -0.211556 -0.193200 + 86 H 16 S 0.289515 -0.301579 -0.224295 -0.056518 0.251955 + 87 H 16 S 0.201563 -0.027714 0.480123 0.211556 0.193200 + 88 H 17 S -0.289515 0.301579 0.224295 0.056518 0.251955 + 89 H 17 S -0.201563 0.027714 -0.480123 -0.211556 0.193200 + + 76 77 78 79 80 + 0.1251 0.8759 2.2122 -0.0531 0.6970 + B2 B2 B2 B2 B2 + 1 CU 1 S 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 2 CU 1 S 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 3 CU 1 X 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 4 CU 1 Y 0.079292 -0.000000 0.001604 0.049851 -0.029266 + 5 CU 1 Z 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 6 CU 1 S 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 7 CU 1 X 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 8 CU 1 Y -0.089507 -0.000000 0.000003 -0.083230 0.023887 + 9 CU 1 Z 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 10 CU 1 S 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 11 CU 1 X 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 12 CU 1 Y 1.251780 -0.000000 0.038661 0.588631 -0.541821 + 13 CU 1 Z 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 14 CU 1 S 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 15 CU 1 X 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 16 CU 1 Y -1.237309 -0.000000 -0.045602 -0.371209 -0.243828 + 17 CU 1 Z 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 18 CU 1 XX 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 19 CU 1 YY 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 20 CU 1 ZZ 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 21 CU 1 XY 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 22 CU 1 XZ 0.003956 -0.000000 -0.723824 0.012673 0.002823 + 23 CU 1 YZ 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 24 CU 1 XX 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 25 CU 1 YY 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 26 CU 1 ZZ 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 27 CU 1 XY 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 28 CU 1 XZ -0.001342 -0.000000 1.132468 0.005448 0.041717 + 29 CU 1 YZ 0.000000 -0.000000 -0.000000 0.000000 -0.000000 + 30 N 2 S 0.005546 -0.000000 -0.015764 0.028578 0.000452 + 31 N 2 S 0.000397 -0.000000 -0.359964 -0.036729 0.071400 + 32 N 2 X 0.022544 -0.349302 -0.046387 0.040697 -0.110325 + 33 N 2 Y -0.165364 -0.000000 0.012868 0.090492 -0.193828 + 34 N 2 Z -0.022544 -0.349302 0.046387 -0.040697 0.110325 + 35 N 2 S -0.147869 -0.000000 0.700542 -0.465708 -0.193191 + 36 N 2 X 0.034017 0.448630 0.140871 0.100069 0.181627 + 37 N 2 Y -0.411875 -0.000000 -0.048787 0.336887 0.718762 + 38 N 2 Z -0.034017 0.448630 -0.140871 -0.100069 -0.181627 + 39 N 3 S 0.005546 -0.000000 -0.015764 0.028578 0.000452 + 40 N 3 S 0.000397 -0.000000 -0.359964 -0.036729 0.071400 + 41 N 3 X -0.022544 0.349302 0.046387 -0.040697 0.110325 + 42 N 3 Y -0.165364 -0.000000 0.012868 0.090492 -0.193828 + 43 N 3 Z 0.022544 0.349302 -0.046387 0.040697 -0.110325 + 44 N 3 S -0.147869 -0.000000 0.700542 -0.465708 -0.193191 + 45 N 3 X -0.034017 -0.448630 -0.140871 -0.100069 -0.181627 + 46 N 3 Y -0.411875 -0.000000 -0.048787 0.336887 0.718762 + 47 N 3 Z 0.034017 -0.448630 0.140871 0.100069 0.181627 + 48 N 4 S -0.005546 -0.000000 0.015764 -0.028578 -0.000452 + 49 N 4 S -0.000397 -0.000000 0.359964 0.036729 -0.071400 + 50 N 4 X -0.022544 0.349302 0.046387 -0.040697 0.110325 + 51 N 4 Y -0.165364 -0.000000 0.012868 0.090492 -0.193828 + 52 N 4 Z -0.022544 -0.349302 0.046387 -0.040697 0.110325 + 53 N 4 S 0.147869 -0.000000 -0.700542 0.465708 0.193191 + 54 N 4 X -0.034017 -0.448630 -0.140871 -0.100069 -0.181627 + 55 N 4 Y -0.411875 -0.000000 -0.048787 0.336887 0.718762 + 56 N 4 Z -0.034017 0.448630 -0.140871 -0.100069 -0.181627 + 57 N 5 S -0.005546 -0.000000 0.015764 -0.028578 -0.000452 + 58 N 5 S -0.000397 -0.000000 0.359964 0.036729 -0.071400 + 59 N 5 X 0.022544 -0.349302 -0.046387 0.040697 -0.110325 + 60 N 5 Y -0.165364 -0.000000 0.012868 0.090492 -0.193828 + 61 N 5 Z 0.022544 0.349302 -0.046387 0.040697 -0.110325 + 62 N 5 S 0.147869 -0.000000 -0.700542 0.465708 0.193191 + 63 N 5 X 0.034017 0.448630 0.140871 0.100069 0.181627 + 64 N 5 Y -0.411875 -0.000000 -0.048787 0.336887 0.718762 + 65 N 5 Z 0.034017 -0.448630 0.140871 0.100069 0.181627 + 66 H 6 S 0.000440 -0.000000 -0.090154 0.076919 0.463674 + 67 H 6 S -0.712982 -0.000000 -0.119186 0.759641 -0.004261 + 68 H 7 S 0.000440 -0.000000 -0.090154 0.076919 0.463674 + 69 H 7 S -0.712982 -0.000000 -0.119186 0.759641 -0.004261 + 70 H 8 S -0.000440 -0.000000 0.090154 -0.076919 -0.463674 + 71 H 8 S 0.712982 -0.000000 0.119186 -0.759641 0.004261 + 72 H 9 S -0.000440 -0.000000 0.090154 -0.076919 -0.463674 + 73 H 9 S 0.712982 -0.000000 0.119186 -0.759641 0.004261 + 74 H 10 S 0.008637 -0.300829 -0.100134 -0.018676 -0.189386 + 75 H 10 S 0.489172 0.636402 -0.016911 0.000940 0.094983 + 76 H 11 S 0.008637 -0.300829 -0.100134 -0.018676 -0.189386 + 77 H 11 S 0.489172 0.636402 -0.016911 0.000940 0.094983 + 78 H 12 S -0.008637 0.300829 0.100134 0.018676 0.189386 + 79 H 12 S -0.489172 -0.636402 0.016911 -0.000940 -0.094983 + 80 H 13 S -0.008637 0.300829 0.100134 0.018676 0.189386 + 81 H 13 S -0.489172 -0.636402 0.016911 -0.000940 -0.094983 + 82 H 14 S 0.008637 0.300829 -0.100134 -0.018676 -0.189386 + 83 H 14 S 0.489172 -0.636402 -0.016911 0.000940 0.094983 + 84 H 15 S 0.008637 0.300829 -0.100134 -0.018676 -0.189386 + 85 H 15 S 0.489172 -0.636402 -0.016911 0.000940 0.094983 + 86 H 16 S -0.008637 -0.300829 0.100134 0.018676 0.189386 + 87 H 16 S -0.489172 0.636402 0.016911 -0.000940 -0.094983 + 88 H 17 S -0.008637 -0.300829 0.100134 0.018676 0.189386 + 89 H 17 S -0.489172 0.636402 0.016911 -0.000940 -0.094983 + + 81 82 83 84 85 + -0.1956 0.8476 0.9215 0.9039 0.9733 + B2 B2 B2 B2 B2 + 1 CU 1 S -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 2 CU 1 S -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 3 CU 1 X -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 4 CU 1 Y 0.036182 -0.003896 -0.000000 -0.010732 -0.016306 + 5 CU 1 Z -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 6 CU 1 S -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 7 CU 1 X -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 8 CU 1 Y -0.097776 0.009354 -0.000000 -0.006238 0.002440 + 9 CU 1 Z -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 10 CU 1 S -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 11 CU 1 X -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 12 CU 1 Y 0.156412 -0.028055 -0.000000 -0.304811 -0.378088 + 13 CU 1 Z -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 14 CU 1 S -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 15 CU 1 X -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 16 CU 1 Y 1.037395 -0.141767 -0.000000 0.257500 0.178433 + 17 CU 1 Z -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 18 CU 1 XX -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 19 CU 1 YY -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 20 CU 1 ZZ -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 21 CU 1 XY -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 22 CU 1 XZ -0.000176 -0.038268 -0.000000 0.003316 -0.034556 + 23 CU 1 YZ -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 24 CU 1 XX -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 25 CU 1 YY -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 26 CU 1 ZZ -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 27 CU 1 XY -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 28 CU 1 XZ -0.000250 -0.110217 -0.000000 -0.024697 -0.039288 + 29 CU 1 YZ -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 + 30 N 2 S 0.000578 -0.033546 -0.000000 -0.028143 0.018621 + 31 N 2 S -0.001922 0.110648 -0.000000 0.224666 -0.392352 + 32 N 2 X -0.000312 0.234881 -0.185117 -0.052130 0.263127 + 33 N 2 Y -0.068458 0.135540 -0.000000 -0.394686 -0.283660 + 34 N 2 Z 0.000312 -0.234881 -0.185117 0.052130 -0.263127 + 35 N 2 S -0.001109 0.279461 -0.000000 -0.200578 0.887899 + 36 N 2 X -0.001677 -0.506571 0.574526 -0.040570 -0.412534 + 37 N 2 Y -0.054053 -0.046427 -0.000000 0.567200 0.587114 + 38 N 2 Z 0.001677 0.506571 0.574526 0.040570 0.412534 + 39 N 3 S 0.000578 -0.033546 -0.000000 -0.028143 0.018621 + 40 N 3 S -0.001922 0.110648 -0.000000 0.224666 -0.392352 + 41 N 3 X 0.000312 -0.234881 0.185117 0.052130 -0.263127 + 42 N 3 Y -0.068458 0.135540 -0.000000 -0.394686 -0.283660 + 43 N 3 Z -0.000312 0.234881 0.185117 -0.052130 0.263127 + 44 N 3 S -0.001109 0.279461 -0.000000 -0.200578 0.887899 + 45 N 3 X 0.001677 0.506571 -0.574526 0.040570 0.412534 + 46 N 3 Y -0.054053 -0.046427 -0.000000 0.567200 0.587114 + 47 N 3 Z -0.001677 -0.506571 -0.574526 -0.040570 -0.412534 + 48 N 4 S -0.000578 0.033546 -0.000000 0.028143 -0.018621 + 49 N 4 S 0.001922 -0.110648 -0.000000 -0.224666 0.392352 + 50 N 4 X 0.000312 -0.234881 0.185117 0.052130 -0.263127 + 51 N 4 Y -0.068458 0.135540 -0.000000 -0.394686 -0.283660 + 52 N 4 Z 0.000312 -0.234881 -0.185117 0.052130 -0.263127 + 53 N 4 S 0.001109 -0.279461 -0.000000 0.200578 -0.887899 + 54 N 4 X 0.001677 0.506571 -0.574526 0.040570 0.412534 + 55 N 4 Y -0.054053 -0.046427 -0.000000 0.567200 0.587114 + 56 N 4 Z 0.001677 0.506571 0.574526 0.040570 0.412534 + 57 N 5 S -0.000578 0.033546 -0.000000 0.028143 -0.018621 + 58 N 5 S 0.001922 -0.110648 -0.000000 -0.224666 0.392352 + 59 N 5 X -0.000312 0.234881 -0.185117 -0.052130 0.263127 + 60 N 5 Y -0.068458 0.135540 -0.000000 -0.394686 -0.283660 + 61 N 5 Z -0.000312 0.234881 0.185117 -0.052130 0.263127 + 62 N 5 S 0.001109 -0.279461 -0.000000 0.200578 -0.887899 + 63 N 5 X -0.001677 -0.506571 0.574526 -0.040570 -0.412534 + 64 N 5 Y -0.054053 -0.046427 -0.000000 0.567200 0.587114 + 65 N 5 Z -0.001677 -0.506571 -0.574526 -0.040570 -0.412534 + 66 H 6 S 0.046668 -0.007825 -0.000000 -0.496006 0.106639 + 67 H 6 S 0.118988 -0.343508 -0.000000 0.801193 0.065327 + 68 H 7 S 0.046668 -0.007825 -0.000000 -0.496006 0.106639 + 69 H 7 S 0.118988 -0.343508 -0.000000 0.801193 0.065327 + 70 H 8 S -0.046668 0.007825 -0.000000 0.496006 -0.106639 + 71 H 8 S -0.118988 0.343508 -0.000000 -0.801193 -0.065327 + 72 H 9 S -0.046668 0.007825 -0.000000 0.496006 -0.106639 + 73 H 9 S -0.118988 0.343508 -0.000000 -0.801193 -0.065327 + 74 H 10 S -0.023828 -0.358311 0.420408 -0.095564 0.199697 + 75 H 10 S -0.059941 0.058459 -0.114185 -0.188732 -0.682024 + 76 H 11 S -0.023828 -0.358311 0.420408 -0.095564 0.199697 + 77 H 11 S -0.059941 0.058459 -0.114185 -0.188732 -0.682024 + 78 H 12 S 0.023828 0.358311 -0.420408 0.095564 -0.199697 + 79 H 12 S 0.059941 -0.058459 0.114185 0.188732 0.682024 + 80 H 13 S 0.023828 0.358311 -0.420408 0.095564 -0.199697 + 81 H 13 S 0.059941 -0.058459 0.114185 0.188732 0.682024 + 82 H 14 S -0.023828 -0.358311 -0.420408 -0.095564 0.199697 + 83 H 14 S -0.059941 0.058459 0.114185 -0.188732 -0.682024 + 84 H 15 S -0.023828 -0.358311 -0.420408 -0.095564 0.199697 + 85 H 15 S -0.059941 0.058459 0.114185 -0.188732 -0.682024 + 86 H 16 S 0.023828 0.358311 0.420408 0.095564 -0.199697 + 87 H 16 S 0.059941 -0.058459 -0.114185 0.188732 0.682024 + 88 H 17 S 0.023828 0.358311 0.420408 0.095564 -0.199697 + 89 H 17 S 0.059941 -0.058459 -0.114185 0.188732 0.682024 + + 86 87 + -0.0235 -0.0007 + B2 B2 + 1 CU 1 S 0.000000 -0.000000 + 2 CU 1 S 0.000000 -0.000000 + 3 CU 1 X 0.000000 -0.000000 + 4 CU 1 Y 0.043158 -0.000000 + 5 CU 1 Z 0.000000 -0.000000 + 6 CU 1 S 0.000000 -0.000000 + 7 CU 1 X 0.000000 -0.000000 + 8 CU 1 Y -0.066890 -0.000000 + 9 CU 1 Z 0.000000 -0.000000 + 10 CU 1 S 0.000000 -0.000000 + 11 CU 1 X 0.000000 -0.000000 + 12 CU 1 Y 0.548086 -0.000000 + 13 CU 1 Z 0.000000 -0.000000 + 14 CU 1 S 0.000000 -0.000000 + 15 CU 1 X 0.000000 -0.000000 + 16 CU 1 Y -0.364901 -0.000000 + 17 CU 1 Z 0.000000 -0.000000 + 18 CU 1 XX 0.000000 -0.000000 + 19 CU 1 YY 0.000000 -0.000000 + 20 CU 1 ZZ 0.000000 -0.000000 + 21 CU 1 XY 0.000000 -0.000000 + 22 CU 1 XZ -0.022460 -0.000000 + 23 CU 1 YZ 0.000000 -0.000000 + 24 CU 1 XX 0.000000 -0.000000 + 25 CU 1 YY 0.000000 -0.000000 + 26 CU 1 ZZ 0.000000 -0.000000 + 27 CU 1 XY 0.000000 -0.000000 + 28 CU 1 XZ -0.008159 -0.000000 + 29 CU 1 YZ 0.000000 -0.000000 + 30 N 2 S -0.044186 -0.000000 + 31 N 2 S 0.049542 -0.000000 + 32 N 2 X -0.076388 0.112023 + 33 N 2 Y 0.046283 -0.000000 + 34 N 2 Z 0.076388 0.112023 + 35 N 2 S 0.790602 -0.000000 + 36 N 2 X -0.178887 0.398381 + 37 N 2 Y 0.155592 -0.000000 + 38 N 2 Z 0.178887 0.398381 + 39 N 3 S -0.044186 -0.000000 + 40 N 3 S 0.049542 -0.000000 + 41 N 3 X 0.076388 -0.112023 + 42 N 3 Y 0.046283 -0.000000 + 43 N 3 Z -0.076388 -0.112023 + 44 N 3 S 0.790602 -0.000000 + 45 N 3 X 0.178887 -0.398381 + 46 N 3 Y 0.155592 -0.000000 + 47 N 3 Z -0.178887 -0.398381 + 48 N 4 S 0.044186 -0.000000 + 49 N 4 S -0.049542 -0.000000 + 50 N 4 X 0.076388 -0.112023 + 51 N 4 Y 0.046283 -0.000000 + 52 N 4 Z 0.076388 0.112023 + 53 N 4 S -0.790602 -0.000000 + 54 N 4 X 0.178887 -0.398381 + 55 N 4 Y 0.155592 -0.000000 + 56 N 4 Z 0.178887 0.398381 + 57 N 5 S 0.044186 -0.000000 + 58 N 5 S -0.049542 -0.000000 + 59 N 5 X -0.076388 0.112023 + 60 N 5 Y 0.046283 -0.000000 + 61 N 5 Z -0.076388 -0.112023 + 62 N 5 S -0.790602 -0.000000 + 63 N 5 X -0.178887 0.398381 + 64 N 5 Y 0.155592 -0.000000 + 65 N 5 Z -0.178887 -0.398381 + 66 H 6 S 0.004753 -0.000000 + 67 H 6 S -0.189887 -0.000000 + 68 H 7 S 0.004753 -0.000000 + 69 H 7 S -0.189887 -0.000000 + 70 H 8 S -0.004753 -0.000000 + 71 H 8 S 0.189887 -0.000000 + 72 H 9 S -0.004753 -0.000000 + 73 H 9 S 0.189887 -0.000000 + 74 H 10 S -0.036120 0.061695 + 75 H 10 S -0.569669 0.771177 + 76 H 11 S -0.036120 0.061695 + 77 H 11 S -0.569669 0.771177 + 78 H 12 S 0.036120 -0.061695 + 79 H 12 S 0.569669 -0.771177 + 80 H 13 S 0.036120 -0.061695 + 81 H 13 S 0.569669 -0.771177 + 82 H 14 S -0.036120 -0.061695 + 83 H 14 S -0.569669 -0.771177 + 84 H 15 S -0.036120 -0.061695 + 85 H 15 S -0.569669 -0.771177 + 86 H 16 S 0.036120 0.061695 + 87 H 16 S 0.569669 0.771177 + 88 H 17 S 0.036120 0.061695 + 89 H 17 S 0.569669 0.771177 + ...... END OF ROHF CALCULATION ...... + STEP CPU TIME = 0.12 TOTAL CPU TIME = 0.6 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.6 SECONDS, CPU UTILIZATION IS 98.33% + + ---------------------------------------------------------------- + PROPERTY VALUES FOR THE ROHF SELF-CONSISTENT FIELD WAVEFUNCTION + ---------------------------------------------------------------- + + ----------------- + ENERGY COMPONENTS + ----------------- + + WAVEFUNCTION NORMALIZATION = 1.0000000000 + + ONE ELECTRON ENERGY = -3411.8569756487 + TWO ELECTRON ENERGY = 1123.6869727503 + NUCLEAR REPULSION ENERGY = 425.1940993151 + ------------------ + TOTAL ENERGY = -1862.9759035833 + + ELECTRON-ELECTRON POTENTIAL ENERGY = 1123.6869727503 + NUCLEUS-ELECTRON POTENTIAL ENERGY = -5274.7488533722 + NUCLEUS-NUCLEUS POTENTIAL ENERGY = 425.1940993151 + ------------------ + TOTAL POTENTIAL ENERGY = -3725.8677813068 + TOTAL KINETIC ENERGY = 1862.8918777235 + VIRIAL RATIO (V/T) = 2.0000451051 + + --------------------------------------- + MULLIKEN AND LOWDIN POPULATION ANALYSES + --------------------------------------- + + ATOMIC MULLIKEN POPULATION IN EACH MOLECULAR ORBITAL + + 1 2 3 4 5 + + 2.000000 2.000000 2.000000 2.000000 2.000000 + + 1 2.000005 1.999909 1.999972 1.999972 1.999998 + 2 -0.000002 0.000026 0.000008 0.000008 0.000001 + 3 -0.000002 0.000026 0.000008 0.000008 0.000001 + 4 -0.000002 0.000026 0.000008 0.000008 0.000001 + 5 -0.000002 0.000026 0.000008 0.000008 0.000001 + 6 0.000000 -0.000001 -0.000000 -0.000000 -0.000000 + 7 0.000000 -0.000001 -0.000000 -0.000000 -0.000000 + 8 0.000000 -0.000001 -0.000000 -0.000000 -0.000000 + 9 0.000000 -0.000001 -0.000000 -0.000000 -0.000000 + 10 0.000000 -0.000001 0.000000 -0.000000 -0.000000 + 11 0.000000 -0.000001 0.000000 -0.000000 -0.000000 + 12 0.000000 -0.000001 0.000000 -0.000000 -0.000000 + 13 0.000000 -0.000001 0.000000 -0.000000 -0.000000 + 14 0.000000 -0.000001 -0.000000 0.000000 -0.000000 + 15 0.000000 -0.000001 -0.000000 0.000000 -0.000000 + 16 0.000000 -0.000001 -0.000000 0.000000 -0.000000 + 17 0.000000 -0.000001 -0.000000 0.000000 -0.000000 + + 6 7 8 9 10 + + 2.000000 2.000000 2.000000 2.000000 2.000000 + + 1 0.000030 0.000163 0.000163 0.000003 2.000022 + 2 0.499655 0.499555 0.499555 0.499700 0.000043 + 3 0.499655 0.499555 0.499555 0.499700 0.000043 + 4 0.499655 0.499555 0.499555 0.499700 0.000043 + 5 0.499655 0.499555 0.499555 0.499700 0.000043 + 6 0.000111 0.000136 0.000136 0.000104 -0.000016 + 7 0.000111 0.000136 0.000136 0.000104 -0.000016 + 8 0.000111 0.000136 0.000136 0.000104 -0.000016 + 9 0.000111 0.000136 0.000136 0.000104 -0.000016 + 10 0.000113 0.000113 0.000155 0.000098 -0.000016 + 11 0.000113 0.000113 0.000155 0.000098 -0.000016 + 12 0.000113 0.000113 0.000155 0.000098 -0.000016 + 13 0.000113 0.000113 0.000155 0.000098 -0.000016 + 14 0.000113 0.000155 0.000113 0.000098 -0.000016 + 15 0.000113 0.000155 0.000113 0.000098 -0.000016 + 16 0.000113 0.000155 0.000113 0.000098 -0.000016 + 17 0.000113 0.000155 0.000113 0.000098 -0.000016 + + 11 12 13 14 15 + + 2.000000 2.000000 2.000000 2.000000 2.000000 + + 1 1.997283 1.997283 1.999976 0.035049 0.042659 + 2 0.000733 0.000733 0.000006 0.416382 0.421971 + 3 0.000733 0.000733 0.000006 0.416382 0.421971 + 4 0.000733 0.000733 0.000006 0.416382 0.421971 + 5 0.000733 0.000733 0.000006 0.416382 0.421971 + 6 -0.000011 -0.000011 -0.000000 0.023398 0.021870 + 7 -0.000011 -0.000011 -0.000000 0.023398 0.021870 + 8 -0.000011 -0.000011 -0.000000 0.023398 0.021870 + 9 -0.000011 -0.000011 -0.000000 0.023398 0.021870 + 10 -0.000047 0.000004 0.000000 0.025729 0.022266 + 11 -0.000047 0.000004 0.000000 0.025729 0.022266 + 12 -0.000047 0.000004 0.000000 0.025729 0.022266 + 13 -0.000047 0.000004 0.000000 0.025729 0.022266 + 14 0.000004 -0.000047 0.000000 0.025729 0.023228 + 15 0.000004 -0.000047 0.000000 0.025729 0.023228 + 16 0.000004 -0.000047 0.000000 0.025729 0.023228 + 17 0.000004 -0.000047 0.000000 0.025729 0.023228 + + 16 17 18 19 20 + + 2.000000 2.000000 2.000000 2.000000 2.000000 + + 1 0.042659 0.005468 1.016272 0.017154 0.012355 + 2 0.421971 0.418478 0.185494 0.336945 0.337034 + 3 0.421971 0.418478 0.185494 0.336945 0.337034 + 4 0.421971 0.418478 0.185494 0.336945 0.337034 + 5 0.421971 0.418478 0.185494 0.336945 0.337034 + 6 0.021870 0.027724 0.000000 0.105308 0.000238 + 7 0.021870 0.027724 0.000000 0.105308 0.000238 + 8 0.021870 0.027724 0.000000 0.105308 0.000238 + 9 0.021870 0.027724 0.000000 0.105308 0.000238 + 10 0.023228 0.026215 0.030219 0.026729 0.072016 + 11 0.023228 0.026215 0.030219 0.026729 0.072016 + 12 0.023228 0.026215 0.030219 0.026729 0.072016 + 13 0.023228 0.026215 0.030219 0.026729 0.072016 + 14 0.022266 0.026215 0.030219 0.026729 0.087624 + 15 0.022266 0.026215 0.030219 0.026729 0.087624 + 16 0.022266 0.026215 0.030219 0.026729 0.087624 + 17 0.022266 0.026215 0.030219 0.026729 0.087624 + + 21 22 23 24 25 + + 2.000000 2.000000 2.000000 2.000000 2.000000 + + 1 0.012355 0.630662 0.630662 0.073354 0.000000 + 2 0.337034 0.242636 0.242636 0.323922 0.331116 + 3 0.337034 0.242636 0.242636 0.323922 0.331116 + 4 0.337034 0.242636 0.242636 0.323922 0.331116 + 5 0.337034 0.242636 0.242636 0.323922 0.331116 + 6 0.000238 0.066243 0.066243 0.113824 0.000000 + 7 0.000238 0.066243 0.066243 0.113824 0.000000 + 8 0.000238 0.066243 0.066243 0.113824 0.000000 + 9 0.000238 0.066243 0.066243 0.113824 0.000000 + 10 0.087624 0.019259 0.014197 0.021958 0.084442 + 11 0.087624 0.019259 0.014197 0.021958 0.084442 + 12 0.087624 0.019259 0.014197 0.021958 0.084442 + 13 0.087624 0.019259 0.014197 0.021958 0.084442 + 14 0.072016 0.014197 0.019259 0.021958 0.084442 + 15 0.072016 0.014197 0.019259 0.021958 0.084442 + 16 0.072016 0.014197 0.019259 0.021958 0.084442 + 17 0.072016 0.014197 0.019259 0.021958 0.084442 + + 26 27 28 29 30 + + 2.000000 2.000000 2.000000 2.000000 2.000000 + + 1 1.095774 0.145917 0.108415 0.108415 1.353467 + 2 0.204318 0.439455 0.444760 0.444760 0.094452 + 3 0.204318 0.439455 0.444760 0.444760 0.094452 + 4 0.204318 0.439455 0.444760 0.444760 0.094452 + 5 0.204318 0.439455 0.444760 0.444760 0.094452 + 6 0.000856 0.008029 0.007107 0.007107 0.044039 + 7 0.000856 0.008029 0.007107 0.007107 0.044039 + 8 0.000856 0.008029 0.007107 0.007107 0.044039 + 9 0.000856 0.008029 0.007107 0.007107 0.044039 + 10 0.010441 0.008019 0.020262 0.000767 0.009721 + 11 0.010441 0.008019 0.020262 0.000767 0.009721 + 12 0.010441 0.008019 0.020262 0.000767 0.009721 + 13 0.010441 0.008019 0.020262 0.000767 0.009721 + 14 0.010441 0.008019 0.000767 0.020262 0.013420 + 15 0.010441 0.008019 0.000767 0.020262 0.013420 + 16 0.010441 0.008019 0.000767 0.020262 0.013420 + 17 0.010441 0.008019 0.000767 0.020262 0.013420 + + 31 32 33 34 + + 2.000000 2.000000 2.000000 1.000000 + + 1 1.353467 0.968895 1.091817 0.931917 + 2 0.094452 0.152560 0.215338 0.016512 + 3 0.094452 0.152560 0.215338 0.016512 + 4 0.094452 0.152560 0.215338 0.016512 + 5 0.094452 0.152560 0.215338 0.016512 + 6 0.044039 0.000000 0.003792 0.000143 + 7 0.044039 0.000000 0.003792 0.000143 + 8 0.044039 0.000000 0.003792 0.000143 + 9 0.044039 0.000000 0.003792 0.000143 + 10 0.013420 0.052608 0.003958 0.000183 + 11 0.013420 0.052608 0.003958 0.000183 + 12 0.013420 0.052608 0.003958 0.000183 + 13 0.013420 0.052608 0.003958 0.000183 + 14 0.009721 0.052608 0.003958 0.000183 + 15 0.009721 0.052608 0.003958 0.000183 + 16 0.009721 0.052608 0.003958 0.000183 + 17 0.009721 0.052608 0.003958 0.000183 + + MULLIKEN SPHERICAL HARMONIC POPULATIONS + ATOM S P D F G H I TOTAL + 1 CU 3.17 6.16 4.97 0.00 0.00 0.00 0.00 14.30 + 2 N 1.87 2.20 0.00 0.00 0.00 0.00 0.00 4.07 + 3 N 1.87 2.20 0.00 0.00 0.00 0.00 0.00 4.07 + 4 N 1.87 2.20 0.00 0.00 0.00 0.00 0.00 4.07 + 5 N 1.87 2.20 0.00 0.00 0.00 0.00 0.00 4.07 + 6 H 0.28 0.00 0.00 0.00 0.00 0.00 0.00 0.28 + 7 H 0.28 0.00 0.00 0.00 0.00 0.00 0.00 0.28 + 8 H 0.28 0.00 0.00 0.00 0.00 0.00 0.00 0.28 + 9 H 0.28 0.00 0.00 0.00 0.00 0.00 0.00 0.28 + 10 H 0.29 0.00 0.00 0.00 0.00 0.00 0.00 0.29 + 11 H 0.29 0.00 0.00 0.00 0.00 0.00 0.00 0.29 + 12 H 0.29 0.00 0.00 0.00 0.00 0.00 0.00 0.29 + 13 H 0.29 0.00 0.00 0.00 0.00 0.00 0.00 0.29 + 14 H 0.29 0.00 0.00 0.00 0.00 0.00 0.00 0.29 + 15 H 0.29 0.00 0.00 0.00 0.00 0.00 0.00 0.29 + 16 H 0.29 0.00 0.00 0.00 0.00 0.00 0.00 0.29 + 17 H 0.29 0.00 0.00 0.00 0.00 0.00 0.00 0.29 + + MULLIKEN SPHERICAL HARMONIC POPULATIONS + ATOM S P D F G H I TOTAL + 1 CU 3.17 6.16 4.03 0.00 0.00 0.00 0.00 13.37 + 2 N 1.87 2.19 0.00 0.00 0.00 0.00 0.00 4.05 + 3 N 1.87 2.19 0.00 0.00 0.00 0.00 0.00 4.05 + 4 N 1.87 2.19 0.00 0.00 0.00 0.00 0.00 4.05 + 5 N 1.87 2.19 0.00 0.00 0.00 0.00 0.00 4.05 + 6 H 0.28 0.00 0.00 0.00 0.00 0.00 0.00 0.28 + 7 H 0.28 0.00 0.00 0.00 0.00 0.00 0.00 0.28 + 8 H 0.28 0.00 0.00 0.00 0.00 0.00 0.00 0.28 + 9 H 0.28 0.00 0.00 0.00 0.00 0.00 0.00 0.28 + 10 H 0.29 0.00 0.00 0.00 0.00 0.00 0.00 0.29 + 11 H 0.29 0.00 0.00 0.00 0.00 0.00 0.00 0.29 + 12 H 0.29 0.00 0.00 0.00 0.00 0.00 0.00 0.29 + 13 H 0.29 0.00 0.00 0.00 0.00 0.00 0.00 0.29 + 14 H 0.29 0.00 0.00 0.00 0.00 0.00 0.00 0.29 + 15 H 0.29 0.00 0.00 0.00 0.00 0.00 0.00 0.29 + 16 H 0.29 0.00 0.00 0.00 0.00 0.00 0.00 0.29 + 17 H 0.29 0.00 0.00 0.00 0.00 0.00 0.00 0.29 + + ATOMIC SPIN POPULATION (ALPHA MINUS BETA) + ATOM MULL.POP. LOW.POP. + 1 CU 0.931917 0.922796 + 2 N 0.016512 0.018990 + 3 N 0.016512 0.018990 + 4 N 0.016512 0.018990 + 5 N 0.016512 0.018990 + 6 H 0.000143 0.000081 + 7 H 0.000143 0.000081 + 8 H 0.000143 0.000081 + 9 H 0.000143 0.000081 + 10 H 0.000183 0.000115 + 11 H 0.000183 0.000115 + 12 H 0.000183 0.000115 + 13 H 0.000183 0.000115 + 14 H 0.000183 0.000115 + 15 H 0.000183 0.000115 + 16 H 0.000183 0.000115 + 17 H 0.000183 0.000115 + + ----- POPULATIONS IN EACH AO ----- + MULLIKEN LOWDIN + 1 CU 1 S 1.99997 1.99915 + 2 CU 1 S 1.99957 1.96483 + 3 CU 1 X 1.99972 1.99741 + 4 CU 1 Y 1.99979 1.99682 + 5 CU 1 Z 1.99972 1.99741 + 6 CU 1 S 2.00007 0.79175 + 7 CU 1 X 2.00062 1.98894 + 8 CU 1 Y 1.99878 1.98746 + 9 CU 1 Z 2.00062 1.98894 + 10 CU 1 S 0.29692 0.27688 + 11 CU 1 X 0.12340 0.30860 + 12 CU 1 Y 0.00784 0.04053 + 13 CU 1 Z 0.12340 0.30860 + 14 CU 1 S 0.04814 0.14261 + 15 CU 1 X 0.03080 0.08718 + 16 CU 1 Y 0.01071 0.04102 + 17 CU 1 Z 0.03080 0.08718 + 18 CU 1 XX 1.35700 1.26748 + 19 CU 1 YY 1.33395 1.20052 + 20 CU 1 ZZ 1.35880 1.26748 + 21 CU 1 XY 0.74905 1.32986 + 22 CU 1 XZ 1.35880 0.73319 + 23 CU 1 YZ 0.00000 1.32986 + 24 CU 1 XX 0.61969 0.48203 + 25 CU 1 YY 0.62581 0.55676 + 26 CU 1 ZZ 0.63164 0.48203 + 27 CU 1 XY 0.33426 0.66307 + 28 CU 1 XZ 0.63164 0.37896 + 29 CU 1 YZ 0.00000 0.66307 + 30 N 2 S 1.99775 1.99232 + 31 N 2 S 0.75393 0.71061 + 32 N 2 X 0.85896 0.81878 + 33 N 2 Y 0.78998 0.73439 + 34 N 2 Z 0.85896 0.81878 + 35 N 2 S 0.98515 0.57961 + 36 N 2 X 0.66326 0.64477 + 37 N 2 Y 0.55098 0.57085 + 38 N 2 Z 0.66326 0.64477 + 39 N 3 S 1.99775 1.99232 + 40 N 3 S 0.75393 0.71061 + 41 N 3 X 0.85896 0.81878 + 42 N 3 Y 0.78998 0.73439 + 43 N 3 Z 0.85896 0.81878 + 44 N 3 S 0.98515 0.57961 + 45 N 3 X 0.66326 0.64477 + 46 N 3 Y 0.55098 0.57085 + 47 N 3 Z 0.66326 0.64477 + 48 N 4 S 1.99775 1.99232 + 49 N 4 S 0.75393 0.71061 + 50 N 4 X 0.85896 0.81878 + 51 N 4 Y 0.78998 0.73439 + 52 N 4 Z 0.85896 0.81878 + 53 N 4 S 0.98515 0.57961 + 54 N 4 X 0.66326 0.64477 + 55 N 4 Y 0.55098 0.57085 + 56 N 4 Z 0.66326 0.64477 + 57 N 5 S 1.99775 1.99232 + 58 N 5 S 0.75393 0.71061 + 59 N 5 X 0.85896 0.81878 + 60 N 5 Y 0.78998 0.73439 + 61 N 5 Z 0.85896 0.81878 + 62 N 5 S 0.98515 0.57961 + 63 N 5 X 0.66326 0.64477 + 64 N 5 Y 0.55098 0.57085 + 65 N 5 Z 0.66326 0.64477 + 66 H 6 S 0.49305 0.46787 + 67 H 6 S 0.06947 0.24266 + 68 H 7 S 0.49305 0.46787 + 69 H 7 S 0.06947 0.24266 + 70 H 8 S 0.49305 0.46787 + 71 H 8 S 0.06947 0.24266 + 72 H 9 S 0.49305 0.46787 + 73 H 9 S 0.06947 0.24266 + 74 H 10 S 0.49573 0.47192 + 75 H 10 S 0.07795 0.24542 + 76 H 11 S 0.49573 0.47192 + 77 H 11 S 0.07795 0.24542 + 78 H 12 S 0.49573 0.47192 + 79 H 12 S 0.07795 0.24542 + 80 H 13 S 0.49573 0.47192 + 81 H 13 S 0.07795 0.24542 + 82 H 14 S 0.49573 0.47192 + 83 H 14 S 0.07795 0.24542 + 84 H 15 S 0.49573 0.47192 + 85 H 15 S 0.07795 0.24542 + 86 H 16 S 0.49573 0.47192 + 87 H 16 S 0.07795 0.24542 + 88 H 17 S 0.49573 0.47192 + 89 H 17 S 0.07795 0.24542 + + ----- MULLIKEN ATOMIC OVERLAP POPULATIONS ----- + (OFF-DIAGONAL ELEMENTS NEED TO BE MULTIPLIED BY 2) + + 1 2 3 4 5 + + 1 27.2314970 + 2 0.1205047 7.1650605 + 3 0.1205047 -0.0000036 7.1650605 + 4 0.1205047 -0.0299430 -0.0299430 7.1650605 + 5 0.1205047 -0.0299430 -0.0299430 -0.0000036 7.1650605 + 6 -0.0006555 0.2952134 -0.0000089 0.0004059 0.0004059 + 7 -0.0006555 -0.0000089 0.2952134 0.0004059 0.0004059 + 8 -0.0006555 0.0004059 0.0004059 0.2952134 -0.0000089 + 9 -0.0006555 0.0004059 0.0004059 -0.0000089 0.2952134 + 10 -0.0049228 0.3004365 -0.0000122 -0.0005808 0.0004344 + 11 -0.0049228 -0.0000122 0.3004365 0.0004344 -0.0005808 + 12 -0.0049228 -0.0005808 0.0004344 0.3004365 -0.0000122 + 13 -0.0049228 0.0004344 -0.0005808 -0.0000122 0.3004365 + 14 -0.0049228 0.3004365 -0.0000122 0.0004344 -0.0005808 + 15 -0.0049228 -0.0000122 0.3004365 -0.0005808 0.0004344 + 16 -0.0049228 0.0004344 -0.0005808 0.3004365 -0.0000122 + 17 -0.0049228 -0.0005808 0.0004344 -0.0000122 0.3004365 + + 6 7 8 9 10 + + 6 0.3041807 + 7 -0.0000028 0.3041807 + 8 0.0000068 0.0000068 0.3041807 + 9 0.0000068 0.0000068 -0.0000028 0.3041807 + 10 -0.0184166 0.0000011 -0.0000888 -0.0000125 0.3147451 + 11 0.0000011 -0.0184166 -0.0000125 -0.0000888 0.0000009 + 12 -0.0000888 -0.0000125 -0.0184166 0.0000011 0.0005749 + 13 -0.0000125 -0.0000888 0.0000011 -0.0184166 0.0000003 + 14 -0.0184166 0.0000011 -0.0000125 -0.0000888 -0.0185070 + 15 0.0000011 -0.0184166 -0.0000888 -0.0000125 -0.0000023 + 16 -0.0000125 -0.0000888 -0.0184166 0.0000011 0.0000137 + 17 -0.0000888 -0.0000125 0.0000011 -0.0184166 0.0000137 + + 11 12 13 14 15 + + 11 0.3147451 + 12 0.0000003 0.3147451 + 13 0.0005749 0.0000009 0.3147451 + 14 -0.0000023 0.0000137 0.0000137 0.3147451 + 15 -0.0185070 0.0000137 0.0000137 0.0000009 0.3147451 + 16 0.0000137 -0.0185070 -0.0000023 0.0000003 0.0005749 + 17 0.0000137 -0.0000023 -0.0185070 0.0005749 0.0000003 + + 16 17 + + 16 0.3147451 + 17 0.0000009 0.3147451 + + TOTAL MULLIKEN AND LOWDIN ATOMIC POPULATIONS + ATOM MULL.POP. CHARGE LOW.POP. CHARGE + 1 CU 27.671512 1.328488 28.359611 0.640389 + 2 N 8.122248 -1.122248 7.514887 -0.514887 + 3 N 8.122248 -1.122248 7.514887 -0.514887 + 4 N 8.122248 -1.122248 7.514887 -0.514887 + 5 N 8.122248 -1.122248 7.514887 -0.514887 + 6 H 0.562519 0.437481 0.710536 0.289464 + 7 H 0.562519 0.437481 0.710536 0.289464 + 8 H 0.562519 0.437481 0.710536 0.289464 + 9 H 0.562519 0.437481 0.710536 0.289464 + 10 H 0.573678 0.426322 0.717337 0.282663 + 11 H 0.573678 0.426322 0.717337 0.282663 + 12 H 0.573678 0.426322 0.717337 0.282663 + 13 H 0.573678 0.426322 0.717337 0.282663 + 14 H 0.573678 0.426322 0.717337 0.282663 + 15 H 0.573678 0.426322 0.717337 0.282663 + 16 H 0.573678 0.426322 0.717337 0.282663 + 17 H 0.573678 0.426322 0.717337 0.282663 + + MULLIKEN SPHERICAL HARMONIC POPULATIONS + ATOM S P D F G H I TOTAL + 1 CU 6.34 12.33 9.00 0.00 0.00 0.00 0.00 27.67 + 2 N 3.74 4.39 0.00 0.00 0.00 0.00 0.00 8.12 + 3 N 3.74 4.39 0.00 0.00 0.00 0.00 0.00 8.12 + 4 N 3.74 4.39 0.00 0.00 0.00 0.00 0.00 8.12 + 5 N 3.74 4.39 0.00 0.00 0.00 0.00 0.00 8.12 + 6 H 0.56 0.00 0.00 0.00 0.00 0.00 0.00 0.56 + 7 H 0.56 0.00 0.00 0.00 0.00 0.00 0.00 0.56 + 8 H 0.56 0.00 0.00 0.00 0.00 0.00 0.00 0.56 + 9 H 0.56 0.00 0.00 0.00 0.00 0.00 0.00 0.56 + 10 H 0.57 0.00 0.00 0.00 0.00 0.00 0.00 0.57 + 11 H 0.57 0.00 0.00 0.00 0.00 0.00 0.00 0.57 + 12 H 0.57 0.00 0.00 0.00 0.00 0.00 0.00 0.57 + 13 H 0.57 0.00 0.00 0.00 0.00 0.00 0.00 0.57 + 14 H 0.57 0.00 0.00 0.00 0.00 0.00 0.00 0.57 + 15 H 0.57 0.00 0.00 0.00 0.00 0.00 0.00 0.57 + 16 H 0.57 0.00 0.00 0.00 0.00 0.00 0.00 0.57 + 17 H 0.57 0.00 0.00 0.00 0.00 0.00 0.00 0.57 + + ------------------------------- + BOND ORDER AND VALENCE ANALYSIS BOND ORDER THRESHOLD=0.050 + ------------------------------- + + BOND BOND BOND + ATOM PAIR DIST ORDER ATOM PAIR DIST ORDER ATOM PAIR DIST ORDER + 1 2 2.017 0.325 1 3 2.017 0.325 1 4 2.017 0.325 + 1 5 2.017 0.325 2 6 1.020 0.778 2 10 1.020 0.789 + 2 14 1.020 0.789 3 7 1.020 0.778 3 11 1.020 0.789 + 3 15 1.020 0.789 4 8 1.020 0.778 4 12 1.020 0.789 + 4 16 1.020 0.789 5 9 1.020 0.778 5 13 1.020 0.789 + 5 17 1.020 0.789 + + TOTAL BONDED FREE + ATOM VALENCE VALENCE VALENCE + 1 CU 2.206 1.338 0.868 + 2 N 2.665 2.665 0.000 + 3 N 2.665 2.665 0.000 + 4 N 2.665 2.665 0.000 + 5 N 2.665 2.665 0.000 + 6 H 0.775 0.775 0.000 + 7 H 0.775 0.775 0.000 + 8 H 0.775 0.775 0.000 + 9 H 0.775 0.775 0.000 + 10 H 0.783 0.783 0.000 + 11 H 0.783 0.783 0.000 + 12 H 0.783 0.783 0.000 + 13 H 0.783 0.783 0.000 + 14 H 0.783 0.783 0.000 + 15 H 0.783 0.783 0.000 + 16 H 0.783 0.783 0.000 + 17 H 0.783 0.783 0.000 + + ----------------------------------------- + ATOMIC SPIN DENSITY AT THE NUCLEUS (A.U.) + ----------------------------------------- + SPIN DENS ALPHA DENS BETA DENS + 1 CU 29.0 -0.0000000 7822.36262 7822.36262 + 2 N 7.0 0.0286169 95.83891 95.81030 + 3 N 7.0 0.0286169 95.83891 95.81030 + 4 N 7.0 0.0286169 95.83891 95.81030 + 5 N 7.0 0.0286169 95.83891 95.81030 + 6 H 1.0 0.0000653 0.19816 0.19809 + 7 H 1.0 0.0000653 0.19816 0.19809 + 8 H 1.0 0.0000653 0.19816 0.19809 + 9 H 1.0 0.0000653 0.19816 0.19809 + 10 H 1.0 0.0000758 0.19935 0.19928 + 11 H 1.0 0.0000758 0.19935 0.19928 + 12 H 1.0 0.0000758 0.19935 0.19928 + 13 H 1.0 0.0000758 0.19935 0.19928 + 14 H 1.0 0.0000758 0.19935 0.19928 + 15 H 1.0 0.0000758 0.19935 0.19928 + 16 H 1.0 0.0000758 0.19935 0.19928 + 17 H 1.0 0.0000758 0.19935 0.19928 + + --------------------- + ELECTROSTATIC MOMENTS + --------------------- + + POINT 1 X Y Z (BOHR) CHARGE + 0.000000 0.000000 0.000000 2.00 (A.U.) + DX DY DZ /D/ (DEBYE) + 0.000000 0.000000 -0.000000 0.000000 + ...... END OF PROPERTY EVALUATION ...... + STEP CPU TIME = 0.04 TOTAL CPU TIME = 0.6 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.6 SECONDS, CPU UTILIZATION IS 98.44% + 580000 WORDS OF DYNAMIC MEMORY USED + EXECUTION OF GAMESS TERMINATED NORMALLY Wed Nov 15 13:27:30 2017 + DDI: 263640 bytes (0.3 MB / 0 MWords) used by master data server. + + ---------------------------------------- + CPU timing information for all processes + ======================================== + 0: 0.604 + 0.36 = 0.640 + ---------------------------------------- + ddikick.x: exited gracefully. +----- accounting info ----- +Files used on the master node quad7 were: +-rw-r--r-- 1 giner giner 127337 Nov 15 13:27 /scr/giner/ROHF_Ag.dat +-rw-r--r-- 1 giner giner 127916 Nov 15 13:27 /scr/giner/ROHF_Ag.F05 +-rw-r--r-- 1 giner giner 16921504 Nov 15 13:27 /scr/giner/ROHF_Ag.F08 +-rw-r--r-- 1 giner giner 1995920 Nov 15 13:27 /scr/giner/ROHF_Ag.F10 +Wed Nov 15 13:27:33 CET 2017 +0.0u 0.0s 0:03.82 3.4% 0+0k 0+256io 0pf+0w From 438b0ec484289b47302fc872af652a81314f7a37 Mon Sep 17 00:00:00 2001 From: Emmanuel Giner Date: Fri, 28 Dec 2018 14:59:38 +0100 Subject: [PATCH 03/16] modified some scripts --- scripts/compilation/qp_create_ninja | 2 +- scripts/module/module_handler.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/compilation/qp_create_ninja b/scripts/compilation/qp_create_ninja index c63f5a97..f364f67e 100755 --- a/scripts/compilation/qp_create_ninja +++ b/scripts/compilation/qp_create_ninja @@ -538,7 +538,7 @@ def get_binaries(path_module): import subprocess try: - cmd = 'grep -l "program" {0}/*.irp.f'.format(path_module.abs) + cmd = 'grep -l -e "^program " {0}/*.irp.f'.format(path_module.abs) process = subprocess.Popen([cmd], shell=True, stdout=subprocess.PIPE, diff --git a/scripts/module/module_handler.py b/scripts/module/module_handler.py index 22677d33..ae2d563f 100755 --- a/scripts/module/module_handler.py +++ b/scripts/module/module_handler.py @@ -86,10 +86,10 @@ def get_dict_child(l_root_abs=None): else: if module_rel not in d_ref: d_ref[module_rel] = l_children - else: - print "Module {0} alredy defined" - print "Abort" - sys.exit(1) + #else: + # print "Module {0} alredy defined" + # print "Abort" + # sys.exit(1) return d_ref From a6fbca94d23992100dbd05e5861460e71d17e47b Mon Sep 17 00:00:00 2001 From: Emmanuel Giner Date: Fri, 28 Dec 2018 15:47:23 +0100 Subject: [PATCH 04/16] modified README.rst --- src/README.rst | 115 +----------------------------------- src/mo_two_e_integrals/NEED | 1 + 2 files changed, 4 insertions(+), 112 deletions(-) diff --git a/src/README.rst b/src/README.rst index 7d7560ea..9b987305 100644 --- a/src/README.rst +++ b/src/README.rst @@ -1,112 +1,3 @@ -====================== -Programming guidelines -====================== - -Each module (directory) contains the following: - -* A ``README.rst`` file to document the current module. -* An ``ASSUMPTIONS.rst`` file. This file should document all the implicit - assumptions used in the module. For example, if the atomic orbitals are - assumed to be normalized, this should be mentioned in the - ``AOs/ASSUMPTIONS.rst`` file. -* A ``NEEDED_MODULES`` file which contains the list of modules on which the - current module depends -* A set of ``.irp.f`` files containing provider, subroutines and functions -* A ``Makefile`` that should compile -* Optionally some ``*.ezfio_config`` configuration files for the EZFIO - library - -A new module may be created by invoking the ``create_module.sh`` script. - -Every subroutine, function or provider should be documented using the -BEGIN_DOC ... END_DOC block. The documentation should be written in -ReStructured Text format to enable the automatic generation of the Sphinx -documentation. - -When the current module depends on other modules, the list of modules should -be added in the ``NEEDED_MODULES`` file. - - -Creating a new module -===================== - -Every new module should be created using the interactive ``create_module.sh`` -script located in the ``${QP_ROOT}/scripts`` directory. This will create -all the required files with correct templates. - - -Makefiles -========= - -Use the structure of Makefiles provided by the ``create_module.sh`` script. If -you need to re-create the Makefile, you can use the ``create_Makefile.sh`` -script in the current module directory. - -If you need to add some Fortran or C files that should not be tracked by IRPF90, -you have to add them manually to the Makefile in the ``SRC`` variable. -You also need to add the corresponding ``*.o`` file prefixed by ``IRPF90_temp/``. -For example - -.. code-block:: Makefile - - SRC=map_module.f90 - OBJ=IRPF90_temp/map_module.o - - - -Input data -========== - -Every program is supposed to use an EZFIO database containing all the -persistent data. This database can be modified in using the generated Fortran -functions or the generated Python module. - -The definition of the data needed by the module should be put in the -``*.ezfio_config`` file. - -Input data can also be read from the standard input to enable the use of -a program with a pipe, but the read statements should be present **only** in -the main program. - - -Output data -=========== - -Print to stdout statements should only appear in programs, not in providers, -subroutines or functions. This enables the possibility easily use the programs -with pipes. - -To print, you should write in an output file provided by the ``Output`` -module. Every module has its own output file. Before printing something, -a timestamp should be put in the output with the ``write_time`` function. -This allows an external script to read all the pieces of the output files -and put them in a sequential order. The format of the output should be -in ReStructured Text for easy transformation of the output data to pdf, -HTML, man, etc. - - -Creating a shell script -======================= - -Shell scripts should be located in the ``${QP_ROOT}/scripts`` directory. -Relative paths should be avoided as much as possible, and the result of commands -should be always checked. For example, when creating a directory the existence -of the directory has to be checked. - - -Documentation -============= - -.. Do not edit this section. It was auto-generated from the -.. NEEDED_MODULES file. - - - -Needed Modules -============== - -.. Do not edit this section. It was auto-generated from the -.. NEEDED_MODULES file. - -* `Utils `_ - +========================== +The core modules of the QP +========================== diff --git a/src/mo_two_e_integrals/NEED b/src/mo_two_e_integrals/NEED index b7f0c201..df8ba165 100644 --- a/src/mo_two_e_integrals/NEED +++ b/src/mo_two_e_integrals/NEED @@ -1,4 +1,5 @@ ao_one_e_integrals +mo_one_e_integrals ao_two_e_integrals pseudo bitmask From 606d20dc0f8b74db5598aaa10cad10fee242071f Mon Sep 17 00:00:00 2001 From: Emmanuel Giner Date: Fri, 28 Dec 2018 19:38:49 +0100 Subject: [PATCH 05/16] modifs in docs/intro --- doc/.gitignore | 1 - doc/Makefile | 154 ------- doc/code_architecture/Script.md | 44 -- doc/source/Intro.rst | 156 ------- doc/source/_static/.empty | 0 doc/source/code_doc_intro.rst | 228 ---------- doc/source/conf.py | 285 ------------- doc/source/index.rst | 25 -- doc/source/install.rst | 40 -- doc/source/wavefunction.rst | 169 -------- docs/source/_static/links.rst | 3 + docs/source/intro/intro.rst | 16 +- docs/source/modules/ao_one_e_integrals.rst | 9 +- docs/source/modules/aux_quantities.rst | 13 +- docs/source/modules/becke_numerical_grid.rst | 67 +-- docs/source/modules/davidson.rst | 5 +- docs/source/modules/determinants.rst | 30 ++ docs/source/modules/dft_keywords.rst | 11 +- docs/source/modules/fci.rst | 14 + docs/source/modules/generators_cas.rst | 2 +- docs/source/modules/hartree_fock.rst | 85 ++++ docs/source/modules/kohn_sham.rst | 281 ------------- docs/source/modules/kohn_sham_rs.rst | 182 ++++++++ docs/source/modules/mo_one_e_integrals.rst | 9 +- docs/source/modules/perturbation.rst | 15 - docs/source/modules/psiref_cas.rst | 163 ------- docs/source/modules/psiref_utils.rst | 366 ---------------- docs/source/modules/scf_utils.rst | 4 +- docs/source/modules/slave.rst | 14 - .../programmers_guide/index_providers.rst | 396 ++++++++++-------- 30 files changed, 619 insertions(+), 2168 deletions(-) delete mode 100644 doc/.gitignore delete mode 100644 doc/Makefile delete mode 100644 doc/code_architecture/Script.md delete mode 100644 doc/source/Intro.rst delete mode 100644 doc/source/_static/.empty delete mode 100644 doc/source/code_doc_intro.rst delete mode 100644 doc/source/conf.py delete mode 100644 doc/source/index.rst delete mode 100644 doc/source/install.rst delete mode 100644 doc/source/wavefunction.rst diff --git a/doc/.gitignore b/doc/.gitignore deleted file mode 100644 index 378eac25..00000000 --- a/doc/.gitignore +++ /dev/null @@ -1 +0,0 @@ -build diff --git a/doc/Makefile b/doc/Makefile deleted file mode 100644 index 29a05ba5..00000000 --- a/doc/Makefile +++ /dev/null @@ -1,154 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = build - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext default -default: html - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - -rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/SelectedCI.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/SelectedCI.qhc" - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/SelectedCI" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/SelectedCI" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." diff --git a/doc/code_architecture/Script.md b/doc/code_architecture/Script.md deleted file mode 100644 index ba918f78..00000000 --- a/doc/code_architecture/Script.md +++ /dev/null @@ -1,44 +0,0 @@ -# `ei_handler.py` - -This script in located in `$QP_ROOT/scripts/ezfio_interface/`. -It provide all the resource need to deal with the `EZFIO.cfg` files : - - The creation of `$MODULE_LOWER_ezfio_config` in `$QP_ROOT/ezfio/config` - - The `ezfio_interface.irp.f` who containt all the provider associate (in `$MODULE/`) - - The `$MODULE_LOWER_ezfio_defaults` in `$QP_ROOT/data/` - - The `Input_$MODULE_LOWER.ml` for the *qp_edit* - -For more information you can type `ei_handler.py -h` - -# `module_handler.py` - -This script in located in `$QP_ROOT/scripts/module/`. -It provide all the resource related to the tree dependency of the modules. -If more useful as a librairy than a cli. - -It have some usefull property: - - The list of module - - The dict of the descendant - - The dict of the parent - - The dict of the child - - The dict of the root - - The list reduced tree (For a list of module in input return only the root) - -For tree syntax you can check http://en.wikipedia.org/wiki/Tree_%28data_structure%29#Terminologies_used_in_Trees - -In the cli mode: - - From a `NEEDED_CHILDREN_MODULE` file you can have all the descendant, and a png - representation who correspond. - - -# `qp_install_module.py` -This script is located in `$QP_ROOT/scripts/module/`. - -It is usefull when you need to install a new module. (From the soon to come repo or from scratch). - -# `qp_create_ninja.py` - -This script is located in `$QP_ROOT/scripts/compilation/`. -It will create the `build.ninja` file. It will use intersifly the `module_handler.py` module. - -To read all the flag for the compilation the module `read_compilation_cfg.py` is used. -You only need to know, that all flag are appending. diff --git a/doc/source/Intro.rst b/doc/source/Intro.rst deleted file mode 100644 index 57833a18..00000000 --- a/doc/source/Intro.rst +++ /dev/null @@ -1,156 +0,0 @@ -============================================================ -What is a selected CI caculation ? Some theoretical concepts -============================================================ - -Generalities -============ - - The selected CI algorithm can be seen as a way to compute the energies (and various properties) of a given number of eigenstates - of a given :term:`target space` (ex : CISD, CAS-CI, DDCI etc ...), - but by taking the freedom of splitting the wave function of the target space in term - of :term:`internal determinants` treated variationally and :term:`perturbers` treated perturbatively. - Why this freedom ? Because in a given :term:`target space` (except some really special cases) most of the information - is concentrated within a tiny fraction of the :term:`target wave function`, and the remaining part can be reasonabely estimated by perturbtation. - - - This splitting of the wave function is not done in one shot, it is done iteratively. The iterative procedure needs a :term:`stopping criterion` to end the calculation and to control the quality of the calculation. - This :term:`stopping criterion` can be for example the number of determinants in the :term:`intern space`, - or the value of the :term:`energetic perturbative correction` to estimate the importance of the perturbation, or the convergence of the :term:`estimated target energy`, or anything that can - be defined in terms of available informations during the calculation. - - The heart of the selected CI algorithm is based on the CIPSI algorithm (ref Malrieu). - - -Selected CI in a few words -========================== - - First you define a :term:`target space`. Once the target space is defined, you define the :term:`stopping criterion`. - After that, a starting wave function is chosen by the user (HF by default). - This starting wave function is the first :term:`Internal determinants` wave function. - After that, one would like to extend this :term:`Internal determinants` wave function by adding - some :term:`perturbers` determinants. - - How do we select the good :term:`perturbers` ? - - - do while (:term:`stopping criterion` is reached) - - - 1) Generates :term:`perturbers` determinants according to your chosen :term:`target space`. - - :math:`\Rightarrow` generates a set of :term:`perturbers` :math:`\{|D_P\rangle\}` - 2) The :term:`perturbers` importance are estimated by perturbation thanks to the current :term:`internal determinants`. - 3) The most important of the :math:`\{|D_P\rangle\}` are chosen to enter in the :term:`internal determinants`. - 4) You rediagonalize the H matrix with the previous set of :term:`internal determinants` and the chosen :term:`perturbers`. - - :math:`\Rightarrow` create a new wave function and a new set of the :term:`internal determinants` - 5) iterate - -Once the iterative procedure is stopped, the :term:`internal determinants` wave function have a :term:`variational energy`, -and by adding the :term:`energetic perturbative correction` one have the :term:`estimated target energy` -which is an approximation of the :term:`target energy`. One should notice that if one takes -a :term:`stopping criterion` such as the all the determinants of the target space are in the :term:`intern space`, -the :term:`estimated target energy` is the :term:`target energy`. - - -If one is interested of how is built the selected CI wave function into more details, one can read the further section. - -What is a selected CI iteration in practice (and some details) -============================================================== - - From the previous section we have roughly seen how the selected CI works. Now, getting a bit more into details, - we will see what is done in practice during a selected CI iteration. To illustrate this, a simple CISD example wil be given. - -The general picture -^^^^^^^^^^^^^^^^^^^ - -The :term:`target space` defines entirely the method that is going to be approximated, and the stopping criterion will be the only approximation. -This :term:`target space` can always be defined in terms of application of an :term:`H operator` -(with some :term:`excitation restrictions`) on a given set of determinants that we shall call the :term:`generators` determinants. -We call :term:`restricted H operator` this precise H operator. -The target space intirely defines the :term:`restricted H operator`. -The only flexibility is the perturbation theory to be used to estimate the coeficients of the :term:`perturbers`. -If the target space is just defines in term of a CI matrix to diagonalize, the standard :term:`Diagonalization EN EG` perturbation will be used. -If some other constraints are imposed in addition to the CI matrix -(e.g. some physical conditions of size extensivity such as in the :term:`CISD+SC2` method), -then the perturbation must be adapted to properly respect the :term:`target space`. - -CISD : the :term:`target space` is here defined intirely by all the single and double excitations acting on the HF determinant. -So the :term:`generators` subset of determinants here is only the HF determinant and will not change along the iteration. -If some occupied orbitals are chosen to be frozen (no excitations from those orbitals) -or some virtuals are chosen to be deleted (no excitations going to these virtuals orbitals), -this constraint imposes the :term:`excitation restrictions`. So here the :term:`restricted H operator` will be all the single and double excitations except those involving either a frozen core orbital or a deleted virtual orbital. -Different choices of perturbation theory can be made for the CISD, but the standard :term:`Diagonalization EN EG` can be trustly used. - -Once the :term:`target space` have been defined, what does in practice a selected CI iteration. -For the sake of simplicity, here we emphasize on the ground state :math:`| \psi_0 \rangle`. At a given iteration, one have a :term:`selected wave function` :math:`|\psi_0\rangle`, and the selected CI algorithm performs : - - do G = 1, N_Generators - - 1) Apply the :term:`restricted H operator` on the :math:`|D_G \rangle` :term:`generators` determinant belonging to :math:`| \psi_0 \rangle` - - :math:`\Rightarrow` generates a set of :term:`perturbers` :math:`|D_P\rangle` - - 2) Estimate the perturbative importance of each perturbers - - :math:`\Rightarrow` example for the :term:`EN EG` perturbation theory - - .. math:: - - c_{D_P}^0= \frac{ \sum_{S=1,N_{\rm selectors}} c_S^0 \langle D_S|H|D_P\rangle}{ \langle \psi_0 |H|\psi_0 \rangle - \langle D_P |H|D_P\rangle } \\ - e_{D_P}^0= \frac{(\sum_{S=1,N_{\rm selectors}} c_S^0 \langle D_S|H|D_P\rangle) ^2}{\langle \psi_0 |H|\psi_0 \rangle - \langle D_P |H|D_P\rangle} - - 3) Keep the most important :term:`perturbers` :math:`|D_P \rangle` - - :math:`\Rightarrow` they enter in the :term:`intern space` - - 4) Rediagonalize H within this new subset of determinants - - :math:`\Rightarrow` better :term:`selected wave function` - - 5) Iterate - -An important point here is that at a given iteration, the estimation of the perturbative coefficients of the :term:`perturbers` -depends on the quality of the :term:`selected wave function` . -As the iterations go on, the :term:`selected wave function` becomes closer -and closer to the :term:`target wave function`, and so the perturbative estimation of the :term:`perturbers` coefficients or energetic contribution becomes more and more precise. - - -CISD : At the first iteration, starting from the HF determinant : - 1) By applying H on the :term:`generators` (HF) one generates all singles and doubles - 2) For each :term:`perturbers` you estimate by perturbation its coefficient of energetic contribution. - - i) Here the :term:`selectors` is only the HF determinant. - - ii) If the :term:`Brillouin theorem` is respected, all the singles have zero coefficients since the :term:`selectors` here is only the HF determinant. - iii) The most important double excitations entered - iv) The :term:`energetic perturbative correction` is calculated - v) The :term:`estimated target energy` is just the sum of the HF energy and the :term:`energetic perturbative correction` - - 3) H is rediagonlaized in the new set of determinants : HF + the selected doubles - - :math:`\Rightarrow` better :term:`variational energy` and :term:`selected wave function` - - 4) The :term:`generators` subset does not change. - - - At the second iteration : - 1) By applying H on the :term:`generators` (still HF) one generates all singles and doubles - 2) For each :term:`perturbers` you estimate by perturbation its coefficient of energetic contribution. - - i) Here the :term:`selectors` is now HF + the previously selected doubles - - :math:`\Rightarrow` the :term:`perturbers` now interact with all the previously selected doubles - :math:`\Rightarrow` better estimation of the coefficients of the :term:`perturbers` - :math:`\Rightarrow` the singles have non zero coefficients - - ii) The most important :term:`perturbers` enter in the :term:`intern space` - - iv) The :term:`energetic perturbative correction` is re estimated - - v) The :term:`estimated target energy` is now the sum of the variational energy of the :term:`selected wave function` and the :term:`energetic perturbative correction` - - :math:`\Rightarrow` better estimation of the :term:`target energy` - - Iterate untill you reached the desired :term:`stopping criterion` - diff --git a/doc/source/_static/.empty b/doc/source/_static/.empty deleted file mode 100644 index e69de29b..00000000 diff --git a/doc/source/code_doc_intro.rst b/doc/source/code_doc_intro.rst deleted file mode 100644 index ef113adc..00000000 --- a/doc/source/code_doc_intro.rst +++ /dev/null @@ -1,228 +0,0 @@ -============================= -The Documentation of the code -============================= - - - -The heart of the problem : how do we compute the perturbation ? -=============================================================== - -In this section we will present the basic ideas of how do we compute any kind of perturbative quantity. - -The main problem -^^^^^^^^^^^^^^^^ - -Consider a simple problem of perturbation theory in which you have a *general* multireference wave function :math:`| \psi \rangle` -(no trivial way to know the kind of relations between those determinants) : - -.. math:: - | \psi \rangle = \sum_{I=1,N_{det}} c_I | D_I \rangle - -and you would like to compute its second order :term:`perturbative energetic correction`, which we can write like this for the sake of simplicity: - -.. math:: - E_{PT2} = \sum_{P \, \rm{that} \, \rm{are} \, \rm{not} \, \rm{in} \, | \psi \rangle } \frac{\langle \psi | H | D_P \rangle^2}{\Delta E_P} - -and the :math:`\Delta E_P` will determine what kind of PT you use. Note that you must not double count a determinant :math:`| D_P \rangle` and that you must not count those which are in :math:`| \psi \rangle`. - -What you have to do is to apply the :math:`H` operator on this :math:`| \psi \rangle` that would generate a lot of determinants :math:`|D \rangle`, -and you must find a way to see if : - - #) the determinant :math:`|D \rangle` is in :math:`| \psi \rangle` - - #) the determinant :math:`|D \rangle` have already been counted - -How do we do in practice ? We apply :math:`H` succesively on each determinant of :math:`| \psi \rangle` and each :math:`H` application generates a lot of determinant :math:`|D \rangle`. For each determinants :math:`|D \rangle` we check with a very optimized subroutine if - - #) :math:`|D\rangle` was a single or a double excitation respect to all the determinant on which we previously applyed :math:`H` - - :math:`\Rightarrow` if it is the case then it have already been computed in the past and so we don't double count it. - - #) :math:`|D\rangle` is already in the rest of the :math:`| \psi \rangle` - - :math:`\Rightarrow` if it is the case you must not count it. - -This subroutine (:samp:`connected_to_ref` ) is called a **HUGE** number of times and so it have been optimized in a proper way. -Its basis is the :samp:`popcnt` hardware instruction that figures in the :samp:`SSE4.2` releases of processors. -It allows to know how many bites are set to one in an integer within a few cycles of CPU. -By manipulation of bits masks you can easily extract the excitation degree between two determinants. - -One interesting feature of this approach is that it is easily and efficiently parallelizable (which of cours have been done), -and you can easily reach an parallel efficiency of about :math:`95\%`. - - -The link between the perturbation and the selection -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -In the selected CI algorithm you have general :math:`| \psi \rangle` multi determinantal wave function and you want to make it better -by proposing some new candidates to enter in this wave function. -Those candidates must of course not be already in :math:`| \psi \rangle` and since their are selected thanks to their perturbative properties (on the energy or on the coefficient), their are generated through some application of the :math:`H` operator. So we see that we have exactly the same kind of feature than in the perturbation. - -How do we select the determinant in practice ? Exactly like we do the perturbation ! - -do G = 1, :term:`N_{Generators}` - - #) We apply :math:`H` on one :term:`generators` - - :math:`\Rightarrow` :math:`H|D_G \rangle = \sum_D \langle D | H |D_G \rangle |D \rangle` - - #) For each determinant :math:`|D \rangle` we check if it could have been generated from previous :term:`generators` :math:`| D_{G'} \rangle` - - :math:`\Rightarrow` If it is not the case we check if it belongs to :math:`| \psi \rangle` - - #) We compute its perturbative property - - #) If it is important we put it in a buffer of the potential candidates to the new set of :term:`internal determinants` - - #) go to 1 - -enddo - - -So once you have applyed :math:`H` on all the :term:`generators`, you sort all the buffer of the candidates by their importance, -and after you pick up the most important ones, which will enter in the wave function and be diagonalized. - - -Just to be more precise, what we drescribe here is the standard CIPSI algorithm (which :term:`target space` is always the FCI). In practice, if you replace the :math:`H` operator by the :term:`restricted H operator` defined by the :term:`target` space you have exactly what is emplemented. - -The typical feature of an iteration -=================================== - -An iteration of the selected CI program is always built in the same way. This can be resumed in the following simple tasks. - -Iteration : - - #) :term:`restricted H operator` applyed on the :term:`generators` - - :math:`\Rightarrow` :term:`perturbativ action` (*e.g* Selection of some :term:`perturbers`, calculation of the :math:`E_{PT2}^m`, etc ...) - - #) Some update induced by the :term:`perturbative action` (*e.g* diagonalization of the new :math:`H` matrix, etc ...) - #) Check the :term:`stopping criterion` - #) Update the :term:`generators` subset - #) Save restart data if needed - #) Iterate - -To go into details we list the various available options for each task. - -The :samp:`restricted_H_apply` like subroutines -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - Here we enter into details on the part of the subroutines that is responsible for the :term:`restricted H operator` part of the tasks. - -The general ideas -^^^^^^^^^^^^^^^^^ - - This subroutine takes in input a determinant (in term of an integer key) and some bits masks - that are used to restrict the excitations (see the :term:`excitations bits masks` and :term:`excitations restrictions`). - It generates the singles and doubles excitations from the input determinant and these :term:`excitations bits masks`. - This subroutine will be applyed on the :term:`generators` determinants to generate the :term:`perturbers`. - - This subroutine in itself does not exist, it is just a skeleton that generates all possible singles and doubles. - As seen in the previsous section, once you apply :math:`H` on a given determinant, you will use the generated determinants - to do a certain number of things that deal with in general a perturbative quantity, this is the :term:`perturbative action`. - - A way to resume what is done in the subroutine and to make a mental representation can be explained like this : - - -.. code-block:: fortran - - subroutine restricted_H_apply(key_in) - - do i = 1, available_holes(1) - do j = 1, available_holes(2) - do k = 1, available_particles(1) - do l = 1, available_particles(2) - ! you generate some excitations on key_in that will generate some key_out - call excitation(i,j,k,l,key_in,key_out) - ! you exploit key_out to do some perturbative work - call perturbative_action(key_out) - enddo - enddo - enddo - enddo - - end - - -So we see that here once we have made an excitation on :samp:`key_in` that generates :samp:`key_out`, -we can do some work related to the :term:`perturbative action` on this :samp:`key_out`. - -In this simple representation of the subroutine, there are some :samp:`available_holes` and :samp:`available_particle`. -This is due to the :term:`excitation restrictions` that are implicitly defined by the :term:`target space`, -and to the :term:`restricted orbitals` that are defined by the user. -In practice those :term:`excitation restrictions` are just the excitations that are going to be allowed to a given :term:`generator determinant`. -We do this by using some :term:`excitations bits masks`. -The :term:`excitation restrictions` and the :term:`restricted orbitals` are built thanks to the use of :term:`excitations bits masks`. - -Available :term:`excitation restrictions` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The :term:`excitation restrictions` prohibits some kind of excitations because it is in the definition -of the :term:`target space` to avoid a certain class of excitation. -For instance, in the :term:`CAS+DDCI` method, you will apply all the single and double excitations on the top of the :term:`CAS wave function`. -After those :term:`excitation restrictions` defined by the :term:`target space`, there can be some kind of excitations that the user wishes to avoid. -For instance, within a :term:`CISD` or a :term:`CAS+DDCI` you can wish that all the excitations of the core electrons can be neglected, -or that there are some virtuals that are not relevant for a certain kind of correlation effects. - -This restrictions are done in the program by defining some classes of orbitals that depend both on the method you would like to use, -and by the specific restrictions you would like to do on the top of that. So we see that there are classes of orbitals that depend on the method, -and other classes that can be defined for any class of method. - -This classes are the the :term:`frozen occupied orbitals` and the :term:`deleted virtual orbitals` . - -Available :term:`perturbative action` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -From what we saw previously, when an excitation is performed on a given :term:`generator`, -depending on the method defined by the user, different actions can be performed at that point of the calculation. - -Nevertheless, all this actions here deal with the perturbation, that is why we called this step the :term:`perturbative action`. - -The :term:`perturbative action` is very flexible. It consists in doing (or not) a certain kind of things. - -When a given determinant :samp:`key_out` is generated, you can : - - #) check if this determinants have to be taken into account (see :samp:`connected_to_ref` and :samp:`is_in_ref`) - #) compute its :term:`perturbative energetic contribution` and its :term:`perturbative coefficient` (see :term:`perturbation theory`) - #) use those perturbative quantities to do something that deals with it (see :term:`perturbative possibility` ) - -In principle, for each of those actions one would put a :samp:`if` statement and decline all the possible actions to do. -However, because there can exist a *lot* of possible action and because this loop is really intern, putting a lot of :samp:`if` statement -is not a good idea and will slow the code. - -To avoid that we generate with a python script all possible subroutines corresponding to some actions, and the program will use the one -that will be defined by the method desired by the user. In this way there is no unnecessary tests in the intern loop, it done in the input. - -The :term:`perturbative possibility` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Once you have compute the :term:`perturbative energetic contribution` and the :term:`perturbative coefficient` of a given :term:`perturber`, -you must use those quantities. Here is listed what is available : - - #) accumulate it :term:`perturbative energetic contribution` to compute the :term:`Energetic perturbative correction` - #) accumulate it :term:`perturbative coefficient` to compute the :term:`first order perturbative norm` - #) put or not the :samp:`key_out` determinant in a buffer to select some new :term:`intenal determinants` see :term:`selection` - #) update the arrays of the :term:`correlation energy by holes and particles` (see :term:`CISD+SC2`) - #) dress all the diagonal matrix elements of the :term:`internal determiants` (see :term:`Dressed MRCI`) - - - - -Connected to ref / is in ref -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - This subroutine takes in input a determinant (in term of an integer key), an array of determinants :samp:`keys` (containing :samp:`N_det` determinants) - and an integer :samp:`i_past` which is smaller or equal to :samp:`N_det`. - - It checks if the input determinant is connected by the :math:`H` matrix to all the determinants in :samp:`keys` that are before :samp:`i_past`. - It also check if the input determinant is in the whole list of determinants :samp:`keys`. - - In output you have an integer :samp:`c_ref` that have the following values : - - #) 0 : the input determinant is not in :samp:`keys` and is not connected to any determinant - in :samp:`keys` that is before :samp:`i_past`. - - #) +m : the input determinant is connected by the :math:`H` matrix to the *m* th determinant :samp:`keys`. - - #) -m : the input determinant is already in :samp:`keys` and it is the *m* th determinant in :samp:`keys` - - diff --git a/doc/source/conf.py b/doc/source/conf.py deleted file mode 100644 index e461323a..00000000 --- a/doc/source/conf.py +++ /dev/null @@ -1,285 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Selected CI documentation build configuration file, created by -# sphinx-quickstart on Mon Feb 10 15:53:11 2014. -# -# This file is execfile()d with the current directory set to its containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys, os - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.insert(0, os.path.abspath('.')) - -# -- General configuration ----------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.todo', 'sphinx.ext.mathjax', 'sphinx.ext.viewcode'] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'Selected CI' -copyright = u'2014, Giner Emmanuel , Scemama Anthony' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '1.0' -# The full version, including alpha/beta/rc tags. -release = version+'.1' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = [] - -# The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - - -# -- Options for HTML output --------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'default' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = 'SelectedCIdoc' - - -# -- Options for LaTeX output -------------------------------------------------- - -latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -#'papersize': 'letterpaper', - -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', - -# Additional stuff for the LaTeX preamble. -#'preamble': '', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). -latex_documents = [ - ('index', 'SelectedCI.tex', u'Selected CI Documentation', - u'Giner Emmanuel ', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output -------------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ('index', 'selectedci', u'Selected CI Documentation', - [u'Giner Emmanuel '], 1) -] - -# If true, show URL addresses after external links. -#man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------------ - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ('index', 'SelectedCI', u'Selected CI Documentation', - u'Giner Emmanuel ', 'SelectedCI', 'One line description of project.', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' - - -# -- Options for Epub output --------------------------------------------------- - -# Bibliographic Dublin Core info. -epub_title = u'Selected CI' -epub_author = u'Giner Emmanuel ' -epub_publisher = u'Giner Emmanuel ' -epub_copyright = u'2014, Giner Emmanuel ' - -# The language of the text. It defaults to the language option -# or en if the language is not set. -#epub_language = '' - -# The scheme of the identifier. Typical schemes are ISBN or URL. -#epub_scheme = '' - -# The unique identifier of the text. This can be a ISBN number -# or the project homepage. -#epub_identifier = '' - -# A unique identification for the text. -#epub_uid = '' - -# A tuple containing the cover image and cover page html template filenames. -#epub_cover = () - -# HTML files that should be inserted before the pages created by sphinx. -# The format is a list of tuples containing the path and title. -#epub_pre_files = [] - -# HTML files shat should be inserted after the pages created by sphinx. -# The format is a list of tuples containing the path and title. -#epub_post_files = [] - -# A list of files that should not be packed into the epub file. -#epub_exclude_files = [] - -# The depth of the table of contents in toc.ncx. -#epub_tocdepth = 3 - -# Allow duplicate toc entries. -#epub_tocdup = True diff --git a/doc/source/index.rst b/doc/source/index.rst deleted file mode 100644 index 6e1ace01..00000000 --- a/doc/source/index.rst +++ /dev/null @@ -1,25 +0,0 @@ -.. Selected CI documentation master file, created by - sphinx-quickstart on Mon Feb 10 15:53:11 2014. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Welcome to Selected CI's documentation! -======================================= - -Contents: - -.. toctree:: - :maxdepth: 1 - - install - Intro - code_doc_intro - wavefunction - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` - diff --git a/doc/source/install.rst b/doc/source/install.rst deleted file mode 100644 index 44b86b8a..00000000 --- a/doc/source/install.rst +++ /dev/null @@ -1,40 +0,0 @@ -============ -Installation -============ - -Requirements ------------- - -* `GNU make `_ -* `The Intel Fortran Compiler with MKL `_ -* `IRPF90 `_ -* `EZFIO `_ - -Optional Requirements ---------------------- - -* `Sphinx `_ is used to build the documentation - -Setup ------ - -#) Run the :file:`setup_environment.sh` script. This will create the :file:`sci.rc` file - that contains all the environment variables :: - - $ ./setup_environment.sh - -#) Source this file into your shell :: - - $ source sci.rc - -#) Go into the :file:`src` directory and create the :file:`Makefile.config` file using the - :file:`Makefile.config.example` file as a template - -#) Build the program :: - - $ make - -#) Build the documentation :: - - $ make doc - diff --git a/doc/source/wavefunction.rst b/doc/source/wavefunction.rst deleted file mode 100644 index a3215e6d..00000000 --- a/doc/source/wavefunction.rst +++ /dev/null @@ -1,169 +0,0 @@ -===================================== -Selection, perturbation ... keywords -===================================== - -.. |CISD| replace:: :abbr:`CISD (Configuration Interaction with Single and Double excitations)` -.. |HF| replace:: :abbr:`HF (Hartree Fock)` -.. |CAS-CI| replace:: :abbr:`CAS-CI (Complete Active Space Configuration Interaction)` -.. |DDCI| replace:: :abbr:`DDCI (Difference Dedicated Configuration Interaction)` - -.. glossary:: - :sorted: - - Energetic perturbative correction - Corresponds to the correction to the energy at the second order of a given perturbtation theory - to a given state m. - By convention it noted :math:`E_{PT2}^m` - - Variational energy - Corresponds to the variational energy of the :term:`selected wave function` for a given state . - By convention it noted :math:`E_{Var}^m` for the mth eigenvector. - - .. math:: - E_{Var}^m = \langle \psi_m |H|\psi_m \rangle - - Estimated target energy - Corresponds to the estimation of the target energy for a given :term:`selected wave function` and a given state. - By convention it noted :math:`E_{Target}^m`. - Its mathematical expression is : - - .. math:: - E_{Target}^m = E_{Var}^m + E_{PT2}^m - - Selected wave function - Corresponds to the wave function that have been previously selected for a given state m at a current iteration. - This wave function is defined by the set of the :term:`internal determinants` and by their coefficients - on the state m. - By convention it is noted :math:`|\psi_m\rangle` - - .. math:: - | \psi_m \rangle = \sum_{I=1,N_{selected}} c_I^m | D_I \rangle - - - - - EN EG - Stands for Eipstein Nesbet with EigenValues zeroth order energy perturbation theory. - It is a state specific 2nd order perturbation theory. Here m is the index of the eigenstate. - The :math:`H_0` of this PT is defined as the diagonal part of the Hamiltonian such as - the :math:`E_m` is equal to the average value of the Hamiltonian on the :term:`selected wave function` - and the :math:`E_P` is equal to the average value of the Hamiltonian on the :term:`perturbers` - - This perturbation have bad formal properties but some nice numerical features of convergence. - - - From the definition, one get the first order coefficient and its related second order energetic contribution of a a perturber : - - .. math:: - c_{D_P}^m= \sum_{S=1,N_{\rm selectors}} \frac{c_S^m \langle D_S|H|D_P\rangle}{ \langle \psi_m |H|\psi_m \rangle - \langle D_P|H| D_P \rangle } \\ - e_{D_P}^m= \frac{(\sum_{S=1,N_{\rm selectors}} c_S^m \langle D_S|H|D_P\rangle)^2}{\langle \psi_m |H|\psi_m \rangle - \langle D_P|H| D_P \rangle } - - - Stopping criterion - Condition decided by the user to stop the calculation. - This criterion might be on the :term:`Energetic perturbative correction`, on the number of :term:`internal determinants` N_selected_max - or on the stability of the :term:`estimated target energy` - The user can also send a Ctrl+C to stop the calculation, and it will kill itself properly, saving the datas that need to be saved. - - - Target wave function - Wave function of the :term:`target space` - - - - Target space - Target of the CI calculation. Defining a method (CISD, CAS-CI and so on) is equivalent to define the :term:`target space`. - - The target space defines the rules to define the :term:`Generators` , - the rules of the :term:`excitation restrictions`, - and the perturbation theory to be used. - - There are two type of methods/:term:`target space` proposed in the code : - - #) the CAS-CI type methods where you do not restrict any kind of excitation degree within a given list of orbitals. - #) the singles and doubles excitations on the top of a given reference wave function (:term:`CISD`, :term:`CISD+SC2`, :term:`CAS+SD`, :term:`CAS+DDCI`, :term:`CAS+MRPT2`) - - Their is a great difference between those two types of method in the way it is implemented. - - In the CAS-CI method, when you have chosen an :term:`active space` (so a list of orbitals and electrons to make a FCI within this active space), - all the :term:`Internal determinants` that have been selected and that form the :term:`selected wave function` - can potentially be part of the :term:`generators`, by mean that the :term:`restricted H operator` - could be potentially applyed on all the :term:`internal determinants` to generate some other :term:`perturbers`. - - In the singles and doubles excitation on the top of a given reference wave function, the subset of :term:`generators` - and so the rules to recognize them, is fixed at the begining of the method. Those :term:`generators` are precisely - all the determinants forming the :term:`reference wave function`. - - - There are the different :term:`target space` that are available : - - #) :term:`CISD` - #) :term:`CISD+SC2` - #) :term:`CASCI` - #) :term:`CASCI+S` - #) :term:`CASCI+SD` - #) :term:`CASCI+DDCI` - #) :term:`CASCI+DDCI+(2h-2p)PT2` - #) :term:`CAS-CI+MRPT2` - - - Target energy - Energy of the target space. - - H operator - Hamiltonian operator defined in terms of creation and anihilation operators in the spin orbital space. - - Excitation restrictions - Restriction in the :term:`H operator` that the user imposes to define the target sapce. - For example : - - 1) If one freeze some core orbitals or delete some virtuals, it is an :term:`excitation restrictions` - 2) If one prohibits the pure inactive double excitations in a CAS+SD one get a DDCI - 3) any kind of restriction in the full application of the :term:`H operator` - - - Restricted H operator - :term:`H operator` taking into account the :term:`Excitation restrictions` - - - CISD+SC2 - Method developped by JP. Malrieu that can be seen as a cheap approximation of the CCSD. - It makes a CISD size consistant and separable for closed shell systems. - It is based on a CISD calculation - where the diagonal part of the H matrix is dressed by the repeatable correlation energy previsously obtained. - So it is a CISD dressed by the disconnected triples and quadruples. - - Generators - Set of generator determinants. - By convention a generator is written as :math:`|D_G\rangle` . - A generator determinant is a determinant on which - the :term:`restricted H operator` is being applied for the selection and/or the perturbation. - - Internal determinants - Selected determinants in terms of integers keys. - By convention an Internal determinant is written as :math:`|D_I\rangle` . - By convention, the :term:`Generators` are at the begining of the array. - - Intern space - Set of all the :term:`internal determinants`. - - Perturbers - Determinants within the :term:`target space` but taht are not already included in the :term:`intern space`. - They are created from the :term:`Generators` that belongs :term:`Intern space` for a given :term:`selected wave function`. - By convention a perturber is written as :math:`|D_P\rangle`. - - Selectors - Determinants that are used to compute the perturbative properties of the :term:`perturbers`. - By convention a selector is written as :math:`|D_S\rangle` . - The selectors are a subset of determinant of the total wave function (that is the :term:`Internal determinants`). - This subset contains at least the :term:`Generators` determinants. - The perturbative properties (energy, coefficient or else) of the :term:`perturbers` are calculated on all the :term:`selectors` :math:`|D_S\rangle` - - .. math:: - - c_{D_S}= \sum_{S=1,N_{\rm selectors}} \frac{c_S\langle D_S|H|D_P\rangle}{\Delta E_{P,S}} \\ - e_{D_S}= \frac{(\sum_{S=1,N_{\rm selectors}} c_S \langle D_S|H|D_P\rangle) ^2}{\Delta E_{P,S}} - - - - diff --git a/docs/source/_static/links.rst b/docs/source/_static/links.rst index 976c7950..f1a3a27d 100644 --- a/docs/source/_static/links.rst +++ b/docs/source/_static/links.rst @@ -68,6 +68,9 @@ .. |QMC| replace:: :abbr:`QMC (Quantum Monte Carlo)` .. |rst| replace:: :abbr:`RST (ReStructured Text)` .. |SCF| replace:: :abbr:`SCF (Self Consistent Field)` +.. |RSH| replace:: :abbr:`RSH (Range-Separated-Hybrids)` +.. |KS-DFT| replace:: :abbr:`KS-DFT (Kohn-Sham Density Functional Theory)` +.. |sCI| replace:: :abbr:`sCI (Selected-CI)` .. |CASSCF| replace:: |CAS| - |SCF| .. |FCIQMC| replace:: |FCI| - |QMC| diff --git a/docs/source/intro/intro.rst b/docs/source/intro/intro.rst index 38e99917..45b2db2e 100644 --- a/docs/source/intro/intro.rst +++ b/docs/source/intro/intro.rst @@ -12,13 +12,15 @@ What it is ========== The |qp| is an open-source programming environment for quantum chemistry, -especially for `wave function methods `_. -The main goal is the development of selected configuration interaction (sCI) -methods and multi-reference perturbation theory (MR-PT) in the -determinant-driven paradigm. The determinant-driven framework allows the -programmer to include any arbitrary set of determinants in the variational -space, and thus gives a complete freedom in the methodological development. All -the programs are developed with the `IRPF90`_ code generator, which simplifies +especially for `wave function theory `_ (WFT). +The main goal is the development of selected configuration interaction |sCI| +methods and multi-reference perturbation theory |MRPT| in the +determinant-driven paradigm. It also contains the very basics of Kohn-Sham `density functional theory `_ |KS-DFT| and `range-separated hybrids `_ |RSH|. + +Regarding the The determinant-driven framework allows the programmer to include any arbitrary set of +determinants in the variational space, and thus gives a complete freedom in the methodological +development. The basics of RSH together with the WFT framework also allow a simple coupling between DFT and WFT calculations (see the plugins of ``_) +All the programs are developed with the `IRPF90`_ code generator, which simplifies the collaborative development, and the development of new features. diff --git a/docs/source/modules/ao_one_e_integrals.rst b/docs/source/modules/ao_one_e_integrals.rst index 3f158a26..aa7635a1 100644 --- a/docs/source/modules/ao_one_e_integrals.rst +++ b/docs/source/modules/ao_one_e_integrals.rst @@ -10,6 +10,13 @@ AO_one_e_integrals All the one-electron integrals in the |AO| basis are here. +The most important providers for usual quantum-chemistry calculation are: + +# `ao_kinetic_integral` which are the kinetic operator integrals on the |AO| basis (see :file:`kin_ao_ints.irp.f`) +# `ao_nucl_elec_integral` which are the nuclear-elctron operator integrals on the |AO| basis (see :file:`pot_ao_ints.irp.f`) +# `ao_mono_elec_integral` which are the the h_core operator integrals on the |AO| basis (see :file:`ao_mono_ints.irp.f`) + +Note that you can find other interesting integrals related to the position operator in :file:`spread_dipole_ao.irp.f`. @@ -889,7 +896,7 @@ Subroutines / functions File: :file:`spread_dipole_ao.irp.f` - + Computes the following integral : int [-infty ; +infty] of [(x-A_center)^(power_A) * (x-B_center)^power_B * exp(-alpha(x-A_center)^2) * exp(-beta(x-B_center)^2) * x ] needed for the dipole and those things diff --git a/docs/source/modules/aux_quantities.rst b/docs/source/modules/aux_quantities.rst index 4eded7d9..4e6fde73 100644 --- a/docs/source/modules/aux_quantities.rst +++ b/docs/source/modules/aux_quantities.rst @@ -4,13 +4,20 @@ .. default-role:: option -============ -Data energy and density -============ +============== +aux_quantities +============== This module contains some global variables (such as densities and energies) which are stored in the EZFIO folder in a different place than determinants. This is used in practice to store density matrices which can be obtained from any methods, as long as they are stored in the same MO basis which is used for the calculations. In |RS-DFT| calculations, this can be done to perform damping on the density in order to speed up convergence. +The main providers of that module are: + +# `data_one_body_alpha_dm_mo` and `data_one_body_beta_dm_mo` which are the one-body alpha and beta densities which are necessary read from the EZFIO folder. + + +Thanks to these providers you can use any density matrix that does not necessary corresponds to that of the current wave function. + EZFIO parameters diff --git a/docs/source/modules/becke_numerical_grid.rst b/docs/source/modules/becke_numerical_grid.rst index 8b0ef81f..c1c102a7 100644 --- a/docs/source/modules/becke_numerical_grid.rst +++ b/docs/source/modules/becke_numerical_grid.rst @@ -5,13 +5,20 @@ .. default-role:: option ==================== -Becke Numerical Grid +becke_numerical_grid ==================== This module contains all quantities needed to build the Becke's grid used in general for DFT integration. Note that it can be used for whatever integration in R^3 as long as the functions to be integrated are mostly concentrated near the atomic regions. This grid is built as the reunion of a spherical grid around each atom. Each spherical grid contains a certain number of radial and angular points. +The main providers of that module are: + +# :option:`becke_numerical_grid n_points_integration_angular` which is the number of angular integration points. WARNING: it obeys to specific rules so it cannot be any integer number. Some of the possible values are [ 50 | 74 | 266 | 590 | 1202 | 2030 | 5810 ] for instance. See :file:`angular.f` for more details. +# :option:`becke_numerical_grid n_points_radial_grid` which is the number of radial angular points. This can be any strictly positive integer. Nevertheless, a minimum of 50 is in general necessary. +# `final_grid_points` which are the (x,y,z) coordinates of the grid points. +# `final_weight_at_r_vector` which are the weights at each grid point + For a simple example of how to use the grid, see :file:`example.irp.f`. The spherical integration uses Lebedev-Laikov grids, which was used from the code distributed through CCL (http://www.ccl.net/). @@ -132,44 +139,25 @@ Providers .. code:: text double precision, allocatable :: final_grid_points (3,n_points_final_grid) - double precision, allocatable :: final_weight_functions_at_final_grid_points (n_points_final_grid) + double precision, allocatable :: final_weight_at_r_vector (n_points_final_grid) integer, allocatable :: index_final_points (3,n_points_final_grid) integer, allocatable :: index_final_points_reverse (n_points_integration_angular,n_points_radial_grid,nucl_num) File: :file:`grid_becke_vector.irp.f` final_grid_points(1:3,j) = (/ x, y, z /) of the jth grid point - final_weight_functions_at_final_grid_points(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions + final_weight_at_r_vector(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions index_final_points(1:3,i) = gives the angular, radial and atomic indices associated to the ith grid point index_final_points_reverse(i,j,k) = index of the grid point having i as angular, j as radial and l as atomic indices -.. c:var:: final_weight_functions_at_final_grid_points +.. c:var:: final_weight_at_r .. code:: text - double precision, allocatable :: final_grid_points (3,n_points_final_grid) - double precision, allocatable :: final_weight_functions_at_final_grid_points (n_points_final_grid) - integer, allocatable :: index_final_points (3,n_points_final_grid) - integer, allocatable :: index_final_points_reverse (n_points_integration_angular,n_points_radial_grid,nucl_num) - - File: :file:`grid_becke_vector.irp.f` - - final_grid_points(1:3,j) = (/ x, y, z /) of the jth grid point - final_weight_functions_at_final_grid_points(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions - index_final_points(1:3,i) = gives the angular, radial and atomic indices associated to the ith grid point - index_final_points_reverse(i,j,k) = index of the grid point having i as angular, j as radial and l as atomic indices - - - - -.. c:var:: final_weight_functions_at_grid_points - - .. code:: text - - double precision, allocatable :: final_weight_functions_at_grid_points (n_points_integration_angular,n_points_radial_grid,nucl_num) + double precision, allocatable :: final_weight_at_r (n_points_integration_angular,n_points_radial_grid,nucl_num) File: :file:`grid_becke.irp.f` @@ -178,6 +166,25 @@ Providers +.. c:var:: final_weight_at_r_vector + + .. code:: text + + double precision, allocatable :: final_grid_points (3,n_points_final_grid) + double precision, allocatable :: final_weight_at_r_vector (n_points_final_grid) + integer, allocatable :: index_final_points (3,n_points_final_grid) + integer, allocatable :: index_final_points_reverse (n_points_integration_angular,n_points_radial_grid,nucl_num) + + File: :file:`grid_becke_vector.irp.f` + + final_grid_points(1:3,j) = (/ x, y, z /) of the jth grid point + final_weight_at_r_vector(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions + index_final_points(1:3,i) = gives the angular, radial and atomic indices associated to the ith grid point + index_final_points_reverse(i,j,k) = index of the grid point having i as angular, j as radial and l as atomic indices + + + + .. c:var:: grid_points_per_atom .. code:: text @@ -210,14 +217,14 @@ Providers .. code:: text double precision, allocatable :: final_grid_points (3,n_points_final_grid) - double precision, allocatable :: final_weight_functions_at_final_grid_points (n_points_final_grid) + double precision, allocatable :: final_weight_at_r_vector (n_points_final_grid) integer, allocatable :: index_final_points (3,n_points_final_grid) integer, allocatable :: index_final_points_reverse (n_points_integration_angular,n_points_radial_grid,nucl_num) File: :file:`grid_becke_vector.irp.f` final_grid_points(1:3,j) = (/ x, y, z /) of the jth grid point - final_weight_functions_at_final_grid_points(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions + final_weight_at_r_vector(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions index_final_points(1:3,i) = gives the angular, radial and atomic indices associated to the ith grid point index_final_points_reverse(i,j,k) = index of the grid point having i as angular, j as radial and l as atomic indices @@ -229,14 +236,14 @@ Providers .. code:: text double precision, allocatable :: final_grid_points (3,n_points_final_grid) - double precision, allocatable :: final_weight_functions_at_final_grid_points (n_points_final_grid) + double precision, allocatable :: final_weight_at_r_vector (n_points_final_grid) integer, allocatable :: index_final_points (3,n_points_final_grid) integer, allocatable :: index_final_points_reverse (n_points_integration_angular,n_points_radial_grid,nucl_num) File: :file:`grid_becke_vector.irp.f` final_grid_points(1:3,j) = (/ x, y, z /) of the jth grid point - final_weight_functions_at_final_grid_points(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions + final_weight_at_r_vector(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions index_final_points(1:3,i) = gives the angular, radial and atomic indices associated to the ith grid point index_final_points_reverse(i,j,k) = index of the grid point having i as angular, j as radial and l as atomic indices @@ -282,11 +289,11 @@ Providers -.. c:var:: weight_functions_at_grid_points +.. c:var:: weight_at_r .. code:: text - double precision, allocatable :: weight_functions_at_grid_points (n_points_integration_angular,n_points_radial_grid,nucl_num) + double precision, allocatable :: weight_at_r (n_points_integration_angular,n_points_radial_grid,nucl_num) File: :file:`grid_becke.irp.f` diff --git a/docs/source/modules/davidson.rst b/docs/source/modules/davidson.rst index c7380356..85a9a5c9 100644 --- a/docs/source/modules/davidson.rst +++ b/docs/source/modules/davidson.rst @@ -14,7 +14,10 @@ a dressing is used, the dressing column should be defined and the :ref:`davidsondressed` module should be used. If no dressing is required, the :ref:`davidson` module should be used, and it has a default zero dressing vector. +The important providers for that module are: +# `psi_energy` which is the expectation value over the wave function (`psi_det`, `psi_coef`) of the Hamiltonian, dressed or not. It uses the general subroutine `u_0_H_u_0`. +# `psi_energy_bielec` which is the expectation value over the wave function (`psi_det`, `psi_coef`) of the standard two-electrons coulomb operator. It uses the general routine `u_0_H_u_0_bielec`. @@ -186,7 +189,7 @@ Providers File: :file:`u0_h_u0.irp.f` - Energy of the current wave function + Electronic energy of the current wave function diff --git a/docs/source/modules/determinants.rst b/docs/source/modules/determinants.rst index c23e267b..74d608e4 100644 --- a/docs/source/modules/determinants.rst +++ b/docs/source/modules/determinants.rst @@ -10,6 +10,22 @@ Determinants Contains everything for the computation of the Hamiltonian matrix elements in the basis of orthogonal Slater determinants built on a restricted spin-orbitals basis. +The main providers for this module are: + +# :option:`determinants n_states`: number of states to be computed +# `psi_det`: list of determinants in the wave function used in many routines/providers of the |QP|. +# `psi_coef`: list of coefficients, for all :option:`determinants n_states` states, and all determinants. + +The main routines for this module are: + +# `i_H_j`: computes the Hamiltonian matrix element between two arbitrary Slater determinants. +# `i_H_j_s2`: computes the Hamiltonian and (:math:`S^2`) matrix element between two arbitrary Slater determinants. +# `i_H_j_verbose`: returns the decomposition in terms of one- and two-body components of the Hamiltonian matrix elements between two arbitrary Slater determinants. Also return the fermionic phase factor. +# `i_H_psi`: computes the Hamiltonian matrix element between an arbitrary Slater determinant and a wave function composed of a sum of arbitrary Slater determinants. + + +For an example of how to use these routines and providers, take a look at :file:`example.irp.f`. + EZFIO parameters @@ -3133,6 +3149,20 @@ Subroutines / functions +.. c:function:: pouet + + .. code:: text + + subroutine pouet + + File: :file:`test.irp.f` + + + + + + + .. c:function:: pull_pt2 .. code:: text diff --git a/docs/source/modules/dft_keywords.rst b/docs/source/modules/dft_keywords.rst index 301c983e..ed7f87d2 100644 --- a/docs/source/modules/dft_keywords.rst +++ b/docs/source/modules/dft_keywords.rst @@ -5,18 +5,19 @@ .. default-role:: option ============ -DFT Keywords +dft_keywords ============ This module contains the main keywords related to a DFT calculation or RS-DFT calculation, such as: -# :option:exchange_functional -# :option:correlation_functional -# :option:HF_exchange : only relevent for the :ref:`ks_scf` program -# :option:density_for_dft : mainly relevent for multi-determinant range separated DFT, see the plugins of eginer. +# :option:`dft_keywords exchange_functional` +# :option:`dft_keywords correlation_functional` +# :option:`dft_keywords HF_exchange` : only relevent for the :ref:`ks_scf` program The keyword for the range separation parameter :math:`\mu` is the :option:`ao_two_e_erf_integrals mu_erf` keyword. +The keyword for the type of density used in RS-DFT calculation with a multi-configurational wave function is the :option:`density_for_dft density_for_dft` keyword. + EZFIO parameters diff --git a/docs/source/modules/fci.rst b/docs/source/modules/fci.rst index b67661bd..61194f9b 100644 --- a/docs/source/modules/fci.rst +++ b/docs/source/modules/fci.rst @@ -754,6 +754,20 @@ Subroutines / functions +.. c:function:: run + + .. code:: text + + subroutine run + + File: :file:`pt2.irp.f` + + + + + + + .. c:function:: run_pt2_slave .. code:: text diff --git a/docs/source/modules/generators_cas.rst b/docs/source/modules/generators_cas.rst index 806f4430..9d1e75e0 100644 --- a/docs/source/modules/generators_cas.rst +++ b/docs/source/modules/generators_cas.rst @@ -13,7 +13,7 @@ The |MOs| belonging to the |CAS| are those which were set as active with the :ref:`qp_set_mo_class` command. This module is intended to be included in the :file:`NEED` file to define -generators on a |CAS|. +the generators as the |CAS| determinants, which can be useful to define post-CAS approaches (see cassd module for instance). diff --git a/docs/source/modules/hartree_fock.rst b/docs/source/modules/hartree_fock.rst index 08649720..9031fc75 100644 --- a/docs/source/modules/hartree_fock.rst +++ b/docs/source/modules/hartree_fock.rst @@ -61,6 +61,77 @@ Providers --------- +.. c:var:: ao_bi_elec_integral_alpha + + .. code:: text + + double precision, allocatable :: ao_bi_elec_integral_alpha (ao_num,ao_num) + double precision, allocatable :: ao_bi_elec_integral_beta (ao_num,ao_num) + + File: :file:`fock_matrix_hf.irp.f` + + Alpha Fock matrix in AO basis set + + + + +.. c:var:: ao_bi_elec_integral_beta + + .. code:: text + + double precision, allocatable :: ao_bi_elec_integral_alpha (ao_num,ao_num) + double precision, allocatable :: ao_bi_elec_integral_beta (ao_num,ao_num) + + File: :file:`fock_matrix_hf.irp.f` + + Alpha Fock matrix in AO basis set + + + + +.. c:var:: extra_e_contrib_density + + .. code:: text + + double precision :: extra_e_contrib_density + + File: :file:`hf_energy.irp.f` + + Extra contribution to the SCF energy coming from the density. + For a Hartree-Fock calculation: extra_e_contrib_density = 0 + For a Kohn-Sham or Range-separated Kohn-Sham: the exchange/correlation - trace of the V_xc potential + + + + +.. c:var:: fock_matrix_ao_alpha + + .. code:: text + + double precision, allocatable :: fock_matrix_ao_alpha (ao_num,ao_num) + double precision, allocatable :: fock_matrix_ao_beta (ao_num,ao_num) + + File: :file:`fock_matrix_hf.irp.f` + + Alpha Fock matrix in AO basis set + + + + +.. c:var:: fock_matrix_ao_beta + + .. code:: text + + double precision, allocatable :: fock_matrix_ao_alpha (ao_num,ao_num) + double precision, allocatable :: fock_matrix_ao_beta (ao_num,ao_num) + + File: :file:`fock_matrix_hf.irp.f` + + Alpha Fock matrix in AO basis set + + + + .. c:var:: hf_energy .. code:: text @@ -111,6 +182,20 @@ Subroutines / functions +.. c:function:: create_guess + + .. code:: text + + subroutine create_guess + + File: :file:`scf_old.irp.f` + + Create a MO guess if no MOs are present in the EZFIO directory + + + + + .. c:function:: scf .. code:: text diff --git a/docs/source/modules/kohn_sham.rst b/docs/source/modules/kohn_sham.rst index 003715ff..781c0e60 100644 --- a/docs/source/modules/kohn_sham.rst +++ b/docs/source/modules/kohn_sham.rst @@ -51,176 +51,6 @@ Providers --------- -.. c:var:: ao_bi_elec_integral_alpha - - .. code:: text - - double precision, allocatable :: ao_bi_elec_integral_alpha (ao_num,ao_num) - double precision, allocatable :: ao_bi_elec_integral_beta (ao_num,ao_num) - - File: :file:`fock_matrix_ks.irp.f` - - Alpha Fock matrix in ao basis set - - - - -.. c:var:: ao_bi_elec_integral_beta - - .. code:: text - - double precision, allocatable :: ao_bi_elec_integral_alpha (ao_num,ao_num) - double precision, allocatable :: ao_bi_elec_integral_beta (ao_num,ao_num) - - File: :file:`fock_matrix_ks.irp.f` - - Alpha Fock matrix in ao basis set - - - - -.. c:var:: ao_potential_alpha_xc - - .. code:: text - - double precision, allocatable :: ao_potential_alpha_xc (ao_num,ao_num) - double precision, allocatable :: ao_potential_beta_xc (ao_num,ao_num) - - File: :file:`pot_functionals.irp.f` - - - - - - -.. c:var:: ao_potential_beta_xc - - .. code:: text - - double precision, allocatable :: ao_potential_alpha_xc (ao_num,ao_num) - double precision, allocatable :: ao_potential_beta_xc (ao_num,ao_num) - - File: :file:`pot_functionals.irp.f` - - - - - - -.. c:var:: e_correlation_dft - - .. code:: text - - double precision :: e_correlation_dft - - File: :file:`pot_functionals.irp.f` - - - - - - -.. c:var:: e_exchange_dft - - .. code:: text - - double precision :: e_exchange_dft - - File: :file:`pot_functionals.irp.f` - - - - - - -.. c:var:: extra_e_contrib_density - - .. code:: text - - double precision :: extra_e_contrib_density - - File: :file:`ks_enery.irp.f` - - Extra contribution to the SCF energy coming from the density. - For a Hartree-Fock calculation: extra_e_contrib_density = 0 - For a Kohn-Sham or Range-separated Kohn-Sham: the exchange/correlation - 1/2 trace of the V_xc potential - - - - -.. c:var:: fock_matrix_alpha_no_xc_ao - - .. code:: text - - double precision, allocatable :: fock_matrix_alpha_no_xc_ao (ao_num,ao_num) - double precision, allocatable :: fock_matrix_beta_no_xc_ao (ao_num,ao_num) - - File: :file:`fock_matrix_ks.irp.f` - - Mono electronic an Coulomb matrix in ao basis set - - - - -.. c:var:: fock_matrix_ao_alpha - - .. code:: text - - double precision, allocatable :: fock_matrix_ao_alpha (ao_num,ao_num) - double precision, allocatable :: fock_matrix_ao_beta (ao_num,ao_num) - - File: :file:`fock_matrix_ks.irp.f` - - Alpha Fock matrix in ao basis set - - - - -.. c:var:: fock_matrix_ao_beta - - .. code:: text - - double precision, allocatable :: fock_matrix_ao_alpha (ao_num,ao_num) - double precision, allocatable :: fock_matrix_ao_beta (ao_num,ao_num) - - File: :file:`fock_matrix_ks.irp.f` - - Alpha Fock matrix in ao basis set - - - - -.. c:var:: fock_matrix_beta_no_xc_ao - - .. code:: text - - double precision, allocatable :: fock_matrix_alpha_no_xc_ao (ao_num,ao_num) - double precision, allocatable :: fock_matrix_beta_no_xc_ao (ao_num,ao_num) - - File: :file:`fock_matrix_ks.irp.f` - - Mono electronic an Coulomb matrix in ao basis set - - - - -.. c:var:: fock_matrix_energy - - .. code:: text - - double precision :: ks_energy - double precision :: two_electron_energy - double precision :: one_electron_energy - double precision :: fock_matrix_energy - double precision :: trace_potential_xc - - File: :file:`ks_enery.irp.f` - - Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity. - - - - .. c:var:: ks_energy .. code:: text @@ -236,114 +66,3 @@ Providers Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity. - - -.. c:var:: one_electron_energy - - .. code:: text - - double precision :: ks_energy - double precision :: two_electron_energy - double precision :: one_electron_energy - double precision :: fock_matrix_energy - double precision :: trace_potential_xc - - File: :file:`ks_enery.irp.f` - - Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity. - - - - -.. c:var:: trace_potential_xc - - .. code:: text - - double precision :: ks_energy - double precision :: two_electron_energy - double precision :: one_electron_energy - double precision :: fock_matrix_energy - double precision :: trace_potential_xc - - File: :file:`ks_enery.irp.f` - - Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity. - - - - -.. c:var:: two_electron_energy - - .. code:: text - - double precision :: ks_energy - double precision :: two_electron_energy - double precision :: one_electron_energy - double precision :: fock_matrix_energy - double precision :: trace_potential_xc - - File: :file:`ks_enery.irp.f` - - Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity. - - - - -Subroutines / functions ------------------------ - - - -.. c:function:: check_coherence_functional - - .. code:: text - - subroutine check_coherence_functional - - File: :file:`ks_scf.irp.f` - - - - - - - -.. c:function:: create_guess - - .. code:: text - - subroutine create_guess - - File: :file:`ks_scf.irp.f` - - Create a MO guess if no MOs are present in the EZFIO directory - - - - - -.. c:function:: run - - .. code:: text - - subroutine run - - File: :file:`ks_scf.irp.f` - - Run SCF calculation - - - - - -.. c:function:: srs_ks_cf - - .. code:: text - - subroutine srs_ks_cf - - File: :file:`ks_scf.irp.f` - - Produce `Kohn_Sham` MO orbital output: mo_basis.mo_tot_num mo_basis.mo_label mo_basis.ao_md5 mo_basis.mo_coef mo_basis.mo_occ output: kohn_sham.energy optional: mo_basis.mo_coef - - diff --git a/docs/source/modules/kohn_sham_rs.rst b/docs/source/modules/kohn_sham_rs.rst index 666755c8..17dd7fd7 100644 --- a/docs/source/modules/kohn_sham_rs.rst +++ b/docs/source/modules/kohn_sham_rs.rst @@ -51,6 +51,122 @@ Providers --------- +.. c:var:: ao_potential_alpha_xc + + .. code:: text + + double precision, allocatable :: ao_potential_alpha_xc (ao_num,ao_num) + double precision, allocatable :: ao_potential_beta_xc (ao_num,ao_num) + + File: :file:`pot_functionals.irp.f` + + + + + + +.. c:var:: ao_potential_beta_xc + + .. code:: text + + double precision, allocatable :: ao_potential_alpha_xc (ao_num,ao_num) + double precision, allocatable :: ao_potential_beta_xc (ao_num,ao_num) + + File: :file:`pot_functionals.irp.f` + + + + + + +.. c:var:: e_correlation_dft + + .. code:: text + + double precision :: e_correlation_dft + + File: :file:`pot_functionals.irp.f` + + + + + + +.. c:var:: e_exchange_dft + + .. code:: text + + double precision :: e_exchange_dft + + File: :file:`pot_functionals.irp.f` + + + + + + +.. c:var:: fock_matrix_alpha_no_xc_ao + + .. code:: text + + double precision, allocatable :: fock_matrix_alpha_no_xc_ao (ao_num,ao_num) + double precision, allocatable :: fock_matrix_beta_no_xc_ao (ao_num,ao_num) + + File: :file:`fock_matrix_rs_ks.irp.f` + + Mono electronic an Coulomb matrix in AO basis set + + + + +.. c:var:: fock_matrix_beta_no_xc_ao + + .. code:: text + + double precision, allocatable :: fock_matrix_alpha_no_xc_ao (ao_num,ao_num) + double precision, allocatable :: fock_matrix_beta_no_xc_ao (ao_num,ao_num) + + File: :file:`fock_matrix_rs_ks.irp.f` + + Mono electronic an Coulomb matrix in AO basis set + + + + +.. c:var:: fock_matrix_energy + + .. code:: text + + double precision :: rs_ks_energy + double precision :: two_electron_energy + double precision :: one_electron_energy + double precision :: fock_matrix_energy + double precision :: trace_potential_xc + + File: :file:`rs_ks_energy.irp.f` + + Range-separated Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity. + + + + +.. c:var:: one_electron_energy + + .. code:: text + + double precision :: rs_ks_energy + double precision :: two_electron_energy + double precision :: one_electron_energy + double precision :: fock_matrix_energy + double precision :: trace_potential_xc + + File: :file:`rs_ks_energy.irp.f` + + Range-separated Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity. + + + + .. c:var:: rs_ks_energy .. code:: text @@ -66,3 +182,69 @@ Providers Range-separated Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity. + + +.. c:var:: trace_potential_xc + + .. code:: text + + double precision :: rs_ks_energy + double precision :: two_electron_energy + double precision :: one_electron_energy + double precision :: fock_matrix_energy + double precision :: trace_potential_xc + + File: :file:`rs_ks_energy.irp.f` + + Range-separated Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity. + + + + +.. c:var:: two_electron_energy + + .. code:: text + + double precision :: rs_ks_energy + double precision :: two_electron_energy + double precision :: one_electron_energy + double precision :: fock_matrix_energy + double precision :: trace_potential_xc + + File: :file:`rs_ks_energy.irp.f` + + Range-separated Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity. + + + + +Subroutines / functions +----------------------- + + + +.. c:function:: check_coherence_functional + + .. code:: text + + subroutine check_coherence_functional + + File: :file:`rs_ks_scf.irp.f` + + + + + + + +.. c:function:: srs_ks_cf + + .. code:: text + + subroutine srs_ks_cf + + File: :file:`rs_ks_scf.irp.f` + + Produce `Range_separated_Kohn_Sham` MO orbital output: mo_basis.mo_tot_num mo_basis.mo_label mo_basis.ao_md5 mo_basis.mo_coef mo_basis.mo_occ output: kohn_sham.energy optional: mo_basis.mo_coef + + diff --git a/docs/source/modules/mo_one_e_integrals.rst b/docs/source/modules/mo_one_e_integrals.rst index aedd40d6..d4e14b41 100644 --- a/docs/source/modules/mo_one_e_integrals.rst +++ b/docs/source/modules/mo_one_e_integrals.rst @@ -5,11 +5,18 @@ .. default-role:: option ================== -MO_one_e_integrals +mo_one_e_integrals ================== All the one-electron integrals in |MO| basis are defined here. +The most important providers for usual quantum-chemistry calculation are: + +# `mo_kinetic_integral` which are the kinetic operator integrals on the |AO| basis (see :file:`kin_mo_ints.irp.f`) +# `mo_nucl_elec_integral` which are the nuclear-elctron operator integrals on the |AO| basis (see :file:`pot_mo_ints.irp.f`) +# `mo_mono_elec_integral` which are the the h_core operator integrals on the |AO| basis (see :file:`mo_mono_ints.irp.f`) + +Note that you can find other interesting integrals related to the position operator in :file:`spread_dipole_mo.irp.f`. diff --git a/docs/source/modules/perturbation.rst b/docs/source/modules/perturbation.rst index 3226f126..3708b399 100644 --- a/docs/source/modules/perturbation.rst +++ b/docs/source/modules/perturbation.rst @@ -203,21 +203,6 @@ Subroutines / functions -.. c:function:: i_h_psi_pert_new_minilist - - .. code:: text - - subroutine i_H_psi_pert_new_minilist(key,keys,idx_key,N_minilist,coef,Nint,Ndet,Ndet_max,Nstate,i_H_psi_array,coef_pert) - - File: :file:`pt2_new.irp.f` - - Computes = \sum_J c_J . - Uses filter_connected_i_H_psi0 to get all the |J> to which |i> is connected. The |J> are searched in short pre-computed lists. - - - - - .. c:function:: perturb_buffer_by_mono_decontracted .. code:: text diff --git a/docs/source/modules/psiref_cas.rst b/docs/source/modules/psiref_cas.rst index 9939cf82..f79eba38 100644 --- a/docs/source/modules/psiref_cas.rst +++ b/docs/source/modules/psiref_cas.rst @@ -12,166 +12,3 @@ Reference wave function is defined as a |CAS| wave function. This module is required for |CAS-SD|, |MRPT| or |MRCC|. - - -Providers ---------- - - -.. c:var:: idx_ref - - .. code:: text - - integer(bit_kind), allocatable :: psi_ref (N_int,2,psi_det_size) - double precision, allocatable :: psi_ref_coef (psi_det_size,n_states) - integer, allocatable :: idx_ref (psi_det_size) - integer :: n_det_ref - - File: :file:`psi_ref.irp.f` - - CAS wave function, defined from the application of the CAS bitmask on the determinants. idx_cas gives the indice of the CAS determinant in psi_det. - - - - -.. c:var:: inv_norm_psi_ref - - .. code:: text - - double precision, allocatable :: norm_psi_ref (N_states) - double precision, allocatable :: inv_norm_psi_ref (N_states) - - File: :file:`psi_ref.irp.f` - - - - - - -.. c:var:: n_det_ref - - .. code:: text - - integer(bit_kind), allocatable :: psi_ref (N_int,2,psi_det_size) - double precision, allocatable :: psi_ref_coef (psi_det_size,n_states) - integer, allocatable :: idx_ref (psi_det_size) - integer :: n_det_ref - - File: :file:`psi_ref.irp.f` - - CAS wave function, defined from the application of the CAS bitmask on the determinants. idx_cas gives the indice of the CAS determinant in psi_det. - - - - -.. c:var:: norm_psi_ref - - .. code:: text - - double precision, allocatable :: norm_psi_ref (N_states) - double precision, allocatable :: inv_norm_psi_ref (N_states) - - File: :file:`psi_ref.irp.f` - - - - - - -.. c:var:: psi_non_ref_coef_interm_norm - - .. code:: text - - double precision, allocatable :: psi_non_ref_coef_interm_norm (N_det_non_ref,N_states) - - File: :file:`psi_ref.irp.f` - - - - - - -.. c:var:: psi_ref - - .. code:: text - - integer(bit_kind), allocatable :: psi_ref (N_int,2,psi_det_size) - double precision, allocatable :: psi_ref_coef (psi_det_size,n_states) - integer, allocatable :: idx_ref (psi_det_size) - integer :: n_det_ref - - File: :file:`psi_ref.irp.f` - - CAS wave function, defined from the application of the CAS bitmask on the determinants. idx_cas gives the indice of the CAS determinant in psi_det. - - - - -.. c:var:: psi_ref_coef - - .. code:: text - - integer(bit_kind), allocatable :: psi_ref (N_int,2,psi_det_size) - double precision, allocatable :: psi_ref_coef (psi_det_size,n_states) - integer, allocatable :: idx_ref (psi_det_size) - integer :: n_det_ref - - File: :file:`psi_ref.irp.f` - - CAS wave function, defined from the application of the CAS bitmask on the determinants. idx_cas gives the indice of the CAS determinant in psi_det. - - - - -.. c:var:: psi_ref_coef_interm_norm - - .. code:: text - - double precision, allocatable :: psi_ref_coef_interm_norm (N_det_ref,N_states) - - File: :file:`psi_ref.irp.f` - - - - - - -.. c:var:: psi_ref_coef_inv - - .. code:: text - - double precision, allocatable :: psi_ref_coef_inv (psi_det_size,n_states) - - File: :file:`psi_ref.irp.f` - - 1/psi_ref_coef - - - - -.. c:var:: psi_ref_coef_restart - - .. code:: text - - integer(bit_kind), allocatable :: psi_ref_restart (N_int,2,psi_det_size) - double precision, allocatable :: psi_ref_coef_restart (psi_det_size,n_states) - - File: :file:`psi_ref.irp.f` - - Projection of the CAS wave function on the restart wave function. - - - - -.. c:var:: psi_ref_restart - - .. code:: text - - integer(bit_kind), allocatable :: psi_ref_restart (N_int,2,psi_det_size) - double precision, allocatable :: psi_ref_coef_restart (psi_det_size,n_states) - - File: :file:`psi_ref.irp.f` - - Projection of the CAS wave function on the restart wave function. - - diff --git a/docs/source/modules/psiref_utils.rst b/docs/source/modules/psiref_utils.rst index 4c37ff73..b6c195b3 100644 --- a/docs/source/modules/psiref_utils.rst +++ b/docs/source/modules/psiref_utils.rst @@ -14,369 +14,3 @@ needs to be loaded with any `psi_ref_*` module. - - -Providers ---------- - - -.. c:var:: h_matrix_ref - - .. code:: text - - double precision, allocatable :: h_matrix_ref (N_det_ref,N_det_ref) - - File: :file:`psi_ref_utils.irp.f` - - - - - - -.. c:var:: holes_operators - - .. code:: text - - integer(bit_kind), allocatable :: holes_operators (N_int,2) - integer(bit_kind), allocatable :: particles_operators (N_int,2) - - File: :file:`psi_ref_excitations_operators.irp.f` - - holes_operators represents an array of integers where all the holes have been done going from psi_ref to psi_non_ref particles_operators represents an array of integers where all the particles have been done going from psi_ref to psi_non_ref - - - - -.. c:var:: idx_non_ref - - .. code:: text - - integer(bit_kind), allocatable :: psi_non_ref (N_int,2,psi_det_size) - double precision, allocatable :: psi_non_ref_coef (psi_det_size,n_states) - integer, allocatable :: idx_non_ref (psi_det_size) - integer, allocatable :: idx_non_ref_rev (psi_det_size) - integer :: n_det_non_ref - - File: :file:`psi_ref_utils.irp.f` - - Set of determinants which are not part of the reference, defined from the application of the reference bitmask on the determinants. idx_non_ref gives the indice of the determinant in psi_det. idx_non_ref_rev gives the reverse. - - - - -.. c:var:: idx_non_ref_from_sorted - - .. code:: text - - integer, allocatable :: idx_non_ref_from_sorted (N_det) - - File: :file:`psi_ref_utils.irp.f` - - - - - - -.. c:var:: idx_non_ref_rev - - .. code:: text - - integer(bit_kind), allocatable :: psi_non_ref (N_int,2,psi_det_size) - double precision, allocatable :: psi_non_ref_coef (psi_det_size,n_states) - integer, allocatable :: idx_non_ref (psi_det_size) - integer, allocatable :: idx_non_ref_rev (psi_det_size) - integer :: n_det_non_ref - - File: :file:`psi_ref_utils.irp.f` - - Set of determinants which are not part of the reference, defined from the application of the reference bitmask on the determinants. idx_non_ref gives the indice of the determinant in psi_det. idx_non_ref_rev gives the reverse. - - - - -.. c:var:: n_det_non_ref - - .. code:: text - - integer(bit_kind), allocatable :: psi_non_ref (N_int,2,psi_det_size) - double precision, allocatable :: psi_non_ref_coef (psi_det_size,n_states) - integer, allocatable :: idx_non_ref (psi_det_size) - integer, allocatable :: idx_non_ref_rev (psi_det_size) - integer :: n_det_non_ref - - File: :file:`psi_ref_utils.irp.f` - - Set of determinants which are not part of the reference, defined from the application of the reference bitmask on the determinants. idx_non_ref gives the indice of the determinant in psi_det. idx_non_ref_rev gives the reverse. - - - - -.. c:var:: particles_operators - - .. code:: text - - integer(bit_kind), allocatable :: holes_operators (N_int,2) - integer(bit_kind), allocatable :: particles_operators (N_int,2) - - File: :file:`psi_ref_excitations_operators.irp.f` - - holes_operators represents an array of integers where all the holes have been done going from psi_ref to psi_non_ref particles_operators represents an array of integers where all the particles have been done going from psi_ref to psi_non_ref - - - - -.. c:var:: psi_non_ref - - .. code:: text - - integer(bit_kind), allocatable :: psi_non_ref (N_int,2,psi_det_size) - double precision, allocatable :: psi_non_ref_coef (psi_det_size,n_states) - integer, allocatable :: idx_non_ref (psi_det_size) - integer, allocatable :: idx_non_ref_rev (psi_det_size) - integer :: n_det_non_ref - - File: :file:`psi_ref_utils.irp.f` - - Set of determinants which are not part of the reference, defined from the application of the reference bitmask on the determinants. idx_non_ref gives the indice of the determinant in psi_det. idx_non_ref_rev gives the reverse. - - - - -.. c:var:: psi_non_ref_coef - - .. code:: text - - integer(bit_kind), allocatable :: psi_non_ref (N_int,2,psi_det_size) - double precision, allocatable :: psi_non_ref_coef (psi_det_size,n_states) - integer, allocatable :: idx_non_ref (psi_det_size) - integer, allocatable :: idx_non_ref_rev (psi_det_size) - integer :: n_det_non_ref - - File: :file:`psi_ref_utils.irp.f` - - Set of determinants which are not part of the reference, defined from the application of the reference bitmask on the determinants. idx_non_ref gives the indice of the determinant in psi_det. idx_non_ref_rev gives the reverse. - - - - -.. c:var:: psi_non_ref_coef_restart - - .. code:: text - - integer(bit_kind), allocatable :: psi_non_ref_restart (N_int,2,psi_det_size) - double precision, allocatable :: psi_non_ref_coef_restart (psi_det_size,n_states) - - File: :file:`psi_ref_utils.irp.f` - - Set of determinants which are not part of the reference, defined from the application of the reference bitmask on the determinants. idx_non_ref gives the indice of the determinant in psi_det. But this is with respect to the restart wave function. - - - - -.. c:var:: psi_non_ref_coef_sorted_bit - - .. code:: text - - integer(bit_kind), allocatable :: psi_non_ref_sorted_bit (N_int,2,psi_det_size) - double precision, allocatable :: psi_non_ref_coef_sorted_bit (psi_det_size,N_states) - - File: :file:`psi_ref_utils.irp.f` - - Reference determinants sorted to accelerate the search of a random determinant in the wave function. - - - - -.. c:var:: psi_non_ref_coef_transp - - .. code:: text - - double precision, allocatable :: psi_non_ref_coef_transp (n_states,psi_det_size) - - File: :file:`psi_ref_utils.irp.f` - - Transposed psi_non_ref_coef - - - - -.. c:var:: psi_non_ref_restart - - .. code:: text - - integer(bit_kind), allocatable :: psi_non_ref_restart (N_int,2,psi_det_size) - double precision, allocatable :: psi_non_ref_coef_restart (psi_det_size,n_states) - - File: :file:`psi_ref_utils.irp.f` - - Set of determinants which are not part of the reference, defined from the application of the reference bitmask on the determinants. idx_non_ref gives the indice of the determinant in psi_det. But this is with respect to the restart wave function. - - - - -.. c:var:: psi_non_ref_sorted_bit - - .. code:: text - - integer(bit_kind), allocatable :: psi_non_ref_sorted_bit (N_int,2,psi_det_size) - double precision, allocatable :: psi_non_ref_coef_sorted_bit (psi_det_size,N_states) - - File: :file:`psi_ref_utils.irp.f` - - Reference determinants sorted to accelerate the search of a random determinant in the wave function. - - - - -.. c:var:: psi_ref_coef_diagonalized - - .. code:: text - - double precision, allocatable :: psi_ref_coef_diagonalized (N_det_ref,N_states) - double precision, allocatable :: psi_ref_energy_diagonalized (N_states) - - File: :file:`psi_ref_utils.irp.f` - - - - - - -.. c:var:: psi_ref_coef_normalized - - .. code:: text - - double precision, allocatable :: psi_ref_coef_normalized (psi_det_size,n_states) - - File: :file:`psi_ref_utils.irp.f` - - Normalized coefficients of the reference - - - - -.. c:var:: psi_ref_coef_sorted_bit - - .. code:: text - - integer(bit_kind), allocatable :: psi_ref_sorted_bit (N_int,2,psi_det_size) - double precision, allocatable :: psi_ref_coef_sorted_bit (psi_det_size,N_states) - - File: :file:`psi_ref_utils.irp.f` - - Reference determinants sorted to accelerate the search of a random determinant in the wave function. - - - - -.. c:var:: psi_ref_coef_transp - - .. code:: text - - double precision, allocatable :: psi_ref_coef_transp (n_states,psi_det_size) - - File: :file:`psi_ref_utils.irp.f` - - Transposed psi_ref_coef - - - - -.. c:var:: psi_ref_energy - - .. code:: text - - double precision, allocatable :: psi_ref_energy (N_states) - - File: :file:`psi_ref_utils.irp.f` - - - - - - -.. c:var:: psi_ref_energy_diagonalized - - .. code:: text - - double precision, allocatable :: psi_ref_coef_diagonalized (N_det_ref,N_states) - double precision, allocatable :: psi_ref_energy_diagonalized (N_states) - - File: :file:`psi_ref_utils.irp.f` - - - - - - -.. c:var:: psi_ref_sorted_bit - - .. code:: text - - integer(bit_kind), allocatable :: psi_ref_sorted_bit (N_int,2,psi_det_size) - double precision, allocatable :: psi_ref_coef_sorted_bit (psi_det_size,N_states) - - File: :file:`psi_ref_utils.irp.f` - - Reference determinants sorted to accelerate the search of a random determinant in the wave function. - - - - -.. c:var:: ref_hamiltonian_matrix - - .. code:: text - - double precision, allocatable :: ref_hamiltonian_matrix (n_det_ref,n_det_ref) - - File: :file:`psi_ref_utils.irp.f` - - H matrix in the Reference space - - - - -Subroutines / functions ------------------------ - - - -.. c:function:: extract_ref - - .. code:: text - - subroutine extract_ref - - File: :file:`extract_ref.irp.f` - - Replaces the total wave function by the normalized projection on the reference - - - - - -.. c:function:: get_index_in_psi_ref_sorted_bit - - .. code:: text - - integer function get_index_in_psi_ref_sorted_bit(key,Nint) - - File: :file:`psi_ref_utils.irp.f` - - Returns the index of the determinant in the ``psi_ref_sorted_bit`` array - - - - - -.. c:function:: is_in_psi_ref - - .. code:: text - - logical function is_in_psi_ref(key,Nint) - - File: :file:`psi_ref_utils.irp.f` - - True if the determinant ``det`` is in the wave function - - diff --git a/docs/source/modules/scf_utils.rst b/docs/source/modules/scf_utils.rst index 52a411e2..a5aaeb73 100644 --- a/docs/source/modules/scf_utils.rst +++ b/docs/source/modules/scf_utils.rst @@ -10,11 +10,11 @@ scf_utils -The scf_utils module performs *Restricted* SCF calculations (the +The scf_utils module is an abstract module which contains the basics to perform *Restricted* SCF calculations (the spatial part of the |MOs| is common for alpha and beta spinorbitals) based on a single-determinant wave function. This module does not produce any executable *and must not do*, but instead it contains everything one needs to perform an orbital optimization based on an Fock matrix. -The ``scf_utils`` module is included in the :file:`NEED` of the various single determinant SCF procedures, such as ``hartree_fock`` or ``kohn_sham``, where a specific definition of the Fock matrix is given (see :file:`hartree_fock fock_matrix_hf.irp.f` for an example). +The ``scf_utils`` module is meant to be included in the :file:`NEED` of the various single determinant SCF procedures, such as ``hartree_fock`` or ``kohn_sham``, where a specific definition of the Fock matrix is given (see :file:`hartree_fock fock_matrix_hf.irp.f` for an example). All SCF programs perform the following actions: diff --git a/docs/source/modules/slave.rst b/docs/source/modules/slave.rst index 1dcf1c47..85d16f28 100644 --- a/docs/source/modules/slave.rst +++ b/docs/source/modules/slave.rst @@ -32,20 +32,6 @@ Subroutines / functions -.. c:function:: qp_ao_ints - - .. code:: text - - subroutine qp_ao_ints - - File: :file:`slave_eri.irp.f` - - Slave for electron repulsion integrals - - - - - .. c:function:: run_wf .. code:: text diff --git a/docs/source/programmers_guide/index_providers.rst b/docs/source/programmers_guide/index_providers.rst index 446cc193..72baecef 100644 --- a/docs/source/programmers_guide/index_providers.rst +++ b/docs/source/programmers_guide/index_providers.rst @@ -8,8 +8,10 @@ Index of Providers * :c:data:`ao_bi_elec_integral_alpha` * :c:data:`ao_bi_elec_integral_beta` * :c:data:`ao_bielec_integral_erf_schwartz` +* :c:data:`ao_bielec_integral_ijkl_r3_schwartz` * :c:data:`ao_bielec_integral_schwartz` * :c:data:`ao_bielec_integrals_erf_in_map` +* :c:data:`ao_bielec_integrals_ijkl_r3_in_map` * :c:data:`ao_bielec_integrals_in_map` * :c:data:`ao_cart_to_sphe_coef` * :c:data:`ao_cart_to_sphe_inv` @@ -43,6 +45,10 @@ Index of Providers * :c:data:`ao_integrals_erf_cache_max` * :c:data:`ao_integrals_erf_cache_min` * :c:data:`ao_integrals_erf_map` +* :c:data:`ao_integrals_ijkl_r3_cache` +* :c:data:`ao_integrals_ijkl_r3_cache_max` +* :c:data:`ao_integrals_ijkl_r3_cache_min` +* :c:data:`ao_integrals_ijkl_r3_map` * :c:data:`ao_integrals_map` * :c:data:`ao_integrals_threshold` * :c:data:`ao_kinetic_integral` @@ -112,11 +118,17 @@ Index of Providers * :c:data:`aos_vx_alpha_pbe_w` * :c:data:`aos_vx_beta_lda_w` * :c:data:`aos_vx_beta_pbe_w` -* :c:data:`apply_exc_to_psi` +* :c:data:`approx_svd_two_dm` +* :c:data:`approx_svd_two_dm_correl` +* :c:data:`approx_two_dm_map` +* :c:data:`approx_two_dm_map_rev` * :c:data:`barycentric_electronic_energy` * :c:data:`bi_elec_ref_bitmask_energy` +* :c:data:`bi_elec_ref_bitmask_energy_erf` * :c:data:`big_array_coulomb_integrals` +* :c:data:`big_array_coulomb_integrals_ijkl_r3` * :c:data:`big_array_exchange_integrals` +* :c:data:`big_array_exchange_integrals_ijkl_r3` * :c:data:`binom` * :c:data:`binom_int` * :c:data:`binom_int_transp` @@ -134,12 +146,8 @@ Index of Providers * :c:data:`cart_to_sphe_9` * :c:data:`cas_bitmask` * :c:data:`center_of_mass` -* :c:data:`ci_dressed_pt2_new_eigenvectors` -* :c:data:`ci_dressed_pt2_new_eigenvectors_s2` -* :c:data:`ci_dressed_pt2_new_energy` * :c:data:`ci_eigenvectors` * :c:data:`ci_eigenvectors_s2` -* :c:data:`ci_electronic_dressed_pt2_new_energy` * :c:data:`ci_electronic_energy` * :c:data:`ci_energy` * :c:data:`closed_shell_ref_bitmask` @@ -151,7 +159,6 @@ Index of Providers * :c:data:`core_fock_operator_erf` * :c:data:`core_inact_act_bitmask_4` * :c:data:`core_inact_virt_bitmask` -* :c:data:`corr_e_from_1h1p` * :c:data:`correlation_energy_ratio_max` * :c:data:`correlation_functional` * :c:data:`damping_for_rs_dft` @@ -164,7 +171,6 @@ Index of Providers * :c:data:`degree_max_generators` * :c:data:`degree_max_integration_lebedev` * :c:data:`delta_e_per_selector` -* :c:data:`delta_ij_mrpt` * :c:data:`density_for_dft` * :c:data:`det_alpha_norm` * :c:data:`det_beta_norm` @@ -172,9 +178,11 @@ Index of Providers * :c:data:`dft_type` * :c:data:`diag_algorithm` * :c:data:`diagonal_h_matrix_on_psi_det` +* :c:data:`disk_access_ao_ijkl_r3` * :c:data:`disk_access_ao_integrals` * :c:data:`disk_access_ao_integrals_erf` * :c:data:`disk_access_ao_one_integrals` +* :c:data:`disk_access_mo_ijkl_r3` * :c:data:`disk_access_mo_integrals` * :c:data:`disk_access_mo_integrals_erf` * :c:data:`disk_access_mo_one_integrals` @@ -184,7 +192,6 @@ Index of Providers * :c:data:`do_direct_integrals` * :c:data:`do_pseudo` * :c:data:`do_pt2` -* :c:data:`do_third_order_1h1p` * :c:data:`double_exc_bitmask` * :c:data:`double_index_selectors` * :c:data:`dr_radial_integral` @@ -206,13 +213,16 @@ Index of Providers * :c:data:`elec_beta_num` * :c:data:`elec_num` * :c:data:`elec_num_tab` +* :c:data:`electronic_energy_mr_dft` * :c:data:`element_mass` * :c:data:`element_name` * :c:data:`energy_c` * :c:data:`energy_c_lda` +* :c:data:`energy_c_md_lda` +* :c:data:`energy_c_md_on_top` +* :c:data:`energy_c_md_on_top_pbe_mu_ueg_vector` +* :c:data:`energy_c_md_on_top_pbe_mu_vector` * :c:data:`energy_c_pbe` -* :c:data:`energy_cas_dyall` -* :c:data:`energy_cas_dyall_no_exchange` * :c:data:`energy_iterations` * :c:data:`energy_sr_c_lda` * :c:data:`energy_sr_c_pbe` @@ -232,12 +242,8 @@ Index of Providers * :c:data:`fact_inv` * :c:data:`fill_h_apply_buffer_selection` * :c:data:`final_grid_points` -* :c:data:`final_weight_functions_at_final_grid_points` -* :c:data:`final_weight_functions_at_grid_points` -* :c:data:`fock_core_inactive` -* :c:data:`fock_core_inactive_from_act` -* :c:data:`fock_core_inactive_total` -* :c:data:`fock_core_inactive_total_spin_trace` +* :c:data:`final_weight_at_r` +* :c:data:`final_weight_at_r_vector` * :c:data:`fock_matrix_alpha_no_xc_ao` * :c:data:`fock_matrix_ao` * :c:data:`fock_matrix_ao_alpha` @@ -248,12 +254,7 @@ Index of Providers * :c:data:`fock_matrix_mo` * :c:data:`fock_matrix_mo_alpha` * :c:data:`fock_matrix_mo_beta` -* :c:data:`fock_operator_active_from_core_inact` * :c:data:`fock_operator_closed_shell_ref_bitmask` -* :c:data:`fock_virt_from_act` -* :c:data:`fock_virt_from_core_inact` -* :c:data:`fock_virt_total` -* :c:data:`fock_virt_total_spin_trace` * :c:data:`fock_wee_closed_shell` * :c:data:`fps_spf_matrix_ao` * :c:data:`fps_spf_matrix_mo` @@ -261,17 +262,12 @@ Index of Providers * :c:data:`full_ijkl_bitmask_4` * :c:data:`gauleg_t2` * :c:data:`gauleg_w` -* :c:data:`gen_det_ref_idx` -* :c:data:`gen_det_ref_shortcut` -* :c:data:`gen_det_ref_sorted` -* :c:data:`gen_det_ref_version` * :c:data:`general_primitive_integral` * :c:data:`general_primitive_integral_erf` * :c:data:`generators_bitmask` * :c:data:`generators_bitmask_restart` * :c:data:`gga_sr_type_functionals` * :c:data:`gga_type_functionals` -* :c:data:`give_holes_and_particles_in_active_space` * :c:data:`grad_aos_dsr_vc_alpha_pbe_w` * :c:data:`grad_aos_dsr_vc_beta_pbe_w` * :c:data:`grad_aos_dsr_vx_alpha_pbe_w` @@ -287,15 +283,11 @@ Index of Providers * :c:data:`h_apply_buffer_lock` * :c:data:`h_matrix_all_dets` * :c:data:`h_matrix_cas` -* :c:data:`h_matrix_ref` * :c:data:`hf_bitmask` * :c:data:`hf_energy` * :c:data:`hf_exchange` * :c:data:`hf_one_electron_energy` * :c:data:`hf_two_electron_energy` -* :c:data:`hmatrix_dressed_pt2_new` -* :c:data:`hmatrix_dressed_pt2_new_symmetrized` -* :c:data:`holes_operators` * :c:data:`i2radix_sort` * :c:data:`i8radix_sort` * :c:data:`i8radix_sort_big` @@ -311,10 +303,6 @@ Index of Providers * :c:data:`i_x2_pol_mult_mono_elec` * :c:data:`idx_cas` * :c:data:`idx_non_cas` -* :c:data:`idx_non_ref` -* :c:data:`idx_non_ref_from_sorted` -* :c:data:`idx_non_ref_rev` -* :c:data:`idx_ref` * :c:data:`inact_bitmask` * :c:data:`inact_virt_bitmask` * :c:data:`index_final_points` @@ -326,13 +314,14 @@ Index of Providers * :c:data:`inertia_tensor_eigenvectors` * :c:data:`initialize_pt2_e0_denominator` * :c:data:`insert_into_mo_integrals_erf_map` +* :c:data:`insert_into_mo_integrals_ijkl_r3_map` * :c:data:`insert_into_mo_integrals_map` * :c:data:`int_erf_3_index` * :c:data:`int_erf_3_index_exc` -* :c:data:`integral_density_alpha_knowles_becke_per_atom` -* :c:data:`integral_density_beta_knowles_becke_per_atom` +* :c:data:`int_on_top_of_r_approx_svd` +* :c:data:`int_on_top_of_r_approx_svd_correl` +* :c:data:`integral_on_top` * :c:data:`inv_int` -* :c:data:`inv_norm_psi_ref` * :c:data:`inv_selectors_coef_hf` * :c:data:`inv_selectors_coef_hf_squared` * :c:data:`iradix_sort` @@ -341,6 +330,10 @@ Index of Providers * :c:data:`ks_energy` * :c:data:`l3_weight` * :c:data:`l_to_charater` +* :c:data:`l_vec_approx_svd_two_dm` +* :c:data:`l_vec_approx_svd_two_dm_at_r` +* :c:data:`l_vec_approx_svd_two_dm_at_r_correl` +* :c:data:`l_vec_approx_svd_two_dm_correl` * :c:data:`level_shift` * :c:data:`list_act` * :c:data:`list_act_reverse` @@ -358,6 +351,12 @@ Index of Providers * :c:data:`max_degree_exc` * :c:data:`max_dim_diis` * :c:data:`max_exc_pert` +* :c:data:`mo_bielec_integral_ijkl_r3_jj` +* :c:data:`mo_bielec_integral_ijkl_r3_jj_anti` +* :c:data:`mo_bielec_integral_ijkl_r3_jj_anti_from_ao` +* :c:data:`mo_bielec_integral_ijkl_r3_jj_exchange` +* :c:data:`mo_bielec_integral_ijkl_r3_jj_exchange_from_ao` +* :c:data:`mo_bielec_integral_ijkl_r3_jj_from_ao` * :c:data:`mo_bielec_integral_jj` * :c:data:`mo_bielec_integral_jj_anti` * :c:data:`mo_bielec_integral_jj_anti_from_ao` @@ -368,6 +367,7 @@ Index of Providers * :c:data:`mo_bielec_integral_vv_exchange_from_ao` * :c:data:`mo_bielec_integral_vv_from_ao` * :c:data:`mo_bielec_integrals_erf_in_map` +* :c:data:`mo_bielec_integrals_ijkl_r3_in_map` * :c:data:`mo_bielec_integrals_in_map` * :c:data:`mo_class` * :c:data:`mo_coef` @@ -388,6 +388,10 @@ Index of Providers * :c:data:`mo_integrals_erf_cache_max` * :c:data:`mo_integrals_erf_cache_min` * :c:data:`mo_integrals_erf_map` +* :c:data:`mo_integrals_ijkl_r3_cache` +* :c:data:`mo_integrals_ijkl_r3_cache_max` +* :c:data:`mo_integrals_ijkl_r3_cache_min` +* :c:data:`mo_integrals_ijkl_r3_map` * :c:data:`mo_integrals_map` * :c:data:`mo_integrals_threshold` * :c:data:`mo_kinetic_integral` @@ -423,6 +427,8 @@ Index of Providers * :c:data:`mu_erf_dft` * :c:data:`n_act_orb` * :c:data:`n_aos_max` +* :c:data:`n_approx_svd_two_dm` +* :c:data:`n_approx_svd_two_dm_correl` * :c:data:`n_cas_bitmask` * :c:data:`n_core_inact_act_orb` * :c:data:`n_core_inact_orb` @@ -437,8 +443,6 @@ Index of Providers * :c:data:`n_det_max` * :c:data:`n_det_max_full` * :c:data:`n_det_non_cas` -* :c:data:`n_det_non_ref` -* :c:data:`n_det_ref` * :c:data:`n_det_selectors` * :c:data:`n_double_exc_bitmasks` * :c:data:`n_double_selectors` @@ -449,6 +453,8 @@ Index of Providers * :c:data:`n_int` * :c:data:`n_it_scf_max` * :c:data:`n_iter` +* :c:data:`n_max_approx_svd_two_dm` +* :c:data:`n_max_approx_svd_two_dm_correl` * :c:data:`n_occ_pattern` * :c:data:`n_points_final_grid` * :c:data:`n_points_grid_per_atom` @@ -466,7 +472,6 @@ Index of Providers * :c:data:`no_oa_or_av_opt` * :c:data:`no_vvv_integrals` * :c:data:`no_vvvv_integrals` -* :c:data:`norm_psi_ref` * :c:data:`nproc` * :c:data:`nthreads_davidson` * :c:data:`nucl_aos` @@ -488,31 +493,24 @@ Index of Providers * :c:data:`nucl_num` * :c:data:`nucl_num_shell_aos` * :c:data:`nuclear_repulsion` -* :c:data:`one_anhil` -* :c:data:`one_anhil_inact` -* :c:data:`one_anhil_one_creat` -* :c:data:`one_anhil_one_creat_inact_virt` -* :c:data:`one_anhil_one_creat_inact_virt_bis` -* :c:data:`one_anhil_one_creat_inact_virt_norm` -* :c:data:`one_body_dm_alpha_and_grad_at_r` +* :c:data:`on_top_of_r` +* :c:data:`on_top_of_r_approx_svd` +* :c:data:`on_top_of_r_approx_svd_correl` +* :c:data:`on_top_of_r_exact` +* :c:data:`on_top_of_r_vector` * :c:data:`one_body_dm_alpha_ao_for_dft` * :c:data:`one_body_dm_alpha_at_r` * :c:data:`one_body_dm_ao_alpha` * :c:data:`one_body_dm_ao_beta` * :c:data:`one_body_dm_average_mo_for_dft` -* :c:data:`one_body_dm_beta_and_grad_at_r` * :c:data:`one_body_dm_beta_ao_for_dft` * :c:data:`one_body_dm_beta_at_r` * :c:data:`one_body_dm_dagger_mo_spin_index` * :c:data:`one_body_dm_mo` * :c:data:`one_body_dm_mo_alpha` -* :c:data:`one_body_dm_mo_alpha_and_grad_at_grid_points` -* :c:data:`one_body_dm_mo_alpha_at_grid_points` * :c:data:`one_body_dm_mo_alpha_average` * :c:data:`one_body_dm_mo_alpha_for_dft` * :c:data:`one_body_dm_mo_beta` -* :c:data:`one_body_dm_mo_beta_and_grad_at_grid_points` -* :c:data:`one_body_dm_mo_beta_at_grid_points` * :c:data:`one_body_dm_mo_beta_average` * :c:data:`one_body_dm_mo_beta_for_dft` * :c:data:`one_body_dm_mo_diff` @@ -524,14 +522,16 @@ Index of Providers * :c:data:`one_body_single_double_dm_mo_beta` * :c:data:`one_body_spin_density_ao` * :c:data:`one_body_spin_density_mo` -* :c:data:`one_creat` -* :c:data:`one_creat_virt` +* :c:data:`one_dm_alpha_in_r` +* :c:data:`one_dm_and_grad_alpha_in_r` +* :c:data:`one_dm_and_grad_beta_in_r` +* :c:data:`one_dm_beta_in_r` * :c:data:`one_electron_energy` * :c:data:`only_expected_s2` +* :c:data:`ontop_approx` * :c:data:`output_cpu_time_0` * :c:data:`output_wall_time_0` * :c:data:`overlap_gaussian_xyz` -* :c:data:`particles_operators` * :c:data:`phi_angular_integration_lebedev` * :c:data:`potential_c_alpha_ao` * :c:data:`potential_c_alpha_ao_lda` @@ -574,7 +574,6 @@ Index of Providers * :c:data:`pseudo_v_k_transp` * :c:data:`pseudo_v_kl` * :c:data:`pseudo_v_kl_transp` -* :c:data:`psi_active` * :c:data:`psi_average_norm_contrib` * :c:data:`psi_average_norm_contrib_sorted` * :c:data:`psi_bilinear_matrix` @@ -622,36 +621,16 @@ Index of Providers * :c:data:`psi_dft_energy_nuclear_elec` * :c:data:`psi_energy` * :c:data:`psi_energy_bielec` +* :c:data:`psi_energy_erf` * :c:data:`psi_energy_h_core` +* :c:data:`psi_energy_h_core_and_sr_hartree` * :c:data:`psi_energy_with_nucl_rep` * :c:data:`psi_non_cas` * :c:data:`psi_non_cas_coef` * :c:data:`psi_non_cas_coef_sorted_bit` * :c:data:`psi_non_cas_sorted_bit` -* :c:data:`psi_non_ref` -* :c:data:`psi_non_ref_coef` -* :c:data:`psi_non_ref_coef_interm_norm` -* :c:data:`psi_non_ref_coef_restart` -* :c:data:`psi_non_ref_coef_sorted_bit` -* :c:data:`psi_non_ref_coef_transp` -* :c:data:`psi_non_ref_restart` -* :c:data:`psi_non_ref_sorted_bit` * :c:data:`psi_occ_pattern` * :c:data:`psi_occ_pattern_hii` -* :c:data:`psi_ref` -* :c:data:`psi_ref_bis_lock` -* :c:data:`psi_ref_coef` -* :c:data:`psi_ref_coef_diagonalized` -* :c:data:`psi_ref_coef_interm_norm` -* :c:data:`psi_ref_coef_inv` -* :c:data:`psi_ref_coef_normalized` -* :c:data:`psi_ref_coef_restart` -* :c:data:`psi_ref_coef_sorted_bit` -* :c:data:`psi_ref_coef_transp` -* :c:data:`psi_ref_energy` -* :c:data:`psi_ref_energy_diagonalized` -* :c:data:`psi_ref_restart` -* :c:data:`psi_ref_sorted_bit` * :c:data:`psi_selectors` * :c:data:`psi_selectors_coef` * :c:data:`psi_selectors_coef_transp` @@ -677,11 +656,17 @@ Index of Providers * :c:data:`pt2_w_t` * :c:data:`qp_max_mem` * :c:data:`qp_run_address` +* :c:data:`r_vec_approx_svd_two_dm` +* :c:data:`r_vec_approx_svd_two_dm_at_r` +* :c:data:`r_vec_approx_svd_two_dm_at_r_correl` +* :c:data:`r_vec_approx_svd_two_dm_correl` * :c:data:`read_ao_integrals` * :c:data:`read_ao_integrals_erf` +* :c:data:`read_ao_integrals_ijkl_r3` * :c:data:`read_ao_one_integrals` * :c:data:`read_mo_integrals` * :c:data:`read_mo_integrals_erf` +* :c:data:`read_mo_integrals_ijkl_r3` * :c:data:`read_mo_one_integrals` * :c:data:`read_wf` * :c:data:`rec__quicksort` @@ -691,8 +676,8 @@ Index of Providers * :c:data:`rec_i_quicksort` * :c:data:`ref_bitmask` * :c:data:`ref_bitmask_energy` +* :c:data:`ref_bitmask_energy_erf` * :c:data:`ref_closed_shell_bitmask` -* :c:data:`ref_hamiltonian_matrix` * :c:data:`reunion_of_bitmask` * :c:data:`reunion_of_cas_inact_bitmask` * :c:data:`reunion_of_core_inact_act_bitmask` @@ -711,15 +696,6 @@ Index of Providers * :c:data:`scf_density_matrix_ao_alpha` * :c:data:`scf_density_matrix_ao_beta` * :c:data:`scf_energy` -* :c:data:`second_order_pt_new` -* :c:data:`second_order_pt_new_1h` -* :c:data:`second_order_pt_new_1h1p` -* :c:data:`second_order_pt_new_1h2p` -* :c:data:`second_order_pt_new_1p` -* :c:data:`second_order_pt_new_2h` -* :c:data:`second_order_pt_new_2h1p` -* :c:data:`second_order_pt_new_2h2p` -* :c:data:`second_order_pt_new_2p` * :c:data:`select_max` * :c:data:`selection_criterion` * :c:data:`selection_criterion_factor` @@ -743,8 +719,7 @@ Index of Providers * :c:data:`state_following` * :c:data:`target_energy` * :c:data:`theta_angular_integration_lebedev` -* :c:data:`three_anhil` -* :c:data:`three_creat` +* :c:data:`thr_ontop_approx` * :c:data:`thresh_scf` * :c:data:`threshold_davidson` * :c:data:`threshold_diis` @@ -756,25 +731,27 @@ Index of Providers * :c:data:`trace_v_hxc` * :c:data:`trace_v_xc` * :c:data:`transpose` -* :c:data:`two_anhil` -* :c:data:`two_anhil_one_creat` -* :c:data:`two_creat` -* :c:data:`two_creat_one_anhil` +* :c:data:`two_bod_alpha_beta_mo` +* :c:data:`two_bod_alpha_beta_mo_physicist` +* :c:data:`two_elec_energy_dft` * :c:data:`two_electron_energy` * :c:data:`unpaired_alpha_electrons` * :c:data:`used_weight` * :c:data:`var_pt2_ratio` +* :c:data:`var_rsdft_energy` * :c:data:`virt_bitmask` * :c:data:`virt_bitmask_4` -* :c:data:`weight_functions_at_grid_points` +* :c:data:`weight_at_r` * :c:data:`weight_occ_pattern` * :c:data:`weights_angular_integration_lebedev` * :c:data:`weights_angular_points` * :c:data:`write_ao_integrals` * :c:data:`write_ao_integrals_erf` +* :c:data:`write_ao_integrals_ijkl_r3` * :c:data:`write_ao_one_integrals` * :c:data:`write_mo_integrals` * :c:data:`write_mo_integrals_erf` +* :c:data:`write_mo_integrals_ijkl_r3` * :c:data:`write_mo_one_integrals` * :c:data:`zmq_context` * :c:data:`zmq_lock` @@ -797,6 +774,7 @@ Index of Subroutines/Functions * :c:func:`ac_operator_bielec` * :c:func:`add_integrals_to_map` * :c:func:`add_integrals_to_map_erf` +* :c:func:`add_integrals_to_map_ijkl_r3` * :c:func:`add_integrals_to_map_no_exit_34` * :c:func:`add_integrals_to_map_three_indices` * :c:func:`add_poly` @@ -805,12 +783,17 @@ Index of Subroutines/Functions * :c:func:`add_to_selection_buffer` * :c:func:`ao_bielec_integral` * :c:func:`ao_bielec_integral_erf` +* :c:func:`ao_bielec_integral_ijkl_r3` * :c:func:`ao_bielec_integral_schwartz_accel` * :c:func:`ao_bielec_integral_schwartz_accel_erf` * :c:func:`ao_bielec_integrals_erf_in_map_collector` * :c:func:`ao_bielec_integrals_erf_in_map_slave` * :c:func:`ao_bielec_integrals_erf_in_map_slave_inproc` * :c:func:`ao_bielec_integrals_erf_in_map_slave_tcp` +* :c:func:`ao_bielec_integrals_ijkl_r3_in_map_collector` +* :c:func:`ao_bielec_integrals_ijkl_r3_in_map_slave` +* :c:func:`ao_bielec_integrals_ijkl_r3_in_map_slave_inproc` +* :c:func:`ao_bielec_integrals_ijkl_r3_in_map_slave_tcp` * :c:func:`ao_bielec_integrals_in_map_collector` * :c:func:`ao_bielec_integrals_in_map_slave` * :c:func:`ao_bielec_integrals_in_map_slave_inproc` @@ -843,34 +826,90 @@ Index of Subroutines/Functions * :c:func:`broadcast_chunks_integer` * :c:func:`broadcast_chunks_integer8` * :c:func:`build_fock_tmp` +* :c:func:`c2_delta` +* :c:func:`c3t_delta` +* :c:func:`c4_delta` +* :c:func:`c5_delta` +* :c:func:`c5t_delta` +* :c:func:`capital_c4_delta` * :c:func:`cell_function_becke` * :c:func:`check_coherence_functional` * :c:func:`check_mem` * :c:func:`cis` * :c:func:`cisd` * :c:func:`clear_ao_erf_map` +* :c:func:`clear_ao_ijkl_r3_map` * :c:func:`clear_ao_map` * :c:func:`clear_bit_to_integer` * :c:func:`clear_mo_erf_map` +* :c:func:`clear_mo_ijkl_r3_map` * :c:func:`clear_mo_map` * :c:func:`compute_ao_bielec_integrals` * :c:func:`compute_ao_bielec_integrals_erf` +* :c:func:`compute_ao_bielec_integrals_ijkl_r3` * :c:func:`compute_ao_integrals_erf_jl` +* :c:func:`compute_ao_integrals_ijkl_r3_jl` * :c:func:`compute_ao_integrals_jl` * :c:func:`connect_to_taskserver` * :c:func:`connected_to_ref` * :c:func:`connected_to_ref_by_mono` -* :c:func:`contrib_1h2p_dm_based` -* :c:func:`contrib_2h1p_dm_based` * :c:func:`copy_h_apply_buffer_to_wf` * :c:func:`copy_psi_bilinear_to_psi` -* :c:func:`coulomb_value_no_check` +* :c:func:`correction_to_on_top_from_ueg` * :c:func:`create_guess` * :c:func:`create_microlist` * :c:func:`create_minilist` * :c:func:`create_minilist_find_previous` * :c:func:`create_selection_buffer` * :c:func:`create_wf_of_psi_bilinear_matrix` +* :c:func:`d0delta` +* :c:func:`d2_delta` +* :c:func:`d3_delta` +* :c:func:`d_1st_deltaterm` +* :c:func:`d_2nd_deltaterm` +* :c:func:`d_3rd_deltaterm` +* :c:func:`d_4th_deltaterm` +* :c:func:`d_5th_deltaterm` +* :c:func:`d_c2_delta` +* :c:func:`d_c3t_delta` +* :c:func:`d_c4_delta` +* :c:func:`d_c5_delta` +* :c:func:`d_c5t_delta` +* :c:func:`d_capital_c4_delta` +* :c:func:`d_d0delta` +* :c:func:`d_d2_delta` +* :c:func:`d_d3_delta` +* :c:func:`d_delta_2` +* :c:func:`d_delta_3` +* :c:func:`d_delta_4` +* :c:func:`d_delta_5` +* :c:func:`d_delta_6` +* :c:func:`d_delta_barth` +* :c:func:`d_denominator_delta` +* :c:func:`d_total_deltarho_rhoa` +* :c:func:`d_total_deltarho_rhob` +* :c:func:`d_wignerseitz_radius` +* :c:func:`d_xi_1st_deltaterm` +* :c:func:`d_xi_2nd_deltaterm` +* :c:func:`d_xi_3rd_deltaterm` +* :c:func:`d_xi_4th_deltaterm` +* :c:func:`d_xi_5th_deltaterm` +* :c:func:`d_xi_c2_delta` +* :c:func:`d_xi_c3t_delta` +* :c:func:`d_xi_c4_delta` +* :c:func:`d_xi_c5_delta` +* :c:func:`d_xi_c5t_delta` +* :c:func:`d_xi_capital_c4_delta` +* :c:func:`d_xi_d0delta` +* :c:func:`d_xi_delta_3` +* :c:func:`d_xi_delta_4` +* :c:func:`d_xi_delta_5` +* :c:func:`d_xi_delta_6` +* :c:func:`d_xi_delta_barth` +* :c:func:`d_xi_denominator_delta` +* :c:func:`d_xi_phi_8_delta` +* :c:func:`d_xi_rhoa` +* :c:func:`d_xi_rhob` * :c:func:`damping_scf` * :c:func:`davidson_collector` * :c:func:`davidson_converged` @@ -893,20 +932,31 @@ Index of Subroutines/Functions * :c:func:`decode_exc` * :c:func:`decode_exc_spin` * :c:func:`delete_selection_buffer` +* :c:func:`delta_2` +* :c:func:`delta_3` +* :c:func:`delta_4` +* :c:func:`delta_5` +* :c:func:`delta_6` +* :c:func:`delta_barth` +* :c:func:`delta_lrsr_ldaerf` +* :c:func:`denominator_delta` * :c:func:`density_and_grad_alpha_beta_and_all_aos_and_grad_aos_at_r` * :c:func:`derivative_knowles_function` * :c:func:`det_inf` * :c:func:`det_search_key` * :c:func:`detcmp` * :c:func:`deteq` +* :c:func:`dft_utils_ecmd` +* :c:func:`dft_utils_two_body_main` * :c:func:`diag_h_mat_elem` * :c:func:`diag_h_mat_elem_au0_h_au0` +* :c:func:`diag_h_mat_elem_erf` * :c:func:`diag_h_mat_elem_fock` * :c:func:`diag_h_mat_elem_monoelec` -* :c:func:`diag_h_mat_elem_no_elec_check` -* :c:func:`diag_h_mat_elem_no_elec_check_no_exchange` * :c:func:`diag_s_mat_elem` * :c:func:`diag_wee_mat_elem` +* :c:func:`diagonal_contrib_to_all_two_body_dm` +* :c:func:`diagonal_contrib_to_two_body_ab_dm` * :c:func:`diagonalize_ci` * :c:func:`diagonalize_h` * :c:func:`disconnect_from_taskserver` @@ -922,7 +972,9 @@ Index of Subroutines/Functions * :c:func:`dsort` * :c:func:`dump_ao_integrals` * :c:func:`dump_ao_integrals_erf` +* :c:func:`dump_ao_integrals_ijkl_r3` * :c:func:`dump_mo_integrals` +* :c:func:`dump_mo_integrals_ijkl_r3` * :c:func:`ec_lda` * :c:func:`ec_lda_sr` * :c:func:`ec_only_lda_sr` @@ -939,6 +991,8 @@ Index of Subroutines/Functions * :c:func:`erf0` * :c:func:`eri` * :c:func:`eri_erf` +* :c:func:`esrc_md_ldaerf` +* :c:func:`esrc_md_ldaerf_barth` * :c:func:`ex_lda` * :c:func:`ex_lda_sr` * :c:func:`ex_pbe_sr` @@ -947,7 +1001,6 @@ Index of Subroutines/Functions * :c:func:`example_bitmask` * :c:func:`example_determinants` * :c:func:`example_determinants_psi_det` -* :c:func:`extract_ref` * :c:func:`extrapolate_data` * :c:func:`f_function_becke` * :c:func:`f_integral` @@ -959,12 +1012,14 @@ Index of Subroutines/Functions * :c:func:`filter_connected` * :c:func:`filter_connected_i_h_psi0` * :c:func:`filter_not_connected` -* :c:func:`find_connections_previous` * :c:func:`find_rotation` * :c:func:`four_idx_transform` +* :c:func:`g0_ueg_mu` +* :c:func:`g0_ueg_mu_inf` * :c:func:`g0d` * :c:func:`g0dd` * :c:func:`g0f` +* :c:func:`g0s` * :c:func:`gammln` * :c:func:`gammp` * :c:func:`gauleg` @@ -992,17 +1047,19 @@ Index of Subroutines/Functions * :c:func:`get_all_spin_singles_n_int` * :c:func:`get_ao_bielec_integral` * :c:func:`get_ao_bielec_integral_erf` +* :c:func:`get_ao_bielec_integral_ijkl_r3` * :c:func:`get_ao_bielec_integrals` * :c:func:`get_ao_bielec_integrals_erf` * :c:func:`get_ao_bielec_integrals_erf_non_zero` +* :c:func:`get_ao_bielec_integrals_ijkl_r3` +* :c:func:`get_ao_bielec_integrals_ijkl_r3_non_zero` * :c:func:`get_ao_bielec_integrals_non_zero` * :c:func:`get_ao_erf_map_size` +* :c:func:`get_ao_ijkl_r3_map_size` * :c:func:`get_ao_map_size` * :c:func:`get_d0` * :c:func:`get_d1` * :c:func:`get_d2` -* :c:func:`get_delta_e_dyall` -* :c:func:`get_delta_e_dyall_general_mp` * :c:func:`get_double_excitation` * :c:func:`get_double_excitation_spin` * :c:func:`get_excitation` @@ -1017,7 +1074,6 @@ Index of Subroutines/Functions * :c:func:`get_index_in_psi_det_alpha_unique` * :c:func:`get_index_in_psi_det_beta_unique` * :c:func:`get_index_in_psi_det_sorted_bit` -* :c:func:`get_index_in_psi_ref_sorted_bit` * :c:func:`get_inverse` * :c:func:`get_m0` * :c:func:`get_m1` @@ -1025,6 +1081,7 @@ Index of Subroutines/Functions * :c:func:`get_mask_phase` * :c:func:`get_mo_bielec_integral` * :c:func:`get_mo_bielec_integral_erf` +* :c:func:`get_mo_bielec_integral_ijkl_r3` * :c:func:`get_mo_bielec_integrals` * :c:func:`get_mo_bielec_integrals_coulomb_ii` * :c:func:`get_mo_bielec_integrals_erf` @@ -1035,7 +1092,12 @@ Index of Subroutines/Functions * :c:func:`get_mo_bielec_integrals_exch_ii` * :c:func:`get_mo_bielec_integrals_i1j1` * :c:func:`get_mo_bielec_integrals_ij` +* :c:func:`get_mo_bielec_integrals_ijkl_r3` +* :c:func:`get_mo_bielec_integrals_ijkl_r3_coulomb_ii` +* :c:func:`get_mo_bielec_integrals_ijkl_r3_exch_ii` +* :c:func:`get_mo_bielec_integrals_ijkl_r3_ij` * :c:func:`get_mo_erf_map_size` +* :c:func:`get_mo_ijkl_r3_map_size` * :c:func:`get_mo_map_size` * :c:func:`get_mono_excitation` * :c:func:`get_mono_excitation_from_fock` @@ -1050,19 +1112,6 @@ Index of Subroutines/Functions * :c:func:`get_uj_s2_ui` * :c:func:`getmobiles` * :c:func:`getunitandopen` -* :c:func:`give_1h1p_contrib` -* :c:func:`give_1h1p_only_doubles_spin_cross` -* :c:func:`give_1h1p_sec_order_singles_contrib` -* :c:func:`give_1h2p_contrib` -* :c:func:`give_1h2p_contrib_sec_order` -* :c:func:`give_1h2p_new` -* :c:func:`give_1p_sec_order_singles_contrib` -* :c:func:`give_2h1p_contrib` -* :c:func:`give_2h1p_contrib_sec_order` -* :c:func:`give_2h1p_new` -* :c:func:`give_2h2p` -* :c:func:`give_2p_new` -* :c:func:`give_active_part_determinant` * :c:func:`give_all_aos_and_grad_and_lapl_at_r` * :c:func:`give_all_aos_and_grad_at_r` * :c:func:`give_all_aos_at_r` @@ -1071,21 +1120,19 @@ Index of Subroutines/Functions * :c:func:`give_all_mos_and_grad_and_lapl_at_r` * :c:func:`give_all_mos_and_grad_at_r` * :c:func:`give_all_mos_at_r` -* :c:func:`give_core_inactive_part_determinant` +* :c:func:`give_epsilon_c_md_on_top_pbe_mu_corrected_from_two_dm` +* :c:func:`give_epsilon_c_md_on_top_pbe_mu_corrected_ueg_from_two_dm` * :c:func:`give_explicit_poly_and_gaussian` * :c:func:`give_explicit_poly_and_gaussian_double` * :c:func:`give_explicit_poly_and_gaussian_x` -* :c:func:`give_holes_in_inactive_space` -* :c:func:`give_particles_in_virt_space` * :c:func:`give_polynom_mult_center_mono_elec` * :c:func:`give_polynom_mult_center_mono_elec_erf` * :c:func:`give_polynom_mult_center_mono_elec_erf_opt` * :c:func:`give_polynom_mult_center_x` -* :c:func:`give_singles_and_partial_doubles_1h1p_contrib` -* :c:func:`give_virt_part_determinant` * :c:func:`gpw` * :c:func:`grad_rho_ab_to_grad_rho_oc` * :c:func:`gser` +* :c:func:`h` * :c:func:`h_apply_cis` * :c:func:`h_apply_cis_diexc` * :c:func:`h_apply_cis_diexcorg` @@ -1096,51 +1143,6 @@ Index of Subroutines/Functions * :c:func:`h_apply_cisd_diexcorg` * :c:func:`h_apply_cisd_diexcp` * :c:func:`h_apply_cisd_monoexc` -* :c:func:`h_apply_mrpt` -* :c:func:`h_apply_mrpt_1h` -* :c:func:`h_apply_mrpt_1h1p` -* :c:func:`h_apply_mrpt_1h1p_diexc` -* :c:func:`h_apply_mrpt_1h1p_diexcorg` -* :c:func:`h_apply_mrpt_1h1p_diexcp` -* :c:func:`h_apply_mrpt_1h1p_monoexc` -* :c:func:`h_apply_mrpt_1h2p` -* :c:func:`h_apply_mrpt_1h2p_diexc` -* :c:func:`h_apply_mrpt_1h2p_diexcorg` -* :c:func:`h_apply_mrpt_1h2p_diexcp` -* :c:func:`h_apply_mrpt_1h2p_monoexc` -* :c:func:`h_apply_mrpt_1h_diexc` -* :c:func:`h_apply_mrpt_1h_diexcorg` -* :c:func:`h_apply_mrpt_1h_diexcp` -* :c:func:`h_apply_mrpt_1h_monoexc` -* :c:func:`h_apply_mrpt_1p` -* :c:func:`h_apply_mrpt_1p_diexc` -* :c:func:`h_apply_mrpt_1p_diexcorg` -* :c:func:`h_apply_mrpt_1p_diexcp` -* :c:func:`h_apply_mrpt_1p_monoexc` -* :c:func:`h_apply_mrpt_2h` -* :c:func:`h_apply_mrpt_2h1p` -* :c:func:`h_apply_mrpt_2h1p_diexc` -* :c:func:`h_apply_mrpt_2h1p_diexcorg` -* :c:func:`h_apply_mrpt_2h1p_diexcp` -* :c:func:`h_apply_mrpt_2h1p_monoexc` -* :c:func:`h_apply_mrpt_2h2p` -* :c:func:`h_apply_mrpt_2h2p_diexc` -* :c:func:`h_apply_mrpt_2h2p_diexcorg` -* :c:func:`h_apply_mrpt_2h2p_diexcp` -* :c:func:`h_apply_mrpt_2h2p_monoexc` -* :c:func:`h_apply_mrpt_2h_diexc` -* :c:func:`h_apply_mrpt_2h_diexcorg` -* :c:func:`h_apply_mrpt_2h_diexcp` -* :c:func:`h_apply_mrpt_2h_monoexc` -* :c:func:`h_apply_mrpt_2p` -* :c:func:`h_apply_mrpt_2p_diexc` -* :c:func:`h_apply_mrpt_2p_diexcorg` -* :c:func:`h_apply_mrpt_2p_diexcp` -* :c:func:`h_apply_mrpt_2p_monoexc` -* :c:func:`h_apply_mrpt_diexc` -* :c:func:`h_apply_mrpt_diexcorg` -* :c:func:`h_apply_mrpt_diexcp` -* :c:func:`h_apply_mrpt_monoexc` * :c:func:`h_s2_u_0_bielec_nstates_openmp` * :c:func:`h_s2_u_0_bielec_nstates_openmp_work` * :c:func:`h_s2_u_0_bielec_nstates_openmp_work_1` @@ -1148,6 +1150,13 @@ Index of Subroutines/Functions * :c:func:`h_s2_u_0_bielec_nstates_openmp_work_3` * :c:func:`h_s2_u_0_bielec_nstates_openmp_work_4` * :c:func:`h_s2_u_0_bielec_nstates_openmp_work_n_int` +* :c:func:`h_s2_u_0_erf_nstates_openmp` +* :c:func:`h_s2_u_0_erf_nstates_openmp_work` +* :c:func:`h_s2_u_0_erf_nstates_openmp_work_1` +* :c:func:`h_s2_u_0_erf_nstates_openmp_work_2` +* :c:func:`h_s2_u_0_erf_nstates_openmp_work_3` +* :c:func:`h_s2_u_0_erf_nstates_openmp_work_4` +* :c:func:`h_s2_u_0_erf_nstates_openmp_work_n_int` * :c:func:`h_s2_u_0_nstates_openmp` * :c:func:`h_s2_u_0_nstates_openmp_work` * :c:func:`h_s2_u_0_nstates_openmp_work_1` @@ -1168,6 +1177,8 @@ Index of Subroutines/Functions * :c:func:`heap_sort` * :c:func:`heap_sort_big` * :c:func:`hermite` +* :c:func:`hf_two_body_dm_aa` +* :c:func:`hf_two_body_dm_aa_spherical_laplacian` * :c:func:`huckel_guess` * :c:func:`i2set_order` * :c:func:`i2set_order_big` @@ -1178,23 +1189,25 @@ Index of Subroutines/Functions * :c:func:`i_h_j` * :c:func:`i_h_j_bielec` * :c:func:`i_h_j_double_alpha_beta` +* :c:func:`i_h_j_double_alpha_beta_erf` * :c:func:`i_h_j_double_spin` -* :c:func:`i_h_j_dyall` -* :c:func:`i_h_j_dyall_no_exchange` +* :c:func:`i_h_j_double_spin_erf` +* :c:func:`i_h_j_erf` * :c:func:`i_h_j_mono_spin` +* :c:func:`i_h_j_mono_spin_erf` * :c:func:`i_h_j_mono_spin_monoelec` * :c:func:`i_h_j_monoelec` * :c:func:`i_h_j_s2` * :c:func:`i_h_j_verbose` * :c:func:`i_h_psi` * :c:func:`i_h_psi_minilist` -* :c:func:`i_h_psi_pert_new_minilist` * :c:func:`i_s2_psi_minilist` * :c:func:`i_wee_j_mono` * :c:func:`i_x1_pol_mult` * :c:func:`initialize_bitmask_to_restart_ones` * :c:func:`initialize_mo_coef_begin_iteration` * :c:func:`insert_into_ao_integrals_erf_map` +* :c:func:`insert_into_ao_integrals_ijkl_r3_map` * :c:func:`insert_into_ao_integrals_map` * :c:func:`insertion_dsort` * :c:func:`insertion_dsort_big` @@ -1207,6 +1220,7 @@ Index of Subroutines/Functions * :c:func:`insertion_sort` * :c:func:`insertion_sort_big` * :c:func:`int_gaus_pol` +* :c:func:`integral_bourrin_mo` * :c:func:`integrale_new` * :c:func:`integrale_new_erf` * :c:func:`is_a_1h` @@ -1221,7 +1235,6 @@ Index of Subroutines/Functions * :c:func:`is_connected_to_by_mono` * :c:func:`is_generable_cassd` * :c:func:`is_i_in_virtual` -* :c:func:`is_in_psi_ref` * :c:func:`is_in_wavefunction` * :c:func:`is_spin_flip_possible` * :c:func:`is_the_hole_in_det` @@ -1235,8 +1248,10 @@ Index of Subroutines/Functions * :c:func:`list_to_bitstring` * :c:func:`load_ao_integrals` * :c:func:`load_ao_integrals_erf` +* :c:func:`load_ao_integrals_ijkl_r3` * :c:func:`load_mo_integrals` * :c:func:`load_mo_integrals_erf` +* :c:func:`load_mo_integrals_ijkl_r3` * :c:func:`logfact` * :c:func:`lowercase` * :c:func:`make_s2_eigenfunction` @@ -1252,7 +1267,9 @@ Index of Subroutines/Functions * :c:func:`mo_as_svd_vectors_of_mo_matrix_eig` * :c:func:`mo_bielec_integral` * :c:func:`mo_bielec_integral_erf` +* :c:func:`mo_bielec_integral_ijkl_r3` * :c:func:`mo_bielec_integrals_erf_index` +* :c:func:`mo_bielec_integrals_ijkl_r3_index` * :c:func:`mo_bielec_integrals_index` * :c:func:`mo_to_ao` * :c:func:`modify_bitmasks_for_hole` @@ -1261,7 +1278,6 @@ Index of Subroutines/Functions * :c:func:`molden` * :c:func:`mono_excitation_wee` * :c:func:`mpi_print` -* :c:func:`mrpt_dress` * :c:func:`multiply_poly` * :c:func:`n_pt_sup` * :c:func:`nai_pol_mult` @@ -1282,6 +1298,13 @@ Index of Subroutines/Functions * :c:func:`occ_pattern_search_key` * :c:func:`occ_pattern_to_dets` * :c:func:`occ_pattern_to_dets_size` +* :c:func:`off_diagonal_double_to_two_body_ab_dm` +* :c:func:`off_diagonal_single_to_two_body_ab_dm` +* :c:func:`on_top_of_r_approx_svd_correl_function` +* :c:func:`on_top_of_r_approx_svd_function` +* :c:func:`on_top_of_r_from_provider` +* :c:func:`on_top_two_dm_in_r_mu_corrected_from_two_dm` +* :c:func:`on_top_two_dm_in_r_mu_corrected_ueg_from_two_dm` * :c:func:`ortho_canonical` * :c:func:`ortho_lowdin` * :c:func:`ortho_qr` @@ -1313,8 +1336,11 @@ Index of Subroutines/Functions * :c:func:`perturb_buffer_moller_plesset` * :c:func:`perturb_buffer_moller_plesset_general` * :c:func:`perturb_buffer_qdpt` +* :c:func:`phi_8_delta` +* :c:func:`pouet` * :c:func:`primitive_value` * :c:func:`print_det` +* :c:func:`print_ecmd_var_energy` * :c:func:`print_extrapolated_energy` * :c:func:`print_generators_bitmasks_holes` * :c:func:`print_generators_bitmasks_holes_for_one_generator` @@ -1323,8 +1349,10 @@ Index of Subroutines/Functions * :c:func:`print_memory_usage` * :c:func:`print_spindet` * :c:func:`print_summary` +* :c:func:`print_variational_energy_dft` * :c:func:`print_wf` * :c:func:`provide_all_mo_integrals_erf` +* :c:func:`provide_all_mo_integrals_ijkl_r3` * :c:func:`provide_everything` * :c:func:`pt2` * :c:func:`pt2_collector` @@ -1376,6 +1404,9 @@ Index of Subroutines/Functions * :c:func:`roothaan_hall_scf` * :c:func:`routine` * :c:func:`routine_example_psi_det` +* :c:func:`routine_print` +* :c:func:`routines_compute_energy` +* :c:func:`routines_write_int` * :c:func:`run` * :c:func:`run_pt2_slave` * :c:func:`run_selection_slave` @@ -1393,6 +1424,7 @@ Index of Subroutines/Functions * :c:func:`save_natorb` * :c:func:`save_natural_mos` * :c:func:`save_one_body_dm` +* :c:func:`save_one_e_effective_potential` * :c:func:`save_ortho_mos` * :c:func:`save_ref_determinant` * :c:func:`save_wavefunction` @@ -1408,7 +1440,6 @@ Index of Subroutines/Functions * :c:func:`set_bit_to_integer` * :c:func:`set_bitmask_hole_as_input` * :c:func:`set_bitmask_particl_as_input` -* :c:func:`set_generators_bitmasks_as_holes_and_particles` * :c:func:`set_natural_mos` * :c:func:`set_order` * :c:func:`set_order_big` @@ -1424,6 +1455,8 @@ Index of Subroutines/Functions * :c:func:`sorted_i8number` * :c:func:`sorted_inumber` * :c:func:`sorted_number` +* :c:func:`spherical_averaged_two_dm_at_second_order` +* :c:func:`spherical_averaged_two_dm_hf_at_second_order` * :c:func:`spin_det_search_key` * :c:func:`splash_pq` * :c:func:`spot_isinwf` @@ -1436,10 +1469,17 @@ Index of Subroutines/Functions * :c:func:`tasks_done_to_taskserver` * :c:func:`testteethbuilding` * :c:func:`total_memory` -* :c:func:`u0_h_dyall_u0` -* :c:func:`u0_h_dyall_u0_no_exchange` +* :c:func:`two_body_dm_nstates_openmp` +* :c:func:`two_body_dm_nstates_openmp_work` +* :c:func:`two_body_dm_nstates_openmp_work_1` +* :c:func:`two_body_dm_nstates_openmp_work_2` +* :c:func:`two_body_dm_nstates_openmp_work_3` +* :c:func:`two_body_dm_nstates_openmp_work_4` +* :c:func:`two_body_dm_nstates_openmp_work_n_int` +* :c:func:`two_dm_in_r` * :c:func:`u_0_h_u_0` * :c:func:`u_0_h_u_0_bielec` +* :c:func:`u_0_h_u_0_erf` * :c:func:`u_0_s2_u_0` * :c:func:`u_dot_u` * :c:func:`u_dot_v` @@ -1457,9 +1497,13 @@ Index of Subroutines/Functions * :c:func:`wall_time` * :c:func:`wallis` * :c:func:`wf_of_psi_bilinear_matrix` +* :c:func:`wignerseitz_radius` +* :c:func:`write_2_body_dm_fci_dump` +* :c:func:`write_all_integrals_for_mrdft` * :c:func:`write_ao_basis` * :c:func:`write_bool` * :c:func:`write_double` +* :c:func:`write_effective_rsdft_hamiltonian` * :c:func:`write_geometry` * :c:func:`write_git_log` * :c:func:`write_int` From 814613fe7b1bd9f1e5f846abb422903796b46451 Mon Sep 17 00:00:00 2001 From: Emmanuel Giner Date: Sat, 29 Dec 2018 15:24:35 +0100 Subject: [PATCH 06/16] added qp_e_conv_fci --- docs/source/_static/links.rst | 4 +- docs/source/intro/intro.rst | 17 +- docs/source/intro/selected_ci.rst | 2 + docs/source/modules/determinants.rst | 14 -- docs/source/modules/fci.rst | 14 -- docs/source/modules/generators_full.rst | 67 ------ docs/source/modules/hartree_fock.rst | 14 ++ docs/source/modules/kohn_sham.rst | 182 +++++++++++++++ docs/source/modules/kohn_sham_rs.rst | 182 --------------- docs/source/modules/single_ref_method.rst | 71 ++++++ docs/source/modules/slave.rst | 14 ++ .../programmers_guide/index_providers.rst | 213 ------------------ docs/source/users_guide/quickstart.rst | 51 ++++- .../mrcepa0/{mrcepa0.bats => test_mrcepa0} | 0 scripts/qp_e_conv_fci | 65 ++++++ 15 files changed, 410 insertions(+), 500 deletions(-) rename plugins/garniron/mrcepa0/{mrcepa0.bats => test_mrcepa0} (100%) create mode 100755 scripts/qp_e_conv_fci diff --git a/docs/source/_static/links.rst b/docs/source/_static/links.rst index f1a3a27d..147ad7b6 100644 --- a/docs/source/_static/links.rst +++ b/docs/source/_static/links.rst @@ -68,9 +68,11 @@ .. |QMC| replace:: :abbr:`QMC (Quantum Monte Carlo)` .. |rst| replace:: :abbr:`RST (ReStructured Text)` .. |SCF| replace:: :abbr:`SCF (Self Consistent Field)` -.. |RSH| replace:: :abbr:`RSH (Range-Separated-Hybrids)` +.. |RSH| replace:: :abbr:`RSH (Range Separated Hybrids)` +.. |RSDFT| replace:: :abbr:`RSDFT (Range Separated Density Functional Theory)` .. |KS-DFT| replace:: :abbr:`KS-DFT (Kohn-Sham Density Functional Theory)` .. |sCI| replace:: :abbr:`sCI (Selected-CI)` +.. |WFT| replace:: :abbr:`WFT (Wave Function Theory)` .. |CASSCF| replace:: |CAS| - |SCF| .. |FCIQMC| replace:: |FCI| - |QMC| diff --git a/docs/source/intro/intro.rst b/docs/source/intro/intro.rst index 45b2db2e..a0a76c05 100644 --- a/docs/source/intro/intro.rst +++ b/docs/source/intro/intro.rst @@ -12,15 +12,16 @@ What it is ========== The |qp| is an open-source programming environment for quantum chemistry, -especially for `wave function theory `_ (WFT). +especially for `wave function theory `_ (|WFT|). The main goal is the development of selected configuration interaction |sCI| methods and multi-reference perturbation theory |MRPT| in the determinant-driven paradigm. It also contains the very basics of Kohn-Sham `density functional theory `_ |KS-DFT| and `range-separated hybrids `_ |RSH|. -Regarding the The determinant-driven framework allows the programmer to include any arbitrary set of +The determinant-driven framework allows the programmer to include any arbitrary set of determinants in the variational space, and thus gives a complete freedom in the methodological -development. The basics of RSH together with the WFT framework also allow a simple coupling between DFT and WFT calculations (see the plugins of ``_) -All the programs are developed with the `IRPF90`_ code generator, which simplifies +development. The basic ingredients of |RSH| together with those of the |WFT| framework available in the |qp| library allows one to easily develop range-separated DFT (|RSDFT|) approaches (see for instance the plugins at ``_). + +All the programs are developed with the `IRPF90`_ code generator, which considerably simplifies the collaborative development, and the development of new features. @@ -29,13 +30,13 @@ What it is not ============== The |qp| is *not* a general purpose quantum chemistry program. -First of all, it is a library. The users of the |qp| should develop -their own programs. +First of all, it is a *library* to develop new theories and algorithms in quantum chemistry. +Therefore, beside the use of the programs of the core modules, the users of the |qp| should develop their own programs. -The |qp| has been designed specifically for sCI, so all the +The |qp| has been designed specifically for |sCI|, so all the algorithms which are programmed are not adapted to run SCF or DFT calculations on thousands of atoms. Currently, the systems targeted have less than 600 -molecular orbitals. +molecular orbitals. This limit is due to the memory bottleneck induced by the storring of the two-electron integrals (see ``mo_two_e_integrals`` and ``ao_two_e_integrals``). The |qp| is *not* a massive production code. For conventional methods such as Hartree-Fock, CISD or MP2, the users are recommended to use the diff --git a/docs/source/intro/selected_ci.rst b/docs/source/intro/selected_ci.rst index c77fb967..41ba8820 100644 --- a/docs/source/intro/selected_ci.rst +++ b/docs/source/intro/selected_ci.rst @@ -102,6 +102,8 @@ The determinants in |SetDI| will be characterized as **internal**. the wave function, low |EPT|, ...). +Of course, such a procedure can be applied on any state and therefore can allow to treat both ground and excited states. + Approximations to accelerate the selection ------------------------------------------ diff --git a/docs/source/modules/determinants.rst b/docs/source/modules/determinants.rst index aab901df..5c2ff86f 100644 --- a/docs/source/modules/determinants.rst +++ b/docs/source/modules/determinants.rst @@ -3149,20 +3149,6 @@ Subroutines / functions -.. c:function:: pouet - - .. code:: text - - subroutine pouet - - File: :file:`test.irp.f` - - - - - - - .. c:function:: pull_pt2 .. code:: text diff --git a/docs/source/modules/fci.rst b/docs/source/modules/fci.rst index 6f36b957..98b1f8f1 100644 --- a/docs/source/modules/fci.rst +++ b/docs/source/modules/fci.rst @@ -754,20 +754,6 @@ Subroutines / functions -.. c:function:: run - - .. code:: text - - subroutine run - - File: :file:`pt2.irp.f` - - - - - - - .. c:function:: run_pt2_slave .. code:: text diff --git a/docs/source/modules/generators_full.rst b/docs/source/modules/generators_full.rst index 90b32a98..012457c0 100644 --- a/docs/source/modules/generators_full.rst +++ b/docs/source/modules/generators_full.rst @@ -33,33 +33,6 @@ Providers -.. c:var:: n_det_generators - - .. code:: text - - integer :: n_det_generators - - File: :file:`generators.irp.f` - - For Single reference wave functions, the number of generators is 1 : the Hartree-Fock determinant - - - - -.. c:var:: psi_coef_generators - - .. code:: text - - integer(bit_kind), allocatable :: psi_det_generators (N_int,2,psi_det_size) - double precision, allocatable :: psi_coef_generators (psi_det_size,N_states) - - File: :file:`generators.irp.f` - - For Single reference wave functions, the generator is the Hartree-Fock determinant - - - - .. c:var:: psi_coef_sorted_gen .. code:: text @@ -75,20 +48,6 @@ Providers -.. c:var:: psi_det_generators - - .. code:: text - - integer(bit_kind), allocatable :: psi_det_generators (N_int,2,psi_det_size) - double precision, allocatable :: psi_coef_generators (psi_det_size,N_states) - - File: :file:`generators.irp.f` - - For Single reference wave functions, the generator is the Hartree-Fock determinant - - - - .. c:var:: psi_det_sorted_gen .. code:: text @@ -117,29 +76,3 @@ Providers For Single reference wave functions, the generator is the Hartree-Fock determinant - - -.. c:var:: select_max - - .. code:: text - - double precision, allocatable :: select_max (size_select_max) - - File: :file:`generators.irp.f` - - Memo to skip useless selectors - - - - -.. c:var:: size_select_max - - .. code:: text - - integer :: size_select_max - - File: :file:`generators.irp.f` - - Size of the select_max array - - diff --git a/docs/source/modules/hartree_fock.rst b/docs/source/modules/hartree_fock.rst index 0002b07e..46eee07c 100644 --- a/docs/source/modules/hartree_fock.rst +++ b/docs/source/modules/hartree_fock.rst @@ -197,6 +197,20 @@ Subroutines / functions +.. c:function:: run + + .. code:: text + + subroutine run + + File: :file:`scf_old.irp.f` + + Run SCF calculation + + + + + .. c:function:: scf .. code:: text diff --git a/docs/source/modules/kohn_sham.rst b/docs/source/modules/kohn_sham.rst index d497f7a4..7498b062 100644 --- a/docs/source/modules/kohn_sham.rst +++ b/docs/source/modules/kohn_sham.rst @@ -51,6 +51,105 @@ Providers --------- +.. c:var:: ao_potential_alpha_xc + + .. code:: text + + double precision, allocatable :: ao_potential_alpha_xc (ao_num,ao_num) + double precision, allocatable :: ao_potential_beta_xc (ao_num,ao_num) + + File: :file:`pot_functionals.irp.f` + + + + + + +.. c:var:: ao_potential_beta_xc + + .. code:: text + + double precision, allocatable :: ao_potential_alpha_xc (ao_num,ao_num) + double precision, allocatable :: ao_potential_beta_xc (ao_num,ao_num) + + File: :file:`pot_functionals.irp.f` + + + + + + +.. c:var:: e_correlation_dft + + .. code:: text + + double precision :: e_correlation_dft + + File: :file:`pot_functionals.irp.f` + + + + + + +.. c:var:: e_exchange_dft + + .. code:: text + + double precision :: e_exchange_dft + + File: :file:`pot_functionals.irp.f` + + + + + + +.. c:var:: fock_matrix_alpha_no_xc_ao + + .. code:: text + + double precision, allocatable :: fock_matrix_alpha_no_xc_ao (ao_num,ao_num) + double precision, allocatable :: fock_matrix_beta_no_xc_ao (ao_num,ao_num) + + File: :file:`fock_matrix_ks.irp.f` + + Mono electronic an Coulomb matrix in ao basis set + + + + +.. c:var:: fock_matrix_beta_no_xc_ao + + .. code:: text + + double precision, allocatable :: fock_matrix_alpha_no_xc_ao (ao_num,ao_num) + double precision, allocatable :: fock_matrix_beta_no_xc_ao (ao_num,ao_num) + + File: :file:`fock_matrix_ks.irp.f` + + Mono electronic an Coulomb matrix in ao basis set + + + + +.. c:var:: fock_matrix_energy + + .. code:: text + + double precision :: ks_energy + double precision :: two_electron_energy + double precision :: one_electron_energy + double precision :: fock_matrix_energy + double precision :: trace_potential_xc + + File: :file:`ks_enery.irp.f` + + Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity. + + + + .. c:var:: ks_energy .. code:: text @@ -66,3 +165,86 @@ Providers Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity. + + +.. c:var:: one_electron_energy + + .. code:: text + + double precision :: ks_energy + double precision :: two_electron_energy + double precision :: one_electron_energy + double precision :: fock_matrix_energy + double precision :: trace_potential_xc + + File: :file:`ks_enery.irp.f` + + Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity. + + + + +.. c:var:: trace_potential_xc + + .. code:: text + + double precision :: ks_energy + double precision :: two_electron_energy + double precision :: one_electron_energy + double precision :: fock_matrix_energy + double precision :: trace_potential_xc + + File: :file:`ks_enery.irp.f` + + Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity. + + + + +.. c:var:: two_electron_energy + + .. code:: text + + double precision :: ks_energy + double precision :: two_electron_energy + double precision :: one_electron_energy + double precision :: fock_matrix_energy + double precision :: trace_potential_xc + + File: :file:`ks_enery.irp.f` + + Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity. + + + + +Subroutines / functions +----------------------- + + + +.. c:function:: check_coherence_functional + + .. code:: text + + subroutine check_coherence_functional + + File: :file:`ks_scf.irp.f` + + + + + + + +.. c:function:: srs_ks_cf + + .. code:: text + + subroutine srs_ks_cf + + File: :file:`ks_scf.irp.f` + + Produce `Kohn_Sham` MO orbital output: mo_basis.mo_tot_num mo_basis.mo_label mo_basis.ao_md5 mo_basis.mo_coef mo_basis.mo_occ output: kohn_sham.energy optional: mo_basis.mo_coef + + diff --git a/docs/source/modules/kohn_sham_rs.rst b/docs/source/modules/kohn_sham_rs.rst index 58c89250..7eb3ec6e 100644 --- a/docs/source/modules/kohn_sham_rs.rst +++ b/docs/source/modules/kohn_sham_rs.rst @@ -51,122 +51,6 @@ Providers --------- -.. c:var:: ao_potential_alpha_xc - - .. code:: text - - double precision, allocatable :: ao_potential_alpha_xc (ao_num,ao_num) - double precision, allocatable :: ao_potential_beta_xc (ao_num,ao_num) - - File: :file:`pot_functionals.irp.f` - - - - - - -.. c:var:: ao_potential_beta_xc - - .. code:: text - - double precision, allocatable :: ao_potential_alpha_xc (ao_num,ao_num) - double precision, allocatable :: ao_potential_beta_xc (ao_num,ao_num) - - File: :file:`pot_functionals.irp.f` - - - - - - -.. c:var:: e_correlation_dft - - .. code:: text - - double precision :: e_correlation_dft - - File: :file:`pot_functionals.irp.f` - - - - - - -.. c:var:: e_exchange_dft - - .. code:: text - - double precision :: e_exchange_dft - - File: :file:`pot_functionals.irp.f` - - - - - - -.. c:var:: fock_matrix_alpha_no_xc_ao - - .. code:: text - - double precision, allocatable :: fock_matrix_alpha_no_xc_ao (ao_num,ao_num) - double precision, allocatable :: fock_matrix_beta_no_xc_ao (ao_num,ao_num) - - File: :file:`fock_matrix_rs_ks.irp.f` - - Mono electronic an Coulomb matrix in AO basis set - - - - -.. c:var:: fock_matrix_beta_no_xc_ao - - .. code:: text - - double precision, allocatable :: fock_matrix_alpha_no_xc_ao (ao_num,ao_num) - double precision, allocatable :: fock_matrix_beta_no_xc_ao (ao_num,ao_num) - - File: :file:`fock_matrix_rs_ks.irp.f` - - Mono electronic an Coulomb matrix in AO basis set - - - - -.. c:var:: fock_matrix_energy - - .. code:: text - - double precision :: rs_ks_energy - double precision :: two_electron_energy - double precision :: one_electron_energy - double precision :: fock_matrix_energy - double precision :: trace_potential_xc - - File: :file:`rs_ks_energy.irp.f` - - Range-separated Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity. - - - - -.. c:var:: one_electron_energy - - .. code:: text - - double precision :: rs_ks_energy - double precision :: two_electron_energy - double precision :: one_electron_energy - double precision :: fock_matrix_energy - double precision :: trace_potential_xc - - File: :file:`rs_ks_energy.irp.f` - - Range-separated Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity. - - - - .. c:var:: rs_ks_energy .. code:: text @@ -182,69 +66,3 @@ Providers Range-separated Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity. - - -.. c:var:: trace_potential_xc - - .. code:: text - - double precision :: rs_ks_energy - double precision :: two_electron_energy - double precision :: one_electron_energy - double precision :: fock_matrix_energy - double precision :: trace_potential_xc - - File: :file:`rs_ks_energy.irp.f` - - Range-separated Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity. - - - - -.. c:var:: two_electron_energy - - .. code:: text - - double precision :: rs_ks_energy - double precision :: two_electron_energy - double precision :: one_electron_energy - double precision :: fock_matrix_energy - double precision :: trace_potential_xc - - File: :file:`rs_ks_energy.irp.f` - - Range-separated Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity. - - - - -Subroutines / functions ------------------------ - - - -.. c:function:: check_coherence_functional - - .. code:: text - - subroutine check_coherence_functional - - File: :file:`rs_ks_scf.irp.f` - - - - - - - -.. c:function:: srs_ks_cf - - .. code:: text - - subroutine srs_ks_cf - - File: :file:`rs_ks_scf.irp.f` - - Produce `Range_separated_Kohn_Sham` MO orbital output: mo_basis.mo_tot_num mo_basis.mo_label mo_basis.ao_md5 mo_basis.mo_coef mo_basis.mo_occ output: kohn_sham.energy optional: mo_basis.mo_coef - - diff --git a/docs/source/modules/single_ref_method.rst b/docs/source/modules/single_ref_method.rst index ae80a401..c0a6f43e 100644 --- a/docs/source/modules/single_ref_method.rst +++ b/docs/source/modules/single_ref_method.rst @@ -12,3 +12,74 @@ Include this module for single reference methods. Using this module, the only generator determinant is the Hartree-Fock determinant. + + +Providers +--------- + + +.. c:var:: n_det_generators + + .. code:: text + + integer :: n_det_generators + + File: :file:`generators.irp.f` + + For Single reference wave functions, the number of generators is 1 : the Hartree-Fock determinant + + + + +.. c:var:: psi_coef_generators + + .. code:: text + + integer(bit_kind), allocatable :: psi_det_generators (N_int,2,psi_det_size) + double precision, allocatable :: psi_coef_generators (psi_det_size,N_states) + + File: :file:`generators.irp.f` + + For Single reference wave functions, the generator is the Hartree-Fock determinant + + + + +.. c:var:: psi_det_generators + + .. code:: text + + integer(bit_kind), allocatable :: psi_det_generators (N_int,2,psi_det_size) + double precision, allocatable :: psi_coef_generators (psi_det_size,N_states) + + File: :file:`generators.irp.f` + + For Single reference wave functions, the generator is the Hartree-Fock determinant + + + + +.. c:var:: select_max + + .. code:: text + + double precision, allocatable :: select_max (1) + + File: :file:`generators.irp.f` + + Memo to skip useless selectors + + + + +.. c:var:: size_select_max + + .. code:: text + + integer :: size_select_max + + File: :file:`generators.irp.f` + + Size of select_max + + diff --git a/docs/source/modules/slave.rst b/docs/source/modules/slave.rst index 31cbd7f1..74b75541 100644 --- a/docs/source/modules/slave.rst +++ b/docs/source/modules/slave.rst @@ -32,6 +32,20 @@ Subroutines / functions +.. c:function:: qp_ao_ints + + .. code:: text + + subroutine qp_ao_ints + + File: :file:`slave_eri.irp.f` + + Slave for electron repulsion integrals + + + + + .. c:function:: run_wf .. code:: text diff --git a/docs/source/programmers_guide/index_providers.rst b/docs/source/programmers_guide/index_providers.rst index 72baecef..00b03943 100644 --- a/docs/source/programmers_guide/index_providers.rst +++ b/docs/source/programmers_guide/index_providers.rst @@ -8,10 +8,8 @@ Index of Providers * :c:data:`ao_bi_elec_integral_alpha` * :c:data:`ao_bi_elec_integral_beta` * :c:data:`ao_bielec_integral_erf_schwartz` -* :c:data:`ao_bielec_integral_ijkl_r3_schwartz` * :c:data:`ao_bielec_integral_schwartz` * :c:data:`ao_bielec_integrals_erf_in_map` -* :c:data:`ao_bielec_integrals_ijkl_r3_in_map` * :c:data:`ao_bielec_integrals_in_map` * :c:data:`ao_cart_to_sphe_coef` * :c:data:`ao_cart_to_sphe_inv` @@ -45,10 +43,6 @@ Index of Providers * :c:data:`ao_integrals_erf_cache_max` * :c:data:`ao_integrals_erf_cache_min` * :c:data:`ao_integrals_erf_map` -* :c:data:`ao_integrals_ijkl_r3_cache` -* :c:data:`ao_integrals_ijkl_r3_cache_max` -* :c:data:`ao_integrals_ijkl_r3_cache_min` -* :c:data:`ao_integrals_ijkl_r3_map` * :c:data:`ao_integrals_map` * :c:data:`ao_integrals_threshold` * :c:data:`ao_kinetic_integral` @@ -118,17 +112,10 @@ Index of Providers * :c:data:`aos_vx_alpha_pbe_w` * :c:data:`aos_vx_beta_lda_w` * :c:data:`aos_vx_beta_pbe_w` -* :c:data:`approx_svd_two_dm` -* :c:data:`approx_svd_two_dm_correl` -* :c:data:`approx_two_dm_map` -* :c:data:`approx_two_dm_map_rev` * :c:data:`barycentric_electronic_energy` * :c:data:`bi_elec_ref_bitmask_energy` -* :c:data:`bi_elec_ref_bitmask_energy_erf` * :c:data:`big_array_coulomb_integrals` -* :c:data:`big_array_coulomb_integrals_ijkl_r3` * :c:data:`big_array_exchange_integrals` -* :c:data:`big_array_exchange_integrals_ijkl_r3` * :c:data:`binom` * :c:data:`binom_int` * :c:data:`binom_int_transp` @@ -178,11 +165,9 @@ Index of Providers * :c:data:`dft_type` * :c:data:`diag_algorithm` * :c:data:`diagonal_h_matrix_on_psi_det` -* :c:data:`disk_access_ao_ijkl_r3` * :c:data:`disk_access_ao_integrals` * :c:data:`disk_access_ao_integrals_erf` * :c:data:`disk_access_ao_one_integrals` -* :c:data:`disk_access_mo_ijkl_r3` * :c:data:`disk_access_mo_integrals` * :c:data:`disk_access_mo_integrals_erf` * :c:data:`disk_access_mo_one_integrals` @@ -213,15 +198,10 @@ Index of Providers * :c:data:`elec_beta_num` * :c:data:`elec_num` * :c:data:`elec_num_tab` -* :c:data:`electronic_energy_mr_dft` * :c:data:`element_mass` * :c:data:`element_name` * :c:data:`energy_c` * :c:data:`energy_c_lda` -* :c:data:`energy_c_md_lda` -* :c:data:`energy_c_md_on_top` -* :c:data:`energy_c_md_on_top_pbe_mu_ueg_vector` -* :c:data:`energy_c_md_on_top_pbe_mu_vector` * :c:data:`energy_c_pbe` * :c:data:`energy_iterations` * :c:data:`energy_sr_c_lda` @@ -314,13 +294,9 @@ Index of Providers * :c:data:`inertia_tensor_eigenvectors` * :c:data:`initialize_pt2_e0_denominator` * :c:data:`insert_into_mo_integrals_erf_map` -* :c:data:`insert_into_mo_integrals_ijkl_r3_map` * :c:data:`insert_into_mo_integrals_map` * :c:data:`int_erf_3_index` * :c:data:`int_erf_3_index_exc` -* :c:data:`int_on_top_of_r_approx_svd` -* :c:data:`int_on_top_of_r_approx_svd_correl` -* :c:data:`integral_on_top` * :c:data:`inv_int` * :c:data:`inv_selectors_coef_hf` * :c:data:`inv_selectors_coef_hf_squared` @@ -330,10 +306,6 @@ Index of Providers * :c:data:`ks_energy` * :c:data:`l3_weight` * :c:data:`l_to_charater` -* :c:data:`l_vec_approx_svd_two_dm` -* :c:data:`l_vec_approx_svd_two_dm_at_r` -* :c:data:`l_vec_approx_svd_two_dm_at_r_correl` -* :c:data:`l_vec_approx_svd_two_dm_correl` * :c:data:`level_shift` * :c:data:`list_act` * :c:data:`list_act_reverse` @@ -351,12 +323,6 @@ Index of Providers * :c:data:`max_degree_exc` * :c:data:`max_dim_diis` * :c:data:`max_exc_pert` -* :c:data:`mo_bielec_integral_ijkl_r3_jj` -* :c:data:`mo_bielec_integral_ijkl_r3_jj_anti` -* :c:data:`mo_bielec_integral_ijkl_r3_jj_anti_from_ao` -* :c:data:`mo_bielec_integral_ijkl_r3_jj_exchange` -* :c:data:`mo_bielec_integral_ijkl_r3_jj_exchange_from_ao` -* :c:data:`mo_bielec_integral_ijkl_r3_jj_from_ao` * :c:data:`mo_bielec_integral_jj` * :c:data:`mo_bielec_integral_jj_anti` * :c:data:`mo_bielec_integral_jj_anti_from_ao` @@ -367,7 +333,6 @@ Index of Providers * :c:data:`mo_bielec_integral_vv_exchange_from_ao` * :c:data:`mo_bielec_integral_vv_from_ao` * :c:data:`mo_bielec_integrals_erf_in_map` -* :c:data:`mo_bielec_integrals_ijkl_r3_in_map` * :c:data:`mo_bielec_integrals_in_map` * :c:data:`mo_class` * :c:data:`mo_coef` @@ -388,10 +353,6 @@ Index of Providers * :c:data:`mo_integrals_erf_cache_max` * :c:data:`mo_integrals_erf_cache_min` * :c:data:`mo_integrals_erf_map` -* :c:data:`mo_integrals_ijkl_r3_cache` -* :c:data:`mo_integrals_ijkl_r3_cache_max` -* :c:data:`mo_integrals_ijkl_r3_cache_min` -* :c:data:`mo_integrals_ijkl_r3_map` * :c:data:`mo_integrals_map` * :c:data:`mo_integrals_threshold` * :c:data:`mo_kinetic_integral` @@ -427,8 +388,6 @@ Index of Providers * :c:data:`mu_erf_dft` * :c:data:`n_act_orb` * :c:data:`n_aos_max` -* :c:data:`n_approx_svd_two_dm` -* :c:data:`n_approx_svd_two_dm_correl` * :c:data:`n_cas_bitmask` * :c:data:`n_core_inact_act_orb` * :c:data:`n_core_inact_orb` @@ -453,8 +412,6 @@ Index of Providers * :c:data:`n_int` * :c:data:`n_it_scf_max` * :c:data:`n_iter` -* :c:data:`n_max_approx_svd_two_dm` -* :c:data:`n_max_approx_svd_two_dm_correl` * :c:data:`n_occ_pattern` * :c:data:`n_points_final_grid` * :c:data:`n_points_grid_per_atom` @@ -493,11 +450,6 @@ Index of Providers * :c:data:`nucl_num` * :c:data:`nucl_num_shell_aos` * :c:data:`nuclear_repulsion` -* :c:data:`on_top_of_r` -* :c:data:`on_top_of_r_approx_svd` -* :c:data:`on_top_of_r_approx_svd_correl` -* :c:data:`on_top_of_r_exact` -* :c:data:`on_top_of_r_vector` * :c:data:`one_body_dm_alpha_ao_for_dft` * :c:data:`one_body_dm_alpha_at_r` * :c:data:`one_body_dm_ao_alpha` @@ -528,7 +480,6 @@ Index of Providers * :c:data:`one_dm_beta_in_r` * :c:data:`one_electron_energy` * :c:data:`only_expected_s2` -* :c:data:`ontop_approx` * :c:data:`output_cpu_time_0` * :c:data:`output_wall_time_0` * :c:data:`overlap_gaussian_xyz` @@ -621,9 +572,7 @@ Index of Providers * :c:data:`psi_dft_energy_nuclear_elec` * :c:data:`psi_energy` * :c:data:`psi_energy_bielec` -* :c:data:`psi_energy_erf` * :c:data:`psi_energy_h_core` -* :c:data:`psi_energy_h_core_and_sr_hartree` * :c:data:`psi_energy_with_nucl_rep` * :c:data:`psi_non_cas` * :c:data:`psi_non_cas_coef` @@ -656,17 +605,11 @@ Index of Providers * :c:data:`pt2_w_t` * :c:data:`qp_max_mem` * :c:data:`qp_run_address` -* :c:data:`r_vec_approx_svd_two_dm` -* :c:data:`r_vec_approx_svd_two_dm_at_r` -* :c:data:`r_vec_approx_svd_two_dm_at_r_correl` -* :c:data:`r_vec_approx_svd_two_dm_correl` * :c:data:`read_ao_integrals` * :c:data:`read_ao_integrals_erf` -* :c:data:`read_ao_integrals_ijkl_r3` * :c:data:`read_ao_one_integrals` * :c:data:`read_mo_integrals` * :c:data:`read_mo_integrals_erf` -* :c:data:`read_mo_integrals_ijkl_r3` * :c:data:`read_mo_one_integrals` * :c:data:`read_wf` * :c:data:`rec__quicksort` @@ -676,7 +619,6 @@ Index of Providers * :c:data:`rec_i_quicksort` * :c:data:`ref_bitmask` * :c:data:`ref_bitmask_energy` -* :c:data:`ref_bitmask_energy_erf` * :c:data:`ref_closed_shell_bitmask` * :c:data:`reunion_of_bitmask` * :c:data:`reunion_of_cas_inact_bitmask` @@ -719,7 +661,6 @@ Index of Providers * :c:data:`state_following` * :c:data:`target_energy` * :c:data:`theta_angular_integration_lebedev` -* :c:data:`thr_ontop_approx` * :c:data:`thresh_scf` * :c:data:`threshold_davidson` * :c:data:`threshold_diis` @@ -731,14 +672,10 @@ Index of Providers * :c:data:`trace_v_hxc` * :c:data:`trace_v_xc` * :c:data:`transpose` -* :c:data:`two_bod_alpha_beta_mo` -* :c:data:`two_bod_alpha_beta_mo_physicist` -* :c:data:`two_elec_energy_dft` * :c:data:`two_electron_energy` * :c:data:`unpaired_alpha_electrons` * :c:data:`used_weight` * :c:data:`var_pt2_ratio` -* :c:data:`var_rsdft_energy` * :c:data:`virt_bitmask` * :c:data:`virt_bitmask_4` * :c:data:`weight_at_r` @@ -747,11 +684,9 @@ Index of Providers * :c:data:`weights_angular_points` * :c:data:`write_ao_integrals` * :c:data:`write_ao_integrals_erf` -* :c:data:`write_ao_integrals_ijkl_r3` * :c:data:`write_ao_one_integrals` * :c:data:`write_mo_integrals` * :c:data:`write_mo_integrals_erf` -* :c:data:`write_mo_integrals_ijkl_r3` * :c:data:`write_mo_one_integrals` * :c:data:`zmq_context` * :c:data:`zmq_lock` @@ -774,7 +709,6 @@ Index of Subroutines/Functions * :c:func:`ac_operator_bielec` * :c:func:`add_integrals_to_map` * :c:func:`add_integrals_to_map_erf` -* :c:func:`add_integrals_to_map_ijkl_r3` * :c:func:`add_integrals_to_map_no_exit_34` * :c:func:`add_integrals_to_map_three_indices` * :c:func:`add_poly` @@ -783,17 +717,12 @@ Index of Subroutines/Functions * :c:func:`add_to_selection_buffer` * :c:func:`ao_bielec_integral` * :c:func:`ao_bielec_integral_erf` -* :c:func:`ao_bielec_integral_ijkl_r3` * :c:func:`ao_bielec_integral_schwartz_accel` * :c:func:`ao_bielec_integral_schwartz_accel_erf` * :c:func:`ao_bielec_integrals_erf_in_map_collector` * :c:func:`ao_bielec_integrals_erf_in_map_slave` * :c:func:`ao_bielec_integrals_erf_in_map_slave_inproc` * :c:func:`ao_bielec_integrals_erf_in_map_slave_tcp` -* :c:func:`ao_bielec_integrals_ijkl_r3_in_map_collector` -* :c:func:`ao_bielec_integrals_ijkl_r3_in_map_slave` -* :c:func:`ao_bielec_integrals_ijkl_r3_in_map_slave_inproc` -* :c:func:`ao_bielec_integrals_ijkl_r3_in_map_slave_tcp` * :c:func:`ao_bielec_integrals_in_map_collector` * :c:func:`ao_bielec_integrals_in_map_slave` * :c:func:`ao_bielec_integrals_in_map_slave_inproc` @@ -826,90 +755,31 @@ Index of Subroutines/Functions * :c:func:`broadcast_chunks_integer` * :c:func:`broadcast_chunks_integer8` * :c:func:`build_fock_tmp` -* :c:func:`c2_delta` -* :c:func:`c3t_delta` -* :c:func:`c4_delta` -* :c:func:`c5_delta` -* :c:func:`c5t_delta` -* :c:func:`capital_c4_delta` * :c:func:`cell_function_becke` * :c:func:`check_coherence_functional` * :c:func:`check_mem` * :c:func:`cis` * :c:func:`cisd` * :c:func:`clear_ao_erf_map` -* :c:func:`clear_ao_ijkl_r3_map` * :c:func:`clear_ao_map` * :c:func:`clear_bit_to_integer` * :c:func:`clear_mo_erf_map` -* :c:func:`clear_mo_ijkl_r3_map` * :c:func:`clear_mo_map` * :c:func:`compute_ao_bielec_integrals` * :c:func:`compute_ao_bielec_integrals_erf` -* :c:func:`compute_ao_bielec_integrals_ijkl_r3` * :c:func:`compute_ao_integrals_erf_jl` -* :c:func:`compute_ao_integrals_ijkl_r3_jl` * :c:func:`compute_ao_integrals_jl` * :c:func:`connect_to_taskserver` * :c:func:`connected_to_ref` * :c:func:`connected_to_ref_by_mono` * :c:func:`copy_h_apply_buffer_to_wf` * :c:func:`copy_psi_bilinear_to_psi` -* :c:func:`correction_to_on_top_from_ueg` * :c:func:`create_guess` * :c:func:`create_microlist` * :c:func:`create_minilist` * :c:func:`create_minilist_find_previous` * :c:func:`create_selection_buffer` * :c:func:`create_wf_of_psi_bilinear_matrix` -* :c:func:`d0delta` -* :c:func:`d2_delta` -* :c:func:`d3_delta` -* :c:func:`d_1st_deltaterm` -* :c:func:`d_2nd_deltaterm` -* :c:func:`d_3rd_deltaterm` -* :c:func:`d_4th_deltaterm` -* :c:func:`d_5th_deltaterm` -* :c:func:`d_c2_delta` -* :c:func:`d_c3t_delta` -* :c:func:`d_c4_delta` -* :c:func:`d_c5_delta` -* :c:func:`d_c5t_delta` -* :c:func:`d_capital_c4_delta` -* :c:func:`d_d0delta` -* :c:func:`d_d2_delta` -* :c:func:`d_d3_delta` -* :c:func:`d_delta_2` -* :c:func:`d_delta_3` -* :c:func:`d_delta_4` -* :c:func:`d_delta_5` -* :c:func:`d_delta_6` -* :c:func:`d_delta_barth` -* :c:func:`d_denominator_delta` -* :c:func:`d_total_deltarho_rhoa` -* :c:func:`d_total_deltarho_rhob` -* :c:func:`d_wignerseitz_radius` -* :c:func:`d_xi_1st_deltaterm` -* :c:func:`d_xi_2nd_deltaterm` -* :c:func:`d_xi_3rd_deltaterm` -* :c:func:`d_xi_4th_deltaterm` -* :c:func:`d_xi_5th_deltaterm` -* :c:func:`d_xi_c2_delta` -* :c:func:`d_xi_c3t_delta` -* :c:func:`d_xi_c4_delta` -* :c:func:`d_xi_c5_delta` -* :c:func:`d_xi_c5t_delta` -* :c:func:`d_xi_capital_c4_delta` -* :c:func:`d_xi_d0delta` -* :c:func:`d_xi_delta_3` -* :c:func:`d_xi_delta_4` -* :c:func:`d_xi_delta_5` -* :c:func:`d_xi_delta_6` -* :c:func:`d_xi_delta_barth` -* :c:func:`d_xi_denominator_delta` -* :c:func:`d_xi_phi_8_delta` -* :c:func:`d_xi_rhoa` -* :c:func:`d_xi_rhob` * :c:func:`damping_scf` * :c:func:`davidson_collector` * :c:func:`davidson_converged` @@ -932,31 +802,18 @@ Index of Subroutines/Functions * :c:func:`decode_exc` * :c:func:`decode_exc_spin` * :c:func:`delete_selection_buffer` -* :c:func:`delta_2` -* :c:func:`delta_3` -* :c:func:`delta_4` -* :c:func:`delta_5` -* :c:func:`delta_6` -* :c:func:`delta_barth` -* :c:func:`delta_lrsr_ldaerf` -* :c:func:`denominator_delta` * :c:func:`density_and_grad_alpha_beta_and_all_aos_and_grad_aos_at_r` * :c:func:`derivative_knowles_function` * :c:func:`det_inf` * :c:func:`det_search_key` * :c:func:`detcmp` * :c:func:`deteq` -* :c:func:`dft_utils_ecmd` -* :c:func:`dft_utils_two_body_main` * :c:func:`diag_h_mat_elem` * :c:func:`diag_h_mat_elem_au0_h_au0` -* :c:func:`diag_h_mat_elem_erf` * :c:func:`diag_h_mat_elem_fock` * :c:func:`diag_h_mat_elem_monoelec` * :c:func:`diag_s_mat_elem` * :c:func:`diag_wee_mat_elem` -* :c:func:`diagonal_contrib_to_all_two_body_dm` -* :c:func:`diagonal_contrib_to_two_body_ab_dm` * :c:func:`diagonalize_ci` * :c:func:`diagonalize_h` * :c:func:`disconnect_from_taskserver` @@ -972,9 +829,7 @@ Index of Subroutines/Functions * :c:func:`dsort` * :c:func:`dump_ao_integrals` * :c:func:`dump_ao_integrals_erf` -* :c:func:`dump_ao_integrals_ijkl_r3` * :c:func:`dump_mo_integrals` -* :c:func:`dump_mo_integrals_ijkl_r3` * :c:func:`ec_lda` * :c:func:`ec_lda_sr` * :c:func:`ec_only_lda_sr` @@ -991,8 +846,6 @@ Index of Subroutines/Functions * :c:func:`erf0` * :c:func:`eri` * :c:func:`eri_erf` -* :c:func:`esrc_md_ldaerf` -* :c:func:`esrc_md_ldaerf_barth` * :c:func:`ex_lda` * :c:func:`ex_lda_sr` * :c:func:`ex_pbe_sr` @@ -1014,12 +867,9 @@ Index of Subroutines/Functions * :c:func:`filter_not_connected` * :c:func:`find_rotation` * :c:func:`four_idx_transform` -* :c:func:`g0_ueg_mu` -* :c:func:`g0_ueg_mu_inf` * :c:func:`g0d` * :c:func:`g0dd` * :c:func:`g0f` -* :c:func:`g0s` * :c:func:`gammln` * :c:func:`gammp` * :c:func:`gauleg` @@ -1047,15 +897,11 @@ Index of Subroutines/Functions * :c:func:`get_all_spin_singles_n_int` * :c:func:`get_ao_bielec_integral` * :c:func:`get_ao_bielec_integral_erf` -* :c:func:`get_ao_bielec_integral_ijkl_r3` * :c:func:`get_ao_bielec_integrals` * :c:func:`get_ao_bielec_integrals_erf` * :c:func:`get_ao_bielec_integrals_erf_non_zero` -* :c:func:`get_ao_bielec_integrals_ijkl_r3` -* :c:func:`get_ao_bielec_integrals_ijkl_r3_non_zero` * :c:func:`get_ao_bielec_integrals_non_zero` * :c:func:`get_ao_erf_map_size` -* :c:func:`get_ao_ijkl_r3_map_size` * :c:func:`get_ao_map_size` * :c:func:`get_d0` * :c:func:`get_d1` @@ -1081,7 +927,6 @@ Index of Subroutines/Functions * :c:func:`get_mask_phase` * :c:func:`get_mo_bielec_integral` * :c:func:`get_mo_bielec_integral_erf` -* :c:func:`get_mo_bielec_integral_ijkl_r3` * :c:func:`get_mo_bielec_integrals` * :c:func:`get_mo_bielec_integrals_coulomb_ii` * :c:func:`get_mo_bielec_integrals_erf` @@ -1092,12 +937,7 @@ Index of Subroutines/Functions * :c:func:`get_mo_bielec_integrals_exch_ii` * :c:func:`get_mo_bielec_integrals_i1j1` * :c:func:`get_mo_bielec_integrals_ij` -* :c:func:`get_mo_bielec_integrals_ijkl_r3` -* :c:func:`get_mo_bielec_integrals_ijkl_r3_coulomb_ii` -* :c:func:`get_mo_bielec_integrals_ijkl_r3_exch_ii` -* :c:func:`get_mo_bielec_integrals_ijkl_r3_ij` * :c:func:`get_mo_erf_map_size` -* :c:func:`get_mo_ijkl_r3_map_size` * :c:func:`get_mo_map_size` * :c:func:`get_mono_excitation` * :c:func:`get_mono_excitation_from_fock` @@ -1120,8 +960,6 @@ Index of Subroutines/Functions * :c:func:`give_all_mos_and_grad_and_lapl_at_r` * :c:func:`give_all_mos_and_grad_at_r` * :c:func:`give_all_mos_at_r` -* :c:func:`give_epsilon_c_md_on_top_pbe_mu_corrected_from_two_dm` -* :c:func:`give_epsilon_c_md_on_top_pbe_mu_corrected_ueg_from_two_dm` * :c:func:`give_explicit_poly_and_gaussian` * :c:func:`give_explicit_poly_and_gaussian_double` * :c:func:`give_explicit_poly_and_gaussian_x` @@ -1132,7 +970,6 @@ Index of Subroutines/Functions * :c:func:`gpw` * :c:func:`grad_rho_ab_to_grad_rho_oc` * :c:func:`gser` -* :c:func:`h` * :c:func:`h_apply_cis` * :c:func:`h_apply_cis_diexc` * :c:func:`h_apply_cis_diexcorg` @@ -1150,13 +987,6 @@ Index of Subroutines/Functions * :c:func:`h_s2_u_0_bielec_nstates_openmp_work_3` * :c:func:`h_s2_u_0_bielec_nstates_openmp_work_4` * :c:func:`h_s2_u_0_bielec_nstates_openmp_work_n_int` -* :c:func:`h_s2_u_0_erf_nstates_openmp` -* :c:func:`h_s2_u_0_erf_nstates_openmp_work` -* :c:func:`h_s2_u_0_erf_nstates_openmp_work_1` -* :c:func:`h_s2_u_0_erf_nstates_openmp_work_2` -* :c:func:`h_s2_u_0_erf_nstates_openmp_work_3` -* :c:func:`h_s2_u_0_erf_nstates_openmp_work_4` -* :c:func:`h_s2_u_0_erf_nstates_openmp_work_n_int` * :c:func:`h_s2_u_0_nstates_openmp` * :c:func:`h_s2_u_0_nstates_openmp_work` * :c:func:`h_s2_u_0_nstates_openmp_work_1` @@ -1177,8 +1007,6 @@ Index of Subroutines/Functions * :c:func:`heap_sort` * :c:func:`heap_sort_big` * :c:func:`hermite` -* :c:func:`hf_two_body_dm_aa` -* :c:func:`hf_two_body_dm_aa_spherical_laplacian` * :c:func:`huckel_guess` * :c:func:`i2set_order` * :c:func:`i2set_order_big` @@ -1189,12 +1017,8 @@ Index of Subroutines/Functions * :c:func:`i_h_j` * :c:func:`i_h_j_bielec` * :c:func:`i_h_j_double_alpha_beta` -* :c:func:`i_h_j_double_alpha_beta_erf` * :c:func:`i_h_j_double_spin` -* :c:func:`i_h_j_double_spin_erf` -* :c:func:`i_h_j_erf` * :c:func:`i_h_j_mono_spin` -* :c:func:`i_h_j_mono_spin_erf` * :c:func:`i_h_j_mono_spin_monoelec` * :c:func:`i_h_j_monoelec` * :c:func:`i_h_j_s2` @@ -1207,7 +1031,6 @@ Index of Subroutines/Functions * :c:func:`initialize_bitmask_to_restart_ones` * :c:func:`initialize_mo_coef_begin_iteration` * :c:func:`insert_into_ao_integrals_erf_map` -* :c:func:`insert_into_ao_integrals_ijkl_r3_map` * :c:func:`insert_into_ao_integrals_map` * :c:func:`insertion_dsort` * :c:func:`insertion_dsort_big` @@ -1220,7 +1043,6 @@ Index of Subroutines/Functions * :c:func:`insertion_sort` * :c:func:`insertion_sort_big` * :c:func:`int_gaus_pol` -* :c:func:`integral_bourrin_mo` * :c:func:`integrale_new` * :c:func:`integrale_new_erf` * :c:func:`is_a_1h` @@ -1248,10 +1070,8 @@ Index of Subroutines/Functions * :c:func:`list_to_bitstring` * :c:func:`load_ao_integrals` * :c:func:`load_ao_integrals_erf` -* :c:func:`load_ao_integrals_ijkl_r3` * :c:func:`load_mo_integrals` * :c:func:`load_mo_integrals_erf` -* :c:func:`load_mo_integrals_ijkl_r3` * :c:func:`logfact` * :c:func:`lowercase` * :c:func:`make_s2_eigenfunction` @@ -1267,9 +1087,7 @@ Index of Subroutines/Functions * :c:func:`mo_as_svd_vectors_of_mo_matrix_eig` * :c:func:`mo_bielec_integral` * :c:func:`mo_bielec_integral_erf` -* :c:func:`mo_bielec_integral_ijkl_r3` * :c:func:`mo_bielec_integrals_erf_index` -* :c:func:`mo_bielec_integrals_ijkl_r3_index` * :c:func:`mo_bielec_integrals_index` * :c:func:`mo_to_ao` * :c:func:`modify_bitmasks_for_hole` @@ -1298,13 +1116,6 @@ Index of Subroutines/Functions * :c:func:`occ_pattern_search_key` * :c:func:`occ_pattern_to_dets` * :c:func:`occ_pattern_to_dets_size` -* :c:func:`off_diagonal_double_to_two_body_ab_dm` -* :c:func:`off_diagonal_single_to_two_body_ab_dm` -* :c:func:`on_top_of_r_approx_svd_correl_function` -* :c:func:`on_top_of_r_approx_svd_function` -* :c:func:`on_top_of_r_from_provider` -* :c:func:`on_top_two_dm_in_r_mu_corrected_from_two_dm` -* :c:func:`on_top_two_dm_in_r_mu_corrected_ueg_from_two_dm` * :c:func:`ortho_canonical` * :c:func:`ortho_lowdin` * :c:func:`ortho_qr` @@ -1336,11 +1147,8 @@ Index of Subroutines/Functions * :c:func:`perturb_buffer_moller_plesset` * :c:func:`perturb_buffer_moller_plesset_general` * :c:func:`perturb_buffer_qdpt` -* :c:func:`phi_8_delta` -* :c:func:`pouet` * :c:func:`primitive_value` * :c:func:`print_det` -* :c:func:`print_ecmd_var_energy` * :c:func:`print_extrapolated_energy` * :c:func:`print_generators_bitmasks_holes` * :c:func:`print_generators_bitmasks_holes_for_one_generator` @@ -1349,10 +1157,8 @@ Index of Subroutines/Functions * :c:func:`print_memory_usage` * :c:func:`print_spindet` * :c:func:`print_summary` -* :c:func:`print_variational_energy_dft` * :c:func:`print_wf` * :c:func:`provide_all_mo_integrals_erf` -* :c:func:`provide_all_mo_integrals_ijkl_r3` * :c:func:`provide_everything` * :c:func:`pt2` * :c:func:`pt2_collector` @@ -1404,9 +1210,6 @@ Index of Subroutines/Functions * :c:func:`roothaan_hall_scf` * :c:func:`routine` * :c:func:`routine_example_psi_det` -* :c:func:`routine_print` -* :c:func:`routines_compute_energy` -* :c:func:`routines_write_int` * :c:func:`run` * :c:func:`run_pt2_slave` * :c:func:`run_selection_slave` @@ -1424,7 +1227,6 @@ Index of Subroutines/Functions * :c:func:`save_natorb` * :c:func:`save_natural_mos` * :c:func:`save_one_body_dm` -* :c:func:`save_one_e_effective_potential` * :c:func:`save_ortho_mos` * :c:func:`save_ref_determinant` * :c:func:`save_wavefunction` @@ -1455,8 +1257,6 @@ Index of Subroutines/Functions * :c:func:`sorted_i8number` * :c:func:`sorted_inumber` * :c:func:`sorted_number` -* :c:func:`spherical_averaged_two_dm_at_second_order` -* :c:func:`spherical_averaged_two_dm_hf_at_second_order` * :c:func:`spin_det_search_key` * :c:func:`splash_pq` * :c:func:`spot_isinwf` @@ -1469,17 +1269,8 @@ Index of Subroutines/Functions * :c:func:`tasks_done_to_taskserver` * :c:func:`testteethbuilding` * :c:func:`total_memory` -* :c:func:`two_body_dm_nstates_openmp` -* :c:func:`two_body_dm_nstates_openmp_work` -* :c:func:`two_body_dm_nstates_openmp_work_1` -* :c:func:`two_body_dm_nstates_openmp_work_2` -* :c:func:`two_body_dm_nstates_openmp_work_3` -* :c:func:`two_body_dm_nstates_openmp_work_4` -* :c:func:`two_body_dm_nstates_openmp_work_n_int` -* :c:func:`two_dm_in_r` * :c:func:`u_0_h_u_0` * :c:func:`u_0_h_u_0_bielec` -* :c:func:`u_0_h_u_0_erf` * :c:func:`u_0_s2_u_0` * :c:func:`u_dot_u` * :c:func:`u_dot_v` @@ -1497,13 +1288,9 @@ Index of Subroutines/Functions * :c:func:`wall_time` * :c:func:`wallis` * :c:func:`wf_of_psi_bilinear_matrix` -* :c:func:`wignerseitz_radius` -* :c:func:`write_2_body_dm_fci_dump` -* :c:func:`write_all_integrals_for_mrdft` * :c:func:`write_ao_basis` * :c:func:`write_bool` * :c:func:`write_double` -* :c:func:`write_effective_rsdft_hamiltonian` * :c:func:`write_geometry` * :c:func:`write_git_log` * :c:func:`write_int` diff --git a/docs/source/users_guide/quickstart.rst b/docs/source/users_guide/quickstart.rst index afc0136e..8175d7db 100644 --- a/docs/source/users_guide/quickstart.rst +++ b/docs/source/users_guide/quickstart.rst @@ -75,19 +75,29 @@ The expected energy is ``-92.827856698`` au. The documentation of the :ref:`hartree_fock` module. +This creates the |MOs| in the |EZFIO| database that will be used to perform any other post-SCF method. +The |qp| does not handle symmetry and the |MOs| are stored by increasing order of Fock energies. Choose the target |MO| space ---------------------------- Now, modify to |EZFIO| database to make |CIPSI| calculation in the full set of valence |MOs|, keeping the core |MOs| frozen. The simple -command :command:`qp_set_frozen_core` does this automatically: +command :ref:`qp_set_frozen_core` does this automatically: .. code:: bash qp_set_frozen_core hcn +The general command to specify core and active orbitals is :ref:`qp_set_frozen_core`. In the case of HCN molecule in the 631G basis, one has 20 |MOs| in total and the two first orbitals to freeze: + +.. code:: + + qp_set_mo_class -core "[1-2]" -act "[3-20]" hcn + + + Run the |CIPSI| calculation ---------------------------- @@ -118,6 +128,45 @@ The estimated |FCI| energy of HCN is ``-93.0501`` au. The documentation of the :ref:`fci` module. +Extracting natural orbitals +--------------------------- + +Once obtained the near |FCI| wave function, one can obtain many quantities related to it. One of these quantities are the natural orbitals which have the properties of making diagonal the one-body density matrix: + + .. math:: + + \rho_{ij} = \delta_{ij} + +where the element of the one-body density matrix :math:`\rho_{ij}` is define as: + + + .. math:: + + \rho_{ij} = \langle \Psi | \left( a^{\dagger}_{j,\alpha} a_{i,\alpha} + a^{\dagger}_{j,\beta} a_{i,\beta} \right) | \Psi \rangle + + +These orbitals are in general known to be better than the usual |RHF| |MOs| as they are obtained from a correlated wave function. To use these orbitals for future calculations, one has to replace the current |MOs| by the natural orbitals. To do so, just run: + +.. code:: + + qp_run save_natorb hcn + + + +Printing the near |FCI| wave function +------------------------------------- + +Once obtained the near |FCI| energy, one can also take a closer look at the wave function stored in the |EZFIO| database. +If the wave function contains less than :math:`10^4` determinants, you can directly read it with the :ref:`qp_edit` command. Just run + + + + +The Range Separated Hybrids +--------------------------- + +One can also starts the |FCI| calculation with another type of |MOs|, for instance the + .. important:: TODO diff --git a/plugins/garniron/mrcepa0/mrcepa0.bats b/plugins/garniron/mrcepa0/test_mrcepa0 similarity index 100% rename from plugins/garniron/mrcepa0/mrcepa0.bats rename to plugins/garniron/mrcepa0/test_mrcepa0 diff --git a/scripts/qp_e_conv_fci b/scripts/qp_e_conv_fci new file mode 100755 index 00000000..dba4d782 --- /dev/null +++ b/scripts/qp_e_conv_fci @@ -0,0 +1,65 @@ +#!/bin/bash +file=$1 +out=${file}.conv + + Ndet=`grep "N_det =" $file | cut -d "=" -f 2` + Evar=`grep "E =" $file | cut -d "=" -f 2` + EPT2=`grep "E+rPT2 =" $file | cut -d "=" -f 2 | cut -d "+" -f 1` + err=`grep "E+rPT2 =" $file | cut -d "=" -f 2 | cut -d "+" -f 2 | cut -d "/" -f 2 | cut -d " " -f 5` + +Ndetarray=[] +j=0 +for i in $Ndet + do + Ndetarray[$j]=$i + let "j=j+1" +done +Nmax=${#Ndetarray[*]} +let "Nmax-=1" + + +Evararray=[] +j=0 +for i in $Evar + do + Evararray[$j]=$i + let "j=j+1" +done + + +EPT2array=[] +j=0 +for i in $EPT2 + do + EPT2array[$j]=$i + let "j=j+1" +done + + +errarray=[] +j=0 +for i in $err + do + errarray[$j]=$i + let "j=j+1" +done + + + + +echo "#Ndet E_var E+PT2 statistical error " > $out +for i in `seq 0 $Nmax` +do + echo ${Ndetarray[$i]} ${Evararray[$i]} ${EPT2array[$i]} ${errarray[$i]} >> $out +done + +cat << EOF > ${out}.plt +set term eps +set output "$out.eps" +set log x +set xlabel "Number of determinants" +set ylabel "Total Energy (a.u.)" + +plot "$out" w lp title "E_{var}", "$out" u 1:3:4 w errorlines title "E_{var} + PT2" + +EOF From 6d808df0a0ec2a3b82a952ce2262fc582569484d Mon Sep 17 00:00:00 2001 From: Emmanuel Giner Date: Sat, 29 Dec 2018 16:04:53 +0100 Subject: [PATCH 07/16] changed the doc --- docs/source/modules/determinants.rst | 6 +++ .../programmers_guide/index_providers.rst | 1 + docs/source/users_guide/quickstart.rst | 52 +++++++++++++++++-- scripts/qp_e_conv_fci | 2 + src/determinants/EZFIO.cfg | 6 +++ src/tools/print_wf.irp.f | 2 +- 6 files changed, 64 insertions(+), 5 deletions(-) diff --git a/docs/source/modules/determinants.rst b/docs/source/modules/determinants.rst index 5c2ff86f..d0cf0bc1 100644 --- a/docs/source/modules/determinants.rst +++ b/docs/source/modules/determinants.rst @@ -37,6 +37,12 @@ EZFIO parameters Default: 1000000 +.. option:: n_det_print_wf + + Maximum number of determinants to be printed with the program print_wf + + Default: 10000 + .. option:: n_det_max_full Maximum number of determinants where |H| is fully diagonalized diff --git a/docs/source/programmers_guide/index_providers.rst b/docs/source/programmers_guide/index_providers.rst index 00b03943..f8c208bb 100644 --- a/docs/source/programmers_guide/index_providers.rst +++ b/docs/source/programmers_guide/index_providers.rst @@ -402,6 +402,7 @@ Index of Providers * :c:data:`n_det_max` * :c:data:`n_det_max_full` * :c:data:`n_det_non_cas` +* :c:data:`n_det_print_wf` * :c:data:`n_det_selectors` * :c:data:`n_double_exc_bitmasks` * :c:data:`n_double_selectors` diff --git a/docs/source/users_guide/quickstart.rst b/docs/source/users_guide/quickstart.rst index 8175d7db..92cefc5c 100644 --- a/docs/source/users_guide/quickstart.rst +++ b/docs/source/users_guide/quickstart.rst @@ -105,7 +105,7 @@ We will now use the |CIPSI| algorithm to estimate the |FCI| energy. .. code:: - qp_run fci hcn + qp_run fci hcn | tee hcn.fci.out The program will start with a single determinant and will iteratively: @@ -122,6 +122,15 @@ The program will start with a single determinant and will iteratively: By default, the program will stop when more than one million determinants have entered in the internal space, or when the |PT2| energy is below :math:`10^{-4}`. +To have a pictural illustration of the convergence of the |CIPSI| algorithm, just run + +.. code:: + + qp_e_conv_fci hcn.fci.out + +This will create the files "hcn.fci.out.conv" containing the data of the convergence of the energy, together with "hcn.fci.out.conv.eps" which is obtained from the gnuplot plot file "hcn.fci.out.conv.plt". + + The estimated |FCI| energy of HCN is ``-93.0501`` au. .. seealso:: @@ -152,27 +161,62 @@ These orbitals are in general known to be better than the usual |RHF| |MOs| as t qp_run save_natorb hcn +Hands on +======== + +.. important:: + + As the |MOs| are changed, for the sake of coherence of future calculations, the save_natorb program + automatically removes the current wave function stored in the |EZFIO| database and replace + it by a single Slater determinant. + + +Then, you can run another |CIPSI| calculation to see how the use of natural orbital affect the convergence of the algorithm. For instance: + +.. code:: + + qp_run fci hcn | tee hcn.fci_natorb.out + +and then + +.. code:: + + qp_e_conv_fci hcn.fci_natorb.out + Printing the near |FCI| wave function ------------------------------------- Once obtained the near |FCI| energy, one can also take a closer look at the wave function stored in the |EZFIO| database. -If the wave function contains less than :math:`10^4` determinants, you can directly read it with the :ref:`qp_edit` command. Just run +If the wave function contains less than :math:`10^4` determinants, you can directly read it with the +:ref:`qp_edit` command. Just run + +.. code:: + + qp_edit hcn +and then look for "hand" when you are in the :ref:`qp_edit` mode. If the research is negative, +then it means that the wave function stored in the |EZFIO| database is too large to be edited in :ref:`qp_edit` mode. +An alternative is to use the :command:`print_wf` command: + +.. code:: + + qp_run print_wf hcn | tee hcn.fci_natorb.wf + +This program will, by default, print out the first :math:`10^4` determinants whatever the size of the wave function stored in the |EZFIO| folder. If you want to change the number of printed Slater determinants, just change the :option:`determinants n_det_print_wf` keyword. The Range Separated Hybrids --------------------------- -One can also starts the |FCI| calculation with another type of |MOs|, for instance the +TODO .. important:: TODO .. include:: /work.rst - * Natural orbitals * Parameters for Hartree-Fock * Parameters for Davidson * Running in parallel diff --git a/scripts/qp_e_conv_fci b/scripts/qp_e_conv_fci index dba4d782..fd1cc74f 100755 --- a/scripts/qp_e_conv_fci +++ b/scripts/qp_e_conv_fci @@ -63,3 +63,5 @@ set ylabel "Total Energy (a.u.)" plot "$out" w lp title "E_{var}", "$out" u 1:3:4 w errorlines title "E_{var} + PT2" EOF + +gnuplot ${out}.plt diff --git a/src/determinants/EZFIO.cfg b/src/determinants/EZFIO.cfg index 118b8a5d..5ae04227 100644 --- a/src/determinants/EZFIO.cfg +++ b/src/determinants/EZFIO.cfg @@ -4,6 +4,12 @@ doc: Maximum number of determinants in the wave function interface: ezfio,provider,ocaml default: 1000000 +[n_det_print_wf] +type: Det_number_max +doc: Maximum number of determinants to be printed with the program print_wf +interface: ezfio,provider,ocaml +default: 10000 + [n_det_max_full] type: Det_number_max doc: Maximum number of determinants where |H| is fully diagonalized diff --git a/src/tools/print_wf.irp.f b/src/tools/print_wf.irp.f index 5c0743dd..f709bb8a 100644 --- a/src/tools/print_wf.irp.f +++ b/src/tools/print_wf.irp.f @@ -39,7 +39,7 @@ subroutine routine norm_mono_b_pert = 0.d0 norm_mono_a_pert_2 = 0.d0 norm_mono_b_pert_2 = 0.d0 - do i = 1, min(10000,N_det) + do i = 1, min(N_det_print_wf,N_det) print*,'' print*,'i = ',i call debug_det(psi_det(1,1,i),N_int) From 12489ce144e3678e969eeeb48bc504d8e6b4482a Mon Sep 17 00:00:00 2001 From: Emmanuel Giner Date: Sat, 29 Dec 2018 16:07:37 +0100 Subject: [PATCH 08/16] added some README.rst --- src/ao_two_e_erf_integrals/README.rst | 17 +++++++++++++++++ src/ao_two_e_integrals/README.rst | 15 +++++++++++++++ src/dft_utils_in_r/README.rst | 14 ++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 src/ao_two_e_erf_integrals/README.rst create mode 100644 src/ao_two_e_integrals/README.rst create mode 100644 src/dft_utils_in_r/README.rst diff --git a/src/ao_two_e_erf_integrals/README.rst b/src/ao_two_e_erf_integrals/README.rst new file mode 100644 index 00000000..df48c560 --- /dev/null +++ b/src/ao_two_e_erf_integrals/README.rst @@ -0,0 +1,17 @@ +====================== +ao_two_e_erf_integrals +====================== + +Here, all two-electron integrals (:math:`erf(\mu r_{12})/r_{12}`) are computed. +As they have 4 indices and many are zero, they are stored in a map, as defined +in :file:`utils/map_module.f90`. + +The main parameter of this module is :option:`ao_two_e_erf_integrals mu_erf` which is the range-separation parameter. + +To fetch an |AO| integral, use the +`get_ao_bielec_integral_erf(i,j,k,l,ao_integrals_erf_map)` function, and +The conventions are: +* For |AO| integrals : (ij|kl) = (11|22) = = <12|12> + + + diff --git a/src/ao_two_e_integrals/README.rst b/src/ao_two_e_integrals/README.rst new file mode 100644 index 00000000..bb57c4a2 --- /dev/null +++ b/src/ao_two_e_integrals/README.rst @@ -0,0 +1,15 @@ +================== +ao_two_e_integrals +================== + +Here, all two-electron integrals (:math:`1/r_{12}`) are computed. +As they have 4 indices and many are zero, they are stored in a map, as defined +in :file:`utils/map_module.f90`. + +To fetch an |AO| integral, use the +`get_ao_bielec_integral(i,j,k,l,ao_integrals_map)` function, and +The conventions are: +* For |AO| integrals : (ij|kl) = (11|22) = = <12|12> + + + diff --git a/src/dft_utils_in_r/README.rst b/src/dft_utils_in_r/README.rst new file mode 100644 index 00000000..0b082339 --- /dev/null +++ b/src/dft_utils_in_r/README.rst @@ -0,0 +1,14 @@ +============== +dft_utils_in_r +============== + +This module contains most of the fundamental quantities (AOs, MOs or density derivatives) evaluated in real-space representation that are needed for the various DFT modules. + +As these quantities might be used and re-used, the values at each point of the grid are stored (see ``becke_numerical_grid`` for more information on the grid). + +The main providers for this module are: + +# `aos_in_r_array`: values of the |AO| basis on the grid point. +# `mos_in_r_array`: values of the |MO| basis on the grid point. +# `one_dm_and_grad_alpha_in_r`: values of the density and its gradienst on the grid points. + From dc87770c1adeaa5fd9d73384675a1770a7d2917e Mon Sep 17 00:00:00 2001 From: Emmanuel Giner Date: Mon, 31 Dec 2018 00:47:32 +0100 Subject: [PATCH 09/16] modifs in docs --- docs/source/modules/hartree_fock.rst | 3 ++- docs/source/modules/scf_utils.rst | 6 +++++- docs/source/users_guide/quickstart.rst | 22 +++++++++++++++------- src/hartree_fock/README.rst | 2 ++ src/scf_utils/README.rst | 4 ++++ 5 files changed, 28 insertions(+), 9 deletions(-) diff --git a/docs/source/modules/hartree_fock.rst b/docs/source/modules/hartree_fock.rst index 46eee07c..e09b1705 100644 --- a/docs/source/modules/hartree_fock.rst +++ b/docs/source/modules/hartree_fock.rst @@ -16,6 +16,7 @@ The Hartree-Fock in an SCF and therefore is based on the ``scf_utils`` structure It performs the following actions: #. Compute/Read all the one- and two-electron integrals, and store them in memory + #. Check in the |EZFIO| database if there is a set of |MOs|. If there is, it will read them as initial guess. Otherwise, it will create a guess. #. Perform the |SCF| iterations @@ -25,6 +26,7 @@ For the keywords related to the |SCF| procedure, see the ``scf_utils`` directory The main are: # :option:`scf_utils thresh_scf` + # :option:`scf_utils level_shift` At each iteration, the |MOs| are saved in the |EZFIO| database. Hence, if the calculation @@ -55,7 +57,6 @@ EZFIO parameters Energy HF - Default: 0. Providers diff --git a/docs/source/modules/scf_utils.rst b/docs/source/modules/scf_utils.rst index a5aaeb73..cc24a1aa 100644 --- a/docs/source/modules/scf_utils.rst +++ b/docs/source/modules/scf_utils.rst @@ -18,14 +18,18 @@ The ``scf_utils`` module is meant to be included in the :file:`NEED` of the vari All SCF programs perform the following actions: + #. Compute/Read all the one- and two-electron integrals, and store them in memory + #. Check in the |EZFIO| database if there is a set of |MOs|. If there is, it will read them as initial guess. Otherwise, it will create a guess. #. Perform the |SCF| iterations based on the definition of the Fock matrix The main keywords/options are: + # :option:`scf_utils thresh_scf` + # :option:`scf_utils level_shift` At each iteration, the |MOs| are saved in the |EZFIO| database. Hence, if the calculation @@ -75,7 +79,7 @@ EZFIO parameters Energy shift on the virtual MOs to improve SCF convergence - Default: 0.1 + Default: 0. .. option:: scf_algorithm diff --git a/docs/source/users_guide/quickstart.rst b/docs/source/users_guide/quickstart.rst index 92cefc5c..02e0f51c 100644 --- a/docs/source/users_guide/quickstart.rst +++ b/docs/source/users_guide/quickstart.rst @@ -90,7 +90,8 @@ command :ref:`qp_set_frozen_core` does this automatically: qp_set_frozen_core hcn -The general command to specify core and active orbitals is :ref:`qp_set_frozen_core`. In the case of HCN molecule in the 631G basis, one has 20 |MOs| in total and the two first orbitals to freeze: +The general command to specify core and active orbitals is :ref:`qp_set_mo_class`. +In the case of HCN molecule in the 631G basis, one has 20 |MOs| in total and the two first orbitals are frozen: .. code:: @@ -128,7 +129,7 @@ To have a pictural illustration of the convergence of the |CIPSI| algorithm, jus qp_e_conv_fci hcn.fci.out -This will create the files "hcn.fci.out.conv" containing the data of the convergence of the energy, together with "hcn.fci.out.conv.eps" which is obtained from the gnuplot plot file "hcn.fci.out.conv.plt". +This will create the files "hcn.fci.out.conv" containing the data of the convergence of the energy that can be plotted, together with the file "hcn.fci.out.conv.eps" which is obtained from the gnuplot plot file "hcn.fci.out.conv.plt". The estimated |FCI| energy of HCN is ``-93.0501`` au. @@ -140,7 +141,8 @@ The estimated |FCI| energy of HCN is ``-93.0501`` au. Extracting natural orbitals --------------------------- -Once obtained the near |FCI| wave function, one can obtain many quantities related to it. One of these quantities are the natural orbitals which have the properties of making diagonal the one-body density matrix: +Once obtained the near |FCI| wave function, one can obtain many quantities related to it. +One of these quantities are the natural orbitals which have the properties of diagonalizing the one-body density matrix: .. math:: @@ -154,7 +156,7 @@ where the element of the one-body density matrix :math:`\rho_{ij}` is define as: \rho_{ij} = \langle \Psi | \left( a^{\dagger}_{j,\alpha} a_{i,\alpha} + a^{\dagger}_{j,\beta} a_{i,\beta} \right) | \Psi \rangle -These orbitals are in general known to be better than the usual |RHF| |MOs| as they are obtained from a correlated wave function. To use these orbitals for future calculations, one has to replace the current |MOs| by the natural orbitals. To do so, just run: +These orbitals are in general known to be better than the usual |HF| |MOs| as they are obtained from a correlated wave function. To use these orbitals for future calculations, one has to replace the current |MOs| by the natural orbitals. To do so, just run: .. code:: @@ -167,7 +169,7 @@ Hands on .. important:: As the |MOs| are changed, for the sake of coherence of future calculations, the save_natorb program - automatically removes the current wave function stored in the |EZFIO| database and replace + *automatically removes the current wave function* stored in the |EZFIO| database and replace it by a single Slater determinant. @@ -196,7 +198,13 @@ If the wave function contains less than :math:`10^4` determinants, you can direc qp_edit hcn -and then look for "hand" when you are in the :ref:`qp_edit` mode. If the research is negative, +.. important:: + + The :ref:`qp_edit` mode virtually makes human-friendly the architecture of the |EZFIO| database + through *vim*-like editor. + + +Then, look for "hand" when you are in the :ref:`qp_edit` mode. If the research is negative, then it means that the wave function stored in the |EZFIO| database is too large to be edited in :ref:`qp_edit` mode. An alternative is to use the :command:`print_wf` command: @@ -204,7 +212,7 @@ An alternative is to use the :command:`print_wf` command: qp_run print_wf hcn | tee hcn.fci_natorb.wf -This program will, by default, print out the first :math:`10^4` determinants whatever the size of the wave function stored in the |EZFIO| folder. If you want to change the number of printed Slater determinants, just change the :option:`determinants n_det_print_wf` keyword. +This program will, by default, print out the first :math:`10^4` determinants whatever the size of the wave function stored in the |EZFIO| folder. If you want to change the number of printed Slater determinants, just change the :option:`determinants n_det_print_wf` keyword using the :ref:`qp_edit` tool. The Range Separated Hybrids diff --git a/src/hartree_fock/README.rst b/src/hartree_fock/README.rst index 9cc6ad30..0fcb3ca0 100644 --- a/src/hartree_fock/README.rst +++ b/src/hartree_fock/README.rst @@ -10,6 +10,7 @@ The Hartree-Fock in an SCF and therefore is based on the ``scf_utils`` structure It performs the following actions: #. Compute/Read all the one- and two-electron integrals, and store them in memory + #. Check in the |EZFIO| database if there is a set of |MOs|. If there is, it will read them as initial guess. Otherwise, it will create a guess. #. Perform the |SCF| iterations @@ -19,6 +20,7 @@ For the keywords related to the |SCF| procedure, see the ``scf_utils`` directory The main are: # :option:`scf_utils thresh_scf` + # :option:`scf_utils level_shift` At each iteration, the |MOs| are saved in the |EZFIO| database. Hence, if the calculation diff --git a/src/scf_utils/README.rst b/src/scf_utils/README.rst index a62e26b4..62103f19 100644 --- a/src/scf_utils/README.rst +++ b/src/scf_utils/README.rst @@ -12,14 +12,18 @@ The ``scf_utils`` module is meant to be included in the :file:`NEED` of the vari All SCF programs perform the following actions: + #. Compute/Read all the one- and two-electron integrals, and store them in memory + #. Check in the |EZFIO| database if there is a set of |MOs|. If there is, it will read them as initial guess. Otherwise, it will create a guess. #. Perform the |SCF| iterations based on the definition of the Fock matrix The main keywords/options are: + # :option:`scf_utils thresh_scf` + # :option:`scf_utils level_shift` At each iteration, the |MOs| are saved in the |EZFIO| database. Hence, if the calculation From 599a91d5aad8c98d4ae5fa590c8f9007e427e8da Mon Sep 17 00:00:00 2001 From: Emmanuel Giner Date: Mon, 31 Dec 2018 13:10:17 +0100 Subject: [PATCH 10/16] introduced the sgn grids --- TODO | 4 +- docs/source/modules/ao_one_e_integrals.rst | 7 ++-- docs/source/modules/aux_quantities.rst | 2 +- docs/source/modules/becke_numerical_grid.rst | 10 +++-- docs/source/modules/density_for_dft.rst | 4 +- docs/source/modules/determinants.rst | 14 +++---- docs/source/modules/dft_keywords.rst | 8 ++-- docs/source/modules/dft_utils_one_e.rst | 17 +++++---- docs/source/modules/kohn_sham.rst | 5 ++- docs/source/modules/mo_one_e_integrals.rst | 6 +-- docs/source/modules/scf_utils.rst | 5 +-- src/ao_one_e_integrals/README.rst | 7 ++-- src/ao_two_e_erf_integrals/README.rst | 4 +- src/ao_two_e_integrals/README.rst | 4 +- src/aux_quantities/README.rst | 2 +- src/becke_numerical_grid/EZFIO.cfg | 17 ++------- src/becke_numerical_grid/README.rst | 16 +++++--- src/becke_numerical_grid/grid_becke.irp.f | 40 +++++++++++++++++++- src/density_for_dft/README.rst | 4 +- src/determinants/README.rst | 14 +++---- src/dft_keywords/README.rst | 8 ++-- src/dft_utils_in_r/README.rst | 6 +-- src/dft_utils_one_e/README.rst | 17 +++++---- src/hartree_fock/scf.irp.f | 4 ++ src/hartree_fock/scf_old.irp.f | 5 +++ src/kohn_sham/README.rst | 5 ++- src/kohn_sham/ks_scf.irp.f | 5 +++ src/kohn_sham_rs/rs_ks_scf.irp.f | 6 +++ src/mo_one_e_integrals/README.rst | 6 +-- src/scf_utils/README.rst | 5 +-- 30 files changed, 162 insertions(+), 95 deletions(-) diff --git a/TODO b/TODO index f81453e9..e629a12e 100644 --- a/TODO +++ b/TODO @@ -1,3 +1,4 @@ +!!!!!!!!!! ENLEVER CETTE SALOPERIE DE TRUC DANS VI !!!!!!!!!!!!!!!!!!!!!!!!!!!!! # qp_module * Mettre le fichier LIB @@ -5,8 +6,7 @@ # Web/doc * Creer une page web pas trop degueu et la mettre ici : http://lcpq.github.io/quantum_package -* Manu : README - * dm_for_dft +* Pour les README.rst des modules, mettre un deuxième saut à la ligne pour la doc en ligne. * prendre des bouts du src/README.rst et en mettre partout diff --git a/docs/source/modules/ao_one_e_integrals.rst b/docs/source/modules/ao_one_e_integrals.rst index 02420d50..92d34d1a 100644 --- a/docs/source/modules/ao_one_e_integrals.rst +++ b/docs/source/modules/ao_one_e_integrals.rst @@ -12,9 +12,10 @@ All the one-electron integrals in the |AO| basis are here. The most important providers for usual quantum-chemistry calculation are: -# `ao_kinetic_integral` which are the kinetic operator integrals on the |AO| basis (see :file:`kin_ao_ints.irp.f`) -# `ao_nucl_elec_integral` which are the nuclear-elctron operator integrals on the |AO| basis (see :file:`pot_ao_ints.irp.f`) -# `ao_mono_elec_integral` which are the the h_core operator integrals on the |AO| basis (see :file:`ao_mono_ints.irp.f`) +* `ao_kinetic_integral` which are the kinetic operator integrals on the |AO| basis (see :file:`kin_ao_ints.irp.f`) +* `ao_nucl_elec_integral` which are the nuclear-elctron operator integrals on the |AO| basis (see :file:`pot_ao_ints.irp.f`) +* `ao_mono_elec_integral` which are the the h_core operator integrals on the |AO| basis (see :file:`ao_mono_ints.irp.f`) + Note that you can find other interesting integrals related to the position operator in :file:`spread_dipole_ao.irp.f`. diff --git a/docs/source/modules/aux_quantities.rst b/docs/source/modules/aux_quantities.rst index 4e6fde73..e87fa4ce 100644 --- a/docs/source/modules/aux_quantities.rst +++ b/docs/source/modules/aux_quantities.rst @@ -13,7 +13,7 @@ This module contains some global variables (such as densities and energies) whic The main providers of that module are: -# `data_one_body_alpha_dm_mo` and `data_one_body_beta_dm_mo` which are the one-body alpha and beta densities which are necessary read from the EZFIO folder. +* `data_one_body_alpha_dm_mo` and `data_one_body_beta_dm_mo` which are the one-body alpha and beta densities which are necessary read from the EZFIO folder. Thanks to these providers you can use any density matrix that does not necessary corresponds to that of the current wave function. diff --git a/docs/source/modules/becke_numerical_grid.rst b/docs/source/modules/becke_numerical_grid.rst index c1c102a7..d83dee68 100644 --- a/docs/source/modules/becke_numerical_grid.rst +++ b/docs/source/modules/becke_numerical_grid.rst @@ -12,12 +12,14 @@ This module contains all quantities needed to build the Becke's grid used in gen This grid is built as the reunion of a spherical grid around each atom. Each spherical grid contains a certain number of radial and angular points. + The main providers of that module are: -# :option:`becke_numerical_grid n_points_integration_angular` which is the number of angular integration points. WARNING: it obeys to specific rules so it cannot be any integer number. Some of the possible values are [ 50 | 74 | 266 | 590 | 1202 | 2030 | 5810 ] for instance. See :file:`angular.f` for more details. -# :option:`becke_numerical_grid n_points_radial_grid` which is the number of radial angular points. This can be any strictly positive integer. Nevertheless, a minimum of 50 is in general necessary. -# `final_grid_points` which are the (x,y,z) coordinates of the grid points. -# `final_weight_at_r_vector` which are the weights at each grid point +* :option:`becke_numerical_grid n_points_integration_angular` which is the number of angular integration points. WARNING: it obeys to specific rules so it cannot be any integer number. Some of the possible values are [ 50 | 74 | 266 | 590 | 1202 | 2030 | 5810 ] for instance. See :file:`angular.f` for more details. +* :option:`becke_numerical_grid n_points_radial_grid` which is the number of radial angular points. This can be any strictly positive integer. Nevertheless, a minimum of 50 is in general necessary. +* `final_grid_points` which are the (x,y,z) coordinates of the grid points. +* `final_weight_at_r_vector` which are the weights at each grid point + For a simple example of how to use the grid, see :file:`example.irp.f`. diff --git a/docs/source/modules/density_for_dft.rst b/docs/source/modules/density_for_dft.rst index d8d3e1fe..a6791b77 100644 --- a/docs/source/modules/density_for_dft.rst +++ b/docs/source/modules/density_for_dft.rst @@ -13,8 +13,8 @@ This module defines the *provider* of the density used for the DFT related calcu This definition is done through the keyword :option:`density_for_dft density_for_dft`. The density can be: -# WFT : the density is computed with a potentially multi determinant wave function (see variables `psi_det` and `psi_det`)# input_density : the density is set to a density previously stored in the |EZFIO| folder (see ``aux_quantities``) -# damping_rs_dft : the density is damped between the input_density and the WFT density, with a damping factor of :option:`density_for_dft damping_for_rs_dft` +* WFT : the density is computed with a potentially multi determinant wave function (see variables `psi_det` and `psi_det`)# input_density : the density is set to a density previously stored in the |EZFIO| folder (see ``aux_quantities``) +* damping_rs_dft : the density is damped between the input_density and the WFT density, with a damping factor of :option:`density_for_dft damping_for_rs_dft` diff --git a/docs/source/modules/determinants.rst b/docs/source/modules/determinants.rst index d0cf0bc1..78587531 100644 --- a/docs/source/modules/determinants.rst +++ b/docs/source/modules/determinants.rst @@ -12,16 +12,16 @@ Contains everything for the computation of the Hamiltonian matrix elements in th The main providers for this module are: -# :option:`determinants n_states`: number of states to be computed -# `psi_det`: list of determinants in the wave function used in many routines/providers of the |QP|. -# `psi_coef`: list of coefficients, for all :option:`determinants n_states` states, and all determinants. +* :option:`determinants n_states`: number of states to be computed +* `psi_det`: list of determinants in the wave function used in many routines/providers of the |QP|. +* `psi_coef`: list of coefficients, for all :option:`determinants n_states` states, and all determinants. The main routines for this module are: -# `i_H_j`: computes the Hamiltonian matrix element between two arbitrary Slater determinants. -# `i_H_j_s2`: computes the Hamiltonian and (:math:`S^2`) matrix element between two arbitrary Slater determinants. -# `i_H_j_verbose`: returns the decomposition in terms of one- and two-body components of the Hamiltonian matrix elements between two arbitrary Slater determinants. Also return the fermionic phase factor. -# `i_H_psi`: computes the Hamiltonian matrix element between an arbitrary Slater determinant and a wave function composed of a sum of arbitrary Slater determinants. +* `i_H_j`: computes the Hamiltonian matrix element between two arbitrary Slater determinants. +* `i_H_j_s2`: computes the Hamiltonian and (:math:`S^2`) matrix element between two arbitrary Slater determinants. +* `i_H_j_verbose`: returns the decomposition in terms of one- and two-body components of the Hamiltonian matrix elements between two arbitrary Slater determinants. Also return the fermionic phase factor. +* `i_H_psi`: computes the Hamiltonian matrix element between an arbitrary Slater determinant and a wave function composed of a sum of arbitrary Slater determinants. For an example of how to use these routines and providers, take a look at :file:`example.irp.f`. diff --git a/docs/source/modules/dft_keywords.rst b/docs/source/modules/dft_keywords.rst index ed7f87d2..d4614cad 100644 --- a/docs/source/modules/dft_keywords.rst +++ b/docs/source/modules/dft_keywords.rst @@ -10,11 +10,11 @@ dft_keywords This module contains the main keywords related to a DFT calculation or RS-DFT calculation, such as: -# :option:`dft_keywords exchange_functional` -# :option:`dft_keywords correlation_functional` -# :option:`dft_keywords HF_exchange` : only relevent for the :ref:`ks_scf` program +* :option:`dft_keywords exchange_functional` +* :option:`dft_keywords correlation_functional` +* :option:`dft_keywords HF_exchange` : only relevent for the :ref:`ks_scf` program -The keyword for the range separation parameter :math:`\mu` is the :option:`ao_two_e_erf_integrals mu_erf` keyword. +The keyword for the **range separation parameter** :math:`\mu` is the :option:`ao_two_e_erf_integrals mu_erf` keyword. The keyword for the type of density used in RS-DFT calculation with a multi-configurational wave function is the :option:`density_for_dft density_for_dft` keyword. diff --git a/docs/source/modules/dft_utils_one_e.rst b/docs/source/modules/dft_utils_one_e.rst index dadd433e..bb3def97 100644 --- a/docs/source/modules/dft_utils_one_e.rst +++ b/docs/source/modules/dft_utils_one_e.rst @@ -12,17 +12,20 @@ This module contains all the one-body related quantities needed to perform DFT o Therefore, it contains most of the properties which depends on the one-body density and density matrix. The most important files and variables are: -# The general *providers* for the x/c energies in :file:`e_xc_general.irp.f` -# The general *providers* for the x/c potentials in :file:`pot_general.irp.f` -# The short-range hartree operator and all related quantities in :file:`sr_coulomb.irp.f` + +* The general *providers* for the x/c energies in :file:`e_xc_general.irp.f` +* The general *providers* for the x/c potentials in :file:`pot_general.irp.f` +* The short-range hartree operator and all related quantities in :file:`sr_coulomb.irp.f` + These *providers* will be used in many DFT-related programs, such as :file:`ks_scf.irp.f` or :file:`rs_ks_scf.irp.f`. It is also needed to compute the effective one-body operator needed in multi-determinant RS-DFT (see plugins by eginer). Some other interesting quantities: -# The LDA and PBE *providers* for the x/c energies in :file:`e_xc.irp.f` and :file:`sr_exc.irp.f` -# The LDA and PBE *providers* for the x/c potentials on the AO basis in :file:`pot_ao.irp.f` and :file:`sr_pot_ao.irp.f` -# The :math:`h_{core}` energy computed directly with the one-body density matrix in :file:`one_e_energy_dft.irp.f` -# LDA and PBE short-range functionals *subroutines* in :file:`exc_sr_lda.irp.f` and :file:`exc_sr_pbe.irp.f` + +* The LDA and PBE *providers* for the x/c energies in :file:`e_xc.irp.f` and :file:`sr_exc.irp.f` +* The LDA and PBE *providers* for the x/c potentials on the AO basis in :file:`pot_ao.irp.f` and :file:`sr_pot_ao.irp.f` +* The :math:`h_{core}` energy computed directly with the one-body density matrix in :file:`one_e_energy_dft.irp.f` +* LDA and PBE short-range functionals *subroutines* in :file:`exc_sr_lda.irp.f` and :file:`exc_sr_pbe.irp.f` diff --git a/docs/source/modules/kohn_sham.rst b/docs/source/modules/kohn_sham.rst index 7498b062..822f2291 100644 --- a/docs/source/modules/kohn_sham.rst +++ b/docs/source/modules/kohn_sham.rst @@ -23,8 +23,9 @@ It performs the following actions: The definition of the Fock matrix is in :file:`kohn_sham fock_matrix_ks.irp.f` For the keywords related to the |SCF| procedure, see the ``scf_utils`` directory where you will find all options. The main are: -# :option:`scf_utils thresh_scf` -# :option:`scf_utils level_shift` + +#. :option:`scf_utils thresh_scf` +#. :option:`scf_utils level_shift` At each iteration, the |MOs| are saved in the |EZFIO| database. Hence, if the calculation crashes for any unexpected reason, the calculation can be restarted by running again diff --git a/docs/source/modules/mo_one_e_integrals.rst b/docs/source/modules/mo_one_e_integrals.rst index d4e14b41..37f2cea4 100644 --- a/docs/source/modules/mo_one_e_integrals.rst +++ b/docs/source/modules/mo_one_e_integrals.rst @@ -12,9 +12,9 @@ All the one-electron integrals in |MO| basis are defined here. The most important providers for usual quantum-chemistry calculation are: -# `mo_kinetic_integral` which are the kinetic operator integrals on the |AO| basis (see :file:`kin_mo_ints.irp.f`) -# `mo_nucl_elec_integral` which are the nuclear-elctron operator integrals on the |AO| basis (see :file:`pot_mo_ints.irp.f`) -# `mo_mono_elec_integral` which are the the h_core operator integrals on the |AO| basis (see :file:`mo_mono_ints.irp.f`) +* `mo_kinetic_integral` which are the kinetic operator integrals on the |AO| basis (see :file:`kin_mo_ints.irp.f`) +* `mo_nucl_elec_integral` which are the nuclear-elctron operator integrals on the |AO| basis (see :file:`pot_mo_ints.irp.f`) +* `mo_mono_elec_integral` which are the the h_core operator integrals on the |AO| basis (see :file:`mo_mono_ints.irp.f`) Note that you can find other interesting integrals related to the position operator in :file:`spread_dipole_mo.irp.f`. diff --git a/docs/source/modules/scf_utils.rst b/docs/source/modules/scf_utils.rst index cc24a1aa..2180c249 100644 --- a/docs/source/modules/scf_utils.rst +++ b/docs/source/modules/scf_utils.rst @@ -28,9 +28,8 @@ All SCF programs perform the following actions: The main keywords/options are: -# :option:`scf_utils thresh_scf` - -# :option:`scf_utils level_shift` +* :option:`scf_utils thresh_scf` +* :option:`scf_utils level_shift` At each iteration, the |MOs| are saved in the |EZFIO| database. Hence, if the calculation crashes for any unexpected reason, the calculation can be restarted by running again diff --git a/src/ao_one_e_integrals/README.rst b/src/ao_one_e_integrals/README.rst index 2d4c9660..8f9f5497 100644 --- a/src/ao_one_e_integrals/README.rst +++ b/src/ao_one_e_integrals/README.rst @@ -6,8 +6,9 @@ All the one-electron integrals in the |AO| basis are here. The most important providers for usual quantum-chemistry calculation are: -# `ao_kinetic_integral` which are the kinetic operator integrals on the |AO| basis (see :file:`kin_ao_ints.irp.f`) -# `ao_nucl_elec_integral` which are the nuclear-elctron operator integrals on the |AO| basis (see :file:`pot_ao_ints.irp.f`) -# `ao_mono_elec_integral` which are the the h_core operator integrals on the |AO| basis (see :file:`ao_mono_ints.irp.f`) +* `ao_kinetic_integral` which are the kinetic operator integrals on the |AO| basis (see :file:`kin_ao_ints.irp.f`) +* `ao_nucl_elec_integral` which are the nuclear-elctron operator integrals on the |AO| basis (see :file:`pot_ao_ints.irp.f`) +* `ao_mono_elec_integral` which are the the h_core operator integrals on the |AO| basis (see :file:`ao_mono_ints.irp.f`) + Note that you can find other interesting integrals related to the position operator in :file:`spread_dipole_ao.irp.f`. diff --git a/src/ao_two_e_erf_integrals/README.rst b/src/ao_two_e_erf_integrals/README.rst index df48c560..cf50e17b 100644 --- a/src/ao_two_e_erf_integrals/README.rst +++ b/src/ao_two_e_erf_integrals/README.rst @@ -9,7 +9,9 @@ in :file:`utils/map_module.f90`. The main parameter of this module is :option:`ao_two_e_erf_integrals mu_erf` which is the range-separation parameter. To fetch an |AO| integral, use the -`get_ao_bielec_integral_erf(i,j,k,l,ao_integrals_erf_map)` function, and +`get_ao_bielec_integral_erf(i,j,k,l,ao_integrals_erf_map)` function. + + The conventions are: * For |AO| integrals : (ij|kl) = (11|22) = = <12|12> diff --git a/src/ao_two_e_integrals/README.rst b/src/ao_two_e_integrals/README.rst index bb57c4a2..7c870e2b 100644 --- a/src/ao_two_e_integrals/README.rst +++ b/src/ao_two_e_integrals/README.rst @@ -7,7 +7,9 @@ As they have 4 indices and many are zero, they are stored in a map, as defined in :file:`utils/map_module.f90`. To fetch an |AO| integral, use the -`get_ao_bielec_integral(i,j,k,l,ao_integrals_map)` function, and +`get_ao_bielec_integral(i,j,k,l,ao_integrals_map)` function. + + The conventions are: * For |AO| integrals : (ij|kl) = (11|22) = = <12|12> diff --git a/src/aux_quantities/README.rst b/src/aux_quantities/README.rst index 7b7154fe..4ff4d296 100644 --- a/src/aux_quantities/README.rst +++ b/src/aux_quantities/README.rst @@ -7,7 +7,7 @@ This module contains some global variables (such as densities and energies) whic The main providers of that module are: -# `data_one_body_alpha_dm_mo` and `data_one_body_beta_dm_mo` which are the one-body alpha and beta densities which are necessary read from the EZFIO folder. +* `data_one_body_alpha_dm_mo` and `data_one_body_beta_dm_mo` which are the one-body alpha and beta densities which are necessary read from the EZFIO folder. Thanks to these providers you can use any density matrix that does not necessary corresponds to that of the current wave function. diff --git a/src/becke_numerical_grid/EZFIO.cfg b/src/becke_numerical_grid/EZFIO.cfg index ac76c70f..3b2c2625 100644 --- a/src/becke_numerical_grid/EZFIO.cfg +++ b/src/becke_numerical_grid/EZFIO.cfg @@ -1,16 +1,5 @@ -[n_points_integration_angular] +[grid_type_sgn] type: integer -doc: Number of angular points per atom for 3d numerical integration, needed for DFT for example [ 50 | 74 | 266 | 590 | 1202 | 2030 | 5810 ] +doc: Type of grid used for the Becke's numerical grid. Can be, by increasing accuracy: [ 0 | 1 | 2 | 3 ] interface: ezfio,provider,ocaml -default: 590 - - -[n_points_radial_grid] -type: integer -doc: Number of radial points per atom for 3d numerical integration, needed for DFT for example -interface: ezfio,provider,ocaml -default: 60 - - - - +default: 2 diff --git a/src/becke_numerical_grid/README.rst b/src/becke_numerical_grid/README.rst index b5019036..f739b059 100644 --- a/src/becke_numerical_grid/README.rst +++ b/src/becke_numerical_grid/README.rst @@ -4,14 +4,20 @@ becke_numerical_grid This module contains all quantities needed to build the Becke's grid used in general for DFT integration. Note that it can be used for whatever integration in R^3 as long as the functions to be integrated are mostly concentrated near the atomic regions. -This grid is built as the reunion of a spherical grid around each atom. Each spherical grid contains a certain number of radial and angular points. +This grid is built as the reunion of a spherical grid around each atom. Each spherical grid contains +a certain number of radial and angular points. No pruning is done on the angular part of the grid. + +The main keyword for that modue is: + +* :option:`becke_numerical_grid grid_type_sgn` which controls the precision of the grid according the standard **SG-n** grids. This keyword controls the two providers `n_points_integration_angular` `n_points_radial_grid`. The main providers of that module are: -# :option:`becke_numerical_grid n_points_integration_angular` which is the number of angular integration points. WARNING: it obeys to specific rules so it cannot be any integer number. Some of the possible values are [ 50 | 74 | 266 | 590 | 1202 | 2030 | 5810 ] for instance. See :file:`angular.f` for more details. -# :option:`becke_numerical_grid n_points_radial_grid` which is the number of radial angular points. This can be any strictly positive integer. Nevertheless, a minimum of 50 is in general necessary. -# `final_grid_points` which are the (x,y,z) coordinates of the grid points. -# `final_weight_at_r_vector` which are the weights at each grid point +* `n_points_integration_angular` which is the number of angular integration points. WARNING: it obeys to specific rules so it cannot be any integer number. Some of the possible values are [ 50 | 74 | 170 | 194 | 266 | 302 | 590 | 1202 | 2030 | 5810 ] for instance. See :file:`angular.f` for more details. +* `n_points_radial_grid` which is the number of radial angular points. This can be any strictly positive integer. Nevertheless, a minimum of 50 is in general necessary. +* `final_grid_points` which are the (x,y,z) coordinates of the grid points. +* `final_weight_at_r_vector` which are the weights at each grid point + For a simple example of how to use the grid, see :file:`example.irp.f`. diff --git a/src/becke_numerical_grid/grid_becke.irp.f b/src/becke_numerical_grid/grid_becke.irp.f index b2be30e7..ee66d835 100644 --- a/src/becke_numerical_grid/grid_becke.irp.f +++ b/src/becke_numerical_grid/grid_becke.irp.f @@ -1,3 +1,32 @@ + BEGIN_PROVIDER [integer, n_points_radial_grid] +&BEGIN_PROVIDER [integer, n_points_integration_angular] + implicit none + BEGIN_DOC + ! n_points_radial_grid = number of radial grid points per atom + ! + ! n_points_integration_angular = number of angular grid points per atom + ! + ! These numbers are automatically set by setting the grid_type_sgn parameter + END_DOC +select case (grid_type_sgn) + case(0) + n_points_radial_grid = 23 + n_points_integration_angular = 170 + case(1) + n_points_radial_grid = 50 + n_points_integration_angular = 194 + case(2) + n_points_radial_grid = 75 + n_points_integration_angular = 302 + case(3) + n_points_radial_grid = 99 + n_points_integration_angular = 590 + case default + write(*,*) '!!! Quadrature grid not available !!!' + stop + end select +END_PROVIDER + BEGIN_PROVIDER [integer, n_points_grid_per_atom] implicit none BEGIN_DOC @@ -42,9 +71,18 @@ END_PROVIDER case (0590) call LD0590(X,Y,Z,W,n_points_integration_angular) + case (302) + call LD0302(X,Y,Z,W,n_points_integration_angular) + case (266) call LD0266(X,Y,Z,W,n_points_integration_angular) + case (194) + call LD0194(X,Y,Z,W,n_points_integration_angular) + + case (170) + call LD0170(X,Y,Z,W,n_points_integration_angular) + case (74) call LD0074(X,Y,Z,W,n_points_integration_angular) @@ -53,7 +91,7 @@ END_PROVIDER case default print *, irp_here//': wrong n_points_integration_angular. Expected:' - print *, '[ 50 | 74 | 266 | 590 | 1202 | 2030 | 5810 ]' + print *, '[ 50 | 74 | 170 | 194 | 266 | 302 | 590 | 1202 | 2030 | 5810 ]' stop -1 end select diff --git a/src/density_for_dft/README.rst b/src/density_for_dft/README.rst index 24166855..962863ce 100644 --- a/src/density_for_dft/README.rst +++ b/src/density_for_dft/README.rst @@ -7,6 +7,6 @@ This module defines the *provider* of the density used for the DFT related calcu This definition is done through the keyword :option:`density_for_dft density_for_dft`. The density can be: -# WFT : the density is computed with a potentially multi determinant wave function (see variables `psi_det` and `psi_det`)# input_density : the density is set to a density previously stored in the |EZFIO| folder (see ``aux_quantities``) -# damping_rs_dft : the density is damped between the input_density and the WFT density, with a damping factor of :option:`density_for_dft damping_for_rs_dft` +* WFT : the density is computed with a potentially multi determinant wave function (see variables `psi_det` and `psi_det`)# input_density : the density is set to a density previously stored in the |EZFIO| folder (see ``aux_quantities``) +* damping_rs_dft : the density is damped between the input_density and the WFT density, with a damping factor of :option:`density_for_dft damping_for_rs_dft` diff --git a/src/determinants/README.rst b/src/determinants/README.rst index 537464b7..9da056ff 100644 --- a/src/determinants/README.rst +++ b/src/determinants/README.rst @@ -6,16 +6,16 @@ Contains everything for the computation of the Hamiltonian matrix elements in th The main providers for this module are: -# :option:`determinants n_states`: number of states to be computed -# `psi_det`: list of determinants in the wave function used in many routines/providers of the |QP|. -# `psi_coef`: list of coefficients, for all :option:`determinants n_states` states, and all determinants. +* :option:`determinants n_states`: number of states to be computed +* `psi_det`: list of determinants in the wave function used in many routines/providers of the |QP|. +* `psi_coef`: list of coefficients, for all :option:`determinants n_states` states, and all determinants. The main routines for this module are: -# `i_H_j`: computes the Hamiltonian matrix element between two arbitrary Slater determinants. -# `i_H_j_s2`: computes the Hamiltonian and (:math:`S^2`) matrix element between two arbitrary Slater determinants. -# `i_H_j_verbose`: returns the decomposition in terms of one- and two-body components of the Hamiltonian matrix elements between two arbitrary Slater determinants. Also return the fermionic phase factor. -# `i_H_psi`: computes the Hamiltonian matrix element between an arbitrary Slater determinant and a wave function composed of a sum of arbitrary Slater determinants. +* `i_H_j`: computes the Hamiltonian matrix element between two arbitrary Slater determinants. +* `i_H_j_s2`: computes the Hamiltonian and (:math:`S^2`) matrix element between two arbitrary Slater determinants. +* `i_H_j_verbose`: returns the decomposition in terms of one- and two-body components of the Hamiltonian matrix elements between two arbitrary Slater determinants. Also return the fermionic phase factor. +* `i_H_psi`: computes the Hamiltonian matrix element between an arbitrary Slater determinant and a wave function composed of a sum of arbitrary Slater determinants. For an example of how to use these routines and providers, take a look at :file:`example.irp.f`. diff --git a/src/dft_keywords/README.rst b/src/dft_keywords/README.rst index 89980d79..34fa874f 100644 --- a/src/dft_keywords/README.rst +++ b/src/dft_keywords/README.rst @@ -4,10 +4,10 @@ dft_keywords This module contains the main keywords related to a DFT calculation or RS-DFT calculation, such as: -# :option:`dft_keywords exchange_functional` -# :option:`dft_keywords correlation_functional` -# :option:`dft_keywords HF_exchange` : only relevent for the :ref:`ks_scf` program +* :option:`dft_keywords exchange_functional` +* :option:`dft_keywords correlation_functional` +* :option:`dft_keywords HF_exchange` : only relevent for the :ref:`ks_scf` program -The keyword for the range separation parameter :math:`\mu` is the :option:`ao_two_e_erf_integrals mu_erf` keyword. +The keyword for the **range separation parameter** :math:`\mu` is the :option:`ao_two_e_erf_integrals mu_erf` keyword. The keyword for the type of density used in RS-DFT calculation with a multi-configurational wave function is the :option:`density_for_dft density_for_dft` keyword. diff --git a/src/dft_utils_in_r/README.rst b/src/dft_utils_in_r/README.rst index 0b082339..d4c4a178 100644 --- a/src/dft_utils_in_r/README.rst +++ b/src/dft_utils_in_r/README.rst @@ -8,7 +8,7 @@ As these quantities might be used and re-used, the values at each point of the g The main providers for this module are: -# `aos_in_r_array`: values of the |AO| basis on the grid point. -# `mos_in_r_array`: values of the |MO| basis on the grid point. -# `one_dm_and_grad_alpha_in_r`: values of the density and its gradienst on the grid points. +* `aos_in_r_array`: values of the |AO| basis on the grid point. +* `mos_in_r_array`: values of the |MO| basis on the grid point. +* `one_dm_and_grad_alpha_in_r`: values of the density and its gradienst on the grid points. diff --git a/src/dft_utils_one_e/README.rst b/src/dft_utils_one_e/README.rst index 96bbd211..723719b9 100644 --- a/src/dft_utils_one_e/README.rst +++ b/src/dft_utils_one_e/README.rst @@ -6,16 +6,19 @@ This module contains all the one-body related quantities needed to perform DFT o Therefore, it contains most of the properties which depends on the one-body density and density matrix. The most important files and variables are: -# The general *providers* for the x/c energies in :file:`e_xc_general.irp.f` -# The general *providers* for the x/c potentials in :file:`pot_general.irp.f` -# The short-range hartree operator and all related quantities in :file:`sr_coulomb.irp.f` + +* The general *providers* for the x/c energies in :file:`e_xc_general.irp.f` +* The general *providers* for the x/c potentials in :file:`pot_general.irp.f` +* The short-range hartree operator and all related quantities in :file:`sr_coulomb.irp.f` + These *providers* will be used in many DFT-related programs, such as :file:`ks_scf.irp.f` or :file:`rs_ks_scf.irp.f`. It is also needed to compute the effective one-body operator needed in multi-determinant RS-DFT (see plugins by eginer). Some other interesting quantities: -# The LDA and PBE *providers* for the x/c energies in :file:`e_xc.irp.f` and :file:`sr_exc.irp.f` -# The LDA and PBE *providers* for the x/c potentials on the AO basis in :file:`pot_ao.irp.f` and :file:`sr_pot_ao.irp.f` -# The :math:`h_{core}` energy computed directly with the one-body density matrix in :file:`one_e_energy_dft.irp.f` -# LDA and PBE short-range functionals *subroutines* in :file:`exc_sr_lda.irp.f` and :file:`exc_sr_pbe.irp.f` + +* The LDA and PBE *providers* for the x/c energies in :file:`e_xc.irp.f` and :file:`sr_exc.irp.f` +* The LDA and PBE *providers* for the x/c potentials on the AO basis in :file:`pot_ao.irp.f` and :file:`sr_pot_ao.irp.f` +* The :math:`h_{core}` energy computed directly with the one-body density matrix in :file:`one_e_energy_dft.irp.f` +* LDA and PBE short-range functionals *subroutines* in :file:`exc_sr_lda.irp.f` and :file:`exc_sr_pbe.irp.f` diff --git a/src/hartree_fock/scf.irp.f b/src/hartree_fock/scf.irp.f index c8e474c0..9cf8abcf 100644 --- a/src/hartree_fock/scf.irp.f +++ b/src/hartree_fock/scf.irp.f @@ -5,6 +5,10 @@ program scf ! output: hartree_fock.energy ! optional: mo_basis.mo_coef END_DOC + disk_access_mo_one_integrals = "None" + touch disk_access_mo_one_integrals + disk_access_ao_one_integrals = "None" + touch disk_access_ao_one_integrals call create_guess call orthonormalize_mos call run diff --git a/src/hartree_fock/scf_old.irp.f b/src/hartree_fock/scf_old.irp.f index c6f69191..1f828154 100644 --- a/src/hartree_fock/scf_old.irp.f +++ b/src/hartree_fock/scf_old.irp.f @@ -5,6 +5,11 @@ program scf ! output: hartree_fock.energy ! optional: mo_basis.mo_coef END_DOC + disk_access_mo_one_integrals = "None" + touch disk_access_mo_one_integrals + disk_access_ao_one_integrals = "None" + touch disk_access_ao_one_integrals + call create_guess call orthonormalize_mos call run diff --git a/src/kohn_sham/README.rst b/src/kohn_sham/README.rst index 2b6bd7bc..83e8d1f8 100644 --- a/src/kohn_sham/README.rst +++ b/src/kohn_sham/README.rst @@ -17,8 +17,9 @@ It performs the following actions: The definition of the Fock matrix is in :file:`kohn_sham fock_matrix_ks.irp.f` For the keywords related to the |SCF| procedure, see the ``scf_utils`` directory where you will find all options. The main are: -# :option:`scf_utils thresh_scf` -# :option:`scf_utils level_shift` + +#. :option:`scf_utils thresh_scf` +#. :option:`scf_utils level_shift` At each iteration, the |MOs| are saved in the |EZFIO| database. Hence, if the calculation crashes for any unexpected reason, the calculation can be restarted by running again diff --git a/src/kohn_sham/ks_scf.irp.f b/src/kohn_sham/ks_scf.irp.f index aad5527e..47dc2e73 100644 --- a/src/kohn_sham/ks_scf.irp.f +++ b/src/kohn_sham/ks_scf.irp.f @@ -5,6 +5,11 @@ program srs_ks_cf ! output: kohn_sham.energy ! optional: mo_basis.mo_coef END_DOC + + disk_access_mo_one_integrals = "None" + touch disk_access_mo_one_integrals + disk_access_ao_one_integrals = "None" + touch disk_access_ao_one_integrals read_wf = .False. density_for_dft ="WFT" touch density_for_dft diff --git a/src/kohn_sham_rs/rs_ks_scf.irp.f b/src/kohn_sham_rs/rs_ks_scf.irp.f index afa5d9bc..bb98c22c 100644 --- a/src/kohn_sham_rs/rs_ks_scf.irp.f +++ b/src/kohn_sham_rs/rs_ks_scf.irp.f @@ -5,6 +5,12 @@ program srs_ks_cf ! output: kohn_sham.energy ! optional: mo_basis.mo_coef END_DOC + + disk_access_mo_one_integrals = "None" + touch disk_access_mo_one_integrals + disk_access_ao_one_integrals = "None" + touch disk_access_ao_one_integrals + read_wf = .False. density_for_dft ="WFT" touch density_for_dft diff --git a/src/mo_one_e_integrals/README.rst b/src/mo_one_e_integrals/README.rst index 15faedf7..f947de06 100644 --- a/src/mo_one_e_integrals/README.rst +++ b/src/mo_one_e_integrals/README.rst @@ -6,8 +6,8 @@ All the one-electron integrals in |MO| basis are defined here. The most important providers for usual quantum-chemistry calculation are: -# `mo_kinetic_integral` which are the kinetic operator integrals on the |AO| basis (see :file:`kin_mo_ints.irp.f`) -# `mo_nucl_elec_integral` which are the nuclear-elctron operator integrals on the |AO| basis (see :file:`pot_mo_ints.irp.f`) -# `mo_mono_elec_integral` which are the the h_core operator integrals on the |AO| basis (see :file:`mo_mono_ints.irp.f`) +* `mo_kinetic_integral` which are the kinetic operator integrals on the |AO| basis (see :file:`kin_mo_ints.irp.f`) +* `mo_nucl_elec_integral` which are the nuclear-elctron operator integrals on the |AO| basis (see :file:`pot_mo_ints.irp.f`) +* `mo_mono_elec_integral` which are the the h_core operator integrals on the |AO| basis (see :file:`mo_mono_ints.irp.f`) Note that you can find other interesting integrals related to the position operator in :file:`spread_dipole_mo.irp.f`. diff --git a/src/scf_utils/README.rst b/src/scf_utils/README.rst index 62103f19..6d02021f 100644 --- a/src/scf_utils/README.rst +++ b/src/scf_utils/README.rst @@ -22,9 +22,8 @@ All SCF programs perform the following actions: The main keywords/options are: -# :option:`scf_utils thresh_scf` - -# :option:`scf_utils level_shift` +* :option:`scf_utils thresh_scf` +* :option:`scf_utils level_shift` At each iteration, the |MOs| are saved in the |EZFIO| database. Hence, if the calculation crashes for any unexpected reason, the calculation can be restarted by running again From 75ca9b2160f4b69bd267c7214e6b83dd19a0c34d Mon Sep 17 00:00:00 2001 From: Emmanuel Giner Date: Wed, 2 Jan 2019 16:10:15 +0100 Subject: [PATCH 11/16] added 21.rsks.bats --- docs/source/intro/intro.rst | 5 +- docs/source/modules/becke_numerical_grid.rst | 54 ++++++++++++++----- docs/source/modules/tools.rst | 14 +++++ .../programmers_guide/index_providers.rst | 2 + docs/source/research.bib | 14 +++++ .../grid_becke_vector.irp.f | 2 +- src/cis/cis.irp.f | 6 +++ src/dft_utils_one_e/sr_pot_ao.irp.f | 1 - src/hartree_fock/scf.irp.f | 1 + src/kohn_sham_rs/21.rsks.bats | 37 +++++++++++++ src/kohn_sham_rs/rs_ks_scf.irp.f | 4 +- src/scf_utils/roothaan_hall_scf.irp.f | 4 +- 12 files changed, 124 insertions(+), 20 deletions(-) create mode 100644 src/kohn_sham_rs/21.rsks.bats diff --git a/docs/source/intro/intro.rst b/docs/source/intro/intro.rst index a0a76c05..b5872309 100644 --- a/docs/source/intro/intro.rst +++ b/docs/source/intro/intro.rst @@ -55,14 +55,17 @@ Multiple programs were developed with the |qp|, such as: - Selected Full-CI + Epstein-Nesbet PT2 (CIPSI) :cite:`Caffarel_2016,Caffarel_2016.2,Loos_2018,Scemama_2018,Dash_2018` - Hybrid stochastic/deterministic MR-PT2 :cite:`Garniron_2017.2,Loos_2018` +- Orbital optimization for open-shell systems :cite:`Giner2016Mar,Giner_2017.3` - CIS, CISD, MP2 - Selected CISD - Jeziorsky-Monkhorst MR-PT2 :cite:`Giner_2017` +- Effective Hamiltonian for variational MR wave functions :cite:`Giner_2017.2` - Selected CAS+SD - Selected difference-dedicated CI (DD-CI) - Multi-Reference Coupled Cluster (MR-CCSD) :cite:`Giner_2016,Garniron_2017` - Shifted-Bk with CIPSI :cite:`Garniron_2018` -- CIPSI with range-separated DFT +- CIPSI with range-separated DFT (plugins at ``_) +- DFT for basis set corrections :cite:`Giner_2018` All these programs can generate ground and excited states, and spin pure wave functions (eigenstates of |S^2|). diff --git a/docs/source/modules/becke_numerical_grid.rst b/docs/source/modules/becke_numerical_grid.rst index d83dee68..f842c0ca 100644 --- a/docs/source/modules/becke_numerical_grid.rst +++ b/docs/source/modules/becke_numerical_grid.rst @@ -10,13 +10,17 @@ becke_numerical_grid This module contains all quantities needed to build the Becke's grid used in general for DFT integration. Note that it can be used for whatever integration in R^3 as long as the functions to be integrated are mostly concentrated near the atomic regions. -This grid is built as the reunion of a spherical grid around each atom. Each spherical grid contains a certain number of radial and angular points. +This grid is built as the reunion of a spherical grid around each atom. Each spherical grid contains +a certain number of radial and angular points. No pruning is done on the angular part of the grid. +The main keyword for that modue is: + +* :option:`becke_numerical_grid grid_type_sgn` which controls the precision of the grid according the standard **SG-n** grids. This keyword controls the two providers `n_points_integration_angular` `n_points_radial_grid`. The main providers of that module are: -* :option:`becke_numerical_grid n_points_integration_angular` which is the number of angular integration points. WARNING: it obeys to specific rules so it cannot be any integer number. Some of the possible values are [ 50 | 74 | 266 | 590 | 1202 | 2030 | 5810 ] for instance. See :file:`angular.f` for more details. -* :option:`becke_numerical_grid n_points_radial_grid` which is the number of radial angular points. This can be any strictly positive integer. Nevertheless, a minimum of 50 is in general necessary. +* `n_points_integration_angular` which is the number of angular integration points. WARNING: it obeys to specific rules so it cannot be any integer number. Some of the possible values are [ 50 | 74 | 170 | 194 | 266 | 302 | 590 | 1202 | 2030 | 5810 ] for instance. See :file:`angular.f` for more details. +* `n_points_radial_grid` which is the number of radial angular points. This can be any strictly positive integer. Nevertheless, a minimum of 50 is in general necessary. * `final_grid_points` which are the (x,y,z) coordinates of the grid points. * `final_weight_at_r_vector` which are the weights at each grid point @@ -78,17 +82,11 @@ See next section for explanations and citation policies. EZFIO parameters ---------------- -.. option:: n_points_integration_angular +.. option:: grid_type_sgn - Number of angular points per atom for 3d numerical integration, needed for DFT for example [ 50 | 74 | 266 | 590 | 1202 | 2030 | 5810 ] + Type of grid used for the Becke's numerical grid. Can be, by increasing accuracy: [ 0 | 1 | 2 | 3 ] - Default: 590 - -.. option:: n_points_radial_grid - - Number of radial points per atom for 3d numerical integration, needed for DFT for example - - Default: 60 + Default: 2 Providers @@ -291,6 +289,38 @@ Providers +.. c:var:: n_points_integration_angular + + .. code:: text + + integer :: n_points_radial_grid + integer :: n_points_integration_angular + + File: :file:`grid_becke.irp.f` + + n_points_radial_grid = number of radial grid points per atom + n_points_integration_angular = number of angular grid points per atom + These numbers are automatically set by setting the grid_type_sgn parameter + + + + +.. c:var:: n_points_radial_grid + + .. code:: text + + integer :: n_points_radial_grid + integer :: n_points_integration_angular + + File: :file:`grid_becke.irp.f` + + n_points_radial_grid = number of radial grid points per atom + n_points_integration_angular = number of angular grid points per atom + These numbers are automatically set by setting the grid_type_sgn parameter + + + + .. c:var:: weight_at_r .. code:: text diff --git a/docs/source/modules/tools.rst b/docs/source/modules/tools.rst index d9eb8f11..a482ae31 100644 --- a/docs/source/modules/tools.rst +++ b/docs/source/modules/tools.rst @@ -73,6 +73,20 @@ Subroutines / functions +.. c:function:: print_r2 + + .. code:: text + + subroutine print_r2 + + File: :file:`print_r2.irp.f` + + + + + + + .. c:function:: print_wf .. code:: text diff --git a/docs/source/programmers_guide/index_providers.rst b/docs/source/programmers_guide/index_providers.rst index f8c208bb..9712c9d7 100644 --- a/docs/source/programmers_guide/index_providers.rst +++ b/docs/source/programmers_guide/index_providers.rst @@ -258,6 +258,7 @@ Index of Providers * :c:data:`grad_aos_dvx_beta_pbe_w` * :c:data:`grid_points_per_atom` * :c:data:`grid_points_radial` +* :c:data:`grid_type_sgn` * :c:data:`h0_type` * :c:data:`h_apply_buffer_allocated` * :c:data:`h_apply_buffer_lock` @@ -1156,6 +1157,7 @@ Index of Subroutines/Functions * :c:func:`print_generators_bitmasks_particles` * :c:func:`print_generators_bitmasks_particles_for_one_generator` * :c:func:`print_memory_usage` +* :c:func:`print_r2` * :c:func:`print_spindet` * :c:func:`print_summary` * :c:func:`print_wf` diff --git a/docs/source/research.bib b/docs/source/research.bib index 28b072a9..1676cf24 100644 --- a/docs/source/research.bib +++ b/docs/source/research.bib @@ -177,6 +177,20 @@ title = {Orthogonal Valence Bond Hamiltonians incorporating dynamical correlation effects}, journal = {Computational and Theoretical Chemistry} } + +@article{Giner_2017.3, +author = {Giner, Emmanuel and Tenti, Lorenzo and Angeli, Celestino and Ferré, Nicolas}, +title = {Computation of the Isotropic Hyperfine Coupling Constant: Efficiency and Insights from a New Approach Based on Wave Function Theory}, +journal = {Journal of Chemical Theory and Computation}, +volume = {13}, +number = {2}, +pages = {475-487}, +year = {2017}, +doi = {10.1021/acs.jctc.6b00827}, +note ={PMID: 28094936}, +URL = {https://doi.org/10.1021/acs.jctc.6b00827}, +eprint = {https://doi.org/10.1021/acs.jctc.6b00827} +} @article{Giner2016Mar, author = {Giner, Emmanuel and Angeli, Celestino}, title = {{Spin density and orbital optimization in open shell systems: A rational and computationally efficient proposal}}, diff --git a/src/becke_numerical_grid/grid_becke_vector.irp.f b/src/becke_numerical_grid/grid_becke_vector.irp.f index cf86121a..2655c100 100644 --- a/src/becke_numerical_grid/grid_becke_vector.irp.f +++ b/src/becke_numerical_grid/grid_becke_vector.irp.f @@ -20,7 +20,7 @@ BEGIN_PROVIDER [integer, n_points_final_grid] enddo enddo print*,'n_points_final_grid = ',n_points_final_grid - print*,'n max point = ',n_points_integration_angular*n_points_radial_grid*nucl_num + print*,'n max point = ',n_points_integration_angular*(n_points_radial_grid*nucl_num - 1) END_PROVIDER BEGIN_PROVIDER [double precision, final_grid_points, (3,n_points_final_grid)] diff --git a/src/cis/cis.irp.f b/src/cis/cis.irp.f index fab81736..55d34cce 100644 --- a/src/cis/cis.irp.f +++ b/src/cis/cis.irp.f @@ -18,6 +18,12 @@ subroutine run print *, 'energy = ',CI_energy(i) print *, 'E_corr = ',CI_electronic_energy(i) - ref_bitmask_energy enddo + print*,'******************************' + print*,'Excitation energy ' + do i = 2, N_states + print*, i ,CI_energy(i) - CI_energy(1) + enddo + call ezfio_set_cis_energy(CI_energy) psi_coef = ci_eigenvectors SOFT_TOUCH psi_coef diff --git a/src/dft_utils_one_e/sr_pot_ao.irp.f b/src/dft_utils_one_e/sr_pot_ao.irp.f index 1b786cac..36fa3f47 100644 --- a/src/dft_utils_one_e/sr_pot_ao.irp.f +++ b/src/dft_utils_one_e/sr_pot_ao.irp.f @@ -52,7 +52,6 @@ call dgemm('N','N',ao_num,ao_num,n_points_final_grid,1.d0,aos_in_r_array,ao_num,aos_sr_vx_beta_LDA_w(1,1,istate) ,n_points_final_grid,0.d0,potential_sr_x_beta_ao_LDA(1,1,istate),ao_num) enddo call wall_time(wall_2) - print*,'time to provide potential_sr_x/c_alpha/beta_ao_LDA = ',wall_2 - wall_1 END_PROVIDER diff --git a/src/hartree_fock/scf.irp.f b/src/hartree_fock/scf.irp.f index 9cf8abcf..d735bb89 100644 --- a/src/hartree_fock/scf.irp.f +++ b/src/hartree_fock/scf.irp.f @@ -58,6 +58,7 @@ subroutine run ! Choose SCF algorithm call Roothaan_Hall_SCF + call ezfio_set_hartree_fock_energy(SCF_energy) end diff --git a/src/kohn_sham_rs/21.rsks.bats b/src/kohn_sham_rs/21.rsks.bats new file mode 100644 index 00000000..e0d62d10 --- /dev/null +++ b/src/kohn_sham_rs/21.rsks.bats @@ -0,0 +1,37 @@ +#!/usr/bin/env bats + +source $QP_ROOT/tests/bats/common.bats.sh + + +function run() { + thresh=1.e-8 + qp_edit -c $1 + ezfio set_file $1 + ezfio set scf_utils thresh_scf 1.e-10 + echo "short_range_PBE" > $1/dft_keywords/exchange_functional + echo "short_range_PBE" > $1/dft_keywords/correlation_functional + echo "0.5" > $1/ao_two_e_erf_integrals/mu_erf + echo "1" > $1/becke_numerical_grid/grid_type_sgn + qp_run rs_ks_scf $1 + energy="$(ezfio get kohn_sham_rs energy)" + eq $energy $2 $thresh +} + + + +@test "H3COH" { + run h3coh.ezfio -115.50238225208 +} + +@test "HCN" { + run hcn.ezfio -93.26674673761752 +} + +@test "N2" { + run n2.ezfio -109.404692225719 +} + +@test "SiH2_3B1" { + run sih2_3b1.ezfio -290.371745382958 +} + diff --git a/src/kohn_sham_rs/rs_ks_scf.irp.f b/src/kohn_sham_rs/rs_ks_scf.irp.f index bb98c22c..1305a2f8 100644 --- a/src/kohn_sham_rs/rs_ks_scf.irp.f +++ b/src/kohn_sham_rs/rs_ks_scf.irp.f @@ -92,10 +92,8 @@ subroutine run mo_label = "Canonical" -! Choose SCF algorithm - -! call damping_SCF ! Deprecated routine call Roothaan_Hall_SCF + call ezfio_set_kohn_sham_rs_energy(SCF_energy) write(*, '(A22,X,F16.10)') 'one_electron_energy = ',one_electron_energy write(*, '(A22,X,F16.10)') 'two_electron_energy = ',two_electron_energy diff --git a/src/scf_utils/roothaan_hall_scf.irp.f b/src/scf_utils/roothaan_hall_scf.irp.f index 460ebcf6..3b217b7e 100644 --- a/src/scf_utils/roothaan_hall_scf.irp.f +++ b/src/scf_utils/roothaan_hall_scf.irp.f @@ -158,8 +158,8 @@ END_DOC call save_mos endif - call write_double(6, Energy_SCF, 'Hartree-Fock energy') - call ezfio_set_hartree_fock_energy(Energy_SCF) + call write_double(6, Energy_SCF, 'SCF energy ') +! call ezfio_set_hartree_fock_energy(Energy_SCF) call write_time(6) From a45a5a9690c15e739cfd62292098da76e7a55aca Mon Sep 17 00:00:00 2001 From: Emmanuel Giner Date: Thu, 3 Jan 2019 13:23:38 +0100 Subject: [PATCH 12/16] added EZFIO.cfg --- src/kohn_sham_rs/EZFIO.cfg | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/kohn_sham_rs/EZFIO.cfg diff --git a/src/kohn_sham_rs/EZFIO.cfg b/src/kohn_sham_rs/EZFIO.cfg new file mode 100644 index 00000000..020d6564 --- /dev/null +++ b/src/kohn_sham_rs/EZFIO.cfg @@ -0,0 +1,5 @@ +[energy] +type: Threshold +doc: Energy range separated hybrid +interface: ezfio + From d924386eed5b2d8907aff2bc186d9134b9f18dbc Mon Sep 17 00:00:00 2001 From: Emmanuel Giner Date: Fri, 4 Jan 2019 02:17:55 +0100 Subject: [PATCH 13/16] added qp_e_conv_fci and print_e_conv.irp.f --- docs/source/index.rst | 2 +- docs/source/intro/intro.rst | 14 +++- docs/source/modules/ao_one_e_integrals.rst | 4 +- docs/source/modules/becke_numerical_grid.rst | 80 ------------------ docs/source/modules/hartree_fock.rst | 2 + docs/source/modules/kohn_sham.rst | 17 ---- docs/source/modules/kohn_sham_rs.rst | 2 +- docs/source/modules/perturbation.rst | 56 ++----------- .../programmers_guide/index_providers.rst | 8 +- docs/source/users_guide/quickstart.rst | 5 +- scripts/qp_e_conv_fci | 81 +++++++------------ src/ao_one_e_integrals/pot_ao_erf_ints.irp.f | 4 +- src/iterations/NEED | 1 - src/tools/print_e_conv.irp.f | 71 ++++++++++++++++ src/tools/print_wf.irp.f | 4 +- 15 files changed, 135 insertions(+), 216 deletions(-) create mode 100644 src/tools/print_e_conv.irp.f diff --git a/docs/source/index.rst b/docs/source/index.rst index 6272a119..0e068bd3 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -12,8 +12,8 @@ :caption: Introduction :hidden: - intro/selected_ci intro/install + intro/selected_ci .. toctree:: :maxdepth: 1 diff --git a/docs/source/intro/intro.rst b/docs/source/intro/intro.rst index b5872309..23a3c699 100644 --- a/docs/source/intro/intro.rst +++ b/docs/source/intro/intro.rst @@ -11,8 +11,18 @@ The |qp| What it is ========== -The |qp| is an open-source programming environment for quantum chemistry, -especially for `wave function theory `_ (|WFT|). +The |qp| is an open-source **programming environment** for quantum chemistry. +It has been built from the **developper** point of view in order to help +the design of new quantum chemistry methods, +especially for `wave function theory `_ (|WFT|). + +From the **user** point of view, the |qp| proposes a stand-alone path +to use optimized selected configuration interaction |sCI| based on the +|CIPSI| algorithm that can efficiently reach near-full configuration interaction +|FCI| quality for relatively large systems (see for instance :cite:`Caffarel_2016,Caffarel_2016.2,Loos_2018,Scemama_2018,Dash_2018,Garniron_2017.2,Loos_2018,Garniron_2018,Giner2018Oct`). +To have a simple example of how to use the |CIPSI| program, go to the `users_guide/quickstart. + + The main goal is the development of selected configuration interaction |sCI| methods and multi-reference perturbation theory |MRPT| in the determinant-driven paradigm. It also contains the very basics of Kohn-Sham `density functional theory `_ |KS-DFT| and `range-separated hybrids `_ |RSH|. diff --git a/docs/source/modules/ao_one_e_integrals.rst b/docs/source/modules/ao_one_e_integrals.rst index aa1c19ed..abdf5266 100644 --- a/docs/source/modules/ao_one_e_integrals.rst +++ b/docs/source/modules/ao_one_e_integrals.rst @@ -786,7 +786,7 @@ Subroutines / functions File: :file:`pot_ao_erf_ints.irp.f` - subroutine that returs all integrals over r of type erf(mu_in * | r-C_center |)/| r-C_center | + subroutine that returs all integrals over r of type erf(mu_in * | r-C_center | )/| r-C_center | @@ -890,7 +890,7 @@ Subroutines / functions File: :file:`pot_ao_erf_ints.irp.f` - computes the following integral : int[-infty;+infty] dr AO_i_ao (r) AO_j_ao(r) erf(mu_in * | r-C_center |)/| r-C_center | + computes the following integral : int[-infty;+infty] dr AO_i_ao (r) AO_j_ao(r) erf(mu_in * | r-C_center | )/| r-C_center | diff --git a/docs/source/modules/becke_numerical_grid.rst b/docs/source/modules/becke_numerical_grid.rst index 27e90dd2..1c77b50d 100644 --- a/docs/source/modules/becke_numerical_grid.rst +++ b/docs/source/modules/becke_numerical_grid.rst @@ -146,9 +146,6 @@ Providers File: :file:`grid_becke_vector.irp.f` final_grid_points(1:3,j) = (/ x, y, z /) of the jth grid point -<<<<<<< HEAD - final_weight_at_r_vector(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions -======= final_weight_at_r_vector(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions @@ -187,7 +184,6 @@ Providers final_weight_at_r_vector(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions ->>>>>>> 36234f0822384b0bce01530d210522e7975b759b index_final_points(1:3,i) = gives the angular, radial and atomic indices associated to the ith grid point index_final_points_reverse(i,j,k) = index of the grid point having i as angular, j as radial and l as atomic indices @@ -195,48 +191,6 @@ Providers -.. c:var:: final_weight_at_r - - .. code:: text - - double precision, allocatable :: final_weight_at_r (n_points_integration_angular,n_points_radial_grid,nucl_num) - - File: :file:`grid_becke.irp.f` - -<<<<<<< HEAD - Total weight on each grid point which takes into account all Lebedev, Voronoi and radial weights. -======= - final_grid_points(1:3,j) = (/ x, y, z /) of the jth grid point - - final_weight_functions_at_final_grid_points(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions - - index_final_points(1:3,i) = gives the angular, radial and atomic indices associated to the ith grid point - - index_final_points_reverse(i,j,k) = index of the grid point having i as angular, j as radial and l as atomic indices ->>>>>>> 36234f0822384b0bce01530d210522e7975b759b - - - - -.. c:var:: final_weight_at_r_vector - - .. code:: text - - double precision, allocatable :: final_grid_points (3,n_points_final_grid) - double precision, allocatable :: final_weight_at_r_vector (n_points_final_grid) - integer, allocatable :: index_final_points (3,n_points_final_grid) - integer, allocatable :: index_final_points_reverse (n_points_integration_angular,n_points_radial_grid,nucl_num) - - File: :file:`grid_becke_vector.irp.f` - - final_grid_points(1:3,j) = (/ x, y, z /) of the jth grid point - final_weight_at_r_vector(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions - index_final_points(1:3,i) = gives the angular, radial and atomic indices associated to the ith grid point - index_final_points_reverse(i,j,k) = index of the grid point having i as angular, j as radial and l as atomic indices - - - - .. c:var:: grid_points_per_atom .. code:: text @@ -276,13 +230,9 @@ Providers File: :file:`grid_becke_vector.irp.f` final_grid_points(1:3,j) = (/ x, y, z /) of the jth grid point -<<<<<<< HEAD - final_weight_at_r_vector(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions -======= final_weight_at_r_vector(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions ->>>>>>> 36234f0822384b0bce01530d210522e7975b759b index_final_points(1:3,i) = gives the angular, radial and atomic indices associated to the ith grid point index_final_points_reverse(i,j,k) = index of the grid point having i as angular, j as radial and l as atomic indices @@ -302,13 +252,9 @@ Providers File: :file:`grid_becke_vector.irp.f` final_grid_points(1:3,j) = (/ x, y, z /) of the jth grid point -<<<<<<< HEAD - final_weight_at_r_vector(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions -======= final_weight_at_r_vector(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions ->>>>>>> 36234f0822384b0bce01530d210522e7975b759b index_final_points(1:3,i) = gives the angular, radial and atomic indices associated to the ith grid point index_final_points_reverse(i,j,k) = index of the grid point having i as angular, j as radial and l as atomic indices @@ -365,13 +311,9 @@ Providers File: :file:`grid_becke.irp.f` n_points_radial_grid = number of radial grid points per atom -<<<<<<< HEAD - n_points_integration_angular = number of angular grid points per atom -======= n_points_integration_angular = number of angular grid points per atom ->>>>>>> 36234f0822384b0bce01530d210522e7975b759b These numbers are automatically set by setting the grid_type_sgn parameter @@ -387,37 +329,15 @@ Providers File: :file:`grid_becke.irp.f` n_points_radial_grid = number of radial grid points per atom -<<<<<<< HEAD - n_points_integration_angular = number of angular grid points per atom -======= n_points_integration_angular = number of angular grid points per atom ->>>>>>> 36234f0822384b0bce01530d210522e7975b759b These numbers are automatically set by setting the grid_type_sgn parameter .. c:var:: weight_at_r -<<<<<<< HEAD -======= - - .. code:: text - - double precision, allocatable :: weight_at_r (n_points_integration_angular,n_points_radial_grid,nucl_num) - - File: :file:`grid_becke.irp.f` - - Weight function at grid points : w_n(r) according to the equation (22) of Becke original paper (JCP, 88, 1988) - - The "n" discrete variable represents the nucleis which in this array is represented by the last dimension and the points are labelled by the other dimensions. - - - - -.. c:var:: weight_functions_at_grid_points ->>>>>>> 36234f0822384b0bce01530d210522e7975b759b .. code:: text diff --git a/docs/source/modules/hartree_fock.rst b/docs/source/modules/hartree_fock.rst index e09b1705..37c48151 100644 --- a/docs/source/modules/hartree_fock.rst +++ b/docs/source/modules/hartree_fock.rst @@ -100,7 +100,9 @@ Providers File: :file:`hf_energy.irp.f` Extra contribution to the SCF energy coming from the density. + For a Hartree-Fock calculation: extra_e_contrib_density = 0 + For a Kohn-Sham or Range-separated Kohn-Sham: the exchange/correlation - trace of the V_xc potential diff --git a/docs/source/modules/kohn_sham.rst b/docs/source/modules/kohn_sham.rst index 8cc04456..822f2291 100644 --- a/docs/source/modules/kohn_sham.rst +++ b/docs/source/modules/kohn_sham.rst @@ -106,23 +106,6 @@ Providers -.. c:var:: extra_e_contrib_density - - .. code:: text - - double precision :: extra_e_contrib_density - - File: :file:`ks_enery.irp.f` - - Extra contribution to the SCF energy coming from the density. - - For a Hartree-Fock calculation: extra_e_contrib_density = 0 - - For a Kohn-Sham or Range-separated Kohn-Sham: the exchange/correlation - 1/2 trace of the V_xc potential - - - - .. c:var:: fock_matrix_alpha_no_xc_ao .. code:: text diff --git a/docs/source/modules/kohn_sham_rs.rst b/docs/source/modules/kohn_sham_rs.rst index 247d057b..66d0082f 100644 --- a/docs/source/modules/kohn_sham_rs.rst +++ b/docs/source/modules/kohn_sham_rs.rst @@ -52,7 +52,7 @@ EZFIO parameters .. option:: energy - SCF energy + Energy range separated hybrid diff --git a/docs/source/modules/perturbation.rst b/docs/source/modules/perturbation.rst index d915ad52..9f82df6a 100644 --- a/docs/source/modules/perturbation.rst +++ b/docs/source/modules/perturbation.rst @@ -203,20 +203,6 @@ Subroutines / functions -.. c:function:: perturb_buffer_by_mono_decontracted - - .. code:: text - - subroutine perturb_buffer_by_mono_decontracted(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy) - - File: :file:`perturbation.irp.f_shell_13` - - Applly pertubration ``decontracted`` to the buffer of determinants generated in the H_apply routine. - - - - - .. c:function:: perturb_buffer_by_mono_dummy .. code:: text @@ -329,20 +315,6 @@ Subroutines / functions -.. c:function:: perturb_buffer_decontracted - - .. code:: text - - subroutine perturb_buffer_decontracted(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy) - - File: :file:`perturbation.irp.f_shell_13` - - Applly pertubration ``decontracted`` to the buffer of determinants generated in the H_apply routine. - - - - - .. c:function:: perturb_buffer_dummy .. code:: text @@ -455,27 +427,13 @@ Subroutines / functions -.. c:function:: pt2_decontracted - - .. code:: text - - subroutine pt2_decontracted (electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist) - - File: :file:`pt2_equations.irp.f_template_412` - - - - - - - .. c:function:: pt2_dummy .. code:: text subroutine pt2_dummy (electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist) - File: :file:`pt2_equations.irp.f_template_412` + File: :file:`pt2_equations.irp.f_template_365` Dummy perturbation to add all connected determinants. @@ -489,7 +447,7 @@ Subroutines / functions subroutine pt2_epstein_nesbet (electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist) - File: :file:`pt2_equations.irp.f_template_412` + File: :file:`pt2_equations.irp.f_template_365` compute the standard Epstein-Nesbet perturbative first order coefficient and second order energetic contribution @@ -511,7 +469,7 @@ Subroutines / functions subroutine pt2_epstein_nesbet_2x2 (electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist) - File: :file:`pt2_equations.irp.f_template_412` + File: :file:`pt2_equations.irp.f_template_365` compute the Epstein-Nesbet 2x2 diagonalization coefficient and energetic contribution @@ -533,7 +491,7 @@ Subroutines / functions subroutine pt2_epstein_nesbet_2x2_no_ci_diag(electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist) - File: :file:`pt2_equations.irp.f_template_412` + File: :file:`pt2_equations.irp.f_template_365` compute the Epstein-Nesbet 2x2 diagonalization coefficient and energetic contribution @@ -577,7 +535,7 @@ Subroutines / functions subroutine pt2_moller_plesset (electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist) - File: :file:`pt2_equations.irp.f_template_412` + File: :file:`pt2_equations.irp.f_template_365` compute the standard Moller-Plesset perturbative first order coefficient and second order energetic contribution @@ -599,7 +557,7 @@ Subroutines / functions subroutine pt2_moller_plesset_general (electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist) - File: :file:`pt2_equations.irp.f_template_412` + File: :file:`pt2_equations.irp.f_template_365` compute the general Moller-Plesset perturbative first order coefficient and second order energetic contribution @@ -621,7 +579,7 @@ Subroutines / functions subroutine pt2_qdpt (electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist) - File: :file:`pt2_equations.irp.f_template_412` + File: :file:`pt2_equations.irp.f_template_365` compute the QDPT first order coefficient and second order energetic contribution diff --git a/docs/source/programmers_guide/index_providers.rst b/docs/source/programmers_guide/index_providers.rst index 1888ed4f..fc8d633b 100644 --- a/docs/source/programmers_guide/index_providers.rst +++ b/docs/source/programmers_guide/index_providers.rst @@ -404,9 +404,6 @@ Index of Providers * :c:data:`n_det_max_full` * :c:data:`n_det_non_cas` * :c:data:`n_det_print_wf` -* :c:data:`n_det_non_ref` -* :c:data:`n_det_print_wf` -* :c:data:`n_det_ref` * :c:data:`n_det_selectors` * :c:data:`n_double_exc_bitmasks` * :c:data:`n_double_selectors` @@ -1134,7 +1131,6 @@ Index of Subroutines/Functions * :c:func:`overlap_x_abs` * :c:func:`past_d1` * :c:func:`past_d2` -* :c:func:`perturb_buffer_by_mono_decontracted` * :c:func:`perturb_buffer_by_mono_dummy` * :c:func:`perturb_buffer_by_mono_epstein_nesbet` * :c:func:`perturb_buffer_by_mono_epstein_nesbet_2x2` @@ -1143,7 +1139,6 @@ Index of Subroutines/Functions * :c:func:`perturb_buffer_by_mono_moller_plesset` * :c:func:`perturb_buffer_by_mono_moller_plesset_general` * :c:func:`perturb_buffer_by_mono_qdpt` -* :c:func:`perturb_buffer_decontracted` * :c:func:`perturb_buffer_dummy` * :c:func:`perturb_buffer_epstein_nesbet` * :c:func:`perturb_buffer_epstein_nesbet_2x2` @@ -1168,7 +1163,6 @@ Index of Subroutines/Functions * :c:func:`provide_everything` * :c:func:`pt2` * :c:func:`pt2_collector` -* :c:func:`pt2_decontracted` * :c:func:`pt2_dummy` * :c:func:`pt2_epstein_nesbet` * :c:func:`pt2_epstein_nesbet_2x2` @@ -1368,4 +1362,4 @@ Index of Subroutines/Functions * :c:func:`zmq_put_psi_det_beta_unique` * :c:func:`zmq_put_psi_det_size` * :c:func:`zmq_selection` -* :c:func:`zmq_set_running` +* :c:func:`zmq_set_running` \ No newline at end of file diff --git a/docs/source/users_guide/quickstart.rst b/docs/source/users_guide/quickstart.rst index 02e0f51c..51db95ea 100644 --- a/docs/source/users_guide/quickstart.rst +++ b/docs/source/users_guide/quickstart.rst @@ -2,8 +2,9 @@ Quick-start guide ================= -This tutorial should talk you through everything you need to get started with -the |qp|. As an example, we will run a |CIPSI| calculation on the HCN molecule. +This tutorial should teach you everything you need to get started with +the the basics of the |qp|. +As an example, we will run a |CIPSI| calculation on the HCN molecule in the 631-G basis set. Demo video diff --git a/scripts/qp_e_conv_fci b/scripts/qp_e_conv_fci index fd1cc74f..727335e0 100755 --- a/scripts/qp_e_conv_fci +++ b/scripts/qp_e_conv_fci @@ -1,58 +1,17 @@ #!/bin/bash file=$1 -out=${file}.conv - Ndet=`grep "N_det =" $file | cut -d "=" -f 2` - Evar=`grep "E =" $file | cut -d "=" -f 2` - EPT2=`grep "E+rPT2 =" $file | cut -d "=" -f 2 | cut -d "+" -f 1` - err=`grep "E+rPT2 =" $file | cut -d "=" -f 2 | cut -d "+" -f 2 | cut -d "/" -f 2 | cut -d " " -f 5` +qp=$QP_ROOT +source ${qp}/quantum_package.rc -Ndetarray=[] -j=0 -for i in $Ndet +qp_run print_e_conv $1 +nstates=`cat ${1}/determinants/n_states` +echo $nstates + + +for i in `seq 1 $nstates` do - Ndetarray[$j]=$i - let "j=j+1" -done -Nmax=${#Ndetarray[*]} -let "Nmax-=1" - - -Evararray=[] -j=0 -for i in $Evar - do - Evararray[$j]=$i - let "j=j+1" -done - - -EPT2array=[] -j=0 -for i in $EPT2 - do - EPT2array[$j]=$i - let "j=j+1" -done - - -errarray=[] -j=0 -for i in $err - do - errarray[$j]=$i - let "j=j+1" -done - - - - -echo "#Ndet E_var E+PT2 statistical error " > $out -for i in `seq 0 $Nmax` -do - echo ${Ndetarray[$i]} ${Evararray[$i]} ${EPT2array[$i]} ${errarray[$i]} >> $out -done - + out=${1}.${i}.conv cat << EOF > ${out}.plt set term eps set output "$out.eps" @@ -60,8 +19,28 @@ set log x set xlabel "Number of determinants" set ylabel "Total Energy (a.u.)" -plot "$out" w lp title "E_{var}", "$out" u 1:3:4 w errorlines title "E_{var} + PT2" +plot "$out" w lp title "E_{var} state $i", "$out" u 1:3 w lp title "E_{var} + PT2 state $i" EOF gnuplot ${out}.plt +rm ${out}.plt + +done + +for i in `seq 2 $nstates` + do + out=${1}.${i}.delta_e.conv +cat << EOF > ${out}.plt +set term eps +set output "$out.eps" +set log x +set xlabel "Number of determinants" +set ylabel "Energy difference (a.u.)" + +plot "$out" w lp title "Delta E_{var} state $i", "$out" u 1:3 w lp title "Delta E_{var} + PT2 state $i" + +EOF +gnuplot ${out}.plt +rm ${out}.plt +done diff --git a/src/ao_one_e_integrals/pot_ao_erf_ints.irp.f b/src/ao_one_e_integrals/pot_ao_erf_ints.irp.f index 85921dbc..deed72f4 100644 --- a/src/ao_one_e_integrals/pot_ao_erf_ints.irp.f +++ b/src/ao_one_e_integrals/pot_ao_erf_ints.irp.f @@ -1,7 +1,7 @@ subroutine give_all_erf_kl_ao(integrals_ao,mu_in,C_center) implicit none BEGIN_DOC -! subroutine that returs all integrals over r of type erf(mu_in * | r-C_center |)/| r-C_center | +! subroutine that returs all integrals over r of type erf(mu_in * | r-C_center | )/| r-C_center | END_DOC double precision, intent(in) :: mu_in,C_center(3) double precision, intent(out) :: integrals_ao(ao_num,ao_num) @@ -19,7 +19,7 @@ double precision function NAI_pol_mult_erf_ao(i_ao,j_ao,mu_in,C_center) implicit none BEGIN_DOC ! computes the following integral : - ! int[-infty;+infty] dr AO_i_ao (r) AO_j_ao(r) erf(mu_in * | r-C_center |)/| r-C_center | + ! int[-infty;+infty] dr AO_i_ao (r) AO_j_ao(r) erf(mu_in * | r-C_center | )/| r-C_center | END_DOC integer, intent(in) :: i_ao,j_ao double precision, intent(in) :: mu_in, C_center(3) diff --git a/src/iterations/NEED b/src/iterations/NEED index 8b137891..e69de29b 100644 --- a/src/iterations/NEED +++ b/src/iterations/NEED @@ -1 +0,0 @@ - diff --git a/src/tools/print_e_conv.irp.f b/src/tools/print_e_conv.irp.f new file mode 100644 index 00000000..19d88e5c --- /dev/null +++ b/src/tools/print_e_conv.irp.f @@ -0,0 +1,71 @@ +program print_e_conv + implicit none + BEGIN_DOC +! program that prints in a human readable format the convergence of the CIPSI algorithm + END_DOC + + provide ezfio_filename + call routine + end + +subroutine routine + implicit none + integer :: N_iter_tmp + integer :: i,istate + character*(128) :: output + integer :: i_unit_output,getUnitAndOpen + character*(128) :: filename + + integer, allocatable :: n_det_tmp(:) + call ezfio_get_iterations_N_iter(N_iter_tmp) + print*,'N_iter_tmp = ',N_iter_tmp + double precision, allocatable :: e(:,:),pt2(:,:) + allocate(e(N_states, 100),pt2(N_states, 100),n_det_tmp(100)) + call ezfio_get_iterations_energy_iterations(e) + call ezfio_get_iterations_pt2_iterations(pt2) + call ezfio_get_iterations_n_det_iterations(n_det_tmp) + + + do istate = 1, N_states + if (istate.lt.10)then + write (filename, "(I1)")istate + else + write (filename, "(I2)")istate + endif + print*,filename + output=trim(ezfio_filename)//'.'//trim(filename)//'.conv' + output=trim(output) + print*,'output = ',trim(output) + i_unit_output = getUnitAndOpen(output,'w') + write(i_unit_output,*)'# N_det E_var E_var + PT2' + do i = 1, N_iter_tmp + write(i_unit_output,'(I9,X,3(F16.10,X))')n_det_tmp(i),e(istate,i),e(istate,i) + pt2(istate,i) + enddo + enddo + + if(N_states.gt.1)then + double precision, allocatable :: deltae(:,:),deltae_pt2(:,:) + allocate(deltae(N_states,100),deltae_pt2(N_states,100)) + do i = 1, N_iter_tmp + do istate = 1, N_states + deltae(istate,i) = e(istate,i) - e(1,i) + deltae_pt2(istate,i) = e(istate,i) + pt2(istate,i) - (e(1,i) + pt2(1,i)) + enddo + enddo + do istate = 2, N_states + if (istate.lt.10)then + write (filename, "(I1)")istate + else + write (filename, "(I2)")istate + endif + output=trim(ezfio_filename)//'.'//trim(filename)//'.delta_e.conv' + print*,'output = ',trim(output) + i_unit_output = getUnitAndOpen(output,'w') + write(i_unit_output,*)'# N_det Delta E_var Delta (E_var + PT2)' + do i = 1, N_iter_tmp + write(i_unit_output,'(I9,X,100(F16.10,X))')n_det_tmp(i),deltae(istate,i),deltae_pt2(istate,i) + enddo + enddo + endif + +end diff --git a/src/tools/print_wf.irp.f b/src/tools/print_wf.irp.f index f709bb8a..99e8dfad 100644 --- a/src/tools/print_wf.irp.f +++ b/src/tools/print_wf.irp.f @@ -59,6 +59,8 @@ subroutine routine else coef_2_2 = 0.5d0 * (delta_e + dsqrt(delta_e * delta_e + 4.d0 * hij * hij )) /hij endif + else + coef_2_2 = 0.d0 endif call get_excitation(psi_det(1,1,1),psi_det(1,1,i),exc,degree,phase,N_int) call decode_exc(exc,degree,h1,p1,h2,p2,s1,s2) @@ -83,7 +85,7 @@ subroutine routine print*,'hdouble = ',hdouble print*,'hmono+hdouble = ',hmono+hdouble print*,'hij = ',hij - else + else if(degree ==2)then print*,'s1',s1 print*,'h1,p1 = ',h1,p1 print*,'s2',s2 From 7d5b24f40477ea1de25fa17327cbd7c9b3e827fd Mon Sep 17 00:00:00 2001 From: Emmanuel Giner Date: Fri, 4 Jan 2019 02:18:54 +0100 Subject: [PATCH 14/16] modified qp_e_conv_fci for pdf --- scripts/qp_e_conv_fci | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/qp_e_conv_fci b/scripts/qp_e_conv_fci index 727335e0..13c3eed5 100755 --- a/scripts/qp_e_conv_fci +++ b/scripts/qp_e_conv_fci @@ -13,8 +13,8 @@ for i in `seq 1 $nstates` do out=${1}.${i}.conv cat << EOF > ${out}.plt -set term eps -set output "$out.eps" +set term pdf +set output "$out.pdf" set log x set xlabel "Number of determinants" set ylabel "Total Energy (a.u.)" @@ -32,8 +32,8 @@ for i in `seq 2 $nstates` do out=${1}.${i}.delta_e.conv cat << EOF > ${out}.plt -set term eps -set output "$out.eps" +set term pdf +set output "$out.pdf" set log x set xlabel "Number of determinants" set ylabel "Energy difference (a.u.)" From 55d34c1fc91e4a2642364015e5fc097b0e12892d Mon Sep 17 00:00:00 2001 From: Emmanuel Giner Date: Sun, 6 Jan 2019 20:43:28 +0100 Subject: [PATCH 15/16] minor changes --- TODO | 2 ++ docs/source/intro/intro.rst | 2 +- docs/source/programmers_guide/index_providers.rst | 7 ++++--- docs/source/users_guide/quickstart.rst | 2 +- src/mo_basis/track_orb.irp.f | 2 -- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/TODO b/TODO index 206e2f6b..ddd5a92e 100644 --- a/TODO +++ b/TODO @@ -22,6 +22,8 @@ # User doc: + * Videos: + +) RHF * Renvoyer a la doc des modules : c'est pour les programmeurs au depart! * Mettre le mp2 comme exercice diff --git a/docs/source/intro/intro.rst b/docs/source/intro/intro.rst index 23a3c699..aecd072d 100644 --- a/docs/source/intro/intro.rst +++ b/docs/source/intro/intro.rst @@ -20,7 +20,7 @@ From the **user** point of view, the |qp| proposes a stand-alone path to use optimized selected configuration interaction |sCI| based on the |CIPSI| algorithm that can efficiently reach near-full configuration interaction |FCI| quality for relatively large systems (see for instance :cite:`Caffarel_2016,Caffarel_2016.2,Loos_2018,Scemama_2018,Dash_2018,Garniron_2017.2,Loos_2018,Garniron_2018,Giner2018Oct`). -To have a simple example of how to use the |CIPSI| program, go to the `users_guide/quickstart. +To have a simple example of how to use the |CIPSI| program, go to the `users_guide/quickstart`. The main goal is the development of selected configuration interaction |sCI| diff --git a/docs/source/programmers_guide/index_providers.rst b/docs/source/programmers_guide/index_providers.rst index efbee93e..6f3dc12e 100644 --- a/docs/source/programmers_guide/index_providers.rst +++ b/docs/source/programmers_guide/index_providers.rst @@ -248,11 +248,8 @@ Index of Providers * :c:data:`generators_bitmask_restart` * :c:data:`gga_sr_type_functionals` * :c:data:`gga_type_functionals` -<<<<<<< HEAD -======= * :c:data:`give_polynom_mult_center_mono_elec_erf` * :c:data:`give_polynom_mult_center_mono_elec_erf_opt` ->>>>>>> c297dbef83fb10c92ec048d3f0ecd9f6a93624c8 * :c:data:`grad_aos_dsr_vc_alpha_pbe_w` * :c:data:`grad_aos_dsr_vc_beta_pbe_w` * :c:data:`grad_aos_dsr_vx_alpha_pbe_w` @@ -1136,6 +1133,7 @@ Index of Subroutines/Functions * :c:func:`perturb_buffer_by_mono_dummy` * :c:func:`perturb_buffer_by_mono_epstein_nesbet` * :c:func:`perturb_buffer_by_mono_epstein_nesbet_2x2` +* :c:func:`perturb_buffer_by_mono_epstein_nesbet_2x2_no_ci_diag` * :c:func:`perturb_buffer_by_mono_h_core` * :c:func:`perturb_buffer_by_mono_moller_plesset` * :c:func:`perturb_buffer_by_mono_moller_plesset_general` @@ -1143,12 +1141,14 @@ Index of Subroutines/Functions * :c:func:`perturb_buffer_dummy` * :c:func:`perturb_buffer_epstein_nesbet` * :c:func:`perturb_buffer_epstein_nesbet_2x2` +* :c:func:`perturb_buffer_epstein_nesbet_2x2_no_ci_diag` * :c:func:`perturb_buffer_h_core` * :c:func:`perturb_buffer_moller_plesset` * :c:func:`perturb_buffer_moller_plesset_general` * :c:func:`perturb_buffer_qdpt` * :c:func:`primitive_value` * :c:func:`print_det` +* :c:func:`print_e_conv` * :c:func:`print_extrapolated_energy` * :c:func:`print_generators_bitmasks_holes` * :c:func:`print_generators_bitmasks_holes_for_one_generator` @@ -1166,6 +1166,7 @@ Index of Subroutines/Functions * :c:func:`pt2_dummy` * :c:func:`pt2_epstein_nesbet` * :c:func:`pt2_epstein_nesbet_2x2` +* :c:func:`pt2_epstein_nesbet_2x2_no_ci_diag` * :c:func:`pt2_find_sample` * :c:func:`pt2_find_sample_lr` * :c:func:`pt2_h_core` diff --git a/docs/source/users_guide/quickstart.rst b/docs/source/users_guide/quickstart.rst index 51db95ea..0badde49 100644 --- a/docs/source/users_guide/quickstart.rst +++ b/docs/source/users_guide/quickstart.rst @@ -4,7 +4,7 @@ Quick-start guide This tutorial should teach you everything you need to get started with the the basics of the |qp|. -As an example, we will run a |CIPSI| calculation on the HCN molecule in the 631-G basis set. +As an example, we will run a frozen core |CIPSI| calculation on the HCN molecule in the 631-G basis set. Demo video diff --git a/src/mo_basis/track_orb.irp.f b/src/mo_basis/track_orb.irp.f index 6eb50e11..ff7886a3 100644 --- a/src/mo_basis/track_orb.irp.f +++ b/src/mo_basis/track_orb.irp.f @@ -47,11 +47,9 @@ subroutine reorder_active_orb double precision :: x integer :: i1,i2 - print*, 'swapping the active MOs' do j = 1, n_act_orb i1 = list_act(j) i2 = index_active_orb(j) - print*, i1,i2 do i=1,ao_num x = mo_coef(i,i1) mo_coef(i,i1) = mo_coef(i,i2) From 6e6a1656100244ed556a92424e784572517c82cf Mon Sep 17 00:00:00 2001 From: Emmanuel Giner Date: Sun, 6 Jan 2019 21:16:09 +0100 Subject: [PATCH 16/16] changed tests in rs_ks_scf --- src/kohn_sham_rs/61.rsks.bats | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/kohn_sham_rs/61.rsks.bats b/src/kohn_sham_rs/61.rsks.bats index 3f6bd98b..9dfa49c3 100644 --- a/src/kohn_sham_rs/61.rsks.bats +++ b/src/kohn_sham_rs/61.rsks.bats @@ -6,32 +6,33 @@ source $QP_ROOT/tests/bats/common.bats.sh function run() { thresh=1.e-8 qp_edit -c $1 + functional=$2 ezfio set_file $1 ezfio set scf_utils thresh_scf 1.e-10 - echo "short_range_PBE" > $1/dft_keywords/exchange_functional - echo "short_range_PBE" > $1/dft_keywords/correlation_functional - echo "0.5" > $1/ao_two_e_erf_ints/mu_erf - echo "1" > $1/becke_numerical_grid/grid_type_sgn + ezfio set dft_keywords exchange_functional $functional + ezfio set dft_keywords correlation_functional $functional + ezfio set ao_two_e_erf_ints mu_erf 0.5 + ezfio set becke_numerical_grid grid_type_sgn 1 qp_run rs_ks_scf $1 energy="$(ezfio get kohn_sham_rs energy)" - eq $energy $2 $thresh + eq $energy $3 $thresh } @test "H3COH" { - run h3coh.ezfio -115.50238225208 + run h3coh.ezfio short_range_PBE -115.50238225208 } @test "HCN" { - run hcn.ezfio -93.26674673761752 + run hcn.ezfio short_range_PBE -93.26674673761752 } @test "N2" { - run n2.ezfio -109.404692225719 + run n2.ezfio short_range_PBE -109.404692225719 } @test "SiH2_3B1" { - run sih2_3b1.ezfio -290.371745382958 + run sih2_3b1.ezfio short_range_LDA -289.4398733527755 }