Reactions

ReactionsReactions – это небольшая удобная программа, позволяющая быстро вычислять все возможные реакции между заданными веществами (чистыми минералами и компонентами твёрдых растворов, отдельными оксидами и химическими элементами), а также выделять в них произвольные наборы линейно независимых реакций. Программа может пригодиться при исследовании мультисистем и построении петрогенетических сеток, при анализе диаграмм мультиравновесной термобарометрии, для уравнивания предполагаемых реакций с участием минералов реальных составов, для вывода конечных членов твёрдых растворов, а также для образовательных целей.

 Несмотря на то, что общий подход к вычислению всех реакций, возможных для заданного набора химических веществ, является довольно простой процедурой и был описан во многих публикациях – например, в монографии Фрэнка Спира (F. Spear, Metamorphic Phase Equilibria and Pressure-Temperature-Time Paths, 1993, глава 5) или в материалах Декстера Перкинса (D. Perkins) на веб-ресурсе Teaching Phase Equilibria, а также используется в таких известных программах, как TWQ (Berman, 1991) и THERMOCALC (Powell & Holland, 1988), – было решено привести достаточно детальное описание алгоритма, используемого в программе Reactions, т.к. он имеет небольшие отличия от общепринятых схем (часть его реализации на Паскале Вы можете найти в документации к программе). Кроме того, большее внимание уделено процедуре генерации линейно зависимых реакций, описываемой обычно весьма скупо. Для наглядности будем сопровождать описание достаточно сложным примером – системой, состоящей из альмандина (Alm), силлиманита (Sill), аннита (Ann), ферросилита (Fs), мусковита (Mu), флогопита (Phl), пиропа (Prp) и кварца (Qtz).

Скриншот

 Вычисление реакций осуществляется в несколько этапов.

 В первую очередь, составим матрицу составов всех веществ, которые могут участвовать в реакциях:


AlmSillAnnFsMuPhlPrpQtz
K00101100
Fe30320000
Mg00000330
Al22103120
Si31323331
H00202200
O1251261212122

 Затем с помощью метода исключения переменных Гаусса-Жордана преобразуем её в матрицу приведённого (канонического) ступенчатого вида (RREF – Reduced Row-Echelon Form). Небольшим, но важным отличием от стандартного варианта метода, облегчающим дальнейшую работу, является превращение левой части матрицы в единичную (за счёт перестановки как строк, так и столбцов матрицы). Все операции с матрицами (как в методе Гаусса-Жордана, так и при вычислении коэффициентов линейно зависимых реакций) основаны на простейших эквивалентных преобразованиях:
  1. Перестановка строк и столбцов
  2. Умножение строки на константу
  3. Сложение строк

AlmSillAnnFsMuPhlPrpQtz
Fe1010.6670000Fe/3, строка перемещена вверх
K00101100
Mg00000330
Al02‑1‑1.3333120Al-Fe*2
Si01003331Si-Fe*3
H00202200
O050-21212122O-Fe*12

AlmSillAnnFsMuPhlPrpQtz
Fe1010.6670000
Al01‑0.5‑0.6671.50.510Al/2, строка перемещена вверх
K00101100
Mg00000330
Si000.50.6671.52.521Si-Al
H00202200
O002.51.3334.59.572O-Al*5

AlmSillAnnFsMuPhlPrpQtz
Fe1000.667‑1‑100Fe-K
Al010‑0.6672110Al+K/2
K00101100
Mg00000330
Si0000.6671221Si-K/2
H00000000H-K*2, удалить
O0001.3332772O-K*2.5

AlmSillAnnFsMuPhlPrpQtz
Fe1000‑2‑3‑2‑1Fe-Si/3*2
Al01003331Al+Si/3*2
K00101100
Si00011.5331.5Si*3/2, строка перемещена вверх
Mg00000330
O00000330O-Si/3*4

AlmSillAnnFsPhlMuPrpQtzPhl перемещён влево
Fe1000‑3‑2‑2‑1
Al01003331
K00101100
Si000131.531.5
Mg00003030
O00003030

AlmSillAnnFsPhlMuPrpQtz
Fe10000‑21‑1Fe+Mg*3
Al01000301Al-Mg*3
K001001‑10K-Mg
Si000101.501.5Si-Mg*3
Mg00001010Mg/3
O00000000O-Mg*3, удалить

 В результате получается трапециевидная матрица, содержащая только линейно независимые строки (отвечающие элементам) с квадратной единичной левой частью и прямоугольной правой частью, уже отвечающей коэффициентам уравнений некоторого набора линейно независимых реакций (для данной системы – трёх):

AlmSillAnnFsPhlMuPrpQtz
Fe10000‑21‑1
Al01000301
K001001‑10
Si000101.501.5
Mg00001010

 Таким образом, для получения матрицы коэффициентов этого набора линейно независимых реакций достаточно просто транспонировать правую прямоугольную часть полученной матрицы, дополнив её справа отрицательной единичной матрицей:

AlmSillAnnFsPhlMuPrpQtz
‑2311.50‑100
10‑1010‑10
‑1101.5000‑1

 Или с целочисленными коэффициентами (умножив строки на соответствующие константы):

AlmSillAnnFsPhlMuPrpQtzРеакцияОтсутствующие вещества
‑46230‑2001 4Alm+2Mu=6Sill+2Ann+3Fs(Phl,Prp,Qtz)
10‑1010‑102 Ann+Prp=Alm+Phl(Sill,Fs,Mu,Qtz)
‑2203000‑23 2Alm+2Qtz=2Sill+3Fs(Ann,Phl,Mu,Prp)

 Все последующие вычисления производятся только с этой небольшой матрицей коэффициентов линейно независимых реакций.

 В последнем столбце таблицы с коэффициентами реакций приведены те вещества системы, которые в данной реакции не участвуют: так принято обозначать реакции в мультисистемах. Следует отметить, что эта система обозначений играет ключевую роль при вычислении всех остальных возможных реакций в системе, являющихся комбинациями полученного небольшого набора линейно независимых реакций, т.к. при комбинировании реакций требуется приводить к нулю коэффициенты именно этих, отсутствующих в реакциях веществ.

 Судя по преобразованной матрице составов можно утверждать, что максимальное число веществ M, участвующих в реакции, должно быть на 1 больше числа независимых элементов (строк) E, т.е. M=E+1. Для данной системы M=5+1=6. Из этого следует, что число отсутствующих в реакциях веществ системы N не может быть меньше общего числа веществ Q за вычетом этого максимального числа веществ M, т.е. N=Q-E-1. Для данной системы N=8-5-1=2.

 Процедура вычисления линейно зависимых реакций основана на переборе всех возможных сочетаний по N веществ из их общего количества Q. Общее число таких комбинаций C определяется по формуле:
$$C = \frac{Q!}{M! \times N!}$$
Для данной системы необходимо перебрать и проверить 28 комбинаций: по 2 вещества при их общем количестве 8. Однако, во всех линейно независимых реакциях полученного набора количества отсутствующих веществ (N) больше двух (3 и 4) за счёт так называемого "вырождения": исключения веществ вследствие подходящих стехиометрических соотношений. Вырождение приводит к тому, что одной реакции отвечают сразу несколько комбинаций, т.е. количество реакций оказывается существенно меньше общего числа комбинаций. Вместе с тем, нет необходимости вычислять коэффициенты для каждой потенциальной реакции: достаточно лишь проверить, не является ли список отсутствующих веществ очередной комбинации подмножеством аналогичного списка одной из уже вычисленных ранее реакций. Если он оказывается таковым, то данная реакция уже существует и комбинация пропускается. Поэтому желательно, чтобы запись каждой реакции содержала, кроме номеров веществ и их коэффициентов в реакциях, также структуру данных и функции для эффективной работы с множествами (например, основанные на массивах битовых масок).

 Вычисление коэффициентов линейно зависимых реакций производится преобразованием полученной матрицы коэффициентов набора линейно независимых реакций: сначала перестановкой в начало матрицы тех столбцов, которые отвечают веществам, отсутствующим в реакции, а затем приведением матрицы к трапециевидной форме методом Гаусса. Последний отличается от метода Гаусса-Жордана лишь тем, что левая треугольная часть матрицы не приводится к единичной матрице, т.е. значения выше её главной диагонали могут быть ненулевыми, а на самой главной диагонали – не равными 1. В результате в первых столбцах последней строки (под главной диагональю треугольной части матрицы) окажутся только нулевые значения, т.е. последняя строка будет содержать коэффициенты искомой реакции (которые останется лишь привести к целым числам). Первый шаг стоит оптимизировать, оперируя не самими столбцами, а только лишь их порядковыми номерами.

 Итак, вычислим с помощью этого алгоритма все оставшиеся линейно зависимые реакции нашей системы:


КомбинацияОтсутствующие веществаAlmSillAnnFsPhlMuPrpQtzРеакцияОтсутствующие вещества
1(Alm,Sill)‑46230‑200
10‑1010‑10
-2203000‑2
 
‑46230‑200
01.5‑0.50.751‑0.5‑10
0‑1‑11.5010‑2
 
‑46230‑200
01.5‑0.50.751‑0.5‑10
00‑1.33320.6670.667‑0.667‑2
 
00‑2311‑1‑342Ann+Prp+3Qtz=3Fs+Phl+Mu(Alm,Sill)

КомбинацияОтсутствующие веществаAlmSillAnnFsPhlMuPrpQtzРеакцияОтсутствующие вещества
2(Alm,Ann)‑46230‑200
10‑1010‑10
‑2203000‑2
 
‑46230‑200
01.5‑0.50.751‑0.5‑10
0‑1‑11.5010‑2
 
‑46230‑200
01.5‑0.50.751‑0.5‑10
0‑400‑222‑2
 
0‑200‑111‑152Sill+Phl+Qtz=Mu+Prp(Alm,Ann,Fs)
 
3(Alm,Fs) – подмножество реакции №5

КомбинацияОтсутствующие веществаAlmSillAnnFsPhlMuPrpQtzРеакцияОтсутствующие вещества
4(Alm,Phl)‑46230‑200
10‑1010‑10
‑2203000‑2
 
‑46230‑200
01.5‑0.50.751‑0.5‑10
0‑1‑11.5010‑2
 
0‑2‑23020‑462Sill+2Ann+4Qtz=3Fs+2Mu(Alm,Phl,Prp)

КомбинацияОтсутствующие веществаAlmSillAnnFsPhlMuPrpQtzРеакцияОтсутствующие вещества
5(Alm,Mu)‑46230‑200
10‑1010‑10
‑2203000‑2
 
‑46230‑200
01.5‑0.50.751‑0.5‑10
0‑1‑11.5010‑2
 
‑46230‑200
01.5‑0.50.751‑0.5‑10
02‑2320‑2‑272Ann+2Prp+2Qtz=2Sill+3Fs+2Phl(Alm,Mu)
 
6(Alm,Prp) – подмножество реакции №6

КомбинацияОтсутствующие веществаAlmSillAnnFsPhlMuPrpQtzРеакцияОтсутствующие вещества
7(Alm,Qtz)‑46230‑200
10‑1010‑10
‑2203000‑2
 
‑46230‑200
01.5‑0.50.751‑0.5‑10
0‑1‑11.5010‑2
 
‑46230‑200
0‑1‑11.5010‑2
01.5‑0.50.751‑0.5‑10
 
06‑234‑2‑4082Ann+2Phl+4Prp=6Sill+3Fs+4Phl(Alm,Qtz)

КомбинацияОтсутствующие веществаAlmSillAnnFsPhlMuPrpQtzРеакцияОтсутствующие вещества
8(Sill,Ann)‑46230‑200
10‑1010‑10
‑2203000‑2
 
‑46230‑200
10‑1010‑10
‑0.6670‑0.667200.6670‑2
 
‑46230‑200
10‑1010‑10
‑1.333002‑0.6670.6670.667‑2
 
‑2003‑111‑392Alm+Phl+3Qtz=3Fs+Mu+Prp(Sill,Ann)
 
9(Sill,Fs) – подмножество реакции №2

КомбинацияОтсутствующие веществаAlmSillAnnFsPhlMuPrpQtzРеакцияОтсутствующие вещества
10(Sill,Phl)‑46230‑200
10‑1010‑10
‑2203000‑2
 
‑46230‑200
10‑1010‑10
‑0.6670‑0.667200.6670‑2
 
‑10‑13010‑310Alm+Ann+3Qtz=3Fs+Mu(Sill,Phl,Prp)
 
11(Sill,Mu) – подмножество реакции №2
12(Sill,Prp) – подмножество реакции №10
13(Sill,Qtz) – подмножество реакции №2
14(Ann,Fs) – подмножество реакции №5
15(Ann,Phl) – подмножество реакции №3
16(Ann,Mu) – подмножество реакции №3
17(Ann,Prp) – подмножество реакции №3

КомбинацияОтсутствующие веществаAlmSillAnnFsPhlMuPrpQtzРеакцияОтсутствующие вещества
18(Ann,Qtz)‑46230‑200
10‑1010‑10
‑2203000‑2
 
‑46230‑200
‑1301.51‑1‑10
‑2203000‑2
 
‑46230‑200
‑2203000‑2
‑1301.51‑1‑10
 
‑26032‑2‑20112Alm+2Mu+2Prp=6Sill+3Fs+2Phl(Ann,Qtz)

КомбинацияОтсутствующие веществаAlmSillAnnFsPhlMuPrpQtzРеакцияОтсутствующие вещества
19(Fs,Phl)‑46230‑200
10‑1010‑10
‑2203000‑2
 
‑46230‑200
10‑1010‑10
2‑4‑20020‑2
 
1‑2‑10010‑1122Sill+Ann+Qtz=Alm+Mu(Fs,Phl,Prp)
 
20(Fs,Mu) – подмножество реакции №2
21(Fs,Prp) – подмножество реакции №12
22(Fs,Qtz) – подмножество реакции №2
23(Phl,Mu) – подмножество реакции №3
24(Phl,Prp) – подмножество реакции №10
25(Phl,Qtz) – подмножество реакции №1
26(Mu,Prp) – подмножество реакции №3
27(Mu,Qtz) – подмножество реакции №2
28(Prp,Qtz) – подмножество реакции №1

 Таким образом, в этой системе из 28 возможных комбинаций (без учёта вычисленного набора из 3-х линейно независимых реакций) только 9 дают новые линейно зависимые реакции, тогда как остальные 19 комбинаций отвечают уже найденным (вырожденным) реакциям.

 Определение линейной зависимости некоторой реакции от некоторого набора линейно независимых реакций также осуществляется приведением матрицы коэффициентов всех этих реакций к трапециевидной форме: если тестируемая реакция является линейно зависимой, то последняя строка матрицы после применения метода Гаусса оказывается нулевой (и может быть сокращена).