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