滿400貼,發帖紀念。我自己編的ansys輸入文件轉到marc輸入數據文件的APDL程序 ***

!最好在ansys前處理器環境下進行轉換操作,還要注意下面的命令要采用批處理方式輸入,不要復制粘貼.
/COM, ==========================================================
/COM,
/COM, Beijing University of Technology
/COM,
/COM, Beijing, 100022, P.R. China
/COM,
/COM, WITH HONEYCOMBS MODEL EXAMPLE
/COM, Apr. 2006
/COM, ANSYS 10.0/MARC.2005R2
/COM,
/COM, ==========================================================
/COM,
/COM, MA LIANHUA
/COM, School of Mechanical Engineering,
/COM, Beijing University of Technology
/COM, QQ: 29128203
/COM, Email:mark@emails.bjut.edu.cn
/COM,
/COM, ==========================================================
!因為MARC的輸入文件格式是用行與格來明確定義它所表示的內容,所以它不能有任意的空白行或空白鍵出現,否則會發生讀取資料有誤的情況.
!有關指令的描述,我所用的參考書目是"MSC.Marc 2005r2 Volume C",相關指令的詳細描述可由本書得到解釋說明.
/PREP7
ALLSEL,ALL !選中所有項目
Swsv=1000000 !定義參數,向量尺寸Swsv(size of work space vector,MAXALL)
MnDOF=24 !定義參數,最大自由度數MnDOF
*ASK,Lcftes,Library code of the first type of element selected,139
*GET,Nelem,ELEM,0,COUNT !得到當前模型中的所有總單元數
*GET,El,ELEM,0,NUM,MIN !所選單元的最小編號
*GET,Nnod,NODE,0,COUNT !得到當前模型中的所有總節點數
*GET,Nd,NODE,0,NUM,MIN !所選單元的最小編號
*CFOPEN,ANtoMA,in !打開ansys-to-marc數據轉換文件
*VWRITE
('title jobname') ! marc檔案名,1-10格為關鍵詞title;11-80格為title名描述
*VWRITE,Swsv,Nelem,Nnod,MnDOF
('sizing',4X,F11.0,TL1,F6.0,TL1,F6.0,TL1,F6.0,TL1,' ') !向量空間定義,1-10格為關鍵詞sizing;11-20格為向量尺寸,21-25格為最大單元數,26-30為最大節點數,31-35為最大自由度數
*VWRITE,Lcftes
('elements',2X,F6.0,TL1,' ') !單元類型選擇,1-10關鍵字elements,11-15所選第一種單元類型,16-20第二種類型....,以此類推
*VWRITE,11
('version',3X,F6.0,TL1,' ') !指定MARC輸入文件的版本號,1-10關鍵字version,11-15所用的Marc輸入/分析版本號,9-2001,10-2003,11-2005
*VWRITE,1,1,1
('processor',' ',3(F6.0,TL1,' '))
*VWRITE
('$no list') !no listing of input data
*VWRITE
('all points') !狀態儲存 所有節點均儲存
*VWRITE,3
('setname',3x,f6.0,tl1,' ') !定義 setname最大個數, 最大個數為3
*VWRITE
('end') !Parameter Card 結束用語
*VWRITE
('$..............................................') !分隔符
*VWRITE
('$============ Model Definition Card ===========') !分隔符
*VWRITE
('optimize',' 9') !Bandwidth 最佳化的方式 采用編號九的方法
*VWRITE
('connectivity') !指定單元連結性
*VWRITE,Nelem
(F6.0,TL1,' ') !指定單元連結性
!得到單元編號和各單元的順序節點編號,并輸出
!MULTIPRO,'start',2
!*cset,1,3,Ndpel,'Nodes number - per element(4/8):',4
!*cset,4,6,Rnum,'Number of real constants',2
!*cset,61,62,'輸入采用單元','的節點數量和實常數數量:'
!*cset,63,64,'Ndpel','---------Rnum'
!MULTIPRO,'end'
*IF,Ndpel,EQ,4,THEN
*DO,I,1,NELEM,1
En=El !單元號 element number
*VWRITE,En,Lcftes,NELEM(El,1),NELEM(El,2),NELEM(El,3),NELEM(El,4) !讀出單元的4個節點編號
(5(F6.0,TL1),F6.0,TL1,' ')
El=ELNEXT(El) !讀出下一個單元編號
*ENDDO
*ENDIF
*VWRITE
('coordinates') !指定節點坐標
*VWRITE,0,36,0,1
(3(f6.0,tl1),F6.0,TL1,' ') !3維,節點數...
*DO,I,1,Nnod,1
Nn=Nd !節點號 nodal point number
NX=NX(Nd) !節點號,X坐標
NY=Ny(Nd) !節點號,Y坐標
NZ=Nz(Nd) !節點號,Z坐標
*VWRITE,Nn,NX,NY,NZ
(F6.0,TL1,3F10.4)
Nd=NDNEXT(Nd) !讀出下一個節點編號
*ENDDO
*VWRITE
('isotropic') !指定材料性質
*VWRITE
() !第二小Card,在這沒有相關的描述.
*VWRITE,1,0,0
(F6.0,TL1,'elastic',3X,'isotropic',' ',F6.0,TL1,F6.0,TL1,' ') !第三小Card,純彈性,各項同性。將這個材料編號為1,6~25格空白,表示參數的描述為預設值.26~30格在MARC中不使用,預設值為零.31~35格輸入0表示不進行水泥破裂(concrete cracking)的運算.
*VWRITE,YOUNG,POISSON
(E10.4,F10.4) !第四小Card定義楊氏模量,泊松比,1~10格表示楊氏模量,11~20格表示波松比( poisson ratio),21~30格表示密度,31~40格表示熱膨脹系數,41~50格表示Equivalent tensile yield stress,51~60格表示for ORNL yield criteria.
*VWRITE,chrval(Nelem)
('1 TO ',A5) !第五小card,輸入和這個材料有關的單元
*VWRITE
('geometry') !定義幾何數據
*VWRITE
() !空白行,不描述
*VWRITE,t,0,0,0,0,0,0
(F10.5,6F10.5) !第1~10給定材料的厚度,11格以后的參數請參閱Volumn C
ESEL,S,REAL,,1
*GET,ElR1,ELEM,0,NUM,MIN !所選單元的最小編號
*GET,NelemR1,ELEM,0,COUNT !得到所選單元的總單元數
ROWR=NelemR1/10 !以每行10個數據計算得到的行數(實數)
ROWI=NINT(ROWR) !取整后的行數(接近ROWR的整數)
*IF,ROWI,GE,ROWR,THEN
ROW=ROWI
*ELSEIF,ROWI,LT,ROWR
ROW=ROWI+1
*ENDIF
*IF,ROW,EQ,0,THEN
*MSG,NOTE
ERROR......
*ENDIF
*IF,ROW,EQ,1,:10
*DIM,NEro,ARRAY,ROW-1,10
*DO,I,1,ROW-1,1
*DO,J,1,10
NEro(I,J)=ElR1
ElR1=ELNEXT(ElR1) !讀出下一個被選單元編號
*ENDDO
*ENDDO
*VWRITE,NEro(1,1),NEro(1,2),NEro(1,3),NEro(1,4),NEro(1,5),NEro(1,6),NEro(1,7),NEro(1,8),NEro(1,9),NEro(1,10)
(9(F6.0,TL1),F6.0,TL1,' C')
:10
NelemR1s=NelemR1-10*(ROW-1)
*DIM,NEros,ARRAY,1,NelemR1s
*DO,I,1,NelemR1s,1
NEros(1,I)=ElR1
ElR1=ELNEXT(ElR1)
*ENDDO
*IF,NelemR1s,EQ,1,THEN
*VWRITE,NEros(1,1)
(F6.0,TL1,' ')
*ELSEIF,NelemR1s,EQ,2
*VWRITE,NEros(1,1),NEros(1,2)
(2(F6.0,TL1),' ')
*ELSEIF,NelemR1s,EQ,3
*VWRITE,NEros(1,1),NEros(1,2),NEros(1,3)
(3(F6.0,TL1),' ')
*ELSEIF,NelemR1s,EQ,4
*VWRITE,NEros(1,1),NEros(1,2),NEros(1,3),NEros(1,4)
(4(F6.0,TL1),' ')
*ELSEIF,NelemR1s,EQ,5
*VWRITE,NEros(1,1),NEros(1,2),NEros(1,3),NEros(1,4),NEros(1,5)
(5(F6.0,TL1),' ')
*ELSEIF,NelemR1s,EQ,6
*VWRITE,NEros(1,1),NEros(1,2),NEros(1,3),NEros(1,4),NEros(1,5),NEros(1,6)
(6(F6.0,TL1),' ')
*ELSEIF,NelemR1s,EQ,7
*VWRITE,NEros(1,1),NEros(1,2),NEros(1,3),NEros(1,4),NEros(1,5),NEros(1,6),NEros(1,7)
(7(F6.0,TL1),' ')
*ELSEIF,NelemR1s,EQ,8
*VWRITE,NEros(1,1),NEros(1,2),NEros(1,3),NEros(1,4),NEros(1,5),NEros(1,6),NEros(1,7),NEros(1,8)
(8(F6.0,TL1),' ')
*ELSEIF,NelemR1s,EQ,9
*VWRITE,NEros(1,1),NEros(1,2),NEros(1,3),NEros(1,4),NEros(1,5),NEros(1,6),NEros(1,7),NEros(1,8),NEros(1,9)
(9(F6.0,TL1),' ')
*ELSEIF,NelemR1s,EQ,10
*VWRITE,NEros(1,1),NEros(1,2),NEros(1,3),NEros(1,4),NEros(1,5),NEros(1,6),NEros(1,7),NEros(1,8),NEros(1,9),NEros(1,10)
(10(F6.0,TL1),' ')
*ELSE
*MSG,note
we are stopped......
*ENDIF
*VWRITE
('geometry') !定義幾何數據
*VWRITE
() !空白行,不描述
*VWRITE,2*t,0,0,0,0,0,0
(F10.5,6F10.5) !第1~10給定材料的厚度,11格以后的參數請參閱Volumn C
ESEL,S,REAL,,2
*GET,ElR2,ELEM,0,NUM,MIN !所選單元的最小編號
*GET,NelemR2,ELEM,0,COUNT !得到所選單元的總單元數
ROWR2=NelemR2/10 !以每行10個數據計算得到的行數(實數)
ROWI2=NINT(ROWR2) !取整后的行數(接近ROWR的整數)
*IF,ROWI2,GE,ROWR2,THEN
ROW2=ROWI2
*ELSEIF,ROWI2,LT,ROWR2
ROW2=ROWI2+1
*ENDIF
*IF,ROW2,EQ,0,THEN
*MSG,NOTE
ERROR......
*ENDIF
*IF,ROW2,EQ,1,:20
*DIM,NErt,ARRAY,ROW2-1,10
*DO,I,1,ROW2-1,1
*DO,J,1,10
NErt(I,J)=ElR2
ElR2=ELNEXT(ElR2) !讀出下一個被選單元編號
*ENDDO
*ENDDO
*VWRITE,NErt(1,1),NErt(1,2),NErt(1,3),NErt(1,4),NErt(1,5),NErt(1,6),NErt(1,7),NErt(1,8),NErt(1,9),NErt(1,10)
(9(F6.0,TL1),F6.0,TL1,' C')
:20
NelemR2s=NelemR2-10*(ROW2-1)
*DIM,NErts,ARRAY,1,NelemR2s
*DO,I,1,NelemR2s,1
NErts(1,I)=ElR2
ElR2=ELNEXT(ElR2)
*ENDDO
*IF,NelemR2s,EQ,1,THEN
*VWRITE,NErts(1,1)
(F6.0,TL1,' ')
*ELSEIF,NelemR2s,EQ,2
*VWRITE,NErts(1,1),NErts(1,2)
(2(F6.0,TL1),' ')
*ELSEIF,NelemR2s,EQ,3
*VWRITE,NErts(1,1),NErts(1,2),NErts(1,3)
(3(F6.0,TL1),' ')
*ELSEIF,NelemR2s,EQ,4
*VWRITE,NErts(1,1),NErts(1,2),NErts(1,3),NErts(1,4)
(4(F6.0,TL1),' ')
*ELSEIF,NelemR2s,EQ,5
*VWRITE,NErts(1,1),NErts(1,2),NErts(1,3),NErts(1,4),NErts(1,5)
(5(F6.0,TL1),' ')
*ELSEIF,NelemR2s,EQ,6
*VWRITE,NErts(1,1),NErts(1,2),NErts(1,3),NErts(1,4),NErts(1,5),NErts(1,6)
(6(F6.0,TL1),' ')
*ELSEIF,NelemR2s,EQ,7
*VWRITE,NErts(1,1),NErts(1,2),NErts(1,3),NErts(1,4),NErts(1,5),NErts(1,6),NErts(1,7)
(7(F6.0,TL1),' ')
*ELSEIF,NelemR2s,EQ,8
*VWRITE,NErts(1,1),NErts(1,2),NErts(1,3),NErts(1,4),NErts(1,5),NErts(1,6),NErts(1,7),NErts(1,8)
(8(F6.0,TL1),' ')
*ELSEIF,NelemR2s,EQ,9
*VWRITE,NErts(1,1),NErts(1,2),NErts(1,3),NErts(1,4),NErts(1,5),NErts(1,6),NErts(1,7),NErts(1,8),NErts(1,9)
(9(F6.0,TL1),' ')
*ELSEIF,NelemR2s,EQ,10
*VWRITE,NErts(1,1),NErts(1,2),NErts(1,3),NErts(1,4),NErts(1,5),NErts(1,6),NErts(1,7),NErts(1,8),NErts(1,9),NErts(1,10)
(10(F6.0,TL1),' ')
*ELSE
*MSG,note
we are stopped......
*ENDIF
*VWRITE
('FIXED DISP') !固定的邊界條件
*VWRITE
() !空白行,不描述
*VWRITE,0
(F10.4) !相關自由度位移量
*VWRITE,2
(F6.0,TL1,' ') !相關自由度標號,1表示第一個自由度,2表示第二個自由度,其余依此類推.至於第一個自由度的位移量有多少,那就得看第三小card中第一組數據的量是多少,在這個例子中第2個自由度的位移量是零.
NSEL,S,LOC,Y,-(shu-1)*(h+l*sin(theta))*2-(h+l*sin(theta))+h/2 !選擇你要施加邊界條件的節點
!NSEL,A,LOC,..
*GET,Ndbc,NODE,0,NUM,MIN !所選節點的最小編號
*GET,Nntol,NODE,0,COUNT !得到所選節點的總節點數
ROWNR=Nntol/10 !以每行10個數據計算得到的行數(實數)
ROWNI=NINT(ROWNR) !取整后的行數(接近ROWR的整數)
*IF,ROWNI,GE,ROWNR,THEN
ROWN=ROWNI
*ELSEIF,ROWNI,LT,ROWNR
ROWN=ROWNI+1
*ENDIF
*IF,ROWN,EQ,0,THEN
*MSG,NOTE
ERROR......
*ENDIF
*IF,ROWN,EQ,1,:30
*DO,I,1,ROWN-1,1
Ndbc1=Ndbc
Ndbc2=NDNEXT(Ndbc1)
Ndbc3=NDNEXT(Ndbc2)
Ndbc4=NDNEXT(Ndbc3)
Ndbc5=NDNEXT(Ndbc4)
Ndbc6=NDNEXT(Ndbc5)
Ndbc7=NDNEXT(Ndbc6)
Ndbc8=NDNEXT(Ndbc7)
Ndbc9=NDNEXT(Ndbc8)
Ndbc10=NDNEXT(Ndbc9)
*VWRITE,chrval(Ndbc1),chrval(Ndbc2),chrval(Ndbc3),chrval(Ndbc4),chrval(Ndbc5),chrval(Ndbc6),chrval(Ndbc7),chrval(Ndbc8),chrval(Ndbc9),chrval(Ndbc10)
(10A5,' C')
Ndbc=NDNEXT(Ndbc10)
*ENDDO
:30
Nntols=Nntol-10*(ROWN-1)
*DIM,Ndts,ARRAY,1,Nntols
*DO,I,1,Nntols,1
Ndts(1,I)=Ndbc
Ndbc=NDNEXT(Ndbc)
*ENDDO
*IF,Nntols,EQ,1,THEN
*VWRITE,chrval(Ndts(1,1))
(A5)
*ELSEIF,Nntols,EQ,2
*VWRITE,chrval(Ndts(1,1)),chrval(Ndts(1,2))
(2A5)
*ELSEIF,Nntols,EQ,3
*VWRITE,chrval(Ndts(1,1)),chrval(Ndts(1,2)),chrval(Ndts(1,3))
(3A5)
*ELSEIF,Nntols,EQ,4
*VWRITE,chrval(Ndts(1,1)),chrval(Ndts(1,2)),chrval(Ndts(1,3)),chrval(Ndts(1,4))
(4A5)
*ELSEIF,Nntols,EQ,5
*VWRITE,chrval(Ndts(1,1)),chrval(Ndts(1,2)),chrval(Ndts(1,3)),chrval(Ndts(1,4)),chrval(Ndts(1,5))
(5A5)
*ELSEIF,Nntols,EQ,6
*VWRITE,chrval(Ndts(1,1)),chrval(Ndts(1,2)),chrval(Ndts(1,3)),chrval(Ndts(1,4)),chrval(Ndts(1,5)),chrval(Ndts(1,6))
(6A5)
*ELSEIF,Nntols,EQ,7
*VWRITE,chrval(Ndts(1,1)),chrval(Ndts(1,2)),chrval(Ndts(1,3)),chrval(Ndts(1,4)),chrval(Ndts(1,5)),chrval(Ndts(1,6)),chrval(Ndts(1,7))
(7A5)
*ELSEIF,Nntols,EQ,8
*VWRITE,chrval(Ndts(1,1)),chrval(Ndts(1,2)),chrval(Ndts(1,3)),chrval(Ndts(1,4)),chrval(Ndts(1,5)),chrval(Ndts(1,6)),chrval(Ndts(1,7)),chrval(Ndts(1,8))
(8A5)
*ELSEIF,Nntols,EQ,9
*VWRITE,chrval(Ndts(1,1)),chrval(Ndts(1,2)),chrval(Ndts(1,3)),chrval(Ndts(1,4)),chrval(Ndts(1,5)),chrval(Ndts(1,6)),chrval(Ndts(1,7)),chrval(Ndts(1,8)),chrval(Ndts(1,9))
(9A5)
*ELSEIF,Nntols,EQ,10
*VWRITE,chrval(Ndts(1,1)),chrval(Ndts(1,2)),chrval(Ndts(1,3)),chrval(Ndts(1,4)),chrval(Ndts(1,5)),chrval(Ndts(1,6)),chrval(Ndts(1,7)),chrval(Ndts(1,8)),chrval(Ndts(1,9)),chrval(Ndts(1,10))
(10A5)
*ELSE
*MSG,note
we are stopped......
*ENDIF
*VWRITE
('point load') !施力的條件
*VWRITE
()
*VWRITE,0,F,0,0,0,0
(6E10.4)
NSEL,S,LOC,Y,h/2+l*sin(theta)
!NSEL,A,LOC...
*GET,Ndbc,NODE,0,NUM,MIN !所選節點的最小編號
*GET,Nntol,NODE,0,COUNT !得到所選節點的總節點數
ROWNR=Nntol/10 !以每行10個數據計算得到的行數(實數)
ROWNI=NINT(ROWNR) !取整后的行數(接近ROWR的整數)
*IF,ROWNI,GE,ROWNR,THEN
ROWN=ROWNI
*ELSEIF,ROWNI,LT,ROWNR
ROWN=ROWNI+1
*ENDIF
*IF,ROWN,EQ,0,THEN
*MSG,NOTE
ERROR......
*ENDIF
*IF,ROWN,EQ,1,:40
*DO,I,1,ROWN-1,1
Ndbc1=Ndbc
Ndbc2=NDNEXT(Ndbc1)
Ndbc3=NDNEXT(Ndbc2)
Ndbc4=NDNEXT(Ndbc3)
Ndbc5=NDNEXT(Ndbc4)
Ndbc6=NDNEXT(Ndbc5)
Ndbc7=NDNEXT(Ndbc6)
Ndbc8=NDNEXT(Ndbc7)
Ndbc9=NDNEXT(Ndbc8)
Ndbc10=NDNEXT(Ndbc9)
*VWRITE,chrval(Ndbc1),chrval(Ndbc2),chrval(Ndbc3),chrval(Ndbc4),chrval(Ndbc5),chrval(Ndbc6),chrval(Ndbc7),chrval(Ndbc8),chrval(Ndbc9),chrval(Ndbc10)
(10A5,' C')
Ndbc=NDNEXT(Ndbc10)
*ENDDO
:40
Nntols=Nntol-10*(ROWN-1)
*DIM,Ndpls,ARRAY,1,Nntols
*DO,I,1,Nntols,1
Ndpls(1,I)=Ndbc
Ndbc=NDNEXT(Ndbc)
*ENDDO
*IF,Nntols,EQ,1,THEN
*VWRITE,chrval(Ndpls(1,1))
(A5)
*ELSEIF,Nntols,EQ,2
*VWRITE,chrval(Ndpls(1,1)),chrval(Ndpls(1,2))
(2A5)
*ELSEIF,Nntols,EQ,3
*VWRITE,chrval(Ndpls(1,1)),chrval(Ndpls(1,2)),chrval(Ndpls(1,3))
(3A5)
*ELSEIF,Nntols,EQ,4
*VWRITE,chrval(Ndpls(1,1)),chrval(Ndpls(1,2)),chrval(Ndpls(1,3)),chrval(Ndpls(1,4))
(4A5)
*ELSEIF,Nntols,EQ,5
*VWRITE,chrval(Ndpls(1,1)),chrval(Ndpls(1,2)),chrval(Ndpls(1,3)),chrval(Ndpls(1,4)),chrval(Ndpls(1,5))
(5A5)
*ELSEIF,Nntols,EQ,6
*VWRITE,chrval(Ndpls(1,1)),chrval(Ndpls(1,2)),chrval(Ndpls(1,3)),chrval(Ndpls(1,4)),chrval(Ndpls(1,5)),chrval(Ndpls(1,6))
(6A5)
*ELSEIF,Nntols,EQ,7
*VWRITE,chrval(Ndpls(1,1)),chrval(Ndpls(1,2)),chrval(Ndpls(1,3)),chrval(Ndpls(1,4)),chrval(Ndpls(1,5)),chrval(Ndpls(1,6)),chrval(Ndpls(1,7))
(7A5)
*ELSEIF,Nntols,EQ,8
*VWRITE,chrval(Ndpls(1,1)),chrval(Ndpls(1,2)),chrval(Ndpls(1,3)),chrval(Ndpls(1,4)),chrval(Ndpls(1,5)),chrval(Ndpls(1,6)),chrval(Ndpls(1,7)),chrval(Ndpls(1,8))
(8A5)
*ELSEIF,Nntols,EQ,9
*VWRITE,chrval(Ndpls(1,1)),chrval(Ndpls(1,2)),chrval(Ndpls(1,3)),chrval(Ndpls(1,4)),chrval(Ndpls(1,5)),chrval(Ndpls(1,6)),chrval(Ndpls(1,7)),chrval(Ndpls(1,8)),chrval(Ndpls(1,9))
(9A5)
*ELSEIF,Nntols,EQ,10
*VWRITE,chrval(Ndpls(1,1)),chrval(Ndpls(1,2)),chrval(Ndpls(1,3)),chrval(Ndpls(1,4)),chrval(Ndpls(1,5)),chrval(Ndpls(1,6)),chrval(Ndpls(1,7)),chrval(Ndpls(1,8)),chrval(Ndpls(1,9)),chrval(Ndpls(1,10))
(10A5)
*ELSE
*MSG,note
we are stopped......
*ENDIF
*VWRITE
('no print') !列印方式
*VWRITE
('post') !輸出的訊息
*VWRITE,0,16,17,0,0,19,20,0,1,0,0
(11(f6.0,tl1),' ')
*VWRITE
('end option') !Model Definition Card 結束用語
*VWRITE
('$..............................................') !分隔符
*VWRITE
('$============ Model Definition Card over===========') !分隔符
*CFCLOSE




PS:該帖于2006-7-28 18:08:27被mark編輯過。
登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

9