ساختار فایل ورودی و روش اجرای کد MCNP
کارایی و دقت کد MCNP به طور مستقیم به صحت فایل ورودی (Input File) آن وابسته است. این فایل، که یک فایل متنی ساده است، تمامی اطلاعات لازم برای شبیهسازی، از جمله هندسه مسئله، مواد، چشمه و نوع خروجیهای مورد نظر را در خود جای میدهد. این مقاله به تشریح ساختار استاندارد فایل ورودی MCNP، قوانین نگارش آن و همچنین ارائه یک نمونه دستور عملی برای اجرای کد به صورت موازی میپردازد.
۱. ساختار فایل ورودی MCNP
فایل ورودی MCNP از سه بخش اصلی و مجزا تشکیل شده است که حتماً باید به همین ترتیب در فایل قرار گیرند. این بخشها با یک خط خالی از هم جدا میشوند.
۱. بخش سلولها (Cell Cards):
-
محتوا: در این بخش، هندسه مسئله با استفاده از توابع سطح (Surfaces) تعریف میشود. هر خط (Cell Card) مشخصات یک ناحیه یا "سلول" از هندسه را توصیف میکند.
-
ساختار هر کارت سلول:
-
ستون ۱: شماره سلول (یک عدد مثبت و منحصربهفرد).
-
ستون ۲: شماره ماده (اگر سلول پر از ماده است، یک عدد مثبت؛ اگر سلول خلأ است، عدد صفر).
-
ستون ۳: چگالی ماده (عدد منفی برای چگالی جرمی بر حسب
g/cm³، عدد مثبت برای چگالی اتمی بر حسبatoms/barn-cm). -
از ستون ۴ به بعد: عبارت هندسی که محدوده سلول را با استفاده از عملگرهای منطقی (مثل
:برای union و#برای complement) و شماره سطوح تعریف میکند. -
پارامترهای مهم: در انتهای هر کارت سلول میتوان پارامترهایی مانند
IMP:N=1(اهمیت سلول برای نوترون) را تعریف کرد.
-
۲. بخش سطوح (Surface Cards):
-
محتوا: در این بخش، معادلات هندسی سطوحی که برای تعریف مرزهای سلولها استفاده شدهاند (مانند صفحه، استوانه، کره) تعریف میگردد.
-
ساختار هر کارت سطح:
-
ستون ۱: شماره سطح (یک عدد مثبت و منحصربهفرد).
-
ستون ۲: نوع سطح و پارامترهای آن (مثلاً
PXبرای صفحه عمود بر محور X،SOبرای کره با مرکز در مبدأ مختصات). -
مثال:
1 PX -5یک صفحه موازی با صفحه YZ در موقعیت X = -5 سانتیمتر است.
-
۳. بخش دادهها (Data Cards):
-
محتوا: این بخش قلب شبیهسازی است و تمامی پارامترهای فیزیکی و کنترلی اجرا را شامل میشود.
-
مهمترین کارتهای این بخش:
-
MODE: حالت(های) ذرهای که باید ردگیری شوند را مشخص میکند (مثلاً
MODE N Pبرای نوترون و فوتون). -
MN: چشمه (Source) را تعریف میکند. این کارت مشخص میکند که ذرات از کجا و با چه انرژی و جهتی شروع میشوند.
-
M: مواد (Materials) را تعریف میکند. این کارت ایزوتوپهای تشکیلدهنده یک ماده و فراوانی آنها را مشخص میکند.
-
TALLY: تالیها یا شمارندهها را تعریف میکند. تالیها برای اندازهگیری کمیتهای فیزیکی مانند شار، دوز، جریان ذرات و غیره در نواحی خاصی از هندسه به کار میروند.
-
NPS: تعداد تاریخچههای ذره (Number of Particle Histories) را مشخص میکند (مثلاً
NPS 1e6برای شبیهسازی یک میلیون ذره). -
PRDMP: زمانهای چاپ (dump) و ذخیرهسازی فایل ران را کنترل میکند.
-
۲. قوانین حیاتی نگارش فایل ورودی
برای جلوگیری از خطا، رعایت قوانین زیر هنگام نوشتن فایل ورودی اجباری است:
-
ستونبندی (ستون ۱ تا ۸۰):
-
تنها از ستونهای ۱ تا ۸۰ هر خط میتوان برای نوشتن دستورات استفاده کرد. هر چیزی بعد از ستون ۸۰ نادیده گرفته میشود. این قانون به دلیل سازگاری با کارتهای پانچ قدیمی وضع شده است.
-
-
کاراکترهای مجاز و غیرمجاز:
-
کاراکترهای فارسی، عربی و هر نویسه غیر-ASCII به طور قطع ممنوع است و باعث خطای فاحش در اجرا میشود.
-
استفاده از Tab (کلید تب) ممنوع است. فقط باید از Space (فاصله) برای جداسازی مقادیر استفاده کرد.
-
تنها از حروف انگلیسی، اعداد و کاراکترهای خاص مجاز (مانند
=,+,-,*,/) استفاده کنید.
-
-
ادامه دادن یک خط طولانی:
-
اگر یک دستور (مثلاً یک کارت سلول یا داده) طولانی شد و در یک خط جا نشد، میتوان آن را در خط بعد ادامه داد.
-
برای این کار، ستون ۶ (کاراکتر ششم) خط بعد باید حتماً پر شود (معمولاً با علامت
&یا+، اما هر کاراکتری غیر از Space یا صفر قابل قبول است). کد به طور خودکار این خط را به خط قبلی میچسباند. -
مثال:
1 1 -1.0 -1 2 3 -4 5 6 10 11 -12خط دوم به خط اول نمیچسبد زیرا ستون ۶ آن خالی است.
1 1 -1.0 -1 2 3 -4 5 6 & & 10 11 -12این دو خط به هم متصل شده و یک دستور واحد تشکیل میدهند.
-
-
نحوه نوشتن توضیحات (کامنت):
-
برای نوشتن توضیحات در فایل ورودی از حرف
C(مخفف Comment) در ستون اول استفاده میشود. کل خطی که باCشروع شود، نادیده گرفته میشود. -
همچنین، میتوان در ستون ۱ تا ۵ هر خط از کارت داده، از علامت
$برای شروع یک کامنت "درون-خطی" استفاده کرد. هر متنی که بعد از$بیاید، تا انتهای خط نادیده گرفته میشود. -
مثال:
C این یک خط کامنت کامل است. 1 1 -1.0 -1 2 3 -4 $ این یک کامنت در کنار دستور است.
-
۳. نحوه نوشتن و اجرای کد
مرحله ۱: نوشتن فایل ورودی
فایل ورودی خود را در یک ویرایشگر متنی ساده مانند Notepad++ (توصیه میشود به دلیل قابلیت نمایش ستونها و Highlight کردن سینتکس) یا VS Code بنویسید. فایل را با پسوند مناسب (مثلاً *.inp یا *.txt) ذخیره کنید. اطمینان حاصل کنید که Encoding فایل UTF-8 Without BOM یا ANSI باشد.
مرحله ۲: اجرای کد (ران کردن)
MCNP را میتوان به دو روش سریال (تک پردازنده) و موازی (چند پردازنده) اجرا کرد. اجرای موازی برای مسائل پیچیده و سنگین، سرعت را به شدت افزایش میدهد.
نمونه یک فایل Batch (با پسوند .bat) برای اجرای موازی در محیط ویندوز:
@echo off SET display=127.0.0.1:0 mpiexec -n 8 mcnp6.mpi i=p02.txt o=p02_a.txt pause
تجزیه و تحلیل دستورات:
-
@echo off: از نمایش خودِ دستورات در Command Prompt جلوگیری میکند. -
SET display=127.0.0.1:0: یک متغیر محیطی موقت برای مدیریت نمایش گرافیکی (اگر نیاز باشد) تنظیم میکند. -
mpiexec: دستوری برای اجرای برنامههای موازی. -
-n 8: مشخص میکند که شبیهسازی باید با استفاده از ۸ هسته (پردازنده) به صورت موازی اجرا شود. -
mcnp6.mpi: نام اجرایی (executable) کد MCNP6 که برای اجرای موازی کامپایل شده است. -
i=p02.txt: مشخص کردن نام فایل ورودی (i = input). -
o=p02_a.txt: مشخص کردن نام فایل خروجی اصلی (o = output). -
pause: اجرای script را متوقف میکند و پیام "Press any key to continue . . ." را نمایش میدهد. این کار باعث میشود پنجره Command Prompt پس از اتمام اجرا بسته نشود تا شما بتوانید خروجی یا خطاهای احتمالی را مشاهده کنید.
پس از اجرای موفقیتآمیز، کد فایلهای خروجی مختلفی از جمله p02_a.txt (خلاصه اجرا و نتایج) و p02_r (فایل رانتیگ یا dump) را تولید میکند.
۴. نتیجهگیری
درک ساختار سهبخشی فایل ورودی MCNP و رعایت دقیق قوانین نگارش آن، اولین و مهمترین گام برای انجام یک شبیهسازی موفق است. استفاده از ویرایشگرهای حرفهای مانند Notepad++ و به کارگیری اسکریپتهای Batch برای اجرای موازی، کارایی کاربر را به طور چشمگیری افزایش داده و امکان مدیریت و رفع خطا را سادهتر میسازد.