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

Основные понятия теории течения жидкости. Создание математической модели распределения температурного поля в вязкой жидкости. Разработка цифровой модели изменения поля температуры в зависимости от: теплопроводности жидкости и металла, граничных условий.

Рубрика Математика
Вид дипломная работа
Язык русский
Дата добавления 03.07.2014
Размер файла 4,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Пользователь должен задать значения массивов, характеризующих положения граней контрольных объемов 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) в некоторой выбранной точке.

Так как подпрограмма OUTPUT вызывается 1 раз на каждой итерации, то в ней удобно изменять любые величины, которые меняются в зависимости от номера итерации или временных шагов. Если нужно изменить значения переменной KSOLVE(NF) для «включения» или «выключения» решения уравнения для соответствующего ф, то это должно быть сделано в OUTPUT.

Процедура РНI

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

Неизменяемая часть процедуры обеспечивает решение обобщенных дифференциальных уравнений для большого числа различных переменных ф. Физический смысл F(I,J,NF) не предопределен. Как же программа узнает смысл и физическое поведение каждой зависимой переменной ф? Это происходит не с помощью информации, записанной в TITLE (NF), а с помощью данных, определенных в PHI для каждого значения NF.

Значение KSOLVE(NF) для каждого NF проверяется в подпрограмме HEART. Если KSOLVE (NF) =0, то начинается процесс расчета коэффициентов дискретных аналогов для соответствующего F (I, J, NF). В начале этого процесса происходит вызов PHI. Задача процедуры PHI заключается в определении и последующем предоставлении значений л, Г, Sc, SP и информации о граничных условиях программы. Величинам л и Г соответствуют массивы ALAM(I,J) nGAM(I,J) при 1=2, ..., L2 и J=2, ...,M2. В PHI также определяются значения коэффициентов источниковых членов Sc и Sp. Они задаются массивами SC (I, J) nSP(I,J) для 1=2, .... L2 и J=2, ..., М2. Единицы измерения Sc и Sp должны соответствовать единицам измерения скорости генерации в единице объема. Кроме того, Sp должен быть отрицательным или равным нулю. Значения Sc и Sр задаваемые по умолчанию, равны нулю, поэтому если в исходном уравнении отсутствуют источниковые члены, то не требуется выполнять никаких дополнительных действий. Наконец, задача PHI заключается в задании граничных условий с помощью индикаторов KBCIl(J), KBCLl(J), KBCJl(I), KBCMl(I). Все индикаторы КВС, заданные по умолчанию, равны единице.

5.5 Интерфейс программы

После запуска программы пользователь видит окно, в котором необходимо ввести исходные температуры, выбрать варианты вывода графической модели.

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

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

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

6. Результаты исследования

6.1 Исследование влияния различных параметров на физические процессы

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

Приведем несколько экспериментов. Решим задачу, используя разные материалы и изменяя жидкость.

Сравним результаты вычисления для воды и для мазута. На рисунке 6.1 и 6.2 можно увидеть табличные значения нагрева этих жидкостей. В обоих случаях материал кожуха чугун.

Так же можем сравнить распределение температуры для кожуха. На рисунке 6.1 и 6.3 приведены результаты нагрева кожуха для случаев, когда материал кожуха чугун и алюминий.

6.2 Построение и объяснение графиков

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

Во всех трех случаях температура нагрева кожуха - 100 градусов, а температура жидкости изначально равно 10 градусам. По рисункам можно определить, что площадь нагрева будет больше, конечно же, у канала с шестью ребрами. Температура понижается по направлению к середине канала.

6.3 Программа расчёта и моделирования физических полей ELCUT

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

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

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

ELCUT становится стандартным инструментом для обучения студентов различных специальностей и все более широко входит в практику преподавания физики, электротехники, прикладных дисциплин во множестве высших учебных заведений России и стран СНГ.

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

ELCUT - это программа расчёта и моделирования физических полей, и все её применения так или иначе связаны с наукой. Традиционные направления, где применяется моделирование полей, - физические исследования, электротехника, строительная механика, - в последнее время дополняются многочисленными примерами из области нанотехнологий, биологии, химии.

Моделируемые в ELCUT физические задачи, связанные с электромагнитными полями, электрическими токами, температурными полями, упругими напряжениями и деформациями - сегодня возникают в самых различных направлениях научных исследований. Большая часть применений, описанных на страницах Промышленность и Образование, тоже можно отнести к научным. Популярность программы в ведущих российских и зарубежных научных центрах доказывается её внедрениями и публикациями, связанными с ELCUT.

6.4 Проверка корректности работы программы

Результаты, полученные в процессе вычислений в дипломной работе, отвечают условиям адекватности. Чтобы убедиться в корректности работы приложения, приведем результаты, вычисленные в программе Elcut.

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

Заключение

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

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

При написании дипломной работы были использованы знания, полученные в процессе учебы.

При выполнении поставленной задачи была:

– создана математическая модель распределения температуры жидкости с заданной вязкостью в цилиндрическом канале;

– разработан алгоритм реализации модели с помощью выбранных методов;

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

– разработана цифровая модель изменения поля температуры в зависимости от вязкости жидкости, теплопроводности материала кожуха, конфигурации канала и граничных условий;

– проведена проверка адекватности модели поставленной физической задачи.

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

Все, поставленные ранее задачи, выполнены. Полученный программный продукт готов к использованию.

Список использованной литературы

1. Патанкар С.В., Численное решение задач теплопроводности и конвективного теплообмена при течениях в каналах: пер. с англ. Е.В. Калабина; под ред Г.Г. Янькова. - М.: Издательство МЭИ, 2003. - 312с., ил

2. Чижиумов С.Д., Основы гидродинамики: учеб. пособие - Комсомольск-на-Амуре : ГОУВПО «КнАГТУ», 2007. - 106 с.

3. Патанкар С.В., Численные методы решения задач теплообмена и динамики жидкости: пер. с англ. - М. : Энергоатомиздат, 1984. - 152 с.

4. Сологаев В.И. Гидравлика (механика жидкости и газа): учеб. пособие. - Омск: изд. СибАДИ, 2010. - 64с.

5. Выгодский М.Я. Справочник по элементарной математике.- М.: Наука, 1982.- 336с.

6. Бронштейн И.Н., Семендяев К.А. Справочник по математике для инженеров и учащихся ВТУЗов.- 13-е изд., исправленное.-М.: Наука, 1986.- 544с.

7. Елизарова Т.Г., Математические модели и численные методы в динамике газа и жидкости. - М.: Физический факультет МГУ, 2005. - 224с.

8. Гебхарт Б., Джалурия Й., Свободноконветивные течения, тепло- и массообмен., кн. 1., пер. с англ. - М.: Мир, 1991. - 678 с., ил.

Приложение

procedure DEFLT // задание переменных по умолчанию

var

nz,n,i,j:integer;

begin

kstop:=0;

last:=5;

iter:=0;

kord:=2;

mode:=1;

kpgr:=1;

kout:=3;

small:=1.e-20;

big:=1.e+20;

time:=0.;

dt:=1.e+20;

r[1]:=0.;

powerX:=1.;

powerY:=1.;

for nz:=1 to nzmax do

begin

powrX[nz]:=1.;

powrY[nz]:=1.;

end;

end;

procedure PHI // определение значений

procedure Phi;

var

i,j:integer;

begin

for j:=2 to M2 do

for i:=2 to L2 do

begin

gam[i,j]:=cond; //коэфф-т диффузии Г

end;

for j:=2 to M2 do // Определение граничных условий

begin

kbci1[j]:=2;

kbcl1[j]:=2;

end;

for i:=1 to ncvlx do // Определение граничных условий

// для представления правой границы в виде оси симметрии

kbcm1[i]:=2;

end;

procedure GRID // предоставление информации о расчетной сетке

procedure Grid;

begin

rout:=1.; // радиус кожуха

rin:=0.8; // радиус трубы

alpha:=180; // рассчитываемая область, половина круга

xl:=0.5*alpha*Pi*rout*rout/180; // формула круга

r[1]:=rin; // радиус вектор

yl:=rout-rin; // толщина кожуха

ncvlx:=47; // количество рассчитываемых радиус векторов

ncvly:=15; // количество рассчитываемых секторов

mode:=3; // применяется полярная система координат

EZgrid; // вызов процедуры

end;

procedure BEGIN // Определение начальных граничных условий

var

i,j:integer;

begin

ksolve[2]:=1;

kprint[1]:=1;

kprint[2]:=1;

kplot[1]:=1;

kplot[2]:=1;

last:=6;

// задаем теплопроводность металлам

if Form1.N14.Checked then cond:=3;

if Form1.N15.Checked then cond:=7;

if Form1.N16.Checked then cond:=11;

if Form1.N17.Checked then cond:=19;

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

cp:=1; //теплоемкости

den:=1; //плотности

dpdz:=-1; //градиенту давления

t1:=StrToFloat(Form1.Edit1.Text); // температура нагрева

t2:=StrToFloat(Form1.Edit2.Text); // температура стенки канала

temperGraf := t2;

phocp:=den*cp; //объемная теплоемкость

for j:=1 to m1 do

for i:=1 to l1 do

begin

f[i,j,1]:=0;

f[i,j,2]:= t1; //t1;

f[i,m1,2]:= t2; //t2;

end;

end;

procedure OUTPUT; // расчет и вывод на экран

var

j,i,iunit:integer;

begin

if(iter=0) then

begin

ksolve[1]:=1;

end;

if(iter=3) then // после трех итераций нахождения скорости w,

begin // начинаем находить температуру Т

ksolve[1]:=1;

ksolve[2]:=0;

end;

Print;

end;

procedure PRINT // Вывод информации о сетке и двумерных полей

var

i,j:integer;

temper, temper1: double;

begin

// выводим значения в таблицу

for i:=49 downto 1 do

for j:=1 to 17 do

Form3.StringGrid2.Cells[i,j] := FloaToStrF((f[i,j,2]),ffFixed,5,2);

// выводим заголовки таблицы

for i:=49 downto 1 do

Form3.StringGrid2.Cells[i,0] := IntToStr(i) + ' радиус';

for j:=1 to 17 do

Form3.StringGrid2.Cells[0,j] := IntToStr(j) + ' сектор';

temper := (StrToFloat(Form3.StringGrid2.Cells[48,16]) +

StrTFloat(Form3.StringGrid2.Cells[49,16]))/2;

Form3.StringGrid2.Cells[48,17]:= FloatToStrF(temper,ffFixed,5,2);

temper := (StrToFloat(Form3.StringGrid2.Cells[2,16]) +

StrTFloat(Form3.StringGrid2.Cells[1,16]))/2;

Form3.StringGrid2.Cells[1,17]:= FloatToStrF(temper,ffFixed,5,2);

trnagrev := StrToFloat(Form3.StringGrid2.Cells[13,2]);

trnagrev2 := StrToFloat(Form3.StringGrid2.Cells[1,2]);

if (Form1.N41.Checked = true) then

trnagrev1 := StrToFloat(Form3.StringGrid2.Cells[7,2])

else

if (Form1.N61.Checked = true) then

begin

trnagrev1 := StrToFloat(Form3.StringGrid2.Cells[4,2]);

trnagrev3 := StrToFloat(Form3.StringGrid2.Cells[9,2]);

end;

end;

procedure ZGRID // предоставление информации о расчетной сетке

var

i,i1,i2,j,j1,j2,nz,ilast,jlast:integer;

dd,fcvlx,fcvly:double;

begin

xu[2]:=0.;

i2:=2;

for nz:=1 to nzx do

begin

fcvlx:=(ncvx[nz]);

ilast:=i2;

i1:=ilast+1;

i2:=ilast+ncvx[nz];

for i:=i1 to i2 do

begin

dd:=(i-ilast)/fcvlx;

if (powrx[nz]>0) then

xu[i]:=xu[ilast]+xzone[nz]*power(dd,powrx[nz])

else

xu[i]:=xu[ilast]+xzone[nz]*(1.-power((1.-dd),(-powrx[nz])));

end;

end;

L1:=i2; //Рассматривается направление Y

yv[2]:=0.;

j2:=2;

for nz:=1 to nzy do

begin

fcvly:=ncvy[nz];

jlast :=j2;

j1:=jlast+1;

j2:=jlast+ncvy[nz];

for j:=j1 to j2 do

begin

dd:=(j-jlast)/fcvly;

if (powry[nz]>0) then

yv[j]:=yv[jlast]+yzone[nz]*power(dd,powry[nz])

else

yv[j]:=yv[jlast]+yzone[nz]*(1.-power((1.-dd),(-powry[nz])));

end;

end;

M1:=j2;

end;

procedure EZGRID

var

fcvlx,fcvly,dd:double;

i,j:integer;

begin

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

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

L1:=ncvlx+2;

xu[2]:=0.; //координаты граней по х

xu[L1]:=xl;

L2:=L1-1;

fcvlx:=ncvlx;

for i:=3 to L2 do

begin

dd:=(i-2)/fcvlx;

if (powerx>0) then

xu[i]:=xl*power(dd,powerx)

else

xu[i]:=xl*(1.-power((1.-dd),(-powerx)));

end;

M1:=ncvly+2;

yv[2]:=0.;

yv[M1]:=yl;

M2:=M1-1;

fcvly:=ncvly;

for j:=3 to M2 do

begin

dd:=(j-2)/fcvly;

if (powery>0) then

yv[j]:=yl*power(dd,powery)

else

yv[j]:=yl*(1.-power((1.-dd),(-powery)));

end;

end;

procedure HEART()

// Расчет коэффициентов дискретных аналогов и модификация граничных условий

label

Lab2;

var

n,j,i:integer;

beta,rlx,vol,apt,diff,temp,area,anb,ainr:double;

begin

//Построение цикла для всех аналогов

for n:=1 to nfmax do //последовательное вычисление каждой зависимой переменной

begin

nf:=n;

if (ksolve[nf]=0) then goto Lab2; //переход к следующей итерации цикла

Phi;

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

beta:=4./3.;

if (kord=1) then beta:=1.;

rlx:=(1.-relax[nf])/relax[nf];

//Рассматриваются объемные условия

for j:=2 to M2 do

for i:=2 to L2 do

begin

vol:=Ycvr[j]*Xcv[i]; //объем КО

apt:=alam[i,j]/dt;

sc[i,j]:=(sc[i,j]+apt*f[i,j,nf])*vol;//коэф-т b

sp[i,j]:=(apt-sp[i,j])*vol; //коэфф-т ар

end;

//коэффициенты для распространения по Х

for j:=2 to M2 do

for i:=2 to L3 do

begin

diff:=arx[j]*2.*gam[i,j]*gam[i+1,j]/((Xcv[i]*gam[i+1,j]+Xcv[i+1]*gam[i,j]+small)*sx[j]);

aip[i,j]:=diff+small; //коэф-т aE

aim[i+1,j]:=aip[i,j]; //коэф-т aW

end;

for j:=2 to M2 do

begin

//Рассматривается граница i=1

diff:=gam[2,j]/(0.5*xcv[2]*sx[j])+small; //диффузионная

aim[2,j]:=beta*diff; //коэф-т aW

aip[1,j]:=aim[2,j]; //коэф-т aE

aim[2,j]:=aim[2,j]*arx[j];

aim[1,j]:=(beta-1)*aip[2,j]/arx[j];

aip[2,j]:=aip[2,j]+aim[1,j]*arx[j];

if (kbci1[j]=1) then

sc[2,j]:=sc[2,j]+aim[2,j]*f[1,j,nf]

else

begin

sp[1,j]:=aip[1,j]-flxpi1[j]; //коэф-т aР

sc[1,j]:=flxci1[j]; //коэф-т b

temp:=aim[2,j]/sp[1,j];

sp[2,j]:=sp[2,j]-aip[1,j]*temp;

aip[2,j]:=aip[2,j]-aim[1,j]*temp; //коэф-т aE

sc[2,j]:=sc[2,j]+sc[1,j]*temp;

end;

sp[2,j]:=sp[2,j]+aim[2,j];

aim[2,j]:=0.;

//Рассматривается граница i=L1

diff:=gam[L2,j]/(0.5*xcv[L2]*sx[j])+small;

aip[L2,j]:=beta*diff;

aim[L1,j]:=aip[L2,j];

aip[L2,j]:=aip[L2,j]*arx[j];

aip[L1,j]:=(beta-1)*aim[L2,j]/arx[j];

aim[L2,j]:=aim[L2,j]+aip[L1,j]*arx[j];

if (kbcL1[j]=1) then

sc[L2,j]:=sc[L2,j]+aip[L2,j]*f[L1,j,1]

else

begin

sp[L1,j]:=aim[L1,j]-flxpL1[j];

sc[L1,j]:=flxcL1[j];

temp:=aip[L2,j]/sp[L1,j];

sp[L2,j]:=sp[L2,j]-aim[L1,j]*temp;

aim[L2,j]:=aim[L2,j]-aip[L1,j]*temp;

sc[L2,j]:=sc[L2,j]+sc[L1,j]*temp;

end;

sp[L2,j]:=sp[L2,j]+aip[L2,j];

aip[L2,j]:=0.;

end;

//Коэффициенты для распространения Y

for j:=2 to M3 do

for i:=2 to L2 do

begin

area:=rv[j+1]*xcv[i]; //площадь грани КО

diff:=area*2.*gam[i,j]*gam[i,j+1]/(ycv[j]*gam[i,j+1]+ycv[j+1]*gam[i,j]+small);

ajp[i,j]:=diff+small; //коэф-т aN

ajm[i,j+1]:=ajp[i,j]; //коэф-т aS

end;

for i:=2 to L2 do

begin

//Рассматривается граница j=1

area:=rv[2]*xcv[i];

diff:=gam[i,2]/(0.5*ycv[2])+small;

ajm[i,2]:=beta*diff;

ajp[i,1]:=ajm[i,2];

ajm[i,2]:=ajm[i,2]*area;

ajm[i,1]:=(beta-1)*ajp[i,2]/(rv[3]*xcv[i]);

ajp[i,2]:=ajp[i,2]+ajm[i,1]*area;

if (kbcj1[i]=1) then

sc[i,2]:=sc[i,2]+ajm[i,2]*f[i,1,nf]

else

begin

sp[i,1]:=ajp[i,1]-flxpj1[i];

sc[i,1]:=flxcj1[i];

temp:=ajm[i,2]/sp[i,1];

sp[i,2]:=sp[i,2]-ajp[i,1]*temp;

ajp[i,2]:=ajp[i,2]-ajm[i,1]*temp;

sc[i,2]:=sc[i,2]+sc[i,1]*temp;

end;

sp[i,2]:=sp[i,2]+ajm[i,2];

ajm[i,2]:=0.;

//Рассматривается граница j=M1

area:=rv[M1]*xcv[i];

diff:=gam[i,M2]/(0.5*ycv[M2])+small;

ajp[i,M2]:=beta*diff;

ajm[i,M1]:=ajp[i,M2];

ajp[i,M2]:=ajp[i,M2]*area;

ajp[i,M1]:=(beta-1)*ajm[i,M2]/(rv[M2]*xcv[i]);

ajm[i,M2]:=ajm[i,M2]+ajp[i,M1]*area;

if (kbcM1[i]=1) then

sc[i,M2]:=sc[i,M2]+ajp[i,M2]*f[i,M1,2]

else

begin

sp[i,M1]:=ajm[i,M1]-flxpM1[i];

sc[i,M1]:=flxcM1[i];

temp:=ajp[i,M2]/sp[i,M1];

sp[i,M2]:=sp[i,M2]-ajm[i,M1]*temp;

ajm[i,M2]:=ajm[i,M2]-ajp[i,M1]*temp;

sc[i,M2]:=sc[i,M2]+sc[i,M1]*temp;

end;

sp[i,M2]:=sp[i,M2]+ajp[i,M2];

ajp[i,M2]:=0.;

end;

//Построение массивов sp[i,j] и sc[i,j]

for j:=2 to M2 do

begin

for i:=2 to L2 do

begin

anb:=aip[i,j]+aim[i,j]+ajp[i,j]+ajm[i,j]; //сумма соседних коэф-тов

ainr:=anb*rlx; //инерция I

sp[i,j]:=sp[i,j]+anb+ainr; //коэф-т aP

sc[i,j]:=sc[i,j]+ainr*f[i,j,1]; //коэф-т b

end;

//Вызов процедуры Solve для получения решения дискретных аналогов

end;

Solve;

end;

Lab2:

time:=time+dt;

iter:=iter+1;

if (iter>=last) then kstop:=1;

end;

procedure TForm1.Button1Click(Sender: TObject);

label

Lab1;

begin

if not TryStrToFloat(Form1.Edit1.Text, t1) or not TryStrT

Float(Form1.Edit2.Text, t2)

or (StrToFloat(Form1.Edit2.Text) < 0) or (StrTFloat(Form1.Edit1.Text) < 0) then

begin

MessageBox(handle, PChar('Введите корректные температуры!'), PChar('Ошибка'), MB_OK+MB_ICONWARNING)

end

else

begin

if t1 >= t2 then

begin

MessageBox(handle, PChar(' Температура на границах внутренней трубы должна ' + #10 + 'быть не равной и меньше температуры на участке нагрева!'), PChar('Ошибка'), MB_OK+MB_ICONSTOP)

end

else

begin

if StrToFloat(Form1.Edit3.Text) >= StrToFloat(Form1.Edit1.Text) then

begin

MessageBox(handle, PChar('Температура жидкости должна быть меньше температуры стенки канала!'), PChar('Ошибка'), MB_OK+MB_ICONSTOP)

end

else

if (StrToFloat(Form1.Edit2.Text) - StrToFloat(Form1.Edit1.Text) < 10) then

begin

end

else

begin

Form1.Label4.Caption := 'Выбран материал кожуха: ' + material + #10 + 'На внутренней границе ' + Form1.Edit1.Text + ' C' + #176 + #10 + 'По каналу течет жидкость ' + Form1.Edit3.Text + ' C' + #176 + #10 + 'Нагрев идет с нижней части трубы ' + Form1.Edit2.Text + ' C' + #176;

if (Form1.RadioGroup1.ItemIndex = 2) then

begin

Form3.Label1.Caption := 'Материал кожуха: ' + material + '.';

Form3.Caption := 'Нагрев кожуха ';

end;

if (Form1.RadioGroup1.ItemIndex = 1) then

begin

Form3.Label1.Caption := 'Выбрана жидкость:' + gidkost + '.';

Form3.Caption := 'Нагрев жидкости';

end;

Deflt;

Grid;

Ready;

Start;

Lab1:

Output;

if (kstop<>0) then

begin

metka := 0;

Form1.Button3.Click;

abort;

end;

Heart;

goto Lab1;

abort;

end;

end;

end;

end;

procedure TForm1.Button2Click(Sender: TObject);

// нажатие на кнопку строит графическую иллюстрацию

var

i, j: integer;

begin

if Form3.StringGrid2.Cells[1,1] = '' then

MessageBox(handle, PChar('Сначала необходимо произвести расчет! !'), PChar('Ошибка'), MB_OK+MB_ICONERROR)

else

begin

Form4.N1.Click;

Form4.Show();

end;

end;

procedure TForm3.Button1Click(Sender: TObject);

// сохранение значений в excel файл

var

znac : double;

begin

if (Form1.RadioGroup1.ItemIndex = 2) then

begin

if (Form3.stringGrid2.Cells[49,17] = '') then

MessageBox(handle, PChar('Таблица пустая! ' + #10 + 'Вы точно хотите сохранить?'), PChar('Сохранение'), MB_OK+MB_ICONWARNING)

else

if SaveAsExcelFile(Form3.stringGrid2, 'Значения нагрева кожуха', 'c:\teplo.xls') then

ShowMessage('Данные успешно сохранены!');

end;

if (Form1.RadioGroup1.ItemIndex = 1) then

begin

if (Form3.stringGrid1.Cells[1,17] = '') then

MessageBox(handle, PChar('Таблица пустая! ' + #10 + 'Вы точно хотите сохранить?'), PChar('Сохранение'), MB_OK+MB_ICONWARNING)

else

if SaveAsExcelFile(Form3.stringGrid1, 'Значения нагрева жидкости', 'c:\teplo1.xls') then

ShowMessage('Данные успешно сохранены!');

end

end;

procedure TForm4.Button1Click(Sender: TObject);

// построение графической иллюстрации

var

i,j1,l,l1,mass,mass1 :integer;

temp, tem1,znach : double;

begin

// задается стиль пера

Form4.image1.Canvas.Brush.Style := bsDiagCross;

// задается цвет карандаша

Form4.image1.Canvas.Pen.Color := clBlack;

// строиться прямоугольник

Form4.image1.Canvas.Rectangle(0,0,800,650);

// очищается стиль

Form4.image1.Canvas.Brush.Style := bsClear;

tem1 := (temperGraf+2)/210;

l := 38;

l1 := l;

j := 7;

// строиться сам рисунок, для каждой четверти круга свой цикл

// левый верхний

for mass:=26 to ncvlx+2 do

begin

j1 := j;

mass1 :=75 - mass;

for i:= ncvly+2 downto 1 do

begin

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

// цвет

Form4.image1.Canvas.Brush.Color := color_schema[round(StrToFloat(Form3.StringGrid2.Cells[mass1,i])/tem1)];

Form4.image1.Canvas.Pen.Color := clBlack;

if Form4.N2.Checked = false then

Form4.image1.Canvas.Pen.Color := color_schema[round(StrToFloat(Form3.StringGrid2.Cells[mass1,i])/tem1)];

Form4.image1.Canvas.Pie(j1,j1,650-j1,650-j1,massI[mass+1],massJ[mass+1],massI[mass],massJ[mass]);

j1 := j1+j;

end;

end;

// левый нижний

for mass:=1 to 24 do

begin

j1 := j;

mass1 := mass + 1;

for i:=17 downto 1 do

begin

Form4.image1.Canvas.Brush.Color := color_schema[round(StrToFloat(Form3.StringGrid2.Cells[25-mass,i])/tem1)];

Form4.image1.Canvas.Pen.Color := clBlack;

if Form4.N2.Checked = false then

Form4.image1.Canvas.Pen.Color := color_schema[round(StrToFloat(Form3.StringGrid2.Cells[25-mass,i])/tem1)];

Form4.image1.Canvas.Pie(j1,j1,650-j1,650-j1,massI[mass+1],massJ[mass+1],massI[mass],massJ[mass]);

j1 := j1+j;

end;

end;

// правый верхний

for mass:=1 to 24 do

begin

j1 := j;

mass1 := 25 - mass;

for i:=17 downto 1 do

begin

Form4.image1.Canvas.Brush.Color := color_schema[round(StrToFloat(Form3.StringGrid2.Cells[mass1,i])/tem1)];

Form4.image1.Canvas.Pen.Color := clBlack;

if Form4.N2.Checked = false then

Form4.image1.Canvas.Pen.Color := color_schema[round(StrToFloat(Form3.StringGrid2.Cells[mass1,i])/tem1)];

Form4.image1.Canvas.Pie(j1,j1,650-j1,650-j1,massI1[mass],massJ1[mass],massI1[mass+1],massJ1[mass+1]);

j1 := j1+j;

end;

end;

// правый нижний

for mass:=26 to 49 do

begin

j1 := j;

mass1 := 75 - mass;

for i:=17 downto 1 do

begin

Form4.image1.Canvas.Brush.Color := color_schema[round(StrToFloat(Form3.StringGrid2.Cells[mass1,i])/tem1)];

Form4.image1.Canvas.Pen.Color := clBlack;

if Form4.N2.Checked = false then

Form4.image1.Canvas.Pen.Color := color_schema[round(StrToFloat(Form3.StringGrid2.Cells[mass1,i])/tem1)];

Form4.image1.Canvas.Pie(j1,j1,650-j1,650-j1,massI1[mass],massJ1[mass],massI1[mass+1],massJ1[mass+1]);

j1 := j1+j;

end;

end;

Form4.image1.Canvas.Brush.Style := bsClear;

Form4.image1.Canvas.Brush.Style := bsSolid;

Form4.image1.Canvas.Brush.Color := clWhite;

Form4.image1.Canvas.Pen.Color := clBlack;

Form4.image1.Canvas.Ellipse(130,130,520,520);

Form4.image1.Canvas.Brush.Style := bsClear;

end;

Размещено на Allbest.ur


Подобные документы

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

    практическая работа [693,0 K], добавлен 14.04.2013

  • Разработка простого метода для решения сложных задач вычислительной и прикладной математики. Построение гибкого сеточного аппарата для решения практических задач. Квазирешетки в прикладных задачах течения жидкости, а также применение полиномов Бернштейна.

    дипломная работа [1,9 M], добавлен 25.06.2011

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

    контрольная работа [1,7 M], добавлен 09.03.2016

  • Проектирование математической модели. Описание игры в крестики-нолики. Модель логической игры на основе булевой алгебры. Цифровые электронные устройства и разработка их математической модели. Игровой пульт, игровой контроллер, строка игрового поля.

    курсовая работа [128,6 K], добавлен 28.06.2011

  • Решение дифференциальных уравнений математической модели системы с гасителем и без гасителя. Статический расчет виброизоляции. Определение собственных частот системы, построение амплитудно-частотных характеристик и зависимости перемещений от времени.

    контрольная работа [1,6 M], добавлен 22.12.2014

  • Аналитическое и компьютерное исследования уравнения и модели Ван-дер-Поля. Сущность и особенности применения методов Эйлера и Рунге-Кутта 4 порядка. Сравнение точности метода Эйлера и Рунге-Кутта на одном графике, рисуя фазовые траектории из 1 точки.

    курсовая работа [341,7 K], добавлен 06.10.2012

  • Понятие и типы математических моделей, критерии их классификации. Примеры использования дифференциальных уравнений при моделировании реальных процессов: рекламная компания, истечение жидкости, водяные часы, невесомость, прогиб балок, кривая погони.

    курсовая работа [410,0 K], добавлен 27.04.2014

  • Составление математической модели для предприятия, характеризующей выручку предприятия "АВС" в зависимости от капиталовложений (млн. руб.) за последние 10 лет. Расчет поля корреляции, параметров линейной регрессии. Сводная таблица расчетов и вычислений.

    курсовая работа [862,4 K], добавлен 06.05.2009

  • Основные положения теории математического моделирования. Структура математической модели. Линейные и нелинейные деформационные процессы в твердых телах. Методика исследования математической модели сваи сложной конфигурации методом конечных элементов.

    курсовая работа [997,2 K], добавлен 21.01.2014

  • Изложение теории поля с помощью векторного анализа и составление пособия. Циркуляция векторного поля. Оператор Гамильтона и векторные дифференциальные операции второго порядка. Простейшие векторные поля. Применение теории поля в инженерных задачах.

    дипломная работа [190,2 K], добавлен 09.10.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.