АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Форма 2

Читайте также:
  1. bending strain (майысу деформациясы)
  2. Bending strain (майысу деформациясы)
  3. CASE-технология создания информационных систем
  4. I. ВВЕДЕНИЕ В ИНФОРМАТИКУ
  5. I. Определите, какое из этих высказываний несет психологическую информацию.
  6. I. Основная форма: помешательство.
  7. I. При каких условиях эта психологическая информация может стать психодиагностической?
  8. II. ОСНОВНОЕ ПОНЯТИЕ ИНФОРМАТИКИ – ИНФОРМАЦИЯ
  9. II. Соціальні відносини як форма прояву соціальних взаємодій.
  10. II. Тип организации верховной власти в государстве (форма государственного правления).
  11. III. ИЗМЕРЕНИЕ ИНФОРМАЦИИ
  12. III. Опорная информация

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;

 

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;

 

}

 

 

}

}

}


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.038 сек.)