LINZIK: The compact optical CAD

LINZIK: Компактный оптический CAD

©2008, Arkady Vodyanik

Скачать:

ИСХОДНЫЕ ТЕКСТЫ части проекта для ознакомления

Скачать:

linzik_1_1d_Rus_Setup.exe (с двойной точностью в CUDA)
(эти дополнения заменяют CUDA на AMD Stream для двойной точности)

linzik_1_1_Rus_Setup.exe (с одинарной точностью в CUDA)

(эти дополнения заменяют CUDA на AMD Stream для одинарной точности)

Содержание:

Что такое LINZIK

LINZIK - программа для трассирования лучей через сферические и асферические оптические поверхности. Она может быть использована для расчета оптических схем, в частности, астрономической оптики. В состав LINZIK'a входит оптимизатор, который может подбирать параметры поверхностей, так, чтобы минимизировать заданную пользователем целевую функцию и удовлетворить указанным ограничениям.

LINZIK воспринимает одноименный внутренний язык LINZIK. Файлы описаний схем (*.lnz) сохраняются программой на этом языке. На этом же языке пишутся формы для анализа систем (*.an). В языке есть операторы для модифицирования таблицы поверхностей и операторы, дублирующие практически все меню и поля ввода программы.

Возможностей языка достаточно для написания пользователем собственных оптимизаторов и других сложных сценариев, например, демонстрационный ролик LINZIK написан на LINZIK'e.

Разумеется, LINZIK - это всего лишь "еще один" оптический CAD. Он и его автор не претендуют на революционность. Просто автор LINZIK'a - как человек, увлекающийся оптическим дизайном телескопов - пытается здесь выразить свое видение предмета в минималистском исполнении. Но слово "минимализм" здесь относится не к функциональности, а к минимизации видимого "пульта управления": только необходимое за наблюдением хода оптимизации. И это прежде всего попытка сделать интерфейс пользователя не слишком разветвленным, оставив для желающих интерпретатор языка, ориентированного на проблему в целом.

Версия 1.1 - бесплатная и не требует регистрации пока количество переменных в оптимизаторе не превысит 4. Но регистрация также пока бесплатна и сводится к получению от автора специального числа. Запрос на регистрацию направляйте по адресу: linzik@linzik.com.

Программа распространяется "как есть". Автор не несет никакой ответственности за возможно неправильные расчеты и/или ущерб от использования программы.

Спасибо за конструктивную критику и предложения.

Требования к компьютеру и ОС

Версия 1.1 испытана в Windows XP SP1, SP2 и Vista на компьютерах с ОЗУ от 512Мб. На самом деле собственно для LINZIK'a требуется намного меньший обьем ОЗУ.
Важно: размер экрана не менее 1024x768 пикселов.

Если планируется использовать функции для быстрого расчета характеристик пятен с одновременным трассированием лучей на многих процессорах, то потребуется видеоадаптер совместимый с NVIDIA CUDA и соответствующий специальный драйвер. Список устройств, совместимых с CUDA: http://www.nvidia.ru/object/cuda_learn_products_ru.html

Ввод схемы и редактирование таблицы поверхностей

Первые шаги - еще без опыта

Раскройте меню "File". Выберите подменю "Open". Попробуйте загрузить схемы из предложенного списка.

Схема "Demo-Film-Runme!.lnz" - есть не просто схема, а демонстрационный фильм на языке LINZIK. Он будет имитировать поведение человека-пользователя и построит ахроматический дублет "от нуля".
Внимание! Не вмешивайтесь в работу фильма на ходу :) Его можно остановить, закрыв демо-окно крестом или пунктом "Exit".

Задание угла

В поле "Half Field Angle" введите половину поля зрения схемы в градусах.

Выбор длин волн

В полях "Select Wavelengths" укажите желаемый набор длин волн.
Текущая версия предлагает шесть фиксированных волн: r, C, d, e, F, g и одну волну, длину которой может указать пользователь.

Где находится обьект

Если поле "Thickness" строки "Object" (поверхности 1) равно 0, то считается, что обьект находится в бесконечности.
В противном случае обьект находится на расстоянии, указанном в этом поле.

Апертурный стоп

В текущей версии считается, что апертурный стоп находится на поверхности 2.

Редактирование полей

Сводится к занесению желаемых чисел в поля таблицы. Если ввод поля завершается клaвишей Enter, происходит пересчет состояния (то же, что и при нажатии на кнопку "Recalc").

Для указания стекла в поле "Glass" следует ввести строку наименования стекла, например, "BK7". Если стекло присутствует в каталоге, то в полях раздела "Edit Glass" в левом нижнем углу окна появится информация о стеклe: коэффициенты преломления и др.

Каталог стекол

Для занесения стекла в каталог нажмите кнопку "Edit Glass". Заполните поля "nr, nC, nd, ne, nF, ng" соответствующими коэффициентами преломления. Комментарий можно добавить в поле "Info". Затем нажмите кнопку "Save Glass".
Текущая версия хранит каталог в файле glasses.dat.

Импорт схем и каталогов стекол из ZEMAX

LINZIK умеет импортировать основную информацию о схеме из формата ZEMAX - диаметры, радиусы кривизны, толщины, обозначения использованных стекол - пункт меню "File - Import *.zmx".Другая информация о схеме при этом не импортируется.

Предусмотрена также возможность импортирования каталогов стекол ZEMAX - пункт меню "File - Import *.agf (glasses)".

Редактирование форм и библиотеки

В меню "File" есть пункты:
"New Analyse/Tool" - создание нового файла analyse.an. Если такой файл уже есть, то его содержимое отображается в редакторе.
"Edit Analyse/Tool Source" - выбор файлов вида *.an и переход к их редактированию.
"Edit Library.lib" - переход к редактированию библиотеки. Функции, описанные в библиотеке можно вызывать из полей "Cond", "Goal" и "Calc".

Анализ схемы

Чертеж

Правая верхняя треть окна занята чертежом системы. Здесь можно указать интервал отображаемых поверхностей (поля "From" - "to") и режим масштабирования: по длине (выбор "by Length") или по диаметру (выбор "by Dia").
На чертеже можно внести комментарий - в поле редактирования слева под чертежом.

Спот-диаграмма

На спот-диаграмме, занимающей правую среднюю часть окна, отображаются точки, соответствующие пересечению лучей с поверхностью "Image". Присутствуют длины волн, указанные в поле "Select Wavelengths". Можно выбрать режимы задания опорной точки и масштабирования.
Характеристики пятен видны как среднеквадратическое и максимальное отклонения точек пятен от опорной точки.

График продольной сферической аберрации

Расположен в средней нижней части окна. Присутствуют длины волн, указанные в поле "Select Wavelengths". Можно управлять масштабом этого графика. А сверху над графиком расположен "фокусер" - ползунок для плавного изменения заднего фокального отрезка схемы.

Раздел меню "Analysis & Tools"

При старте программа составляет список файлов вида *.an. Имена этих файлов - форм на языке LINZIK - присутствуют в этом разделе меню. Так, выбрав "opd", мы запускаем форму opd.an и видим в окне ее результаты (в данном случае анализ разностей длин оптического пути).

Окно формы имеет пункт меню "File-Edit Source", при выборе которого происходит запуск текстового редактора с исходным текстом формы. Если при вычислении формы возникает ошибка, то управление также передается текстовому редактору и курсор показывает место ошибки.

Если имя формы начинается со знака подчеркивания "_", то оно будет показано во втором разделе меню, где группируются "инструменты", а не собственно "анализы". Такое деление сделано для того, чтобы наглядно учесть способность "инструментов" модифицировать таблицу, в то время, как "анализы" не должны ее модифицировать. Разумеется, это условно, и реальное содержание как "инструментов" так и "анализов" может быть любым, Linzik это не проверяет. Однако, присутствие знака подчеркивания "_" в имени формы запрещает обновление (перезапуск) этой формы при нажатии на Recalc - если эта форма "подвешена" на экране.

Назначение форм из комплекта поставки.
Анализы:

  • DISTORTION - расчет дисторсии
  • fft_MTF - дифракционная modulation transfer function (частотно-контрастная характеристика - ЧКХ), рассчитанная с использованием быстрого преобразования Фурье (БПФ)
  • fft_PMTF - полихроматическая частотно-контрастная характеристика
  • fft_PSF - дифракционная point spread function (функция рассеяния точки - ФРТ), рассчитанная с использованием БПФ
  • FOCAL_SHIFT - хроматическая кривая
  • GLASSES_nd_Vd_diagram - диаграмма Аббе и положение на ней стекл схемы
  • GLASSES_partial_dispersion - диаграмма частных дисперсий и положение на ней стекол из схемы
  • OPD - optical path difference (разность оптического пути)
  • SPOTS - расширенная спот-диаграмма
  • VIGNETTING - расчет виньетирования
  • WAVEFRONT - карта волнового фронта и оценка его ошибок как PV и RMS

    Инструменты:

  • _SCALE_SYSTEM - масштабирование системы
  • _TEST_PLATES - подбор радиусов под указанный в файле plates.txt набор пробных стекол с оптимизацией.

    Оптимизатор

    Диалог оптимизатора находится в правом нижнем углу окна. Он имеет заголовок "Linzik Optimizer".

    При нажатии на кнопку "Search" Оптимизатор пытается найти такие значения переменных в таблице, чтобы целевая функция [goal], описываемая строкой в поле "Goal:", была минимальна. При этом учитывается значение функции [cond], заданной строкой в поле "Cond:". Эти значения (в текущей версии) учитываются так: функция, минимум которой ищет Оптимизатор, рассчитывается по формуле: 1000000 * [cond] + [goal]

    То есть нарушение условия [cond] приводит к тому, что к целевой функции [goal] Оптимизатор прибавляет 1000000, что скачкообразно указывает на удаленность оптимума.

    При нажатии на кнопку "Search" (или при выполнении оператора SEARCH) Оптимизатор выполняет количество итераций, указанное в поле "N Iter" (или обусловленное требуемой точностью в поле "Tol") и останавливается, показывая достигнутое значение целевой функции, динамически индицируя в окне результаты оптимизации.

    Справа от кнопки "Search" есть меню для выбора метода оптимизации. Начиная с версии 0.2 поддерживаются три метода: в дополнение к имевшемуся в версии 0.1 методу Simplex, добавлены метод Broyden'a и метод Simulated Annealing (глобальный поиск "отжигом").
    Начиная с версии 1.1 есть четвертый метод: Global-random, при котором оптимизатор последовательно пробует случайные значения переменных запоминая те сочетания, что дали минимум целевой функции к данному моменту. Этот метод полезен для поиска начальных приближений для других методов.

    Выбор метода оптимизации может выполняться не только вручную, но и оператором METHOD из формы.

    Пользователь (человек, нажавший на кнопку "Search" или форма, выполнившая оператор SEARCH) могут принять решение о продолжении поиска, анализируя значение [goal].

    Если пользователь (человек) решает отказаться от текущих изменений по SEARCH, он может воспользоваться кнопкой "Undo".

    Если требуется прервать итерации досрочно, можно нажать на кнопки "Cancel" или "Stop". Нажатие на "Cancel" эквивалентно последовательным нажатиям на "Stop" и "Undo".

    Следует отметить, что содержимое полей "Cond" и "Goal" не ограничивается выражениями, содержащими только встроенные функции. В файле library.lib можно определить собственные функции и ссылаться на них из этих полей. Таким образом, и целевая и ограничительная функции могут быть сколь угодно сложными.

    Переменная в таблице задается так:
    1) вручную: правый клик мышью на требуемом поле, затем выбор пункта "Variable" из PopUp-меню.
    2) из формы: оператор VARIABLE
    При этом поле-переменная посвечивается желтым цветом.

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

    Поле в таблице может быть снова сделано неизменяемым Оптимизатором:
    1) вручную: правый клик мышью на требуемом поле, затем выбор пункта "Fixed" из PopUp-меню.
    2) из формы: оператор FIXED

    Кнопка "Cond & Goal by default" загружает поля "Goal" и "Cond" значениями по умолчанию.

    Кнопка "Test" подсчитывает производительность системы LINZIK плюс компьютер, показывая окно с количеством пропусканий луча через текущую схему в одну секунду.

    Начиная с версии 0.9 добавлена подсветка синтаксиса в полях "Cond", "Goal", "Calc" и индикация ложных условий (подсвечиваются операторы сравнения, выдающие 0), что облегчает оценку обстановки при оптимизации.
    Пример:

    1 - обнаружено условие, которое не выполняется;
    2 - обнаружена синтаксическая ошибка;

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

    Описание языка LINZIK

    LINZIK можно назвать BASIC-подобным языком. Основное синтаксическое отличие - вызов функций: вместо sin(x) следует писать [sin x]. То есть вызов функции начинается с квадратной скобки, далее следует имя функции и ее аргументы (если присутствуют).

    Имена переменных состоят из буквы или буквы и цифры, или двух букв. Используются только латинские буквы. Строчные и прописные буквы не различаются ни в именах переменных, ни в обозначениях функций и операторов. То, что в этом руководстве обозначения операторов показаны прописными буквами, а функции - строчными, сделано чтобы подчеркнуть разницу между одноименными соответствующими друг другу функциями и операторами. Например, оператору SCALE соответствует функция [scale].

    Для указания приоритета вычислений используются круглые скобки.

    Есть единственный тип данных - числовой.

    В правом нижнем углу окна программы есть поле "Calc". Это - калькулятор, где можно вычислить любое выражение на LINZIK'e.

    Операторы для модификации таблицы и опций

    NEWSYSTEM

    Начинает новую таблицу, состоящую из двух поверхностей: Object и Image. Этот оператор эквивалентен нажатию на кнопку "New" или выбору пункта "New" в меню.

    INSERT

    Добавляет в таблицу новую строку, расположенную ниже текущего положения селектора. Этот оператор эквивалентен нажатию на кнопку "Insert After".

    DELETE

    Удаляет из таблицы строку, на которую указывает селектор. Этот оператор эквивалентен нажатию на кнопку "Delete".

    DIAM2 s, v

    Указывает половину диаметра (v) поверхности с номером s. Эквивалентен занесению вручную числа v в ячейку таблицы "Diameter/2", соответствующую поверхности с номером s.

    CURVR s, v

    Указывает радиус кривизны (v) поверхности с номером s. Эквивалентен занесению вручную числа v в ячейку таблицы "Curv Radius", соответствующую поверхности с номером s.

    THICK s, v

    Указывает толщину (v) поверхности с номером s. Эквивалентен занесению вручную числа v в ячейку таблицы "Thickness", соответствующую поверхности с номером s.

    ANGLE a

    Заносит значение угла в градусах в поле "Half Field Angle".

    WAVE w, v

    Указывает, отмечена ли волна с номером w в поле "Select Wavelengths". Значения v: 1 - включает волну, 0 - выключает.

    BYLENGTH

    Указывает, что чертеж системы будет показан с таким масштабом, что выбранный интервал поверхностей займет всю предложенную программой длину. Эквивалентен ручному выбору radio-button "Scale: by Length".

    BYDIAM

    Указывает, что чертеж системы будет показан с таким масштабом, что самый большой диаметр в выбранном интервале поверхностей займет всю предложенную программой высоту. Эквивалентен ручному выбору radio-button "Scale: by Dia".

    LAYOUT f, t

    Указывает, что на чертеже системы будут показаны поверхности от номера f до номера t включительно. Эквивалентен ручному занесению чисел f и t в поля ввода "From:" и "to:" соответственно.

    RAYS n

    Задает количество лучей n на радиусе входного зрачка. Лучи следуют с равномерными интервалами. Эквивалентен ручному занесению числа в поле ввода "Rays:". Допустимый интервал значений: 4..40.

    AIRY f

    Указывает, следует ли показывать круг Эйри на спот-диаграммах. Значения f: 0 - не показывать, 1 - показывать. Эквивалентен ручному выбору в поле "Airy Dia".

    SCALE v

    Указывает размер (v,мкм) масштабной линейки на спот-диаграмме. Эквивалентен ручному вводу числа v в поле "Scale:". Вызов оператора SCALE -1 выключает показ масштабной линейки, что эквивалентно ручному сбросу отметки в checkbox "Scale:".

    REFERENCE v

    Устанавливает номер режима опорной точки (Reference). Опорная точка может задаваться как центроид пятна (Centroid), как главный луч (Chief Ray), и как место соответствующее отсутствию дисторсии (W/o distorsion). Эквивалентен ручному выбору в поле "Reference". Значения v: 0 - Centroid, 1 - Chief Ray, 2 - W/o distorsion.

    LASCALE v

    Устанавливает масштаб отображения для графика продольной сферической аберрации. Эквивалентен ручному вводу числа в поле на графике. Вызов оператора LASCALE 0 включает автоматическое масштабирование графика.

    FOCUS v

    Перемещает "фокусер" в пределах масштаба на графике продольной сферической аберрации. Значение v: -100..100 - проценты смещения от масштаба. Эквивалентен ручному перемещению ползунка, расположенного над графиком.

    DESCRIPT str

    Заносит комментарий к системе в поле ввода под чертежом. Эквивалентен ручному внесению текста в это поле.

    GLASS s, str

    Указывает наименование материала (str) поверхности с номером s. Эквивалентен занесению вручную строки str в ячейку таблицы "Glass", соответствующую поверхности с номером s.

    GLASSN s, g

    Указывает номер материала g для поверхности с номером s. Номер материала (номер стекла) можно получить как результат функции [glassn ..] или как содержимое элемента массива MEM после выполнения оператора LOADGLASSES.

    COND str

    Заносит строку str в поле ввода "Cond:", доступный функции [cond]. После этого занесения функция [cond] будет интерпретировать строку str как выражение и выдавать его значение.
    Эквивалентен ручному вводу в поле "Cond:".

    GOAL str

    Заносит строку str в поле ввода "Goal:", доступный функции [goal]. После этого занесения функция [goal] будет интерпретировать строку str как выражение и выдавать его значение.
    Эквивалентен ручному вводу в поле "Goal:".

    CALC str

    Заносит строку str в поле ввода "Calc:". Эквивалентен ручному вводу в поле "Calc:".

    PICKUPPLUS r1, c, r2

    Указывает, что значение ячейки таблицы с номером строки r1 и номером столбца c автоматически повторяет значение ячейки с номером строки r2 и тем же столбцом.
    Эквивалентен правому клику мыши и выбору пункта Pickup Plus из Popup-меню, с дальнейшим вводом числа r2 в предложенном диалоге.

    PICKUPMINUS r1, c, r2

    Указывает, что значение ячейки таблицы с номером строки r1 и номером столбца c автоматически повторяет значение ячейки с номером строки r2 и тем же столбцом, взятое с обратным знаком.
    Эквивалентен правому клику мыши и выбору пункта Pickup Minus из Popup-меню, с дальнейшим вводом числа r2 в предложенном диалоге.

    CONIC s, v

    Указывает квадрат эксцентриситета с обратным знаком (v) поверхности с номером s. Эквивалентен занесению вручную числа v в ячейку таблицы "Conic", соответствующую поверхности с номером s.

    USERWAVE L

    Указывает длину волны с номером 7, в нм. Эквивалентен указанию длины волны вручную в поле "Select Wavelength".

    Операторы для работы с текстом и графикой

    FORM x,y,w,h

    Создает окно с координатой левого верхнего угла (x, y), шириной w и высотой h. Все величины в пикселах.

    PIXEL x,y,c

    Рисует пиксел с координатой (x, y) и цветом c.
    Цвет кодируется следующим образом: имеет три составляющие R (red), G (green) и B (blue), в виде формулы записывается так: B*256*256 + G*256 + R , при этом B, G, R могут принимать значения 0..255.
    Пример:
    PIXEL x, y, 200*256*256+100*256+55
    Если c = 0, то будет задан черный цвет.

    PLOT t, x,y, w,h, fx,tx, fy, ty

    Рисует график функции [eval], перебирая значения переменной X в интервале fx..tx.
    График строится в режиме t (значения 0..2), координаты левого верхнего угла (x, y - пикселы), ширину w и высоту h (пикселы), интервал предполагаемых значений функции [eval] задается как fy..ty.
    Пример. Строим график функции [sin x] в интервале 0..10, предполагаемые значения -1..1:

    EVAL [sin X]
    PLOT 1, 20, 30, 100, 150, 0, 10, -1, 1

    Внимание! Оператор PLOT изменяет значение переменной X.

    Варианты показа графиков в режиме t:

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

    EVAL str

    Заносит строку str во внутренний буфер, доступный функции [eval]. После этого занесения функция [eval] будет интерпретировать строку str как выражение и выдавать его значение.
    В качестве str могут выступать не только встроенные функции или их комбинации ([sin x], [cos x], [arctan x], [ln x],..), но и функции, определяемые пользователем в файле library.lib.
    Примеры записи:
    EVAL [sin x]

    EVAL [sin x]+[cos y]

    MOVE x,y

    Перемещает "карандаш" к точке с координатой (x, y).
    Это перемещение определяет позицию, где нужно начать писать текст на чертеже, или при использовании оператора LINE - начальная координата линии.

    LINE x,y

    Чертит линию к точке с координатой (x, y). Линия имеет цвет, заданный в операторе COLOR. Если цвет не задан оператором COLOR, он принимается равным 0 (черный).

    COLOR c

    Задает цвет карандаша для операторa LINE и одновременно цвет для вывода текста оператором - (минус).
    Цвет кодируется следующим образом: имеет три составляющие R (red), G (green) и B (blue), в виде формулы записывается так: B*256*256 + G*256 + R , при этом B, G, R могут принимать значениq 0..255.
    Пример:
    COLOR 200*256*256+100*256+55
    Если c = 0, то будет задан черный цвет.

    BKGND c

    Задает цвет фона для оператора CLEAR и одновременно цвет фона для вывода текста оператором - (минус); c задается также, как и для оператора COLOR.

    -

    Оператор должен содержать в первом символе строки знак минус: -. Весь оставшийся текст выдается в окно начиная с положения карандаша. Карандаш при этом движется вместе с выводимыми буквами.
    Текст может содержать форматные вставки для вывода чисел.
    Синтаксис форматной вставки:
    ^имя переменной^
    где ^ - знакоместа. Примеры:

    -               OPTICAL PATH DIFFERENCE, Waves
    
    или
        color 0
        move 250,30   
    -^^ak^^ Deg
    
    или
    -^^x^^^^^^^^ ^^y^^^^^^^^
    

    HINT

    Оператор должен содержать в первых четырех символах строки слово HINT. Весь оставшийся текст запоминается в области памяти, связанной с выполняемой формой, как текст, ассоциированный с точкой положения карандаша. Если подвести мышь к этой точке, то появится баллон с этим текстом. Текст может содержать форматные вставки для вывода чисел - аналогично оператору -.
    Пример:

       move x, y 
    hint ^c^^^^^^ 
    
    Оператор HINT может быть использован для придания двумерным диаграммам чувствительности к положению мыши. Отметим, что для одномерных графиков, выводимым оператором PLOT, HINT делается автоматически для каждой точки графика - запоминается число, связанное с точкой.

    FONT f1, f2, f3

    f1 - номер типа шрифта, 1 - Arial, 2 - Courier New, 3 - MS Sans Serif
    f2 - размер шрифта
    f3 - номер эффекта, 0 - обычный, 1 - курсив, 2 - жирный, 3 - с подчеркиванием.

    CLEAR

    Очищает содержимое окна, созданного оператором . При этом используется цвет, заданный оператором BKGND. Если цвет не задан оператором BKGND, то используется белый цвет.

    Операторы для работы с оптимизатором

    SEARCH

    Запускает оптимизатор. Эквивалентен нажатию на кнопку "Search". Оптимизатор работает по методу, указанному в операторе METHOD.

    METHOD m, n, t

    Указывает метод оптимизации. Здесь:
    m - номер метода: 1 - Simplex, 2 - Broyden, 3 - Annealing, 4 - Global-random; по умолчанию выбирается Simplex;
    n - количество итераций, по умолчанию 10000;
    t - толерантность, по умолчанию 0.0000001.

    VARIABLE r, c

    Указывает, что ячейка таблицы с номером строки r и номером столбца c является переменной для оптимизации. Эквивалентен правому клику мыши и выбору пункта Variable из Popup-меню.

    FIXED r, c

    Указывает, что ячейка таблицы с номером строки r и номером столбца c не является переменной для оптимизации.
    Эквивалентен правому клику мыши и выбору пункта Fixed из Popup-меню.

    DEFAULT

    Заполняет поля Cond и Goal строками, соответствующими умолчаниям оптимизатора. В поле Cond попадет строка:
    ([Aedge] > 0) & ([Gedge] > 3) & ([Athick] > 0) & ([Vig 0,0] < 0.0001)
    а в поле Goal:
    [srms 0,0] + [srms [angle],0]
    Эквивалентен нажатию на клавишу "Cond & Goal by default".

    Управляющие операторы

    STOP

    Останавливает выполнение формы.

    LOCAL v1 ...

    Обьявляет локальные переменные. Значения перечисленных в операторе переменных сохраняются в стеке и восстанавливаются из стека при выполнении оператора RETURN.

    RETURN

    Выход из подпрограммы.

    RETURN (e)

    Выход из функции, с возвратом значения e.

    GOTO label

    Переход к метке label.

    :label

    Это слово длиной до 10 символов, расположенное после первого символа ":" в строке.

    CALL label

    Вызов подпрограммы с меткой label.

    IF e ...
    ELSE ...
    ELSEIF e ...
    ENDIF

    Условый оператор. Если е=0, то он не выполняется.

    FOR e1 TO e1 ...
    FOR e1 DOWNTO e1 ...
    ENDFOR

    Оператор цикла.

    WHILE e ...
    ENDWHILE e

    Оператор цикла.

    Разные операторы

    VER v

    Информирует программу о версии программы, в которой была написана форма. Если эта версия выше, чем текущая версия программы, выдается предупреждение.

    ERROR str

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

    RECALC

    Запускает одиночный пересчет состояния. Эквивалентен нажатию на кнопку "Recalc".

    DELAY n

    Задерживает выполнение формы на n миллисекунд.

    MEM i, v

    Оператор заносит в i-й элемент массива MEM значение v. Массив MEM - единственный в языке. Номер элемента может принимать значение от 0 до 1000000. При старте LINZIK все элементы массива обнуляются. Но при запуске форм такая инициализация не происходит.
    Значение элемента можно извлечь функцией [mem i].

    FFT n

    Выполняет двумерное комплексное преобразование Фурье над элементами массива MEM. Массив MEM рассматривается как квадратная матрица размера n x n. При этом элементы массива с четными номерами есть действительные компоненты чисел, а с нечетными - мнимые.

    SHIFT n

    Выполняет перестановку квадрантов квадратной матрицы размера n x n. Левый верхний квадрант становится правым нижним и наоборот; правый верхний квадрант становится левым нижним и наоборот.
    Этот оператор используется для приведения результата оператора FFT к форме, когда верхние частоты должны находиться не в углах, а в центре или наоборот.

    INITVAR

    Обнуляет значения всех скалярных переменных.

    INITMEM

    Обнуляет значение всех элементов массива МЕМ.

    LOADGLASSES

    Заполняет элементы массива MEM начиная с элемента 1 числами, которые являются номерами стекол в файле glasses.dat. Эти числа можно использовать в операторе PRINTGLASS и в функции [rindex ..]. В элемент 0 заносится общее количество стекол, так что его можно узнать как [mem 0] или вызовом функции [nglasses].

    PRINTGLASS g

    Выдает в окно текст - наименование стекла с номером g. Номер g можно получить как содержимое элемента массива MEM после выполнения оператора LOADGLASSES или как результат функции [glassn ..].

    HINTGLASS g

    Запоминает в области памяти, связанной с выполняемой формой, текст - наименование стекла с номером g, а также его характеристики. Номер g можно получить как содержимое элемента массива MEM после выполнения оператора LOADGLASSES или как результат функции [glassn ..].
    Пример:

        move x,y 
        hintglass g
    
    Tекст ассоциируется с точкой положения карандаша. Если подвести мышь к этой точке, то появится баллон с этим текстом. При правом клике мыши появляется меню с названием стекла, при выборе из него название стекла попадает в буфер (clipboard). Затем в редакторе схемы оно может быть вставлено в подходящее поле по Ctrl-V или Shift-Ins. Таким образом диаграммы теперь могут использоваться для навигации по каталогу стекoл и выбору из него.

    LOADPLATES

    Заполняет элементы массива MEM начиная с элемента 1 числами, которые являются радиусами пробных стекол из файла plates.txt. В элемент 0 заносится общее количество пробных стекол, так что его можно узнать как [mem 0] или вызовом функции [nplates]. В качестве файла plates.txt можно брать файлы *.tpd, подготовленные для ZEMAX. Для текущей работы как вариант можно скопировать, например, gost.tpd в plates.txt.

    ? v текст_вопроса

    Выводит окно диалога с приглашением текст_вопроса к вводу значения переменной v. В диалоге отображается текущее значение переменной v. Пример.

    ?k во сколько раз увеличить?

    Функции доступа к данным таблицы и опциям

    [edge s]

    Толщина кромки между поверхностью с номером s и поверхностью с номером s+1.
    Результат в мм.

    [gedge]

    Функция находит "стеклянный" элемент с минимальной толщиной кромки и выдает эту толщину.
    Под "стеклянными" понимаются элементы с коэффициентом преломления, не равным 1.
    Результат - в мм.

    [aedge]

    Функция находит "воздушный" элемент с минимальной толщиной кромки и выдает эту толщину.
    Под "воздушным" понимаются элементы с коэффициентом преломления, равным 1.
    Результат - в мм.

    [thick s]

    Расстояние между поверхностью с номером s и поверхностью с номером s+1, взятое по оси системы. Другими словами, это толщина элемента, заключенного между этими поверхностями.
    Результат в мм.

    [athick]

    Функция находит "воздушный" элемент с минимальной толщиной по оси и выдает эту толщину.
    Под "воздушными" понимаются элементы с коэффициентом преломления, равным 1.
    Результат - в мм.

    [gthick]

    Функция находит "стеклянный" элемент с минимальной толщиной по оси и выдает эту толщину.
    Под "стеклянными" понимаются элементы с коэффициентом преломления, не равным 1.
    Результат - в мм.

    [angle]

    Выдает угол, указанный в поле ввода "Half Field Angle".
    Результат в градусах.

    [diam2 s]

    Половина диаметра (радиус) поверхности с номером s.
    Результат в мм.

    [curvr s]

    Радиус кривизны поверхности с номером s.
    Результат в мм.

    [eval]

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

    [wave n]

    Если поле "Select Wavelengths" с номером n выбрано, то функция возвращает ненулевое значение, которое можно интерпретировать как цвет волны с этим номером и, например, использовать в операторах COLOR и PIXEL. Если поле не выбрано, то результат - 0.

    [conic s]

    Квадрат эксцентриситета поверхости с номером s, взятый со знаком минус.

    [reference]

    Возвращает номер режима задания опорной точки (Reference). Опорная точка может задаваться как центроид пятна (Centroid), как главный луч (Chief Ray), и как место соответствующее отсутствию дисторсии (W/o distorsion).
    Режим задания опорной точки указывается в поле ввода "Reference" или оператором REFERENCE из форм.
    Номера режимов: 0 - Centroid, 1 - Chief Ray, 2 - W/o distorsion.

    [rays]

    Выдает количество лучей на радиусе входного зрачка, указанное оператором RAYS или вручную.

    [airy]

    Сообщает, задавал ли оператор AIRY (или было задано вручную) показ круга Эйри.
    0 - не показывается, 1 - показывается:

    [scale]

    Возвращает размер масштабной линейки на спот-диаграмме (то, что было введено оператором SCALE или вручную). Иными словами, выдает размер стороны квадрата в мкм:

    [lascale]

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

    [nsurfaces]

    Количество поверхностей в схеме.

    [wlength w]

    Выдает длину волны с номером w в нанометрах. Например, [wlength 4] есть 546.07.

    [nglasses]

    Выдает количество номеров стекол, загруженных в массив MEM оператором LOADGLASSES.

    [glassn s]

    Выдает номер стекла для поверхности с номером s. Если поверхность есть воздух или зеркало, то результат - 0.

    [nplates]

    Выдает количество радиусов пробных стекол, загруженных в массив MEM оператором LOADPLATES.

    [variable r, c]

    Сообщает, является ли ячейка таблицы с номером строки r и номером столбца c переменной для оптимизации:
    0 - не является
    1 - является
    >1 - ячейка есть pickup для ячейки с таким номером
    <-1 - ячейка есть pickup со знаком минус для ячейки с таким номером, взятым со знаком минус.

    Функции расчета прохождения лучей

    [srms a,w]

    Среднеквадратическое отклонение точек пятна от опорной точки (Reference). Опорная точка может задаваться как центроид пятна (Centroid), как главный луч (Chief Ray), и как место соответствующее отсутствию дисторсии (W/o distorsion).
    Режим задания опорной точки указывается в поле ввода "Reference" или оператором REFERENCE из форм.
    Здесь:
    а - угол, град.
    w - номер волны (1..6). Если указать номер 0, то среднеквадратическое отклонение будет рассчитано сразу для всех волн, выбранных в полях "Select Wavelengths".
    Результат в мкм.

    [cp_srms a,w]

    То же, что и [srms a,w], но вычисляемая с помощью внешней библиотеки accel.dll. Работает вдвое быстрее, чем [srms a,w].

    [cp_2_srms a1,a2,w]

    Эквивалентна [cp_srms a1,w]+[cp_srms a2,w]. При наличии в системе двух центральных процессоров будет вычислена почти вдвое быстрее.

    [nv_srms a,w]

    То же, что и [srms..], но вычисляемая через вызов многопроцессорного видеоадаптера, совместимого с NVIDIA CUDA.

    [nv_2_srms a1,a2,w]

    Эквивалентна [nv_srms a1,w]+[nv_srms a2,w]. При достаточном количестве процессоров на видеоадаптере будет вычислена почти вдвое быстрее.

    [nv_3_srms a1,a2,a3,w]

    Эквивалентна [nv_srms a1,w]+[nv_srms a2,w]+[nv_srms a3,w]. При достаточном количестве процессоров на видеоадаптере будет вычислена почти втрое быстрее.

    [maxr a,w]

    Максимальное отклонение точек пятна от опорной точки (Reference). Опорная точка может задаваться как центроид пятна (Centroid), как главный луч (Chief Ray), и как место соответствующее отсутствию дисторсии (W/o distorsion).
    Режим задания опорной точки указывается в поле ввода "Reference" или оператором REFERENCE из форм.
    Здесь:
    а - угол, град.
    w - номер волны (1..6). Если указать номер 0, то максимальное отклонение будет рассчитано сразу для всех волн, выбранных в полях "Select Wavelengths".
    Результат в мкм.

    [cp_maxr a,w]

    То же, что и [maxr a,w], но вычисляемая с помощью внешней библиотеки accel.dll. Работает вдвое быстрее, чем [maxr a,w].

    [cp_2_maxr a1,a2,w]

    Эквивалентна [cp_maxr a1,w]+[cp_maxr a2,w]. При наличии в системе двух центральных процессоров будет вычислена почти вдвое быстрее.

    [nv_maxr a,w]

    То же, что и [maxr..], но вычисляемая через вызов многопроцессорного видеоадаптера, совместимого с NVIDIA CUDA.

    [nv_2_maxr a1,a2,w]

    Эквивалентна [nv_maxr a1,w]+[nv_maxr a2,w]. При достаточном количестве процессоров на видеоадаптере будет вычислена почти вдвое быстрее.

    [nv_3_maxr a1,a2,a3,w]

    Эквивалентна [nv_maxr a1,w]+[nv_maxr a2,w]+[nv_maxr a3,w]. При достаточном количестве процессоров на видеоадаптере будет вычислена почти втрое быстрее.

    [vig a,w]

    Отношение количества лучей, не дошедших до пятна, к общему количеству испущенных об'ектом лучей, умноженное на 100. Эта функция используется для расчета виньетирования в процентах.
    Здесь:
    а - угол, град.
    w - номер волны (1..6). Если указать номер 0, то виньетирование будет рассчитано сразу для всех волн, выбранных в полях "Select Wavelengths".

    [cp_vig a,w]

    Tо же, что и [vig ..] (виньетирование), но считается оптимизированной библиотекой (как и другие функции [cp... ]) ; примерно 1.5..2 раза ускорение.

    [nv_vig a,w]

    Tо же, что и [vig ..], но ускоренно считается на NVIDIA CUDA (как и другие функции [nv... ]).

    [__vig]

    Быстро считает виньетирование, не делая трассирование лучей, а опираясь на данные, оставленные в кэше функциями [cp_srms ..], [cp_maxr], [nv_srms], [nv_maxr].

    Пример. Если в поле "Goal:" записано [cp_srms [angle],0] + [cp_srms 0,0] (сумма RMS радиусов пятен для края поля и в центре соответственно), то последней будет вычислена [cp_srms 0,0] - для центра. Тогда, если в поле "Cond:" упоминается [vig 0,0] (виньетирование для центра, это так и есть в условиях по умолчанию), то его можно заменить на [__vig], так как во встроенных методах оптимизации поле "Goal:" вычисляется до вычисления "Cond:".

    [ef]

    Эффективное фокусное расстояние в мм.

    [fr]

    Относительное отверстие (focal Ratio).

    [opath a, w, y, z]

    Выдает длину оптического пути для угла a градусов, волны с номером w (1..6), и координат y и z точки, расположенной на поверхности 2. Результат в мм.

    [opd a, w, y, z]

    Выдает разность длин оптических путей как:
    ([opath a, w, y, z] - [opath a, w, 0, 0])/L
    где а - угол град, w - номер волны (1..6), y, z, 0, 0 - координаты точек, расположенных на поверхности 1, L - длина волны с номером w.
    Результат - в длинах волны w.

    [zcentroid a, w]

    Выдает координату z центроида пятна.
    Здесь:
    а - угол, град.
    w - номер волны (1..6). Если указать номер 0, то координата центроида будет рассчитана сразу для всех волн, выбранных в полях "Select Wavelengths".
    Результат в мм.

    [ycentroid a, w]

    Выдает координату y центроида пятна.
    Здесь:
    а - угол, град.
    w - номер волны (1..6). Если указать номер 0, то координата центроида будет рассчитана сразу для всех волн, выбранных в полях "Select Wavelengths".
    Результат в мм.

    [lsa w,y]

    Выдает продольную сферическую аберрацию для волны с номером w (1..6) и точки с координатами (y, 0), расположенной на поверхности 2.
    Результат в мм.

    [rz a,w,y,z]

    Выдает координату z точки пятна (точки на плоскости Image) для угла a градусов, волны с номером w (1..6), для луча, проходящего через точку с координатами (y, z), расположенную на поверхности 2.
    Результат в мм.

    [ry a,w,y,z]

    Выдает координату y точки пятна (точки на плоскости Image) для угла a градусов, волны с номером w (1..6), для луча, проходящего через точку с координатами (y, z), расположенную на поверхности 2.
    Результат в мм.

    [wz a,w,y,z]

    Выдает координату z точки на сфере выходного зрачка для угла a градусов, волны с номером w (1..6), для луча, проходящего через точку с координатами (y, z), расположенную на поверхности 2.
    Результат в мм.

    [wy a,w,y,z]

    Выдает координату y точки на сфере выходного зрачка для угла a градусов, волны с номером w (1..6), для луча, проходящего через точку с координатами (y, z), расположенную на поверхности 2.
    Результат в мм.

    Функции, связанные с оптимизацией

    [goal]

    Вычисляет выражение, записанное в поле ввода "Goal" и выдает его значение. Эта функция используется оптимизатором как критерий оптимальности системы. Оптимизатор стремится минимизировать значение этой функции.
    Пример этой функции заданной строкой по умолчанию (при нажатии на кнопку "Cond & Goal by default"):
    [rms 0,0] + [rms [angle],0]
    здесь вычисляется сумма среднеквадратических отклонений точек пятен в центре поля зрения и на его краю для всех длин волн.

    [cond]

    Вычисляет выражение, записанное в поле ввода "Cond" и выдает его значение. Эта функция используется оптимизатором как условие правильности системы.
    Пример этой функции заданной строкой по умолчанию (при нажатии на кнопку "Cond & Goal by default"):
    ([Aedge] > 0) & ([Gedge] > 3) & ([Athick] > 0) & ([Vig 0,0] < 0.0001)
    здесь требуется иметь положительную толщину "воздушных" кромок ([Aedge] > 0), "стеклянные" кромки толще 3 мм ([Gedge] > 3), положительную толщину "воздушных" элементов по оси ([Athick] > 0), и нулевое виньетирование в центре поля зрения для всех волн ([Vig 0,0] < 0.0001).

    Математические функции

    [sin x]

    Синус угла x, рад.

    [cos x]

    Косинус угла x, рад.

    [arctan x]

    Арктангенс угла x, рад.

    [sqrt x]

    Квадратный корень из x.

    [abs x]

    Абсолютная величина x.

    [ln x]

    Натуральный логарифм x.

    [p2 x]

    Квадрат x.

    [rad x]

    Переход от градусов к радианам.

    [dgr x]

    Переход от радианов к градусам.

    [ro x]

    Округление числа до ближайшего целого.

    [tr x]

    Выделение целой части числа.

    [rnd]

    Случайное число в интервале 0..1.

    [ere x]

    Выдает действительную часть комплексного результата от возведения числа e в степень -i*2*pi*x. Используется при расчете PSF и MTF.
    Здесь pi=3.14159265358..., е=2.718281828.., i - мнимая единица.

    [eim x]

    Выдает мнимую часть комплексного результата от возведения числа e в степень -i*2*pi*x. Используется при расчете PSF и MTF.
    Здесь pi=3.14159265358..., е=2.718281828.., i - мнимая единица.

    Разные функции

    [ver]

    Выдает версию программы.

    [lx]

    Координата по горизонтали левого верхнего угла окна программы.
    Результат в пикселах.

    [ly]

    Координата по вертикали левого верхнего угла окна программы.
    Результат в пикселах.

    [mem i]

    Выдает значение i-го элемента массива MEM.

    [rindex w, g]

    Выдает показатель преломления для волны с номером w и стекла с номером g. Если номер волны - 7 (волна с длиной, определяемой пользователем), то функция выполняет интерполяцию по длинам шести фиксированных волн по формуле Шотта.

    [tick]

    Выдает количество миллисекунд, прошедшее после старта Windows. Может использоваться для хронометража форм.

    [rdtsc]

    Возвращает значение счетчика time stamp counter на центральном процессоре, деленное на 65536. Может использоваться для хронометража форм.

    [nv_rays]

    Выдает количество лучей, одновременно участвовавших в многопроцессорных вычислениях на видеоадаптере, совместимом с NVIDIA CUDA.
    Функция выдает правильный результат после вызова функций [nv_srms] или [nv_maxr].

    Функции, определяемые пользователем

    В опеpатоpе RETURN можно указать возвpащаемое подпpогpаммой значение - выpажение в кpуглых скобках. Соответственно к такой подпpогpамме можно обpатиться как к функции, опpеделенной пользователем. Вызов такой функции выглядит как [:label] или [:label паpаметpы], где паpаметpы - это выpажение (или выpажения), pазделенные запятыми.
    Пpимеp 1:

    
       x=[:max 3,5]   
       -^^^^^x         
       stop           
       *
       :max(x,y)     
       if x > y return (x); else return (y); endif 
    Результат выполнения: 5

    Допускаются pекуpсивные вызовы функций.
    Пpимеp 2 (pекуpсивное вычисление фактоpиала N! = N*(N-1)*(N-2)...*1 ):

    
       x=[:factorial 5]
       -^^^^^^^x
       stop
    
       :factorial(n)
       if n=0 return (1); else return (n*[:factorial n-1]); endif 
    Результат выполнения: 120

    Хроника версий

    Версия 0.1 - 3 марта 2008

    Версия 0.2 - 9 марта 2008:
    Добавлены функции [ln ..], [p2 ..], [ro ..], [tr ..], [rnd], [wz ..], [wy ..].
    Добавлены операторы METHOD, FFT.
    Оптимизатор может работать по разным методам, задаваемым из меню или оператором METHOD из форм.
    В файле library.lib можно определить функции, на которые можно ссылаться из полей "Goal", "Cond", "Calc".

    Версия 0.3 - 17 марта 2008:
    Добавлены функции [nsurfaces], [wlength ..], [ere ..], [eim ..].
    Добавлены операторы: INITVAR, INITMEM, SHIFT ...
    Добавлены формы: fft_PSF, fft_MTF, вызываемые из меню Analysis - функция рассеяния точки и частотно-контрастная функция соответственно.

    Версия 0.4 - 26 марта 2008:
    В добавление к шести фиксированным волнам можно ввести седьмую волну с требуемой длиной.
    Добавлены функции [nglasses], [rindex ..], [glassn ..]
    Добавлены операторы: LOADGLASSES, PRINTGLASS, GLASSN .., USERWAVE.
    Добавлены формы WAVEFRONT, FOCAL_SHIFT, GLASSES, вызываемые из меню Analysis - оценка отклонений волнового фронта, хроматические кривые и диаграмма частных дисперсий стекол соответственно.

    Версия 0.5 - 5 апреля 2008:
    Добавлены функции [nplates], [variable ..].
    Добавлены операторы: LOADPLATES, ? .. .
    Добавлены формы VIGNETTING - расчет виньетирования, _SCALE_SYSTEM - масштабирование системы, _TEST_PLATES - подбор радиусов под указанный набор пробных стекол с оптимизацией.
    Меню "Analysis" расширено как "Analysis & Tools".
    Ускорены функции для работы с каталогом стекол.
    Максимальное количество поверхностей увеличено от 22 до 126.

    Версия 0.6 - 10 апреля 2008:
    В меню "File" добавлены новые пункты: "New Analyse/Tool", "Edit Analyse/Tool Source", "Edit Library.lib" - для редактирования форм и библиотеки.
    В редактор встроена подсветка синтаксиса языка LINZIK.
    Добавлена форма SPOTS - расширенная спот-диаграмма.

    Версия 0.7 - 30 апреля 2008:
    Добавлена поддержка вычислений на многопроцессорных видеоадаптерах, совместимых с технологией NVIDIA CUDA. Новые функции [nv_srms..] и [nv_maxr..] вычисляют характеристики пятен, пропуская все лучи пятна одновременно, вызывая программу параллельных вычислений на процессорах видеоадаптера. Например, с платой на основе NVIDIA GeForce 8800GT (112 процессоров) получается ускорение от 2-х до 10-ти и более раз по сравнению с функциями [srms..] и [maxr..] вычисляемыми центральным процессором Intel Pentium E2180 2 Ггц. Выигрыш тем сильнее, чем больше оптических поверхностей в схеме.
    Добавлены формы DISTORTION - расчет дисторсии, fft_PMTF - полихроматическая частотно-контрастная характеристика.
    Добавлены функции [tick] и [nv_rays].

    Версия 0.8 - 7 мая 2008:
    Оптимизировано взаимодействие программы с CUDA: функции [nv_srms..] и [nv_maxr..] работают на 30% быстрее чем в версии 0.7.
    Новые функции для вычислений на CUDA: [nv_2_srms..], [nv_2_maxr..], [nv_3_srms..], [nv_3_maxr..], позволяют за одно обращение к ним вычислить характеристики пятен для всего поля - 2-х или 3-х углов соответственно. Например, функция [nv_2_srms..] выполняется почти за такое же время как и [nv_srms..], а эквивалентнa при этом [nv_srms..]+[nv_srms..].
    Оптимизирован код трассирования лучей на центральном процессоре. Новые функции [cp_srms..] и [cp_maxr..] вычисляются вдвое быстрее, чем [srms..] и [maxr..] соответственно.
    Новые функции: [cp_2_srms..] и [cp_2_maxr..] эквивалентны суммам двух [cp_srms..] или [cp_maxr..], но при наличии в системе двух центральных процессоров будут вычислены почти вдвое быстрее.
    Добавлена функция [rdtsc].

    Версия 0.81 - 18 мая 2008:
    Исправлена ошибка, из-за которой версии 0.7 и 0.8 не работали в 64-х разрядных Windows.
    Работа функций [nv_...] здесь обеспечивается не CUDA 1.1, а CUDA 2.0 BETA - для совместимости с Vista; если планируется использование этих функций, то загрузите подходящую новую версию драйвера.

    Версия 0.9 - 18 июня 2008:
    Добавлены операторы: HINT.., HINTGLASS..
    Добавлена форма GLASSES_nd_Vd - диаграмма Аббе.
    Форма GLASSES (частные дисперсии) переименована в GLASSES_partial_dispersion, и к ней, как и к диаграмме Аббе, добавлена чувствительность к положению мыши - рядом с точками диаграмм, соответствующих стеклам, при подведении мыши возникает баллон с информацией о стекле. При правом клике мыши появляется меню с названием стекла, при выборе из него название стекла попадает в буфер (clipboard). Затем в редакторе схемы оно может быть вставлено в подходящее поле по Ctrl-V или Shift-Ins. Таким образом диаграммы теперь могут использоваться для навигации по каталогу стекл и выбору из него.
    В формах FFT_PSF и WAVEFRONT добавлена индикация значения функций в точках, соответствующих положению мыши.
    Все графики, выводимые оператором PLOT, также теперь чувствуют положение мыши - когда курсор касается линии графика, в баллоне индицируется соответствующее значение.
    Добавлена подсветка синтаксиса в полях "Cond", "Goal", "Calc" и индикация ложных условий (подсвечиваются операторы сравнения, выдающие 0), что облегчает оценку обстановки при оптимизации.
    Важно! Функции [athick] и [gthick] выдают теперь минимальные толщины воздуха и стекла только для тех толщин, что назначены переменными для оптимизации (в столбце Thickness). Функции [aedge] и [gedge] выдают теперь правильные знаки толщин кромок элементов независимо от знака толщины в столбцбе Thickness. Функции [gthick] и [gedge] больше не считают MIRROR стеклом.

    Версия 0.91 - 22 июня 2008:
    Исправлена ошибка из-за которой нажатие на кнопку "Save Glass" влекло аварийное завершение.
    Улучшена форма _SCALE_SYSTEM.
    Отражены в документации функции, введенные ранее, но еще не описанные: [cp_vig..], [nv_vig..], [__vig].

    Версия 1.1 - 11 июля 2008:
    Добавлен метод оптимизации Global-random.
    Добавлена кнопка AntiLoop для облегчения выхода из локальных минимумов.
    Добавлена индикация текущего GPU.
    Увеличена точность вычислений функций [cp...].