Сопряженные задачи переноса и диффузии в проблеме оценки и прогноза состояния окружающей среды
Заключение
Охрана окружающей среды от загрязнений промышленными предприятиями становится одной из наиболее актуальных проблем науки и техники. Исключительную роль в решении этой проблемы играет теория прямых и сопряженных уравнений, благодаря которой удается решить также проблемы глобальных изменений, проблемы минимизации напряжения, экологических климатических и биосферных возмущений.
Дипломная работа посвящена построению математической модели, описывающей процесс распространения пассивных загрязняющих веществ от сосредоточенных источников с использованием аппарата сопряженных задач для определения наиболее безопасных зон размещения объектов, загрязняющих атмосферу, расчета распределения концентрации примеси и заданных функционалов. В качестве исходного уравнения, было взято уравнение турбулентной диффузии.
Рассмотрены прямые и сопряженные задачи переноса загрязнений, методы их решения, определение функционала чувствительности, а также задачи оптимизации и регулировки мощности источников на основе прямых и сопряженных уравнений.
Рассмотренные модели в качестве составляющих могут быть использованы при создании комплексной экологической модели территории. Решение подобных задач может помочь в работе региональных природоохранных организаций по выявлению требований к промышленным выбросам предприятий с учетом допустимых доз загрязнения экологически значимых зон.
Список использованных источников
Берлянд, М.Е. Современные проблемы атмосферной диффузии. - Ленинград: Гидрометеоиздат, 1975. - 448 с.
Бызова, Н.Л. Экспериментальные исследования атмосферной диффузии и расчет распространения примеси / Н.Л. Бызова, Е.К. Гаргер, В.Н. Иванов - Ленинград: Гидрометеоиздат, 1991. - 279 с.
Марчук, Г.И. Математическое моделирование в проблеме охраны окружающей среды. - М.: Наука, 1982. - 320 с.
Марчук, Г.И. Численное решение задач динамики атмосферы и океана. - Ленинград: Гидрометеоиздат, 1974. - 303 с.
Марчук Г.И. Сопряженные уравнения, Москва: Институт вычислительной математики РАН, 2001. - 241 с.
Марчук Г.И. Методы вычислительной математики. - М.: Наука, 1989. - 608 с.
Агошков В.И. Методы решения задач математической физики / В.И. Агошков, П.Б. Дубовский, В.П. Шутяев. - М.: ФИЗМАТЛИТ, 2002. - 303 с.
Пененко В.В., Модели и методы для задач охраны окружающей среды / В.В. Пененко, А.Е. Алоян. - Новосибирск: Наука, 1985. - 254 с.
Алоян, А.Е. Моделирование динамики и кинетики газовых примесей и аэрозолей в атмосфере. - М.: Наука, 2008. - 415 с.
Петросян, Л.А. Математические модели в экологии / Л.А. Петросян, В.В. Захаров. - СПб: Изд. СпбГУ, 1997. - 256 с.
Самарский, А.А. Численные методы решения задач конвекции-диффузии / А.А. Самарский, П.Н. Вабищевич. - М.: URSS: Либроком, 2009. - 246 с.
Винтер Г. Модель экологического менеджмента. - Минск: Технопринт, 2001. - 320 с.
Пахомова Н. Экологический менеджмент / Н. Пахомова, А. Эндрес, К. Рихтер. - СПб.: Питер, 2003. - 544 с.
Приложения
Приложение А
Примеры решения прямых и сопряженных задач
Было решено несколько прямых и сопряженных задач с постоянным точечным источником в области D={0<x<2, 0<y<2}. В первой задаче источник располагался в точке М (0.5; 0.5). Так же полагалось: U=0.2, V=0, k1=1, k2=0.5, my=ny=0.5. Шаг по пространственной переменной выбирался равный 0,1, а по временной 0,01.
При решении этой задачи методом покомпонентного расщепления были получены следующие результаты при Т=2. На подстилающей поверхности (ниже источника) распределение концентрации выглядит следующим образом.
Рисунок А.1 ? Распределение концентрации при y=0
При у=0.6, т.е. выше источника распределение концентрации следующее:
Рисунок А.2 ? Распределение концентрации при y=0.6
Второй пример. В области D={0<x<4, 0<y<2}. Источник располагается в точке М (0,1; 0,8). Так же полагалось: U=V=0.5, k1=0.7, k2=0.4, my=0.6, ny=0.3. Шаг по пространственной переменной выбирался равный 0,2, а по временной 0,01.
При решении этой задачи методом покомпонентного расщепления были получены следующие результаты при Т=3. При y=0.4 (ниже источника) распределение концентрации выглядит следующим образом:
Рисунок А.3 ? Распределение концентрации при y=0.4
При у=0.6, т.е. выше источника распределение концентрации следующее:
Рисунок А.4 ? Распределение концентрации при y=0.6
Третий пример. В области D={0<x<2, 0<y<2}. Источник располагается в точке М (1; 0,5). Так же полагалось: U=-0.25, V=0.25, k1=1, k2=0.5, my=1, ny=0.5. Шаг по пространственной переменной выбирался равный 0.1, а по временной 0.01.
При решении спряженной задачи были получены следующие результаты при Т=2. При y=0,1 и при y=1.
Рисунок А.5 ? Функция чувствительности при y=0.1
Рисунок А.6 ? Функция чувствительности при y=1
Четвертый пример. В области D={0<x<2, 0<y<2}. Источник располагается в точке М (1; 0,5). Так же полагалось: U=0, V=0 (штиль), k1=10, k2=5, my=2, ny=1. Шаг по пространственной переменной выбирался равный 0.1, а по временной 0.01.
При решении этой задачи были получены следующие результаты при Т=1. При y=0,1 и при y=0,5.
Рисунок А.7 ? Распределение концентрации при y=0.1
Рисунок А.8 ? Распределение концентрации на уровне источника
Приложение Б
ЛИСТИНГ ПРОГРАММЫ
const
n1=400;
delta=0.001;
Nr=201;
type
vect=array [0. n1] of Extended;
matr=array [0. n1,0. n1] of Extended;
vectr=array [0. nr] of Extended;
var
L,M,T,k1,k2,U,V,my,ny,h,tao,cons,tc: Extended;
i,j,k,n,z: integer;
fi,fipr,fi1: matr;
a1,a2,a3,b,pr: vect;
yr,xr,ydr,fr,farr,ftr,ar,br,cr,dr,er,ffr: vectr;
function func (o,s: integer): real;
begin
if (o=strtoint (frmmain. LabeledEdit14. Text)) and
(s=strtoint (frmmain. LabeledEdit15. Text)) then
func: =cons*cons
else func: =0;
end;
procedure Progonka (var a1,a2,a3,b,pr: vect);
var
pr1,pr2: vect;
i1: integer;
begin
pr1 [n-1]: =-a1 [n] /a2 [n];
pr2 [n-1]: =b [n] /a2 [n];
for i1: =n-1 downto 1 do
begin
pr1 [i1-1]: =-a1 [i1] / (pr1 [i1] *a3 [i1] +a2 [i1]);
pr2 [i1-1]: = (b [i1] - pr2 [i1] *a3 [i1]) / (pr1 [i1] *a3 [i1] +a2 [i1]);
end;
pr [0]: = (b [0] - a3 [0] *pr2 [0]) / (a2 [0] +a3 [0] *pr1 [0]);
for i1: =1 to n do
pr [i1]: =pr1 [i1-1] *pr [i1-1] +pr2 [i1-1];
end;
procedure Prog5 (var nr: integer; ar,br,cr,dr,er,fr,yr: vectr; itask: integer);
var
i: integer;
begin
if itask=1 then
begin
dr [1]: =dr [1] /cr [1];
er [1]: =er [1] /cr [1];
cr [2]: =cr [2] - dr [1] *br [2];
dr [2]: = (dr [2] - er [1] *br [2]) /cr [2];
er [2]: =er [2] /cr [2];
for i: =3 to nr do
begin
cr [i]: =er [i-2] *ar [i] +dr [i-1] * (dr [i-2] *ar [i] - br [i]);
dr [i]: = (dr [i] +er [i-1] * (dr [i-2] *ar [i] - br [i])) /cr [i];
er [i]: =er [i] /cr [i];
end;
itask: =2;
end;
fr [1]: =fr [1] /cr [1];
fr [2]: = (fr [2] +fr [1] *br [2]) /cr [2];
for i: =3 to n do
fr [i]: = (fr [i] - fr [i-2] *ar [i] - fr [i-1] * (dr [i-2] *ar [i] - br [i])) /cr [i];
yr [nr]: =fr [nr];
yr [nr-1]: =dr [nr-1] *yr [nr] +fr [nr-1];
for i: =nr-2 downto 1 do
yr [i]: =dr [i] *yr [i+1] - er [i] *yr [i+2] +fr [i];
end;
procedure Prog3 (var nr: integer; ar,cr,br,fr,yr: vectr; itask: integer);
var
i: integer;
begin
if itask=1 then
begin
br [1]: =br [1] /cr [1];
for i: =2 to nr do
begin
cr [i]: =cr [i] - br [i-1] *ar [i];
br [i]: =br [i] /cr [i];
end;
itask: =2;
end;
fr [1]: =fr [1] /cr [1];
for i: =2 to n do
fr [i]: = (fr [i] +fr [i-1] *ar [i]) /cr [i];
yr [nr]: =fr [nr];
for i: =nr-1 downto 1 do
yr [i]: =br [i] *yr [i+1] +fr [i];
end;
procedure TfrmMain. cmdRunClick (Sender: TObject);
begin
L: = StrToFloat (LabeledEdit1. Text);
M: = StrToFloat (LabeledEdit2. Text);
T: = StrToFloat (LabeledEdit3. Text);
k1: = StrToFloat (LabeledEdit4. Text);
k2: = StrToFloat (LabeledEdit5. Text);
U: = StrToFloat (LabeledEdit6. Text);
V: = StrToFloat (LabeledEdit7. Text);
my: = StrToFloat (LabeledEdit8. Text);
ny: = StrToFloat (LabeledEdit9. Text);
n: = StrToInt (LabeledEdit10. Text);
cons: = StrToFloat (LabeledEdit11. Text);
tao: = StrToFloat (LabeledEdit16. Text);
h: =L/n cmdRun. Enabled: =false;
for i: =1 to n-1 for j: =1 to n-1 do
fi [i,j]: =0;
for j: =1 to n-1 do begin
fi [0,j]: =0;
fi [n,j]: =0;
end;
for i: =1 to n-1 do
begin
fi [i,n]: =0;
fi [i,0]: = ( (k1*fi [i,1]) / (k1+k2*h));
end;
tc: =0.0;
fi1: =fi;
Z: =0;
while (abs (tc-T) >=tao) and (z<=10000000) do
begin
z: =z+1;
tc: =tc+tao;
fi: =fi1;
for j: =1 to n-1 do
begin
a1 [0]: =0.0;
a2 [0]: =1.0;
a3 [0]: =-1.0;
b [0]: =0.0;
a1 [n]: =1.0;
a2 [n]: =-1.0;
a3 [n]: =0.0;
b [n]: =0.0;
for k: =1 to n-1 do
begin
a1 [k]: = ( ( (-u*tao) / (4*h)) - (my*tao) / (2*h*h));
a2 [k]: = (1.0+ (my*tao) / (h*h));
a3 [k]: = ( ( (u*tao) / (4*h)) - (my*tao) / (2*h*h));
b [k]: = (fi [k,j] - ( (tao*u* (fi [k+1,j] - fi [k-1,j])) / (4*h) +
(tao*my* (fi [k+1,j] - 2*fi [k,j] +fi [k-1,j])) / (2*h*h)));
Application. ProcessMessages;
end;
Progonka (a1,a2,a3,b,pr);
for k: =0 to n do
fipr [k,j]: =pr [k];
end;
{for k: =1 to n-1 do
begin
fipr [0,k]: =0;
fipr [n,k]: =0;
end;
}
for k: =1 to n-1 do
begin
fipr [k,n]: =0;
fipr [k,0]: = ( (k1*fipr [k,1]) / (k1+k2*h));
end;
fi: =fipr;
for i: =1 to n-1 do
begin
a1 [0]: =0.0;
a2 [0]: =-k1/h-k2;
a3 [0]: =k1/h;
b [0]: =0.0;
a1 [n]: =0;
a2 [n]: =1.0;
a3 [n]: =0.0;
b [n]: =0.0;
for k: =1 to n-1 do
begin
a1 [k]: = ( ( (-v*tao) / (4*h)) - (ny*tao) / (2*h*h));
a2 [k]: = (1.0+ (ny*tao) / (h*h));
a3 [k]: = ( ( (v*tao) / (4*h)) - (ny*tao) / (2*h*h));
b [k]: = (fi [i,k] - ( (tao*v* (fi [i,k+1] - fi [i,k-1])) / (4*h) +
(tao*ny* (fi [i,k+1] - 2*fi [i,k] +fi [i,k-1])) / (2*h*h))) +tao*func (i,k);
end;
Progonka (a1,a2,a3,b,pr);
for k: =0 to n do
fipr [i,k]: =pr [k];
end;
fi: =fipr;
fi1: =fipr;
end;
chart1. Visible: =true;
cmdGraf. Visible: =true;
cmdRun. Enabled: =true;
labeledEdit12. Visible: =true;
label1. Caption: =IntToStr (z);
z: =0;
end;
end.