Quantcast
Channel: Recent posts
Viewing all articles
Browse latest Browse all 27

Initialize derived type as parameter

$
0
0

Initializing a derived type as parameter fails if there is an assignment operator. This happens with latest FORTRAN compiler on openSUSE 11.4. The following code demonstrates the problem:

MODULE DType
  IMPLICIT NONE
  PUBLIC

  INTEGER, PARAMETER :: I4B = SELECTED_INT_KIND(9)
  !INTEGER, PARAMETER  :: QP = SELECTED_REAL_KIND(6,37)
  !INTEGER, PARAMETER  :: QP = SELECTED_REAL_KIND(15,307)
  INTEGER, PARAMETER  :: QP = SELECTED_REAL_KIND(32,4931)

  TYPE JD
     INTEGER(I4B) :: JDN = 2451545
     REAL(QP)     :: FD = 0.0_QP
   CONTAINS
     GENERIC                  :: ASSIGNMENT(=) => setJD
     PROCEDURE, PRIVATE, PASS :: setJD
  END TYPE JD
CONTAINS
  SUBROUTINE setJD(a, b)
    CLASS(JD), INTENT(INOUT) :: a
    TYPE(JD), INTENT(IN)     :: b
    
    a%JDN = b%JDN
    a%FD = b%FD 
  END SUBROUTINE setJD
END MODULE DType

PROGRAM test_dtype
  USE DType
  IMPLICIT NONE
  
  TYPE(JD), PARAMETER :: testa = JD(2451546, 0.5_QP)
  TYPE(JD) :: testb = JD(2451546, 0.5_QP)

  WRITE(*,*) testa%JDN, testa%FD
  WRITE(*,*) testb%JDN, testb%FD
END PROGRAM test_dtype

The first write statement returns 1 1.0000000 instead of 2451546 0.50000000


Viewing all articles
Browse latest Browse all 27

Trending Articles