9. Справочник

Все записи языка — по порядку разделов. У каждой: синтаксис, что значит, пример, а также две строки: «Когда нужно» и «Если ошибиться». Примеры полных моделей можно скопировать во вкладку «Текст» целиком.

Обозначения: <…> — значение, […] — необязательно, … — повтор. Число — -12.5, 1e3; точка — x,y,z (в фигуре x,y), без пробелов. Поля разделяются пробелами или переводами строк — любым их числом; запись кончается там, где начинается следующая (номер со своим словом, empty, заголовок раздела…). Значим перевод строки только у комментария # и в строках model, units.

Десятичная запятая и точка. В координатах дробная часть пишется только через точку (12.5,0,300): запятая разделяет числа точки, и 12,5,0,300 не прочитается. В числах параметров — λ, t, α — разбор принимает и запятую (lambda 0,81 значит 0.81), но пишите везде точкой: одна запись для всех чисел, и координата с запятой не проскочит в текст по привычке.

Единицы. λ — Вт/(м·°C); α — Вт/(м²·°C); t — °C; сопротивление теплопередаче R — м²·°C/Вт (в интерфейсе м²·К/Вт — то же самое). Координаты — в миллиметрах, если нет строки units.

Углы ящика. Ящик и прямоугольник задаются двумя противоположными углами; разбор принимает их в любом порядке. Обычно первым пишут угол с меньшими координатами.

Грамматика одной страницы

# грамматика
model [<имя>] version 7.3
[units <единицы>]

materials params
<номер> lambda <λ>
<номер> T <t>

materials objects
<материал> cuboid <x,y,z> <x,y,z>
empty cuboid <x,y,z> <x,y,z>
<материал> shape XY <x,y> <x,y> <x,y> … Z <от>,<до>
empty shape XY <x,y> <x,y> <x,y> … Z <от>,<до>

ambients
<номер> t <t> alpha <α> [side <±X…>] [default] [points <x,y,z> …] [rect <x,y,z> <x,y,z> …]
<номер> adiabat         [side <±X…>] [default] [points <x,y,z> …] [rect <x,y,z> <x,y,z> …]

Записи для файлов из старых расчетов (element, internal и др.) — в приложении.


Заголовок

model

Когда нужно. Первая строка любой модели — без нее текст не читается.

Если ошибиться. Версия не 7.3 — модель не открывается: «версия модели … не поддерживается».

# синтаксис
model [<имя>] version 7.3

Первая строка текста. Имя — любое, может содержать пробелы и может отсутствовать. Версия языка — 7.3; текст другой версии не читается.

# примеры строк
model стена из газобетона version 7.3
model version 7.3

units

Когда нужно. Чертеж в сантиметрах или метрах, и не хочется пересчитывать в миллиметры.

Если ошибиться. Забыли строку при координатах в метрах — стена окажется в 1000 раз тоньше. Ошибки не будет.

# синтаксис
units <единицы>

Единицы координат, если не миллиметры: cm, m, 0.1mm. Нет строки — миллиметры. Теплофизические величины от единиц не зависят: λ всегда в Вт/(м·°C), α — в Вт/(м²·°C), t — в °C.

Комментарий #

Когда нужно. Подписать слой или грань, пометить вариант.

Если ошибиться. # внутри desc "…" — не комментарий. Остальное после # разбор не читает: запись, случайно закомментированная, из модели пропадет без сообщения.

Все от # до конца строки — комментарий. На всю строку или после записи.


Раздел materials params

lambda — теплопроводность

Когда нужно. У каждого слоя конструкции есть теплопроводность: кирпич 0.81, вата 0.048 (СП 50.13330, таблица Т.1, условия Б).

Если ошибиться. Неверная λ — не ошибка текста: расчет проходит, результат чужой. Номер объявлен дважды — ошибка.

# синтаксис
<номер> lambda <λ>

λ — Вт/(м·°C). Номер — метка материала, с 1, может идти с пропусками; объявляется один раз.

desc — описание материала

Когда нужно. Через месяц вспомнить, где кирпич, а где вата.

Если ошибиться. Не закрыли кавычку — ошибка «описание: нет закрывающей кавычки». На расчет описание не влияет.

# синтаксис
<номер> lambda <λ> desc "<описание>"
<номер> T <t> desc "<описание>"

Название или марка материала — для человека. Текст в двойных кавычках; внутри можно \" (кавычка) и \\ (обратная косая черта), # внутри кавычек — не комментарий.

Если описание не задано, а λ есть в справочнике материалов, программа подставит краткое имя сама.

# пример строки
1  lambda 0.04  desc "ПСБ 15-20 Б"

T — заданная температура

Когда нужно. В конструкции есть тело с известной температурой: трубка с теплоносителем, греющий кабель.

Если ошибиться. Заданная температура не имеет теплопроводности: поставили T там, где нужна lambda (обычный слой), — слой станет источником заданной температуры, и тепло пойдет совсем не так. Ошибки не будет.

# синтаксис
<номер> T <t>

Материал с заданной температурой, °C: например, трубка с теплоносителем.

Пример — стена с греющей трубкой:

model стена с трубкой version 7.3

materials params
1  lambda 1.5
2  T 45

materials objects
1  cuboid  0,0,0  200,1000,1000
2  cuboid  80,450,0  120,490,1000

ambients
1  t 20  alpha 8  points  0,500,500  200,500,500
2  adiabat  default

Раздел materials objects

cuboid — ящик

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

Если ошибиться. Неверная координата оставляет щель или наложение, расчет проходит. Ящик, который ничего не касается, висит в пустоте и считать его незачем.

# синтаксис
<материал> cuboid <x0,y0,z0> <x1,y1,z1>

Ящик задается двумя противоположными углами; порядок углов любой (разбор берет наименьшую и наибольшую координату по каждой оси), обычно первым пишут угол с меньшими координатами.

materials objects
1  cuboid  0,0,0  380,1000,1000

Здесь ящик из материала 1: 380 мм по X, 1000 мм по Y и по Z, один угол в начале координат.

empty — вырез

Когда нужно. Проем, отверстие, щель, шахта.

Если ошибиться. Вырез выше тела в тексте не вырежет его; ниже рамы — вырежет и раму.

# синтаксис
empty cuboid <x0,y0,z0> <x1,y1,z1>

Если где-то нужно вырезать — проем, отверстие, щель, — пишут обычный ящик, только вместо номера материала слово empty («пусто»). На его месте остается пустота. Вырез действует на тела, записанные выше него; тело, записанное ниже, снова заполняет свое место.

materials objects
1      cuboid  0,0,0      380,1000,1000
empty  cuboid  0,300,300  380,700,800

Стена с проемом 400 × 500 мм насквозь.

Порядок закраски

Когда нужно. Тела пересекаются: плита в стене, рама в проеме.

Если ошибиться. Перестановка двух пересекающихся тел разных материалов меняет модель — молча.

Тела красятся по порядку, каждое следующее — поверх прежних. Материал в точке — у последнего тела, которое ее содержит; если это empty или тел нет — пустота.

Пример — плита с отверстием под коммуникации, одна стенка отверстия утеплена. Стенки отверстия омывает воздух комнаты:

model плита version 7.3

materials params
1  lambda 0.7
2  lambda 0.04

materials objects
1      cuboid  0,0,0  1000,1000,200
empty  cuboid  400,400,0  600,600,200
2      cuboid  400,400,0  450,600,200

ambients
1  t -20  alpha 23  points  500,700,0
2  t 20   alpha 8   points  500,700,200  500,400,100  500,600,100  600,500,100  450,500,100
3  adiabat  default
  1. Плита 1000×1000×200 из материала 1.
  2. Отверстие 200×200 насквозь.
  3. Утеплитель из материала 2 толщиной 50 мм вдоль стенки отверстия X = 400; остальная часть отверстия — пустота. Вставка прилегает к плите: тело, со всех сторон окруженное пустотой, ни с чем не обменивается теплом, и считать его незачем.
  4. Воздух комнаты — на верхней грани и на четырех стенках отверстия (по точке на стенку); воздух снаружи — на нижней; четыре боковых грани плиты — срезы, их отдает adiabat default.

shape — фигура

Когда нужно. Наклонная пластина, клин, скос откоса — все, что не ящик.

Если ошибиться. Лесенка из ящиков вместо фигуры дает другую поверхность, а вершины не по обходу — не ту деталь. «Z от,до»: «от» должно быть меньше «до».

# синтаксис
<материал> shape XY <x,y> <x,y> <x,y> … Z <от>,<до>
<материал> shape XZ <x,z> <x,z> <x,z> … Y <от>,<до>
<материал> shape YZ <y,z> <y,z> <y,z> … X <от>,<до>
<материал> shape XYZ1 <x,y,z> <x,y,z> <x,y,z> … XYZ2 <x,y,z> <x,y,z> <x,y,z> …

Плоская фигура: многоугольник в плоскости (вершины по обходу), протянутый по третьей оси от и до. Объемная: тело между двумя плоскими контурами с одинаковым числом вершин, вершина i первого соединена с вершиной i второго; пока — когда пары вершин отличаются по одной оси. Красится по порядку, как ящик. Подробно — Фигуры.

# пример строки: наклонная стальная пластина толщиной 10 мм на высоту 1000 мм
18  shape XY 185,-30 585,-4 585,6 185,-20  Z 0,1000

empty shape — вырез фигурой

Когда нужно. Скошенный откос, ящик, заходящий под наклонную пластину.

Если ошибиться. Вырез выше тела ничего не вырежет; забытый вырез оставит материал ящика на месте скоса.

# синтаксис
empty shape XY <x,y> <x,y> <x,y> … Z <от>,<до>

Пустота в многоугольнике. Нужна, когда ящик заходит туда, где тела нет.

# пример строки: пустота под пластиной 18 (ее копия, сдвинутая вниз на 10 мм)
empty  shape XY 185,-40 585,-14 585,-4 185,-30  Z 0,1000

Раздел ambients

t … alpha … — граничное условие с температурой

Когда нужно. Воздух снаружи и в комнате: температура по климатическим нормам, α — по нормам теплообмена.

Если ошибиться. Перепутанные t или α — не ошибка текста: расчет пройдет, результат будет для другого воздуха.

# синтаксис
<номер> t <t> alpha <α>

Граничное условие (ambients; обычно наружный воздух или воздух помещения) с температурой t (°C) и коэффициентом теплоотдачи α (Вт/(м²·°C)).

adiabat — без теплообмена

Когда нужно. Срезы: края фрагмента, плоскости симметрии (Фрагмент).

Если ошибиться. adiabat на грани, открытой воздуху, — молча отключает теплообмен там, где он есть (обычно это забытая точка при default).

# синтаксис
<номер> adiabat

Срезы расчетной области: плоскости симметрии, границы фрагмента.

points — точки

Когда нужно. Поставить воздух на конкретную грань.

Если ошибиться. Точка на ребре или в углу задевает и соседние грани, среди них может быть срез.

# синтаксис
<номер> … points <x,y,z> <x,y,z> …

Каждая точка закрашивает граничным условием участки, на которых лежит: внутри участка — один, на ребре — два, в углу — три и больше. Участок — плоский связный кусок поверхности, смотрящий наружу в одну сторону. Подробно — Граничные условия.

default — по умолчанию

Когда нужно. Все срезы разом: торцы, верх, низ.

Если ошибиться. Забытая точка грани с воздухом — грань молча становится срезом.

# синтаксис
<номер> … default

Граничное условие на всех участках, которые не закрасило остальное. Одно на модель.

side — направления

Когда нужно. Одно условие на все грани одной стороны: наружная и внутренняя плоскости стены, четыре торца.

Если ошибиться. Направление ловит и откос проема, и выступ, смотрящие в ту же сторону.

# синтаксис
<номер> … side <±X> [<±Y> …]

Граничное условие на всех участках, наружная сторона которых смотрит в указанные стороны (-X +X -Y +Y -Z +Z). Одно направление — у одного граничного условия.

Пример — фрагмент стены, вырезанный из здания: наружная грань X = 0 смотрит в −X, внутренняя X = 400 — в +X; торцы фрагмента — адиабата:

model фрагмент стены version 7.3

materials params
1  lambda 0.04
2  lambda 0.12

materials objects
1  cuboid  0,0,0  100,1000,1000
2  cuboid  100,0,0  400,1000,1000

ambients
1  t -26  alpha 23   side -X
2  t 20   alpha 8.7  side +X
3  adiabat  default

Порядок записей в строке граничного условия

<номер> <t … alpha … | adiabat>  [side …]  [default]  [points …]  [rect …]

rect — часть грани

Когда нужно. Условие на части грани: за шкафом, радиатором, шторой.

Если ошибиться. У углов совпадает не одна координата — ошибка «прямоугольник: у двух углов должна совпадать ровно одна координата»; прямоугольник не на открытой грани — «поверхность не найдена в геометрии».

# синтаксис
<номер> … rect <x,y,z> <x,y,z> [<x,y,z> <x,y,z> …]

Граничное условие на части участка — прямоугольник двумя противоположными углами, как у cuboid. У двух углов одна координата совпадает — это плоскость грани; по двум другим осям — габарит. Сторону писать не нужно: открытая грань на плоскости бывает только с одной стороны. Прямоугольников может быть несколько — парами углов. Перекрывает точки, направления и default.

Пример — на внутренней грани стены полоса другого граничного условия (за радиатором воздух теплее):

model стена с радиатором version 7.3

materials params
1  lambda 0.7

materials objects
1  cuboid  0,0,0  300,1000,2700

ambients
1  t -26  alpha 23  side -X
2  t 20   alpha 8   side +X
3  t 35   alpha 10  rect 300,200,100  300,800,700
4  adiabat  default

Что перекрывает что (ГУ)

От общего к частному: каждая следующая запись перекрывает предыдущие.

ЗаписьПерекрывает
default—
sidedefault
pointsside, default
rectвсе

Ключевые слова

СловоРазделЗначение
model, versionзаголовокимя модели, версия языка
unitsзаголовокединицы координат
materials params—раздел материалов
lambda, Tматериалытеплопроводность, заданная температура
descматериалыописание
materials objects—раздел тел
cuboidтелаящик
emptyтелавырез
shape, XY, XZ, YZ, XYZ1, XYZ2, Z, Y, Xтелафигура: плоскость, контуры, ось толщины
ambients—раздел граничных условий
t, alphaграничные условиятемпература граничного условия и теплоотдача
adiabatграничные условиябез теплообмена
sideграничные условиянаправления граней
defaultграничные условияпо умолчанию
pointsграничные условияточки
rectграничные условиячасть грани прямоугольником

Сообщения об ошибках

Программа пишет перед сообщением «строка N: » (номер строки текста); в таблицах ниже этот префикс опущен, а многоточие заменяет то, что программа подставляет сама (слово, число, координаты). Сообщения даны дословно.

Запись не читается

СообщениеЧто не такЧто сделать
непонятное «…» — может быть «…»?; ждем …слово или число не то, что ждет запись; «может быть» — подсказка, если слово похоже на ключевоеисправить по подсказке; после «ждем» названо, что должно стоять
не хватает: ждем …запись оборванадописать то, что названо после «ждем»
описание: нет закрывающей кавычкиу desc "…" не закрыта кавычка (или перед закрывающей стоит \)закрыть кавычку
фигура -- без «cuboid»: «<материал> shape XY x,y … Z от,до»между материалом и shape стоит cuboidубрать cuboid

Что именно ждет программа после «ждем»:

После «ждем»Что должно стоять
номер материаластрока раздела начинается с номера
номер материала, «empty» или «element»строка тел начинается с номера материала или с empty
«lambda <теплопроводность>» или «T <температура>»после номера материала — lambda или T
числозначение λ или температуры
описание в кавычках: desc "…", конец строки или «desc "описание"»текст в двойных кавычках после desc; после него ничего лишнего
«cuboid x,y,z x,y,z» или «shape …»ящик или фигура
угол ящика «x,y,z» (дробная часть -- через точку), второй угол ящика «x,y,z»два угла по три числа, без пробелов; запятая в дробных — ошибка
номер граничного условиястрока граничных условий начинается с номера
«t <температура> alpha <коэффициент>» или «adiabat»после номера — t … alpha … или adiabat
температуру, «alpha <коэффициент теплоотдачи>», коэффициент теплоотдачинедописанное t … alpha …
направление грани после «side»: «-X +X -Y +Y -Z +Z»после side — направление
точку «x,y,z» после «points» (дробная часть -- через точку)после points — точка из трех чисел
два угла прямоугольника «x,y,z x,y,z» после «rect» (как у cuboid)после rect — пара углов
конец строки, «side <направления>», «default», «points <точки>», «rect <угол> <угол>» или «internal …»после строки граничного условия лишнее слово
плоскость фигуры: XY, XZ, YZ или «XYZ1 … XYZ2 …»после shape — плоскость
толщину фигуры XY по Z: «Z от,до» (для XZ — по Y, для YZ — по X)высота фигуры после вершин
не меньше трех вершин «x,y» (для XZ — «x,z», для YZ — «y,z»)у фигуры хотя бы три вершины
не меньше трех вершин «x,y,z» контура XYZ1 (и XYZ2)у каждого контура хотя бы три вершины
«XYZ2» и вершины второго контура «x,y,z»после первого контура — слово XYZ2 и вершины второго
номер версии, единицы, например cmнедописанные version, units
заголовок раздела или «model», «units», «planes», строку разделазапись вне раздела или неизвестного вида

Смысл записи

СообщениеЧто не такЧто сделать
материал K уже объявлен в строке Mномер материала объявлен дваждыоставить одно объявление
граничное условие K уже объявлено в строке Mномер граничного условия объявлен дваждыоставить одно
материал K не объявлен в «materials params»тело ссылается на необъявленный материалобъявить материал или исправить номер
номер материала или граничного условия начинается с 1, а не «0»номер меньше 1нумеровать с 1
версия модели … не поддерживается — сконвертируйте .frs (sdk/python/tools/frs_model_to_73.py) или пересоберите из исходных файловверсия языка не 7.3перевести модель на версию 7.3
Z: начало фигуры не меньше конца (или Y:, X:)у фигуры «от» не меньше «до»поставить «от» меньше «до»
у контуров XYZ1 и XYZ2 разное число вершин: A и B (вершина i первого соединяется с вершиной i второго)контуры разной длинысделать число вершин одинаковым
контур XYZ1 не плоский: вершина отходит от плоскости контура на … (или XYZ2)вершины контура не в одной плоскостипоправить вершины
контур XYZ1 вырожденный: вершины на одной прямой (или XYZ2)контур не имеет площадипоправить вершины
прямоугольник: у двух углов должна совпадать ровно одна координата -- плоскость грани (совпало …)у углов rect совпало не одно числозадать углы так, чтобы совпала одна координата — плоскость грани
default может быть только у одного граничного условия, уже есть Kdefault у двух граничных условийоставить одну пометку
направление ±X уже у граничного условия K (строка M)одно направление у двух граничных условийоставить у одного

Геометрия и сборка

СообщениеЧто не такЧто сделать
нет строки «model <имя> version 7.3»в тексте нет строки modelдописать первой строкой
модель пустая по одной из осей: нет телнет тел или все пустыедобавить тела
точка X … Y … Z … не лежит на открытой поверхности телточка не на поверхностипоставить точку на грань: одна координата — плоскость грани
точка задевает грань, которую уже закрасило граничное условие K (строка M)точка на участке другого граничного условия или на ребре с нимсдвинуть точку внутрь своего участка
поверхность не найдена в геометрии: «…» (нет открытой грани тела с такой плоскостью и габаритом)прямоугольник rect не лежит на открытой гранипроверить углы: совпавшая координата — плоскость открытой грани, габарит — внутри нее
фигура XYZ: пока только когда вершины XYZ1 и XYZ2 попарно отличаются по одной оси (тело с наклонными крышками, стенки -- вдоль этой оси)пары вершин отличаются по двум или трем осямразбить тело на части или выровнять пары
фигура XYZ: контур стоит ребром к оси колонны (план вырожден)контур параллелен оси протяжкипоправить вершины
фигура XYZ: крышки XYZ1 и XYZ2 пересекаются (одни вершины второго контура выше первого, другие ниже)крышки тела пересекаютсяпоменять контуры или разбить тело
фигуры плоскостей … задевают одну ячейку сетки -- так пока нельзяфигуры разных плоскостей слишком близкоразвести их хотя бы на ячейку сетки
фигура XYZ задевает ячейку сетки, где уже … -- так пока нельзяфигура XYZ вплотную к другой фигуреразвести их
сетка фигур: … ячеек с повторенной вершиной (треугольник, клин) -- такую сетку генератор пока не строит без треугольникову фигуры острый угол, и сетке нужны треугольникипоправить форму фигуры
сетка фигур: висячий узел в … (и еще …) -- такую сетку генератор пока не сшиваетсетка вокруг фигуры не сшиваетсяпоправить форму или положение фигуры

Расчет, открытый с наклонными гранями

СообщениеЧто не такЧто сделать
фигура не совпадает с наклонным телом исходной модели: менять вершины фигур в расчете с наклонными гранями пока нельзяизменены вершины фигурывернуть вершины
фигуры XYZ1 … XYZ2 -- пока только в модели, сетку которой строит текст (в расчете с наклонными гранями исходной модели -- нельзя)новая объемная фигура в расчете с наклонными гранямипока нельзя: вернуть модель к исходной
фигуры XZ и YZ -- пока только в модели, сетку которой строит текст (в расчете с наклонными гранями исходной модели -- нельзя)то же для фигур XZ и YZто же
призму фигуры не накрывает ни одно тело (или накрывает «empty»): у фигуры должен быть материалпод фигурой нет теладать фигуре материал
фигура вырезает пустоту у наклонного тела не по сетке исходной модели: менять вершины фигур в расчете с наклонными гранями пока нельзяизменен вырез у наклонного телавернуть вырез
у наклонного тела вне его призм -- пустота, а здесь по тексту материал K: вырежьте его строкой «empty shape …» (менять вершины фигур в расчете с наклонными гранями пока нельзя)ящик заходит в пустоту у наклонного телавырезать ее строкой empty shape …
точка задевает грань наклонного тела, которую уже закрасило граничное условие K (строка M)то же, что и для обычной грани, но на наклоннойсдвинуть точку

Предупреждение под текстом

СообщениеЧто не такЧто сделать
Граней без ГУ: N — на сцене они незакрашенные. Так считать нельзя: задайте им граничное условие или пометьте граничное условие «по умолчанию».у части наружных граней нет граничного условиядобавить точку или пометить граничное условие default

Пример ошибки — тело ссылается на необъявленный материал:

# ошибка: материал 3 не объявлен
model ошибка version 7.3

materials params
1  lambda 0.7

materials objects
3  cuboid  0,0,0  100,100,100

ambients
1  adiabat  default

Для файлов из старых расчетов

Записи ниже программа пишет сама, когда переводит в текст расчет из файлов старых версий (Temper-3D 6). Писать их самому не нужно; в новой модели они не встречаются.

element — ящик одним элементом

# синтаксис
element <материал> cuboid <x0,y0,z0> <x1,y1,z1>

Строки, которые программа пишет для элементов старых расчетов Temper-3D 6; сетка их не делит. Сообщение, если вместо ящика стоит фигура: «element» -- только ящик: «element <материал> cuboid x,y,z x,y,z».

internal — грань между телами

# синтаксис
<номер> … internal <ось> <плоскость> <u0> <u1> <v0> <v1>

Грань между телами (номера в решетке модели). Ее пишет программа, когда переводит в текст модель из файла расчета. Сообщение: шесть целых после «internal»: ось, плоскость, u0 u1 v0 v1 (после «ждем»).

Табличные и служебные строки

elements-table, free-faces-table, prisms-table — строки с данными расчета в формате JSON (сообщение при ошибке: таблица не разбирается как JSON); planes <ось> <координата> … — дополнительные плоскости сетки фигур; element-raw — строка из целых чисел (при ошибке: целые числа). Их пишет программа; редактировать их не нужно. Если фигуры shape и строка prisms-table заданы вместе, программа сообщит: наклонные тела записаны и фигурами «shape», и строкой «prisms-table» -- оставьте что-то одно.

Как программа пишет тела

Когда текст строит программа (из расчета или после правки), тела одного материала идут подряд, материалы — по возрастанию номера, кроме пересекающихся тел разных материалов: у них сохранен порядок закраски. Ящики при этом обрезаны до того, что от них осталось видно, — текст короче, модель та же.

Как программа пишет граничные условия

Когда текст строит программа, она подбирает как можно меньше записей: точек, направлений и прямоугольников. Направление пишется, только если заменяет больше одной точки. Граничное условие по умолчанию она выбирает так, чтобы записей было меньше всего; при равенстве — адиабату.

Габарит

Габарит конструкции по оси — от наименьшей координаты «от» до наибольшей «до» среди всех тел.