- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
I'm sorry for this unspecific subject but it's hard to find a title for this problem. I have the following minimal example:
File: base.f90
module m_type
implicit none
type mytype
real(kind=8) :: array(6)
end type mytype
type (mytype) :: te
data te%array /1.d0, 1.d0, 1.d0, 0.d0, 0.d0, 0.d0/
contains
subroutine output_0(number, name)
implicit none
real(kind=8) :: number
character(*) :: name
write(*,*) name, number
end subroutine output_0
subroutine output_1(typ, name)
implicit none
type(mytype) :: typ
character(*) :: name
write(*,*) name, typ%array
end subroutine output_1
end module m_type
File: main.f90
program test
use m_type
implicit none
integer, parameter :: steps = 10, periods = 10
integer :: i1
type(mytype) :: t(steps*periods)
do i1 = 1, steps*periods
t(i1) = te
enddo
call output_0(t(2)%array(1), "t2(1) = ")
call output_1(te, "te = ")
! call output_1(t(2), "t(2) = ")
! write(*,*) t(steps)%array(1)
end program test
I would expect the following output:
t2(1) = 1.00000000000000 te = 1.00000000000000 1.00000000000000 1.00000000000000 0.000000000000000E+000 0.000000000000000E+000 0.000000000000000E+000
Instead, I get the following:
ifort --version ifort (IFORT) 13.0.0 20120731 Copyright (C) 1985-2012 Intel Corporation. All rights reserved. ifort base.f90 main.f90 -o Test ./Test t2(1) = 0.000000000000000E+000 te = 1.00000000000000 1.00000000000000 1.00000000000000 0.000000000000000E+000 0.000000000000000E+000 0.000000000000000E+000
This does not occur in the following cases:
- -debug full
- uncomment one of the two last lines in main.f90
- use a single file for the code
- only use "steps" as an upper boundary in the do-loop
Is there something wrong with the data-statement in module m_type (by the way, is there a way to define a type as a parameter?)? Or is this a compiler bug? gfortran works as expected, even if I use optimization.
Thank you!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I can reproduce this through the 14.0.2 compiler, but not in the beta version of the release planned for later this year.
There's nothing wrong with your use of the DATA statement. You can create a parameter constant of derived type, like this:
type (mytype), parameter :: te = mytype(array=[1.d0, 1.d0, 1.d0, 0.d0, 0.d0, 0.d0])
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I can reproduce this through the 14.0.2 compiler, but not in the beta version of the release planned for later this year.
There's nothing wrong with your use of the DATA statement. You can create a parameter constant of derived type, like this:
type (mytype), parameter :: te = mytype(array=[1.d0, 1.d0, 1.d0, 0.d0, 0.d0, 0.d0])
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page