Question

I've written a small snippet of code, trying to adhere to the Fortran 2003 standard. The code is available on github.

This is my makefile:

FC = gfortran
FLGS = -g -pg -std=f2003 -I. -fbounds-check
DEPS = camx.prm
OBJ = unit-test-hadvppm.o hadvppm.o

#linker macro
%.o: %.f03 $(DEPS)
        $(FC) -c -o $@ $< $(FLGS)

#build targets

gnu-amd64-linux: $(OBJ)
        $(FC) -o $@ $^ $(FLGS)

clean: gnu-amd64-linux
        rm *.o

The code compiles without a problem using the above makefile and gfortran.

However, if I try to compile it with iFort, using just

ifort -o ifort-amd64-linux unit-test-hadvppm.f03 hadvppm.f03

it doesn't work, see the output below. I suppose that this has to do with the .f03 free file format. Is there a flag in iFort similar to gfortran's -std=f2003 flag? I tried to find this in the iFort Documentation, should I look harder?

enter image description here

Was it helpful?

Solution

There is nothing in the standard that specifies the suffix of the files. Intel always stated, that they treat *.f90 as the suffix for the free source format irrespective of the standard version. It is just a convention not based on any standard document.

Maybe the f90 suffix is little unfortunate, looking like just for Fortran 90, but you shouldn't hesitate to use it for every free-format source file.

Personally, I also do not like the practice of .f95,.f03, .f08 files. Should I rename the source file just because I call some intrinsic from a newer standard?

OTHER TIPS

You can specify the source form used in a source file using the -free and -fixed ifort command line options, for free and fixed form respectively.

As a separate issue, you can set the standard to issue diagnostics against using the -stand[:xxx] option. This doesn't change the code generated by the compiler, it just changes the diagnostics that the compiler issues. This is the equivalent of gfortran's -std=xxx option.

As another separate issue, you can specify that the compiler should change its behaviour to match that specified using the Fortran standard using the -standard-semantics compiler option. This covers scenarios where the compiler's behaviour historically was different from what the Fortran standard has ended up requiring or recommending.

As recommended in the comments and Vladimir's answer - the easiest option is to just use .f90 for any free form source file (which will be treated as free form source by ifort in the absence of the -fixed command line option), regardless of the standard that it has been written to.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top