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.