Как декантировать вино. ANSYS CFD на службе у сомелье.

007Сегодня после долгого перерыва мы снова с вами погрузимся в мир многофазных течений. И попробуем смоделировать одну из канонических задач, связанных с капиллярностью. Но сначала я познакомлю вас с интересным опытом наших японских коллег, которые с помощью решателя ANSYS Fluent попытались смоделировать процесс аэрации вина в бокалах разной формы.

Для тех, кто ведет трезвый образ жизни, напоминаю, что декантирование (декантация) — это процесс отделения вина от осадка и насыщение его кислородом. При этом сомелье совершает руками серию магических движений. А сама процедура может занимать 10-15 минут и более. Чаще всего декантируют красные вина и реже белые. Отметим, что споры о полезности и объективности результатов этого процесса не утихают до сих пор. Поэтому работа японских инженеров заслуживает внимания. Они провели исследование бокалов различной формы на предмет интенсификации (или сокращения) процесса аэрации вина при контакте с кислородом.

2016-11-02_10-13-15

Для этого было решено использовать газодинамический пакет ANSYS Fluent самой последней версии на тот момент (17.0). Ниже показана анимация, иллюстрирующая результаты их фундаментального труда.

bokaly

В 17-м релизе ANSYS существенно упростилась процедура постановки 6DOF-задачи. Раньше для задания движения тела с 6-ю степенями свободы  необходимо было создавать и компилировать специальные UDF-макросы.  Но в Fluent 17.0 появилась специальная панель, которая сделала работу инженера-исследователя намного легче. При этом сохранилась возможность определять закон движения тела как на основе собственных пользовательских функций (UDF), так и с использованием возможностей System Coupling.

6dof

По результатам моделирования в номинации «Лучший аэрационный бокал-2016» победил бокал на длинной утонченной ножке.

rezultatyЕсли вы в совершенстве владеете японским языком, то более подробно про это исследование вы можете почитать по этой ссылке http://news.mynavi.jp/kikaku/2015/12/16/004/. А к капиллярам мы вернемся уже в следующем году.

С уважением, Денис П. Хитрых,
Директор АО «СимуЛабс».
2016-11-21_16-58-13

1 апреля — День ANSYS Fluent на cfd-blog.ru

ВелосипедСегодня мы целый день посвятим расчетному CFD-пакетуANSYS Fluent. И рассмотрим с вами около двух десятков вопросов, которые поступили в адрес службы технической поддержки компаний ANSYS и КАДФЕМ.

А так же поделимся нашим личным опытом работы с этим программным комплексом. Большинство вопросов являются универсальными и не привязаны к конкретной версии ANSYS Fluent. Учитывая объем представленной информации, допускаю, что в некоторых ответах могут содержаться небольшие неточности. О всех замеченных ошибках вы можете писать мне на форму обратной связи.

fluentСамый первый вопрос связан с инсталляцией ANSYS Fluent версии 17.0. На моей рабочей станции установлена операционная система Windows 7 и при инсталляции 17-й версии ANSYS у меня (и, вероятно, у многих других пользователей) возникли проблемы при работе c GUI Fluent. Решение данной проблемы заключалось в установке пакета обновлений для Window 7 — KB2533623, который предназначен для повышения безопасности работы со внешними библиотеками. Скачать этот пакет можно с официального сайта Microsoft по следующей ссылке https://support.microsoft.com/ru-ru/kb/2533623.

fluentСледующий вопрос связан с оценкой сходимости нестационарной задачи в ANSYS Fluent на каждом временном шаге по заданному критерию сходимости (например, по изменению величины какого-либо интегрального параметра). Для этого можно использовать команду stptmstp (=SToP TiMe STeP) языка Scheme. Более детальное описание этой команды можно получить набрав в консоли (Console) следующую последовательность символов: (stptmstp-docu-alt).

Все значения переменных, которые используются в команде stptmstp по умолчанию, можно отредактировать. Например, набрав команду вида (set! stptmstp-n 7), вы измените количество итераций, за которые собирается статистика по заданной переменной, с 3-х (это значение по умолчанию) до 7-и.

Или, например, с помощью команды set! stptmstp-maxrelchng вы можете изменить значение  относительной разницы между собственными значениями заданной переменной, вычисленными в последовательных итерациях. По умолчанию, ее величина соответствует 1.e-03. Таким образом, для того, чтобы изменить значение этой переменной с 1.e-03 на 1.e-5, вам следует набрать команду set! stptmstp-maxrelchng 1.e-05.

Далее мы приведем небольшой пример использования команды stptmstp в интерфейсе Fluent. Откройте последовательно закладки Solution → Calculation Activitie s→ Execute commands. Сначала введите первую команду command-1: (stptmstp-resetvalues). И выберите опцию Time Step. Эта команда «сбросит» анализ предыдущего шага по времени. После этого введите команду  (stptmstp-chckcnvrg ‘ ( «/report/surface-integrals/integral wall () heat-flux n»)) и выберите опцию Iteration. С помощью этой команды будет выполнен анализ последних трех итераций (3 итерации — это значение по умолчанию в ANSYS Fluent, как мы уже говорили выше), и будет выполнена проверка насколько изменился тепловой поток на заданной поверхности за эти три последних итерации. При этом относительное изменение ограничено значением 1e-03 (по умолчанию).

execute

fluentТретий вопрос регулярно обсуждается на различных CFD-форумах, его также часто адресуют в нашу службу технической поддержки. Но сегодня, чтобы дать на него полноценный ответ, мы воспользуемся популярным ресурсом Eureka. Задача формулируется следующим образом: как с помощью UDF определить табулированные свойства пользовательского материала. Соответствующий шаблон UDF приведен ниже (в раскрывающемся списке). Вы можете легко доработать его для решения вашей конкретной задачи.

Код UDF

#include "udf.h"

int NPts_mu = 10; /* number of entries in viscosity table */

/* Locate the place in the interpolation vector using bisection algorithm*/
int locate(float xx[], int n, float x)
{
int j = 0;
int jm = 0;
int jl = 0;
int ju = n+1;
int ascnd = 0;

ascnd = (xx[n] >= xx[1]);
while (ju-jl > 1)
{
jm = (ju+jl) >> 1;
if (x >= xx[jm] == ascnd)
jl = jm;
else
ju = jm;
}

if (x == xx[1])
j = 1;
else if (x == xx[n])
j = n-1;
else
j = jl;

return j;
}

float *temp_vec_mu,*visc_vec;
#define FAST_LOOKUP TRUE /* use bisection algorithm for interpolation */
#define TABLE_MESSAGES TRUE
#define DISPLAY_TABLES TRUE

/* Obtaine mu given temperature */
float get_mu_from_T(float xdata)
{
int i = 0;
int j = 0;
float xL,xU,ydata;

#if FAST_LOOKUP
j = locate(temp_vec_mu,NPts_mu,xdata);
xL = temp_vec_mu[j];
xU = temp_vec_mu[j+1];
ydata = visc_vec[j] + (xdata-xL)/(xU-xL)*( visc_vec[j+1] - visc_vec[j] );
#else
for ( i=1; i=xL)&&(xdata<=xU) ) { ydata = visc_vec[i] + (xdata-xL)/(xU-xL)*( visc_vec[i+1] - visc_vec[i] ); break; } } #endif if ( xdata>temp_vec_mu[NPts_mu] )
{
#if TABLE_MESSAGES
Message("n temperature is above the bound of visc-array n");
#endif
ydata = visc_vec[NPts_mu];
}
if ( xdata<temp_vec_mu[1] )
{
#if TABLE_MESSAGES
Message("n temperature is below the bound of visc-array n");
#endif
ydata = visc_vec[1];
}

return ydata;
}

/* Read in the data file containing viscosity as a function of temperature */
DEFINE_ON_DEMAND(read_viscosity)
{
int i = 0;
float xdata,ydata;
FILE* fp;

fp = fopen("viscosity.dat","r");
if ( fp!=NULL )
{
#if !RP_NODE
Message(" n");
Message("Reading file viscosity.dat n");
Message(" n");
#endif
}
else
{
#if !RP_NODE
Message(" n");
Message("Error opening file n");
Message(" n");
#endif
}

temp_vec_mu = (float *) malloc(NPts_mu*sizeof(float));
visc_vec = (float *) malloc(NPts_mu*sizeof(float));

if ( (temp_vec_mu==NULL)||(visc_vec==NULL) )
{
#if !RP_NODE
Message("Memory allocation error n");
#endif
}

for ( i=1;i<=NPts_mu;i++ )
{
fscanf(fp,"%f %e n",&xdata,&ydata);
temp_vec_mu[i] = xdata;
visc_vec[i] = ydata;
#if DISPLAY_TABLES
#if !RP_NODE
Message("%.1f %e n",temp_vec_mu[i],visc_vec[i]);
#endif
}
#else
}
#if !RP_NODE
Message(" n");
#endif
#endif

fclose(fp);
}

/* Interpolate viscosity from look-up table and assign to cell value */
DEFINE_PROPERTY(viscosity,c,t)
{
float mu_lam;
float temp = C_T(c,t);

/* interpolate mu_lam */
mu_lam = get_mu_from_T(temp);

return mu_lam;
}


fluentЧетвертый вопрос будет касаться начальной инициализации задачи со свободной поверхностью в ANSYS Fluent. Самый простой вариант — определить свободную поверхность как плоскую поверхность. Но, что делать, если геометрия свободной поверхности имеет более сложную форму?

Есть несколько вариантов решения данной проблемы. Вы можете использовать специальный «генератор» волн, встроенный в Fluent — Open Channel Wave Model (волны в открытом канале). При инициализации границы свободной поверхности (Free Surface Level) вместо опции Flat укажите опцию Wavy (см. Open channel Init. Method).

wavy

Если вы проводите инициализацию с помощью TUI, то после выполнения команды solve → initialize → open-channel-auto-init, вам необходимо выбрать опцию wavy free surface initialization.

Для инициализации границы свободной поверхности вы также можете использовать Custom Field Functions. Это своеобразный аналог CEL-выражений пакета ANSYS CFX.

VOF

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

Более подробно о двух последних вариантах я расскажу в другой раз.

На сегодня всё. Поздравляю всех с праздником Всемирного Дурака, а в качестве подарка предлагаю вам полюбоваться на обновленный дизайн графического интерфейса ANSYS Fluent 17.0 (см. рис. ниже).

Измененный интерфейс ANSYS Fluent.

Измененный интерфейс ANSYS Fluent.

Традиционный интерфейс ANSYS Fluent.

Традиционный интерфейс ANSYS Fluent.

На следующей неделе мы продолжим отмечать 1 апреля вместе с ANSYS Fluent. Удачного Вам моделирования!

KhitrykhDP

 

С уважением, Денис Хитрых,
Директор SimuLabs4D.

Вера

ВЕРА

Нас завтра опять на колени поставят.
На клочья порвут и бетоном раздавят.
Мы будем лежать как тряпичные куклы.
А рядом горохом рассыпятся зубы.
Ребенок заплачет у мертвого тела.
И в эту минуту закончится вера.
Но годы пройдут и кровь загустеет.
И шрам на груди станет белее.
Я сяду в трамвай, прокачусь на подземке.
Нельзя просто так убить мою веру.

KhitrykhDP

 

Денис Хитрых, 10 ноября 2015, Москва.

Лимитчики в ANSYS CFX или pt maximum particle temperature

particleДовольно часто в нашу службу технической поддержки поступают вопросы, связанные с «лимитами» в ANSYS CFX. Сразу же отмечу, что эти вопросы никак не связаны с проблемой искусственного ограничения подвижности населения в СССР или с известными репликами «коренных» американцев в адрес мексиканских нелегалов типа  «… оur country is being overrun by these illegal aliens…».

Для наглядности вопроса я нарисовал простенький график, на котором изображен характерный выход температуры частицы на полку при использовании Лагранжевой модели ANSYS CFX (Particle Transport Solid).

В нашем случае лимит для температуры твердой частицы равняется 3000 К. Как обойти это ограничение?

Есть два пути решения этой проблемы: можно отредактировать файл RULES, а можно использовать эксперт-параметр, который называется ‘pt maximum particle temperature’.

В первой случае вам необходимо  найти в файле RULES строчки вида:

Particle_Temperature

И отредактировать значение, заданное по умолчанию (3000 K).

Во втором случае необходимо открыть закладку Expert Parameters в препроцессоре CFX-Pre и перейти в раздел Particle Tracking. В этом разделе находится параметр ‘pt maximum particle temperature’.

particle_1

В поле напротив Value вы должны записать ваше значение температуры.

Удачного Вам моделирования!

P.S. Вопрос был озвучен на нашей последней конференции ACUM-2014. На вопрос отвечал Большой Дэн. Он же является автором иллюстрации к этому посту и большим знатоком мексиканской кухни.

Если вы его попросите, то он с большим удовольствием приготовит для вас burrito, nachos и мн. мн. др.

CFD и пожарная безопасность под землей

fire_6Техногенная авария в московском метро – это достаточно рядовое событие, к которому нас уже приучили  и которое не вызывает у нас особых эмоций.

Я не хочу говорить  о черных датах московской подземки, о количестве пострадавших, причинах той или иной аварии, или о «золотом» контракте Артёма Лебедева. Это дело официальных властей и «желтой» прессы.

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

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

И еще, я уверен, что большую помощь в этой работе может оказать наша активная гражданская позиция. Если вы можете чем-то помочь метрополитену и своим гражданам – помогайте. Если не можете, то не мешайте тем, кто может и способен.

Со своей стороны хочу поделиться с вами опытом численного анализа в ANSYS CFX/ Fluent пожарной безопасности объектов подземного строительства и метрополитена.

Fire

fire_5

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

Если у вас есть желание научиться методике численной оценки в ANSYS CFD температурных режимов пожаров в помещениях различных зданий и сооружений, можете рассчитывать на нашу помощь.

Что и где почитать о «скелетных» или «редуцированных» механизмах реакций

reaction-logoВ январе 2014 года компания ANSYS, Inc. объявила о завершении процесса поглощения компании Reaction Design — разработчика специализированного ПО (CHEMKIN-PRO) для моделирования химически реагирующих потоков.

Компания Reaction Design занимается также разработкой детальных кинетических механизмов реакций и алгоритмов их редуцирования (упрощения) для использования в коммерческих пакетах вычислительной гидродинамики, в частности, ANSYS Fluent.

Об этом мы сегодня и поговорим.

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

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

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

В методах первого класса из детального механизма реакций исключаются несущественные в конкретных условиях вещества и реакции, получается т. н. «скелетный» (skeletal) механизм.

В методах второго класса генерируется т. н. «глобальный» механизм, состоящий из ограниченного количества брутто-реакций, скорости которых рассчитаны на основе элементарных реакций.

Ниже приводятся несколько источников, в которых дается более подробное описание как детальных кинетических механизмов, так и «скелетных» и «редуцированных».

Читать далее

Ошибка в Fluent при расчете коэффициента поглощения с использованием метода WSGG

Фото с сайта www. unews.utah.edu.

Фото с сайта www. unews.utah.edu.

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

Численное моделирование процесса лучистого теплообмена в Fluent или CFX является очень сложной и ресурсоемкой задачей. Это связано с тем, что в отличие от других процессов теплопереноса,  при которых обмен энергии происходит локально, при лучистом теплообмене каждая точка среды взаимодействует со всем пространством.

Существует большое количество различных математических методов и алгоритмов решения задач лучистого теплопереноса.  Их условно можно разделить на несколько групп: Pn приближения метода сферических гармоник; методы дискретного переноса и дискретных направлений; зональные методы и статистические методы Монте-Карло.

Для вычисления коэффициента поглощения газовой смеси  в газодинамических пакетах ANSYS используется несколько моделей: Gray (приближение «серого» газа),  Multiband (полосные модели) и WSGG (Weighted Sum of Gray Gases) – метод взвешенной суммы серых газов.

Читать далее