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.
This routine is machine-dependent and specialized for use in limited context, in the following ways:
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 | Intent | Optional | 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:
|
||
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 |
||
integer, | intent(in) | :: | i2 |
integer to be printed, depending on |
||
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 |
||
real(kind=wp), | intent(in) | :: | r2 |
real to be printed, depending on |
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