Помощь - Поиск - Пользователи - Календарь
Полная версия: Турбулентный поток
Форум «Всё о Паскале» > Образование и наука > Физика
Pod_Bot
Привет всем!!! Не могли бы помочь в написание программы по физике на Паскале!!!
Я почти написал но не могу исправить пару ошибок
вот программа:

uses crt, graph;
const
n= 90;
m=58;
h=1;
dt=0.02; {ПР-1}
var
ii,jj,kk,i,j,DV, MV, EC : integer;
vv, v: array[1..N, 1..M] of real;
procedure Gr_usl; {---- Grani4nie yslovia ----}
begin
for i:=1 to N do for j:=1 to M do v[i,j]:=vv[i,j];
for i:=2 to N-1 do for j:=2 to M-1 do begin
if (j<5)and(abs(5-i)<5) then v[i,j]:=0;
if (j<40)and(abs(i-50)<1+20*sqr(cos(j/25))) then v[i,j]:=300;
end;
for i:=1 to N do v[i,M]:=0;
for j:=1 to M do begin v[1,j]:=0; v[N,j]:=0;
end;
end;
procedure Raschet; {---- Ras4et ckorosti ----}
begin
vv[i,j]:=v[i,j]+(v[i,j+1]-2*v[i,j]+v[i,j-1])*dt/(h*h)+(v[i+1,j]-2*v[i,j]+v[i-1,j])*dt/(h*h);
end;
procedure Draw;{---- Vivod na ikran ----}
begin
setcolor(round(v[i,j]/40));
if v[i,j]<1 then setcolor(9);
if round(v[i,j]/60)< EC then if EC:="GraphResult;"
InitGraph(DV,MV,?c:\bp\bgi?); DV:="Detect;" BEGIN end;
rectangle(i*3+10,j*3,i*3+1,j*3+1);
rectangle(i*3+9,j*3,i*3+2,j*3+2);
setcolor(8);
else setcolor(15) then 60> grOK then Halt(1);
Repeat Gr_usl;
for i:=1 to N-1 do for j:=2 to M-1 do Raschet;
Gr_usl;
for jj:=2 to M-1 do for ii:=1 to N-1 do begin
i:=N+1-ii;
j:=M+1-jj;
Raschet;
end;
for i:=1 to N do vv[i,1]:=vv[i,2]; kk:=kk+1;
if kk/30=round(kk/30) then
for i:=2 to N-1 do for j:=2 to M-1 do Draw;
until KeyPressed;
CloseGraph;
END.
Чужак
ИМХО
Извини, Санек, что так скажу тебе, но выкинь из программы процедуры,
а саму программу напиши линейную, простую. Для решения задач подобного
рода-главное корректно сформулированная задача, а волощение её в программе-дело второе.
Ты же создаешь избыточную сложность там, где она не нужна, и рискуешь
создать логическую ошибку там, где её пропустит компьютер. При неправильной
формуле все эти навороты можно будет слить в унитаз. Все это физика, а не искусство
программировать, ты должен
а) понять физические основы задачи и модели
б) хоть в общих чертах решить на бумаге
в) если не терпится, на бумаге же прописать шаги решения-алгоритм
г) писать программу.
У тебя неверный ход мышления-ты думаешь, что компьютер
решит сам, а вникать тебе-не надо.
"Беда, коль сапоги начнет тачать пирожник, а пироги печать-сапожник",
т.е. хорошо зная программирование, пытаться решать физические задачи,
не вникая в их физическую природу.
Pod_Bot
Как ты уже понял я в физике не шарю, но хоть некоторые формулы правельные???
А то в задание написано, что надо "смодулирывать турбулентный поток", а формул ни каких не задано!!! mad.gif
andriano
Турбулентный поток не поддается численному моделированию. (если удастся - первый кандидат на Нобелевку)
Так что думаю, что это чья-то первоапрельская шутка.
Pod_Bot
Извини, я плохо сформулирывал задание. pardon.gif
Задание:
Рассмотрена методика численного моделирования стационарного течения вязкой и идеальной жидкости в трубе (течение жидкости в трубе, обтекание предмета или т.п. )
andriano
Цитата(Pod_Bot @ 17.04.2008 20:54) *

Извини, я плохо сформулирывал задание. pardon.gif
Задание:
Рассмотрена методика численного моделирования стационарного течения вязкой и идеальной жидкости в трубе (течение жидкости в трубе, обтекание предмета или т.п. )

Для начала:
1. Напиши систему дифферециальных уравнений в частных производных, описывающих задачу.
2. Нарисуй геометрию области.
3. Запиши граничные и начальные условия.
4. Опиши предполагаемый численный метод.

Кроме того крайне желательно привести в порядок код, чтобы в нем можно было ориентироваться:
- переформатируй так, чтобы на 1 строке был 1 оператор.
- "лесенка" (кое-где есть, но не везде)
- вынеси все константы в блок объявления констант (у тебя: 5, 40, 20, 50, 25, 300 и т.д.)
- для каждой константы распиши в комментариях, что она означает,
- добавь комментарии (минимум по одному на каждый цикл),
- исправь те комментарии, что неправильны (такие есть).
Чужак
Цитата(andriano @ 19.04.2008 9:56) *

Для начала:
1. Напиши систему дифферециальных уравнений в частных производных, описывающих задачу.
2. Нарисуй геометрию области.

3. Запиши граничные и начальные условия.
4. Опиши предполагаемый численный метод.

Вот, вот, форма здесь много значит. Но есть в инженерных науках есть такой приближенный
метод: область разбивается на участки мелкого размера, например треугольники (триангуляция) или
квадраты (см. рисунок, так мы моделировали магнитный поток), затем изучается что происходит на граничных
условиях (см. рис-магнитный поток на краях изгибается) в одной клеточке, что в основной зоне (в другой клеточке), затем суммируется (интегрируется). Интеграл двойной (по площади) или тройной (по объему).
Так ты получишь приближенное решение такого типа задач (инженерные расчеты допускают неточность до 5%).
andriano
Слова все, вроде, почти правильные, только вот расставлены они не совсем вено. ;)
То, о чем мы говорим, называется численным моделированием физических процессов.
Один из способов такого моделирования - метод конечных разностей. Служит он для решения систем дифференциальных уравнений в частных производных. При этом объем разбивается сеткой (сетка может быть достаточно произвольной формы) на совокупность маленьких объемчиков, в пределах каждого из которых считается, что среда имеет определенные фиксированные (по всему объемчику) параметры. И относительно этих объемчиков записывается система линейных или нелинейных уравнений, являющихся конечно-разностной аппроксимацией исходной системы уравнений. Ну а затем эта система, естественно, решается.
Так вот, первый этап - это записать исходную систему дифференциальных уравнений, описывающих рассматриваемый физический процесс. Пока мы этого не сделаем, дальше мы продвинуться не сможем. Никак.
Поэтому давай с этого и начнем:
- напиши систему уравнений для рассматриваемого физического явления - движения жидкости в трубе.
Pod_Bot
Спасибо за помощь Andriano и Чужак. Учту все ваши замечания и попытаюсь исправить!!!
Lapp
Как я понял, недоразумение с названием (я имею в виду слово "турбулентный") счастливо утряслось - ну и слава Богу.. smile.gif А то это напомнило мне, как я на заре своей разумной деятельности пытался решить уравнение нелинейной фокусировки исключительно с помощью дробления сетки и увеличения разрядности переменных. Я был абсолютно уверен, что выдам препу совершенно законченный расчет, чем окончательно заставлю его признать мою исключительную гениальность smile.gif. И был страшно разочарован, когда ресурсы бедной Минск-32 (если правильно помню, 64К слов по 36 бит, 30 тыс. оп/сек) довольно быстро иссякли. Типа как тот циган, что посредством зеленых очков приучал лошадь есть тряпье - и ведь приучил бы!.. если б она не сдохла в самый неподходящий момент, блиннн.. smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.