vendredi 5 août 2016

gfortran if statement not being recognised in a fortran 90 routine

I implemented the following code in Fortran 90, where I want a parameter tau to be calculated using logarithms of some parameters, only if these are within appropriate ranges.

MODULE nrtype
    INTEGER, PARAMETER :: SP=KIND(1.0)
    INTEGER, PARAMETER :: DP=KIND(1.0d0)
    INTEGER, PARAMETER :: I4B=SELECTED_INT_KIND(9)
    INTEGER, PARAMETER :: I2B=SELECTED_INT_KIND(4)
    INTEGER, PARAMETER :: I1B=SELECTED_INT_KIND(2)
    INTEGER, PARAMETER :: SPC=KIND((1.0,1.0))
    INTEGER, PARAMETER :: DPC=KIND((1.0D0,1.0D0))
    INTEGER, PARAMETER :: LGT=KIND(.TRUE.)
END MODULE

MODULE parameters
USE nrtype
    REAL(DP), PARAMETER :: beta=.98_dp
    REAL(DP), PARAMETER :: maxtol=1.0e-6_dp
    REAL(DP), PARAMETER :: theta=1.0_dp
    REAL(DP), PARAMETER :: delta=0.0_dp
END MODULE

PROGRAM mainp
    USE parameters
    USE nrtype

    IMPLICIT NONE

    INTEGER(I4B) :: tau
    REAL(DP) :: taustar

    IF (theta > 1.0_dp .AND. (delta > 0.0_dp .AND. delta < 1.0_dp)) THEN
        taustar=LOG(maxtol/(beta*(1.0_dp-delta)*(theta-1.0_dp)))/LOG(beta*delta)
        tau=CEILING(taustar,REAL(DP))
    ENDIF

    IF (theta > 1.0_dp .AND. delta==0.0_dp) THEN
        tau=1
    ELSEIF (theta == 1.0_DP .OR. delta==1.0_DP) THEN
        tau=0
    ENDIF

END PROGRAM main

However, when compiling using gfortran 6.1 in a MacBook Air 2013 with OSX El Capitan, I get the following error:

program.f90:30:69:

    taustar=LOG(maxtol/(beta*(1.0_dp-delta)*(theta-1.0_dp)))/LOG(beta*delta)
                                                                 1
Error: Argument of LOG at (1) cannot be less than or equal to zero

What mistake am I doing on the code? It looks as if the IF statement is not being recognised.

Aucun commentaire:

Enregistrer un commentaire