25 августа 2015

Обработка ошибок в pSeven

Для решения прикладных инженерных задач программный комплекс pSeven позволяет строить сложные многоуровневые расчетные схемы. Такие расчетные схемы, особенно для анализа данных и многодисциплинарной оптимизации, содержат большое число интеграционных CAD/CAE блоков: одни блоки строят твердотельные модели, другие выполняют конечно-элементный анализ.

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

Шаг 1. Настройка отдельных блоков

Для того чтобы предотвратить преждевременную остановку работы всей расчетной схемы, в случае ошибки в одном из блоков, следует определить поведение блоков в таких ситуациях (Error handling behavior).

В качестве примера рассмотрим блок SolidWorks (рисунок 1 и рисунок 2). Этот блок, в случае ошибки, позволяет в качестве значений выходных портов выводить значения по умолчанию (output defaults and signal), а не останавливать расчетную схему (stop workflow).

Рис. 1. Интерфейс блока SolidWorks

Рис. 2. Вкладка настроек блока SolidWorks

При решении прикладных задач наиболее часто используемым блоком является блок ShellScript. C помощью этого блока реализуется интеграция сторонних решателей в pSeven. Например, коммерческих программ, таких как ANSYS, ABAQUS и т.д., либо иных специализированных (in-house) программ (рисунок 3).

Рис. 3. Интерфейс блока ShellScript

Блок ShellScript генерирует ошибку в следующих ситуациях:

  • расчетная программа завершилась со значением Exit code, который отсутствует в списке Success codes;
  • исчерпан timeout (время ожидания) на выполнение программы;
  • программа выводит сообщения в стандартный поток ошибок.

У пользователя есть возможность управлять перечисленными настройками (рисунок 4).

Рис. 4. Вкладка настроек блока ShellScript

Шаг 2. Настройка взаимодействия блоков

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

2.1. Определение значений по умолчанию для выходных портов

В качестве примера рассмотрим связь блоков ShellScript и Text в следующей расчетной цепочке (рисунок 5).

Рис. 5. Расчетная цепочка c блоком ShellScript

Что можно указать в качестве значений по умолчанию выходным портам блока ShellScript? Выходными портами данного блока являются файлы с результатами расчета той или иной программы. Эти файлы, как правило, затем передаются на блок Text для извлечения численных результатов. В pSeven, по умолчанию, если в результате ошибки в блоке ShellScript файлы с результатами не были сгенерированы, то на следующий блок в качестве результатов передаются пустые файлы.    

При этом, если на входной порт блока Text, пришел пустой файл или файл, в котором по каким-либо причинам, отсутствуют данные для обработки, то можно определить значения по умолчанию NaN для выходных портов блока Text (рисунок 6).

Рис. 6. Порты блока Text

В качестве второго примера рассмотрим блок SolidWorks (рисунок 1) в оптимизационной расчетной цепочке, представленной на рисунке 7.

Рис. 7. Расчетная цепочка с блоком SolidWorks

В данном случае, выходному порту mass присвоено значение по умолчанию NaN (рисунок 8). Таким образом, если SolidWorks не может перестроить модель по заданным входным значениям параметров и вычислить массу (mass) модели, то в качестве результирующего значения массы оптимизатору будет передано значение NaN. 

Рис. 8. Порты блока SolidWorks

Почему именно NaN? В pSeven принято соглашение, в соответствии с которым, все алгоритмы анализа данных и оптимизации воспринимают NaN как значение функции, которое вышло за пределы области ее значений (иными словами, рассматривается как неопределенное значение функции) и эффективно используют эту информацию в процессе решения задачи.

2.2. Обработка ошибок с использованием блока Condition

Идея заключается в том, чтобы использовать блок Condition в качестве ключа (switch). Каждый блок в pSeven имеет выходной порт done, который можно рассматривать в качестве выходного статуса блока: значение done равно True в случае успешного завершения работы блока, иначе – False.

В представленном примере (рисунок 9), блок Condition принимает выходные данные блока ANSYS и анализирует его выходной статус. В зависимости от значения этого статуса, блок Condition либо передает эти выходные данные в блок Text, либо, в случае ошибки, запускает блок Const, который выдает значения NaN.

Рис. 9. Расчетная цепочка с блоком Condition

 

Динара Шварц, Инженер-расчетчик, DATADVANCE

LinkedIn
VK

Заинтересовало решение?

Нажмите, чтобы запросить бесплатную 30-дневную демоверсию.

Запросить демо