@@ -785,6 +785,68 @@ def setup_class(self):
785785 )
786786 self .reaction4_pairs = [(PO3 , HOPO2 ), (H2 , H_atom )]
787787
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+
788850 def test_is_isomerization (self ):
789851 """
790852 Test the Reaction.is_isomerization() method.
@@ -1824,6 +1886,57 @@ def test_phosphorus_reaction_pairs(self):
18241886 assert len (self .reaction4 .pairs [1 ]) == 2
18251887 assert self .reaction4 .pairs == self .reaction4_pairs
18261888
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+
18271940
18281941class TestReactionToCantera :
18291942 """
0 commit comments