正文共: 1249字 4图 预计阅读时间: 4分钟
有时候,我们在做仿真计算时,可能想当关注的某个变量达到预设值时,就自动停止计算而不用人盯着。今天我们用以前的一个高压氢气充注案例来演示一下上述需求的实现方法。
第一步,假设我们想在充注口压力达到22atm时就停止计算,编写如下的UDF,在每次迭代结束后计算充注口压力,判断是否达到目标值,如果达到了,就将一个变量“interruptflag”置1。
real current_pressure = 0.0;
//calculating inlet pressure
DEFINE_EXECUTE_AT_END(check_pressure_stop)
{
real sum_p = 0.0, sum_area = 0.0;
Domain *domain=Get_Domain(1);
Thread *thread = Lookup_Thread(domain, INLET_ZONE_ID);
real area[ND_ND];
face_t f;
begin_f_loop(f, thread)
if PRINCIPAL_FACE_P(f, thread)
{
F_AREA(area, f, thread);
sum_p += F_P(f, thread) * NV_MAG(area);
sum_area += NV_MAG(area);
}
end_f_loop(f, thread)
sum_p = PRF_GRSUM1(sum_p);
sum_area = PRF_GRSUM1(sum_area);
current_pressure = sum_p / sum_area; // calculating average pressure
node_to_host_real_1(current_pressure);
Message("the inlet pressure is %f\n",current_pressure);
if(current_pressure>=pressure_threshold)
{
RP_Set_Integer("interruptflag",1);
Message("the inlet pressure threshold has reached \n");
}
else
RP_Set_Integer("interruptflag",0);
}
第二步,在FLUENT TUI命令声明上述的标志变量“interruptflag”。
(rp-var-define 'interruptflag 0 'interger
第三步,在Execute commands创建如下的指令语句,每个时间步长都执行,当标志变量interruptflag大于0时,停止计算
(if (> (%rpgetvar 'interruptflag) 0)(set! mstop? #t))
测试一下结果,可以看到,当入口压力达到22atm时,计算自动停止,并且就算后续手动再计算也会停止。