2.5. Использование LaTeX в тексте
2.6. Описание экспериментальных данных
3. Примеры термодинамических моделей
4.2. Окно с изобарно-изотермическим сечением
5. Добавление собственных функций
Программа TernAPI-C разработана в лаборатории химической термодинамики МГУ. Она предназначена для расчета фазовых диаграмм тройных систем на основе энергий Гиббса (поверхностей, кривых, отдельных значений) составляющих их фаз с помощью метода выпуклых оболочек. Ее ключевыми особенностями являются:
Минимальные системные требования:
Данная версия TernAPI-C является учебной (демонстрационной). Ограничений функционала нет, за исключением невозможности сохранения текстовых описаний термодинамических моделей. После истечения срока работы демо-версии программу необходимо заново скачать с сайта лаборатории.
В программе TernAPI-C термодинамическая модель тройной системы состоит из набора заданных функций энергий Гиббса всех фаз в ней. Формат этих функций зависит от вида фазы (стехиометрическая, квазибинарный раствор, тройной раствор). Переход от модели к фазовой диаграмме состоит из следующих шагов:
Термодинамическая модель тройной системы задается в виде ассоциативного массива в формате YAML с использованием диалекта языка Ruby для записи арифметических выражений. Рассмотрим простейший пример:
--- name: Hello-world example description: ! 'TERNAPI "hello-world" example. Taken from D.D.Lee. Computer Generation of Binary and Ternary Phase Diagrams via a Convex Hull method // J.Phase Equilibria.1992.V.13.N4.P.365' components: - {name: A, M: 100.0} - {name: B, M: 100.0} - {name: C, M: 100.0} global: - {name: t, value: '110'} phases: - type: PHASE_SOLUTION name: L model: - -@t*s_id + - 2510*(x1*x2+x2*x3+x3*x1)
Элементы name и descripiton содержат краткую информацию о тройной системе
Элемент components хранит данные о компонентах, а именно их названия (name
) и
молекулярные массы (M
) в г/моль. Эти значения будут использованы соответственно для
подписей на фазовой диаграмме и пересчета массовых долей в мольные
Элемент global содержит параметры модели, общие для всех фаз системы.
Эти параметры рассчитываются последовательно один за другим, т.е. ранее рассчитанный параметр
может использоваться в следующих. Для того, чтобы использовать глобальный параметр в формуле,
нужно поставить @
перед его именем (т.е. t
превращается в @t
).
Элемент phases содержит описания термодинамических свойств фаз. Рассмотрим каждое из его полей.
PHASE_SOLUTION
, PHASE_LINE
, PHASE_COMPOUND
, т.е.
тройной раствор, квазибинарный раствор и стехиометрическое соединение соответственно.(CH_3)_2O
будет интерпретировано как
(CH3)2O, а \alpha
— как α).
Поле model — термодинамическая модель фазы. Представляет собой массив строк функции на диалекте языка Ruby, которая вычисляет энергию Гиббса. Результатом выполнения функции является последнее рассчитанное в ней арифметическое выражение. Набор предопределенных переменных и требования к результату зависят от типа фазы:
PHASE_SOLUTION
— предопределены мольные доли компонентов x1
, x2
, x3
и идеальная энтропия смешения s_id
(все они являются матрицами).
Функция должна возвращать матрицу, размер которой совпадает с таковым для входных переменных.PHASE_LINE
— предопределена мольная доля второго квазикомпонента y
и
и идеальная энтропия смешения s_id
двух квазикомпонентов (все они являются матрицами).
Функция должна возвращать матрицу, размер которой совпадает с таковыми для входных переменных.PHASE_COMPOUND
— нет предопределенных значений. Функция должна возвращать одно число
(скаляр) с плавающей запятой.
Во всех случаях можно пользоваться константами R
и CAL
(универсальная газовая постоянная в Дж/(моль·К)
и число джоулей в калории соотвественно).
Поле xv1 — состав стехиометрической фазы либо первого компонента квазибинарного раствора.
Не требуется для фазы типа PHASE_SOLUTION.
Задается в виде массива из 2 действительных чисел. Например, составу
x2=0.2
и
x3=0.6
соответствует запись вида [0.2, 0.6]
. Допускается задание состава с помощью арифметических выражений
(например, 2/3
, 0.1*2
и т.п.).
Поле xv2 - состав второго компонента квазибинарного раствора.
Требуется только для фазы типа PHASE_LINE
.
Формат аналогичен таковому у поля xv1
.
Рассмотрим несколько примеров задания термодинамической модели фаз всех трех типов.
Пример 1. Расплав в тройной системе Mo-Hf-Re [Kau72].
Энергия Гиббса расплава в этой системе задается как:
ΔmixG(x2,x3,T) = -TSid + 300x1x3 - 19264x2x3 - 10767x3x1, кал/(г·атом)
В формате YAML она может быть записана следующим образом:
- name: L type: PHASE_SOLUTION model: - -s_id*@t/CAL + 300*x1*x2 - 19264*x2*x3 - 10767*x3*x1
Пример 2. Квазибинарный раствор состава (Bi,Sb)2Au в тройной системе Au(1)-Bi(2)-Sb(3) [Wan07].
Энергия Гиббса смешения раствора может быть записана как:
G = -2/3TSid + (1-y)GBi:Au + yGSb:Au
GBi:Au = 5500, Дж/(г·атом)
GSb:Au = -5450.31 + 12.8064T - 1.63691TlnT, Дж/(г·атом)
Соответствующая запись в формате YAML:
- type: PHASE_LINE name: AuSb_2 model: - g_AuBi2 = 5500.0 - g_AuSb2 = -5450.31 + 12.8064*@t - 1.63691*@t*Math::log(@t) - (1-y)*g_AuBi2 + y*g_AuSb2 - 2.0/3.0*@t*s_id xv1: [2/3, 0] xv2: [0, 2/3]
Пример 3. Точечная фаза Mg2Zn3 [Lia97].
Энергия Гиббса образования из твердых компонентов:
ΔfG0 Mg2Zn3 = -11014.5 + 3.67151T, Дж/(г·атом)
Соответствующий ей ассоциативный массив:
- name: Mg_2Zn_3 type: PHASE_COMPOUND model: - -11014.5 + 3.67151*@t xv1: [0.4, 0.6]
Для описания арифметических выражений (формул) в программе TernAPI используется подмножество языка Ruby, дополненное средствами для работы с матрицами и векторами. Наиболее существенные отличия от оригинального Ruby:
%
и ~
отличается от принятого по умолчанию в языке Ruby2/3==2.0/3.0
)Перечень наиболее часто используемых операторов приведен в Таблице 1 в порядке убывания их приоритета.
Таблица 1. Арифметические операции | |
Операторы | Назначение |
() | Арифметические скобки |
[] | Скобки для генерации матриц и обращения к элементам матриц |
~ ,+ | Транспонирование матрицы и унарный плюс |
** | Возведение в степень |
- | Унарный минус |
*,/,% | Поэлементное умножение и деление матриц (т.е. "элемент-на-элемент"), умножение матриц (по правилам линейной алгебры) |
+,- | Сложение и вычитание |
& | Поэлементное "И" для логических матриц |
|,^ | Поэлементные "ИЛИ" и "Исключающее ИЛИ" (XOR) для логических матриц |
<=, =>, <, > | Поэлементное сравнение матриц (с выдачей логической матрицы в стиле MATLAB) |
==, != | Поэлементное сравнение матриц (с выдачей логической матрицы в стиле MATLAB) |
= | Присваивание |
Знак завершения арифметического выражения (вроде ;
в языках C/C++) отстуствует,
но при этом допускается использование многострочных арифметических выражений.
При их составлении следует обратить внимание на правильную разбивку по строкам.
В качестве примера рассмотрим выражение
ax3+bx2+cx+d.
Правильная разбивка:
a*x**3 + b*x**2 + c*x + d
В этом случае выражение будет интерпретировано как единое целое, т.е. как ax3+bx2+cx+d
Неправильная разбивка:
a*x**3 + b*x**2 + c*x + d
В этом случае текст будет интерпретирован как два независимых алгебраических выражения
ax3+bx2 и cx+d (знак + перед cx интерпретируется как "унарный плюс").В арифметических выражениях можно использовать следующие уже заранее определенные переменные:
Таблица 2. Предопредленные переменные | ||
Обозначение | Значение | Описание |
R | 8.3144621 | Универсальная газовая постоянная |
CAL | 4.184 | Число джоулей в калории |
s_id | Матрица | Идеальная энтропия смешения |
x1,x2,x3 | Матрица | Мольные доли первого, второго и третьего компонентов тройного раствора |
y | Матрица | Мольная доля второго компонента квазибинарного раствора |
SGTE_Unary | Класс | Класс для работы с БД SGTE Unary |
Наряду с числами пользователь может задавать также и матрицы, состоящие из вещественных чисел. Способ задания матрицы не стандартен для языка Ruby и реализован непосредственно в ядре TernAPI.
Пример задания матрицы:
a = [[ 0, 1216.745, -1286.518], [-210.171, 0, -1727.670], [-823.116, 2971.737, 0]].to_mat
Пример задания вектора (частный случай матрицы):
v = [[10, 20, 30, 40, 50]].to_mat
Матрицы могут использоваться как входные параметры некоторыми встроенными функциями - моделями (NRTL, UNIQUAC, Redlich-Kister и др.).
Над ними можно выполнять арифметические операции, при этом *
и /
обозначают поэлементные умножение и деление, а не операции
умножения или деления матриц из линейной алгебры.
Если Вы хотите осуществить умножение матриц, то используйте оператор %
. Транспонирование обозначается
как ~a
.
Иногда возникает необходимость повторного использования одного и того же алгебраического выражения либо же его передачи в какую-либо функцию (например, в методах Колера или Муггиани). В этом случае Вы можете создать на его основе анонимную функцию (anonymous function) следующим образом:
func = ->arg1,...,argn{expression}
Пример создания анонимной функции (переменные a0_12
, a1_12
и a2_12
должны быть определены до
данного выражения):
g12_f = ->x{x*(1-x)*(a0_12 + a1_12*(2*x-1) + a2_12*(1-2*x)**2)}
Вызов анонимной функции осуществляется следующим образом:
result = func.(arg1,...,argn)
Пример вызова:
g = g12_f.(x1)
Подробнее об анонимных функциях можно прочитать в
документации языка Ruby на метод lambda
Для облегчения программирования моделей программа TernAPI-C содержит встроенные функции, которые существенно облегчают программирование термодинамических моделей. В частности, это - реализации полиномиальной модели Редлиха-Кистера, моделей NRTL и UNIQUAC, а также методов Колера и Муггиани. В общем случае функция без именованных аргументов вызывается следующим образом:
output_value = function_name(arg1, arg2, ..., argN)Если же у функции есть именованные аргументы (помещенные в конце и в произвольном порядке), то ее вызов осуществляется следующим образом:
output_value = function_name(arg1, arg2, ..., :narg1_name => narg1, ..., :nargN_name=> nargN)
Таблица 3. Встроенные функции | |||
Имя | Неименованные аргументы | Именованные аргументы | Описание |
grt_nrtl | x1,x2,x3 | tau, alpha | Модель NRTL (G/RT) |
gadd_bonner | x1,x2,x3 | gAO_f, gBO_f, gAB_f, gex_f | Реализация метода Бонье |
gadd_koh | x1,x2,x3 | g23_f, g13_f, g12_f, gex_f | Реализация метода Колера |
gadd_mug | x1,x2,x3 | g23_f, g13_f, g12_f, gex_f | Реализация метода Муггиани |
poly_rkm | x1,x2,x3,l2mat,l3func | Модель Редлиха-Кистера |
Программа TernAPI-C позволяет использовать подмножество языка LaTeX при вводе названий компонентов и фаз. Данное подмножество дает возможность использовать подстрочные и надстрочные индексы, греческие буквы, а также некоторые другие специальные символы. Этого достаточно для ввода большинства химических формул и наименований фаз. Детальная справка приведена далее.
Таблица 4. Приемы форматирования | ||
На языке LaTeX | Отображение | Описание |
H_2SO_4 | H2SO4 | Подстрочные индексы (один символ) |
C_{60} | C60 | Подстрочные индексы (несколько символов) |
x^2 | x2 | Надстрочные индексы (один символ) |
A^{solid} | Asolid | Надстрочные индексы (несколько символов) |
Таблица 5. Специальные символы | |||
На языке LaTeX | Отображение | На языке LaTeX | Отображение |
\alpha | α | \Alpha | Α |
\beta | β | \Beta | Β |
\gamma | γ | \Gamma | Γ |
\delta | δ | \Delta | Δ |
\epsilon | ε | \Epsilon | Ε |
\lambda | λ | \Lambda | Λ |
\mu | μ | \Mu | Μ |
\xi | ξ | \Xi | Ξ |
\pi | π | \Pi | Π |
\rho | ρ | \Rho | Ρ |
\sigma | σ | \Sigma | Σ |
\tau | τ | \Tau | Τ |
\phi | φ | \Phi | Φ |
\psi | ψ | \Psi | Ψ |
\omega | ω | \Omega | Ω |
\cdot | ⋅ |
|
Таблица 6. Примеры форматирования | |
На языке LaTeX | Отображение |
CuSO_4\cdot5H2_O | CuSO4⋅5H2O |
\beta^{solid} | βsolid |
YAML-файлы программы TernAPI-C с термодинамическими моделями также могут хранить и экспериментальные точки в элементе expdata Этот элемент обязательно должен содержать следующие поля:
TYPE_TIELINES
— данные являются набором коннод,
TYPE_DOTS
— данные являются наборо изолированных точек.true
- экспериментальные данные записаны в процентах,
false
- экспериментальные данные записаны в массовых долях.UNIT_MASS
— массовые доли компонентов,
UNIT_MOLAR
— мольные доли компонентов. Элемент expdata также может содержать некоторые необязательные поля:
black
(чёрный), blue
(синий), green
(зелёный), cyan
(сине-зелёный),
red
(красный), magenta
(пурпурный), yellow
(жёлтый), white
(белый),
gray (серый).
Значение по умолчанию — yellow
.fillcolor
Значение по умолчанию — red
. true
)
или выключает (если равно false
) отображение набора точек.
Значение по умолчанию — true
.expdata: - name: 2000C selector: '@t == 2273.15' marker: o unit: UNIT_MOLAR percent: false type: EXP_DOTS x2_1: [1.0000, 0.8977, 0.7964, 0.7382, 0.6918, 0.5765, 0.4858, 0.4784, 0.3524, 0.2709, 0.2476, 0.2264, 0.2132, 0.2167, 0.1830, 0.1521, 0.1341, 0.0924, 0.0797, 0.0401, 0.0039] x3_1: [0.0000, 0.0055, 0.0034, 0.0030, 0.0027, 0.0234, 0.0137, 0.0151, 0.0464, 0.0658, 0.0962, 0.0960, 0.0960, 0.0838, 0.0820, 0.0987, 0.1184, 0.1197, 0.1104, 0.1178, 0.0946]Пример задания экспериментальных данных в системе H2O-(CH3)2CO-NaCl (см. базу данных):
expdata: - name: series1 marker: o fillcolor: yellow linecolor: red type: EXP_TIELINES unit: UNIT_MASS percent: true x2_1: [39.2, 33.9, 30.7, 28.1, 24.4, 22.2, 21.6] x3_1: [9.24, 11.0, 12.1, 13.3, 15.1, 16.3, 16.9] x2_2: [66.2, 72.1, 74.9, 77.0, 81.0, 83.1, 83.8] x3_2: [2.45, 1.60, 1.26, 0.98, 0.70, 0.55, 0.51]
Согласно литературным данным [Kub71] тройная система Au-Pt-Pd в твердом состоянии содержит единственную фазу, а именно расслаивающийся твёрдый раствор, энергия Гиббса смешения которого описывается как:
ΔmixSex = 3xAxC + 2.9xC2xB + 1.7xCxB2 + 0.9xAxB2 + 3.5xA2xB - 9xAxBxC, кал·(К·г·атом)-1
ΔmixHex = xAxBxC3036-xAxC(11141xA+3065xC) - xBxC(5234xC+3021xB)- xAxB(634xA-5691xB), кал·(г·атом)-1
По этой причине модель содержит единственную фазу — тройной твердый раствор.
--- name: Au-Pt-Pd description: ! "Au-Pt-Pd system at 1200 K" components: - {name: Au, M: 196.97} - {name: Pt, M: 195.08} - {name: Pd, M: 106.42} global: - {name: t, value: '1073'} phases: - type: PHASE_SOLUTION name: S model: - xA, xB, xC = x1, x2, x3 - s = s_id/R - (3*xA*xC+2.9*xC**2*xB+1.7*xC*xB**2 + - 0.9*xA*xB**2 + 3.5*xA**2*xB - 9*xA*xB*xC)/(R/CAL) - h = (xA*xB*xC*3036-xA*xC*(11141*xA+3065*xC) - - xB*xC*(5234*xC+3021*xB)- - xA*xB*(634*xA-5691*xB))/(R/CAL) - h-@t*s
Рис. 1. Фазовая диаграмма системы Au-Pt-Pd при T=1073 K
Рассмотрим упрощенную модель тройной системы Mo-Hf-Re из работы [Kau72] и способ её задания в программе TernAPI. В ней содержатся следующие фазы:
Жидкая фаза (L):
GL = -TSid + 300x1x2
- 19264x2x3 - 10767x3x1
, кал·(г·атом)-1
Твёрдый раствор β: Gβ = -TSid + 4319x1x2 - 13931x2x3 - 10617x3x1 + x1GMo,β + x2GHf,β + x3GRe,β, кал·(г·атом)-1
Твёрдый раствор ε: Gε = -TSid + 6749x1x2 - 8601x2x3 - 10617x3x1 + x1GMo,ε + x2GHf,ε + x3GRe,ε, кал·(г·атом)-1
Твёрдый квазибинарный раствор λ состава Hf(Mo,Re)2:
G = 2/3RT((1-y)ln(1-y) + ylny)
-8273(1-y)-3929*y
+2/3(1-y)GRe,ε + 1/3GHf,ε +
2/3*yGMo,ε, кал/(г*атом),
где y - мольная доля HfMo2
Расчет начинают с выбора компонентов и уровня отсчёта. В данном случае компонентами будут Mo, Hf, Re, а уровнем отсчёта - жидкая фаза. Начнём ввод модели в программу с минимально необходимого набора данных: а именно указанием компонентов, температуры и модели жидкой фазы:
name: Mo-Hf-Re (Kaufman) description: ! 'Mo-Hf-Re system At 2273 K Taken from: Kaufman L., Bernstein H. Computer calculation of phase diagrams Academic Press - New York and London. 1970. ' global: - {name: t, value: 2273.0} components: - {name: Mo, M: 95.94} - {name: Hf, M: 178.49} - {name: Re, M: 186.207} phases: - name: L type: PHASE_SOLUTION model: - -s_id*@t/CAL + 300*x1*x2 - 19264*x2*x3 - 10767*x3*x1
Теперь добавим трехкомпонентные твёрдые растворы β и ε. В секцию global после параметра t нужно дописать параметры стабильности компонентов в модификациях β и ε (в данном случае - энергию Гиббса перехода компонента из жидкого состояния в соответствующую кристаллическую модификацию):
- {name: dG_Mo_b, value: -(5800-2*@t)} - {name: dG_Hf_b, value: -(4990-2*@t)} - {name: dG_Re_b, value: -(6500-2.4*@t)} - {name: dG_Mo_e, value: -(3800-2*@t)} - {name: dG_Hf_e, value: -(6820-2.9*@t)} - {name: dG_Re_e, value: -(6900-2.0*@t)}А в секцию phases добавим выражения для энергий Гиббса образования фаз β и ε:
- name: \beta type: PHASE_SOLUTION model: - -s_id*@t/CAL + 4319*x1*x2 - 13931*x2*x3 - 10617*x3*x1 + - x1*@dG_Mo_b + x2*@dG_Hf_b + x3*@dG_Re_b - name: \epsilon type: PHASE_SOLUTION model: - -s_id*@t/CAL + 6749*x1*x2 - 8601*x2*x3 - 10617*x3*x1 + - x1*@dG_Mo_e + x2*@dG_Hf_e + x3*@dG_Re_e
В результате рассчитанная диаграмма принимает вид, показанный на рис. 2а
Рис. 2. Фазовая диаграмма системы Mo-Hf-Re при T=2273 K (а) без фазы λ (б) с фазой λ | |
Несколько более сложным является добавлением квазибинарного раствора λ Помимо собственно термодинамической модели необходимо также задать составы первого и второго квазикомпонента в мольных долях второго и третьего компонентов. Первому квазикомпоненту HfRe2 соответствует состав (1/3, 2/3), а второму квазикомпоненту HfMo2 - состав (1/3, 0). Обратите внимание на то, что квазибинарному раствору соответствует тип фазы PHASE_LINE.
- name: \lambda type: PHASE_LINE xv1: [1/3, 2/3] xv2: [1/3, 0] model: - g_id = (2*(1-y)*@dG_Re_e + @dG_Hf_e + 2*y*@dG_Mo_e) / 3 - 2/3*s_id*@t/CAL - g_ex = -8273*(1-y)-3929*y - g_id + g_ex
В результате рассчитанная диаграмма принимает вид, показанный на рис. 2б.
Тройная система Ga-In-Sb [Jia94],[Bre83] интересна в качестве примера тем, что в ней имеются все три вида фаз (тройные и квазибинарные растворы, а также стехиометрические фазы) и задействованы некоторые встроенные функции TernAPI. Как и в предыдущих примерах начнем программирование системы с задания свойств компонентов и глобальных параметров:
--- name: Ga-In-Sb description: ! "Ga-In-Sb Ternary Phase Diagram" components: - {name: Ga, M: 69.723} - {name: In, M: 114.818} - {name: Sb, M: 121.76} global: - {name: t, value: '800.0'} - name: sgte value: SGTE_Unary.new
Обратите внимание на глобальный параметр sgte: он служит для подключения базы данных с параметрами стабильности простых веществ.
Добавим термодинамические модели (параметры стабильности относительно жидких компонентов) твердых Ga, In и Sb:
phases: - type: PHASE_COMPOUND name: Ga_s model: - ! '@sgte.calc_g(''Ga'', [''ORTHORHOMBIC_GA'',''LIQUID''], @t)' xv1: [0, 0] - type: PHASE_COMPOUND name: In_s model: - g = @sgte.calc_g('In', ['TETRAGONAL_A6','LIQUID'], @t) xv1: [1, 0] - type: PHASE_COMPOUND name: Sb_s model: - g = @sgte.calc_g('Sb', ['RHOMBOHEDRAL_A7','LIQUID'], @t) xv1: [0, 0]
Далее добавим жидкий тройной раствор, избыточная энергия Гиббса двойных подсистем которого описывается следующим образом:
ΔmixG(InSb) = (1-xIn)xIn( (-25631.2+102.9324T-13.45816TlnT)+ (2xIn-1)(-2115.4-1.31907T) + 2908.9(2xIn-1)2), Дж·(г·атом)-1
ΔmixG(GaSb) = (1-xGa)xGa( (-13953.8+71.07866T-9.6232TlnT)+ (2xGa-1)(1722.9-1.92588T) + 2128.3(2xGa-1)2 ), Дж·(г·атом)-1
ΔmixG(GaIn) = (1-xGa)xGa( 0.25943T(2xGa-1) + (4450.0+1.19185T) ), Дж·(г·атом)-1
Избыточная энергия Гиббса тройного раствора задается выражением:ΔmixG(GaInSb) = xGaxInxSb(-5072.76-10.8842T) Дж·(г·атом)-1 Для получения энергии Гиббса тройного раствора на основе энергий Гиббса двойных подсистем используется метод Муггиани:
- type: PHASE_SOLUTION name: L model: - g23_f = ->x2{ (1-x2)*x2*( - (-25631.2+102.9324*@t-13.45816*@t*ln(@t))+ - (2*x2-1)*(-2115.4-1.31907*@t) + (2*x2-1)**2 * 2908.9 ) } - g13_f = ->x1{ (1-x1)*x1*( - (-13953.8+71.07866*@t-9.6232*@t*ln(@t))+ - (2*x1-1)*(1722.9-1.92588*@t) + (2*x1-1)**2 * 2128.3 ) } - g12_f = ->x1{ (1-x1)*x1*( - (2*x1-1)*(0.25943*@t) + (4450.0+1.19185*@t)) } - gex_f = ->x2,x3 {(1-x2-x3)*x2*x3*(-5072.76-10.8842*@t) } - -@t*s_id + gadd_mug(x1,x2,x3, :g23_f=>g23_f, :g13_f=>g13_f, :g12_f=>g12_f,:gex_f=>gex_f)
Квазибинарный раствор (Ga,In)Sb задаётся следующим образом:
- type: PHASE_LINE name: \alpha model: - 0.5 * ( - (1-y)*CAL*(-16300+13.1*@t) + y*CAL*(-13270+11.53*@t) + - (1-y)*y*(9093.00-2.8698*@t) - @t*s_id ) xv1: [0.0, 0.5] xv2: [0.5, 0.5]
Рассчитанная фазовая диаграмма системы Ga-In-Sb показана на рис. 3.
Рис. 3. Фазовая диаграмма системы Ga-In-Sb при T=800 K
На рис. 4 показано главное окно программы TernAPI-C, открывающееся сразу после ее запуска. Оно содержит в себе список систем в базе данных (слева), поле с текстовым описанием текущей системы (справа), а также меню и панель инструментов (сверху).
Рис. 4. Главное окно программы
Назначение пунктов меню:
Пункт меню | Функция |
File | Загрузка и сохранение базы данных с термодинамическими моделями |
File-New | Создать новую базу данных без моделей |
File-Open | Открыть базу данных |
File-Save | Сохранить базу данных |
File-Save as... | Сохранить базу данных под другим именем |
File-Exit | Завершить работу |
System | Управление записями в базе данных |
System-Create | Создать новую систему |
System-Rename | Переименовать текущую систему |
System-Delete | Удалить текущую систему |
Diagram | Управление расчётом фазовых диаграмм |
Diagram-Calculate | Расчёт изобарно-изотермического сечения текущей системы |
Diagram-Polythermal calculation | Расчёт политермической фазовой диаграмм текущей системы |
Diagram-Polythermal viewer | Построение политермических сечений заранее рассчитанной политермической диаграммы из файла |
Diagram-Gibbs triangle settings | Задание точности расчёта фазовой диаграммы (в точках на ось, dnum) и параметров визуализации треугольника Гиббса-Розебома |
Help | Справочная информация |
Help-Help | Показать подробную справку (т.е. данный документ) |
Help-About the program | Показать сведения о версии программы и используемой лицензии |
Действие мышью | Выполняемая операция |
Щелчок правой кнопкой | Вывод состава и списка фаз |
Колесо прокрутки | Изменение масштаба |
Drag-and-Drop | Изменение отображаемой области диаграммы |
Нередко функция энергии Гиббса имеет сложный аналитический вид и её может быть сложно записать непосредственно внутри YAML-файла. Для решения этой проблемы TernAPI поддерживает три вида пользовательских функций: скрипты на языке Ruby, функции внутри DLL и функции на языке MATLAB.
Для того, чтобы загрузить скрипты на Ruby или DLL с функцией, их необходимо добавить в файл
functions.cfg
. Формат файла описан непосредственно внутри него (в комментариях). Для каждого из упомянутых далее
трёх видов пользовательских функций прилагаются примеры (см. директорию plugins
).
Внимание! По умолчанию в файле functions.cfg
загрузка всех плагинов отключена.
Если Вы желаете работать с примерами, раскомментируете соответствующие строки этого файла.
Представляют собой текстовые файлы с программами на языке Ruby (без использования языка разметки YAML).
Могут содержать объявления функций, классов, процедуры инициализации и т.п. При этом доступны все возможности
языка Ruby, а также реализованная в ядре TernAPI матричная арифметика. Пример скрипта на языке Ruby можно найти
в папке plugins
.
Помимо текстовых файлов на языке Ruby возможна загрузка откомпилированных расширений (Ruby C extensions).
При написании кода следует учитывать, что ядро TernAPI использует собственный класс MLSMatrix
для
представления матриц. Некоторые важные свойства класса:
@m
- число строк@n
- число столбцов@data
- строка Ruby, содержащая элементы матрицы. Каждый элемент занимает
8 байт (тип double), порядок следования элементов - как в Fortran или MATLAB.Если Вы хотите использовать функцию на C, Fortran и других компилируемых языках, то следует предпочесть написание DLL с функцией (см. раздел 5.2), а не компилируемого расширения для Ruby.
Этот способ предназначен для написания функции на компилируемых языках (C, Fortran и т.п.), пригодной для вызова
из скриптов TernAPI. Пример подобной DLL на языке C находится в файле plugins/customBinFunc.c
.
DLL должна содержать следующие функции:
extern const char *name()
| Возвращает указатель на имя функции |
extern void *body(int argc, void **argv, void *context) |
Реализация функции. Входные аргументы и результат являются объектами Ruby. |
Для работы с объектами Ruby пользуйтесь функциями tapi_rbvar_***
библиотеки
libtapikernel.dll
. Прототипы функций на языке C можно найти в файле plugins/tapigate.h
Ядро TernAPI поддерживает вызов функций на языке MATLAB с использованием MATLAB Engine. Для этого требуется наличие установленного MATLAB. При этом поддерживаются следующие типы данных: двумерные матрицы из действительных чисел, строки, структуры (struct). Структура MATLAB соответствует ассоциативному массиву (Hash) в языке Ruby.
Для активации этой возможности должно быть загружено расширение plugins/mateng.rb
, а пути к библиотекам
MATLAB - прописаны в переменной среды PATH (см. gui_with_matlab.vbs
в качестве примера).
26.01.2016 | TernAPI-C 1.4 |
| |
11.02.2015 | TernAPI-C 1.3 |
| |
15.08.2014 | TernAPI-C 1.2 |
Испр.ошибки: проблема с запуском из каталога с кириллическим именем. | |
12.08.2014 | TernAPI-C 1.1 |
| |
27.03.2014 | TernAPI-C 1.0 |
Русская и английская версия программы. Исправления ошибок. | |
12.01.2014 | TernAPI-C 1.0b |
Первая общедоступная тестовая версия программы. |
[Kau72] Кауфман Л., Бернстейн Х. Расчет диаграмм состояния с помощью ЭВМ
Москва, "МИР". 1972 г.
[Wan07] Wang J., Meng F.G., Liu H.S., Liu L.B., Zin Z.P. Thermodynamic modeling of the Au-Bi-Sb
ternary system // J. Electron. Mater. 2007. V.36(5). P.568-77.
[Lia97] Liang H., Chen S.-L., Chang Y.A. A thermodynamic description of the Al-Mg-Zn system //
Met. Mater. Trans. A. 1997. V.28A. P.1725-1734.
[Kub71] Kubaschewski O., Counsell J.F. Thermodynamische eigenschaften des
systems Gold-Platin-Palladium // Monatshefte fur Chemie. 1971. B. 102. N 6. S. 1724-1728.
[Jia94] Jianrong Y., Watson. A. An assesment of phase diagram and thermodynamic properties
of the Gallium-Indium-Antimony system //
Calphad.1994. V.18.N2.P.165-175.
[Din91] Dinsdale A.T. SGTE Data for pure elements // Calphad. 1991. V.15(4). P.317-425.
[Bre83] Brebrick R.F., Ching-Hua-Su and Liao Pok-Kai. Associated Solution Model for 'Ga-In-Sb' and 'Hg-Cd-Te'. //
Semiconductors and Semimetals, Academic Press, Chap.3. N.-Y. 1983
[Мор03]Морачевский А.Г., Воронин Г.Ф., Гейдерих В.А., Куценок И.Б. Электрохимические методы исследования
в термодинамике металлических систем. Москва, ИКЦ "Академкнига", 2003. 334 с.
[Landolt] Landolt-Bornstein. Numerical Data and Functional Relationships in Science and Technology (Editor in Chief:
W.Martienssen. Group IV: Physical Chemistry V.11. Ternary Alloy Systems. Subvolume C. Part 1.