!WRF:MEDIATION_LAYER:
!


SUBROUTINE med_initialdata_input ( grid , config_flags ) 2,24
  ! Driver layer
   USE module_domain
   USE module_io_domain
   USE module_timing
  ! Model layer
   USE module_configure
   USE module_bc_time_utilities
   USE esmf_mod

   IMPLICIT NONE


  ! Interface 
   INTERFACE
     SUBROUTINE start_domain ( grid )  ! comes from module_start in appropriate dyn_ directory
       USE module_domain
       TYPE (domain) grid
     END SUBROUTINE start_domain
   END INTERFACE

  ! Arguments
   TYPE(domain)                               :: grid
   TYPE (grid_config_rec_type) , INTENT(IN)   :: config_flags
  ! Local
   INTEGER                :: fid , ierr , myproc
   CHARACTER (LEN=80)     :: inpname , rstname, timestr
   CHARACTER (LEN=80)     :: message
   LOGICAL                :: restart
   TYPE(ESMF_Time)        :: CurrTime

#if ( GRAPS_CORE == 1 )
   CALL update_graps_config_flags ( restart )
#endif

   CALL get_restart( restart )
   IF ( .NOT. restart ) THEN
     !  Initialize the mother domain.
     CALL start_timing
     grid%input_from_file = .true.
     IF ( grid%input_from_file ) THEN

        CALL       wrf_debug ( 100 , 'wrf main: calling open_r_dataset for wrfinput' )
        CALL construct_filename1 ( inpname , 'wrfinput' , grid%id , 2 )
        CALL open_r_dataset ( fid, TRIM(inpname) , grid , config_flags , "DATASET=INPUT", ierr )
        IF ( ierr .NE. 0 ) THEN
          WRITE( wrf_err_message , * ) 'program wrf: error opening ',TRIM(inpname),' for reading ierr=',ierr
          CALL WRF_ERROR_FATAL ( wrf_err_message )
        ENDIF
        CALL       wrf_debug ( 100 , 'wrf: calling input_model_input' )
        CALL input_model_input ( fid ,   grid , config_flags , ierr )
        CALL       wrf_debug ( 100 , 'wrf: back from input_model_input' )
        CALL close_dataset ( fid , config_flags , "DATASET=INPUT" )

     ENDIF
     CALL start_domain ( grid )
   ELSE
#if 0
     CALL wrf_get_myproc ( myproc )
     CALL construct_filename3 ( rstname , 'wrfrst' , grid%id , 2 , time_step_begin_restart , 6 , myproc, 4 )
#else
     CALL construct_filename1 ( rstname , 'wrfrst' , grid%id , 2 )
     CALL ESMF_ClockGetCurrTime( grid%domain_clock, CurrTime=CurrTime, rc=ierr )
     CALL ESMF_TimeGetString( CurrTime, timestr, rc=ierr )
     rstname = TRIM(rstname) // "_" // TRIM(timestr)
#endif
     WRITE(message,*)'opening ',TRIM(rstname),' for reading'
     CALL wrf_debug ( 0 , message )
     CALL open_r_dataset ( fid , TRIM(rstname) , grid , config_flags , "DATASET=RESTART", ierr )
     IF ( ierr .NE. 0 ) THEN
       WRITE( message , '("program wrf: error opening ",A32," for reading")') TRIM(rstname)
       CALL WRF_ERROR_FATAL ( message )
     ENDIF
     CALL input_restart ( fid,   grid , config_flags , ierr )
     CALL close_dataset ( fid , config_flags , "DATASET=RESTART" )
     CALL start_domain ( grid )
   ENDIF

   RETURN
END SUBROUTINE med_initialdata_input


SUBROUTINE med_shutdown_io ( grid , config_flags ) 3,6
  ! Driver layer
   USE module_domain
   USE module_io_domain
  ! Model layer
   USE module_configure

   IMPLICIT NONE

  ! Arguments
   TYPE(domain)                               :: grid
   TYPE (grid_config_rec_type) , INTENT(IN)   :: config_flags
  ! Local
   CHARACTER (LEN=80)      :: message
   INTEGER                 :: ierr

   IF ( grid%oid > 0 ) CALL close_dataset ( grid%oid , config_flags , "DATASET=HISTORY" )
#ifdef QUILT_NO
   IF ( grid%auxhist1_oid > 0 ) CALL close_dataset ( grid%auxhist1_oid , config_flags , "DATASET=AUXHIST1" )
#endif

   CALL wrf_ioexit( ierr )    ! shut down the quilt I/O

   RETURN

END SUBROUTINE med_shutdown_io


SUBROUTINE med_add_config_info_to_grid ( grid ) 2,2

   USE module_domain
   USE module_configure
 
   IMPLICIT NONE

   !  Input data.

   TYPE(domain) , TARGET          :: grid

#define SOURCE_RECORD model_config_rec %
#define SOURCE_REC_DEX (grid%id)
#define DEST_RECORD   grid %
#include <config_assigns.inc>

   RETURN

END SUBROUTINE med_add_config_info_to_grid