Уважаемые форумчане!
Пытаюсь смоделировать движение воздуха в 2D постановке. Имеется внешний неподвижный цилиндр и внутренний вращающийся, а также два канала (сверху и снизу) для откачки воздуха. Вопрос состоит в том, можно ли одновременно "навесить" на внутренний цилиндр условие Rotating wall и Mass-Flow-Inlet (смоделировать так, что воздух поступает, как-бы из вала(внутреннего цилиндра))? Или же есть какие-то другие способы для решения поставленной задачи?
Спасибо, буду благодарен за любой совет!
Доброго дня.
Задайте на поверхности вала вход по скорости с известными углами в цилиндриеской системе координат.
Углы можно высчитать из известного расхода воздуха и угловой скорости вала.
Здравствуйте,
Если теплообмена нет и все с постоянной температурой, то можно задать поверхность вала как стенку с Moving wall и прописать UDF для закачки массы воздуха в первую пристеночную ячейку у вала. Иначе нужно учитывать, что он массу закидывает с энтальпией при начальных условиях, причем точно это скомпенисировать на практике не удается.
Код для примера просто. По факту, возможно, нужен источник массы, а не компонента
#include "udf.h"
#include "sg.h"
#include "sg_mphase.h"
#include "flow.h"
#include "mem.h"
#include "metric.h"
#include "surf.h"
#define wall_id 19 /* zone ID of wall where condensation happens*/
#define species_area_source 0.01 /* desired wall source kg/s/m2 */
#define T_ref 298.15 /* zero enthalpy temperature, K */
enum
{
cell_volume, /*0 - volume of cell, m3*/
face_area, /*1 - area of face, m2*/
cell_temp, /*2 - cell temperature, K*/
cell_sp_heat, /*3 - area of face, m2*/
src_species_mass, /*4 vapor mass source, kg/s/m3*/
src_enthalpy, /*5 enthalpy correction source, kg/s/m3*/
};
DEFINE_ADJUST(wall_species_calc, d)
{
Thread *t;
cell_t c;
real cell_vol = 0.0; /* kg/s/m2 */
real A[3];
int n;
thread_loop_c(t, d)
{
begin_c_loop(c,t)
{
C_UDMI(c, t, src_species_mass) = 0.0; /* initializing mass source*/
C_UDMI(c, t, cell_volume) = 1e-10; /* initializing volume (avoid zero divide) */
C_UDMI(c, t, src_enthalpy) = 0.0; /* initializing enthalpy correction source, W/m3 */
c_face_loop(c, t, n)
{
Thread *tf = C_FACE_THREAD (c, t, n);
if(THREAD_ID(tf) == wall_id)
{ face_t f = C_FACE (c, t, n);
F_AREA(A,f,tf);
C_UDMI(c, t, face_area) = NV_MAG(A); /* debug wall face area, m2 */
cell_vol = C_VOLUME(c, t);
C_UDMI(c, t, cell_volume) = cell_vol; /* debug wall cell area, m3 */
/* desired cell mass source kg/s/m3 */
C_UDMI(c, t, src_species_mass) = species_area_source * C_UDMI(c, t, face_area) / C_UDMI(c, t, cell_volume);
C_UDMI(c, t, cell_sp_heat) = C_CP(c, t); /* debug specific heat, J/kg/K */
C_UDMI(c, t, cell_temp) = C_T(c, t); /* debug temperature, J/kg/K */
/* cell enthalpy correction source W/m3 */
C_UDMI(c, t, src_enthalpy) = C_UDMI(c, t, cell_sp_heat)*C_UDMI(c, t, src_species_mass)*(C_UDMI(c, t, cell_temp)-T_ref);
}
}
}
end_c_loop (c,t)
}
}
DEFINE_SOURCE(wall_species_source,c,t,dS,eqn)
{
real source;
source = C_UDMI(c, t, src_species_mass);
dS[eqn] = 0.0;
return source;
}
DEFINE_SOURCE(wall_enthalpy_correction_source,c,t,dS,eqn)
{
real source;
source = C_UDMI(c, t, src_enthalpy);
dS[eqn] = 0.0;
return source;
}
Можете посмотреть тестовые задачки с этими кодами
Здравствуйте!
Извините, что поздно спрашиваю, но можете подсказать, как правильно это сделать?
Добавить комментарий