При решении современных задач моделирования часто возникает задача совместного использования нескольких различных решателей, возможно запущенных на разных узлах компьютерной сети. Для решения этой задачи могут быть использованы как низкоуровневые библиотеки, такие как MPI, либо пакеты библиотек высокого уровня, например, различные реализации High-level architecture (HLA). Использование низкоуровневых решений сопряжено с некоторыми характерными сложностями, такими как необходимость разработки протокола взаимодействия, отслеживания целостности и т.п. Решения же высокого уровня либо являются закрытыми, и потому плохо подходят для использования в пользовательских кодах моделирования, либо, в случае HLA, не определяют низкоуровневый протокол, что приводит к необходимости использовать для всех кодов моделей решения одного производителя (т.н. vendor lock-in).
Предлагаемое программное решение заимствует некоторые аспекты HLA, однако имеет более простую архитектуру и значительно упрощенный программный интерфейс. Это достигается за счет некоторого ограничения функциональности: в отличие от многоцелевой архитектуры HLA, предлагаемое решение ограничивается рассмотрением задачи совместного моделирования (косимуляции) во временной области. С архитектурной точки зрения, предлагаемое решение состоит из одного серверного компонента и нескольких (или многих) клиентских. Серверный компонент представляет из себя отдельное сервисное приложение, производящее согласование и передачу данных между клиентскими компонентами. Клиентские компоненты встраиваются в коды моделей при помощи библиотеки с использованием API, состоящего из 5 основных функций: открытия соединения с серверным компонентом, указания имени инстанции и перечисления требуемых внешних по отношению к инстанции переменных, объявления экспортируемых переменных, запроса текущего времени симуляции и согласования текущего шага симуляции.
Протокол передачи данных между клиентскими и серверным компонентами определяется при помощи Google Protocol Buffers, что позволяет получить двоично-совместимый протокол независимо от способов передачи данных, платформ и деталей реализации. Данные передаются при помощи разделяемой памяти в пределах одного узла, либо по протоколу TCP/IP между узлами компьютерной сети. При адаптации существующего кода решателей дополнительные требования для совместимости с предлагаемым решением ограничиваются возможностью оценки следующего шага по времени и возможностью получения решения для любого заданного момента времени. Первое требование выполняется в большинстве случаев автоматически, поскольку оценка следующего шага обычно известна заранее. Второе требование легко выполняется при помощи интерполяции решения. Все программные компоненты реализованы на языке ISO C++11, с использованием открытых библиотек Google Protocol Buffers и Boost C++. При этом, заголовки, определяющие программный интерфейс клиентской библиотеки, соответствуют стандарту ISO C++03. Совокупность этих факторов позволяет говорить о высокой переносимости кода и возможности написания программных интерфейсов для других языков программирования, таких как Python, Ocaml и др. Подробное описание протокола передачи данных и программные коды под открытой лицензией доступны в сети Интернет на сайте http://github.com/lierdakil.
Использование этого решения успешно продемонстрировано при исследовании проходимости судов на воздушной подушке с гибким ограждением типа Бертена. Гибкое ограждение типа Бертена — это набор гибких оболочек различных размеров, имеющих форму усеченного конуса. Модель АСВП представляет из себя комплексную модель, описывающую работу двигателей, маховых движителей, аэродинамическое сопротивление корпуса и т. п., и несколько экземпляров модели гибких бертеновских конусов. Комплексная модель представляется в виде системы ОДУ для уравнений движения твердого тела в трехмерном пространстве. Нагнетатели и движители описываются интерполяционными функциями на основе аэродинамических расчетов методом конечных элементов. Используется решатель Sundials CVODE для жестких систем ОДУ. Модель бертеновского конуса использует конечные трапециевидные элементы для моделирования упругих свойств, с учетом растягивающих, сжимающих, сдвиговых и деформаций кручения. Учитывается взаимодействие оболочки с трехмерной подстилающей поверхностью. Динамика давления в оболочке описывается на основе полуэмпирических формул. Для каждой оболочки используется решатель Sundials IDA для жестких систем ДАУ.
Таким образом, предлагаемое программное решение, хотя уступает в функциональности существующим аналогам, в силу простоты программного интерфейса и высокой переносимости кода, может с успехом применяться для исследовательских проектов, в которых требуется совместное моделирование во временной области.