fortran呼叫ansys做桁架結構優化例子

2021-03-04 03:03:00 字數 3345 閱讀 8604

ansys命令流部分:

/clear

b=1000 !基本尺寸

!進入prep7並建模

/prep7

*dim,a,,3,1!定義乙個3*1的陣列

*vread,a,e: \project\trussdata_1,txt,,ijk,3,1 !ijk表示讀入的順序

(f7.2)

a1=a(1,1)

a2=a(2,1)

a3=a(3,1)

*cfopen,e: \project\trussdata_3,txt

*vwrite,a1,a2,a3

(f7.2,/f7.2,/f7.2)

*cfclos

et,1,link1 !二維杆單元

r,1,a1 !以引數形式的實參

r,2,a2

r,3,a3

mp,ex,1,2.1e6 !楊氏模量

n,1,-b,0,0 !定義結點

n,2,0,0,0

n,3,b,0,0

n,4,0,-b,0

e,1,4 !定義單元

real,2

e,2,4

real,3

e,3,4

finish

!!進入求解器,定義載荷和求解

/solu

d,1,all,0,,3 !結點ux=uy=0

f,4,fx,200000 !結點4上的x方向載荷分量(工況1)

f,4,fy,-200000 !結點4上的y方向載荷分量(工況2)

solve

finish

!進入post1並讀出狀態變數數值

/post1

set,last

etable,evol,volu !將每個單元的體積放入etable

ssum !將單元**內資料求和

*get,vtot,ssum,,item,evol!vtot=總體積

rho=2.85e-4

wt=rho*vtot !計算總體積

etable,sig,ls,1 !將軸向應力放入etable

*get,sig1,elem,1,etab,sig!sig1=第乙個單元的軸向應力

*get,sig2,elem,2,etab,sig!sig2=第二個單元的軸向應力

sig1=abs(sig1) !計算軸向應力的絕對值

sig2=abs(sig2)

!/eshape,2 !以實體單元模式顯示殼單元

!/view,1,1,1,1 !軸測檢視

!eplot   !畫單元

finish

*cfopen,e:\project\trussdata_2,txt

*vwrite,sig1,sig2,wt

(f7.2,/f7.2,/f7.2)

*cfclos

fortran程式部分:

program truss

use dflib

implicit none

character(len=20) :: filename1="trussdata_2.txt"

character(len=20) :: filename2="trussdata_1.txt"

real,parameter :: e=0.01!e為計算精度

real,parameter :: xu=400 !xu為許用應力

integer :: fileid,k

integer i

logical(4) result

real u1(50),u2(50),ww(50),umax !u1,u2為應力比,umax為最大應力

real sig1,sig2,w,ap!sig1為杆1的最大應力,sig2為杆2的最大應力

real x1(50),x2(50),xx1,xx2!x為杆截面面積

i=1k=1

x1(1)=707!定義杆的初始值

x2(1)=707

ap=10

do while( ap>=e )

!呼叫ansys做結構分析

result=system**(' c:\program files\ansys inc\v110\ansys\bin\intel\ansys110 -b -p &

& ane3fl -i e: \project\truss.txt -o e:\project\trussanswer.txt')

fileid=10

open(fileid,file=filename1)!從ansys寫出的檔案中讀入資料(應力和求得的重量)

read(fileid,*) sig1,sig2,w

close(fileid)

ww(k)=w

u1(i)=sig1/xu

u2(i)=sig2/xu

if ( u1(i)>=u2(i) ) then!判斷最大應力

umax=u1(i)

else

umax=u2(i)

end if

!射線步

x1(i+1)=umax*x1(i)

x2(i+1)=umax*x2(i)

u1(i+1)=u1(i)/umax!求出新的應力比

u2(i+1)=u2(i)/umax

!調整步

x1(i+2)=u1(i+1)*x1(i+1)

x2(i+2)=u2(i+1)*x2(i+1)

xx1=x1(i+2)/(500.0*1.414)

xx2=x2(i+2)/(500.0*1.414)

fileid=20

open(fileid,file=filename2)!

write(fileid,"(a3,f7.2,/a3,f7.2,/a3,f7.2)") "a1=",x1(i+2),"a2=",x2(i+2),"a3=",x1(i+2)

close(fileid)

if ( i>=3) then

if ( ww(k)-ww(k-1)>0 ) then

write(*,"(a3,f7.2,/a3,f7.2,/a3,f7.2)") "a1=",x1(i),"a2=",x2(i),"a3=",x1(i)

write(*,*) ww(k),ww(k-1)

pause

end if

end if

i=i+2

if ( i>=5 ) then !ap為精度控制

ap=sqrt((x1(i+1)-x1(i-1))**2+(x2(i+1)-x2(i-1))**2)

end if

k=k+1

end do

stopend

FORTRAN學習報告

上機前預備知識 1 fortran控制格式輸入語句 read 輸入表列 read 輸入表列 2 fortran控制格式輸出語句 write 輸出表列 write 輸出表列 3 符號 gt.大於 ge.大於或等於 lt.小於 le.小於或等於 eq.等於ne.不等於 4 邏輯表示式 and.邏輯與 o...

fortran資料格式

fortran資料輸入輸出格式 適用於ansys等資料格式設定 2012 08 29 00 03 10 格式化輸出的控制字元非常的豐富,但常用的並不多,一般說來 i f e a x 是最常使用的幾個格式,最好把它們都記下來。1.iw m 以w個字元的寬度來輸出整數,至少輸出m個數字。如 write ...

《程式語言 FORTRAN 》課程簡介

課程 程式語言 fortran programming language fortran 編號 20411807 學時 64 16 課外 學分 4 內容提要 程式語言 fortran 課是一門專業必修課和學科基礎課,也是計算機基礎教學課程體系中一門重要的計算機技術基礎課程,該課程主要介紹程式設計基本...