Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
Announcements
Welcome to the Intel Community. If you get an answer you like, please mark it as an Accepted Solution to help others. Thank you!
26743 Discussions

Trying to understand how dimension works

zechar__nathan
Beginner
105 Views

Hello, I'm trying to understand the difference between the following lines of code, as the output appears to be the same.


Version 1

complex(kind=c_double_complex), dimension(1:4,1:8,1:16) :: Z

Version 2

complex(kind=c_double_complex), dimension(4,8,16) :: Z

When I print Z the output is exactly the same. Complex, all zeros.

print *, Z

I'm transcribing this code into another language, and I'm trying to understand why  "dimension(1:4,1:8,1:16)" is used instead of "dimension(4,8,16)"

0 Kudos
4 Replies
andrew_4619
Honored Contributor I
105 Views

In Fortran the start index is 1 by default. The 1:4 is the same as 4. The 1: is redundant. I would guess the coder was more familiar with a language where 0 is the start index..... 

mecej4
Black Belt
105 Views

Or, the coder employed 0-base arrays in many places elsewhere in the code, and wanted to emphasize that in this place a different base index was being used. We would have to see the whole code to judge.

JohnNichols
Valued Contributor II
105 Views
  !
    real*4 d(0:nx,0:ny),x(0:nx),y(0:ny),z(1:nc)
    real*4 trace(0:nx,0:ny), sum(0:nx),XTrace(0:nx,0:ny)
    real*4 traceR(0:nx,0:ny), XRTrace(0:nx,0:ny)
    real*4 x1,y1,x2,y2
    real*4 xdelta, ydelta, x4,y4,x3,y3, maxX, maxY
    real*4 zmax,zmin, dist
    integer*4 i,j, count, counter, k

 

This is a sample from the program CONREC.  Conrec was developed and published in BYTE in about 1986 

 !
    !     The following is a simplistic application of the CONREC routine.
    !     A mathematical function is evaluated over a regular grid of points
    !     on a computer raster graphics screen.
    !
    !     Paul D. Bourke
    !

The original code was not in Fortran and I translated the code into Fortran, I kept the zero indexing so I could check the code easily.  There is a web page where this routine has been translated in many languages.  I prefer a regular array instead of the triangles that can be a beast. 

Each language has a standard index start - so C is usually zero.  Thankfully LISP is easier to use but is a beast of language to learn. 

You need  to be careful - although in Fortran not using a standard Z(30) would be unusual -- but each to their own. 

 

JohnNichols
Valued Contributor II
105 Views

I was mistaken -- I apologize to Paul Bourke who provided the CONREC code in Fortran -- I translated his Fortran into C#.  

I did add a DXF generator to the CONREC program in Fortran. 

Reply