Потенциал Ми — различия между версиями

Материал из Department of Theoretical and Applied Mechanics
Перейти к: навигация, поиск
м (Замена текста — «<addscript(.*)src=(.*)>» на «»)
м (Замена текста — «<source lang="(.*)" first-line="(.*)">» на «<syntaxhighlight lang="$1" line start="$2" enclose="div">»)
Строка 35: Строка 35:
 
''Текст программы построения графиков на языке JavaScript:'' <toggledisplay status=hide showtext="Показать↓" hidetext="Скрыть↑" linkstyle="font-size:default">  
 
''Текст программы построения графиков на языке JavaScript:'' <toggledisplay status=hide showtext="Показать↓" hidetext="Скрыть↑" linkstyle="font-size:default">  
 
Файл '''"Mie.js"'''
 
Файл '''"Mie.js"'''
<source lang="javascript" first-line="1">
+
<syntaxhighlight lang="javascript" line start="1" enclose="div">
 
// Сравнение взаимодействий Леннард-Джонса, Ми и Морзе  
 
// Сравнение взаимодействий Леннард-Джонса, Ми и Морзе  
 
// Разработчики А.М. Кривцов и Д.В. Цветков
 
// Разработчики А.М. Кривцов и Д.В. Цветков
Строка 317: Строка 317:
 
</source>
 
</source>
 
Файл '''"MLJ.html"'''
 
Файл '''"MLJ.html"'''
<source lang="html" first-line="1">
+
<syntaxhighlight lang="html" line start="1" enclose="div">
 
<!DOCTYPE html>
 
<!DOCTYPE html>
 
<html>
 
<html>

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

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


Парный силовой потенциал взаимодействия. Определяется формулой:

[math] \varPi(r) = \frac{D}{n-m} \left[m\left(\frac{a}{r}\right)^{n}-n\left(\frac{a}{r}\right)^{m}\right], [/math]

где

  • [math]D[/math] — энергия связи,
  • [math]a[/math] — длина связи,
  • [math]m[/math], [math]n[/math] — безразмерные параметры взаимодействия.

Потенциал имеет два независимых безразмерных параметра. Частным случаем потенциала Ми при [math]m=6[/math], [math]n=12[/math] является потенциал Леннард-Джонса.

Сила, соответствующая потенциалу Ми, вычисляется по формуле

[math] F(r) = \frac{mn}{m-n}\,\frac{D}{a}\left[\left(\frac{a}{r}\right)^{n+1} - \left(\frac{a}{r}\right)^{m+1}\right]. [/math]

Для потенциала Ми жесткость связи, критическая длина связи и прочность связи, соответственно, равны

[math] C = \varPi''(a) = mn\,\frac{D}{a^2}, \qquad b = \sqrt[n-m]{\frac{n+1}{m+1}}\,a, \qquad P = |F(b)| = mn\sqrt[n-m]{\frac{(m+1)^{m+1}}{(n+1)^{n+1}}}\,\frac{D}{a}. [/math]

Сравнение взаимодействия Ми с взаимодействием Морзе и Леннард-Джонса приведено на интерактивных графиках ниже. Показана зависимость от расстояния потенциала [math]\varPi[/math] и силы [math]F[/math]. Сравнение проведено при одинаковых значениях энергии связи [math]D[/math] и длины связи [math]a[/math]. Перемещение слайдера позволяет проследить влияние безразмерных параметров потенциалов, при этом энергия связи [math]D[/math] и длина связи [math]a[/math] остаются неизменными. Значения критической длины связи [math]b[/math] и прочности связи [math]P[/math], отмеченные на графиках, соответствуют потенциалу Леннард-Джонса.

Взаимодействие: Леннард-Джонса, Ми, Морзе
Ми: m = n = Морзе: αa =
Связь между параметрами: n = m, n = 2m, (αa)2 = nm/2

Чекбоксы под слайдерами позволяют установить или удалить связь между параметрами. В частности, можно убедиться, что при [math]\alpha a = \sqrt{\frac{nm}2}[/math] взаимодействия Ми и Морзе близки — в этом случае для них совпадает жесткость связи [math]C = \varPi''(a)[/math].

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

function MainMie(canvas_1, canvas_2) {

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

var X_max = canvas_1.width;

	var Y_max = canvas_1.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 m = 6;  							// параметр взаимодействия Ми
   var n = 12;  							// параметр взаимодействия Ми
   var kappa = 6;  						// параметр взаимодействия Морзе
   // Область построения графика
   var x_min = 0.3 * a;  
   var x_max = 2.5 * a;
   var y_min_1 = -1.5 * D;    
   var y_min_2 = -1.5 * P;    
   var y_max_1 = -y_min_1;    
   var y_max_2 = -y_min_2;    

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

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

// Установка флажков чекбоксов var LJ_flag = true; var Mie_flag = true; var Morse_flag = true; var nm_flag = false; var n2m_flag = false; var kappa_flag = false;

   // настройка слайдеров и текстовых полей
   Slider_01.min = 2;       	
   Slider_01.max = 18;
   Slider_01.step = 0.1;
   Slider_01.value = m;     	// значение ползунка должно задаваться после min, max и step
   Text_01.value = m;
   Slider_02.min = Slider_01.min;       	
   Slider_02.max = Slider_01.max;
   Slider_02.step = Slider_01.step;
   Slider_02.value = n;     
   Text_02.value = n;

Slider_03.min = Slider_01.min; Slider_03.max = Slider_01.max;

   Slider_03.step = Slider_01.step;
   Slider_03.value = kappa;     
   Text_03.value = kappa;

draw();

   // функция, запускающаяся при перемещении слайдера
   this.set_01 = function(input) { m = Number(input); 											draw(); } 
   this.set_02 = function(input) { n = Number(input); 			nm_flag = n2m_flag = false;  	draw(); }  
   this.set_03 = function(input) { kappa = Number(input); 		kappa_flag = false;  			draw(); }  
   

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

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

this.setCheckbox_02 = function(bool) {Mie_flag = bool; draw(); } this.setCheckbox_03 = function(bool) {Morse_flag = bool; draw(); }

   this.setCheckbox_04 = function(bool) {nm_flag = bool;  		if(!bool) return; 	n2m_flag = false;  	draw(); }
   this.setCheckbox_05 = function(bool) {n2m_flag = bool; 		if(!bool) return; 	nm_flag = false;  	draw(); }
   this.setCheckbox_06 = function(bool) {kappa_flag = bool; 	if(!bool) return; 						draw(); }

function set_n(value) { n = value; Slider_02.value = n; Text_02.value = n; } function set_kappa(value) { kappa = value; Slider_03.value = kappa; Text_03.value = kappa; }

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

function draw() { if (nm_flag) set_n(m); if (n2m_flag) set_n(2 * m); if (kappa_flag) set_kappa(Math.sqrt(m * n / 2));

checkbox_04.checked = nm_flag; checkbox_05.checked = n2m_flag; checkbox_06.checked = kappa_flag;

draw_1(); draw_2(); }

function draw_1()

   {

// Расчет параметров графики

y_min = y_min_1; y_max = y_max_1;

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

context = canvas_1.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(a * sx, Y0);
       context.lineTo(a * sx, Y0 + D * sy);
       context.lineTo(0,      Y0 + D * 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("Π", 5, 20);
       context.fillText("0", 3, Y0 - 3);
       context.fillStyle = 'grey';
       context.fillText("a", a * sx - 5, Y0 - 3);
       context.fillText("-D", 3, Y0 + D * sy - 5);

// Графики потенциалов Graph(U_LJ, LJ_flag, 'grey'); Graph(U_Mie, Mie_flag, 'blue'); Graph(U_Morse, Morse_flag, 'magenta'); }

   function draw_2()
   {

// Расчет параметров графики

y_min = y_min_2; y_max = y_max_2;

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

context = canvas_2.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);

// Графики сил Graph(F_LJ, LJ_flag, 'grey'); Graph(F_Mie, Mie_flag, 'blue'); Graph(F_Morse, Morse_flag, 'magenta'); }

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

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 (x == x_min) context.moveTo(X, Y); // Не требуется? if (Y > -Y_max) context.lineTo(X, Y); // Отключение графики сильно выходящей за границы области } context.stroke(); }

   // Потенциал Ми
   
   function U_Mie(r)
   {

var s = a / r; // return D / (n - m) * (m * Math.pow(s, n) - n * Math.pow(s, m));

       var n1 = n + 0.00001;		// для обработки случая m = n

return D / (n1 - m) * (m * Math.pow(s, n1) - n1 * Math.pow(s, m));

   }

// Сила Ми

   function F_Mie(r)
   {

var s = a / r; // return n * m / (n - m) * D / a * (Math.pow(s, n + 1) - Math.pow(s, m + 1));

       var n1 = n + 0.00001;		// для обработки случая m = n
       return n1 * m / (n1 - m) * D / a * (Math.pow(s, n1 + 1) - Math.pow(s, m + 1));
   }

   // Потенциал Морзе
   
   function U_Morse(r)
   {
       var al = kappa / a;

var s = Math.exp(al * (a - r));

       return D * s * (s - 2);
   }

// Сила Морзе

   function F_Morse(r)
   {
       var al = kappa / a;

var s = Math.exp(al * (a - r));

       return 2 * al * D * s * (s - 1);
   }

   // Потенциал Леннард-Джонса
   
   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;
   }

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

   <meta charset="UTF-8" />
   <title>LJ, Mie & Morse Interaction</title>
   <script src="Mie.js"></script>

</head> <body>

   <canvas id="canvasGraph_1" width="800" height="300" style="border:1px solid #000000;"></canvas>
   <canvas id="canvasGraph_2" width="800" height="300" 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 type="checkbox" id="checkbox_03" name="" onchange="app.setCheckbox_03(this.checked);" checked/>Морзе

Ми:
       
       m = <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;"> n = <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;
       ">

<input type="range" id="Slider_02" style="width: 100px;" oninput="app.set_02(this.value); document.getElementById('Text_02').value = this.value;"> Морзе: αa = <input id="Text_03" style="width: 4.2ex;" required pattern="[-+]?([0-9]*\.[0-9]+|[0-9]+)" oninput="

           if (!this.checkValidity()) return;
           app.set_03(this.value);
           document.getElementById('Slider_03').value = this.value;
       ">

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

       Связь между параметрами:

<input type="checkbox" id="checkbox_04" name="" onchange="app.setCheckbox_04(this.checked);" unchecked/>n = m, <input type="checkbox" id="checkbox_05" name="" onchange="app.setCheckbox_05(this.checked);" unchecked/>n = 2m, <input type="checkbox" id="checkbox_06" name="" onchange="app.setCheckbox_06(this.checked);" unchecked/>(αa)2 = nm/2

<script type="text/javascript">var app = new MainMie( document.getElementById('canvasGraph_1'), document.getElementById('canvasGraph_2') );</script>

</body> </html> </source> </toggledisplay>

См. также