آموزش OpenSees برای تحلیل سازههای زلزله
سلام رفیق مهندس! اگه تو هم مثل من دلت میخواد سازهها رو زیر و رو کنی و ببینی تو دل یه زلزله سهمگین چی به سرشون میاد، جای درستی اومدی. OpenSees یه ابزار فوقالعاده قدرتمنده که مثل یه جعبه ابزار حرفهای میمونه برای تحلیلهای لرزهای پیشرفته. این مقاله راهنمای جامع توئه تا قدم به قدم با این غول دنیای مهندصی سازه آشنا بشی و بتونی مدلهای پیچیده رو به راحتی بسازی و تحلیل کنی. اینجا نه فقط میخوایم از تئوری بگیم، بلکه میخوایم دست به کد بشیم و OpenSees رو عملی یاد بگیریم. آمادهایم که ازش یه خروجی درست و درمون بگیریم و حرفهای تحلیل کنیم؟ اگه دنبال ابزارهای تحلیلی بیشتر و یا آموزشهای تکمیلی هستی، میتونی سری به
سایت ما بزنی.
همین الان میتونی برای مشاوره و خرید ابزارهای تخصصی با شماره 09120917261 تماس بگیری و یه قدم بزرگ به سمت تحلیلهای حرفهای برداری!
🗺️ نقشه راه: یک نگاه کلی به سفر OpenSees ما

🌟 چرا OpenSees؟
- ✅ قدرت و انعطافپذیری بینظیر
- ✅ تحلیل غیرخطی و پیشرفته
- ✅ اقتصادی و متنباز
🛠️ شروع کار
- 💡 نصب و پیشنیازها
- ⚙️ آشنایی با مفاهیم اصلی
- 📜 کدنویسی با Tcl/Python
🏗️ مدلسازی سازه
- 📌 تعریف گرهها و المانها
- 🧱 مصالح و مقاطع
- 🔗 اتصالات و محدودیتها
🌊 تحلیل و خروجی
- 📉 انواع تحلیل لرزهای
- 📊 رکوردهای زلزله
- 📈 پردازش و تفسیر نتایج
✅ نکات و عیبیابی
- 💡 بهترین روشها
- ❓ سوالات متداول
- ✔️ حل مشکلات رایج
چرا OpenSees برای تحلیل زلزله؟

رفیق، اگه واقعاً میخوای تو دنیای تحلیل سازه و بهخصوص لرزه، حرفهای بشی، باید با OpenSees رفیق شی. این فقط یه نرمافزار ساده نیست؛ یه فریمورک تحلیلی کامله که بهت اجازه میده از تحلیلهای خطی و ساده فراتر بری و وارد دنیای هیجانانگیز تحلیلهای غیرخطی بشی. میدونی که سازهها زیر بار زلزله رفتار خطی ندارن و خب، ابزارهای تجاری معمولاً تو این زمینه محدودیتهایی دارن. OpenSees با انعطافپذیری بینظیرش، امکان تعریف هر نوع مدل مصالح، المان و تحلیل رو بهت میده.
- قدرت و انعطافپذیری: OpenSees به خاطر ماهیت متنباز و قابلیت برنامهنویسی با Tcl یا Python، بهت آزادی عمل میده تا هر نوع مدل رفتار مصالح (مثل بتن و فولاد غیرخطی) و هر نوع المانی (از تیر-ستونهای کلاسیک تا المانهای خاص صفرطول) رو پیادهسازی کنی. این یعنی دیگه هیچ محدودیتی تو مدلسازی نداری.
- تحلیلهای پیشرفته: میتونی انواع تحلیلهای لرزهای رو انجام بدی؛ از پوشاور استاتیکی گرفته تا تحلیل تاریخچه زمانی غیرخطی دینامیکی. حتی میتونی تحلیلهای پیچیدهتری مثل IDA (Incremental Dynamic Analysis) رو به راحتی پیاده کنی که برای ارزیابی عملکرد لرزهای سازهها حیاتیه.
- جامعه کاربری بزرگ: OpenSees یه جامعه کاربری فعال و بزرگی داره که دائم در حال توسعه و بهبود اونه. منابع آموزشی فراوان، مقالات علمی بیشمار و انجمنهای آنلاین فعال، همیشه بهت کمک میکنن تا سوالاتت رو بپرسی و راهحل پیدا کنی.
- رایگان و متنباز: مهمتر از همه، OpenSees کاملاً رایگانه و میتونی کد منبعش رو هم تغییر بدی و توسعه بدی. این یه امتیاز بزرگه، چون دیگه لازم نیست نگران لایسنسهای گرونقیمت باشی.
اگه تو مسیرت به راهنماییهای تخصصیتری نیاز داشتی یا خواستی پروژههات رو به بهترین نحو پیش ببری، حتماً یه سر به
صفحه تماس با ما بزن. کارشناسای ما آمادهان تا بهت کمک کنن.
گام به گام با OpenSees: شروع ماجرا

حالا وقتشه که آستینها رو بالا بزنیم و وارد عمل بشیم. برای شروع کار با OpenSees، یه سری پیشنیازها و مفاهیم اولیه وجود داره که باید باهاشون آشنا بشی.
پیشنیازها و نصب
اولین قدم، آماده کردن محیط کار و نصب OpenSeesه. نگران نباش، کار سختی نیست:
- دانش پایه سازه: قبل از هر چیز، باید با مفاهیم پایهای مهندسی سازه، مکانیک جامدات، و تحلیل سازه آشنا باشی. اینها الفبای کارن.
- برنامهنویسی (Tcl یا Python): OpenSees بر اساس زبان Tcl (Tool Command Language) توسعه داده شده، اما نسخه OpenSeesPy که بر پایه پایتونه، امروزه محبوبیت زیادی پیدا کرده. اگه با پایتون آشنایی داری، کار برات راحتتره. پیشنهاد میکنم از OpenSeesPy شروع کنی.
- نصب OpenSees: میتونی OpenSees رو از وبسایت رسمی پروژه (opensees.berkeley.edu) دانلود کنی. برای OpenSeesPy هم کافیه از `pip` در پایتون استفاده کنی:
pip install openseespy. - محیط توسعه (IDE): یه محیط توسعه مثل VS Code یا PyCharm کار رو برات خیلی راحتتر میکنه، چون امکانات دیباگ و ویرایش کد رو فراهم میکنه.
آشنایی با محیط و فلسفه OpenSees
فلسفه OpenSees بر مبنای “مدلسازی المان محدود” (Finite Element Modeling) بنا شده. یعنی تو با دستورات برنامهنویسی، سازهات رو به اجزای کوچیکتر (المانها) تقسیم میکنی، خواص مصالح رو بهشون میدی، بارگذاریها رو اعمال میکنی و بعدش تحلیل میکنی. کل ماجرا تو یه فایل اسکریپت خلاصه میشه که خط به خط داره به OpenSees میگه چیکار کنه.
- گرهها (Nodes): نقاطی تو فضا که اجزا به هم متصل میشن و درجه آزادی دارن (جابجایی و چرخش).
- المانها (Elements): قطعاتی که گرهها رو به هم وصل میکنن و خواص مکانیکی سازه رو نشون میدن.
- مصالح (Materials): رفتار فیزیکی المانها رو تعیین میکنن؛ مثل الاستیک، پلاستیک، بتن، فولاد و غیره. اینجا میتونی رفتار غیرخطی رو به بهترین شکل تعریف کنی.
- مقاطع (Sections): خواص هندسی المانها مثل مساحت، ممان اینرسی و … رو مشخص میکنن.
مدلسازی سازه در OpenSees
حالا که با مفاهیم اولیه آشنا شدی، بریم سراغ ساختن مدل سازهمون. این بخش قلب کار با OpenSeesه و نیاز به دقت زیادی داره. فراموش نکن، هرچه مدلسازیت دقیقتر باشه، نتایج تحلیلت هم قابل اعتمادتر خواهد بود.
تعریف گرهها و محدودیتها
اولین کاری که میکنی، تعریف گرههاست. گرهها نقاط اصلی سازه هستن که مختصات X, Y, Z دارن. بعدش باید محدودیتها رو برای گرهها تعریف کنی (مثلاً گیردار، مفصلی یا تکیهگاه غلتکی). اینها وضعیت تکیهگاهی سازه رو مشخص میکنن.
مثال (OpenSeesPy): تعریف گره و محدودیت
import opensees.openseespy as ops
ops.wipe()
ops.model('basic', '-ndm', 2, '-ndf', 3) # 2D model, 3 DOFs per node (Ux, Uy, Rz)
# Define nodes
ops.node(1, 0.0, 0.0)
ops.node(2, 6.0, 0.0)
ops.node(3, 0.0, 4.0)
ops.node(4, 6.0, 4.0)
# Define boundary conditions (constraints)
# Node 1 is fixed (all DOFs constrained)
ops.fix(1, 1, 1, 1)
# Node 2 is roller (fixed in Y, free in X, free rotation)
ops.fix(2, 0, 1, 0)
مصالح و مقاطع
اینجا جاییه که OpenSees واقعاً میدرخشه. میتونی انواع مختلف مصالح رو با رفتارهای خطی یا غیرخطی تعریف کنی. از مدلهای ساده الاستیک خطی گرفته تا مدلهای پیچیدهتر برای بتن (مثل Concrete01، Concrete02) و فولاد (مثل Steel01، Steel02) که رفتار هیسترزیس رو شبیهسازی میکنن. بعد از تعریف مصالح، باید مقاطع رو هم تعریف کنی که ابعاد هندسی رو به مدل اضافه میکنن.
تعریف المانها
بعد از گرهها و مصالح، نوبت به تعریف المانها میرسه که نقش وصلکننده گرهها و حملکننده نیروها رو دارن. OpenSees المانهای بسیار متنوعی داره. برای سازههای قاب فولادی یا بتنی، المانهای ‘nonlinearBeamColumn’ خیلی رایج هستن که رفتار غیرخطی رو تو طول المان در نظر میگیرن.
| نوع المان | کاربرد اصلی |
|---|---|
Truss |
المانهای خرپایی فقط با نیروی محوری |
BeamColumn (linear) |
تیر و ستون با رفتار خطی |
nonlinearBeamColumn |
تیر و ستون با رفتار غیرخطی (پرکاربرد برای تحلیل لرزهای) |
ZeroLength |
المان با طول صفر، برای مدلسازی فنرها، جداسازها یا مفاصل پلاستیک متمرکز |
ForceBasedBeamColumn |
المان تیر-ستون مبتنی بر نیرو، برای تحلیل غیرخطی دقیق |
اعمال بارهای لرزهای و تحلیل
حالا که مدل سازهات آمادهاس، نوبت به اعمال بارهای لرزهای و اجرای تحلیلت میرسه. این قسمت، اوج هیجان کاره!
انواع تحلیل لرزهای در OpenSees
OpenSees بهت اجازه میده انواع مختلفی از تحلیلها رو انجام بدی:
- تحلیل استاتیکی پوشاور (Pushover Analysis): یه تحلیل غیرخطی استاتیکی که مقاومت نهایی و شکلپذیری سازه رو نشون میده.
- تحلیل تاریخچه زمانی غیرخطی دینامیکی (Nonlinear Time History Analysis): این تحلیل که رایجترین و کاملترین نوع تحلیل لرزهایه، رفتار دینامیکی سازه رو تحت اثر رکورد واقعی زلزله در طول زمان بررسی میکنه.
- تحلیل دینامیکی افزایشی (IDA – Incremental Dynamic Analysis): چندین تحلیل تاریخچه زمانی رو با شدتهای مختلف زلزله انجام میده تا منحنی عملکرد لرزهای سازه رو به دست بیاره.
تعریف رکورد زلزله
برای تحلیل تاریخچه زمانی، نیاز به یه رکورد زلزله داری. این رکوردها معمولاً به صورت فایلهای متنی شامل شتاب زمین در بازههای زمانی مختلف هستن. OpenSees این امکان رو میده که این رکوردها رو به عنوان بارگذاری دینامیکی به سازه اعمال کنی.
اجرای تحلیل
بعد از اینکه مدل رو ساختی، مصالح رو تعریف کردی، المانها رو گذاشتی و رکورد زلزله رو آماده کردی، حالا وقتشه که دستورات تحلیل رو بنویسی. این شامل تعریف سولور (Solution Algorithm)، انتگراتور (Integrator)، و خود دستور اجرای تحلیل (analyze) میشه.
مثال (OpenSeesPy): اجرای تحلیل تاریخچه زمانی
# ... (Previous model definition code) ...
# Define recorders to save results
ops.recorder('Node', '-file', 'node3_disp.out', '-time', '-node', 3, '-dof', 1, 2, 3, 'disp')
ops.recorder('Element', '-file', 'ele1_force.out', '-time', '-ele', 1, 'force')
# Define time series for earthquake record
# Assumes 'EQ_record.txt' contains acceleration values
ops.timeSeries('Path', 1, '-filePath', 'EQ_record.txt', '-dt', 0.02, '-factor', 9.81) # dt is time step of record
# Define uniform excitation (ground motion)
ops.pattern('UniformExcitation', 1, 1, '-accel', 1) # Pattern ID 1, Direction 1 (X), uses TimeSeries ID 1
# Define analysis parameters
ops.system('BandGeneral')
ops.numberer('RCM')
ops.constraints('Transformation')
ops.integrator('Newmark', 0.5, 0.25) # Newmark integration scheme
ops.algorithm('Newton')
ops.test('NormDispIncr', 1e-6, 20) # Convergence test
ops.analysis('Transient') # Transient analysis for time history
# Run the analysis for a certain duration (e.g., 20 seconds, with time step 0.02)
num_steps = int(20 / 0.02)
ops.analyze(num_steps, 0.02) # Number of steps, time step for analysis
print("تحلیلت به اتمام رسید!")
تفسیر نتایج و خروجیها
بعد از اینکه تحلیلت با موفقیت به پایان رسید، تازه کار واقعی شروع میشه: پردازش و تفسیر نتایج. OpenSees فایلهای خروجی رو به صورت متنی (معمولاً با پسوند .out) ذخیره میکنه.
مشاهده تغییرشکلها و نیروها
فایلهای خروجی حاوی اطلاعاتی مثل جابجایی گرهها، نیروهای المانها، کرنشها و تنشها در طول زمان هستن. با استفاده از این دادهها میتونی رفتار سازه رو زیر بار زلزله درک کنی. مثلاً میتونی نمودار جابجایی سقف رو در برابر زمان رسم کنی تا حداکثر جابجایی و نحوه پاسخ سازه رو ببینی.
ابزارهای پسپردازش
خوندن مستقیم فایلهای .out معمولاً سخته و زمانبر. برای همین، ابزارهای پسپردازش نقش حیاتی دارن:
- پایتون (با کتابخانههای Matplotlib و NumPy): از اونجایی که OpenSeesPy با پایتون کار میکنه، میتونی به راحتی فایلهای خروجی رو با NumPy بخونی و با Matplotlib نمودارها و گرافهای حرفهای رسم کنی. این قویترین و انعطافپذیرترین روشه.
- نرمافزارهای خارجی: میتونی خروجیها رو به نرمافزارهایی مثل MATLAB، Excel یا حتی نرمافزارهای تخصصیتر مثل ParaView برای ویژوالیزیشن سه بعدی منتقل کنی.
نکات کلیدی برای یک تحلیلت موفق در OpenSees
برای اینکه از OpenSees بهترین نتیجه رو بگیری و تحلیلهات معتبر باشن، این نکات رو همیشه تو ذهنت داشته باش:
- تایید (Verification) و اعتبارسنجی (Validation): همیشه قبل از اینکه به نتایج مدل پیچیده خودت اعتماد کنی، اونو با مسائل سادهتر و حلشده، یا با نتایج آزمایشگاهی مقایسه و تایید کن.
- حساسیت شبکه (Mesh Sensitivity): مطمئن شو که تقسیمبندی المانها (mesh) به اندازه کافی ریز هست تا نتایج دقیق باشن، اما نه اونقدر ریز که زمان تحلیل خیلی زیاد بشه.
- پارامترهای مصالح: دقت کن که پارامترهای مدلهای مصالح غیرخطی رو به درستی وارد کنی. این پارامترها تاثیر زیادی روی رفتار سازه دارن.
- استفاده از سیستم یکپارچه واحد: حتماً از ابتدا تا انتها از یک سیستم واحد برای ابعاد و نیروها استفاده کن (مثلاً متر، کیلوگرم، ثانیه یا میلیمتر، نیوتن، ثانیه).
- پشتیبانگیری منظم: فایلت رو مرتباً ذخیره کن، چون گاهی اوقات مشکلات همگرایی میتونه باعث بسته شدن ناگهانی برنامه بشه.
عیبیابی سریع: راهحلهای مشکلات رایج OpenSees
خب، هیچ نرمافزاری بدون دردسر نیست، و OpenSees هم از این قاعده مستثنا نیست. اما نگران نباش، بیشتر مشکلات رایج راهحلهای سادهای دارن:
-
مشکل: “No convergence at trial X” (عدم همگرایی)
راهحل: این رایجترین خطاست. معمولاً به معنی اینه که سولور نتونسته تو تعداد گامهای مشخص شده به تعادل برسه.- سعی کن
algorithmرو عوض کنی (مثلاً ازNewtonبهModifiedNewtonیاBFGS). - تعداد گامهای تکرار
testرو افزایش بده (مثلاً از 10 به 20 یا 50). integratorرو چک کن و شاید نیاز باشه پارامترهاشو تغییر بدی (مثلاً برایNewmark).- مدل سازه رو دقیقتر بررسی کن، ممکنه گرهای آزاد باشه یا المانی بیش از حد انعطافپذیر.
- اندازه گام زمانی تحلیل (
dt) رو کوچیکتر کن.
- سعی کن
-
مشکل: “ERROR: invalid command name” یا “Command not found”
راهحل: این یعنی یه کلمه کلیدی یا دستور رو اشتباه نوشتی.- تایپ املایی دستورات رو چک کن. OpenSees به حروف بزرگ و کوچک حساسه (Case-sensitive).
- مطمئن شو که همه ماژولهای لازم رو وارد (import) کردی.
- گاهی اوقات ممکنه نسخهای از OpenSees که استفاده میکنی، از اون دستور پشتیبانی نکنه. مستندات نسخهات رو چک کن.
-
مشکل: “Model has 0 DOFs” (مدل دارای 0 درجه آزادی است)
راهحل: این یعنی همه گرهها رو کاملاً مقید کردی و هیچ چیزی تو مدل نمیتونه حرکت کنه.- تعریف
fixها رو بررسی کن. مطمئن شو که همه گرهها به درستی مقید شدن و درجه آزادی کافی برای حرکت سازه وجود داره. - شاید به جای
fix، ازequalDOFیا سایر محدودیتها به اشتباه استفاده کردی.
- تعریف
-
مشکل: خطاهای حافظه (Memory Errors)
راهحل: این معمولاً زمانی اتفاق میفته که مدل خیلی بزرگه یا تعداد گامهای تحلیل خیلی زیاده.- سعی کن مدل رو سادهسزی کنی.
- تعداد المانها رو کاهش بده.
- برای OpenSeesPy، مطمئن شو که از نسخههای 64 بیتی پایتون استفاده میکنی.
- فایلهای موقت و خروجیهای غیرضروری رو پاک کن.
-
مشکل: نتایج غیرمنطقی یا خطی با وجود تعریف مصالح غیرخطی
راهحل:- حتما چک کن که
uniaxialMaterialیاsectionهای غیرخطی رو به درستی به المانهات اختصاص دادی. - اطمینان حاصل کن که تحلیل رو با
TransientیاStatic(برای پوشاور) اجرا میکنی وalgorithmوintegratorرو درست تنظیم کردی. - ممکنه دامنه بارگذاری انقدر کم باشه که سازه وارد فاز غیرخطی نشده باشه. دامنه بار رو افزایش بده.
- حتما چک کن که
سوالات متداول درباره OpenSees
یه سری سوال هستن که معمولاً برای همه پیش میاد. اینجا چندتاشون رو جواب دادم:
-
Q: آیا OpenSees برای مبتدیان مناسب است؟
A: OpenSees یک ابزار قدرتمند است و منحنی یادگیری نسبتاً شیبداری دارد. برای شروع، نیاز به دانش قوی در مهندسی سازه و آشنایی با برنامهنویسی (بهخصوص پایتون) دارید. اما با تمرین و استفاده از منابع آموزشی، میتوانید بر آن مسلط شوید. -
Q: تفاوت بین OpenSees و OpenSeesPy چیست؟
A: OpenSees نسخه اصلی بر پایه زبان Tcl است. OpenSeesPy یک بستهبندی (wrapper) از OpenSees است که امکان استفاده از آن را با زبان برنامهنویسی پایتون فراهم میکند. برای بسیاری از کاربران، کار با پایتون راحتتر و انعطافپذیرتر است. -
Q: چگونه میتوانم نتایج را بصریسازی کنم؟
A: بهترین روش، استفاده از کتابخانههای پایتون مانند Matplotlib برای رسم نمودارها از فایلهای خروجی است. همچنین میتوانید از نرمافزارهای خارجی مانند ParaView یا MATLAB برای ویژوالیزیشن پیشرفتهتر کمک بگیرید. -
Q: آیا OpenSees فقط برای تحلیل زلزله کاربرد دارد؟
A: خیر، OpenSees قابلیت تحلیل انواع مسائل سازهای را دارد، از جمله تحلیل استاتیکی، دینامیکی، مودال، کمانش و… اما به دلیل تواناییهای خاصش در تحلیلهای غیرخطی دینامیکی، در زمینه مهندسی زلزله بسیار محبوب است.
رفیق مهندس، این بود یه شروع خوب و جامع برای ورود به دنیای OpenSees. یادگیری OpenSees مثل یادگرفتن یه ساز موسیقی جدیده؛ اولش سخته، اما وقتی قلقش دستت بیاد، میتونی شاهکارهای تحلیلی خلق کنی. تمرین، تکرار و استفاده از منابع معتبر، کلید موفقیت تو این مسیره. یادت باشه، OpenSees یه ابزار فوقالعادهاس، اما قدرت اصلیش تو ذهن و دانش توئه. پس بزن بریم و سازهها رو برای زلزلههای واقعی آماده کنیم!
function copyCode(button) {
let codeId = button.previousElementSibling.id;
let codeElement = document.getElementById(codeId);
let codeText = codeElement.textContent;
// Create a temporary textarea to hold the text
let tempTextArea = document.createElement(‘textarea’);
tempTextArea.value = codeText;
document.body.appendChild(tempTextArea);
// Select and copy the text
tempTextArea.select();
document.execCommand(‘copy’);
document.body.removeChild(tempTextArea);
// Provide feedback to the user
button.textContent = ‘کپی شد!’;
setTimeout(() => {
button.textContent = ‘کپی کد’;
}, 2000);
}