找回密码
 注册
查看: 1901|回复: 4

[讨论]想返回笛卡尔坐标值都错,郁闷

[复制链接]
发表于 2007-7-31 12:06:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
自己编了个udf,调试时没有问题,但是计算中只要加这个udf就出错,经过仔细检查发现无法从计算器传过来正确的坐标值。
原先的做法是直接定义x[ND_ND],并认为x方向的坐标为x[0]并定义变量xx1=x[0],在udf中编写表达式当2<=xx1<=10时,变量kxl=0.005*xx1,检查中发现xx1的值一直是零。
后来想用网格中心的坐标计算,考虑如下:
C_CENTROID(x,c,t)表示了cell的中心坐标,且用数组x存储了该坐标,那么某个cell的中心坐标的x、y、z的分量怎么获得?
是否为C_CENTROID(x,c,t)[0]?
不知道有没有这种表达
希望得到指点,或讨论
发表于 2007-7-31 12:15:30 | 显示全部楼层

[讨论]想返回笛卡尔坐标值都错,郁闷

C_CENTROID(x,c,t)
x[ND_ND]
联合使用,前一把单元中心存储在数组c中,后者定义数组为与CASE唯数相同
获得X坐标xx1=x[0]就可以了
 楼主| 发表于 2007-7-31 15:35:59 | 显示全部楼层

[讨论]想返回笛卡尔坐标值都错,郁闷

DEFINE_PROPERTY(mykongxilv, cell, thread)
{
  int i;
  real kongxilv;
  real x[ND_ND];
  real xx1=x[0];
  real xx2=x[1];
  real xx3=x[2];
  c_cell c;
  Thread *t;
  begin_f_loop(f,thread)
  {
  C_CENTROID(x,c,t);
  if((xx1<=150)&&(xx1>=0)&&(xx2<=239)&&(xx2>=0))
  {
  if((xx3<=0.231*xx2+20)&&(xx3>=0.23*xx2))
      kongxilv=0.0000195*xx1*xx1+0.000028607*xx2*xx2-0.005165*xx1-0.006721*xx2+0.0000014244*xx1*xx2+0.73455;
    else
    kongxilv=0;
   return kongxilv;
   }
   end_f_loop(f,thread)
}
这样吗,还是错误啊
发表于 2007-7-31 22:11:39 | 显示全部楼层

[讨论]想返回笛卡尔坐标值都错,郁闷

C_CENTROID(x,c,t);
这句应该在
real xx1=x[0];
real xx2=x[1];
real xx3=x[2];
这些赋值语句前面。你没调用C_CENTROID(x,c,t)宏之前先赋值的话结果结果当然是零,建议多看帮助。
ps:版主能不能帮忙看看多相流的宏的那个帖子啊?谢谢啦:)
 楼主| 发表于 2007-8-1 07:45:15 | 显示全部楼层

[讨论]想返回笛卡尔坐标值都错,郁闷

这么说,是利用每一次的循环,利用C_CENTROID(x,c,t)找到网格中心坐标赋给数组x[0]
应该这样,谢谢luckydog和gallongallon !
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表