Моделирование напряжённо-деформированного состояния конструкции в пакете ANSYS
Основные численные методы моделирования. Понятие метода конечных элементов. Описание основных типов конечных элементов и построение сетки. Реализация модели конструкции в пакете ANSYS, на языке программирования C#. Реализация интерфейса пользователя.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 22.01.2016 |
Размер файла | 2,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
{
if (S[i] == 1)
delta[i] = Delta_c[i];
if (S[i] == 0)
{
delta[i] = delta1[index];
index++;
}
}
for (int i = 0; i < Nodes.Count; i++)
{
Node temp = (Node)Nodes[i];
temp.u = delta[2 * i];
temp.v = delta[2 * i+1];
Nodes[i] = temp;
}
MessageBox.Show("Решение успешно построено!");
groupBox1.Visible = true;
button5.Visible = true;
}
// D -- матрица связи напряжений и деформаций,
public void matrix_D(double E, double v, double[,] D)
{
double temp=E/((1-2*v)*(1+v));
D[0, 0] = (1 - v) * temp;
D[0, 1] = v * temp;
D[1, 0] = v * temp;
D[1, 1] = (1 - v) * temp;
D[2, 2] = (1 - 2 * v) * temp / 2;
}
// B -- матрица производных функций формы (функция влияния узлов)
public void matrix_B(Element element, double[,] _B)
{
//int[,] P = { { 1, 2, 3 }, { 2, 3, 1 }, { 3, 1, 2 } };
Node A = (Node)Nodes[element.A-1];
Node B = (Node)Nodes[element.B-1];
Node C = (Node)Nodes[element.C-1];
double area = area_element(element);
double b1, b2, b3, c1, c2, c3;
b1 = B.y - C.y;
b2 = C.y - A.y;
b3 = A.y - B.y;
c1 = C.x - B.x;
c2 = A.x - C.x;
c3 = B.x - A.x;
_B[0, 0] = b1 / (2 * area);
_B[0, 2] = b2 / (2 * area);
_B[0, 4] = b3 / (2 * area);
_B[1, 1] = c1 / (2 * area);
_B[1, 3] = c2 / (2 * area);
_B[1, 5] = c3 / (2 * area);
_B[2, 0] = c1 / (2 * area);
_B[2, 1] = b1 / (2 * area);
_B[2, 2] = c2 / (2 * area);
_B[2, 3] = b2 / (2 * area);
_B[2, 4] = c3 / (2 * area);
_B[2, 5] = b3 / (2 * area);
}
private void button3_Click(object sender, EventArgs e)
{
mathcad_generic();
System.Diagnostics.Process mathCAd = new System.Diagnostics.Process();
mathCAd.StartInfo.FileName = @"kurs1.mcd";
mathCAd.Start();
}
public void mathcad_generic()
{
StreamWriter file1 = new StreamWriter("EL_1.prn");
StreamWriter file2 = new StreamWriter("KN_1.prn");
for (int i = 0; i < Elements.Count; i++)
{
Element temp = (Element)Elements[i];
string str = String.Format("{0,20} {1,20} {2,20} {3,20} {4,20} {5,20}", temp.A, temp.B, temp.C, temp.elasticity, temp.factor_Puason, temp.density);
str = String.Join(".", str.Split(','));
file1.WriteLine(str);
}
for (int i = 0; i < Nodes.Count; i++)
{
Node temp = (Node)Nodes[i];
string str = String.Format("{0,20} {1,20} {2,20} {3,20} {4,20} {5,20} {6,20} {7,20}", temp.x, temp.y, temp.Fx, temp.Fy, temp.Px, temp.u, temp.v, temp.Py);
str = String.Join(".", str.Split(','));
file2.WriteLine(str);
}
file1.Close();
file2.Close();
}
private void button4_Click(object sender, EventArgs e)
{
// Расчет цветов для каждого элемента для отображения графика перемещение по OX
if (radioButton2.Checked)
{
double max = 0;
double min = 100;
for (int i = 0; i < Elements.Count; i++)
{
double sum = 0;
Element temp = (Element)Elements[i];
sum = Math.Abs(((Node)Nodes[temp.A - 1]).u + ((Node)Nodes[temp.B - 1]).u + ((Node)Nodes[temp.C - 1]).u);
if (sum > max)
max = sum;
if (sum < min)
min = sum;
}
double colored = (max) / 1020;
color_plot = new Color[Elements.Count];
for (int i = 0; i < Elements.Count; i++)
{
Element temp = (Element)Elements[i];
double sum = Math.Abs(((Node)Nodes[temp.A - 1]).u + ((Node)Nodes[temp.B - 1]).u + ((Node)Nodes[temp.C - 1]).u);
int koler = Convert.ToInt32(sum / colored);
if (koler < 255)
color_plot[i] = Color.FromArgb(0, 0 + koler, 255);
else
if (koler < 510)
{
koler = koler - 255;
color_plot[i] = Color.FromArgb(0, 255, 255 - koler);
}
else
if (koler < 765)
{
koler = koler - 510;
color_plot[i] = Color.FromArgb(0 + koler, 255, 0);
}
else
{
koler = koler - 765;
color_plot[i] = Color.FromArgb(255, 255 - koler, 0);
}
}
}
//************************************************************
// Расчет цветов для каждого элемента для отображения графика перемещение по OY
if (radioButton3.Checked)
{
double max = 0;
double min = 100;
for (int i = 0; i < Elements.Count; i++)
{
double sum = 0;
Element temp = (Element)Elements[i];
sum = Math.Abs(((Node)Nodes[temp.A - 1]).v + ((Node)Nodes[temp.B - 1]).v + ((Node)Nodes[temp.C - 1]).v);
if (sum > max)
max = sum;
if (sum < min)
min = sum;
}
double colored = (max) / 1020;
color_plot = new Color[Elements.Count];
for (int i = 0; i < Elements.Count; i++)
{
Element temp = (Element)Elements[i];
double sum = Math.Abs(((Node)Nodes[temp.A - 1]).v + ((Node)Nodes[temp.B - 1]).v + ((Node)Nodes[temp.C - 1]).v);
int koler = Convert.ToInt32(sum / colored);
if (koler < 255)
color_plot[i] = Color.FromArgb(0, 0 + koler, 255);
else
if (koler < 510)
{
koler = koler - 255;
color_plot[i] = Color.FromArgb(0, 255, 255 - koler);
}
else
if (koler < 765)
{
koler = koler - 510;
color_plot[i] = Color.FromArgb(0 + koler, 255, 0);
}
else
{
koler = koler - 765;
color_plot[i] = Color.FromArgb(255, 255 - koler, 0);
}
}
}
//************************************************************
// Расчет цветов для каждого элемента для отображения графика суммы перемещений по OX и OY
if (radioButton4.Checked)
{
double max = 0;
double min = 100;
for (int i = 0; i < Elements.Count; i++)
{
double sum = 0;
Element temp = (Element)Elements[i];
sum = Math.Abs(((Node)Nodes[temp.A - 1]).v + ((Node)Nodes[temp.B - 1]).v + ((Node)Nodes[temp.C - 1]).v) + Math.Abs(((Node)Nodes[temp.A - 1]).u + ((Node)Nodes[temp.B - 1]).u + ((Node)Nodes[temp.C - 1]).u);
if (sum > max)
max = sum;
if (sum < min)
min = sum;
}
double colored = (max) / 1020;
color_plot = new Color[Elements.Count];
for (int i = 0; i < Elements.Count; i++)
{
Element temp = (Element)Elements[i];
double sum = Math.Abs(((Node)Nodes[temp.A - 1]).v + ((Node)Nodes[temp.B - 1]).v + ((Node)Nodes[temp.C - 1]).v) + Math.Abs(((Node)Nodes[temp.A - 1]).u + ((Node)Nodes[temp.B - 1]).u + ((Node)Nodes[temp.C - 1]).u);
;
int koler = Convert.ToInt32(sum / colored);
if (koler < 255)
color_plot[i] = Color.FromArgb(0, 0 + koler, 255);
else
if (koler < 510)
{
koler = koler - 255;
color_plot[i] = Color.FromArgb(0, 255, 255 - koler);
}
else
if (koler < 765)
{
koler = koler - 510;
color_plot[i] = Color.FromArgb(0 + koler, 255, 0);
}
else
{
koler = koler - 765;
color_plot[i] = Color.FromArgb(255, 255 - koler, 0);
}
}
}
//************************************************************
grafx.Graphics.Clear(Color_background);
plot_result = true;
DrawToBuffer(grafx.Graphics);
this.Refresh();
}
private void button5_Click(object sender, EventArgs e)
{
grafx.Graphics.Clear(Color_background);
plot_result = false;
DrawToBuffer(grafx.Graphics);
this.Refresh();
}
}
// структура для узлов конечных элементов
public class Node
{
double _x;
double _y;
double _Fx;
double _Fy;
double _Px;
double _Py;
double _u;
double _v;
public Node(double x, double y, double Fx, double Fy, double Px, double Py, double u, double v)
{
_x = x;
_y = y;
_Fx = Fx;
_Fy = Fy;
_Px = Px;
_Py = Py;
_u = u;
_v = v;
}
public double x
{
get { return _x; }
}
public double y
{
get { return _y; }
}
public double Fx
{
get { return _Fx; }
set { _Fx = value; }
}
public double Fy
{
get { return _Fy; }
set { _Fy = value; }
}
public double Px
{
get { return _Px; }
set { _Px = value; }
}
public double Py
{
get { return _Py; }
set { _Py = value; }
}
public double u
{
get { return _u; }
set { _u = value; }
}
public double v
{
get { return _v; }
set { _v = value; }
}
}
public class Element
{
int _A;
int _B;
int _C;
double _density;
double _elasticity;
double _factor_Puason;
public Element(int A, int B, int C, double density, double elasticity, double factor_Puason)
{
_A = A; _B = B; _C = C; _density = density; _elasticity = elasticity; _factor_Puason = factor_Puason;
}
public int A
{
get { return _A; }
set { _A = value; }
}
public int B
{
get { return _B; }
set { _B = value; }
}
public int C
{
get { return _C; }
set { _C = value; }
}
public double density
{
get { return _density; }
}
public double elasticity
{
get { return _elasticity; }
}
public double factor_Puason
{
get { return _factor_Puason; }
}
}
}
Размещено на Allbest.ru
Подобные документы
Основные уравнения газовой динамики, численные методы решения дифференциальных уравнений и его структура. Сущность метода контрольного объема центрированного по узлу и ячейке в программном пакете ANSYS CFX. Основы моделирования нестационарного обтекания.
дипломная работа [1,8 M], добавлен 01.06.2010Решение дифференциальных уравнений с частными производными. Метод конечных элементов, история развития, преимущества и недостатки. История разработки программной системы. Задачи, решаемые с помощью программного комплекса, области применения ANSYS.
презентация [1,7 M], добавлен 07.03.2013Ручной расчет трехстержневой фермы в ansys 14.5. Расчет пластины при одноосном растяжении, термическом расширении. Нахождение параметров профильного диска при вращении с постоянной угловой скоростью. Определение перемещений, напряжений в круглой пластине.
курсовая работа [2,5 M], добавлен 09.12.2013Схема и основные параметры элементов цепи. Вывод системы дифференциальных уравнений. Реализация алгоритма на языке программирования высокого уровня Pascal. Решение дифференциальных уравнений в пакете MathCAD. Решение интерполяции в пакете Excel.
курсовая работа [375,4 K], добавлен 06.01.2011О методе конечных элементов. Методика анализа формоизменяющих операций листовой штамповки с использованием программного комплекса ANSYS\LS-DYNA. Анализ операции осесимметричной вытяжки тонколистовой заготовки. Отображение значений напряжений и деформаций.
дипломная работа [4,3 M], добавлен 10.09.2013Оптимизационные модели на производстве. Компьютерное моделирование и программные средства. Трехмерное моделирование в T-Flex. Инженерный анализ в ANSYS. Интерфейс табличного процессора MS Excel. Построение математической модели задачи, ее реализация.
курсовая работа [5,2 M], добавлен 13.04.2014Основные положения метода конечных элементов для решения электромагнитных задач. Общая характеристика, назначение и сравнение основных функциональных возможностей двух устройств с постоянными магнитами NdFeB: магнитной пружины и магнитного держателя.
дипломная работа [3,1 M], добавлен 30.08.2010Постановка задачи для машинного моделирования, определение параметров и переменных. Алгоритмизация модели и её машинная реализация. Реализация алгоритма моделирования на общесистемном языке программирования. Описание диалога с пользователем, интерфейс.
курсовая работа [703,1 K], добавлен 14.01.2013Методы прогнозирования, их классификация. Использование рекламы в социологии. Пооперационная разработка, реализация и конфигурирование модели в пакете Anylogic. Создание анимации. Описание имитационных вычислительных экспериментов, анализ результатов.
курсовая работа [1,7 M], добавлен 03.06.2012Расчет аэродинамических характеристик плоского профиля методами физического и численного экспериментов. Описание программных комплексов ANSYS ICEM и ANSYS CFX. Потенциально-опасные и вредные производственные факторы при работе на ПЭВМ, планирование НИР.
дипломная работа [4,1 M], добавлен 01.06.2010