TernAPI-C. Руководство пользователя

Содержание

1. Введение

2. Формат задания модели

  2.1. Общие сведения

  2.2. Арифметические выражения

  2.3. Анонимные функции

  2.4. Вызов встроенных функций

  2.5. Использование LaTeX в тексте

  2.6. Описание экспериментальных данных

3. Примеры термодинамических моделей

  3.1. Система Au-Pt-Pd

  3.2. Система Mo-Hf-Re

  3.3. Система Ga-In-Sb

4. Интерфейс пользователя

  4.1. Главное окно программы

  4.2. Окно с изобарно-изотермическим сечением

5. Добавление собственных функций

  5.1. Скрипты на Ruby

  5.2. DLL с функцией

  5.3. Функции на языке MATLAB

6. История изменений

7. Библиография


1. Введение

Программа TernAPI-C разработана в лаборатории химической термодинамики МГУ. Она предназначена для расчета фазовых диаграмм тройных систем на основе энергий Гиббса (поверхностей, кривых, отдельных значений) составляющих их фаз с помощью метода выпуклых оболочек. Ее ключевыми особенностями являются:

Минимальные системные требования:

Данная версия TernAPI-C является учебной (демонстрационной). Ограничений функционала нет, за исключением невозможности сохранения текстовых описаний термодинамических моделей. После истечения срока работы демо-версии программу необходимо заново скачать с сайта лаборатории.


2. Формат задания модели

2.1. Общие сведения

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

  1. Расчет энергий Гиббса всех фаз в нужном диапазоне концентраций на заранее заданной сетки точек.
  2. Объединение всех поверхностей энергий Гиббса. При этом из нескольких точек с одинаковыми координатами (x2,x3) выбирается одна с наименьшим значением энергии Гиббса.
  3. Расчет нижней части выпуклой оболочки с помощью библиотеки qhull.
  4. Анализ геометрии полученной выпуклой оболочки и построение фазовой диаграммы.

Термодинамическая модель тройной системы задается в виде ассоциативного массива в формате 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 содержит описания термодинамических свойств фаз. Рассмотрим каждое из его полей.

Рассмотрим несколько примеров задания термодинамической модели фаз всех трех типов.

Пример 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]

2.2. Арифметические выражения

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

Перечень наиболее часто используемых операторов приведен в Таблице 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.


2.3. Анонимные функции

Иногда возникает необходимость повторного использования одного и того же алгебраического выражения либо же его передачи в какую-либо функцию (например, в методах Колера или Муггиани). В этом случае Вы можете создать на его основе анонимную функцию (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


2.4. Вызов встроенных функций

Для облегчения программирования моделей программа 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   Модель Редлиха-Кистера


2.5. Использование LaTeX в тексте

Программа 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


2.6. Описание экспериментальных данных

YAML-файлы программы TernAPI-C с термодинамическими моделями также могут хранить и экспериментальные точки в элементе expdata Этот элемент обязательно должен содержать следующие поля:

Элемент expdata также может содержать некоторые необязательные поля:

Пример задания экспериментальных данных в системе Al-Si-C system (см. базу данных):
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]

3. Примеры термодинамических моделей

3.1. Система Au-Pt-Pd

Согласно литературным данным [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


3.2. Система Mo-Hf-Re

Рассмотрим упрощенную модель тройной системы 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б.


3.3. Система Ga-In-Sb

Тройная система 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. Интерфейс пользователя

4.1. Главное окно программы

На рис. 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 Показать сведения о версии программы и используемой лицензии

4.2. Окно с изобарно-изотермическим сечением

Данное окно появляется после завершения расчёта p-T—сечения фазовой диаграммы. Помимо пунктов меню и кнопок на панели инструментов для управления видом диаграммы можно использовать мышь. Поддерживаются следующие операции:
Действие мышью Выполняемая операция
Щелчок правой кнопкой Вывод состава и списка фаз
Колесо прокрутки Изменение масштаба
Drag-and-Drop Изменение отображаемой области диаграммы

5. Добавление собственных функций

Нередко функция энергии Гиббса имеет сложный аналитический вид и её может быть сложно записать непосредственно внутри YAML-файла. Для решения этой проблемы TernAPI поддерживает три вида пользовательских функций: скрипты на языке Ruby, функции внутри DLL и функции на языке MATLAB.

Для того, чтобы загрузить скрипты на Ruby или DLL с функцией, их необходимо добавить в файл functions.cfg. Формат файла описан непосредственно внутри него (в комментариях). Для каждого из упомянутых далее трёх видов пользовательских функций прилагаются примеры (см. директорию plugins).

Внимание! По умолчанию в файле functions.cfg загрузка всех плагинов отключена. Если Вы желаете работать с примерами, раскомментируете соответствующие строки этого файла.

5.1. Скрипты на Ruby

Представляют собой текстовые файлы с программами на языке Ruby (без использования языка разметки YAML). Могут содержать объявления функций, классов, процедуры инициализации и т.п. При этом доступны все возможности языка Ruby, а также реализованная в ядре TernAPI матричная арифметика. Пример скрипта на языке Ruby можно найти в папке plugins.

Помимо текстовых файлов на языке Ruby возможна загрузка откомпилированных расширений (Ruby C extensions). При написании кода следует учитывать, что ядро TernAPI использует собственный класс MLSMatrix для представления матриц. Некоторые важные свойства класса:

Если Вы хотите использовать функцию на C, Fortran и других компилируемых языках, то следует предпочесть написание DLL с функцией (см. раздел 5.2), а не компилируемого расширения для Ruby.

5.2. DLL с функцией

Этот способ предназначен для написания функции на компилируемых языках (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

5.3. Функции на языке MATLAB

Ядро TernAPI поддерживает вызов функций на языке MATLAB с использованием MATLAB Engine. Для этого требуется наличие установленного MATLAB. При этом поддерживаются следующие типы данных: двумерные матрицы из действительных чисел, строки, структуры (struct). Структура MATLAB соответствует ассоциативному массиву (Hash) в языке Ruby.

Для активации этой возможности должно быть загружено расширение plugins/mateng.rb, а пути к библиотекам MATLAB - прописаны в переменной среды PATH (см. gui_with_matlab.vbs в качестве примера).


6. История изменений

26.01.2016TernAPI-C 1.4
 
  • Добавлена возможность узнать состав в точке политермического сечения
  • Улучшения при просмотре p,T-сечений
  • Интерфейс командной строки
  • x64-версия (использует Ruby 2.2)
  • Вызов внешних функций и интерфейс для MATLAB
11.02.2015TernAPI-C 1.3
 
  • Небольшие улучшения в интерфейсе
  • Исправлена ошибка построения политермических сечений: в некоторых случаях менялись местами левая и правая сторона
  • Упрощенная компоновка дистрибутива, всё ядро в библиотеке libtapikernel.dll
  • Поддержка запуска Wine
  • Обновление интерпретатора Ruby 1.9.3 до сборки p551
15.08.2014TernAPI-C 1.2
  Испр.ошибки: проблема с запуском из каталога с кириллическим именем.
12.08.2014TernAPI-C 1.1
 
  • Расширено подмножество поддерживаемых символов LaTeX
  • Добавлена модель Бонье и новые примеры
  • Селекторы экспериментальных данных
  • Исправления ошибок
27.03.2014TernAPI-C 1.0
  Русская и английская версия программы. Исправления ошибок.
12.01.2014TernAPI-C 1.0b
  Первая общедоступная тестовая версия программы.

7. Библиография

[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.