Телескопы покупают здесь


A A A A Автор Тема: РОС - программа расчёта оптики телескопов  (Прочитано 68031 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 6 314
  • Благодарностей: 347
    • Сообщения от ekvi
Поддерживает ли программа дифракционные решетки?
А что требуется?
Попытайтесь сформулировать задачу, абстрагировавшись от конкретики.

Оффлайн NotSodern

  • *****
  • Сообщений: 1 002
  • Благодарностей: 28
  • Мне нравится этот форум!
    • Сообщения от NotSodern
А что требуется?
Интересует есть ли в программе возможность смоделировать дисперсионный спектрометр с дифракционной решеткой. Схему Черни-Тернера к примеру

Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 6 314
  • Благодарностей: 347
    • Сообщения от ekvi
есть ли в программе возможность смоделировать
Симитировать оптическую схему Вы можете в любой программе.
Но Вы ведь так и не сформулировали свою задачу.
Если формально, то в схеме Черни-Тернера используются пространственно разнесённые элементы, и я не возьмусь за расширение РОС на этот случай.
Но если подойти конструктивно, то схема Черни-Тернера может быть заменена 3 зеркалами:
- первое - переводит расходящийся от входной щели пучок лучей - в параллельный, который далее
- отражается от диф.решётки (2-е зеркало) и падает на
- 3-е зеркало, фокусирующее диспергированный свет на приёмник.
Все 3 зеркала садим на одну оптическую ось - и экспериментальная модель готова (см. 2-ю илл.)
Первые 2 зеркала - 2х-зеркальный микроскоп Бёрча, преобразующий парал. пучок в сходящийся, остальные - описаны выше, первое и 3-е совмещены и для исправления сф. абер. асферизованы (параболоиды).
« Последнее редактирование: 19 Фев 2019 [17:37:24] от ekvi »

Оффлайн Gleb1964

  • *****
  • Сообщений: 2 161
  • Благодарностей: 275
    • Сообщения от Gleb1964
Не годиться. К примеру, в сканирующем монохроматоре, построенном по схеме Черни-Тернера, внеосевая кома коллимирующего зеркала балансируется через анаморфное увеличение на дифракционной решетке так, что компенсирует кому фокусирующего зеркала на определенной длине волны, выбранной где-нибудь в середине сканируемого диапазона спектра. А что толку будет, если все зеркала разместить на оси?

Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 6 314
  • Благодарностей: 347
    • Сообщения от ekvi
Не годится
В 1978м я застал оптиков, работавших в опытно-экспериментальном цехе в 1940-1950е. Они поведали, как работали немцы. Например, нужен был гаечный ключ на 13, а его под рукой нет. Немец, пиная воздух, мог полдня ходить по цеху, разыскивая ключ именно на 13 - потому, что он педантично настроен на времяпрепровождение. А наш сборщик - подставит отвёртку и за секунду решит проблему.

Так и здесь. Всё зависит от задачи и от мотивированности: решать или морщить лоб, имитируя бурную деятельность (ибд).

Что касается компенсации полевых аберраций в "косых" системах, то Губель - единственный из мне известных оптиков, который отважно взялся за теорию вопроса. При желании можно привлечь его результаты к оценке допустимости применения предложенной модели в каждой конкретной задаче.
« Последнее редактирование: 20 Фев 2019 [15:26:17] от ekvi »

Оффлайн NotSodern

  • *****
  • Сообщений: 1 002
  • Благодарностей: 28
  • Мне нравится этот форум!
    • Сообщения от NotSodern
в схеме Черни-Тернера используются пространственно разнесённые элементы, и я не возьмусь за расширение РОС на этот случай.
не могли бы Вы пояснить не специалисту в разработке программного обеспечения для расчета оптических систем в чем заключается сложность?
« Последнее редактирование: 20 Фев 2019 [11:24:46] от NotSodern »

Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 6 314
  • Благодарностей: 347
    • Сообщения от ekvi
в чем заключается сложность?
Моя программа, как и большинство аналогичного софта, ориентирована на расчёт осесимметричных оптических систем (ОС).
А у ОС Черни-Тернера оптическая ось несколько раз сломана на силовых элементах. В этом случае возникают нетривиальные аберрации, теория расчёта которых находится в "противозачаточном" состоянии - т.е. нет точного математического (в виде формул) аппарата, который можно было бы без труда перевести в программный код.

Лучше Вы опишите проблему, с которой Вы столкнулись.
А там - по ходу пьесы - и Вы успеете познакомиться с оптикой, и я - покумекаю, как без надсады приспособить свой софт под новую задачу.
« Последнее редактирование: 20 Фев 2019 [15:40:12] от ekvi »

Оффлайн NotSodern

  • *****
  • Сообщений: 1 002
  • Благодарностей: 28
  • Мне нравится этот форум!
    • Сообщения от NotSodern
Задачу поставил себе - рассчитать дисперсионный спектрометр в спектральном диапазоне 700-1000нм. Спектральное разрешение не хуже 0.5нм. числовая апертура не хуже 1/3, лучше 1/2. Проблема сейчас в поиске инструмента в котором можно провести точный расчет.
« Последнее редактирование: 21 Фев 2019 [08:49:08] от NotSodern »

Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 6 314
  • Благодарностей: 347
    • Сообщения от ekvi
рассчитать дисперсионный спектрометр
С этого и надо было начинать!
 Без изучения теории оптических систем - пустой номер.
И познакомьтесь с Земаксом - хотя бы на уровне версии http://yadi.sk/d/gk1yD_qF3LyZi.
Если он не подойдёт, спросите у Алексея Юдина или у Gleb1964 - они более осведомлены в современных расчётных программах.
Если готового софта не окажется - придётся либо "руки в гору", либо "карабкаться по каменистым тропам науки" - изучать Губеля (теорию несимметричных опт. систем) и делать свою программу.

Вот такой алгоритм решения Вашей задачи.

Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 6 314
  • Благодарностей: 347
    • Сообщения от ekvi
Вот такой алгоритм решения Вашей задачи.
Дополнительно: скачайте и изучите программу WinSpot32:
http://yadi.sk/d/wXecLMG-A4zNL
Это - то, что Вам нужно (см. илл.).

Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 6 314
  • Благодарностей: 347
    • Сообщения от ekvi
В последние 2 года делались неоднократные попытки использовать аппаратное ускорение расчётов оптики, особенно при оптимизации ОС, на нескольких ядрах центрального процессора и на видеокарте по технологиям NVIDIA и OpenCL.
Всё это отлично работает на пустых циклах демоверсий, особенно с целочисленными аргументами, но при переходе к реальной работе сдувается и оборачивается в откровенный тормоз.

Вот последние результаты, полученные на моём вычислительном комплексе.
В таблицах на илл. 1 приведены:
- время вычисления одного значения целевой функции Tcp и Tgp,
- значения функций GPUallAber и CPUallAber в микрометрах,
- значения целевой функции для каждого луча, в миллиметрах для 5 углов поля, 5 линий спектра и 16 координат на входном зрачке, всего 5 * 5 * 16 = 400 лучей (и 400 нитей GPU).

На  илл. 1 сделано сопоставление вычислений целевой функции на одном ядре процессора в обычном (последовательном) режиме – CPU, на видеокарте по технологии NVIDIA (GPU, слева) и на 4х ядрах того же процессора по технологии OpenCL (GPU, справа). В обоих случаях время вычисления в параллельном режиме оказывается больше, чем в обычном, но на 4х ядрах оно существенно меньше, чем на видеокарте.
 
Скриншот программы AIDA64 GPGPU с подробными характеристиками вычислительного комплекса: CPU и GPU. Тактовая частота на видеокарте в 2 раза ниже, чем на процессоре. (см. илл.2).

Ниже в таблице приведена статистика использования акселераторов. Указано время в секундах на один шаг оптимизации по методу BFGS (при котором целевая функция вычисляется 12 тысяч раз) и процент загрузки исполнительных устройств.
В этой таблице использованы следующие обозначения:
     nVar – число параметров ОС, задействованных в оптимизации,
     Intel4kern – в качестве акселератора использовался 2х-ядерный 4х-поточный процессор In-tel, с частотой 3.5 ГГц,
     GPU – видеокарта NVIDIA GeForce GTX-1060 с частотой 1.7 ГГц,
     CPU1kern – одно ядро того же процессора Intel4kern.

Таблица. Сопоставление скорости счёта на CPU и на GPU

Зон/лучей /Звёзд/сп.лин. nVar Intel4kern(% загр) GPU(% загр) CPU1kern(% загр)
4  / 16       /  3     /  3         16           7"      (100%)   16"  (14%)          1.3"  (25%)
4  / 61       /  5     /  5         16          10"     (100%)   18"  (19%)            9"   (25%)
5  / 91       /  5     /  5         16          12"     (100%)   21"  (19%)          19"   (25%)
7  /169      /  7     /  5         16          19"     (100%)   24"  (19%)          42"   (25%)
15 /721     /  9     /  5         16         180"    (100%)   132" (19%)        250"  (25%)

Из приведённой статистики видно, что применять ускорители целесообразно только при обработке очень больших массивов данных, начиная с 5 зон (91 луч), 5 звёзд и 5 спек-тральных линий.
На реальных нагрузках (4 зоны, 61 луч, 5 звёзд, 5 спектральных линий)  одноядерный процессор CPU1kern начинает лидировать. А на сокращённом алгоритме (4 зоны, 3 звезды, 3 спектральные линии и 16 «магических» лучей) CPU на одном ядре вообще становится недосягаемым для ускорительных технологий – ни для 4х-поточного процессора, ни, тем более, для видеокарты.

Объяснение банальное. Изменив параллельно все элементы ОС, оптимизатор вынужден все дальнейшие процедуры (вычисление целевой функции, численное дифференцирование и спуск по целевой функции) совершать над одним-единственным объектом – ОС. Это принуждает все параллельные нити к постоянному взаимному ожиданию для доступа к ОС.
С целью изоляции параллельных нитей перед использованием «девайса» (ускорителя) приходится на «хосте» дублировать для «девайса» все основные параметры-массивы. Затем для каждой нити размножать эти массивы и засылать их в память акселератора. По окончании вычислений каждый раз возвращать результаты с ускорителя – обратно на «хост».

Не выручает даже «переезд» на видеокарту: процедуры прогона лучей на видеокарте выполняются в том же, последовательном режиме, но с вдвое меньшей скоростью (тактовая частота процессора в 2 раза выше тактовой частоты видеокарты).

Всё выше перечисленное приводит к тому, что «параллельная» оптимизация ОС априори не может быть эффективной.
Четырёхкратный эффект, полученный А.Г. Водяником в программе «LINZIK», объясняется применением сторонних программных вставок, составленных профессионалами, в которых используются высокоэффективные процедуры обращения с памятью. Но это – не более чем организационный эффект, не связанный с распараллеливанием задачи.

На этом эксперименты прекращены.
« Последнее редактирование: 23 Фев 2019 [14:14:36] от ekvi »

Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 6 314
  • Благодарностей: 347
    • Сообщения от ekvi
Посмотрел повнимательней WinSpot. Исходники есть, и, в принципе "расширить" РОС - на раз-два, но ...
Посмотрите на пятна по полю: скулу сводит от их кривизны! Хотя пятна намного меньше кружка Эйри, но гарантия, что никакая "подруга-дифракция" не исправит это уродство - разрешения по полю не будет (ГЗ - тороид, поле - 1/4 градуса).

Оффлайн NotSodern

  • *****
  • Сообщений: 1 002
  • Благодарностей: 28
  • Мне нравится этот форум!
    • Сообщения от NotSodern
Исходники есть, и, в принципе "расширить" РОС - на раз-два, но ...
Посмотрите на пятна по полю: скулу сводит от их кривизны!
рад что решение проще чем предполагалось. 

Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 6 314
  • Благодарностей: 347
    • Сообщения от ekvi
Начал внедрять код из WinSpot в ROS и ... засомневался в его правоте.
Возьмём систему Стевика-Пауля: автор поразил астрономический мир - система идеальная на поле 0.5 градуса.

Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 6 314
  • Благодарностей: 347
    • Сообщения от ekvi
Введём в программу WinSpot известный осесимметричный 3х-зеркальный телескоп Чуриловского: ГЗ- асферика, 2 и 3 - сферы.
Пятна едва влезают в кружок Эйри даже при Ф200 мм и поле в 0.2 градуса.
« Последнее редактирование: 01 Мар 2019 [15:57:14] от ekvi »

Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 6 314
  • Благодарностей: 347
    • Сообщения от ekvi
Но на самом деле система Чуриловского Ф 245 мм даёт идеальное поле в 0.5 градуса: пятно намного меньше кружка Эйри.

Так что "на раз-два" отменяется!
Придётся не только код "справа-налево" вычитывать, но и алгоритм выправлять
« Последнее редактирование: 01 Мар 2019 [16:00:59] от ekvi »

Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 6 314
  • Благодарностей: 347
    • Сообщения от ekvi
Одно соображение по поводу "глобальной" оптимизации.
Представьте, что мы попали на планету, покрытую густым лесом, причём внешне она имеет вид идеального шара - наподобие одуванчика.
Перед нами стоит задача: просканировать поверхность планеты и построить её рельеф.
Мы спускаем зонд до упора и замеряем длину троса. Пробы делаем через каждый километр. По результатам исследования получаем плавный профиль с глубиной неровностей не более 50 м. Вывод: равнинная планета.

Но вдруг лес сгорает (одуванчик оголился!) и перед нашим взором открывается скалистая планета с неровностями более 500 м.
Оказывается наш зонд всякий раз упирался в ветку, а высота деревьев - из-за разницы в плодородности почвы - сильно разнилась.

Вот такую же картину даёт нам и "ковровая бомбардировка", с помощью которой мы исследуем пространство параметров неизвестной системы, получая ложное представление о её реальных возможностях.
Щуп зонда должен быть очень тонким - значительно Уже периода часто осциллирующей целевой функции, а исследованию необходимо подвергать ВЕСЬ интервал.

Казалось бы ситуация безнадёжная ... но, повторюсь, спасает само ТЗ: его рамки настолько узкИ, что в большинстве случаев задачу оптимизации решает практически любой локальный оптимизатор, которому оказывается по силам просканировать весь интервал и найти на нём наименьшее значение целевой функции.
« Последнее редактирование: 03 Мар 2019 [10:12:28] от ekvi »


Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 6 314
  • Благодарностей: 347
    • Сообщения от ekvi
Алгоритм прогона лучей в программе WinSpot:
//
procedure PlotTrace;
var i: integer; ZI, LI: float;
begin
 for i:=0 to ns-1 do
 begin
// прогон луча через i-поверхность по самодельному алгоритму, без использования формул Федера:
  TraceRay(i);
// преобразование значений координат и углов:
  if (tilt(i) <> 0.0) then
  begin
   ZI := x;
   if (i <> (ns-1)) then
   begin
    LI := w;
    w := w * uco + u * usi ;
    u := u * uco - LI * usi ;
    x := x * uco - z * usi ;
   end;
   z := z * uco + ZI * usi ;
  end;
 end;
end;
 Это - в принципе неверный алгоритм. Сначала находится точка пересечения луча в осесимметричной системе. Затем эта точка поворачивается вместе с поверхностью на угол  поворота самой поверхности. Таким образом, исследуются ошибки  не у "складной", а у осесимметричной системы, которая складывается  после прогона лучей.
//===================================================================
Алгоритм прогона лучей в программе FOS.
// перенос начала системы координат в вершину очередной поверхности:
  x:=ll(i)-x;
// угол поворота поверхности относительно оптической оси:
 a:=tlt/Ra;
 if (a <> 0.0) then
 begin
// поворот местной системы координат в меридиональной плоскости на угол a = tilt:
  si:=sin(a);
  co:=cos(a) ;
  zi:=x;
  Li:=v;
// и преобразование значений координат и углов в новой системе координат: 
// x - размеры вдоль оптической оси, y - ордината в меридиональной плоскости,
// z - ордината в сагиттальной плоскости; w и z не изменяются:
  v:=v*co+u*si;
  u:=u*co-Li*si;
  x:=x*co-y*si;
  y:=y*co+zi*si;
// далее идёт алгоритм прогона луча через повёрнутую поверхность по формулам Федера (через сфер. или асфер. поверхность).
// Здесь на поверхность падает луч с учётом изменения координат X и Y. Угол падения V увеличивается на угол tlt - угол поворота
// поверхности в меридиональной плоскости.

На иллюстрации - пример системы, рассчитанной по выправленному алгоритму:

Но овчина не стоила выделки!
С самого начала было ясно: получить удовлетворительную волновую ошибку не удастся. А пятно - как известно - даже ничтожно малое, но кривое, - не показатель качества визуальной системы.
Ситуация - аналогичная, как с суперапохроматами: хорошего исправления удаётся получить лишь при очень малых светосилах, когда ошибки и так невелики ...
« Последнее редактирование: 19 Мар 2019 [15:28:11] от ekvi »

Оффлайн Дмитрий Серегин

  • ****
  • Сообщений: 272
  • Благодарностей: 11
  • Мне нравится этот форум!
    • Сообщения от Дмитрий Серегин
    • dseregin.nm.ru