Программа двустороннего обмена данных ПРАДИС (PRADIS) — ANSYS Fluent. Руководство по работе с модулем

Аннотация темы

В этой теме рассматривается практический порядок работы с модулем для двустороннего обмена данными между ПРАДИС (PRADIS) и внешними CAE-системами, в частности ANSYS Fluent.

Модуль является неотъемлемой частью программного комплекса ПРАДИС (PRADIS), и его инсталляция осуществляется в ходе общей установки ПРАДИС (PRADIS). О процессе установки программного комплекса ПРАДИС (PRADIS) можно прочитать в следующей статье.

Если в предыдущей теме описывалась общая архитектура обмена и принципы работы модуля, то здесь акцент сделан на практическом сценарии: какие объекты нужно добавить на схему, какие параметры заполнить и как получить готовую подсхему для ко-симуляции.


Генерация подсхемы CoSimulation

Общий алгоритм

Для генерации подсхемы необходимо выполнить несколько шагов:

  1. указать входные и выходные узлы;
  2. указать границы входных и выходных портов;
  3. указать домены;
  4. заполнить параметры объекта CoSimulation;
  5. запустить схему с генератором на расчет.

В результате будет создана подсхема, которая используется для обмена данными при совместном расчете ПРАДИС (PRADIS) и внешнего CFD-решателя.


1. Начало работы

Перед добавлением объектов для генерации необходимо создать новую схему.

Для этого в главном меню выберите:

Файл → Создать

или используйте сочетание клавиш:

Ctrl + N


После создания схемы ее необходимо сохранить под нужным названием.

Для сохранения используйте:

Файл → Сохранить

или:

Файл → Сохранить как...

Также можно использовать сочетание клавиш:

Ctrl + S

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


2. Добавление объектов узла

Для указания входных и выходных узлов подсхемы на схему добавляются объекты Port.

Они находятся в разделе:

Компоненты → Passport

После выбора библиотеки Passport необходимо добавить объект:

Passport.Port

Объект Port описывает узел будущей подсхемы. Через такие узлы будет выполняться подключение сгенерированной подсхемы к основной модели.


3. Настройка свойств Port

Чтобы открыть свойства порта, дважды щелкните левой кнопкой мыши по объекту на схеме.

В свойствах необходимо заполнить:

  1. имя объекта на схеме;
  2. название узла;
  3. описание на английском языке;
  4. описание на русском языке;
  5. тип узла.


Основные поля объекта Port

Имя объекта на схеме

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

Например:

Input1

Name

Название узла, которое используется внутри структуры модели.

Обычно оно совпадает с именем объекта на схеме.


English

Описание узла на английском языке.

Например:

Input port 1

Language2

Описание узла на русском языке.

Например:

Входной узел 1

Type

Тип узла.

Тип выбирается в зависимости от задачи и физики модели. Например:

Point

или другой доступный тип узла.


4. Добавление остальных входных и выходных узлов

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

Например:

  • входные узлы: Input1, Input2, Input3;
  • выходные узлы: Output1, Output2, Output3, Output4.

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


5. Добавление объектов границы

Для каждого порта необходимо создать объект границы Boundary.

Границы добавляются из библиотеки:

Компоненты → CFDModule

Необходимо выбрать объект:

CFDModule.Boundary

Объект Boundary связывает порт подсхемы с границей во внешнем CFD-решателе. Через него задаются ID границы, начальные значения и коэффициенты пересчета единиц измерения.


6. Настройка свойств Boundary

Чтобы открыть свойства граничного объекта, дважды щелкните по нему на схеме.

В свойствах Boundary необходимо указать:

  1. имя объекта на схеме;
  2. порт, к которому относится граница;
  3. ID порта в CFD-системе;
  4. начальные значения;
  5. входные коэффициенты пересчета;
  6. выходные коэффициенты пересчета.


Основные поля объекта Boundary

Port

Указывает, с каким объектом Port связана данная граница.

Например:

Input1

ID

Идентификатор границы во внешней CFD-системе.

Этот ID нужен для сопоставления границы в ПРАДИС (PRADIS) с границей в ANSYS Fluent.


InitialValues

Начальные значения переменных.

Они задаются по степеням свободы и зависят от типа порта и расчетной задачи.


InputCoefficients

Коэффициенты пересчета входных переменных.

Используются при передаче данных из ПРАДИС (PRADIS) во внешний решатель.


OutputCoefficients

Коэффициенты пересчета выходных переменных.

Используются при передаче результатов из внешнего решателя обратно в ПРАДИС (PRADIS).


7. Добавление остальных границ

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

Например:

  • InBoundary1;
  • InBoundary2;
  • InBoundary3;
  • OutBoundary1;
  • OutBoundary2;
  • OutBoundary3;
  • OutBoundary4.

Границы должны соответствовать ранее созданным портам. Если портов несколько, для каждого из них нужно указать свою Boundary.


8. Добавление объекта домена

После задания портов и границ необходимо описать расчетный домен.

Для этого используется объект:

CFDModule.Domain

Он добавляется из библиотеки:

Компоненты → CFDModule

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


9. Настройка свойств Domain

В свойствах домена необходимо указать:

  1. имя объекта на схеме;
  2. ID домена;
  3. тип материала;
  4. начальные значения;
  5. дополнительные параметры.


Основные поля объекта Domain

ID

Идентификатор домена.

Используется для связи описания домена с внешним решателем.


MaterialType

Тип материала домена.

Например:

Fluid

или:

Solid

Выбор зависит от постановки задачи.


InitialValues

Начальные значения для домена.

Они зависят от задачи и могут включать, например:

  • давление;
  • температуру;
  • скорость;
  • плотность.

AuxParameters

Дополнительные параметры домена.

Их состав зависит от конкретной расчетной постановки.

10. Добавление объекта CoSimulation

Последний объект, который необходимо добавить на схему, — это объект:

CFDModule.CoSimulation

Именно он отвечает за генерацию подсхемы.


11. Настройка объекта CoSimulation

В свойствах объекта CoSimulation указываются основные параметры генерации.


Параметры объекта CoSimulation

Название объекта на схеме

Имя объекта, которое отображается на рабочем поле.

Например:

CoSimulation1

Model_ID

Идентификатор модели.

Используется для различения моделей при обмене данными.


NetworkPort

Сетевой порт.

Через него будет выполняться обмен с внешним решателем.


SolvingMethods

Метод решения.

Определяет способ взаимодействия и режим расчета.


INX

Количество входных узлов.

Значение должно соответствовать числу входных портов.


OUTX

Количество выходных узлов.

Значение должно соответствовать числу выходных портов.


NetworkConnectionName

Название сетевого соединения.

Например:

Ethernet

Solver

Название внешнего решателя.

Для этой задачи указывается:

Fluent

SolverSettings

Настройки решателя.

Могут содержать дополнительные параметры, необходимые для внешнего CFD-решателя.


Domains

Список доменов.

Например:

Domain1

UnitsSystem

Система единиц.

Например:

Mechanical

или другая система, используемая в задаче.


In_Boundaries

Список входных границ.

Например:

InBoundary1, InBoundary2, InBoundary3

Out_Boundaries

Список выходных границ.

Например:

OutBoundary1, OutBoundary2, OutBoundary3, OutBoundary4

Out_File

Имя выходного файла, в который будет записана сгенерированная подсхема.

Например:

Test_SunScheme.sch

12. Генерация подсхемы

После добавления всех объектов и заполнения параметров необходимо запустить схему на расчет.

Это можно сделать через меню:

  • Моделирование

  • Также можно нажать кнопку Моделировать на панели инструментов.

Рис. 14. Запуск моделирования через панель инструментов


13. Результат генерации

После запуска расчета будет сформирован объект подсхемы для обмена данными при ко-симуляции.

Результатом является готовая подсхема, которую можно использовать для связи ПРАДИС (PRADIS) с внешним CFD-решателем.


Проверка результата

После генерации необходимо проверить:

  • создан ли файл подсхемы;
  • совпадает ли количество входных узлов с параметром INX;
  • совпадает ли количество выходных узлов с параметром OUTX;
  • указаны ли все входные и выходные границы;
  • заполнены ли ID границ;
  • корректно ли указана система единиц;
  • задан ли внешний решатель Fluent;
  • указан ли выходной файл Out_File.

Типичные ошибки

Не заполнен порт у Boundary

Если в объекте Boundary не указан Port, граница не будет связана с узлом подсхемы.


Несовпадение INX и количества входных границ

Если INX не соответствует числу входных портов, подсхема может быть сформирована некорректно.


Несовпадение OUTX и количества выходных границ

Аналогично, OUTX должен соответствовать количеству выходных узлов.


Не указан Domain

Если в CoSimulation не указан домен, внешний решатель не получит описание расчетной области.


Не указан Out_File

Если не задан выходной файл, результат генерации может быть не сохранен.


Выводы

Генерация подсхемы CoSimulation выполняется через последовательное описание:

  1. узлов Port;
  2. границ Boundary;
  3. доменов Domain;
  4. объекта CoSimulation.

После заполнения всех параметров схема запускается на расчет, и ПРАДИС (PRADIS) формирует готовую подсхему для обмена данными с внешним CFD-решателем.

Такой подход позволяет стандартизировать настройку ко-симуляции и упростить подготовку связанных 1D–3D CFD-расчетов.

Сборка DLL-библиотеки с UDF для Fluent

В данной теме рассматривается процесс сборки DLL-библиотеки с UDF-функциями для ANSYS Fluent, используемой при организации двустороннего обмена данными с ПРАДИС (PRADIS).

Такая библиотека обеспечивает:

  • передачу граничных условий из ПРАДИС (PRADIS) в Fluent;
  • получение результатов CFD-расчета;
  • синхронизацию шагов расчета;
  • выполнение ко-симуляции 1D–3D моделей.

Основные этапы настройки

Общий алгоритм сборки и подключения DLL

  1. Создание структуры папок UDF;
  2. Добавление исходных .c и .h файлов;
  3. Первичная сборка через Fluent;
  4. Подключение библиотек связи с ПРАДИС (PRADIS);
  5. Настройка user_nt.udf;
  6. Сборка DLL через nmake;
  7. Загрузка DLL в Fluent;
  8. Настройка UDF hooks;
  9. Назначение UDF на границы;
  10. Настройка соединения с ПРАДИС (PRADIS);
  11. Запуск совместного расчета.

Создание необходимого набора папок и файлов

Подготовка исходных файлов

Для начала необходимо добавить файлы:

  • inlet.c;
  • clientAPI.h;
  • cfd_enums.h;

в директорию, где расположен проект Fluent (.cas файл).

После этого открывается проект Fluent.


Первичная сборка UDF в Fluent

Компиляция через меню User Defined

В Fluent необходимо перейти:

User Defined → Functions → Compiled

Далее нужно:

  1. выбрать режим Compiled;
  2. добавить .c и .h файлы;
  3. указать имя библиотеки;
  4. нажать кнопку Build.

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


Создание структуры папок UDF

После выполнения Build появляется папка:

udflib

Внутри создаются основные каталоги:

srcwin64


Структура папки win64

В папке win64 Fluent создает директории для конкретного режима расчета:

  • 2d_node;
  • 2d_host;
  • 3d;
  • и т.д.

Внутри располагаются:

  • makefile;
  • user_nt.udf;
  • ud_io1.h;
  • log;
  • объектные файлы.


Подключение библиотеки PradisClientCAPI.lib

Размещение библиотеки клиента ПРАДИС (PRADIS)

В папку:

udflib/src

необходимо добавить библиотеку:

PradisClientCAPI.lib

В этой же директории обычно находятся:

  • inlet.c;
  • PradisClientCAPI.h;
  • PradisClientCAPI.lib.


Настройка user_nt.udf

Подключение USER_OBJECTS

Далее открывается файл:

win64/2d_node/user_nt.udf

или:

win64/2d_host/user_nt.udf

В него добавляется строка:

USER_OBJECTS = $(SRC)PradisClientCAPI.lib

Эта строка сообщает Fluent, что при сборке необходимо подключить библиотеку взаимодействия с ПРАДИС (PRADIS).


Вариант с несколькими библиотеками

Использование PradisMasterCAPI.lib

В некоторых вариантах ко-симуляции используется несколько библиотек:

  • PradisMasterCAPI.lib;
  • SocketLib.lib;
  • util.lib.

Они также размещаются в папке:

udflib/src


Подключение нескольких библиотек

В файл user_nt.udf добавляется строка:

USER_OBJECTS = $(SRC)PradisMasterCAPI.lib $(SRC)SocketLib.lib $(SRC)util.lib

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


Подготовка окружения Visual Studio

Инициализация vcvars64

Для корректной сборки DLL необходимо использовать:

Developer Command Prompt for Visual Studio

Далее нужно перейти в директорию:

Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build

и выполнить:

vcvars64

После этого командную строку закрывать не нужно.


Настройка переменных Fluent

Настройка FLUENT_INC и PATH

В терминале Visual Studio command prompt необходимо указать:

set FLUENT_INC=D:\Programs\ANSYS\v192\fluent

и путь к resolve.exe:

set PATH=D:\Programs\ANSYS\v192\fluent\ntbin\win64;%PATH%

Это необходимо для доступа к компилятору Fluent и служебным библиотекам.


Очистка предыдущей сборки

Использование nmake clean

После настройки окружения нужно перейти в папку:

udflib\win64\2d_node

или:

udflib\win64\3d

Далее выполняется команда:

nmake clean

Она удаляет предыдущие результаты сборки.


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

После очистки можно проверить содержимое папки и наличие обновленного log-файла.


Сборка DLL-библиотеки

Компиляция через nmake

Теперь выполняется команда:

nmake

Если сборка проходит успешно, появляется библиотека:

libudf.dll


Проверка созданной DLL

После успешной сборки в папке должны появиться:

  • libudf.dll;
  • libudf.lib;
  • libudf.exp;
  • объектные файлы.


Перенос DLL рядом с проектом Fluent

Подготовка рабочей директории

Полученную библиотеку необходимо перенести рядом с проектом Fluent.

Перед этим важно убедиться, что старая версия DLL не загружена.


Загрузка DLL в Fluent

Подключение libudf.dll

В Fluent открывается менеджер UDF-библиотек.

После загрузки библиотеки в консоли должно появиться сообщение:

Done

Это означает успешную загрузку UDF.


Настройка брандмауэра Windows

Разрешение сетевого взаимодействия

Для корректной работы TCP/IP обмена необходимо создать правило в:

Монитор брандмауэра Защитника Windows

Добавляется разрешение для:

fl1920.exe

или другого исполняемого файла Fluent.


Проверка директории Fluent

Проверка исполняемого файла fl*1920.exe

После настройки правил необходимо проверить директорию Fluent, из которой используется:

fl*1920.exe

Для разных режимов расчета используются разные каталоги:

  • 2d;
  • 2d_node;
  • 2ddp_node;
  • 3d.


Настройка UDF-функций

Переход в раздел User Defined

Все пользовательские функции Fluent настраиваются через вкладку:

User Defined


Назначение Function Hooks

Настройка основных UDF hooks

В разделе:

User Defined → Function Hooks

назначаются функции:

  • Initialization;
  • Execute at End;
  • Execute at Exit.

Например:

my_init_func::libudfexecute_at_end::libudfexecute_at_exit::libudf


Execute on Demand

Настройка stop_calc

Для возможности разрыва соединения без закрытия Fluent используется функция:

stop_calc

Она назначается через:

Execute on Demand


Назначение ID граничных условий

Проверка Boundary IDs

Во Fluent каждой границе соответствует собственный ID:

  • inlet;
  • outlet;
  • wall;
  • и т.д.

Эти ID затем используются в объектах Boundary внутри ПРАДИС (PRADIS).


Назначение UDF на границы

Настройка Pressure Inlet

Для входной границы необходимо выбрать соответствующую UDF-функцию.

Например:

Gauge Total Pressure → udf inlet_parab::libudf

Таким образом Fluent получает давление напрямую от ПРАДИС (PRADIS).


Настройка inlet.ini

Настройка IP-адреса и порта

Для соединения с ПРАДИС (PRADIS) необходимо создать файл:

inlet.ini

В нем указывается:

192.168.X.XXX2000

где:

  • первая строка — IP-адрес;
  • вторая строка — TCP/IP порт.

Файл должен находиться рядом с inlet.c.


Инициализация расчета

Запуск Initialize

Перед запуском ко-симуляции необходимо выполнить инициализацию Fluent.

В разделе:

Solution Initialization

нажимается кнопка:

Initialize


Настройка Run Calculation

Параметры временного расчета

В разделе:

Run Calculation

задаются:

  • Time Step Size;
  • Number of Time Steps;
  • Max Iterations / Time Step.

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

Calculate


Настройки расчета в ПРАДИС (PRADIS)

Объект Dynamic

В объекте Dynamic необходимо настроить:

  • конечное время интегрирования;
  • шаг интегрирования;
  • допустимые погрешности;
  • параметры итераций;
  • метод интегрирования.

В примере используется:

end = 50.0


Настройки расчета в ANSYS Fluent

Переходный временной анализ

Во вкладке:

General

необходимо выбрать режим:

Transient

Также задаются:

  • Pressure-Based;
  • Absolute Velocity Formulation.

Эти параметры необходимы для корректного нестационарного обмена с ПРАДИС (PRADIS).


Запуск совместного расчета

Порядок запуска

Последовательность запуска ко-симуляции:

  1. выполнить Initialize во Fluent;
  2. проверить настройки времени;
  3. запустить расчет в ПРАДИС (PRADIS);
  4. убедиться в появлении сообщения:
Successfully binded
  1. после этого запустить расчет во Fluent.

Итоги

DLL-библиотека с UDF обеспечивает полноценный двусторонний обмен данными между ПРАДИС (PRADIS) и ANSYS Fluent.

После настройки:

  • Fluent получает граничные условия из ПРАДИС (PRADIS);
  • выполняет CFD-расчет;
  • передает результаты обратно в 1D-модель;
  • поддерживает синхронную ко-симуляцию по времени.