Хрупкое взаимодействие Леннард-Джонса — различия между версиями

Материал из Department of Theoretical and Applied Mechanics
Перейти к: навигация, поиск
м (Замена текста — «<source lang="(.*)" first-line="(.*)">» на «<syntaxhighlight lang="$1" line start="$2" enclose="div">»)
м (Замена текста — «</source>» на «</syntaxhighligh>»)
Строка 222: Строка 222:
  
 
}
 
}
</source>
+
</syntaxhighligh>
 
Файл '''"BLJ.html"'''
 
Файл '''"BLJ.html"'''
 
<syntaxhighlight lang="html" line start="1" enclose="div">
 
<syntaxhighlight lang="html" line start="1" enclose="div">
Строка 269: Строка 269:
 
</body>
 
</body>
 
</html>  
 
</html>  
</source>
+
</syntaxhighligh>
 
</toggledisplay>
 
</toggledisplay>
  

Версия 18:56, 8 марта 2015

Кафедра ТМ > Научный справочник > Потенциалы взаимодействия > Парные силовые > Хрупкое взаимодействие Леннард-Джонса


Хрупкое взаимодействие Леннард-Джонса (Brittle Lennard-Jones, BLJ) определяется на основе силы взаимодействия Леннард-Джонса с применением коэффициента формы, создающего потенциальный барьер, препятствующий слипанию частиц — см. интерактивный график ниже (перемещая слайдеры, проследите влияние коэффициентов).


Сила взаимодействия Леннард-Джонса: классическая, хрупкая
α = acut = a
Текст программы построения графиков на языке JavaScript: <toggledisplay status=hide showtext="Показать↓" hidetext="Скрыть↑" linkstyle="font-size:default"> Файл "BLJ.js" <syntaxhighlight lang="javascript" line start="1" enclose="div"> // Хрупкое взаимодействий Леннард-Джонса // Brittle Lennard-Jones (BLJ) interaction // Разработчик А.М. Кривцов // 17.05.2014 // 06.11.2014 коррекция - удаление const (Цветков) // Интернет: tm.spbstu.ru/BLJ

function MainBLJ(canvas) {

   // Предварительные установки

var X_max = canvas.width;

	var Y_max = canvas.height;
   // Размерные параметры
   
   var a = 1.;    // длина связи
   var D = 1.;    // энергия связи
   // Расчет констант взаимодействия
   var b = a * Math.pow(13./7, 1./6);    // положение минимума силы Леннард-Джонса (= 1.1086834 a)
   var b2 = b * b;
   var P0 = 12 * D / a;                  // коэффициент в выражении для силы Леннард-Джонса
   var P = 42. / 169 * P0 / b;           // модуль минимума силы Леннард-Джонса

// Переменные параметры взаимодействия

var al; // alpha - параметр взаимодействия var ac; // радиус обрезания взаимодействия

var al1, ac2; // производные параметры

   // Задание начальных значений параметров
  

set_al(1); set_ac(1.5 * a);

   // Область построения графика
   var x_min = 0.9 * a;  
   var x_max = 2.5 * a;
   var y_min = -1.2 * P;    
   var y_max = 2 * P;      
	var N = X_max;                 	// число точек по оси x

var dx = x_max / N; // шаг по оси x var sx = X_max / x_max; // масштаб по оси x

var sy; // масштаб по оси y var Y0; // положение 0 оси y в экранных координатах var context; // на context происходит рисование

// Установка флажков чекбоксов var LJ_flag = true; var BLJ_flag = true;

   // настройка слайдеров и текстовых полей
   Slider_01.min = 0;       
   Slider_01.max = 4;
   Slider_01.step = 0.01;
   Slider_01.value = al;     			// значение ползунка должно задаваться после min, max и step
   Text_01.value = al;
   Slider_02.min = 1.2 * a;       		// лучше было бы взять acSlider.min = b, но b не кратно значению acSlider.step, что портит слайдер
   Slider_02.max = x_max;
   Slider_02.step = 0.01 * a;
   Slider_02.value = ac;     	
   Text_02.value = ac;

draw();

   // функция, запускающаяся при перемещении слайдера
   this.set_01 = function(input) { set_al(input);	draw(); }  
   this.set_02 = function(input) { set_ac(input);	draw(); }  
   

// Функции, запускающиеся при изменении элементов управления

   this.setCheckbox_01 = function(bool) {LJ_flag = bool; 	 draw(); }

this.setCheckbox_02 = function(bool) {BLJ_flag = bool; draw(); }

function set_ac(value) { ac = Number(value); ac2 = ac * ac; }

function set_al(value) { al = Number(value); al1 = 1 + Math.sqrt(al / (1 + al)); }

// Отображение

function draw() { // Расчет параметров графики

sy = Y_max / (y_max - y_min); // масштаб по оси y Y0 = Y_max + y_min * sy; // положение 0 оси y в экранных координатах

context = canvas.getContext("2d"); // на context происходит рисование

context.clearRect(0, 0, X_max, Y_max); // очистить экран

       // Горизонтальная ось
       context.strokeStyle = 'lightgrey';
       context.beginPath();
       context.moveTo(0, Y0);
       context.lineTo(X_max, Y0);
       context.stroke();
       // Пунктирные линии
       context.beginPath();
       context.setLineDash([5]);
       context.moveTo(b * sx, Y0);
       context.lineTo(b * sx, Y0 + P * sy);
       context.lineTo(0,      Y0 + P * sy);
       context.stroke();
       context.setLineDash([0]);
       // Надписи
       context.fillStyle = 'black';
       context.font = "italic 20px Times";
       context.fillText("r", x_max * sx - 15, Y0 - 7);
       context.fillText("F", 5, 20);
       context.fillText("0", 3, Y0 - 3);
       context.fillStyle = 'grey';
       context.fillText("a", a * sx + 3, Y0 - 3);
       context.fillText("b", b * sx - 3, Y0 - 3);
       context.fillText("-P", 3, Y0 + P * sy - 5);
       if (BLJ_flag)

{ var dX = 0, dY = 17; if (ac > 1.5) { dX = 10; dY = 0; } if (ac > 2.38) { dX = 0; dY = 19; } context.fillText("a", ac * sx - 10 + dX, Y0 - 4 + dY); context.font = "12px Times"; context.fillText("cut", ac * sx + dX, Y0 - 3 + dY); }

// Графики сил Graph(F_BLJ, BLJ_flag, 'red'); Graph(F_LJ, LJ_flag, 'black'); }

// Построение графика функции

function Graph(F, flag, color) { if (!flag) return;

context.strokeStyle = color; context.beginPath(); for (var x = x_min; x < x_max; x+=dx) { var y = F(x); var X = x * sx; var Y = Y0 - y * sy;

if (Y > -Y_max) context.lineTo(X, Y); // Графика, сильно выходящяя за границы области, отключается } context.stroke(); }

   // Потенциал Леннард-Джонса
   
   function U_LJ(r)
   {
       var s2 = 1 / (r * r);
       var s6 = s2 * s2 * s2;
       return D * s6 * (s6 - 2);
   }    

// Сила Леннард-Джонса

   function F_LJ(r)
   {
       var s2 = 1 / (r * r);
       var s4 = s2 * s2;
       return P0 * s4 * s4 * (s4 * s2 - 1) * r;
   }

// Укороченная сила Леннард-Джонса

   function F_BLJ(r)
   {
       return k(r) * F_LJ(r);
   }
   // Rоэффициент формы

   function k(x)
   {
       if (x > ac) return 0; 
       if (x < b) return 1; 
       var z = (x * x - b2) / (ac2 - b2)
       var z2 = z * z;
       return (1 + al) * (1 - al1 * z2) * (1 - al1 * z2) - al;

}

// Сглаживающий коэффициент

   function k1(x)
   {
       if (x > ac) return 0; 
       if (x < b) return 1; 
       var z = (x * x - b2) / (ac2 - b2)
       var z2 = z * z;
       return (1 - z2) * (1 - z2);
   }

} </syntaxhighligh> Файл "BLJ.html" <syntaxhighlight lang="html" line start="1" enclose="div"> <!DOCTYPE html> <html> <head>

   <meta charset="UTF-8" />
   <title>Brittle Lennard-Jones Interaction (BLJ)</title>
   <script src="BLJ.js"></script>

</head> <body>

   <canvas id="canvasGraph" width="800" height="400" style="border:1px solid #000000;"></canvas>
       Сила взаимодействия Леннард-Джонса:

<input type="checkbox" id="checkbox_01" name="" onchange="app.setCheckbox_01(this.checked);" checked/>классическая,

       

<input type="checkbox" id="checkbox_02" name="" onchange="app.setCheckbox_02(this.checked);" checked/>хрупкая

       
       α = <input id="Text_01" style="width: 4.2ex;" required pattern="[-+]?([0-9]*\.[0-9]+|[0-9]+)" oninput="
           // если введено не число - строка не пройдет валидацию по паттерну выше, и checkValidity() вернет false
           if (!this.checkValidity()) return;
           app.set_01(this.value);
           document.getElementById('Slider_01').value = this.value;
       "> 

<input type="range" id="Slider_01" style="width: 100px;" oninput="app.set_01(this.value); document.getElementById('Text_01').value = this.value;"> acut = <input id="Text_02" style="width: 4.2ex;" required pattern="[-+]?([0-9]*\.[0-9]+|[0-9]+)" oninput="

           if (!this.checkValidity()) return;
           app.set_02(this.value);
           document.getElementById('Slider_02').value = this.value;
       "> a

<input type="range" id="Slider_02" style="width: 100px;" oninput="app.set_02(this.value); document.getElementById('Text_02').value = this.value;">

<script type="text/javascript">var app = new MainBLJ( document.getElementById('canvasGraph') );</script>

</body> </html> </syntaxhighligh> </toggledisplay>


Сила взаимодействия определяется формулой [math] F(r) = k(r)F_{LJ}(r)[/math], где [math]F_{LJ}(r)[/math] — сила Леннард-Джонса, [math]k(r)[/math] — коэффициент формы:


[math] k(r) = \left\{ \begin{array}{ll} 1, \qquad & r\le b; \\ \displaystyle (1+\alpha)\left(1-\left(1+\sqrt{\frac{\alpha}{1+\alpha}}\,\right)\left(\frac{r^2-b^2}{a_{\rm cut}^2-b^2}\right)^2\right)^2 - \alpha, \qquad & b\lt r\le a_{\rm cut}; \\ 0, \qquad & r \gt a_{\rm cut}; \\ \end{array} \right. [/math]


[math] F_{LJ} = \frac{12D}{a}\left[\left(\frac a r\right)^{13}-\left(\frac a r\right)^{7}\right]. [/math]


Здесь [math]b = \sqrt[6]{\frac{13}7}\,a[/math] — расстояние, на котором реализуется минимальное значение силы Леннард-Джонса (расстояние разрыва связи), [math]a_{\rm cut}[/math] — радиус обрезания взаимодействия, [math]\alpha[/math] — положительный параметр, определяющий хрупкость взаимодействия.


Согласно определению, силы [math]F(r)[/math] и [math]F_{LJ}(r)[/math] совпадают при [math]r \le b[/math], следовательно, для хрупкого и исходного взаимодействий совпадают такие характеристики, как жесткость и прочность связи, расстояние разрыва связи и критическая деформация. Хрупкое взаимодействие может быть построено аналогичным образом на основе любого парного взаимодействия, для которого определено расстояние разрыва связи [math]b[/math].


Данное взаимодействие впервые предложено в работе


См. также