|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Форма 2using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;
namespace Рама { public partial class Form2: Form { //Вычисление матрицы жесткости Form1 f1; public double[,] K, K1, Ke, Ke1, T, Tt, TtK, M, Me, Me1, TtM, pxy, Qpxy; public double[] P, P1; public int[,] A; public double w = 0; public Form2(Form1 f1) { InitializeComponent(); this.f1 = f1; Demo(); } void Demo() {
if (f1.n > 0) {
for (int i = 0; i < 3 * f1.n; i++) { // Добавление колонки DataGridViewTextBoxColumn titleColumn1 = new DataGridViewTextBoxColumn(); titleColumn1.HeaderText = "Titlt" + (i + 1).ToString(); //Выравнивание ширины колонки в соответствии с заданным стилем - AllCells titleColumn1.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; dataGridView1.Columns.Add(titleColumn1); dataGridView1.Rows.Add(); } } P = new double[3 * f1.n];
P1 = new double[3 * f1.n]; K = new double[3 * f1.n, 3 * f1.n]; M = new double[3 * f1.n, 3 * f1.n];
K1 = new double[3 * f1.n, 3 * f1.n];
A = new int[f1.m, 7]; pxy = new double[f1.m, 4]; Qpxy = new double[f1.m, 6]; double[,] Ht = new double[6, 4]; double[] Qp = new double[6]; for (int i = 0; i < f1.n * 3; i++) { if (i % 3 == 0) { P[i] = f1.MatrCoor[i / 3, 3]; P[i + 1] = f1.MatrCoor[i / 3, 4]; P[i + 2] = f1.MatrCoor[i / 3, 5]; } //dataGridView1.Rows[i].Cells[0].Value = P[i]; }
for (int i = 0; i < f1.m; i++) { // Формирование матрицы индексов A[i, 0] = i + 1; A[i, 1] = Convert.ToInt32(f1.MatrTop[i, 1]) * 3 - 2; A[i, 2] = Convert.ToInt32(f1.MatrTop[i, 1]) * 3 - 1; A[i, 3] = Convert.ToInt32(f1.MatrTop[i, 1]) * 3; A[i, 4] = Convert.ToInt32(f1.MatrTop[i, 2]) * 3 - 2; A[i, 5] = Convert.ToInt32(f1.MatrTop[i, 2]) * 3 - 1; A[i, 6] = Convert.ToInt32(f1.MatrTop[i, 2]) * 3;
pxy[i, 0] = f1.MatrTop[i, 3]; pxy[i, 1] = f1.MatrTop[i, 4]; pxy[i, 2] = f1.MatrTop[i, 5]; pxy[i, 3] = f1.MatrTop[i, 6];
} //Формирование матрицы жесткости и масс if (f1.dinamika) w = Convert.ToDouble(f1.textBox1.Text); for (int ii = 0; ii < f1.m; ii++) { Ke = new double[6, 6]; Ke1 = new double[6, 6]; Me = new double[6, 6]; Me1 = new double[6, 6]; T = new double[6, 6]; Tt = new double[6, 6]; TtK = new double[6, 6]; TtM = new double[6, 6];
double x1 = f1.MatrCoor[Convert.ToInt32(f1.MatrTop[ii, 1]) - 1, 1]; double y1 = f1.MatrCoor[Convert.ToInt32(f1.MatrTop[ii, 1]) - 1, 2]; double x2 = f1.MatrCoor[Convert.ToInt32(f1.MatrTop[ii, 2]) - 1, 1]; double y2 = f1.MatrCoor[Convert.ToInt32(f1.MatrTop[ii, 2]) - 1, 2]; double h = Math.Sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); double cosA = (x2 - x1) / h; double cosB = (y2 - y1) / h; double EF = f1.MatrTop[ii, 7]; double EI = f1.MatrTop[ii, 8]; double mm = f1.MatrTop[ii, 9]; //Матрица преобразования координат T[0, 0] = cosA; T[0, 1] = cosB; T[0, 2] = 0; T[0, 3] = 0; T[0, 4] = 0; T[0, 5] = 0;
T[1, 0] = -cosB; T[1, 1] = cosA; T[1, 2] = 0; T[1, 3] = 0; T[1, 4] = 0; T[1, 5] = 0;
T[2, 0] = 0; T[2, 1] = 0; T[2, 2] = 1; T[2, 3] = 0; T[2, 4] = 0; T[2, 5] = 0;
T[3, 0] = 0; T[3, 1] = 0; T[3, 2] = 0; T[3, 3] = cosA; T[3, 4] = cosB; T[3, 5] = 0;
T[4, 0] = 0; T[4, 1] = 0; T[4, 2] = 0; T[4, 3] = -cosB; T[4, 4] = cosA; T[4, 5] = 0;
T[5, 0] = 0; T[5, 1] = 0; T[5, 2] = 0; T[5, 3] = 0; T[5, 4] = 0; T[5, 5] = 1; //Локальная матрица жесткости Ke[0, 0] = EF / h; Ke[0, 1] = 0; Ke[0, 2] = 0; Ke[0, 3] = -EF / h; Ke[0, 4] = 0; Ke[0, 5] = 0;
Ke[1, 0] = 0; Ke[1, 1] = 12 * EI / Math.Pow(h, 3); Ke[1, 2] = 6 * EI / Math.Pow(h, 2); Ke[1, 3] = 0; Ke[1, 4] = -12 * EI / Math.Pow(h, 3); Ke[1, 5] = 6 * EI / Math.Pow(h, 2);
Ke[2, 0] = 0; Ke[2, 1] = 6 * EI / Math.Pow(h, 2); Ke[2, 2] = 4 * EI / Math.Pow(h, 1); Ke[2, 3] = 0; Ke[2, 4] = -6 * EI / Math.Pow(h, 2); Ke[2, 5] = 2 * EI / Math.Pow(h, 1);
Ke[3, 0] = -EF / h; Ke[3, 1] = 0; Ke[3, 2] = 0; Ke[3, 3] = EF / h; Ke[3, 4] = 0; Ke[3, 5] = 0;
Ke[4, 0] = 0; Ke[4, 1] = -12 * EI / Math.Pow(h, 3); Ke[4, 2] = -6 * EI / Math.Pow(h, 2); Ke[4, 3] = 0; Ke[4, 4] = 12 * EI / Math.Pow(h, 3); Ke[4, 5] = -6 * EI / Math.Pow(h, 2);
Ke[5, 0] = 0; Ke[5, 1] = 6 * EI / Math.Pow(h, 2); Ke[5, 2] = 2 * EI / Math.Pow(h, 1); Ke[5, 3] = 0; Ke[5, 4] = -6 * EI / Math.Pow(h, 2); Ke[5, 5] = 4 * EI / Math.Pow(h, 1); // Формирование локальной матрицы масс
Me[0, 0] = h / 3; Me[0, 1] = 0; Me[0, 2] = 0; Me[0, 3] = h / 6; Me[0, 4] = 0; Me[0, 5] = 0;
Me[1, 0] = 0; Me[1, 1] = 13.0 / 35 * h; Me[1, 2] = 11.0 / 210 * h * h; Me[1, 3] = 0; Me[1, 4] = 9.0 / 70 * h; Me[1, 5] = -13.0 / 420 * h * h;
Me[2, 0] = 0; Me[2, 1] = 9.0 / 70 * h; Me[2, 2] = 1.0 / 105 * h * h * h; Me[2, 3] = 0; Me[2, 4] = 13.0 / 420 * h * h; Me[2, 5] = -1.0 / 140 * h * h * h;
Me[3, 0] = h / 6; Me[3, 1] = 0; Me[3, 2] = 0; Me[3, 3] = h / 3; Me[3, 4] = 0; Me[3, 5] = 0;
Me[4, 0] = 0; Me[4, 1] = 9.0 / 70 * h; Me[4, 2] = 13.0 / 420 * h * h; Me[4, 3] = 0; Me[4, 4] = 13.0 / 35 * h; Me[4, 5] = -11.0 / 210 * h * h;
Me[5, 0] = 0; Me[5, 1] = -13.0 / 420 * h * h; Me[5, 2] = -1.0 / 140 * h * h * h; Me[5, 3] = 0; Me[5, 4] = -11.0 / 210 * h * h; Me[5, 5] = 1.0 / 105 * h * h * h;
for (int i = 0; i < 6; i++) for (int j = 0; j < 6; j++) Me[i, j] = Me[i, j] * mm;
// Матрица для приведения распределенных сил к узловым
Ht[0, 0] = h / 3; Ht[0, 1] = 0; Ht[0, 2] = h / 6; Ht[0, 3] = 0;
Ht[1, 0] = 0; Ht[1, 1] = 7.0 / 20 * h; Ht[1, 2] = 0; Ht[1, 3] = 3.0 / 20 * h;
Ht[2, 0] = 0; Ht[2, 1] = 1.0 / 20 * h * h; Ht[2, 2] = 0; Ht[2, 3] = 1.0 / 30 * h * h;
Ht[3, 0] = h / 6; Ht[3, 1] = 0; Ht[3, 2] = h / 3; Ht[3, 3] = 0;
Ht[4, 0] = 0; Ht[4, 1] = 7.0 / 20 * h; Ht[4, 2] = 0; Ht[4, 3] = 3.0 / 20 * h;
Ht[5, 0] = 0; Ht[5, 1] = -1.0 / 20 * h * h; Ht[5, 2] = 0; Ht[5, 3] = -1.0 / 30 * h * h;
// Формирование вектор столбца сил в локальной системе элемента for (int j = 0; j < 6; j++) { Qp[j] = 0; for (int k = 0; k < 4; k++) Qp[j] = Qp[j] + Ht[j, k] * pxy[ii, k]; } //Преобразование матриц в глобальную систему for (int i = 0; i < 6; i++) for (int j = 0; j < 6; j++) Tt[j, i] = T[i, j]; for (int i = 0; i < 6; i++) { for (int j = 0; j < 6; j++) { TtK[i, j] = 0; TtM[i, j] = 0; for (int k = 0; k < 6; k++) { TtK[i, j] = TtK[i, j] + Tt[i, k] * Ke[k, j]; TtM[i, j] = TtM[i, j] + Tt[i, k] * Me[k, j]; } } } for (int i = 0; i < 6; i++) { for (int j = 0; j < 6; j++) { Ke1[i, j] = 0; Me1[i, j] = 0; for (int k = 0; k < 6; k++) { Ke1[i, j] = Ke1[i, j] + TtK[i, k] * T[k, j]; Me1[i, j] = Me1[i, j] + TtM[i, k] * T[k, j]; } } } for (int j = 0; j < 6; j++) { Qpxy[ii, j] = 0; for (int k = 0; k < 6; k++) { Qpxy[ii, j] = Qpxy[ii, j] + Tt[j, k] * Qp[k];
} }
for (int i = 1; i <= 6; i++) { int ig = A[ii, i]; P[ig - 1] = P[ig - 1] + Qpxy[ii, i - 1];
for (int j = 1; j <= 6; j++) { int jg = A[ii, j]; K[ig - 1, jg - 1] = K[ig - 1, jg - 1] + Ke1[i - 1, j - 1]; M[ig - 1, jg - 1] = M[ig - 1, jg - 1] + Me1[i - 1, j - 1];
} }
}
//Копирование матрицы жесткости в K1 for (int i = 0; i < f1.n * 3; i++) for (int j = 0; j < f1.n * 3; j++) { K1[i, j] = K[i, j];
// dataGridView1.Rows[i].Cells[j].Value = K1[i, j]; }
//Добавление динамической составляющей for (int i = 0; i < f1.n * 3; i++) for (int j = 0; j < f1.n * 3; j++) { K1[i, j] = K[i, j] - w * w * M[i, j];
//dataGridView1.Rows[i].Cells[j].Value = K1[i, j]; } for (int i = 0; i < f1.n; i++) { //Наложение главных граничных условий для подвижных соединений if (Convert.ToInt32(f1.MatrCoor[i, 6]) > 0) { int sh = Convert.ToInt32(f1.MatrCoor[i, 6]) - 1;
for (int j = 0; j < f1.n * 3; j++) {
K1[3 * sh, j] = K1[3 * sh, j] + K1[3 * i, j]; K1[3 * i, j] = 0; }
P[3 * sh] = P[3 * i] + P[3 * sh]; P[3 * i] = 0; K1[3 * i, 3 * sh] = -1.0; K1[3 * i, 3 * i] = 1.0; } if (Convert.ToInt32(f1.MatrCoor[i, 7]) > 0) { int sh = Convert.ToInt32(f1.MatrCoor[i, 7]) - 1;
for (int j = 0; j < f1.n * 3; j++) {
K1[3 * sh + 1, j] = K1[3 * sh + 1, j] + K1[3 * i + 1, j]; K1[3 * i + 1, j] = 0; }
P[3 * sh + 1] = P[3 * i + 1] + P[3 * sh + 1]; P[3 * i + 1] = 0; K1[3 * i + 1, 3 * sh + 1] = -1.0; K1[3 * i + 1, 3 * i + 1] = 1.0; } if (Convert.ToInt32(f1.MatrCoor[i, 8]) > 0) { int sh = Convert.ToInt32(f1.MatrCoor[i, 8]) - 1;
for (int j = 0; j < f1.n * 3; j++) {
K1[3 * sh + 2, j] = K1[3 * sh + 2, j] + K1[3 * i + 2, j]; K1[3 * i + 2, j] = 0; }
P[3 * sh + 2] = P[3 * i + 2] + P[3 * sh + 2]; P[3 * i + 2] = 0; K1[3 * i + 2, 3 * sh + 2] = -1.0; K1[3 * i + 2, 3 * i + 2] = 1.0; } }
for (int i = 0; i < f1.n; i++) { //Наложение главных граничных условий для неподвижных опор if (Convert.ToInt32(f1.MatrCoor[i, 6]) < 0) { for (int j = 0; j < f1.n * 3; j++) { K1[3 * i, j] = 0; } K1[3 * i, 3 * i] = K[3 * i, 3 * i]; P[3 * i] = 0; } if (Convert.ToInt32(f1.MatrCoor[i, 7]) < 0) { for (int j = 0; j < f1.n * 3; j++) { K1[3 * i + 1, j] = 0; } K1[3 * i + 1, 3 * i + 1] = K[3 * i + 1, 3 * i + 1]; P[3 * i + 1] = 0; } if (Convert.ToInt32(f1.MatrCoor[i, 8]) < 0) { for (int j = 0; j < f1.n * 3; j++) { K1[3 * i + 2, j] = 0; } K1[3 * i + 2, 3 * i + 2] = K[3 * i + 2, 3 * i + 2]; P[3 * i + 2] = 0; } }
for (int i = 0; i < f1.n * 3; i++) { P1[i] = P[i]; }
int KS = 0; ClassSIMQ S = new ClassSIMQ(); S.SIMQ(K1, ref P1, f1.n * 3, ref KS); label2.Text = "Код ошибки равен " + KS.ToString(); f1.q = new double[f1.n * 3]; f1.q = P1; //Реакции и узловые внешние силы double[] D = new double[f1.n * 3]; for (int i = 0; i < f1.n * 3; i++) { D[i] = 0; for (int j = 0; j < f1.n * 3; j++) { D[i] = D[i] + K[i, j] * f1.q[j]; } } //Проверка double[] D1 = new double[f1.n * 3]; for (int i = 0; i < f1.n * 3; i++) { D1[i] = -P[i]; for (int j = 0; j < f1.n * 3; j++) { D1[i] = D1[i] + K1[i, j] * f1.q[j]; } } int signal = 0; if (f1.radioButton1.Checked) signal = 1; if (f1.radioButton2.Checked) signal = 2; if (f1.radioButton3.Checked) signal = 3; switch (signal) {
case 1: //Вывод матрицы жесткости в таблицу for (int i = 0; i < f1.n * 3; i++) for (int j = 0; j < f1.n * 3; j++)
{
dataGridView1.Rows[i].Cells[j].Value = K1[i, j]; } label1.Text = " Матрица жесткости"; break; case 2: for (int i = 0; i < f1.n * 3; i++) {
dataGridView1.Rows[i].Cells[1].Value = P1[i]; } for (int i = 0; i < f1.n * 3; i++) { dataGridView1.Rows[i].Cells[0].Value = (i+3)/3; dataGridView1.Rows[i].Cells[2].Value = D[i]; } label1.Text = " Перемещения узлов и внешние силы"; break; case 3: for (int i = 0; i < f1.n * 3; i++) {
dataGridView1.Rows[i].Cells[0].Value = D1[i]; } label1.Text = " Проверка равновесия узлов"; break; default: String Str = "Выберите результат вычислений"; //Вывод сообщения MessageBox.Show(Str, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
} } } Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.038 сек.) |