Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Fortran Fortran Complex Exponential

  1. Apr 19, 2015 #1
    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. jcsd
  3. Apr 19, 2015 #2

    Mark44

    Staff: Mentor

    No, you can't mix types in an array. Make the base type of the array COMPLEX.
     
  4. Apr 19, 2015 #3

    jtbell

    User Avatar

    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.
     
  5. Apr 20, 2015 #4
    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?
     
  6. Apr 20, 2015 #5

    jtbell

    User Avatar

    Staff: Mentor

    Have you tried using (0.0, 0.0) and (1.0, 0.0) instead of 0.0 and 1.0?
     
  7. Apr 20, 2015 #6
    Thank you, that works!
     
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook