Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Метод конечных разностей, Вопрос по задаче МКР 
:(
    Опции темы
Чижик
Дата 11.4.2005, 14:22 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Люди, если кто программировал задачи МКР, помогите... Есть тепловая задача, которая не сходится, причем проблемма именно в граничных условиях, если кто поможет буду очень благодарен. Вот кусок программы с граничными условиями и основным уравнением

Код

repeat
te:=te+dt1;
For i:=1 to n do
for j:=1 to m do
for k:=1 to kk do
begin
T[0,j,k]:=T[1,j,k];
T[n+1,j,k]:=T[n,j,k];
T[i,j,0]:=T[i,j,1];
T[i,j,kk+1]:=T[i,j,kk];
T[i,m+1,k]:=T[i,m,k];
T[i,0,k]:=T[i,1,k]+(dy/lamb)*q1*(i-1)/n;
end;
{For i:=0 to n+1 do
for j:=0 to m+1 do
for k:=0 to kk+1 do
T1[i,j,k]:=T[i,j,k];}
For i:=1 to n do
for j:=1 to m do
for k:=1 to kk do
T[i,j,k]:=(w*dt/(dx*dx))*(T[i+1,j,k]+T[i-1,j,k]-2*T[i,j,k])+(w*dt/(dy*dy))*(T[i,j+1,k]+T[i,j-1,k]-2*T[i,j,k])+(w*dt/(dz*dz))*(T[i,j,k+1]+T[i,j,k-1]-2*T[i,j,k])+T[i,j,k];
if te<kon then
until te>=kon;

интервал времени задан как:
Код

dt:=0.2/(w*((1/(dx*dx))+(1/(dy*dy))+(1/(dz*dz))));


Несходимость проявляется в том, что при изменении шага сетки (dy) очень значительно меняется результат, хотя по идее изменение должно быть не больше 3%
Заранее спасибо...

Это сообщение отредактировал(а) Girder - 11.4.2005, 14:30
  Вверх
Bes
Дата 11.4.2005, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: нет
Всего: 7



А ради любопытства, про что задача?
PM MAIL   Вверх
Guest
Дата 5.5.2005, 13:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Тепловая задача... кубик нагревается...
  Вверх
AISIN
Дата 5.5.2005, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 27.1.2005
Где: Пушкино

Репутация: нет
Всего: 1



Чижик Обычно такие задачи можно решить в программе ансис с помощью метода конечных элементов. Этот метод точнее вроди бы.
--------------------
Внимание!!! Внимание!!!Запущена программа по завоеванию мира!!!Выполненно 0,000000000000000000000000000000000000000000000000000002%
PM MAIL   Вверх
Peter
Дата 11.5.2005, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 28.7.2003
Где: Ставрополь

Репутация: нет
Всего: 1



Цитата(AISIN @ 5.5.2005, 14:30)
...в программе ансис с помощью метода конечных элементов. Этот метод точнее вроди бы.

Метод к.э. не точнее: точность обоих методов (мкэ и мкр) самому подобрать можно. А ANSYS денег стоит.


--------------------
всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23).
PM MAIL WWW   Вверх
AISIN
Дата 11.5.2005, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 27.1.2005
Где: Пушкино

Репутация: нет
Всего: 1



Так можно крякнутую версию на совке взять. У меня дома лежит нормально работает. Фишка такая чем мельче сетка тем точнее проверенно в Ансисе там тоже есть расхождения в ответах! Нас преподы заставляли такие задачи в ручную считать а потом на компе проверять расхождение в ответах 10%-15% было нормой хотя по стандартам должно быть 5%! У нас в универе отдают предпочтение методу конечных элементов говорят он точнее!
--------------------
Внимание!!! Внимание!!!Запущена программа по завоеванию мира!!!Выполненно 0,000000000000000000000000000000000000000000000000000002%
PM MAIL   Вверх
Гость_Чижик
Дата 8.7.2005, 05:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











М К Э не точнее, он просто позволяет проще проводить локализацию изи за этого увеличивается скорость работы, а насчет ANSYS могу сказать, что ANSYS это конечно хорошо, но как он считает на самом деле никто не знает, и откуда беруться его ошибки (а они есть) тоже никто не знает... Приходится писать свое...
  Вверх
SoWa
Дата 8.7.2005, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



Непосредственно к коду. Что не работает?


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
AISIN
Дата 11.7.2005, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 27.1.2005
Где: Пушкино

Репутация: нет
Всего: 1



На самом деле в Ансисе, чем мельче мы разбиваем тем точнее и дольше считает программа!
и еще в Ансисе берутся ошибки из за того, что все числа (которые мы в водим) представленны в безразмерной величине.
--------------------
Внимание!!! Внимание!!!Запущена программа по завоеванию мира!!!Выполненно 0,000000000000000000000000000000000000000000000000000002%
PM MAIL   Вверх
Гость_ST1X
Дата 20.7.2005, 18:29 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











T[i,j,k]:=(w*dt/(dx*dx))*(T[i+1,j,k]+T[i-1,j,k]-2*T[i,j,k])+(w*dt/(dy*dy))*(T[i,j+1,k]+T[i,j-1,k]-2*T[i,j,k])+(w*dt/(dz*dz))*(T[i,j,k+1]+T[i,j,k-1]-2*T[i,j,k])+T[i,j,k];

Ошибка твоя чисто программистская: как видно из кода ты используешь явную разностную схему, т.е. значение неизвестной сеточной функции (температуры) на новом временном слое (в.с.) явно выражается через известное значение, найденное на предыдущем в.c., то бишь при вычислении элементов массива T по формуле (*) в правой части везде заместо T необходимо использовать другой массив (в твоем случае T1), иначе, скажем, посчитал ты T[0,0,0] по (*) – все OK, а вот при вычислении T[1,0,0] ты скатываешься на T[0,0,0] – новое значение, а по теории (см. Самарского например) необходимо, вообще говоря, старое – T1[0,0,0].
Вот так правильно

T[i,j,k]:=(w*dt/(dx*dx))*(T1[i+1,j,k]+T1[i-1,j,k]-2*T1[i,j,k])+(w*dt/(dy*dy))*(T1[i,j+1,k]+T1[i,j-1,k]-2*T1[i,j,k])+(w*dt/(dz*dz))*(T1[i,j,k+1]+T1[i,j,k-1]-2*T1[i,j,k])+T1[i,j,k];
Затем присваиваешь T1=T.

  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0471 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.