RECIO-ZeoGen v7.1 is an advanced computational tool for generating zeolite structures using dual repulsion force fields and Fourier surface generation techniques. This version implements species-specific repulsion potentials and maintains stoichiometric balance for SiO₂ structures.
- Dual Repulsion Force Field: Differentiates repulsion radii for Si-Si, O-O, and Si-O atom pairs
- Species-Specific Cutoffs:
- Si-Si: Strong repulsion when distance < 2.8 Å (normal ~3.1 Å)
- O-O: Strong repulsion when distance < 2.2 Å (normal ~2.6 Å)
- Non-bonded Si-O: Repulsion when distance < 1.5 Å
- Stoichiometric Balance: Enforces edge balance to ensure proper SiO₂ ratio
The software consists of three main components:
A custom ASE calculator implementing species-specific force fields for zeolite optimization.
The main generator class implementing Fourier surface generation and graph-based structure assembly.
Handles batch generation and output of zeolite structures.
import numpy as np
import random
from scipy.spatial import cKDTree
from collections import defaultdict
from ase import Atoms
from ase.calculators.calculator import Calculator, all_changes
from ase.optimize import FIRE
from ase.io import writeZeoliteDualRepulsionCalculator(bonds_list, r0=1.61, k_bond=15.0, k_rep=15.0)Parameters:
bonds_list: List of bonded atom pairsr0: Target Si-O bond length (default: 1.61 Å)k_bond: Bond force constant (default: 15.0)k_rep: Repulsion force constant (default: 15.0)
Methods:
calculate(atoms, properties, system_changes): Calculates energy and forces
ZeolitePragmatistV7()Key Methods:
Main method for generating zeolite structures.
Parameters:
run_id: Identifier for the generation run
Returns:
atoms: ASE Atoms object of the generated structuremsg: Status message with chemical formula and coordination information
Universal Fourier surface generator.
Parameters:
r: Position arraycell_dims: Cell dimensions [a, b, c]coeffs: Weight coefficients for 6 basis functions [w_P, w_D, w_G, w_IWP, w_Neo, w_2X]t: Threshold parameterani: Anisotropy parameters [sx, sy, sz]
Returns:
- Surface value at given position
Intelligent weight sampler for basis function combinations.
Parameters:
rng: Random number generatormode: Sampling mode ('pure', 'mixed', 'hybrid')
Returns:
- Weight array for basis functions
The generator supports 6 mathematical basis functions:
- Primitive (P):
cos(X) + cos(Y) + cos(Z) - Diamond (D):
cos(X)cos(Y)cos(Z) - sin(X)sin(Y)sin(Z) - Gyroid (G):
sin(X)cos(Y) + sin(Y)cos(Z) + sin(Z)cos(X) - I-WP:
2(cos(X)cos(Y) + cos(Y)cos(Z) + cos(Z)cos(X)) - (cos(2X) + cos(2Y) + cos(2Z)) - Neovius (C(P)):
3(cos(X) + cos(Y) + cos(Z)) + 4(cos(X)cos(Y)cos(Z)) - Pure 2X (P2):
cos(2X) + cos(2Y) + cos(2Z)
- Harmonic Potential:
E = 0.5 * k_bond * (r - r0)² - Applied to Si-O bonded pairs only
- Soft Sphere Potential:
E = k_rep * (rc/r)⁴ - Species-specific cutoff distances:
- Si-Si: 2.8 Å
- O-O: 2.2 Å
- Non-bonded Si-O: 1.5 Å
- Maximum force magnitude: 20.0 eV/Å
- Prevents numerical instabilities during optimization
- Cell dimensions: 10-16 Å (10% chance of 20-35 Å)
- Fourier weights: Hybrid sampling (30% pure, 70% mixed)
- Density: 15-100 atoms/ų
- Threshold and anisotropy parameters
- Monte Carlo sampling on Fourier surface
- Minimum Si-Si distance constraint: 2.2 Å
- Acceptance probability:
exp(-(val-t)²/0.5)
- Initial connectivity: 3 edges per Si atom
- Dynamic edge balancing to achieve E = 2N
- Target average coordination: 4
- O atoms placed at edge midpoints
- Stoichiometric SiO₂ ratio maintained
- Periodic boundary conditions applied
- FIRE optimizer with dual repulsion calculator
- Maximum force convergence: 0.5 eV/Å
- Maximum steps: 120
- Average Si coordination number calculation
- Structure status: "OK" or "DISTORTED"
- Chemical formula reporting
from zeogen_new2 import ZeolitePragmatistV7
generator = ZeolitePragmatistV7()
atoms, message = generator.generate(0)
if atoms:
print(f"Generated: {message}")
atoms.write("zeolite.cif")generator = ZeolitePragmatistV7()
success_count = 0
for i in range(20):
atoms, msg = generator.generate(i)
if atoms:
success_count += 1
atoms.write(f"zeo_{success_count}.cif")
print(f"[{i+1}] Generated structure {success_count}")Generated structures are saved in CIF format with the naming convention:
zeo_v7_1_{N}.cif
Where N is the sequential success count.
- Memory: Uses cKDTree for efficient neighbor searching
- Computation: Optimized trigonometric calculations with pre-computation
- Scalability: Suitable for systems up to ~1000 atoms
-
"Sampling sparse" Error
- Increase density parameter range
- Adjust threshold parameter
-
"DISTORTED" Status
- Low average coordination indicates optimization failure
- May need to adjust force field parameters
-
Optimization Convergence Issues
- Reduce force constants
- Increase optimization steps
- Check initial geometry quality
zeogen_new2.py
├── ZeoliteDualRepulsionCalculator (lines 24-129)
├── ZeolitePragmatistV7 (lines 134-410)
└── Main execution (lines 415-429)
- v7.1: Dual repulsion force field implementation
- v7.0: Pragmatic edge balancing strategy
- Earlier versions: Basic Fourier surface generation
This implementation builds upon established methods in:
- Triply periodic minimal surfaces (TPMS)
- Zeolite structure generation
- Force field development for silicate materials
Please refer to the project's license file for usage terms and conditions.