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

Trying to understand how dimension works


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
Honored Contributor II

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..... 

Black Belt

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.

Valued Contributor II
    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. 


Valued Contributor II

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.