Проблема с большими радиальными зазорами в ANSYS TurboGrid

Сегодня мы решим с вами небольшую проблему, связанную с некорректной работой сеточного препроцессора ANSYS TurboGrid при разбиении геометрии лопаточных машин центробежного типа при больших радиальных зазорах. Пример подобной турбины показан на рисунке ниже. Здесь показана проточная часть турбины центростремительного типа с радиальным зазором высотой ~ 10% от высоты лопаток.

1

Попробуем загрузить созданную в BladeGen геометрию в TurboGrid. Как мы и предполагали, препроцессор выдал ошибку. Что надо сделать, чтобы исправить эту ошибку?

2

Перейдите в раздел Machine Data и с помощью правой кнопки мыши откройте выпадающее меню. Далее выберите опцию Edit in Command Editor.

3В редакторе команд отредактируйте параметр Surface Extension Factor. Вместо значения 0.1 укажите 0.5.

4

После этого TurboGrid нормально воспроизведет созданную ранее геометрию, а вы сможете сгенерировать затем качественную структурированную сетку.

На этом все. Удачного Вам моделирования!

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

Инженеры АО «СимуЛабс» победили в конкурсе ANSYS HOF 2107

sailboat2016_halloffame

Поздравляем коллектив АО «СимуЛабс» с очередной большой победой!

В этом году наши коллеги Д.П. Хитрых и И.В. Погорнев в 5 раз стали победителями международного конкурса на лучший
инженерный проект, выполненный в программном комплексе ANSYS — ANSYS Hall of Fame Competition.

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

Данный проект носит исследовательский характер и не направлен на коммерческое использование.

Коллектив АО «СимуЛабс»,
30 декабря 2016 г., Москва.

Как «смоделировать» ветрогенератор в ANSYS CFD

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

Поэтому на следующей неделе мы рассмотрим с вами наиболее интересные варианты конструкций ветряных турбин. И научимся моделировать в ANSYS CFD аэродинамику классического осевого «ветряка».

Для начала немного истории. На фотографиях снизу изображен один из первых отечественных ветрогенераторов времен СCCP. Он был спроектирован в ЦАГИ и введен в эксплуатацию в 1931 году. Мощность станции — 100 кВт (при скорости ветра 10 м/с); место установки — Балаклава, Крым. В 1943 году ветряная станция была разрушена. Сейчас на высоте Горной можно найти следы фундамента опор этой станции.
turbina

По современным меркам 100 кВт — это немного, но в начале 30-х годов прошлого века эта цифра заслуживала уважения. Например, немцы и датчане в это же время строили ветроэлектростанции меньшей мощности и с меньшим диаметром лопастей. Примечательно, что мачта Балаклавской станции была построена по проекту Владимира Шухова (автора знаменитых строительных гиперболоидов). А сама станция питала энергией Севастопольский трамвайчик.

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

windturbine

А это турбина, которую мы с вами рассчитаем в ANSYS CFX или ANSYS Fluent. Размер расчетной области здесь показан условно.

До скорой встречи.

С уважением, Денис Хитрых (АО «СимуЛабс»).

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.

Отвечаем на письма читателей cfd-blog.ru. Ноябрь 2015

Сегодня я отвечу на два вопроса, которые поступили в мою личную почту. Я не буду подробно описывать постановку задач, но рассмотрю ключевые моменты, которые помогут вам затем самостоятельно сформулировать вашу конкретную задачу.

Первый вопрос относился к моделированию гидродинамики пара (влажного газа, парогазовой смеси и пр.) в ANSYS CFX. Рассмотрим эту задачу на примере моделирования течения  в проточной части паровой турбины. Геометрия расчетной области (сетка) показана на рисунке ниже. Моделируем сектор проточной части с условиями периодичности на соответствующих поверхностях.

rotor

Основной вопрос заключался в определении свойств рабочего тела (парогазовой смеси) в CFX. Что надо сделать? Для начала создайте два отдельных материала: условно «жидкость» (вода) и «газ» (водяной пар). Настройки закладки Material показаны на двух следующих рисунках. На первом — для жидкости, на втором — для газа, соответственно.

liquid

gas

Как вы можете заметить, я использовал систему уравнений IAPWS-IF97 (IAPWS — IAPWS Industrial Formulation 1997 for the Thermodynamic Properties of Water and Steam) для вычисления термодинамических свойств воды и водяного пар. Диапазоны температур и давлений, в которых можно использовать данные уравнения:

equБолее подробно об этом «стандарте» вы можете прочитать в этой статье

.

На этом рисунке я показал, как генерировать таблица на основе IAPWS-IF97 для «жидкости» (воды). Аналогично вы можете определить свойства водяного пара.

IAPWS

Теперь самый ключевой момент в этой задаче: определяем бинарную смесь в CFX, состоящую из газа-носителя (equilibrium constraint) и одного анализируемого компонента (equilibrium fraction).

binary

На этом всё. Для подтверждения достоверности указанного материала, привожу фрагменты результатов моделирования в нестационарной постановке роторной ступени в ANSYS CFX (версия 16.0).

results

Завтра мы вместе с вами более подробно рассмотрим второй вопрос, связанный с использованием Rigid Body Solver-a в ANSYS CFX. Запустим совместными усилиями в полет упрощенную геометрию снаряда (подкалиберного, бронебойного и т. п.).

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

Проблемы при решении задач в осесимметричной постановке в Fluent

nonconvИногда при решении задачи в ANSYS Fluent  в двумерной осесимметричной постановке AMG-решатель может отказаться работать на первой же итерации и вылететь с ошибкой типа «Error: Divergence detected in AMG solver: x-momentum…».

Возможно несколько причин такого поведения решателя.

Первая причина связана с сеткой. Вероятно, что некоторые узлы вашей сетки лежат не на оси симметрии. Выполните команду Mesh -> Check. Если наше предположение подтвердится, то препроцессор выдаст соответствующее сообщение: «WARNING: Invalid axisymmetric mesh…».

Кроме того, при решении задач в осесимметричной постановке, рекомендуется ориентировать ось симметрии относительно оси х, а все координаты Y (радиальное направление) обязательно должны быть положительными, в противном случае AMG-решатель не будет «работать». Если отдельные узлы вашей сетки имеют отрицательные Y-координаты, для исправления этой ошибки вам достаточно переместить все узлы сетки вдоль оси y на соответствующее расстояние, так, чтобы все Y-координаты узлов вашей сетки стали положительными. Используйте для этого команду Mesh -> Translate.

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

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

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

Директор R&D Центра SimuLabs4D.

Редактируем RULES в CFX для задания специфического ГУ при расчете течения в турбомашине

Аэроупругий расчет лопатки высоконагруженного компрессора (изображение с сайта http://www.exploreenergy.eu).

Аэроупругий расчет лопатки высоконагруженного компрессора (изображение с сайта http://www.exploreenergy.eu).

Можно ли в CFX задать зависимость полной температуры в неподвижной системе координат («Total Temperature in Stn Frame») от полной температуры во вращающейся системе координат («Total Temperature in Rel Frame»), и использовать это выражение для определения граничного условия на входе во вращающийся домен?

По-умолчанию такая возможность отсутствует в препроцессоре ANSYS CFX. Но вы можете отредактировать RULES-файл, или запустить CFX через командную строчку, указав ссылку на CCL-файл с соответствующим содержанием:

RULES:

  PARAMETER: Stationary Frame Total Temperature

  Dependency List = XYZT,rNoDim,aitern,citern,atstep, ctstep,\

  Ttot, Ttotstn,Ttotrel,acplgstep,cstagger

  END

END

Команда для запуска решателя CFX с ключом CCL выглядит так:

cfx5solve -def DEFFILE -ccl CCLFILE,

здесь CCLFILE — это обычный текстовый файл с командами и опциями, которые мы описали выше.