Материал: Разработка и исследование цифровой модели теплового потока при течении вязкой жидкости в канале с внешними нагревающимися элементами

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

§ средства быстрого и удобного построения программ, в том числе визуального;

§ встроенные компиляторы и отладчики;

§ системы коллективной разработки проектов и т.д.

Одной из таких RAD-систем является Delphi. Итак, Delphi - это объектно-ориентированная среда для визуального проектирования Windows приложений с развитыми механизмами повторного использования программного кода. Основным конкурентом Delphi является среда разработки Microsoft Visual C++, имеющая свои преимущества и недостатки, однако являющаяся более популярной, в основном, в силу того, что разработана именно фирмой Microsoft. Существенной чертой Delphi является компонентная модель разработки программных продуктов. Суть модели заключается в поддержке системой постоянно расширяемого набора объектных компонентов, из которых и строится программа. Компоненты в Delphi просты для использования и развития, как результат сокрытия значительной части той структуры программы, которая близка к взаимодействию с операционной системой. Таким образом, для создания в Delphi несложных программных продуктов совершенно не обязательно понимать внутреннюю структуру Windows-приложения, получаемого после разработки в Delphi. Достаточно просто уметь работать с некоторыми компонентами, поставляемыми вместе со средой разработчика. При этом начать работу со средой можно практически без предварительного ознакомления, а написание первого приложения не потребует углубления в особенности системы. Этому отчасти способствует удобный интерфейс среды разработчика, не перегруженный излишними вопросами к разработчику [13].

Однако такой подход совершенно неприемлем для серьезного программирования, и, рано или поздно, придется освоить и основы программирования под ОС Windows, и серьезно изучить саму среду разработки Delphi, а также возможности, которые она предоставляет. Кроме того, конечно же, для создания качественных программных продуктов необходимо глубокое понимание компонентной модели.

Для разработки нашего проекта была выбрана именно среда программирования Borland Delphi. Среда визуального программирования, как уже упомянули выше, выбрана потому, что она обеспечивает возможность максимально простого, быстрого и качественного создания стандартных фрагментов программы.

5.2 Разработка алгоритма


Схема решения задачи:

. Задание значений переменных

. Предоставление информации о расчетной сетке

.1. Расчет координат граней контрольных объемов

.2. Расчет координат расчетных точек

xi:=0.5*(xui+1+xui)

yj:=0.5*(yvj+1+yvj)

. Задание теплового потока qw и параметров жидкости:

ρ плотность (кг/м3),теплоемкость (дж/кг*К),теплопроводность (вт/К*м),

μ вязкость (Па*с).

. Расчет коэффициентов дискретных аналогов

. Решение системы алгебраических уравнений методом переменных направлений

. Вычисление средней температуры и вывод значений

Если Тср<Тзад

то

. Вывод таблиц распределения температуры и скорости

Иначе идем на п.4.

.3 Пример реализации алгоритма


Пример расчета координат точек:

Zgrid; // Область делится по осям x и y на различные зоны и для каждой зоны создается сетка

var

// задаем переменные

begin

// Построение сетки зона за зоной

// Рассматривается направление X[2]:=0.; // координаты граней по х

i2:=2;nz:=1 to nzx do // по зонам:=ncvx[nz];:=i2;:=ilast+1;:=ilast+ncvx[nz];i:=i1 to i2 do:=(i-ilast)/fcvlx;(powrx[nz]>0) then[i]:=xu[ilast]+xzone[nz]*power(dd,powrx[nz])[i]:=xu[ilast]+xzone[nz]*(1.-power((1.-dd),(-powrx[nz])));

end;;:=i2;

// Рассматривается направление Y

yv[2]:=0.;:=2;nz:=1 to nzy do:=ncvy[nz];:=j2;:=jlast+1;:=jlast+ncvy[nz];j:=j1 to j2 do:=(j-jlast)/fcvly;(powry[nz]>0) then[j]:=yv[jlast]+yzone[nz]*power(dd,powry[nz])[j]:=yv[jlast]+yzone[nz]*(1.-power((1.-dd),(-powry[nz])));;;:=j2;; Phi; // вывод на печать информацию о сетке и двумерные поля зависимых переменных

var,j:integer;j:=2 to M2 doi:=2 to L2 do[i,j]:= cond*f[i,j,2]; // вычисление коэффициента диффузии[i,j]:=-dpdz;;;

// определяем теплоизолированные части

for j:=2 to M2 do // задаем теплоизоляцию кроме первого сектора

begin[j]:=2;[j]:=2;;i:=1 to ncvlx do[i]:=2;;;

5.4 Разработка программы по алгоритму с помощью выбранного программного обеспечения

.4.1 Описание некоторых процедур

Процедура READY

Функция READY заключается в расчете и сохранении значений геометрических величин. В памяти сохраняются только одномерные геометрические характеристики. Величины вида YCVR(J) *XCV(I), хотя и полезны для дальнейшей работы, не сохраняются, так как для этого требуется введение двумерного массива. Унифицированное использование двух систем координат (декартовой и полярной) становится возможным благодаря должному определению обобщенных геометрических характеристик, сделанному в READY. Ни в одном месте программы не нужно использовать оператор IF при программировании различных формул для каждой системы координат.выполняет также еще одну функцию. Эта подпрограмма печатает заголовок с указанием используемой системы координат. Этот заголовок довольно важен, так как, если вы случайно используете не ту систему координат, сразу будете предупреждены. READY распечатывает текстовую переменную HEADER, которая содержит представленный пользователем заголовок задачи длиной до 64 символов.

Процедура HEART

Самая важная вычислительная часть программы содержится в подпрограмме HEART. Здесь рассчитываются коэффициенты дискретных аналогов и производятся модификации граничных условий. Взгляд, брошенный на подпрограмму HEART, прежде всего наткнется на внешний оператор цикла DO с параметрами N=1, NFMAX, предназначенный для организации последовательных вычислений каждой зависимой переменной. Внутри цикла производится вызов подпрограммы PHI, где пользователь определяет значения ALAM (I, J), GAM(I, J), SC (I, J), SP (I, J) и индикаторы граничных условий КВС. В заключение вызывается подпрограмма SOLVE для итерационного решения системы алгебраических уравнений.

В конце HEART увеличивается значение ITER, а если ITER достигает своего предельного значения, определяемого переменной LAST, то KSTOP присваивается значение единицы.

Процедура SOLVE

Задача подпрограммы SOLVE заключается в итерационном решении системы линейных алгебраических уравнений вида (2.11). Алгоритм решения, реализованный в SOLVE, описан ранее. Кроме повторов алгоритма нужное число раз в конце SOLVE реализованы некоторые дополнительные функции. Так, например, производится вычисление неизвестных значений ф на границе, когда индикатор граничных условий КВС = 2. Следует отметить, что алгоритм решения в SOLVE оперирует значениями ф только во внутренних точках. Когда решение получено, неизвестные значения ф на границе находятся из уравнений вида (2.40).

Как уже известно, в подпрограмме DEFLT большому числу переменных по умолчанию присваиваются некоторые значения. Однако некоторые переменные должны после каждого их использования принимать первоначальное значение. Такими переменными являются, например, источниковые члены SC(I, J) и SP(I, J), все параметры граничных условий КВС, и др. Этим переменным присваиваются их значения по умолчанию в конце подпрограмме SOLVE.

Процедура ZGRID

Область делится по осям х и у на различные зоны и для каждой зоны создается сетка.

Для нашей вычислительной процедуры очень важно, чтобы разрывы в распределении теплопроводности, источниковых членов и в граничных условиях совпадали с гранями контрольных объемов. При произвольном расположении разрывов не всегда можно добиться этого при использовании равномерной сетки или сетки, рассчитываемой по (3.1) и (3.2). В этом случае можно разделить расчетную область по оси х (так же, как и по оси у) на различные зоны таким образом, чтобы их границы совпадали с разрывами. Тогда можно задавать число контрольных объемов и значение п для каждой зоны в отдельности. Процедура ZGRID обеспечивает построение именно такой сетки.

Для ZGRID требуются следующие входные данные: число зон NZX и NZY по осям х и у соответственно, а также размер зоны, число контрольных объемов и значения п для каждой зоны в отдельности. Используя эти данные, ZGRID рассчитывает XU (I), YV (J), LI и Ml.

Пользователь должен задать значения массивов, характеризующих положения граней контрольных объемов XU (I) и YV (J). В общем случае сетка может быть неравномерной и конкретное распределение величин XU (I) и YV (J) зависит от особенностей задачи. Однако часто бывает необходимо задать равномерную сетку так, чтобы все контрольные объемы имели одинаковые размеры как по оси х, так и по оси у.

Входные данные, необходимые для ZGRID, состоят из значений переменных XL и YL, соответствующих размерам расчетной области по осям х и у, и из желаемого числа контрольных объемов. При этом с помощью переменной NCVLX задается число контрольных объемов в направлении координаты х, а с помощью переменной NCVLY - соответствующее их число в направлении координаты у (для полярной системы координат переменная XL задает размер области по углу, рад). На выходе из процедуры ZGRID определены значения переменных Ll, Ml и координаты граней контрольных объемов, хранящиеся в массивах XU(I) и YV(J). Процедура ZGRID может быть использована и для введения некоторых простых неравномерностей при построении сетки. С помощью формулы


где п - положительное число, можно получить соответствующую неравномерную сетку при различных п.

При п > 1 сетка оказывается мельче около левой границы, а вблизи правой границы она становится грубой и почти равномерной. При n < 1 сетка грубая у левой границы и мелкая и почти равномерная у правой границы.

Такое разбиение у левой и правой границ может быть изменено на противоположное, если использовать формулу


В процедуре ZGRID координаты граней XU (I) рассчитываются по (4.1) и (4.2). При п = 1, что задается по умолчанию, рассчитывается равномерная сетка. Другие значения п приводят к соответствующим неравномерностям. Значение п для оси х содержится в переменной POWERX. Хотя значения п в (4.1) и (4.2) всегда должны быть положительными, мы используем знак POWERX для выбора между формулами (4.1) и (4.2). Если POWERX > 0, EZGRID использует формулу (4.1), если же POWERX < 0, - (4.2) (где п = ABS (POWERX)). Неравномерность разбиения по оси у создается точно так же. Для задания степени неравномерности в этом направлении используется переменная POWERY.

По умолчанию POWERX и POWERY равны единице. Если вы не измените эти значения, то получите равномерную сетку. Обычно нежелательно использовать значения POWERX и POWERY больше 2 и меньше 0,5, так как это приводит к чрезмерной неравномерности сетки.

Процедура PRINT

Когда найдено решение физической задачи, желательно вывести на печать информацию о сетке и двумерные поля зависимых переменных. Такой вывод осуществляется при вызове процедуры PRINT. Хотя обычно PRINT вызывается тогда, когда уже достигнуто сошедшееся решение, в принципе эту утилиту можно вызывать в любое время. Удобным местом для вызова PRINT является процедура OUTPUT, где желателен дополнительный вывод результатов, обеспечиваемый PRINT.

Вывод результатов процедурой PRINT включает в себя распечатку значений Х(1) и Y(J), предваряющую двумерные поля тех F(I, J,NF), для которых значение KPRINT(NF) отлично от нуля. Для каждого NF в целях идентификации поля F распечатывается заголовок TITLE (NF) длиной до 18 символов, задаваемый пользователем.

Если вы вызываете PRINT более 1 раза (например, для получения полей температуры в различные моменты времени в нестационарной задаче), то можно избежать распечатки каждый раз одних и тех же значений X (I) и Y (J). Для этой цели служит переменная KPGR. Обычно KPGR = 1, при этом вы получаете распечатку сеточных характеристик. При KPGR - 0 сетка не выводится на печать. Если вы вызываете PRINT несколько раз, то можете установить KPGR = 0 после первого вызова PRINT.

Процедура GRID

Функция процедуры GRID - предоставление информации о расчетной сетке. В частности, необходимо задать значения MODE, LI, Ml, XU(I) для I = 2, ..., L2 и YV( J) для J = 2, ..., M2. При полярной системе координат дополнительно должно быть задано значение радиуса R(l) для нижней границы области. Грани контрольных объемов не обязательно должны равномерно отстоять одна от другой, но их координаты XU {I) и YV(J) с увеличением I и J соответственно должны расти. Для полярной системы координат значения YV

(J) должны увеличиваться в радиальном направлении. Значения XU(2) или YV (2) не обязательно должны равняться нулю. Значение R(l) может быть ненулевым, но никогда не может быть отрицательным.

Если требуется равномерная сетка, то вместо XU (I), YV (J), L1 и Ml следует задать длины XL и YL, число контрольных объемов в переменных NCVLX и NCVLY, а затем вызвать ZGRID. Можно также задать некоторые простые неравномерности с помощью значений POWERX или POWERY.

Использование неравномерной сетки является мощным средством эффективного расположения заданного числа расчетных точек. Можно легко учесть разрывы в граничных условиях, свойствах материала и распределении источников, совместив места разрывов с гранями контрольных объемов. Для создания приемлемой неравномерной сетки часто бывает полезно использование предварительных расчетов на грубых сетках, которые можно создавать с помощью ZGRID, а также самостоятельно разработав GRID.

При построении GRID помните, что ни одна составляющая неизменяемой части программы (за исключением DEFLT) еще не была выполнена. Поэтому ни геометрические величины, ни целые числа, такие как L2 или М2, еще не были рассчитаны. То, что GRID является самой первой вызываемой процедурой, предполагает множество возможностей при ее написании. Например, можно распечатать заголовок для задачи, открыть какие-нибудь файлы, выполнить некоторые предварительные действия и ввести данные оператором READ. В примерах, приведенных в книге, мы будем задавать в GRID желаемые значения текстовых переменных HEADER, PRINTF и PLOTF, которые соответствуют заголовку задачи, имени файла для вывода результатов и имени файла для графической обработки.

Процедура START

Основная функция BEGIN заключается в определении начальных значений F(I,J,NF) для соответствующих NF. Если где-либо на границе известны значения F, то желательно сразу же их задать в соответствующих граничных точках для каждого F{I,J,NF). Эти значения останутся неизменными, если соответствующие значения КВС в PHI будут сохранены равными единице.

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

Процедура OUTPUT

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

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

В OUTPUT также может быть введен какой-либо критерий сходимости для остановки вычислений. Например, можно следить за изменениями некоторой представляющей интерес величины (коэффициента трения, теплового потока, максимальной температуры в области и др.) и сделать KSTOP ненулевым, когда изменения от итерации к итерации станут достаточно малыми, или же можно наблюдать за изменениями F(I, J, NF) в некоторой выбранной точке.