dnum0 Function

public function dnum0(inline, ierr)

NAME

  dnum0(3f) - [M_calculator] return double precision value from string expression using calculator(3f)
  (LICENSE:PD)

SYNOPSIS

doubleprecision function dnum0(inline,ierr)

character(len=*),intent(in) :: inline
integer,optional,intent(out) :: ierr

DESCRIPTION

 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

EXAMPLES

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

SEE ALSO

   o The syntax of an expression is as described in the main documentation of the Calculator Library.
   o See EXPRESSION(), CALCULATOR(), RNUM0(), SNUM0().

AUTHOR

John S. Urban

LICENSE

Public Domain

AUTHOR + John S. Urban

VERSION 1.0, 19971123

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: inline
integer, intent(out), optional :: ierr

Return Value doubleprecision


Source Code

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