dnum0(3f) - [M_calculator] return double precision value from string expression using calculator(3f)
(LICENSE:PD)
doubleprecision function dnum0(inline,ierr)
character(len=*),intent(in) :: inline
integer,optional,intent(out) :: ierr
DNUM0() is used to return a DOUBLEPRECISION value from a CHARACTER string
representing a numeric expression.
o If an error occurs in evaluating the expression INUM() returns zero(0).
o DNUM0() ultimately uses the calculator routine CALCULATOR(3f)
inline INLINE is a CHARACTER variable up to (iclen_calc=255) characters long
that is similar to a FORTRAN 77 numeric expression.
ierr error code. If zero, no error occurred
Sample Program
program demo_dnum0
use M_calculator, only : dnum0
implicit none
doubleprecision x,y,z
X=DNUM0('20/3.4')
Y=DNUM0('CI = 10 * sin(3.1416/4)')
Z=DNUM0('CI')
write(*,*)x,y,z
end program demo_dnum0
o The syntax of an expression is as described in the main documentation of the Calculator Library.
o See EXPRESSION(), CALCULATOR(), RNUM0(), SNUM0().
John S. Urban
Public Domain
AUTHOR + John S. Urban
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
character(len=*), | intent(in) | :: | inline | |||
integer, | intent(out), | optional | :: | ierr |
doubleprecision function dnum0(inline,ierr) ! ident_18="@(#) M_calculator dnum0(3f) resolve a calculator string into a doubleprecision number" character(len=*),intent(in) :: inline integer,optional,intent(out) :: ierr character(len=iclen_calc) :: cdum20 doubleprecision :: dnum1 integer :: iend integer :: ierr_local integer :: ilen ierr_local=0 if(inline.eq.' ')then dnum1=0.0d0 elseif(inline.eq.'*')then ! the special string '*' returns -99999.0 dnum1=-99999.0d0 else iend=len(inline) call expression(inline(:iend),dnum1,cdum20,ierr_local,ilen) if(ierr_local.ne.0)then dnum1=0.0d0 endif endif dnum0=dnum1 if(present(ierr))then ierr=ierr_local endif end function dnum0