Fortran [Fortran] Quick question about complex exponentials

  • Thread starter Thread starter Matterwave
  • Start date Start date
  • Tags Tags
    Complex Fortran
AI Thread Summary
The discussion revolves around a coding issue in Fortran related to setting a complex variable in an array. The user encounters a compiler error when trying to assign a complex number using the syntax hmajphasemix(2,2)=(cos(alpha1),sin(alpha1)). It is clarified that this syntax only works for literal constants, and when using variables, the correct approach is to utilize the cmplx function: hmajphasemix(2,2) = cmplx(cos(alpha1),sin(alpha1)). The conversation also touches on the continued use of Fortran, highlighting its advantages in scientific and engineering applications, particularly for handling complex numbers and facilitating parallel processing. Comparisons are made to C and C++, noting challenges with data access in those languages, while acknowledging the existence of complex math packages for C/C++.
Matterwave
Science Advisor
Homework Helper
Gold Member
Messages
3,971
Reaction score
329
Hey, so I just have a quick question. I am trying to set a complex variable (in an array) as ##e^{i\alpha_1}## and the line I used in my code looks like this:

Code:
  hmajphasemix(2,2)=(cos(alpha1),sin(alpha1))

But the compiler is telling me that it "expects a right parenthesis" at this line. I'm kind of confused cus I'm counting the right number of parenthesis. Is this the correct way to set this variable or have I messed something up?
 
Technology news on Phys.org
Only literal constants can be assigned that way:
Code:
cnumber = (1.2, 2.3)
When using variables, as you are doing, then you need:
Code:
hmajphasemix(2,2) = cmplx(cos(alpha1),sin(alpha1))
 
Ah, so I can only use (X,Y) when X and Y are just numbers, but if X and Y are some functions of some variable then I need to use cmplx(X,Y) is that right?
 
Yeap
 
Not even functions, even if they just variables... Without cmplx they need to be literal contacts
 
Contacts->constants
 
Ah, thanks! What if X and Y are parameters? Would the simpler one work then?
 
Don't think so...anyway, you can do your own testing now that you know what's going on.
 
  • Like
Likes jim mcnamara
gsal said:
anyway, you can do your own testing now that you know what's going on.
This^
 
  • #10
Alrighty. Thanks again. :)
 
  • #11
One question: why would you ever still program in fortran lol?
 
  • #12
serp777 said:
One question: why would you ever still program in fortran lol?
Apparently there are good reasons to do so. There is a ton of existing Fortran code for scientific and engineering applications. Also, Fortran code lends itself more easily to highly parallelized applications than do C and C++ programs, or so I understand. One of the drawbacks in C/C++ code is that data can be accessed indirectly (via pointers), which can be problematic where a block of data has to be accessed by multiple threads. The relatively new restrict keyword in C (C99) is an effort to restrict the access to data by only a single pointer.
 
  • #13
The last time I programmed in FORTRAN (an FM multipath simulation) it was because of the ease of working with complex numbers.
(and I happened to have a graphing package)
I'd probably do it in MATLAB now and it would take forever to run.

Maybe there are some good complex math packages for C or C++ now.
 

Similar threads

Replies
8
Views
4K
Replies
14
Views
5K
Replies
5
Views
9K
Replies
16
Views
2K
Replies
4
Views
2K
Replies
8
Views
4K
Replies
6
Views
2K
Back
Top