یکشنبه, 06 بهمن 1398 14:58

تحلیل خرپا دوبعدی به روش اجزاء محدود در متلب

نوشته شده توسط

تحلیل خرپا دوبعدی به روش اجزاء محدود در متلب

در این بخش به تحلیل خرپای دوبعدی شکل 1 با استفاده از یک برنامه کامپیوتری که در محیط نرم افزار MATLAB نوشته و اجرا می­شود، پرداخته خواهد شد. مقصود از نوشتن برنامه کامپیوتری، به کارگیری آن برای محاسبه مقادیر گره ­ای جابجایی و نیروهای تکیه­ گاهی سپس محاسبه نیرو، تنش و کرنش در تمامی اعضای خرپا دوبعدی می­باشد. در این برنامه بخش­ های مختلفی وجود دارد. این بخش­ها شامل بدنه اصلی برنامه، فایل­ های ورودی، توابع و خروجی­ ها می باشند که در ادامه به آن­ها پرداخته خواهد شد. لازم به ذکر است پروژه متلب ذکر شده در این محتوا توسط تیم حامی پیپر انجام شده است.

1-3- بدنه اصلی برنامه:

بدنه اصلی این برنامه، «Mainbody» نام دارد و تابع فرمان برنامه می­باشد. وظیفه مدیریت کلیه وضایف برنامه، برعهده این قسمت از برنامه می ­باشد. کلیه توابع موجود در این برنامه توسط این بخش فراخوانی می­شوند و ورودی­ها و خروجی­های این توابع در این قسمت ثبت و فراخوانی می­شوند. در این برنامه موقعیت گره­ها، جدول اطلاعات المانی و خواص مکانیکی اعضای خرپا و شرایط مرزی مسئله به عنوان ورودی به صورت فایل .txt وجود دارند و از توابع مختلفی برای محاسبه طول المان­ها، محاسبه زاویه المان­ها، محاسبه ماتریس سفتی کلی، اعمال شرایط مرزی و محاسبه نیروهای تکیه گاهی، نیروهای المانی، تنش و کرنش المان­ها استفاده شده است. روند کلی  برنامه در روندنمای شکل 9 قابل مشاهده است.

2-3- فایل­های ورودی:

از 4 فایل به عنوان ورودی به فرمت.txt  استفاده شده است. این فایل­ها به عنوان ورودی مورد استفاده قرار می­گیرند و داده­های مورد نیاز اولیه نظیر شماره گره­ها، شماره المان­ها، مشخصات المان­ها و شرایط مرزی مسئله برای خرپای شکل 1 از این فایل­ها استخراج می­شوند.

1-2-3- فایل Nodes Positions.txt: در این فایل شماره گره­ها و موقعیت آن­ها در سه ستون (شکل10) آورده شده است. ستون اول شماره گره، ستون دوم موقعیت در راستای محور X و ستون سوم موقعیت در راستای محور Y می باشند. داده­های این فایل در متغیر Nodes در بدنه اصلی برنامه ذخیره می­شوند.

2-2-3- فایل Element Property And connectivity Data.txt: در این فایل شماره المان­ها به همراه شماره گره­هایی که المان بین آن­ها قرار دارد در کنار مساحت سطح مقطع و مدول یانگ اعضای خرپا آورده شده است (شکل 11). ستون اول شماره المان، ستون دوم و سوم شماره گره­های المان، ستون چهارم مدول یانگ و ستون پنجم مساحت مقطع المان می­باشد. داده­های این فایل در متغیر Elem در بدنه اصلی برنامه ذخیره می­شوند.

3-2-3- فایل BC_Force.txt: در این فایل شرایط مرزی از نوع نیرو مشخص می­شود و شامل سه ستون است (شکل 12). ستون اول مربوط به شماره گره، ستون دوم مقدار نیرو در راستای X و ستون سوم مقدار نیرو در راستای Y می­باشد. داده­های این فایل در متغیر BCF در بدنه اصلی برنامه ذخیره می­شوند.

9 Min

شکل 9 روند کلی برنامهMainbody

10 Min

شکل 10 فایل ورودی Nodes Positions.txt

11 Minشکل 11 فایل ورودی Element Property And connectivity Data.txt

12 Min

شکل 12 فایل ورودی BC_Force.txt

3-2-4- فایل BC_Displacement.txt: در این فایل شرایط مرزی از نوع جابجایی مشخص می­شود و شامل سه ستون است (شکل 13). ستون اول مربوط به شماره گره، ستون دوم مقدار جابجایی در راستای X و ستون سوم مقدار جابجایی در راستای Y می­باشد. برای گره­هایی که به آن­ها نیرو وارد می­شود عدد 99999 به عنوان یک نماد در ستون­های دوم و سوم قرار داده شده است. داده­های این فایل در متغیر BCD در بدنه برنامه ذخیره می­شوند.

13 Minشکل 13 فایل ورودی BC_Displacement.txt

3-3- توابع استفاده شده در برنامه:        

در این برنامه برای محاسبه پارامترهای مختلف از  برخی توابع استفاده شده است. این کار هم باعث درک راحت­تر روند برنامه و هم زیباتر شدن متن برنامه می­شود.

1-3-3- تابع محاسبه زاویه المان­ها:

در این برنامه با استفاده از تابع Alfa، زاویه المان­ها محاسبه می­شود. ورودی­های این تابع اطلاعات ورودی گره­ها (Nodes)، تعداد المان­ها (e) و اطلاعات ورودی المان­ها (Elem) می­باشند. متن این تابع در ادامه مشاهده می­شود. خروجی این تابع در متغیر ElemAlfa ذخیره می­شود.

شاید این مطالب نیز برای شما جذاب باشد، پیشنهاد میکنیم به این صفحات نیز سر بزنید:

مدلسازی خرپای دو بعدی در نرم افزار آباکوس

functionElemAlfa= Alfa(e, Elem, Nodes)
ElemAlfa=zeros(e,1);%The angle of elements
for k=1:e
i= Elem(k,2);  %node i of element e
 j= Elem(k,3);  %node j of element e
ElemAlfa(k,1)=atand((Nodes(j,3)-Nodes(i,3))/(Nodes(j,2)-Nodes(i,2))); 
%  arctan((yj- yi)/(xj- xi))
end

2-3-3- تابع محاسبه طول المان­ها:

در این برنامه با استفاده از تابع ElemLength، طول المان­ها محاسبه می­شود. ورودی­های این تابع تعداد المان­ها (e)، اطلاعات ورودی گره­ها (Nodes) و اطلاعات ورودی المان­ها (Elem) می­باشند. متن این تابع در ادامه مشاهده می­شود. خروجی این تابع در متغیر L ذخیره می شود.

function L=ElemLength(e,Nodes,Elem) 

L=zeros(e,1);

for m=1:e

i= Elem(m,2); %node i of element e
    j= Elem(m,3); %node j of element e

L(m,1)=sqrt((Nodes(j,3)-Nodes(i,3))^2+(Nodes(j,2)-Nodes(i,2))^2); 
end

3-3-3- تابع استخراج ماتریس سفتی کل:

در این برنامه با استفاده از تابع ElemStiffAssamblage، ابتدا از رابطه 8 ماتریس سختی المانی در مختصات محلی (KLoc) استخراج می­شود.  سپس با استفاده از رابطه 18 ماتریس سختی المانی در مختصات کلی(KElem) محاسبه و در نهایت در ماتریس سختی کل (KTotal) مونتاژ می­شود. این فرآیند برای تمام المان­ها تکرار شده و ماتریس سختی کلی تشکیل می­شود.  ورودی­های این تابع تعداد المان­ها (e)، تعداد گره­ها (n)، اطلاعات ورودی المان­ها (Elem)، زاویه المان­ها (ElemAlfa) و طول المان­ها (L) می­باشند. متن این تابع در ادامه مشاهده می­شود. خروجی این تابع در متغیر KTotal ذخیره می­شود.

functionKTotal= ElemStiffAssamblage(n,e,Elem,ElemAlfa,L)
KTotal= zeros(2*n,2*n)
for m=1:e;    
kLoc=((Elem(m,4)*Elem(m,5))/L(m))*[1 0 -1 0; 0 0 0 0; -1 0 1 0; 0 0 0 0];

s= sind(ElemAlfa(m));
c= cosd(ElemAlfa(m));    
T= [c s 0 0; -s c 0 0; 0 0 c s; 0 0 -s c]; %rotation tensor
KElem= inv(T)*kloc*T;

i= Elem(m,2);
j= Elem(m,3);

KTotal(2*i-1:2*i, 2*i-1:2*i)= KTotal(2*i-1:2*i, 2*i-1:2*i)+ kelm(1:2,1:2);
KTotal(2*i-1:2*i, 2*j-1:2*j)= KTotal(2*i-1:2*i, 2*j-1:2*j)+ kelm(1:2,3:4);
KTotal(2*j-1:2*j, 2*i-1:2*i)= KTotal(2*j-1:2*j, 2*i-1:2*i)+ kelm(3:4,1:2);
KTotal(2*j-1:2*j, 2*j-1:2*j)= KTotal(2*j-1:2*j, 2*j-1:2*j)+ kelm(3:4,3:4);
% stiffness matrix assamblage
end
end

3-3-4- تابع اعمال شرایط مرزی:

برای اعمال شرایط مرزی در این برنامه از دو تابع ForceBoundary و KBoundary استفاده شده است. این دو تابع شرایط مرزی مسئله را طبق توضیحات ارائه شده در قسمت 2-5 اعمال می­کنند. ForceBoundary شرایط مرزی مسئله را بر روی بردار نیرو و KBoundary شرایط مرزی مسئله را بر روی ماتریس سختی اعمال می­کند.

ورودی­های تابع ForceBoundary، تعداد گره­ها (n)، ماتریس سختی کل(KTotal)، اطلاعات شرایط مرزیجابجایی و نیرو (BCD و BCF)، تعداد گره­هایی که شرایط مرزی جابجایی دارند (NDBC) و تعداد گره­هایی که شرط مرزی نیرو دارند (NFBC) می­باشند. متن تابع ForceBoundary در ادامه آورده شده است.

function F= ForceBoundary(n,BCD,BCF,NDBC,NFBC,KTotal)

F=zeros(2*n,1);

fori=1:NDBC; 
if BCD(i,2)~= 99999;
for k= 1:2*n;
           F(k)= F(k)- KTotal(k,2*BCD(i,1)-1)*BCD(i,2);        
end
end

if BCD(i,3)~= 99999;
for k= 1:2*n;
           F(k)= F(k)- KTotal(k,2*BCD(i,1))*BCD(i,3);        
end
end
end

if NFBC~=0; 
fori=1:NFBC;
     F(2*BCF(i,1)-1)= F(2*BCF(i,1)-1)+ BCF(i,2);
     F(2*BCF(i,1))= F(2*BCF(i,1))+ BCF(i,3);
end
end

fori=1:NDBC;
if BCD(i,2)~= 99999;
     F(2*BCD(i,1)-1)= BCD(i,2);
end

if BCD(i,3)~= 99999;
     F(2*BCD(i,1))= BCD(i,3);
end
end

ورودی­های تابع KBoundary، اطلاعات شرایط مرزی جابجایی (BCD)، تعداد گره­هایی که شرایط مرزی جابجایی دارند (NDBC)) و ماتریس سختی کل (KTotal) می­باشند. متن تابع KBoundary در ادامه مشاهده می­شود.

function K= KBoundary(KTotal,BCD,NDBC)

K_Temp= KTotal;

fori= 1:NDBC;
if BCD(i,2)~= 99999;    
K_Temp(2*BCD(i,1)-1,:)= 0;
K_Temp(:,2*BCD(i,1)-1)= 0;
K_Temp(2*BCD(i,1)-1,2*BCD(i,1)-1)= 1;
end
if BCD(i,3)~= 99999;
K_Temp(2*BCD(i,1),:)= 0;
K_Temp(:,2*BCD(i,1))= 0;
K_Temp(2*BCD(i,1),2*BCD(i,1))= 1;
end
end
K= K_Temp;

4-3- مرحله پس پردازش و محاسبه سایر خروجی­های مورد نیاز:

در این مرحله از برنامه با استفاده از مقادیر گره­ای جابجایی­ها، سایر خروجی­های مورد نیاز مسئله محاسبه می­شوند.

1-4-3- تابع محاسبه تنش:

با استفاده از تابع ElemStress، تنش­های المان­های خرپا محاسبه می­شوند.

function Stress= ElemStress(e,a,ElemAlfa,L,Elem)

Stress= zeros(e,1);

for k= 1:e; 
   s= sind(ElemAlfa(k));
   c= cosd(ElemAlfa(k));
  T= [c s 0 0; -s c 0 0; 0 0 c s; 0 0 -s c];  

i= Elem(k,2);
   j= Elem(k,3);

xlocal= T* [a(2*i-1:2*i); a(2*j-1:2*j)];
   % displacement in local coordinate.

   Stress(k)= (Elem(k,4)/L(k))* (xlocal(3)- xlocal(1));
end
;

2-4-3- تابع محاسبه کرنش:

با استفاده از تابع ElemStrain، کرنش­ها در المان­های خرپا محاسبه می­شوند.

function Strain=ElemStrain(e,a,ElemAlfa,L,Elem
Strain=zeros(e,1);
for m= 1:e;
   s= sind(ElemAlfa(m));
   c= cosd(ElemAlfa(m));
   T= [c s 0 0; -s c 0 0; 0 0 c s; 0 0 -s c];  

i= Elem(m,2);
   j= Elem(m,3);
xlocal= T* [a(2*i-1:2*i); a(2*j-1:2*j)];

   Strain(m)= (1/ L(m))* (xlocal(3)- xlocal(1));
End

3-4-3- تابع محاسبه نیروهای داخلی:

با استفاده از تابع ElemForce، نیروهای داخلی المان­های خرپا محاسبه می­ شوند.

function Force= ElemForce(e,a,alf,l,elm) 
Force=zeros(e,1); 
for m= 1:e;
   s= sind(alf(m));
   c= cosd(alf(m)); 
   T= [c s 0 0; -s c 0 0; 0 0 c s; 0 0 -s c];  

i= elm(m,2);
   j= elm(m,3);

xlocal= T* [a(2*i-1:2*i); a(2*j-1:2*j)]; 

   Force(m)= ((elm(m,4)* elm(m,5))/l(m))* (xlocal(3)- xlocal(1));
end

4-4-3- تابع محاسبه نیروهای تکیه­ گاهی:

با استفاده از تابع ReactionForce، نیروهای تکیه ­گاهی محاسبه می­شود.

functionReacForce= ReactionForce(n,NDBC,BCD,KTotal,a)
ReacForce= zeros(2*n,1);
fori= 1:NDBC;
if BCD(i,2)~= 99999;
ReacForce(2*BCD(i,1)-1)= (KTotal(2*BCD(i,1)-1,:)*a);
end
if BCD(i,3)~= 99999;
ReacForce(2*BCD(i,1))= (KTotal(2*BCD(i,1),:)*a);
end
end

5-3- نتایج تحلیل خرپای دوبعدی با استفاده از برنامه

دادده ­های ورودی مطابق بخش 3-2، برای خرپای شکل 14 وارد و برنامه Mainbody اجرا شده است. نتایج اجرای برنامه در ادامه گزارش شده است.

9 Min1

شکل 14 خرپای تحلیل شده به وسیله برنامه کامپیوتری

مقادیر گره ­ای جابجایی ­ها در دستگاه مختصات کلی در جدول 3 مشاهده می­ شوند.

J1 Min

در گره های 1 و 10 تکیه گاه ساده وجود دارد که هر دو درجه آزادی گره را مقید می کند بنابراین بدیهی است مقادیر جابجایی در گره 1 و 10 در جدول 3 صفر باشد. همانطور که در شکل 14 مشخص است، خرپا هم از نظر هندسی و هم از نظر بارگذاری متقارن است که این امر در جدول 3 نیز مشاهده می­ شود.

نیروهای تکیه­ گاهی در گره های 1 و 10 نیز محاسبه شده و نتیجه در جدول 5 گزارش شده است.

جدول 5 نیروهای تکیه­ گاهی حاصل از برنامه

J2 Min

مجموع نیروهای تکیه ­گاهی در راستای Y برابر با KN10 است که برابر است با نیروی خارجی وارد بر خرپا که نشان دهنده ارضاء شدن رابطه تعادل می­باشد.

سایر خروجی خواسته شده مانند تنش­ها، کرنش­ ها و نیروهای داخلی المان­ها محاسبه شده و در جدول 6 گزارش شده اند.

جدول 6 مقادیر تنش، کرنش و نیرو در المان ­ها حاصل از برنامه

J3 Min

همانطور که در جدول 6 ملاحظه می­ شود، تقارن مسئله در مقادیر تنش­ ها، کرنش ­ها و نیروهای داخلی  المان­ ها نیز قابل مشاهده است.

سفارش پروژه مشابه

درصورتیکه این پروژه دقیقا مطابق خواسته شما نمی باشد، با کلیک بر روی کلید زیر پروژه دلخواه خود را سفارش دهید.

ارتباط با ما

شعبه1: تهران، خ 17 شهریور (شعبه قدیم)
شعبه2: قم (بزودی)

https://Trustseal.eNamad.ir/logo.aspx?id=78157&Code=nGl6n4OUkOzasJ1k2dRo