№ элемента | Номера перемещений Начальный узел Конечный узел | |||||
1 (u1) | 2 (v1) | 3 (φ1) | 4 (u2) | 5 (v2) | 6 (φ2) | |
По топологической и координатной матрицам вычисляются также направляющие косинусы и длины элементов (формулы (3),(4),(5)) и матрицы жесткости каждого элемента в отдельности (1). В строках матрицы указаны глобальные номера узловых перемещений конечных элементов в порядке следования соответствующих им локальных номеров. Число строк в матрице равно числу конечных элементов f1.m:
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;
}
Затем с помощью матрицы индексов суммируем элементы отдельных матриц элементов в общую матрицу жесткости системы. Ниже приведен фрагмент программы на языке С# реализующий процесс сборки:
|
|
for (int ii = 0; ii < f1.m; ii++)
{
...//Формирование матрц элемента
for (int i = 1; i <= 6; i++)
{
int ig = A[ii, i];
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];
}
}
}
Обозначения в программе:
· ii – номер текущего конечного элемента;
· f1.m – число конечных элементов;
· A – матрица индексов перемещений;
· i, j – локальные индексы узловых перемещений конечного элемента;
· ig, jg – соответствующие им глобальные индексы, выбираемые из матрицы A;
· K –матрица жесткости конструкции;
· Ke1 – матрица жесткости текущего конечного элемента с номером ii, вычисленная в глобальной системе координат.
Аналогично формируется матрица масс M конструкции при решении динамической задачи.