Re: Reference to derived type element by index?



Gary Scott wrote:

Rob Crain wrote:

I have a derived type, e.g.

type circle_datatype
real :: radius
real :: x
real :: y
real :: z
character(len=*) :: circle_label
endtype circle_datatype
type(circle_datatype) :: circle


and want to refer to the individual elements via some indexing scheme, say in this example I want to change the value of circle%radius I would use index #1, or the z-coordinate I would use #4. Is there some method by which this is possible?

I think IDL has a system for this, such that circle.radius can be referenced by circle.(0), but I really need Fortran's horsepower for this code!

type circle_datatype
real :: radius(100)
real :: x(100)
real :: y(100)
real :: z(100)
character(len=256) :: circle_label(100)
endtype circle_datatype
type(circle_datatype) :: circle

circle%radius(1) = <something>


Oops or using your original type declaration, another possibility:

type(circle_datatype) :: circle(100)

circle(1)%radius = something

--

Gary Scott
mailto:garylscott@sbcglobal dot net

Fortran Library: http://www.fortranlib.com

Support the Original G95 Project: http://www.g95.org
-OR-
Support the GNU GFortran Project: http://gcc.gnu.org/fortran/index.html

If you want to do the impossible, don't hire an expert because he knows it can't be done.

-- Henry Ford
.



Relevant Pages

  • Re: Reference to derived type element by index?
    ... endtype circle_datatype ... type(circle_datatype):: circle ... Support the Original G95 Project: http://www.g95.org ... Support the GNU GFortran Project: http://gcc.gnu.org/fortran/index.html ...
    (comp.lang.fortran)
  • Re: Reference to derived type element by index?
    ... All I have is an index that tells me I need to update the i^th variable within the derived type. ... endtype circle_datatype ... type(circle_datatype):: circle ... and want to refer to the individual elements via some indexing scheme, say in this example I want to change the value of circle%radius I would use index #1, or the z-coordinate I would use #4. ...
    (comp.lang.fortran)