Научная статья на тему 'ПРОГРАММА ДЛЯ СИМУЛЯЦИИ ЖИДКОСТИ И ГАЗОВ'

ПРОГРАММА ДЛЯ СИМУЛЯЦИИ ЖИДКОСТИ И ГАЗОВ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
451
38
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
СИМУЛЯЦИЯ / ЯЗЫК ПРОГРАММИРОВАНИЯ СИ / ПЛОТНОСТЬ / ИСТОЧНИК

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Донсков Н.В.

В статье описывается предложенный автором алгоритм и его программная реализация на алгоритмическом языке Си по симуляции поведения жидкостей и газа, представлены некоторые результаты моделирования процесса истечения жидкости при разных положениях точечных источников и их количестве. Программа может использоваться в учебном процессе при изучении данных тем.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «ПРОГРАММА ДЛЯ СИМУЛЯЦИИ ЖИДКОСТИ И ГАЗОВ»

средней проводимости подшипника. В случае жидкостного трения, данный параметр характеризует среднее значение толщины смазочной пленки в зонах трения, при граничной смазке - несет информацию о значениях толщины поверхностных пленок и действительный размерах пятен металлических контактов поверхностей, а при полужидкой смазке комплексно характеризует перечисленные параметры. Так же, данный метод достаточно прост в реализации [8. стр 69].

Метод измерения НИВ использует качестве параметра нормированное интегральное время (НИВ) микроконтактирования - относительное время, в течение которого сопротивление подшипника ниже некоторого порогового значения (при измерении R^ выбирают порядка 50-100 Ом)[6, стр. 136] [7, стр. 110]. Данный метод обеспечивает идентификацию режима смазки в подшипнике, обладает хорошей помехозащищенностью, высокой чувствительностью.

Сравнительный анализ методов показал, что наиболее перспективными являются метод измерения активного сопротивления (активной составляющей комплексного сопротивления) и метод НИВ. Эти методы позволят проводить диагностирование практически всех подшипников качения как на отдельно взятых диагностических стендах, так и в узлах и машинах. При этом оценка технического состояния подшипника может проводиться во время работы машины, без его изъятия из узла и на рабочих режимах, а так же на других аналогичных объектах [8. стр 629].

Список использованной литературы:

1. Акустические и электрические методы в триботехнике / Свириденок А.И. [и др.]. Минск: Наука и техника, 1987. 257 с.

2. Майоров М.В., Мишин В.В., Чернышов В.Н. Диагностирование ступичных подшипников автомобиля//Мир транспорта и технологических машин. 2013. № 2 (41). С. 9-16.

3. Моделирование активного сопротивления подшипникового узла./Чернышов В.Н. [и др].//Фундаментальные и прикладные проблемы техники и технологии. 2011. № 2-2. С. 18-23.

4. Бальмонт В.Б., Матвеев В.А. Опоры качения приборов./М.: Машиностроение, 1984. - 240 с.

5. Спришевский, А.И. Подшипники качения: монография. М.: Машиностроение, 1968. - 632 с.

6. Мишин В.В. Подход к комплексному диагностированию подшипникового узла с учетом качества его сборки.//Фундаментальные и прикладные проблемы техники и технологии. 2010. №6. С. 132-139.

7. Экспериментальное исследование электрического сопротивления (проводимости) подшипника качения, как диагностического параметра/Селихов А.В. [и др].//Фундаментальные и прикладные проблемы техники и технологии. 2010. № 6-2. С. 25.

8. Подмастерьев К.В. Электропараметрические методы комплексного диагностирования опор качения: монография. М.: Машиностроение-1, 2001. - 376 с.

9. Zhidkov A.V., Tyutyakin A.V., Mishin V.V. Research of time-frequency characteristics of electrical resistance signal of friction zone of hip joint endoprosthesis with metal-metal friction pair // International Conference on Industrial Engineering, ICIE 2017. С. 624-629.

© Афанасьев Н.А., 2021

УДК 004.4

Донсков Н.В.

г. Ростов-на-Дону, РФ.

ПРОГРАММА ДЛЯ СИМУЛЯЦИИ ЖИДКОСТИ И ГАЗОВ

Аннотация

В статье описывается предложенный автором алгоритм и его программная реализация на

алгоритмическом языке Си по симуляции поведения жидкостей и газа, представлены некоторые результаты моделирования процесса истечения жидкости при разных положениях точечных источников и их количестве.

Программа может использоваться в учебном процессе при изучении данных тем.

Ключевые слова:

Симуляция, язык программирования Си, плотность, источник.

Введение. В настоящее время тема симуляций различных физических и химических процессов начала набирать популярность [1,2]. Люди воссоздают на компьютерах то, что они видят в реальной жизни. Иногда реалистичность результатов таких работ поражают. В данной статье мы детально рассмотрим одну из самых завораживающих и красивых симуляций - симуляции жидкости и газов.

Для того чтобы сделать точную симуляцию столь непростого процесса, надо разобраться в том, как именно работают жидкость и газы в реальной жизни.

Теория. Жидкость в реальной жизни описывается уравнениями Навье-Стокса. Мы не будем останавливаться на них, так как это фундаментальные уравнения, понимание которых требует глубоких знаний в области физики и решения дифференциальных уравнений.

Вывод на экран. Так как используется язык программирования Си, то все результаты выводятся в командную строку. Чтобы отобразить изображение на монитор, в программе используется набор из одиннадцати символов, расположенных по так называемой градации яркости. Они хранятся в одномерном массиве:

char gradient[] = " .:;~-+*!#$@";

Это простой линейный градиент. Чем больше символ занимает места на экране монитора, тем больше у него яркость (например: яркость символа «.» точка меньше, чем у символа «@» собака).

Идея: Жидкость в программе представляется как сетка ячеек (символов). Каждая ячейка в качестве свойств имеет следующие параметры - плотность и скорость по двум осям. Меняя в каждый момент времени эти параметры, будем получать результат симуляции, который основывается на предыдущих значениях. Это и есть основной подход к симуляции: сетка из клеток с индивидуальными свойствами.

Упрощение: Можно легко имплементировать сетку как двумерный массив плотности, и два двумерных массива скоростей по осям х и у. Однако для быстроты вывода символов на экран монитора, двумерные массивы в дальнейшем преобразуются в одномерные. Для этого в программе используется функция int IX(int x, int y).

Создание структуры сетки. Для создания объекта, который будет хранить массивы и другие параметры сетки, в программе создана структура FluidCube: struct FluidCube {

int size; //Размер сетки симуляции

float dt; //Временной шаг

float diff; //Диффузия

float vise; //Вязкость

float *s; //Предыдущая плотность

float *density;

float *Vx;

float *Vy;

float *Vx0; //Предыдущая скорость по x float *Vy0; //Предыдущая скорость по y

i 3 у

Для заполнения объекта этой структуры данными о диффузии, вязкости, временного шага симуляции и выделения оперативной памяти под массивы, создана функция.

struct FluidCube *FluidCubeCreate(int diffusion, int viscosity, float dt){ struct FluidCube *cube = malloc(sizeof(*cube)); cube->size = N; cube->dt = dt; cube->diff = diffusion; cube->visc = viscosity; cube->s = calloc(N * N, sizeof(float)); cube->density = calloc(N * N, sizeof(float)); cube->Vx = calloc(N * N, sizeof(float)); cube->Vy = calloc(N * N, sizeof(float)); cube->Vx0 = calloc(N * N, sizeof(float)); cube->Vy0 = calloc(N * N, sizeof(float)); return cube;

}

Начальное состояние. Чтобы просчитать новые состояния клеток сетки, потребуются данные о их предыдущих скоростях и плотностях. Для добавления данных в эти массивы используются функции:

void FluidCubeAddDensity(struct FluidCube *cube, int x, int y, float amount)

{

cube->density[IX(x, y)] += amount;

}

void FluidCubeAddVelocity(struct FluidCube *cube, int x, int y, float amountX, float amountY)

{

int index = IX(x, y); cube->Vx[index] += amountX; cube->Vy[index] += amountY;

}

Основные функции. Три основных этапа симуляции - диффузия, проекция и адвекция.

• Диффузия - проникание одного вещества в другое. Мы используем диффузию на каждом кадре -как в очевидном случае, когда краситель растекается, так и в неочевидном, когда частицы распространяются по скоростям.

• Проекция - количество жидкости в каждой ячейке должно быть постоянным. То есть число входящей в ячейку жидкости должно быть равно выходящей. Проекция - исправляет нашу симуляцию, приводит её к равновесию.

• Адвекция - так как у нас есть массив скоростей, эти скорости заставляют плотность двигаться. Применяется как к жидкости, так и к самим скоростям.

Для выше названных функций разработаны две подпрограммы:

Set_bnd - функция, задающая границы жидкости. То есть жидкость не должна вытекать за границы окна командной строки. Она отражает свою скорость в противоположную сторону, как бы ударяясь об стенки.

Lin_solve - функция определения коэффициентов диффузии.

Для последовательного выполнения трех этапов симуляции (диффузия, адвекция, проекция) используется функция

void FluidCubeStep(struct FluidCube *cube) {

float vise = cube->visc; float diff = cube->diff; float dt = cube->dt; float *Vx = cube->Vx; float *Vy = cube->Vy; float *Vx0 = cube->Vx0; float *Vy0 = cube->Vy0; float *s = cube->s; float *density = cube->density; diffuse(1, Vx0, Vx, vise, dt); diffuse(2, Vy0, Vy, vise, dt); projeet(Vx0, Vy0, Vx, Vy); advect(1, Vx, Vx0, Vx0, Vy0, dt); advect(2, Vy, Vy0, Vx0, Vy0, dt); project(Vx, Vy, Vx0, Vy0); diffuse(0, s, density, diff, dt); advect(0, density, s, Vx, Vy, dt);

}

Рендеринг. Для визуализации кадра симуляции на экран монитора необходимо вывести массив плотностей density[], но не в виде чисел, а в виде символов. Для решения этого вопроса был создан промежуточный массив screen[], в котором каждое численное значение плотности заменяется одним из одиннадцати символов массива gradient[] (.:;—+*!#$@), которые и формируют картинку на экране монитора.

screen[IX(i,j)] = gradient[index]; for(j = 0; j < N-1; j++) for(i = 0; i < N; i++){ if(fluid->density[IX(i,j)] > 0) //Сделаем затухание для того, чтобы

fluid->density[IX(i,j)] -= decay; //жидкость затухала со временем index = fluid->density[IX(i,j)];

if(index >= 11) //Защита от выхода за границы массива

index = 11;

}

Чтобы без задержек вывести все символы массива screen[] используем функцию printf из библиотеки <stdio .h>. Для вывода одного кадра добавляем в конец массива screen[] символ конца строки «\0», и выводим строку с помощью функции render() : void render(void){ screen[IX(N,N)] = '\0'; printf("%s",screen);

}

При таком подходе текст переносится на следующую строку автоматически.

Система вывода описанная выше, работает только в командной строке операционной системы Windows 10. На ранних версиях ОС командная строка обновляется медленнее и будут видны ее мерцания на мониторе. Размер окна командной строки должен быть N строк и N столбцов. В противном случае вывод будет работать некорректно.

Ниже приведен пример настроек командной строки (рис.1) и расчеты симуляции истечения жидкости при разных положениях точечных источников и их количестве (рис.2).

Рисунок 1 - Настройки командной строки

В данных примерах ширина буфера экрана, а также ширина и высота экрана равны 70, так как заданная в исходных данных константа N равна 70 (см. рис.1).

Выводы. Симуляция жидкости - это интересный, увлекательный, затягивающий, но не всегда простой процесс. Фрагменты программы на языке Си представленные в этой статье, могут быть легко переписаны читателем на любой другой язык программирования. Ведь цель данной статьи - показать, как работает жидкость в реальной жизни. Составленная нами программа может и неточно, но удивительно похоже повторяет поведение жидкости и газов, которые мы видим в реальной жизни. Список использованной литературы:

1. Mike Ash. Fluid Simulation for Dummies. URL: https://www.mikeash.com/pyblog/fluid-simulation-for-dummies.html

2. Jos Stam. Real-Time Fluid Dynamics for Games. URL: https://www.dgp.toronto.edu/public_user/ stam/reality/Research/pdf/GDC03.pdf

© Донсков Н.В., 2021

УДК 331.452

Коноваленко Н.С.

бакалавр 4 курса, СПбГАСУ г. Санкт-Петербург, РФ Научный руководитель: Горбунова О.В.

канд. биол. наук, доцент, СПбГАСУ г. Санкт-Петербург, РФ

ПРИМЕНЕНИЕ СИСТЕМ ОГРАНИЧЕНИЯ НЕСАНКЦИОНИРОВАННОГО ДОСТУПА НА СТРОИТЕЛЬНЫХ ПЛОЩАДКАХ В ЦЕЛЯХ ОБЕСПЕЧЕНИЯ БЕЗОПАСНОСТИ

И СНИЖЕНИЯ ТРАВМАТИЗМА

Аннотация

В статье анализируются параметры систем предотвращающих несанкционированный доступ на территории строительных площадок и возможность их применения с целью предотвращения несчастных случаев. Так же рассматривается возможность использования данных систем для зонирования территории по видам доступа и контроля за перемещением персонала в режиме реального времени. Предлагаемая к применению схема системы контроля доступа, на основе технологии UWB, позволит снизить вероятность производственных инцидентов и несчастных случаев, что является актуальным. В результате анализа проблемы, пришли к выводу, что современные технологии контроля позиционирования обладают широким спектром возможностей и могут эффективно применяться в строительстве.

Ключевые слова

Системы ограничения несанкционированного доступа; системы позиционирования;

предупреждение несчастных случаев.

Konovalenko N.S.

Bachelor fourth-year, SPbGASU Saint-Petersburg, Russian Federation Scientific adviser: Gorbunova O.V.

PhD in Biological sciences, Associate Professor, SPbGASU Saint-Petersburg, Russian Federation

i Надоели баннеры? Вы всегда можете отключить рекламу.