# Fortran Fortran Complex Exponential

Tags:
1. Apr 19, 2015

### Lukejambo

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.

2. Apr 19, 2015

### Staff: Mentor

No, you can't mix types in an array. Make the base type of the array COMPLEX.

3. Apr 19, 2015

### Staff: Mentor

Also, Fortran's generic EXP function accommodates the COMPLEX data type, so you can do stuff like this:

Code (Text):

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.

4. Apr 20, 2015

### Lukejambo

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?

5. Apr 20, 2015

### Staff: Mentor

Have you tried using (0.0, 0.0) and (1.0, 0.0) instead of 0.0 and 1.0?

6. Apr 20, 2015

### Lukejambo

Thank you, that works!