@@ -785,6 +785,68 @@ def setup_class(self):
785
785
)
786
786
self .reaction4_pairs = [(PO3 , HOPO2 ), (H2 , H_atom )]
787
787
788
+ # Reaction definitions for testing flux pair generation
789
+ # Isomerization
790
+ PC4H9 = Species ().from_smiles ("[CH2]CCC" )
791
+ SC4H9 = Species ().from_smiles ("C[CH]CCC" )
792
+ self .isomerization_reaction = Reaction (
793
+ reactants = [PC4H9 ],
794
+ products = [SC4H9 ],
795
+ )
796
+ self .isomerization_reaction_pairs = [(PC4H9 , SC4H9 )]
797
+
798
+ # Association
799
+ propyl = Species ().from_smiles ("[CH2]CC" )
800
+ methylene = Species ().from_smiles ("[CH2]" )
801
+ self .association_reaction = Reaction (
802
+ reactants = [propyl , methylene ],
803
+ products = [PC4H9 ],
804
+ )
805
+ self .association_reaction_pairs = [(propyl , PC4H9 ), (methylene , PC4H9 )]
806
+
807
+ # Dissociation
808
+ self .dissociation_reaction = Reaction (
809
+ reactants = [PC4H9 ],
810
+ products = [propyl , methylene ],
811
+ )
812
+ self .dissociation_reaction_pairs = [(PC4H9 , propyl ), (PC4H9 , methylene )]
813
+
814
+ # Bimolecular
815
+ butane = Species ().from_smiles ("CCCC" )
816
+ oh = Species ().from_smiles ("[OH]" )
817
+ h2o = Species ().from_smiles ("O" )
818
+ self .bimolecular_reaction = Reaction (
819
+ reactants = [butane , oh ],
820
+ products = [SC4H9 , h2o ],
821
+ )
822
+ self .bimolecular_reaction_pairs = [(butane , SC4H9 ), (oh , h2o )]
823
+
824
+ # Surface dissociative adsorption
825
+ NH3 = Species ().from_smiles ("N" )
826
+ X = Species ().from_adjacency_list ("1 X u0 p0" )
827
+ HX = Species ().from_adjacency_list (
828
+ """
829
+ 1 H u0 p0 c0 {2,S}
830
+ 2 X u0 p0 c0 {1,S}
831
+ """ )
832
+ H2NX = Species ().from_adjacency_list (
833
+ """
834
+ 1 N u0 p1 c0 {2,S} {3,S} {4,S}
835
+ 2 H u0 p0 c0 {1,S}
836
+ 3 H u0 p0 c0 {1,S}
837
+ 4 X u0 p0 c0 {1,S}
838
+ """ )
839
+ self .surf_dissociation_reaction = Reaction (
840
+ reactants = [NH3 , X , X ],
841
+ products = [H2NX , HX ],
842
+ )
843
+ self .surf_dissociation_reaction_pairs = [
844
+ (NH3 , H2NX ),
845
+ (NH3 , HX ),
846
+ (X , H2NX ),
847
+ (X , HX ),
848
+ ]
849
+
788
850
def test_is_isomerization (self ):
789
851
"""
790
852
Test the Reaction.is_isomerization() method.
@@ -1824,6 +1886,57 @@ def test_phosphorus_reaction_pairs(self):
1824
1886
assert len (self .reaction4 .pairs [1 ]) == 2
1825
1887
assert self .reaction4 .pairs == self .reaction4_pairs
1826
1888
1889
+ def test_generate_pairs (self ):
1890
+ """
1891
+ This method tests that the correct reaction pairs are being generated for a reaction
1892
+ """
1893
+
1894
+ def pairs_equal (pair1 , pair2 ):
1895
+ if len (pair1 ) != len (pair2 ):
1896
+ return False
1897
+ if len (pair1 ) != 2 :
1898
+ return False
1899
+ return pair1 [0 ].is_isomorphic (pair2 [0 ]) and pair1 [1 ].is_isomorphic (pair2 [1 ]) or \
1900
+ pair1 [0 ].is_isomorphic (pair2 [1 ]) and pair1 [1 ].is_isomorphic (pair2 [0 ])
1901
+ def list_of_pairs_equal (list1 , list2 ):
1902
+ if len (list1 ) != len (list2 ):
1903
+ return False
1904
+ for pair1 in list1 :
1905
+ found = False
1906
+ for pair2 in list2 :
1907
+ if pairs_equal (pair1 , pair2 ):
1908
+ found = True
1909
+ list2 .remove (pair2 )
1910
+ break
1911
+ if not found :
1912
+ return False
1913
+ return True
1914
+
1915
+ # Test Isomerization: A -> C
1916
+ self .isomerization_reaction .generate_pairs ()
1917
+ assert len (self .isomerization_reaction .pairs ) == 1
1918
+ assert list_of_pairs_equal (self .isomerization_reaction .pairs , self .isomerization_reaction_pairs )
1919
+
1920
+ # Test Dissociation A -> C + D
1921
+ self .dissociation_reaction .generate_pairs ()
1922
+ assert len (self .dissociation_reaction .pairs ) == 2
1923
+ assert list_of_pairs_equal (self .dissociation_reaction .pairs , self .dissociation_reaction_pairs )
1924
+
1925
+ # Test Association A + B -> C
1926
+ self .association_reaction .generate_pairs ()
1927
+ assert len (self .association_reaction .pairs ) == 2
1928
+ assert list_of_pairs_equal (self .association_reaction .pairs , self .association_reaction_pairs )
1929
+
1930
+ # Test Bimolecular A + B -> C + D
1931
+ self .bimolecular_reaction .generate_pairs ()
1932
+ assert len (self .bimolecular_reaction .pairs ) == 2
1933
+ assert list_of_pairs_equal (self .bimolecular_reaction .pairs , self .bimolecular_reaction_pairs )
1934
+
1935
+ # Test Dissociative Adsorption A + 2X -> CX + DX
1936
+ self .surf_dissociation_reaction .generate_pairs ()
1937
+ assert len (self .surf_dissociation_reaction .pairs ) == 4
1938
+ assert list_of_pairs_equal (self .surf_dissociation_reaction .pairs , self .surf_dissociation_reaction_pairs )
1939
+
1827
1940
1828
1941
class TestReactionToCantera :
1829
1942
"""
0 commit comments