anyscalar_to_real128 Function

public pure elemental function anyscalar_to_real128(valuein) result(d_out)

NAME

anyscalar_to_real128(3f) - [M_anything] convert integer or real parameter of any kind to real128
(LICENSE:MIT)

SYNOPSIS

pure elemental function anyscalar_to_real128(valuein) result(d_out)

 class(*),intent(in) :: valuein
 real(kind=128)      :: d_out

DESCRIPTION

This function uses polymorphism to allow input arguments of different
types. It is used to create other procedures that can take many
scalar arguments as input options.

OPTIONS

VALUEIN  input argument of a procedure to convert to type REAL128.
         May be of KIND kind=int8, kind=int16, kind=int32, kind=int64,
         kind=real32, kind=real64, or kind=real128

RESULTS

D_OUT    The value of VALUIN converted to REAL128 (assuming
         it is actually in the range of type REAL128).

EXAMPLE

Sample program

 program demo_anyscalar_to_real128
 use, intrinsic :: iso_fortran_env, only : int8, int16, int32, int64
 use, intrinsic :: iso_fortran_env, only : real32, real64, real128
 implicit none
    ! call same function with many scalar input types
    write(*,*)squarei(2_int8)
    write(*,*)squarei(2_int16)
    write(*,*)squarei(2_int32)
    write(*,*)squarei(2_int64)
    write(*,*)squarei(2.0_real32)
    write(*,*)squarei(2.0_real64)
    write(*,*)squarei(2.0_real128)
 contains

 function squarei(invalue) result (dvalue)
 use M_anything, only : anyscalar_to_real128
 class(*),intent(in)  :: invalue
 real(kind=real128)   :: invalue_local
 real(kind=real128)   :: dvalue
    invalue_local=anyscalar_to_real128(invalue)
    dvalue=invalue_local*invalue_local
 end function squarei

 end program demo_anyscalar_to_real128

AUTHOR

John S. Urban

LICENSE

MIT

stop ‘*M_anything::anyscalar_to_real128: unknown type’

Arguments

Type IntentOptional Attributes Name
class(*), intent(in) :: valuein

Return Value real(kind=real128)


Source Code

pure elemental function anyscalar_to_real128(valuein) result(d_out)

! ident_3="@(#) M_anything anyscalar_to_real128(3f) convert integer or real parameter of any kind to real128"

class(*),intent(in)          :: valuein
real(kind=real128)           :: d_out
character(len=3)             :: readable
   select type(valuein)
   type is (integer(kind=int8));   d_out=real(valuein,kind=real128)
   type is (integer(kind=int16));  d_out=real(valuein,kind=real128)
   type is (integer(kind=int32));  d_out=real(valuein,kind=real128)
   type is (integer(kind=int64));  d_out=real(valuein,kind=real128)
   type is (real(kind=real32));    d_out=real(valuein,kind=real128)
   type is (real(kind=real64));    d_out=real(valuein,kind=real128)
   Type is (real(kind=real128));   d_out=valuein
   type is (logical);              d_out=merge(0.0_real128,1.0_real128,valuein)
   type is (character(len=*));     read(valuein,*) d_out
   class default
    readable='NaN'
    read(readable,*)d_out
    !!stop '*M_anything::anyscalar_to_real128: unknown type'
   end select
end function anyscalar_to_real128