Расчет равновесий в аналитической химии Расчет равновесий
в аналитической химии

Главная » Программы » Прямая задача равновесия » RRSU

Программа RRSU

RRSU (латинская аббревиатура Расчет Равновесного Состава Универсальный) - программа для решения прямой задачи равновесия отечественных авторов, одна из немногих опубликованых в открытой печати программ в данной области.

Текст программы на языке программирования Фортран 77 опубликован в учебном пособии В.П. Васильев,  В.А. Бородин, Е.В. Козловский  "Применение ЭВМ в химико-аналитических расчетах" (М. Высшая Школа, 1993), которое является дополнением к книге В.П. Васильева "Аналитическая химия"  (М. Высшая Школа, 1989).

Программа использует алгоритм, предложенный Бринкли в 1947 году, который представляет собой итерационный метод Ньютона в его матричном представлении.

Основой метода Бринкли служит представление системы равновесий в виде компонентной матрицы (или в каноническом виде). Для этого надо все частицы равновесной системы записать в виде уравнений

`sum v_{ji}"B"_i ⇆ "A"_j` с константой равновесия `K_j = ([A_j])/(prod ["B"_i]^(v_{ji}))`, (1)
где B – компоненты (частицы базиса), А – все равновесные частицы системы, `i = 1.. n`, `j = 1..m`, `n` – число компонентов, `m` – общее число частиц, `v_{ji}'` – стехиометрические коэффициенты реакции (V – матрица стехиометрических коэффициентов или компонентная матрица).

Для простоты использования в систему (1) вводят так называемые формальные реакции, т.е. реакции перехода частицы системы самой в себя `"B"_{jj} ⇆ "A"_{j}` с константой равновесия равной единице, в которых `v_{ji} = δ_{ji}` (δ  - символ Кроникера). Обычно для удобства формальные реакции располагают вверху системы уравнений, тогда верхняя квадратная часть матрица V [n x n] является единичной матрицей.

Используя представление системы в виде компонентной мтарицы, можно уравнения материального баланса и закона действия масс формализовать матричной алгеброй. Например, материальный баланс записывается в виде

`sum v_{ji}["A"_j] = ["B"_i]` или VTE = C, (2)
где VT – транспонированная компонентная матрица, E – вектор равновесных концентраций (`E_j = [A_j]`), C – вектор общих (начальных) концентраций компонентов.

С другой стороный закон действия масс (уравнения для констант равновесия) можно записать системой

`sum v_{ji}"lg"["B"_i] + "lg" K_j = "lg" ["A"_j]` или V lg Ec + lg K = lg E, (3)
где lg Ec – вектор логарифмов равновесных концентраций компонентов (он является подмножеством вектора равновесных концентраций частиц lg E), lg K – вектор логарифмов констант равновесия.

Систем уравнений (2) и (3) при известных векторах C и lg K достаточно для расчета равновесного состава, т.е. решения прямой задачи равновесия.

В программе RRSU для решения задачи используется метод Ньютона, который используется для нахождения значений функции в нуле. В нашем случае такой функцией является система уравнений:
G = vTE - C, (4)
корни которой надо найти, т.е. значения вектора E при условии G = 0.

В методе Ньютона для поиска корней используется итерактивная формула `x_(i+1) = x_i - f(x_i) f'(x_i)`, где `f(x_i)` и `f'(x_i)` – значения функции и ее производной в точке `x_i`. Значение производной можно вычислять аналитически или по разнице между значениями функции в `x` и в `x + Delta x`. Аналитическое вычисление производной не всегда возможно, если функция достаточно сложная, но в методе компонентных матриц эта производная числяется просто.

Элемент матрицы производных функции G (матрицы Якоби) рассчитывается по формуле
`(∂ G_l) / (∂ E_{k}) = sum_(j=1)^(j=m) v_{lj} v_{kj} E_j`, (5)
где `l = 1 .. n` и `k = 1 .. n`. Таким образом формула для итеративного поиска равновесных концентраций на i-ой итерации следующая
`"E"_c^((i+1)) = "E"_c^((i)) - "A"^((i)) "DG"^(-1(i)) "G"^((i))`, (6)
где A – демфирирующий множитель для улучшения сходимости.

Расчет ведется по формуле (6), начиная с начальных приближений равновесный концентраций компонентов равных начальным концентрациям, если начальная концентрация равна 0, то начальному приближению равновесной концентрации назначается значение 10-7. Расчет ведется до выполнения условия `G_i < 10^(-4)` для всех i.

Программа RRSU является консольной программой, поэтому для ввода данных для расчета (компонентной матрицы, констант равновесия и общих концентраций компонентов) необходимо создавать файл входных данных в определенном формате. Данные вводятся в строках в определенных форматах

1 строка: I4 I4 I4 (число концентрационных точек для расчета, число компонентов, общее число частиц; три целых числа, выровненные по правому краю, с 4 позициями под число, недостающие символы заполняются пробелами, пример _ _ _ 2 _ _ _ 2 _ _ _ 6)

Следующие NS-N строки: F8.3 NxF4.2 (константы равновесия, N значений строки компонентной матрицы, описывающей частицу реакции; формат Fn.m описывает действительное число с m-1 знаками после запятой с полем в n знаков, выровненные по правому краю, недостающие символы заполняются пробелами, пример _ _ _ 12.00 _ _ 1. _ _ 1.)

Следующие LO строки: NxE8.3 (для каждой точки расчета вводится N значений общих концентраций компонентов; формат En.m описывает действительное число с m-1 знаками после запятой и шириной поля n знаков, выровненные по правому краю, недостающие символы заполняются пробелами, пример _ _ 9.09-2 _ _ 9.09-3)

Пример входного файла для следующей задачи.

Проведем расчет равновесного состава растворов, полученных при смешении 100 мл 0.1 моль/л раствора Na3PO4 и 10 мл 0.1 моль/л раствора HCl (первый вариант), а также 100 мл 0.1 моль/л раствора Na3PO4 и 200 мл 0.1 моль/л раствора HCl (второй вариант)

Для записи компонентной матрицы возьмем базис из частиц `"PO"_4^(-3)` и `"H"^+`.

Частицы базиса Продукты lg K
`"PO"_4^(-3)` `"H"^+`    
1 1 `"HPO"_4^(-3)` 12.38
1 2 `"H"_2"PO"_4^-` 19.59
1 3 `"H"_3"PO"_4` 21.81
0 -1 `"OH"^-` -14.00

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

  1. Число рассчитываемых концентрационных точек (вариантов) – 2
  2. Число компонентов – 2
  3. Общее число частиц – 6

Общие концентрации компонентов (моль/л) с учетом разбавления при смешении растворов

  `c_("PO"_4^(-3))^(°)` `c_("HCl")^(°)`
1-й вариант 0.0909 0.00909
1-й вариант 0.0333 0.0666

Входной файл для программы RRSU будет содержать следующую информацию

   2   2   6
   12.38  1.  1.
   19.59  1.  2.
   21.81  1.  3.
  -14.00  0. -1.
  9.09-2  9.09-3
 3.333-2 6.666-2

Посмотреть текст программы на языке FORTRAN 77 (кодировка файла UFT8).

Т.к. программа консольная, то она требует ввода данных из стандартного входного потока и выдает результаты на стандартный выходной поток. Если программа запущена без параметров стандартным входным потоком является клавиатура, а стандартным выходным потоком экран компьютера. Чтобы программа брала данные из файла и сохраняла результат в файл, нужно переопределить стандартные потоки. Для этого записывают следующую команду на выполнение
RRSU < data.txt > result.txt,
где RRSU – исполняемый файл программы, < data.txt – переопределение стандартного входного потока, > result.txt – переопределение стандартного выходного потока. Файлы программы и данных должны быть расположены в пределах одной папки, из которой производится запуск, или в команде на выполнение нужно указать полные пути до файлов.

Недостаток программы RRSU заключается в ее "консольности". Необходимо готовить файлы вручную и строго соблюдать формат языка Фортран, иначе данные из файла не считаются. Вывод программы тоже не всегда удобен, т.к. он отформатирован. Чтобы использовать результаты расчета, например для построения графика, нужно вырезать из файла результатов необходимые данные и экспортировать их в другие программы.

Есть две программы, основанные на алгоритме программы RRSU: TVRRSU "под DOS", написанная на языке Turbo Pascal c применением библиотеки визуальных компонентов Turbo Vision, и CESL под Windows, написанная на C++ с использованием фреймворка MFC. Эти программы используют визуальный интерфейс для ввода данных и отображения результатов расчета.