Редактирование: Укороченное взаимодействие Леннард-Джонса
Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 4: | Строка 4: | ||
Укороченное взаимодействие Леннард-Джонса (SLJ) определяется на основе силы взаимодействия [[Потенциал Леннард-Джонса|Леннард-Джонса]] с применением коэффициента, плавно ограничивающего взаимодействие — см. интерактивный график ниже ''(перемещая слайдер проследите изменение радиуса обрезания).'' | Укороченное взаимодействие Леннард-Джонса (SLJ) определяется на основе силы взаимодействия [[Потенциал Леннард-Джонса|Леннард-Джонса]] с применением коэффициента, плавно ограничивающего взаимодействие — см. интерактивный график ниже ''(перемещая слайдер проследите изменение радиуса обрезания).'' | ||
− | + | <addscript src=SLJ/> | |
− | <htmlet nocache="yes"> | + | <htmlet nocache="yes">SLJ_TM</htmlet> |
− | + | Текст программы построения графиков на языке JavaScript: <toggledisplay status=hide showtext="Показать↓" hidetext="Скрыть↑" linkstyle="font-size:default"> | |
− | |||
Файл '''"SLJ.js"''' | Файл '''"SLJ.js"''' | ||
− | < | + | <source lang="javascript" first-line="1"> |
− | // Укороченное | + | // Укороченное взаимодействие Леннард-Джонса |
− | // Short Lennard-Jones (SLJ) | + | // Short Lennard-Jones (SLJ) |
− | // Разработчик А.М. Кривцов | + | // Разработчик А. М. Кривцов |
− | // | + | // 01.05.2014 |
− | |||
// Интернет: tm.spbstu.ru/SLJ | // Интернет: tm.spbstu.ru/SLJ | ||
− | function MainSLJ(canvas) { | + | function MainSLJ(canvas, acSlider, acText) { |
// Предварительные установки | // Предварительные установки | ||
− | + | var context = canvas.getContext("2d"); // на context происходит рисование | |
− | + | ||
− | |||
// Размерные параметры | // Размерные параметры | ||
− | + | const a = 1.; // длина связи | |
− | + | const D = 1.; // энергия связи | |
− | // Расчет | + | // Расчет параметров взаимодействия |
− | + | const b = a * Math.pow(13./7, 1./6); // положение минимума силы Леннарда-Джонса (= 1.1086834 a) | |
− | + | const b2 = b * b; | |
− | + | const P0 = 12 * D / a; // коэффициент в выражении для силы Леннарда-Джонса | |
− | + | const P = 42. / 169 * P0 / b; // модуль минимума силы Леннарда-Джонса | |
− | + | // Задаваемые параметры | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | var ac = 1.4 * a; var ac2 = ac * ac; // радиус обрезания взаимодействия | |
+ | |||
+ | const fps = 50; // frames per second - число кадров в секунду (качество отображения) | ||
// Область построения графика | // Область построения графика | ||
− | + | const x_min = 0.9 * a; | |
− | + | const x_max = 2.5 * a; | |
− | + | const y_min = -1.2 * P; | |
− | + | const y_max = 2 * P; | |
− | + | ||
− | + | // Установка слайдера | |
− | + | ||
− | + | // функция, запускающаяся при перемещении слайдера | |
− | + | this.set_ac = function(input_ac) | |
− | + | { | |
− | + | ac = input_ac * a; // input_ac - значение на слайдере | |
− | + | ac2 = ac * ac; | |
− | + | draw(); | |
− | + | } | |
− | |||
− | |||
// настройка слайдеров и текстовых полей | // настройка слайдеров и текстовых полей | ||
− | + | acSlider.min = 1.11 * a; // лучше было бы взять acSlider.min = b, но b не кратно значению acSlider.step, что портит слайдер | |
− | + | acSlider.max = x_max; | |
− | + | acSlider.step = 0.01 * a; | |
− | + | acSlider.value = ac; // значение ползунка должно задаваться после min, max и step | |
− | + | acText.value = ac; | |
− | + | ||
− | + | // Расчет параметров графики | |
− | |||
− | |||
− | |||
− | |||
− | + | const N = canvas.width; // число точек по оси x | |
− | + | const dx = x_max / N; // шаг по оси x | |
− | + | const sx = canvas.width / x_max; // масштаб по оси x | |
+ | const sy = canvas.height / (y_max - y_min); // масштаб по оси y | ||
+ | const Y0 = canvas.height + y_min * sy; // положение 0 оси y в экранных координатах | ||
− | + | draw(); | |
− | |||
− | |||
− | |||
− | |||
− | + | // Отображение | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | function draw() | |
− | + | { | |
− | + | context.clearRect(0, 0, canvas.width, canvas.height); // очистить экран | |
// Горизонтальная ось | // Горизонтальная ось | ||
Строка 104: | Строка 82: | ||
context.beginPath(); | context.beginPath(); | ||
context.moveTo(0, Y0); | context.moveTo(0, Y0); | ||
− | context.lineTo( | + | context.lineTo(canvas.width, Y0); |
context.stroke(); | context.stroke(); | ||
Строка 126: | Строка 104: | ||
context.fillText("b", b * sx - 3, Y0 - 3); | context.fillText("b", b * sx - 3, Y0 - 3); | ||
context.fillText("-P", 3, Y0 + P * sy - 5); | context.fillText("-P", 3, Y0 + P * sy - 5); | ||
− | + | var dX = 0, dY = 0; | |
− | + | if (ac < 1.2) { dX = 13; dY = 17; } | |
− | + | 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); | |
− | + | ||
− | + | // График (укороченная сила Леннарда-Джонса) | |
− | + | context.strokeStyle = 'red'; | |
− | + | context.beginPath(); | |
− | + | for (var x = x_min; x < x_max; x += dx) | |
− | + | { | |
− | + | var y = k(x) * f_LJ(x); | |
− | + | ||
+ | var X = x * sx; | ||
+ | var Y = Y0 - y * sy; | ||
+ | |||
+ | if (x == x_min) context.moveTo(X, Y); | ||
+ | else context.lineTo(X, Y); | ||
+ | } | ||
+ | context.stroke(); | ||
− | + | // График (полная сила Леннарда-Джонса) | |
− | + | context.strokeStyle = 'black'; | |
− | + | context.beginPath(); | |
− | + | for (var x = x_min; x < x_max; x+=dx) | |
− | + | { | |
− | + | var y = f_LJ(x); | |
− | + | ||
− | + | var X = x * sx; | |
− | + | var Y = Y0 - y * sy; | |
− | + | ||
− | + | if (x == x_min) context.moveTo(X, Y); | |
− | + | else context.lineTo(X, Y); | |
− | + | } | |
+ | context.stroke(); | ||
+ | } | ||
− | + | // Сила Леннарда-Джонса | |
− | |||
− | |||
− | |||
− | |||
− | // | ||
− | function | + | function f_LJ(r) |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{ | { | ||
var s2 = 1 / (r * r); | var s2 = 1 / (r * r); | ||
Строка 177: | Строка 150: | ||
return P0 * s4 * s4 * (s4 * s2 - 1) * r; | return P0 * s4 * s4 * (s4 * s2 - 1) * r; | ||
} | } | ||
− | + | ||
− | + | // Сглаживающий коэффициент | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
function k(x) | function k(x) | ||
Строка 196: | Строка 162: | ||
return (1 - z2) * (1 - z2); | return (1 - z2) * (1 - z2); | ||
} | } | ||
− | |||
} | } | ||
− | </ | + | </source> |
Файл '''"SLJ.html"''' | Файл '''"SLJ.html"''' | ||
− | < | + | <source lang="html" first-line="1"> |
<!DOCTYPE html> | <!DOCTYPE html> | ||
<html> | <html> | ||
<head> | <head> | ||
<meta charset="UTF-8" /> | <meta charset="UTF-8" /> | ||
− | <title> | + | <title>SLJ</title> |
<script src="SLJ.js"></script> | <script src="SLJ.js"></script> | ||
</head> | </head> | ||
Строка 211: | Строка 176: | ||
<canvas id="canvasGraph" width="800" height="400" style="border:1px solid #000000;"></canvas> | <canvas id="canvasGraph" width="800" height="400" style="border:1px solid #000000;"></canvas> | ||
− | + | <div> | |
− | + | Сила Леннарда-Джонса: <BR> | |
− | Сила | + | <font color="#000000" size="5"><B>—</B></font> полная (LJ)<BR> |
− | + | <font color="#ff0000" size="5"><B>—</B></font> укороченная (SLJ)<BR> | |
− | + | </div> | |
− | <font color="#ff0000" size="5"><B>—</B></font> | ||
− | |||
− | </div> | ||
− | <!-- | + | <!--слайдер--> |
− | <div> | + | <div>Радиус обрезания: |
− | <font face= "Times New Roman"> | + | <input type="range" id="acSlider" style="width: 150px;" oninput="app.set_ac(this.value); document.getElementById('acText').value = this.value;"> |
− | + | <font face= "Times New Roman"><I>a</I><SUB>cut</SUB> = | |
− | + | <input id="acText" style="width: 4.2ex;" required pattern="[-+]?([0-9]*\.[0-9]+|[0-9]+)" oninput=" | |
// если введено не число - строка не пройдет валидацию по паттерну выше, и checkValidity() вернет false | // если введено не число - строка не пройдет валидацию по паттерну выше, и checkValidity() вернет false | ||
if (!this.checkValidity()) return; | if (!this.checkValidity()) return; | ||
− | app. | + | app.set_ac(this.value); |
− | document.getElementById(' | + | document.getElementById('acSlider').value = this.value; |
− | "><I> a</I> | + | "> |
− | + | <I>a</I></font></div> | |
− | + | <br> | |
− | |||
− | + | <script type="text/javascript">var app = new MainSLJ(document.getElementById('canvasGraph'), | |
− | + | document.getElementById('acSlider'), document.getElementById('acText'));</script> | |
− | |||
+ | <div style="clear:both;"></div> | ||
</body> | </body> | ||
</html> | </html> | ||
− | </ | + | </source> |
− | </ | + | </toggledisplay> |
− | |||
Строка 252: | Строка 212: | ||
\begin{array}{ll} | \begin{array}{ll} | ||
1, \qquad & r\le b; \\ | 1, \qquad & r\le b; \\ | ||
− | \displaystyle \left(1-\left(\frac{r^2-b^2}{a_{\rm cut}^2-b^2}\right)^2\right) | + | \displaystyle \left(1-\left(\frac{r^2-b^2}{a_{\rm cut}^2-b^2}\right)^2\right), \qquad & b<r\le a_{\rm cut}; \\ |
0, \qquad & r > a_{\rm cut}; \\ | 0, \qquad & r > a_{\rm cut}; \\ | ||
\end{array} | \end{array} | ||
Строка 267: | Строка 227: | ||
− | + | Подробнее см. стр. 40 в книге | |
*[[А.М. Кривцов]]. '''[[Деформирование и разрушение твердых тел с микроструктурой]]'''. М.: [http://www.fml.ru Физматлит], 2007. 304 с. | *[[А.М. Кривцов]]. '''[[Деформирование и разрушение твердых тел с микроструктурой]]'''. М.: [http://www.fml.ru Физматлит], 2007. 304 с. | ||
− | Данное взаимодействие является частным случаем | + | Данное взаимодействие является частным случаем хрупкого взаимодействия Леннард-Джонса, впервые предложенного в работе |
− | + | * Krivtsov A.M., Pavlovskaia E.E., Wiercigroch M. '''Impact Fracture of Rock Materials Due to Percussive Drilling Action.''' Proceedings of International Conference [http://ictam04.ippt.gov.pl/ "XXI International Congress of Theoretical and Applied Mechanics"], 15 - 21 August 2004, Warsaw, Poland. (Download pdf: [[Медиа:Krivtsov_2004_ICTAM.pdf|417 kb]]). | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | [[ |