Укороченное взаимодействие Леннард-Джонса — различия между версиями
м (переименовал SLJ в Укороченное взаимодействие Леннарда-Джонса) |
Денис (обсуждение | вклад) |
||
(не показаны 22 промежуточные версии 3 участников) | |||
Строка 1: | Строка 1: | ||
− | {{ | + | [[ТМ|Кафедра ТМ]] > [[Научный справочник]] > [[Потенциалы взаимодействия]] > [[Парные силовые потенциалы взаимодействия | Парные силовые]] > [[Укороченное взаимодействие Леннард-Джонса]]<HR> |
− | < | + | |
− | < | + | |
+ | Укороченное взаимодействие Леннард-Джонса (SLJ) определяется на основе силы взаимодействия [[Потенциал Леннард-Джонса|Леннард-Джонса]] с применением коэффициента, плавно ограничивающего взаимодействие — см. интерактивный график ниже ''(перемещая слайдер проследите изменение радиуса обрезания).'' | ||
+ | |||
+ | |||
+ | <htmlet nocache="yes">Krivtsov/SLJ_TM</htmlet> | ||
+ | <div class="mw-collapsible mw-collapsed" style="width:100%" > | ||
+ | '''Текст программы построения графиков на языке JavaScript:''' <div class="mw-collapsible-content"> | ||
+ | Файл '''"SLJ.js"''' | ||
+ | <syntaxhighlight lang="javascript" line start="1" enclose="div"> | ||
+ | // Укороченное взаимодействий Леннард-Джонса | ||
+ | // Short Lennard-Jones (SLJ) interaction | ||
+ | // Разработчик А.М. Кривцов | ||
+ | // 17.05.2014 | ||
+ | // 06.11.2014 коррекция - удаление const (Цветков) | ||
+ | // Интернет: tm.spbstu.ru/SLJ | ||
+ | |||
+ | function MainSLJ(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 ac; // радиус обрезания взаимодействия | ||
+ | |||
+ | var ac2; // квадрат ac | ||
+ | |||
+ | // Задание начальных значений параметров | ||
+ | |||
+ | set_ac(1.4 * 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 SLJ_flag = true; | ||
+ | |||
+ | // настройка слайдеров и текстовых полей | ||
+ | |||
+ | Slider_01.min = 1.11 * a; // лучше было бы взять acSlider.min = b, но b не кратно значению acSlider.step, что портит слайдер | ||
+ | Slider_01.max = x_max; | ||
+ | Slider_01.step = 0.01 * a; | ||
+ | Slider_01.value = ac; | ||
+ | Text_01.value = ac; | ||
+ | |||
+ | draw(); | ||
+ | |||
+ | // функция, запускающаяся при перемещении слайдера | ||
+ | this.set_01 = function(input) { set_ac(input); draw(); } | ||
+ | |||
+ | // Функции, запускающиеся при изменении элементов управления | ||
+ | this.setCheckbox_01 = function(bool) {LJ_flag = bool; draw(); } | ||
+ | this.setCheckbox_02 = function(bool) {SLJ_flag = bool; draw(); } | ||
+ | |||
+ | function set_ac(value) | ||
+ | { | ||
+ | ac = Number(value); | ||
+ | ac2 = ac * ac; | ||
+ | } | ||
+ | |||
+ | // Отображение | ||
+ | |||
+ | 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 (SLJ_flag) | ||
+ | { | ||
+ | var dX = 13, dY = 17; | ||
+ | if (ac > 1.2) { dX = 0; 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_SLJ, SLJ_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_SLJ(r) | ||
+ | { | ||
+ | return k(r) * F_LJ(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 - z2) * (1 - z2); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | Файл '''"SLJ.html"''' | ||
+ | <syntaxhighlight lang="html5" line start="1" enclose="div"> | ||
+ | <!DOCTYPE html> | ||
+ | <html> | ||
+ | <head> | ||
+ | <meta charset="UTF-8" /> | ||
+ | <title>Short Lennard-Jones Interaction (SLJ)</title> | ||
+ | <script src="SLJ.js"></script> | ||
+ | </head> | ||
+ | <body> | ||
+ | <canvas id="canvasGraph" width="800" height="400" style="border:1px solid #000000;"></canvas> | ||
+ | |||
+ | <!--Выбор графика (чекбоксы)--> | ||
+ | <div> | ||
+ | Сила взаимодействия Леннард-Джонса: | ||
+ | <font color="#000000" size="5"><B>—</B></font> | ||
+ | <input type="checkbox" id="checkbox_01" name="" onchange="app.setCheckbox_01(this.checked);" checked/>классическая, | ||
+ | <font color="#ff0000" size="5"><B>—</B></font> | ||
+ | <input type="checkbox" id="checkbox_02" name="" onchange="app.setCheckbox_02(this.checked);" checked/>укороченная | ||
+ | </div> | ||
+ | |||
+ | <!--Установка параметров взаимодействия (текстовые поля и слайдеры)--> | ||
+ | <div> | ||
+ | <font face= "Times New Roman"> | ||
+ | Радиус обрезания: | ||
+ | <I>a</I><SUB>cut</SUB> = <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; | ||
+ | "><I> a</I> | ||
+ | <input type="range" id="Slider_01" style="width: 100px;" oninput="app.set_01(this.value); document.getElementById('Text_01').value = this.value;"> | ||
+ | </font> | ||
+ | </div> | ||
+ | |||
+ | <script type="text/javascript">var app = new MainSLJ( | ||
+ | document.getElementById('canvasGraph') | ||
+ | );</script> | ||
+ | |||
+ | </body> | ||
+ | </html> | ||
+ | </syntaxhighlight> | ||
+ | </div> | ||
+ | </div> | ||
+ | |||
+ | |||
+ | Сила взаимодействия определяется формулой <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 \left(1-\left(\frac{r^2-b^2}{a_{\rm cut}^2-b^2}\right)^2\right)^2, \qquad & b<r\le a_{\rm cut}; \\ | ||
+ | 0, \qquad & r > 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>F(r)</math> и <math>F_{LJ}(r)</math> совпадают при <math>r \le b</math>, следовательно, для хрупкого и исходного взаимодействий совпадают такие характеристики, как жесткость и прочность связи, расстояние разрыва связи и критическая деформация. Хрупкое взаимодействие может быть построено аналогичным образом на основе любого парного взаимодействия, для которого определено расстояние разрыва связи <math>b</math>. Подробнее см. стр. 40 в книге | ||
+ | *[[А.М. Кривцов]]. '''[[Деформирование и разрушение твердых тел с микроструктурой]]'''. М.: [http://www.fml.ru Физматлит], 2007. 304 с. | ||
+ | |||
+ | |||
+ | Данное взаимодействие является частным случаем [[Хрупкое взаимодействие Леннард-Джонса|хрупкого взаимодействия Леннард-Джонса]]. | ||
+ | |||
+ | |||
+ | == См. также == | ||
+ | |||
+ | * [[Хрупкое взаимодействие Леннард-Джонса]] | ||
+ | * [[Потенциал Леннард-Джонса]] | ||
+ | |||
+ | [[Category: Виртуальная лаборатория|Леннард-Джонс - укороченное взаимодействие]] |
Текущая версия на 09:17, 11 марта 2015
Кафедра ТМ > Научный справочник > Потенциалы взаимодействия > Парные силовые > Укороченное взаимодействие Леннард-Джонса
Укороченное взаимодействие Леннард-Джонса (SLJ) определяется на основе силы взаимодействия Леннард-Джонса с применением коэффициента, плавно ограничивающего взаимодействие — см. интерактивный график ниже (перемещая слайдер проследите изменение радиуса обрезания).
Файл "SLJ.js"
1 // Укороченное взаимодействий Леннард-Джонса
2 // Short Lennard-Jones (SLJ) interaction
3 // Разработчик А.М. Кривцов
4 // 17.05.2014
5 // 06.11.2014 коррекция - удаление const (Цветков)
6 // Интернет: tm.spbstu.ru/SLJ
7
8 function MainSLJ(canvas) {
9
10 // Предварительные установки
11
12 var X_max = canvas.width;
13 var Y_max = canvas.height;
14
15 // Размерные параметры
16
17 var a = 1.; // длина связи
18 var D = 1.; // энергия связи
19
20 // Расчет констант взаимодействия
21
22 var b = a * Math.pow(13./7, 1./6); // положение минимума силы Леннард-Джонса (= 1.1086834 a)
23 var b2 = b * b;
24 var P0 = 12 * D / a; // коэффициент в выражении для силы Леннард-Джонса
25 var P = 42. / 169 * P0 / b; // модуль минимума силы Леннард-Джонса
26
27 // Переменные параметры взаимодействия
28
29 var ac; // радиус обрезания взаимодействия
30
31 var ac2; // квадрат ac
32
33 // Задание начальных значений параметров
34
35 set_ac(1.4 * a);
36
37 // Область построения графика
38 var x_min = 0.9 * a;
39 var x_max = 2.5 * a;
40 var y_min = -1.2 * P;
41 var y_max = 2 * P;
42
43 var N = X_max; // число точек по оси x
44 var dx = x_max / N; // шаг по оси x
45 var sx = X_max / x_max; // масштаб по оси x
46
47 var sy; // масштаб по оси y
48 var Y0; // положение 0 оси y в экранных координатах
49 var context; // на context происходит рисование
50
51 // Установка флажков чекбоксов
52 var LJ_flag = true;
53 var SLJ_flag = true;
54
55 // настройка слайдеров и текстовых полей
56
57 Slider_01.min = 1.11 * a; // лучше было бы взять acSlider.min = b, но b не кратно значению acSlider.step, что портит слайдер
58 Slider_01.max = x_max;
59 Slider_01.step = 0.01 * a;
60 Slider_01.value = ac;
61 Text_01.value = ac;
62
63 draw();
64
65 // функция, запускающаяся при перемещении слайдера
66 this.set_01 = function(input) { set_ac(input); draw(); }
67
68 // Функции, запускающиеся при изменении элементов управления
69 this.setCheckbox_01 = function(bool) {LJ_flag = bool; draw(); }
70 this.setCheckbox_02 = function(bool) {SLJ_flag = bool; draw(); }
71
72 function set_ac(value)
73 {
74 ac = Number(value);
75 ac2 = ac * ac;
76 }
77
78 // Отображение
79
80 function draw()
81 {
82 // Расчет параметров графики
83
84 sy = Y_max / (y_max - y_min); // масштаб по оси y
85 Y0 = Y_max + y_min * sy; // положение 0 оси y в экранных координатах
86
87 context = canvas.getContext("2d"); // на context происходит рисование
88
89 context.clearRect(0, 0, X_max, Y_max); // очистить экран
90
91 // Горизонтальная ось
92 context.strokeStyle = 'lightgrey';
93 context.beginPath();
94 context.moveTo(0, Y0);
95 context.lineTo(X_max, Y0);
96 context.stroke();
97
98 // Пунктирные линии
99 context.beginPath();
100 context.setLineDash([5]);
101 context.moveTo(b * sx, Y0);
102 context.lineTo(b * sx, Y0 + P * sy);
103 context.lineTo(0, Y0 + P * sy);
104 context.stroke();
105 context.setLineDash([0]);
106
107 // Надписи
108 context.fillStyle = 'black';
109 context.font = "italic 20px Times";
110 context.fillText("r", x_max * sx - 15, Y0 - 7);
111 context.fillText("F", 5, 20);
112 context.fillText("0", 3, Y0 - 3);
113 context.fillStyle = 'grey';
114 context.fillText("a", a * sx + 3, Y0 - 3);
115 context.fillText("b", b * sx - 3, Y0 - 3);
116 context.fillText("-P", 3, Y0 + P * sy - 5);
117 if (SLJ_flag)
118 {
119 var dX = 13, dY = 17;
120 if (ac > 1.2) { dX = 0; dY = 0; }
121 if (ac > 2.38) { dX = 0; dY = 19; }
122 context.fillText("a", ac * sx - 10 + dX, Y0 - 4 + dY);
123 context.font = "12px Times";
124 context.fillText("cut", ac * sx + dX, Y0 - 3 + dY);
125 }
126
127 // Графики сил
128 Graph(F_SLJ, SLJ_flag, 'red');
129 Graph(F_LJ, LJ_flag, 'black');
130 }
131
132 // Построение графика функции
133
134 function Graph(F, flag, color)
135 {
136 if (!flag) return;
137
138 context.strokeStyle = color;
139 context.beginPath();
140 for (var x = x_min; x < x_max; x+=dx)
141 {
142 var y = F(x);
143 var X = x * sx;
144 var Y = Y0 - y * sy;
145
146 if (Y > -Y_max) context.lineTo(X, Y); // Графика, сильно выходящяя за границы области, отключается
147 }
148 context.stroke();
149 }
150
151 // Потенциал Леннард-Джонса
152
153 function U_LJ(r)
154 {
155 var s2 = 1 / (r * r);
156 var s6 = s2 * s2 * s2;
157 return D * s6 * (s6 - 2);
158 }
159
160 // Сила Леннард-Джонса
161
162 function F_LJ(r)
163 {
164 var s2 = 1 / (r * r);
165 var s4 = s2 * s2;
166 return P0 * s4 * s4 * (s4 * s2 - 1) * r;
167 }
168
169 // Укороченная сила Леннард-Джонса
170
171 function F_SLJ(r)
172 {
173 return k(r) * F_LJ(r);
174 }
175
176 // Сглаживающий коэффициент
177
178 function k(x)
179 {
180 if (x > ac) return 0;
181 if (x < b) return 1;
182
183 var z = (x * x - b2) / (ac2 - b2)
184 var z2 = z * z;
185 return (1 - z2) * (1 - z2);
186 }
187
188 }
Файл "SLJ.html"
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta charset="UTF-8" />
5 <title>Short Lennard-Jones Interaction (SLJ)</title>
6 <script src="SLJ.js"></script>
7 </head>
8 <body>
9 <canvas id="canvasGraph" width="800" height="400" style="border:1px solid #000000;"></canvas>
10
11 <!--Выбор графика (чекбоксы)-->
12 <div>
13 Сила взаимодействия Леннард-Джонса:
14 <font color="#000000" size="5"><B>—</B></font>
15 <input type="checkbox" id="checkbox_01" name="" onchange="app.setCheckbox_01(this.checked);" checked/>классическая,
16 <font color="#ff0000" size="5"><B>—</B></font>
17 <input type="checkbox" id="checkbox_02" name="" onchange="app.setCheckbox_02(this.checked);" checked/>укороченная
18 </div>
19
20 <!--Установка параметров взаимодействия (текстовые поля и слайдеры)-->
21 <div>
22 <font face= "Times New Roman">
23 Радиус обрезания:
24 <I>a</I><SUB>cut</SUB> = <input id="Text_01" style="width: 4.2ex;" required pattern="[-+]?([0-9]*\.[0-9]+|[0-9]+)" oninput="
25 // если введено не число - строка не пройдет валидацию по паттерну выше, и checkValidity() вернет false
26 if (!this.checkValidity()) return;
27 app.set_01(this.value);
28 document.getElementById('Slider_01').value = this.value;
29 "><I> a</I>
30 <input type="range" id="Slider_01" style="width: 100px;" oninput="app.set_01(this.value); document.getElementById('Text_01').value = this.value;">
31 </font>
32 </div>
33
34 <script type="text/javascript">var app = new MainSLJ(
35 document.getElementById('canvasGraph')
36 );</script>
37
38 </body>
39 </html>
Сила взаимодействия определяется формулой , где — сила Леннард-Джонса, — сглаживающий коэффициент:
Здесь — расстояние, на котором реализуется минимальное значение силы Леннард-Джонса (расстояние разрыва связи), — радиус обрезания взаимодействия.
Согласно определению, силы и совпадают при , следовательно, для хрупкого и исходного взаимодействий совпадают такие характеристики, как жесткость и прочность связи, расстояние разрыва связи и критическая деформация. Хрупкое взаимодействие может быть построено аналогичным образом на основе любого парного взаимодействия, для которого определено расстояние разрыва связи . Подробнее см. стр. 40 в книге
- А.М. Кривцов. Деформирование и разрушение твердых тел с микроструктурой. М.: Физматлит, 2007. 304 с.
Данное взаимодействие является частным случаем хрупкого взаимодействия Леннард-Джонса.