fury_test_qreal_conversions_complex.f90 Source File

FURY test of qreal.

This File Depends On

sourcefile~~fury_test_qreal_conversions_complex.f90~~EfferentGraph sourcefile~fury_test_qreal_conversions_complex.f90 fury_test_qreal_conversions_complex.f90 sourcefile~fury.f90 fury.f90 sourcefile~fury.f90->sourcefile~fury_test_qreal_conversions_complex.f90 sourcefile~fury_system_si32.f90 fury_system_si32.F90 sourcefile~fury_system_si32.f90->sourcefile~fury.f90 sourcefile~fury_uom_symbol32.f90 fury_uom_symbol32.F90 sourcefile~fury_uom_symbol32.f90->sourcefile~fury.f90 sourcefile~fury_mixed_kinds.f90 fury_mixed_kinds.F90 sourcefile~fury_uom_symbol32.f90->sourcefile~fury_mixed_kinds.f90 sourcefile~fury_uom32.f90 fury_uom32.F90 sourcefile~fury_uom_symbol32.f90->sourcefile~fury_uom32.f90 sourcefile~fury_uom_reference32.f90 fury_uom_reference32.F90 sourcefile~fury_uom_symbol32.f90->sourcefile~fury_uom_reference32.f90 sourcefile~fury_uom128.f90 fury_uom128.F90 sourcefile~fury_uom128.f90->sourcefile~fury.f90 sourcefile~fury_system_si128.f90 fury_system_si128.F90 sourcefile~fury_uom128.f90->sourcefile~fury_system_si128.f90 sourcefile~fury_uom128.f90->sourcefile~fury_mixed_kinds.f90 sourcefile~fury_qreal128.f90 fury_qreal128.F90 sourcefile~fury_uom128.f90->sourcefile~fury_qreal128.f90 sourcefile~fury_system_abstract128.f90 fury_system_abstract128.F90 sourcefile~fury_uom128.f90->sourcefile~fury_system_abstract128.f90 sourcefile~fury_uom_reference64.f90 fury_uom_reference64.F90 sourcefile~fury_uom_reference64.f90->sourcefile~fury.f90 sourcefile~fury_uom_reference64.f90->sourcefile~fury_mixed_kinds.f90 sourcefile~fury_system_abstract64.f90 fury_system_abstract64.F90 sourcefile~fury_uom_reference64.f90->sourcefile~fury_system_abstract64.f90 sourcefile~fury_uom64.f90 fury_uom64.F90 sourcefile~fury_uom_reference64.f90->sourcefile~fury_uom64.f90 sourcefile~stringifor.f90 stringifor.F90 sourcefile~stringifor.f90->sourcefile~fury.f90 sourcefile~stringifor.f90->sourcefile~fury_system_si32.f90 sourcefile~stringifor.f90->sourcefile~fury_uom_symbol32.f90 sourcefile~stringifor.f90->sourcefile~fury_uom128.f90 sourcefile~stringifor.f90->sourcefile~fury_uom_reference64.f90 sourcefile~fury_system_si64.f90 fury_system_si64.F90 sourcefile~stringifor.f90->sourcefile~fury_system_si64.f90 sourcefile~fury_uom_symbol64.f90 fury_uom_symbol64.F90 sourcefile~stringifor.f90->sourcefile~fury_uom_symbol64.f90 sourcefile~stringifor.f90->sourcefile~fury_system_si128.f90 sourcefile~fury_uom_reference128.f90 fury_uom_reference128.F90 sourcefile~stringifor.f90->sourcefile~fury_uom_reference128.f90 sourcefile~stringifor.f90->sourcefile~fury_mixed_kinds.f90 sourcefile~fury_system_abstract32.f90 fury_system_abstract32.F90 sourcefile~stringifor.f90->sourcefile~fury_system_abstract32.f90 sourcefile~stringifor.f90->sourcefile~fury_system_abstract64.f90 sourcefile~fury_uom_symbol128.f90 fury_uom_symbol128.F90 sourcefile~stringifor.f90->sourcefile~fury_uom_symbol128.f90 sourcefile~fury_qreal64.f90 fury_qreal64.F90 sourcefile~stringifor.f90->sourcefile~fury_qreal64.f90 sourcefile~stringifor.f90->sourcefile~fury_qreal128.f90 sourcefile~stringifor.f90->sourcefile~fury_uom32.f90 sourcefile~stringifor.f90->sourcefile~fury_system_abstract128.f90 sourcefile~stringifor.f90->sourcefile~fury_uom64.f90 sourcefile~stringifor.f90->sourcefile~fury_uom_reference32.f90 sourcefile~fury_qreal32.f90 fury_qreal32.F90 sourcefile~stringifor.f90->sourcefile~fury_qreal32.f90 sourcefile~fury_system_si64.f90->sourcefile~fury.f90 sourcefile~fury_uom_symbol64.f90->sourcefile~fury.f90 sourcefile~fury_uom_symbol64.f90->sourcefile~fury_uom_reference64.f90 sourcefile~fury_uom_symbol64.f90->sourcefile~fury_mixed_kinds.f90 sourcefile~fury_uom_symbol64.f90->sourcefile~fury_uom64.f90 sourcefile~fury_system_si128.f90->sourcefile~fury.f90 sourcefile~fury_uom_reference128.f90->sourcefile~fury.f90 sourcefile~fury_uom_reference128.f90->sourcefile~fury_uom128.f90 sourcefile~fury_uom_reference128.f90->sourcefile~fury_mixed_kinds.f90 sourcefile~fury_uom_reference128.f90->sourcefile~fury_system_abstract128.f90 sourcefile~fury_mixed_kinds.f90->sourcefile~fury.f90 sourcefile~fury_system_abstract32.f90->sourcefile~fury.f90 sourcefile~fury_system_abstract32.f90->sourcefile~fury_system_si32.f90 sourcefile~fury_system_abstract64.f90->sourcefile~fury.f90 sourcefile~fury_system_abstract64.f90->sourcefile~fury_system_si64.f90 sourcefile~fury_uom_symbol128.f90->sourcefile~fury.f90 sourcefile~fury_uom_symbol128.f90->sourcefile~fury_uom128.f90 sourcefile~fury_uom_symbol128.f90->sourcefile~fury_uom_reference128.f90 sourcefile~fury_uom_symbol128.f90->sourcefile~fury_mixed_kinds.f90 sourcefile~fury_qreal64.f90->sourcefile~fury.f90 sourcefile~fury_qreal64.f90->sourcefile~fury_system_si64.f90 sourcefile~fury_qreal64.f90->sourcefile~fury_mixed_kinds.f90 sourcefile~fury_qreal64.f90->sourcefile~fury_system_abstract64.f90 sourcefile~fury_qreal128.f90->sourcefile~fury.f90 sourcefile~fury_qreal128.f90->sourcefile~fury_system_si128.f90 sourcefile~fury_qreal128.f90->sourcefile~fury_mixed_kinds.f90 sourcefile~fury_qreal128.f90->sourcefile~fury_system_abstract128.f90 sourcefile~fury_uom32.f90->sourcefile~fury.f90 sourcefile~fury_uom32.f90->sourcefile~fury_system_si32.f90 sourcefile~fury_uom32.f90->sourcefile~fury_mixed_kinds.f90 sourcefile~fury_uom32.f90->sourcefile~fury_system_abstract32.f90 sourcefile~fury_uom32.f90->sourcefile~fury_qreal32.f90 sourcefile~fury_system_abstract128.f90->sourcefile~fury.f90 sourcefile~fury_system_abstract128.f90->sourcefile~fury_system_si128.f90 sourcefile~fury_uom64.f90->sourcefile~fury.f90 sourcefile~fury_uom64.f90->sourcefile~fury_system_si64.f90 sourcefile~fury_uom64.f90->sourcefile~fury_mixed_kinds.f90 sourcefile~fury_uom64.f90->sourcefile~fury_system_abstract64.f90 sourcefile~fury_uom64.f90->sourcefile~fury_qreal64.f90 sourcefile~fury_uom_converter.f90 fury_uom_converter.F90 sourcefile~fury_uom_converter.f90->sourcefile~fury.f90 sourcefile~fury_uom_converter.f90->sourcefile~fury_uom_symbol32.f90 sourcefile~fury_uom_converter.f90->sourcefile~fury_uom128.f90 sourcefile~fury_uom_converter.f90->sourcefile~fury_uom_reference64.f90 sourcefile~fury_uom_converter.f90->sourcefile~fury_uom_symbol64.f90 sourcefile~fury_uom_converter.f90->sourcefile~fury_uom_reference128.f90 sourcefile~fury_uom_converter.f90->sourcefile~fury_mixed_kinds.f90 sourcefile~fury_uom_converter.f90->sourcefile~fury_uom_symbol128.f90 sourcefile~fury_uom_converter.f90->sourcefile~fury_uom32.f90 sourcefile~fury_uom_converter.f90->sourcefile~fury_uom64.f90 sourcefile~fury_uom_converter.f90->sourcefile~fury_uom_reference32.f90 sourcefile~fury_uom_reference32.f90->sourcefile~fury.f90 sourcefile~fury_uom_reference32.f90->sourcefile~fury_mixed_kinds.f90 sourcefile~fury_uom_reference32.f90->sourcefile~fury_system_abstract32.f90 sourcefile~fury_uom_reference32.f90->sourcefile~fury_uom32.f90 sourcefile~penf.f90 penf.F90 sourcefile~penf.f90->sourcefile~fury.f90 sourcefile~penf.f90->sourcefile~fury_system_si32.f90 sourcefile~penf.f90->sourcefile~fury_uom_symbol32.f90 sourcefile~penf.f90->sourcefile~fury_uom128.f90 sourcefile~penf.f90->sourcefile~fury_uom_reference64.f90 sourcefile~penf.f90->sourcefile~stringifor.f90 sourcefile~penf.f90->sourcefile~fury_system_si64.f90 sourcefile~penf.f90->sourcefile~fury_uom_symbol64.f90 sourcefile~penf.f90->sourcefile~fury_system_si128.f90 sourcefile~penf.f90->sourcefile~fury_uom_reference128.f90 sourcefile~penf.f90->sourcefile~fury_mixed_kinds.f90 sourcefile~penf.f90->sourcefile~fury_system_abstract32.f90 sourcefile~penf.f90->sourcefile~fury_system_abstract64.f90 sourcefile~penf.f90->sourcefile~fury_uom_symbol128.f90 sourcefile~penf.f90->sourcefile~fury_qreal64.f90 sourcefile~penf.f90->sourcefile~fury_qreal128.f90 sourcefile~penf.f90->sourcefile~fury_uom32.f90 sourcefile~penf.f90->sourcefile~fury_system_abstract128.f90 sourcefile~penf.f90->sourcefile~fury_uom64.f90 sourcefile~penf.f90->sourcefile~fury_uom_converter.f90 sourcefile~penf.f90->sourcefile~fury_uom_reference32.f90 sourcefile~penf.f90->sourcefile~fury_qreal32.f90 sourcefile~stringifor_string_t.f90 stringifor_string_t.F90 sourcefile~penf.f90->sourcefile~stringifor_string_t.f90 sourcefile~befor64.f90 befor64.F90 sourcefile~penf.f90->sourcefile~befor64.f90 sourcefile~befor64_pack_data_m.f90 befor64_pack_data_m.F90 sourcefile~penf.f90->sourcefile~befor64_pack_data_m.f90 sourcefile~fury_qreal32.f90->sourcefile~fury.f90 sourcefile~fury_qreal32.f90->sourcefile~fury_system_si32.f90 sourcefile~fury_qreal32.f90->sourcefile~fury_mixed_kinds.f90 sourcefile~fury_qreal32.f90->sourcefile~fury_system_abstract32.f90 sourcefile~stringifor_string_t.f90->sourcefile~stringifor.f90 sourcefile~befor64.f90->sourcefile~stringifor_string_t.f90 sourcefile~befor64_pack_data_m.f90->sourcefile~befor64.f90 sourcefile~penf_b_size.f90 penf_b_size.F90 sourcefile~penf_b_size.f90->sourcefile~penf.f90 sourcefile~penf_stringify.f90 penf_stringify.F90 sourcefile~penf_b_size.f90->sourcefile~penf_stringify.f90 sourcefile~penf_global_parameters_variables.f90 penf_global_parameters_variables.F90 sourcefile~penf_global_parameters_variables.f90->sourcefile~penf.f90 sourcefile~penf_global_parameters_variables.f90->sourcefile~penf_b_size.f90 sourcefile~penf_global_parameters_variables.f90->sourcefile~penf_stringify.f90 sourcefile~penf_stringify.f90->sourcefile~penf.f90
Help


Source Code

!< FURY test of [[qreal]].
module dBm_to_mW_converter
!-----------------------------------------------------------------------------------------------------------------------------------
!< Define the converter (user-supplied) from dBm to mW.
!-----------------------------------------------------------------------------------------------------------------------------------
use fury
!-----------------------------------------------------------------------------------------------------------------------------------

!-----------------------------------------------------------------------------------------------------------------------------------
implicit none
private
public :: dBm_to_mW
!-----------------------------------------------------------------------------------------------------------------------------------

!-----------------------------------------------------------------------------------------------------------------------------------
type, extends(uom_converter) :: dBm_to_mW
  !< Converter (user-supplied) from dBm to mW.
  contains
    procedure, nopass    :: convert_float128 !< User-supplied conversion formulas from dBm to mW (and viceversa), float128.
    procedure, nopass    :: convert_float64  !< User-supplied conversion formulas from dBm to mW (and viceversa), float128.
    procedure, nopass    :: convert_float32  !< User-supplied conversion formulas from dBm to mW (and viceversa), float128.
    procedure, pass(lhs) :: assign_converter !< `converter = converter` assignment.
endtype dBm_to_mW
!-----------------------------------------------------------------------------------------------------------------------------------
contains
  pure function convert_float128(magnitude, inverse) result(converted)
  !---------------------------------------------------------------------------------------------------------------------------------
  !< User-supplied conversion formulas from dBm to mW (and viceversa), float128.
  !---------------------------------------------------------------------------------------------------------------------------------
  real(R16P), intent(in)           :: magnitude !< Magnitude (of the quantity) to be converted.
  logical ,   intent(in), optional :: inverse   !< Activate inverse conversion.
  real(R16P)                       :: converted !< Converted magnitude.
  logical                          :: inverse_  !< Activate inverse conversion, local variable.
  !---------------------------------------------------------------------------------------------------------------------------------

  !---------------------------------------------------------------------------------------------------------------------------------
  inverse_ = .false. ; if (present(inverse)) inverse_ = inverse
  if (inverse_) then
    converted = 10._R16P * log10(magnitude)
  else
    converted = 10._R16P ** (magnitude / 10._R16P)
  endif
  !---------------------------------------------------------------------------------------------------------------------------------
  endfunction convert_float128

  pure function convert_float64(magnitude, inverse) result(converted)
  !---------------------------------------------------------------------------------------------------------------------------------
  !< User-supplied conversion formulas from dBm to mW (and viceversa), float64.
  !---------------------------------------------------------------------------------------------------------------------------------
  real(R8P), intent(in)           :: magnitude !< Magnitude (of the quantity) to be converted.
  logical,   intent(in), optional :: inverse   !< Activate inverse conversion.
  real(R8P)                       :: converted !< Converted magnitude.
  logical                         :: inverse_  !< Activate inverse conversion, local variable.
  !---------------------------------------------------------------------------------------------------------------------------------

  !---------------------------------------------------------------------------------------------------------------------------------
  inverse_ = .false. ; if (present(inverse)) inverse_ = inverse
  if (inverse_) then
    converted = 10._R8P * log10(magnitude)
  else
    converted = 10._R8P ** (magnitude / 10._R8P)
  endif
  !---------------------------------------------------------------------------------------------------------------------------------
  endfunction convert_float64

  pure function convert_float32(magnitude, inverse) result(converted)
  !---------------------------------------------------------------------------------------------------------------------------------
  !< User-supplied conversion formulas from dBm to mW (and viceversa), float32.
  !---------------------------------------------------------------------------------------------------------------------------------
  real(R4P), intent(in)           :: magnitude !< Magnitude (of the quantity) to be converted.
  logical,   intent(in), optional :: inverse   !< Activate inverse conversion.
  real(R4P)                       :: converted !< Converted magnitude.
  logical                         :: inverse_  !< Activate inverse conversion, local variable.
  !---------------------------------------------------------------------------------------------------------------------------------

  !---------------------------------------------------------------------------------------------------------------------------------
  inverse_ = .false. ; if (present(inverse)) inverse_ = inverse
  if (inverse_) then
    converted = 10._R4P * log10(magnitude)
  else
    converted = 10._R4P ** (magnitude / 10._R4P)
  endif
  !---------------------------------------------------------------------------------------------------------------------------------
  endfunction convert_float32

  pure subroutine assign_converter(lhs, rhs)
  !---------------------------------------------------------------------------------------------------------------------------------
  !< `converter = converter` assignment.
  !---------------------------------------------------------------------------------------------------------------------------------
  class(dBm_to_mW),     intent(inout) :: lhs !< Left hand side.
  class(uom_converter), intent(in)    :: rhs !< Right hand side.
  !---------------------------------------------------------------------------------------------------------------------------------

  !---------------------------------------------------------------------------------------------------------------------------------
  select type(rhs)
  class is (dBm_to_mW)
    lhs = rhs
  endselect
  !---------------------------------------------------------------------------------------------------------------------------------
  endsubroutine assign_converter
endmodule dBm_to_mW_converter

program fury_test_qreal_conversions_complex
!-----------------------------------------------------------------------------------------------------------------------------------
!< FURY test of [[qreal]].
!-----------------------------------------------------------------------------------------------------------------------------------
use dBm_to_mW_converter
use fury
!-----------------------------------------------------------------------------------------------------------------------------------

!-----------------------------------------------------------------------------------------------------------------------------------
type(uom64)     :: dBm            !< dBm unit.
type(uom64)     :: mW             !< mW unit.
type(uom64)     :: kelvin         !< Kelvin unit.
type(uom64)     :: celsius        !< Celsius unit.
type(qreal64)   :: q1             !< A quantity.
type(qreal64)   :: q2             !< A quantity.
type(qreal64)   :: q3             !< A quantity.
type(dBm_to_mW) :: dBm2mW         !< Converter from dBm to mW.
logical         :: test_passed(4) !< List of passed tests.
!-----------------------------------------------------------------------------------------------------------------------------------

!-----------------------------------------------------------------------------------------------------------------------------------
test_passed = .false.

dBm = uom64('dBm = @user mW')
mW = uom64('mW')

call dBm%set_alias_conversion(reference_index=1, alias_index=2, convert=dBm2mW)

q1 = 10. * dBm
q2 = q1%to(unit=mW)
test_passed(1) = q2%stringify(format='(F4.1)')=='10.0 mW'
print "(A,L1)", '10.0 dBm = '//q2%stringify(format='(F4.1)')//', is correct? ', test_passed(1)

call q1%unset
call q2%unset
q1 = 10. * mW
q2 = q1%to(unit=dBm)
test_passed(2) = q2%stringify(format='(F4.1)')=='10.0 dBm'
print "(A,L1)", '10.0 mW = '//q2%stringify(format='(F4.1)')//', is correct? ', test_passed(2)

kelvin = uom64('K')
celsius = uom64('degC<=273.15 + K=celsius>')

call q1%unset
call q2%unset
q1 = 2 * kelvin
q2 = 1 * celsius
q3 = q1 - q2%to(kelvin)
test_passed(3) = q3%stringify(format='(F7.2)')=='-272.15 K'
print "(A,L1)", '2 K - 1 celsius = '//q3%stringify(format='(F7.2)')//', is correct? ', test_passed(3)

call q3%unset
q3 = q2 - q1%to(celsius)
test_passed(4) = q3%stringify(format='(F6.2)')=='272.15 degC'
print "(A,L1)", '1 celsius - 2 K = '//q3%stringify(format='(F6.2)')//', is correct? ', test_passed(4)

print "(A,L1)", new_line('a')//'Are all tests passed? ', all(test_passed)
stop
!-----------------------------------------------------------------------------------------------------------------------------------
endprogram fury_test_qreal_conversions_complex

assignments.f90 basename_dir.f90 befor64.F90 befor64.F90 befor64_pack_data_m.F90 befor64_pack_data_m.F90 camelcase.f90 capitalize.f90 compact_real.f90 compact_real.f90 compact_real.f90 concatenation.f90 csv_naive_parser.f90 decode.f90 encode.f90 equal.f90 escape.f90 extension.f90 fill.f90 free.f90 fury.f90 fury_mixed_kinds.F90 fury_qreal128.F90 fury_qreal32.F90 fury_qreal64.F90 fury_system_abstract128.F90 fury_system_abstract32.F90 fury_system_abstract64.F90 fury_system_si128.F90 fury_system_si32.F90 fury_system_si64.F90 fury_test_bolt32.f90 fury_test_bolt64.f90 fury_test_qreal_add.f90 fury_test_qreal_add_aliases_failure.f90 fury_test_qreal_add_failure.f90 fury_test_qreal_add_mixed.f90 fury_test_qreal_add_mixed_failure.f90 fury_test_qreal_aliases.f90 fury_test_qreal_assign.f90 fury_test_qreal_conversions_complex.f90 fury_test_qreal_conversions_si.f90 fury_test_qreal_conversions_simple.f90 fury_test_qreal_div.f90 fury_test_qreal_div_mixed.f90 fury_test_qreal_eq.f90 fury_test_qreal_eq_mixed.f90 fury_test_qreal_mul.f90 fury_test_qreal_mul_mixed.f90 fury_test_qreal_not_eq.f90 fury_test_qreal_not_eq_mixed.f90 fury_test_qreal_pow.f90 fury_test_qreal_sub.f90 fury_test_qreal_sub_failure.f90 fury_test_qreal_sub_mixed.f90 fury_test_qreal_sub_mixed_failure.f90 fury_test_system_si.f90 fury_test_uom_add.f90 fury_test_uom_add_failure.f90 fury_test_uom_aliases.f90 fury_test_uom_assign.f90 fury_test_uom_assign_failure.f90 fury_test_uom_div.f90 fury_test_uom_mul.f90 fury_test_uom_parse_failure.f90 fury_test_uom_pow.f90 fury_test_uom_sub.f90 fury_test_uom_sub_failure.f90 fury_uom128.F90 fury_uom32.F90 fury_uom64.F90 fury_uom_converter.F90 fury_uom_reference128.F90 fury_uom_reference32.F90 fury_uom_reference64.F90 fury_uom_symbol128.F90 fury_uom_symbol32.F90 fury_uom_symbol64.F90 greater_equal_than.f90 greater_than.f90 insert.f90 io_basic.F90 io_listdirected.F90 is_digit.f90 is_integer.f90 is_number.f90 is_real.f90 join.f90 lower_equal_than.f90 lower_than.f90 not_equal.f90 partition.f90 penf.F90 penf.F90 penf.F90 penf.F90 penf.F90 penf_b_size.F90 penf_global_parameters_variables.F90 penf_stringify.F90 read_file.f90 read_line.f90 read_lines.f90 replace.f90 reverse.f90 sadjustlr.f90 scount.f90 search.f90 sindex.f90 slen.f90 slice.f90 snakecase.f90 split.f90 srepeat.f90 sscan.f90 start_end.f90 startcase.f90 strim.f90 stringifor.F90 stringifor_string_t.F90 strip.f90 sverify.f90 swapcase.f90 test_all.F90 test_all.f90 test_all.f90 Test_Driver.f90 to_number.f90 unescape.f90 unique.f90 upper_lower.f90 write_file.f90 write_lines.f90