feed_real_dp Subroutine

private pure subroutine feed_real_dp(state, value)

Canonicalise and feed one real(dp) value. See feed_real_sp for the ordering of the classification tests.

Arguments

Type IntentOptional Attributes Name
integer(kind=int32), intent(inout) :: state
real(kind=dp), intent(in) :: value

Value to encode; may be any value including -0.0, NaN and +/-Inf.


Calls

proc~~feed_real_dp~~CallsGraph proc~feed_real_dp feed_real_dp proc~feed_real_record feed_real_record proc~feed_real_dp->proc~feed_real_record proc~feed_integer feed_integer proc~feed_real_record->proc~feed_integer proc~fnv1a_byte fnv1a_byte proc~feed_integer->proc~fnv1a_byte

Called by

proc~~feed_real_dp~~CalledByGraph proc~feed_real_dp feed_real_dp proc~update_cdp_0 array_hash_t%update_cdp_0 proc~update_cdp_0->proc~feed_real_dp proc~update_cdp_1 array_hash_t%update_cdp_1 proc~update_cdp_1->proc~feed_real_dp proc~update_rdp_0 array_hash_t%update_rdp_0 proc~update_rdp_0->proc~feed_real_dp proc~update_rdp_1 array_hash_t%update_rdp_1 proc~update_rdp_1->proc~feed_real_dp none~update array_hash_t%update none~update->proc~update_cdp_0 none~update->proc~update_cdp_1 none~update->proc~update_rdp_0 none~update->proc~update_rdp_1 proc~update_cdp_2 array_hash_t%update_cdp_2 none~update->proc~update_cdp_2 proc~update_cdp_3 array_hash_t%update_cdp_3 none~update->proc~update_cdp_3 proc~update_char_1 array_hash_t%update_char_1 none~update->proc~update_char_1 proc~update_csp_2 array_hash_t%update_csp_2 none~update->proc~update_csp_2 proc~update_csp_3 array_hash_t%update_csp_3 none~update->proc~update_csp_3 proc~update_int16_2 array_hash_t%update_int16_2 none~update->proc~update_int16_2 proc~update_int16_3 array_hash_t%update_int16_3 none~update->proc~update_int16_3 proc~update_int32_2 array_hash_t%update_int32_2 none~update->proc~update_int32_2 proc~update_int32_3 array_hash_t%update_int32_3 none~update->proc~update_int32_3 proc~update_int64_2 array_hash_t%update_int64_2 none~update->proc~update_int64_2 proc~update_int64_3 array_hash_t%update_int64_3 none~update->proc~update_int64_3 proc~update_int8_2 array_hash_t%update_int8_2 none~update->proc~update_int8_2 proc~update_int8_3 array_hash_t%update_int8_3 none~update->proc~update_int8_3 proc~update_logical_2 array_hash_t%update_logical_2 none~update->proc~update_logical_2 proc~update_logical_3 array_hash_t%update_logical_3 none~update->proc~update_logical_3 proc~update_rdp_2 array_hash_t%update_rdp_2 none~update->proc~update_rdp_2 proc~update_rdp_3 array_hash_t%update_rdp_3 none~update->proc~update_rdp_3 proc~update_rsp_2 array_hash_t%update_rsp_2 none~update->proc~update_rsp_2 proc~update_rsp_3 array_hash_t%update_rsp_3 none~update->proc~update_rsp_3 proc~hash_cdp_1 hash_cdp_1 proc~hash_cdp_1->none~update proc~hash_cdp_2 hash_cdp_2 proc~hash_cdp_2->none~update proc~hash_cdp_3 hash_cdp_3 proc~hash_cdp_3->none~update proc~hash_char_0 hash_char_0 proc~hash_char_0->none~update proc~hash_char_1 hash_char_1 proc~hash_char_1->none~update proc~hash_csp_1 hash_csp_1 proc~hash_csp_1->none~update proc~hash_csp_2 hash_csp_2 proc~hash_csp_2->none~update proc~hash_csp_3 hash_csp_3 proc~hash_csp_3->none~update proc~hash_int16_1 hash_int16_1 proc~hash_int16_1->none~update proc~hash_int16_2 hash_int16_2 proc~hash_int16_2->none~update proc~hash_int16_3 hash_int16_3 proc~hash_int16_3->none~update proc~hash_int32_1 hash_int32_1 proc~hash_int32_1->none~update proc~hash_int32_2 hash_int32_2 proc~hash_int32_2->none~update proc~hash_int32_3 hash_int32_3 proc~hash_int32_3->none~update proc~hash_int64_1 hash_int64_1 proc~hash_int64_1->none~update proc~hash_int64_2 hash_int64_2 proc~hash_int64_2->none~update proc~hash_int64_3 hash_int64_3 proc~hash_int64_3->none~update proc~hash_int8_1 hash_int8_1 proc~hash_int8_1->none~update proc~hash_int8_2 hash_int8_2 proc~hash_int8_2->none~update proc~hash_int8_3 hash_int8_3 proc~hash_int8_3->none~update proc~hash_logical_1 hash_logical_1 proc~hash_logical_1->none~update proc~hash_logical_2 hash_logical_2 proc~hash_logical_2->none~update proc~hash_logical_3 hash_logical_3 proc~hash_logical_3->none~update proc~hash_rdp_1 hash_rdp_1 proc~hash_rdp_1->none~update proc~hash_rdp_2 hash_rdp_2 proc~hash_rdp_2->none~update proc~hash_rdp_3 hash_rdp_3 proc~hash_rdp_3->none~update proc~hash_rsp_1 hash_rsp_1 proc~hash_rsp_1->none~update proc~hash_rsp_2 hash_rsp_2 proc~hash_rsp_2->none~update proc~hash_rsp_3 hash_rsp_3 proc~hash_rsp_3->none~update proc~soa_hash_begin_32 soa_hash_begin_32 proc~soa_hash_begin_32->none~update proc~soa_hash_int32_field soa_hash_int32_field proc~soa_hash_int32_field->none~update proc~soa_hash_int64_field soa_hash_int64_field proc~soa_hash_int64_field->none~update proc~soa_hash_logical_field soa_hash_logical_field proc~soa_hash_logical_field->none~update proc~soa_hash_real_dp_field soa_hash_real_dp_field proc~soa_hash_real_dp_field->none~update proc~soa_hash_real_sp_field soa_hash_real_sp_field proc~soa_hash_real_sp_field->none~update proc~update_cdp_2->none~update proc~update_cdp_3->none~update proc~update_char_1->none~update proc~update_csp_2->none~update proc~update_csp_3->none~update proc~update_int16_2->none~update proc~update_int16_3->none~update proc~update_int32_2->none~update proc~update_int32_3->none~update proc~update_int64_2->none~update proc~update_int64_3->none~update proc~update_int8_2->none~update proc~update_int8_3->none~update proc~update_logical_2->none~update proc~update_logical_3->none~update proc~update_rdp_2->none~update proc~update_rdp_3->none~update proc~update_rsp_2->none~update proc~update_rsp_3->none~update interface~array_hash array_hash interface~array_hash->proc~hash_cdp_1 interface~array_hash->proc~hash_cdp_2 interface~array_hash->proc~hash_cdp_3 interface~array_hash->proc~hash_char_0 interface~array_hash->proc~hash_char_1 interface~array_hash->proc~hash_csp_1 interface~array_hash->proc~hash_csp_2 interface~array_hash->proc~hash_csp_3 interface~array_hash->proc~hash_int16_1 interface~array_hash->proc~hash_int16_2 interface~array_hash->proc~hash_int16_3 interface~array_hash->proc~hash_int32_1 interface~array_hash->proc~hash_int32_2 interface~array_hash->proc~hash_int32_3 interface~array_hash->proc~hash_int64_1 interface~array_hash->proc~hash_int64_2 interface~array_hash->proc~hash_int64_3 interface~array_hash->proc~hash_int8_1 interface~array_hash->proc~hash_int8_2 interface~array_hash->proc~hash_int8_3 interface~array_hash->proc~hash_logical_1 interface~array_hash->proc~hash_logical_2 interface~array_hash->proc~hash_logical_3 interface~array_hash->proc~hash_rdp_1 interface~array_hash->proc~hash_rdp_2 interface~array_hash->proc~hash_rdp_3 interface~array_hash->proc~hash_rsp_1 interface~array_hash->proc~hash_rsp_2 interface~array_hash->proc~hash_rsp_3 interface~soa_hash_begin soa_hash_begin interface~soa_hash_begin->proc~soa_hash_begin_32 interface~soa_hash_field soa_hash_field interface~soa_hash_field->proc~soa_hash_int32_field interface~soa_hash_field->proc~soa_hash_int64_field interface~soa_hash_field->proc~soa_hash_logical_field interface~soa_hash_field->proc~soa_hash_real_dp_field interface~soa_hash_field->proc~soa_hash_real_sp_field proc~particle_soa_state_hash particle_soa_t%particle_soa_state_hash proc~particle_soa_state_hash->interface~soa_hash_begin proc~particle_soa_state_hash->interface~soa_hash_field proc~particle_soa_state_hash64 particle_soa_t%particle_soa_state_hash64 proc~particle_soa_state_hash64->interface~soa_hash_begin proc~particle_soa_state_hash64->interface~soa_hash_field

Variables

Type Visibility Attributes Name Initial
integer(kind=int64), private :: class_code
integer(kind=int64), private :: expo
integer(kind=int64), private :: mantissa
integer(kind=int64), private :: sign_code

Source Code

   pure subroutine feed_real_dp(state, value)
      !! Canonicalise and feed one `real(dp)` value. See `feed_real_sp` for the
      !! ordering of the classification tests.
      integer(int32), intent(inout) :: state
      real(dp), intent(in) :: value
         !! Value to encode; may be any value including -0.0, NaN and +/-Inf.

      integer(int64) :: class_code, sign_code, expo, mantissa

      sign_code = 0_int64
      expo = 0_int64
      mantissa = 0_int64
      if (.not. (value >= 0.0_dp .or. value <= 0.0_dp)) then
         class_code = CLASS_NAN
      else if (value > huge(value)) then
         class_code = CLASS_POS_INF
      else if (value < -huge(value)) then
         class_code = CLASS_NEG_INF
      else if (.not. (abs(value) > 0.0_dp)) then
         class_code = CLASS_ZERO
      else
         class_code = CLASS_FINITE
         if (value < 0.0_dp) sign_code = 1_int64
         expo = int(exponent(value), int64)
         mantissa = int(scale(fraction(abs(value)), digits(value)), int64)
      end if
      call feed_real_record(state, class_code, sign_code, expo, mantissa)
   end subroutine feed_real_dp