Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.

Error #8284 while running a .f90 code

T__Dhinesh
Beginner
2,298 Views

Hi,

I have an old .f90 FORTRAN code (gfortran). I am trying to run the code from Visual Studio but I see some errors. I have the following tools/ compilers in my windows 7 64 bit system,

Visual Studio 2013 premium

Visual FORTRAN Compiler XE 14.0 Update 3

I could run the code(s) from the command prompt using gfortran compiler. I want to run the same code in visual studio so that I can edit and debug the code easily (I am new to Visual Studio though).

I added the below in the Visual studio directory in Tools > Options > Intel Composer XE > Visual Fortran > Compilers,

Includes: $(FNL_DIR)\Intel64\include\dll

Libraries: $(FNL_DIR)\Intel64\lib

I couldn’t open the .f90 script in visual studio (File > Open > Project) as it is not seeing any .f90 files from my folder. But I could create new FORTRAN .f90 code (File > New > Project >Intel ® Visual Fortran > Console Application > Main Program Code) and execute “Hello World” program successfully. I tried copy the main code and overwrite the hello world program with the main code and added all the other files path from Project > Add Existing Item, and below are the errors I got,

Error      1             error #8284: If the actual argument is scalar, the dummy argument shall be scalar unless the actual argument is of type character or is an element of an array that is not assumed shape, pointer, or polymorphic.   [XNEW]             C:\Users\S267564\Desktop\sCO2 Codes\sel_sco2_brayton_model\Netlib\subplex\simplx.f  161       

Error      2             error #8284: If the actual argument is scalar, the dummy argument shall be scalar unless the actual argument is of type character or is an element of an array that is not assumed shape, pointer, or polymorphic.   [XNEW]             C:\Users\S267564\Desktop\sCO2 Codes\sel_sco2_brayton_model\Netlib\subplex\simplx.f  175       

Error      3             Compilation Aborted (code 1)      C:\Users\S267564\Desktop\sCO2 Codes\sel_sco2_brayton_model\Netlib\subplex\simplx.f  1            

Error      4             error #7421: A constant or general expression must appear in a format list in this context.   [AI]             C:\Users\S267564\Desktop\sCO2 Codes\sel_sco2_brayton_model\example_fortran_program.f90   91          

Error      5             error #6185: This constant is out-of-range in a format list.   [0]               C:\Users\S267564\Desktop\sCO2 Codes\sel_sco2_brayton_model\example_fortran_program.f90   91          

Error      6             error #6181: An extra comma appears in the format list.   [,A,F]               C:\Users\S267564\Desktop\sCO2 Codes\sel_sco2_brayton_model\example_fortran_program.f90   91          

Error      7             error #7421: A constant or general expression must appear in a format list in this context.   [AI]             C:\Users\S267564\Desktop\sCO2 Codes\sel_sco2_brayton_model\example_fortran_program.f90   95          

Error      8             error #6185: This constant is out-of-range in a format list.   [0]               C:\Users\S267564\Desktop\sCO2 Codes\sel_sco2_brayton_model\example_fortran_program.f90   95          

Error      9             error #6181: An extra comma appears in the format list.   [,A,F]               C:\Users\S267564\Desktop\sCO2 Codes\sel_sco2_brayton_model\example_fortran_program.f90   95          

Error      10           Compilation Aborted (code 1)      C:\Users\S267564\Desktop\sCO2 Codes\sel_sco2_brayton_model\example_fortran_program.f90   1            

 

 I don’t understand the errors while it is successfully running in command prompt using gfortran compiler.

Please help me to find the errors. Also please advise me why I couldn’t able to open .f90 file directly in visual studio (File > Open > Project).

Thank you.

 

0 Kudos
24 Replies
Arjen_Markus
Honored Contributor I
2,057 Views

Without actually seeing the code it is impossible for us to explain the error you are seeing. From the error text I can only guess that there is a mismatch in the actual and dummy arguments. The reason that gfortran may accept the code and Intel Fortran does not is, that Intel Fortran has a feature where the interfaces are automatically generated. This enables the compiler to do more extensive error checking. Older code used to assume a lot of things that nowadays is flagged as unsafe.

To make some progress, please show the relevant code.

 

0 Kudos
T__Dhinesh
Beginner
2,057 Views

Hi Arjen,

Thank you for your prompt response. Please see the attached code (example_fortran_program.f90).

I look forward to hearing from you.

Thank you.

0 Kudos
JVanB
Valued Contributor II
2,057 Views

Your first two errors were there because you used a scalar as a placeholder actual argument for an array dummy argument. This kind of thing was common in f77 days when there was no such thing as OPTIONAL arguments, or explicit interfaces that enabled the programmer to deploy them. But ifort was able to catch it; I don't know if gfortran can do so across different files. The solution I would recommend is to change 'dum' to 'dum(1)' in the 3 places it occurs in simplx.f. The first place, in line 81, declares dum as an array instead of a scalar, and the other two places, at lines 162 and 176, it passes an element of the array, which is OK as both a scalar dummy argument or an array dummy argument through the magic of sequence association.

The last set of errors was there because you had "AI0" instead of "A,I0" in a format list. Go back and compile

gfortran -c -std=f2008 example_fortran_program.f90

and gfortran will give you a nice error message about that.

 

0 Kudos
jimdempseyatthecove
Honored Contributor III
2,057 Views
call newpt (ns,-beta,s(1,icent),s(1,itemp),
 .false.,dum,small)

...
subroutine newpt (ns,coef,xbase,xold,new,xnew,small)

integer ns

double precision coef,xbase(ns),xold(ns),xnew(*)

logical new,small

------

call newpt (
     ns,         ! integer ns
    -beta,       ! double precision coef
    s(1,icent),  ! *** double precision xbase(ns)
    s(1,itemp),  ! *** double precision xold(ns)
    .false.,     ! logical new
    dum,         ! *** double precision xnew(*)
    small)       ! logical small

The lines marked with *** are passing in scalar references instead of array references

You could turn off interface checking, but I strongly suggest you correct the call statements

double precision dumArray(ns)

call newpt (
     ns,         ! integer ns
    -beta,       ! double precision coef
    s(1:ns,icent),  ! double precision xbase(ns)
    s(1:ns,itemp),  ! double precision xold(ns)
    .false.,     ! logical new
    dumArray,         ! double precision xnew(*) *** not used with new==.false.
    small)   ! logical small

Jim Dempsey

0 Kudos
T__Dhinesh
Beginner
2,057 Views

Thank you for your advice. I have changed the  "AI0" of "A,I0" in example_fortran_program.f90, changed the dum to dum(1) in both subplx.f (line # 100,194) and simplx.f (line # 81,162,176). 

I got the below three errors after these corrections. I think the reason for these errors are also similar however I am not sure how to rectify. It would be great if you can help me to change the following two lines in subplx.f

    call dcopy (n,scl,0,work,1)
          call dcopy (n,scl,0,work(istptr),1)

Error 1 error #8284: If the actual argument is scalar, the dummy argument shall be scalar unless the actual argument is of type character or is an element of an array that is not assumed shape, pointer, or polymorphic.   [DX] C:\Users\S267564\Desktop\Final_sco2\sel_sco2_brayton_model\Netlib\subplex\subplx.f 168

Error 2 error #8284: If the actual argument is scalar, the dummy argument shall be scalar unless the actual argument is of type character or is an element of an array that is not assumed shape, pointer, or polymorphic.   [DX] C:\Users\S267564\Desktop\Final_sco2\sel_sco2_brayton_model\Netlib\subplex\subplx.f 169
Error 3 Compilation Aborted (code 1) C:\Users\S267564\Desktop\Final_sco2\sel_sco2_brayton_model\Netlib\subplex\subplx.f 1
0 Kudos
mecej4
Honored Contributor III
2,057 Views

I believe that it is probably a waste of time for you to take old Fortran 77 codes from Netlib and other code that is known to work correctly and then check them for correct interface usage. Simply turn off interface checking in your project settings. I compiled all your source files at the command line using IFort 16.0.4. The program ran and gave cycle efficiency = 0.465.

0 Kudos
JVanB
Valued Contributor II
2,057 Views

Let's see... hopefully you also changed 'dum' to 'dum(1)' in subplx.f. But that error with DX looks like a bad one. Try changing

          call dcopy (n,scl,0,work,1)
          call dcopy (n,scl,0,work(istptr),1)

to

          if(n > 1) then
             write(*,*) 'Big problem here...'
             stop
          end if
          call dcopy (n,[scl],0,work,1)
          call dcopy (n,[scl],0,work(istptr),1)

If the program stops with the error above printed out, something has to be fixed. Otherwise it will be OK.

EDIT: I just checked and there are other places where this usage happens. I you want, try fixing them one by one until the errors stop.

 

0 Kudos
jimdempseyatthecove
Honored Contributor III
2,057 Views

Because you are new to Fortran, you might not quite understand why [scl] works where scl without square brackets does not. In Fortran []'s are used as an array constructor: [1,2,3] constructs a nameless array of integers, [A, 1.2, B] constructs an array of real (assuming A and B are real).

The error message you received for this statement was the same as what I posted in #5. It is an exercise for yourself to make correlations of mismatched arguments and correct in a similar manner.

Jim Dempsey

0 Kudos
andrew_4619
Honored Contributor II
2,057 Views

I would also add to Jims comment at #9 that any array constructed with [] within a call statement is a temporary so it can be used within the call but cannot be modified or passed back in any way. 

0 Kudos
mecej4
Honored Contributor III
2,057 Views

As you had to do with DUM in simplx.f, you may change the declaration of SCL to SCL(1) in subplx.f.

There is a subtle error in module_CO2_properties.f90, on line 94. At present you have

real(dp), parameter :: P_upper_limit = 60000_dp

If your Fortran compiler uses kind numbers for integers and reals with overlap, for example, dp = 2, the constant 60000_2 will be seen as INTEGER(KIND=2); if the corresponding INTEGER type is a 2-byte integer, 60000 > 32767, so integer overflow will occur! 

To avoid all these problems, add a decimal point, making line 94 become

real(dp), parameter :: P_upper_limit = 60000._dp

 

0 Kudos
T__Dhinesh
Beginner
2,057 Views

Thank you for all your responses. 

I finally fixed the problem by changing the dummy to an array as suggested. 

It would be great if someone can help me on the reason for not being able to open the .f90 file directly from the folder (always I am opening a new project and replacing the default hello world program with the main script)

Is it something to do with the visual studio settings?

Thank you. 

0 Kudos
andrew_4619
Honored Contributor II
2,057 Views

You should have the solution explorer window open which will show your project and the files in it. You should open project files from there 

 

0 Kudos
T__Dhinesh
Beginner
2,057 Views

Hi Andrew,

Thank you for your response. 

I see the files in the solution explorer after I manually add all the relevant files to the project (i created a new project and replaced the content of default program with my main program code). But the thing is that I couldn't open the main script from the visual studio by using File > Open>Project/solution as it is not showing any .f90 files. (it is looking *.vfproj type files).

Can I open the existing code (.f90) directly to the visual studio?

Thank you.

0 Kudos
andrew_4619
Honored Contributor II
2,057 Views

If you right click on the project (vfprodj) entry in solution explorer and then from the pop up menu add>existing files > and then pick the fortran files. they become part of the project then and edit by clicking on them in solution explorer. 

0 Kudos
Lorri_M_Intel
Employee
2,057 Views

The hierarchy might be confusing here.   Let me give you a very basic description (for you experts out there, yes, I'm simplifying!)

A "solution" contains one or more projects, and is stored in a file with extension .sln.

A "project" tells how to build something tangible, such as an executable or shared library.   A project contains one or more source files that are compiled into that tangible output.  A project also contains all the command line options that are required to build the source files.  Projects are stored in files with the extension .vfproj.

Finally, your source code is in a "file".   You can add those into a project using the Project->Add New Item or Project->Add Existing Item option from the menu.

if you simply want to look at a file, but not include it in your project (for example, if it's a data file or a README) you can use File->Open->File to open that file.

                            I hope this helps --

                                                          --Lorri

0 Kudos
Steve_Lionel
Honored Contributor III
2,057 Views

One thing that often confuses newcomers to Visual Studio is that simply opening a file in VS isn't enough to build it into an application. As Lorri says, you need to create a project (of the appropriate Fortran application type, "Console Application" is most common) and add the file to the project. If you just open or create a source file, outside of a project, and try to build it, nothing will happen.

If you have an existing source, the typical workflow is to create a new, empty project of the right kind and then add your source to it. You can do the add with Project > Add to project > Files..., or you can simply drag-and-drop the source files from a Windows Explorer window onto the "Source Files" icon in "Solution Explorer" in Visual Studio.

Another way to do it from scratch is File > New > Fortran Project from Existing Code. This can be handy if you have a large number of files to add. Your choices are a bit more limited here - "Application" creates a Console Application. There's also DLL and Static Library.

Lastly, if you just want Windows to open a Fortran file in Visual Studio so that you can see it, this is usually set by default when you install Intel Parallel Studio but sometimes you have to fix it up yourself. Right click on a Fortran file (.f, .f90, etc.) Select Open With > Choose another app.  If it shows the default as "" /dde, leave it as it is as that should work if you just double-click the source file to open it. Otherwise you can select the Visual Studio version you want and check the box to make that the default.

0 Kudos
gib
New Contributor II
2,057 Views

I think the name "Solution" for a package of projects is confusing.

0 Kudos
Steve_Lionel
Honored Contributor III
2,057 Views

I prefer to think of Solutions as a collection of related projects which, when built together, create some sort of deliverable (application or library.) 

0 Kudos
T__Dhinesh
Beginner
2,057 Views

Thank you for all your responses. 

0 Kudos
jimdempseyatthecove
Honored Contributor III
1,734 Views

Gib,

It is not unusual for a Solution to contain:

main program project including PROGRAM and collection of subroutines and functions relative to the program at large
Fortran library project (that may be useful in different Fortran PROGRAMs and/or C/C++ main programs)
C program project (e.g. MPI wrapper main)
C++ library
Test program

IOW a Solution can contain multiple related projects with appropriate dependencies. If you are more familiar with make files, think of the Solution as a make file that executes make files (that may execute make files).

Jim Dempsey
 

0 Kudos
Reply