Skip to content

Case 5: Tacticity Control (Atactic Polystyrene)

Case 5: Tacticity Control (Atactic Polystyrene)

Section titled “Case 5: Tacticity Control (Atactic Polystyrene)”

In polymers with bulky side chains like polystyrene (PS), stereoregularity (tacticity) significantly affects packing and physical properties. In fbtk, you can generate an atactic (random stereoregularity) polymer chain as an independent Molecule object using the Molecule.from_polymer method.

  • Polymer: Polystyrene (PS)
  • Composition:
    • Degree of Polymerization (DP): 20
    • Count: 10 chains
    • Tacticity: Atactic
  • Total Atoms: 3,220
  • Initial Target Density: 0.10 g/cm³ (Low-density start)
Atactic PS Chain

This is the recommended configuration for creating an atactic chain with Molecule.from_polymer and starting relaxation from low density.

import fbtk
# 1. Create monomer from SMILES
monomer = fbtk.Molecule.from_smiles("*C(C*)c1ccccc1", name="PS")
# 2. Generate an Atactic polymer chain
# Use from_polymer to create a single Molecule object with specified tacticity
chain = fbtk.Molecule.from_polymer(monomer, degree=20, tacticity="atactic")
# 3. Initialize the Builder (Specify low density of 0.10)
builder = fbtk.Builder(density=0.10)
# 4. Add the generated polymer chains to the system
builder.add_molecule(chain, count=10)
# 5. Build the system and perform relaxation
system = builder.build()
print("Starting relaxation for Atactic Polystyrene...")
system.relax()
# 6. Output results
chain.to_file("ps_atactic_chain.mol") # Individual atactic chain generated
system.to_file("ps_atactic_cell.mol2") # Relaxed unit cell
print("Done.")
Atactic PS Unit Cell

The combination of a low-density start and atactic configuration allows even large-scale polystyrene systems to converge smoothly.

Atoms: 3220 | Bonds: 3410
--------------------------------------------------------------------------------
| Fmax | FRMS | Total E |
Iter | (kcal/mol/Å) | (kcal/mol/Å) | (kcal/mol) | Status
--------------------------------------------------------------------------------
0 | 42578.2095 | 6442.3968 | 1422137162651.3857 |
10 | 10670.1938 | 495.5003 | 570159.9917 |
20 | 5032.0412 | 224.4168 | 340325.8947 |
...
980 | 39.2758 | 0.9008 | 38346.5101 |
990 | 775.1007 | 16.9985 | 38246.3019 |
--------------------------------------------------------------------------------
=== Optimization Finished ===
Reason: Max-Iter
Total Time: 37.916s (Avg: 37.916ms / step)
Final Energy: 38217.2511 kcal/mol
Final FRMS: 1.5753 kcal/mol/Å
Min Distance: 1.0775 Å (Atoms 1473 and 1481)
--------------------------------------------------------------------------------

Using Molecule.from_polymer constructs a concrete Molecule object in memory where side-chain orientations are randomly assigned to each asymmetric carbon in the backbone. By outputting this with to_file, you can also verify the 3D structure of a single chain before packing.

Compared to structures where side chains are all aligned in the same direction (isotactic-like), atactic structures disperse steric hindrance more easily, allowing for smoother relaxation after packing. In this result, the Min Distance is 1.0775 Å, which is a good initial structure for a large-scale system.