module system_messages,2
!-----------------------------------------------------------------------
!BOP
!
! !MODULE: system_messages
!
! !DESCRIPTION:
! Contains general purpose routines for checking system messages.
!
! !USES:
use abortutils
, only : endrun
use clm_varctl
, only : iulog
!
! !PUBLIC TYPES:
implicit none
save
!
! !PUBLIC MEMBER FUNCTIONS:
public :: allocation_err ! allocation error message
public :: netcdf_err ! netCD return error message
public :: iobin_err ! binary i/o error message
!
! !REVISION HISTORY:
! Created by Mariana Vertenstein
!
!EOP
!-----------------------------------------------------------------------
contains
!-----------------------------------------------------------------------
!BOP
!
! !IROUTINE: allocation_err
!
! !INTERFACE:
subroutine allocation_err( ier, routine_name, array_name, nsize ),1
!
! !DESCRIPTION:
! Issue error message after non-zero return from an allocate statement.
!
! !ARGUMENTS:
implicit none
integer, intent(in) :: ier ! status from allocate statement
character(len=*), intent(in) :: routine_name ! routine name that invoked allocate
character(len=*), intent(in), optional :: array_name ! array name
integer, intent(in), optional :: nsize ! size of attempted allocation
!
! !REVISION HISTORY:
! Created by Mariana Vertenstein
!
!EOP
!-----------------------------------------------------------------------
if ( ier /= 0 ) then
write(iulog,*)'ERROR trying to allocate memory in routine: ' // trim(routine_name)
write(iulog,*)' Variable name: ' // trim(array_name)
write(iulog,*)' Size of allocation ', nsize
call endrun
end if
return
end subroutine allocation_err
!-----------------------------------------------------------------------
!BOP
!
! !IROUTINE: netcdf_err
!
! !INTERFACE:
subroutine netcdf_err (ier, routine_name),1
!
! !DESCRIPTION:
! If error detected in netCDF call, issue error message and abort.
!
! !ARGUMENTS:
implicit none
#include <netcdf.inc>
integer, intent(in) :: ier ! return code from netCDF call
character(len=*), intent(in) :: routine_name ! calling routine name
!
! !REVISION HISTORY:
! Created by Mariana Vertenstein
!
!EOP
!-----------------------------------------------------------------------
if ( ier /= NF_NOERR ) then
write(iulog,*)' ERROR from netcdf library call: '
write(iulog,*) nf_strerror( ier )
write(iulog,*)' called from routine ', trim(routine_name)
call endrun
endif
return
end subroutine netcdf_err
!-----------------------------------------------------------------------
!BOP
!
! !IROUTINE: iobin_err
!
! !INTERFACE:
subroutine iobin_err (ier, routine_name),1
!
! !DESCRIPTION:
! If error detected during i/o binary read/write
!
! !ARGUMENTS:
implicit none
integer, intent(in) :: ier ! return code from netCDF call
character(len=*), intent(in) :: routine_name ! calling routine name
!
! !REVISION HISTORY:
! Created by Mariana Vertenstein
!
!EOP
!-----------------------------------------------------------------------
if (ier /= 0) then
write(iulog,*)' i/o binary error ',ier
write(iulog,*)' called from routine ', trim(routine_name)
call endrun
end if
end subroutine iobin_err
end module system_messages