Fortran If help

  • #1
13
0

Main Question or Discussion Point

Hi, so I'm trying to use the following if statement:

Fortran:
if (sum(i,j) <=1.0 ) then
  sidash=(si)*(Death)
  else if (1 <= sum(i,j) <= 2) then
  sidash=(si)*((sqrt(2.0)+1.0)*(2.0-sum(i,j))*(Death)+(sum(i,j)-1.0)*(Survive)) 
else if (sum(i,j)<=3 .and. sum(i,j)=>2) then
  sidash=(si)*((sqrt(2.0)+1.0)*(3.0-sum(i,j))*(Survive)+(sum(i,j)-2.0)*(Birth))
  else if (sum(i,j)<=4 .and. sum(i,j)=>3) then
  sidash=(si)*((sqrt(2.0)+1.0)*(4.0-sum(i,j))*(Birth)+(sum(i,j)-3.0)*(Death))
else
  sidash=(si)*(Death)
end if
Where sum(i,j) is an integer array and so is death, survive, birthm si and sidash.

However I get errors saying that I cannot use <= and .and. logical statements comparing integer expressions.

I need to compare sum(i,j) in these regions of numbers so can anyone help me out with this?
 
Last edited by a moderator:

Answers and Replies

  • #2
33,636
5,296
Hi, so I'm trying to use the following if statement:

if (sum(i,j) <=1.0 ) then
sidash=(si)*(Death)
else if (1 <= sum(i,j) <= 2) then
sidash=(si)*((sqrt(2.0)+1.0)*(2.0-sum(i,j))*(Death)+(sum(i,j)-1.0)*(Survive))
else if (sum(i,j)<=3 .and. sum(i,j)=>2) then
sidash=(si)*((sqrt(2.0)+1.0)*(3.0-sum(i,j))*(Survive)+(sum(i,j)-2.0)*(Birth))
else if (sum(i,j)<=4 .and. sum(i,j)=>3) then
sidash=(si)*((sqrt(2.0)+1.0)*(4.0-sum(i,j))*(Birth)+(sum(i,j)-3.0)*(Death))
else
sidash=(si)*(Death)
end if

Where sum(i,j) is an integer array and so is death, survive, birthm si and sidash.

However I get errors saying that I cannot use <= and .and. logical statements comparing integer expressions.

I need to compare sum(i,j) in these regions of numbers so can anyone help me out with this?
I don't believe this is legal:
Code:
else if (1 <= sum(i,j) <= 2) then
That's more of a mathematical notation than one used in programming.
It should be like this:
Code:
else if (1 <= sum(i,j) .and. sum(i, j) <= 2) then
BTW, your separate cases are not distinct. If sum(i, j) == 2, then you will have a match in the first else if clause and in the second else if clause.

A better way would be like this:
Code:
else if (1 <= sum(i,j) .and. sum(i, j) < 2) then
 
  • #3
1,065
53
It would be nice if your "sum" array was named more clearly to indicate the sum of what; you should develop a better variable naming style...clearer but not too verbose. Not to mention that "sum()" is an intrinsic function from Fortran90 and up.
 
  • #4
FactChecker
Science Advisor
Gold Member
5,588
2,064
Going back to the early, most conservative FORTRAN syntax, try something like ((sum(i,j) .le. 4 ).and. (sum(i,j) .ge. 3)). Don't be cheap with your parentheses, they don't cost anything. Also, try to make note of which line of code the first error statement comes from. The first error often dominoes to make other false error statements in later code. So try to solve the first one and the others might disappear.

Once you get the old syntax working, you can test more modern syntax, step-by-step.
 

Related Threads on Fortran If help

Replies
4
Views
13K
Replies
11
Views
2K
  • Last Post
Replies
5
Views
2K
Replies
6
Views
21K
Replies
5
Views
2K
  • Last Post
Replies
2
Views
639
Replies
4
Views
5K
Replies
1
Views
4K
Replies
4
Views
780
Top