Fortran Structures: What Are They?

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

Discussion Overview

The discussion centers on understanding Fortran structures, particularly in the context of converting Fortran code into MATLAB. Participants explore the definition, purpose, and implementation of structures and unions in Fortran, comparing them to similar constructs in C and discussing alternatives such as arrays.

Discussion Character

  • Exploratory
  • Technical explanation
  • Debate/contested
  • Mathematical reasoning

Main Points Raised

  • One participant asks for clarification on what Fortran structures are, providing an example of a structure definition.
  • Another participant explains that a structure is a block of related variables, suggesting that the provided example defines a pixel with specific characteristics.
  • A different participant shares a C equivalent of the Fortran structure, indicating it is a union of two structs.
  • One participant questions the necessity of using structures, proposing that arrays could suffice.
  • Another participant argues that while structures are not mandatory, they help logically group data items, making code more manageable, especially with larger datasets.
  • A participant suggests that arrays could be used depending on the problem's complexity, providing an example of how to access array elements.
  • One participant notes that the array method does not achieve memory overlap as the union does, explaining the significance of the union in the original Fortran code.
  • Another participant mentions that Fortran's "equivalence" can achieve similar memory overlap but has limitations, suggesting that two arrays may be necessary for certain unions.

Areas of Agreement / Disagreement

Participants express differing views on the necessity and utility of structures versus arrays, indicating that there is no consensus on the best approach for all scenarios. The discussion remains unresolved regarding the optimal method for specific use cases.

Contextual Notes

The discussion highlights limitations in understanding the implications of using structures versus arrays, particularly concerning memory management and data organization. There are unresolved assumptions about the complexity of the problems being addressed.

cammo12
Messages
9
Reaction score
0
Hi - I expect this is quite a simple question.

What are fortran structures? I'm trying to convert fortran code into MATLAB and I don't know what a structure / endstructure statement is.

e.g.


structure /pixel/
union
map
INTEGER*4 cl
INTEGER*4 rw
endmap
map
INTEGER*4 x
INTEGER*4 y
endmap
endunion
endstructure
 
Technology news on Phys.org
A structure is a defined block of related variables, a feature common to many languages. I am not sure about Fortran structure specifically, but it appears that you have structure called "pixel" that allows you to define specific instances of a pixel with the characteristics of cl, rw, x and y. Somewhere in the code there will be a statement that instantiates a pixel instance, eg something like "myPixel pixel...". "myPixel" is then the name of your pixel instance, and the pixel members for "myPixel" will likely be identified as "myPixel.cl", "myPixel.rw", myPixel.x" and "myPixel.y". For example, "myPixel.x = 100" and "myPixel.y = 200" will establish the x-y coordinates for the "myPixel" pixel.

Chris
 
Last edited by a moderator:
Here is the same thing in C. I have not done MATLAB in so long I'd be afraid to post anything that purports any relationship.
Code:
typedef union
{
      struct
      {
        long cl;
        long rw;
      } s1;
      struct
      {
        long x;
        long y;
      } s2;
} pixel_t;

pixel_t pix;

It's a union of two structs.
 
So what is the point in this?

Do I have to have structures? Can't I just use an array somehow?
 
Thanks for your help by the way :)
 
No you don't have to use structures (and that particular union of two structures seems rather complicated, for what it actually does).

The point of structures is to logically group a set of data items together so you can refer to the group by one name - for instance

pixel p1,p2, pfun() // pfun is a function that returns a pixel structure
...
p1 = p2
call sub(p1)
p2 = pfun(1,2,3)
...
etc

Yes you could do all this without using structures - except for the function return. But if you had a structure with 20 elements not 2, the code would be about 20 times longer.
 
Yes you can probably manage with an array, depending on the complexity of the problem. eg, something like:

INTEGER pixel(4)
* then address the members as element of the array
cl = pixel(1)
rw= pixel(2)
x = pixel(3)
y = pixel(4)
 
..thought C would help. :)

In English, not computer, the FORTRAN code means the following:
cl occupies the exact same memory location as does x
rw does the same with y
cl, rw, x, and y are all signed integers - 32 bit int -- what INTEGER*4 means.

Your array does not seem to do all that - ie., overlap memory. I'm assuming INTEGER pixel(4) creates four elements in vector of 32 bit signed ints.
 
Hi jim

Yes, the array method does not physically overlap in memory the elements cl with x, and rw with y. cammo12, that is what the union does in your original code.
Without structures or unions this can be achieved in FORTRAN by using "equivalence". However, equivalence will not work with members from the same array. So if this type of union is required then two arrays will have to be created:

integer pixelx(2),pixely(2)
equivalence (pixelx(1),pixely(1)), (pixelx(2),pixely(2))
etc, etc

This may not help with the Matlab translation, but hopefully jim's C example and the explanations may help cammo12 to interpret the Fortran snippet.

Chris
 
Last edited by a moderator:

Similar threads

Replies
64
Views
11K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 12 ·
Replies
12
Views
3K
  • · Replies 20 ·
Replies
20
Views
4K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 37 ·
2
Replies
37
Views
5K