Операторы, определяемые пользователем 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Операторы, определяемые пользователем



Бывают случаи, когда должны быть выполнены очень сложные вычисления и их результаты необходимо оптимизировать. ZEMAX уже поддерживает некоторые из таких вычислений, таких как MTFA оператор, который трассирует большое число лучей, вычисляет MTF (МПФ) и записывает полученное значение в колонку "value" таблицы редактора "Merit Function Editor". Некоторые вычисления могут быть выполнены с помощью самой оценочной функцией; см. например, данное в этой главе ранее описание комплексных операторов в разделе "Defining complex operands".

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

1) С помощью макроязыка ZPL;

2) Путем использования дополнительно определенных и компилированных программ.

Использование ZPL языка - довольно просто, хорошо увязывается с ZEMAX и требует очень небольшого опыта программирования. Однако ZPL язык имеет ограниченные возможности, а его машинная интерпретация приводит к замедлению выполнения сложных вычислений. Оптимизация ZPL макросов является обычно лучшим выбором для простых макрокоманд, которые выполняются довольно быстро.

Внешние программы труднее программировать, они требуют компилятора для С или какого-либо другого языка и некоторого опыта программирования Однако внешние программы могут быть значительно более сложными, чем ZPL-программы, и так как они компилируются, они выполняются значительно быстрее. Разница в скорости выполнения очень высока, так что более сложные вычисления выгоднее выполнять с внешними программами. Действительно, можно определить очень сложные внешние операторы, которые позволят трассировать миллионы лучей или производить другие длительные вычисления перед передачей данных в ZEMAX. Заметьте, этот интерфейс может быть использован для оптимизации схем на основе данных, вычисленных другими анализирующими программами, такими как программы по анализу рассеянного света.

Как язык ZPL, так и методы UDO (User Defined Operands), позволяющие использовать внешние компилированные программы, описаны ниже.

17-48                                                                                                           Chapter 17: OPTIMIZATION

Optimizing with ZPL macros

Оптимизация с использованием ZPL - программ

Если макроязык ZPL является достаточным для выполнения требуемых вычислений, то можно использовать оператор ZPLM для обращения к макросу (подпрограмме на языке ZPL) из какого-либо места таблицы оценочной функции Макрос выполняет требуемые вычисления, а затем результаты вычислений записываются путем использования ключевого слова ZPL - OPTRETURN.

Оператор ZPLM используется просто. Значения параметров lnt1 и lnt2 используются для определения номера выполняемого макроса и номера поля в матрице данных, в которое помещена вычисленная величина, соответственно. Номер макроса используется для указания макроса, который должен быть выполнен, в то время как номер поля указывает на величину, которая должна оптимизироваться.

Номер макроса должен быть целым числом между 0 и 99. Если, например, значение lnt1 для оператора ZPLM установлено равным 17, то номер макроса будет равен 17 и выполняемая подпрограмма должна иметь наименование ZPL17.ZPL. Имя макроса всегда должно содержать две цифры, определяющие его номер. Если номер макроса равен 6, то его имя должно записываться ZPL06.ZPL Файлы с программами ZPL должны помещаться в установленном для них директории для ZPL макросов; смотри главу "File Menu", в которой дано более детальное описание.

Номер поля данных может быть любым числом между 0 и 50 включительно. Это число отсылает к определенной позиции в глобальной матрице данных, ассоциируе­мой с данной схемой в памяти компьютера. Во время выполнения макроса ключевое слово OPTRETURN определяет, в какое именно поле матрицы должен быть записан результат вычислений. Имеется 51 разных полей данных, так что один макрос может быть использован для оптимизации 51 разных величин одновременно. Например, предположим, что Вам нужен макрос, который вычисляет полную длину оптической системы от поверхности 1 до плоскости изображения (этот макрос будет действовать также, как оператор TOTR). Такой макрос может иметь следующий вид:

Обратите внимание на использование ключевого слова OPTRETURN. Это ключевое слово записывает результирующую величину "х" в глобальную матрицу в позицию 0. Предположим, что этому макросу было дано имя ZPL15.ZPL. Для оптимизации величины х в таблицу оценочной функции должен быть добавлен оператор ZPLM с параметрами lnt1 =15, lnt2 = 0. После команды Update для таблицы оценочной функции величина этого оператора будет такой же, как и у оператора TOTR, и эта величина может оптимизироваться таким же образом, как и все другие.

Оператор ZPLM позволяет также использовать в таблице оценочной функции поля Нх, Ну, Рх и Ру. Данные, записанные в этих полях, могут считываться ZPL макросом с помощью ZPL функций PVHX, PVHY, PVPX и PVPX соответственно; "PV" -сокращение от "Pass Value".

Имеется одна очень важная деталь, которую нужно знать относительно номера поля данных. Если номер поля равен 0, то макрос выполняется и значение из OPTRETURN 0 записывается. Однако, если номер поля не равен 0, то макрос не выполняется, а в

 

Глава 17: ОПТИМИЗАЦИЯ                                                                                                         17 -49

указанное поле записывается соответствующее значение от предыдущего выполнения макроса. Преимущество этого условия весьма существенно. Если с помощью макроса производится вычисление многих разных величин и все они должны оптимизироваться, то достаточно только один раз обратиться к данному макросу, а доступ к вычисленным значениям может быть осуществлен с помощью нескольких ZPLM операторов. Это более эффективно, чем многократный вызов одного и того же макроса для вычисление каждой отдельной величины.

Например, предположим, что макрос под именем ZPL11.ZPL вычисляет три разных величины, каждая из которых требует оптимизации. В макросе эти величины записываются с помощью оператора OPTRETURN:

OPTRETURN 0 = х OPTRETURN 1 = у OPTRETURN 2 = z

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

ZPLM 11 0

 ZPLM 11 1

 ZPLM 11 2

Макрос ZPL11 ZPL вызывается и выполняется только один раз при обращении к оператору ZPLM 11 0. Заметьте, что значения полей Нх, Ну, Рх и Ру могут быть использованы только в том случае, если значение lnt2 = 0, так как только в этом случае макрос выполняется

Наконец, очень важно, чтобы при выполнения макроса не происходило изменений в данных оптической схемы. Эти изменения могут мешать последующим вычислениям других операторов. ZEMAX не восстанавливает схему, измененную ранее выполнен­ным макросом. Также, оператор ZPLM не должен располагаться в середине таблицы оценочной функции, а должен быть помещен либо до, либо после части таблицы, в которой записана определенная ZEMAX оценочная функция. Если во время выполне­ния макроса происходят изменения параметров схемы, то ZEMAX не может узнать об этих изменениях и не может восстановить схему к ее прежнему виду.

Этого можно было бы избежать, если бы макрос выполнялся на копии оптимизируе­мой схемы, а оригинальная схема оставалась бы без изменения, однако в настоящей редакции ZEMAX не поддерживает эту процедуру. Смысл этого в том, что могут быть случаи, когда макрос должен производить изменения параметров оптической схемы до оценки последующих операторов. В таком случае необходимо использовать два макроса. Первый должен модифицировать схему как это требуется, а второй должен восстанавливать данные, устанавливая их первоначальные значения. Оба макроса могут быть записаны в таблицу оценочной функции с промежуточными операторами, вычисляемыми для измененных данных



Поделиться:


Последнее изменение этой страницы: 2021-05-12; просмотров: 103; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.202.167 (0.008 с.)