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.

К вопросу о выборе значения константы Смагоринского

Модель Смагоринского (Smagorinsky model) является одно из наиболее популярной подсеточной моделью для LES. В этой модели константа Cs (константа Смагоринского), входящая в уравнение для подсеточной турбулентной вязкости, определяется заранее.

constant

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

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

Кроме того, для неизотермических течений значение константы Смагоринского обычно меньше, чем для изотермических течений.

Такую калибровку обычно проводят на задаче о затухании однородной и изотропной турбулентности. Для неё существуют теоретические оценки закона затухания турбулентных пульсаций со временем (см., например, работу https://mipt.ru/upload/medialibrary/b76/105-113.pdf).

DITx

В первом приближении можно рекомендовать использовать следующие значения константы Cs*:

table

*Акира Ёсидзава (A. Yoshizawa). Hydrodynamic and Magnetohydrodynamic Turbulent Flows: Modelling and Statistical Theory. Kluwer Academic Pub, 2011.

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

kolmogorov

Здесь Сk — постоянная Колмогорова (Сk = 1,4-2,2).

Модель Смагоринского позволяет учесть взаимодействие молекулярного и молярного обмена вблизи стенки в вязком подслое и в переходной области течения.  Для этого используются т. н. демпфирующие функций, которые позволяют рассчитать изменение коэффициента турбулентного обмена или длины пути смешения поперек потока около стенки. В ANSYS CFX доступно две демпфирующие функции: Ван Дриеста (Van Driest, 1956) и функция Пиомелли (Piomelli, 1987).

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

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

Ученые из Мэдисона используют ANSYS Fluent для моделирования теплообмена черепах, но не едят черепаховый суп и ничего не знают про парадокс Зенона

Кинематика движения черепахи, смоделированная в ANSYS Fluent (видео с низким разрешением).

Кинематика движения черепахи, смоделированная в ANSYS Fluent (видео с низким разрешением).

Ученые из Висконсинского университета в Мэдисоне занимаются проблемой прогнозирования ареала обитания кожистых черепах в условиях глобальных изменений климата и загрязнения окружающей среды. Для точного прогноза ученым важно понимать принципиальные особенности теплообмена (а это два процесса – теплообразование и теплоотдача) плавающих морских черепах.

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

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

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

Читать далее

Тепловой анализ печатных плат в ANSYS Icepak

­­­

ny-sq

В преддверии  новогодних каникул «электронная» группа компании КАДФЕМ в лице Ксении М. решила преподнести вам небольшой подарок.

Сегодня мы расскажем вам о преимуществах ANSYS Icepak в сравнении с традиционными CFD-пакетами в расчетах температурного состояния печатных плат.

К сожалению, многие пользователи недооценивают возможности этого пакета в плане препроцессинга и решения подобного класса задач. Поэтому мы всегда рады  предоставить вам любую дополнительную информацию по работе с ANSYS Icepak.

Еще раз выражаем благодарность Ксении за предоставленный материал и передаем ей слово.

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

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

В ANSYS Icepak есть несколько удобных инструментов, которые позволяют без дополнительных усилий решить эту проблему. Печатная плата моделируется как твердое тело с ортотропной теплопроводностью. Т. е. теплопроводность печатной платы разная в двух взаимно перпендикулярных  направлениях — kplane и knormal .

Board

IconВстроенный объект PCB (Printed circuit board)  обладает большим количеством настраиваемых параметров. Например, стандартные настройки для всех объектов Icepak — это геометрия объекта и положение в модели, а так же специальные настройки — тип платы. После выбора типа платы и ввода требуемых данных Icepak в автоматическом режиме рассчитает теплопроводность печатной платы, и модель будет полностью готова к расчету.

Читать далее

Ледниковый период на CFD-blog.ru: изучаем вместе ANSYS Icepak

belka-icepakПо многочисленным просьбам наших читателей портал CFD-blog.ru и ГИДРОГАЗОДИНАМИКА.РФ объявляют неделю ANSYS Icepak, которая продлится с 18 до 25 сентября 2014 г.

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

Немного о том, что такое Icepak. Это тоже самое, что и ANSYS Fluent, только немного с урезанными возможностями и в другом графическом интерфейсе (GUI).

Если вы занимаетесь расчетами температурного состояния электронных узлов, или проектируете системы вентиляции/кондиционирования центров обработки данных (ЦОДов), то это программное решение создано именно для вас.

Следите за нашими новостями и учитесь вместе с нами!

Из декартовой системы координат в цилиндрическую

ConductivityКак в CFD-Post преобразовать параметры ортотропного материала, например, теплопроводность, для расчетной модели, заданной в декартовой системе координат (СК) Х-Y-Z, в цилиндрическую систему координат R-Theta-Z?

Для этого необходимо создать несколько дополнительных CEL-выражений в постпроцессоре ANSYS CFD-Post следующего вида:

1. K_rr = cos^2(Theta) * K_xx + 2 * cos(Theta) * sin(Theta) * K_xy + sin^2(Theta) * K_yy
2. K_ThetaTheta = sin^2(Theta) * K_xx — 2 * cos(Theta) * sin(Theta) * K_xy + cos^2(Theta) * K_yy
3. K_aa = K_zz
4. K_rTheta = -cos(Theta)*sin(Theta) * K_xx + (cos^2(Theta) — sin^2(Theta)) * K_xy + cos(Theta) * sin(Theta) * K_yy
5. K_Thetaa = -sin(Theta) * K_xz + cos(Theta) * K_yz
6. K_ar = cos(Theta) * K_xz + sin(Theta) * K_yz

Предполагается, что ось  Z, используемая при преобразовании СК, совпадает с осью z глобальной СК.

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

Как в ANSYS Fluent задать нестационарное температурное поле на входе или стенке?

СтопВсе мы с вами знаем, что бумага возгорается при температуре 450 градусов Цельсия, а не Фаренгейта, как ошибочно полагал великий Рей Брэдбери.

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

Но мы не знаем или хотим узнать, как в ANSYS Fluent задать нестационарное температурное поле на входе или стенке.

Ответ будет таким: используйте для этого «профильное» граничное условие (ГУ), определяемое через текстовый файл.

Согласен, что термин «профильное» ГУ звучит достаточно коряво. На практике – это просто табличное задание ГУ. Но так как оно задается в Fluent через панель Profile, то мы и именуем его таким образом.

Давайте детально рассмотрим структуру текстового файла temp_profile.dat.

temp_profile 2 3 0

time temperature

1 300

2 310

3 320

В первой строчке этого файла 2 — количество переменных (время и температура); 3 — количество точек «профиля» (три значения температуры в разные моменты времени); 0 — указывает на отсутствие цикла, т. е. после t = 3 сек,  значение температуры останется равным 320 градусов Кельвина (мы работаем в системе СИ).

На имя файла не обращайте внимания, оно носит произвольный характер.

Теперь надо прочесть этот файл, напрямую через GUI он не доступен. Для этого используйте команду TUI вида: /file/read-transient-table.

После этого таблица с данными станет доступна через хорошо знакомую вам панель Boundary Profiles.

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