9
1
mirror of https://github.com/QuantumPackage/qp2.git synced 2025-04-28 11:14:43 +02:00

qp_import_trexio.py

This commit is contained in:
Anthony Scemama 2024-11-01 10:30:54 +01:00
parent 1d4dbad7e5
commit b68cc4ef9a

View File

@ -14,6 +14,8 @@ Options:
import sys import sys
import os import os
import numpy as np import numpy as np
import subprocess
import tempfile
from functools import reduce from functools import reduce
from ezfio import ezfio from ezfio import ezfio
from docopt import docopt from docopt import docopt
@ -77,10 +79,8 @@ def generate_xyz(l):
def write_ezfio(trexio_filename, filename): def write_ezfio(trexio_filename, filename):
try: warnings = []
trexio_file = trexio.File(trexio_filename,mode='r',back_end=trexio.TREXIO_TEXT) trexio_file = trexio.File(trexio_filename,mode='r',back_end=trexio.TREXIO_AUTO)
except:
trexio_file = trexio.File(trexio_filename,mode='r',back_end=trexio.TREXIO_HDF5)
ezfio.set_file(filename) ezfio.set_file(filename)
ezfio.set_trexio_trexio_file(trexio_filename) ezfio.set_trexio_trexio_file(trexio_filename)
@ -113,6 +113,7 @@ def write_ezfio(trexio_filename, filename):
ezfio.set_nuclei_nucl_coord([0.,0.,0.]) ezfio.set_nuclei_nucl_coord([0.,0.,0.])
ezfio.set_nuclei_nucl_label(["X"]) ezfio.set_nuclei_nucl_label(["X"])
print("None") print("None")
warnings.append("No geometry found in the TREXIO file")
@ -142,7 +143,6 @@ def write_ezfio(trexio_filename, filename):
try: try:
basis_type = trexio.read_basis_type(trexio_file) basis_type = trexio.read_basis_type(trexio_file)
print ("BASIS TYPE: ", basis_type.lower())
if basis_type.lower() in ["gaussian", "slater"]: if basis_type.lower() in ["gaussian", "slater"]:
shell_num = trexio.read_basis_shell_num(trexio_file) shell_num = trexio.read_basis_shell_num(trexio_file)
prim_num = trexio.read_basis_prim_num(trexio_file) prim_num = trexio.read_basis_prim_num(trexio_file)
@ -251,6 +251,7 @@ def write_ezfio(trexio_filename, filename):
print(basis_type) print(basis_type)
except: except:
raise
print("None") print("None")
ezfio.set_ao_basis_ao_cartesian(True) ezfio.set_ao_basis_ao_cartesian(True)
@ -264,7 +265,20 @@ def write_ezfio(trexio_filename, filename):
ao_num = trexio.read_ao_num(trexio_file) ao_num = trexio.read_ao_num(trexio_file)
ezfio.set_ao_basis_ao_num(ao_num) ezfio.set_ao_basis_ao_num(ao_num)
if cartesian and shell_num > 0: trexio_file_cart = trexio_file
if basis_type.lower() == "gaussian" and not cartesian:
try:
import trexio_tools
fd, tmp = tempfile.mkstemp()
os.close(fd)
retcode = subprocess.call(["trexio", "convert-to", "-t", "cartesian", "-o", tmp, trexio_filename])
trexio_file_cart = trexio.File(tmp,mode='r',back_end=trexio.TREXIO_AUTO)
cartesian = trexio.read_ao_cartesian(trexio_file_cart)
os.unlink(tmp)
except:
pass
if cartesian and basis_type.lower() == "gaussian" and shell_num > 0:
ao_shell = trexio.read_ao_shell(trexio_file) ao_shell = trexio.read_ao_shell(trexio_file)
at = [ nucl_index[i]+1 for i in ao_shell ] at = [ nucl_index[i]+1 for i in ao_shell ]
ezfio.set_ao_basis_ao_nucl(at) ezfio.set_ao_basis_ao_nucl(at)
@ -327,7 +341,9 @@ def write_ezfio(trexio_filename, filename):
print("OK") print("OK")
else: else:
print("None: integrals should be also imported using qp run import_trexio_integrals") warnings.append("Integrals should be imported using `qp run import_trexio_integrals`")
print("None")
# _ # _
@ -364,7 +380,8 @@ def write_ezfio(trexio_filename, filename):
mo_num = trexio.read_mo_num(trexio_file) mo_num = trexio.read_mo_num(trexio_file)
ezfio.set_mo_basis_mo_num(mo_num) ezfio.set_mo_basis_mo_num(mo_num)
MoMatrix = trexio.read_mo_coefficient(trexio_file) # Read coefs from temporary cartesian file created in the AO section
MoMatrix = trexio.read_mo_coefficient(trexio_file_cart)
ezfio.set_mo_basis_mo_coef(MoMatrix) ezfio.set_mo_basis_mo_coef(MoMatrix)
mo_occ = [ 0. for i in range(mo_num) ] mo_occ = [ 0. for i in range(mo_num) ]
@ -471,7 +488,7 @@ def write_ezfio(trexio_filename, filename):
alpha = [ alpha[i] for i in range(num_alpha) ] alpha = [ alpha[i] for i in range(num_alpha) ]
beta = [ i for i in range(len(spin)) if spin[i] == 1 ] beta = [ i for i in range(len(spin)) if spin[i] == 1 ]
beta = [ beta[i] for i in range(num_beta) ] beta = [ beta[i] for i in range(num_beta) ]
print("Warning -- UHF orbitals --", end=' ') warnings.append("UHF orbitals orbitals read", end=' ')
alpha_s = ['0']*mo_num alpha_s = ['0']*mo_num
beta_s = ['0']*mo_num beta_s = ['0']*mo_num
for i in alpha: for i in alpha:
@ -498,6 +515,10 @@ def write_ezfio(trexio_filename, filename):
print("OK") print("OK")
for w in warnings:
print(w)
def get_full_path(file_path): def get_full_path(file_path):