From eed703afa9a1e63e797851748c4a99f2b4b7525f Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 23 Dec 2020 00:29:55 +0100 Subject: [PATCH 01/26] Added entropy --- devel/svdwf/svdwf.irp.f | 18 +++++++++++------- stable/amplitudes/EZFIO.cfg.save | 7 ------- 2 files changed, 11 insertions(+), 14 deletions(-) delete mode 100644 stable/amplitudes/EZFIO.cfg.save diff --git a/devel/svdwf/svdwf.irp.f b/devel/svdwf/svdwf.irp.f index a53b48d..dfdcc80 100644 --- a/devel/svdwf/svdwf.irp.f +++ b/devel/svdwf/svdwf.irp.f @@ -12,6 +12,7 @@ subroutine run implicit none double precision, allocatable :: U(:,:), Vt(:,:), D(:), A(:,:) integer :: i, j, k, p, q + double precision :: entropy allocate( A (n_det_alpha_unique, n_det_beta_unique), & U (n_det_alpha_unique, n_det_alpha_unique), & @@ -29,19 +30,22 @@ subroutine run U, size(U,1), D, Vt, size(Vt,1), n_det_alpha_unique, n_det_beta_unique, & 6,1000) + entropy = 0.d0 do i=1,n_det_beta_unique print *, i, real(D(i)), real(D(i)**2), real(sum(D(1:i)**2)) + entropy -= D(i) * dlog(D(i)) if (D(i) < 1.d-15) then k = i exit endif enddo print *, 'threshold: ', 2.858 * D(k/2) - do i=1,n_det_alpha_unique - print '(I6,4(X,F12.8))', i, U(i,1:4) - enddo - print *, '' - do i=1,n_det_beta_unique - print '(I6,4(X,F12.8))', i, Vt(1:4,i) - enddo + print *, 'Entropy : ', entropy +! do i=1,n_det_alpha_unique +! print '(I6,4(X,F12.8))', i, U(i,1:4) +! enddo +! print *, '' +! do i=1,n_det_beta_unique +! print '(I6,4(X,F12.8))', i, Vt(1:4,i) +! enddo end diff --git a/stable/amplitudes/EZFIO.cfg.save b/stable/amplitudes/EZFIO.cfg.save deleted file mode 100644 index 66ef730..0000000 --- a/stable/amplitudes/EZFIO.cfg.save +++ /dev/null @@ -1,7 +0,0 @@ -[t1_amplitudes] -type: double precision -doc: Amplitudes for the single-excitation operator -interface: ezfio,provider -size: (mo_basis.mo_num,mo_basis.mo_num) - - From ac95c7666513cc6e84d16090139744f2824e9aba Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 23 Dec 2020 02:21:15 +0100 Subject: [PATCH 02/26] Add MPN --- devel/mpn/.gitignore | 59 +++++++++++++++++++++++ devel/mpn/EZFIO.cfg | 12 +++++ devel/mpn/NEED | 3 ++ devel/mpn/README.rst | 4 ++ devel/mpn/energies.irp.f | 23 +++++++++ devel/mpn/mpn.irp.f | 101 +++++++++++++++++++++++++++++++++++++++ devel/svdwf/svdwf.irp.f | 19 ++++++-- 7 files changed, 218 insertions(+), 3 deletions(-) create mode 100644 devel/mpn/.gitignore create mode 100644 devel/mpn/EZFIO.cfg create mode 100644 devel/mpn/NEED create mode 100644 devel/mpn/README.rst create mode 100644 devel/mpn/energies.irp.f create mode 100644 devel/mpn/mpn.irp.f diff --git a/devel/mpn/.gitignore b/devel/mpn/.gitignore new file mode 100644 index 0000000..1561915 --- /dev/null +++ b/devel/mpn/.gitignore @@ -0,0 +1,59 @@ +IRPF90_temp/ +IRPF90_man/ +build.ninja +irpf90.make +ezfio_interface.irp.f +irpf90_entities +tags +Makefile +ao_basis +ao_one_e_ints +ao_two_e_erf_ints +ao_two_e_ints +aux_quantities +becke_numerical_grid +bitmask +cis +cisd +cipsi +davidson +davidson_dressed +davidson_undressed +density_for_dft +determinants +dft_keywords +dft_utils_in_r +dft_utils_one_e +dft_utils_two_body +dressing +dummy +electrons +ezfio_files +fci +generators_cas +generators_full +hartree_fock +iterations +kohn_sham +kohn_sham_rs +mo_basis +mo_guess +mo_one_e_ints +mo_two_e_erf_ints +mo_two_e_ints +mpi +mrpt_utils +nuclei +perturbation +pseudo +psiref_cas +psiref_utils +scf_utils +selectors_cassd +selectors_full +selectors_utils +single_ref_method +slave +tools +utils +zmq diff --git a/devel/mpn/EZFIO.cfg b/devel/mpn/EZFIO.cfg new file mode 100644 index 0000000..50e5532 --- /dev/null +++ b/devel/mpn/EZFIO.cfg @@ -0,0 +1,12 @@ +[energy] +type: double precision +doc: Calculated Selected |FCI| energy +interface: ezfio +size: (determinants.n_states) + +[mp_order] +type: integer +doc: Max order of MPn +interface: ezfio, provider, ocaml +default: 4 + diff --git a/devel/mpn/NEED b/devel/mpn/NEED new file mode 100644 index 0000000..b2918cc --- /dev/null +++ b/devel/mpn/NEED @@ -0,0 +1,3 @@ +davidson_undressed +hartree_fock +determinants diff --git a/devel/mpn/README.rst b/devel/mpn/README.rst new file mode 100644 index 0000000..4967020 --- /dev/null +++ b/devel/mpn/README.rst @@ -0,0 +1,4 @@ +=== +mpn +=== + diff --git a/devel/mpn/energies.irp.f b/devel/mpn/energies.irp.f new file mode 100644 index 0000000..c3a1448 --- /dev/null +++ b/devel/mpn/energies.irp.f @@ -0,0 +1,23 @@ +BEGIN_PROVIDER [ double precision, energy_det_i, (N_det) ] + implicit none + BEGIN_DOC + ! Fock Energy of determinant |I> (sum of epsilon_i) + END_DOC + integer :: i, k, n + integer :: list(elec_alpha_num) + + do k=1,N_det + call bitstring_to_list(psi_det(1,1,k), list, n, N_int) + energy_det_i(k) = 0.d0 + do i=1,n + energy_det_i(k) += fock_matrix_diag_mo(list(i)) + enddo + call bitstring_to_list(psi_det(1,2,k), list, n, N_int) + do i=1,n + energy_det_i(k) += fock_matrix_diag_mo(list(i)) + enddo + enddo +END_PROVIDER + + + diff --git a/devel/mpn/mpn.irp.f b/devel/mpn/mpn.irp.f new file mode 100644 index 0000000..a988913 --- /dev/null +++ b/devel/mpn/mpn.irp.f @@ -0,0 +1,101 @@ +program mpn + implicit none + BEGIN_DOC +! TODO : Put the documentation of the program here + END_DOC + integer :: i, k, l + double precision, allocatable :: c_pert(:,:) + double precision, allocatable :: e_pert(:) + double precision, allocatable :: hc(:), s2(:) + + n_states_diag = 1 + TOUCH n_states_diag + call generate_fci_space + allocate(c_pert(N_det,0:mp_order)) + allocate(s2(N_det)) + allocate(e_pert(mp_order+1)) + e_pert = 0.d0 + c_pert(:,:) = 0.d0 + c_pert(1,0) = 1.d0 + +double precision :: hij + + do k=1,mp_order + ! H_ij C^(k-1) + call h_s2_u_0_nstates_zmq(c_pert(1,k),s2,c_pert(1,k-1),1,N_det) + e_pert(k) = c_pert(1,k) + print *, k, e_pert(k), sum(e_pert) + nuclear_repulsion + + c_pert(1,k) = 0.d0 + c_pert(:,k) = -c_pert(:,k) + do l=1,k-1 + do i=2,N_det + c_pert(i,k) = c_pert(i,k) + e_pert(l) * c_pert(i,k-l) + enddo + enddo + do i=2,N_det + c_pert(i,k) = c_pert(i,k) + energy_det_i(i) * c_pert(i,k-1) + enddo + do i=2,N_det + c_pert(i,k) = c_pert(i,k) / (energy_det_i(i) - energy_det_i(1)) + enddo + + enddo + + +end + +subroutine generate_fci_space + use bitmasks + implicit none + integer :: i, sze + integer(bit_kind) :: o(N_int,2) + + if (mo_num > 64) then + stop 'No more than 64 MOs' + endif + o(:,1) = full_ijkl_bitmask(:) + o(:,2) = 0_bit_kind + + call configuration_to_dets_size(o,n_det_alpha_unique,elec_alpha_num,N_int) + TOUCH n_det_alpha_unique + + integer :: k,n,m, t, t1, t2 + integer(bit_kind) :: u + k=0 + n = elec_alpha_num + m = mo_num - n + u = shiftl(1_bit_kind,n) -1 + do while (u < shiftl(1_bit_kind,n+m)) + k = k+1 + psi_det_alpha_unique(1,k) = u + t = ior(u,u-1) + t1 = t+1 + t2 = shiftr((iand(not(t),t1)-1), trailz(u)+1) + u = ior(t1,t2) + enddo + + + call configuration_to_dets_size(o,n_det_beta_unique,elec_beta_num,N_int) + TOUCH n_det_beta_unique + + k=0 + n = elec_beta_num + m = mo_num - n + u = shiftl(1_bit_kind,n) -1 + do while (u < shiftl(1_bit_kind,n+m)) + k = k+1 + psi_det_beta_unique(1,k) = u + t = ior(u,u-1) + t1 = t+1 + t2 = shiftr((iand(not(t),t1)-1), trailz(u)+1) + u = ior(t1,t2) + enddo + + call generate_all_alpha_beta_det_products + + print *, N_det + + +end + diff --git a/devel/svdwf/svdwf.irp.f b/devel/svdwf/svdwf.irp.f index dfdcc80..1f67022 100644 --- a/devel/svdwf/svdwf.irp.f +++ b/devel/svdwf/svdwf.irp.f @@ -19,16 +19,27 @@ subroutine run Vt(n_det_beta_unique, n_det_beta_unique), & D(max(n_det_beta_unique,n_det_alpha_unique)) ) - A = 0.D0 + do j=1,n_det_beta_unique + do i=1,n_det_alpha_unique + A(i,j) = 0.D0 + enddo + enddo + do k=1,N_det i = psi_bilinear_matrix_rows(k) j = psi_bilinear_matrix_columns(k) A(i,j) = psi_bilinear_matrix_values(k,1) enddo - call randomized_svd(A, size(A,1), & + if (N_det == 1) then + D(1) = 1.d0 + U(1,1) = 1.d0 + Vt(1,1) = 1.d0 + else + call randomized_svd(A, size(A,1), & U, size(U,1), D, Vt, size(Vt,1), n_det_alpha_unique, n_det_beta_unique, & - 6,1000) + 6,min(n_det_beta_unique,1000)) + endif entropy = 0.d0 do i=1,n_det_beta_unique @@ -41,6 +52,7 @@ subroutine run enddo print *, 'threshold: ', 2.858 * D(k/2) print *, 'Entropy : ', entropy + ! do i=1,n_det_alpha_unique ! print '(I6,4(X,F12.8))', i, U(i,1:4) ! enddo @@ -48,4 +60,5 @@ subroutine run ! do i=1,n_det_beta_unique ! print '(I6,4(X,F12.8))', i, Vt(1:4,i) ! enddo + end From aa7ac086154bc61cc357eaeb667912fd1cab4b93 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 23 Dec 2020 02:38:34 +0100 Subject: [PATCH 03/26] Add nuclear repulsion --- devel/mpn/energies.irp.f | 2 +- devel/mpn/mpn.irp.f | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/devel/mpn/energies.irp.f b/devel/mpn/energies.irp.f index c3a1448..d08a9ac 100644 --- a/devel/mpn/energies.irp.f +++ b/devel/mpn/energies.irp.f @@ -8,7 +8,7 @@ BEGIN_PROVIDER [ double precision, energy_det_i, (N_det) ] do k=1,N_det call bitstring_to_list(psi_det(1,1,k), list, n, N_int) - energy_det_i(k) = 0.d0 + energy_det_i(k) = nuclear_repulsion do i=1,n energy_det_i(k) += fock_matrix_diag_mo(list(i)) enddo diff --git a/devel/mpn/mpn.irp.f b/devel/mpn/mpn.irp.f index a988913..193fdae 100644 --- a/devel/mpn/mpn.irp.f +++ b/devel/mpn/mpn.irp.f @@ -18,17 +18,16 @@ program mpn c_pert(:,:) = 0.d0 c_pert(1,0) = 1.d0 -double precision :: hij - + e_pert(1) = nuclear_repulsion do k=1,mp_order ! H_ij C^(k-1) call h_s2_u_0_nstates_zmq(c_pert(1,k),s2,c_pert(1,k-1),1,N_det) - e_pert(k) = c_pert(1,k) - print *, k, e_pert(k), sum(e_pert) + nuclear_repulsion + e_pert(k) += c_pert(1,k) + print *, k, e_pert(k), sum(e_pert) c_pert(1,k) = 0.d0 c_pert(:,k) = -c_pert(:,k) - do l=1,k-1 + do l=1,k do i=2,N_det c_pert(i,k) = c_pert(i,k) + e_pert(l) * c_pert(i,k-l) enddo From b17779547722115707c324f5a1dab76199a660f1 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Thu, 24 Dec 2020 00:25:57 +0100 Subject: [PATCH 04/26] MPN OK --- devel/mpn/energies.irp.f | 2 +- devel/mpn/mpn.irp.f | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/devel/mpn/energies.irp.f b/devel/mpn/energies.irp.f index d08a9ac..c3a1448 100644 --- a/devel/mpn/energies.irp.f +++ b/devel/mpn/energies.irp.f @@ -8,7 +8,7 @@ BEGIN_PROVIDER [ double precision, energy_det_i, (N_det) ] do k=1,N_det call bitstring_to_list(psi_det(1,1,k), list, n, N_int) - energy_det_i(k) = nuclear_repulsion + energy_det_i(k) = 0.d0 do i=1,n energy_det_i(k) += fock_matrix_diag_mo(list(i)) enddo diff --git a/devel/mpn/mpn.irp.f b/devel/mpn/mpn.irp.f index 193fdae..a351660 100644 --- a/devel/mpn/mpn.irp.f +++ b/devel/mpn/mpn.irp.f @@ -13,20 +13,22 @@ program mpn call generate_fci_space allocate(c_pert(N_det,0:mp_order)) allocate(s2(N_det)) - allocate(e_pert(mp_order+1)) - e_pert = 0.d0 + allocate(e_pert(0:mp_order)) + e_pert(0) = energy_det_i(1) c_pert(:,:) = 0.d0 c_pert(1,0) = 1.d0 - e_pert(1) = nuclear_repulsion + e_pert(1) = hf_energy - e_pert(0) - nuclear_repulsion do k=1,mp_order ! H_ij C^(k-1) call h_s2_u_0_nstates_zmq(c_pert(1,k),s2,c_pert(1,k-1),1,N_det) - e_pert(k) += c_pert(1,k) - print *, k, e_pert(k), sum(e_pert) + if (k>1) then + e_pert(k) += c_pert(1,k) + endif + print *, k, e_pert(k), sum(e_pert) + nuclear_repulsion - c_pert(1,k) = 0.d0 c_pert(:,k) = -c_pert(:,k) + c_pert(1,k) = 0.d0 do l=1,k do i=2,N_det c_pert(i,k) = c_pert(i,k) + e_pert(l) * c_pert(i,k-l) From 9b114f17e5c2bd1e336b7f200ba2e042e1e7c879 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 4 Jan 2021 22:14:55 +0100 Subject: [PATCH 05/26] Frozen core in mpn --- .../export_integrals_ao.irp.f | 1 + devel/mpn/generate_fci.irp.f | 72 +++++++++++++++++++ devel/mpn/mpn.irp.f | 53 -------------- devel/svdwf/random_svd.irp.f | 4 +- stable/utilities/hcore_guess.irp.f | 4 ++ 5 files changed, 80 insertions(+), 54 deletions(-) create mode 100644 devel/mpn/generate_fci.irp.f create mode 100644 stable/utilities/hcore_guess.irp.f diff --git a/devel/import_integrals/export_integrals_ao.irp.f b/devel/import_integrals/export_integrals_ao.irp.f index ff59081..bba7ae3 100644 --- a/devel/import_integrals/export_integrals_ao.irp.f +++ b/devel/import_integrals/export_integrals_ao.irp.f @@ -77,6 +77,7 @@ subroutine run do k=1,ao_num do j=l,ao_num do i=k,ao_num + if (i==j .and. k=j) then integral = get_ao_two_e_integral(i,j,k,l,ao_integrals_map) if (integral /= 0.d0) then diff --git a/devel/mpn/generate_fci.irp.f b/devel/mpn/generate_fci.irp.f new file mode 100644 index 0000000..6a381f2 --- /dev/null +++ b/devel/mpn/generate_fci.irp.f @@ -0,0 +1,72 @@ +subroutine generate_fci_space + use bitmasks + implicit none + BEGIN_DOC +! Generates the complete FCI space + END_DOC + integer :: i, sze, ncore + integer(bit_kind) :: o(N_int,2) + integer(bit_kind) :: u, coremask + + if (mo_num > 64) then + stop 'No more than 64 MOs' + endif + + ncore = 0 + coremask = 0_bit_kind + do i=1,mo_num + if (trim(mo_class(i)) == 'Core') then + ncore += 1 + coremask = ibset(coremask,i-1) + endif + enddo + o(1,1) = iand(full_ijkl_bitmask(1),not(coremask)) + o(1,2) = 0_bit_kind + + call configuration_to_dets_size(o,n_det_alpha_unique,elec_alpha_num-ncore,N_int) + TOUCH n_det_alpha_unique + + integer :: k,n,m, t, t1, t2 + k=0 + n = elec_alpha_num + m = mo_num - n + n = n + + u = shiftl(1_bit_kind,n) -1 + do while (u < shiftl(1_bit_kind,n+m)) + if (iand(coremask, u) == coremask) then + k = k+1 + psi_det_alpha_unique(1,k) = u + endif + t = ior(u,u-1) + t1 = t+1 + t2 = shiftr((iand(not(t),t1)-1), trailz(u)+1) + u = ior(t1,t2) + enddo + + + call configuration_to_dets_size(o,n_det_beta_unique,elec_beta_num-ncore,N_int) + TOUCH n_det_beta_unique + + k=0 + n = elec_beta_num + m = mo_num - n + u = shiftl(1_bit_kind,n) -1 + do while (u < shiftl(1_bit_kind,n+m)) + if (iand(coremask, u) == coremask) then + k = k+1 + psi_det_beta_unique(1,k) = u + endif + t = ior(u,u-1) + t1 = t+1 + t2 = shiftr((iand(not(t),t1)-1), trailz(u)+1) + u = ior(t1,t2) + enddo + + call generate_all_alpha_beta_det_products + + print *, N_det + + +end + diff --git a/devel/mpn/mpn.irp.f b/devel/mpn/mpn.irp.f index a351660..1caa788 100644 --- a/devel/mpn/mpn.irp.f +++ b/devel/mpn/mpn.irp.f @@ -46,57 +46,4 @@ program mpn end -subroutine generate_fci_space - use bitmasks - implicit none - integer :: i, sze - integer(bit_kind) :: o(N_int,2) - - if (mo_num > 64) then - stop 'No more than 64 MOs' - endif - o(:,1) = full_ijkl_bitmask(:) - o(:,2) = 0_bit_kind - - call configuration_to_dets_size(o,n_det_alpha_unique,elec_alpha_num,N_int) - TOUCH n_det_alpha_unique - - integer :: k,n,m, t, t1, t2 - integer(bit_kind) :: u - k=0 - n = elec_alpha_num - m = mo_num - n - u = shiftl(1_bit_kind,n) -1 - do while (u < shiftl(1_bit_kind,n+m)) - k = k+1 - psi_det_alpha_unique(1,k) = u - t = ior(u,u-1) - t1 = t+1 - t2 = shiftr((iand(not(t),t1)-1), trailz(u)+1) - u = ior(t1,t2) - enddo - - - call configuration_to_dets_size(o,n_det_beta_unique,elec_beta_num,N_int) - TOUCH n_det_beta_unique - - k=0 - n = elec_beta_num - m = mo_num - n - u = shiftl(1_bit_kind,n) -1 - do while (u < shiftl(1_bit_kind,n+m)) - k = k+1 - psi_det_beta_unique(1,k) = u - t = ior(u,u-1) - t1 = t+1 - t2 = shiftr((iand(not(t),t1)-1), trailz(u)+1) - u = ior(t1,t2) - enddo - - call generate_all_alpha_beta_det_products - - print *, N_det - - -end diff --git a/devel/svdwf/random_svd.irp.f b/devel/svdwf/random_svd.irp.f index 9ac9119..9bfb50b 100644 --- a/devel/svdwf/random_svd.irp.f +++ b/devel/svdwf/random_svd.irp.f @@ -84,7 +84,9 @@ subroutine run !$OMP PARALLEL DEFAULT(SHARED) PRIVATE(i,j,k,l) !$OMP DO do l=1,r - Yt(:,l) = 0.d0 + do k=1,n + Yt(k,l) = 0.d0 + enddo do k=1,N_det i = psi_bilinear_matrix_rows(k) j = psi_bilinear_matrix_columns(k) diff --git a/stable/utilities/hcore_guess.irp.f b/stable/utilities/hcore_guess.irp.f new file mode 100644 index 0000000..fdbab72 --- /dev/null +++ b/stable/utilities/hcore_guess.irp.f @@ -0,0 +1,4 @@ +program hcore_guess_prog + implicit none + call hcore_guess +end From e3bc5b8c40ae99bfad57c1a9cc1eb93d7c98b85b Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 4 Jan 2021 22:37:55 +0100 Subject: [PATCH 06/26] openmp in mpn --- devel/mpn/mpn.irp.f | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/devel/mpn/mpn.irp.f b/devel/mpn/mpn.irp.f index 1caa788..fa8c7c0 100644 --- a/devel/mpn/mpn.irp.f +++ b/devel/mpn/mpn.irp.f @@ -21,7 +21,11 @@ program mpn e_pert(1) = hf_energy - e_pert(0) - nuclear_repulsion do k=1,mp_order ! H_ij C^(k-1) - call h_s2_u_0_nstates_zmq(c_pert(1,k),s2,c_pert(1,k-1),1,N_det) + if (distributed_davidson) then + call H_S2_u_0_nstates_zmq (c_pert(1,k),s2,c_pert(1,k-1),1,N_det) + else + call H_S2_u_0_nstates_openmp(c_pert(1,k),s2,c_pert(1,k-1),1,N_det) + endif if (k>1) then e_pert(k) += c_pert(1,k) endif From 7039831efcc521119e0c4fb221507eb270bedf1c Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 22 Feb 2021 16:25:05 +0100 Subject: [PATCH 07/26] Added Abdallah's file --- devel/svdwf/Evar_TruncSVD.irp.f | 167 ++++++++++++++++++++++++++++++++ devel/svdwf/NEED | 1 + devel/svdwf/random_svd.irp.f | 14 ++- 3 files changed, 177 insertions(+), 5 deletions(-) create mode 100644 devel/svdwf/Evar_TruncSVD.irp.f diff --git a/devel/svdwf/Evar_TruncSVD.irp.f b/devel/svdwf/Evar_TruncSVD.irp.f new file mode 100644 index 0000000..4ae793d --- /dev/null +++ b/devel/svdwf/Evar_TruncSVD.irp.f @@ -0,0 +1,167 @@ +program Evar_TruncSVD + implicit none + BEGIN_DOC +! study energy variation with truncated SVD + END_DOC + read_wf = .True. + TOUCH read_wf + ! !!! + call run() + ! !!! +end + + + + +subroutine run + implicit none + include 'constants.include.F' + double precision, allocatable :: A(:,:), U(:,:), V(:,:), D(:) + integer :: r, i, j, k, l, m, n, iter, iter_max + double precision, allocatable :: Z(:,:), P(:,:), Yt(:,:), UYt(:,:), r1(:,:) + ! !!! + m = n_det_alpha_unique + n = n_det_beta_unique + r = n + print *, 'matrix:', m,'x',n + print *, 'N det:', N_det + print *, 'rank = ', r + iter_max = 20 + ! !!! + allocate( Z(m,r) , P(n,r) ) ! Z(m,r) = A(m,n) @ P(n,r) + Z(:,:) = 0.d0 + ! !!! + ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! + ! first we apply a RSVD for a pre-fixed rank (r) + ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! + !$OMP PARALLEL DEFAULT(SHARED) PRIVATE(i,j,k,l,r1) + allocate(r1(N_det,2)) + !$OMP DO + do l=1,r + call random_number(r1) + r1(:,1) = dsqrt(-2.d0*dlog(r1(:,1))) + r1(:,1) = r1(:,1) * dcos(dtwo_pi*r1(:,2)) + do k=1,N_det + i = psi_bilinear_matrix_rows(k) + j = psi_bilinear_matrix_columns(k) + Z(i,l) = Z(i,l) + psi_bilinear_matrix_values(k,1) * r1(k,1) + enddo + enddo + !$OMP END DO + deallocate(r1) + !$OMP END PARALLEL + ! !!! + ! Power iterations + ! !!! + do iter=1,iter_max + ! !!! + print *, 'Power iteration ', iter, '/', 20 + ! !!! + ! P(n,r) = At(n,m) @ Z(m,r) + ! !!! + !$OMP PARALLEL DEFAULT(SHARED) PRIVATE(i,j,k,l) + !$OMP DO + do l=1,r + P(:,l) = 0.d0 + do k=1,N_det + i = psi_bilinear_matrix_rows(k) + j = psi_bilinear_matrix_columns(k) + P(j,l) = P(j,l) + psi_bilinear_matrix_values(k,1) * Z(i,l) + enddo + enddo + !$OMP END DO + ! !!! + ! Z(m,r) = A(m,n) @ P(n,r) + ! !!! + !$OMP BARRIER + !$OMP DO + do l=1,r + Z(:,l) = 0.d0 + do k=1,N_det + i = psi_bilinear_matrix_rows(k) + j = psi_bilinear_matrix_columns(k) + Z(i,l) = Z(i,l) + psi_bilinear_matrix_values(k,1) * P(j,l) + enddo + enddo + !$OMP END DO + !$OMP END PARALLEL + ! !!! + ! Compute QR: at return: Q is Z(m,r) + ! !!! + call ortho_qr(Z,size(Z,1),m,r) + ! !!! + enddo + ! !!! + ! Y(r,n) = Zt(r,m) @ A(m,n) or Yt(n,r) = At(n,m) @ Z(m,r) + ! !!! + allocate(Yt(n,r)) + !$OMP PARALLEL DEFAULT(SHARED) PRIVATE(i,j,k,l) + !$OMP DO + do l=1,r + do k=1,n + Yt(k,l) = 0.d0 + enddo + do k=1,N_det + i = psi_bilinear_matrix_rows(k) + j = psi_bilinear_matrix_columns(k) + Yt(j,l) = Yt(j,l) + Z(i,l) * psi_bilinear_matrix_values(k,1) + enddo + enddo + !$OMP END DO + !$OMP END PARALLEL + ! !!! + ! Y = UY @ D @ Vt or Yt = V @ Dt @ UYt + ! !!! + allocate(D(r),V(n,r), UYt(r,r)) + ! !!! + call svd(Yt,size(Yt,1),V,size(V,1),D,UYt,size(UYt,1),n,r) + deallocate(Yt) + ! !!! + ! U(m,r) = Z(m,r) @ UY(r,r) or U = Z @ (UYt).T + ! !!! + allocate(U(m,r)) + call dgemm('N','T',m,r,r,1.d0,Z,size(Z,1),UYt,size(UYt,1),0.d0,U,size(U,1)) + deallocate(UYt,Z) + ! !!! + !do i=1,r + ! print *, i, real(D(i)), real(D(i)**2), real(sum(D(1:i)**2)) + ! if (D(i) < 1.d-15) then + ! k = i + ! exit + ! endif + !enddo + !print *, 'threshold: ', 2.858 * D(k/2) + ! !!! + ! Build the new determinant: U @ D @ Vt + ! !!! + !!$OMP PARALLEL DEFAULT(SHARED) PRIVATE(i,j,k,l) + !!$OMP DO + !! + !print *, 'ok 1' + !N_det = m * n + !print *, 'ok 11' + !TOUCH N_det + !psi_bilinear_matrix_values(:,1) = 0.d0 + !TOUCH psi_bilinear_matrix_values + ! print *, size(psi_bilinear_matrix_values,1), size(D), size(U,1), size(U,2), size(V,1), size(V,2) + print*, PSI_energy(1) + nuclear_repulsion + psi_bilinear_matrix(:,:,:) = 0.d0 + do r = 1, n + call generate_all_alpha_beta_det_products + do i = 1, N_det_beta_unique + do j = 1, N_det_alpha_unique + psi_bilinear_matrix(j,i,1) = 0.d0 + do l = 1, r + psi_bilinear_matrix(j,i,1) = psi_bilinear_matrix(j,i,1) + D(l) * U(j,l) * V(i,l) + enddo + enddo + enddo + TOUCH psi_bilinear_matrix + call update_wf_of_psi_bilinear_matrix(.False.) + print*, r, PSI_energy(1) + nuclear_repulsion !CI_energy(1) + enddo + !!$OMP END DO + !!$OMP END PARALLEL + deallocate(U,D,V) + ! !!! +end diff --git a/devel/svdwf/NEED b/devel/svdwf/NEED index d3d4d2c..8d89a45 100644 --- a/devel/svdwf/NEED +++ b/devel/svdwf/NEED @@ -1 +1,2 @@ determinants +davidson_undressed diff --git a/devel/svdwf/random_svd.irp.f b/devel/svdwf/random_svd.irp.f index 9ac9119..2ae76dc 100644 --- a/devel/svdwf/random_svd.irp.f +++ b/devel/svdwf/random_svd.irp.f @@ -22,13 +22,17 @@ subroutine run allocate(Z(m,r)) - ! Z(m,r) = A(m,n).P(n,r) - Z(:,:) = 0.d0 + ! Z(m,r) = A(m,n).P(n,r) + do j=1,r + do i=1,m + Z(i,j) = 0.d0 + enddo + enddo allocate(P(n,r)) !$OMP PARALLEL DEFAULT(SHARED) PRIVATE(i,j,k,l,r1) allocate(r1(N_det,2)) - !$OMP DO + !$OMP DO do l=1,r call random_number(r1) r1(:,1) = dsqrt(-2.d0*dlog(r1(:,1))) @@ -36,7 +40,7 @@ subroutine run do k=1,N_det i = psi_bilinear_matrix_rows(k) j = psi_bilinear_matrix_columns(k) - Z(i,l) = Z(i,l) + psi_bilinear_matrix_values(k,1) * r1(k,1) + Z(i,l) = Z(i,l) + psi_bilinear_matrix_values(k,1) * r1(k,1) enddo enddo !$OMP END DO @@ -98,7 +102,7 @@ subroutine run call svd(Yt,size(Yt,1),V,size(V,1),D,UYt,size(UYt,1),n,r) deallocate(Yt) - ! U(m,r) = Z(m,r).UY(r,r) + ! U(m,r) = Z(m,r).UY(r,r) allocate(U(m,r)) call dgemm('N','T',m,r,r,1.d0,Z,size(Z,1),UYt,size(UYt,1),0.d0,U,size(U,1)) deallocate(UYt,Z) From 0f890c872d639bf1448bc3a64335f8fd2618c66f Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 8 Mar 2021 12:54:34 +0100 Subject: [PATCH 08/26] add hmo.qp to import_integrals --- .../import_integrals_mo.irp.f | 149 +++++++++++------- devel/svdwf/svdwf.irp.f | 4 + stable/utilities/truncate_wf.irp.f | 8 +- 3 files changed, 97 insertions(+), 64 deletions(-) diff --git a/devel/import_integrals/import_integrals_mo.irp.f b/devel/import_integrals/import_integrals_mo.irp.f index 966fe87..7784c87 100644 --- a/devel/import_integrals/import_integrals_mo.irp.f +++ b/devel/import_integrals/import_integrals_mo.irp.f @@ -25,6 +25,8 @@ subroutine run ! ! Vmo.qp : electron-nucleus potential ! +! hmo.qp : core hamiltonian. If hmo exists, the other 1-e files are not read +! ! Wmo.qp : electron repulsion integrals ! END_DOC @@ -53,68 +55,95 @@ subroutine run call ezfio_set_nuclei_io_nuclear_repulsion('Read') endif - A = 0.d0 - i = 1 - j = 1 - iunit = getunitandopen('Tmo.qp','r') - do - read (iunit,*,end=10) i,j, integral - if (i<0 .or. i>mo_num) then - print *, i - stop 'i out of bounds in Tmo.qp' - endif - if (j<0 .or. j>mo_num) then - print *, j - stop 'j out of bounds in Tmo.qp' - endif - A(i,j) = integral - enddo - 10 continue - close(iunit) - call ezfio_set_mo_one_e_ints_mo_integrals_kinetic(A) - call ezfio_set_mo_one_e_ints_io_mo_integrals_kinetic('Read') + logical :: exists + inquire(file='hmo.qp',exist=exists) + if (exists) then + A = 0.d0 + i = 1 + j = 1 + iunit = getunitandopen('hmo.qp','r') + do while(.true.) + read (iunit,*,end=23) i,j, integral + if (i<0 .or. i>mo_num) then + print *, i + stop 'i out of bounds in hmo.qp' + endif + if (j<0 .or. j>mo_num) then + print *, j + stop 'j out of bounds in hmo.qp' + endif + A(i,j) = integral + enddo + 23 continue + close(iunit) + call ezfio_set_mo_one_e_ints_mo_one_e_integrals(A) + call ezfio_set_mo_one_e_ints_io_mo_one_e_integrals('Read') - A = 0.d0 - i = 1 - j = 1 - iunit = getunitandopen('Pmo.qp','r') - do - read (iunit,*,end=14) i,j, integral - if (i<0 .or. i>mo_num) then - print *, i - stop 'i out of bounds in Pmo.qp' - endif - if (j<0 .or. j>mo_num) then - print *, j - stop 'j out of bounds in Pmo.qp' - endif - A(i,j) = integral - enddo - 14 continue - close(iunit) - call ezfio_set_mo_one_e_ints_mo_integrals_pseudo(A) - call ezfio_set_mo_one_e_ints_io_mo_integrals_pseudo('Read') + else + A = 0.d0 + i = 1 + j = 1 + iunit = getunitandopen('Tmo.qp','r') + do + read (iunit,*,end=10) i,j, integral + if (i<0 .or. i>mo_num) then + print *, i + stop 'i out of bounds in Tmo.qp' + endif + if (j<0 .or. j>mo_num) then + print *, j + stop 'j out of bounds in Tmo.qp' + endif + A(i,j) = integral + enddo + 10 continue + close(iunit) + call ezfio_set_mo_one_e_ints_mo_integrals_kinetic(A) + call ezfio_set_mo_one_e_ints_io_mo_integrals_kinetic('Read') - A = 0.d0 - i = 1 - j = 1 - iunit = getunitandopen('Vmo.qp','r') - do - read (iunit,*,end=12) i,j, integral - if (i<0 .or. i>mo_num) then - print *, i - stop 'i out of bounds in Vmo.qp' - endif - if (j<0 .or. j>mo_num) then - print *, j - stop 'j out of bounds in Vmo.qp' - endif - A(i,j) = integral - enddo - 12 continue - close(iunit) - call ezfio_set_mo_one_e_ints_mo_integrals_n_e(A) - call ezfio_set_mo_one_e_ints_io_mo_integrals_n_e('Read') + A = 0.d0 + i = 1 + j = 1 + iunit = getunitandopen('Pmo.qp','r') + do + read (iunit,*,end=14) i,j, integral + if (i<0 .or. i>mo_num) then + print *, i + stop 'i out of bounds in Pmo.qp' + endif + if (j<0 .or. j>mo_num) then + print *, j + stop 'j out of bounds in Pmo.qp' + endif + A(i,j) = integral + enddo + 14 continue + close(iunit) + call ezfio_set_mo_one_e_ints_mo_integrals_pseudo(A) + call ezfio_set_mo_one_e_ints_io_mo_integrals_pseudo('Read') + + A = 0.d0 + i = 1 + j = 1 + iunit = getunitandopen('Vmo.qp','r') + do + read (iunit,*,end=12) i,j, integral + if (i<0 .or. i>mo_num) then + print *, i + stop 'i out of bounds in Vmo.qp' + endif + if (j<0 .or. j>mo_num) then + print *, j + stop 'j out of bounds in Vmo.qp' + endif + A(i,j) = integral + enddo + 12 continue + close(iunit) + call ezfio_set_mo_one_e_ints_mo_integrals_n_e(A) + call ezfio_set_mo_one_e_ints_io_mo_integrals_n_e('Read') + + endif iunit = getunitandopen('Wmo.qp','r') n_integrals=0 diff --git a/devel/svdwf/svdwf.irp.f b/devel/svdwf/svdwf.irp.f index 1f67022..c694b3e 100644 --- a/devel/svdwf/svdwf.irp.f +++ b/devel/svdwf/svdwf.irp.f @@ -53,6 +53,10 @@ subroutine run print *, 'threshold: ', 2.858 * D(k/2) print *, 'Entropy : ', entropy + call ezfio_set_spindeterminants_psi_svd_alpha(U) + call ezfio_set_spindeterminants_psi_svd_beta (Vt) + call ezfio_set_spindeterminants_psi_svd_coefs(D) + ! do i=1,n_det_alpha_unique ! print '(I6,4(X,F12.8))', i, U(i,1:4) ! enddo diff --git a/stable/utilities/truncate_wf.irp.f b/stable/utilities/truncate_wf.irp.f index 6fe00ef..f1904d5 100644 --- a/stable/utilities/truncate_wf.irp.f +++ b/stable/utilities/truncate_wf.irp.f @@ -55,16 +55,16 @@ subroutine routine_s2 integer :: i,j,k double precision :: accu(N_states) - print *, 'Weights of the SOP' + print *, 'Weights of the CFG' do i=1,N_det - print *, i, real(weight_occ_pattern(det_to_occ_pattern(i),:)), real(sum(weight_occ_pattern(det_to_occ_pattern(i),:))) + print *, i, real(weight_configuration(det_to_configuration(i),:)), real(sum(weight_configuration(det_to_configuration(i),:))) enddo print*, 'Min weight of the occupation pattern ?' read(5,*) wmin ndet_max = 0 do i=1,N_det - if (maxval(weight_occ_pattern( det_to_occ_pattern(i),:)) < wmin) cycle + if (maxval(weight_configuration( det_to_configuration(i),:)) < wmin) cycle ndet_max = ndet_max+1 enddo @@ -73,7 +73,7 @@ subroutine routine_s2 accu = 0.d0 k=0 do i = 1, N_det - if (maxval(weight_occ_pattern( det_to_occ_pattern(i),:)) < wmin) cycle + if (maxval(weight_configuration( det_to_configuration(i),:)) < wmin) cycle k = k+1 do j = 1, N_int psi_det_tmp(j,1,k) = psi_det(j,1,i) From 2399a3ecaa30ff836ac8f9504e349856b7882eed Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Fri, 12 Mar 2021 13:13:49 +0100 Subject: [PATCH 09/26] Added Hmo.qp --- .../export_integrals_mo.irp.f | 1 + .../import_integrals_mo.irp.f | 176 +++++++++++------- devel/svdwf/Evar_TruncSVD.irp.f | 5 +- 3 files changed, 110 insertions(+), 72 deletions(-) diff --git a/devel/import_integrals/export_integrals_mo.irp.f b/devel/import_integrals/export_integrals_mo.irp.f index 292a2bc..20f2ac9 100644 --- a/devel/import_integrals/export_integrals_mo.irp.f +++ b/devel/import_integrals/export_integrals_mo.irp.f @@ -61,6 +61,7 @@ subroutine run call write_2d('T_mo.qp',mo_kinetic_integrals) call write_2d('P_mo.qp',mo_pseudo_integrals) call write_2d('V_mo.qp',mo_integrals_n_e) + call write_2d('H_mo.qp',mo_one_e_integrals) iunit = getunitandopen('W_mo.qp','w') do l=1,mo_num diff --git a/devel/import_integrals/import_integrals_mo.irp.f b/devel/import_integrals/import_integrals_mo.irp.f index 966fe87..0d94bec 100644 --- a/devel/import_integrals/import_integrals_mo.irp.f +++ b/devel/import_integrals/import_integrals_mo.irp.f @@ -19,29 +19,33 @@ subroutine run ! ! Tmo.qp : kinetic energy integrals ! -! Smo.qp : overlap matrix -! ! Pmo.qp : pseudopotential integrals ! ! Vmo.qp : electron-nucleus potential + +! Hmo.qp : one-electron integrals. If Hmo is present, don't try to read V,P,T ! ! Wmo.qp : electron repulsion integrals ! END_DOC - integer :: iunit - integer :: getunitandopen + integer :: iunit + integer :: getunitandopen - integer ::i,j,k,l - double precision :: integral - double precision, allocatable :: A(:,:) + integer :: i,j,k,l + double precision :: integral + double precision, allocatable :: A(:,:) - integer :: n_integrals - integer(key_kind), allocatable :: buffer_i(:) + integer :: n_integrals + logical :: exists + integer(key_kind), allocatable :: buffer_i(:) real(integral_kind), allocatable :: buffer_values(:) allocate(buffer_i(mo_num**3), buffer_values(mo_num**3)) allocate (A(mo_num,mo_num)) + PROVIDE mo_two_e_integrals_in_map + + ! Nuclear repulsion A(1,1) = huge(1.d0) iunit = getunitandopen('E.qp','r') @@ -53,68 +57,102 @@ subroutine run call ezfio_set_nuclei_io_nuclear_repulsion('Read') endif - A = 0.d0 - i = 1 - j = 1 - iunit = getunitandopen('Tmo.qp','r') - do - read (iunit,*,end=10) i,j, integral - if (i<0 .or. i>mo_num) then - print *, i - stop 'i out of bounds in Tmo.qp' - endif - if (j<0 .or. j>mo_num) then - print *, j - stop 'j out of bounds in Tmo.qp' - endif - A(i,j) = integral - enddo - 10 continue - close(iunit) - call ezfio_set_mo_one_e_ints_mo_integrals_kinetic(A) - call ezfio_set_mo_one_e_ints_io_mo_integrals_kinetic('Read') - A = 0.d0 - i = 1 - j = 1 - iunit = getunitandopen('Pmo.qp','r') - do - read (iunit,*,end=14) i,j, integral - if (i<0 .or. i>mo_num) then - print *, i - stop 'i out of bounds in Pmo.qp' - endif - if (j<0 .or. j>mo_num) then - print *, j - stop 'j out of bounds in Pmo.qp' - endif - A(i,j) = integral - enddo - 14 continue - close(iunit) - call ezfio_set_mo_one_e_ints_mo_integrals_pseudo(A) - call ezfio_set_mo_one_e_ints_io_mo_integrals_pseudo('Read') + ! One-electron integrals - A = 0.d0 - i = 1 - j = 1 - iunit = getunitandopen('Vmo.qp','r') - do - read (iunit,*,end=12) i,j, integral - if (i<0 .or. i>mo_num) then - print *, i - stop 'i out of bounds in Vmo.qp' - endif - if (j<0 .or. j>mo_num) then - print *, j - stop 'j out of bounds in Vmo.qp' - endif - A(i,j) = integral - enddo - 12 continue - close(iunit) - call ezfio_set_mo_one_e_ints_mo_integrals_n_e(A) - call ezfio_set_mo_one_e_ints_io_mo_integrals_n_e('Read') + exists = .False. + inquire(file='Hmo.qp',exist=exists) + if (exists) then + + A = 0.d0 + i = 1 + j = 1 + iunit = getunitandopen('Hmo.qp','r') + do + read (iunit,*,end=8) i,j, integral + if (i<0 .or. i>mo_num) then + print *, i + stop 'i out of bounds in Hmo.qp' + endif + if (j<0 .or. j>mo_num) then + print *, j + stop 'j out of bounds in Hmo.qp' + endif + A(i,j) = integral + enddo + 8 continue + close(iunit) + call ezfio_set_mo_one_e_ints_mo_one_e_integrals(A) + call ezfio_set_mo_one_e_ints_io_mo_one_e_integrals('Read') + + else + + A = 0.d0 + i = 1 + j = 1 + iunit = getunitandopen('Tmo.qp','r') + do + read (iunit,*,end=10) i,j, integral + if (i<0 .or. i>mo_num) then + print *, i + stop 'i out of bounds in Tmo.qp' + endif + if (j<0 .or. j>mo_num) then + print *, j + stop 'j out of bounds in Tmo.qp' + endif + A(i,j) = integral + enddo + 10 continue + close(iunit) + call ezfio_set_mo_one_e_ints_mo_integrals_kinetic(A) + call ezfio_set_mo_one_e_ints_io_mo_integrals_kinetic('Read') + + A = 0.d0 + i = 1 + j = 1 + iunit = getunitandopen('Pmo.qp','r') + do + read (iunit,*,end=14) i,j, integral + if (i<0 .or. i>mo_num) then + print *, i + stop 'i out of bounds in Pmo.qp' + endif + if (j<0 .or. j>mo_num) then + print *, j + stop 'j out of bounds in Pmo.qp' + endif + A(i,j) = integral + enddo + 14 continue + close(iunit) + call ezfio_set_mo_one_e_ints_mo_integrals_pseudo(A) + call ezfio_set_mo_one_e_ints_io_mo_integrals_pseudo('Read') + + A = 0.d0 + i = 1 + j = 1 + iunit = getunitandopen('Vmo.qp','r') + do + read (iunit,*,end=12) i,j, integral + if (i<0 .or. i>mo_num) then + print *, i + stop 'i out of bounds in Vmo.qp' + endif + if (j<0 .or. j>mo_num) then + print *, j + stop 'j out of bounds in Vmo.qp' + endif + A(i,j) = integral + enddo + 12 continue + close(iunit) + call ezfio_set_mo_one_e_ints_mo_integrals_n_e(A) + call ezfio_set_mo_one_e_ints_io_mo_integrals_n_e('Read') + + end if + + ! Two-electron integrals iunit = getunitandopen('Wmo.qp','r') n_integrals=0 diff --git a/devel/svdwf/Evar_TruncSVD.irp.f b/devel/svdwf/Evar_TruncSVD.irp.f index 4ae793d..3476d0d 100644 --- a/devel/svdwf/Evar_TruncSVD.irp.f +++ b/devel/svdwf/Evar_TruncSVD.irp.f @@ -158,10 +158,9 @@ subroutine run enddo TOUCH psi_bilinear_matrix call update_wf_of_psi_bilinear_matrix(.False.) - print*, r, PSI_energy(1) + nuclear_repulsion !CI_energy(1) + print*, r, PSI_energy(1) + nuclear_repulsion, s2_values(1) !CI_energy(1) + call save_wavefunction() enddo - !!$OMP END DO - !!$OMP END PARALLEL deallocate(U,D,V) ! !!! end From 04443346847b75751c329a48a58d8601e993d364 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 17 Mar 2021 14:00:56 +0100 Subject: [PATCH 10/26] Bug fix --- devel/import_integrals/export_integrals_mo.irp.f | 2 ++ 1 file changed, 2 insertions(+) diff --git a/devel/import_integrals/export_integrals_mo.irp.f b/devel/import_integrals/export_integrals_mo.irp.f index 292a2bc..5e47145 100644 --- a/devel/import_integrals/export_integrals_mo.irp.f +++ b/devel/import_integrals/export_integrals_mo.irp.f @@ -1,4 +1,5 @@ program export_integrals_mo + PROVIDE mo_two_e_integrals_in_map call run end @@ -55,6 +56,7 @@ subroutine run double precision, external :: get_two_e_integral + allocate (A(mo_num,mo_num)) call ezfio_set_nuclei_nuclear_repulsion(nuclear_repulsion) From ec6c19596cddb6cb075e53fc495e9a213089e1c2 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 17 Mar 2021 14:08:24 +0100 Subject: [PATCH 11/26] Bug fix in import_integrals_mo --- .../export_integrals_mo.irp.f | 9 +-- .../import_integrals_mo.irp.f | 63 ++++++++++--------- 2 files changed, 40 insertions(+), 32 deletions(-) diff --git a/devel/import_integrals/export_integrals_mo.irp.f b/devel/import_integrals/export_integrals_mo.irp.f index ba8a387..be0d558 100644 --- a/devel/import_integrals/export_integrals_mo.irp.f +++ b/devel/import_integrals/export_integrals_mo.irp.f @@ -54,7 +54,7 @@ subroutine run integer :: n_integrals integer(key_kind) :: idx - double precision, external :: get_two_e_integral + double precision, external :: mo_two_e_integral allocate (A(mo_num,mo_num)) @@ -68,9 +68,10 @@ subroutine run iunit = getunitandopen('W_mo.qp','w') do l=1,mo_num do k=1,mo_num - do j=1,mo_num - do i=1,mo_num - integral = get_two_e_integral(i,j,k,l,mo_integrals_map) + do j=l,mo_num + do i=k,mo_num + if (i==j .and. kmo_num) then print *, i - stop 'i out of bounds in Hmo.qp' + stop 'i out of bounds in H_mo.qp' endif if (j<0 .or. j>mo_num) then print *, j - stop 'j out of bounds in Hmo.qp' + stop 'j out of bounds in H_mo.qp' endif A(i,j) = integral enddo @@ -83,22 +84,27 @@ subroutine run close(iunit) call ezfio_set_mo_one_e_ints_mo_one_e_integrals(A) call ezfio_set_mo_one_e_ints_io_mo_one_e_integrals('Read') + call ezfio_set_mo_one_e_ints_io_mo_integrals_kinetic('None') + call ezfio_set_mo_one_e_ints_io_mo_integrals_pseudo('None') + call ezfio_set_mo_one_e_ints_io_mo_integrals_n_e('None') else + call ezfio_set_mo_one_e_ints_io_mo_one_e_integrals('None') + A = 0.d0 i = 1 j = 1 - iunit = getunitandopen('Tmo.qp','r') + iunit = getunitandopen('T_mo.qp','r') do read (iunit,*,end=10) i,j, integral if (i<0 .or. i>mo_num) then print *, i - stop 'i out of bounds in Tmo.qp' + stop 'i out of bounds in T_mo.qp' endif if (j<0 .or. j>mo_num) then print *, j - stop 'j out of bounds in Tmo.qp' + stop 'j out of bounds in T_mo.qp' endif A(i,j) = integral enddo @@ -110,16 +116,16 @@ subroutine run A = 0.d0 i = 1 j = 1 - iunit = getunitandopen('Pmo.qp','r') + iunit = getunitandopen('P_mo.qp','r') do read (iunit,*,end=14) i,j, integral if (i<0 .or. i>mo_num) then print *, i - stop 'i out of bounds in Pmo.qp' + stop 'i out of bounds in P_mo.qp' endif if (j<0 .or. j>mo_num) then print *, j - stop 'j out of bounds in Pmo.qp' + stop 'j out of bounds in P_mo.qp' endif A(i,j) = integral enddo @@ -131,16 +137,16 @@ subroutine run A = 0.d0 i = 1 j = 1 - iunit = getunitandopen('Vmo.qp','r') + iunit = getunitandopen('V_mo.qp','r') do read (iunit,*,end=12) i,j, integral if (i<0 .or. i>mo_num) then print *, i - stop 'i out of bounds in Vmo.qp' + stop 'i out of bounds in V_mo.qp' endif if (j<0 .or. j>mo_num) then print *, j - stop 'j out of bounds in Vmo.qp' + stop 'j out of bounds in V_mo.qp' endif A(i,j) = integral enddo @@ -154,7 +160,7 @@ subroutine run ! Two-electron integrals - iunit = getunitandopen('Wmo.qp','r') + iunit = getunitandopen('W_mo.qp','r') n_integrals=0 i = 1 j = 1 @@ -165,26 +171,25 @@ subroutine run read (iunit,*,end=13) i,j,k,l, integral if (i<0 .or. i>mo_num) then print *, i - stop 'i out of bounds in Wmo.qp' + stop 'i out of bounds in W_mo.qp' endif if (j<0 .or. j>mo_num) then print *, j - stop 'j out of bounds in Wmo.qp' + stop 'j out of bounds in W_mo.qp' endif if (k<0 .or. k>mo_num) then print *, k - stop 'k out of bounds in Wmo.qp' + stop 'k out of bounds in W_mo.qp' endif if (l<0 .or. l>mo_num) then print *, l - stop 'l out of bounds in Wmo.qp' + stop 'l out of bounds in W_mo.qp' endif n_integrals += 1 call mo_two_e_integrals_index(i, j, k, l, buffer_i(n_integrals) ) buffer_values(n_integrals) = integral if (n_integrals == size(buffer_i)) then - call insert_into_mo_integrals_map(n_integrals, buffer_i, buffer_values, & - real(mo_integrals_threshold,integral_kind)) + call map_append(mo_integrals_map, buffer_i, buffer_values, n_integrals) n_integrals = 0 endif enddo @@ -192,13 +197,15 @@ subroutine run close(iunit) if (n_integrals > 0) then - call insert_into_mo_integrals_map(n_integrals, buffer_i, buffer_values, & - real(mo_integrals_threshold,integral_kind)) + call map_append(mo_integrals_map, buffer_i, buffer_values, n_integrals) endif + call map_sort(mo_integrals_map) call map_unique(mo_integrals_map) call map_save_to_disk(trim(ezfio_filename)//'/work/mo_ints',mo_integrals_map) call ezfio_set_mo_two_e_ints_io_mo_two_e_integrals('Read') end + + From 318cd87976850450045be9aec7dee411028b8c46 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 3 May 2021 15:21:05 +0200 Subject: [PATCH 12/26] Tab --- devel/svdwf/Evar_TruncSVD.irp.f | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devel/svdwf/Evar_TruncSVD.irp.f b/devel/svdwf/Evar_TruncSVD.irp.f index 3476d0d..62befde 100644 --- a/devel/svdwf/Evar_TruncSVD.irp.f +++ b/devel/svdwf/Evar_TruncSVD.irp.f @@ -43,7 +43,7 @@ subroutine run r1(:,1) = r1(:,1) * dcos(dtwo_pi*r1(:,2)) do k=1,N_det i = psi_bilinear_matrix_rows(k) - j = psi_bilinear_matrix_columns(k) + j = psi_bilinear_matrix_columns(k) Z(i,l) = Z(i,l) + psi_bilinear_matrix_values(k,1) * r1(k,1) enddo enddo From 5fcb287955fade9715d7a6a7ecac0ddc98364bbc Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 5 May 2021 17:15:14 +0200 Subject: [PATCH 13/26] Start writing trexio file --- devel/mpn/generate_fci.irp.f | 8 + devel/trexio/EZFIO.cfg | 6 + devel/trexio/LIB | 2 + devel/trexio/NEED | 2 + devel/trexio/README.rst | 4 + devel/trexio/export_trexio.irp.f | 18 + devel/trexio/trexio.irp.f | 8 + devel/trexio/trexio_f.f90 | 2129 ++++++++++++++++++++++++++++++ 8 files changed, 2177 insertions(+) create mode 100644 devel/trexio/EZFIO.cfg create mode 100644 devel/trexio/LIB create mode 100644 devel/trexio/NEED create mode 100644 devel/trexio/README.rst create mode 100644 devel/trexio/export_trexio.irp.f create mode 100644 devel/trexio/trexio.irp.f create mode 100644 devel/trexio/trexio_f.f90 diff --git a/devel/mpn/generate_fci.irp.f b/devel/mpn/generate_fci.irp.f index 6a381f2..5108862 100644 --- a/devel/mpn/generate_fci.irp.f +++ b/devel/mpn/generate_fci.irp.f @@ -40,7 +40,11 @@ subroutine generate_fci_space endif t = ior(u,u-1) t1 = t+1 +IRP_IF WITHOUT_TRAILZ + t2 = shiftr((iand(not(t),t1)-1), popcnt(ieor(u,u-1))) +IRP_ELSE t2 = shiftr((iand(not(t),t1)-1), trailz(u)+1) +IRP_ENDIF u = ior(t1,t2) enddo @@ -59,7 +63,11 @@ subroutine generate_fci_space endif t = ior(u,u-1) t1 = t+1 +IRP_IF WITHOUT_TRAILZ + t2 = shiftr((iand(not(t),t1)-1), popcnt(ieor(u,u-1))) +IRP_ELSE t2 = shiftr((iand(not(t),t1)-1), trailz(u)+1) +IRP_ENDIF u = ior(t1,t2) enddo diff --git a/devel/trexio/EZFIO.cfg b/devel/trexio/EZFIO.cfg new file mode 100644 index 0000000..6fb6815 --- /dev/null +++ b/devel/trexio/EZFIO.cfg @@ -0,0 +1,6 @@ +[backend] +type: integer +doc: Back-end used in TREXIO. 0: HDF5, 1:Text +interface: ezfio, ocaml, provider +default: 0 + diff --git a/devel/trexio/LIB b/devel/trexio/LIB new file mode 100644 index 0000000..91c0923 --- /dev/null +++ b/devel/trexio/LIB @@ -0,0 +1,2 @@ +-ltrexio + diff --git a/devel/trexio/NEED b/devel/trexio/NEED new file mode 100644 index 0000000..3fb7770 --- /dev/null +++ b/devel/trexio/NEED @@ -0,0 +1,2 @@ +ezfio_files +hartree_fock diff --git a/devel/trexio/README.rst b/devel/trexio/README.rst new file mode 100644 index 0000000..5f1ba3b --- /dev/null +++ b/devel/trexio/README.rst @@ -0,0 +1,4 @@ +====== +trexio +====== + diff --git a/devel/trexio/export_trexio.irp.f b/devel/trexio/export_trexio.irp.f new file mode 100644 index 0000000..d6d9cb0 --- /dev/null +++ b/devel/trexio/export_trexio.irp.f @@ -0,0 +1,18 @@ +program trexio + use trexio + implicit none + BEGIN_DOC +! Exports the wave function in TREXIO format + END_DOC + + integer(8) :: trexio_file + integer :: rc + + character*(256) :: filename + + filename = trim(ezfio_work_dir)//'/trexio.h5' +! Electrons + +end + +! -*- mode: f90 -*- diff --git a/devel/trexio/trexio.irp.f b/devel/trexio/trexio.irp.f new file mode 100644 index 0000000..d97b444 --- /dev/null +++ b/devel/trexio/trexio.irp.f @@ -0,0 +1,8 @@ +BEGIN_PROVIDER [ character*(1024), trexio_filename ] + implicit none + BEGIN_DOC + ! Name of the TREXIO file + END_DOC + filename = trim(ezfio_work_dir)//'/trexio.h5' +END_PROVIDER + diff --git a/devel/trexio/trexio_f.f90 b/devel/trexio/trexio_f.f90 new file mode 100644 index 0000000..a072766 --- /dev/null +++ b/devel/trexio/trexio_f.f90 @@ -0,0 +1,2129 @@ +module trexio + + use, intrinsic :: iso_c_binding + implicit none + + integer, parameter :: trexio_exit_code = 4 + + integer, parameter :: TREXIO_HDF5 = 0 + integer, parameter :: TREXIO_TEXT = 1 +! integer, parameter :: TREXIO_JSON = 2 + integer, parameter :: TREXIO_INVALID_BACK_END = 2 + +integer(trexio_exit_code), parameter :: TREXIO_FAILURE = -1 +integer(trexio_exit_code), parameter :: TREXIO_SUCCESS = 0 +integer(trexio_exit_code), parameter :: TREXIO_INVALID_ARG_1 = 1 +integer(trexio_exit_code), parameter :: TREXIO_INVALID_ARG_2 = 2 +integer(trexio_exit_code), parameter :: TREXIO_INVALID_ARG_3 = 3 +integer(trexio_exit_code), parameter :: TREXIO_INVALID_ARG_4 = 4 +integer(trexio_exit_code), parameter :: TREXIO_INVALID_ARG_5 = 5 +integer(trexio_exit_code), parameter :: TREXIO_END = 6 +integer(trexio_exit_code), parameter :: TREXIO_READONLY = 7 +integer(trexio_exit_code), parameter :: TREXIO_ERRNO = 8 +integer(trexio_exit_code), parameter :: TREXIO_INVALID_ID = 9 +integer(trexio_exit_code), parameter :: TREXIO_ALLOCATION_FAILED = 10 +integer(trexio_exit_code), parameter :: TREXIO_HAS_NOT = 11 +integer(trexio_exit_code), parameter :: TREXIO_INVALID_NUM = 12 + +interface + subroutine trexio_string_of_error (error, string) bind(C, name='trexio_string_of_error_f') + use, intrinsic :: iso_c_binding + import + integer (trexio_exit_code), intent(in), value :: error + character, intent(out) :: string(128) + end subroutine trexio_string_of_error +end interface + +interface + integer(8) function trexio_open_c (filename, mode, backend) bind(C, name="trexio_open") + use, intrinsic :: iso_c_binding + character(kind=c_char), dimension(*) :: filename + character, intent(in), value :: mode + integer, intent(in), value :: backend + end function trexio_open_c +end interface + +interface + integer function trexio_close (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_close +end interface +interface + integer function trexio_has_nucleus_charge (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_nucleus_charge +end interface +interface + integer function trexio_has_nucleus_coord (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_nucleus_coord +end interface +interface + integer function trexio_has_ecp_lmax_plus_1 (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ecp_lmax_plus_1 +end interface +interface + integer function trexio_has_ecp_z_core (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ecp_z_core +end interface +interface + integer function trexio_has_ecp_local_n (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ecp_local_n +end interface +interface + integer function trexio_has_ecp_local_exponent (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ecp_local_exponent +end interface +interface + integer function trexio_has_ecp_local_coef (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ecp_local_coef +end interface +interface + integer function trexio_has_ecp_local_power (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ecp_local_power +end interface +interface + integer function trexio_has_ecp_non_local_n (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ecp_non_local_n +end interface +interface + integer function trexio_has_ecp_non_local_exponent (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ecp_non_local_exponent +end interface +interface + integer function trexio_has_ecp_non_local_coef (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ecp_non_local_coef +end interface +interface + integer function trexio_has_ecp_non_local_power (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ecp_non_local_power +end interface +interface + integer function trexio_has_basis_shell_factor (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_basis_shell_factor +end interface +interface + integer function trexio_has_basis_shell_center (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_basis_shell_center +end interface +interface + integer function trexio_has_basis_shell_ang_mom (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_basis_shell_ang_mom +end interface +interface + integer function trexio_has_basis_shell_prim_num (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_basis_shell_prim_num +end interface +interface + integer function trexio_has_basis_prim_index (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_basis_prim_index +end interface +interface + integer function trexio_has_basis_exponent (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_basis_exponent +end interface +interface + integer function trexio_has_basis_coefficient (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_basis_coefficient +end interface +interface + integer function trexio_has_ao_shell (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ao_shell +end interface +interface + integer function trexio_has_ao_normalization (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ao_normalization +end interface +interface + integer function trexio_has_ao_1e_int_overlap (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ao_1e_int_overlap +end interface +interface + integer function trexio_has_ao_1e_int_kinetic (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ao_1e_int_kinetic +end interface +interface + integer function trexio_has_ao_1e_int_potential (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ao_1e_int_potential +end interface +interface + integer function trexio_has_ao_1e_int_ecp_local (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ao_1e_int_ecp_local +end interface +interface + integer function trexio_has_ao_1e_int_ecp_non_local (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ao_1e_int_ecp_non_local +end interface +interface + integer function trexio_has_ao_1e_int_core_hamiltonian (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ao_1e_int_core_hamiltonian +end interface +interface + integer function trexio_has_ao_2e_int_eri (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ao_2e_int_eri +end interface +interface + integer function trexio_has_mo_coef (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_mo_coef +end interface +interface + integer function trexio_has_mo_occupation (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_mo_occupation +end interface +interface + integer function trexio_has_mo_1e_int_kinetic (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_mo_1e_int_kinetic +end interface +interface + integer function trexio_has_mo_1e_int_potential (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_mo_1e_int_potential +end interface +interface + integer function trexio_has_mo_1e_int_ecp_local (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_mo_1e_int_ecp_local +end interface +interface + integer function trexio_has_mo_1e_int_ecp_non_local (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_mo_1e_int_ecp_non_local +end interface +interface + integer function trexio_has_mo_1e_int_core_hamiltonian (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_mo_1e_int_core_hamiltonian +end interface +interface + integer function trexio_has_mo_2e_int_eri (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_mo_2e_int_eri +end interface +interface + integer function trexio_has_nucleus_num (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_nucleus_num +end interface +interface + integer function trexio_has_ecp_local_num_n_max (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ecp_local_num_n_max +end interface +interface + integer function trexio_has_ecp_non_local_num_n_max (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ecp_non_local_num_n_max +end interface +interface + integer function trexio_has_basis_shell_num (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_basis_shell_num +end interface +interface + integer function trexio_has_basis_prim_num (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_basis_prim_num +end interface +interface + integer function trexio_has_ao_num (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ao_num +end interface +interface + integer function trexio_has_mo_num (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_mo_num +end interface +interface + integer function trexio_read_nucleus_charge_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_nucleus_charge_32 +end interface +interface + integer function trexio_read_nucleus_coord_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_nucleus_coord_32 +end interface +interface + integer function trexio_read_ecp_lmax_plus_1_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: dset(*) + end function trexio_read_ecp_lmax_plus_1_32 +end interface +interface + integer function trexio_read_ecp_z_core_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: dset(*) + end function trexio_read_ecp_z_core_32 +end interface +interface + integer function trexio_read_ecp_local_n_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: dset(*) + end function trexio_read_ecp_local_n_32 +end interface +interface + integer function trexio_read_ecp_local_exponent_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_ecp_local_exponent_32 +end interface +interface + integer function trexio_read_ecp_local_coef_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_ecp_local_coef_32 +end interface +interface + integer function trexio_read_ecp_local_power_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: dset(*) + end function trexio_read_ecp_local_power_32 +end interface +interface + integer function trexio_read_ecp_non_local_n_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: dset(*) + end function trexio_read_ecp_non_local_n_32 +end interface +interface + integer function trexio_read_ecp_non_local_exponent_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_ecp_non_local_exponent_32 +end interface +interface + integer function trexio_read_ecp_non_local_coef_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_ecp_non_local_coef_32 +end interface +interface + integer function trexio_read_ecp_non_local_power_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: dset(*) + end function trexio_read_ecp_non_local_power_32 +end interface +interface + integer function trexio_read_basis_shell_factor_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_basis_shell_factor_32 +end interface +interface + integer function trexio_read_basis_shell_center_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: dset(*) + end function trexio_read_basis_shell_center_32 +end interface +interface + integer function trexio_read_basis_shell_ang_mom_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: dset(*) + end function trexio_read_basis_shell_ang_mom_32 +end interface +interface + integer function trexio_read_basis_shell_prim_num_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: dset(*) + end function trexio_read_basis_shell_prim_num_32 +end interface +interface + integer function trexio_read_basis_prim_index_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: dset(*) + end function trexio_read_basis_prim_index_32 +end interface +interface + integer function trexio_read_basis_exponent_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_basis_exponent_32 +end interface +interface + integer function trexio_read_basis_coefficient_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_basis_coefficient_32 +end interface +interface + integer function trexio_read_ao_shell_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: dset(*) + end function trexio_read_ao_shell_32 +end interface +interface + integer function trexio_read_ao_normalization_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_ao_normalization_32 +end interface +interface + integer function trexio_read_ao_1e_int_overlap_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_ao_1e_int_overlap_32 +end interface +interface + integer function trexio_read_ao_1e_int_kinetic_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_ao_1e_int_kinetic_32 +end interface +interface + integer function trexio_read_ao_1e_int_potential_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_ao_1e_int_potential_32 +end interface +interface + integer function trexio_read_ao_1e_int_ecp_local_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_ao_1e_int_ecp_local_32 +end interface +interface + integer function trexio_read_ao_1e_int_ecp_non_local_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_ao_1e_int_ecp_non_local_32 +end interface +interface + integer function trexio_read_ao_1e_int_core_hamiltonian_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_ao_1e_int_core_hamiltonian_32 +end interface +interface + integer function trexio_read_ao_2e_int_eri_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_ao_2e_int_eri_32 +end interface +interface + integer function trexio_read_mo_coef_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_mo_coef_32 +end interface +interface + integer function trexio_read_mo_occupation_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_mo_occupation_32 +end interface +interface + integer function trexio_read_mo_1e_int_kinetic_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_mo_1e_int_kinetic_32 +end interface +interface + integer function trexio_read_mo_1e_int_potential_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_mo_1e_int_potential_32 +end interface +interface + integer function trexio_read_mo_1e_int_ecp_local_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_mo_1e_int_ecp_local_32 +end interface +interface + integer function trexio_read_mo_1e_int_ecp_non_local_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_mo_1e_int_ecp_non_local_32 +end interface +interface + integer function trexio_read_mo_1e_int_core_hamiltonian_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_mo_1e_int_core_hamiltonian_32 +end interface +interface + integer function trexio_read_mo_2e_int_eri_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_mo_2e_int_eri_32 +end interface +interface + integer function trexio_read_nucleus_charge_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_nucleus_charge_64 +end interface +interface + integer function trexio_read_nucleus_coord_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_nucleus_coord_64 +end interface +interface + integer function trexio_read_ecp_lmax_plus_1_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_ecp_lmax_plus_1_64 +end interface +interface + integer function trexio_read_ecp_z_core_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_ecp_z_core_64 +end interface +interface + integer function trexio_read_ecp_local_n_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_ecp_local_n_64 +end interface +interface + integer function trexio_read_ecp_local_exponent_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ecp_local_exponent_64 +end interface +interface + integer function trexio_read_ecp_local_coef_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ecp_local_coef_64 +end interface +interface + integer function trexio_read_ecp_local_power_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_ecp_local_power_64 +end interface +interface + integer function trexio_read_ecp_non_local_n_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_ecp_non_local_n_64 +end interface +interface + integer function trexio_read_ecp_non_local_exponent_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ecp_non_local_exponent_64 +end interface +interface + integer function trexio_read_ecp_non_local_coef_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ecp_non_local_coef_64 +end interface +interface + integer function trexio_read_ecp_non_local_power_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_ecp_non_local_power_64 +end interface +interface + integer function trexio_read_basis_shell_factor_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_basis_shell_factor_64 +end interface +interface + integer function trexio_read_basis_shell_center_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_basis_shell_center_64 +end interface +interface + integer function trexio_read_basis_shell_ang_mom_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_basis_shell_ang_mom_64 +end interface +interface + integer function trexio_read_basis_shell_prim_num_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_basis_shell_prim_num_64 +end interface +interface + integer function trexio_read_basis_prim_index_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_basis_prim_index_64 +end interface +interface + integer function trexio_read_basis_exponent_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_basis_exponent_64 +end interface +interface + integer function trexio_read_basis_coefficient_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_basis_coefficient_64 +end interface +interface + integer function trexio_read_ao_shell_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_ao_shell_64 +end interface +interface + integer function trexio_read_ao_normalization_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ao_normalization_64 +end interface +interface + integer function trexio_read_ao_1e_int_overlap_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ao_1e_int_overlap_64 +end interface +interface + integer function trexio_read_ao_1e_int_kinetic_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ao_1e_int_kinetic_64 +end interface +interface + integer function trexio_read_ao_1e_int_potential_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ao_1e_int_potential_64 +end interface +interface + integer function trexio_read_ao_1e_int_ecp_local_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ao_1e_int_ecp_local_64 +end interface +interface + integer function trexio_read_ao_1e_int_ecp_non_local_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ao_1e_int_ecp_non_local_64 +end interface +interface + integer function trexio_read_ao_1e_int_core_hamiltonian_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ao_1e_int_core_hamiltonian_64 +end interface +interface + integer function trexio_read_ao_2e_int_eri_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ao_2e_int_eri_64 +end interface +interface + integer function trexio_read_mo_coef_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_mo_coef_64 +end interface +interface + integer function trexio_read_mo_occupation_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_mo_occupation_64 +end interface +interface + integer function trexio_read_mo_1e_int_kinetic_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_mo_1e_int_kinetic_64 +end interface +interface + integer function trexio_read_mo_1e_int_potential_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_mo_1e_int_potential_64 +end interface +interface + integer function trexio_read_mo_1e_int_ecp_local_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_mo_1e_int_ecp_local_64 +end interface +interface + integer function trexio_read_mo_1e_int_ecp_non_local_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_mo_1e_int_ecp_non_local_64 +end interface +interface + integer function trexio_read_mo_1e_int_core_hamiltonian_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_mo_1e_int_core_hamiltonian_64 +end interface +interface + integer function trexio_read_mo_2e_int_eri_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_mo_2e_int_eri_64 +end interface +interface + integer function trexio_read_nucleus_charge (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_nucleus_charge +end interface +interface + integer function trexio_read_nucleus_coord (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_nucleus_coord +end interface +interface + integer function trexio_read_ecp_lmax_plus_1 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_ecp_lmax_plus_1 +end interface +interface + integer function trexio_read_ecp_z_core (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_ecp_z_core +end interface +interface + integer function trexio_read_ecp_local_n (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_ecp_local_n +end interface +interface + integer function trexio_read_ecp_local_exponent (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ecp_local_exponent +end interface +interface + integer function trexio_read_ecp_local_coef (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ecp_local_coef +end interface +interface + integer function trexio_read_ecp_local_power (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_ecp_local_power +end interface +interface + integer function trexio_read_ecp_non_local_n (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_ecp_non_local_n +end interface +interface + integer function trexio_read_ecp_non_local_exponent (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ecp_non_local_exponent +end interface +interface + integer function trexio_read_ecp_non_local_coef (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ecp_non_local_coef +end interface +interface + integer function trexio_read_ecp_non_local_power (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_ecp_non_local_power +end interface +interface + integer function trexio_read_basis_shell_factor (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_basis_shell_factor +end interface +interface + integer function trexio_read_basis_shell_center (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_basis_shell_center +end interface +interface + integer function trexio_read_basis_shell_ang_mom (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_basis_shell_ang_mom +end interface +interface + integer function trexio_read_basis_shell_prim_num (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_basis_shell_prim_num +end interface +interface + integer function trexio_read_basis_prim_index (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_basis_prim_index +end interface +interface + integer function trexio_read_basis_exponent (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_basis_exponent +end interface +interface + integer function trexio_read_basis_coefficient (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_basis_coefficient +end interface +interface + integer function trexio_read_ao_shell (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_ao_shell +end interface +interface + integer function trexio_read_ao_normalization (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ao_normalization +end interface +interface + integer function trexio_read_ao_1e_int_overlap (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ao_1e_int_overlap +end interface +interface + integer function trexio_read_ao_1e_int_kinetic (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ao_1e_int_kinetic +end interface +interface + integer function trexio_read_ao_1e_int_potential (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ao_1e_int_potential +end interface +interface + integer function trexio_read_ao_1e_int_ecp_local (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ao_1e_int_ecp_local +end interface +interface + integer function trexio_read_ao_1e_int_ecp_non_local (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ao_1e_int_ecp_non_local +end interface +interface + integer function trexio_read_ao_1e_int_core_hamiltonian (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ao_1e_int_core_hamiltonian +end interface +interface + integer function trexio_read_ao_2e_int_eri (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_ao_2e_int_eri +end interface +interface + integer function trexio_read_mo_coef (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_mo_coef +end interface +interface + integer function trexio_read_mo_occupation (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_mo_occupation +end interface +interface + integer function trexio_read_mo_1e_int_kinetic (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_mo_1e_int_kinetic +end interface +interface + integer function trexio_read_mo_1e_int_potential (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_mo_1e_int_potential +end interface +interface + integer function trexio_read_mo_1e_int_ecp_local (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_mo_1e_int_ecp_local +end interface +interface + integer function trexio_read_mo_1e_int_ecp_non_local (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_mo_1e_int_ecp_non_local +end interface +interface + integer function trexio_read_mo_1e_int_core_hamiltonian (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_mo_1e_int_core_hamiltonian +end interface +interface + integer function trexio_read_mo_2e_int_eri (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_mo_2e_int_eri +end interface +interface + integer function trexio_read_nucleus_num_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_nucleus_num_32 +end interface +interface + integer function trexio_read_ecp_local_num_n_max_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_ecp_local_num_n_max_32 +end interface +interface + integer function trexio_read_ecp_non_local_num_n_max_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_ecp_non_local_num_n_max_32 +end interface +interface + integer function trexio_read_basis_shell_num_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_basis_shell_num_32 +end interface +interface + integer function trexio_read_basis_prim_num_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_basis_prim_num_32 +end interface +interface + integer function trexio_read_ao_num_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_ao_num_32 +end interface +interface + integer function trexio_read_mo_num_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_mo_num_32 +end interface +interface + integer function trexio_read_nucleus_num_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: num + end function trexio_read_nucleus_num_64 +end interface +interface + integer function trexio_read_ecp_local_num_n_max_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: num + end function trexio_read_ecp_local_num_n_max_64 +end interface +interface + integer function trexio_read_ecp_non_local_num_n_max_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: num + end function trexio_read_ecp_non_local_num_n_max_64 +end interface +interface + integer function trexio_read_basis_shell_num_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: num + end function trexio_read_basis_shell_num_64 +end interface +interface + integer function trexio_read_basis_prim_num_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: num + end function trexio_read_basis_prim_num_64 +end interface +interface + integer function trexio_read_ao_num_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: num + end function trexio_read_ao_num_64 +end interface +interface + integer function trexio_read_mo_num_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: num + end function trexio_read_mo_num_64 +end interface +interface + integer function trexio_read_nucleus_num (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_nucleus_num +end interface +interface + integer function trexio_read_ecp_local_num_n_max (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_ecp_local_num_n_max +end interface +interface + integer function trexio_read_ecp_non_local_num_n_max (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_ecp_non_local_num_n_max +end interface +interface + integer function trexio_read_basis_shell_num (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_basis_shell_num +end interface +interface + integer function trexio_read_basis_prim_num (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_basis_prim_num +end interface +interface + integer function trexio_read_ao_num (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_ao_num +end interface +interface + integer function trexio_read_mo_num (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_mo_num +end interface +interface + integer function trexio_write_nucleus_charge_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_nucleus_charge_32 +end interface +interface + integer function trexio_write_nucleus_coord_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_nucleus_coord_32 +end interface +interface + integer function trexio_write_ecp_lmax_plus_1_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in) :: dset(*) + end function trexio_write_ecp_lmax_plus_1_32 +end interface +interface + integer function trexio_write_ecp_z_core_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in) :: dset(*) + end function trexio_write_ecp_z_core_32 +end interface +interface + integer function trexio_write_ecp_local_n_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in) :: dset(*) + end function trexio_write_ecp_local_n_32 +end interface +interface + integer function trexio_write_ecp_local_exponent_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_ecp_local_exponent_32 +end interface +interface + integer function trexio_write_ecp_local_coef_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_ecp_local_coef_32 +end interface +interface + integer function trexio_write_ecp_local_power_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in) :: dset(*) + end function trexio_write_ecp_local_power_32 +end interface +interface + integer function trexio_write_ecp_non_local_n_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in) :: dset(*) + end function trexio_write_ecp_non_local_n_32 +end interface +interface + integer function trexio_write_ecp_non_local_exponent_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_ecp_non_local_exponent_32 +end interface +interface + integer function trexio_write_ecp_non_local_coef_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_ecp_non_local_coef_32 +end interface +interface + integer function trexio_write_ecp_non_local_power_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in) :: dset(*) + end function trexio_write_ecp_non_local_power_32 +end interface +interface + integer function trexio_write_basis_shell_factor_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_basis_shell_factor_32 +end interface +interface + integer function trexio_write_basis_shell_center_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in) :: dset(*) + end function trexio_write_basis_shell_center_32 +end interface +interface + integer function trexio_write_basis_shell_ang_mom_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in) :: dset(*) + end function trexio_write_basis_shell_ang_mom_32 +end interface +interface + integer function trexio_write_basis_shell_prim_num_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in) :: dset(*) + end function trexio_write_basis_shell_prim_num_32 +end interface +interface + integer function trexio_write_basis_prim_index_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in) :: dset(*) + end function trexio_write_basis_prim_index_32 +end interface +interface + integer function trexio_write_basis_exponent_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_basis_exponent_32 +end interface +interface + integer function trexio_write_basis_coefficient_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_basis_coefficient_32 +end interface +interface + integer function trexio_write_ao_shell_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in) :: dset(*) + end function trexio_write_ao_shell_32 +end interface +interface + integer function trexio_write_ao_normalization_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_ao_normalization_32 +end interface +interface + integer function trexio_write_ao_1e_int_overlap_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_ao_1e_int_overlap_32 +end interface +interface + integer function trexio_write_ao_1e_int_kinetic_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_ao_1e_int_kinetic_32 +end interface +interface + integer function trexio_write_ao_1e_int_potential_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_ao_1e_int_potential_32 +end interface +interface + integer function trexio_write_ao_1e_int_ecp_local_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_ao_1e_int_ecp_local_32 +end interface +interface + integer function trexio_write_ao_1e_int_ecp_non_local_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_ao_1e_int_ecp_non_local_32 +end interface +interface + integer function trexio_write_ao_1e_int_core_hamiltonian_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_ao_1e_int_core_hamiltonian_32 +end interface +interface + integer function trexio_write_ao_2e_int_eri_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_ao_2e_int_eri_32 +end interface +interface + integer function trexio_write_mo_coef_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_mo_coef_32 +end interface +interface + integer function trexio_write_mo_occupation_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_mo_occupation_32 +end interface +interface + integer function trexio_write_mo_1e_int_kinetic_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_mo_1e_int_kinetic_32 +end interface +interface + integer function trexio_write_mo_1e_int_potential_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_mo_1e_int_potential_32 +end interface +interface + integer function trexio_write_mo_1e_int_ecp_local_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_mo_1e_int_ecp_local_32 +end interface +interface + integer function trexio_write_mo_1e_int_ecp_non_local_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_mo_1e_int_ecp_non_local_32 +end interface +interface + integer function trexio_write_mo_1e_int_core_hamiltonian_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_mo_1e_int_core_hamiltonian_32 +end interface +interface + integer function trexio_write_mo_2e_int_eri_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_mo_2e_int_eri_32 +end interface +interface + integer function trexio_write_nucleus_charge_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_nucleus_charge_64 +end interface +interface + integer function trexio_write_nucleus_coord_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_nucleus_coord_64 +end interface +interface + integer function trexio_write_ecp_lmax_plus_1_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_ecp_lmax_plus_1_64 +end interface +interface + integer function trexio_write_ecp_z_core_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_ecp_z_core_64 +end interface +interface + integer function trexio_write_ecp_local_n_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_ecp_local_n_64 +end interface +interface + integer function trexio_write_ecp_local_exponent_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ecp_local_exponent_64 +end interface +interface + integer function trexio_write_ecp_local_coef_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ecp_local_coef_64 +end interface +interface + integer function trexio_write_ecp_local_power_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_ecp_local_power_64 +end interface +interface + integer function trexio_write_ecp_non_local_n_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_ecp_non_local_n_64 +end interface +interface + integer function trexio_write_ecp_non_local_exponent_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ecp_non_local_exponent_64 +end interface +interface + integer function trexio_write_ecp_non_local_coef_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ecp_non_local_coef_64 +end interface +interface + integer function trexio_write_ecp_non_local_power_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_ecp_non_local_power_64 +end interface +interface + integer function trexio_write_basis_shell_factor_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_basis_shell_factor_64 +end interface +interface + integer function trexio_write_basis_shell_center_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_basis_shell_center_64 +end interface +interface + integer function trexio_write_basis_shell_ang_mom_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_basis_shell_ang_mom_64 +end interface +interface + integer function trexio_write_basis_shell_prim_num_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_basis_shell_prim_num_64 +end interface +interface + integer function trexio_write_basis_prim_index_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_basis_prim_index_64 +end interface +interface + integer function trexio_write_basis_exponent_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_basis_exponent_64 +end interface +interface + integer function trexio_write_basis_coefficient_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_basis_coefficient_64 +end interface +interface + integer function trexio_write_ao_shell_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_ao_shell_64 +end interface +interface + integer function trexio_write_ao_normalization_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ao_normalization_64 +end interface +interface + integer function trexio_write_ao_1e_int_overlap_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ao_1e_int_overlap_64 +end interface +interface + integer function trexio_write_ao_1e_int_kinetic_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ao_1e_int_kinetic_64 +end interface +interface + integer function trexio_write_ao_1e_int_potential_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ao_1e_int_potential_64 +end interface +interface + integer function trexio_write_ao_1e_int_ecp_local_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ao_1e_int_ecp_local_64 +end interface +interface + integer function trexio_write_ao_1e_int_ecp_non_local_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ao_1e_int_ecp_non_local_64 +end interface +interface + integer function trexio_write_ao_1e_int_core_hamiltonian_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ao_1e_int_core_hamiltonian_64 +end interface +interface + integer function trexio_write_ao_2e_int_eri_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ao_2e_int_eri_64 +end interface +interface + integer function trexio_write_mo_coef_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_mo_coef_64 +end interface +interface + integer function trexio_write_mo_occupation_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_mo_occupation_64 +end interface +interface + integer function trexio_write_mo_1e_int_kinetic_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_mo_1e_int_kinetic_64 +end interface +interface + integer function trexio_write_mo_1e_int_potential_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_mo_1e_int_potential_64 +end interface +interface + integer function trexio_write_mo_1e_int_ecp_local_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_mo_1e_int_ecp_local_64 +end interface +interface + integer function trexio_write_mo_1e_int_ecp_non_local_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_mo_1e_int_ecp_non_local_64 +end interface +interface + integer function trexio_write_mo_1e_int_core_hamiltonian_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_mo_1e_int_core_hamiltonian_64 +end interface +interface + integer function trexio_write_mo_2e_int_eri_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_mo_2e_int_eri_64 +end interface +interface + integer function trexio_write_nucleus_charge (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_nucleus_charge +end interface +interface + integer function trexio_write_nucleus_coord (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_nucleus_coord +end interface +interface + integer function trexio_write_ecp_lmax_plus_1 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_ecp_lmax_plus_1 +end interface +interface + integer function trexio_write_ecp_z_core (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_ecp_z_core +end interface +interface + integer function trexio_write_ecp_local_n (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_ecp_local_n +end interface +interface + integer function trexio_write_ecp_local_exponent (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ecp_local_exponent +end interface +interface + integer function trexio_write_ecp_local_coef (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ecp_local_coef +end interface +interface + integer function trexio_write_ecp_local_power (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_ecp_local_power +end interface +interface + integer function trexio_write_ecp_non_local_n (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_ecp_non_local_n +end interface +interface + integer function trexio_write_ecp_non_local_exponent (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ecp_non_local_exponent +end interface +interface + integer function trexio_write_ecp_non_local_coef (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ecp_non_local_coef +end interface +interface + integer function trexio_write_ecp_non_local_power (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_ecp_non_local_power +end interface +interface + integer function trexio_write_basis_shell_factor (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_basis_shell_factor +end interface +interface + integer function trexio_write_basis_shell_center (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_basis_shell_center +end interface +interface + integer function trexio_write_basis_shell_ang_mom (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_basis_shell_ang_mom +end interface +interface + integer function trexio_write_basis_shell_prim_num (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_basis_shell_prim_num +end interface +interface + integer function trexio_write_basis_prim_index (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_basis_prim_index +end interface +interface + integer function trexio_write_basis_exponent (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_basis_exponent +end interface +interface + integer function trexio_write_basis_coefficient (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_basis_coefficient +end interface +interface + integer function trexio_write_ao_shell (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_ao_shell +end interface +interface + integer function trexio_write_ao_normalization (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ao_normalization +end interface +interface + integer function trexio_write_ao_1e_int_overlap (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ao_1e_int_overlap +end interface +interface + integer function trexio_write_ao_1e_int_kinetic (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ao_1e_int_kinetic +end interface +interface + integer function trexio_write_ao_1e_int_potential (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ao_1e_int_potential +end interface +interface + integer function trexio_write_ao_1e_int_ecp_local (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ao_1e_int_ecp_local +end interface +interface + integer function trexio_write_ao_1e_int_ecp_non_local (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ao_1e_int_ecp_non_local +end interface +interface + integer function trexio_write_ao_1e_int_core_hamiltonian (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ao_1e_int_core_hamiltonian +end interface +interface + integer function trexio_write_ao_2e_int_eri (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_ao_2e_int_eri +end interface +interface + integer function trexio_write_mo_coef (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_mo_coef +end interface +interface + integer function trexio_write_mo_occupation (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_mo_occupation +end interface +interface + integer function trexio_write_mo_1e_int_kinetic (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_mo_1e_int_kinetic +end interface +interface + integer function trexio_write_mo_1e_int_potential (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_mo_1e_int_potential +end interface +interface + integer function trexio_write_mo_1e_int_ecp_local (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_mo_1e_int_ecp_local +end interface +interface + integer function trexio_write_mo_1e_int_ecp_non_local (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_mo_1e_int_ecp_non_local +end interface +interface + integer function trexio_write_mo_1e_int_core_hamiltonian (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_mo_1e_int_core_hamiltonian +end interface +interface + integer function trexio_write_mo_2e_int_eri (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_mo_2e_int_eri +end interface +interface + integer function trexio_write_nucleus_num_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_nucleus_num_32 +end interface +interface + integer function trexio_write_ecp_local_num_n_max_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_ecp_local_num_n_max_32 +end interface +interface + integer function trexio_write_ecp_non_local_num_n_max_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_ecp_non_local_num_n_max_32 +end interface +interface + integer function trexio_write_basis_shell_num_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_basis_shell_num_32 +end interface +interface + integer function trexio_write_basis_prim_num_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_basis_prim_num_32 +end interface +interface + integer function trexio_write_ao_num_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_ao_num_32 +end interface +interface + integer function trexio_write_mo_num_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_mo_num_32 +end interface +interface + integer function trexio_write_nucleus_num_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in), value :: num + end function trexio_write_nucleus_num_64 +end interface +interface + integer function trexio_write_ecp_local_num_n_max_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in), value :: num + end function trexio_write_ecp_local_num_n_max_64 +end interface +interface + integer function trexio_write_ecp_non_local_num_n_max_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in), value :: num + end function trexio_write_ecp_non_local_num_n_max_64 +end interface +interface + integer function trexio_write_basis_shell_num_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in), value :: num + end function trexio_write_basis_shell_num_64 +end interface +interface + integer function trexio_write_basis_prim_num_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in), value :: num + end function trexio_write_basis_prim_num_64 +end interface +interface + integer function trexio_write_ao_num_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in), value :: num + end function trexio_write_ao_num_64 +end interface +interface + integer function trexio_write_mo_num_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in), value :: num + end function trexio_write_mo_num_64 +end interface +interface + integer function trexio_write_nucleus_num (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_nucleus_num +end interface +interface + integer function trexio_write_ecp_local_num_n_max (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_ecp_local_num_n_max +end interface +interface + integer function trexio_write_ecp_non_local_num_n_max (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_ecp_non_local_num_n_max +end interface +interface + integer function trexio_write_basis_shell_num (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_basis_shell_num +end interface +interface + integer function trexio_write_basis_prim_num (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_basis_prim_num +end interface +interface + integer function trexio_write_ao_num (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_ao_num +end interface +interface + integer function trexio_write_mo_num (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_mo_num +end interface +contains + integer(8) function trexio_open (filename, mode, backend) + use, intrinsic :: iso_c_binding + implicit none + character(len=*) :: filename + character, intent(in), value :: mode + integer, intent(in), value :: backend + character(len=len_trim(filename)+1) :: filename_c + + filename_c = trim(filename) // c_null_char + trexio_open = trexio_open_c(filename_c, mode, backend) + end function trexio_open + +end module trexio From e6b198990a6d74eb323f2d8b2bf1e27c4361d706 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 5 May 2021 18:17:56 +0200 Subject: [PATCH 14/26] Coord --- devel/trexio/EZFIO.cfg | 8 +++- devel/trexio/LIB | 3 +- devel/trexio/export_trexio.irp.f | 75 ++++++++++++++++++++++++++------ devel/trexio/trexio.irp.f | 8 ---- 4 files changed, 70 insertions(+), 24 deletions(-) delete mode 100644 devel/trexio/trexio.irp.f diff --git a/devel/trexio/EZFIO.cfg b/devel/trexio/EZFIO.cfg index 6fb6815..3b09bc1 100644 --- a/devel/trexio/EZFIO.cfg +++ b/devel/trexio/EZFIO.cfg @@ -1,6 +1,12 @@ -[backend] +[trexio_backend] type: integer doc: Back-end used in TREXIO. 0: HDF5, 1:Text interface: ezfio, ocaml, provider default: 0 +[trexio_file] +type: character*(256) +doc: Name of the exported TREXIO file +interface: ezfio, ocaml, provider +default: None + diff --git a/devel/trexio/LIB b/devel/trexio/LIB index 91c0923..05990cb 100644 --- a/devel/trexio/LIB +++ b/devel/trexio/LIB @@ -1,2 +1 @@ --ltrexio - +-L/home/scemama/TREX/trexio/_install/lib -L/usr/lib/x86_64-linux-gnu/hdf5/serial -ltrexio -lm -lpthread -lhdf5_hl -lhdf5 diff --git a/devel/trexio/export_trexio.irp.f b/devel/trexio/export_trexio.irp.f index d6d9cb0..e2439c8 100644 --- a/devel/trexio/export_trexio.irp.f +++ b/devel/trexio/export_trexio.irp.f @@ -1,18 +1,67 @@ -program trexio - use trexio - implicit none - BEGIN_DOC -! Exports the wave function in TREXIO format - END_DOC - - integer(8) :: trexio_file - integer :: rc +program export_trexio + use trexio + implicit none + BEGIN_DOC + ! Exports the wave function in TREXIO format + END_DOC - character*(256) :: filename - - filename = trim(ezfio_work_dir)//'/trexio.h5' -! Electrons + integer(8) :: f ! TREXIO file handle + integer :: rc + + print *, 'TREXIO file : '//trim(trexio_filename) + print *, '' + + if (trexio_backend == 0) then + f = trexio_open(trexio_filename, 'w', TREXIO_HDF5) + else if (trexio_backend == 1) then + f = trexio_open(trexio_filename, 'w', TREXIO_TEXT) + endif + if (f == 0) then + print *, 'Unable to open TREXIO file for writing' + stop -1 + endif + + ! Nuclei + rc = trexio_write_nucleus_num(f, nucl_num) + call check_success(rc) + + rc = trexio_write_nucleus_charge(f, nucl_charge) + call check_success(rc) + + rc = trexio_write_nucleus_coord(f, nucl_coord_transp) + call check_success(rc) + + ! Electrons +! rc = trexio_write_electron_up_num(f, elec_alpha_num) +! call check_success(rc) +! +! rc = trexio_write_electron_dn_num(f, elec_beta_num) +! call check_success(rc) + + ! Basis +! rc = trexio_write_basis_type(f, 'Gaussian') +! call check_success(rc) + + rc = trexio_write_basis_shell_num(f, sum(Nucl_num_shell_Aos)) + call check_success(rc) + + + rc = trexio_close(f) + call check_success(rc) end + +subroutine check_success(rc) + use trexio + implicit none + integer, intent(in) :: rc + character*(128) :: str + if (rc /= TREXIO_SUCCESS) then + call trexio_string_of_error(rc,str) + print *, str + stop -1 + endif +end + ! -*- mode: f90 -*- diff --git a/devel/trexio/trexio.irp.f b/devel/trexio/trexio.irp.f deleted file mode 100644 index d97b444..0000000 --- a/devel/trexio/trexio.irp.f +++ /dev/null @@ -1,8 +0,0 @@ -BEGIN_PROVIDER [ character*(1024), trexio_filename ] - implicit none - BEGIN_DOC - ! Name of the TREXIO file - END_DOC - filename = trim(ezfio_work_dir)//'/trexio.h5' -END_PROVIDER - From 1df54bc2fe4ece70d4a7d24c4514b0824df63815 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Thu, 6 May 2021 10:40:36 +0200 Subject: [PATCH 15/26] Added electron group --- devel/trexio/export_trexio.irp.f | 8 +- devel/trexio/trexio_f.f90 | 144 +++++++++++++++++++++++++++++++ 2 files changed, 148 insertions(+), 4 deletions(-) diff --git a/devel/trexio/export_trexio.irp.f b/devel/trexio/export_trexio.irp.f index e2439c8..0d43a02 100644 --- a/devel/trexio/export_trexio.irp.f +++ b/devel/trexio/export_trexio.irp.f @@ -32,11 +32,11 @@ program export_trexio call check_success(rc) ! Electrons -! rc = trexio_write_electron_up_num(f, elec_alpha_num) -! call check_success(rc) + rc = trexio_write_electron_up_num(f, elec_alpha_num) + call check_success(rc) ! -! rc = trexio_write_electron_dn_num(f, elec_beta_num) -! call check_success(rc) + rc = trexio_write_electron_dn_num(f, elec_beta_num) + call check_success(rc) ! Basis ! rc = trexio_write_basis_type(f, 'Gaussian') diff --git a/devel/trexio/trexio_f.f90 b/devel/trexio/trexio_f.f90 index a072766..a69343b 100644 --- a/devel/trexio/trexio_f.f90 +++ b/devel/trexio/trexio_f.f90 @@ -265,6 +265,24 @@ interface integer(8), intent(in), value :: trex_file end function trexio_has_mo_2e_int_eri end interface +interface + integer function trexio_has_electron_up_num (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_electron_up_num +end interface +interface + integer function trexio_has_electron_dn_num (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_electron_dn_num +end interface +interface + integer function trexio_has_ao_cartesian (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ao_cartesian +end interface interface integer function trexio_has_nucleus_num (trex_file) bind(C) use, intrinsic :: iso_c_binding @@ -1063,6 +1081,27 @@ interface real(8), intent(out) :: dset(*) end function trexio_read_mo_2e_int_eri end interface +interface + integer function trexio_read_electron_up_num_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_electron_up_num_32 +end interface +interface + integer function trexio_read_electron_dn_num_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_electron_dn_num_32 +end interface +interface + integer function trexio_read_ao_cartesian_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_ao_cartesian_32 +end interface interface integer function trexio_read_nucleus_num_32 (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -1112,6 +1151,27 @@ interface integer(4), intent(out) :: num end function trexio_read_mo_num_32 end interface +interface + integer function trexio_read_electron_up_num_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: num + end function trexio_read_electron_up_num_64 +end interface +interface + integer function trexio_read_electron_dn_num_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: num + end function trexio_read_electron_dn_num_64 +end interface +interface + integer function trexio_read_ao_cartesian_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: num + end function trexio_read_ao_cartesian_64 +end interface interface integer function trexio_read_nucleus_num_64 (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -1161,6 +1221,27 @@ interface integer(8), intent(out) :: num end function trexio_read_mo_num_64 end interface +interface + integer function trexio_read_electron_up_num (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_electron_up_num +end interface +interface + integer function trexio_read_electron_dn_num (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_electron_dn_num +end interface +interface + integer function trexio_read_ao_cartesian (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_ao_cartesian +end interface interface integer function trexio_read_nucleus_num (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -1966,6 +2047,27 @@ interface real(8), intent(in) :: dset(*) end function trexio_write_mo_2e_int_eri end interface +interface + integer function trexio_write_electron_up_num_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_electron_up_num_32 +end interface +interface + integer function trexio_write_electron_dn_num_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_electron_dn_num_32 +end interface +interface + integer function trexio_write_ao_cartesian_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_ao_cartesian_32 +end interface interface integer function trexio_write_nucleus_num_32 (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -2015,6 +2117,27 @@ interface integer(4), intent(in), value :: num end function trexio_write_mo_num_32 end interface +interface + integer function trexio_write_electron_up_num_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in), value :: num + end function trexio_write_electron_up_num_64 +end interface +interface + integer function trexio_write_electron_dn_num_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in), value :: num + end function trexio_write_electron_dn_num_64 +end interface +interface + integer function trexio_write_ao_cartesian_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in), value :: num + end function trexio_write_ao_cartesian_64 +end interface interface integer function trexio_write_nucleus_num_64 (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -2064,6 +2187,27 @@ interface integer(8), intent(in), value :: num end function trexio_write_mo_num_64 end interface +interface + integer function trexio_write_electron_up_num (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_electron_up_num +end interface +interface + integer function trexio_write_electron_dn_num (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_electron_dn_num +end interface +interface + integer function trexio_write_ao_cartesian (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_ao_cartesian +end interface interface integer function trexio_write_nucleus_num (trex_file, num) bind(C) use, intrinsic :: iso_c_binding From 0ea3df3502d685a8a902f269b325a37eb1db2f32 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Thu, 6 May 2021 19:58:30 +0200 Subject: [PATCH 16/26] Improving trexio export --- devel/trexio/NEED | 6 +- devel/trexio/export_trexio.irp.f | 96 +++++++++++++++++++++++++++++++- devel/trexio/trexio_f.f90 | 65 +++++++++++---------- 3 files changed, 135 insertions(+), 32 deletions(-) diff --git a/devel/trexio/NEED b/devel/trexio/NEED index 3fb7770..0a886cf 100644 --- a/devel/trexio/NEED +++ b/devel/trexio/NEED @@ -1,2 +1,6 @@ ezfio_files -hartree_fock +determinants +mo_one_e_ints +mo_two_e_ints +ao_two_e_ints +ao_one_e_ints diff --git a/devel/trexio/export_trexio.irp.f b/devel/trexio/export_trexio.irp.f index 0d43a02..db740a3 100644 --- a/devel/trexio/export_trexio.irp.f +++ b/devel/trexio/export_trexio.irp.f @@ -21,7 +21,11 @@ program export_trexio stop -1 endif - ! Nuclei +! ------------------------------------------------------------------------------ + +! Nuclei +! ------ + rc = trexio_write_nucleus_num(f, nucl_num) call check_success(rc) @@ -38,7 +42,10 @@ program export_trexio rc = trexio_write_electron_dn_num(f, elec_beta_num) call check_success(rc) - ! Basis + +! Basis +! ----- + ! rc = trexio_write_basis_type(f, 'Gaussian') ! call check_success(rc) @@ -46,6 +53,89 @@ program export_trexio call check_success(rc) +! Atomic orbitals +! --------------- + + rc = trexio_write_ao_num(f, ao_num) + call check_success(rc) + + rc = trexio_write_ao_cartesian(f, 1) + call check_success(rc) + + +! One-e AO integrals +! ------------------ + + rc = trexio_write_ao_1e_int_overlap(f,ao_overlap) + call check_success(rc) + + rc = trexio_write_ao_1e_int_kinetic(f,ao_kinetic_integrals) + call check_success(rc) + + rc = trexio_write_ao_1e_int_potential_n_e(f,ao_integrals_n_e) + call check_success(rc) + + if (do_pseudo) then + rc = trexio_write_ao_1e_int_ecp_local(f,ao_pseudo_integrals_local) + call check_success(rc) + + rc = trexio_write_ao_1e_int_ecp_non_local(f,ao_pseudo_integrals_non_local) + call check_success(rc) + endif + + rc = trexio_write_ao_1e_int_core_hamiltonian(f,ao_one_e_integrals) + call check_success(rc) + + +! Molecular orbitals +! ------------------ + +! rc = trexio_write_mo_type(f, mo_label) +! call check_success(rc) + + rc = trexio_write_mo_num(f, mo_num) + call check_success(rc) + + rc = trexio_write_mo_coef(f, mo_coef) + call check_success(rc) + + +! One-e MO integrals +! ------------------ + + rc = trexio_write_mo_1e_int_kinetic(f,mo_kinetic_integrals) + call check_success(rc) + + rc = trexio_write_mo_1e_int_potential_n_e(f,mo_integrals_n_e) + call check_success(rc) + + if (do_pseudo) then + rc = trexio_write_mo_1e_int_ecp_local(f,mo_pseudo_integrals_local) + call check_success(rc) + + rc = trexio_write_mo_1e_int_ecp_non_local(f,mo_pseudo_integrals_non_local) + call check_success(rc) + endif + + rc = trexio_write_mo_1e_int_core_hamiltonian(f,one_e_dm_mo) + call check_success(rc) + + +! RDM +! ---- + +! rc = trexio_write_rdm_one_e(f,one_e_dm_mo) +! call check_success(rc) +! +! rc = trexio_write_rdm_one_e_up(f,one_e_dm_mo_alpha_average) +! call check_success(rc) +! +! rc = trexio_write_rdm_one_e_dn(f,one_e_dm_mo_beta_average) +! call check_success(rc) + + +! ------------------------------------------------------------------------------ + rc = trexio_close(f) call check_success(rc) @@ -59,7 +149,7 @@ subroutine check_success(rc) character*(128) :: str if (rc /= TREXIO_SUCCESS) then call trexio_string_of_error(rc,str) - print *, str + print *, 'TREXIO Error: ' //trim(str) stop -1 endif end diff --git a/devel/trexio/trexio_f.f90 b/devel/trexio/trexio_f.f90 index a69343b..d16652a 100644 --- a/devel/trexio/trexio_f.f90 +++ b/devel/trexio/trexio_f.f90 @@ -24,6 +24,15 @@ integer(trexio_exit_code), parameter :: TREXIO_INVALID_ID = 9 integer(trexio_exit_code), parameter :: TREXIO_ALLOCATION_FAILED = 10 integer(trexio_exit_code), parameter :: TREXIO_HAS_NOT = 11 integer(trexio_exit_code), parameter :: TREXIO_INVALID_NUM = 12 +integer(trexio_exit_code), parameter :: TREXIO_NUM_ALREADY_EXISTS = 13 +integer(trexio_exit_code), parameter :: TREXIO_OPEN_ERROR = 14 +integer(trexio_exit_code), parameter :: TREXIO_LOCK_ERROR = 15 +integer(trexio_exit_code), parameter :: TREXIO_UNLOCK_ERROR = 16 +integer(trexio_exit_code), parameter :: TREXIO_FILE_ERROR = 17 +integer(trexio_exit_code), parameter :: TREXIO_GROUP_READ_ERROR = 18 +integer(trexio_exit_code), parameter :: TREXIO_GROUP_WRITE_ERROR = 19 +integer(trexio_exit_code), parameter :: TREXIO_ELEM_READ_ERROR = 20 +integer(trexio_exit_code), parameter :: TREXIO_ELEM_WRITE_ERROR = 21 interface subroutine trexio_string_of_error (error, string) bind(C, name='trexio_string_of_error_f') @@ -188,10 +197,10 @@ interface end function trexio_has_ao_1e_int_kinetic end interface interface - integer function trexio_has_ao_1e_int_potential (trex_file) bind(C) + integer function trexio_has_ao_1e_int_potential_n_e (trex_file) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - end function trexio_has_ao_1e_int_potential + end function trexio_has_ao_1e_int_potential_n_e end interface interface integer function trexio_has_ao_1e_int_ecp_local (trex_file) bind(C) @@ -236,10 +245,10 @@ interface end function trexio_has_mo_1e_int_kinetic end interface interface - integer function trexio_has_mo_1e_int_potential (trex_file) bind(C) + integer function trexio_has_mo_1e_int_potential_n_e (trex_file) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - end function trexio_has_mo_1e_int_potential + end function trexio_has_mo_1e_int_potential_n_e end interface interface integer function trexio_has_mo_1e_int_ecp_local (trex_file) bind(C) @@ -487,11 +496,11 @@ interface end function trexio_read_ao_1e_int_kinetic_32 end interface interface - integer function trexio_read_ao_1e_int_potential_32 (trex_file, dset) bind(C) + integer function trexio_read_ao_1e_int_potential_n_e_32 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file real(4), intent(out) :: dset(*) - end function trexio_read_ao_1e_int_potential_32 + end function trexio_read_ao_1e_int_potential_n_e_32 end interface interface integer function trexio_read_ao_1e_int_ecp_local_32 (trex_file, dset) bind(C) @@ -543,11 +552,11 @@ interface end function trexio_read_mo_1e_int_kinetic_32 end interface interface - integer function trexio_read_mo_1e_int_potential_32 (trex_file, dset) bind(C) + integer function trexio_read_mo_1e_int_potential_n_e_32 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file real(4), intent(out) :: dset(*) - end function trexio_read_mo_1e_int_potential_32 + end function trexio_read_mo_1e_int_potential_n_e_32 end interface interface integer function trexio_read_mo_1e_int_ecp_local_32 (trex_file, dset) bind(C) @@ -739,11 +748,11 @@ interface end function trexio_read_ao_1e_int_kinetic_64 end interface interface - integer function trexio_read_ao_1e_int_potential_64 (trex_file, dset) bind(C) + integer function trexio_read_ao_1e_int_potential_n_e_64 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file real(8), intent(out) :: dset(*) - end function trexio_read_ao_1e_int_potential_64 + end function trexio_read_ao_1e_int_potential_n_e_64 end interface interface integer function trexio_read_ao_1e_int_ecp_local_64 (trex_file, dset) bind(C) @@ -795,11 +804,11 @@ interface end function trexio_read_mo_1e_int_kinetic_64 end interface interface - integer function trexio_read_mo_1e_int_potential_64 (trex_file, dset) bind(C) + integer function trexio_read_mo_1e_int_potential_n_e_64 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file real(8), intent(out) :: dset(*) - end function trexio_read_mo_1e_int_potential_64 + end function trexio_read_mo_1e_int_potential_n_e_64 end interface interface integer function trexio_read_mo_1e_int_ecp_local_64 (trex_file, dset) bind(C) @@ -991,11 +1000,11 @@ interface end function trexio_read_ao_1e_int_kinetic end interface interface - integer function trexio_read_ao_1e_int_potential (trex_file, dset) bind(C) + integer function trexio_read_ao_1e_int_potential_n_e (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file real(8), intent(out) :: dset(*) - end function trexio_read_ao_1e_int_potential + end function trexio_read_ao_1e_int_potential_n_e end interface interface integer function trexio_read_ao_1e_int_ecp_local (trex_file, dset) bind(C) @@ -1047,11 +1056,11 @@ interface end function trexio_read_mo_1e_int_kinetic end interface interface - integer function trexio_read_mo_1e_int_potential (trex_file, dset) bind(C) + integer function trexio_read_mo_1e_int_potential_n_e (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file real(8), intent(out) :: dset(*) - end function trexio_read_mo_1e_int_potential + end function trexio_read_mo_1e_int_potential_n_e end interface interface integer function trexio_read_mo_1e_int_ecp_local (trex_file, dset) bind(C) @@ -1453,11 +1462,11 @@ interface end function trexio_write_ao_1e_int_kinetic_32 end interface interface - integer function trexio_write_ao_1e_int_potential_32 (trex_file, dset) bind(C) + integer function trexio_write_ao_1e_int_potential_n_e_32 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file real(4), intent(in) :: dset(*) - end function trexio_write_ao_1e_int_potential_32 + end function trexio_write_ao_1e_int_potential_n_e_32 end interface interface integer function trexio_write_ao_1e_int_ecp_local_32 (trex_file, dset) bind(C) @@ -1509,11 +1518,11 @@ interface end function trexio_write_mo_1e_int_kinetic_32 end interface interface - integer function trexio_write_mo_1e_int_potential_32 (trex_file, dset) bind(C) + integer function trexio_write_mo_1e_int_potential_n_e_32 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file real(4), intent(in) :: dset(*) - end function trexio_write_mo_1e_int_potential_32 + end function trexio_write_mo_1e_int_potential_n_e_32 end interface interface integer function trexio_write_mo_1e_int_ecp_local_32 (trex_file, dset) bind(C) @@ -1705,11 +1714,11 @@ interface end function trexio_write_ao_1e_int_kinetic_64 end interface interface - integer function trexio_write_ao_1e_int_potential_64 (trex_file, dset) bind(C) + integer function trexio_write_ao_1e_int_potential_n_e_64 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file real(8), intent(in) :: dset(*) - end function trexio_write_ao_1e_int_potential_64 + end function trexio_write_ao_1e_int_potential_n_e_64 end interface interface integer function trexio_write_ao_1e_int_ecp_local_64 (trex_file, dset) bind(C) @@ -1761,11 +1770,11 @@ interface end function trexio_write_mo_1e_int_kinetic_64 end interface interface - integer function trexio_write_mo_1e_int_potential_64 (trex_file, dset) bind(C) + integer function trexio_write_mo_1e_int_potential_n_e_64 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file real(8), intent(in) :: dset(*) - end function trexio_write_mo_1e_int_potential_64 + end function trexio_write_mo_1e_int_potential_n_e_64 end interface interface integer function trexio_write_mo_1e_int_ecp_local_64 (trex_file, dset) bind(C) @@ -1957,11 +1966,11 @@ interface end function trexio_write_ao_1e_int_kinetic end interface interface - integer function trexio_write_ao_1e_int_potential (trex_file, dset) bind(C) + integer function trexio_write_ao_1e_int_potential_n_e (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file real(8), intent(in) :: dset(*) - end function trexio_write_ao_1e_int_potential + end function trexio_write_ao_1e_int_potential_n_e end interface interface integer function trexio_write_ao_1e_int_ecp_local (trex_file, dset) bind(C) @@ -2013,11 +2022,11 @@ interface end function trexio_write_mo_1e_int_kinetic end interface interface - integer function trexio_write_mo_1e_int_potential (trex_file, dset) bind(C) + integer function trexio_write_mo_1e_int_potential_n_e (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file real(8), intent(in) :: dset(*) - end function trexio_write_mo_1e_int_potential + end function trexio_write_mo_1e_int_potential_n_e end interface interface integer function trexio_write_mo_1e_int_ecp_local (trex_file, dset) bind(C) From 4372cc84030afbf45c91bf3cd6ee227aaf8ed3bc Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Thu, 20 May 2021 16:31:39 +0200 Subject: [PATCH 17/26] Added 1st version of SVD optimization --- devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f | 418 ++++++++++++++++++ 1 file changed, 418 insertions(+) create mode 100644 devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f diff --git a/devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f b/devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f new file mode 100644 index 0000000..18661de --- /dev/null +++ b/devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f @@ -0,0 +1,418 @@ +program buildpsi_diagSVDit_modif_v2 + + implicit none + + BEGIN_DOC + ! perturbative approach to build psi_postsvd + END_DOC + + read_wf = .True. + TOUCH read_wf + + PROVIDE N_int + + call run() +end + + +subroutine run + + USE OMP_LIB + + implicit none + + integer(bit_kind) :: det1(N_int,2), det2(N_int,2) + integer :: degree, i_state + + integer :: i, j, k, l, ii, jj, na, nb + + double precision :: norm_psi, inv_sqrt_norm_psi + double precision, allocatable :: Uref(:,:), Dref(:), Vtref(:,:), Aref(:,:), Vref(:,:) + + double precision :: err0, err_tmp, e_tmp, E0, overlap, E0_old, tol_energy + double precision :: ctmp, htmp, Ept2 + double precision :: E0_postsvd, overlap_postsvd, E_prev + double precision :: norm_coeff_psi, inv_sqrt_norm_coeff_psi + double precision :: overlapU, overlapU_mat, overlapV, overlapV_mat, overlap_psi + + double precision, allocatable :: Hdiag(:), Hkl(:,:), H0(:,:), H(:,:,:,:) + double precision, allocatable :: psi_postsvd(:,:), coeff_psi_perturb(:) + + integer :: n_FSVD, n_selected, n_toselect, n_tmp, it_svd, it_svd_max + integer :: n_selected2 + integer, allocatable :: numalpha_selected(:), numbeta_selected(:) + integer, allocatable :: numalpha_toselect(:), numbeta_toselect(:) + integer, allocatable :: numalpha_tmp(:), numbeta_tmp(:) + + integer(kind=8) :: W_tbeg, W_tend, W_tbeg_it, W_tend_it, W_ir + real(kind=8) :: W_tot_time, W_tot_time_it + real(kind=8) :: CPU_tbeg, CPU_tend, CPU_tbeg_it, CPU_tend_it + real(kind=8) :: CPU_tot_time, CPU_tot_time_it + real(kind=8) :: speedup, speedup_it + integer :: nb_taches + + !$OMP PARALLEL + nb_taches = OMP_GET_NUM_THREADS() + !$OMP END PARALLEL + + call CPU_TIME(CPU_tbeg) + call SYSTEM_CLOCK(COUNT=W_tbeg, COUNT_RATE=W_ir) + + i_state = 1 + + ! --------------------------------------------------------------------------------------- + ! construct the initial CISD matrix + + print *, ' ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~' + print *, ' CI matrix:', n_det_alpha_unique,'x',n_det_beta_unique + print *, ' N det :', N_det + print *, ' ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~' + + norm_psi = 0.d0 + do k = 1, N_det + norm_psi = norm_psi + psi_bilinear_matrix_values(k,i_state) & + * psi_bilinear_matrix_values(k,i_state) + enddo + print *, ' initial norm = ', norm_psi + + allocate( Aref(n_det_alpha_unique,n_det_beta_unique) ) + Aref(:,:) = 0.d0 + do k = 1, N_det + i = psi_bilinear_matrix_rows(k) + j = psi_bilinear_matrix_columns(k) + Aref(i,j) = psi_bilinear_matrix_values(k,i_state) + enddo + + ! --------------------------------------------------------------------------------------- + + + ! --------------------------------------------------------------------------------------- + ! perform a Full SVD + + allocate( Uref(n_det_alpha_unique,n_det_alpha_unique) ) + allocate( Dref(max(n_det_beta_unique,n_det_alpha_unique)) ) + allocate( Vref(n_det_beta_unique,n_det_beta_unique) ) + allocate( Vtref(n_det_beta_unique,n_det_beta_unique) ) + call svd_s(Aref, size(Aref,1), Uref, size(Uref,1), Dref, Vtref, size(Vtref,1) & + , n_det_alpha_unique, n_det_beta_unique) + + print *, ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' + + do l = 1, n_det_beta_unique + do i = 1, n_det_beta_unique + Vref(i,l) = Vtref(l,i) + enddo + enddo + deallocate( Vtref ) + + ! Truncated rank + n_selected = n_svd + call write_int(6,n_svd, 'Rank of psi') + + + !________________________________________________________________________________________________________ + ! + ! loop over SVD iterations + !________________________________________________________________________________________________________ + + tol_energy = 1.d0 + it_svd = 0 + it_svd_max = 100 + E_prev = 0.d0 + + allocate(H(n_det_alpha_unique,n_det_beta_unique,n_det_alpha_unique,n_det_beta_unique)) + allocate(psi_postsvd(n_det_alpha_unique,n_det_beta_unique)) + do while( ( it_svd .lt. it_svd_max) .and. ( tol_energy .gt. 1d-6 ) ) + + call CPU_TIME(CPU_tbeg_it) + call SYSTEM_CLOCK(COUNT=W_tbeg_it, COUNT_RATE=W_ir) + + it_svd = it_svd + 1 + + double precision :: norm + norm = 0.d0 + do j = 1, n_selected + norm = norm + Dref(j)*Dref(j) + enddo + Dref = Dref / dsqrt(norm) + +! print *, '-- Compute H --' + call const_H_uv(Uref, Vref, H) + + ! H0(i,j) = < u_i v_j | H | u_i v_j > + ! E0 = < psi_0 | H | psi_0 > + E0 = 0.d0 + do j = 1, n_selected + do i = 1, n_selected + E0 = E0 + Dref(i) * H(i,i,j,j) * Dref(j) + enddo + enddo + E0 = E0 + nuclear_repulsion +! print *,' E0 =', E0 + + double precision, allocatable :: eigval0(:) + double precision, allocatable :: eigvec0(:,:,:) + double precision, allocatable :: H_tmp(:,:,:,:) + + allocate( H_tmp(n_selected,n_selected,n_selected,n_selected) ) + do l=1,n_selected + do k=1,n_selected + do j=1,n_selected + do i=1,n_selected + H_tmp(i,j,k,l) = H(i,j,k,l) + enddo + enddo + enddo + enddo + allocate( eigval0(n_selected**2),eigvec0(n_selected,n_selected,n_selected**2)) + eigvec0 = 0.d0 + +! print *, ' --- Diag post-SVD --- ' + call lapack_diag(eigval0, eigvec0, H_tmp, n_selected**2, n_selected**2) + deallocate(H_tmp, eigval0) + +! print *, ' --- SVD --- ' + Dref = 0.d0 + call perform_newpostSVD(n_selected, eigvec0(1,1,1), Uref, Vref, Dref) + deallocate(eigvec0) + +! print *, ' --- Compute H --- ' + call const_H_uv(Uref, Vref, H) + + ! H0(i,j) = < u_i v_j | H | u_i v_j > + ! E0 = < psi_0 | H | psi_0 > + E0 = 0.d0 + norm = 0.d0 + do j = 1, n_det_beta_unique + do i = 1, n_det_beta_unique + E0 = E0 + Dref(i) * H(i,i,j,j) * Dref(j) + enddo + norm = norm + Dref(j)*Dref(j) + enddo + E0 = E0 + nuclear_repulsion +! print *,' E0 =', E0 +! print *,' norm =', norm + +! print *, ' --- Perturbation --- ' + psi_postsvd = 0.d0 + do i=1,n_selected + psi_postsvd(i,i) = Dref(i) + enddo + + Ept2 = 0.d0 + do j=1,n_selected + do i=n_selected+1,n_det_alpha_unique + ctmp = 0.d0 + do l=1,n_selected + do k=1,n_selected + ctmp = ctmp + H(k,l,i,j) * psi_postsvd(k,l) + enddo + enddo + psi_postsvd(i,j) = ctmp / (E0 - (H(i,j,i,j)+nuclear_repulsion) ) + Ept2 += ctmp*ctmp / (E0 - (H(i,j,i,j)+nuclear_repulsion) ) + enddo + enddo + + do j=n_selected+1,n_det_beta_unique + do i=1,n_selected + ctmp = 0.d0 + do l=1,n_selected + do k=1,n_selected + ctmp = ctmp + H(k,l,i,j) * psi_postsvd(k,l) + enddo + enddo + psi_postsvd(i,j) = ctmp / (E0 - (H(i,j,i,j)+nuclear_repulsion) ) + Ept2 += ctmp*ctmp / (E0 - (H(i,j,i,j)+nuclear_repulsion) ) + enddo + enddo +! do j=n_selected+1,n_det_beta_unique +! do i=n_selected+1,n_det_alpha_unique +! ctmp = 0.d0 +! do l=1,n_selected +! do k=1,n_selected +! ctmp = ctmp + H(k,l,i,j) * psi_postsvd(k,l) +! enddo +! enddo +! psi_postsvd(i,j) = ctmp / (E0 - (H(i,j,i,j)+nuclear_repulsion) ) +! Ept2 += ctmp*ctmp / (E0 - (H(i,j,i,j)+nuclear_repulsion) ) +! enddo +! enddo + + tol_energy = dabs(E_prev - E0) + print '(I5, 3(3X, F20.10))', it_svd, E0, E0 + Ept2, tol_energy + E_prev = E0 + + print *, ' --- SVD --- ' + call perform_newpostSVD(n_det_beta_unique, psi_postsvd, Uref, Vref, Dref) + + end do + + +end + + + +subroutine perform_newpostSVD(n_selected, psi_postsvd, Uref, Vref, Dref) + + USE OMP_LIB + + integer, intent(in) :: n_selected + double precision, intent(in) :: psi_postsvd(n_selected,n_selected) + double precision, intent(inout) :: Uref(n_det_alpha_unique,n_det_alpha_unique) + double precision, intent(inout) :: Vref(n_det_beta_unique ,n_det_beta_unique) + double precision, intent(inout) :: Dref(max(n_det_beta_unique,n_det_alpha_unique)) + + integer :: mm, nn, i, j, ii0, ii, l, jj, na, nb + double precision :: err0, err_norm, err_tmp, norm_tmp + double precision :: overlapU_mat, overlapV_mat, overlapU, overlapV + double precision, allocatable :: S_mat(:,:), SxVt(:,:) + double precision, allocatable :: U_svd(:,:), V_svd(:,:) + double precision, allocatable :: U_newsvd(:,:), V_newsvd(:,:), Vt_newsvd(:,:), D_newsvd(:), A_newsvd(:,:) + + mm = n_det_alpha_unique + nn = n_det_beta_unique + + allocate( U_svd(mm,n_selected) , V_svd(nn,n_selected) , S_mat(n_selected,n_selected) ) + + U_svd(1:mm,1:n_selected) = Uref(1:mm,1:n_selected) + V_svd(1:nn,1:n_selected) = Vref(1:nn,1:n_selected) + + S_mat(1:n_selected,1:n_selected) = psi_postsvd(1:n_selected,1:n_selected) + + ! first compute S_mat x transpose(V_svd) + allocate( SxVt(n_selected,nn) ) + call dgemm( 'N', 'T', n_selected, nn, n_selected, 1.d0 & + , S_mat , size(S_mat,1) & + , V_svd , size(V_svd,1) & + , 0.d0, SxVt, size(SxVt ,1) ) + deallocate(S_mat) + + ! then compute U_svd x SxVt + allocate( A_newsvd(mm,nn) ) + call dgemm( 'N', 'N', mm, nn, n_selected, 1.d0 & + , U_svd , size(U_svd ,1) & + , SxVt , size(SxVt ,1) & + , 0.d0, A_newsvd, size(A_newsvd,1) ) + deallocate( SxVt ) + + ! perform new SVD + allocate( U_newsvd(mm,mm), Vt_newsvd(nn,nn), D_newsvd(max(mm,nn)) ) + call svd_s( A_newsvd, size(A_newsvd,1), & + U_newsvd, size(U_newsvd,1), & + D_newsvd, & + Vt_newsvd, size(Vt_newsvd,1), & + mm, nn) + deallocate(A_newsvd) + + allocate( V_newsvd(nn,nn) ) + do l = 1, nn + do j = 1, nn + V_newsvd(j,l) = Vt_newsvd(l,j) + enddo + enddo + deallocate(Vt_newsvd) + + do l = 1, n_selected + Dref(l) = D_newsvd(l) + Uref(1:mm,l) = U_newsvd(1:mm,l) + Vref(1:nn,l) = V_newsvd(1:nn,l) + enddo + + deallocate(U_newsvd) + deallocate(V_newsvd) + deallocate(D_newsvd) + +end subroutine perform_newpostSVD + + + +subroutine const_H_uv(Uref, Vref, H) + + USE OMP_LIB + + implicit none + + double precision, intent(in) :: Uref(n_det_alpha_unique,n_det_beta_unique) + double precision, intent(in) :: Vref(n_det_beta_unique ,n_det_beta_unique) + double precision, intent(out) :: H(n_det_alpha_unique,n_det_beta_unique, n_det_alpha_unique,n_det_beta_unique) + + integer(bit_kind) :: det1(N_int,2), det2(N_int,2) + integer :: i, j, k, l, degree + integer :: ii0, jj0, ii, jj, n, m, np, mp + integer :: nn0, mm0, na, nb, mm, ind_gs + integer :: p,q,r,s + double precision :: h12, x + + double precision, allocatable :: H0(:,:,:,:) + double precision, allocatable :: H1(:,:,:,:) + + na = n_det_alpha_unique + nb = n_det_beta_unique + + allocate( H0(na,nb,na,nb) ) + allocate( H1(nb,na,nb,na) ) + + det1(:,1) = psi_det_alpha_unique(:,1) + det2(:,1) = psi_det_alpha_unique(:,1) + det1(:,2) = psi_det_beta_unique(:,1) + det2(:,2) = psi_det_beta_unique(:,1) + call i_H_j(det1, det2, N_int, h12) + + H0 = 0.d0 + call wall_time(t0) + !$OMP PARALLEL DEFAULT(NONE) & + !$OMP PRIVATE(p,q,r,s,i,j,k,l,det1,det2,degree,h12) & + !$OMP SHARED(na,nb,psi_det_alpha_unique,psi_det_beta_unique, & + !$OMP N_int,Uref,Vref,H0,H1,H) + + !$OMP DO + do l = 1, nb + det2(:,2) = psi_det_beta_unique(:,l) + do j = 1, nb + det1(:,2) = psi_det_beta_unique(:,j) + call get_excitation_degree_spin(det1(1,2),det2(1,2),degree,N_int) + if (degree > 2) cycle + do k = 1, na + det2(:,1) = psi_det_alpha_unique(:,k) + do i = 1, na + det1(:,1) = psi_det_alpha_unique(:,i) + call get_excitation_degree(det1,det2,degree,N_int) + if ( degree > 2) cycle + call i_H_j(det1, det2, N_int, h12) + H0(i,j,k,l) = h12 + enddo + enddo + enddo + enddo + !$OMP END DO + + !$OMP END PARALLEL + + call wall_time(t1) + ! (i,j,k,l) -> (j,k,l,p) + call DGEMM('T','N', nb * na * nb, na, na, & + 1.d0, H0, size(H0,1), Uref, size(Uref,1), 0.d0, H1, size(H1,1)*size(H1,2)*size(H1,3)) + + ! (j,k,l,p) -> (k,l,p,q) + call DGEMM('T','N', na * nb * na, nb, nb, & + 1.d0, H1, size(H1,1), Vref, size(Vref,1), 0.d0, H0, size(H0,1)*size(H0,2)*size(H0,3)) + + ! (k,l,p,q) -> (l,p,q,r) + call DGEMM('T','N', nb * na * nb, na, na, & + 1.d0, H0, size(H0,1), Uref, size(Uref,1), 0.d0, H1, size(H1,1)*size(H1,2)*size(H1,3)) + + ! (l,p,q,r) -> (p,q,r,s) + call DGEMM('T','N', na * nb * na, nb, nb, & + 1.d0, H1, size(H1,1), Vref, size(Vref,1), 0.d0, H, size(H,1)*size(H,2)*size(H,3)) + call wall_time(t2) + print *, t1-t0, t2-t1 + double precision :: t0, t1, t2 + + deallocate(H1,H0) + +end + + + + + From 693b81265e5d20221897b7dafab8728ad83327b1 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Thu, 20 May 2021 23:46:00 +0200 Subject: [PATCH 18/26] Hdiag --- devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f | 112 +++++++++++++++--- 1 file changed, 97 insertions(+), 15 deletions(-) diff --git a/devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f b/devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f index 18661de..c5addb1 100644 --- a/devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f +++ b/devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f @@ -35,7 +35,7 @@ subroutine run double precision :: norm_coeff_psi, inv_sqrt_norm_coeff_psi double precision :: overlapU, overlapU_mat, overlapV, overlapV_mat, overlap_psi - double precision, allocatable :: Hdiag(:), Hkl(:,:), H0(:,:), H(:,:,:,:) + double precision, allocatable :: H_diag(:,:), Hkl(:,:), H0(:,:), H(:,:,:,:) double precision, allocatable :: psi_postsvd(:,:), coeff_psi_perturb(:) integer :: n_FSVD, n_selected, n_toselect, n_tmp, it_svd, it_svd_max @@ -121,6 +121,7 @@ subroutine run E_prev = 0.d0 allocate(H(n_det_alpha_unique,n_det_beta_unique,n_det_alpha_unique,n_det_beta_unique)) + allocate(H_diag(n_det_alpha_unique,n_det_beta_unique)) allocate(psi_postsvd(n_det_alpha_unique,n_det_beta_unique)) do while( ( it_svd .lt. it_svd_max) .and. ( tol_energy .gt. 1d-6 ) ) @@ -137,7 +138,7 @@ subroutine run Dref = Dref / dsqrt(norm) ! print *, '-- Compute H --' - call const_H_uv(Uref, Vref, H) + call const_H_uv(Uref, Vref, H, H_diag, n_selected) ! H0(i,j) = < u_i v_j | H | u_i v_j > ! E0 = < psi_0 | H | psi_0 > @@ -148,7 +149,7 @@ subroutine run enddo enddo E0 = E0 + nuclear_repulsion -! print *,' E0 =', E0 + print *,' E0 =', E0 double precision, allocatable :: eigval0(:) double precision, allocatable :: eigvec0(:,:,:) @@ -169,6 +170,7 @@ subroutine run ! print *, ' --- Diag post-SVD --- ' call lapack_diag(eigval0, eigvec0, H_tmp, n_selected**2, n_selected**2) + print *, 'eig =', eigval0(1) + nuclear_repulsion deallocate(H_tmp, eigval0) ! print *, ' --- SVD --- ' @@ -177,7 +179,7 @@ subroutine run deallocate(eigvec0) ! print *, ' --- Compute H --- ' - call const_H_uv(Uref, Vref, H) + call const_H_uv(Uref, Vref, H, H_diag, n_selected) ! H0(i,j) = < u_i v_j | H | u_i v_j > ! E0 = < psi_0 | H | psi_0 > @@ -208,8 +210,8 @@ subroutine run ctmp = ctmp + H(k,l,i,j) * psi_postsvd(k,l) enddo enddo - psi_postsvd(i,j) = ctmp / (E0 - (H(i,j,i,j)+nuclear_repulsion) ) - Ept2 += ctmp*ctmp / (E0 - (H(i,j,i,j)+nuclear_repulsion) ) + psi_postsvd(i,j) = ctmp / (E0 - (H_diag(i,j)+nuclear_repulsion) ) + Ept2 += ctmp*ctmp / (E0 - (H_diag(i,j)+nuclear_repulsion) ) enddo enddo @@ -221,8 +223,8 @@ subroutine run ctmp = ctmp + H(k,l,i,j) * psi_postsvd(k,l) enddo enddo - psi_postsvd(i,j) = ctmp / (E0 - (H(i,j,i,j)+nuclear_repulsion) ) - Ept2 += ctmp*ctmp / (E0 - (H(i,j,i,j)+nuclear_repulsion) ) + psi_postsvd(i,j) = ctmp / (E0 - (H_diag(i,j)+nuclear_repulsion) ) + Ept2 += ctmp*ctmp / (E0 - (H_diag(i,j)+nuclear_repulsion) ) enddo enddo ! do j=n_selected+1,n_det_beta_unique @@ -326,15 +328,17 @@ end subroutine perform_newpostSVD -subroutine const_H_uv(Uref, Vref, H) +subroutine const_H_uv(Uref, Vref, H, H_diag, n_selected) USE OMP_LIB implicit none + integer, intent(in) :: n_selected double precision, intent(in) :: Uref(n_det_alpha_unique,n_det_beta_unique) double precision, intent(in) :: Vref(n_det_beta_unique ,n_det_beta_unique) double precision, intent(out) :: H(n_det_alpha_unique,n_det_beta_unique, n_det_alpha_unique,n_det_beta_unique) + double precision, intent(out) :: H_diag(n_det_alpha_unique,n_det_beta_unique) integer(bit_kind) :: det1(N_int,2), det2(N_int,2) integer :: i, j, k, l, degree @@ -350,7 +354,6 @@ subroutine const_H_uv(Uref, Vref, H) nb = n_det_beta_unique allocate( H0(na,nb,na,nb) ) - allocate( H1(nb,na,nb,na) ) det1(:,1) = psi_det_alpha_unique(:,1) det2(:,1) = psi_det_alpha_unique(:,1) @@ -387,29 +390,108 @@ subroutine const_H_uv(Uref, Vref, H) !$OMP END DO !$OMP END PARALLEL + call wall_time(t1) + + double precision :: H0_d(n_det_alpha_unique,n_det_beta_unique) + double precision :: H1_d(n_det_alpha_unique,n_det_beta_unique) + double precision :: tmp3(n_det_alpha_unique,n_det_beta_unique,n_det_alpha_unique) + double precision, allocatable :: tmp1(:,:), tmp0(:,:) + + tmp3 = 0.d0 + + !$OMP PARALLEL DEFAULT(NONE) & + !$OMP PRIVATE(i,j,k,l,m,det1,det2,degree,h12,tmp1,tmp0)& + !$OMP SHARED(na,nb,psi_det_alpha_unique,psi_det_beta_unique,& + !$OMP N_int,tmp3,Uref,Vref,H_diag) + + allocate(tmp1(na,na), tmp0(na,na)) + + do i=1,na + do m=1,na + tmp1(m,i) = Uref(i,m) + enddo + enddo + + !$OMP DO + do l = 1, nb + det2(:,2) = psi_det_beta_unique(:,l) + do j = 1, nb + det1(:,2) = psi_det_beta_unique(:,j) + call get_excitation_degree_spin(det1(1,2),det2(1,2),degree,N_int) + if (degree > 2) cycle + do k = 1, na + det2(:,1) = psi_det_alpha_unique(:,k) + do i = 1, na + det1(:,1) = psi_det_alpha_unique(:,i) + call get_excitation_degree(det1,det2,degree,N_int) + if ( degree > 2) cycle + call i_H_j(det1, det2, N_int, h12) + do m=1,nb + tmp3(m,j,l) = tmp3(m,j,l) + h12 * tmp1(m,i) * tmp1(m,k) + enddo + enddo + enddo + enddo + enddo + !$OMP END DO + + !$OMP DO + do m=1,nb + do l=1,nb + do j=1,nb + tmp1(j,l) = tmp3(m,j,l) + enddo + enddo + call DGEMM('N','N',nb,nb,nb,1.d0, & + tmp1, size(tmp1,1), & + Vref, size(Vref,1), & + 0.d0, tmp0, size(tmp0,1)) + + do n=1,na + H_diag(m,n) = 0.d0 + do j=1,nb + H_diag(m,n) = H_diag(m,n) + tmp0(j,n) * Vref(j,n) + enddo + enddo + enddo + !$OMP END DO + deallocate(tmp1, tmp0) + !$OMP END PARALLEL + - call wall_time(t1) ! (i,j,k,l) -> (j,k,l,p) + allocate( H1(nb,na,nb,na) ) call DGEMM('T','N', nb * na * nb, na, na, & 1.d0, H0, size(H0,1), Uref, size(Uref,1), 0.d0, H1, size(H1,1)*size(H1,2)*size(H1,3)) + deallocate( H0 ) ! (j,k,l,p) -> (k,l,p,q) + allocate( H0(na,nb,na,nb) ) call DGEMM('T','N', na * nb * na, nb, nb, & 1.d0, H1, size(H1,1), Vref, size(Vref,1), 0.d0, H0, size(H0,1)*size(H0,2)*size(H0,3)) + deallocate( H1 ) ! (k,l,p,q) -> (l,p,q,r) + allocate( H1(nb,na,nb,na) ) call DGEMM('T','N', nb * na * nb, na, na, & 1.d0, H0, size(H0,1), Uref, size(Uref,1), 0.d0, H1, size(H1,1)*size(H1,2)*size(H1,3)) + deallocate( H0 ) ! (l,p,q,r) -> (p,q,r,s) call DGEMM('T','N', na * nb * na, nb, nb, & 1.d0, H1, size(H1,1), Vref, size(Vref,1), 0.d0, H, size(H,1)*size(H,2)*size(H,3)) + + do j=1,n_selected + do i=1,n_selected + print *, H_diag(i,j), H(i,j,i,j) + enddo + enddo + deallocate(H1) + call wall_time(t2) - print *, t1-t0, t2-t1 + print *, 't=', t1-t0, t2-t1 double precision :: t0, t1, t2 - - deallocate(H1,H0) - + stop end From 6333429d200be8cdb92678864912f2f0df6249e5 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Fri, 21 May 2021 00:55:28 +0200 Subject: [PATCH 19/26] Reduced memory --- devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f | 181 ++++++++---------- 1 file changed, 78 insertions(+), 103 deletions(-) diff --git a/devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f b/devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f index c5addb1..34411d3 100644 --- a/devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f +++ b/devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f @@ -120,7 +120,7 @@ subroutine run it_svd_max = 100 E_prev = 0.d0 - allocate(H(n_det_alpha_unique,n_det_beta_unique,n_det_alpha_unique,n_det_beta_unique)) + allocate(H(n_selected,n_selected,n_det_alpha_unique,n_det_beta_unique)) allocate(H_diag(n_det_alpha_unique,n_det_beta_unique)) allocate(psi_postsvd(n_det_alpha_unique,n_det_beta_unique)) do while( ( it_svd .lt. it_svd_max) .and. ( tol_energy .gt. 1d-6 ) ) @@ -149,7 +149,7 @@ subroutine run enddo enddo E0 = E0 + nuclear_repulsion - print *,' E0 =', E0 +! print *,' E0 =', E0 double precision, allocatable :: eigval0(:) double precision, allocatable :: eigvec0(:,:,:) @@ -170,7 +170,7 @@ subroutine run ! print *, ' --- Diag post-SVD --- ' call lapack_diag(eigval0, eigvec0, H_tmp, n_selected**2, n_selected**2) - print *, 'eig =', eigval0(1) + nuclear_repulsion +! print *, 'eig =', eigval0(1) + nuclear_repulsion deallocate(H_tmp, eigval0) ! print *, ' --- SVD --- ' @@ -186,7 +186,7 @@ subroutine run E0 = 0.d0 norm = 0.d0 do j = 1, n_det_beta_unique - do i = 1, n_det_beta_unique + do i = 1, n_selected E0 = E0 + Dref(i) * H(i,i,j,j) * Dref(j) enddo norm = norm + Dref(j)*Dref(j) @@ -244,7 +244,7 @@ subroutine run print '(I5, 3(3X, F20.10))', it_svd, E0, E0 + Ept2, tol_energy E_prev = E0 - print *, ' --- SVD --- ' +! print *, ' --- SVD --- ' call perform_newpostSVD(n_det_beta_unique, psi_postsvd, Uref, Vref, Dref) end do @@ -334,101 +334,87 @@ subroutine const_H_uv(Uref, Vref, H, H_diag, n_selected) implicit none - integer, intent(in) :: n_selected - double precision, intent(in) :: Uref(n_det_alpha_unique,n_det_beta_unique) - double precision, intent(in) :: Vref(n_det_beta_unique ,n_det_beta_unique) - double precision, intent(out) :: H(n_det_alpha_unique,n_det_beta_unique, n_det_alpha_unique,n_det_beta_unique) - double precision, intent(out) :: H_diag(n_det_alpha_unique,n_det_beta_unique) + integer, intent(in) :: n_selected + double precision, intent(in) :: Uref(n_det_alpha_unique,n_det_alpha_unique) + double precision, intent(in) :: Vref(n_det_beta_unique ,n_det_beta_unique) + double precision, intent(out) :: H(n_selected,n_selected, n_det_alpha_unique, n_det_beta_unique) + double precision, intent(out) :: H_diag(n_det_alpha_unique,n_det_beta_unique) - integer(bit_kind) :: det1(N_int,2), det2(N_int,2) - integer :: i, j, k, l, degree - integer :: ii0, jj0, ii, jj, n, m, np, mp - integer :: nn0, mm0, na, nb, mm, ind_gs - integer :: p,q,r,s - double precision :: h12, x + integer(bit_kind) :: det1(N_int,2), det2(N_int,2) + integer :: i, j, k, l, degree + integer :: ii0, jj0, ii, jj, n, m, np, mp + integer :: nn0, mm0, na, nb, mm, ind_gs + integer :: p,q,r,s + double precision :: h12, x + + double precision, allocatable :: H0(:,:,:,:) + double precision, allocatable :: H1(:,:,:,:) + double precision, allocatable :: tmp3(:,:,:) + double precision, allocatable :: tmp1(:,:), tmp0(:,:) + double precision :: c_tmp - double precision, allocatable :: H0(:,:,:,:) - double precision, allocatable :: H1(:,:,:,:) na = n_det_alpha_unique nb = n_det_beta_unique - allocate( H0(na,nb,na,nb) ) - det1(:,1) = psi_det_alpha_unique(:,1) det2(:,1) = psi_det_alpha_unique(:,1) det1(:,2) = psi_det_beta_unique(:,1) det2(:,2) = psi_det_beta_unique(:,1) call i_H_j(det1, det2, N_int, h12) - H0 = 0.d0 call wall_time(t0) - !$OMP PARALLEL DEFAULT(NONE) & - !$OMP PRIVATE(p,q,r,s,i,j,k,l,det1,det2,degree,h12) & - !$OMP SHARED(na,nb,psi_det_alpha_unique,psi_det_beta_unique, & - !$OMP N_int,Uref,Vref,H0,H1,H) + tmp3 = 0.d0 - !$OMP DO - do l = 1, nb - det2(:,2) = psi_det_beta_unique(:,l) - do j = 1, nb - det1(:,2) = psi_det_beta_unique(:,j) - call get_excitation_degree_spin(det1(1,2),det2(1,2),degree,N_int) - if (degree > 2) cycle - do k = 1, na - det2(:,1) = psi_det_alpha_unique(:,k) - do i = 1, na - det1(:,1) = psi_det_alpha_unique(:,i) - call get_excitation_degree(det1,det2,degree,N_int) - if ( degree > 2) cycle - call i_H_j(det1, det2, N_int, h12) - H0(i,j,k,l) = h12 - enddo - enddo - enddo - enddo - !$OMP END DO + allocate( H0(na,nb,n_selected,n_selected) ) + allocate (tmp3(nb,nb,nb)) + H0 = 0.d0 - !$OMP END PARALLEL - call wall_time(t1) + !$OMP PARALLEL DEFAULT(NONE) & + !$OMP PRIVATE(i,j,k,l,m,n,det1,det2,degree,h12,c_tmp,tmp1,tmp0)& + !$OMP SHARED(na,nb,psi_det_alpha_unique,psi_det_beta_unique,& + !$OMP N_int,tmp3,Uref,Vref,H_diag,H0,n_selected) - double precision :: H0_d(n_det_alpha_unique,n_det_beta_unique) - double precision :: H1_d(n_det_alpha_unique,n_det_beta_unique) - double precision :: tmp3(n_det_alpha_unique,n_det_beta_unique,n_det_alpha_unique) - double precision, allocatable :: tmp1(:,:), tmp0(:,:) + allocate(tmp1(na,na), tmp0(na,na)) - tmp3 = 0.d0 + do i=1,na + do m=1,na + tmp1(m,i) = Uref(i,m) + enddo + enddo - !$OMP PARALLEL DEFAULT(NONE) & - !$OMP PRIVATE(i,j,k,l,m,det1,det2,degree,h12,tmp1,tmp0)& - !$OMP SHARED(na,nb,psi_det_alpha_unique,psi_det_beta_unique,& - !$OMP N_int,tmp3,Uref,Vref,H_diag) + !$OMP DO + do l = 1, nb + det2(:,2) = psi_det_beta_unique(:,l) - allocate(tmp1(na,na), tmp0(na,na)) + do j = 1, nb + det1(:,2) = psi_det_beta_unique(:,j) - do i=1,na - do m=1,na - tmp1(m,i) = Uref(i,m) - enddo - enddo + call get_excitation_degree_spin(det1(1,2),det2(1,2),degree,N_int) + if (degree > 2) cycle - !$OMP DO - do l = 1, nb - det2(:,2) = psi_det_beta_unique(:,l) - do j = 1, nb - det1(:,2) = psi_det_beta_unique(:,j) - call get_excitation_degree_spin(det1(1,2),det2(1,2),degree,N_int) - if (degree > 2) cycle - do k = 1, na - det2(:,1) = psi_det_alpha_unique(:,k) - do i = 1, na - det1(:,1) = psi_det_alpha_unique(:,i) - call get_excitation_degree(det1,det2,degree,N_int) - if ( degree > 2) cycle - call i_H_j(det1, det2, N_int, h12) - do m=1,nb + do k = 1, na + det2(:,1) = psi_det_alpha_unique(:,k) + + do i = 1, na + det1(:,1) = psi_det_alpha_unique(:,i) + + call get_excitation_degree(det1,det2,degree,N_int) + if ( degree > 2) cycle + + call i_H_j(det1, det2, N_int, h12) + + do m=1,nb tmp3(m,j,l) = tmp3(m,j,l) + h12 * tmp1(m,i) * tmp1(m,k) enddo + + do n=1,n_selected + c_tmp = h12 * Vref(j,n) + do m=1,n_selected + H0(k,l,m,n) = H0(k,l,m,n) + c_tmp * tmp1(m,i) + enddo + enddo + enddo enddo enddo @@ -447,7 +433,7 @@ subroutine const_H_uv(Uref, Vref, H, H_diag, n_selected) Vref, size(Vref,1), & 0.d0, tmp0, size(tmp0,1)) - do n=1,na + do n=1,nb H_diag(m,n) = 0.d0 do j=1,nb H_diag(m,n) = H_diag(m,n) + tmp0(j,n) * Vref(j,n) @@ -458,40 +444,29 @@ subroutine const_H_uv(Uref, Vref, H, H_diag, n_selected) deallocate(tmp1, tmp0) !$OMP END PARALLEL + call wall_time(t1) - ! (i,j,k,l) -> (j,k,l,p) - allocate( H1(nb,na,nb,na) ) - call DGEMM('T','N', nb * na * nb, na, na, & - 1.d0, H0, size(H0,1), Uref, size(Uref,1), 0.d0, H1, size(H1,1)*size(H1,2)*size(H1,3)) - deallocate( H0 ) - ! (j,k,l,p) -> (k,l,p,q) - allocate( H0(na,nb,na,nb) ) - call DGEMM('T','N', na * nb * na, nb, nb, & - 1.d0, H1, size(H1,1), Vref, size(Vref,1), 0.d0, H0, size(H0,1)*size(H0,2)*size(H0,3)) - deallocate( H1 ) - - ! (k,l,p,q) -> (l,p,q,r) - allocate( H1(nb,na,nb,na) ) - call DGEMM('T','N', nb * na * nb, na, na, & - 1.d0, H0, size(H0,1), Uref, size(Uref,1), 0.d0, H1, size(H1,1)*size(H1,2)*size(H1,3)) + allocate( H1(nb,n_selected,n_selected,na) ) + call DGEMM('T','N', nb * n_selected * n_selected, na, na, & + 1.d0, H0, size(H0,1), Uref, size(Uref,1), 0.d0, H1, size(H1,1)*size(H1,2)*size(H1,3)) deallocate( H0 ) ! (l,p,q,r) -> (p,q,r,s) - call DGEMM('T','N', na * nb * na, nb, nb, & - 1.d0, H1, size(H1,1), Vref, size(Vref,1), 0.d0, H, size(H,1)*size(H,2)*size(H,3)) + call DGEMM('T','N', n_selected * n_selected * na, nb, nb, & + 1.d0, H1, size(H1,1), Vref, size(Vref,1), 0.d0, H, size(H,1)*size(H,2)*size(H,3)) - do j=1,n_selected - do i=1,n_selected - print *, H_diag(i,j), H(i,j,i,j) - enddo - enddo +! do j=1,n_selected +! do i=1,n_selected +! print *, H_diag(i,j), H(i,j,i,j) +! enddo +! enddo deallocate(H1) call wall_time(t2) - print *, 't=', t1-t0, t2-t1 - double precision :: t0, t1, t2 - stop +! print *, 't=', t1-t0, t2-t1 + double precision :: t0, t1, t2 +! stop end From f816f9b668531d825cf84ee7c444248ffbb0a294 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Thu, 3 Jun 2021 01:18:05 +0200 Subject: [PATCH 20/26] Fix HDF5 in configure --- devel/trexio/LIB | 2 +- devel/trexio/export_trexio.irp.f | 118 ++++++- devel/trexio/trexio_f.f90 | 508 +++++++++++++++++++++---------- 3 files changed, 461 insertions(+), 167 deletions(-) diff --git a/devel/trexio/LIB b/devel/trexio/LIB index 05990cb..370ab27 100644 --- a/devel/trexio/LIB +++ b/devel/trexio/LIB @@ -1 +1 @@ --L/home/scemama/TREX/trexio/_install/lib -L/usr/lib/x86_64-linux-gnu/hdf5/serial -ltrexio -lm -lpthread -lhdf5_hl -lhdf5 +-L/home/scemama/TREX/trexio/_install/lib -L/usr/lib/x86_64-linux-gnu/hdf5/serial -ltrexio diff --git a/devel/trexio/export_trexio.irp.f b/devel/trexio/export_trexio.irp.f index db740a3..c58a4af 100644 --- a/devel/trexio/export_trexio.irp.f +++ b/devel/trexio/export_trexio.irp.f @@ -23,6 +23,16 @@ program export_trexio ! ------------------------------------------------------------------------------ +! Electrons +! --------- + + rc = trexio_write_electron_up_num(f, elec_alpha_num) + call check_success(rc) + + rc = trexio_write_electron_dn_num(f, elec_beta_num) + call check_success(rc) + + ! Nuclei ! ------ @@ -35,12 +45,46 @@ program export_trexio rc = trexio_write_nucleus_coord(f, nucl_coord_transp) call check_success(rc) - ! Electrons - rc = trexio_write_electron_up_num(f, elec_alpha_num) - call check_success(rc) +! rc = trexio_write_nucleus_label(f, nucl_label) +! call check_success(rc) + + +! Pseudo-potentials +! ----------------- + + double precision, allocatable :: tmp_double(:,:) + integer, allocatable :: tmp_int(:,:) + +! rc = trexio_write_ecp_lmax_plus_1(f, pseudo_lmax+1) +! call check_success(rc) ! - rc = trexio_write_electron_dn_num(f, elec_beta_num) - call check_success(rc) +! rc = trexio_write_ecp_z_core(f, nucl_charge_remove) +! call check_success(rc) +! +! rc = trexio_write_ecp_local_num_n_max(f, pseudo_klocmax) +! call check_success(rc) +! +! rc = trexio_write_ecp_local_power(f, pseudo_n_k_transp) +! call check_success(rc) +! +! rc = trexio_write_ecp_local_exponent(f, pseudo_dz_k_transp) +! call check_success(rc) +! +! rc = trexio_write_ecp_local_coef(f, pseudo_v_k_transp) +! call check_success(rc) +! +! rc = trexio_write_ecp_non_local_num_n_max(f, pseudo_kmax) +! call check_success(rc) +! +! rc = trexio_write_ecp_non_local_power(f, pseudo_n_kl_transp) +! call check_success(rc) +! +! rc = trexio_write_ecp_non_local_exponent(f, pseudo_dz_kl_transp) +! call check_success(rc) +! +! rc = trexio_write_ecp_non_local_coef(f, pseudo_v_kl_transp) +! call check_success(rc) + ! Basis @@ -49,9 +93,52 @@ program export_trexio ! rc = trexio_write_basis_type(f, 'Gaussian') ! call check_success(rc) - rc = trexio_write_basis_shell_num(f, sum(Nucl_num_shell_Aos)) + rc = trexio_write_basis_shell_num(f, shell_num) call check_success(rc) + rc = trexio_write_basis_shell_center(f, shell_nucl) + call check_success(rc) + + rc = trexio_write_basis_shell_ang_mom(f, shell_ang_mom) + call check_success(rc) + + rc = trexio_write_basis_prim_num(f, prim_num) + call check_success(rc) + + double precision, allocatable :: factor(:) + allocate(factor(shell_num)) + if (ao_normalized) then + factor(1:shell_num) = shell_normalization_factor(1:shell_num) + else + factor(1:shell_num) = 1.d0 + endif + rc = trexio_write_basis_shell_factor(f, factor) + call check_success(rc) + deallocate(factor) + + rc = trexio_write_basis_prim_num(f, prim_num) + call check_success(rc) + + rc = trexio_write_basis_prim_index(f, shell_prim_index) + call check_success(rc) + + rc = trexio_write_basis_exponent(f, prim_expo) + call check_success(rc) + + rc = trexio_write_basis_coefficient(f, prim_coef) + call check_success(rc) + + allocate(factor(prim_num)) + if (primitives_normalized) then + factor(1:prim_num) = prim_normalization_factor(1:prim_num) + else + factor(1:prim_num) = 1.d0 + endif + rc = trexio_write_basis_prim_factor(f, factor) + call check_success(rc) + deallocate(factor) + + ! Atomic orbitals ! --------------- @@ -62,6 +149,21 @@ program export_trexio rc = trexio_write_ao_cartesian(f, 1) call check_success(rc) + rc = trexio_write_ao_shell(f, ao_shell) + call check_success(rc) + + integer :: i + allocate(factor(ao_num)) + if (ao_normalized) then + do i=1,ao_num + factor(i) = ao_coef_normalization_factor(i) / shell_normalization_factor( ao_shell(i) ) + enddo + else + factor(:) = 1.d0 + endif + rc = trexio_write_ao_normalization(f, factor) + call check_success(rc) + deallocate(factor) ! One-e AO integrals ! ------------------ @@ -96,7 +198,7 @@ program export_trexio rc = trexio_write_mo_num(f, mo_num) call check_success(rc) - rc = trexio_write_mo_coef(f, mo_coef) + rc = trexio_write_mo_coefficient(f, mo_coef) call check_success(rc) @@ -116,7 +218,7 @@ program export_trexio rc = trexio_write_mo_1e_int_ecp_non_local(f,mo_pseudo_integrals_non_local) call check_success(rc) endif - +! rc = trexio_write_mo_1e_int_core_hamiltonian(f,one_e_dm_mo) call check_success(rc) diff --git a/devel/trexio/trexio_f.f90 b/devel/trexio/trexio_f.f90 index d16652a..92323ff 100644 --- a/devel/trexio/trexio_f.f90 +++ b/devel/trexio/trexio_f.f90 @@ -130,12 +130,6 @@ interface integer(8), intent(in), value :: trex_file end function trexio_has_ecp_non_local_power end interface -interface - integer function trexio_has_basis_shell_factor (trex_file) bind(C) - use, intrinsic :: iso_c_binding - integer(8), intent(in), value :: trex_file - end function trexio_has_basis_shell_factor -end interface interface integer function trexio_has_basis_shell_center (trex_file) bind(C) use, intrinsic :: iso_c_binding @@ -154,6 +148,12 @@ interface integer(8), intent(in), value :: trex_file end function trexio_has_basis_shell_prim_num end interface +interface + integer function trexio_has_basis_shell_factor (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_basis_shell_factor +end interface interface integer function trexio_has_basis_prim_index (trex_file) bind(C) use, intrinsic :: iso_c_binding @@ -172,6 +172,12 @@ interface integer(8), intent(in), value :: trex_file end function trexio_has_basis_coefficient end interface +interface + integer function trexio_has_basis_prim_factor (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_basis_prim_factor +end interface interface integer function trexio_has_ao_shell (trex_file) bind(C) use, intrinsic :: iso_c_binding @@ -227,10 +233,16 @@ interface end function trexio_has_ao_2e_int_eri end interface interface - integer function trexio_has_mo_coef (trex_file) bind(C) + integer function trexio_has_ao_2e_int_eri_lr (trex_file) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - end function trexio_has_mo_coef + end function trexio_has_ao_2e_int_eri_lr +end interface +interface + integer function trexio_has_mo_coefficient (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_mo_coefficient end interface interface integer function trexio_has_mo_occupation (trex_file) bind(C) @@ -238,6 +250,12 @@ interface integer(8), intent(in), value :: trex_file end function trexio_has_mo_occupation end interface +interface + integer function trexio_has_mo_1e_int_overlap (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_mo_1e_int_overlap +end interface interface integer function trexio_has_mo_1e_int_kinetic (trex_file) bind(C) use, intrinsic :: iso_c_binding @@ -274,6 +292,12 @@ interface integer(8), intent(in), value :: trex_file end function trexio_has_mo_2e_int_eri end interface +interface + integer function trexio_has_mo_2e_int_eri_lr (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_mo_2e_int_eri_lr +end interface interface integer function trexio_has_electron_up_num (trex_file) bind(C) use, intrinsic :: iso_c_binding @@ -286,12 +310,6 @@ interface integer(8), intent(in), value :: trex_file end function trexio_has_electron_dn_num end interface -interface - integer function trexio_has_ao_cartesian (trex_file) bind(C) - use, intrinsic :: iso_c_binding - integer(8), intent(in), value :: trex_file - end function trexio_has_ao_cartesian -end interface interface integer function trexio_has_nucleus_num (trex_file) bind(C) use, intrinsic :: iso_c_binding @@ -322,6 +340,12 @@ interface integer(8), intent(in), value :: trex_file end function trexio_has_basis_prim_num end interface +interface + integer function trexio_has_ao_cartesian (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_ao_cartesian +end interface interface integer function trexio_has_ao_num (trex_file) bind(C) use, intrinsic :: iso_c_binding @@ -359,7 +383,7 @@ interface integer function trexio_read_ecp_z_core_32 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - integer(4), intent(out) :: dset(*) + real(4), intent(out) :: dset(*) end function trexio_read_ecp_z_core_32 end interface interface @@ -418,13 +442,6 @@ interface integer(4), intent(out) :: dset(*) end function trexio_read_ecp_non_local_power_32 end interface -interface - integer function trexio_read_basis_shell_factor_32 (trex_file, dset) bind(C) - use, intrinsic :: iso_c_binding - integer(8), intent(in), value :: trex_file - real(4), intent(out) :: dset(*) - end function trexio_read_basis_shell_factor_32 -end interface interface integer function trexio_read_basis_shell_center_32 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -446,6 +463,13 @@ interface integer(4), intent(out) :: dset(*) end function trexio_read_basis_shell_prim_num_32 end interface +interface + integer function trexio_read_basis_shell_factor_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_basis_shell_factor_32 +end interface interface integer function trexio_read_basis_prim_index_32 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -467,6 +491,13 @@ interface real(4), intent(out) :: dset(*) end function trexio_read_basis_coefficient_32 end interface +interface + integer function trexio_read_basis_prim_factor_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_basis_prim_factor_32 +end interface interface integer function trexio_read_ao_shell_32 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -531,11 +562,18 @@ interface end function trexio_read_ao_2e_int_eri_32 end interface interface - integer function trexio_read_mo_coef_32 (trex_file, dset) bind(C) + integer function trexio_read_ao_2e_int_eri_lr_32 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file real(4), intent(out) :: dset(*) - end function trexio_read_mo_coef_32 + end function trexio_read_ao_2e_int_eri_lr_32 +end interface +interface + integer function trexio_read_mo_coefficient_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_mo_coefficient_32 end interface interface integer function trexio_read_mo_occupation_32 (trex_file, dset) bind(C) @@ -544,6 +582,13 @@ interface real(4), intent(out) :: dset(*) end function trexio_read_mo_occupation_32 end interface +interface + integer function trexio_read_mo_1e_int_overlap_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_mo_1e_int_overlap_32 +end interface interface integer function trexio_read_mo_1e_int_kinetic_32 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -586,6 +631,13 @@ interface real(4), intent(out) :: dset(*) end function trexio_read_mo_2e_int_eri_32 end interface +interface + integer function trexio_read_mo_2e_int_eri_lr_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(out) :: dset(*) + end function trexio_read_mo_2e_int_eri_lr_32 +end interface interface integer function trexio_read_nucleus_charge_64 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -611,7 +663,7 @@ interface integer function trexio_read_ecp_z_core_64 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - integer(8), intent(out) :: dset(*) + real(8), intent(out) :: dset(*) end function trexio_read_ecp_z_core_64 end interface interface @@ -670,13 +722,6 @@ interface integer(8), intent(out) :: dset(*) end function trexio_read_ecp_non_local_power_64 end interface -interface - integer function trexio_read_basis_shell_factor_64 (trex_file, dset) bind(C) - use, intrinsic :: iso_c_binding - integer(8), intent(in), value :: trex_file - real(8), intent(out) :: dset(*) - end function trexio_read_basis_shell_factor_64 -end interface interface integer function trexio_read_basis_shell_center_64 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -698,6 +743,13 @@ interface integer(8), intent(out) :: dset(*) end function trexio_read_basis_shell_prim_num_64 end interface +interface + integer function trexio_read_basis_shell_factor_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_basis_shell_factor_64 +end interface interface integer function trexio_read_basis_prim_index_64 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -719,6 +771,13 @@ interface real(8), intent(out) :: dset(*) end function trexio_read_basis_coefficient_64 end interface +interface + integer function trexio_read_basis_prim_factor_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_basis_prim_factor_64 +end interface interface integer function trexio_read_ao_shell_64 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -783,11 +842,18 @@ interface end function trexio_read_ao_2e_int_eri_64 end interface interface - integer function trexio_read_mo_coef_64 (trex_file, dset) bind(C) + integer function trexio_read_ao_2e_int_eri_lr_64 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file real(8), intent(out) :: dset(*) - end function trexio_read_mo_coef_64 + end function trexio_read_ao_2e_int_eri_lr_64 +end interface +interface + integer function trexio_read_mo_coefficient_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_mo_coefficient_64 end interface interface integer function trexio_read_mo_occupation_64 (trex_file, dset) bind(C) @@ -796,6 +862,13 @@ interface real(8), intent(out) :: dset(*) end function trexio_read_mo_occupation_64 end interface +interface + integer function trexio_read_mo_1e_int_overlap_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_mo_1e_int_overlap_64 +end interface interface integer function trexio_read_mo_1e_int_kinetic_64 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -838,6 +911,13 @@ interface real(8), intent(out) :: dset(*) end function trexio_read_mo_2e_int_eri_64 end interface +interface + integer function trexio_read_mo_2e_int_eri_lr_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_mo_2e_int_eri_lr_64 +end interface interface integer function trexio_read_nucleus_charge (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -856,21 +936,21 @@ interface integer function trexio_read_ecp_lmax_plus_1 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - integer(8), intent(out) :: dset(*) + integer(4), intent(out) :: dset(*) end function trexio_read_ecp_lmax_plus_1 end interface interface integer function trexio_read_ecp_z_core (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - integer(8), intent(out) :: dset(*) + real(8), intent(out) :: dset(*) end function trexio_read_ecp_z_core end interface interface integer function trexio_read_ecp_local_n (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - integer(8), intent(out) :: dset(*) + integer(4), intent(out) :: dset(*) end function trexio_read_ecp_local_n end interface interface @@ -891,14 +971,14 @@ interface integer function trexio_read_ecp_local_power (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - integer(8), intent(out) :: dset(*) + integer(4), intent(out) :: dset(*) end function trexio_read_ecp_local_power end interface interface integer function trexio_read_ecp_non_local_n (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - integer(8), intent(out) :: dset(*) + integer(4), intent(out) :: dset(*) end function trexio_read_ecp_non_local_n end interface interface @@ -919,9 +999,30 @@ interface integer function trexio_read_ecp_non_local_power (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - integer(8), intent(out) :: dset(*) + integer(4), intent(out) :: dset(*) end function trexio_read_ecp_non_local_power end interface +interface + integer function trexio_read_basis_shell_center (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: dset(*) + end function trexio_read_basis_shell_center +end interface +interface + integer function trexio_read_basis_shell_ang_mom (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: dset(*) + end function trexio_read_basis_shell_ang_mom +end interface +interface + integer function trexio_read_basis_shell_prim_num (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: dset(*) + end function trexio_read_basis_shell_prim_num +end interface interface integer function trexio_read_basis_shell_factor (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -929,32 +1030,11 @@ interface real(8), intent(out) :: dset(*) end function trexio_read_basis_shell_factor end interface -interface - integer function trexio_read_basis_shell_center (trex_file, dset) bind(C) - use, intrinsic :: iso_c_binding - integer(8), intent(in), value :: trex_file - integer(8), intent(out) :: dset(*) - end function trexio_read_basis_shell_center -end interface -interface - integer function trexio_read_basis_shell_ang_mom (trex_file, dset) bind(C) - use, intrinsic :: iso_c_binding - integer(8), intent(in), value :: trex_file - integer(8), intent(out) :: dset(*) - end function trexio_read_basis_shell_ang_mom -end interface -interface - integer function trexio_read_basis_shell_prim_num (trex_file, dset) bind(C) - use, intrinsic :: iso_c_binding - integer(8), intent(in), value :: trex_file - integer(8), intent(out) :: dset(*) - end function trexio_read_basis_shell_prim_num -end interface interface integer function trexio_read_basis_prim_index (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - integer(8), intent(out) :: dset(*) + integer(4), intent(out) :: dset(*) end function trexio_read_basis_prim_index end interface interface @@ -971,11 +1051,18 @@ interface real(8), intent(out) :: dset(*) end function trexio_read_basis_coefficient end interface +interface + integer function trexio_read_basis_prim_factor (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_basis_prim_factor +end interface interface integer function trexio_read_ao_shell (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - integer(8), intent(out) :: dset(*) + integer(4), intent(out) :: dset(*) end function trexio_read_ao_shell end interface interface @@ -1035,11 +1122,18 @@ interface end function trexio_read_ao_2e_int_eri end interface interface - integer function trexio_read_mo_coef (trex_file, dset) bind(C) + integer function trexio_read_ao_2e_int_eri_lr (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file real(8), intent(out) :: dset(*) - end function trexio_read_mo_coef + end function trexio_read_ao_2e_int_eri_lr +end interface +interface + integer function trexio_read_mo_coefficient (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_mo_coefficient end interface interface integer function trexio_read_mo_occupation (trex_file, dset) bind(C) @@ -1048,6 +1142,13 @@ interface real(8), intent(out) :: dset(*) end function trexio_read_mo_occupation end interface +interface + integer function trexio_read_mo_1e_int_overlap (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_mo_1e_int_overlap +end interface interface integer function trexio_read_mo_1e_int_kinetic (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -1090,6 +1191,13 @@ interface real(8), intent(out) :: dset(*) end function trexio_read_mo_2e_int_eri end interface +interface + integer function trexio_read_mo_2e_int_eri_lr (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(out) :: dset(*) + end function trexio_read_mo_2e_int_eri_lr +end interface interface integer function trexio_read_electron_up_num_32 (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -1104,13 +1212,6 @@ interface integer(4), intent(out) :: num end function trexio_read_electron_dn_num_32 end interface -interface - integer function trexio_read_ao_cartesian_32 (trex_file, num) bind(C) - use, intrinsic :: iso_c_binding - integer(8), intent(in), value :: trex_file - integer(4), intent(out) :: num - end function trexio_read_ao_cartesian_32 -end interface interface integer function trexio_read_nucleus_num_32 (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -1146,6 +1247,13 @@ interface integer(4), intent(out) :: num end function trexio_read_basis_prim_num_32 end interface +interface + integer function trexio_read_ao_cartesian_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_ao_cartesian_32 +end interface interface integer function trexio_read_ao_num_32 (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -1174,13 +1282,6 @@ interface integer(8), intent(out) :: num end function trexio_read_electron_dn_num_64 end interface -interface - integer function trexio_read_ao_cartesian_64 (trex_file, num) bind(C) - use, intrinsic :: iso_c_binding - integer(8), intent(in), value :: trex_file - integer(8), intent(out) :: num - end function trexio_read_ao_cartesian_64 -end interface interface integer function trexio_read_nucleus_num_64 (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -1216,6 +1317,13 @@ interface integer(8), intent(out) :: num end function trexio_read_basis_prim_num_64 end interface +interface + integer function trexio_read_ao_cartesian_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: num + end function trexio_read_ao_cartesian_64 +end interface interface integer function trexio_read_ao_num_64 (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -1244,13 +1352,6 @@ interface integer(4), intent(out) :: num end function trexio_read_electron_dn_num end interface -interface - integer function trexio_read_ao_cartesian (trex_file, num) bind(C) - use, intrinsic :: iso_c_binding - integer(8), intent(in), value :: trex_file - integer(4), intent(out) :: num - end function trexio_read_ao_cartesian -end interface interface integer function trexio_read_nucleus_num (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -1286,6 +1387,13 @@ interface integer(4), intent(out) :: num end function trexio_read_basis_prim_num end interface +interface + integer function trexio_read_ao_cartesian (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_ao_cartesian +end interface interface integer function trexio_read_ao_num (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -1325,7 +1433,7 @@ interface integer function trexio_write_ecp_z_core_32 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - integer(4), intent(in) :: dset(*) + real(4), intent(in) :: dset(*) end function trexio_write_ecp_z_core_32 end interface interface @@ -1384,13 +1492,6 @@ interface integer(4), intent(in) :: dset(*) end function trexio_write_ecp_non_local_power_32 end interface -interface - integer function trexio_write_basis_shell_factor_32 (trex_file, dset) bind(C) - use, intrinsic :: iso_c_binding - integer(8), intent(in), value :: trex_file - real(4), intent(in) :: dset(*) - end function trexio_write_basis_shell_factor_32 -end interface interface integer function trexio_write_basis_shell_center_32 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -1412,6 +1513,13 @@ interface integer(4), intent(in) :: dset(*) end function trexio_write_basis_shell_prim_num_32 end interface +interface + integer function trexio_write_basis_shell_factor_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_basis_shell_factor_32 +end interface interface integer function trexio_write_basis_prim_index_32 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -1433,6 +1541,13 @@ interface real(4), intent(in) :: dset(*) end function trexio_write_basis_coefficient_32 end interface +interface + integer function trexio_write_basis_prim_factor_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_basis_prim_factor_32 +end interface interface integer function trexio_write_ao_shell_32 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -1497,11 +1612,18 @@ interface end function trexio_write_ao_2e_int_eri_32 end interface interface - integer function trexio_write_mo_coef_32 (trex_file, dset) bind(C) + integer function trexio_write_ao_2e_int_eri_lr_32 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file real(4), intent(in) :: dset(*) - end function trexio_write_mo_coef_32 + end function trexio_write_ao_2e_int_eri_lr_32 +end interface +interface + integer function trexio_write_mo_coefficient_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_mo_coefficient_32 end interface interface integer function trexio_write_mo_occupation_32 (trex_file, dset) bind(C) @@ -1510,6 +1632,13 @@ interface real(4), intent(in) :: dset(*) end function trexio_write_mo_occupation_32 end interface +interface + integer function trexio_write_mo_1e_int_overlap_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_mo_1e_int_overlap_32 +end interface interface integer function trexio_write_mo_1e_int_kinetic_32 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -1552,6 +1681,13 @@ interface real(4), intent(in) :: dset(*) end function trexio_write_mo_2e_int_eri_32 end interface +interface + integer function trexio_write_mo_2e_int_eri_lr_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(4), intent(in) :: dset(*) + end function trexio_write_mo_2e_int_eri_lr_32 +end interface interface integer function trexio_write_nucleus_charge_64 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -1577,7 +1713,7 @@ interface integer function trexio_write_ecp_z_core_64 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - integer(8), intent(in) :: dset(*) + real(8), intent(in) :: dset(*) end function trexio_write_ecp_z_core_64 end interface interface @@ -1636,13 +1772,6 @@ interface integer(8), intent(in) :: dset(*) end function trexio_write_ecp_non_local_power_64 end interface -interface - integer function trexio_write_basis_shell_factor_64 (trex_file, dset) bind(C) - use, intrinsic :: iso_c_binding - integer(8), intent(in), value :: trex_file - real(8), intent(in) :: dset(*) - end function trexio_write_basis_shell_factor_64 -end interface interface integer function trexio_write_basis_shell_center_64 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -1664,6 +1793,13 @@ interface integer(8), intent(in) :: dset(*) end function trexio_write_basis_shell_prim_num_64 end interface +interface + integer function trexio_write_basis_shell_factor_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_basis_shell_factor_64 +end interface interface integer function trexio_write_basis_prim_index_64 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -1685,6 +1821,13 @@ interface real(8), intent(in) :: dset(*) end function trexio_write_basis_coefficient_64 end interface +interface + integer function trexio_write_basis_prim_factor_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_basis_prim_factor_64 +end interface interface integer function trexio_write_ao_shell_64 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -1749,11 +1892,18 @@ interface end function trexio_write_ao_2e_int_eri_64 end interface interface - integer function trexio_write_mo_coef_64 (trex_file, dset) bind(C) + integer function trexio_write_ao_2e_int_eri_lr_64 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file real(8), intent(in) :: dset(*) - end function trexio_write_mo_coef_64 + end function trexio_write_ao_2e_int_eri_lr_64 +end interface +interface + integer function trexio_write_mo_coefficient_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_mo_coefficient_64 end interface interface integer function trexio_write_mo_occupation_64 (trex_file, dset) bind(C) @@ -1762,6 +1912,13 @@ interface real(8), intent(in) :: dset(*) end function trexio_write_mo_occupation_64 end interface +interface + integer function trexio_write_mo_1e_int_overlap_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_mo_1e_int_overlap_64 +end interface interface integer function trexio_write_mo_1e_int_kinetic_64 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -1804,6 +1961,13 @@ interface real(8), intent(in) :: dset(*) end function trexio_write_mo_2e_int_eri_64 end interface +interface + integer function trexio_write_mo_2e_int_eri_lr_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_mo_2e_int_eri_lr_64 +end interface interface integer function trexio_write_nucleus_charge (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -1822,21 +1986,21 @@ interface integer function trexio_write_ecp_lmax_plus_1 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - integer(8), intent(in) :: dset(*) + integer(4), intent(in) :: dset(*) end function trexio_write_ecp_lmax_plus_1 end interface interface integer function trexio_write_ecp_z_core (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - integer(8), intent(in) :: dset(*) + real(8), intent(in) :: dset(*) end function trexio_write_ecp_z_core end interface interface integer function trexio_write_ecp_local_n (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - integer(8), intent(in) :: dset(*) + integer(4), intent(in) :: dset(*) end function trexio_write_ecp_local_n end interface interface @@ -1857,14 +2021,14 @@ interface integer function trexio_write_ecp_local_power (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - integer(8), intent(in) :: dset(*) + integer(4), intent(in) :: dset(*) end function trexio_write_ecp_local_power end interface interface integer function trexio_write_ecp_non_local_n (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - integer(8), intent(in) :: dset(*) + integer(4), intent(in) :: dset(*) end function trexio_write_ecp_non_local_n end interface interface @@ -1885,9 +2049,30 @@ interface integer function trexio_write_ecp_non_local_power (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - integer(8), intent(in) :: dset(*) + integer(4), intent(in) :: dset(*) end function trexio_write_ecp_non_local_power end interface +interface + integer function trexio_write_basis_shell_center (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in) :: dset(*) + end function trexio_write_basis_shell_center +end interface +interface + integer function trexio_write_basis_shell_ang_mom (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in) :: dset(*) + end function trexio_write_basis_shell_ang_mom +end interface +interface + integer function trexio_write_basis_shell_prim_num (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in) :: dset(*) + end function trexio_write_basis_shell_prim_num +end interface interface integer function trexio_write_basis_shell_factor (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -1895,32 +2080,11 @@ interface real(8), intent(in) :: dset(*) end function trexio_write_basis_shell_factor end interface -interface - integer function trexio_write_basis_shell_center (trex_file, dset) bind(C) - use, intrinsic :: iso_c_binding - integer(8), intent(in), value :: trex_file - integer(8), intent(in) :: dset(*) - end function trexio_write_basis_shell_center -end interface -interface - integer function trexio_write_basis_shell_ang_mom (trex_file, dset) bind(C) - use, intrinsic :: iso_c_binding - integer(8), intent(in), value :: trex_file - integer(8), intent(in) :: dset(*) - end function trexio_write_basis_shell_ang_mom -end interface -interface - integer function trexio_write_basis_shell_prim_num (trex_file, dset) bind(C) - use, intrinsic :: iso_c_binding - integer(8), intent(in), value :: trex_file - integer(8), intent(in) :: dset(*) - end function trexio_write_basis_shell_prim_num -end interface interface integer function trexio_write_basis_prim_index (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - integer(8), intent(in) :: dset(*) + integer(4), intent(in) :: dset(*) end function trexio_write_basis_prim_index end interface interface @@ -1937,11 +2101,18 @@ interface real(8), intent(in) :: dset(*) end function trexio_write_basis_coefficient end interface +interface + integer function trexio_write_basis_prim_factor (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_basis_prim_factor +end interface interface integer function trexio_write_ao_shell (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - integer(8), intent(in) :: dset(*) + integer(4), intent(in) :: dset(*) end function trexio_write_ao_shell end interface interface @@ -2001,11 +2172,18 @@ interface end function trexio_write_ao_2e_int_eri end interface interface - integer function trexio_write_mo_coef (trex_file, dset) bind(C) + integer function trexio_write_ao_2e_int_eri_lr (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file real(8), intent(in) :: dset(*) - end function trexio_write_mo_coef + end function trexio_write_ao_2e_int_eri_lr +end interface +interface + integer function trexio_write_mo_coefficient (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_mo_coefficient end interface interface integer function trexio_write_mo_occupation (trex_file, dset) bind(C) @@ -2014,6 +2192,13 @@ interface real(8), intent(in) :: dset(*) end function trexio_write_mo_occupation end interface +interface + integer function trexio_write_mo_1e_int_overlap (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_mo_1e_int_overlap +end interface interface integer function trexio_write_mo_1e_int_kinetic (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -2056,6 +2241,13 @@ interface real(8), intent(in) :: dset(*) end function trexio_write_mo_2e_int_eri end interface +interface + integer function trexio_write_mo_2e_int_eri_lr (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + real(8), intent(in) :: dset(*) + end function trexio_write_mo_2e_int_eri_lr +end interface interface integer function trexio_write_electron_up_num_32 (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -2070,13 +2262,6 @@ interface integer(4), intent(in), value :: num end function trexio_write_electron_dn_num_32 end interface -interface - integer function trexio_write_ao_cartesian_32 (trex_file, num) bind(C) - use, intrinsic :: iso_c_binding - integer(8), intent(in), value :: trex_file - integer(4), intent(in), value :: num - end function trexio_write_ao_cartesian_32 -end interface interface integer function trexio_write_nucleus_num_32 (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -2112,6 +2297,13 @@ interface integer(4), intent(in), value :: num end function trexio_write_basis_prim_num_32 end interface +interface + integer function trexio_write_ao_cartesian_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_ao_cartesian_32 +end interface interface integer function trexio_write_ao_num_32 (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -2140,13 +2332,6 @@ interface integer(8), intent(in), value :: num end function trexio_write_electron_dn_num_64 end interface -interface - integer function trexio_write_ao_cartesian_64 (trex_file, num) bind(C) - use, intrinsic :: iso_c_binding - integer(8), intent(in), value :: trex_file - integer(8), intent(in), value :: num - end function trexio_write_ao_cartesian_64 -end interface interface integer function trexio_write_nucleus_num_64 (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -2182,6 +2367,13 @@ interface integer(8), intent(in), value :: num end function trexio_write_basis_prim_num_64 end interface +interface + integer function trexio_write_ao_cartesian_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in), value :: num + end function trexio_write_ao_cartesian_64 +end interface interface integer function trexio_write_ao_num_64 (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -2210,13 +2402,6 @@ interface integer(4), intent(in), value :: num end function trexio_write_electron_dn_num end interface -interface - integer function trexio_write_ao_cartesian (trex_file, num) bind(C) - use, intrinsic :: iso_c_binding - integer(8), intent(in), value :: trex_file - integer(4), intent(in), value :: num - end function trexio_write_ao_cartesian -end interface interface integer function trexio_write_nucleus_num (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -2252,6 +2437,13 @@ interface integer(4), intent(in), value :: num end function trexio_write_basis_prim_num end interface +interface + integer function trexio_write_ao_cartesian (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_ao_cartesian +end interface interface integer function trexio_write_ao_num (trex_file, num) bind(C) use, intrinsic :: iso_c_binding From 53f956e204d95f297c6119d7346950d0565a7c55 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 7 Jun 2021 15:15:01 +0200 Subject: [PATCH 21/26] Complete FCI --- devel/fci_complete/EZFIO.cfg | 6 ++ devel/fci_complete/NEED | 3 + devel/fci_complete/README.rst | 4 + devel/fci_complete/fci_complete.irp.f | 8 ++ devel/fci_complete/generate_fci.irp.f | 75 +++++++++++++++++++ devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f | 14 +--- 6 files changed, 98 insertions(+), 12 deletions(-) create mode 100644 devel/fci_complete/EZFIO.cfg create mode 100644 devel/fci_complete/NEED create mode 100644 devel/fci_complete/README.rst create mode 100644 devel/fci_complete/fci_complete.irp.f create mode 100644 devel/fci_complete/generate_fci.irp.f diff --git a/devel/fci_complete/EZFIO.cfg b/devel/fci_complete/EZFIO.cfg new file mode 100644 index 0000000..fd85bce --- /dev/null +++ b/devel/fci_complete/EZFIO.cfg @@ -0,0 +1,6 @@ +[energy] +type: double precision +doc: Calculated Selected |FCI| energy +interface: ezfio +size: (determinants.n_states) + diff --git a/devel/fci_complete/NEED b/devel/fci_complete/NEED new file mode 100644 index 0000000..b2918cc --- /dev/null +++ b/devel/fci_complete/NEED @@ -0,0 +1,3 @@ +davidson_undressed +hartree_fock +determinants diff --git a/devel/fci_complete/README.rst b/devel/fci_complete/README.rst new file mode 100644 index 0000000..4967020 --- /dev/null +++ b/devel/fci_complete/README.rst @@ -0,0 +1,4 @@ +=== +mpn +=== + diff --git a/devel/fci_complete/fci_complete.irp.f b/devel/fci_complete/fci_complete.irp.f new file mode 100644 index 0000000..5601583 --- /dev/null +++ b/devel/fci_complete/fci_complete.irp.f @@ -0,0 +1,8 @@ +program fci_complete + + call generate_fci_space + call diagonalize_ci + +end + + diff --git a/devel/fci_complete/generate_fci.irp.f b/devel/fci_complete/generate_fci.irp.f new file mode 100644 index 0000000..d66988b --- /dev/null +++ b/devel/fci_complete/generate_fci.irp.f @@ -0,0 +1,75 @@ +subroutine generate_fci_space + use bitmasks + implicit none + BEGIN_DOC +! Generates the complete FCI space + END_DOC + integer :: i, sze, ncore + integer(bit_kind) :: o(N_int,2) + integer(bit_kind) :: u, coremask + + if (mo_num > 64) then + stop 'No more than 64 MOs' + endif + + ncore = 0 + coremask = 0_bit_kind + do i=1,mo_num + if (trim(mo_class(i)) == 'Core') then + ncore += 1 + coremask = ibset(coremask,i-1) + endif + enddo + o(1,1) = iand(full_ijkl_bitmask(1),not(coremask)) + o(1,2) = 0_bit_kind + + call configuration_to_dets_size(o,n_det_alpha_unique,elec_alpha_num-ncore,N_int) + TOUCH n_det_alpha_unique + + integer :: k,n,m, t, t1, t2 + k=0 + n = elec_alpha_num + m = mo_num - n + n = n + + u = shiftl(1_bit_kind,n) -1 + do while (u < shiftl(1_bit_kind,n+m)) + if (iand(coremask, u) == coremask) then + k = k+1 + psi_det_alpha_unique(1,k) = u + endif + t = ior(u,u-1) + t1 = t+1 +IRP_IF WITHOUT_TRAILZ + t2 = shiftr((iand(not(t),t1)-1), popcnt(ieor(u,u-1))) +IRP_ELSE + t2 = shiftr((iand(not(t),t1)-1), trailz(u)+1) +IRP_ENDIF + u = ior(t1,t2) + enddo + + + call configuration_to_dets_size(o,n_det_beta_unique,elec_beta_num-ncore,N_int) + TOUCH n_det_beta_unique + + k=0 + n = elec_beta_num + m = mo_num - n + u = shiftl(1_bit_kind,n) -1 + do while (u < shiftl(1_bit_kind,n+m)) + if (iand(coremask, u) == coremask) then + k = k+1 + psi_det_beta_unique(1,k) = u + endif + t = ior(u,u-1) + t1 = t+1 + t2 = shiftr((iand(not(t),t1)-1), trailz(u)+1) + u = ior(t1,t2) + enddo + + call generate_all_alpha_beta_det_products + + print *, 'Ndet = ', N_det + +end + diff --git a/devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f b/devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f index 34411d3..0400909 100644 --- a/devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f +++ b/devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f @@ -227,18 +227,6 @@ subroutine run Ept2 += ctmp*ctmp / (E0 - (H_diag(i,j)+nuclear_repulsion) ) enddo enddo -! do j=n_selected+1,n_det_beta_unique -! do i=n_selected+1,n_det_alpha_unique -! ctmp = 0.d0 -! do l=1,n_selected -! do k=1,n_selected -! ctmp = ctmp + H(k,l,i,j) * psi_postsvd(k,l) -! enddo -! enddo -! psi_postsvd(i,j) = ctmp / (E0 - (H(i,j,i,j)+nuclear_repulsion) ) -! Ept2 += ctmp*ctmp / (E0 - (H(i,j,i,j)+nuclear_repulsion) ) -! enddo -! enddo tol_energy = dabs(E_prev - E0) print '(I5, 3(3X, F20.10))', it_svd, E0, E0 + Ept2, tol_energy @@ -403,6 +391,7 @@ subroutine const_H_uv(Uref, Vref, H, H_diag, n_selected) if ( degree > 2) cycle call i_H_j(det1, det2, N_int, h12) + if (h12 == 0.d0) cycle do m=1,nb tmp3(m,j,l) = tmp3(m,j,l) + h12 * tmp1(m,i) * tmp1(m,k) @@ -410,6 +399,7 @@ subroutine const_H_uv(Uref, Vref, H, H_diag, n_selected) do n=1,n_selected c_tmp = h12 * Vref(j,n) + if (c_tmp == 0.d0) cycle do m=1,n_selected H0(k,l,m,n) = H0(k,l,m,n) + c_tmp * tmp1(m,i) enddo From 08a66a51b53b969e783d258150c7dcfd8adeb59c Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Tue, 8 Jun 2021 15:40:54 +0200 Subject: [PATCH 22/26] Added abproducts --- devel/svdwf/ab_products.irp.f | 13 +++++++++++++ devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f | 4 ++-- devel/trexio/LIB | 3 ++- devel/trexio/export_trexio.irp.f | 6 +++--- 4 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 devel/svdwf/ab_products.irp.f diff --git a/devel/svdwf/ab_products.irp.f b/devel/svdwf/ab_products.irp.f new file mode 100644 index 0000000..6947e00 --- /dev/null +++ b/devel/svdwf/ab_products.irp.f @@ -0,0 +1,13 @@ +program abproducts + implicit none + read_wf = .True. + TOUCH read_wf + call run +end + +subroutine run + implicit none + call generate_all_alpha_beta_det_products + call diagonalize_ci + call save_wavefunction +end diff --git a/devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f b/devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f index 0400909..eedb8e0 100644 --- a/devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f +++ b/devel/svdwf/buildpsi_diagSVDit_modif_v2.irp.f @@ -106,8 +106,8 @@ subroutine run deallocate( Vtref ) ! Truncated rank - n_selected = n_svd - call write_int(6,n_svd, 'Rank of psi') + n_selected = 10 ! n_svd + call write_int(6,n_selected, 'Rank of psi') !________________________________________________________________________________________________________ diff --git a/devel/trexio/LIB b/devel/trexio/LIB index 370ab27..f00d288 100644 --- a/devel/trexio/LIB +++ b/devel/trexio/LIB @@ -1 +1,2 @@ --L/home/scemama/TREX/trexio/_install/lib -L/usr/lib/x86_64-linux-gnu/hdf5/serial -ltrexio +-L/home/scemama/TREX/trexio/_install/lib -ltrexio + diff --git a/devel/trexio/export_trexio.irp.f b/devel/trexio/export_trexio.irp.f index c58a4af..254b37c 100644 --- a/devel/trexio/export_trexio.irp.f +++ b/devel/trexio/export_trexio.irp.f @@ -105,6 +105,9 @@ program export_trexio rc = trexio_write_basis_prim_num(f, prim_num) call check_success(rc) + rc = trexio_write_basis_shell_prim_num(f, shell_prim_num) + call check_success(rc) + double precision, allocatable :: factor(:) allocate(factor(shell_num)) if (ao_normalized) then @@ -116,9 +119,6 @@ program export_trexio call check_success(rc) deallocate(factor) - rc = trexio_write_basis_prim_num(f, prim_num) - call check_success(rc) - rc = trexio_write_basis_prim_index(f, shell_prim_index) call check_success(rc) From cf3b4fe44979658a4294d0a38e1b49e67a7b9da2 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Fri, 25 Jun 2021 00:03:06 +0200 Subject: [PATCH 23/26] Curved for Cyrus --- devel/qmcchem/qmc_e_curve.irp.f | 43 +- devel/qmcchem/qmc_e_curve2.irp.f | 63 +++ devel/trexio/EZFIO.cfg | 2 +- devel/trexio/export_trexio.irp.f | 23 +- devel/trexio/trexio_f.f90 | 880 ++++++++++++++++++++++++++++--- 5 files changed, 909 insertions(+), 102 deletions(-) create mode 100644 devel/qmcchem/qmc_e_curve2.irp.f diff --git a/devel/qmcchem/qmc_e_curve.irp.f b/devel/qmcchem/qmc_e_curve.irp.f index c0a3b7d..e6135b0 100644 --- a/devel/qmcchem/qmc_e_curve.irp.f +++ b/devel/qmcchem/qmc_e_curve.irp.f @@ -6,16 +6,13 @@ program e_curve integer, allocatable :: iorder(:) double precision , allocatable :: norm_sort(:) double precision :: e_0(N_states) - PROVIDE mo_two_e_integrals_in_map + PROVIDE mo_two_e_integrals_in_map mo_one_e_integrals nab = n_det_alpha_unique+n_det_beta_unique allocate ( norm_sort(0:nab), iorder(0:nab) ) double precision, allocatable :: u_t(:,:), v_t(:,:), s_t(:,:) double precision, allocatable :: u_0(:,:), v_0(:,:) - allocate(u_t(N_states,N_det),v_t(N_states,N_det),s_t(N_states,N_det)) - allocate(u_0(N_states,N_det),v_0(N_states,N_det)) - norm_sort(0) = 0.d0 @@ -24,19 +21,20 @@ program e_curve norm_sort(i) = det_alpha_norm(i) iorder(i) = i enddo - + do i=1,n_det_beta_unique norm_sort(i+n_det_alpha_unique) = det_beta_norm(i) iorder(i+n_det_alpha_unique) = -i enddo - + call dsort(norm_sort(1),iorder(1),nab) if (.not.read_wf) then stop 'Please set read_wf to true' endif - PROVIDE psi_bilinear_matrix_values nuclear_repulsion + PROVIDE psi_bilinear_matrix_values nuclear_repulsion + print *, '' print *, '==============================' print *, 'Energies at different cut-offs' @@ -67,27 +65,11 @@ program e_curve cycle endif - u_0 = psi_bilinear_matrix_values(1:N_det,1:N_states) - 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_states) - call H_S2_u_0_nstates_openmp_work(v_t,s_t,u_t,N_states,N_det,1,N_det,0,1) - call dtranspose( & - v_t, & - size(v_t, 1), & - v_0, & - size(v_0, 1), & - N_states, N_det) - - double precision, external :: u_dot_u, u_dot_v - do i=1,N_states - e_0(i) = u_dot_v(v_t(1,i),u_0(1,i),N_det)/u_dot_u(u_0(1,i),N_det) + do k=1,N_states + psi_coef(1:N_det,k) = psi_bilinear_matrix_values(1:N_det,k) + call dset_order(psi_coef(1,k),psi_bilinear_matrix_order_reverse,N_det) enddo + TOUCH psi_det psi_coef m = 0 do k=1,n_det @@ -100,10 +82,11 @@ program e_curve exit endif E = E_0(1) + nuclear_repulsion - norm = u_dot_u(u_0(1,1),N_det) - print '(E9.1,2X,I8,2X,F10.2,2X,F10.8,2X,F12.6)', thresh, m, & + double precision :: u_dot_u + norm = dsqrt(u_dot_u(psi_coef(1,1),N_det)) + print '(E9.1,2X,I8,2X,F10.2,2X,F10.8,2X,F15.10)', thresh, m, & dble( elec_alpha_num**3 + elec_alpha_num**2 * (nab-1) ) / & - dble( elec_alpha_num**3 + elec_alpha_num**2 * (j-1)), norm, E + dble( elec_alpha_num**3 + elec_alpha_num**2 * (j-1)), norm, psi_energy(1) thresh = thresh * dsqrt(10.d0) enddo print *, '==========================================================' diff --git a/devel/qmcchem/qmc_e_curve2.irp.f b/devel/qmcchem/qmc_e_curve2.irp.f new file mode 100644 index 0000000..6386bfb --- /dev/null +++ b/devel/qmcchem/qmc_e_curve2.irp.f @@ -0,0 +1,63 @@ +program e_curve + use bitmasks + implicit none + integer :: i,j,k, kk, nab, m, l + double precision :: norm, E, hij, num, ci, cj + double precision :: e_0(N_states) + PROVIDE mo_two_e_integrals_in_map mo_one_e_integrals + + if (.not.read_wf) then + stop 'Please set read_wf to true' + endif + + PROVIDE psi_bilinear_matrix nuclear_repulsion + PROVIDE psi_coef_sorted psi_det psi_coef + print *, '' + print *, '==============================' + print *, 'Energies at different cut-offs' + print *, '==============================' + print *, '' + print *, '==========================================================' + print '(A8,2X,A8,2X,A12,2X,A10,2X,A12)', 'Thresh.', 'Ndet', 'Cost', 'Norm', 'E' + print *, '==========================================================' + double precision :: thresh + integer(bit_kind), allocatable :: det_i(:,:), det_j(:,:) + thresh = 1.d-10 + + nab = n_det_alpha_unique+n_det_beta_unique + + + do while (thresh < 1.d0) + norm = 0.d0 + do k=1,n_det + if (dabs(psi_coef(k,1)) < thresh) then + psi_coef(k,1) = 0.d0 + endif + norm = norm + psi_coef(k,1)**2 + enddo + TOUCH psi_coef + norm = norm/dsqrt(norm) + + psi_coef(1:N_det,1) = psi_coef_sorted(1:N_det,1) + psi_det(1:N_int,1:2,1:N_det) = psi_det_sorted(1:N_int,1:2,1:N_det) + do k=1,n_det + if (psi_coef(k,1) == 0.d0) then + exit + endif + enddo + n_det = k-1 + TOUCH n_det psi_coef psi_det + + j = n_det_alpha_unique+n_det_beta_unique + call u_0_H_u_0(E,psi_coef,n_det,psi_det,N_int,1,size(psi_coef,1)) + + print '(E9.1,2X,I8,2X,F10.2,2X,F10.8,2X,F15.10)', thresh, n_det, & + dble( elec_alpha_num**3 + elec_alpha_num**2 * (nab-1) ) / & + dble( elec_alpha_num**3 + elec_alpha_num**2 * (nab-j)), norm, & + psi_energy(1) + thresh = thresh * dsqrt(10.d0) + enddo + print *, '==========================================================' + +end + diff --git a/devel/trexio/EZFIO.cfg b/devel/trexio/EZFIO.cfg index 3b09bc1..9da5e95 100644 --- a/devel/trexio/EZFIO.cfg +++ b/devel/trexio/EZFIO.cfg @@ -1,4 +1,4 @@ -[trexio_backend] +[backend] type: integer doc: Back-end used in TREXIO. 0: HDF5, 1:Text interface: ezfio, ocaml, provider diff --git a/devel/trexio/export_trexio.irp.f b/devel/trexio/export_trexio.irp.f index 254b37c..6f6f758 100644 --- a/devel/trexio/export_trexio.irp.f +++ b/devel/trexio/export_trexio.irp.f @@ -11,9 +11,9 @@ program export_trexio print *, 'TREXIO file : '//trim(trexio_filename) print *, '' - if (trexio_backend == 0) then + if (backend == 0) then f = trexio_open(trexio_filename, 'w', TREXIO_HDF5) - else if (trexio_backend == 1) then + else if (backend == 1) then f = trexio_open(trexio_filename, 'w', TREXIO_TEXT) endif if (f == 0) then @@ -45,8 +45,8 @@ program export_trexio rc = trexio_write_nucleus_coord(f, nucl_coord_transp) call check_success(rc) -! rc = trexio_write_nucleus_label(f, nucl_label) -! call check_success(rc) + rc = trexio_write_nucleus_label(f, nucl_label, 32) + call check_success(rc) ! Pseudo-potentials @@ -90,13 +90,16 @@ program export_trexio ! Basis ! ----- -! rc = trexio_write_basis_type(f, 'Gaussian') -! call check_success(rc) - - rc = trexio_write_basis_shell_num(f, shell_num) + rc = trexio_write_basis_type(f, 'Gaussian', len('Gaussian')) call check_success(rc) - rc = trexio_write_basis_shell_center(f, shell_nucl) + rc = trexio_write_basis_num(f, shell_num) + call check_success(rc) + + rc = trexio_write_basis_nucleus_shell_num(f, nucleus_shell_num) + call check_success(rc) + + rc = trexio_write_basis_nucleus_index(f, basis_nucleus_index) call check_success(rc) rc = trexio_write_basis_shell_ang_mom(f, shell_ang_mom) @@ -119,7 +122,7 @@ program export_trexio call check_success(rc) deallocate(factor) - rc = trexio_write_basis_prim_index(f, shell_prim_index) + rc = trexio_write_basis_shell_prim_index(f, shell_prim_index) call check_success(rc) rc = trexio_write_basis_exponent(f, prim_expo) diff --git a/devel/trexio/trexio_f.f90 b/devel/trexio/trexio_f.f90 index 92323ff..42153e6 100644 --- a/devel/trexio/trexio_f.f90 +++ b/devel/trexio/trexio_f.f90 @@ -4,11 +4,14 @@ module trexio implicit none integer, parameter :: trexio_exit_code = 4 + integer, parameter :: trexio_backend = 4 - integer, parameter :: TREXIO_HDF5 = 0 - integer, parameter :: TREXIO_TEXT = 1 -! integer, parameter :: TREXIO_JSON = 2 - integer, parameter :: TREXIO_INVALID_BACK_END = 2 + integer(trexio_backend), parameter :: TREXIO_HDF5 = 0 + integer(trexio_backend), parameter :: TREXIO_TEXT = 1 +! integer(trexio_backend), parameter :: TREXIO_JSON = 2 + integer(trexio_backend), parameter :: TREXIO_INVALID_BACK_END = 2 + + character(kind=c_char), parameter :: TREXIO_DELIM = c_new_line integer(trexio_exit_code), parameter :: TREXIO_FAILURE = -1 integer(trexio_exit_code), parameter :: TREXIO_SUCCESS = 0 @@ -25,14 +28,16 @@ integer(trexio_exit_code), parameter :: TREXIO_ALLOCATION_FAILED = 10 integer(trexio_exit_code), parameter :: TREXIO_HAS_NOT = 11 integer(trexio_exit_code), parameter :: TREXIO_INVALID_NUM = 12 integer(trexio_exit_code), parameter :: TREXIO_NUM_ALREADY_EXISTS = 13 -integer(trexio_exit_code), parameter :: TREXIO_OPEN_ERROR = 14 -integer(trexio_exit_code), parameter :: TREXIO_LOCK_ERROR = 15 -integer(trexio_exit_code), parameter :: TREXIO_UNLOCK_ERROR = 16 -integer(trexio_exit_code), parameter :: TREXIO_FILE_ERROR = 17 -integer(trexio_exit_code), parameter :: TREXIO_GROUP_READ_ERROR = 18 -integer(trexio_exit_code), parameter :: TREXIO_GROUP_WRITE_ERROR = 19 -integer(trexio_exit_code), parameter :: TREXIO_ELEM_READ_ERROR = 20 -integer(trexio_exit_code), parameter :: TREXIO_ELEM_WRITE_ERROR = 21 +integer(trexio_exit_code), parameter :: TREXIO_DSET_ALREADY_EXISTS = 14 +integer(trexio_exit_code), parameter :: TREXIO_OPEN_ERROR = 15 +integer(trexio_exit_code), parameter :: TREXIO_LOCK_ERROR = 16 +integer(trexio_exit_code), parameter :: TREXIO_UNLOCK_ERROR = 17 +integer(trexio_exit_code), parameter :: TREXIO_FILE_ERROR = 18 +integer(trexio_exit_code), parameter :: TREXIO_GROUP_READ_ERROR = 19 +integer(trexio_exit_code), parameter :: TREXIO_GROUP_WRITE_ERROR = 20 +integer(trexio_exit_code), parameter :: TREXIO_ELEM_READ_ERROR = 21 +integer(trexio_exit_code), parameter :: TREXIO_ELEM_WRITE_ERROR = 22 +integer(trexio_exit_code), parameter :: TREXIO_INVALID_STR_LEN = 30 interface subroutine trexio_string_of_error (error, string) bind(C, name='trexio_string_of_error_f') @@ -46,18 +51,50 @@ end interface interface integer(8) function trexio_open_c (filename, mode, backend) bind(C, name="trexio_open") use, intrinsic :: iso_c_binding - character(kind=c_char), dimension(*) :: filename - character, intent(in), value :: mode - integer, intent(in), value :: backend + import + character(kind=c_char), dimension(*) :: filename + character, intent(in), value :: mode + integer(trexio_backend), intent(in), value :: backend end function trexio_open_c end interface +interface + integer function trexio_set_one_based(trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_set_one_based +end interface + interface integer function trexio_close (trex_file) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file end function trexio_close end interface +interface + integer function trexio_has_metadata_description (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_metadata_description +end interface +interface + integer function trexio_has_nucleus_point_group (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_nucleus_point_group +end interface +interface + integer function trexio_has_basis_type (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_basis_type +end interface +interface + integer function trexio_has_mo_type (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_mo_type +end interface interface integer function trexio_has_nucleus_charge (trex_file) bind(C) use, intrinsic :: iso_c_binding @@ -131,10 +168,16 @@ interface end function trexio_has_ecp_non_local_power end interface interface - integer function trexio_has_basis_shell_center (trex_file) bind(C) + integer function trexio_has_basis_nucleus_index (trex_file) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - end function trexio_has_basis_shell_center + end function trexio_has_basis_nucleus_index +end interface +interface + integer function trexio_has_basis_nucleus_shell_num (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_basis_nucleus_shell_num end interface interface integer function trexio_has_basis_shell_ang_mom (trex_file) bind(C) @@ -155,10 +198,10 @@ interface end function trexio_has_basis_shell_factor end interface interface - integer function trexio_has_basis_prim_index (trex_file) bind(C) + integer function trexio_has_basis_shell_prim_index (trex_file) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - end function trexio_has_basis_prim_index + end function trexio_has_basis_shell_prim_index end interface interface integer function trexio_has_basis_exponent (trex_file) bind(C) @@ -298,6 +341,48 @@ interface integer(8), intent(in), value :: trex_file end function trexio_has_mo_2e_int_eri_lr end interface +interface + integer function trexio_has_metadata_code (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_metadata_code +end interface +interface + integer function trexio_has_metadata_author (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_metadata_author +end interface +interface + integer function trexio_has_nucleus_label (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_nucleus_label +end interface +interface + integer function trexio_has_mo_class (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_mo_class +end interface +interface + integer function trexio_has_mo_symmetry (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_mo_symmetry +end interface +interface + integer function trexio_has_metadata_code_num (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_metadata_code_num +end interface +interface + integer function trexio_has_metadata_author_num (trex_file) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + end function trexio_has_metadata_author_num +end interface interface integer function trexio_has_electron_up_num (trex_file) bind(C) use, intrinsic :: iso_c_binding @@ -329,10 +414,10 @@ interface end function trexio_has_ecp_non_local_num_n_max end interface interface - integer function trexio_has_basis_shell_num (trex_file) bind(C) + integer function trexio_has_basis_num (trex_file) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file - end function trexio_has_basis_shell_num + end function trexio_has_basis_num end interface interface integer function trexio_has_basis_prim_num (trex_file) bind(C) @@ -358,6 +443,42 @@ interface integer(8), intent(in), value :: trex_file end function trexio_has_mo_num end interface +interface + integer function trexio_read_metadata_description_c (trex_file, str, max_str_len) & + bind(C, name="trexio_read_metadata_description") + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + character, intent(out) :: str(*) + integer(4), intent(in), value :: max_str_len + end function trexio_read_metadata_description_c +end interface +interface + integer function trexio_read_nucleus_point_group_c (trex_file, str, max_str_len) & + bind(C, name="trexio_read_nucleus_point_group") + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + character, intent(out) :: str(*) + integer(4), intent(in), value :: max_str_len + end function trexio_read_nucleus_point_group_c +end interface +interface + integer function trexio_read_basis_type_c (trex_file, str, max_str_len) & + bind(C, name="trexio_read_basis_type") + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + character, intent(out) :: str(*) + integer(4), intent(in), value :: max_str_len + end function trexio_read_basis_type_c +end interface +interface + integer function trexio_read_mo_type_c (trex_file, str, max_str_len) & + bind(C, name="trexio_read_mo_type") + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + character, intent(out) :: str(*) + integer(4), intent(in), value :: max_str_len + end function trexio_read_mo_type_c +end interface interface integer function trexio_read_nucleus_charge_32 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -443,11 +564,18 @@ interface end function trexio_read_ecp_non_local_power_32 end interface interface - integer function trexio_read_basis_shell_center_32 (trex_file, dset) bind(C) + integer function trexio_read_basis_nucleus_index_32 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file integer(4), intent(out) :: dset(*) - end function trexio_read_basis_shell_center_32 + end function trexio_read_basis_nucleus_index_32 +end interface +interface + integer function trexio_read_basis_nucleus_shell_num_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: dset(*) + end function trexio_read_basis_nucleus_shell_num_32 end interface interface integer function trexio_read_basis_shell_ang_mom_32 (trex_file, dset) bind(C) @@ -471,11 +599,11 @@ interface end function trexio_read_basis_shell_factor_32 end interface interface - integer function trexio_read_basis_prim_index_32 (trex_file, dset) bind(C) + integer function trexio_read_basis_shell_prim_index_32 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file integer(4), intent(out) :: dset(*) - end function trexio_read_basis_prim_index_32 + end function trexio_read_basis_shell_prim_index_32 end interface interface integer function trexio_read_basis_exponent_32 (trex_file, dset) bind(C) @@ -723,11 +851,18 @@ interface end function trexio_read_ecp_non_local_power_64 end interface interface - integer function trexio_read_basis_shell_center_64 (trex_file, dset) bind(C) + integer function trexio_read_basis_nucleus_index_64 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file integer(8), intent(out) :: dset(*) - end function trexio_read_basis_shell_center_64 + end function trexio_read_basis_nucleus_index_64 +end interface +interface + integer function trexio_read_basis_nucleus_shell_num_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: dset(*) + end function trexio_read_basis_nucleus_shell_num_64 end interface interface integer function trexio_read_basis_shell_ang_mom_64 (trex_file, dset) bind(C) @@ -751,11 +886,11 @@ interface end function trexio_read_basis_shell_factor_64 end interface interface - integer function trexio_read_basis_prim_index_64 (trex_file, dset) bind(C) + integer function trexio_read_basis_shell_prim_index_64 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file integer(8), intent(out) :: dset(*) - end function trexio_read_basis_prim_index_64 + end function trexio_read_basis_shell_prim_index_64 end interface interface integer function trexio_read_basis_exponent_64 (trex_file, dset) bind(C) @@ -1003,11 +1138,18 @@ interface end function trexio_read_ecp_non_local_power end interface interface - integer function trexio_read_basis_shell_center (trex_file, dset) bind(C) + integer function trexio_read_basis_nucleus_index (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file integer(4), intent(out) :: dset(*) - end function trexio_read_basis_shell_center + end function trexio_read_basis_nucleus_index +end interface +interface + integer function trexio_read_basis_nucleus_shell_num (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: dset(*) + end function trexio_read_basis_nucleus_shell_num end interface interface integer function trexio_read_basis_shell_ang_mom (trex_file, dset) bind(C) @@ -1031,11 +1173,11 @@ interface end function trexio_read_basis_shell_factor end interface interface - integer function trexio_read_basis_prim_index (trex_file, dset) bind(C) + integer function trexio_read_basis_shell_prim_index (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file integer(4), intent(out) :: dset(*) - end function trexio_read_basis_prim_index + end function trexio_read_basis_shell_prim_index end interface interface integer function trexio_read_basis_exponent (trex_file, dset) bind(C) @@ -1198,6 +1340,60 @@ interface real(8), intent(out) :: dset(*) end function trexio_read_mo_2e_int_eri_lr end interface +interface + integer function trexio_read_metadata_code_low (trex_file, dset, max_str_len) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + character, intent(out) :: dset(*) + integer(4), intent(in), value :: max_str_len + end function trexio_read_metadata_code_low +end interface +interface + integer function trexio_read_metadata_author_low (trex_file, dset, max_str_len) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + character, intent(out) :: dset(*) + integer(4), intent(in), value :: max_str_len + end function trexio_read_metadata_author_low +end interface +interface + integer function trexio_read_nucleus_label_low (trex_file, dset, max_str_len) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + character, intent(out) :: dset(*) + integer(4), intent(in), value :: max_str_len + end function trexio_read_nucleus_label_low +end interface +interface + integer function trexio_read_mo_class_low (trex_file, dset, max_str_len) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + character, intent(out) :: dset(*) + integer(4), intent(in), value :: max_str_len + end function trexio_read_mo_class_low +end interface +interface + integer function trexio_read_mo_symmetry_low (trex_file, dset, max_str_len) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + character, intent(out) :: dset(*) + integer(4), intent(in), value :: max_str_len + end function trexio_read_mo_symmetry_low +end interface +interface + integer function trexio_read_metadata_code_num_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_metadata_code_num_32 +end interface +interface + integer function trexio_read_metadata_author_num_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_metadata_author_num_32 +end interface interface integer function trexio_read_electron_up_num_32 (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -1234,11 +1430,11 @@ interface end function trexio_read_ecp_non_local_num_n_max_32 end interface interface - integer function trexio_read_basis_shell_num_32 (trex_file, num) bind(C) + integer function trexio_read_basis_num_32 (trex_file, num) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file integer(4), intent(out) :: num - end function trexio_read_basis_shell_num_32 + end function trexio_read_basis_num_32 end interface interface integer function trexio_read_basis_prim_num_32 (trex_file, num) bind(C) @@ -1268,6 +1464,20 @@ interface integer(4), intent(out) :: num end function trexio_read_mo_num_32 end interface +interface + integer function trexio_read_metadata_code_num_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: num + end function trexio_read_metadata_code_num_64 +end interface +interface + integer function trexio_read_metadata_author_num_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(out) :: num + end function trexio_read_metadata_author_num_64 +end interface interface integer function trexio_read_electron_up_num_64 (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -1304,11 +1514,11 @@ interface end function trexio_read_ecp_non_local_num_n_max_64 end interface interface - integer function trexio_read_basis_shell_num_64 (trex_file, num) bind(C) + integer function trexio_read_basis_num_64 (trex_file, num) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file integer(8), intent(out) :: num - end function trexio_read_basis_shell_num_64 + end function trexio_read_basis_num_64 end interface interface integer function trexio_read_basis_prim_num_64 (trex_file, num) bind(C) @@ -1338,6 +1548,20 @@ interface integer(8), intent(out) :: num end function trexio_read_mo_num_64 end interface +interface + integer function trexio_read_metadata_code_num (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_metadata_code_num +end interface +interface + integer function trexio_read_metadata_author_num (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(out) :: num + end function trexio_read_metadata_author_num +end interface interface integer function trexio_read_electron_up_num (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -1374,11 +1598,11 @@ interface end function trexio_read_ecp_non_local_num_n_max end interface interface - integer function trexio_read_basis_shell_num (trex_file, num) bind(C) + integer function trexio_read_basis_num (trex_file, num) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file integer(4), intent(out) :: num - end function trexio_read_basis_shell_num + end function trexio_read_basis_num end interface interface integer function trexio_read_basis_prim_num (trex_file, num) bind(C) @@ -1408,6 +1632,42 @@ interface integer(4), intent(out) :: num end function trexio_read_mo_num end interface +interface + integer function trexio_write_metadata_description_c (trex_file, str, max_str_len) & + bind(C, name="trexio_write_metadata_description") + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + character, intent(in) :: str(*) + integer(4), intent(in), value :: max_str_len + end function trexio_write_metadata_description_c +end interface +interface + integer function trexio_write_nucleus_point_group_c (trex_file, str, max_str_len) & + bind(C, name="trexio_write_nucleus_point_group") + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + character, intent(in) :: str(*) + integer(4), intent(in), value :: max_str_len + end function trexio_write_nucleus_point_group_c +end interface +interface + integer function trexio_write_basis_type_c (trex_file, str, max_str_len) & + bind(C, name="trexio_write_basis_type") + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + character, intent(in) :: str(*) + integer(4), intent(in), value :: max_str_len + end function trexio_write_basis_type_c +end interface +interface + integer function trexio_write_mo_type_c (trex_file, str, max_str_len) & + bind(C, name="trexio_write_mo_type") + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + character, intent(in) :: str(*) + integer(4), intent(in), value :: max_str_len + end function trexio_write_mo_type_c +end interface interface integer function trexio_write_nucleus_charge_32 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding @@ -1493,11 +1753,18 @@ interface end function trexio_write_ecp_non_local_power_32 end interface interface - integer function trexio_write_basis_shell_center_32 (trex_file, dset) bind(C) + integer function trexio_write_basis_nucleus_index_32 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file integer(4), intent(in) :: dset(*) - end function trexio_write_basis_shell_center_32 + end function trexio_write_basis_nucleus_index_32 +end interface +interface + integer function trexio_write_basis_nucleus_shell_num_32 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in) :: dset(*) + end function trexio_write_basis_nucleus_shell_num_32 end interface interface integer function trexio_write_basis_shell_ang_mom_32 (trex_file, dset) bind(C) @@ -1521,11 +1788,11 @@ interface end function trexio_write_basis_shell_factor_32 end interface interface - integer function trexio_write_basis_prim_index_32 (trex_file, dset) bind(C) + integer function trexio_write_basis_shell_prim_index_32 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file integer(4), intent(in) :: dset(*) - end function trexio_write_basis_prim_index_32 + end function trexio_write_basis_shell_prim_index_32 end interface interface integer function trexio_write_basis_exponent_32 (trex_file, dset) bind(C) @@ -1773,11 +2040,18 @@ interface end function trexio_write_ecp_non_local_power_64 end interface interface - integer function trexio_write_basis_shell_center_64 (trex_file, dset) bind(C) + integer function trexio_write_basis_nucleus_index_64 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file integer(8), intent(in) :: dset(*) - end function trexio_write_basis_shell_center_64 + end function trexio_write_basis_nucleus_index_64 +end interface +interface + integer function trexio_write_basis_nucleus_shell_num_64 (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in) :: dset(*) + end function trexio_write_basis_nucleus_shell_num_64 end interface interface integer function trexio_write_basis_shell_ang_mom_64 (trex_file, dset) bind(C) @@ -1801,11 +2075,11 @@ interface end function trexio_write_basis_shell_factor_64 end interface interface - integer function trexio_write_basis_prim_index_64 (trex_file, dset) bind(C) + integer function trexio_write_basis_shell_prim_index_64 (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file integer(8), intent(in) :: dset(*) - end function trexio_write_basis_prim_index_64 + end function trexio_write_basis_shell_prim_index_64 end interface interface integer function trexio_write_basis_exponent_64 (trex_file, dset) bind(C) @@ -2053,11 +2327,18 @@ interface end function trexio_write_ecp_non_local_power end interface interface - integer function trexio_write_basis_shell_center (trex_file, dset) bind(C) + integer function trexio_write_basis_nucleus_index (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file integer(4), intent(in) :: dset(*) - end function trexio_write_basis_shell_center + end function trexio_write_basis_nucleus_index +end interface +interface + integer function trexio_write_basis_nucleus_shell_num (trex_file, dset) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in) :: dset(*) + end function trexio_write_basis_nucleus_shell_num end interface interface integer function trexio_write_basis_shell_ang_mom (trex_file, dset) bind(C) @@ -2081,11 +2362,11 @@ interface end function trexio_write_basis_shell_factor end interface interface - integer function trexio_write_basis_prim_index (trex_file, dset) bind(C) + integer function trexio_write_basis_shell_prim_index (trex_file, dset) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file integer(4), intent(in) :: dset(*) - end function trexio_write_basis_prim_index + end function trexio_write_basis_shell_prim_index end interface interface integer function trexio_write_basis_exponent (trex_file, dset) bind(C) @@ -2248,6 +2529,60 @@ interface real(8), intent(in) :: dset(*) end function trexio_write_mo_2e_int_eri_lr end interface +interface + integer function trexio_write_metadata_code_low (trex_file, dset, max_str_len) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + character, intent(in) :: dset(*) + integer(4), intent(in), value :: max_str_len + end function trexio_write_metadata_code_low +end interface +interface + integer function trexio_write_metadata_author_low (trex_file, dset, max_str_len) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + character, intent(in) :: dset(*) + integer(4), intent(in), value :: max_str_len + end function trexio_write_metadata_author_low +end interface +interface + integer function trexio_write_nucleus_label_low (trex_file, dset, max_str_len) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + character, intent(in) :: dset(*) + integer(4), intent(in), value :: max_str_len + end function trexio_write_nucleus_label_low +end interface +interface + integer function trexio_write_mo_class_low (trex_file, dset, max_str_len) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + character, intent(in) :: dset(*) + integer(4), intent(in), value :: max_str_len + end function trexio_write_mo_class_low +end interface +interface + integer function trexio_write_mo_symmetry_low (trex_file, dset, max_str_len) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + character, intent(in) :: dset(*) + integer(4), intent(in), value :: max_str_len + end function trexio_write_mo_symmetry_low +end interface +interface + integer function trexio_write_metadata_code_num_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_metadata_code_num_32 +end interface +interface + integer function trexio_write_metadata_author_num_32 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_metadata_author_num_32 +end interface interface integer function trexio_write_electron_up_num_32 (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -2284,11 +2619,11 @@ interface end function trexio_write_ecp_non_local_num_n_max_32 end interface interface - integer function trexio_write_basis_shell_num_32 (trex_file, num) bind(C) + integer function trexio_write_basis_num_32 (trex_file, num) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file integer(4), intent(in), value :: num - end function trexio_write_basis_shell_num_32 + end function trexio_write_basis_num_32 end interface interface integer function trexio_write_basis_prim_num_32 (trex_file, num) bind(C) @@ -2318,6 +2653,20 @@ interface integer(4), intent(in), value :: num end function trexio_write_mo_num_32 end interface +interface + integer function trexio_write_metadata_code_num_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in), value :: num + end function trexio_write_metadata_code_num_64 +end interface +interface + integer function trexio_write_metadata_author_num_64 (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in), value :: num + end function trexio_write_metadata_author_num_64 +end interface interface integer function trexio_write_electron_up_num_64 (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -2354,11 +2703,11 @@ interface end function trexio_write_ecp_non_local_num_n_max_64 end interface interface - integer function trexio_write_basis_shell_num_64 (trex_file, num) bind(C) + integer function trexio_write_basis_num_64 (trex_file, num) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file integer(8), intent(in), value :: num - end function trexio_write_basis_shell_num_64 + end function trexio_write_basis_num_64 end interface interface integer function trexio_write_basis_prim_num_64 (trex_file, num) bind(C) @@ -2388,6 +2737,20 @@ interface integer(8), intent(in), value :: num end function trexio_write_mo_num_64 end interface +interface + integer function trexio_write_metadata_code_num (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_metadata_code_num +end interface +interface + integer function trexio_write_metadata_author_num (trex_file, num) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: num + end function trexio_write_metadata_author_num +end interface interface integer function trexio_write_electron_up_num (trex_file, num) bind(C) use, intrinsic :: iso_c_binding @@ -2424,11 +2787,11 @@ interface end function trexio_write_ecp_non_local_num_n_max end interface interface - integer function trexio_write_basis_shell_num (trex_file, num) bind(C) + integer function trexio_write_basis_num (trex_file, num) bind(C) use, intrinsic :: iso_c_binding integer(8), intent(in), value :: trex_file integer(4), intent(in), value :: num - end function trexio_write_basis_shell_num + end function trexio_write_basis_num end interface interface integer function trexio_write_basis_prim_num (trex_file, num) bind(C) @@ -2460,15 +2823,410 @@ interface end interface contains integer(8) function trexio_open (filename, mode, backend) - use, intrinsic :: iso_c_binding + use, intrinsic :: iso_c_binding, only : c_null_char implicit none - character(len=*) :: filename - character, intent(in), value :: mode - integer, intent(in), value :: backend + character(len=*), intent(in) :: filename + character, intent(in), value :: mode + integer(trexio_backend), intent(in), value :: backend character(len=len_trim(filename)+1) :: filename_c + integer :: rc filename_c = trim(filename) // c_null_char trexio_open = trexio_open_c(filename_c, mode, backend) + if (trexio_open == 0_8) then + return + endif + rc = trexio_set_one_based(trexio_open) + if (rc /= TREXIO_SUCCESS) then + rc = trexio_close(trexio_open) + trexio_open = 0_8 + endif end function trexio_open +subroutine trexio_strarray2str(str_array, max_num_str, max_len_str, str_res) + use, intrinsic :: iso_c_binding, only : c_null_char + implicit none + + integer(8), intent(in), value :: max_num_str ! number of elements in strign array + integer, intent(in), value :: max_len_str ! maximum length of a string in an array + character(len=*), intent(in) :: str_array(*) + character(len=:), allocatable, intent(out) :: str_res + integer :: i + + str_res = '' + do i = 1, max_num_str + str_res = str_res // trim(str_array(i)) // TREXIO_DELIM + enddo + str_res = str_res // c_null_char + +end subroutine trexio_strarray2str + +subroutine trexio_str2strarray(str_flat, max_num_str, max_len_str, str_array) + implicit none + + integer(8), intent(in), value :: max_num_str ! number of elements in strign array + integer, intent(in), value :: max_len_str ! maximum length of a string in an array + character, intent(in) :: str_flat(*) + character(len=*), intent(inout) :: str_array(*) + + character(len=max_len_str) :: tmp_str + integer :: i, j, k, ind, offset + integer(8) :: len_flat + + len_flat = (max_len_str+1)*max_num_str + 1 + + ind=1 + offset=1 + do i=1,max_num_str + k = 1 + tmp_str='' + do j=ind,len_flat + if (str_flat(j) == TREXIO_DELIM) then + ind=j+1 + exit + endif + tmp_str(k:k) = str_flat(j) + k = k + 1 + enddo + str_array(i)=tmp_str + offset=ind + enddo + +end subroutine trexio_str2strarray + +subroutine trexio_assert(trexio_rc, check_rc, success_message) + implicit none + + integer, intent(in), value :: trexio_rc + integer, intent(in), value :: check_rc + character(len=*), intent(in), optional :: success_message + + character*(128) :: str + + if (trexio_rc == check_rc) then + if (present(success_message)) write(*,*) success_message + else + call trexio_string_of_error(trexio_rc, str) + print *, trim(str) + call exit(1) + endif + +end subroutine trexio_assert +integer function trexio_read_metadata_description (trex_file, str, max_str_len) + implicit none + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: max_str_len + character, intent(out) :: str(*) + + trexio_read_metadata_description = trexio_read_metadata_description_c(trex_file, str, max_str_len) + +end function trexio_read_metadata_description +integer function trexio_read_nucleus_point_group (trex_file, str, max_str_len) + implicit none + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: max_str_len + character, intent(out) :: str(*) + + trexio_read_nucleus_point_group = trexio_read_nucleus_point_group_c(trex_file, str, max_str_len) + +end function trexio_read_nucleus_point_group +integer function trexio_read_basis_type (trex_file, str, max_str_len) + implicit none + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: max_str_len + character, intent(out) :: str(*) + + trexio_read_basis_type = trexio_read_basis_type_c(trex_file, str, max_str_len) + +end function trexio_read_basis_type +integer function trexio_read_mo_type (trex_file, str, max_str_len) + implicit none + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: max_str_len + character, intent(out) :: str(*) + + trexio_read_mo_type = trexio_read_mo_type_c(trex_file, str, max_str_len) + +end function trexio_read_mo_type +integer function trexio_read_metadata_code (trex_file, dset, max_str_len) + implicit none + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: max_str_len + character(len=*), intent(inout) :: dset(*) + + character, allocatable :: str_compiled(:) + integer(8) :: metadata_code_num + integer :: rc + + rc = trexio_read_metadata_code_num_64(trex_file, metadata_code_num) + if (rc /= TREXIO_SUCCESS) trexio_read_metadata_code = rc + + allocate(str_compiled(metadata_code_num*(max_str_len+1)+1)) + + rc = trexio_read_metadata_code_low(trex_file, str_compiled, max_str_len) + if (rc /= TREXIO_SUCCESS) then + deallocate(str_compiled) + trexio_read_metadata_code = rc + else + call trexio_str2strarray(str_compiled, metadata_code_num, max_str_len, dset) + deallocate(str_compiled) + trexio_read_metadata_code = TREXIO_SUCCESS + endif + +end function trexio_read_metadata_code +integer function trexio_read_metadata_author (trex_file, dset, max_str_len) + implicit none + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: max_str_len + character(len=*), intent(inout) :: dset(*) + + character, allocatable :: str_compiled(:) + integer(8) :: metadata_author_num + integer :: rc + + rc = trexio_read_metadata_author_num_64(trex_file, metadata_author_num) + if (rc /= TREXIO_SUCCESS) trexio_read_metadata_author = rc + + allocate(str_compiled(metadata_author_num*(max_str_len+1)+1)) + + rc = trexio_read_metadata_author_low(trex_file, str_compiled, max_str_len) + if (rc /= TREXIO_SUCCESS) then + deallocate(str_compiled) + trexio_read_metadata_author = rc + else + call trexio_str2strarray(str_compiled, metadata_author_num, max_str_len, dset) + deallocate(str_compiled) + trexio_read_metadata_author = TREXIO_SUCCESS + endif + +end function trexio_read_metadata_author +integer function trexio_read_nucleus_label (trex_file, dset, max_str_len) + implicit none + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: max_str_len + character(len=*), intent(inout) :: dset(*) + + character, allocatable :: str_compiled(:) + integer(8) :: nucleus_num + integer :: rc + + rc = trexio_read_nucleus_num_64(trex_file, nucleus_num) + if (rc /= TREXIO_SUCCESS) trexio_read_nucleus_label = rc + + allocate(str_compiled(nucleus_num*(max_str_len+1)+1)) + + rc = trexio_read_nucleus_label_low(trex_file, str_compiled, max_str_len) + if (rc /= TREXIO_SUCCESS) then + deallocate(str_compiled) + trexio_read_nucleus_label = rc + else + call trexio_str2strarray(str_compiled, nucleus_num, max_str_len, dset) + deallocate(str_compiled) + trexio_read_nucleus_label = TREXIO_SUCCESS + endif + +end function trexio_read_nucleus_label +integer function trexio_read_mo_class (trex_file, dset, max_str_len) + implicit none + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: max_str_len + character(len=*), intent(inout) :: dset(*) + + character, allocatable :: str_compiled(:) + integer(8) :: mo_num + integer :: rc + + rc = trexio_read_mo_num_64(trex_file, mo_num) + if (rc /= TREXIO_SUCCESS) trexio_read_mo_class = rc + + allocate(str_compiled(mo_num*(max_str_len+1)+1)) + + rc = trexio_read_mo_class_low(trex_file, str_compiled, max_str_len) + if (rc /= TREXIO_SUCCESS) then + deallocate(str_compiled) + trexio_read_mo_class = rc + else + call trexio_str2strarray(str_compiled, mo_num, max_str_len, dset) + deallocate(str_compiled) + trexio_read_mo_class = TREXIO_SUCCESS + endif + +end function trexio_read_mo_class +integer function trexio_read_mo_symmetry (trex_file, dset, max_str_len) + implicit none + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: max_str_len + character(len=*), intent(inout) :: dset(*) + + character, allocatable :: str_compiled(:) + integer(8) :: mo_num + integer :: rc + + rc = trexio_read_mo_num_64(trex_file, mo_num) + if (rc /= TREXIO_SUCCESS) trexio_read_mo_symmetry = rc + + allocate(str_compiled(mo_num*(max_str_len+1)+1)) + + rc = trexio_read_mo_symmetry_low(trex_file, str_compiled, max_str_len) + if (rc /= TREXIO_SUCCESS) then + deallocate(str_compiled) + trexio_read_mo_symmetry = rc + else + call trexio_str2strarray(str_compiled, mo_num, max_str_len, dset) + deallocate(str_compiled) + trexio_read_mo_symmetry = TREXIO_SUCCESS + endif + +end function trexio_read_mo_symmetry +integer function trexio_write_metadata_description (trex_file, str, max_str_len) + use, intrinsic :: iso_c_binding, only : c_null_char + implicit none + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: max_str_len + character(len=*), intent(in) :: str + + character(len=len_trim(str)+1) :: str_c + + str_c = trim(str) // c_null_char + + trexio_write_metadata_description = trexio_write_metadata_description_c(trex_file, str_c, max_str_len) + +end function trexio_write_metadata_description +integer function trexio_write_nucleus_point_group (trex_file, str, max_str_len) + use, intrinsic :: iso_c_binding, only : c_null_char + implicit none + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: max_str_len + character(len=*), intent(in) :: str + + character(len=len_trim(str)+1) :: str_c + + str_c = trim(str) // c_null_char + + trexio_write_nucleus_point_group = trexio_write_nucleus_point_group_c(trex_file, str_c, max_str_len) + +end function trexio_write_nucleus_point_group +integer function trexio_write_basis_type (trex_file, str, max_str_len) + use, intrinsic :: iso_c_binding, only : c_null_char + implicit none + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: max_str_len + character(len=*), intent(in) :: str + + character(len=len_trim(str)+1) :: str_c + + str_c = trim(str) // c_null_char + + trexio_write_basis_type = trexio_write_basis_type_c(trex_file, str_c, max_str_len) + +end function trexio_write_basis_type +integer function trexio_write_mo_type (trex_file, str, max_str_len) + use, intrinsic :: iso_c_binding, only : c_null_char + implicit none + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: max_str_len + character(len=*), intent(in) :: str + + character(len=len_trim(str)+1) :: str_c + + str_c = trim(str) // c_null_char + + trexio_write_mo_type = trexio_write_mo_type_c(trex_file, str_c, max_str_len) + +end function trexio_write_mo_type +integer function trexio_write_metadata_code (trex_file, dset, max_str_len) + implicit none + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: max_str_len + character(len=*), intent(in) :: dset(*) + + character(len=:), allocatable :: str_compiled + integer(8) :: metadata_code_num + integer :: rc + + rc = trexio_read_metadata_code_num_64(trex_file, metadata_code_num) + if (rc /= TREXIO_SUCCESS) then + trexio_write_metadata_code = rc + else + call trexio_strarray2str(dset, metadata_code_num, max_str_len, str_compiled) + trexio_write_metadata_code = trexio_write_metadata_code_low(trex_file, str_compiled, max_str_len) + endif + +end function trexio_write_metadata_code +integer function trexio_write_metadata_author (trex_file, dset, max_str_len) + implicit none + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: max_str_len + character(len=*), intent(in) :: dset(*) + + character(len=:), allocatable :: str_compiled + integer(8) :: metadata_author_num + integer :: rc + + rc = trexio_read_metadata_author_num_64(trex_file, metadata_author_num) + if (rc /= TREXIO_SUCCESS) then + trexio_write_metadata_author = rc + else + call trexio_strarray2str(dset, metadata_author_num, max_str_len, str_compiled) + trexio_write_metadata_author = trexio_write_metadata_author_low(trex_file, str_compiled, max_str_len) + endif + +end function trexio_write_metadata_author +integer function trexio_write_nucleus_label (trex_file, dset, max_str_len) + implicit none + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: max_str_len + character(len=*), intent(in) :: dset(*) + + character(len=:), allocatable :: str_compiled + integer(8) :: nucleus_num + integer :: rc + + rc = trexio_read_nucleus_num_64(trex_file, nucleus_num) + if (rc /= TREXIO_SUCCESS) then + trexio_write_nucleus_label = rc + else + call trexio_strarray2str(dset, nucleus_num, max_str_len, str_compiled) + trexio_write_nucleus_label = trexio_write_nucleus_label_low(trex_file, str_compiled, max_str_len) + endif + +end function trexio_write_nucleus_label +integer function trexio_write_mo_class (trex_file, dset, max_str_len) + implicit none + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: max_str_len + character(len=*), intent(in) :: dset(*) + + character(len=:), allocatable :: str_compiled + integer(8) :: mo_num + integer :: rc + + rc = trexio_read_mo_num_64(trex_file, mo_num) + if (rc /= TREXIO_SUCCESS) then + trexio_write_mo_class = rc + else + call trexio_strarray2str(dset, mo_num, max_str_len, str_compiled) + trexio_write_mo_class = trexio_write_mo_class_low(trex_file, str_compiled, max_str_len) + endif + +end function trexio_write_mo_class +integer function trexio_write_mo_symmetry (trex_file, dset, max_str_len) + implicit none + integer(8), intent(in), value :: trex_file + integer(4), intent(in), value :: max_str_len + character(len=*), intent(in) :: dset(*) + + character(len=:), allocatable :: str_compiled + integer(8) :: mo_num + integer :: rc + + rc = trexio_read_mo_num_64(trex_file, mo_num) + if (rc /= TREXIO_SUCCESS) then + trexio_write_mo_symmetry = rc + else + call trexio_strarray2str(dset, mo_num, max_str_len, str_compiled) + trexio_write_mo_symmetry = trexio_write_mo_symmetry_low(trex_file, str_compiled, max_str_len) + endif + +end function trexio_write_mo_symmetry end module trexio From 7b0815354d768279ed4f6d5b95e81767f8eb3318 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Sun, 27 Jun 2021 15:22:17 +0200 Subject: [PATCH 24/26] Fixed qmc_e_curve --- devel/qmcchem/qmc_e_curve2.irp.f | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/devel/qmcchem/qmc_e_curve2.irp.f b/devel/qmcchem/qmc_e_curve2.irp.f index 6386bfb..5add73d 100644 --- a/devel/qmcchem/qmc_e_curve2.irp.f +++ b/devel/qmcchem/qmc_e_curve2.irp.f @@ -4,6 +4,7 @@ program e_curve integer :: i,j,k, kk, nab, m, l double precision :: norm, E, hij, num, ci, cj double precision :: e_0(N_states) + double precision, allocatable :: psi_save(:) PROVIDE mo_two_e_integrals_in_map mo_one_e_integrals if (.not.read_wf) then @@ -23,38 +24,31 @@ program e_curve double precision :: thresh integer(bit_kind), allocatable :: det_i(:,:), det_j(:,:) thresh = 1.d-10 + integer :: n_det_prime nab = n_det_alpha_unique+n_det_beta_unique - + allocate(psi_save(1:N_det)) + psi_save(1:N_det) = psi_coef(1:N_det,1) do while (thresh < 1.d0) norm = 0.d0 + n_det_prime = n_det do k=1,n_det + psi_coef(k,1) = psi_save(k) if (dabs(psi_coef(k,1)) < thresh) then psi_coef(k,1) = 0.d0 + n_det_prime -= 1 endif norm = norm + psi_coef(k,1)**2 enddo - TOUCH psi_coef + TOUCH psi_coef psi_det norm = norm/dsqrt(norm) + psi_coef(:,1) = psi_coef(:,1)/norm - psi_coef(1:N_det,1) = psi_coef_sorted(1:N_det,1) - psi_det(1:N_int,1:2,1:N_det) = psi_det_sorted(1:N_int,1:2,1:N_det) - do k=1,n_det - if (psi_coef(k,1) == 0.d0) then - exit - endif - enddo - n_det = k-1 - TOUCH n_det psi_coef psi_det + E = psi_energy(1) - j = n_det_alpha_unique+n_det_beta_unique - call u_0_H_u_0(E,psi_coef,n_det,psi_det,N_int,1,size(psi_coef,1)) - - print '(E9.1,2X,I8,2X,F10.2,2X,F10.8,2X,F15.10)', thresh, n_det, & - dble( elec_alpha_num**3 + elec_alpha_num**2 * (nab-1) ) / & - dble( elec_alpha_num**3 + elec_alpha_num**2 * (nab-j)), norm, & - psi_energy(1) + print '(E9.1,2X,I8,2X,2X,F10.8,2X,F15.10)', thresh, n_det_prime, & + norm, E thresh = thresh * dsqrt(10.d0) enddo print *, '==========================================================' From 08e59877d03365a6217865682f89869b5e9fcc0f Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Sun, 27 Jun 2021 15:53:27 +0200 Subject: [PATCH 25/26] Forgot file --- devel/trexio/trexio_file.irp.f | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 devel/trexio/trexio_file.irp.f diff --git a/devel/trexio/trexio_file.irp.f b/devel/trexio/trexio_file.irp.f new file mode 100644 index 0000000..c989774 --- /dev/null +++ b/devel/trexio/trexio_file.irp.f @@ -0,0 +1,20 @@ +BEGIN_PROVIDER [ character*(1024), trexio_filename ] + implicit none + BEGIN_DOC + ! Name of the TREXIO file + END_DOC + character*(1024) :: prefix + + trexio_filename = trexio_file + + if (trexio_file == 'None') then + prefix = trim(ezfio_work_dir)//trim(ezfio_filename) + if (backend == 0) then + trexio_filename = trim(prefix)//'.h5' + else if (backend == 1) then + trexio_filename = trim(prefix) + endif + endif +END_PROVIDER + + From b430721eb42c2a36bc16f33e5fc5812752057990 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Sun, 27 Jun 2021 23:45:30 +0200 Subject: [PATCH 26/26] Estimate cost --- devel/qmcchem/qmc_e_curve.irp.f | 16 ++++++++++++++-- devel/qmcchem/qmc_e_curve2.irp.f | 24 +++++++++++++++++++++--- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/devel/qmcchem/qmc_e_curve.irp.f b/devel/qmcchem/qmc_e_curve.irp.f index e6135b0..f9bc210 100644 --- a/devel/qmcchem/qmc_e_curve.irp.f +++ b/devel/qmcchem/qmc_e_curve.irp.f @@ -45,16 +45,21 @@ program e_curve print *, '==========================================================' double precision :: thresh integer(bit_kind), allocatable :: det_i(:,:), det_j(:,:) + integer :: na, nb thresh = 1.d-10 + na = n_det_alpha_unique + nb = n_det_beta_unique do j=0,nab i = iorder(j) if (i<0) then + nb -= 1 do k=1,n_det if (psi_bilinear_matrix_columns(k) == -i) then psi_bilinear_matrix_values(k,1) = 0.d0 endif enddo else + na -= 1 do k=1,n_det if (psi_bilinear_matrix_rows(k) == i) then psi_bilinear_matrix_values(k,1) = 0.d0 @@ -82,11 +87,18 @@ program e_curve exit endif E = E_0(1) + nuclear_repulsion + + double precision :: cost0, cost + cost0 = elec_alpha_num**3 + elec_beta_num**3 + cost = (na-1) * elec_alpha_num**2 + & + (nb-1) * elec_beta_num**2 + & + elec_alpha_num**3 + elec_beta_num**3 + cost = cost/cost0 + double precision :: u_dot_u norm = dsqrt(u_dot_u(psi_coef(1,1),N_det)) print '(E9.1,2X,I8,2X,F10.2,2X,F10.8,2X,F15.10)', thresh, m, & - dble( elec_alpha_num**3 + elec_alpha_num**2 * (nab-1) ) / & - dble( elec_alpha_num**3 + elec_alpha_num**2 * (j-1)), norm, psi_energy(1) + cost, norm, psi_energy(1) thresh = thresh * dsqrt(10.d0) enddo print *, '==========================================================' diff --git a/devel/qmcchem/qmc_e_curve2.irp.f b/devel/qmcchem/qmc_e_curve2.irp.f index 5add73d..5ae388d 100644 --- a/devel/qmcchem/qmc_e_curve2.irp.f +++ b/devel/qmcchem/qmc_e_curve2.irp.f @@ -45,10 +45,28 @@ program e_curve norm = norm/dsqrt(norm) psi_coef(:,1) = psi_coef(:,1)/norm + integer :: na, nb + na = 0 + do k=1,n_det_alpha_unique + if (det_alpha_norm(k) > 0.d0) then + na += 1 + endif + enddo + nb = 0 + do k=1,n_det_beta_unique + if (det_beta_norm(k) > 0.d0) then + nb += 1 + endif + enddo E = psi_energy(1) - - print '(E9.1,2X,I8,2X,2X,F10.8,2X,F15.10)', thresh, n_det_prime, & - norm, E + double precision :: cost0, cost + cost0 = elec_alpha_num**3 + elec_beta_num**3 + cost = (na-1) * elec_alpha_num**2 + & + (nb-1) * elec_beta_num**2 + & + elec_alpha_num**3 + elec_beta_num**3 + cost = cost/cost0 + print '(E9.1,2X,I8,2X,F10.2,2X,F10.8,2X,F15.10)', thresh, n_det_prime, & + cost, norm, E thresh = thresh * dsqrt(10.d0) enddo print *, '=========================================================='