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 stereocenters declaration. 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 setup the AmberTools chain spends a bit more time on type-perception than for the all-carbocycle systems — watch for that in the profile.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.