2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Помогите найти ошибку.
Сообщение19.06.2013, 14:10 


28/05/13
18
С целью повышения квалификации, а так же по причине жуткого интереса, я решил разобраться в методе конечных элементов и самому написать программу. И написал. Но, где-то засела методическая ошибка и программа не работает должным образом. При этом она показывает качественно верный результат! Но не количественно. А именно: при увеличении количества элементов решение не только не сходится, но и изменяется согласно квадратному закону. Сама же картина деформирования отличается от верной только масштабом.
http://imageshack.us/photo/my-images/819/lj7d.jpg/
По оси х - размер элемента, по оси у - перемещение (е-6 ) (в данном случае правой нижней точки при закреплении левой и верхней стороны прямоугольника). Линия тренда говорит, что результат квадратично зависит от размера элемента. Abaqus показывает, что истинное перемещение для параметров по - умолчанию должно быть 12,05 е-6.

Программа рассчитывает перемещения узлов пластины в её плоскости при действии распределённых сил приложенных к этой пластине, действующих так же в её плоскости.
Структура программы: 1. при запуске предлагается ввести ширину, длину, толщину, модуль упругости, коэф. Пуассона и силы. А так же примерный размер треугольного элемента. 2. при нажатии elements size программа найдёт наиболее подходящий размер элемента. 3. create mesh - разбивка на сетку. 4. plot mesh - вывод сетки на экран, номеров узлов и номеров элементов. 5. element stiffness matrix - не участвующая в расчёте процедура - выводит на экран матрицу жесткости второго элемента. 6. global stiffness matrix - рассчитывает глобальную матрицу жёсткости. 7. up - left - right - down - запрещает соответствующим сторонам пластины перемещения. 8. loads vector формирует вектор нагрузок. 9. solution equations - решает систему уравнений методом Гаусса. 10. visualisation results - рисует деформированную пластину.

Я сначала грешил на процедуру определения матрицы жёсткости элемента, но сверка с другими источниками литературы (Р. Галлагер "Метод конечных элементов основы" стр. 134) показала верность процедуры. (Правда матрица жёсткости немного отличается от книги - цифры те же, но расположены в другом порядке в матрице - я это связываю с тем, что у Галлагера в другом порядке учтены перемещения узлов: U1U2U3V1V2V3 - у меня U1V1U2V2U3V3).

программа http://files.mail.ru/D0E5518FE4224FBFBB3C266A6E1DC903

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

 Профиль  
                  
 
 Re: Помогите найти ошибку.
Сообщение19.06.2013, 22:27 


24/01/09
1090
Украина, Днепропетровск
Вы жесткость элемента масштабируете обратно пропорционально размерам?

 Профиль  
                  
 
 Re: Помогите найти ошибку.
Сообщение20.06.2013, 09:24 


28/05/13
18
Матрица жёсткости элемента представляется в следующем виде.
$$[k] = tA[B]^T[D][B]$$
t -толщина пластины, А площадь элемента, [B] матрица градиентов, [D] матрица упругих констант.[k] - матрица жёсткости элемента.
$$[D] = \frac{E}{1-\mu^2}\left( \begin{array}{ccc} 1 & \mu & 0\\ \mu & 1 & 0\\
0 & 0 & \frac{1-\mu}2 \end{array} \right) $$
E модуль упругости первого рода, $\mu$ - коэффициент Пуассона.
$$[B] = \frac1{2A}\left( \begin{array}{cccccc} y_j_k & 0 & y_k_i & 0 & y_i_j & 0\\ 0 & x_k_j & 0 & x_{ik}  & 0 & x_{ji}\\ x_{kj} & y_{jk} & x_{ik} & y_{ki}  & x_{ji} & y_{ij}\end{array} \right)$$
где $y_{ik} = y_i - y_k$ и т.д.
где $y_i $ координата У i-го узла элемента, и т.д.

Согласно Балабуху "Строительная механика ракет" стр. 98.
Я сверил с (Р. Галлагер "Метод конечных элементов основы" стр. 134) в маткаде вроде всё сошлось. Но у Галлагера мжэ немного по-другому сформирована.

 Профиль  
                  
 
 Re: Помогите найти ошибку.
Сообщение20.06.2013, 20:24 


24/01/09
1090
Украина, Днепропетровск
Не получается пока экзешник запустить. Видимо жаждет библиотек, и не признаётся каких. Не могу увидеть какие промежуточные матрицы поучаются.
Так вы говорите в маткаде тот же алгоритм показыват правильный результат? Тогда может хватит просто сравнить последовательно результаты-матрицы там и там?

Раз распределение имеет правильную форму, но плывет с подробностью разбиения, возможно где-то масштабный коэффициент потерян. Или в матрицах, или при нормализации входных сил/конечного результата.
А какие результаты получаются при разбиении буквально на несколько элементов? Возможно так можно будет поймать корень зол.

 Профиль  
                  
 
 Re: Помогите найти ошибку.
Сообщение21.06.2013, 09:39 


28/05/13
18
По - видимому, программа требует net.framework 4.5.

Что такое нормализация входных сил\ конечного результата?
Я силы представляю в виде глобального вектора столбца сил, который получается суммированием векторов столбцов сил элементов. Кстати, отсюда выходит, что строка глобального столбца, соответствующая некоторому узлу равна силе, приложенной к пластине, умноженной, на количество элементов, содержащих в себе этот узел. После этого суммирования строки глобального вектора сил, соответствующие узлам в которых запретили перемещения признаются неизвестными.
Получается система уравнений, содержащая n уравнений и n неизвестных. В каждом узле неизвестно либо перемещение, либо сила. Система решается методом Гаусса. Полученные перемещения без каких - либо "нормализаций" считаются истинными.
Это верно?

На выходных займусь всеми перепроверками в маткаде.

 Профиль  
                  
 
 Re: Помогите найти ошибку.
Сообщение21.06.2013, 19:05 


24/01/09
1090
Украина, Днепропетровск
Я бы попробовал посмотреть вид матриц и решения при самом крупном разбиении.

 Профиль  
                  
 
 Re: Помогите найти ошибку.
Сообщение25.06.2013, 11:57 


28/05/13
18
Сейчас завал на работе. Извиняюсь, но продолжить тему смогу минимум через пару недель.

 Профиль  
                  
 
 Re: Помогите найти ошибку.
Сообщение19.07.2013, 13:23 


28/05/13
18
Theoristos, спасибо за помощь. Но я решил не останавливаться на поиске данной ошибки. Напишу другую программу. Эта всё равно носила образовательно-методический характер. Новую программу нормальным кодом, с библиотеками. Не буду сидеть в яме пол века - двинусь дальше.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Dmitriy40


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group