The Configuration File¶
The complete 4-dfda-fde-epoxy-thermoset.yaml from the depot:
# htpolynet -- Example 4 -- DFDA/FDE Furan-based Epoxy Thermoset
#
# Self-contained config: DFA (difurfuryl diamine) and FDE (furfuryl diepoxide)
# are generated from SMILES via the RDKit atom-mapping path. The original
# shell script for this example wrote PDB rather than mol2 inputs because mol2
# atom-numbering was unpredictable for the fused heterocycles; switching to
# atom-mapped SMILES eliminates that concern, so we generate mol2 like the
# other examples. Run with:
#
# htpolynet run -diag diagnostics.log 4-dfda-fde-epoxy-thermoset.yaml
#
# Cameron F. Abrams -- cfa22@drexel.edu
Title: DFA-FDE thermoset
gromacs:
gmx: gmx
gmx_options: -quiet -nobackup
mdrun: gmx mdrun
mdrun_options:
gpu_id: 0 # auto-stripped at runtime if gmx is not GPU-capable or no GPU is visible
ambertools:
charge_method: gas
constituents:
FDE:
smiles: "N(Cc1occc1)(C[CH:3]([OH:5])[CH3:1])C[CH:4]([OH:6])[CH3:2]"
reactive_atoms: {1: C1, 2: C2, 3: C3, 4: C4, 5: O1, 6: O2}
count: 200
symmetry_equivalent_atoms: [[C1, C2], [C3, C4], [O1, O2]]
stereocenters: [C3]
DFA:
smiles: "C(c1oc([CH2][NH2:1])cc1)c1oc([CH2][NH2:2])cc1"
reactive_atoms: {1: N1, 2: N2}
count: 100
symmetry_equivalent_atoms: [[N1, N2]]
densification:
initial_density: 300.0 # kg/m3
equilibration:
- ensemble: min
- ensemble: nvt
temperature: 300
ps: 10
- ensemble: npt
temperature: 300
pressure: 10
ps: 300
precure:
preequilibration:
ensemble: npt
temperature: 300 # K
pressure: 1 # bar
ps: 200
anneal:
ncycles: 2
initial_temperature: 300
cycle_segments:
- T: 300
ps: 0
- T: 600
ps: 20
- T: 600
ps: 20
- T: 300
ps: 20
- T: 300
ps: 20
postequilibration:
ensemble: npt
temperature: 300 # K
pressure: 1 # bar
ps: 100
CURE:
controls:
search_radius: 0.5 # nm
radial_increment: 0.25 # nm
max_iterations: 150
desired_conversion: 0.95
late_threshold: 0.85
drag:
trigger_distance: 0.6 # nm
increment: 0.08 # nm
limit: 0.3 # nm
equilibration:
- ensemble: min
- ensemble: nvt
temperature: 600
nsteps: 1000
- ensemble: npt
temperature: 600
pressure: 1
nsteps: 2000
relax:
increment: 0.08 # nm
equilibration:
- ensemble: min
- ensemble: nvt
temperature: 600
nsteps: 1000
- ensemble: npt
temperature: 600
pressure: 1
nsteps: 2000
equilibrate:
ensemble: npt
temperature: 300 # K
pressure: 1 # bar
ps: 100
gromacs:
rdefault: 0.9 # nm
postcure:
anneal:
ncycles: 2
initial_temperature: 300
cycle_segments:
- T: 300
ps: 0
- T: 600
ps: 20
- T: 600
ps: 20
- T: 300
ps: 20
- T: 300
ps: 20
postequilibration:
ensemble: npt
temperature: 300 # K
pressure: 1 # bar
ps: 100
reactions:
- name: 'Primary-to-secondary-amine'
stage: cure
reactants:
1: DFA
2: FDE
product: DFA~N1-C1~FDE
probability: 1.0
atoms:
A:
reactant: 1
resid: 1
atom: N1
z: 2
B:
reactant: 2
resid: 1
atom: C1
z: 1
bonds:
- atoms: [A, B]
order: 1
- name: 'Secondary-to-tertiary-amine'
reactants:
1: DFA~N1-C1~FDE
2: FDE
product: DFA~N1-C1~FDE-C1~FDE
stage: cure
probability: 0.5
atoms:
A:
reactant: 1
resid: 1
atom: N1
z: 1
B:
reactant: 2
resid: 1
atom: C1
z: 1
bonds:
- atoms: [A, B]
order: 1
- name: 'Oxirane-formation'
reactants:
1: FDE
product: FDEC
stage: cap
probability: 1.0
atoms:
A:
reactant: 1
resid: 1
atom: O1
z: 1
B:
reactant: 1
resid: 1
atom: C1
z: 1
bonds:
- atoms: [A, B]
order: 1
Most blocks follow the same pattern as
example 3 — same densification,
precure, CURE, and postcure cascades — so the discussion
here focuses on what is specific to this build.
constituents¶
A 2:1 stoichiometric ratio (200 FDE : 100 DFA) gives at most 400 C–N bonds at full conversion — the same maximum-bond count as example 3.
constituents:
FDE:
smiles: "N(Cc1occc1)(C[CH:3]([OH:5])[CH3:1])C[CH:4]([OH:6])[CH3:2]"
reactive_atoms: {1: C1, 2: C2, 3: C3, 4: C4, 5: O1, 6: O2}
count: 200
symmetry_equivalent_atoms: [[C1, C2], [C3, C4], [O1, O2]]
stereocenters: [C3]
DFA:
smiles: "C(c1oc([CH2][NH2:1])cc1)c1oc([CH2][NH2:2])cc1"
reactive_atoms: {1: N1, 2: N2}
count: 100
symmetry_equivalent_atoms: [[N1, N2]]
The mapping onto example 3 is direct: FDE.{C1,C2,C3,C4,O1,O2} corresponds to DGE.{C1,C2,C3,C4,O1,O2}; DFA.{N1,N2} corresponds to PAC.{N1,N2}. The downstream behaviour — reaction expansion, the 16-diastereomer pool for FDE, the cap reaction set — also carries over.
Two small differences from example 3 worth noting:
DFA carries no
stereocentersdeclaration. The aromatic furan rings are planar; the central methylene is not chiral. So unlike PACM (which contributes 4 diastereomers via its two cyclohexyl stereocenters), DFA contributes only a single canonical form.The furan rings are aromatic five-membered heterocycles. GAFF/AMBER handle them, but during
setupthe AmberTools chain spends a bit more time on type-perception than for the all-carbocycle systems — watch for that in theprofile.json.
What the expansion produces¶
For the same reasons spelled out in example 3, the 2 cure + 1 cap reactions in the YAML expand into 4 + 8 = 12 cure templates plus 2 cap templates. Together with the 16 FDE diastereomers and the canonical DFA, the diagnostic log at the start of a run will report something close to:
INFO> Templates in proj-0/molecules/parameterized
INFO> N molecules detected in 4-dfda-fde-epoxy-thermoset.yaml
INFO> explicit: ...
INFO> implied by stereochemistry: ...
INFO> implied by symmetry: ...
(Exact counts will appear when you run the build.)
Now we can turn to actually running the build.