anyscalar_to_real128(3f) - [M_anything] convert integer or real parameter of any kind to real128
(LICENSE:MIT)
pure elemental function anyscalar_to_real128(valuein) result(d_out)
class(*),intent(in) :: valuein
real(kind=128) :: d_out
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.
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
D_OUT The value of VALUIN converted to REAL128 (assuming
it is actually in the range of type REAL128).
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
John S. Urban
MIT
stop ‘*M_anything::anyscalar_to_real128: unknown type’
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(*), | intent(in) | :: | valuein |
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