|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
模型是这样的 :二维 圆管,x向长1m,网格间隔0.1m,y向0.4m,网格 间隔 0.4m/16,网格 数16*10。UDF的 很简单 ,是 adjust,函数主体如下(省略了些语句,语法没问题编译成功,就是计算结果不对)
{
real x[ND,ND];
thread_loop_c(t,d)
{
begin_c_loop(c,t)
{
CENTROID(x,c,t);
C_UDMI(c,t,0)=x[0];
z=x[0];
if(0<=z<0.1) /*沿x轴方向分段,相同x坐标的网格进行一次计算,并将计算结果存入自定义内存*/
{ F1=表达式(1);/*表达式1 是与x[1]有关的函数,*/
C_UDMI(c,t,1)=F1;}
if(0<=z<0.1) /*表达式2~10相同的, 是与c_T,C_P有关的函数,*/
{ F2=表达式(2);
C_UDMI(c,t,2)=F2;}
if(0.1<=z<0.2)
{ F3=表达式(3);
C_UDMI(c,t,4)=F3;}
if(0.3<=z<0.4)
{ F4=表达式(4);
C_UDMI(c,t,3)=F4;}
..................
else
{ F10=表达式(10);
C_UDMI(c,t,10)=F10;}
}
end_c_loop
}
}
计算收敛后,通过plotXY查看C_UDMI(C,T,0)的数据设x轴是grid x轴,y轴是UDMI(0)
x y
0 0.05
0.1 0.1
0.2 0.2
0.3 0.3
...................
0.9 0.9
1 0.95
UDMI(1)的计算结果是当z=0.05和z=0.1对应的函数值,UDMI(2)没计算结果全是0,UDMI(3)是当z=0.1和z=0.2对应的函数值UDMI(4)是z=0.2和z=0.3.......
为什么CENTROID(x,c,t)只对起始点和终点cell起作用,我理解这个语句得到的结果应该是
x y
0 0.05
0.1 0.15
0.2 0.25
0.3 0.35
...................
0.9 0.95
还有即使是我理解的有问题每个分段函数也唯一对应一个z值,而不是两个,并且为什么UDMI(2)没计算结果!后来我按着UDMI(0)中的计算结果,将条件改成z=0.05,z=0.1...z=0.95,结果UDMI(1)的数据所有z点的函数值,其他条件下无计算值,反正无论怎么改,结果就是很怪异。请高手们帮一下忙,看看问题出在哪?顺便科普一下 UDMI(c,t,i)和CENTROID(x,c,t),谢谢了,这个问题已经纠缠我很久了,不知道啰啰嗦嗦这么多,说清楚没......纠结。 |
|