Fortran Can complex numbers be used in Fortran array constructors?

Click For Summary
Complex numbers can be used in Fortran array constructors, but all elements in the array must be of the same type. The user encountered an error when trying to mix real and complex types in their 2x2 matrices. By declaring the matrices as complex and using complex representations for all elements, including converting real numbers like 1.0 and 0.0 to complex form, the issue can be resolved. The discussion also highlights that Fortran's EXP function can handle complex types directly, simplifying calculations. Ultimately, ensuring all elements are complex allows for successful array construction without type mixing errors.
Lukejambo
Messages
13
Reaction score
0
Hi, so I need to write a fortran code with 2, 2x2 matrices.

These matrices are in the form of B=(1 exp(i)(theta) 0 0) and D=(0 0 exp(i)(theta) 1) where i is sqrt of -1 and theta is an angle between 0 and 2pi.

I've expanded the exponential so it reads cos(theta)+isin(theta) and let theta=pi/2

I've delcared i as complex in the form of i=(0.0,1.0) however as the matrices are declared as real with real components in them (ie: 0.0, 1.0) an error appears stating that "You cannot mix types in an array constructor (Complex(Kind=1)) in a real(Kind=1) constructor."

Is it possible to mix types in an array constructor or can I have the whole array as complex?

Any help would be much appreciated.
 
Technology news on Phys.org
Lukejambo said:
Hi, so I need to write a fortran code with 2, 2x2 matrices.

These matrices are in the form of B=(1 exp(i)(theta) 0 0) and D=(0 0 exp(i)(theta) 1) where i is sqrt of -1 and theta is an angle between 0 and 2pi.

I've expanded the exponential so it reads cos(theta)+isin(theta) and let theta=pi/2

I've delcared i as complex in the form of i=(0.0,1.0) however as the matrices are declared as real with real components in them (ie: 0.0, 1.0) an error appears stating that "You cannot mix types in an array constructor (Complex(Kind=1)) in a real(Kind=1) constructor."

Is it possible to mix types in an array constructor or can I have the whole array as complex?
No, you can't mix types in an array. Make the base type of the array COMPLEX.
Lukejambo said:
Any help would be much appreciated.
 
Also, Fortran's generic EXP function accommodates the COMPLEX data type, so you can do stuff like this:

Code:
      complex i, z
      real theta
      i = (0.0, 1.0)
      theta = 0.5
      z = exp (i*theta)
      print *, z
      end

No need to use Euler's identity to calculate the real and imaginary parts separately.
 
Thanks for your help, I've declared each matrix as complex and used exp(i)(theta) instead of cos and sine however the problem still remains, here is my programme below:

program
implicit none
REAL, PARAMETER :: pi=3.14159
real :: ph
complex, dimension(2,2) :: B, D
complex :: z, ic
ph= 1.0
ic = ( 0.0, 1.0 )

z = exp(ic*ph)

B = RESHAPE( (/ 1.0, z ,0.0,0.0 /), (/2.0,2.0/) )

D = RESHAPE( (/ 0.0,0.0,z,1.0 /), (/2.0,2.0/) )

write(6,'(2f4.1)') B, D

end program

Is it because I'm using 1.0 and 0.0 as real values inside a complex array?

If so, can I convert them so they're complex numbers?
 
Lukejambo said:
If so, can I convert them so they're complex numbers?

Have you tried using (0.0, 0.0) and (1.0, 0.0) instead of 0.0 and 1.0?
 
Thank you, that works!
 
Learn If you want to write code for Python Machine learning, AI Statistics/data analysis Scientific research Web application servers Some microcontrollers JavaScript/Node JS/TypeScript Web sites Web application servers C# Games (Unity) Consumer applications (Windows) Business applications C++ Games (Unreal Engine) Operating systems, device drivers Microcontrollers/embedded systems Consumer applications (Linux) Some more tips: Do not learn C++ (or any other dialect of C) as a...

Similar threads

  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 5 ·
Replies
5
Views
1K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 21 ·
Replies
21
Views
3K
  • · Replies 8 ·
Replies
8
Views
3K
  • · Replies 12 ·
Replies
12
Views
3K
  • · Replies 9 ·
Replies
9
Views
5K
  • · Replies 6 ·
Replies
6
Views
3K