How to Pass and Combine Arrays in Fortran g77?

  • Context: Fortran 
  • Thread starter Thread starter mazinse
  • Start date Start date
  • Tags Tags
    Fortran
Click For Summary

Discussion Overview

The discussion revolves around handling arrays in Fortran g77, focusing on obtaining indices of non-zero elements, passing arrays to functions, and combining arrays. Participants explore various methods and potential libraries or functions that could assist with these tasks.

Discussion Character

  • Technical explanation
  • Exploratory
  • Debate/contested

Main Points Raised

  • Some participants inquire about how to determine the index of non-zero elements in an array and suggest using a loop to count non-zero cells.
  • There is a discussion on how to pass an entire array to a function, with one participant suggesting the use of 'call function(array)' rather than indexing.
  • Participants express uncertainty about the ease of combining arrays, with one asking for clarification on what is meant by "easier than." Another participant mentions that standard Fortran 77 lacks intrinsic functions for array operations.
  • Concerns are raised about seeing many zeros when writing an array to a file, with questions about whether these represent empty cells or other issues, and a request for a specific code example to clarify the situation.
  • One participant explains that when passing an array, the starting address of the array is passed, and discusses how to pass multi-dimensional arrays, including the need to specify the leading dimension.

Areas of Agreement / Disagreement

Participants do not reach a consensus on the best methods for handling arrays, as multiple approaches and uncertainties are presented throughout the discussion.

Contextual Notes

There are limitations in the discussion regarding the specific capabilities of g77 and the lack of intrinsic functions in standard Fortran 77 for certain array operations. Additionally, the description of the issue with zeros in the output is vague, leaving room for interpretation.

mazinse
Messages
188
Reaction score
2
1. Is there a way to get the index of array, how many cells are nonzeros and have actual data. I can probably do it the hard way.

2. How do you pass an array to a function, the entire array I mean, do I do like function (array(i)) or function (array())

3. Is there an easier way to combine two arraries.

If there are libraries or functions out there that I can call to, lease help
 
Technology news on Phys.org
mazinse said:
1. Is there a way to get the index of array, how many cells are nonzeros and have actual data. I can probably do it the hard way.

Write a do-loop that tests each cell one at a time, and increments a counter each time it finds a nonzero cell.

2. How do you pass an array to a function, the entire array I mean, do I do like function (array(i)) or function (array())

Neither way. Use 'call function (array)'.

3. Is there an easier way to combine two arraries.

Easier than what?
 
easier than write a loop, checks every cell for value then add them all to a new array.

but I have a new question. When I write my array to a file, I see a lot of 0's, are they empty cells or something else
 
With older Fortran compilers, only the addresses of paramters were passed to subroutines. I don't know if this has changed. If it hasn't, then function(array) just passes the address of the array, not the contents of the array.
 
mazinse said:
easier than write a loop, checks every cell for value then add them all to a new array.

I'm pretty sure standard Fortran 77 doesn't have intrinsic functions for array operations (copy, merge, etc.). g77 might add some such functions, but you'd have to search through the g77 documentation.

When I write my array to a file, I see a lot of 0's, are they empty cells or something else

If you stored non-zeroes in all the array cells, then you shouldn't get any zeroes on output. But it's hard to say whether anything is wrong because your description is vague. Can you post a specific code example that demonstrates what you're talking about? It would be best if you can post a short complete compilable program that doesn't do anything else.
 
Also, when you pass an array, you're passing the starting address of the array, ie, a reference to the first element of the array. Hence, for a vector, you can pass any valid "starting address" within the array by specifying the array element, for example

Code:
Call MySubProgram(MyVector(2))

or

Code:
MyVar = MyFunction(MyVector(2))

This passes a reference to the vector MyVector element 2 to your subprogram or function. Your subprogram or function then sees MyVector starting with element 2 as defined in the main

Also, when passesing multi-dimensioned arrays, you must also pass the physical dimension of the column length so that the subprogram can resolve the array storage layout. For example, passing a two dimensioned array such as

Code:
c      MAIN
       REAL  MyArray2(10,20)
c      variable "LDA" is "Leading dimension of Array"
       INTEGER LDA

       ...

       LDA = 10

       CALL MySubProgram(MyArray2, LDA)

       ...

       Subroutine MySubProgram(Array, L)
       INTEGER L
       REAL Array(L,1)
       ...
 

Similar threads

  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 5 ·
Replies
5
Views
4K
  • · Replies 17 ·
Replies
17
Views
4K
Replies
20
Views
2K
  • · Replies 22 ·
Replies
22
Views
4K
  • · Replies 5 ·
Replies
5
Views
8K
  • · Replies 5 ·
Replies
5
Views
4K
  • · Replies 13 ·
Replies
13
Views
3K
  • · Replies 31 ·
2
Replies
31
Views
3K
  • · Replies 13 ·
Replies
13
Views
2K