استفاده از Expression ها به جای UDF در فلوئنت: پایان دردسرهای کامپایل و کدنویسی C
آیا از چالشهای کدنویسی و کامپایل UDF در پروژههای فلوئنت خسته شدهاید؟
اگر حتی یک بار هم برای تعریف یک پروفایل ورودی ساده یا یک شرط مرزی وابسته به مکان، درگیر تنظیم کامپایلر ویژوال استودیو، خطاهای nmake و دیباگ کردن کدهای C شده باشید، دقیقاً میدانید از چه چیزی صحبت میکنم. این فرآیند، که قرار بود ابزاری برای حل مسائل پیچیده باشد، گاهی خودش به بزرگترین مانع پروژه تبدیل میشود. اما خبر خوب این است که در نسخههای جدیدتر نرمافزار، راه حل بسیار سادهتری برای این مشکل ارائه شده است. تیم سیمومک در تمام مراحل انجام پروژه فلوئنت کنار شماست؛ چه برای انجام پروژه دانشجویی فلوئنت و مشاوره تخصصی انجام پایان نامه فلوئنت نیاز به راهنمایی داشته باشید ما راهکار دقیق را به شما ارائه میدهیم.
این راهنما بخشی از مجموعه آموزش کامل انسیس فلوئنت ما در سیمومک است که تلاش میکنیم در آن، به صورت عملی و تخصصی، شما را با قابلیتهای این نرمافزار قدرتمند آشنا کنیم.
جدول چکلیست انتخاب بینExpression وUDF
| سناریوی مورد نیاز | ابزار پیشنهادی | دلیل |
| پروفایل سرعت، دما یا فشار ورودی (وابسته به مکان) | Expression ✅ | سریع، بدون نیاز به کامپایلر، پیادهسازی فوری |
| تعریف خواص ماده به صورت تابعی از دما (مثل ویسکوزیته) | Expression ✅ | ساده و یکپارچه با محیط فلوئنت |
| شرط مرزی نوسانی یا وابسته به زمان (Transient) | Expression ✅ | دسترسی مستقیم به متغیر زمان (t) |
| منبع حرارتی (Source Term) با توزیع مکانی خاص | Expression ✅ | پیادهسازی مستقیم توابع ریاضی در دامنه |
| مدلسازی رفتاری که به تاریخچه زمانی وابسته است (مثل UDM) | UDF ⚙️ | Expression ها به حافظه دسترسی ندارند |
| فراخوانی یک کتابخانه کد خارجی برای محاسبات | UDF ⚙️ | این قابلیت فقط از طریق کد C امکانپذیر است |
| تغییر مستقیم الگوریتم حلگر یا ضرایب گسستهسازی | UDF ⚙️ | نیاز به دسترسی سطح پایین به حلگر (Solver) |
| تعریف یک مدل توربولانسی کاملاً جدید | UDF ⚙️ | نیازمند دسترسی و تغییر مستقیم معادلات حاکم است |

Expression در فلوئنت دقیقا چیست و چگونه فرآیند شبیهسازی شما را متحول میکند؟
Expression ها را مثل یک ماشین حساب هوشمند و بسیار قدرتمند در نظر بگیرید که مستقیماً داخل محیط Ansys Fluent تعبیه شده است. این قابلیت به شما اجازه میدهد توابع و روابط ریاضیاتی پیچیده را برای تعریف شرایط مرزی، خواص مواد، یا حتی چشمههای انرژی (Source Terms) بنویسید، بدون اینکه حتی یک خط کد C بنویسید یا نیازی به کامپایلر داشته باشید.
در واقع، انسیس با این کار یک پل مستقیم بین نیاز شما و تنظیمات حلگر ایجاد کرده؛ یک راه حل سریع، یکپارچه و به شدت کاربردی که سرعت کار شما را به شکل چشمگیری افزایش میدهد. 🚀
چه تفاوتهای کلیدی بین UDF و Expression وجود دارد که بر سرعت و دقت پروژه شما اثر میگذارد؟
انتخاب بین UDF و Expression فقط یک انتخاب فنی نیست؛ یک تصمیم استراتژیک برای مدیریت زمان و پیچیدگی پروژه شماست. هرچند هر دو برای سفارشیسازی شبیهسازی استفاده میشوند، اما دنیایشان کاملاً متفاوت است. برای درک بهتر، بیایید یک مقایسه سریع انجام دهیم:
| ویژگی | UDF (User-Defined Function) | Expression |
| نیازمندیها | دانش برنامهنویسی C، کامپایلر (مثل Visual Studio) | فقط دانش ریاضیات پایه و آشنایی با سینتکس فلوئنت |
| سرعت پیادهسازی | کند و زمانبر (نوشتن کد، کامپایل، دیباگ) | بسیار سریع و آنی (نوشتن مستقیم در نرمافزار) |
| انعطافپذیری | بسیار بالا (دسترسی به تمام دادههای حلگر) | خوب (برای اکثر کارهای رایج کافیست) |
| فرآیند دیباگ | پیچیده و تخصصی | ساده (خطاها مستقیماً در محیط فلوئنت نمایش داده میشوند) |
همانطور که میبینید، برای اکثر کارهای روزمره مهندسی، Expression ها برنده بیچون و چرای این رقابت هستند. البته UDF ها همچنان برای کارهای بسیار خاص و پیچیده، جایگاه خود را دارند که میتوانید در مقاله انواع UDF در فلوئنت: کدام یک برای پروژه شما مناسب است؟ بیشتر با آنها آشنا شوید.
چگونه یک پروفایل سرعت سهموی (Parabolic) را بدون یک خط کدنویسی C در فلوئنت تعریف کنیم؟
اینجا دقیقاً جایی است که قدرت Expression ها مشخص میشود. فرض کنید میخواهیم برای ورودی یک لوله با شعاع ۰.۵ متر، یک پروفایل سرعت کاملاً توسعهیافته با حداکثر سرعت ۲ متر بر ثانیه تعریف کنیم. در گذشته، این کار نیازمند نوشتن یک UDF با DEFINE_PROFILE بود.
اما حالا، با استفاده از Expression ها به جای UDF برای تعریف شرایط مرزی پیچیده، کافیست یک Expression جدید بسازید و فرمول معروف U(y) = U_max * (1 – (y/R)^2) را مستقیماً در آن وارد کنید. (در اینجا y فاصله از مرکز لوله است). فلوئنت به صورت خودکار این رابطه را در هر سلول روی مرز ورودی محاسبه کرده و سرعت دقیق را به آن اختصاص میدهد. تمام شد! به همین سادگی و بدون هیچ دردسر اضافی.

قواعد و سینتکس (Syntax) نوشتنه Expression های پیچیده در فلوئنت شامل چه مواردی است؟
خوشبختانه سینتکس Expression ها بسیار ساده و شبیه به زبانهای برنامهنویسی رایج طراحی شده است. شما به متغیرهای اصلی مکانی (x, y, z) و زمان (t) دسترسی مستقیم دارید. علاوه بر این، میتوانید از توابع ریاضی استاندارد مانند موارد زیر استفاده کنید:
- توابع مثلثاتی (sin, cos, tan)
- توابع توانی و لگاریتمی (pow, sqrt, exp, log)
- توابع شرطی (مانند step که عملکردی شبیه به if دارد)
- و بسیاری از ثابتهای فیزیکی و ریاضی
این قابلیتها به شما اجازه میدهند تا توابع بسیار پیچیدهتری را نیز مدلسازی کنید. اگر به دنبال خودکارسازی فرآیندهای پیچیدهتر در فلوئنت هستید، مطالعه مقاله اتوماسیون فرآیندها با اسکریپتنویسی Journal میتواند برای شما بسیار مفید باشد.
آیا میتوان شرایط مرزی وابسته به زمان (Transient) را به سادگی با Expression ها پیادهسازی کرد؟
قطعاً! این یکی دیگر از نقاط قوت Expression هاست. فرض کنید میخواهید یک شرط مرزی ورودی با سرعت نوسانی (مانند جریان پالسی در رگهای خونی یا یک دمپر نوسانکننده) را شبیهسازی کنید. ⏱️
کافیست در تعریف Expression خود از متغیر زمان (t) استفاده کنید. برای مثال، یک عبارت ساده مانند 10 [m/s] * sin(2 * 3.14159 * t [s]) میتواند یک سرعت ورودی سینوسی با دامنه ۱۰ متر بر ثانیه و فرکانس ۱ هرتز را برای شما ایجاد کند. این کار با UDF نیازمند دقت بیشتری در مدیریت زمان شبیهسازی بود، اما اینجا به صورت کاملا ذاتی پشتیبانی میشود. از پروژههای کلاسی و انجام پروژه دانشجویی فلوئنت گرفته تا سطوح پیشرفته مثل انجام پایان نامه فلوئنت و انجام پروژه انسیس فلوئنت با هندسههای پیچیده، تیم ما آماده انجام پروژه فلوئنت با تضمین کیفیت و آموزش کامل است.
در چه سناریوهای صنعتی پیچیدهای هنوز هم به قدرت و انعطافپذیری UDF ها نیارمندیم؟
با تمام مزایایی که Expression ها دارند، باید صادق باشیم؛ آنها جایگزین تمام و کمال UDF ها نیستند. UDF ها مانند یک چاقوی جراحی دقیق هستند که برای کارهای بسیار خاص و پیچیده به کار میروند. بعد از حدود ۷ سال تجربه عملی در شبیهسازیهای صنعتی، یادمه در یکی از پروژهها باید رفتار یک ماده غیرنیوتنی را مدل میکردیم که ویسکوزیته آن نه تنها به نرخ کرنش، بلکه به تاریخچه دمایی سیال هم وابسته بود. چنین منطق پیچیدهای که نیاز به ذخیره اطلاعات از گامهای زمانی قبلی داشت، با Expression قابل پیادهسازی نبود و ما را مجبور کرد به سراغ UDF برویم.
به طور کلی، هر زمان که نیاز به موارد زیر دارید، UDF ها همچنان ابزار اصلی شما خواهند بود:
- دسترسی به دادههای سلولهای همسایه
- تغییر مستقیم متغیرهای حل (Solve/Update)
- ذخیره و بازیابی دادهها بین گامهای زمانی (User-Defined Memory)
- فراخوانی کتابخانههای خارجی
برای مثال، در شبیهسازیهای پیشرفته مانند کوپل کردن فلوئنت با Ansys Mechanical برای تحلیل FSI، گاهی نیاز به UDF برای انتقال دادههای خاص بین دو حلگر وجود دارد که از توان Expression ها خارج است.
عملکرد محاسباتی Expression ها در شبیهسازیهای موازی (Parallel Processing) چگونه ارزیابی میشود؟
خب، رسیدیم به سوالی که برای هر کسی که با شبیهسازیهای بزرگ و زمانبر سروکار دارد، حیاتی است. آیا Expression ها باعث کندی در محاسبات موازی میشوند؟ جواب کوتاه: نه، نگران نباشید.
فلوئنت به شکلی هوشمندانه این عبارات را مدیریت میکند و قبل از شروع حل، آنها را به یک فرم بهینه برای محاسبات موازی تبدیل میکند. سربار محاسباتی (Overhead) ناشی از تفسیر این عبارات در مقایسه با زمان اصلی حل معادلات ناویر-استوکس، تقریباً ناچیز است. در حقیقت، یک UDF که به درستی برای پردازش موازی نوشته نشده باشد (مثلا استفاده نادرست از ماکروهای CX_HOST و CX_NODE) میتواند بسیار بیشتر از یک Expression ساده، فرآیند حل شما را کند یا حتی دچار خطا کند. بنابراین از این نظر، Expression ها گزینه امنتر و مطمئنتری هستند. اگر به دنبال بهینهسازی بیشتر هستید، یادگیری تنظیمات محاسبات موازی روی چندین هسته میتواند زمان شبیهسازیهای شما را به شدت کاهش دهد.

آیا میتوان از Expression ها برای تعریف منابع انرژی (Source Terms) یا خواص مواد متغیر استفاده کرد؟
بله، و این یکی از جذابترین و قدرتمندترین کاربردهای Expression هاست. دیگر محدود به شرایط مرزی نیستید. تصور کنید میخواهید یک منبع حرارتی را در یک دامنه شبیهسازی کنید که قدرت آن در مرکز دامنه بیشترین مقدار را دارد و با فاصله گرفتن از مرکز، به صورت نمایی کاهش مییابد.
با Expression ها این کار به سادگی تعریف یک تابع گاوسی بر اساس مختصات مکانی (x, y, z) است. یا مثلاً میتوانید ویسکوزیته یک سیال را به صورت تابعی از دما تعریف کنید، بدون اینکه نیاز به درگیر شدن با پیچیدگیهای DEFINE_PROPERTY در UDF داشته باشید. این قابلیت، درها را به روی شبیهسازی فیزیکهای بسیار پیچیدهتر مانند شبیهسازی ذوب و انجماد مواد در فلوئنت باز میکند.
چگونه از بروز خطاهای رایج هنگام نوشتن Expression ها در نرمافزار فلوئنت جلوگیری کنیم؟
با اینکه کار با Expression ها بسیار سادهتر از UDF است، اما چند تله رایج وجود دارد که بهتر است از آنها آگاه باشید:
- عدم تطابق واحدها (Units): فلوئنت به شدت روی واحدها حساس است. اگر متغیری را با واحد متر [m] وارد میکنید، باید در تمام محاسبات خود این واحد را در نظر بگیرید. این یکی از کلافهکنندهترین خطاهاست، پس همیشه حواستون باشه.
- خطاهای سینتکسی: یک پرانتز جا افتاده یا یک عملگر اشتباه میتواند کل عبارت شما را بیاعتبار کند. خوشبختانه فلوئنت قبل از پذیرش عبارت، آن را ارزیابی میکند و به شما خطا را نشان میدهد.
- منطق اشتباه: گاهی عبارت شما از نظر سینتکسی درست است، اما از نظر فیزیکی یا ریاضی، منطق درستی ندارد. این میتواند منجر به نتایج اشتباه یا حتی واگرایی حل شود. اگر با چنین مشکلی مواجه شدید، بد نیست نگاهی به مقاله ۷ دلیل اصلی عدم همگرایی در فلوئنت بیندازید.
جدول نمونه سینتکس برای کاربردهای مختلف
| کاربرد | نمونه کد Expression | توضیحات |
| سرعت ورودی پالسی | 1.5 [m/s] * (1 + 0.2 * sin(10 [s^-1] * t)) | سرعت پایه ۱.۵ متر بر ثانیه با نوسان ۲۰ درصدی |
| دمای دیواره خطی | 300 [K] + 50 [K/m] * x | دما از ۳۰۰ کلوین شروع شده و در جهت x افزایش مییابد |
| منبع حرارتی گاوسی | 1e6 [W/m^3] * exp(-(x^2 + y^2) / (0.1 [m])^2) | منبع حرارتی متمرکز در مبدأ مختصات |
| ویسکوزیته وابسته به دما | 0.001 [kg/(m*s)] * pow(T/300[K], -0.5) | مدلی ساده برای کاهش ویسکوزیته با افزایش دما |
آیا نتایج شبیهسازی با Expression به اندازه UDF های کامپایلشده قابل اعتماد و دقیق است؟
این یک نگرانی کاملاً معتبر است، مخصوصاً برای کارهای پژوهشی و دانشگاهی. آیا نتایجش قابل اعتماده؟ بله، صد در صد. از نظر ریاضیاتی، حلگر فلوئنت در نهایت با یک سری عدد کار میکند. برای حلگر فرقی نمیکند که این عدد از یک UDF کامپایل شده آمده باشد یا از یک Expression تفسیر شده.
مادامی که فرمول و منطق شما در Expression همان چیزی باشد که در UDF مینوشتید، نتایج نهایی باید یکسان باشند. مسئولیت صحت فیزیکی مسئله همچنان با شماست. در نهایت، مهمترین گام برای اطمینان از صحت نتایج، فرآیند اعتبارسنجی است که در راهنمای جامع اعتبارسنجی نتایج CFD به طور کامل به آن پرداختهایم.
مهمترین نکات و ترفندهای حرفهای تیم سیمومک برای استفاده بهینه از Expression ها چیست؟
بر اساس تجربه ما در دهها پروژه صنعتی، چند نکته کوچک میتواند تفاوت بزرگی در کارایی شما ایجاد کند:
- از ساده شروع کنید: همیشه اول یک عبارت ساده بنویسید و از دکمه Evaluate برای تست آن استفاده کنید. سپس به تدریج آن را پیچیدهتر کنید.
- نامگذاری معنادار: برای Expression های خود نامهای واضح و با معنی انتخاب کنید (Inlet_Velocity_Profile بهتر از Expr_1 است).
- بهرهگیری از توابع داخلی: قبل از نوشتن یک تابع پیچیده، بررسی کنید که آیا فلوئنت تابع داخلی مشابهی (مثل step برای توابع پلهای) ندارد.
- تجسم قبل از اجرا: در صورت امکان، از قابلیتهای ترسیم (Plot) در فلوئنت برای مشاهده خروجی Expression خود روی یک مرز یا خط استفاده کنید تا مطمئن شوید همان چیزی است که در ذهن داشتید. 🤓
بعد از اینکه نتایج خود را با موفقیت گرفتید، گام بعدی یادگیری تکنیکهای حرفهای پسپردازش در CFD-Post برای ارائه گزارشهای حرفهای است.

آیا Expression ها قابلیتهای دیباگ و خطایابی بهتری نسبت به UDF ها ارائه میدهند؟
بسیار بهتر! فرآیند دیباگ کردن UDF یک کابوس است: کد را مینویسید، کامپایل میکنید، در فلوئنت بارگزاری میکنید، شبیهسازی را اجرا میکنید و… شبیهسازی با یک خطای عجیب متوقف میشود. حالا باید برگردید و حدس بزنید مشکل از کجای کد شما بوده است.
در مقابل، Expression ها یک حلقه بازخورد فوری دارند. همان لحظه که عبارت را مینویسید، فلوئنت آن را از نظر سینتکسی بررسی میکند. علاوه بر این، همانطور که گفته شد، میتوانید خروجی آن را به صورت بصری چک کنید. این قابلیت به تنهایی میتواند ساعتها در زمان شما صرفهجویی کند. برای اطمینان از کیفیت و دقت نتایج، میتوانید از خدمات انجام پروژه انسیس فلوئنت ما استفاده کنید. همچنین برای پروژههای حساس، امکان عقد قرارداد و انجام پروژه فلوئنت در تهران به صورت حضوری و یا انجام پروژه فلوئنت به صورت آنلاین برای سراسر کشور فراهم است.
با وجود Expression ها، آینده تعریف شرایط مرزی سفارشی در دینامیک سیالات محاسباتی چگونه خواهد بود؟
به نظر میرسد مسیر کاملاً روشن است. Ansys به وضوح در حال سرمایهگذاری روی ابزارهای کاربرپسندتر و یکپارچهتر مانند Expression ها است. این ابزارها سد بزرگ برنامهنویسی را از پیش روی مهندسان و محققان برمیدارند و به آنها اجازه میدهند تا بیشتر روی فیزیک مسئله تمرکز کنند تا درگیری با ابزار.
UDF ها به طور کامل از بین نخواهند رفت، اما به ابزاری برای متخصصان و برای حل مسائل بسیار خاص تبدیل خواهند شد؛ مسائلی که نیاز به دسترسی عمیق به ساختار داخلی حلگر دارند. برای ۹۵٪ کاربردها، Expression ها راه حل استاندارد و ارجح خواهند بود، همانطور که در پروژههای پیچیدهای مثل کیس استادی: کاهش نیروی درگ یک خودروی مسابقه میبینیم که چگونه تکنیکهای مدرن میتوانند به نتایج بزرگی منجر شوند.
پروژه CFD شما به شرط مرزی بسیار پیچیدهای نیاز دارد؟ تیم مهندسی سیمومک (simumech) چگونه میتواند آن را برای شما حل کند؟
گاهی اوقات، پیچیدگی یک مسئله صنعتی یا پژوهشی فراتر از قابلیتهای استاندارد نرمافزار و حتی Expression هاست. شاید نیاز به یک مدل فیزیکی کاملاً جدید، کوپل شدن با یک کد خارجی یا یک الگوریتم کنترلی پیچیده داشته باشید. اینجاست که تخصص و تجربه اهمیت پیدا میکند.
اگر در پروژه خود با چنین چالشی روبرو هستید و زمان برای شما اهمیت دارد، تیم ما در سیمومک آماده است تا به شما کمک کند. ما با تسلط بر ابزارهای پیشرفته و درک عمیق از فیزیک سیالات، میتوانیم پیچیدهترین مسائل را برای شما حل کنیم. تخصص ما در انجام پروژه فلوئنت و پیادهسازی صحیح روشهایی مانند استفاده از Expression یا UDF برای تعریف شرایط مرزی میتونه هفتهها در زمان اجرای پروژه شما صرفهجویی کند.
سوالات متداول (FAQ)
۱۰ سوال متداول درباره استفاده از Expression ها در فلوئنت:
- آیا Expression ها در نسخههای قدیمی فلوئنت هم وجود دارند؟
خیر، این قابلیت نسبتاً جدید است و در نسخههای مدرن Ansys Fluent (تقریباً از نسخه 2020 به بعد) به طور کامل توسعه یافته است. برای نسخههای قدیمیتر همچنان باید از UDF استفاده کنید. - آیا میتوانم از Expression و UDF به صورت همزمان در یک شبیهسازی استفاده کنم؟
بله، هیچ تداخلی وجود ندارد. شما میتوانید برای بخشی از مسئله (مثلاً شرط مرزی ورودی) از Expression و برای بخش دیگری (مثلاً تعریف خواص ماده پیچیده) از یک UDF استفاده کنید. - حداکثر پیچیدگی یک Expression چقدر میتواند باشد؟ آیا محدودیتی وجود دارد؟
از نظر تئوری محدودیت خاصی برای طول یا پیچیدگی ریاضیاتی یک Expression وجود ندارد. اما اگر عبارت شما به قدری پیچیده شود که خوانایی خود را از دست بدهد، شاید بهتر باشد برای مدیریت بهتر، آن را به چند Expression کوچکتر تقسیم کرده یا به فکر استفاده از UDF باشید. - آیا میتوان از منطق شرطی (If-Then-Else) در Expression ها استفاده کرد؟
بله، میتوان با استفاده از توابعی مانند step یا ترکیبی از عملگرهای منطقی (<, >, ==) به نتایجی شبیه به منطق شرطی دست یافت. این کار برای تعریف شرایطی که در بخشهای مختلف دامنه رفتار متفاوتی دارند، بسیار کاربردی است. - آیا Expression ها از حافظه (Memory) برای ذخیره مقادیر قبلی پشتیبانی میکنند؟
خیر، این یکی از تفاوتهای اصلی با UDF است. Expression ها به صورت “بیحالت” (Stateless) عمل میکنند و به مقادیر محاسبه شده در گام زمانی یا تکرار قبلی دسترسی ندارند. برای چنین کاربردهایی (مانند مدلهای هیسترزیس) باید از UDF و User-Defined Memory (UDM) استفاده کنید. - آیا میتوان از Expression ها در تنظیمات مش دینامیک (Dynamic Mesh) استفاده کرد؟
بله، شما میتوانید حرکت مرزها یا اجسام را با استفاده از Expression های وابسته به زمان (t) تعریف کنید که این کار فرآیند شبیهسازی قطعات متحرک را بسیار سادهتر میکند. - لیست کامل توابع و متغیرهای موجود برای Expression ها را از کجا پیدا کنم؟
بهترین و کاملترین مرجع، مستندات رسمی Ansys Fluent (Ansys Help) است. در آنجا لیست تمام توابع ریاضیاتی، متغیرهای فیزیکی و ثابتهای موجود به همراه مثال ذکر شده است. - آیا Expression ها بین نرمافزارهای مختلف Ansys (مثلاً Fluent و CFX) قابل انتقال هستند؟
سینتکس و قابلیتها میتواند بین نرمافزارهای مختلف متفاوت باشد. اگرچه مفهوم کلی یکسان است، اما بهتر است عبارات نوشته شده برای فلوئنت را مستقیماً در CFX استفاده نکنید و سینتکس آن را مجدداً بررسی کنید. - اگر Expression من باعث واگرایی حل شود، چگونه آن را خطایابی کنم؟
ابتدا مقدار Expression را در نقاط مختلف مرزی با ابزار Plot یا Probe بررسی کنید تا مطمئن شوید مقادیر فیزیکی معقولی تولید میکند (مثلاً سرعت منفی در ورودی ایجاد نکرده باشد). سپس سعی کنید عبارت را سادهتر کرده و ببینید آیا مشکل حل میشود یا خیر. - با وجود Expression ها، آیا یادگیری UDF هنوز هم ارزشمند است؟
بله، برای متخصصان CFD و کسانی که روی مسائل بسیار پیشرفته و غیر استاندارد کار میکنند، تسلط بر UDF همچنان یک مهارت بسیار ارزشمند و ضروری است. UDF نهایت انعطافپذیری را در اختیار شما قرار میدهد.