ANSYS耦合解決方案方法之一

2016-04-27  by:CAE仿真在線  來源:互聯(lián)網(wǎng)

這兩天很忙,源于自己對論文中可能出現(xiàn)的問題估計(jì)不足,不過話說回來,很多問題著實(shí)也是在實(shí)踐過程中才發(fā)現(xiàn)其中奧秘。不過這段時(shí)間效率低下是一定的了,想必和網(wǎng)上多了有很大關(guān)系。看來是我真正下決心息網(wǎng)的時(shí)候到了,成功的前提是有選擇性地放棄,看來這句話是對我說的。而且,看著即將完成的一篇論文,怎么看怎么像是我寫博客的風(fēng)格,囧。博客對生活影響真大啊!

好了,言歸正傳,剛才在仿真論壇發(fā)現(xiàn)了一篇好貼《高效耦合小程序》,si13儼然是個(gè)天才,程序?qū)懙锰A?我讀了三遍才理解其中奧秘,不禁嘖嘖稱奇。對其作品更是五體投地,相當(dāng)佩服。首先來圍觀下面si13編寫的APDL代碼:

說明:其中加粗的部分需要根據(jù)不同的分析自行修改。

!**************************************
allsel                                        !最好保留這句命令
!*******將從屬節(jié)點(diǎn)編號依次存入數(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é)點(diǎn)編號依次存入數(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é)點(diǎn)耦合的節(jié)點(diǎn)數(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
!*******耦合完畢****************

過去常見的耦合命令,主要分三步(以鋼筋與混凝土耦合為例):

  1. 選擇鋼筋線上的節(jié)點(diǎn);
  2. 通過新定義的數(shù)組,對這些節(jié)點(diǎn)進(jìn)行排序;
  3. 用一個(gè)循環(huán),是這些鋼筋上的節(jié)點(diǎn)與其周圍最近的節(jié)點(diǎn)進(jìn)行耦合。

最常見的耦合命令流如下(這是我兩年前做另一個(gè)課題的時(shí)候用的):
cmsel,s,ouhe

*get,max1,node,0,count !取得節(jié)點(diǎn)數(shù)目
*dim,steel,,max1 !定義“節(jié)點(diǎn)數(shù)”長度的數(shù)組
*get,nod1,node,0,num,min !最小節(jié)點(diǎn)編號定義給nod1
steel(1)=nod1 !數(shù)組第一個(gè)位置是最小節(jié)點(diǎn)的編號
*do,i,2,max1 !對數(shù)組進(jìn)行排序
steel(i)=ndnext(steel(i-1))
*enddo
allsel
nsel,all !選擇全部節(jié)點(diǎn)

jj=1
*do,i,1,max1 !對數(shù)組中的節(jié)點(diǎn),一一與周圍和它最近的節(jié)點(diǎn)進(jìn)行耦合
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

這樣做其實(shí)是很大弊端的,還是拿鋼筋混凝土舉例:用上面的代碼,容易使得鋼筋上的節(jié)點(diǎn)與鋼筋上另外的節(jié)點(diǎn)、或者與混凝土中兩個(gè)節(jié)點(diǎn)進(jìn)行耦合——也就是說,會(huì)出現(xiàn)一對多的情況,而這在耦合中是不允許的。

在我兩年前的那次分析,做的是一個(gè)組合結(jié)構(gòu),不是鋼筋混凝土,而且我在網(wǎng)格劃分的時(shí)候,特別注意了讓參與耦合的兩對節(jié)點(diǎn)舉例比其他節(jié)點(diǎn)更接近。這樣就使得用上面的命令實(shí)現(xiàn)完美一對一耦合。但在網(wǎng)格不好控制的時(shí)候,麻煩可就大了。

所以后來見過一種改進(jìn)的方法,將混凝土中的節(jié)點(diǎn)也進(jìn)行排號,然后進(jìn)行與鋼筋節(jié)點(diǎn)進(jìn)行耦合。這樣成功地避免了自己耦合自己的情況,但已經(jīng)耦合過的節(jié)點(diǎn)二次被耦合,則依然容易出現(xiàn)。

si13的這套命令流,應(yīng)該是把所有問題都解決了,perfect! 下面對他的程序詳細(xì)地研究研究,學(xué)習(xí)一下他的編程思想,所以有必要把他的程序再寫一遍~

為了便于理解,下面仍以鋼筋與混凝土耦合為例,不再區(qū)分主節(jié)點(diǎn)與附節(jié)點(diǎn)。

allsel         !全部選擇
!將鋼筋中節(jié)點(diǎn)存入數(shù)組
cmsel,s,slavenode !選擇鋼筋節(jié)點(diǎn)
*get,count1_node,node,0,count !得到鋼筋節(jié)點(diǎn)的總數(shù)
*del,slave_node !清空數(shù)組變量,相當(dāng)于slave_node=
*dim,slave_node,array,count1_node !定義用來“盛裝”鋼筋節(jié)點(diǎn)的數(shù)組
*get,slave_node(1),node,0,num,min !開始對鋼筋節(jié)點(diǎn)進(jìn)行排序,并存入數(shù)組
*do,i,2,count1_node
 slave_node(i)=ndnext(slave_node(i-1))
*enddo 
!**下面是將混凝土中節(jié)點(diǎn)存入數(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
!*新定義一個(gè)數(shù)組,專門用來存放混凝土中參與耦合的節(jié)點(diǎn)編號
*del,cp_node
*dim,cp_node,array,count1_node
*do,i,1,count1_node
   cp_node(i)=0
*enddo
!*最精妙的核心代碼來啦
allsel
cmsel,s,masternode  !選擇混凝土中的節(jié)點(diǎn)
!外層循環(huán)是為了給cp_node數(shù)組賦值,所以數(shù)組中元素個(gè)數(shù)為鋼筋節(jié)點(diǎn)數(shù)
*do,i,1,count1_node      
   kk=1   
   k=1   
!內(nèi)層循環(huán)是為了判斷鋼筋最近的節(jié)點(diǎn)是否已經(jīng)參與過耦合
    *dowhile,kk    !循環(huán)條件,若kk>0則循環(huán)繼續(xù),若kk<=0則循環(huán)終止
     k=nnear(slave_node(i)) !將距鋼筋中第i個(gè)節(jié)點(diǎn)最近的節(jié)點(diǎn)編號賦給k
   nsel,s,cp,,all !選擇所有已經(jīng)耦合的節(jié)點(diǎn),這種用法我是第一次看到
   kk=nsel(k)+0.001   !若上面的節(jié)點(diǎn)k不曾參與過耦合,則nsel命令不能將其選中,此處nsel(k)=-1,kk=-0.999<0,此部分循環(huán)終止;若上面的節(jié)點(diǎn)k已經(jīng)參與過耦合,則nsel命令可以將其選中,此處nsel(k)=1,kk=1.001>0,循環(huán)繼續(xù),查找其他與第i個(gè)鋼筋節(jié)點(diǎn)最近的混凝土節(jié)點(diǎn)的情況。
   allsel
      cmsel,s,masternode !選擇混凝土節(jié)點(diǎn)
       nsel,u,node,,k   !排除出剛才確定的準(zhǔn)備參加耦合的混凝土節(jié)點(diǎn)
       cm,masternode,node       !重新定義混凝土節(jié)點(diǎn)選擇集,這是為了下次選擇節(jié)點(diǎn)的時(shí)候,不將已經(jīng)判讀過的節(jié)點(diǎn)放在考慮之列
       *enddo   
           
   cp_node(i)=k   !將經(jīng)過判斷的k點(diǎn)編號賦予給混凝土參與耦合數(shù)組
      
*enddo
!開始耦合,耦合對象為鋼筋中全部節(jié)點(diǎn),以及混凝土中一部分專門用來耦合的節(jié)點(diǎn),二者一一對應(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

完畢,這個(gè)程序越看越喜歡~留在這里,當(dāng)個(gè)記錄,用的時(shí)候過來拿,哈哈。


開放分享:優(yōu)質(zhì)有限元技術(shù)文章,助你自學(xué)成才

相關(guān)標(biāo)簽搜索:ANSYS耦合解決方案方法之一 ANSYS耦合 apdl Ansys有限元培訓(xùn) Ansys workbench培訓(xùn) ansys視頻教程 ansys workbench教程 ansys APDL經(jīng)典教程 ansys資料下載 ansys技術(shù)咨詢 ansys基礎(chǔ)知識(shí) ansys代做 Fluent、CFX流體分析 

編輯
在線報(bào)名:
  • 客服在線請直接聯(lián)系我們的客服,您也可以通過下面的方式進(jìn)行在線報(bào)名,我們會(huì)及時(shí)給您回復(fù)電話,謝謝!
驗(yàn)證碼

全國服務(wù)熱線

1358-032-9919

廣州公司:
廣州市環(huán)市中路306號金鷹大廈3800
電話:13580329919
          135-8032-9919
培訓(xùn)QQ咨詢:點(diǎn)擊咨詢 點(diǎn)擊咨詢
項(xiàng)目QQ咨詢:點(diǎn)擊咨詢
email:kf@1cae.com