Intel® Fortran Compilers

Performance without compromise on Windows*, Linux* and OS X*

  • Broad support for current and previous Fortran standards, plus popular extensions
  • Intel® Math Kernel Library included in suites
  • Optional Rogue Wave* IMSL* Fortran Numerical Library on Windows

Try & Buy Intel® Fortran Compiler in:

Intel® Parallel Studio XE

A complete Fortran development environment for Windows*

  • Works with Microsoft* Visual Studio* 2010, 2012 and 2013
  • Don't have Visual Studio? No problem - a Fortran development environment based on Microsoft Visual Studio 2010 Shell is included - nothing else to buy!
  • Develop, build, debug and run from the familiar Visual Studio IDE, or build and run from the command line - your choice!
  • 32-bit and 64-bit development included - no extra charge!
  • Create traditional console applications or advanced graphical interfaces with QuickWin, OpenGL* and Windows API support
  • COM (Component Object Model) and .NET interoperability provided
  • Build mixed-language applications with C++, Visual Basic*, Microsoft C# and more! (requires Microsoft Visual Studio)
  • Tens of thousands of declarations of routines, types and constants for Windows API, OpenGL, POSIX, dialogs, multi-byte character support and more!

Intel Fortran integration into Microsoft Visual Studio

  1. Fortran project and source files in Visual Studio
  2. Fortran-aware text editor with context-sensitive help, Go To Definition, templates, coloring and more
  3. Debug Fortran code with full access to Fortran types and arrays
  4. Build and debug mixed-language programs in a single Visual Studio solution
  5. Set breakpoints at Fortran source lines, with optional conditions


Broad support for current and previous Fortran standards, plus popular extensions

  • Full language Fortran 95, full Fortran 2003, plus significant Fortran 2008 features
    • Coarrays
    • DO CONCURRENT
    • 31 array dimensions (standard specifies 15)
    • NEWUNIT in OPEN
    • Much more - see release notes for details
  • Also supports FORTRAN IV (FORTRAN-66), FORTRAN 77 and Fortran 90
  • Extensive OpenMP 4.0* support
  • Source compatible with Compaq Visual Fortran* - most projects just need a rebuild

Performance without compromise

  • Industry leading performance on Intel and AMD* processors.  Take a look at the benchmarks below that were run by Polyhedron* for independent confirmation.


Geomean time in seconds - lower is better
As published 3/10/2014 at http://www.polyhedron.com

  • Extensive optimizations for the latest Intel processors, including Intel® Xeon Phi™ coprocessor
  • Take advantage of multicore, manycore and multiprocessor systems with OpenMP, automatic parallelism, DO CONCURRENT, coarrays and Intel Xeon Phi coprocessor support
  • Patented automatic CPU dispatch feature gets you code optimized for the current running processor

Intel® Math Kernel Library

  • Included in Fortran suites that adds advanced math processing
  • Vectorized and threaded for highest performance on all Intel and compatible processors
  • De facto standard APIs for simple code integration
  • Compatible with all C, C++ and Fortran compilers
  • Royalty-free, per developer licensing for low cost deployment
  • Click here for more information.

Rogue Wave* IMSL* 7 Fortran Numerical Library

  • Optional add-on to the suites that include Intel Visual Fortran compiler
  • Superior accuracy and reliability through 40 years of refinement
  • A comprehensive set of 1000+ algorithms
  • Supporting parallel processing architectures since 1990
  • Evolves easily with software and hardware upgrades
  • Click here for more information and pricing

Outstanding support

  • One year of support included with purchase – gives you access to all product updates and new versions released in the support period plus access to Intel® Premier Support
  • Active user forums for help from experienced users and Intel engineers

Works with your familiar development environment

  • Uses gcc tools, including gdb debugger
  • Link compatible with C and C++ from gcc
  • 32-bit and 64-bit compilers included – no extra charge!

Broad support for current and previous Fortran standards, plus popular extensions

  • Full language Fortran 95, Full Fortran 2003, plus significant Fortran 2008 features
    • Coarrays
    • DO CONCURRENT
    • 31 array dimensions (standard specifies 15)
    • NEWUNIT in OPEN
    • BLOCK
    • Much more - see release notes for details
  • Also supports FORTRAN IV (FORTRAN-66), FORTRAN 77 and Fortran 90
  • Extensive OpenMP 4.0* support

Performance without compromise

  • Industry leading performance on Intel and AMD processors. Take a look at the benchmarks below that were run by Polyhedron for independent confirmation.


Geomean time in seconds - lower is better
As published 3/10/2014 at http://www.polyhedron.com

  • Extensive optimizations for the latest Intel processors including Intel® Xeon Phi™ coprocessor
  • Take advantage of multicore, manycore and multiprocessor systems with OpenMP, automatic parallelism, DO CONCURRENT, coarrays and Intel Xeon Phi coprocessor support
  • Patented automatic CPU dispatch feature gets you code optimized for the current running processor

Intel® Math Kernel Library

  • Included in Fortran suites that adds advanced math processing
  • Vectorized and threaded for highest performance on all Intel and compatible processors
  • De facto standard APIs for simple code integration
  • Compatible with all C, C++ and Fortran compilers
  • Royalty-free, per developer licensing for low cost deployment
  • Click here for more information

Outstanding support

  • One year of support included with purchase – gives you access to all product updates and new versions released in the support period plus access to Intel® Premier Support
  • Active user forums for help from experienced users and Intel engineers

Works with your familiar development environment

  • Build from command line or use Xcode integration (limited feature)
  • Link compatible with C and C++ from gcc
  • 32-bit and 64-bit compilers included – no extra charge!

Broad support for current and previous Fortran standards, plus popular extensions

  • Full language Fortran 95, full Fortran 2003, plus significant Fortran 2008 features
    • DO CONCURRENT
    • 31 array dimensions (standard specifies 15)
    • NEWUNIT in OPEN
    • BLOCK
    • Much more - see release notes for details
  • Also supports FORTRAN IV (FORTRAN-66), FORTRAN 77 and Fortran 90
  • Extensive OpenMP 4.0* support

Performance without compromise

  • Industry leading performance
  • Extensive optimizations for the latest Intel processors
  • Take advantage of multicore, manycore and multiprocessor systems with OpenMP, automatic parallelism, DO CONCURRENT
  • Patented automatic CPU dispatch feature gets you code optimized for the current running processor

Intel® Math Kernel Library

  • Vectorized and threaded for highest performance on all Intel and compatible processors
  • De facto standard APIs for simple code integration
  • Compatible with all C, C++ and Fortran compilers
  • Royalty-free, per developer licensing for low cost deployment
  • Included in Intel® Fortran Composer XE
  • Click here for more information

Outstanding support

  • One year of support included with purchase – gives you access to all product updates and new versions released in the support period plus access to Intel® Premier Support
  • Active user forums for help from experienced users and Intel engineers

Videos to help you get started.

  • Introduction to Intel® Visual Fortran in the Microsoft* Visual Studio* Development Environment
  • Optimizing your application with Intel® C++ and Fortran Compilers for Windows* and Linux*

Register for future Webinars


Previously recorded Webinars:

  • Update Now: What’s New in Intel® Compilers and Libraries
  • An Introduction to Intel® Visual Fortran Development on Intel® Xeon Phi™ coprocessor
  • OpenMP 4.0 for SIMD and Affinity Features with Intel® Xeon® Processors and Intel® Xeon Phi™ Coprocessor
  • Learn to be an Intel® Visual Fortran Power User
  • Optimizing and Compilation for Intel® Xeon Phi™ Coprocessor

Featured Articles

No Content Found

More Tech Articles

OpenMP Related Tips
By AmandaS (Intel)Posted 11/25/20130
Compiler Methodology for Intel® MIC Architecture OpenMP Related Tips OpenMP* Loop Collapse Directive   Use the OpenMP collapse-clause to increase the total number of iterations that will be partitioned across the available number of OMP threads by reducing the granularity of work to be done...
Resolving problem when building HDF5* with Intel® compiler 14.0
By Yolanda Chen (Intel)Posted 11/12/201310
Introduction To build the latest HDF5* with Intel® compiler 14.0, a segmantation fault occurs when running "make check". This article is to provide a solution in resolving this issue. The information in this article is assuming you already undertand how to build HDF5* with Intel compilers by read...
Getting Started with Intel® Composer XE 2013, New User Compiler Basics
By AmandaS (Intel)Posted 11/07/20130
Compiler Methodology for Intel® MIC Architecture Getting Started with Intel® Composer XE 2013, New User Compiler Basics Overview Modern compilers can be invoked with hundreds of options. From these, what are the essential set of options needed by the typical application programmer? This chapter h...
Memory Allocation and First-Touch
By AmandaS (Intel)Posted 11/07/20132
Compiler Methodology for Intel® MIC Architecture Memory Allocation and First-Touch Memory allocation is expensive on the coprocessor compared to the Intel® Xeon processor so it is prudent to reuse already-allocated memory wherever possible. For example, if a function gets called repeatedly (say...
Subscribe to Intel Developer Zone Articles

Supplemental Documentation

No Content Found
Subscribe to Intel Developer Zone Articles

You can reply to any of the forum topics below by clicking on the title. Please do not include private information such as your email address or product serial number in your posts. If you need to share private information with an Intel employee, they can start a private thread for you.

New topic    Search within this forum     Subscribe to this forum


Gather strategy for coarrays
By opmkl7
In the trivial code below, all images perform some task, which output needs to be gathered on the first image (for further processing, for instance). Two strategies are implemented: the first one consists in having image 1 go hunt for the results on other images; the second one consists in all images writing to the local coarray of image 1. My questions are the following: Is one of these two approaches more efficient over the other one? Intuitively one might say (2) ... but on the other hand nothing is really intuitive  or obvious with parallel codes... Is the second one even standard compliant? In particular, I have in mind this paragraph in the Intel Compiler Fortran 14 documentation: "If a variable is defined on an image in a segment, it must not be referenced, defined, or become undefined in a segment on another image unless the segments are ordered.". Line 36 of the code forms a segment that is not ordered when executed by the code images, and yet these access the same array c...
Strategy for merging file output from multiple coarray images?
By opmkl3
I am looking for a strategy to implement the merging of file output when a coarray program is executed. Assume I have a code being executed on multiple images. Ideally, the overall behavior of the code and some intermediate results would be documented in a small number of log files (possibly just one). At regular intervals (but not too frequently), the slave images would add content to these *.log files. I am a bit at a loss to find an elegant solution to this problem, and if somebody here could share their experience with this I would be very grateful!
Wired Performance
By Blane J.6
I happen to test the lower_limit<=variable<=upperlimit form of selection statement in IF block, and it seems that the statement is always true even if the upperlimit is little than the lower_limit, why is that ? For example: integer :: var = 10 if(9 <= var <= 11) write(*,*) "Yes" ! When execute, "Yes" is printed out. if(11 <= var <= 9) write(*,*) "Yes Again" ! When execute, "Yes Again" is printed out. 
ERROR when using LCONF and L2ONF
By Nga N.13
Hello, I would like to ask for help. When running a program using LCONF and L2ONF, I encountered an ERROR: ERROR 5 FROM LCONF.  The equality constraints and the bounds on the variables are found to be inconsistent. I checked the program with Matlab and there was no feasible solution.  I use LCONF in a loop for 12 cases. It worked well with the first 8 cases and there was above ERROR with 9th case (I knew that this case does not have optimal solution). When encountering the ERROR, the program crashed and stopped working at case 9th. Hence, case 10th, 11th,12th will not be run. Would you please let me know how I can make the program keep working with case 10th, 11th, 12th without stopping because of ERROR of case 9th? Thank you so much.
help with older project - converting to new compilers
By wgrimes@cea-az.com2
Hi, Not sure where to post this....so starting here.  I have a solution that combines Intel FORTRAN with Visual studio, specifically some C and C++ code.  Last time I compiled, I used older versions...running on Virtual XP machine on my Win7 computer. I'm looking for help in migrating over to new system....really should not take more than a few hours (famous last words)....and I'm willing to pay for help.  Is there anyone out that that is interested or knows where I can find someone with Intel FORTRAN and Visual C experience?? Thanks. Wes wgrimes@cea-az.com
Bug(?) with elemental function and allocatable actual argument
By Wolf W.2
Hello! I am getting some odd results, when i try to use the allocatable return value of a function directly as an argument of another function. Is this behavior intendet, or is this usage of the elemental-keyword false? I use the 15.0.2 compiler. program main implicit none character(4) :: test_char = "Test" character(:), allocatable :: temp_alloc character(10) :: temp_fixed ! This should be the result ! 'Test\foo' write(*,*) test_char // "\" // foo() ! This is the result ! 'foo f .' write(*,*) concat(test_char, foo()) ! It works as intendet, when the result of 'foo' is stored in a variable temp_alloc = foo() write(*,*) concat(test_char, temp_alloc) temp_fixed = foo() write(*,*) concat(test_char, temp_fixed) contains function foo() character(:), allocatable :: foo foo = "foo" end function foo ! There are no problems without the 'elemental'-keyword elemental function concat(var1,var2) result(var_result) ch...
SafeArrayGetElement isn't getting anything
By Isaac V.1
Greetings, dear fellow developers! I have been doing some programming with mixed languages (VSTO, VBA for Excel(R) + Fortran) for almost 2 years and I hadn't needed to use Safe Arrays. Everything had worked well by just passing little arrays to my Fortran DLLs. However, this time I have been working on a big DLL that needs big multidimensional arrays, that was when I had to start using Safe Arrays... I started trying to re-write Mr. Lionel's Safe Arrays example just for practice (and to see if I am getting the idea)... But it's not working! My code is this SUBROUTINE elSeguro(refCp) !DEC$ ATTRIBUTES DLLEXPORT, STDCALL, DECORATE :: ELSEGURO !DEC$ ATTRIBUTES ALIAS : 'ELSEGURO' :: ELSEGURO !DEC$ ATTRIBUTES REFERENCE :: refCp USE ifcom IMPLICIT NONE !Parámetros INTEGER, PARAMETER :: DP = KIND(1.D0) !Punteros INTEGER(INT_PTR_KIND()),INTENT(INOUT) :: refCp TYPE li...
PDT in libraries
By Espen M.9
Hi I've been experimenting with parameterized derived types and got a question regarding building libraries with MODULEs containing PDTs; is it possible to distribute (compiled) libraries containing PDT? I guess it's trivial for PDTs with parameters of LEN type, but what about for KIND type parameters? their values have to be known at compile-time, right? I've read somewhere that in C++ templates are written in header files which are distributed in textual form or some intermediate/precompiled form along with libraries, and that the actual templated entities are instantiated when they are "USEd" in Fortran terms. (Luckily) Fortran doesn't have header files (AFAIK) but use MODULEs instead; in the case that the answer to the above question is negative, would it be possible to include some (processor dependent) code in a MODULE that makes it possible?
Subscribe to Forums

You can reply to any of the forum topics below by clicking on the title. Please do not include private information such as your email address or product serial number in your posts. If you need to share private information with an Intel employee, they can start a private thread for you.

New topic    Search within this forum     Subscribe to this forum


compiler-generated interfaces question
By twlaub1
We have built all our own interface for all of our routines and would like ifort to check them for us. That is, tell us if there is a missing or incorrect interface. However, the only info/behavior I can find is to let the compiler generate interfaces or not. When we let it we get genmod interfaces for all routines whether we have one or not. Our interface mod file is built and used but I want the compiler to only generate an interface when ours in incorrect or missing. Is there a combination of compiler options that will get us that behavior? A related question is whether we should be creating our own interfaces or not. Is it better to let the compiler generate them? If we let the compiler generate interfaces will we be warned if the same routine name is used with different argument lists or will the compiler somehow happily create two interfaces and leave us in the dark?  
Free webinar April 7 2015 9am PST &quot;Further Vectorization Features of the Intel Compiler&quot;
By Steve Lionel (Intel)0
There is a free webinar “Further Vectorization Features of the Intel Compiler” coming next Tuesday talking specifically about getting more vectorizations from Intel Compilers. But you would benefit it more if you've watched/listened to the previous webinar Performance essentials using OpenMP* 4.0 vectorization with C/C++. Please register at Intel® Software Tools Technical Webinar Series  Detail info on the webinar: Further Vectorization Features of the Intel Compiler The vectorization features of the Intel compiler continue to get more powerful with each succeeding version. In this webinar, we will look beyond the vectorization of simple loops over intrinsic data types, to examples involving STL (Standard Template Library) vectors; multi-dimensional arrays, including data alignment; explicit outer loop vectorization, using the SIMD feature of OpenMP 4.0; and, if time permits, indirect addressing. Code samples will include C, C++ and Fortran and will be available for subsequent dow...
Installing Fortran compiler
By David B.1
I am trying to install the Fortran compiler (and associated libraries and linkers) on my MacBook Pro laptop -- a brand new (Yosemite) system.  I downloaded the "Academic Research Performance Libraries from Intel (OS X*)” to my Mac — a 1.1 Gbyte file named: m_ipp_8.2.1.108.mpkg. I then clicked on this file and went through the install procedure.  What do I do next? I found the webpage: https://software.intel.com/en-us/articles/intel-compilers-for-linux-and-... but there is no file "install.sh" in the distribution package as mentioned on the above page.  There is a file "link_install.sh" in /opt/intel/composer_xe_2015.1.108.  Is this the file I am to "launch".  How do I "launch" this, by the way -- by typing "sh link_install.sh"? Along this line, is it really necessary, as a prerequisite (according to the above Intel webpage), to install the full Apple Xcode package?  Isn't it enough to just install the Command Line Tools (as I have done)?  Any general tips would be appreciated. 
OpenMP calls with newer multi core/thread CPUs
By Vaughn Cable7
My new workstation runs RH Release 6.6 with Linux kernel 2.6.32-504.el6.x86_64, with a Xeon CPU & 64 GB RAM, etc.  Nothing else is different, however, now my Fortran routines with openMP calls to the BLAS lib (from Intel Libs) aren't maximizing core/thread usage (it looks like core/thread-swapping has gone "nutz") unless I set the number of threads to 1 in my execution script.  Have you seen this behavior with upgrades to the multicore/multithread CPUs?
Overriding type-bound procedures
By Ewan T.8
Hi there, I am trying to make best use of Fortran's OOP features and I have a question regarding the overriding of type-bound procedures. Is there a way in which I can define a type-bound procedure that can be overridden in child objects (objects which extend the base class) and have different dummy arguments? At the moment I can override type-bound procedures but I have to have exactly the same number and type of dummy arguments. I had been thinking about generic procedures, but I couldn't figure out to tackle the problem. Thanks, Ewan
ifort real*4 count bug
By 志强 赵.9
Recently, I wrote a piece of codes, like that below. The value of num is larger than the range of integer 32. The result of the tmp should be 2. But in that code, the program gave 0. No matter if use ifort 13.0.0 or 15.0.0. If I change the tmp from real*4 to real*8, the result is correct. Ang idea? integer*8,parameter :: num = 2500000000 integer*8 :: i real*4,dimension(:),allocatable :: a real*4 :: tmp allocate(a(num)) a = 0.0e0 do i = 1, num if(i.eq.1) then a(1) = 1.0e0 else if(mod(i, 2).eq.0) then a(i) = 1.0e0 else a(i) = -1.0e0 end if end do tmp = 0.0e0 do i = 1, num tmp = tmp + a(i) end do print*, tmp end  
compile ifort source code in different folder
By diedro4
Dear all, I would like to compile a fortran code with ifort. The source code files *.f90 are in different sub-folders. how can I do? Thanks    
Calling Java from Fortran using JNI
By Chaitra R.2
Hello, I have a program to call Fortran from Java. The codes for func.f95, addC.c, and addJava.java are as follows: FUNCTION add(c, iflag) RESULT(f) INTEGER, INTENT(IN):: c INTEGER, INTENT(OUT):: iflag INTEGER:: f INTEGER:: i i=10 f=c+i PRINT *, f PRINT *, iflag END FUNCTION #include <stdio.h> #include "addJava.h" extern int add(int *, int *); JNIEXPORT jint JNICALL Java_addJava_add(JNIEnv *env, jobject obj, jint c, jint iflag) { int result; printf("-- We are now in the C program CCode --\n"); printf("c=%d, iflag=%d\n",c,iflag); printf("Call the FORTRAN code\n"); result = add(&c,&iflag); printf("-- We have now returned back to the C program --\n"); printf("c=%d, iflag=%d\n",c,iflag); printf("Result = %d\n",result); return result; } import java.io.*; import java.lang.*; import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.Platform; import com.sun.jna.ptr.IntByReference; clas...
Subscribe to Forums