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

Процедуры конвертирования текстовых файлов:

ConvertCoord()

Преобразование файла координат coord.txt.

ConvertOri()

Преобразование файла координат orient. txt.

ConvertNg()

Преобразование файла закреплений Ng. txt.

ConvertQ()

Преобразование Q.txt.

ConvertU()

Преобразование U.txt.

ConvertTop()

Преобразование top.txt.

ConvertCM()

Преобразование cm.txt.

ConvertExcentr()

Преобразование Excentr.txt.

ConvertStiff()

Преобразование Del.txt.

ConvertTemper()

Преобразование Temper.txt

ConvertMat()

Преобразование matdata.txt.

ConvertMD()

Преобразование Md.txt.

ConvertQpg()

Преобразование Qpg.txt.

ConvertDistance()

Преобразование Distance.txt.

ConvertNUP()

Преобразование Param.txt.

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

Для регистрации подзадачи вызывается процедура int RegisterSubJob(const AnsiString Name, TProcessForm *AForm). Здесь Name– название подзадачи, а AFormуказатель на форму подзадачи. После её вызова указатель AFormдобавляется в список всех подзадач TProcessRec* SubJobs.

Более подробно данный раздел будет рассмотрен ниже.


3. Подзадачи.

Все подзадачи являются наследниками базового класса подзадачи TProcessForm, который находится в файле USubJobProcess.h.  Каждая подзадача реализована в отдельном  модуле. Класс каждой подзадачи наследует свойства класса TProcessForm.

3.1 Управление процессом.

Окно подзадачи содержит кнопки управления процессом: «Начать», «Прервать», «Продолжить», «Закрыть».

  1. Кнопка «Начать» запускает процесс решения подзадачи.
  2. Кнопка «Прервать», доступная только во время выполнения процесса, останавливает его с возможностью продолжения.
  3. Кнопка «Продолжить» запускает процесс с того шага, на котором он был прерван.
  4. Кнопка «Закрыть», доступная только во время, когда процесс остановлен или завершен, закрывает окно с кодом нормального завершения. Если кнопка «Закрыть» недоступна, окно может быть закрыто кнопкой системного меню; в этом случае завершение подзадачи считается ненормальным.

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

В форме хранится поле прерывания процесса пользователем. Если вмешательства пользователя не было, в этом поле находится нуль; если пользователь нажал кнопку «Прервать», значение устанавливается в единицу. Процедуры реализации процесса могут изменять значение этого поля. Во всех случаях ненулевое значение означает вмешательство пользователя. После окончания или прерывания процесса значение поля прерывания анализируется для определения конечного состояния процесса.

Значения поля прерывания, интерпретируемые обработчиками событий окна:

Поля прерывания процесса:

BREAK_NO

Процесс не прерывался либо полностью завершен

Доступна кнопка «Закрыть»

BREAK_POINT

Процесс прерван и может быть продолжен с контрольной точки

Доступны кнопки «Закрыть» и «Продолжить»

BREAK_ALL

Процесс прерван и должен быть запущен заново

Доступна кнопка «Начать»

BREAK_ERROR

Процесс завершен аварийно

Доступна только кнопка системного меню

Функция intUserBreak() возвращает значение поля прерывания процесса. Функция SetUserBreak(intValue) устанавливает значение этого поля по аргументу.

Для рестарта процесса с контрольной точки в форме имеется поле Userbreak. Его значение устанавливается процедурой SetBreakPoint(intValue) и возвращается функцией intBreakPoint(). Значения этого поля определяются и интерпретируются виртуальной процедурой реализации процесса и в базовом классе не регламентированы.

После нормального закрытия диалога (кнопкой «Закрыть») поле Tag формы содержит значение Userbreak. Это дает возможность вызывающей программе проанализировать конечное состояние процесса.

Виртуальные процедуры управления процессом приведены ниже. Их реализация предполагается в производных классах. В базовом классе эти процедуры пустые.

Процедуры управления процессом:

virtual int StartProcess()

Запуск процесса с начала.

virtual int RestartProcess(int Step = 0)

Запуск процесса с шага Step.

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

3.2  Индикация состояния процесса.

Процедуры индикации состояния процесса предназначены для визуального контроля степени завершенности подзадачи либо её шага (индикация прогресса), величины невязки решаемой системы и т.п. Как правило, в производных классах определяются специфические для подзадачи процедуры индикации.

Однако, учитывая наличие этапов, общих для большинства планируемых подзадач, в базовом классе определены процедуры индикации, которые чаще всего не будут перекрываться. К ним относятся процедуры индикации пяти шагов (Step1Step4 и StepLast), а также процедуры индикации решения системы уравнений.

При конструировании окна подзадачи на основе базового класса может быть выполнена настройка индикации. В базовом классе формы имеется 5 панелей шагов. Каждая панель может быть снабжена заголовком (которого в базовом классе нет) и полосой прогресса. В производном классе ненужные панели шагов могут быть сделаны невидимыми.

Для шагов процесса в базовом классе определены процедуры установки пределов полосы прогресса и текущей позиции.