def write_zmat(name, dertype, molecule): """Returns string with contents of Cfour ZMAT file as gathered from active molecule, current keyword settings, and cfour {...} block. """ # Handle memory mem = int(0.000001 * core.get_memory()) if mem == 524: memcmd, memkw = '', {} else: memcmd, memkw = qcdb.cfour.muster_memory(mem) # Handle molecule and basis set if molecule.name() == 'blank_molecule_psi4_yo': molcmd, molkw = '', {} bascmd, baskw = '', {} core.set_local_option('CFOUR', 'TRANSLATE_PSI4', False) else: molecule.update_geometry() #print(molecule.create_psi4_string_from_molecule()) qcdbmolecule = qcdb.Molecule( molecule.create_psi4_string_from_molecule()) qcdbmolecule.tagline = molecule.name() molcmd, molkw = qcdbmolecule.format_molecule_for_cfour() if core.get_global_option('BASIS') == '': bascmd, baskw = '', {} else: user_pg = molecule.schoenflies_symbol() molecule.reset_point_group( 'c1') # need basis printed for *every* atom qbs = core.BasisSet.build(molecule, "BASIS", core.get_global_option('BASIS')) if qbs.has_ECP(): raise ValidationError("""ECPs not hooked up for Cfour""") with open('GENBAS', 'w') as cfour_basfile: cfour_basfile.write(qbs.genbas()) core.print_out( ' GENBAS loaded from Psi4 LibMints for basis %s\n' % (core.get_global_option('BASIS'))) molecule.reset_point_group(user_pg) molecule.update_geometry() bascmd, baskw = qcdbmolecule.format_basis_for_cfour( qbs.has_puream()) # Handle psi4 keywords implying cfour keyword values if core.get_option('CFOUR', 'TRANSLATE_PSI4'): psicmd, psikw = qcdb.cfour.muster_psi4options( p4util.prepare_options_for_modules(changedOnly=True)) else: psicmd, psikw = '', {} # Handle calc type and quantum chemical method mdccmd, mdckw = qcdb.cfour.muster_modelchem(name, dertype) # Handle calc type and quantum chemical method mdccmd, mdckw = qcdb.cfour.muster_modelchem(name, dertype) # Handle driver vs input/default keyword reconciliation userkw = p4util.prepare_options_for_modules() userkw = qcdb.options.reconcile_options(userkw, memkw) userkw = qcdb.options.reconcile_options(userkw, molkw) userkw = qcdb.options.reconcile_options(userkw, baskw) userkw = qcdb.options.reconcile_options(userkw, psikw) userkw = qcdb.options.reconcile_options(userkw, mdckw) # Handle conversion of psi4 keyword structure into cfour format optcmd = qcdb.options.prepare_options_for_cfour(userkw) # Handle text to be passed untouched to cfour litcmd = core.get_global_option('LITERAL_CFOUR') # Assemble ZMAT pieces zmat = memcmd + molcmd + optcmd + mdccmd + psicmd + bascmd + litcmd if len(re.findall(r'^\*(ACES2|CFOUR|CRAPS)\(', zmat, re.MULTILINE)) != 1: core.print_out('\n Faulty ZMAT constructed:\n%s' % (zmat)) raise ValidationError(""" Multiple *CFOUR(...) blocks in input. This usually arises because molecule or options are specified both the psi4 way through molecule {...} and set ... and the cfour way through cfour {...}.""") return zmat
def write_zmat(name, dertype, molecule): """Returns string with contents of Cfour ZMAT file as gathered from active molecule, current keyword settings, and cfour {...} block. """ # Handle memory mem = int(0.000001 * core.get_memory()) if mem == 524: memcmd, memkw = '', {} else: memcmd, memkw = qcdb.cfour.muster_memory(mem) # Handle molecule and basis set if molecule.name() == 'blank_molecule_psi4_yo': molcmd, molkw = '', {} bascmd, baskw = '', {} core.set_local_option('CFOUR', 'TRANSLATE_PSI4', False) else: molecule.update_geometry() #print(molecule.create_psi4_string_from_molecule()) qcdbmolecule = qcdb.Molecule(molecule.create_psi4_string_from_molecule()) qcdbmolecule.tagline = molecule.name() molcmd, molkw = qcdbmolecule.format_molecule_for_cfour() if core.get_global_option('BASIS') == '': bascmd, baskw = '', {} else: user_pg = molecule.schoenflies_symbol() molecule.reset_point_group('c1') # need basis printed for *every* atom qbs = core.BasisSet.build(molecule, "BASIS", core.get_global_option('BASIS')) if qbs.has_ECP(): raise ValidationError("""ECPs not hooked up for Cfour""") with open('GENBAS', 'w') as cfour_basfile: cfour_basfile.write(qbs.genbas()) core.print_out(' GENBAS loaded from Psi4 LibMints for basis %s\n' % (core.get_global_option('BASIS'))) molecule.reset_point_group(user_pg) molecule.update_geometry() bascmd, baskw = qcdbmolecule.format_basis_for_cfour(qbs.has_puream()) # Handle psi4 keywords implying cfour keyword values if core.get_option('CFOUR', 'TRANSLATE_PSI4'): psicmd, psikw = qcdb.cfour.muster_psi4options(p4util.prepare_options_for_modules(changedOnly=True)) else: psicmd, psikw = '', {} # Handle calc type and quantum chemical method mdccmd, mdckw = qcdb.cfour.muster_modelchem(name, dertype) # Handle calc type and quantum chemical method mdccmd, mdckw = qcdb.cfour.muster_modelchem(name, dertype) # Handle driver vs input/default keyword reconciliation userkw = p4util.prepare_options_for_modules() userkw = qcdb.options.reconcile_options(userkw, memkw) userkw = qcdb.options.reconcile_options(userkw, molkw) userkw = qcdb.options.reconcile_options(userkw, baskw) userkw = qcdb.options.reconcile_options(userkw, psikw) userkw = qcdb.options.reconcile_options(userkw, mdckw) # Handle conversion of psi4 keyword structure into cfour format optcmd = qcdb.options.prepare_options_for_cfour(userkw) # Handle text to be passed untouched to cfour litcmd = core.get_global_option('LITERAL_CFOUR') # Assemble ZMAT pieces zmat = memcmd + molcmd + optcmd + mdccmd + psicmd + bascmd + litcmd if len(re.findall(r'^\*(ACES2|CFOUR|CRAPS)\(', zmat, re.MULTILINE)) != 1: core.print_out('\n Faulty ZMAT constructed:\n%s' % (zmat)) raise ValidationError(""" Multiple *CFOUR(...) blocks in input. This usually arises because molecule or options are specified both the psi4 way through molecule {...} and set ... and the cfour way through cfour {...}.""") return zmat