=== Архитектура back-end === Для осуществления междисциплинарных расчетов логично создать консольное ядро системы, позволяющее работать с существующими моделями без создания GUI. Для этого была разработана архитектура, использующая модули старой системы в виде динамически подключаемых библиотек (dll) на ФОРТРАНе (рисунок 2.1). Интерфейсы этих библиотек (AvmodelInterface, CrmodelInterface, ModelInterface, AnazInterface) {{:an0.png| Рисунок — Архитектура ядра системы для командной строки }} Для выполнения операций генерации и расчета модели производится вызов единственной команды с соответствующим набором ключей. Иерархия ключей состоит из ключей верхнего уровня, соответствующих командам системы ФРУНД; подключей, управляющих выполнением команд и параметров, которые являются входными данными для команд. Допустимые ключи показаны в таблице 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 ** |Решатель модели | |4| -post | -p **–a** –v –c| Постпроцессор| |5| -psolv | //–n –path –i// | Параллельный решатель | |6| -help | [ключ] |Справка по командной строке ключа | |7| -make | **-exe -c ** | Компилятор | Для иллюстрации совместимости команд со старым пакетом программ системы ФРУНД составлена таблица совместимости (=>). Таблица X — Список совместимости старых команд ^ № ^ Фрунд ^ Fcore ^ Новый модуль^ |0| Load model| -load| fcore| |1| Перекодировка в транслит| -gen -t| fcore| |2| FSHELL + AVMODEL|--gen –a|avmodel.dll| |3| CRMODELN (preproc crmodeln)| --gen –p|fcore| |4| CRMODEL| --gen –c| crmodel.dll| |5| MODEL| --gen –m|model.dll| |6| UMNFORM|--gen –u|umnform.dll| |7| DEVF32 (preproc devf32 + preproc pointins)|--prep –f0|fcore| |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 –dbl|fcore| |13| preproc omp| --prep –omp|fcore| |14| MAKE|--make|fcore| |15| CRMODELR (preproc crmodelr)|--solv –p|fcore| |16| CRMODEL|--solv –c|fcore| |17| rashet32.exe|--solv –s|fcore| |18| MPICore|--psolv|fcore| Таким образом, процедура генерации по умолчанию сводится к выполнению команды fcore --gen --prep --make На выходе будет образован исполнимый модуль в виде динамической библиотеки, которая также запускается командой fcore. Для шага расчет достаточно выполнения команды fcore --solve Для параллельного расчета производится запуск команды с параметрами MPI-программы fcore --psolve <параметры MPI> Для реализации рассмотренной программы использовался объектно-ориентированный подход. Иерархия классов показна на рисунке 2. {{:an1.png| Рисунок 2 Иерархия классов программы}} Для минимизации процесса обработки исходных кодов препроцессорами был реализован препроцессор исходных кодов, работающий по принципу конвейера. Обработка несколькими препроцессорами в старой версии системы порождала огромное количество файлов, что вносило путаницу и негативно влияло на жесткий диск. В разработанном модуле препроцессоры работают с файловыми представлениями в памяти и не сохраняют их на диск до выполнения последней ступени конвейера. Иерархия классов препроцессоров представлена на рисунке 3. {{:an2.png| Рисунок 3 Диаграмма классов для модуля препроцессоров}} Для работы модулей чтения файлов модели необходимы инструменты для чтения информации о структуре и параметрах модели систем тел. В старой версии эта структура содержалась в графической оболочке. Было принято решение переноса функций для работы с моделью в программу для работы через командную строку. Для этого использована иерархия классов, позволяющая загружать файлы модели в формате редактора ФРУНД и формировать файлы расчетной схемы, поступающие на вход модулям генерации исходных кодов. Иерархия представлена на рисунке 4 и содержит классы для работы с моделью и с ее элементами: телами, силами, соединительными элементами и параметрами {{:an3.png| Рисунок 4 Диаграмма классов для работы с форматом модели}} {{:an4.png|}}