user1310513
user1310513

Reputation:

Syntax error, found .and. and .or.

I just wanted to modify a small part of a very old program and I can't for the life of me figure out what I've done to anger the Fortran gods.

The original code has the following line:

  if (r.gt.rstep) xappad = xappad*fakm

which I have modified to:

  if (r.gt.0.58*rstep .and. r.lt.1.42*rstep) .or. (r.gt.2.08*rstep 
 : .and. r.lt.2.92*rstep) xappad = xappad*fakm

Which gives me the errors:

sp-co-2-MODIFIED.for(785): error #5082: Syntax error, found '.OR.' when expecting one of: BLOCK BLOCKDATA PROGRAM MODULE TYPE COMPLEX BYTE CHARACTER DOUBLE DOUBLECOMPLEX ...

      if (r.gt.0.58*rstep .and. r.lt.1.42*rstep) .or. (r.gt.2.08*rstep 
-------------------------------------------------------------------------^

sp-co-2-MODIFIED.for(786): error #6090: An array-valued operand is required in this context.

     : .and. r.lt.2.92*rstep) xappad = xappad*fakm
------^

sp-co-2-MODIFIED.for(786): error #6087: An array assignment statement is required in this context.

     : .and. r.lt.2.92*rstep) xappad = xappad*fakm
-------------------------------------------^

Upvotes: 5

Views: 25244

Answers (1)

Matt Ball
Matt Ball

Reputation: 359986

I really don't know much FORTRAN, but it looks to me like you're missing a pair of parentheses around the conditional:

if ((r.gt.0.58*rstep .and. r.lt.1.42*rstep) .or. (r.gt.2.08*rstep .and. r.lt.2.92*rstep)) xappad = xappad*fakm

Upvotes: 15

Related Questions