diff --git a/scripts/qp_import_trexio.py b/scripts/qp_import_trexio.py index b8d0d8ed..00c1a40c 100755 --- a/scripts/qp_import_trexio.py +++ b/scripts/qp_import_trexio.py @@ -210,6 +210,7 @@ def write_ezfio(trexio_filename, filename): nucl_index = trexio.read_basis_nucleus_index(trexio_file) exponent = [1.]*prim_num coefficient = [1.]*prim_num + prim_factor = [1.]*prim_num shell_index = [i for i in range(shell_num)] ao_shell = trexio.read_ao_shell(trexio_file) @@ -221,6 +222,9 @@ def write_ezfio(trexio_filename, filename): ezfio.set_basis_basis_nucleus_index([ x+1 for x in nucl_index ]) ezfio.set_basis_prim_expo(exponent) ezfio.set_basis_prim_coef(coefficient) + ezfio.set_basis_prim_normalization_factor(prim_factor) + ezfio.set_basis_primitives_normalized(True) + ezfio.set_basis_ao_normalized(False) nucl_shell_num = [] prev = None @@ -283,7 +287,7 @@ def write_ezfio(trexio_filename, filename): ezfio.set_ao_basis_ao_num(ao_num) - if cartesian and basis_type.lower() == "gaussian" and shell_num > 0: + if cartesian and basis_type.lower() in ["gaussian", "numerical"] and shell_num > 0: ao_shell = trexio.read_ao_shell(trexio_file_cart) at = [ nucl_index[i]+1 for i in ao_shell ] ezfio.set_ao_basis_ao_nucl(at) diff --git a/src/trexio/import_trexio_integrals.irp.f b/src/trexio/import_trexio_integrals.irp.f index d85a0283..0fda2ff0 100644 --- a/src/trexio/import_trexio_integrals.irp.f +++ b/src/trexio/import_trexio_integrals.irp.f @@ -119,6 +119,28 @@ subroutine run(f) call ezfio_set_ao_one_e_ints_io_ao_integrals_n_e('Read') endif + ! Some codes only provide ao_1e_int_core_hamiltonian rather than + ! kinetic and nuclear potentials separately, so we need to work + ! around that. This is needed for non-GTO basis sets since some QP + ! functions will try to calculate these matrices from the nonexisting + ! GTO basis if they are not set. + if (trexio_has_ao_1e_int_core_hamiltonian(f) == TREXIO_SUCCESS .and. & + trexio_has_ao_1e_int_potential_n_e(f) /= TREXIO_SUCCESS .and. & + trexio_has_ao_1e_int_kinetic(f) /= TREXIO_SUCCESS) then + rc = trexio_read_ao_1e_int_core_hamiltonian(f, A) + if (rc /= TREXIO_SUCCESS) then + print *, irp_here + print *, 'Error reading AO core Hamiltonian.' + call trexio_assert(rc, TREXIO_SUCCESS) + stop -1 + endif + call ezfio_set_ao_one_e_ints_ao_integrals_n_e(A) + call ezfio_set_ao_one_e_ints_io_ao_integrals_n_e('Read') + A=0.d0 + call ezfio_set_ao_one_e_ints_ao_integrals_kinetic(A) + call ezfio_set_ao_one_e_ints_io_ao_integrals_kinetic('Read') + endif + deallocate(A,B) ! AO 2e integrals