Commit 02066e59 authored by Henderson, Shane's avatar Henderson, Shane
Browse files

Merge branch 'precision_fixes' into 'master'

Updated uses of SSK/SRK/SDK to get the code compiling with Futility_ENABLE_DBLREAL=OFF

See merge request https://code.ornl.gov/futility/Futility/-/merge_requests/403
parents 1d8ec9e1 28bd2f19
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ build_mpi_debug:
    - build_scripts/build_with_spack.sh
      -DPYTHON_EXECUTABLE=/usr/bin/python2.7
      -DCMAKE_BUILD_TYPE:STRING="DEBUG"
      -DFutility_FPE_TRAP:BOOL=ON
      -DTPL_ENABLE_MPI:BOOL=ON
      -DCMAKE_Fortran_COMPILER=`which mpif90`
      -DCMAKE_C_COMPILER=`which mpicc`
+7 −7
Original line number Diff line number Diff line
@@ -62,17 +62,17 @@ PROGRAM testFMU2_BouncingBall
  ! ID of fmu used for bookeeping
  INTEGER(SIK) :: fmu_id=1_SIK
  ! Time step size
  REAL(SRK) :: dt=1.0E-3_SRK
  REAL(SDK) :: dt=1.0E-3_SDK
  ! Start and end of simulation time
  REAL(SRK) :: timeStart=0.0_SRK
  REAL(SRK) :: timeEnd=3.0_SRK
  REAL(SDK) :: timeStart=0.0_SDK
  REAL(SDK) :: timeEnd=3.0_SDK
  ! FMU ODE solver tolerance
  REAL(SRK) :: tol=1.0E-5_SRK
  REAL(SDK) :: tol=1.0E-5_SDK
  ! Local time storage
  REAL(SRK) :: time=0.0_SRK
  REAL(SRK) :: write_time=0.0_SRK
  ! Variable to store ball height and velocity
  REAL(SRK) :: ball_velocity, ball_height
  REAL(SDK) :: ball_velocity, ball_height
  TYPE(StringType) :: varName
  INTEGER(SIK) :: i, imax
  ! Temporary variable storage
@@ -122,9 +122,9 @@ PROGRAM testFMU2_BouncingBall
      CHAR(test_fmu2_cs%getCausality(CHAR(varName)))

  ! set gravity acceleration parameter
  CALL test_fmu2_cs%setNamedVariable('g', -9.81_SRK)
  CALL test_fmu2_cs%setNamedVariable('g', -9.81_SDK)
  ! set the coefficient of restitution
  CALL test_fmu2_cs%setNamedVariable('e', 0.7_SRK)
  CALL test_fmu2_cs%setNamedVariable('e', 0.7_SDK)

  ! Open an output file
  OPEN(unit=42, file="exampleFMU2_bouncing_ball_out.csv")
+5 −5
Original line number Diff line number Diff line
@@ -53,11 +53,11 @@ PROGRAM testFMU2
  CHARACTER(len=256) :: unzipDirectory
  CHARACTER(len=256) :: goldFile
  INTEGER(SIK) :: id=3_SIK
  REAL(SRK) :: h=1.0E-7_SRK
  REAL(SRK) :: timeStart=0.0_SRK
  REAL(SRK) :: timeEnd=1.5E-1_SRK
  REAL(SRK) :: tol=1.0E-9_SRK
  REAL(SRK) :: time, voltage1
  REAL(SDK) :: h=1.0E-7_SDK
  REAL(SDK) :: timeStart=0.0_SDK
  REAL(SDK) :: timeEnd=1.5E-1_SDK
  REAL(SDK) :: tol=1.0E-9_SDK
  REAL(SDK) :: time, voltage1
  REAL(SRK) :: write_time=0.0_SRK
  REAL(SRK) :: pre_rewind_t(10)
  REAL(SRK) :: pre_rewind_v(10)
+4 −3
Original line number Diff line number Diff line
@@ -76,7 +76,7 @@ CONTAINS
!> @param denom an integer which is the denomenator of the rational fraction
!>
!> This routine calculates the rational fractions of a target value until the
!> fraction is less than a tolererance from the original value.  The rational
!> fraction is less than a tolerance from the original value.  The rational
!> fraction calculation will stop after 50 iterations, which is an arbitrary
!> value that could easily be extended if tighter accuracy is required.  The
!> coeffiecients are stored such that:
@@ -90,7 +90,7 @@ SUBROUTINE Rational_Fraction(targval,tol,num,denom)

  INTEGER(SIK) :: lev
  INTEGER(SIK) :: coef(50)
  REAL(SRK) :: targ
  REAL(SRK) :: targ,tmp

  coef=0

@@ -100,7 +100,8 @@ SUBROUTINE Rational_Fraction(targval,tol,num,denom)
  targ=1.0_SRK/(targ-REAL(coef(1),SRK))
  DO lev=2,SIZE(coef)
    coef(lev)=FLOOR(targ)
    targ=1.0_SRK/(targ-REAL(coef(lev),SRK))
    tmp = targ-REAL(coef(lev),SRK)
    targ=MERGE(0.0_SRK,1.0_SRK/tmp,ABS(tmp) < tol)
    num=coef(lev)
    denom=1
    CALL simplify_rat_frac(coef,lev,num,denom)
+17 −17
Original line number Diff line number Diff line
@@ -98,16 +98,16 @@ ABSTRACT INTERFACE
    CLASS(FMU),INTENT(INOUT) :: self
  ENDSUBROUTINE
  SUBROUTINE fmu_getReal_sub_absintfc(self, valueReference, val)
    IMPORT FMU,SIK,SRK
    IMPORT FMU,SIK,SDK
    CLASS(FMU),INTENT(INOUT) :: self
    INTEGER(SIK),INTENT(IN) :: valueReference
    REAL(SRK),INTENT(INOUT) :: val
    REAL(SDK),INTENT(INOUT) :: val
  ENDSUBROUTINE
  SUBROUTINE fmu_setReal_sub_absintfc(self, valueReference, val)
    IMPORT FMU,SIK,SRK
    IMPORT FMU,SIK,SDK
    CLASS(FMU),INTENT(INOUT) :: self
    INTEGER(SIK),INTENT(IN) :: valueReference
    REAL(SRK),INTENT(IN) :: val
    REAL(SDK),INTENT(IN) :: val
  ENDSUBROUTINE
  SUBROUTINE fmu_getInteger_sub_absintfc(self, valueReference, val)
    IMPORT FMU,SIK,SRK
@@ -351,10 +351,10 @@ SUBROUTINE setupExperiment_FMU2_Base(self, toleranceDefined, tolerance, startTim
    stopTimeDefined, stopTime, finalizeInitialization_opt)
  CLASS(FMU2_Base),INTENT(INOUT) :: self
  LOGICAL(SBK),INTENT(IN) :: toleranceDefined
  REAL(SRK),INTENT(IN) :: tolerance
  REAL(SRK),INTENT(IN) :: startTime
  REAL(SDK),INTENT(IN) :: tolerance
  REAL(SDK),INTENT(IN) :: startTime
  LOGICAL(SBK),INTENT(IN) :: stopTimeDefined
  REAL(SRK),INTENT(IN) :: stopTime
  REAL(SDK),INTENT(IN) :: stopTime
  LOGICAL(SBK),INTENT(IN),OPTIONAL :: finalizeInitialization_opt

  LOGICAL(SBK) :: finalizeInitialization=.TRUE.
@@ -471,7 +471,7 @@ ENDFUNCTION
SUBROUTINE getReal_FMU2_Base(self, valueReference, val)
  CLASS(FMU2_Base),INTENT(INOUT) :: self
  INTEGER(SIK),INTENT(IN) :: valueReference
  REAL(SRK),INTENT(INOUT) :: val
  REAL(SDK),INTENT(INOUT) :: val

  REQUIRE(self%isInit)
  REQUIRE(c_associated(self%fmu_c_ptr))
@@ -489,7 +489,7 @@ ENDSUBROUTINE
SUBROUTINE setReal_FMU2_Base(self, valueReference, val)
  CLASS(FMU2_Base),INTENT(INOUT) :: self
  INTEGER(SIK),INTENT(IN) :: valueReference
  REAL(SRK),INTENT(IN) :: val
  REAL(SDK),INTENT(IN) :: val

  REQUIRE(self%isInit)
  REQUIRE(c_associated(self%fmu_c_ptr))
@@ -581,7 +581,7 @@ ENDSUBROUTINE
SUBROUTINE getNamedReal_FMU2_Base(self, variableName, val)
  CLASS(FMU2_Base),INTENT(INOUT) :: self
  CHARACTER(LEN=*),INTENT(IN) :: variableName
  REAL(SRK),INTENT(OUT) :: val
  REAL(SDK),INTENT(OUT) :: val

  INTEGER(SIK) :: valueReference

@@ -603,7 +603,7 @@ SUBROUTINE setNamedReal_FMU2_Base(self, variableName, val)
  CHARACTER(LEN=*),PARAMETER :: myName='setNamedReal_FMU2_Base'
  CLASS(FMU2_Base),INTENT(INOUT) :: self
  CHARACTER(LEN=*),INTENT(IN) :: variableName
  REAL(SRK),INTENT(IN) :: val
  REAL(SDK),INTENT(IN) :: val

  INTEGER(SIK) :: valueReference
  TYPE(StringType) :: causality
@@ -784,7 +784,7 @@ ENDSUBROUTINE
!>
SUBROUTINE doStep_FMU2_Slave(self,h)
  CLASS(FMU2_Slave),INTENT(INOUT) :: self
  REAL(SRK),INTENT(IN) :: h
  REAL(SDK),INTENT(IN) :: h

  REQUIRE(self%isInit)
  REQUIRE(c_associated(self%fmu_c_ptr))
@@ -847,7 +847,7 @@ ENDSUBROUTINE
!>
SUBROUTINE setTime_FMU2_Model(self, time)
  CLASS(FMU2_Model),INTENT(INOUT) :: self
  REAL(SRK),INTENT(IN) :: time
  REAL(SDK),INTENT(IN) :: time

  REQUIRE(self%isInit)
  REQUIRE(c_associated(self%fmu_c_ptr))
@@ -891,7 +891,7 @@ ENDSUBROUTINE
!>
SUBROUTINE getDerivatives_FMU2_Model(self, dx)
  CLASS(FMU2_Model),INTENT(INOUT) :: self
  REAL(SRK),INTENT(INOUT),ALLOCATABLE :: dx(:)
  REAL(SDK),INTENT(INOUT),ALLOCATABLE :: dx(:)

  INTEGER(SIK) :: nx

@@ -928,7 +928,7 @@ ENDFUNCTION
!>
SUBROUTINE getContinuousStates_FMU2_Model(self, x)
  CLASS(FMU2_Model),INTENT(INOUT) :: self
  REAL(SRK),INTENT(INOUT),ALLOCATABLE :: x(:)
  REAL(SDK),INTENT(INOUT),ALLOCATABLE :: x(:)

  INTEGER(SIK) :: nx

@@ -948,7 +948,7 @@ ENDSUBROUTINE
!>
SUBROUTINE setContinuousStates_FMU2_Model(self, x)
  CLASS(FMU2_Model),INTENT(INOUT) :: self
  REAL(SRK),INTENT(IN) :: x(:)
  REAL(SDK),INTENT(IN) :: x(:)

  REQUIRE(self%isInit)
  REQUIRE(c_associated(self%fmu_c_ptr))
@@ -964,7 +964,7 @@ ENDSUBROUTINE
!>
SUBROUTINE getEventIndicators_FMU2_Model(self, xi)
  CLASS(FMU2_Model),INTENT(INOUT) :: self
  REAL(SRK),INTENT(INOUT),ALLOCATABLE :: xi(:)
  REAL(SDK),INTENT(INOUT),ALLOCATABLE :: xi(:)

  INTEGER(SIK) :: ni

Loading