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

Перейти к: навигация, поиск

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 21: Строка 21:
 
Для решения задачи использовался метод Верле (leapfrog):
 
Для решения задачи использовался метод Верле (leapfrog):
  
<math>  a_i = F(r_i), </math><br>
+
<math>  a_i = F(x_i), </math><br>
 
<math>  v_{i+\frac {1}{2}} = v_{i-\frac {1}{2}} + a_i dt, </math><br>
 
<math>  v_{i+\frac {1}{2}} = v_{i-\frac {1}{2}} + a_i dt, </math><br>
<math>  r_{i+1} = r_{i} + v_{i+\frac {1}{2}} dt</math>
+
<math>  x_{i+1} = x_{i} + v_{i+\frac {1}{2}} dt</math>
  
 
===Начальные условия===
 
===Начальные условия===
 
   
 
   
 
Частицы обладают случайными начальными вертикальными смещениями:<br>
 
Частицы обладают случайными начальными вертикальными смещениями:<br>
<math>y_i = y_{rand}</math><br> <math>y_0 = 0</math><br> <math>y_n = 0</math> <br>
+
<math>y_i = y_{rand}</math><br> ; <math>y_0 = 0</math><br> ; <math>y_n = 0</math> <br>
  
 
===Граничные условия===
 
===Граничные условия===
  
 
Левый конец цепочки закреплен, правому задана постоянная скорость.<br>
 
Левый конец цепочки закреплен, правому задана постоянная скорость.<br>
<math>v_0 = 0</math><br> <math>v_n = -v</math><br>
+
<math>u_0 = 0</math>; <math>u_n = -v</math><br><br>
  
 
===Параметры системы===
 
===Параметры системы===
Для проведения моделирования задаются следующие параметры:
+
Для проведения моделирование задаются следующие параметры:
масса частиц <math> m=1</math>, жесткость угловой пружины <math> C_s=1</math>, количество частиц в цепочке <math> n=10</math>, равновесная длина пружины <math>{\pmb a_{0}=1}</math>. Остальные параметры системы выражаются через данные.
+
масса частиц <math> m=10</math>, жесткость угловой пружины <math> c=10000</math>, количество частиц в цепочке <math> n=10</math>
  
 
===Взаимодействия в системе===
 
===Взаимодействия в системе===
 
В системе имеется два типа взаимодействия:<br>
 
В системе имеется два типа взаимодействия:<br>
1. Потенциал линейной пружины: <br>
+
1. Потенциал линейной пружины: <br><br>
 
Частицы соединены линейной пружиной:<br>
 
Частицы соединены линейной пружиной:<br>
 
<math>П_k= \frac {k(r)^2}{2}</math><br>
 
<math>П_k= \frac {k(r)^2}{2}</math><br>
 
где k - линейная жесткость пружины; r – расстояние между частицами. <br>
 
где k - линейная жесткость пружины; r – расстояние между частицами. <br>
2. Потенциал угловой пружины:<br>
+
2. Потенциал угловой пружины:<br><br>
[[Файл:2016-06-19 20-15-47.png|200px|thumb|right|Рис.1 Угловая пружинка]]
 
 
Частицы соединены угловой пружиной, как показано на рис. 1:<br>
 
Частицы соединены угловой пружиной, как показано на рис. 1:<br>
 
<math>П_s= \frac {c_s(φ-π)^2}{2}</math><br>
 
<math>П_s= \frac {c_s(φ-π)^2}{2}</math><br>
 
где Cs – жесткость, φ – угол образованный 2-мя соседними связями.<br>
 
где Cs – жесткость, φ – угол образованный 2-мя соседними связями.<br>
 
==Модель==
 
В данной программе в начальный момент времени задаются:
 
*<math>{\frac{\pmb k}{\pmb C_{s}}}</math> - отношение жесткости линейной пружины к угловой пружине
 
*<math>{\frac{\pmb y_{i}}{\pmb a_{0}}}</math> - отношение начального вертикального смещения к равновесной длине пружины (в процентах)
 
*<math>{\frac{\pmb v}{\pmb v_{s}}}</math> - отношение скорости правой частицы к <math>{\pmb v_{s}}={\pmb a_{0}}*\sqrt{\frac{\pmb C_{s}}{\pmb m}}</math>
 
*Возможность придания скорости левой частице
 
 
{{#widget:Iframe|url=http://tm.spbstu.ru/htmlets/VaraevV/Barsik/HTMLfinal.html|width=850|height=850|border=0}}
 
 
<div class="mw-collapsible mw-collapsed" style="width:100%" >
 
'''Текст программы на языке JavaScript:'''
 
<div class="mw-collapsible-content">
 
<syntaxhighlight lang="javascript" line start="1" enclose="div">
 
window.addEventListener("load", program_code, false);
 
function program_code() {
 
var ctx = canvas_example.getContext("2d");
 
var w = canvas_example.width;
 
var h = canvas_example.height;
 
    ctx.strokeRect(0,0,w,h);
 
//var ctx1 = canvas_example1.getContext("2d");
 
//var w1 = canvas_example1.width;
 
//var h1 = canvas_example1.height;
 
    //ctx1.strokeRect(0,0,w1,h1);
 
 
var v0 = 10; //Скорость правого шарика
 
var v01 = 0; //Скорость левого шарика
 
var m = 10; //Масса шарика
 
var ht = 20; //параметр рисования
 
var htt = 40; //параметр рисования                         
 
var Cs = 10000; //Жесткость на изгиб     
 
var rad = 5; //Радиус шариков
 
var dt = 0.01;
 
var tt = 0; // Время
 
var dy=document.getElementById('r3'); //Начальные смещения по оси y, задаваемые пользователем
 
var ppp2=document.getElementById('text3');
 
ppp2.innerHTML=dy.value;
 
dy.oninput = function() {
 
ppp2.innerHTML="<"+dy.value;
 
for (var i=0;i<u_len;i++){
 
Yt[i] = dy.value*Math.random()+h/2;
 
}
 
Yt[0] = h/2;
 
Yt[u_len-1] = h/2;
 
r_ = [Xt,Yt];
 
defaultdraw();
 
}
 
var F_ = [0,0];
 
var pp = [0,0];
 
var FF = [];
 
var v = [[v01,0,0,0,0,0,0,0,0,v0],[0,0,0,0,0,0,0,0,0,0]]; //массив скоростей
 
var kk = -5; //Жесткость пружины
 
var Xt = [w/11,2*w/11,3*w/11,4*w/11,5*w/11,6*w/11,7*w/11,8*w/11,9*w/11,10*w/11]; //начальные положения частиц по оси X
 
var u_len = Xt.length;
 
var Yt = []; //Начальные смещения по оси y
 
for (var i=0;i<u_len;i++){
 
Yt[i] = 1*Math.random()+h/2;
 
}
 
Yt[0] = h/2; //Граничные условия
 
Yt[u_len-1] = h/2;
 
var r_ = [Xt,Yt]; //Вектор перемещений
 
var r12_ = [[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]]; //Вектор между частицами
 
var r12 = [0,0,0,0,0,0,0,0,0]; //Модуль вектора перемещений
 
 
// Рисование в начальном положении
 
function defaultdraw(){
 
ctx.clearRect(0,0,w,h);
 
ctx.strokeRect(0,0,w,h);
 
for (var i=0;i<u_len;i++){
 
ctx.beginPath();
 
ctx.arc(Xt[i],Yt[i],rad,0,Math.PI*2);
 
ctx.fill();
 
}
 
        for (var i=0;i<u_len-1;i++){
 
            var x_st = r_[0][i]
 
            var y_st = r_[1][i]
 
            var x_end = r_[0][i+1]
 
            var y_end = r_[1][i+1]
 
            var l = r_[0][i+1] - r_[0][i];
 
            var ly = r_[1][i+1] - r_[1][i]
 
            ctx.beginPath();
 
            ctx.bezierCurveTo(x_st, y_st, x_st + l / 4, y_st + ly / 4 +  ht, x_st + l / 2, y_st + ly / 2);
 
            ctx.bezierCurveTo(x_st + l / 2, y_st + ly / 2, x_st + 3 * l / 4, y_st + 3 * ly / 4 - ht, x_st + l, y_st + ly);
 
            ctx.stroke();
 
}
 
for (var i=0;i<u_len-2;i++){
 
            var x_st = r_[0][i]
 
            var y_st = r_[1][i]
 
            var x_end = r_[0][i+1]
 
            var y_end = r_[1][i+1]
 
var x_end_end = r_[0][i+1]
 
var y_end_end = r_[1][i+1]
 
            var l = r_[0][i+1] - r_[0][i]
 
            var ly = r_[1][i+1] - r_[1][i]
 
var l1 = r_[0][i+2] - r_[0][i+1]
 
            var ly1 = r_[1][i+2] - r_[1][i+1]
 
            ctx.beginPath();
 
ctx.bezierCurveTo(x_st+l/2, y_st+ly/2, x_st + l, y_st+ly+htt , x_st+l + l1/2, y_st +ly+ ly1/2);
 
ctx.stroke();
 
        }
 
}
 
defaultdraw();
 
 
var Css=document.getElementById('r1'); //Задаваемая угловая жесткость
 
var ppp=document.getElementById('text');
 
var k1=document.getElementById('r2'); //Задаваемая жесткость
 
var ppp1=document.getElementById('text2');
 
ppp.innerHTML=Css.value;
 
ppp1.innerHTML=-k1.value;
 
Css.oninput = function() {
 
ppp.innerHTML=Css.value;
 
}
 
k1.oninput = function() {
 
ppp1.innerHTML=-k1.value;
 
}
 
 
// Физический модуль
 
function physics() {
 
chbox=document.getElementById('one'); // Будет ли скорость у левой частицы
 
if (chbox.checked) {
 
v01 = v0
 
}
 
else {
 
v01 = 0
 
}
 
 
Cs = Css.value
 
kk = k1.value
 
for (var i=0;i<u_len-1;i++){       
 
r12_[0][i] = r_[0][i+1]-r_[0][i];
 
r12_[1][i] = r_[1][i+1]-r_[1][i];
 
}
 
for (var i=0;i<u_len-1;i++){       
 
r12[i] = Math.sqrt(r12_[0][i]*r12_[0][i]+r12_[1][i]*r12_[1][i]);
 
}
 
f = []
 
for (var i=0;i<2;i++){
 
f[i] = []
 
for (var j=0;j<u_len;j++){
 
f[i][j] = 0
 
}
 
}
 
for (var i=0;i<u_len-2;i++){
 
F_[0] = kk*((w/(u_len+1))-r12[i])*(r12_[0][i]/r12[i])
 
F_[1] = kk*((w/(u_len+1))-r12[i])*(r12_[1][i]/r12[i])
 
 
etta = -(r12_[0][i]*r12_[0][i+1]+r12_[1][i]*r12_[1][i+1]) / ( r12[i]*r12[i+1] ); 
 
phi = Math.acos(etta);                                                 
 
Fp = [0,0];                                                                   
 
Fn = [0,0];                                                               
 
F = [0,0];
 
if (phi != Math.PI){
 
koef = Cs * (Math.PI - phi)/(Math.sqrt(1-etta*etta) * r12[i] * r12[i+1]);
 
A = [[ 1 - Math.pow(r12_[0][i]/r12[i],2), -r12_[0][i]*r12_[1][i]/(r12[i]*r12[i])], [-r12_[0][i]*r12_[1][i]/(r12[i]*r12[i]), 1 - Math.pow(r12_[1][i]/r12[i],2) ]];
 
B = [[ 1 - Math.pow(r12_[0][i+1]/r12[i+1],2), -r12_[0][i+1]*r12_[1][i+1]/(r12[i+1]*r12[i+1])],[ -r12_[0][i+1]*r12_[1][i+1]/(r12[i+1]*r12[i+1]), 1 - Math.pow(r12_[1][i+1]/r12[i+1],2) ]];
 
Fp = [-koef*(r12_[0][i+1]*A[0][0]+r12_[1][i+1]*A[1][0]),-koef*(r12_[0][i+1]*A[0][1]+r12_[1][i+1]*A[1][1])];
 
Fn = [koef*(r12_[0][i]*B[0][0]+r12_[1][i]*B[1][0]),koef*(r12_[0][i]*B[0][1]+r12_[1][i]*B[1][1])];
 
F = [-Fn[0] - Fp[0],-Fn[1] - Fp[1]];
 
}
 
f[0][i] = f[0][i] + F_[0] + Fp[0];
 
f[1][i] = f[1][i] + F_[1] + Fp[1];
 
f[0][i+1] = f[0][i+1]-F_[0]+F[0];
 
f[1][i+1] = f[1][i+1]-F_[1]+F[1];
 
f[0][i+2] = f[0][i+2]+Fn[0];
 
f[1][i+2] = f[1][i+2]+Fn[1];
 
}
 
pp[0] = kk*((w/(u_len+1))-r12[u_len-2])*(r12_[0][u_len-2]/r12[u_len-2])
 
pp[1] = kk*((w/(u_len+1))-r12[u_len-2])*(r12_[1][u_len-2]/r12[u_len-2])
 
f[0][u_len-2] = f[0][u_len-2] +pp[0];
 
f[1][u_len-2] = f[1][u_len-2] +pp[1];
 
f[0][u_len-1] = f[0][u_len-1]-pp[0];
 
f[1][u_len-1] = f[1][u_len-1]-pp[1];
 
for (var i=0;i<u_len-1;i++){
 
v[0][i] = v[0][i] + (f[0][i]/m) * dt; 
 
v[1][i] = v[1][i] + (f[1][i]/m) * dt; 
 
}
 
                   
 
   
 
v[0][0] = v01;
 
v[1][0] = 0;
 
v[0][u_len-1] = -v0;
 
v[1][u_len-1] = 0;
 
for (var i=0;i<u_len;i++){
 
r_[0][i] = r_[0][i] + v[0][i] * dt;
 
r_[1][i] = r_[1][i] + v[1][i] * dt;
 
}
 
}
 
//Модуль рисования
 
function draw() {
 
tt=tt+1
 
// Условия остановки выполнения программы
 
if ((tt>6300) && (v01==0)){
 
clearInterval(tim)
 
}
 
if ((tt>3150) && (v01!=0)){
 
clearInterval(tim)
 
}
 
ctx.clearRect(0,0,w,h);
 
ctx.strokeRect(0,0,w,h);
 
// Рисование шариков
 
for (var i=0;i<u_len;i++){
 
ctx.beginPath();
 
ctx.arc(r_[0][i],r_[1][i],rad,0,Math.PI*2);
 
ctx.fill();
 
}
 
//if ((tt%10==0){
 
FF.push(f[0][u_len-1])
 
//}
 
if (tt==60){
 
console.log(JSON.stringify(FF))
 
}
 
// График силы
 
//for (var i=0;i<u_len;i++){
 
// ctx1.beginPath();
 
// ctx1.arc(tt/10,-f[0][u_len-1]/10+h/2,1,0,Math.PI*2);
 
// ctx1.stroke();
 
//}
 
      ctx.beginPath();
 
        for (var i=0;i<u_len-1;i++){
 
            var x_st = r_[0][i]
 
            var y_st = r_[1][i]
 
            var x_end = r_[0][i+1]
 
            var y_end = r_[1][i+1]
 
            var l = r_[0][i+1] - r_[0][i];
 
            var ly = r_[1][i+1] - r_[1][i]
 
            ctx.beginPath();
 
            ctx.bezierCurveTo(x_st, y_st, x_st + l / 4, y_st + ly / 4 +  ht, x_st + l / 2, y_st + ly / 2);
 
            ctx.bezierCurveTo(x_st + l / 2, y_st + ly / 2, x_st + 3 * l / 4, y_st + 3 * ly / 4 - ht, x_st + l, y_st + ly);
 
            ctx.stroke();
 
}
 
for (var i=0;i<u_len-2;i++){
 
            var x_st = r_[0][i]
 
            var y_st = r_[1][i]
 
            var x_end = r_[0][i+1]
 
            var y_end = r_[1][i+1]
 
var x_end_end = r_[0][i+1]
 
var y_end_end = r_[1][i+1]
 
            var l = r_[0][i+1] - r_[0][i]
 
            var ly = r_[1][i+1] - r_[1][i]
 
var l1 = r_[0][i+2] - r_[0][i+1]
 
            var ly1 = r_[1][i+2] - r_[1][i+1]
 
            ctx.beginPath();
 
ctx.bezierCurveTo(x_st+l/2, y_st+ly/2, x_st + l, y_st+ly+htt , x_st+l + l1/2, y_st +ly+ ly1/2);
 
ctx.stroke();
 
        }
 
      ctx.closePath();
 
}
 
// Контрольный модуль
 
function control(){
 
physics();
 
draw();
 
}
 
var tim;
 
// Функция остановки программы
 
function go1(){
 
clearInterval(tim);
 
}
 
// Функция работы программы
 
function go(){
 
clearInterval(tim);
 
control() ;
 
tim = setInterval(control,1000/60);
 
}
 
button_aler.onclick=go //Кнопка старта
 
button_aler1.onclick=go1 //Кнопка остановки
 
}
 
</syntaxhighlight>
 
</div>
 
</div>
 
==Результаты моделирования==
 
Графики зависимости обезрамеренной продольной силы <math>{\frac{\pmb F_{x}(t)}{\pmb F_{e}}}</math>, где <math>{\pmb F_{е}}</math> - Эйлерова критическая сила в статике, от времени <math>t</math> (от количества итераций) при различных значениях параметров построены в python по данным полученным из программы javascript.
 
*Как видно из графиков зависимости обезрамеренной продольной силы <math>{\frac{\pmb F_{x}(t)}{\pmb F_{e}}}</math> от времени <math>t</math> (от количества итераций) (Рис. 2 и Рис. 3) линейный участок роста продольной силы имеет наибольшую длину при малых начальных вертикальных смещениях. Следовательно критическая сила, при которой продольная сила перестает расти линейно и начинает уменьшаться, наступает для начального вертикального смещения "<math><1%</math>"относительно равновесной длины пружины <math>{\pmb a_{0}}</math> при большей силе, нежели при начальном смещении "<math><6%</math>" или "<math><11%</math>"относительно равновесной длины пружины <math>{\pmb a_{0}}</math>.
 
*Из графиков зависимости обезрамеренной продольной силы <math>{\frac{\pmb F_{x}(t)}{\pmb F_{e}}}</math> от времени <math>t</math> (от количества итераций) (Рис. 4, Рис. 5 и Рис. 6) видно, что линейный участок роста продольной силы имеет наибольшую длину при большом значении скорости правой частицы. Это справедливо для любого начального вертикального смещения частиц. Следовательно критическая сила, при которой продольная сила перестает расти линейно и начинает уменьшаться, наступает для скорости правой частицы <math>{\frac{\pmb v}{\pmb v_{s}}=0.01}</math> при большей силе, нежели при скорости правой частицы <math>{\frac{\pmb v}{\pmb v_{s}}=0.005}</math> или <math>{\frac{\pmb v}{\pmb v_{s}}=0.001}</math>.
 
[[Файл:K502.JPG|thumb|Рис.2 Зависимость продольной силы <math>{\frac{\pmb F_{x}(t)}{\pmb F_{e}}}</math> от времени t (от количества итераций) при <math>{\frac{\pmb k}{\pmb C_{s}}=0.5}</math>, при скорости правой частицы <math>{\frac{\pmb v}{\pmb v_{s}}=0.005}</math> и различных начальных вертикальных смещениях.|справа|400px]]
 
[[Файл:K1000.JPG|thumb|Рис.3 Зависимость продольной силы <math>{\frac{\pmb F_{x}(t)}{\pmb F_{e}}}</math> от времени t (от количества итераций) при <math>{\frac{\pmb k}{\pmb C_{s}}=1}</math>, при скорости правой частицы <math>{\frac{\pmb v}{\pmb v_{s}}=0.005}</math> и различных начальных вертикальных смещениях.|справа|400px]]
 
[[Файл:Nachsmesh1.JPG|thumb|Рис.4 Зависимость продольной силы <math>{\frac{\pmb F_{x}(t)}{\pmb F_{e}}}</math> от времени t (от количества итераций) при <math>{\frac{\pmb k}{\pmb C_{s}}=0.5}</math>, начальных вертикальных смещениях <math>{\frac{\pmb y_{i}}{\pmb a_{0}}<1}</math>, при различных скоростях правой частицы.|справа|400px]]
 
[[Файл:nachsmesh6.JPG|thumb|Рис.5 Зависимость продольной силы <math>{\frac{\pmb F_{x}(t)}{\pmb F_{e}}}</math> от времени t (от количества итераций) при <math>{\frac{\pmb k}{\pmb C_{s}}=0.5}</math>, начальных вертикальных смещениях <math>{\frac{\pmb y_{i}}{\pmb a_{0}}<6}</math>, при различных скоростях правой частицы.|справа|400px]]
 
[[Файл:Nachsmesh11.JPG|thumb|Рис.6 Зависимость продольной силы <math>{\frac{\pmb F_{x}(t)}{\pmb F_{e}}}</math> от времени t (от количества итераций) при <math>{\frac{\pmb k}{\pmb C_{s}}=0.5}</math>, начальных вертикальных смещениях <math>{\frac{\pmb y_{i}}{\pmb a_{0}}<11}</math>, при различных скоростях правой частицы.|справа|400px]]
 
==Ссылки==
 
*Kuzkin V.A., Dannert M.M.: Dynamic buckling of a column under constant speed compression. Acta Mech (2016) 227:1645-1652.
 
Вам запрещено изменять защиту статьи. Edit Создать редактором

Обратите внимание, что все добавления и изменения текста статьи рассматриваются как выпущенные на условиях лицензии Public Domain (см. Department of Theoretical and Applied Mechanics:Авторские права). Если вы не хотите, чтобы ваши тексты свободно распространялись и редактировались любым желающим, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого.
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ МАТЕРИАЛЫ, ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ!

To protect the wiki against automated edit spam, we kindly ask you to solve the following CAPTCHA:

Отменить | Справка по редактированию  (в новом окне)