@@ -1490,14 +1490,15 @@ def generate_pairs(self):
1490
1490
performing flux analysis. The exact procedure for doing so depends on
1491
1491
the reaction type:
1492
1492
1493
- =================== =============== ========================================
1494
- Reaction type Template Resulting pairs
1495
- =================== =============== ========================================
1496
- Isomerization A -> C (A,C)
1497
- Dissociation A -> C + D (A,C), (A,D)
1498
- Association A + B -> C (A,C), (B,C)
1499
- Bimolecular A + B -> C + D (A,C), (B,D) *or* (A,D), (B,C)
1500
- =================== =============== ========================================
1493
+ ======================= ==================== ========================================
1494
+ Reaction type Template Resulting pairs
1495
+ ======================= ==================== ========================================
1496
+ Isomerization A -> C (A,C)
1497
+ Dissociation A -> C + D (A,C), (A,D)
1498
+ Association A + B -> C (A,C), (B,C)
1499
+ Bimolecular A + B -> C + D (A,C), (B,D) *or* (A,D), (B,C)
1500
+ Dissociative Adsorption A + 2X -> CX + DX (A,CX), (A,DX), (X,CX), (X,DX)
1501
+ ======================= ==================== ========================================
1501
1502
1502
1503
There are a number of ways of determining the correct pairing for
1503
1504
bimolecular reactions. Here we try a simple similarity analysis by comparing
@@ -1511,6 +1512,29 @@ def generate_pairs(self):
1511
1512
for reactant in self .reactants :
1512
1513
for product in self .products :
1513
1514
self .pairs .append ((reactant , product ))
1515
+ elif (len (self .reactants ) == 3 and len (self .products ) == 2 and \
1516
+ len ([r for r in self .reactants if r .is_surface_site ()]) == 2 and \
1517
+ len ([r for r in self .reactants if not r .contains_surface_site ()]) == 1 ) or \
1518
+ (len (self .products ) == 3 and len (self .reactants ) == 2 and \
1519
+ len ([p for p in self .products if p .is_surface_site ()]) == 2 and \
1520
+ len ([p for p in self .products if not p .contains_surface_site ()]) == 1 ):
1521
+ # Dissociative adsorption case
1522
+ if len (self .reactants ) == 3 :
1523
+ gas_reactant = [r for r in self .reactants if not r .is_surface_site ()][0 ]
1524
+ for product in self .products :
1525
+ self .pairs .append ((gas_reactant , product ))
1526
+ site1 = [r for r in self .reactants if r .is_surface_site ()][0 ]
1527
+ site2 = [r for r in self .reactants if r .is_surface_site ()][1 ]
1528
+ self .pairs .append ((site1 , self .products [0 ]))
1529
+ self .pairs .append ((site2 , self .products [0 ]))
1530
+ else :
1531
+ gas_product = [p for p in self .products if not p .is_surface_site ()][0 ]
1532
+ for reactant in self .reactants :
1533
+ self .pairs .append ((reactant , gas_product ))
1534
+ site1 = [p for p in self .products if p .is_surface_site ()][0 ]
1535
+ site2 = [p for p in self .products if p .is_surface_site ()][1 ]
1536
+ self .pairs .append ((self .reactants [0 ], site1 ))
1537
+ self .pairs .append ((self .reactants [1 ], site2 ))
1514
1538
1515
1539
else : # this is the bimolecular case
1516
1540
reactants = self .reactants [:]
0 commit comments