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

Trying to understand how dimension works

zechar__nathan
Beginner
312 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 II
312 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..... 

0 Kudos
mecej4
Honored Contributor III
312 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.

0 Kudos
JohnNichols
Valued Contributor III
312 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. 

 

0 Kudos
JohnNichols
Valued Contributor III
312 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. 

0 Kudos
Reply