Jump to content

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


Recommended Posts

KSVSVK

В задаче спрашивается: "За какое время коническое притупленное тело, входящее в атмосферу со скоростью более 7 км/с и углом атаки 90 градусов, стабилизируется на нулевом угле атаки?

 

Для решения этой задачи передаем во Fluent расчетную сетку следующего вида:

image.png

В районе границы тела строим призматические слои (Inflation):

image.png

"Нутром чую", что должен в итоге получить гармонические затухающие колебания угла атаки с выходом в 0.

Осталось соответствующим образом настроить динамическую сетку, и во тут...

image.png

Итак, итоговый вопрос:

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

  • Нравится 1
Link to post
Share on other sites


UnPinned posts
green_fly

Если плясать от задачи, то в качестве первого приближения можно продуть тело под разными углами в стационарной постановке и записать результаты в таблицу. Затем решить уравнение Эйлера, например, в Маткаде, подставив туда насчитанную ранее таблицу. Такой подход уже упоминался на форуме.

Если плясать от динамических сеток, то на Ютубе у индусов есть видеоролики.

Link to post
Share on other sites
Fedor
Цитата
Чтобы призматический слой не деформировался и двигался как единое целое вместе с телом, вам нужно использовать сочетание методов Rigid Body и Diffusion-Based Smoothing. Это классический и наиболее надежный подход во Fluent для сохранения погранслоя при больших углах поворота.
Ниже приведена пошаговая инструкция по настройке.
Шаг 1: Активация моделей (Dynamic Mesh)
  1. Перейдите в Setup \(\rightarrow \) Models \(\rightarrow \) Dynamic Mesh.
  2. Включите галочку Dynamic Mesh.
  3. В панели Mesh Methods обязательно активируйте два метода:
    • Smoothing (отвечает за деформацию внешней сетки).
    • Remeshing (нужен для перестройки ячеек вне погранслоя при больших углах).
Шаг 2: Настройка метода Smoothing (Защита призм)
Стандартный метод Spring (пружины) для этой задачи не подходит — он сомнет призмы.
  1. Вкладка Smoothing \(\rightarrow \) измените метод на Diffusion.
  2. Установите параметр Diffusion Parameter в диапазоне от 1.5 до 2.0.
    • Почему это важно: Значение 2 заставляет сетку вблизи движущейся стенки деформироваться минимально. Вся деформация «выталкивается» далеко вглубь объема, где ячейки крупные, а призмы остаются жесткими.
Шаг 3: Объявление зон (Dynamic Mesh Zones)
Вам нужно явно указать Fluent, что само тело и окружающий его погранслой — это единое твердое тело.
  1. Нажмите Create/Edit... в секции Dynamic Mesh Zones.
  2. Для геометрии тела (Wall):
    • Выберите имя зоны вашей стенки.
    • Type: Rigid Body.
    • Во вкладке Motion Attributes выберите встроенный UDF профиль движения или активируйте Six DOF (если движение рассчитывается от аэродинамических сил).
  3. Для призматического слоя (Cell Zone):
    • Если погранслой выделен в отдельный объемный регион (Cell Zone) при сеточном генерации: создайте для этой зоны тип Rigid Body и свяжите ее с тем же законом движения (или тем же Six DOF), что и стенку. Тогда сетка внутри этого объема вообще не будет рассчитываться на деформацию — она будет просто вращаться.
Шаг 4: Настройка Remeshing (Перестройка внешней сетки)
Поскольку тело разворачивается на 90 градусов, внешняя тетраэдрическая сетка неизбежно деформируется выше критического предела.
  1. Во вкладке Remeshing выберите методы Sizing Function и Local Cell.
  2. Задайте параметры Parameters: установите максимальную косину (Maximum Skewness) в районе 0.7 – 0.8.
  3. Как только ячейки во внешнем объеме достигнут этого предела, Fluent перестроит их, не трогая защищенный диффузией погранслой.
 

 

Поспрашивайте ИИ ...  

Цитата
Физика процесса и порядок времени
При входе под углом 90° (боком) на скорости более 7 км/с возникает колоссальный восстанавливающий аэродинамический момент. Тело начнет совершать затухающие колебания вокруг стабильного положения (0° или 180° в зависимости от центровки).
Порядок времени до полной стабилизации:
  • Доли секунды: В плотных слоях атмосферы (ниже 40–50 км).
  • Единицы секунд: В средних слоях (50–80 км).
  • Десятки секунд: В разреженной термосфере (выше 90 км).
  • Стабилизация невозможна: В космосе из-за отсутствия среды.

 

Link to post
Share on other sites
KSVSVK

ИИ такого насоветует...:k0503:

Сейчас у меня единственная расчетная зона -- окружающий тело цилиндр. Rigid Body задан для поверхности, окружающей тело.

Я пытался конструктивно создавать тонкую 3D стенку, окружающую тело. Этот объем включал призматический погранслой и пару рядов окружающих этот слой тетраэдрических элементов (на уровне Meshing создать Inflation в виде отдельного тела невозможно. Это "окружающее" пространство объявлял как Rigid Body. Несмотря на то, что создан контакт по наружной поверхности этого слоя, Fluent воспринимает эту поверхность исключительно как Wall, со всеми вытекающими :wallbash:

В расчет в качестве UDF включаю мат модель движения в атмосфереOuter.c

Link to post
Share on other sites
Fedor

Лучше что то чем ничего . 

Цитата
Ваша проблема понятна и очень типична: Fluent превращает интерфейс между двумя зонами в твердую стенку (Wall), из-за чего поток просто не может течь сквозь нее. Это происходит потому, что при импорте сетки с несшитыми узлами Fluent автоматически назначает граничным плоскостям тип Wall.
Чтобы реализовать вашу отличную идею с жестким «коконом» из призм, который вращается как Rigid Body, вам нужно правильно перенастроить тип интерфейса.
Решение проблемы с "Wall" (Интерфейс)
Вам нужно превратить эти изолирующие стенки в проницаемые интерфейсы. Процедура зависит от того, как именно была построена сетка.
Вариант А: Конформная сетка (общие узлы на границе)
Если в сеточном генераторе (например, Ansys Meshing через Share Topology или Fluent Meshing) сетка была единой, но разделенной на два объема:
  1. Перейдите в ветку Setting Up Domain \(\rightarrow \) Zones \(\rightarrow \) Boundary.
  2. Найдите созданные зоны типа Wall, которые разделяют ваш «кокон» и внешний цилиндр.
  3. Нажмите на них правой кнопкой мыши и измените Type на Interior.
  4. Результат: Граница исчезнет для потока, но объемы останутся раздельными, и вы сможете задать для внутреннего объема Rigid Body.
Вариант Б: Неконформная сетка (узлы не совпадают)
Если это были два независимых тела с контактом (пара поверхностей контакта):
  1. Выделите обе поверхности (одну со стороны кокона, другую со стороны цилиндра).
  2. Измените их тип (Type) с Wall на Interface.
  3. Перейдите в раздел Domain \(\rightarrow \) Mesh Interfaces \(\rightarrow \) Create/Edit.
  4. Создайте новый интерфейс, выбрав эти две поверхности. Во Fluent старых версий выберите тип Fluid-Fluid, в новых версиях (после 2020) по умолчанию создается сквозной интерфейс.
  5. Результат: Поток пойдет сквозь границу, а сетки смогут скользить друг относительно друга.

Альтернативный «чистый» способ в Ansys Meshing (без создания геометрии кокона)
Если вы не хотите мучиться с интерфейсами, в Ansys Meshing можно сделать погранслой отдельным телом программно, используя скрытую, но очень полезную функцию Named Selection на элементы:
  1. Создайте стандартную сетку с Inflation (погранслоем) вокруг вашего тела.
  2. Кликните правой кнопкой мыши в дереве на Mesh \(\rightarrow \) Insert \(\rightarrow \) Inflation. Настройте её.
  3. Далее выберите инструмент выделения элементов (ячеек) и выделите только слои вашей призматической сетки.
  4. Нажмите правую кнопку мыши \(\rightarrow \) Create Named Selection и назовите её, например, pogran_слой_cells.
  5. При экспорте во Fluent эта группа элементов определится как отдельная Cell Zone, хотя геометрически это было одно тело!
  6. Во Fluent эта зона будет иметь конформную границу (Interior) с остальным цилиндром. Вам останется просто зайти в Dynamic Mesh Zones и назначить этой зоне pogran_слой_cells тип Rigid Body.
 

 

Link to post
Share on other sites
KSVSVK
Posted (edited)

На уровне Meshing получается такая картина:

image.png

Но, перейдя во Fluent, никакого отдельного объема я не вижу:

image.png

Мало того, при попытке повторно загрузить Meshing получаю:

image.png

Edited by KSVSVK
Link to post
Share on other sites
KSVSVK

На уровне Meshing получается такая картина:

image.png

Но, перейдя во Fluent, никакого отдельного объема я не вижу:

image.png

Ошибку, блокирующую перезапуск Meshing, удалось устранить, но Fluent не видит зону призматических ячеек.

Link to post
Share on other sites
a_schelyaev

А почему нельзя качать через Ротор-статор, меняя знак у частоты вращения?

С уважением

Link to post
Share on other sites
Jesse
24.06.2026 в 08:42, green_fly сказал:

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

FMG-initialization? А зачем в маткаде решать? Флюент сам может.

6 часов назад, KSVSVK сказал:

ало того, при попытке повторно загрузить Meshing получаю:

частый глюк в Энсис....

Попробуйте вот это

1.

1.png

или это:

2.

2.png

Начните со второго варианта..

 

Link to post
Share on other sites
green_fly
24.06.2026 в 10:42, green_fly сказал:

в качестве первого приближения

 

Продул конус - 

apollo_cfd.png

 

Затем решил уравнения движения - 

apollo_res.png

 

 

Link to post
Share on other sites
KSVSVK

Решил отказаться от отдельной "ближней зоны". Пытаюсь написать UDF код, "вручную" перемещающий узлы призматической сетки. Основной "затык" -- как выделить узлы, относящиеся к призматическим ячейкам? Мой вариант скрипта:
 

DEFINE_GRID_MOTION(grid, d, dt, time, dtime)
{	cell_t c;
	Node *node;
	Thread *t;
	int n;
	double old[2], cur[2], disp[3];
	thread_loop_c(t, d)
	{	if (THREAD_ID(t) == 3)
		begin_c_loop(c, t)
		{	if (C_TYPE(c, t) == CT_HEX)
			{	c_node_loop(c, t, n)
				{	node = C_NODE(c, t, n);
					old[0] = NODE_X(node);
					old[1] = NODE_Y(node);
					cur[0] = NODE_X(node)* cos(Omega * dtime) - NODE_Y(node)* sin(Omega * dtime);
					cur[1] = NODE_X(node)* sin(Omega * dtime)+ NODE_Y(node)* cos(Omega * dtime);
					disp[0] = cur[0] - old[0];
					disp[1] = cur[1] - old[1];
					disp[2] = 0;
					NV_V(NODE_COORD(node), =, disp);
				}
			}
		}
		end_c_loop(c, t)
	}
}

Но константы CT_HEX Fluent не знает. Что написать вместо нее?

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...