f2 = new Form2();
gr = f2.panel1.CreateGraphics();
f2.Show();
}
private void button3_Click(object sender, EventArgs e)
{
double[] kk = new double[nx + 1];
for (int i = 1; i < nt; i++)
{
Array.Copy(vX, i * (nx + 1)/*i * (nx + 1)*/, kk, 0, nx + 1);//{1,2,3,3,2,1};
DrawGraph(L, kk, 1);
}
}
}
}
Листинг программы Метод Конечных Элементов
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace thermalTask
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
double l_all, //общая длина стержня
l1, l2, l3, l4, //длины участков стержня
lel, //длина конечного элеменат
c1, c2, //удельные теплоёмкости материалов
ro1, ro2, //плотности материалов
lam1, lam2, //теплопроводность материала
A, //площаль поперечного сесения стержня
dT, //промежуток времени
Q, //внутренний приток тепла
q, //плотность теплового потока
h, //коэффициент конвекции
Ts; //температура окружающей среды
double t;
int kolEl; //количество конечных элементов
//double[,] ci;
double[,] T;
double[] F;
double[,] B,
P,
K, // матрица теплопроводности
C; // матрица демпфирования,
double[,] ci = {{2.0,1.0}, //локальная матрица демпфирования
{1.0,2.0}};
public void matrNaConst(double[,] MatR, double cons) //умножение матрицы на константу
{
for (int i = 0; i < MatR.GetLength(0); i++)
for (int j = 0; j < MatR.GetLength(1); j++)
MatR[i, j] *= cons;
//return MatR;
}
public void priSummMatr(double[,] Matr, double[,] mSum, int LVindex) //присуммирование матриц
{
for(int i=LVindex;i<LVindex+mSum.GetLength(0);i++)
for (int j = LVindex; j < LVindex + mSum.GetLength(1); j++)
{
Matr[i, j] += mSum[i - LVindex, j - LVindex];
}
}
public double[,] summMatr(double[,] A, double mulToA, double[,] B, double mulToB) //суммирование матриц
{
double[,] Ret = new double[A.GetLength(0),A.GetLength(1)];
for (int i = 0; i < A.GetLength(0); i++)
for (int j = 0; j < A.GetLength(1); j++)
Ret[i, j] = mulToA*A[i, j] + mulToB*B[i, j];
return Ret;
}
public double[] summVector(double[] A, double mulToA, double[] B, double mulToB) //суммирование матриц
{
double[] Ret = new double[A.GetLength(0)];
for (int i = 0; i < A.GetLength(0); i++)
Ret[i] = mulToA * A[i] + mulToB * B[i];
return Ret;
}
public double[] multiMatr(double[,] A, double mulToA, double[] B, double mulToB) //умножение матрицы на векто
{
double[] Ret = new double[A.GetLength(0)];
for (int i = 0; i < A.GetLength(0); i++)
for (int j = 0; j < A.GetLength(1); j++)
Ret[i] += mulToA * A[i, j] * mulToB * B[j];
return Ret;
}
public double[] fi(double pQ, double pq, double ph,double pTs,double pT, double pL, double pA)
{
double[] f = new double[2];
for (int i = 0; i < 2; i++)
f[i] = (pQ * pA * pL - pq * pA + ph * pA * (pT-pTs)) * (-0.5);
return f;
}
private void BT_vitchislit_Click(object sender, EventArgs e)
{
long start = DateTime.Now.Ticks;
l1 = double.Parse(ED_L1.Text);
l2 = double.Parse(ED_L2.Text);
l3 = double.Parse(ED_L3.Text);
l4 = double.Parse(ED_L4.Text);
l_all = l1 + l2 + l3 + l4;
c1 = double.Parse(ED_C1.Text);
c2 = double.Parse(ED_C2.Text);
ro1 = double.Parse(ED_ro1.Text);
ro2 = double.Parse(ED_ro2.Text);
lam1 = double.Parse(ED_lam1.Text);
lam2 = double.Parse(ED_lam2.Text);
kolEl = int.Parse(ED_ke.Text);
lel = l_all / kolEl;
A=double.Parse(ED_A.Text);
dT = double.Parse(ED_dT.Text);
K = new double[kolEl + 1, kolEl + 1];
C = new double[kolEl + 1, kolEl + 1];
int tl = int.Parse(TB_Tl.Text);
double t0 = double.Parse(TB_NT.Text);
T= new double[tl+1,kolEl+1];
for (int i = 0; i < T.GetLength(1); i++)
T[0,i] = t0;
double ci_m1_kaf = (c1 * ro1 * A * lel) / 6;
double ci_m2_kaf = (c2 * ro2 * A * lel) / 6;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.