Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion rmgpy/kinetics/diffusionLimited.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,12 @@
import numpy as np

import rmgpy.constants as constants
from rmgpy.molecule.fragment import Fragment
from rmgpy.species import Species

def _to_molecule(obj):
"""Return plain Molecule; accept Molecule or (Molecule, mapping) tuple."""
return obj[0] if isinstance(obj, tuple) else obj

class DiffusionLimited(object):

Expand Down Expand Up @@ -119,7 +124,19 @@ def get_diffusion_limit(self, T, reaction, forward=True):
radii = 0.0
diffusivities = []
for spec in reacting:
solute_data = self.database.get_solute_data(spec)
# --- ① Fragment (AFM) → representative Molecule ---------------
if isinstance(spec, Fragment):
# Replace R/L dummy atoms with hydrogen
rep_mol = _to_molecule(spec.get_representative_molecule())
spec_for_solv = Species(molecule=[rep_mol])
elif isinstance(spec, Species) and isinstance(spec.molecule[0], Fragment):
rep_mol = _to_molecule(spec.molecule[0].get_representative_molecule())
spec_for_solv = Species(molecule=[rep_mol])
else:
spec_for_solv = spec

# --- ② look-up solvation / diffusivity -------------------------
solute_data = self.database.get_solute_data(spec_for_solv)
# calculate radius with the McGowan volume and assuming sphere
radius = ((75 * solute_data.V / constants.pi / constants.Na) ** (1. / 3)) / 100 # m
diff = solute_data.get_stokes_diffusivity(T, self.get_solvent_viscosity(T))
Expand Down
Loading