diff --git a/parser/parser-gaussian/parser_gaussian.py b/parser/parser-gaussian/parser_gaussian.py index cd708ff3e4bbfe3d32fe51c2cef29f922e7554b6..d7e9e5b0405e9a4b644050428757b4f2d941b931 100644 --- a/parser/parser-gaussian/parser_gaussian.py +++ b/parser/parser-gaussian/parser_gaussian.py @@ -72,7 +72,7 @@ mainFileDescription = SM( forwardMatch = True, subMatchers = [ SM(r"\s*Charge =\s*(?P<x_gaussian_total_charge>[-+0-9]*) Multiplicity =\s*(?P<x_gaussian_spin_target_multiplicity>[0-9]*)"), - SM(r"\s*(Tv|Tv\s*[0]|TV|TV\s*[0])\s*(?P<x_gaussian_geometry_lattice_vector_x>[0-9.]*)\s+(?P<x_gaussian_geometry_lattice_vector_y>[0-9.]*)\s+(?P<x_gaussian_geometry_lattice_vector_z>[0-9.]*)", repeats = True), + SM(r"\s*(Tv|Tv\s*[0]|TV|TV\s*[0])\s*(?P<x_gaussian_geometry_lattice_vector_x>[0-9.]+)\s+(?P<x_gaussian_geometry_lattice_vector_y>[0-9.]+)\s+(?P<x_gaussian_geometry_lattice_vector_z>[0-9.]+)", repeats = True), SM(r"\s*AtmWgt=\s+(?P<x_gaussian_atomic_masses>[0-9.]+(\s+[0-9.]+)(\s+[0-9.]+)?(\s+[0-9.]+)?(\s+[0-9.]+)?(\s+[0-9.]+)?(\s+[0-9.]+)?(\s+[0-9.]+)?(\s+[0-9.]+)?(\s+[0-9.]+)?)", repeats = True) ] ), @@ -92,7 +92,7 @@ mainFileDescription = SM( startReStr = r"\s*Standard orientation:", endReStr = r"\s*Rotational constants", subMatchers = [ - SM(r"\s+[0-9]+\s+(?P<x_gaussian_atomic_number>[0-9]+)\s+[0-9]+\s+(?P<x_gaussian_atom_x_coord__angstrom>[-+0-9EeDd.]+)\s+(?P<x_gaussian_atom_y_coord__angstrom>[-+0-9EeDd.]+)\s+(?P<x_gaussian_atom_z_coord__angstrom>[-+0-9EeDd.]+)",repeats = True), + SM(r"\s+[0-9]+\s+(?P<x_gaussian_atomic_number>[0-9]+)\s+[0-9]*\s+(?P<x_gaussian_atom_x_coord__angstrom>[-+0-9EeDd.]+)\s+(?P<x_gaussian_atom_y_coord__angstrom>[-+0-9EeDd.]+)\s+(?P<x_gaussian_atom_z_coord__angstrom>[-+0-9EeDd.]+)",repeats = True), SM(r"\s*Rotational constants") ] ), @@ -101,8 +101,9 @@ mainFileDescription = SM( startReStr = r"\s*IExCor=", forwardMatch = True, subMatchers = [ - SM(r"\s*IExCor=\s*[0-9]+\s*DFT=[A-Z]\s*Ex\+Corr=[A-Z0-9]+\s*ExCW=[0-9]\s*ScaHFX=\s*(?P<hybrid_xc_coeff1>[0-9.]+)"), - SM(r"\s*IExCor=\s*[0-9]+\s*DFT=[A-Z]\s*Ex\=[A-Z0-9]+\s*Corr=[a-zA-Z0-9]+\s*ExCW=[0-9]\s*ScaHFX=\s*(?P<hybrid_xc_coeff1>[0-9.]+)"), + SM(r"\s*IExCor=\s*[0-9-]+\s*DFT=[A-Z]\s*Ex\+Corr=[a-zA-Z0-9]+\s*ExCW=[0-9]\s*ScaHFX=\s*(?P<hybrid_xc_coeff1>[0-9.]+)"), + SM(r"\s*IExCor=\s*[0-9-]+\s*DFT=[A-Z]\s*Ex\=[a-zA-Z0-9+]+\s*Corr=[ a-zA-Z0-9]+\s*?ExCW=[0-9]\s*ScaHFX=\s*(?P<hybrid_xc_coeff1>[0-9.]+)"), + SM(r"\s*IExCor=\s*[0-9-]+\s*DFT=[A-Z]\s*Ex\=[a-zA-Z0-9+]+\s*Corr=[ a-zA-Z0-9]+\s*ScaHFX=\s*(?P<hybrid_xc_coeff1>[0-9.]+)"), SM(r"\s*ScaDFX=\s*(?P<hybrid_xc_coeff2>[0-9.]+\s*[0-9.]+\s*[0-9.]+\s*[0-9.]+)") ] ), @@ -259,10 +260,10 @@ mainFileDescription = SM( forwardMatch = True, subFlags = SM.SubFlags.Sequenced, subMatchers = [ - SM(r"\s*Alpha occ. eigenvalues --\s+(?P<x_gaussian_alpha_occ_eigenvalues_values>(.+)?)", repeats = True), - SM(r"\s*Alpha virt. eigenvalues --\s+(?P<x_gaussian_alpha_vir_eigenvalues_values>(.+)?)", repeats = True), - SM(r"\s*Beta occ. eigenvalues --\s+(?P<x_gaussian_beta_occ_eigenvalues_values>(.+)?)", repeats = True), - SM(r"\s*Beta virt. eigenvalues --\s+(?P<x_gaussian_beta_vir_eigenvalues_values>(.+)?)", repeats = True), + SM(r"\s*Alpha occ. eigenvalues --\s+(?P<x_gaussian_alpha_occ_eigenvalues_values>-?[^\s.-]+\s+|(\-?\d*\.\d*)\s+(\-?\d*\.\d*)?\s+(\-?\d*\.\d*)?\s+(\-?\d*\.\d*)?\s+(\-?\d*\.\d*)?)", repeats = True), + SM(r"\s*Alpha virt. eigenvalues --\s+(?P<x_gaussian_alpha_vir_eigenvalues_values>-?[^\s.-]+\s+|(\-?\d*\.\d*)\s+(\-?\d*\.\d*)?\s+(\-?\d*\.\d*)?\s+(\-?\d*\.\d*)?\s+(\-?\d*\.\d*)?)", repeats = True), + SM(r"\s*Beta occ. eigenvalues --\s+(?P<x_gaussian_beta_occ_eigenvalues_values>-?[^\s.-]+\s+|(\-?\d*\.\d*)\s+(\-?\d*\.\d*)?\s+(\-?\d*\.\d*)?\s+(\-?\d*\.\d*)?\s+(\-?\d*\.\d*)?)", repeats = True), + SM(r"\s*Beta virt. eigenvalues --\s+(?P<x_gaussian_beta_vir_eigenvalues_values>-?[^\s.-]+\s+|(\-?\d*\.\d*)\s+(\-?\d*\.\d*)?\s+(\-?\d*\.\d*)?\s+(\-?\d*\.\d*)?\s+(\-?\d*\.\d*)?)", repeats = True), SM(r"\s*- Condensed to atoms (all electrons)"), ] ), @@ -341,7 +342,7 @@ mainFileDescription = SM( forwardMatch = True, subMatchers = [ SM(r"\s*Force constants in Cartesian coordinates"), - SM(r"\s*[0-9]+\s*(?P<x_gaussian_force_constants>(\-?\d+\.\d*[-+D0-9]+)\s*(\-?\d+\.\d*[-+D0-9]+)?\s*(\-?\d+\.\d*[-+D0-9]+)?\s*(\-?\d+\.\d*[-+D0-9]+)?\s*(\-?\d+\.\d*[-+D0-9]+)?)", repeats = True), + SM(r"\s*[0-9]+\s*(?P<x_gaussian_force_constants>(-?\d*\.\d*D?\+?\-?\d+)|(\-?\d*\.\d*[-+DE0-9]+)\s*(\-?\d*\.\d*[-+DE0-9]+)?\s*(\-?\d*\.\d*[-+DE0-9]+)?\s*(\-?\d*\.\d*[-+DE0-9]+)?\s*(\-?\d*\.\d*[-+DE0-9]+)?)", repeats = True), SM(r"\s*Force constants in internal coordinates") ] ), @@ -544,7 +545,10 @@ class GaussianParserContext(object): def onClose_section_eigenvalues(self, backend, gIndex, section): eigenenergies = str(section["x_gaussian_alpha_occ_eigenvalues_values"]) eigenen1 = [] - energy = [float(f) for f in eigenenergies[1:].replace("'","").replace(",","").replace("]","").replace("one","").replace(" ."," 0.").replace(" -."," -0.").replace("\\n","").replace("-"," -").split()] + if('*' in eigenenergies): + energy = [0.0] + else: + energy = [float(f) for f in eigenenergies[1:].replace("'","").replace(",","").replace("]","").replace("one","").replace(" ."," 0.").replace(" -."," -0.").replace("\\n","").replace("-"," -").split()] eigenen1 = np.append(eigenen1, energy) if(section["x_gaussian_beta_occ_eigenvalues_values"]): occoccupationsalp = np.ones(len(eigenen1), dtype=float) @@ -553,10 +557,13 @@ class GaussianParserContext(object): eigenenergies = str(section["x_gaussian_alpha_vir_eigenvalues_values"]) eigenen2 = [] - energy = [float(f) for f in eigenenergies[1:].replace("'","").replace(",","").replace("]","").replace("one","").replace(" ."," 0.").replace(" -."," -0.").replace("\\n","").replace("-"," -").split()] + if('*' in eigenenergies): + energy = [0.0] + else: + energy = [float(f) for f in eigenenergies[1:].replace("'","").replace(",","").replace("]","").replace("one","").replace(" ."," 0.").replace(" -."," -0.").replace("\\n","").replace("-"," -").split()] eigenen2 = np.append(eigenen2, energy) viroccupationsalp = np.zeros(len(eigenen2), dtype=float) - eigenenconalp = np.zeros(len(eigenen1) + len(eigenen2)) + leneigenenconalp = len(eigenen1) + len(eigenen2) eigenenconalp = np.concatenate((eigenen1,eigenen2), axis=0) eigenenconalp = convert_unit(eigenenconalp, "hartree", "J") occupconalp = np.concatenate((occoccupationsalp, viroccupationsalp), axis=0) @@ -571,22 +578,34 @@ class GaussianParserContext(object): if(section["x_gaussian_beta_occ_eigenvalues_values"]): eigenenergies = str(section["x_gaussian_beta_occ_eigenvalues_values"]) eigenen1 = [] - energy = [float(f) for f in eigenenergies[1:].replace("'","").replace(",","").replace("]","").replace("one","").replace(" ."," 0.").replace(" -."," -0.").replace("\\n","").replace("-"," -").split()] + if('*' in eigenenergies): + energy = [0.0] + else: + energy = [float(f) for f in eigenenergies[1:].replace("'","").replace(",","").replace("]","").replace("one","").replace(" ."," 0.").replace(" -."," -0.").replace("\\n","").replace("-"," -").split()] eigenen1 = np.append(eigenen1, energy) occoccupationsbet = np.ones(len(eigenen1), dtype=float) eigenenergies = str(section["x_gaussian_beta_vir_eigenvalues_values"]) eigenen2 = [] - energy = [float(f) for f in eigenenergies[1:].replace("'","").replace(",","").replace("]","").replace("one","").replace(" ."," 0.").replace(" -."," -0.").replace("\\n","").replace("-"," -").split()] + if('*' in eigenenergies): + energy = [0.0] + else: + energy = [float(f) for f in eigenenergies[1:].replace("'","").replace(",","").replace("]","").replace("one","").replace(" ."," 0.").replace(" -."," -0.").replace("\\n","").replace("-"," -").split()] eigenen2 = np.append(eigenen2, energy) viroccupationsbet = np.zeros(len(eigenen2), dtype=float) - eigenenconbet = np.zeros(len(eigenen1) + len(eigenen2)) + leneigenenconbet = len(eigenen1) + len(eigenen2) eigenenconbet = np.concatenate((eigenen1,eigenen2), axis=0) eigenenconbet = convert_unit(eigenenconbet, "hartree", "J") occupconbet = np.concatenate((occoccupationsbet, viroccupationsbet), axis=0) - eigenenall = np.concatenate((eigenenconalp,eigenenconbet), axis=0) - occupall = np.concatenate((occupconalp,occupconbet), axis=0) - eigenenall = np.reshape(eigenenall,(2, 1, len(eigenenconalp))) - occupall = np.reshape(occupall,(2, 1, len(occupconalp))) + if(leneigenenconalp >= leneigenenconbet): + eigenenall = np.zeros(2*leneigenenconalp) + occupall = np.zeros(2*leneigenenconalp) + else: + eigenenall = np.zeros(2*leneigenenconbet) + occupall = np.zeros(2*leneigenenconbet) + eigenenall[:len(eigenenconalp) + len(eigenenconbet)] = np.concatenate((eigenenconalp,eigenenconbet), axis=0) + occupall[:len(occupconalp) + len(occupconbet)] = np.concatenate((occupconalp,occupconbet), axis=0) + eigenenall = np.reshape(eigenenall,(2, 1, max(len(eigenenconalp),len(eigenenconbet)))) + occupall = np.reshape(occupall,(2, 1, max(len(occupconalp),len(occupconbet)))) backend.addArrayValues("eigenvalues_values", eigenenall) backend.addArrayValues("eigenvalues_occupation", occupall) @@ -1016,6 +1035,7 @@ class GaussianParserContext(object): 'OLDSDD': [{'name': 'OldSDD'}], 'SDDALL': [{'name': 'SDDAll'}], 'GEN': [{'name': 'General'}], + 'GENECP': [{'name': 'General ECP'}], 'CHKBAS': [{'name': 'CHKBAS'}], 'EXTRABASIS': [{'name': 'ExtraBasis'}], 'DGA1': [{'name': 'DGA1'}], @@ -1172,7 +1192,13 @@ class GaussianParserContext(object): if z in basissetDict.keys(): basisset = z basissetWrite = True - basissetreal = rest2.split('/')[1] + '/' + basisset + if (len(rest2.split('/')) == 2): + if(basisset is not None): + basissetreal = rest2.split('/')[1] + '/' + basisset + else: + basissetreal = rest2.split('/')[1] + else: + pass else: method1 = settings.split() for x in method1: @@ -1357,7 +1383,10 @@ class GaussianParserContext(object): hybrid_xc_coeffsa = () hybrid_xc_coeffsb = () - hybrid_xc_coeffsa = float(str(section['hybrid_xc_coeff1']).replace("[","").replace("]","")) + if(str(section['hybrid_xc_coeff1']) != 'None'): + hybrid_xc_coeffsa = float(str(section['hybrid_xc_coeff1']).replace("[","").replace("]","")) + else: + hybrid_xc_coeffsa = 0.0 backend.addValue('x_gaussian_hybrid_xc_hfx', hybrid_xc_coeffsa) hybrid_xc_coeffs = str(section['hybrid_xc_coeff2']) hybrid_xc_coeffsb = [float(f) for f in hybrid_xc_coeffs[1:].replace("'","").replace("]","").replace("]","").split()] @@ -1375,7 +1404,8 @@ class GaussianParserContext(object): uci = uci.split() for i in range(len(uci)): uci[i] = str(uci[i]).replace("[","").replace("'","").replace("]","").replace("\"","").replace(",","") - uci[i] = float(uci[i]) + if uci[i] is not None: + uci[i] = float(uci[i]) if uci is not None: uci = convert_unit(uci, "angstrom", "m") unit_cell.append(uci)