The following (meaningless) program results in an error:
Program Driver_Broyden_B
Use DataTypes
Use CommonData_Broyden
Implicit None
integer (i4b) :: nDim = 4
Call Allocate_Broyden_B (nDim)
! #########################
Call Initialize_Broyden_B (nDim)
! #########################
write (*,*) ' mat_Broyden = ', mat_Broyden (1,1,3)
read (*,*)
End Program Driver_Broyden_B
Module datatypes
Integer , Parameter :: i4b = Selected_int_kind (9)
Integer , Parameter :: i2b = Selected_int_kind (4)
Integer , Parameter :: i1b = Selected_int_kind (2)
Integer , Parameter :: sp = Kind (1.0)
Integer , Parameter :: dp = Kind (1.0d0)
Integer , Parameter :: xp = Selected_real_kind (18,99)
Integer , Parameter :: lgt = Kind (.true.)
End Module Datatypes
Module CommonData_Broyden
Use DataTypes
Implicit None
Real (dp), Dimension (:,:,:), Allocatable , Save :: mat_Broyden
End Module CommonData_Broyden
Subroutine Initialize_Broyden_B ( n )
Use DataTypes
Use CommonData_Broyden
Implicit None
Integer (i4b), Intent (in) :: n
Integer (i4b) :: i
mat_Broyden (1:n,1:n,1) = 0._dp
Forall (i=1:n) mat_Broyden (i, i, 1) = 1._dp
! --- Solution already known
mat_Broyden (1:n, 1:n, 2 ) = 0._dp ! set QT to 0
mat_Broyden (1:n, 1:n, 3 ) = 0._dp ! set R to 0
! --- set diagonal elements 1
Forall (i=1:n)
mat_Broyden (i, i ,2) = 1._dp
end forall
! --- set diagonal elements B to R
Forall (i=1:n)
mat_Broyden (i, i, 3) = mat_Broyden (i, i, 1)
end forall
! Do i = 1, n
! mat_Broyden (i, i, 2) = 1._dp
! mat_Broyden (i, i, 3) = mat_Broyden (i, i, 1)
! End Do
End Subroutine Initialize_Broyden_B
Subroutine Allocate_Broyden_B (n)
Use DataTypes
Use CommonData_Broyden
Implicit None
Integer (i4b), Intent (in) :: n
Allocate ( mat_Broyden (1:n,1:n,1:3) )
End Subroutine Allocate_Broyden_B
The error occurs in subroutine Initiate_Broyden_B (Floating point stack fault) and does not show if the do loop is used instead of the forall construct.
I cannot see that anything is wrong or have I overlooked something? I would like to add that I have used ftn95 8.3 PE and the latest Plato version.
Klaus [/code]