С целью повышения квалификации, а так же по причине жуткого интереса, я решил разобраться в методе конечных элементов и самому написать программу. И написал. Но, где-то засела методическая ошибка и программа не работает должным образом. При этом она показывает качественно верный результат! Но не количественно. А именно: при увеличении количества элементов решение не только не сходится, но и изменяется согласно квадратному закону. Сама же картина деформирования отличается от верной только масштабом.
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Вроде бы проверил все математические процедуры. Видимо ошибка методическая. Исходя из того, что показывается качественно верный результат, можете ли Вы предположить, где находится ошибка?