Учет граничных условий

Граничные условия делятся на естественные и главные. В качестве естественных граничных условий выступают внешние силы, которые входят в правую часть уравнений равновесия. Для формирования вектора нагрузки организуем цикл с обходом узлов рамы в координатной матрице и добавим в его ячейки силы из четвертого, пятого и шестого столбцов таблицы в соответствии с номерами обобщенных перемещений. Кроме того в столбец обобщенных сил необходимо добавить вклад от распределенных сил, указанных в топологической матрице для каждого элемента, приведенный по выражению (4.8) к глобальным осям координат.

Главные граничные условия – это условия закрепления конструкции. При наложении условий закрепления, то есть уменьшении количества степе­ней свободы системы, уравнения не вычеркивают, а заменяют фиктивными для сохранения нумерации в матрицах. Один из способов состоит в обнулении всех элементов строки, кроме диагонального для данного элемента и обнуление соответствующего элемента столбца нагрузки.

Если перемещения в закрепленных узлах не равны нулю, то их действительные значения, умноженные на диагональный элемент матрицы жесткости, помещают в соответствующую строку вектора нагрузки.

Когда в матрице узлов в столбцах 7,8,9 стоят (-1) – это означает закрепление данного узла по соответствующему направлению: x,y,φ.

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;

}

}

Случай, когда в столбцах 7,8,9 стоят нули, означает отсутствие закрепления.

Если в ячейках этих столбцов стоят положительные целые числа, то это означает, что данное перемещение равно перемещению узла по соответствующему направлению, с номером, указанным в ячейке.

Такое явление возникает при наличии в системе внутренних шарниров, муфт и других видов связей. При этом внешние силы, приложенные в шарнире во всех узлах, прикладывают к одному из узлов, примыкающему к шарниру. Коэффициенты, стоящие вне главной диагонали в матрицы жесткости для других узлов примыкающих к шарниру обнуляются, а на место элемента, соответствующего первому узлу, помещается Диагональный коэффициент этой же строки матрицы приравнивается единице , так, что для обусловленных перемещений уравнения принимают вид

,

где - перемещение второго (третьего и т. д.) узла в шарнире, - перемещение первого узла в шарнире, уравнение которого не обнулялось и к которому отнесены все узловые силы, приложенные в шарнире по данному направлению:

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;

}

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: