Output Formats Guide
This guide covers all supported output formats for exporting fragments to quantum chemistry programs.
Supported Programs
Program |
Format |
Features |
|---|---|---|
GAMESS |
FMO/EFMO/EFP |
Full fragment support |
Psi4 |
SAPT/MBE |
Interaction energies |
Q-Chem |
EFP/XSAPT |
Embedding |
ORCA |
Multi-job |
Fragment calculations |
NWChem |
BSSE |
Counterpoise |
Molpro |
SAPT/LMP2 |
Fragment calculations |
Turbomole |
Fragment |
Coordinate export |
CFOUR |
Fragment |
ZMAT export |
Generic |
XYZ/PDB |
Structure only |
GAMESS
Standard FMO
from autofragment.io import write_gamess_fmo
write_gamess_fmo(
fragments,
"output.inp",
method="MP2",
basis="6-31G*",
runtyp="ENERGY",
memory=800
)
EFMO (Effective Fragment Molecular Orbital)
from autofragment.io import write_gamess_efmo
write_gamess_efmo(
fragments,
"efmo.inp",
method="MP2",
basis="6-31G*"
)
FMO Options
Option |
Description |
|---|---|
|
MBE order (2 or 3) |
|
ESP pair approximation |
|
Distance threshold for ESP |
|
ENERGY, GRADIENT, HESSIAN |
Psi4
Basic Output
from autofragment.io import write_psi4_fragment
write_psi4_fragment(
fragments,
"psi4_input.dat",
method="B3LYP",
basis="cc-pVDZ",
extra_options={"reference": "rhf"}
)
SAPT Calculations
from autofragment.io import write_psi4_sapt
write_psi4_sapt(
[frag_a, frag_b],
"sapt.dat",
method="sapt2+",
basis="aug-cc-pVDZ"
)
# Requires exactly 2 fragments (dimer)
MBE in Psi4
write_psi4_fragment(
fragments,
"mbe.dat",
method="MP2",
basis="cc-pVDZ",
runtype="energy"
)
Q-Chem
from autofragment.io import write_qchem_efp
write_qchem_efp(
fragments,
"qchem.in",
method="B3LYP",
basis="6-31G*",
qm_fragment_indices=[0],
)
EFP in Q-Chem
from autofragment.io import write_qchem_xsapt
write_qchem_xsapt(
[frag_a, frag_b],
"xsapt.in",
basis="6-31G*",
xsapt_level="xsapt(ksdft)"
)
ORCA
from autofragment.io import write_orca_multijob
write_orca_multijob(
fragments,
"orca_fragments.inp",
method="B3LYP",
basis="def2-SVP",
memory=4000
)
ORCA Options
from autofragment.io import write_orca_fragment
write_orca_fragment(
fragments,
"orca_single.inp",
method="DLPNO-CCSD(T)",
basis="cc-pVTZ"
)
NWChem
from autofragment.io import write_nwchem_fragment
write_nwchem_fragment(
fragments,
"nwchem.nw",
method="DFT",
basis="6-31G*",
extra_options={"xc": "b3lyp"}
)
BSSE Counterpoise
from autofragment.io import write_nwchem_bsse
write_nwchem_bsse(
[frag_a, frag_b],
"bsse.nw",
basis="aug-cc-pVDZ",
method="mp2"
)
Molpro
from autofragment.io import write_molpro_sapt
write_molpro_sapt([frag_a, frag_b], "molpro.com", basis="aug-cc-pVDZ")
Turbomole
from autofragment.io import write_turbomole_fragment
write_turbomole_fragment(fragments, "coord")
CFOUR
from autofragment.io import write_cfour_fragment
write_cfour_fragment(fragments, "ZMAT")
Generic Formats
XYZ
from autofragment.io import write_xyz_fragments
write_xyz_fragments(fragments, "fragments.xyz")
PDB
from autofragment.io import write_pdb_fragments
write_pdb_fragments(fragments, "fragments.pdb", mode="chains")
JSON (For serialization)
from autofragment.io import write_qcschema, read_qcschema
write_qcschema(system, "fragments.json")
# Load back
system = read_qcschema("fragments.json")
Format Registry
Discover available formats:
from autofragment.io import FormatRegistry
formats = FormatRegistry.supported_formats()
print(formats["write"])
# Get writer function by name
FormatRegistry.write("output.inp", fragments, format="gamess_fmo", method="MP2", basis="6-31G*")
Writer Options
Available options are writer-specific. For example:
from autofragment.io import write_gamess_fmo
write_gamess_fmo(
fragments,
"fmo.inp",
method="MP2",
basis="6-31G*",
title="My calc", # Title/comment
memory=800, # Memory request (MW)
)
Batch Writing
Write multiple fragments at once:
from autofragment.io import write_orca_fragment
for i, fragment in enumerate(fragments):
write_orca_fragment([fragment], f"outputs/frag_{i}.inp")
Custom Writers
Create custom output format:
from pathlib import Path
from autofragment.io import FormatRegistry
def write_plain_xyz_fragments(fragments, filepath):
out = Path(filepath)
out.parent.mkdir(parents=True, exist_ok=True)
with out.open("w") as handle:
for fragment in fragments:
handle.write(f"# {fragment.id}\n")
coords = fragment.get_coords()
for i, symbol in enumerate(fragment.symbols):
x, y, z = coords[i]
handle.write(f"{symbol} {x:.6f} {y:.6f} {z:.6f}\n")
FormatRegistry.register_writer("plain_xyz_fragments", write_plain_xyz_fragments, extensions=[".pxyz"])