24小时热门版块排行榜    

CyRhmU.jpeg
查看: 3183  |  回复: 7

苦逼小电弧

铜虫 (小有名气)

[求助] 如何用UDF获取某个温度值下的坐标

有个问题请教一下各位:
首先要获得某个区域内最大和最小的温度值,并得到最大温度和最小温度所在cell的坐标值再进行处理;
1:看帮助文件中:
DEFINE_ON_DEMAND(on_demand_calc)
Domain *d;
{
real tmax = 0.;
real tmin = 0.;
real temp,volume,vol_tot;
Thread *t;
cell_t c;
d = Get_Domain(1);
thread_loop_c(t,d)
{
  begin_c_loop(c,t)
   {
    temp = C_T(c,t);
    if (temp < tmin || tmin == 0.) tmin = temp;
    if (temp > tmax || tmax == 0.) tmax = temp;
    }
  end_c_loop(c,t)
printf("\n Tmin = %g Tmax = %g\n",tmin,tmax);
}
通过上述程序来求得最大和最小温度,不太懂 if (temp < tmin || tmin == 0.) tmin = temp;
    if (temp > tmax || tmax == 0.) tmax = temp;这两个语句的意思。tmin的初值为0.为什么temp小于tmin就是最小温度值呢???:

2:假如获得了最大温度和最小温度,那么又如何获得他们所在cell的坐标值呢??这个十分困惑。
回复此楼

» 收录本帖的淘帖专辑推荐

等离子体相关

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fangdian

木虫 (正式写手)

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
xiegangmai: 金币+2, 谢谢参与! 2013-05-17 21:18:26
tmin变量里面存储的是最小温度值,如果某个单元温度低于此温度,就将该单元的温度赋值给tmin,这样才能保证tmin中一直是最小温度值。tmax一样理解。
   单元中心的坐标值可采用C_CENTROID该宏获得,具体需要查看下help
2楼2013-05-17 11:29:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

苦逼小电弧

铜虫 (小有名气)

引用回帖:
2楼: Originally posted by fangdian at 2013-05-17 11:29:55
tmin变量里面存储的是最小温度值,如果某个单元温度低于此温度,就将该单元的温度赋值给tmin,这样才能保证tmin中一直是最小温度值。tmax一样理解。
   单元中心的坐标值可采用C_CENTROID该宏获得,具体需要查看下 ...

嗯   谢谢~
不过有个问题就是用C_CENTROID(x,c,t)如何让指针t指的就是最大温度cell呢???
~~
3楼2013-05-17 14:00:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fangdian

木虫 (正式写手)


xiegangmai: 金币+1, 谢谢参与! 2013-05-26 12:38:29
引用回帖:
3楼: Originally posted by 苦逼小电弧 at 2013-05-17 14:00:33
嗯   谢谢~
不过有个问题就是用C_CENTROID(x,c,t)如何让指针t指的就是最大温度cell呢???
~~...

不用指向最大温度的cell,直接记录该单元中心坐标,这样也能达到目的。当然,我不是很清楚怎么指向最大温度的cell
4楼2013-05-18 14:28:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

苦逼小电弧

铜虫 (小有名气)

引用回帖:
4楼: Originally posted by fangdian at 2013-05-18 14:28:38
不用指向最大温度的cell,直接记录该单元中心坐标,这样也能达到目的。当然,我不是很清楚怎么指向最大温度的cell...

主要是不知道最大温度的cell在哪。。因为在UDF要用到最大温度单元所在单元的坐标。。。
5楼2013-05-18 19:40:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

stryhood

至尊木虫 (著名写手)

★ ★
xiegangmai: 金币+2, 谢谢参与! 2013-05-26 12:38:35
引用回帖:
5楼: Originally posted by 苦逼小电弧 at 2013-05-18 19:40:52
主要是不知道最大温度的cell在哪。。因为在UDF要用到最大温度单元所在单元的坐标。。。...

就上面的程序改一改,loop循环内求出的最大的温度,那么在同一个loop内最大温度cell的左标也就得到了啊;上面不是有童鞋说可以用C_CENTROID(x,c,t)么,仔细看看帮助吧。
6楼2013-05-20 17:46:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wz9533

木虫 (正式写手)

【答案】应助回帖


1592203609: 金币+1, 谢谢回帖 2013-06-18 23:15:33
DEFINE_ON_DEMAND(on_demand_calc)
Domain *d;
{
real tmax = -1.;
real tmin = 99999.;
real temp,volume,vol_tot,maxX,maxY,minX,minY;
real x[ND_ND];
Thread *t;
cell_t c;
d = Get_Domain(1);
thread_loop_c(t,d)
{
  begin_c_loop(c,t)
   {
    temp = C_T(c,t);
    if (temp < tmin )
      {
      tmin = temp;
      C_CENTROID(x,c,t)
      minX=x[0];
      minY=x[1];
      }
    if (temp > tmax)
      {
       tmax = temp;
       C_CENTROID(x,c,t)
       maxX=x[0];
       maxY=x[1];
      }
  }
  end_c_loop(c,t)
}

这样应该可以
7楼2013-06-18 13:07:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wz9533

木虫 (正式写手)

引用回帖:
7楼: Originally posted by wz9533 at 2013-06-18 13:07:30
DEFINE_ON_DEMAND(on_demand_calc)
Domain *d;
{
real tmax = -1.;
real tmin = 99999.;
real temp,volume,vol_tot,maxX,maxY,minX,minY;
real x;
Thread *t;
cell_t c;
d = Get_Domain(1);
thread_loo ...

C_CENTROID(x,c,t)这里忘了加分号;
8楼2013-06-18 13:08:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 苦逼小电弧 的主题更新
信息提示
请填处理意见