iomega 发表于 2008-6-20 16:16:36

[原创] 如何对计算结果进行插值得到特定(x,y,z)点上的值

这里简单介绍一下如何用*MOPER来对计算结果进行插值,来得到用户自定义网格节点上的值。

例如,用free mesh计算已经得到所有节点的温度值,如何得到中心点和其他任意点的温度值:

! following code define the Node coordinates in NODLOCS array
*GET,MAXNN,NODE,0,NUM,MAXD
*GET,MINNN,NODE,0,NUM,MIND
*GET,NOD_CNT,NODE,0,COUNT
*DIM,NODLOCS,ARRAY,NOD_CNT,3

! FILL NODLOCS WITH THE X,Y,Z COORDS
NCS2=1
*DO,NCS,MINNN,MAXNN,1
*IF,NSEL(NCS),EQ,1,THEN
NODLOCS(NCS2,1)=NX(NCS)
NODLOCS(NCS2,2)=NY(NCS)
NODLOCS(NCS2,3)=NZ(NCS)
NCS2=NCS2+1
*ENDIF
*ENDDO

!Get simulated temperature value at each node and save them into TDIST array
   *DIM,TDIST,ARRAY,NOD_CNT,1
   NCS2=1
   *DO,NCS,MINNN,MAXNN,1
      *IF,NSEL(NCS),EQ,1,THEN
          TDIST(NCS2)=TEMP(NCS)
          NCS2=NCS2+1
      *ENDIF
   *ENDDO

! Create TC array to save your model center position, assuming it's 3D model

*DIM,TC,ARRAY,2,3
TC(1,1)=center_x
TC(1,2)=center_y
TC(1,3)=center_z
TC(2,1)=arbitrary_x
TC(2,2)=arbitrary_y
TC(2,3)=arbitrary_z



*DIM,TINTRPC,ARRAY,2,1
! The linear interpolated temperature will be saved in TINTRPC array
*MOPER,TINTRPC,TC,MAP,TDIST,NODLOCS,3,,1

用户可自定义TC的length来输入所求坐标点集合的x,y,z值。TINTRPC就是所对应坐标点集合上的温度值。

pfsr 发表于 2008-6-20 21:57:38

感谢分享,支持原创

lubinxu 发表于 2009-7-9 22:37:33

版主:你好,因为遇到了同样的插值问题,多谢看了版主的好资料,在此表示感谢。我试过你的这个命令流,最后一行*MOPER,TINTRPC,TC,MAP,TDIST,NODLOCS,3,,1中的3,,1在help中的解释如下:
kOut
      Outside region results; used for Oper = MAP
   If kOut = 0, use the value(s) of the nearest region point for points outside of the region.
   If kOut = 1, set results extrapolated outside of the region to zero
那么怎么插值出来的值为0。
我的例子如下:
dat.txt
   -0.227109   -0.209046    0.467072   200.0
   -0.413893   -0.168195    0.261523   400.0
   -0.574753   -0.157890    0.809014   800.0
   -0.731227   -0.152996    0.119975   1100.0
   -0.876865   -0.138102    0.130902   1350.0
   -0.101067   -0.131582    0.143611   1000.0
例子流:
nn=6
*dim,AXYZ,ARRAY,nn,4                  
*vread,AXYZ(1,1),dat,txt,,JIK,4,nn   
(4e12.6)                              

*DIM,NODLOCS,ARRAY,nn,3
*DO,j,1,3,1
*DO,i,1,nn,1
NODLOCS(i,j)=AXYZ(i,j)
*ENDDO
*ENDDO

*DIM,TDIST,ARRAY,nn,1
*DO,NCS,1,nn,1
   TDIST(NCS)=AXYZ(NCS,4)
*ENDDO

nxyz=2
*DIM,TC,ARRAY,nxyz,3

TC(1,1)=-0.3
TC(1,2)=-0.18
TC(1,3)=0.35

TC(2,1)=-0.8
TC(2,2)=-0.145
TC(2,3)=0.125


*DIM,TINTRPC,ARRAY,nxyz,1
*MOPER,TINTRPC,TC,MAP,TDIST,NODLOCS,3,,0

*CFOPEN,temp,txt
*VWRITE,TINTRPC(1,1)
(f12.5)
*CFCLOS

icybrokenheart 发表于 2009-7-9 23:01:25

谢谢楼主的分享。我一直以为用sucr命令可以实现该功能呢(我的后处理一直没用过类似的功能)。如果还需要差值才能获取,那看来sucr命令的能力很弱了?

xidapsy 发表于 2010-6-1 15:29:43

版主真是高手!收藏

sd9366 发表于 2010-7-4 14:27:19

好东西,收藏了

jsdfgcx 发表于 2010-7-5 12:35:56

厉害!!!!!!!!!

ender508 发表于 2010-7-14 16:12:38

正需要,但是没看懂 ,有高手能把那个观察任意点应力的mac改成求温度的吗?

热带果汁 发表于 2012-10-23 23:22:07

这种插值方法如何用于后处理或者用于计算热应力?
谢谢

adidas04 发表于 2012-10-24 15:33:12

厉害!!!!!!!!!

hujuntao1987 发表于 2012-11-3 20:27:43

感谢分享,支持原创
页: [1]
查看完整版本: [原创] 如何对计算结果进行插值得到特定(x,y,z)点上的值