Fortran Can complex numbers be used in Fortran array constructors?

AI Thread 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!
 
Thread 'Is this public key encryption?'
I've tried to intuit public key encryption but never quite managed. But this seems to wrap it up in a bow. This seems to be a very elegant way of transmitting a message publicly that only the sender and receiver can decipher. Is this how PKE works? No, it cant be. In the above case, the requester knows the target's "secret" key - because they have his ID, and therefore knows his birthdate.
Thread 'Project Documentation'
Trying to package up a small bank account manager project that I have been tempering on for a while. One that is certainly worth something to me. Although I have created methods to whip up quick documents with all fields and properties. I would like something better to reference in order to express the mechanical functions. It is unclear to me about any standardized format for code documentation that exists. I have tried object orientated diagrams with shapes to try and express the...

Similar threads

Replies
4
Views
2K
Replies
8
Views
2K
Replies
4
Views
2K
Replies
21
Views
3K
Replies
8
Views
3K
Replies
12
Views
3K
Replies
9
Views
5K
Replies
6
Views
3K
Back
Top