#define MOSAIC_BOX
module module_mosaic_support
  !Purpose: This module contains subroutines which have codes which depend upon 
  !         the host code (CAM, WRF etc.). #defines are used to seprate codes
  !         which depends on the host code

#ifdef CAM
  use cam_logfile,           only: iulog
  use abortutils,            only: endrun
#endif
#ifdef MOSAIC_BOX
  use module_data_mosaic_asecthp, only: lunerr
  use module_peg_util,            only: peg_error_fatal, peg_message
#endif

  implicit none
  private

  public:: mosaic_warn_mess
  public:: mosaic_err_mess
  
  
contains

  subroutine mosaic_warn_mess(message)
    !Purpose: Print out the warning messages from Mosaic code

    character(len=*), intent(in) :: message

    !Local variables
    character(len=16), parameter :: warn_str = 'MOSAIC WARNING: ' 
    character(len=500) :: str_to_prnt 

#ifdef CAM
    write(iulog,*)warn_str,message
#endif    

#ifdef MOSAIC_BOX
!   write(*,*)warn_str,message
    str_to_prnt = warn_str // message
    call peg_message( lunerr, trim(str_to_prnt) )
#endif    


    
  end subroutine mosaic_warn_mess


  subroutine mosaic_err_mess(message)
    !Purpose
    character(len=*), intent(in) :: message

    !Local variables
    character(len=14), parameter :: err_str = 'MOSAIC ERROR: ' 
    character(len=500) :: str_to_prnt 

    write(str_to_prnt,*)err_str,message
    
#ifdef CAM
    call endrun(trim(adjustl(str_to_prnt)))
#endif    

#ifdef MOSAIC_BOX
!   write(*,*)(trim(adjustl(str_to_prnt)))
!   stop
    str_to_prnt = err_str // message
    call peg_error_fatal( lunerr, trim(str_to_prnt) )
#endif    
  end subroutine mosaic_err_mess



end module module_mosaic_support