Архитектура back-end

Для осуществления междисциплинарных расчетов логично создать консольное ядро системы, позволяющее работать с существующими моделями без создания GUI. Для этого была разработана архитектура, использующая модули старой системы в виде динамически подключаемых библиотек (dll) на ФОРТРАНе (рисунок 2.1). Интерфейсы этих библиотек (AvmodelInterface, CrmodelInterface, ModelInterface, AnazInterface)

 Рисунок — Архитектура ядра системы для командной строки

Для выполнения операций генерации и расчета модели производится вызов единственной команды с соответствующим набором ключей. Иерархия ключей состоит из ключей верхнего уровня, соответствующих командам системы ФРУНД; подключей, управляющих выполнением команд и параметров, которые являются входными данными для команд. Допустимые ключи показаны в таблице 3.1.

Ключ Подключ Описание
0 -load <ключ> Загрузка модели
1 -gen –p –a –c –m –u –t Генератор модели
2 -prep –f0 –f1 –f2 –f3 –c –dbl –omp [wildcard] Препроцессор исходников
3 -solv –p –c –s <path to solverdll> Решатель модели
4 -post -p –a –v –c Постпроцессор
5 -psolv –n <nprocs> –path <unc submodel path prefix> –i Параллельный решатель
6 -help [ключ] Справка по командной строке ключа
7 -make -exe -c <compiler> Компилятор

Для иллюстрации совместимости команд со старым пакетом программ системы ФРУНД составлена таблица совместимости (⇒). Таблица X — Список совместимости старых команд

Фрунд Fcore Новый модуль
0 Load model -load fcore
1 Перекодировка в транслит -gen -t fcore
2 FSHELL + AVMODEL–gen –aavmodel.dll
3 CRMODELN (preproc crmodeln) –gen –pfcore
4 CRMODEL –gen –c crmodel.dll
5 MODEL –gen –mmodel.dll
6 UMNFORM–gen –uumnform.dll
7 DEVF32 (preproc devf32 + preproc pointins)–prep –f0fcore
8 DEVF32 (preproc devf32_1) -prep –f1 fcore
9 DEVF32 (preproc devf32_2)-prep –f2 fcore
10 DEVF32 (preproc devf32_2)-prep –f3 fcore
11 COMDEVP (preproc comdevp)–prep –c fcore
12 DBLEPREP (preproc dblprep) –prep –dblfcore
13 preproc omp –prep –ompfcore
14 MAKE–makefcore
15 CRMODELR (preproc crmodelr)–solv –pfcore
16 CRMODEL–solv –cfcore
17 rashet32.exe–solv –sfcore
18 MPICore–psolvfcore

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

fcore --gen --prep --make

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

fcore --solve

Для параллельного расчета производится запуск команды с параметрами MPI-программы

fcore --psolve <параметры MPI>

Для реализации рассмотренной программы использовался объектно-ориентированный подход. Иерархия классов показна на рисунке 2.  Рисунок 2 Иерархия классов программы Для минимизации процесса обработки исходных кодов препроцессорами был реализован препроцессор исходных кодов, работающий по принципу конвейера. Обработка несколькими препроцессорами в старой версии системы порождала огромное количество файлов, что вносило путаницу и негативно влияло на жесткий диск. В разработанном модуле препроцессоры работают с файловыми представлениями в памяти и не сохраняют их на диск до выполнения последней ступени конвейера. Иерархия классов препроцессоров представлена на рисунке 3.  Рисунок 3 Диаграмма классов для модуля препроцессоров Для работы модулей чтения файлов модели необходимы инструменты для чтения информации о структуре и параметрах модели систем тел. В старой версии эта структура содержалась в графической оболочке. Было принято решение переноса функций для работы с моделью в программу для работы через командную строку. Для этого использована иерархия классов, позволяющая загружать файлы модели в формате редактора ФРУНД и формировать файлы расчетной схемы, поступающие на вход модулям генерации исходных кодов. Иерархия представлена на рисунке 4 и содержит классы для работы с моделью и с ее элементами: телами, силами, соединительными элементами и параметрами  Рисунок 4 Диаграмма классов для работы с форматом модели