Здравствуйте! Задача состоит в следующем: смоделировать движение плавящего бура при прохождении через лёд под действием силы тяжести. Задаётся температура стенок бура выше температуры плавления окружающего льда, бур должен плавить лёд под собой и под действием силы тяжести опускаться вниз (со скоростью движения границы раздела фаз). Решаю с помощью Solidification and melting, используется решатель Six DOF. Лёд плавится, с этим все хорошо, но проблема в том, что, как я понимаю, Fluent считает что лёд это текучая среда, и под действием силы тяжести бур проходит сквозь него словно сквозь воду. Для чистоты эксперимента убрал ГУ с температурой на стенках бура, чтобы воды небыло вообще, и всё равно зонд движется. Помогите пожалуйста справиться с задачей средствами Fluent, если это возможно, или может есть альтернативные пакеты, способные справиться с такой задачей?
Перед началом работы настоятельно рекомендуем ознакомиться с правилами форума.
Моделирование прохождения объекта с высокой температурой через лёд
14 февраля, 2019 - 15:30
#1
Здравствуйте!
Думаю, что при помощи UDF можно попробовать замутить. Для случая чисто поступательного движения я бы предложил следующее. Попытайтесь написать функцию, которая будет проверять долю твердой фазы в каждой сеточной грани поверхности бура. Если в ячейке есть твердая фаза (объемная доля >0 или =1 - на ваше усмотрение), и эта ячейка имеет ненулевую проекцию нормали на направление движения (т.е. не параллельна движению), то вы либо обнуляете скорость тела, либо добавляете силу, равную по величине силе тяжести и противоположную ей по направлению.
Следующий этап - это учет силы трения, но у меня нет идей по определению коэффициента трения тела о тающий лёд, тут какая-то эмпирика точно нужна. Далее можно попробовать реализовать больше степеней свободы, в частности - вращательных (хотя для бура, наверно, одной степени свободы будет достаточно). Это не должно быть сложно при условии, что у вас будут правильно вычисляться силы трения и нормального давления в отдельных ячейках.
Хорошая мысль, только вот очень трудно осуществимая для меня. Подскажите пожалуйста, как я могу обратиться к ячейкам около определённой границы и к их значению параметра liquid fraction? Если есть какая-нибудь статья с подробными примерами составления сложных udf функций, посоветуйте пожалуйста. Спасибо!
Лучше не к ячейкам около границы, а к граням ячеек на границе. Чтобы получить указатель на тред граней:
int bc_id = 5; /* ID поверхности бура, который отображается в правом нижнем углу меню boundary conditions */
Thread *ft = Lookup_Thread(domain, bc_id);
Попробуйте макрос F_LIQF - если он существует, то вернет значение сразу на грани. Если нет - то C_LIQF точно сработает, но для этого нужно найти соседнюю ячейку. Посмотрите эту тему.
Боюсь, что хелп - лучший помощник.
Не могли бы вы взглянуть на код? Это мой первый в жизни код на C и хотелось бы убедиться что я хоть приблизительно разобрался в этом.
#include "udf.h"
DEFINE_SOURCE(my_source, c, f_thread, dS, eqn)
{
int i = 0;
face_t f;
cell_t c;
real liq_frac=0, liq_frac_middle;
int bc_id = 5;
int domain_id=2;
Thread *f_thread = Lookup_Thread(domain_id, bc_id);
begin_c_loop(c, f_thread)
{
liq_frac += C_LIQF(c,f_thread);
i++;
}
end_c_loop(c, f_thread)
liq_frac_middle=liq_frac/i;
if (liq_frac_middle>0.5){
source = ...
}
else{
source=0;
}
return source;
}
Подскажите пожалуйста, что такое dS[eqn] в этом макросе и как его определить? Как можно определить силу, когда под стенкой вода ( может быть посчитать по mg, но тогда вдедь g нужно вытащить из флюента? как это сделать?) Я думаю что очень большая точность в определении силы тут не нужна, поскольку плавление каждого слоя ячеек будет очень долгим.
Добавить комментарий