xerrwd Subroutine

private subroutine xerrwd(me, msg, nmes, nerr, level, ni, i1, i2, nr, r1, r2)

write error message with values.

subroutines xerrwd, xsetf, xsetun, and the function routine ixsav, as given here, constitute a simplified version of the slatec error handling package.

Note

This routine is machine-dependent and specialized for use in limited context, in the following ways:

  1. the argument msg is assumed to be of type character, and the message is printed with a format of (1x,a).
  2. the message is assumed to take only one line. multi-line messages are generated by repeated calls.
  3. if level = 2, control passes to the statement stop to abort the run. this statement may be machine-dependent.
  4. r1 and r2 are assumed to be in real(wp) and are printed in d21.13 format.

Author

  • hindmarsh, alan c., (llnl)

Revision history

  • 920831 date written
  • 921118 replaced mflgsv/lunsav by ixsav. (ach)
  • 930329 modified prologue to slatec format. (fnf)
  • 930407 changed msg from character*1 array to variable. (fnf)
  • 930922 minor cosmetic change. (fnf)

internal notes:

for a different default logical unit number, ixsav (or a subsidiary routine that it calls) will need to be modified. for a different run-abort command, change the statement at the end.

Type Bound

dvode_t

Arguments

Type IntentOptional Attributes Name
class(dvode_t), intent(inout) :: me
character(len=*), intent(in) :: msg

the message (character array).

integer, intent(in) :: nmes

the length of msg (number of characters).

integer, intent(in) :: nerr

the error number (not used).

integer, intent(in) :: level

the error level:

  • 0 or 1 means recoverable (control returns to caller).
  • 2 means fatal (run is aborted).
integer, intent(in) :: ni

number of integers (0, 1, or 2) to be printed with message.

integer, intent(in) :: i1

integer to be printed, depending on ni.

integer, intent(in) :: i2

integer to be printed, depending on ni.

integer, intent(in) :: nr

number of reals (0, 1, or 2) to be printed with message.

real(kind=wp), intent(in) :: r1

real to be printed, depending on nr.

real(kind=wp), intent(in) :: r2

real to be printed, depending on nr.


Calls

proc~~xerrwd~~CallsGraph proc~xerrwd dvode_module::dvode_t%xerrwd proc~ixsav dvode_module::dvode_t%ixsav proc~xerrwd->proc~ixsav

Called by

proc~~xerrwd~~CalledByGraph proc~xerrwd dvode_module::dvode_t%xerrwd proc~dvindy dvode_module::dvode_t%dvindy proc~dvindy->proc~xerrwd proc~dvode dvode_module::dvode_t%dvode proc~dvode->proc~xerrwd proc~dvode->proc~dvindy

Source Code

   subroutine xerrwd(me,msg,nmes,nerr,level,ni,i1,i2,nr,r1,r2)

      class(dvode_t),intent(inout) :: me
      character(len=*),intent(in) :: msg !! the message (character array).
      integer,intent(in) :: nmes !! the length of msg (number of characters).
      integer,intent(in) :: nerr !! the error number (not used).
      integer,intent(in) :: level !! the error level:
                                  !!
                                  !!  * 0 or 1 means recoverable (control returns to caller).
                                  !!  * 2 means fatal (run is aborted).
      integer,intent(in) :: ni !! number of integers (0, 1, or 2) to be printed with message.
      integer,intent(in) :: i1 !! integer to be printed, depending on `ni`.
      integer,intent(in) :: i2 !! integer to be printed, depending on `ni`.
      integer,intent(in) :: nr !! number of reals (0, 1, or 2) to be printed with message.
      real(wp),intent(in) :: r1 !! real to be printed, depending on `nr`.
      real(wp),intent(in) :: r2 !! real to be printed, depending on `nr`.

      integer :: lunit , mesflg

      ! get logical unit number and message print flag.
      lunit = me%ixsav(1,0,.false.)
      mesflg = me%ixsav(2,0,.false.)

      if ( mesflg/=0 ) then
         ! write the message.
         write (lunit,'(A)') trim(msg)
         select case (ni)
         case(1)
            write (lunit,'(6X,A,I10)') 'in above message,  i1 =', i1
         case(2)
            write (lunit,'(6X,A,I10,3X,A,I10)') 'in above message,  i1 =', i1, 'i2 =', i2
         end select
         select case (nr)
         case(1)
            write (lunit,'(6X,A,D21.13)') 'in above message,  r1 =', r1
         case (2)
            write (lunit,'(6X,A,D21.13,3X,A,D21.13)') 'in above message,  r1 =', r1, 'r2 =', r2
         end select
      endif

      ! abort the run if level = 2.
      if ( level==2 ) stop

   end subroutine xerrwd