iamcoding
iamcoding

Reputation: 3

error: 'x' argument pf 'dtime' intrinsic at <1> must be of kind 4

My understanding of programming is very limited so I hope I am making sense.

I made a change to a fixed variable in a program (the program is called NAFnoise; I was using the .exe but it came with the source code and I made the change there). The program is written in Fortran and is in multiple files. I am using gfortran to compile it and most of the files works without a problem. One file, however, is giving me trouble. And I didn't even make changes to it. It is giving error messages that is like this:

error: 'x' argument pf 'dtime' intrinsic at <1> must be of kind 4

The same message appears for etime. The only times those (I am guessing they are) functions and variables inside them are referenced as shown below:

IMPLICIT                        NONE                                  

   ! Local variables.                                                 

INTEGER(4)                   :: klo,khi,i,n_in,nvar,nj,j1,j2,ivar,nok,nbad
REAL(DbKi)                   :: kk2, Isumwell, Isum, Itot,eps,h1,hmin
REAL(DbKi)                   :: ys1,ys2,poverall,phipot
REAL(DbKi)                   :: bigben(2),bigben2(2),dtime,etime
REAL(DbKi)                   :: phif(10)

COMPLEX(DbKi)                :: value,dval1,dval2,dval11,dval12,dval22 
COMPLEX(DbKi)                :: btrans,btrans1,btrans2,btrans11,btrans12,btrans22
COMPLEX(DbKi)                :: bbb,bbb1,bbb2

and

  write(*,*) etime(bigben2),dtime(bigben)

and

 write(*,*) etime(bigben2),dtime(bigben)

I am guessing the program was found when the author included it in the source folder, so I am not sure what went wrong. The variable I change should have nothing to do with this. Does it have something to do with the compiler? How can it be fixed?

Upvotes: 0

Views: 3046

Answers (1)

DTIME is a non-standard GNU function described in the manual https://gcc.gnu.org/onlinedocs/gfortran/DTIME.html. It requires an argument to be of kind 4. That is the single precision under the default settingd for gfortran.

Probably, DbKi means double precision instead for you. Change

REAL(DbKi)                   :: bigben(2),bigben2(2),dtime,etime

to

REAL                  :: bigben(2),bigben2(2)

(or real(4)) if you use the GNU intrinsic extension.

If you actually want to call some your own external dtime, you must declare an interface block for it.

The same holds for etime from https://gcc.gnu.org/onlinedocs/gfortran/ETIME.html

Upvotes: 2

Related Questions