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

В производном классе могут быть добавлены панели шагов по сравнению с базовым. Для того чтобы индикация на этих панелях была доступна в полиморфном объекте, в базовом классе определены пустые виртуальные процедуры индикации. Они вызываются, если процедура индикации базового класса не может обработать вызов с заданными параметрами индикации.

Процедуры индикации процесса решения системы:

virtual IndikIterNumber(int)

Индикация номера текущей итерации

virtual IndikLastIterNumber(int)

Индикация номера последней итерации

virtual IndikRightNorma(double)

Индикация нормы правой части

virtual IndikInitNorma(double)

Индикация начальной невязки

virtual IndikCurrentNorma(double)

Индикация текущей невязки

virtual IndikLastNorma(double)

Индикация предыдущей невязки

virtual IndikDirectProgress(int)

Индикация процесса решения СЛАУ

virtual IndikOrder(int)

Индикация порядка системы

Процедуры индикации процесса шагов:

virtual SetLimitStep(int Step, int Min, int Max)

Установка индикаторов в начальное положение. [Step – номер индикатора]

virtual IndikStepProgress(int Step, int Pos)

Установка позиции индикаторов. [Step – номер индикатора]

UnenableStep(int)

Выключение индикатора процесса шагов

EnableStep(int)

Включение индикатора процесса шагов

UnvisibleStep(int)

Скрытие индикатора процесса шагов

VisibleStep(int)

Отображение индикатора процесса шагов

UnenableSolv()

Выключение текстовых индикаторов

EnableSolv()

Включение текстовых индикаторов

UnvisibleSolv()

Скрытие текстовых индикаторов

VisibleSolv()

Отображение текстовых индикаторов

Процедуры индикации для перекрытия:

virtual OwnSetLimitStep(int Step, int Min, int Max)

virtual OwnIndikStepProgress(int Step, int Pos)

virtual OwnSetLimitsForStep(int Step, int KBar, int* Min, int* Max)

virtual OwnIndikForStep(int Step, int* Pos)

virtual IndikSborProgress(int Pos)

virtual IndikFactProgress(int Pos)

3.3  Регистрация подзадачи.

При создании форма подзадачи регистрируется в списке подзадач главного окна приложения. В результате регистрации название подзадачи помещается в меню подзадач (пункт «Задачи» меню «Процесс»); команда с названием подзадачи запускает соответствующее окно подзадачи.

Для доступа к подзадачам из главного окна программы, они должны находиться в массиве TProcessRec* SubJobs класса TForm1.

Структура TProcessRec:

Name

AnsiString

Название подзадачи.

*Form

TProcessForm

Указатель на экземпляр класса подзадачи.

Tag

Int

Порядковый номер

*Next

void

Указатель на следующую подзадачу.

Процедура регистрации подзадачи – это наследуемая функция базового класса со следующим заголовком: intTProcessForm::Register(constAnsiStringName).

Единственным параметром является название подзадачи. Возвращаемое значение равно нулю при ошибке и единице – при успешном выполнении.

Процедура регистрации должна вызываться при создании формы подзадачи. Необходимо, чтобы окно подзадачи создавалось позже главного окна приложения. В противном случае процедура регистрации выдает диагностику и возвращает нулевое значение. В случае нехватки памяти при регистрации также возвращается нулевое значение. Во всех случаях ошибка регистрации приводит к тому, что соответствующая подзадача недоступна из меню главного окна приложения, что блокирует её выполнение.


4. Подзадача статики.

Находится в модуле [UNewStaticForm.cpp]. Настройка интерфейса осуществляется методами класса TProcessForm.

В подзадаче статики реализованы пять этапов:

1.  вычисление локальных матриц

2.  сборка

3.  факторизация

4.  решение СЛАУ

5.  вычисление результатов

этап 1:  Вычисление локальных матриц осуществляется с помощью функцией int CalcStiffMatr().

этап 2:  Сборка глобальной матрицы

этап 3:  Предварительная обработка матриц коэффициентов системы уравнения с целью оптимизации процесса решения.

этап 4:  Для решения СЛАУ может быть использован любой из решателей. СЛАУ: симметричная, ленточная, положительно определенная. Реализованы три решателя: на портрете, пяти диагональный, ленточный решатель с полной факторизацией.

этап 5:  После решения СЛАУ предусмотрен этап вычисления дополнительных данных. Так как решается задача в перемещениях, то дополнительным этапом является вычисление напряжений и деформаций. (Если бы решалась задача в напряжениях, то вычисляли бы деформации и перемещения.)

Кроме того, предусмотрен еще один этап (предполагалось его использовать для перенумерации степеней свободы) с целью уменьшения ширины ленты. На данный момент этап является незавершенным. Перенумерация неизвестных должна ускорить процесс решения СЛАУ. Существует множество алгоритмов перенумерации узлов. Это возможно, даже когда есть только сетка КЭ, а не на этапе построения геометрической модели. Исходная конструкция может состоять из множества частей различной геометрической формы.


5. Подзадача устойчивости.

Находится в модуле [UNewStabilityForm.cpp]. Настройка интерфейса осуществляется методами класса TProcessForm.

В подзадаче статики реализованы пять этапов:

1.  вычисление локальных матриц

2.  сборка

3.  факторизация

4.  решение задачи на собственные числа и вектора

5.  вычисление результатов