آموزش اپنسیس OpenSees (رایگان + دانلود کد)

در این قسمت از آموزش اپنسیس (OpenSees) به بررسی نحوه مدلسازی قاب فولادی می‌­پردازیم. مشخصات تیر و ستون­‌ها، نحوه بارگذاری و کلیت مدل در شکل 1 نشان داده شده‌است. همانطور که در شکل مشخص است، قاب فولادی تحت یک بار گسترده 20kN/m در دهانه تیر و دو بار متمرکز 30kN در دو انتهای تیر قرار گرفته است. مشخصات فولاد مصرفی شامل مدول الاستیسیته E = 2e11 N/m2، مقاومت تسلیم فولاد Fy =345 MPa و ضریب سخت شوندگی کرنشی یک درصد (strain hardening ratio = 0.01) می­‌باشد.

در آنالیز اجزاء محدود، مدل مورد بررسی به اجزاء کوچکتری تقسیم می‌­شود که این جزء‌های کوچک عناصر محدود نامیده می­‌شوند. به عبارت دیگر زمانی که یک دامنه یا ناحیه هندسی مش‌­بندی می­‌شود، به عناصری گسسته (محدود) تجزیه می‌­شود. هر جزء توسط یک “عنصر(المان)” به جزء مجاور خود در “گره­‌ها” متصل می­‌شود. درواقع یک “گره” نقطه­‌ای در فضاست که با “مختصات” تعریف شده و دارای “درجات آزادی” در جهات مختلف است. هر درجه آزادی نیز با توجه به نقش گره در سازه دارای “شرایط مرزی” است. اصل مدلسازی در اپنسیس بر پایه مطالب مطرح شده طبق تحلیل اجزاء محدود است که در ادامه به آن می‌­پردازیم.

اولین گام در آموزش Opensees و شروع مدلسازی، شامل مشخص کردن یک دستگاه مختصات کلی برای مدل و همچنین تعیین سیستم اندازه‌­گیری است. توجه داشته باشید که دو پارامتر مطرح شده تا انتهای مدلسازی ثابت بوده و با توجه به فرض کاربر مشخص می­‌شود و خروجی­‌هایی که پس از تحلیل مدل بدست می­‌آید براساس فرض اولیه توسط کاربر است. در این آموزش اپنسیس واحدهای انتخابی طبق واحدهای سیستم SI انتخاب می‌شوند، یعنی: نیرو = نیوتن و طول = متر. موقعیت مختصات کلی نیز مطابق با مختصاتی است که در شکل 1 نشان داده شده‌است، یعنی جهت مثبت محور y به سمت بالا و جهت مثبت محور x به سمت راست قرار دارد. 

در گام بعدی با استفاده از دستور model، ابعاد و تعداد درجات آزادی مدل را مشخص می­‌کنیم.

model ('basic', '-ndm', ndm, '-ndf', ndf)
model BasicBuilder -ndm $ndm <-ndf $ndf>

در این دستور ndm، ابعاد مدل وndf، تعداد درجات آزادی در هر گره را تعیین می‌­کند. باتوجه به اینکه در این آموزش از اپنسیس، قاب دوبعدی،  با سه درجه آزادی در هر گره می­‌باشد، این دستور به صورت زیر کدنویسی می‌­شود:

model ('basic', '-ndm', 2, '-ndf', 3)

برای تعریف گره­‌ها ابتدا باید با توجه به مشخصات و ابعاد قاب فولادی مختصات آن­ها را تعیین کنیم. در این مدل، باتوجه به شکل 1، به چهار گره نیاز داریم که باید مختصات آن‌ها مشخص شوند. به منظور تعیین راحت­‌تر مختصات گره‌­ها ارتفاع و عرض قاب فولادی را مشخص می‌­کنیم:

H = 3m
L = 6 m

H و L به ترتیب بیانگر ارتفاع قاب و عرض دهانه است. دستور تعریف گره­‌ها node می­‌باشد که ورودی­‌های این دستور از قرار زیر است:

node(nodeTag, *crds)
node $nodeTag (ndm $coords) <-mass (ndf $massValues)>

در این دستور nodeTag شماره گره و *crds مختصات گره را نشان می­‌دهد. در این مثال مطابق با شکل 1 مختصات گره‌­ها بصورت زیر تعریف می­‌شود:

node (1, 0, 0)
node (2, 0, H)
node (3, L, 0)
node (4, L, H)

همانطور که می‌دانیم اثرات غیرخطی را در دو حالت می‌توان درنظر گرفت. در حالت اول اثر P-Δ بزرگ و یا به عبارتی رفتار غیرخطی هندسی را داریم. در این حالت مطابق با شکل 3، یک ارتباط غیرخطی بین نیروی P و تغییرشکل Δ برقرار است. بدین صورت که با افزایش نیروی P1 تغییر مکان Δ افزایش یافته و بنابراین لنگر ناشی از نیروی P2 نیز افزایش پیدا می­‌کند و همین افزایش لنگر سبب افزایش مجدد Δ می‌­شود که اصطلاحاً به این حالت اثر P-Δ یا لنگر ثانویه می­گویند. مورد بعدی رفتار غیرخطی متریال است. بدین صورت که هر متریال پس از گذر از ناحیه رفتار الاستیک، وارد شاخه‌­ای با سختی کمتر نسبت به سختی اولیه شده و رفتار آن از حالت خطی خارج می‌­شود. مانند رفتار فولاد که در بخش بعدی به آن پرداخته شده‌است. بنابراین در مرحله بعدی از آموزش OpenSees، برای پیش­برد مراحل ابتدا لازم است geomTransf که بیانگر نوع غیرخطی هندسی است را مشخص کنیم. در این آموزش نوع غیرخطی هندسی را از نوع Pdelta درنظر می­‌گیریم. بنابراین از دستور زیر استفاده می­‌کنیم:

geomTransf ('PDelta', transfTag)
geomTransf PDelta $transfTag <-jntOffset $dXi $dYi $dXj $dYj>

کدنویسی این دستور به صورت زیر انجام شده و تگ مربوط به آن برابر با یک درنظر گرفته می‌­شود:

transfTag = 1
geomTransf ('PDelta', transfTag)

در ادامه مدلسازی باید مشخص کنیم که جنس متریال المان­‌های سازه چیست، به طور مثال سازه ما از نوع فولادی یا بتنی است. باتوجه به اینکه در این قسمت از آموزش اپنسیس، هدف یادگیری مدلسازی قاب فولادی است، بنابراین از متریال فولادی نیز استفاده می­‌شود. از بین متریال‌­های فولادی مختلفی که در سایت اپنسیس ارائه شده‌است، متریال فولادی قاب را از نوع steel02 انتخاب می‌­کنیم که دستور آن به شرح زیر است:

uniaxialMaterial('Steel02', matTag, Fy, E0, b, *params, a1=a2*Fy/E0, a2=1.0, a3=a4*Fy/E0, a4=1.0, sigInit=0.0)
uniaxialMaterial Steel02 $matTag $Fy $E $b $R0 $cR1 $cR2 <$a1 $a2 $a3 $a4 $sigInit>

نمودار رفتاری این متریال مطابق با شکل 4 می­‌باشد.

این دستور علاوه بر شماره تگ، مقاومت تسلیم (Fy)، مدول الاستیسیته (E)، سخت شوندگی کرنشی (b) و پارامترهایی که انتقال رفتار فولاد از شاخه الاستیک به پلاستیک را کنترل می­‌کنند (R0, cR1, cR2) را نیز به عنوان ورودی از کاربر می‌­گیرد.

سخت شوندگی کرنشی یا پارامتر hardeningRatio نسبت سختی ثانویه به سختی اولیه است. مطابق با شکل 4، خط شماره یک سختی اولیه (شیب ناحیه الاستیک) و خط شماره دو (شیب نمودار در قسمت نرم شده) سختی ثانویه را نشان می­‌دهد. در این مثال این نسبت 0.01 درنظر گرفته شده‌است. یعنی اگر سختی اولیه فولاد Es = 2e11 N/m2 باشد، سختی ثانویه فولاد به میزان یک درصد این سختی است. همچنین مقادیر پیشنهادی لیست parameters، در سایت اپنسیس عنوان شده که می‌­توانند بصورت زیر تعریف شوند:

   R0 = 18; cR1 = 0.925; R2 = 0.15

درنهایت ورودی‌­های این دستور در این مثال به صورت زیر تعریف می‌­شوند:

steelMatTag = 1

Fy = 345e6 

Es = 2e11

hardeningRatio = 0.01

R0 = 18; cR1 = 0.925; R2 = 0.15

uniaxialMaterial('Steel02', steelMatTag, Fy, Es, hardeningRatio, R0, cR1, R2)

در ابتدا به منظور مدلسازی مقاطع تیر و ستون در اپنسیس از مقاطع فایبر (fiber section) استفاده می‌­کنیم. سپس به دستورات قسمت patch که برای مدلسازی انواع مقاطع مستطیلی، دایره‌­ای و … به کار می‌­رود مراجعه کرده و بدین منظور دستور زیر را به کار می­‌گیریم:

section('Fiber', secTag)

patch('quad', matTag, numSubdivIJ, numSubdivJK, *crdsI, *crdsJ, *crdsK, *crdsL)
section )Fiber, secTag ({
patch (quad, matTag, numSubdivIJ, numSubdivJK, yI, zI, yJ, zJ, yK, zK, yL, zL)}

همانطور که از تحلیل اجزاء محدود می­‌دانیم، نیروهای داخلی عناصر محدود پس از تحلیل در راستای محور محلی المان نشان داده می‌شوند. در نرم افزار اپنسیس فرض جهت محورهای محلی با کاربر بوده و باید به صورت دقیق تعیین شود. بنابراین قبل از تعریف مقطع مورد نظر باید محورهای محلی را روی آن درنظر بگیریم. به کمک شکل 5، نحوه تعیین محورهای محلی را به طور مختصر شرح می‌­دهیم. به طور کلی یک سیستم مختصات محلی توسط محورهای y ،x و z هر المان و همچنین موقعیت مبدأ مختصات مشخص می‌­شود. اگر ستون A از نقطه i به سمت j  رسم شده باشد، محور x محلی از پایین به بالا و در راستای ترسیم شده‌است. در واقع همواره محور محلی x در راستای ترسیم i به j است. از طرفی محور محلی z در مدل دوبعدی همواره به سمت خارج صفحه (به سمت ما) و منطبق بر محور z کلی خواهد بود. در این حالت محور y به کمک قانون دست راست بدست می­‌آید که در این مثال این محور به سمت چپ قرار می­‌گیرد.

باتوجه به نکات مطرح شده، به عنوان تمرین، محور محلی تیر B نشان داده شده در شکل 6 را درحالت دوبعدی بدست آورید. اگر جهت ترسیم تیر از سمت چپ به راست و از نقطه i به سمت نقطه j باشد، محور y به کدام سمت خواهد بود؟

نکته بعد درخصوص قرارگرفتن مبدأ مختصات محلی روی المان است. به شکل 5 دقت کنید. اگر از بالا به این ستون نگاه کنیم محور y محلی به سمت بالا و محور z محلی به سمت چپ قرار می­گیرد. از آنجایی که موقعیت مبدأ مختصات روی پاسخ بی­‌تأثیر است، می‌­توان آن را در هر نقطه دلخواه درنظر گرفت. بنابراین مطابق با شکل 7، در این آموزش OpenSees، محور محلی y به سمت بالا و محور محلی z به سمت چپ و مبدأ مختصات نیز در مرکز مقطع درنظر گرفته می‌­شود.

یک تیر I شکل را درنظر بگیرید. مطابق با شکل 8 می‌­توان گفت که این تیر از سه قطعه مستطیلی شکل تشکیل شده‌است. هرشکل مستطیلی چهار گوشه دارد که به صورت پادساعتگرد و با حروف k ،j ،i و l مطابق با شکل 8 نامگذاری شده و مختصات این نقاط نیز با توجه به مبدأ مختصات محلی و ابعاد مقطع تعیین می­‌شود. دستور patch در اپنسیس مختصات این نقاط را از کاربر می­‌گیرد که در دستور اپنسیس با پارامترهای (yI zI yJ zJ yK zK yL zL) نشان داده شده است.

مرحله بعد در آموزش OpenSees مش‌­بندی و تقسیم مقطع به زیربخش (فایبر) در دوجهت متعامد است. بدین منظور دو پارامتر زیر در دستور patch مورد بررسی و استفاده قرار می­‌گیرد. این دو پارامتر مشخص می­‌کند که مقطع به ترتیب در راستای ij و در راستای jk به چند قسمت تقسیم شود که این تقسیم‌بندی نیز به صورت دلخواه صورت می­‌گیرد.  

numSubdivij

numSubdivjk

باتوجه به اینکه در این مثال از آموزش اپنسیس، از مقطع W12x40 استفاده شده‌است، دستور مقطع فایبر باتوجه به شکل 8 برای قسمت A که بال بالایی مقطع می‌­باشد به صورت زیر تعریف می‌­شود.

# W12x40

colSecTag = 1

d = 0.3023

bf = 0.2035

tf = 0.0131

tw = 0.0075

section(‘Fiber’, colSecTag)

patch(‘quad’, matTag, numSubdivij, numSubdivjk, d/2-tf, bf/2, d/2-tf, -bf/2, d/2, -bf/2, d/2, bf/2)

دقت داریم که دستور patch برای دو قسمت مستطیلی دیگر نیز به همین ترتیب تعریف شده و در مجموع سه قسمت مستطیلی که مقطع را می‌­سازند با دستور patch تقسیم‌بندی و مختصات­‌دهی می‌­شوند. دقت شود از آنجایی که متریال این مقطع از نوع فولادی است، به جای matTag از steelMatTag استفاده می­‌کنیم.

تعریف مقطع تیر قاب فولادی نیز عیناً مشابه با تعریف ستون بوده و تنها مشخصات مقطع تغییر پیدا می­‌کند و به صورت زیر تعریف می‌­شود.

#W12x40

beamSecTag = 2

d = 0.3023

bf = 0.2035

tf = 0.0131

tw = 0.0075

پس از تعریف مقطع، باید المان مناسب را جهت اختصاص مقاطع تیر و ستون تعریف شده به آن مشخص کنیم. در این آموزش اپنسیس با توجه به اینکه قاب فولادی از نوع غیرخطی می‌­باشد، از بخش element commands ، قسمت Beam-Column Elements المان forceBeamColumn را انتخاب می­‌کنیم که دستور آن به صورت زیر می­‌باشد:

element('forceBeamColumn', eleTag, *eleNodes, transfTag, integrationTag, '-iter', maxIter=10, tol=1e-12, '-mass', mass=0.0)
element forceBeamColumn $eleTag $iNode $jNode $numIntgrPts $secTag $transfTag <-mass $massDens> <-iter $maxIters $tol> <-integration $intType>

در این دستور ابتدا تگ المان و سپس گره­‌های دوسر المان مشخص می‌­شود. دستور transfTag که پیشتر تعریف شده بود و integrationTag نیز به ترتیب به المان اختصاص می­‌یابد.

integrationTag : هنگامی که المان از نوع فایبر مدل می‌­شود، نقاطی موسوم به نقاط انتگرال­‌گیری داریم که پاسخ‌­های غیرخطی در این نقاط انتگرال­‌گیری یا نقاط گوس محاسبه می‌­شوند. بنابراین دستور beamIntegration بدین منظور استفاده می‌­شود. این دستور از کاربر می‌­خواهد تعداد نقاط انتگرال‌­گیری و همچنین مقطعی که انتگرال‌­گیری روی آن صورت می‌­گیرد را وارد کند. در دستورات اپنسیس چندین روش انتگرال‌گیری ارائه شده‌است که ما از روش Lobatto استفاده می‌­کنیم. دستور این روش از قرار زیر می‌­باشد:

beamIntegration('Lobatto', secTag, secTag, N)

در این دستور N تعداد نقاط انتگرال‌گیری و secTag به ترتیب بیانگر  تگ نقاط انتگرال‌­گیری (که دلخواه است) و مقطعی که روی آن محاسبات انتگرال‌گیری در نقاط مذکور صورت می­‌گیرد می­‌باشد که برای تیر و ستون به صورت زیر تعریف می­‌شود.

numIntgrPts = 5

beamIntegration('Lobatto', beamSecTag, beamSecTag, numIntgrPts)

beamIntegration('Lobatto', colSecTag, colSecTag, numIntgrPts)

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

element('forceBeamColumn', 1, 1, 2, transfTag, colSecTag)

element('forceBeamColumn', 2, 3, 4, transfTag, colSecTag)

element('forceBeamColumn', 3, 2, 4, transfTag, beamSecTag)

همان طور که در ابتدا اشاره شد، گره‌­ها، المان‌­ها، درجات آزادی و شرایط مرزی از مفاهیم بسیار مهمی در تحلیل اجزاء محدود هستند. تا این قسمت از آموزش OpenSees سه مورد اول تعیین شدند و مورد بررسی قرار گرفتند. بنابراین در این بخش از آموزش اپنسیس به تعیین شرایط مرزی گره­‌ها و تکیه­‌گاه قاب فولادی می­‌پردازیم. به طور کلی شرایط مرزی بیانگر این مفهوم است که هر گره با توجه به اینکه جزِئی از یک سیستم پیوسته است و همچنین با توجه به عملکرد سازه‌­ای و نقش آن در سازه، در درجات آزادی خاصی مقید می‌شود. از آنجایی که تقید هرکدام از درجات آزادی منجر به تشکیل نیرو در همان درجه آزادی می­‌شود، باید با دقت و به درستی تعیین شود تا در نهایت خروجی­‌های صحیحی پس از تحلیل مدل به دست آید. از طرفی در تحلیل اجزاء محدود، درجات آزادی می‌­توانند اشکال گوناگونی به خود بگیرند. به طور مثال در تحلیل سازه درجات آزادی از جنس جابه‌جایی هستند، در حالی که در تحلیل حرارتی درجه آزادی از جنس دما است. در این مثال، با توجه به اینکه مدلسازی به صورت دوبعدی است، سه درجه آزادی شامل دو درجه آزادی انتقالی و یک درجه آزادی دورانی داریم. باتوجه به شکل 1، گره یک و سه، تکیه­‌گاه قاب فولادی بوده و گره دو و چهار عضوی از سیستم پیوسته مدل هستند. بنابراین کافیست تنها شرایط مرزی دو گره یک و سه را مشخص کنیم. در اپنسیس دستور fix برای تعیین شرایط مرزی گره‌­ها به کار می‌­رود که از قرار زیر می­‌باشد:

fix (nodeTag, *constrValues)
fix $nodeTag (ndf $constrValues)

در این دستور ابتدا تگ گره مورد نظر و سپس شرایط گره در درجات آزادی مربوطه را وارد می‌­کنیم. که در این مثال به صورت زیر تعریف می‌­شود:

fix (1, 1, 1, 1)

fix (3, 1, 1, 1)

عدد اول بیانگر تگ گره­‌ای که شرایط مرزی به آن اختصاص می‌­یابد بوده و سه عدد بعدی نشان‌­دهنده شرایط گره در فضا است. عدد یک به معنای تقید گره و عدد صفر به معنای آزاد بودن گره در آن درجه آزادی است. در این مثال گره یک و گره سه، تکیه‌گاه سازه بوده و از نوع گیردار می­‌باشد. بنابراین هر دو گره، باتوجه به دوبعدی بودن سازه در سه درجه آزادی خود مقید می‌­شوند.

بعد از اینکه مدلسازی کلی به اتمام رسید و شمای کلی مدل شامل ابعاد، متریال مصرفی، مقاطع، المان‌­ها و شرایط مرزی و تکیه‌گاهی مشخص شد، به سراغ بارگذاری مدل و تعیین شرایط اعمال بار می‌­رویم. به منظور اعمال بار به قسمت pattern commands سایت اپنسیس مراجعه می­‌کنیم. دقت داریم که درحال بارگذاری ثقلی هستیم و بارگذاری ثقلی مدل از طریق دستورات بخش Plain pattern اعمال می­‌شود. دستور کلی جهت اعمال بار ثقلی در سایت اپنسیس به صورت زیر می‌­باشد:

pattern('Plain', patternTag, tsTag, '-fact', fact)
pattern Plain $patternTag $tsTag <-fact $cFactor>

ورودی­‌های این دستور شامل شماره تگ الگو (patternTag)، تگ سری زمانی (tsTag) و ضریب اعمال بار (fact) می­‌باشد.

همان طور که می­‌دانید زمان در تحلیل دینامیکی یک مفهوم واقعی دارد و در واقع تفاوت اصلی حالت دینامیکی نسبت به حالت استاتیکی، تغییر شرایط نسبت به زمان است. مثلاً در حالت دینامیکی بارگذاری در طول زمان تغییر می‌­کند اما در حالت استاتیکی بارگذاری ثابت است و یا به طور مثال با مشتق جابجایی نسبت به زمان، سرعت به دست می­‌آید. اما در حالت استاتیکی زمان یک مفهوم مجازی دارد و مشخص می‌­کند که بارگذاری در هر مرحله با چه ضریبی به سازه اعمال شود. تعیین این ضریب به هنگام تعیین دستورات ثقلی و توسط دستور integrator انجام می‌­شود که در بخش تحلیل به آن پرداخته می­‌‌شود. اما در خصوص شرایط و نحوه اعمال، باید اشاره کرد که اپنسیس نحوه اعمال این ضریب را به طرق متفاوتی درنظر می‌­گیرد. یکی از این حالات شرایط خطی یا linear است. درحالت linear ضریب گام بارگذاری آرام آرام و بصورت خطی افزایش می‌­یابد و در نهایت به عدد یک می­‌رسد. این دستور در اپنسیس به صورت زیر است:

timeSeries('Linear', tag, '-factor', factor=1.0, '-tStart', tStart=0.0)
timeSeries Linear $tag <-factor $cFactor>

همان طور که در دستور نیز مشخص است، به جز تگ سری زمانی دو پارامتر  factor و tStart نیز قید شده، که دارای مقدار هستند. این بدین معنی است که اگر در دستور مقدار آن توسط کاربر ذکر نشده باشد، مقادیر عنوان شده بصورت پیش‌فرض توسط نرم­‌افزار درنظر گرفته می‌­شود. کدنویسی این دستور به صورت زیر انجام می‌­شود:

linearSeriesTag = 1
timeSeries('Linear', linearSeriesTag)

بنابراین دستور بارگذاری مدل در نهایت به شکل زیر تعریف می‌­شود:

pattern('Plain', 1, linearSeriesTag)

حال با توجه به اینکه بارگذاری روی گره اعمال می‌­شود یا روی المان، از یکی از دستورات load command یا  eleload command استفاده می‌­کنیم. با توجه به اینکه در این مثال از آموزش اپنسیس دو بار متمرکز روی گره‌های دو و چهار و همچنین یک بار گسترده روی المان شماره سه (طبق شکل 1) داریم، بنابراین از هر دو دستور استفاده می­‌کنیم.

دستور بارگذاری گره‌­ای در اپنسیس به صورت زیر می‌­باشد:

load(nodeTag, *loadValues)
load $nodeTag (ndf $LoadValues)

در این دستور در هر درجه آزادی بار مورد نظر (loadValues) به گره دلخواه (nodeTag) وارد می‌­شود. در این مرحله حتماً باید به واحد نیرو که در ابتدا توسط کاربر فرض شده‌است، دقت شود. بنابراین بارگذاری گره­‌های دو و چهار به شکل زیر تعریف می­‌شود:

load(2, 0, -30e3, 0)
load(4, 0, -30e3, 0)

همان طور که اشاره شد، بارگذاری در تمام درجات آزادی صورت می­‌گیرد. در این مثال هر گره سه درجه آزادی دارد و تنها در درجه آزادی دوم (خلاف جهت y) بار داریم، بنابراین با توجه به اینکه بارگذاری گره‌­ای براساس محور مختصات کلی (Global) صورت می‌­گیرد، بارگذاری با علامت منفی (به سمت پایین) اعمال می‌­شود.

بارگذاری بعدی روی المان صورت می­‌گیرد و مقدار آن 20kN/m می‌­باشد. پس باید از دستور بارگذاری المانی دوبعدی که در زیر به آن اشاره شده‌است استفاده کنیم:

eleLoad('-ele', *eleTags, '-type', '-beamUniform', Wy, Wx=0.0)
eleLoad -ele $eleTag1 <$eleTag2 ....> -type -beamUniform $Wy <$Wx>

این دستور تگ المانی که تحت بارگذاری قرار دارد (eleTags)، نوع بار (type) و مقدار بار در هر جهت از محور مختصات محلی المان را به عنوان ورودی از کاربر می­‌گیرد. در این مثال المان شماره سه خلاف جهت y دارای بار گسترده یکنواخت می­‌باشد. پس کدنویسی به صورت زیر انجام می‌­شود:

Wy = 20e3   
eleLoad('-ele', 3, '-type', '-beamUniform', -Wy)

تا به این بخش از آموزش OpenSees مدل تعریف شده و بارگذاری آن نیز صورت گرفته است. مرحله بعدی تعیین خروجی­‌های موردنظر در نرم‌­افزار است. دقت داشته باشید که بر خلاف نرم‌­افزارهای متداول مانند Etabs که خروجی‌­های ثابت داشته و پس از تحلیل قابل دسترسی است، در نرم‌افزار اپنیسیس تعداد، جزئیات و نوع خروجی­‌ها توسط کاربر تعیین می‌­شود. بنابراین برای اینکه خروجی­‌های موردنظر ثبت شود، باید قبل از تحلیل ثقلی مدل، این خروجی­‌ها توسط کاربر تعیین و مشخص شود. در واقع این دستور تحلیل‌­هایی که بعد از آن قرار دارد را ضبط و ذخیره می­‌کند. به سایت اپنسیس مراجعه کرده و وارد بخش Output Commands می­‌شویم. در این قسمت از بین گزینه‌­های مختلفی که قرار دارد، گزینه recorder command را انتخاب می­‌کنیم. این گزینه چندین نوع مختلف از خروجی را به ما ارائه می‌­دهد.  خروجی­‌های مدنظر ما شامل تغییر شکل گره دو، عکس‌العمل­‌های­ تکیه‌­گاهی گره یک و گره سه، خروجی­‌های مربوط به المان تیر و هر دو ستون می‌­باشد.

دستور خروجی که از گره (Node) می­‌توان گرفت به صورت زیر می­‌باشد:

recorder('Node', '-file', filename, '-node', *nodeTags=[], '-dof', *dofs=[], respType)
recorder Node <-file $fileName> <-node $node1 $node2 ...> -dof ($dof1 $dof2 ...) $respType'

ورودی‌­هایی که باید مشخص کنیم عبارت اند از نام فایل (file)، شماره گره (node)، درجه یا درجات آزادی (dof) که می‌­خواهیم از آن خروجی بگیریم و همچنین نوع پاسخی (respType) که مد نظر است. خروجی مربوط به گره شماره دو به شکل زیر تعریف می­‌شود:

recorder('Node', '-file', 'disp.txt', '-node', 2, '-dof', 1, 2, 3, 'disp')

عکس‌العمل‌­های تکیه‌­گاهی شامل به ترتیب برش Vx، نیروی Fy و لنگر Mz بصورت زیر تعیین می‌­شود:

recorder('Node', '-file', 'Vx.txt', '-node', 1, 3, '-dof', 1, 'reaction')
recorder('Node', '-file', 'Fy.txt', '-node', 1, 3, '-dof', 2, 'reaction')
recorder('Node', '-file', 'Mz.txt', '-node', 1, 3, '-dof', 3, 'reaction')

دستور خروجی که از المان (element) می‌­توان گرفت به صورت زیر می‌­باشد:

recorder('Element', '-file', filename, '-ele', *eleTags=[], *args)
recorder Element <-file $fileName> <-ele ($ele1 $ele2 ...)> $arg1 $arg2 ...

ورودی‌­های مورد نیاز این دستور نیز شامل نام فایل (filename)، شماره المان (eleTags) و نوع خروجی (args) می‌­باشد. نوع خروجی هر المان به نوع المان بستگی دارد و در صفحه­‌ای که دستور المان قرار گرفته، پاسخ­‌هایی که می‌­شود از آن المان به دست آورد نیز ذکر شده‌است. خروجی مربوط به تیر و ستون‌­ها به ترتیب به صورت زیر کدنویسی می‌­شود:

recorder('Element', 'beamForce.txt', '-ele', 3,  'localForce')
recorder('Element', 'columnForce.txt', '-ele', 1, 2,  'localForce')

نوبت به تحلیل مدل تحت بارهای ثقلی می‌­رسد. بدین منظور وارد سایت اپنسیس شده و به بخش Analysis command مراجعه می‌کنیم. از بین دستورات مختلفی که در این بخش قرار دارد، سه دستور اساسی که بدون آن‌ها تحلیل انجام نمی­‌شود و حتماً باید توسط کاربر مشخص شود، عبارت اند از: integrator commands ،analysis command و analyze command. تعیین باقی دستورات اختیاری است و اگر کاربر آن­‌ها را تعیین نکند، خود نرم‌­افزار مقادیر پیش‌­فرضی را برای آن‌­ها درنظر می­‌گیرد.

این دستور روش تحلیل را مشخص می­‌کند که به دو بخش استاتیکی (Static) و دینامیکی (Transient) تقسیم می‌­شود. آنچه که ما برای تحلیل ثقلی به آن نیاز داریم دستور loadcontrol زیرمجموعه دستورات استاتیکی است.

integrator('LoadControl', incr)
integrator LoadControl $lambda <$numIter $minLambda $maxLambda>

همان طور که پیش‌تر نیز مطرح شد، در این دستور گام بارگذاری مشخص شده و توسط incr مقداردهی می‌­شود.

این دستورکه نحوه تحلیل مدل را مشخص می‌­کند، به صورت زیر می­‌باشد:

analysis(analysisType)
analysis analysisType? 

ورودی analysisType از ما نوع تحلیل را می‌­خواهد که با توجه به اینکه تحلیل ثقلی است، باید از دستور Static بدین منظور استفاده کرد.

این دستور برای اجرای تحلیل است و تا زمانی که بکار نرود تحلیل اجرا نمی‌­شود.

analyze(numIncr=1)
analyze $numIncr 

در دستور analyze مشخص می­‌کنیم که تحلیل در چند گام انجام می‌­شود. ازطرفی در دستور integrator ضریبی که بارگذاری در هر گام افزایش پیدا می­‌کند را می‌نویسیم. به طور پیش‌فرض بارگذاری در یک مرحله صورت می­‌گیرد که می‌­توان تعداد گام بارگذاری را با توجه به افزایش گام به گام آن توسط دستور integrator تنظیم کرد.

تحلیل ثقلی به کمک همین سه دستور صورت می­‌گیرد و باقی دستورات توسط نرم‌افزار فرض می‌­شود. در این آموزش OpenSees به طور کلی دستورات تحلیل ثقلی به شکل زیر تعریف می‌­شود:

wipeAnalysis()
constraints('Transformation')
numberer('RCM')
system('BandGen')
test('NormDispIncr', 1e-6, 100)
algorithm('Newton')
integrator('LoadControl', 0.1)
analysis('Static')
analyze(10)
loadConst('-time', 0)

پریود یا زمان تناوب یک ویژگی ذاتی در سازه و کمیتی وابسته به جرم و سختی است. بنابراین برای محاسبه آن، نیاز به ماتریس جرم و ماتریس سختی داریم. ماتریس سختی با توجه به المان‌­هایی که برای سازه تعریف کردیم مشخص می­‌شود. ماتریس جرم نیز در بخش بعدی توضیح داده شده‌است. از دینامیک سازه به خاطر داریم که با تحلیل eigen و تشکیل معادله‌ی مشخصه (characteristic equation) با ماتریس جرم و سختی به شکل زیر:

توان دوم مقادیر فرکانس دورانی یا ω² به دست می­‌آید. از طرفی زمان تناوب برابر است با:

بنابراین کافیست تا پس از محاسبه جرم و اختصاص آن به گره‌­ها، زمان تناوب سازه را به کمک رابطه بالا محاسبه کنیم.

می‌­دانیم که جرم حاصل از بارهای ثقلی است. بنابراین کافیست پس از محاسبه­‌ی بارهای ثقلی، آن­‌ها را به شتاب گرانش زمین تقسیم کنیم تا جرم به دست آید. در این مثال دو بار متمرکز 30kN و یک بار گسترده یکتواخت 20kN/m در دهانه 6 متری قاب وارد می­‌شود که مجموعاً معادل 180kN بار است. با تبدیل این بار به نیوتن و تقسیم آن به شتاب گرانش زمین درنهایت 18348.6kg جرم به دست می­‌آید. با توجه به اینکه می‌خواهیم به دو گره‌ی شماره‌ی دو و چهار جرم اختصاص دهیم، پس باید جرم کل به دست آمده را تقسیم بر دو کنیم تا سهم هر گره مشخص شود. در نهایت مقدار 9174.31kg جرم برای هر گره حاصل می‌­شود. در اپنسیس دستور اختصاص جرم به گره مطابق دستور زیر می‌­باشد:

mass(nodeTag, *massValues)

بدین صورت که ابتدا گره موردنظر (nodeTag) و سپس مقدار جرم در هر درجه آزادی (massValues) را وارد می­‌کنیم. در این مثال با توجه به اینکه مدلسازی به صورت دوبعدی صورت گرفته‌است، اختصاص جرم در دو درجه آزادی انتقالی صورت می­‌گیرد و در درجه آزادی دورانی مقداری ناچیز و یا مقدار صفر وارد می‌­شود:

mass(2, 9174.3, 9174.3, 0)
mass(4, 9174.3, 9174.3, 0)

طبق توضیحات مطرح شده، پس از تعریف و تعیین میزان جرم، حال می‌­توانیم مقدار پریود سازه را به دست بیاوریم.

وارد قسمت Analysis commands در سایت اپنسیس شده و به بخش eigen command مراجعه می­‌کنیم.

eigen(solver='-genBandArpack', numEigenvalues)

این دستور طریقه حل (solver) و همچنین تعداد مودهایی که مقادیر ویژه را برای آن محاسبه می­‌کند (numEigenvalues) از کاربر دریافت می­‌کند که مورد اول اختیاری است.

جهت سهولت کار، مقادیر ویژه را در متغیری به نام omega2List ذخیره می­‌کنیم و در نهایت دستور تعیین مقادیر ویژه به صورت زیر کدنویسی می‌­شود:

omega2List = eigen(2)

به منظور محاسبه پریود در هر مود، یک حلقه به صورت زیر ایجاد می­‌کنیم:

for omega2 in omega2List:
    omega = math.sqrt(omega2)
    T = 2*math.pi/omega
    print(T)

در این حلقه ابتدا جذر هر مقدار ویژه در متغیر omega ذخیره می‌­شود. طبق رابطه‌ای که داشتیم (T=2π/ω)، پریود برای هر مود محاسبه و نمایش داده می‌­شود.

پس از اتمام مدلسازی، تعریف رکوردرها برای دریافت خروجی‌­های موردنظر و تحلیل مدل، نوبت به بررسی و تفسیر نتایج به دست آمده می­‌باشد. در این مثال از آموزش اپنسیس، خروجی‌­های متداول مربوط به گره­‌ها، ستون‌­ها و تیر مورد بررسی قرار گرفت که تفسیر هر خروجی به شرح زیر است:

در خروجی‌­هایی که از گره­‌ها می­‌گیریم، پاسخ­‌ها براساس محور مختصات کلی به دست می­‌آیند، اما در خروجی‌­هایی که از المان می­‌گیریم نوع پاسخ توسط کاربر مشخص می‌­شود. به طور مثال اگر در رکوردر المان بجای localforce از force استفاده کنیم، خروجی­‌های حاصل نیز از حالت مختصات محلی به مختصات کلی تغییر پیدا می­‌کنند. طبق رکوردرهای تعریف شده برای گره­‌ها، پاسخ‌­های به دست آمده پس از تحلیل به شرح زیر می‌­باشد:

همان طور که در جدول 1 نشان داده شده‌است برای هر دسته پاسخ، ستون اول مربوط به گره‌ی شماره‌ی یک و ستون دوم پاسخ‌­های مربوط به گره‌ی سوم می‌­باشد. همان طور که در بخش تحلیل ثقلی به آن پرداخته شد، تحلیل در ده گام با گام‌­های 0.1 صورت گرفت. بنابراین ده سطر از پاسخ برای هر خروجی داریم که ناشی از اعمال افزایشی بار با ضریب 0.1 می‌­باشد. برش پایه کل ناشی از بارگذاری، مجموع مقادیر سطر دهم در هر ستون می‌­باشد. در این حالت بار با ضریب یک به سازه اعمال شده‌است.  در مثال مورد بررسی، با توجه به اینکه بارگذاری قائم بوده و هیچگونه بار افقی به سازه اعمال نشده‌است، بنابراین برش پایه کل برابر با صفر بدست می‌­آید. همچنین مقادیر لنگر بدست آمده نیز به همین ترتیب مقدار صفر را به دست می­‌دهد. از طرف دیگر مقدار نیروی 180kN و برابر با بار قائم بدست می­‌آید. بنابراین طبق تعادل در راستای قائم صحت مدلسازی در نتایج بدست آمده از تحلیل مدل مشهود است.

از ستون‌­ها خروجی بر اساس محور مختصات محلی گرفته شده‌است.کل پاسخ‌­های به دست آمده طبق جدول 2 می‌­باشد.

همانطور که در بخش خروجی‌­های گرهی توضیح داده شد، ده سطر خروجی برای ستون­‌ها به دست می‌­آید. با توجه به اینکه برای دو المان ستون خروجی گرفتیم و در هر گره که دو سر المان قرار گرفته سه درجه آزادی داریم، شش ستون اول مربوط به المان اول و شش ستون دوم مربوط به المان دوم است. برای هر المان سه ستون اول پاسخ­‌های گره i و سه ستون دوم پاسخ‌های گره j می­‌باشد. همچنین درجه آزادی اول نیرو در جهت x محلی، درجه آزادی دوم برش y محلی و درجه آزادی سوم لنگر حول z محلی را نشان می­‌دهد.

پاسخ‌­های به دست آمده برای تیر مطابق با جدول 3 می‌­باشد.

تفسیر نتایج به دست آمده برای تیر مشابه با نتایج ستون می‌­باشد. بدین صورت که سه ستون اول مربوط به پاسخ‌­های گره i و سه ستون بعدی پاسخ­‌های مربوط به گره j است. همچنین باقی موارد نیز مشابه با تفسیر نتایج ستون است.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *