Редактирование: Обратный каскад энергии (двумерная турбулентность)

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

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

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 52: Строка 52:
 
Частички расположены впритык друг к другу и образуют прямоугольную решетку. С помощью написанной программы можно изменять количество шаров, коэффициент вязкости и температуру в среде(термостат).
 
Частички расположены впритык друг к другу и образуют прямоугольную решетку. С помощью написанной программы можно изменять количество шаров, коэффициент вязкости и температуру в среде(термостат).
  
{{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Stepanov/inverse%20cascade4_19.12.16/newVar.html |width=950 |height=1900 |border=0 }}
+
{{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Stepanov/inverse%20cascade3_17.12.16/newVar.html |width=950 |height=1400 |border=0 }}
 
<div class="mw-collapsible mw-collapsed">
 
<div class="mw-collapsible mw-collapsed">
 
'''Текст программы на языке JavaScript:''' <div class="mw-collapsible-content">
 
'''Текст программы на языке JavaScript:''' <div class="mw-collapsible-content">
Строка 59: Строка 59:
  
 
// Версия 16.12.16
 
// Версия 16.12.16
 
 
// Версия Total 19.12.16
 
//Stepanov MD
 
  
 
function MainBalls(canvas, slider_01, text_01, slider_02, text_02) {
 
function MainBalls(canvas, slider_01, text_01, slider_02, text_02) {
Строка 79: Строка 75:
 
     var a0 = 1;                        // масштаб расстояния (диаметр шара)
 
     var a0 = 1;                        // масштаб расстояния (диаметр шара)
  
    var g0 = a0 / T0 / T0;              // масштаб ускорения (ускорение, при котором за T0 будет пройдено расстояние a0)
 
    var k0 = 2 * Pi / T0;              // масштаб частоты
 
 
     var C0 = m0 * k0 * k0;              // масштаб жесткости
 
     var C0 = m0 * k0 * k0;              // масштаб жесткости
 
     var B0 = 2 * m0 * k0;              // масштаб вязкости
 
     var B0 = 2 * m0 * k0;              // масштаб вязкости
 
+
  var L = 0;
+
var G = 0;
  var G = 0;
+
var G1 = 0;
  var G1 = 0;
+
var G2 = 0;
  var G2 = 0;
 
  
 
     // *** Задание физических параметров ***
 
     // *** Задание физических параметров ***
  
     var Ny = 20;                        // число шаров, помещающихся по вертикали в окно (задает размер шара относительно размера окна)
+
     var Ny = 30;                        // число шаров, помещающихся по вертикали в окно (задает размер шара относительно размера окна)
 
     var m = 1 * m0;                    // масса
 
     var m = 1 * m0;                    // масса
 
     var Cwall = 10 * C0;                // жесткость стен
 
     var Cwall = 10 * C0;                // жесткость стен
 
     var Cball = 0.1 * Cwall;            // жесткость между частицами
 
     var Cball = 0.1 * Cwall;            // жесткость между частицами
 
    /*var B = 0.000 * B0;                // вязкость среды*/
 
 
   
 
   
 
     var Bball = 0.01 * B0;              // вязкость между частицами
 
     var Bball = 0.01 * B0;              // вязкость между частицами
 
     var Bwall = 0.03 * B0;              // вязкость на стенках
 
     var Bwall = 0.03 * B0;              // вязкость на стенках
    var mg = 0.25 * m * g0;            // сила тяжести
 
 
     var r = 0.5 * a0;                  // радиус частицы в расчетных координатах
 
     var r = 0.5 * a0;                  // радиус частицы в расчетных координатах
 
     var K = 0.7;                        // все силы, зависящие от радиуса, ограничиваются значением, реализующимся при r/a = K
 
     var K = 0.7;                        // все силы, зависящие от радиуса, ограничиваются значением, реализующимся при r/a = K
Строка 111: Строка 101:
 
     var spf = 100;                      // steps per frame  - число шагов интегрирования между кадрами (скорость расчета)
 
     var spf = 100;                      // steps per frame  - число шагов интегрирования между кадрами (скорость расчета)
 
     var dt  = 0.045 * T0 / fps;        // шаг интегрирования (качество расчета)
 
     var dt  = 0.045 * T0 / fps;        // шаг интегрирования (качество расчета)
                       
+
                       
 
                        var steps = 0;
 
                       
 
                       
 
 
     // Выполнение программы
 
     // Выполнение программы
  
Строка 122: Строка 108:
 
     var a2 = a * a;                    // ___в целях оптимизации___
 
     var a2 = a * a;                    // ___в целях оптимизации___
 
     var D = a2 * Cball / 72;            // энергия связи между частицами
 
     var D = a2 * Cball / 72;            // энергия связи между частицами
                          var Temp = 0;
+
                          Temp0 = 0.12 * D;
+
var steps = 0;
                          var B1 = 12*Math.sqrt((2*D)/a2);
+
var Temp = 0;
                          var B = 0.026 * B1;
+
Temp0 = 0.12 * D;
                          var betta = 3.5*B;
+
var B1 = 12*Math.sqrt((2*D)/a2);
                         
+
var B = 0.026 * B1;
                          var LJCoeff = 6 * D / a2;          // коэффициент для расчета потенциала Л-Дж
+
var betta = 3.5*B;
 +
var LJCoeff = 6 * D / a2;          // коэффициент для расчета потенциала Л-Дж
 +
 
     var Ka = K * a;                    // ___в целях оптимизации___
 
     var Ka = K * a;                    // ___в целях оптимизации___
 
     var K2a2 = K * K * a2;              // ___в целях оптимизации___
 
     var K2a2 = K * K * a2;              // ___в целях оптимизации___
Строка 135: Строка 123:
 
     var grad;                          // должен ли работать градиент (регулируется в функции setNy())
 
     var grad;                          // должен ли работать градиент (регулируется в функции setNy())
  
  this.set_01 = function(p) {betta = p * B;};
+
this.set_01 = function(p) {betta = p * B;};
  this.set_02 = function(pT) {Temp0 = pT *D;};
+
this.set_02 = function(pT) {Temp0 = pT *D;};
 
+
 
     this.setNy = function(ny) {
 
     this.setNy = function(ny) {
 
         Ny = ny;
 
         Ny = ny;
Строка 160: Строка 148:
 
     };
 
     };
  
  // настройка слайдеров и текстовых полей
+
    // настройка слайдеров и текстовых полей
 
     slider_01.min = 0.1;              slider_01.max = 20;
 
     slider_01.min = 0.1;              slider_01.max = 20;
 
     slider_01.step = 0.1;
 
     slider_01.step = 0.1;
Строка 166: Строка 154:
 
     text_01.value = betta / B;
 
     text_01.value = betta / B;
  
// настройка слайдеров и текстовых полей
+
// настройка слайдеров и текстовых полей
 
     slider_02.min = 0.1;              slider_02.max = 1;
 
     slider_02.min = 0.1;              slider_02.max = 1;
 
     slider_02.step = 0.1;
 
     slider_02.step = 0.1;
 
     slider_02.value = Temp0 / D;          // начальное значение ползунка должно задаваться после min и max
 
     slider_02.value = Temp0 / D;          // начальное значение ползунка должно задаваться после min и max
 
     text_02.value = Temp0 / D;
 
     text_02.value = Temp0 / D;
 
+
                // график
+
// график
                var vGraph1 = new TM_graph(                  // определить график
+
var vGraph1 = new TM_graph(                  // определить график
                  "#vGraph1",                              // на html-элементе #vGraph
+
"#vGraph1",                              // на html-элементе #vGraph
                  20000,                                    // сколько шагов по оси "x" отображается
+
20000,                                    // сколько шагов по оси "x" отображается
                  0, 1,0.1);                            // мин. значение оси Y, макс. значение оси Y, шаг по оси Y
+
0, 1,0.1);                            // мин. значение оси Y, макс. значение оси Y, шаг по оси Y
// график
+
var vGraph2 = new TM_graph(                  // определить график
 
"#vGraph2",                              // на html-элементе #vGraph
 
20000,                                    // сколько шагов по оси "x" отображается
 
0, 19000,1000);                            // мин. значение оси Y, макс. значение оси Y, шаг по оси Y
 
 
 
 
     // Работа с массивом
 
     // Работа с массивом
  
Строка 197: Строка 180:
 
             }
 
             }
 
         }
 
         }
   
+
 
         var b = [];
 
         var b = [];
  
Строка 205: Строка 188:
  
 
       // balls[balls.length] = b;                // добавить элемент в конец массива
 
       // balls[balls.length] = b;                // добавить элемент в конец массива
    balls.push(b);
+
balls.push(b);
 
         return b;
 
         return b;
 
     };
 
     };
 
+
  this.setMy = function() {
+
this.setMy = function() {
    balls = [];
+
  balls = [];
 
         for (var j = 0; j < Ny; j++)
 
         for (var j = 0; j < Ny; j++)
 
             for (var i = 0; i < Ny; i++)
 
             for (var i = 0; i < Ny; i++)
        addNewBall(w*j/Ny + r, h*i/Ny + r , true);                // задаем 50x50
+
addNewBall(w*j/Ny + r, h*i/Ny + r , true);                // задаем 50x50
    document.getElementById('ballsNum').innerHTML = balls.length;
+
document.getElementById('ballsNum').innerHTML = balls.length;
    vGraph1.vArray = new Array();
+
}
vGraph2.vArray = new Array();
+
    steps = 0;
 
    G1 = 0;
 
    G2 = 0;
 
  }
 
 
 
 
     // Основной цикл программы
 
     // Основной цикл программы
  
Строка 234: Строка 212:
 
         for (var s = 1; s <= spf; s++) {
 
         for (var s = 1; s <= spf; s++) {
  
L = 0;
+
for (var i0 = 0; i0 < balls.length; i0++) {
 
            // пересчет сил идет отдельным массивом, т.к. далее будут добавляться силы взаимодействия между шарами
 
          // for (var i0 = 0; i0 < balls.length; i0++) {
 
          //    balls[i0].vx += - B * balls[i0].vx*dt;
 
          //    balls[i0].vy += -B * balls[i0].vy*dt;
 
          //  }
 
      for (var i0 = 0; i0 < balls.length; i0++) {
 
 
                 Temp = 1/2 * (balls[i0].vx * balls[i0].vx + balls[i0].vy * balls[i0].vy) / Ny;
 
                 Temp = 1/2 * (balls[i0].vx * balls[i0].vx + balls[i0].vy * balls[i0].vy) / Ny;
        var stat = Math.sqrt(Temp0/Temp);
+
var stat = Math.sqrt(Temp0/Temp);
        balls[i0].vx*=stat;
+
balls[i0].vx*=stat;
        balls[i0].vy*=stat;
+
balls[i0].vy*=stat;
             }
+
             }
     
 
 
             for (var i = 0; i < balls.length; i++)  
 
             for (var i = 0; i < balls.length; i++)  
      {
+
{
 
                 // расчет взаимодействия производится со всеми следующими шарами в массиве,
 
                 // расчет взаимодействия производится со всеми следующими шарами в массиве,
 
                 // чтобы не считать каждое взаимодействие дважды
 
                 // чтобы не считать каждое взаимодействие дважды
                 var b = balls[i];        
+
                 var b = balls[i];
       
 
 
                 for (var j = i + 1; j < balls.length; j++) {
 
                 for (var j = i + 1; j < balls.length; j++) {
 
                     var b2 = balls[j];
 
                     var b2 = balls[j];
 
                     var rx = b.x - b2.x;  var ry = b.y - b2.y;        // вектор смотрит на первый шар (b)
 
                     var rx = b.x - b2.x;  var ry = b.y - b2.y;        // вектор смотрит на первый шар (b)
                     var r2 = rx * rx + ry * ry;                        // квадрат расстояния между шарами        
+
                     var r2 = rx * rx + ry * ry;                        // квадрат расстояния между шарами
 
                     if (r2 > aCut2) continue;                          // проверка на радиус обрезания
 
                     if (r2 > aCut2) continue;                          // проверка на радиус обрезания
 
                     var rLen = (Math.sqrt(r2));
 
                     var rLen = (Math.sqrt(r2));
Строка 272: Строка 241:
 
                     // сила взаимодействия
 
                     // сила взаимодействия
 
                     var s2 = a2 / r2;        var s4 = s2 * s2;        // ___в целях оптимизации___
 
                     var s2 = a2 / r2;        var s4 = s2 * s2;        // ___в целях оптимизации___
                        var s8 = s4 * s4;
+
var s8 = s4 * s4;
                        var F = LJCoeff * s8 * s2 * ((aCut - rLen)/(aCut - a));          // сила взаимодействия Леннарда-Джонса
+
var F = LJCoeff * s8 * s2 * ((aCut - rLen)/(aCut - a));          // сила взаимодействия Леннарда-Джонса
                       
+
                        var vx21 = b.vx - b2.vx;    var vy21 = b.vy - b2.vy;    // вектор смотрит на первый шар (b)
+
var vx21 = b.vx - b2.vx;    var vy21 = b.vy - b2.vy;    // вектор смотрит на первый шар (b)
                        var ex = rx / rLen;        var ey = ry / rLen;
+
var ex = rx / rLen;        var ey = ry / rLen;
                        var v = vx21 * ex + vy21 * ey;
+
var v = vx21 * ex + vy21 * ey;
                        F -= betta * ((aCut - rLen)/(aCut - a)) * v * (1/rLen);
+
F -= betta * ((aCut - rLen)/(aCut - a)) * v * (1/rLen);
                 
+
 
                     // суммируем силы
 
                     // суммируем силы
 
                     var Fx = F * rx*dt;        var Fy = F * ry*dt;
 
                     var Fx = F * rx*dt;        var Fy = F * ry*dt;
         
+
          b.vx += Fx;        b.vy += Fy;
+
b.vx += Fx;        b.vy += Fy;
          b2.vx -= Fx;        b2.vy -= Fy;
+
b2.vx -= Fx;        b2.vy -= Fy;
  
          G2 += b.vx * b2.vx + b.vy * b2.vy;
+
G2 += b.vx * b2.vx + b.vy * b2.vy;
          G1 += 1;
+
G1 += 1;
         
+
 
                 }
 
                 }
  
Строка 297: Строка 266:
  
 
             }   
 
             }   
      for (var i0 = 0; i0 < balls.length; i0++) {
+
for (var i0 = 0; i0 < balls.length; i0++) {
 
                 balls[i0].x += dt * balls[i0].vx;
 
                 balls[i0].x += dt * balls[i0].vx;
 
                 balls[i0].y += dt * balls[i0].vy;
 
                 balls[i0].y += dt * balls[i0].vy;
L += Math.abs((balls[i0].x - w/2) * balls[i0].vy) + Math.abs((balls[i0].y - h/2) * balls[i0].vx);
 
 
             }
 
             }
     
+
      G = G2 / G1 / 2/ Temp0/Ny;
+
G = G2 / G1 / 2/ Temp0/Ny;
     
+
      steps++;
+
steps++;
 
             if (steps % 200 == 0) {
 
             if (steps % 200 == 0) {
        vGraph1.graphIter(steps, G);
+
vGraph1.graphIter(steps, (G))}
vGraph2.graphIter(steps, L);
 
      }
 
 
         }
 
         }
 
     }
 
     }
Строка 335: Строка 301:
 
     // Запуск системы
 
     // Запуск системы
 
     this.newSystem();
 
     this.newSystem();
  /*for (var i0 = 0; i0 < balls.length; i0++) {    // задаем частицам случайные скорости
+
/*for (var i0 = 0; i0 < balls.length; i0++) {    // задаем частицам случайные скорости
 
         balls[i0].vx = (3 * (1 - 2 * Math.random()));
 
         balls[i0].vx = (3 * (1 - 2 * Math.random()));
 
         balls[i0].vy = (3 * (1 - 2 * Math.random()));
 
         balls[i0].vy = (3 * (1 - 2 * Math.random()));
 
     }*/
 
     }*/
  if(!window.requestAnimationFrame){
+
if(!window.requestAnimationFrame){
    window.requestAnimationFrame = (function(){
+
window.requestAnimationFrame = (function(){
      return window.webkitRequestAnimationFrame
+
return window.webkitRequestAnimationFrame
        || window.mozRequestAnimationFrame
+
|| window.mozRequestAnimationFrame
        || window.oRequestAnimationFrame
+
|| window.oRequestAnimationFrame
        || window.msRequestAnimationFrame
+
|| window.msRequestAnimationFrame
        || function(callback, element){window.setTimeout(callback, 1000 / fps);
+
|| function(callback, element){window.setTimeout(callback, 1000 / fps);};
    };
+
})();
  })();
 
 
}
 
}
 
     //setInterval(control, 1000 / fps);
 
     //setInterval(control, 1000 / fps);
  
  function animate(){
+
function animate(){
    requestAnimationFrame(animate);
+
requestAnimationFrame(animate);
    control();
+
control();
  }
+
}
  animate();
+
animate();
    // след. функция обновляет информацию о количестве частиц на поле
 
  //setInterval(function(){document.getElementById('ballsNum').innerHTML = balls.length;}, 1000 / 20);
 
 
 
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
Строка 364: Строка 326:
  
 
==Анализ==
 
==Анализ==
С помощью графика можно наблюдать за зависимостью корреляции скоростей <big><math> Г </math></big>  поведением кинетического моменты системы <big><math> L </math></big> от входных параметров (вязкость, температура, кол-во частиц).
+
С помощью графика можно наблюдать за зависимостью корреляции скоростей <big><math> Г </math></big> от входных параметров (вязкость, температура, кол-во частиц).
  
 
Уравнение для корреляции скоростей :
 
Уравнение для корреляции скоростей :
Строка 375: Строка 337:
 
\end{cases}
 
\end{cases}
 
</math></big>
 
</math></big>
 
  
 
Например, для начальной конфигурации на 60 000 шаге по времени будет наблюдаться график 1.
 
Например, для начальной конфигурации на 60 000 шаге по времени будет наблюдаться график 1.
Строка 408: Строка 369:
  
  
 
 
 
Уравнение для кинетического момента системы :
 
 
<big><math>L = \sum_{i} \pmb r_i\times m_i \pmb V_i </math></big>
 
  
 
==Ссылки==
 
==Ссылки==
 
*Vitaly A. Kuzkin, Anton M. Krivtsov. Interscale energy transport and velocity correlations in thermostated dissipative soft disc system.
 
*Vitaly A. Kuzkin, Anton M. Krivtsov. Interscale energy transport and velocity correlations in thermostated dissipative soft disc system.
Вам запрещено изменять защиту статьи. 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:

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