زبان برنامه نویسی فرترن (Fortran) در سال 1957 برای محاسبات علمی (scientific calculations) توسط تیمی در IBM توسعه یافت. فرترن (Fortran) در ابتدا زبان برنامه نویسی سطح پایین (low-level) بود که در بروزرسانی‌های خود به زبان برنامه نویسی سطح بالا (high-level) تبدیل شد. زبان‌های برنامه نویسی سطح پایین مثل اسمبلی (assembly) بسیار نزدیک به زبان ماشین یا کامپیوتر هستند در حالیکه زبان‌های برنامه نویسی سطح بالا مثل متلب (MATLAB)، پایتون (Python) و … بسیار شبیه به زبان انسان هستند.

کاربران ایده‌ها و اهداف خود را توسط یکی از زبان‌های برنامه نویسی پیاده سازی می‌کنند سپس زبان برنامه نویسی توسط مترجم (translator) خود، برنامه نوشته شده را به زبان ماشین (machine code) تبدیل می‌کند. مترجم‌ها یا خط به خط این عملیات را انجام می‌دهند یعنی interpreter دارند، یا به‌صورت یکجا این عملیات را انجام می‌دهند که compiler نام دارند. مترجم یا مفسر زبان برنامه فرترن (Fortran) به زبان ماشین، compilation است که معمولا سرعت بالاتری نسبت به مترجم interpretation دارد.

تبدیل زبان‌های برنامه نویسی به زبان ماشین
فرایند تبدیل زبان‌های برنامه نویسی به زبان ماشین

از میان کامپایلرهای مختلف موجود برای فرترن (Fortran) تمرکز ما بر کامپایلرهای اینتل (Intel) برای فرترن است.

  • کامپایلر کلاسیک اینتل فرترن (Intel Fortran Compiler Classic) یعنی ifort
  • کامپایلر LLVM-based اینتل فرترن (Intel® LLVM-based compiler Intel® Fortran Compiler) یعنی ifx

شرکت Intel آخرین ورژن ifort را در سال 2024 عرضه کرد و به پشتیبانی خود به کامپایلر کلاسیک اینتل فرترن خاتمه داد.

برنامه‌های فرترن به صورت fixed-form و free-form نوشته می‌شوند. فایل‌های f.* و for.* به صورت fixed-form نوشته می‌شوند که ساختار اولیه و تاریخی فرترن است. این فرمت هنوز در سابروتین نویسی در آباکوس کاربرد دارد. فایل‌های f90 و f95 از جمله ساختارهای free-form هستند که امروزه بیشتر استفاده می‌شوند.

در ساختار fixed-form ستون اول می‌تواند خالی باشد یا عبارت C به معنای کامنت بودن آن خط قرار گیرد. ستون‌های 2-5 برای لیبل‌گذاری برنامه است. ستون ششم اگر پر باشد به معنای آن است که کدها ادامه خط قبلی هستند. ستون 7-72 برای نوشتن برنامه است و بعد از خط 72 خوانده نمی‌شود. ساختار fixed-form به گذشته‌های دور بر می‌گردد که کدها بر روی صفحات پانج می‌شدند، برای همین است که امروزه معمولا fixed-form منسوخ شده است. از معدود جاهایی که نیاز است از ساختار fixed-form استفاده شود، سابروتین نویسی در نرم افزار المان محدود آباکوس (Abaqus) است. با نوشتن عبارت DIR$ FREEFORM می‌توان کامپایلر را راهنمایی نمود که از free-form به جای fixed-form استفاده شده است.

ساختار fixed-form در فرترن (Fortran)
ساختار fixed-form در فرترن (Fortran)

بر خلاف ساختار fixed-form، ساختار free-form محدودیت‌ خاصی ندارد و کدها را می‌توان از ستون اول نوشت. امروزه معمولا ساختار free-form در فرترن (Fortan) استفاده می‌شود.

داده‌های تعریف شده موجود در فرترن (Fortran) به شرح زیر است:

  • داده‌ متنی (Character type)
  • داده‌های عددی (Numeric types)
  • داده‌ منطقی یا بولین (Logical type)

علاوه بر این داده‌های از پیش تعریف شده (Intrinsic Data Types) در فرترن (Fortran)، کاربر با توجه به نیازهای خود می‌تواند داده‌های دیگری نیز تولید کند.

برای ذخیره اسم‌ها در زبان‌های برنامه نویسی از دیتای کاراکتر (Character) یا رشته (String) استفاده می‌شود. این متن داخل سینگل کوتیشن (single quotation) مثل ‘Mecademy’ یا دابل کوتیشن (double quotation) مثل “Mecademy” نوشته می‌شود.

تعریف کاراکتر (Character) در fixed-form و free-form
تعریف کاراکتر (Character) در زبان برنامه نویسی فرترن (Fortarn) در ساختار fixed-form و free-form

داده‌های عددی در فرترن می‌تواند اسکالر (scaler) یا آرایه (array) باشند و یکی از انواع اعداد زیر باشند.

  • اعداد صحیح (Integer)
  • اعداد حقیقی یا اعشاری (real)
  • اعداد مختلط (complex)
انواع دیتای تعریف شده در فرترن (Intrinsic Data Types in Fortran)
انواع دیتای تعریف شده در فرترن (Intrinsic Data Types in Fortran)

دیتای منطقی (logical) یا بولین (boolean) به دو حالت true یا false است و بیشتر در عبارات شرطی (conditional statement) استفاده می‌شوند.

در زبان برنامه نویسی فرترن (Fortran) تابع دارای چند ورودی و یک خروجی هست. فراخوانی توابع ذاتی فرترن بدین ترتیب است.

output = functionName(arg1, arg2, arg3 …)

در زبان برنامه نویسی فرترن (Fortran) سابروتین (subroutine) دارای چند ورودی و چندین خروجی هستند به نحوی که می‌توان خروجی‌های سابروتین را بر حسب ورودی‌های سابروتین تعریف و حتی ورودی‌های سابروتین را ویرایش کرد. برای فراخوانی سابروتین‌های ذاتی یا از پیش تعریف شده در فرترن کافی قبل از اسم سابروتین و آرگمان‌های آن عبارت call نوشته شود. بنابراین فراخوانی سابروتین‌های ذاتی فرترن بدین ترتیب است.

call subroutineName(arg1, arg2, arg3 …)

بهتر است کل برنامه را به قسمت‌های کوچک‌تر تبدیل کرد تا خوانایی و توسعه برنامه و دیباگ کردن آن ساده‌تر شود. این قسمت‌ها می‌توانند به صورت تابع نویسی توسط کاربر (User-defined Function) انجام یا سابروتین نویسی توسط کاربر (User-defined Subroutine) انجام شود. نحوه نوشتن تابع توسط کاربر در زبان برنامه نویسی فرترن مطابق تصویر زیر است.

نوشتن تابع توسط کاربر (User-defined Function) در فرترن (Fortran)
نوشتن تابع توسط کاربر (User-defined Function) در فرترن (Fortran)

بهتر است کل برنامه را به قسمت‌های کوچک‌تر تبدیل کرد تا خوانایی و توسعه برنامه و دیباگ کردن آن ساده‌تر شود. این قسمت‌ها می‌توانند به صورت تابع نویسی توسط کاربر (User-defined Function) انجام یا سابروتین نویسی توسط کاربر (User-defined Subroutine) انجام شود. نحوه نوشتن سابروتین توسط کاربر در زبان برنامه نویسی فرترن مطابق تصویر زیر است

نوشتن سابروتین توسط کاربر (User-defined Subroutine) در فرترن (Fortran)
نوشتن سابروتین توسط کاربر (User-defined Subroutine) در فرترن (Fortran)

آموزش سابروتین نویسی در آباکوس (Abaqus)

مهندس میلاد وحیدیان
تصویر مهندس میلاد وحیدیان

نویسنده:
مهندس میلاد وحیدیان 
دانشجوی دکترای مهندسی مکانیک دانشگاه تهران

(برای مطالعه بیشتر روی نام یا تصویر ایشان کلیک کنید)