Работа с системами линейных алгебраических уравнений в программном каркасе Nadra-3D
Рассмотрена организация программного кода конечно-элементного решателя, позволяющая использовать различные алгоритмы решения систем линейных алгебраических уравнений без модификации модулей построения матриц и векторов СЛАУ МКЭ. Розглянута організація програмного коду скінченно-елементного розв’язув...
Saved in:
| Published in: | Компьютерная математика |
|---|---|
| Date: | 2017 |
| Main Author: | |
| Format: | Article |
| Language: | Russian |
| Published: |
Інститут кібернетики ім. В.М. Глушкова НАН України
2017
|
| Subjects: | |
| Online Access: | https://nasplib.isofts.kiev.ua/handle/123456789/168441 |
| Tags: |
Add Tag
No Tags, Be the first to tag this record!
|
| Journal Title: | Digital Library of Periodicals of National Academy of Sciences of Ukraine |
| Cite this: | Работа с системами линейных алгебраических уравнений в программном каркасе Nadra-3D / М.В. Белоус // Компьютерная математика. — 2017. — № 1. — С. 110-121. — Бібліогр.: 5 назв. — рос. |
Institution
Digital Library of Periodicals of National Academy of Sciences of Ukraine| id |
nasplib_isofts_kiev_ua-123456789-168441 |
|---|---|
| record_format |
dspace |
| spelling |
Белоус, М.В. 2020-05-02T15:06:43Z 2020-05-02T15:06:43Z 2017 Работа с системами линейных алгебраических уравнений в программном каркасе Nadra-3D / М.В. Белоус // Компьютерная математика. — 2017. — № 1. — С. 110-121. — Бібліогр.: 5 назв. — рос. 2616-938Х https://nasplib.isofts.kiev.ua/handle/123456789/168441 519.6 Рассмотрена организация программного кода конечно-элементного решателя, позволяющая использовать различные алгоритмы решения систем линейных алгебраических уравнений без модификации модулей построения матриц и векторов СЛАУ МКЭ. Розглянута організація програмного коду скінченно-елементного розв’язувача, яка дозволяє використовувати різні алгоритми знаходження розв’язків систем лінійних алгебраїчних рівнянь без модифікації модулів побудови матриць та векторів. A technology of integration of different algorithms for solving the systems of linear equations in the finite-element framework is discussed. ru Інститут кібернетики ім. В.М. Глушкова НАН України Компьютерная математика Вычислительный эксперимент Работа с системами линейных алгебраических уравнений в программном каркасе Nadra-3D Робота з системами лінійних алгебраїчних рівнянь у програмному каркасі Nadra-3D An operation with the systems of linear equations in the software framework Nadra-3D Article published earlier |
| institution |
Digital Library of Periodicals of National Academy of Sciences of Ukraine |
| collection |
DSpace DC |
| title |
Работа с системами линейных алгебраических уравнений в программном каркасе Nadra-3D |
| spellingShingle |
Работа с системами линейных алгебраических уравнений в программном каркасе Nadra-3D Белоус, М.В. Вычислительный эксперимент |
| title_short |
Работа с системами линейных алгебраических уравнений в программном каркасе Nadra-3D |
| title_full |
Работа с системами линейных алгебраических уравнений в программном каркасе Nadra-3D |
| title_fullStr |
Работа с системами линейных алгебраических уравнений в программном каркасе Nadra-3D |
| title_full_unstemmed |
Работа с системами линейных алгебраических уравнений в программном каркасе Nadra-3D |
| title_sort |
работа с системами линейных алгебраических уравнений в программном каркасе nadra-3d |
| author |
Белоус, М.В. |
| author_facet |
Белоус, М.В. |
| topic |
Вычислительный эксперимент |
| topic_facet |
Вычислительный эксперимент |
| publishDate |
2017 |
| language |
Russian |
| container_title |
Компьютерная математика |
| publisher |
Інститут кібернетики ім. В.М. Глушкова НАН України |
| format |
Article |
| title_alt |
Робота з системами лінійних алгебраїчних рівнянь у програмному каркасі Nadra-3D An operation with the systems of linear equations in the software framework Nadra-3D |
| description |
Рассмотрена организация программного кода конечно-элементного решателя, позволяющая использовать различные алгоритмы решения систем линейных алгебраических уравнений без модификации модулей построения матриц и векторов СЛАУ МКЭ.
Розглянута організація програмного коду скінченно-елементного розв’язувача, яка дозволяє використовувати різні алгоритми знаходження розв’язків систем лінійних алгебраїчних рівнянь без модифікації модулів побудови матриць та векторів.
A technology of integration of different algorithms for solving the systems of linear equations in the finite-element framework is discussed.
|
| issn |
2616-938Х |
| url |
https://nasplib.isofts.kiev.ua/handle/123456789/168441 |
| citation_txt |
Работа с системами линейных алгебраических уравнений в программном каркасе Nadra-3D / М.В. Белоус // Компьютерная математика. — 2017. — № 1. — С. 110-121. — Бібліогр.: 5 назв. — рос. |
| work_keys_str_mv |
AT belousmv rabotassistemamilineinyhalgebraičeskihuravneniivprogrammnomkarkasenadra3d AT belousmv robotazsistemamilíníinihalgebraíčnihrívnânʹuprogramnomukarkasínadra3d AT belousmv anoperationwiththesystemsoflinearequationsinthesoftwareframeworknadra3d |
| first_indexed |
2025-11-26T11:55:34Z |
| last_indexed |
2025-11-26T11:55:34Z |
| _version_ |
1850620499602702336 |
| fulltext |
110 Компьютерная математика. 2017, № 1
Вычислительный
эксперимент
Рассмотрена организация про-
граммного кода конечно-элемент-
ного решателя, позволяющая ис-
пользовать различные алгоритмы
решения систем линейных алгеб-
раических уравнений без модифи-
кации модулей пост-роения мат-
риц и векторов СЛАУ МКЭ.
М.В. Белоус, 2017
УДК 519.6
М.В. БЕЛОУС
РАБОТА С СИСТЕМАМИ ЛИНЕЙНЫХ
АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ
В ПРОГРАМMНОМ КАРКАСЕ NADRA-3D
Введение. Вычислительные схемы решения
систем дифференциальных уравнения мето-
дом конечных элементов (МКЭ) сводят ис-
ходную задачу к (многократному) построе-
нию и численному решению систем линей-
ных алгебраических уравнений (СЛАУ). При
этом скорость работы программы решения
СЛАУ имеет существенное влияние на ско-
рость работы всего алгоритма. Механизмы
ускорения вычислений в решателях СЛАУ
включают максимальное использование струк-
туры матрицы (ее разреженности, симмет-
ричности), использование параллельных
вычислений и реализацию алгоритмов для
графических ускорителей. В свою очередь
программа построения СЛАУ (программная
реализация вычислительной схемы МКЭ)
должна учитывать требования к структуре
входных данных решателя СЛАУ.
В Институте кибернетики имени В.М. Глуш-
кова НАН Украины создан программный
каркас Nadra-3D [1] – набор классов и под-
программ для построения вычислительных
схем МКЭ для задач моделирования про-
странственных процессов изменения напря-
женно-деформированного состояния, фильт-
рации воды, теплопроводности.
В статье рассматривается подход к органи-
зации программного кода, примененный
в этом программном каркасе и позволяющий
использовать различные реализации алгорит-
мов решения слау без модификации кода
модулей построения матриц и векторов
СЛАУ МКЭ.
РАБОТА С СИСТЕМАМИ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ ...
Компьютерная математика. 2017, № 1 111
Базовые классы подсистемы работы с СЛАУ. Основой подсистемы
работы с СЛАУ в программном каркасе Nadra-3D является следующий набор
абстрактных классов:
nSlaeMatrix – базовый класс для описания матриц;
nSlaeVector – базовый класс для описания векторов;
nSLAE – базовый класс для описания совокупности матрицы и вектора как
СЛАУ;
nSlaeGenerator – класс, порождающий объекты матриц, векторов и СЛАУ;
nSlaeFactory – класс-фабрика, порождающий объекты-генераторы с интер-
фейсом nSlaeGenerator;
nSlaeSolver – базовый класс решателя СЛАУ;
nSlaeSolverFactory – класс-фабрика, порождающий решатели СЛАУ.
Схема работы модулей программного каркаса с матрицами и векторами
показана на рис. 1 (символом * обозначены указатели на объекты). Как видно
из схемы, программные модули имеют доступ только к методам, определенным
интерфейсами указанных базовых классов, при этом конкретная схема исполь-
зования объектами оперативной памяти и детали реализации остаются для них
недоступными.
РИС. 1. Схема работы программного каркаса с матрицами и векторами
Все операции над матрицами и векторами, а также операции решения
СЛАУ выполняются модулями программного каркаса исключительно методами
М.В. БЕЛОУС
112 Компьютерная математика. 2017, № 1
базовых классов.
Загрузив из файла пользовательских настроек код генератора СЛАУ или
выбрав код по умолчанию в случае отсутствия настроек система передает его
объекту-фабрике nSlaeFactory и получает указатель на конкретный генератор,
зарегистрированный за переданным кодом, как указатель на объект класса
nSlaeGenerator. Таким образом, пользователю предоставляется возможность вы-
бора и настройки схемы размещения матриц и векторов в оперативной памяти
посредством текстового файла (паспорта задачи).
Объект-генератор поддерживает простой программный интерфейс, пред-
ставленный в листинге 1, и по запросу программных модулей создает объекты,
описывающие матрицы, вектора или СЛАУ, и возвращает указатели на них, как
указатели на объекты классов nSlaeMatrix, nSlaeVector или nSLAE.
ЛИСТИНГ 1. Интерфейс класса nSlaeGenerator
class nSlaeGenerator
{
public:
nSlaeGenerator(){}
virtual ~nSlaeGenerator(){}
virtual nSlaeMatrix* GetMatrix(int dim = 0, int lBhw = 0, int uBhw=0 ) = 0;
virtual nSlaeVector* GetVector( int dim = 0 ) = 0;
virtual nSLAE* GetSLAE( int dim = 0, int lBhw = 0, int uBhw = 0 ) = 0;
virtual void SetParameters( map<string,string> ¶meters );
virtual void GetParameters( map<string,string> ¶meters );
virtual void SetParameters( nParametersSet ¶meters ) = 0;
virtual void GetParameters( nParametersSet ¶meters ) = 0;
int GetSlaeCode(){ return m_slaeCode; }
protected:
int m_slaeCode;
};
На рис. 2 в качестве примера показана схема создания по запросу системы
объекта, описывающего матрицу.
РИС. 2. Схема создания объекта, описывающего матрицу
Добавление в программный каркас новой схемы размещения матриц и век-
торов в оперативной памяти выполняется путем реализации семейства потомков
классов nSlaeMatrix, nSlaeVector, nSLAE, nSlaeGenerator и регистрации этого
РАБОТА С СИСТЕМАМИ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ ...
Компьютерная математика. 2017, № 1 113
семейства в объекте-фабрике nSlaeFactory.
Работа с матрицами и векторами. Интерфейс для работы с матрицами
и векторами определен в базовых классах nSlaeMatrix и nSlaeVector. Рассмот-
рим подробнее некоторые основные операции, выполняемые системой над эти-
ми объектами.
Операции заполнения элементов матриц и векторов. При обработке сет-
ки конечных элементов на этапах построения СЛАУ, учета краевых условий
второго и третьего рода объект вычислительной схемы рассчитывает поправки,
которые добавляет к элементам матрицы и вектора. При этом для каждого
конечного элемента вычисляется набор таких поправок (элементарная матрица
либо элементарный вектор), а их количество определяется количеством узлов
конечного элемента и типом решаемой задачи. Для работы с наборами этих
поправок в интерфейсах базовых классов определены следующие методы:
virtual void nSlaeVector::AllocateValues( int n, int *N, double *F );
virtual void nSlaeVector::AddValues( int n, int *N, double *F );
virtual void nSlaeVector::SubtractValues( int n, int *N, double *F );
virtual void nSlaeMatrix::AllocateFragment(int n, int *N, double **M );
virtual void nSlaeMatrix::AddFragment( int n, int *N, double **M );
virtual void nSlaeMatrix::SubtractFragment(int n, int *N, double **M );
virtual void nSlaeMatrix::AllocateValues(int n,int *rowN,int *colN, double *M);
virtual void nSlaeMatrix::AddValues(int n, int *rowN, int *colN, double *M);
virtual void nSlaeMatrix::SubtractValues(int n,int *rowN,int *colN, double *M);
Также определены операции заполнения некоторым значением отдельных
строк, столбцов или диагоналей матрицы.
virtual void nSlaeMatrix::FillColByValue( int N, double v );
virtual void nSlaeMatrix::FillRowByValue( int N, double v );
virtual void nSlaeMatrix::FillColAndRowByValue( int N, double v );
virtual void nSlaeMatrix::FillDiagonalByValue( int N, double v );
virtual void nSlaeMatrix::FillMatrixByValue( double v );
При использовании вышеуказанных операций следует помнить, что, напри-
мер, операция FillColByValue(…) в симметричных матрицах может, кроме же-
лаемого заполнение столбца, автоматически заполнять соответствующую строку
для сохранения симметричности матрицы.
Операции получения и замены строк и столбцов матрицы. Используют-
ся при обработке условий первого рода, учета условий сопряжения.
virtual bool nSlaeMatrix::GetCol( int N, nSlaeVector *V );
virtual bool nSlaeMatrix::GetRow( int N, nSlaeVector *V );
virtual bool nSlaeMatrix::ReplaceCol( int N, nSlaeVector *V);
virtual bool nSlaeMatrix::ReplaceRow( int N, nSlaeVector *V );
Операции вычисления взвешенной суммы строк или столбцов матрицы.
Используются, например, при учете условий первого рода.
virtual bool nSlaeMatrix::AccumulateColsSum( int n, int *N, double *D,
nSlaeVector *V, bool replace_vector = false );
virtual bool nSlaeMatrix::AccumulateRowsSum( int n, int *N, double *D,
nSlaeVector *V, bool replace_vector = false );
Некоторые операции векторной и матрично-векторной алгебры.
virtual bool nSlaeVector::AddVector( nSlaeVector *V, double d = 1. );
virtual bool nSlaeVector::SubtractVector(nSlaeVector *V, double d = 1. );
virtual bool nSlaeVector::CloneVector( nSlaeVector *V, double d = 1. );
М.В. БЕЛОУС
114 Компьютерная математика. 2017, № 1
virtual void nSlaeVector::MultiplyByValue( double d );
virtual bool nSlaeVector::MultiplyByVector( nSlaeVector *V, double &res );
virtual bool nSlaeMatrix::MultiplyByVector(nSlaeVector *V, nSlaeVector *res );
Все перечисленные операции имеют два вида сигнатур. Вышеприведенный
вид с использованием интерфейсов nSlaeMatrix, nSlaeVector, а также вид
с использованием для передачи и возвращения данных указателей на массив
чисел с плавающей точкой. Например:
virtual bool nSlaeVector::GetFullContent( int &dim, double *&V );
virtual bool nSlaeVector::SetFullContent( int &dim, double *&V );
virtual bool nSlaeMatrix::GetCol( int N, nSlaeVector *V );
virtual bool nSlaeMatrix::GetCol( int N, int &dim, double *&V );
Работа с системами линейных уравнений. В программном каркасе преду-
смотрен класс nSLAE (листинг 2), описывающий совокупность матрицы и век-
тора именно как систему линейных алгебраических уравнений.
ЛИСТИНГ 2. Интерфейс класса nSLAE
class nSLAE
{
public:
nSLAE( int dim = 0, int lBhw = 0, int uBhw = 0 );
virtual ~nSLAE(){}
virtual nSlaeMatrix *GetMatrix() = 0;
virtual nSlaeVector *GetVector() = 0;
int GetSlaeCode(){ return m_slaeCode; }
protected:
int m_slaeCode;
};
Выделение отдельного класса для описания системы уравнений обусловле-
но тем, что некоторые реализации алгоритмов решения СЛАУ могут использо-
вать схемы размещения матриц и векторов в одном массиве данных. В таких
случаях с точки зрения программного каркаса они представляют два различных
объекта и работа с ними осуществляется через интерфейсы классов nSlaeMatrix
и nSlaeVector, а с точки зрения алгоритма решения – это один объект и работа
с ним осуществляется путем предоставления прямого доступа к внутренней
структуре данных.
На рис. 3 показаны возможные варианты различной реализации схем
использования оперативной памяти, имеющие одинаковый интерфейс nSLAE.
РАБОТА С СИСТЕМАМИ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ ...
Компьютерная математика. 2017, № 1 115
РИС. 3. Варианты реализации классов с интерфейсом nSLAE
Экспорт матриц и векторов в файлы. Сохранение матриц и векторов
в файлы осуществляется объектом класса nSlaeSaveLoad. Для каждого типа
матрицы или вектора и каждого формата экспорта реализуются специализирован-
ные функции сохранения данных с сигнатурами
bool MatrixSaver(nSlaeMatrix*, FILE*, nMatrixFileFormat)
и
bool VectorSaver(nSlaeVector*, FILE*, nVectorFileFormat),
которые регистрируются в этом объекте.
При вызове метода
bool nSlaeSaveLoad::SaveMatrixToFile(nSlaeMatrix*, FILE*, nMatr
ixFileFormat) для сохранения матрицы или
bool nSlaeSaveLoad::SaveVectorToFile(nSlaeVector*, FILE*, nVect
orFileFormat) для сохранения вектора, объект nSlaeSaveLoad запрашивает
у полученных объектов идентификатор m_slaeCode и ищет в реестре соответст-
вующую функцию сохранения данных. Если она существует, выполняется
сохранение данных, в противном случае – в подсистему вывода сообщений
передается сообщение об ошибке.
Решение СЛАУ. Базовым объектом для решателей СЛАУ является объект
nSlaeSolver, интерфейс которого приведен в листинге 3.
ЛИСТИНГ 3. Интерфейс класса nSlaeSolver
class nSlaeSolver
{
public:
nSlaeSolver();
virtual ~nSlaeSolver();
virtual bool Solve( nSlaeMatrix *A, nSlaeVector *B, nSlaeVector *X ) = 0;
virtual void SetParameters( map<string,string> ¶meters );
virtual void GetParameters( map<string,string> ¶meters );
virtual void SetParameters( nParametersSet ¶metersSet ) = 0;
virtual void GetParameters( nParametersSet ¶metersSet ) = 0;
nSlaeSolverCode GetSolverCode(){ return m_solverCode; }
protected:
nSlaeSolverCode m_solverCode;
};
М.В. БЕЛОУС
116 Компьютерная математика. 2017, № 1
Каждый наследник этого класса реализует некоторый алгоритм решения
СЛАУ и предназначен для работы с матрицами и векторами, хранящимися в
оперативной памяти в некотором специализированном формате. То есть объект-
решатель СЛАУ может работать не со всеми переданными ему объектами
nSlaeMatrix и nSlaeVector, а только с поддерживающими требуемый алгоритмом
формат размещения в оперативной памяти. Объект nSlaeSolver определяет свою
совместимость с полученными матрицей и вектором сравнением их идентифи-
каторов m_slaeCode и собственного идентификатора m_solverCode.
В случае совместимости данных и алгоритма запускается процедура реше-
ния, при этом алгоритму предоставляется прямой доступ к внутренней структу-
ре данных матрицы и вектора (рис. 4), необходимый для эффективной реализа-
ции параллельных вычислений.
РИС. 4. Схема взаимодействия алгоритма решения и схемы хранения СЛАУ
в оперативной памяти
Для одной схемы размещения СЛАУ в оперативной памяти возможна реа-
лизация нескольких алгоритмов решения или реализация несколько версий
одного алгоритма. Пользователю предоставляется возможность выбора и кон-
фигурации используемого решателя СЛАУ в файле настроек.
Создание системой объекта-решателя, реализующего указанный пользова-
телем алгоритм, выполняется объектом-фабрикой класса nSlaeSolverFactory по
запросу с выбранным кодом решателя. Программному каркасу возвращается
указатель на созданный решатель как указатель на объект класса nSlaeSolver.
На рис. 5 показана схема взаимодействия модулей программного каркаса
и подсистемы решения СЛАУ.
РАБОТА С СИСТЕМАМИ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ ...
Компьютерная математика. 2017, № 1 117
РИС. 5. Схема взаимодействия модулей программного каркаса и подсистемы решения СЛАУ
Добавление в программный каркас нового решателя СЛАУ выполняется пу-
тем реализации соответствующего потомка класса nSlaeSolver и регистрации его
в объекте класса nSlaeSolverFactory.
С использованием описанного подхода в программный каркас Nadra-3D
интегрированы несколько решателей СЛАУ. Далее приведены их краткие ха-
рактеристики.
Программа решения СЛАУ с симметричной положительно определен-
ной матрицей ленточной структуры. В программный каркас интегрирована
созданная в Институте кибернетики имени В.М. Глушкова НАН Украины про-
грамма решения СЛАУ с симметричной положительно определенной матрицей
ленточной структуры методом LDLT разложения [2]. Эта программа использует
столбцово-слоистую схему размещения СЛАУ в оперативной памяти вычисли-
тельного комплекса, причем используемая структура данных является общей
для хранения матрицы, вектора правой части и промежуточных результатов ра-
боты алгоритма. В структуре хранится нижняя половина симметричной матри-
цы по столбцам. В процессоре с номером p хранятся столбцы матрицы с номе-
рами s·(p + j)…s·(p + j + 1), где s – размер блока, определенный пользователем,
j = 0…J, J = N / (s·P), N – размерность матрицы, P – количество процессоров.
Работа с этой структурой реализована в наборе классов nSlaeSbrb,
nSlaeVectorSbrb, nSlaeVectorSbrbShared, nSlaeMatrixSbrb,
nSlaeMatrixSbrbShared, предоставляющих интерфейсы nSlae, nSlaeVector,
nSlaeMatrix. Поскольку структура данных является общей для хранения матри-
цы и вектора правой части, понадобилась реализация двух семейств классов
nSlaeSbrb и nSlaeSbrbShared – соответственно для матрицы и вектора, храня-
щихся в разных массивах данных и в одном массиве данных. Решение СЛАУ
выполняется в два этапа – LDLT факторизация матрицы и нахождение решения
полученной треугольной системы. При этом основное время работы алгоритма
занимает факторизация матрицы. Если систему необходимо решать многократ-
М.В. БЕЛОУС
118 Компьютерная математика. 2017, № 1
но и при этом матрица не меняется, то факторизацию необходимо выполнить
только один раз. Поскольку после этого этапа на месте исходной матрицы хра-
нится факторизированная матрица, то перед запуском алгоритма необходимо
сохранить в кэш столбцы исходной матрицы, которые понадобятся для учета
краевых условий первого рода. Алгоритм предназначен для работы с матрицами
ленточной структуры, ориентирован на системы с распределенной памятью и
имеет довольно сложную внутреннюю структуру хранения СЛАУ. Рекомендуе-
мое соотношение полуширины ленты матрицы, количества процессоров и раз-
мера блока выражается формулой [2]
s·Р2 m, где m – полуширина ленты матрицы.
При использовании алгоритма для систем с матрицами, не удовлетворяю-
щими этому соотношению, время расчетов значительно увеличивается за счет
роста количества операций пересылки данных между процессорами и простоя
части процессоров в ожидании данных. Кроме того, значительно увеличиваются
требования к объему оперативной памяти. В табл. 1 представлены оценки необ-
ходимой оперативной памяти при использовании симметричной ленточной
схемы хранения матрицы для расчетной сетки тетраэдральных конечных
элементов с линейными (в таблице обозначены как сетки класса L) и квадратич-
ными (сетки класса Q) функциями формы при моделировании фильтрации воды.
ТАБЛИЦА 1
Класс
сетки
Количество
узлов
Максимальная
разница номеров
узлов
Количество
конечных
элементов
Оценка объема
оперативной
памяти
L4 9 282 459 48 120 32 Mb
Q4 9 009 970 5 820 66.7 Mb
L4.5 69 044 1 704 384 720 898 Mb
Q4.5 69 085 4 345 48 120 2.2 Gb
L5.5 416 683 5 898 2 390 880 18.5 Gb
Q5.5 532 413 15 110 384 720 60 Gb
L6 1 026 463 10 228 5 977 200 78.3 Gb
Q6 1 012 121 20 400 736 500 154 Gb
Решатель DSS (Direct Sparse Solver) для разреженных матриц из биб-
лиотеки Intel MKL. Предоставляет простой программный интерфейс для
нахождения решения СЛАУ [3]. Схема решения, как в вышеописанной про-
грамме для СЛАУ с ленточными матрицами, состоит из шагов, типичная
последовательность выполнения которых показана на рис. 6.
РАБОТА С СИСТЕМАМИ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ ...
Компьютерная математика. 2017, № 1 119
РИС. 6. Этапы решения СЛАУ
Решатель DSS предполагает использование формата CSR (Compressed
Sparse Row) для хранения матрицы СЛАУ в оперативной памяти.
В формате CSR хранятся только ненулевые элементы матрицы, для чего
используются три массива данных: values – массив чисел с плавающей точкой
для хранения элементов матрицы по строкам; columns – целочисленный массив
для хранения номеров столбцов, i-й элемент массива содержит номер столбца
для i-го элемента values; rowIndex – целочисленный массив для хранения индек-
сов начала строк, j-й элемент этого массива содержит номер элемента в массиве
values, который является первым ненулевым элементом в j-й строке матрицы.
Этот формат неудобен на этапе порождения СЛАУ МКЭ, поскольку струк-
тура ненулевых элементов матрицы тогда еще неизвестна. Поэтому вместо на-
бора классов для схемы CSR в программном каркасе Nadra-3D реализованы
классы nSlaeVectorSparse, nSlaeMatrixSparse, nSlaeSparse для работы с разре-
женными матрицами в координатном формате, позволяющие выполнять
конвертацию внутренних данных в формат CSR перед вызовом решателя DSS.
На разных этапах порождения СЛАУ оптимальными для уменьшения вычис-
лительных затрат являются различные схемы внутреннего хранения элементов
матрицы в объектах семейства nSlaeSparse – по строкам или по столбцам, поэтому
предусмотрена возможность динамической перестройки внутренней структуры
в соответствии с «подсказками», передаваемыми вычислительной схемой. Как
и семейство nSlaeSbrb, семейство nSlaeSparse является потомками nSlae.
Решатели СЛАУ в виде отдельных исполняемых файлов. Для работы
с решателями СЛАУ, представленными в виде отдельных исполняемых файлов,
в программном каркасе Nadra-3D реализован класс nSlaeSolverExternal.
Получив матрицу и вектор СЛАУ как указатели на объекты nSlaeMatrix* А
и nSlaeVector *В, этот класс использует методы класса nSlaeSaveLoad для экспор-
та матрицы и вектора в файлы, после чего генерирует загруженный из файла на-
строек системный вызов для командной строки с параметрами внешней програм-
мы решателя и ждет завершения работы этой программы. После завершения рабо-
ты внешнего решателя СЛАУ выполняется загрузка найденных решений из файла
в вектор nSlaeVector *X с помощью методов класса nSlaeSaveLoad.
Поскольку операции экспорта данных в файлы должны быть реализованы
для всех потомков базовых классов матриц и векторов, использовать внешние
решатели возможно со всеми поддерживаемыми системой схемами размещения
СЛАУ в оперативной памяти. К внешней программе-решателю СЛАУ предъяв-
М.В. БЕЛОУС
120 Компьютерная математика. 2017, № 1
ляется требование уметь импортировать данные из указанного формата.
С использованием интерфейса вызова внешних решателей СЛАУ в каркасе
Nadra-3D организована работа с созданными в Институте кибернетики имени
В.М. Глушкова НАН Украины программами решения СЛАУ с ленточными [4]
и разреженными [5] положительно определенными матрицами на компьютерах
гибридной архитектуры (на основе многоядерных CPU и GPU).
При решении трехмерных задач методом конечных элементов целесообраз-
ней использовать разреженную схему хранения и алгоритмы решения СЛАУ,
ориентированные на ее использование. В табл. 2 приведено сравнение времени
работы алгоритмов [2, 5] на вычислительном комплексе Inparcom.
ТАБЛИЦА 2
Параметры СЛАУ
dim x bhw
Время работы
алгоритма [2]
Время работы
алгоритма [5]
69 044 x 1 704 17 сек 4.75 сек.
69 085 x 4 345 1 мин. 39 сек. 7.82 сек.
416 683 x 5 898 19 мин. 43 сек. 1 мин. 29 сек.
532 413 x 15 110 3 мин. 21 сек.
1 026 463 x 10 228 9 мин. 10 сек.
1 012 121 x 20 400 16 мин.
Выводы. Рассмотренный подход к работе с системами линейных алгебраи-
ческих уравнений обеспечивает гибкую настройку решателя СЛАУ в составе
пакета конечно-элементного моделирования в зависимости от имеющихся биб-
лиотек и технических характеристик вычислительного комплекса. Использова-
ние четко определенных программных интерфейсов для классов, описывающих
элементы СЛАУ, позволяет разделить программную реализацию вычислитель-
ных схем метода конечных элементов и программную реализацию алгоритмов
решения СЛАУ (с учетом различных специализированных схем использования
оперативной памяти). Это предоставляет возможность независимого развития
указанных подсистем.
М.В. Білоус
РОБОТА З СИСТЕМАМИ ЛІНІЙНИХ АЛГЕБРАЇЧНИХ РІВНЯНЬ У ПРОГРАМНОМУ
КАРКАСІ NADRA-3D
Розглянута організація програмного коду скінченно-елементного розв’язувача, яка дозволяє
використовувати різні алгоритми знаходження розв’язків систем лінійних алгебраїчних рів-
нянь без модифікації модулів побудови матриць та векторів.
M.V. Bilous
AN OPERATION WITH THE SYSTEMS OF LINEAR EQUATIONS
IN THE SOFTWARE FRAMEWORK NADRA-3D
A technology of integration of different algorithms for solving the systems of linear equations in the
finite-element framework is discussed.
РАБОТА С СИСТЕМАМИ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ ...
Компьютерная математика. 2017, № 1 121
1. Белоус М.В. Конечно-элементный решатель Надра-3D. Материалы II Международной
конференции Кластерные вычисления. Львов, 3 – 5 июня 2013. C. 40 – 47.
2. Попов А.В., Химич А.Н. Параллельный алгоритм решения системы линейных алгебраиче-
ских уравнений с ленточной симметричной матрицей. Компьютерная математика. 2005.
№ 2. С. 52 – 59.
3. https://software.intel.com/en-us/node/521696
4. Баранов А.Ю., Белоус М.В., Сергиенко И.В., Химич А.Н. Гибридные алгоритмы решения
линейных систем для конечно-элементного моделирования процессов фильтрации. Ки-
бернетика и системный анализ. 2015. Том 51, № 4. С. 112 – 120.
5. Хіміч О.М., Сидорук В.А. Плитковий гібридний алгоритм факторизації розріджених
блочно-діагональних матриць з обрамленням. Компьютерная математика. 2016. № 1.
С. 72 – 79.
Получено 28.04.2017
Об авторе:
Белоус Максим Викторович,
кандидат физико-математических наук
Института кибернетики имени В.М. Глушкова НАН Украины.
|