ANSYS耦合解決方案方法之一
2016-04-27 by:CAE仿真在線 來源:互聯(lián)網(wǎng)
這兩天很忙,源于自己對論文中可能出現(xiàn)的問題估計不足,不過話說回來,很多問題著實也是在實踐過程中才發(fā)現(xiàn)其中奧秘。不過這段時間效率低下是一定的了,想必和網(wǎng)上多了有很大關(guān)系??磥硎俏艺嬲聸Q心息網(wǎng)的時候到了,成功的前提是有選擇性地放棄,看來這句話是對我說的。而且,看著即將完成的一篇論文,怎么看怎么像是我寫博客的風(fēng)格,囧。博客對生活影響真大啊!
好了,言歸正傳,剛才在仿真論壇發(fā)現(xiàn)了一篇好貼《高效耦合小程序》,si13儼然是個天才,程序?qū)懙锰A?我讀了三遍才理解其中奧秘,不禁嘖嘖稱奇。對其作品更是五體投地,相當(dāng)佩服。首先來圍觀下面si13編寫的APDL代碼:
說明:其中加粗的部分需要根據(jù)不同的分析自行修改。
!**************************************
allsel !最好保留這句命令
!*******將從屬節(jié)點編號依次存入數(shù)組****************
cmsel,s,slavenode
*get,count1_node,node,0,count
*del,slave_node
*dim,slave_node,array,count1_node
*get,slave_node(1),node,0,num,min
*do,i,2,count1_node
slave_node(i)=ndnext(slave_node(i-1))
*enddo
!*******將主節(jié)點編號依次存入數(shù)組****************
allsel
cmsel,s,masternode
*get,count2_node,node,0,count
*del,master_node
*dim,master_node,array,count2_node
*get,master_node(1),node,0,num,min
*do,i,2,count2_node
master_node(i)=ndnext(master_node(i-1))
*enddo
!********將與從屬節(jié)點耦合的節(jié)點數(shù)組初始化****************
*del,cp_node
*dim,cp_node,array,count1_node
*do,i,1,count1_node
cp_node(i)=0
*enddo
!*********開始選擇程序****************
allsel
cmsel,s,masternode
*do,i,1,count1_node
kk=1
k=1
*dowhile,kk
k=nnear(slave_node(i))
nsel,s,cp,,all
kk=nsel(k)+0.001
allsel
cmsel,s,masternode
nsel,u,node,,k
cm,masternode,node
*enddo
cp_node(i)=k
*enddo
!*******選擇完畢****************
!*******開始耦合****************
allsel,all
/prep7
*do,i,1,count1_node
cp,next,UX,slave_node(i),cp_node(i)
cp,next,UY,slave_node(i),cp_node(i)
cp,next,UZ,slave_node(i),cp_node(i)
*enddo
!*******耦合完畢****************
過去常見的耦合命令,主要分三步(以鋼筋與混凝土耦合為例):
- 選擇鋼筋線上的節(jié)點;
- 通過新定義的數(shù)組,對這些節(jié)點進行排序;
- 用一個循環(huán),是這些鋼筋上的節(jié)點與其周圍最近的節(jié)點進行耦合。
最常見的耦合命令流如下(這是我兩年前做另一個課題的時候用的):
cmsel,s,ouhe
*get,max1,node,0,count !取得節(jié)點數(shù)目
*dim,steel,,max1 !定義“節(jié)點數(shù)”長度的數(shù)組
*get,nod1,node,0,num,min !最小節(jié)點編號定義給nod1
steel(1)=nod1 !數(shù)組第一個位置是最小節(jié)點的編號
*do,i,2,max1 !對數(shù)組進行排序
steel(i)=ndnext(steel(i-1))
*enddo
allsel
nsel,all
!選擇全部節(jié)點
jj=1
*do,i,1,max1 !對數(shù)組中的節(jié)點,一一與周圍和它最近的節(jié)點進行耦合
cp,jj,ux,steel(i),nnear(steel(i))
cp,jj+1,uy,steel(i),nnear(steel(i))
cp,jj+2,uz,steel(i),nnear(steel(i))
jj=jj+3
*enddo
這樣做其實是很大弊端的,還是拿鋼筋混凝土舉例:用上面的代碼,容易使得鋼筋上的節(jié)點與鋼筋上另外的節(jié)點、或者與混凝土中兩個節(jié)點進行耦合——也就是說,會出現(xiàn)一對多的情況,而這在耦合中是不允許的。
在我兩年前的那次分析,做的是一個組合結(jié)構(gòu),不是鋼筋混凝土,而且我在網(wǎng)格劃分的時候,特別注意了讓參與耦合的兩對節(jié)點舉例比其他節(jié)點更接近。這樣就使得用上面的命令實現(xiàn)完美一對一耦合。但在網(wǎng)格不好控制的時候,麻煩可就大了。
所以后來見過一種改進的方法,將混凝土中的節(jié)點也進行排號,然后進行與鋼筋節(jié)點進行耦合。這樣成功地避免了自己耦合自己的情況,但已經(jīng)耦合過的節(jié)點二次被耦合,則依然容易出現(xiàn)。
si13的這套命令流,應(yīng)該是把所有問題都解決了,perfect! 下面對他的程序詳細地研究研究,學(xué)習(xí)一下他的編程思想,所以有必要把他的程序再寫一遍~
為了便于理解,下面仍以鋼筋與混凝土耦合為例,不再區(qū)分主節(jié)點與附節(jié)點。
allsel !全部選擇
!將鋼筋中節(jié)點存入數(shù)組
cmsel,s,slavenode !選擇鋼筋節(jié)點
*get,count1_node,node,0,count !得到鋼筋節(jié)點的總數(shù)
*del,slave_node !清空數(shù)組變量,相當(dāng)于slave_node=
*dim,slave_node,array,count1_node
!定義用來“盛裝”鋼筋節(jié)點的數(shù)組
*get,slave_node(1),node,0,num,min
!開始對鋼筋節(jié)點進行排序,并存入數(shù)組
*do,i,2,count1_node
slave_node(i)=ndnext(slave_node(i-1))
*enddo
!**下面是將混凝土中節(jié)點存入數(shù)組,方法同上,于是就不解釋了
allsel
cmsel,s,masternode
*get,count2_node,node,0,count
*del,master_node
*dim,master_node,array,count2_node
*get,master_node(1),node,0,num,min
*do,i,2,count2_node
master_node(i)=ndnext(master_node(i-1))
*enddo
!*新定義一個數(shù)組,專門用來存放混凝土中參與耦合的節(jié)點編號
*del,cp_node
*dim,cp_node,array,count1_node
*do,i,1,count1_node
cp_node(i)=0
*enddo
!*最精妙的核心代碼來啦
allsel
cmsel,s,masternode !選擇混凝土中的節(jié)點
!外層循環(huán)是為了給cp_node數(shù)組賦值,所以數(shù)組中元素個數(shù)為鋼筋節(jié)點數(shù)
*do,i,1,count1_node
kk=1
k=1
!內(nèi)層循環(huán)是為了判斷鋼筋最近的節(jié)點是否已經(jīng)參與過耦合
*dowhile,kk !循環(huán)條件,若kk>0則循環(huán)繼續(xù),若kk<=0則循環(huán)終止
k=nnear(slave_node(i)) !將距鋼筋中第i個節(jié)點最近的節(jié)點編號賦給k
nsel,s,cp,,all !選擇所有已經(jīng)耦合的節(jié)點,這種用法我是第一次看到
kk=nsel(k)+0.001 !若上面的節(jié)點k不曾參與過耦合,則nsel命令不能將其選中,此處nsel(k)=-1,kk=-0.999<0,此部分循環(huán)終止;若上面的節(jié)點k已經(jīng)參與過耦合,則nsel命令可以將其選中,此處nsel(k)=1,kk=1.001>0,循環(huán)繼續(xù),查找其他與第i個鋼筋節(jié)點最近的混凝土節(jié)點的情況。
allsel
cmsel,s,masternode !選擇混凝土節(jié)點
nsel,u,node,,k !排除出剛才確定的準備參加耦合的混凝土節(jié)點
cm,masternode,node !重新定義混凝土節(jié)點選擇集,這是為了下次選擇節(jié)點的時候,不將已經(jīng)判讀過的節(jié)點放在考慮之列
*enddo
cp_node(i)=k !將經(jīng)過判斷的k點編號賦予給混凝土參與耦合數(shù)組
*enddo
!開始耦合,耦合對象為鋼筋中全部節(jié)點,以及混凝土中一部分專門用來耦合的節(jié)點,二者一一對應(yīng),而且還位置確定。
allsel,all
/prep7
*do,i,1,count1_node
cp,next,UX,slave_node(i),cp_node(i)
cp,next,UY,slave_node(i),cp_node(i)
cp,next,UZ,slave_node(i),cp_node(i)
*enddo
完畢,這個程序越看越喜歡~留在這里,當(dāng)個記錄,用的時候過來拿,哈哈。
相關(guān)標簽搜索:ANSYS耦合解決方案方法之一 ANSYS耦合 apdl Ansys有限元培訓(xùn) Ansys workbench培訓(xùn) ansys視頻教程 ansys workbench教程 ansys APDL經(jīng)典教程 ansys資料下載 ansys技術(shù)咨詢 ansys基礎(chǔ)知識 ansys代做 Fluent、CFX流體分析