Skip to content
  • giannozz's avatar
    General cleanup of intrinsic functions: · bf4bfe22
    giannozz authored
    conversion to real    => DBLE
    (including real part of a complex number)
    conversion to complex => CMPLX
    complex conjugate     => CONJG
    imaginary part        => AIMAG
    
    All functions are uppercase.
    CMPLX is preprocessed by f_defs.h and performs an explicit cast:
    #define CMPLX(a,b)  cmplx(a,b,kind=DP)
    This implies that 1) f_defs.h must be included whenever a CMPLX is present,
    2) CMPLX should stay in a single line, 3) DP must be defined.
    
    All occurrences of real, float, dreal, dfloat, dconjg, dimag, dcmplx
    removed - please do not reintroduce any of them.
    Tested only with ifc7 and g95 - beware unintended side effects
    
    Maybe not the best solution (explicit casts everywhere would be better)
    but it can be easily changed with a script if the need arises.
    The following code might be used to test for possible trouble:
    
    program test_intrinsic
    
      implicit none
      integer, parameter :: dp = selected_real_kind(14,200)
      real (kind=dp) :: a = 0.123456789012345_dp
      real (kind=dp) :: b = 0.987654321098765_dp
      complex (kind=dp) :: c = ( 0.123456789012345_dp, 0.987654321098765_dp)
    
      print *, '      A = ', a
      print *, ' DBLE(A)= ', DBLE(a)
      print *, '      C = ', c
      print *, 'CONJG(C)= ', CONJG(c)
      print *, 'DBLE(c),AIMAG(C)  = ', DBLE(c), AIMAG(c)
      print *, 'CMPLX(A,B,kind=dp)= ', CMPLX( a, b, kind=dp)
    
    end program test_intrinsic
    
    Note that CMPLX and REAL without a cast yield single precision numbers on
    ifc7 and g95 !!!
    
    
    git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@2133 c92efa57-630b-4861-b058-cf58834340f0
    bf4bfe22