МКЭ-процессор. Главное окно МКЭ процессора. Подзадачи. Структура данных МКЭ. Решатели. Конечные элементы, страница 9

8.2.1 Метод сопряженных градиентов

class SparceSolver – метод сопряженных градиентов с LDU-предобуславливанием.

Выбирается в случае значения опции SolveMetod = GRAD_SOLVE_METHOD.

В нем перекрыты все пустые виртуальные процедуры базового класса кроме int Continue(), а также введена вспомогательная процедура double Norma2(double*) – вычисление евклидовой нормы n-мерного вектора.

Перекрытая виртуальная процедура создания матрицы (int CreateMatrix()) по значению опции Options.TypePred (вид предобуславливателя) создает глобальную матрицу системы типа базового класса CSIR_SymMatrix – в случае значения опции PORTRET_VORBEDING (предобуславливание на портрете), производного класса CSIR_5DSymMatrix – в случае значения опции BAND5D_VORBEDING (предобуславливание на 5 диагоналях).

Перекрытая виртуальная процедура факторизации (int Factorization()) вызывает процедуру факторизации для глобальной матрицы системы – ILDU_Factr() (см. раздел «Разреженные матрицы») из того класса, к которому принадлежит глобальная матрица.

8.2.2 Метод Холецкого

class LentSolver – метод Холецкого для решения системы с ленточной матрицей.

Выбирается в случае значения опции SolveMetod = BAND_SOLVE_METHOD.

В нем перекрыты все пустые виртуальные процедуры базового класса кроме int Continue().

Перекрытая виртуальная процедура создания матрицы (int CreateMatrix()) создает глобальную матрицу системы типа CSIR_LentSymMatrix.

Перекрытая виртуальная процедура факторизации (int Factorization()) вызывает процедуру факторизации для глобальной матрицы системы – ILDU_Factr() (см. раздел «Разреженные матрицы»).

Также существуют производные классы для решения обобщенной задачи собственных чисел и векторов пары глобальных матриц.

8.2.3 Метод итераций подпространства

class IterSolver – метод итераций подпространства для решения обобщенной задачи собственных чисел и векторов пары глобальных ленточных матриц.

Является производным от производного класса class LentSolver.

В нем перекрыта пустая виртуальная процедура базового класса int Solution().

Введены вспомогательные процедуры: int SetMatrixM(CSIR_SymMatrix*) – установка указателя на матрицу, int GetMatrixM() – доступ к матрице, int SetEigenNumVector(double*) – установка указателя на собственный вектор и SetL(int) – установка указателя на номер собственного вектора.

В классе используется глобальная матрица типа CSIR_LentSymMatrix.

В int Solution() вызываются дополнительные процедуры, не принадлежащие классу: int ToStandardEigen(int, double*, double*, double*, double*) – приведение обобщенной задачи для пары малых матриц к стандартной, описана в модуле USolveIter в пределах cpp-файла; и int JacobStand(int, double*, double*, double*) – решение стандартной задачи собственных чисел методом Якоби, описана в модуле USolveIter.cpp.

Int ToStandardEigen(int, double*, double*, double*, double*) последовательно вызывает процедуры: int Cholessky(int, double*), int InvTrig(int, double*, double*), int LTML(int, double*, double*, double*). В качестве переменных в процедуру int ToStandardEigen передаются указатели на четыре массива действительных чисел (матрицы) и их размерность (целое число).

Процедура int Cholessky(int, double*) раскладывает методом Холецкого одну из переданных матриц на произведение двух треугольных; затем процедура int InvTrig(int, double*, double*) обращает эту треугольную матрицу; и наконец int LTML(int, double*, double*, double*) умножает второю из переданных матриц на треугольную справа и слева с транспонированием.

Int JacobStand(int, double*, double*, double*) качестве переменных использует три указателя на массивы действительных чисел – матрица массивы собственных векторов и чисел, и целое число – их размерность.

class StabilMMPSolver – метод итераций подпространства для решения обобщенной задачи собственных чисел и векторов пары глобальных матриц жесткости и геометрической жесткости для решения задачи на устойчивость.

Является производным от базового класса TSolverLineSist.

В нем перекрыты все пустые виртуальные процедуры базового класса кроме int Continue() и int SetRightVector(double*), а также введены вспомогательные процедуры: int SetSecondMatrix(CSIR_SymMatrix*) – установка указателя на вторую матрицу, int SetEigenNumVector(double*) – установка указателя на собственный вектор и void* GetSecondMatrix() – доступ ко второй матрице.

Процедура int CreateMatrix() создает матрицу типа CSIR_SymMatrix*. Процедура int Factorization() вызывает процедуру факторизации для глобальной матрицы системы – ILDU_Factr() (см. раздел «Разреженные матрицы»).

В int Solution() вызываются дополнительные процедуры, не принадлежащие классу: int ToStandardEigen(int, double*, double*, double*, double*) и int JacobStand(int, double*, double*, double*) (см. class IterSolver).


9 Конечные элементы

Иерархия классов «конечные элементы» занимает центральное место МКЭ-процессоре. Взаимодействие классов может быть охарактеризовано как «родитель-потомок». Базовый класс содержит минимально необходимый набор методов и атрибутов для выполнения следующих задач:

1)  вычисление локальных матриц коэффициентов разрешающих уравнений в зависимости от подзадачи (для подзадачи статики – матриц жесткости, для – устойчивости – матриц геометрической жесткости);

2)  вычисление дополнительных данных после решения разрешающих систем уравнений (для подзадачи статики – напряжений и деформаций, для – устойчивости – дополнительных вычислений не требуется).

Решение перечисленных задач выполняется в соответствии с традиционной методикой МКЭ.