!
!##################################################################
!##################################################################
!######                                                      ######
!######             SUBROUTINE define_wrf_variables          ######
!######                                                      ######
!######                     Developed by                     ######
!######     Center for Analysis and Prediction of Storms     ######
!######                University of Oklahoma                ######
!######                                                      ######
!##################################################################
!##################################################################
!

SUBROUTINE define_wrf_variables_V2(ncid,file_type,nx,ny,nz,nzsoil,        &,160
                            spec_bdy_width,mp_physics)
!-----------------------------------------------------------------------
!
! PURPOSE:
!
!   Define NetCDF variables for input file or boundary file of 
!   WRF version 2.0.3
!   
! NOTE:
!   This subroutine only defines the variables to be written in NetCDF
!   define mode. Please make sure to write the actual data in arps2wrf.f90.
!   because it set NF_SET_FILL to NF_NOFILL.
!
!-----------------------------------------------------------------------

  USE wrf_metadata

  IMPLICIT NONE
  
  INTEGER, INTENT(IN)  :: ncid
  INTEGER, INTENT(IN)  :: file_type             ! 1 for WRF input file
                                                ! 2 for WRF boundary file
  INTEGER, INTENT(IN)  :: nx
  INTEGER, INTENT(IN)  :: ny
  INTEGER, INTENT(IN)  :: nz
  INTEGER, INTENT(IN)  :: nzsoil
  INTEGER, INTENT(IN)  :: spec_bdy_width
  INTEGER, INTENT(IN)  :: mp_physics

!-----------------------------------------------------------------------
!
!  Misc. local variables
!
!-----------------------------------------------------------------------

  INTEGER  :: istatus
  INTEGER  :: dimunlim_id
  INTEGER  :: dimx_id, dimxs_id
  INTEGER  :: dimy_id, dimys_id
  INTEGER  :: dimz_id, dimzs_id
  INTEGER  :: dimzsoil_id
  INTEGER  :: dims_id
  INTEGER  :: dimstr_id
  INTEGER  :: dimext_id
  INTEGER  :: dimbdy_id
  INTEGER  :: dimsoil_id, dimland_id

  INTEGER  :: dimlenx, dimleny, dimlenz, dimlenzsoil
  INTEGER  :: dimlens, dimlenstr, dimlenext
  INTEGER  :: dimlenbdy
  INTEGER  :: dimlensoil, dimlenland

  INTEGER  :: varid, oldfillmode

  TYPE(wrf_var_metadata) :: var_meta

!                                            West  East  South North
  CHARACTER(LEN=2), PARAMETER :: appd(4) = (/'XS', 'XE', 'YS', 'YE'/)
  CHARACTER(LEN=9)            :: varname
  INTEGER, DIMENSION(4)       :: dimids

  INTEGER :: n

!-----------------------------------------------------------------------
!
!  Include files
!
!-----------------------------------------------------------------------

  INCLUDE 'netcdf.inc'

!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
!  Beginning of executable code below ......
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

!-----------------------------------------------------------------------
!
! get dimension ids and dimension length
!
!-----------------------------------------------------------------------

  istatus = NF_INQ_DIMID(ncid,'Time',dimunlim_id)

  istatus = NF_INQ_DIMID(ncid,'DateStrLen',dimstr_id)
  istatus = NF_INQ_DIMLEN(ncid,dimstr_id,dimlenstr)

  istatus = NF_INQ_DIMID(ncid,'west_east_stag',dimx_id)
  istatus = NF_INQ_DIMID(ncid,'west_east',     dimxs_id)

  istatus = NF_INQ_DIMLEN(ncid,dimx_id,dimlenx)
  IF(dimlenx /= nx) THEN
    WRITE(6,*) 'Mismatched dimension size in X direction.'
    STOP
  END IF

  istatus = NF_INQ_DIMID(ncid,'south_north_stag',dimy_id)
  istatus = NF_INQ_DIMID(ncid,'south_north',     dimys_id)

  istatus = NF_INQ_DIMLEN(ncid,dimy_id,dimleny)
  IF(dimleny /= ny) THEN
    WRITE(6,*) 'Mismatched dimension size in Y direction.'
    STOP
  END IF

  istatus = NF_INQ_DIMID(ncid,'bottom_top_stag',dimz_id)
  istatus = NF_INQ_DIMID(ncid,'bottom_top',     dimzs_id)

  istatus = NF_INQ_DIMLEN(ncid,dimz_id,dimlenz)
  IF(dimlenz /= nz) THEN
    WRITE(6,*) 'Mismatched dimension size in the 3rd dimension.'
    STOP
  END IF

  IF (file_type == 1) THEN        ! input file
    istatus = NF_INQ_DIMID(ncid,'DIM0009',dimbdy_id)
    istatus = NF_INQ_DIMLEN(ncid,dimbdy_id,dimlenbdy)

    istatus = NF_INQ_DIMID(ncid,'ext_scalar',dims_id)
    istatus = NF_INQ_DIMLEN(ncid,dims_id,dimlens)

    istatus = NF_INQ_DIMID(ncid,'soil_layers_stag',dimzsoil_id)
    istatus = NF_INQ_DIMLEN(ncid,dimzsoil_id,dimlenzsoil)
  ELSE                           ! boundary file
    istatus = NF_INQ_DIMID(ncid,'bdy_width',dimbdy_id)
    istatus = NF_INQ_DIMLEN(ncid,dimbdy_id,dimlenbdy)
  END IF

  ! do not fill, will set values explicitly later. Improve performance

  istatus = NF_SET_FILL(ncid,NF_NOFILL,oldfillmode)

!-----------------------------------------------------------------------
!
!   Defines Times string
!
!-----------------------------------------------------------------------

  istatus = NF_DEF_VAR(ncid,'Times',NF_CHAR,2,                     &
                         (/dimstr_id, dimunlim_id/),varid)

  IF (file_type == 1) THEN                ! WRF input file

      var_meta%name        = 'LU_INDEX'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'LAND USE CATEGORY'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                               (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!-------------------------------------------------------------------
!
!  Defines U  and V
!
!-------------------------------------------------------------------
!
      var_meta%name        = 'U'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'x-wind component'
      var_meta%units       = 'm s-1'
      var_meta%stagger     = 'X'
  
      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,         &
                       (/dimx_id,dimys_id,dimzs_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'V'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'y-wind component'
      var_meta%units       = 'm s-1'
      var_meta%stagger     = 'Y'
  
      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,         &
                       (/dimxs_id,dimy_id,dimzs_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!-----------------------------------------------------------------------
!
!  Define vertical velocity 
!
!-----------------------------------------------------------------------
      var_meta%name        = 'W'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'z-wind component'
      var_meta%units       = 'm s-1'
      var_meta%stagger     = 'Z'

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,         &
                       (/dimxs_id,dimys_id,dimz_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!----------------------------------------------------------------------
!
!  Define perturbation and base state geopotential
!
!----------------------------------------------------------------------
      var_meta%name        = 'PH'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'perturbation geopotential'
      var_meta%units       = 'm2 s-2'
      var_meta%stagger     = 'Z'
  
      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,         &
                       (/dimxs_id,dimys_id,dimz_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'PHB'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'base-state geopotential'
      var_meta%units       = 'm2 s-2'
      var_meta%stagger     = 'Z'
  
      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,         &
                       (/dimxs_id,dimys_id,dimz_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)
  
!----------------------------------------------------------------------
!
!  Define perturbation potential temperature (theta - t0)
!
!----------------------------------------------------------------------
      var_meta%name        = 'T'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'perturbation potential temperature (theta-t0)'
      var_meta%units       = 'K'
      var_meta%stagger     = ' '
  
      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,         &
                       (/dimxs_id,dimys_id,dimzs_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)
  
!----------------------------------------------------------------------
!
!  Define air mass
!
!----------------------------------------------------------------------
      var_meta%name        = 'MU'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'perturbation dry air mass in column'
      var_meta%units       = 'Pa'
      var_meta%stagger     = ' '
  
      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                       (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'MUB'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'base state dry air mass in column'
      var_meta%units       = 'Pa'
      var_meta%stagger     = ' '
  
      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                       (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'MU0'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'initial dry mass in column'
      var_meta%units       = 'Pa'
      var_meta%stagger     = ' '
  
      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                       (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!----------------------------------------------------------------------
!
!  Define  Vertical mass coordinate parameters
!
!----------------------------------------------------------------------

      var_meta%name        = 'FNM'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'Z  '
      var_meta%description = 'upper weight for vertical stretching'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dimzs_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'FNP'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'Z  '
      var_meta%description = 'lower weight for vertical stretching'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dimzs_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      !  Store the vertical coordinate information 
      var_meta%name        = 'ZNW'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'Z  '
      var_meta%description = 'eta values on full (w) levels'
      var_meta%units       = ' '
      var_meta%stagger     = 'Z'

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dimz_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'ZNU'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'Z  '
      var_meta%description = 'eta values on half (mass) levels'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dimzs_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'DNW'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'Z  '
      var_meta%description = 'dn values on full (w) levels'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dimzs_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'RDNW'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'Z  '
      var_meta%description = 'inverse d(eta) values between full (w) levels'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dimzs_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'DN'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'Z  '
      var_meta%description = 'dn values on half (mass) levels'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dimzs_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'RDN'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'Z  '
      var_meta%description = 'inverse d(eta) values between half (mass) levels'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dimzs_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'CFN'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'extrapolation constant'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'CFN1'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'extrapolation constand'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!-----------------------------------------------------------------------
!
! Misc. variables
!
!-----------------------------------------------------------------------

      var_meta%name        = 'EPSTS'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'leapfrog time filter constant'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'STEP_NUMBER'
      var_meta%fieldType   = 106
      var_meta%memoryOrder = '0  '
      var_meta%description = ' '
      var_meta%units       = '-'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_INT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!----------------------------------------------------------------------
!
!  Define  Q2, T2, TH2, PSFC, U10, V10 etc. 
!
!----------------------------------------------------------------------
      var_meta%name        = 'Q2'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY'
      var_meta%description = 'QV at 2 M'
      var_meta%units       = 'kg kg-1'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                               (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'T2'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY'
      var_meta%description = 'TEMP at 2 M'
      var_meta%units       = 'K'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                               (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'TH2'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY'
      var_meta%description = 'POT TEMP at 2 M'
      var_meta%units       = 'K'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                               (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'PSFC'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY'
      var_meta%description = 'SFC PRESSURE'
      var_meta%units       = 'Pa'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                               (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'U10'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY'
      var_meta%description = 'U at 10 M'
      var_meta%units       = 'm s-1'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                               (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'V10'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY'
      var_meta%description = 'V at 10 M'
      var_meta%units       = 'm s-1'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                               (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!----------------------------------------------------------------------
!
!  Define water vapor mixing ratio
!
!  From WRFV2.0 Registry.EM
!package   passiveqv     mp_physics==0       -       moist:qv
!package   kesslerscheme mp_physics==1       -       moist:qv,qc,qr
!package   linscheme     mp_physics==2       -       moist:qv,qc,qr,qi,qs,qg
!package   wsm3scheme    mp_physics==3       -       moist:qv,qc,qr
!package   wsm5scheme    mp_physics==4       -       moist:qv,qc,qr,qi,qs
!package   etampnew      mp_physics==5       -       moist:qv,qc
!package   wsm6scheme    mp_physics==6       -       moist:qv,qc,qr,qi,qs,qg
!package   thompson      mp_physics==8       -       moist:qv,qc,qr,qi,qs,qg;scalar:qni
!package   ncepcloud3    mp_physics==98      -       moist:qv,qc,qr
!package   ncepcloud5    mp_physics==99      -       moist:qv,qc,qr,qi,qs
!
!  At present, we only support, mp_physics = 0,1-6,8
!
!----------------------------------------------------------------------

!     All microphysics packages need qv
      var_meta%name        = 'QVAPOR'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'Water vapor mixing ratio'
      var_meta%units       = 'kg kg-1'
      var_meta%stagger     = ' '
  
      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,         &
                       (/dimxs_id,dimys_id,dimzs_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!----------------------------------------------------------------------
!
!  Define QCLOUD and QRAIN, QSNOW, QICE, QGRAUP
!
!----------------------------------------------------------------------

      ! define qc
      IF(mp_physics >= 1 .AND. mp_physics <= 6 .OR. mp_physics == 8) THEN

        var_meta%name        = 'QCLOUD'
        var_meta%fieldType   = 104
        var_meta%memoryOrder = 'XYZ'
        var_meta%description = 'Cloud water mixing ratio'
        var_meta%units       = 'kg kg-1'
        var_meta%stagger     = ' '
  
        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                       (/dimxs_id,dimys_id,dimzs_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END IF
  
      ! define qr for MP package 1-4,6
      IF((mp_physics >= 1 .AND. mp_physics <= 4) .OR. mp_physics == 6   &
         .OR.  mp_physics == 8) THEN

        var_meta%name        = 'QRAIN'
        var_meta%fieldType   = 104
        var_meta%memoryOrder = 'XYZ'
        var_meta%description = 'Rain water mixing ratio'
        var_meta%units       = 'kg kg-1'
        var_meta%stagger     = ' '
  
        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                       (/dimxs_id,dimys_id,dimzs_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
 
      END IF

      ! define qi,qs for MP package 2,4,6
      IF( mp_physics == 2 .OR. mp_physics == 4 .OR. mp_physics == 6     &
          .OR. mp_physics == 8) THEN
       
        var_meta%name        = 'QSNOW'
        var_meta%fieldType   = 104
        var_meta%memoryOrder = 'XYZ'
        var_meta%description = 'Snow mixing ratio'
        var_meta%units       = 'kg kg-1'
        var_meta%stagger     = ' '
  
        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                       (/dimxs_id,dimys_id,dimzs_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)

        var_meta%name        = 'QICE'
        var_meta%fieldType   = 104
        var_meta%memoryOrder = 'XYZ'
        var_meta%description = 'Ice mixing ratio'
        var_meta%units       = 'kg kg-1'
        var_meta%stagger     = ' '
  
        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                       (/dimxs_id,dimys_id,dimzs_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)

      END IF
      
      ! Define qg for MP package 2,6
      IF(mp_physics == 2 .OR. mp_physics == 6 .OR. mp_physics == 8) THEN

        var_meta%name        = 'QGRAUP'
        var_meta%fieldType   = 104
        var_meta%memoryOrder = 'XYZ'
        var_meta%description = 'Graupel mixing ratio'
        var_meta%units       = 'kg kg-1'
        var_meta%stagger     = ' '
  
        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                       (/dimxs_id,dimys_id,dimzs_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END IF

      ! Define QNICE for MP package 8
      IF( mp_physics == 8) THEN

        var_meta%name        = 'QNICE'
        var_meta%fieldType   = 104
        var_meta%memoryOrder = 'XYZ'
        var_meta%description = 'Ice Number concentration'
        var_meta%units       = ''
        var_meta%stagger     = ' '
  
        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                       (/dimxs_id,dimys_id,dimzs_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END IF

!----------------------------------------------------------------------
!
!  Define FCX, GCX 
!
!----------------------------------------------------------------------
      var_meta%name        = 'FCX'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'C  '
      var_meta%description = 'RELAXATION TERM FOR BOUNDARY ZONE'
      var_meta%units       = ' '
      var_meta%stagger     = ' '
  
      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                       (/dimbdy_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)
  
      var_meta%name        = 'GCX'
      var_meta%description = '2ND RELAXATION TERM FOR BOUNDARY ZONE'
  
      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                       (/dimbdy_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!----------------------------------------------------------------------
!
!  Define DTBC (scalar)
!
!----------------------------------------------------------------------
      var_meta%name        = 'DTBC'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'TIME SINCE BOUNDARY READ'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                       (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

        var_meta%name        = 'LANDMASK'
        var_meta%fieldType   = 104
        var_meta%memoryOrder = 'XY '
        var_meta%description = 'LAND MASK (1 FOR LAND, 0 FOR WATER)'
        var_meta%units       = ' '
        var_meta%stagger     = ' '

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,       &
                              (/dimxs_id,dimys_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
  
        var_meta%name        = 'SHDMAX'
        var_meta%fieldType   = 104
        var_meta%memoryOrder = 'XY '
        var_meta%description = 'ANNUAL MAX VEG FRACTION'
        var_meta%units       = ' '
        var_meta%stagger     = ' '

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,       &
                              (/dimxs_id,dimys_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
   
        var_meta%name        = 'SHDMIN'
        var_meta%fieldType   = 104
        var_meta%memoryOrder = 'XY '
        var_meta%description = 'ANNUAL MIN VEG FRACTION'
        var_meta%units       = ' '
        var_meta%stagger     = ' '

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,       &
                              (/dimxs_id,dimys_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
   
        var_meta%name        = 'SNOALB'
        var_meta%fieldType   = 104
        var_meta%memoryOrder = 'XY '
        var_meta%description = 'ANNUAL MAX SNOW ALBEDO IN FRACTION'
        var_meta%units       = ' '
        var_meta%stagger     = ' '

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,       &
                              (/dimxs_id,dimys_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
   
!----------------------------------------------------------------------
!
!  Soil layers and variables
!
!----------------------------------------------------------------------

      var_meta%name        = 'ZS'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'Z  '
      var_meta%description = 'DEPTHS OF CENTERS OF SOIL LAYERS'
      var_meta%units       = 'm'
      var_meta%stagger     = 'Z'

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                       (/dimzsoil_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'DZS'
      var_meta%fieldType   = 104
      var_meta%description = 'THICKNESSES OF SOIL LAYERS'

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                       (/dimzsoil_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!-----------------------------------------------------------------------
!
!  Define soil variables
!
!-----------------------------------------------------------------------

      var_meta%name        = 'TSLB'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'SOIL TEMPERATURE'
      var_meta%units       = 'K'
      var_meta%stagger     = 'Z'

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,         &
                    (/dimxs_id,dimys_id,dimzsoil_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)
    
      var_meta%name        = 'SMOIS'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'SOIL MOISTURE'
      var_meta%units       = 'm3 m-3'
      var_meta%stagger     = 'Z'

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,         &
                    (/dimxs_id,dimys_id,dimzsoil_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)
    
      var_meta%name        = 'SH2O'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'SOIL LIQUID WATER'
      var_meta%units       = 'm3 m-3'
      var_meta%stagger     = 'Z'

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                  (/dimxs_id,dimys_id,dimzsoil_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)
  
      var_meta%name        = 'XICE'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'SEA ICE FLAG'
      var_meta%units       = ' '
      var_meta%stagger     = ' '
      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                       (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)


!----------------------------------------------------------------------
!
!  Define soil type and vegetation type
!
!----------------------------------------------------------------------

      var_meta%name        = 'IVGTYP'
      var_meta%fieldType   = 106
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'DOMINANT VEGETATION CATEGORY'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_INT,3,           &
                       (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'ISLTYP'
      var_meta%fieldType   = 106
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'DOMINANT SOIL CATEGORY'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_INT,3,           &
                       (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'VEGFRA'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'VEGETATION FRACTION'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                       (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!----------------------------------------------------------------------
!
!  Define Water equivalent of accumulated snow
!
!----------------------------------------------------------------------

      var_meta%name        = 'SNOW'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'SNOW WATER EQUIVALENT'
      var_meta%units       = 'kg m-2'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                       (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'SNOWH'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'PHYSICAL SNOW DEPTH'
      var_meta%units       = 'm'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,       &
                     (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'FNDSNOWH'
      var_meta%fieldType   = 106
      var_meta%memoryOrder = '0  '
      var_meta%description = 'SNOWH_LOGICAL'
      var_meta%units       = '-'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_INT,2,         &
                           (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'FNDSOILW'
      var_meta%fieldType   = 106
      var_meta%memoryOrder = '0  '
      var_meta%description = 'SOILW_LOGICAL'
      var_meta%units       = '-'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_INT,2,         &
                           (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'CANWAT'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY'
      var_meta%description = 'CANOPY WATER'
      var_meta%units       = 'kg m-2'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                               (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!----------------------------------------------------------------------
!
!  Define SST
!
!----------------------------------------------------------------------
    
      var_meta%name        = 'SST'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'SEA SURFACE TEMPERATURE'
      var_meta%units       = 'K'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                       (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------

      var_meta%name        = 'TOTSWDN'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = '-'
      var_meta%units       = '-'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,       &
                            (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'TOTLWDN'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = '-'
      var_meta%units       = '-'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,       &
                            (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'RSWTOA'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY'
      var_meta%description = '-'
      var_meta%units       = '-'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,       &
                            (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'RLWTOA'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY'
      var_meta%description = '-'
      var_meta%units       = '-'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,       &
                            (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'CZMEAN'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY'
      var_meta%description = '-'
      var_meta%units       = '-'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,       &
                            (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'CFRACL'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY'
      var_meta%description = '-'
      var_meta%units       = '-'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,       &
                            (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'CFRACM'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY'
      var_meta%description = '-'
      var_meta%units       = '-'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,       &
                            (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'CFRACH'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY'
      var_meta%description = '-'
      var_meta%units       = '-'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,       &
                            (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'ACFRST'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY'
      var_meta%description = '-'
      var_meta%units       = '-'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,       &
                            (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'NCFRST'
      var_meta%fieldType   = 106
      var_meta%memoryOrder = 'XY'
      var_meta%description = '-'
      var_meta%units       = '-'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_INT,3,       &
                            (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'ACFRCV'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY'
      var_meta%description = '-'
      var_meta%units       = '-'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,       &
                            (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'NCFRCV'
      var_meta%fieldType   = 106
      var_meta%memoryOrder = 'XY'
      var_meta%description = '-'
      var_meta%units       = '-'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_INT,3,       &
                            (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!-----------------------------------------------------------------------
!
!  Map scale factor
!
!-----------------------------------------------------------------------

      var_meta%name        = 'MAPFAC_M'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'Map scale factor on mass grid'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                       (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'MAPFAC_U'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'Map scale factor on u-grid'
      var_meta%units       = ' '
      var_meta%stagger     = 'X'

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                       (/dimx_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'MAPFAC_V'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'Map scale factor on v-grid'
      var_meta%units       = ' '
      var_meta%stagger     = 'Y'

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                       (/dimxs_id,dimy_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'F'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'Coriolis sine latitude term'
      var_meta%units       = 's-1'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                       (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'E'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'Coriolis cosine latitude term'
      var_meta%units       = 's-1'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                       (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'SINALPHA'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'Local sine of map rotation'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                       (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'COSALPHA'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'Local cosine of map rotation'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                       (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!---------------------------------------------------------------------
!
!  Terrain height
!
!---------------------------------------------------------------------

      var_meta%name        = 'HGT'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'Terrain Height'
      var_meta%units       = 'm'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                       (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!-------------------------------------------------------------------
!
! Surface skin temperature TSK. 
!
!-------------------------------------------------------------------

      var_meta%name        = 'TSK'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'SURFACE SKIN TEMPERATURE'
      var_meta%units       = 'K'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                       (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!---------------------------------------------------------------------
!
! Unused arrays for real case
!
!---------------------------------------------------------------------

      var_meta%name        = 'U_BASE'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'Z '
      var_meta%description = 'BASE STATE X WIND IN IDEALIZED CASES'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                         (/dimzs_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'V_BASE'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'Z '
      var_meta%description = 'BASE STATE Y WIND IN IDEALIZED CASES'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                         (/dimzs_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'QV_BASE'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'Z '
      var_meta%description = 'BASE STATE QV IN IDEALIZED CASES'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                         (/dimzs_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'T_BASE'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'Z '
      var_meta%description = 'BASE STATE T IN IDEALIZED CASES'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                         (/dimzs_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'Z_BASE'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'Z '
      var_meta%description = 'BASE STATE HEIGHT IN IDEALIZED CASES'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                         (/dimzs_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'U_FRAME'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0 '
      var_meta%description = 'FRAME X WIND'
      var_meta%units       = 'm{1} s{-1}'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                         (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'V_FRAME'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0 '
      var_meta%description = 'FRAME Y WIND'
      var_meta%units       = 'm{1} s{-1}'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                         (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!---------------------------------------------------------------------
!
!   Define variables again.
!
!---------------------------------------------------------------------

      var_meta%name        = 'P_TOP'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'PRESSURE TOP OF THE MODEL'
      var_meta%units       = 'Pa'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!-----------------------------------------------------------------------
!
!  WRF latitude and longitude
!
!-----------------------------------------------------------------------

      var_meta%name        = 'XLAT'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'LATITUDE, SOUTH IS NEGATIVE'
      var_meta%units       = 'degree_north'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                               (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'XLONG'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'LONGITUDE, WEST IS NEGATIVE'
      var_meta%units       = 'degree_east'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                               (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!-------------------------------------------------------------------
!
!  Surface characteristics
!
!------------------------------------------------------------------

      var_meta%name        = 'XLAND'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'LAND MASK (1 FOR LAND, 2 FOR WATER)'
      var_meta%units       = 'NA'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                               (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'ALBBCK'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'BACKGROUND ALBEDO'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                               (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!-----------------------------------------------------------------
!
! Soil temperature at lower boundary
!
!-----------------------------------------------------------------

      var_meta%name        = 'TMN'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'SOIL TEMPERATURE AT LOWER BOUNDARY'
      var_meta%units       = 'K'
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                               (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'SNOWC'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'FLAG INDICATING SNOW COVERAGE (1 FOR SNOW COVER)'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,         &
                               (/dimxs_id,dimys_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!-----------------------------------------------------------------------

      var_meta%name        = 'RDX'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'INVERSE X GRID LENGTH'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'RDY'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'INVERSE Y GRID LENGTH'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'DTS'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'SMALL TIMESTEP'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'DTSEPS'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'TIME WEIGHT CONSTANT FOR SMALL STEPS'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'RESM'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'TIME WEIGHT CONSTANT FOR SMALL STEPS'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'ZETATOP'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'ZETA AT MODEL TOP'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'CF1'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = '2nd order extrapolation constant'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'CF2'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = '2nd order extrapolation constant'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'CF3'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = '2nd order extrapolation constant'
      var_meta%units       = ' '
      var_meta%stagger     = ' '

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

!-----------------------------------------------------------------------
!
!  WRF V2.0.3 newly added variables, Latitude and Longitude at corners
!
!-----------------------------------------------------------------------
      !
      ! Latitude, T point 
      !
      var_meta%name        = 'LAT_LL_T'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'latitude lower left, temp point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LAT_UL_T'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'latitude up left, temp point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LAT_UR_T'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'latitude up right, temp point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LAT_LR_T'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'latitude lower right, temp point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      !
      ! Latitude, U point
      !
      var_meta%name        = 'LAT_LL_U'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'latitude lower left, u point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LAT_UL_U'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'latitude up left, u point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LAT_UR_U'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'latitude up right, u point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LAT_LR_U'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'latitude lower right, u point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      !
      ! Latitude, V point
      !
      var_meta%name        = 'LAT_LL_V'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'latitude lower left, v point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LAT_UL_V'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'latitude up left, v point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LAT_UR_V'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'latitude up right, v point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LAT_LR_V'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'latitude lower right, v point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      !
      ! Latitude, massless point
      !
      var_meta%name        = 'LAT_LL_D'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'latitude lower left, massless point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LAT_UL_D'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'latitude up left, massless point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LAT_UR_D'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'latitude up right, massless point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LAT_LR_D'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'latitude lower right, massless point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      !
      ! longitude, T point 
      !
      var_meta%name        = 'LON_LL_T'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'longitude lower left, temp point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LON_UL_T'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'longitude up left, temp point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LON_UR_T'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'longitude up right, temp point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LON_LR_T'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'longitude lower right, temp point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      !
      ! longitude, U point
      !
      var_meta%name        = 'LON_LL_U'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'longitude lower left, u point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LON_UL_U'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'longitude up left, u point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LON_UR_U'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'longitude up right, u point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LON_LR_U'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'longitude lower right, u point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      !
      ! longitude, V point
      !
      var_meta%name        = 'LON_LL_V'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'longitude lower left, v point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LON_UL_V'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'longitude up left, v point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LON_UR_V'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'longitude up right, v point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LON_LR_V'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'longitude lower right, v point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      !
      ! longitude, massless point
      !
      var_meta%name        = 'LON_LL_D'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'longitude lower left, massless point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LON_UL_D'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'longitude up left, massless point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LON_UR_D'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'longitude up right, massless point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

      var_meta%name        = 'LON_LR_D'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = '0  '
      var_meta%description = 'longitude lower right, massless point'
      var_meta%units       = 'degrees'
      var_meta%stagger     = ''

      istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,2,         &
                                        (/dims_id,dimunlim_id/),varid)
      CALL write_var_meta(ncid,varid,var_meta)

    ELSE IF(file_type == 2 ) THEN    ! boundary file

      istatus = NF_DEF_VAR(ncid,                                      &
          'md___thisbdytimee_x_t_d_o_m_a_i_n_m_e_t_a_data_',NF_CHAR,2,&
          (/dimstr_id, dimunlim_id/),varid)
      istatus = NF_DEF_VAR(ncid,                                      &
          'md___nextbdytimee_x_t_d_o_m_a_i_n_m_e_t_a_data_',NF_CHAR,2,&
          (/dimstr_id, dimunlim_id/),varid)

!-----------------------------------------------------------------------
!
!  Defind U related boundary variables
!
!-----------------------------------------------------------------------

      dimids(1) = dimys_id    ! West first dimension
      dimids(2) = dimys_id    ! East
      dimids(3) = dimx_id     ! South
      dimids(4) = dimx_id     ! North 

      varname              = 'U_B'       ! will change in do loop
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'       ! will change in do loop
      var_meta%description = 'bdy x-wind component'
      var_meta%units       = 'm s-1'
      var_meta%stagger     = 'X'        

      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                    (/dimids(n),dimzs_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO

      varname              = 'U_BT'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'bdy tend x-wind component'
      var_meta%units       = '(m s-1)/dt'
      var_meta%stagger     = 'X'        

      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                    (/dimids(n),dimzs_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO

!-----------------------------------------------------------------------
!
!  Defind V related boundary variables
!
!-----------------------------------------------------------------------

      dimids(1) = dimy_id      ! West first dimension
      dimids(2) = dimy_id      ! East
      dimids(3) = dimxs_id     ! South
      dimids(4) = dimxs_id     ! North 

      varname              = 'V_B'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'bdy y-wind component'
      var_meta%units       = 'm s-1'
      var_meta%stagger     = 'Y'        

      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                    (/dimids(n),dimzs_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO

      varname              = 'V_BT'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'bdy tend y-wind component'
      var_meta%units       = '(m s-1)/dt'
      var_meta%stagger     = 'Y'        

      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                    (/dimids(n),dimzs_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO

!-----------------------------------------------------------------------
!
!  Defind W related boundary variables
!
!-----------------------------------------------------------------------

      dimids(1) = dimys_id      ! West first dimension
      dimids(2) = dimys_id      ! East
      dimids(3) = dimxs_id      ! South
      dimids(4) = dimxs_id      ! North 

      varname              = 'W_B'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'bdy z-wind component'
      var_meta%units       = 'm s-1'
      var_meta%stagger     = 'Z'        

      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                  (/dimids(n),dimz_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO

      varname              = 'W_BT'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'bdy tend z-wind component'
      var_meta%units       = '(m s-1)/dt'
      var_meta%stagger     = 'Z'        

      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                  (/dimids(n),dimz_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO

!-----------------------------------------------------------------------
!
!  Defind PH related boundary variables
!
!-----------------------------------------------------------------------

      dimids(1) = dimys_id      ! West first dimension
      dimids(2) = dimys_id      ! East
      dimids(3) = dimxs_id      ! South
      dimids(4) = dimxs_id      ! North 

      varname              = 'PH_B'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'bdy perturbation geopotential'
      var_meta%units       = 'm2 s-2'
      var_meta%stagger     = 'Z'        

      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                    (/dimids(n),dimz_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO

      varname              = 'PH_BT'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'bdy tend perturbation geopotential'
      var_meta%units       = '(m2 s-2)/dt'
      var_meta%stagger     = 'Z'        

      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                    (/dimids(n),dimz_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO

!-----------------------------------------------------------------------
!
!  Defind T related boundary variables
!
!-----------------------------------------------------------------------

      dimids(1) = dimys_id      ! West first dimension
      dimids(2) = dimys_id      ! East
      dimids(3) = dimxs_id      ! South
      dimids(4) = dimxs_id      ! North 

      varname              = 'T_B'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'bdy perturbation potential temperature (theta-t0)'
      var_meta%units       = 'K'
      var_meta%stagger     = ''        

      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                    (/dimids(n),dimzs_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO

      varname              = 'T_BT'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'bdy tend perturbation potential temperature (theta-t0)'
      var_meta%units       = '(K)/dt'
      var_meta%stagger     = ''        

      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                    (/dimids(n),dimzs_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO

!-----------------------------------------------------------------------
!
!  Defind MU related boundary variables
!
!-----------------------------------------------------------------------

      dimids(1) = dimys_id      ! West first dimension
      dimids(2) = dimys_id      ! East
      dimids(3) = dimxs_id      ! South
      dimids(4) = dimxs_id      ! North 

      varname        = 'MU_B'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'bdy perturbation dry air mass in column'
      var_meta%units       = 'Pa'
      var_meta%stagger     = ''        

      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,       &
                    (/dimids(n),dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO

      varname              = 'MU_BT'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XY '
      var_meta%description = 'bdy tend perturbation dry air mass in column'
      var_meta%units       = '(Pa)/dt'
      var_meta%stagger     = ''        

      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,3,       &
                    (/dimids(n),dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO

!-----------------------------------------------------------------------
!
!  Defind QV related boundary variables
!
!-----------------------------------------------------------------------

      dimids(1) = dimys_id      ! West first dimension
      dimids(2) = dimys_id      ! East
      dimids(3) = dimxs_id      ! South
      dimids(4) = dimxs_id      ! North 

      varname              = 'QVAPOR_B'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'Water vapor mixing ratio'
      var_meta%units       = 'kg kg-1'
      var_meta%stagger     = ''        

      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                    (/dimids(n),dimzs_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO

      varname              = 'QVAPOR_BT'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'Water vapor mixing ratio'
      var_meta%units       = '(kg kg-1)/dt'
      var_meta%stagger     = ''        

      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                    (/dimids(n),dimzs_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO

!-----------------------------------------------------------------------
!
!  Defind QC related boundary variables
!
!-----------------------------------------------------------------------

      dimids(1) = dimys_id      ! West first dimension
      dimids(2) = dimys_id      ! East
      dimids(3) = dimxs_id      ! South
      dimids(4) = dimxs_id      ! North 
  
      varname              = 'QCLOUD_B'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'Cloud water mixing ratio'
      var_meta%units       = 'kg kg-1'
      var_meta%stagger     = ''        
  
      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                    (/dimids(n),dimzs_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO
  
      varname              = 'QCLOUD_BT'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'Cloud water mixing ratio'
      var_meta%units       = 'kg kg-1'
      var_meta%stagger     = ''        
 
      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'
  
        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                    (/dimids(n),dimzs_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO
  
!-----------------------------------------------------------------------
!
!  Defind QR related boundary variables
!
!-----------------------------------------------------------------------

      dimids(1) = dimys_id      ! West first dimension
      dimids(2) = dimys_id      ! East
      dimids(3) = dimxs_id      ! South
      dimids(4) = dimxs_id      ! North 
  
      varname              = 'QRAIN_B'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'Rain water mixing ratio'
      var_meta%units       = 'kg kg-1'
      var_meta%stagger     = ''        
  
      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'
 
        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                    (/dimids(n),dimzs_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO
  
      varname              = 'QRAIN_BT'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'Rain water mixing ratio'
      var_meta%units       = '(kg kg-1)/dt'
      var_meta%stagger     = ''        
  
      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'
  
        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                    (/dimids(n),dimzs_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO
  
!-----------------------------------------------------------------------
!
!  Defind QI related boundary variables
!
!-----------------------------------------------------------------------

      dimids(1) = dimys_id      ! West first dimension
      dimids(2) = dimys_id      ! East
      dimids(3) = dimxs_id      ! South
      dimids(4) = dimxs_id      ! North 

      varname              = 'QICE_B'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'Ice mixing ratio'
      var_meta%units       = 'kg kg-1'
      var_meta%stagger     = ''        

      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                    (/dimids(n),dimzs_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO

      varname              = 'QICE_BT'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'Ice mixing ratio'
      var_meta%units       = '(kg kg-1)/dt'
      var_meta%stagger     = ''        

      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                    (/dimids(n),dimzs_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO
  
!-----------------------------------------------------------------------
!
!  Defind QS related boundary variables
!
!-----------------------------------------------------------------------

      dimids(1) = dimys_id      ! West first dimension
      dimids(2) = dimys_id      ! East
      dimids(3) = dimxs_id      ! South
      dimids(4) = dimxs_id      ! North 

      varname              = 'QSNOW_B'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'Snow mixing ratio'
      var_meta%units       = 'kg kg-1'
      var_meta%stagger     = ''        

      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                    (/dimids(n),dimzs_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO

      varname              = 'QSNOW_BT'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'Snow mixing ratio'
      var_meta%units       = '(kg kg-1)/dt'
      var_meta%stagger     = ''        

      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                    (/dimids(n),dimzs_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO
  
!-----------------------------------------------------------------------
!
!  Defind QG related boundary variables
!
!-----------------------------------------------------------------------

      dimids(1) = dimys_id      ! West first dimension
      dimids(2) = dimys_id      ! East
      dimids(3) = dimxs_id      ! South
      dimids(4) = dimxs_id      ! North 

      varname              = 'QGRAUP_B'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'Graupel mixing ratio'
      var_meta%units       = 'kg kg-1'
      var_meta%stagger     = ''        

      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                    (/dimids(n),dimzs_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO

      varname              = 'QGRAUP_BT'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'Graupel mixing ratio'
      var_meta%units       = '(kg kg-1)/dt'
      var_meta%stagger     = ''        

      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                    (/dimids(n),dimzs_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO
  
!-----------------------------------------------------------------------
!
!  Defind QNICE related boundary variables
!
!-----------------------------------------------------------------------

      dimids(1) = dimys_id      ! West first dimension
      dimids(2) = dimys_id      ! East
      dimids(3) = dimxs_id      ! South
      dimids(4) = dimxs_id      ! North 

      varname              = 'QNICE_B'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'Ice Number concentration'
      var_meta%units       = ''
      var_meta%stagger     = ''        

      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                    (/dimids(n),dimzs_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO

      varname              = 'QNICE_BT'
      var_meta%fieldType   = 104
      var_meta%memoryOrder = 'XYZ'
      var_meta%description = 'Ice Number concentration'
      var_meta%units       = ''
      var_meta%stagger     = ''        

      DO n = 1,4
        var_meta%name        = TRIM(varname)//appd(n)
        var_meta%memoryOrder = appd(n)//'Z'

        istatus = NF_DEF_VAR(ncid,TRIM(var_meta%name),NF_FLOAT,4,       &
                    (/dimids(n),dimzs_id,dimbdy_id,dimunlim_id/),varid)
        CALL write_var_meta(ncid,varid,var_meta)
      END DO

  ELSE
    WRITE(6,*) 'Define variables only for the first file.'
    WRITE(6,*) ' file # is ',file_type,' greater than 2.'
    STOP
  END IF

  istatus = NF_ENDDEF(ncid)
 
  RETURN
END SUBROUTINE define_wrf_variables_V2
!
!##################################################################
!##################################################################
!######                                                      ######
!######               SUBROUTINE write_wrf_input             ######
!######                                                      ######
!######                     Developed by                     ######
!######     Center for Analysis and Prediction of Storms     ######
!######                University of Oklahoma                ######
!######                                                      ######
!##################################################################
!##################################################################
!

SUBROUTINE write_wrf_input(FileHandler,io_form,DateStr,                 &,135
                     nx_wrf,ny_wrf,nz_wrf,nxlg_wrf,nylg_wrf,            &
                     nzsoil_wrf,bdy_width,fzone_wrf,dx_wrf,dy_wrf,      &
                     zlevels_wrf, zlevels_half,ptop,mp_physics,         &
                     mapproj_wrf,trulat1_wrf,trulat2_wrf,trulon_wrf,    &
                     ctrlat_wrf,ctrlon_wrf,lat_wrf,lon_wrf,             &
                     lat_ll,lat_ul,lat_ur,lat_lr,                       &
                     lon_ll,lon_ul,lon_ur,lon_lr,                       &
                     msft_wrf,msfu_wrf,msfv_wrf,zs_wrf,dzs_wrf,         &
                     u_wrf,v_wrf,w_wrf,ph_wrf,phb_wrf,pt_wrf,           &
                     p_wrf,pb_wrf,mup_wrf,mub_wrf,mu_wrf,               &
                     qv_wrf,qc_wrf,qr_wrf,qi_wrf,qs_wrf,qg_wrf,         &
                     soiltyp_wrf,vegtyp_wrf,vegfrct_wrf,xland_wrf,      &
                     xice_wrf,tmn_wrf,shdmax_wrf,shdmin_wrf,snoalb_wrf, &
                     snowh_wrf,canwat_wrf,albbck_wrf,sst_wrf,           &
                     hterain_wrf,tsk_wrf,tslb_wrf,smois_wrf,            &
                     work1d,work2d,work2di,work3d,istatus)
!
!-----------------------------------------------------------------------
!
!  PURPOSE:
!
!     Construct and write WRF input file.
!
!-----------------------------------------------------------------------
!
!  AUTHOR: Yunheng Wang
!  01/12/2005
!
!  MODIFICATION HISTORY:
!
!-----------------------------------------------------------------------
!
  USE wrf_metadata             ! WRF constants and metadata

  IMPLICIT NONE

  INTEGER, INTENT(IN)  :: FileHandler       ! file handler
  INTEGER, INTENT(IN)  :: io_form           ! file format
                                        ! IO_NET, IO_INT, IO_PHDF5
  CHARACTER(*), INTENT(IN) :: DateStr       ! Current date string

  INTEGER, INTENT(IN)  :: nx_wrf
  INTEGER, INTENT(IN)  :: ny_wrf
  INTEGER, INTENT(IN)  :: nz_wrf
  INTEGER, INTENT(IN)  :: nzsoil_wrf            
  INTEGER, INTENT(IN)  :: nxlg_wrf          ! WRF domain size
  INTEGER, INTENT(IN)  :: nylg_wrf            
  INTEGER, INTENT(IN)  :: fzone_wrf         ! WRF fakezone, = 1            
  REAL,    INTENT(IN)  :: dx_wrf,dy_wrf

  REAL,    INTENT(IN)  :: zlevels_wrf(nz_wrf)
  REAL,    INTENT(IN)  :: zlevels_half(nz_wrf-1)
  INTEGER, INTENT(IN)  :: mp_physics
  INTEGER, INTENT(IN)  :: bdy_width
  REAL,    INTENT(IN)  :: ptop

  INTEGER, INTENT(IN)  :: mapproj_wrf
  REAL,    INTENT(IN)  :: trulat1_wrf, trulat2_wrf
  REAL,    INTENT(IN)  :: trulon_wrf
  REAL,    INTENT(IN)  :: ctrlat_wrf,ctrlon_wrf
  
  REAL,    INTENT(IN)  :: lat_wrf (nx_wrf,ny_wrf)
  REAL,    INTENT(IN)  :: lon_wrf (nx_wrf,ny_wrf)
  REAL,    INTENT(IN)  :: msft_wrf(nx_wrf,ny_wrf)
  REAL,    INTENT(IN)  :: msfu_wrf(nx_wrf,ny_wrf)
  REAL,    INTENT(IN)  :: msfv_wrf(nx_wrf,ny_wrf)
  REAL,    INTENT(IN)  :: lat_ll(4),lat_ul(4),lat_ur(4),lat_lr(4)
  REAL,    INTENT(IN)  :: lon_ll(4),lon_ul(4),lon_ur(4),lon_lr(4)

  REAL,    INTENT(IN)  :: zs_wrf(nzsoil_wrf)
  REAL,    INTENT(IN)  :: dzs_wrf(nzsoil_wrf)

  REAL,    INTENT(IN)  :: u_wrf(nx_wrf,ny_wrf,nz_wrf)
  REAL,    INTENT(IN)  :: v_wrf(nx_wrf,ny_wrf,nz_wrf)
  REAL,    INTENT(IN)  :: w_wrf(nx_wrf,ny_wrf,nz_wrf)
  REAL,    INTENT(IN)  :: ph_wrf (nx_wrf,ny_wrf,nz_wrf)
  REAL,    INTENT(IN)  :: phb_wrf(nx_wrf,ny_wrf,nz_wrf)
  REAL,    INTENT(IN)  :: pt_wrf (nx_wrf,ny_wrf,nz_wrf)  ! Pot. Temp. - t0
  REAL,    INTENT(IN)  :: p_wrf (nx_wrf,ny_wrf,nz_wrf)
  REAL,    INTENT(IN)  :: pb_wrf(nx_wrf,ny_wrf,nz_wrf)
  REAL,    INTENT(IN)  :: mup_wrf(nx_wrf,ny_wrf)
  REAL,    INTENT(IN)  :: mub_wrf(nx_wrf,ny_wrf)
  REAL,    INTENT(IN)  :: mu_wrf (nx_wrf,ny_wrf)

  REAL,    INTENT(IN)  :: qv_wrf(nx_wrf,ny_wrf,nz_wrf)
  REAL,    INTENT(IN)  :: qc_wrf(nx_wrf,ny_wrf,nz_wrf)
  REAL,    INTENT(IN)  :: qr_wrf(nx_wrf,ny_wrf,nz_wrf)
  REAL,    INTENT(IN)  :: qi_wrf(nx_wrf,ny_wrf,nz_wrf)
  REAL,    INTENT(IN)  :: qs_wrf(nx_wrf,ny_wrf,nz_wrf)
  REAL,    INTENT(IN)  :: qg_wrf(nx_wrf,ny_wrf,nz_wrf)

  INTEGER, INTENT(IN)  :: soiltyp_wrf(nx_wrf,ny_wrf)
  INTEGER, INTENT(IN)  :: vegtyp_wrf (nx_wrf,ny_wrf)
  REAL,    INTENT(IN)  :: vegfrct_wrf(nx_wrf,ny_wrf)
  REAL,    INTENT(IN)  :: xland_wrf (nx_wrf,ny_wrf)
  REAL,    INTENT(IN)  :: xice_wrf  (nx_wrf,ny_wrf)
  REAL,    INTENT(IN)  :: tmn_wrf   (nx_wrf,ny_wrf)
  REAL,    INTENT(IN)  :: snowh_wrf (nx_wrf,ny_wrf)
  REAL,    INTENT(IN)  :: canwat_wrf(nx_wrf,ny_wrf)
  REAL,    INTENT(IN)  :: sst_wrf   (nx_wrf,ny_wrf)
  REAL,    INTENT(IN)  :: shdmin_wrf(nx_wrf,ny_wrf)
  REAL,    INTENT(IN)  :: shdmax_wrf(nx_wrf,ny_wrf)
  REAL,    INTENT(IN)  :: snoalb_wrf(nx_wrf,ny_wrf)
  REAL,    INTENT(IN)  :: hterain_wrf(nx_wrf,ny_wrf)
  REAL,    INTENT(IN)  :: tsk_wrf(nx_wrf,ny_wrf)
  REAL,    INTENT(IN)  :: albbck_wrf(nx_wrf,ny_wrf)

  REAL,    INTENT(IN)  :: tslb_wrf(nx_wrf,ny_wrf,nzsoil_wrf)
  REAL,    INTENT(IN)  :: smois_wrf(nx_wrf,ny_wrf,nzsoil_wrf)

  REAL,    INTENT(OUT) :: work1d (nz_wrf)       ! temporary arrays
  REAL,    INTENT(OUT) :: work2d (nx_wrf,ny_wrf)    
  INTEGER, INTENT(OUT) :: work2di(nx_wrf,ny_wrf)
  REAL,    INTENT(OUT) :: work3d (nx_wrf,ny_wrf,nz_wrf)
                                 ! assume nz_wrf > nzsoil_wrf
 
  INTEGER, INTENT(OUT) :: istatus

!-----------------------------------------------------------------------
!
! Temporary local variables
!
!-----------------------------------------------------------------------

  TYPE(wrf_var_metadata)    :: var_meta

  REAL,         ALLOCATABLE :: snowc(:,:)

  REAL,         ALLOCATABLE :: dnw(:)
  REAL,         ALLOCATABLE :: rdnw(:)
  REAL,         ALLOCATABLE :: dn(:)
  REAL,         ALLOCATABLE :: rdn(:)
  REAL,         ALLOCATABLE :: fnp(:)
  REAL,         ALLOCATABLE :: fnm(:)

  REAL,         ALLOCATABLE :: tem3dlg1(:,:,:)   ! domain size array
  REAL,         ALLOCATABLE :: tem3dlg2(:,:,:)   ! Mem. Order 'XZY'

  REAL  :: projrot_latlon            ! external function

!-----------------------------------------------------------------------
!
! Misc. local variables
!
!-----------------------------------------------------------------------

  INTEGER  :: i,j,k
  REAL     :: cfn, cfn1
  REAL     :: projrot_deg
  REAL     :: p_surf
  REAL     :: t00, p00, a

!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Begin of executable code
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

!-----------------------------------------------------------------------
!
!  Allocate temporary arrays
!
!-----------------------------------------------------------------------

  ALLOCATE(snowc(nx_wrf,ny_wrf),    STAT = istatus) 

  ALLOCATE(dnw (nz_wrf-1),  STAT = istatus)
  ALLOCATE(rdnw(nz_wrf-1),  STAT = istatus)
  ALLOCATE(dn  (nz_wrf-1),  STAT = istatus)
  ALLOCATE(rdn (nz_wrf-1),  STAT = istatus)
  ALLOCATE(fnp (nz_wrf-1),  STAT = istatus)
  ALLOCATE(fnm (nz_wrf-1),  STAT = istatus)

  ALLOCATE(tem3dlg1(nxlg_wrf,nylg_wrf,nz_wrf),    STAT = istatus) 
  ALLOCATE(tem3dlg2(nxlg_wrf,nz_wrf,nylg_wrf),    STAT = istatus) 

!-----------------------------------------------------------------------
!
! Land use category
!
!-----------------------------------------------------------------------

  var_meta%name        = 'LU_INDEX'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XY'
  var_meta%description = 'LAND USE CATEGORY'
  var_meta%units       = ''
  var_meta%stagger     = ''
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = ''

  work2d(:,:) = FLOAT(vegtyp_wrf(:,:))
  CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
               work2d,nx_wrf,ny_wrf,fzone_wrf,                        &
               tem3dlg1,nxlg_wrf-1,nylg_wrf-1)
  
!-------------------------------------------------------------------
!
!   Write out atmospheric variables U (in u_wrf), V (in v_wrf)
!   W, PH, PHB, T, MU, MUB, MU0.
!
!-------------------------------------------------------------------
!
  var_meta%name        = 'U'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XYZ'
  var_meta%description = 'x-wind component'
  var_meta%units       = 'm s-1'
  var_meta%stagger     = 'X'
  var_meta%dimName1    = 'west_east_stag'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = 'bottom_top'

  CALL write3d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               u_wrf,nx_wrf,ny_wrf,nz_wrf,fzone_wrf,                    &
               tem3dlg1,tem3dlg2,nxlg_wrf,nylg_wrf-1,nz_wrf-1)

  var_meta%name        = 'V'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XYZ'
  var_meta%description = 'y-wind component'
  var_meta%units       = 'm s-1'
  var_meta%stagger     = 'Y'
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north_stag'
  var_meta%dimName3    = 'bottom_top'

  CALL write3d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               v_wrf,nx_wrf,ny_wrf,nz_wrf,fzone_wrf,                    &
               tem3dlg1,tem3dlg2,nxlg_wrf-1,nylg_wrf,nz_wrf-1)

  var_meta%name        = 'W'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XYZ'
  var_meta%description = 'z-wind component'
  var_meta%units       = 'm s-1'
  var_meta%stagger     = 'Z'
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = 'bottom_top_stag'

  CALL write3d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               w_wrf,nx_wrf,ny_wrf,nz_wrf,fzone_wrf,                    &
               tem3dlg1,tem3dlg2,nxlg_wrf-1,nylg_wrf-1,nz_wrf)
  !
  !  Write out perturbation geopotential
  !
  var_meta%name        = 'PH'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XYZ'
  var_meta%description = 'perturbation geopotential'
  var_meta%units       = 'm2 s-2'
  var_meta%stagger     = 'Z'
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = 'bottom_top_stag'

  CALL write3d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               ph_wrf,nx_wrf,ny_wrf,nz_wrf,fzone_wrf,                   &
               tem3dlg1,tem3dlg2,nxlg_wrf-1,nylg_wrf-1,nz_wrf)

  var_meta%name        = 'PHB'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XYZ'
  var_meta%description = 'base-state geopotential'
  var_meta%units       = 'm2 s-2'
  var_meta%stagger     = 'Z'
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = 'bottom_top_stag'

  CALL write3d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               phb_wrf,nx_wrf,ny_wrf,nz_wrf,fzone_wrf,                  &
               tem3dlg1,tem3dlg2,nxlg_wrf-1,nylg_wrf-1,nz_wrf)
  !
  !  Write out perturbation potential temperature (theta - t0)
  !
  var_meta%name        = 'T'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XYZ'
  var_meta%description = 'perturbation potential temperature (theta-t0)'
  var_meta%units       = 'K'
  var_meta%stagger     = ''
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = 'bottom_top'

  CALL write3d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               pt_wrf,nx_wrf,ny_wrf,nz_wrf,fzone_wrf,                   &
               tem3dlg1,tem3dlg2,nxlg_wrf-1,nylg_wrf-1,nz_wrf-1)
  !  
  !  Write out air mass
  !
  var_meta%name        = 'MU'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XY'
  var_meta%description = 'perturbation dry air mass in column'
  var_meta%units       = 'Pa'
  var_meta%stagger     = ''
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = ''

  CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               mup_wrf,nx_wrf,ny_wrf,fzone_wrf,                         &
               tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

  var_meta%name        = 'MUB'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XY'
  var_meta%description = 'base state dry air mass in column'
  var_meta%units       = 'Pa'
  var_meta%stagger     = ''
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = ''

  CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               mub_wrf,nx_wrf,ny_wrf,fzone_wrf,                         &
               tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

  var_meta%name        = 'MU0'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XY'
  var_meta%description = 'initial dry mass in column'
  var_meta%units       = 'Pa'
  var_meta%stagger     = ''
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = ''

  CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               mu_wrf,nx_wrf,ny_wrf,fzone_wrf,                          &
               tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

!-----------------------------------------------------------------------
!
!   WRF mass coordinate varaiables (from real.exe)
!
!-----------------------------------------------------------------------
  !
  !  From the full level data, we can get the half levels, reciprocals, 
  !  and layer thicknesses.  These are all defined at half level 
  !  locations, so one less level.
  !

  DO k=1, nz_wrf-1
     dnw(k) = zlevels_wrf(k+1) - zlevels_wrf(k)
     rdnw(k) = 1./dnw(k)
  END DO

  !
  !  Now the same sort of computations with the half eta levels, even ANOTHER
  !  level less than the one above.
  !
  dn(1)  = 0.0
  rdn(1) = 0.0
  fnp(1) = 0.0
  fnm(1) = 0.0
  DO k=2, nz_wrf-1
    dn(k) = 0.5*(dnw(k)+dnw(k-1))
    rdn(k) = 1./dn(k)
    fnp(k) = .5* dnw(k  )/dn(k)
    fnm(k) = .5* dnw(k-1)/dn(k)
  END DO

  var_meta%name        = 'FNM'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'Z'
  var_meta%description = 'upper weight for vertical stretching'
  var_meta%units       = ''
  var_meta%stagger     = ''
  var_meta%dimName1    = 'bottom_top'
  var_meta%dimName2    = ''
  var_meta%dimName3    = ''
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               fnm,nz_wrf-1,fzone_wrf)

  var_meta%name        = 'FNP'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'Z'
  var_meta%description = 'lower weight for vertical stretching'
  var_meta%units       = ''
  var_meta%stagger     = ''
  var_meta%dimName1    = 'bottom_top'
  var_meta%dimName2    = ''
  var_meta%dimName3    = ''
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               fnp,nz_wrf-1,fzone_wrf)

  var_meta%name        = 'RDNW'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'Z'
  var_meta%description = 'inverse dn values on full (w) levels'
  var_meta%units       = 'Pa'
  var_meta%stagger     = ''
  var_meta%dimName1    = 'bottom_top'
  var_meta%dimName2    = ''
  var_meta%dimName3    = ''
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               rdnw,nz_wrf-1,fzone_wrf)

  var_meta%name        = 'RDN'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'Z'
  var_meta%description = 'inverse dn values on half (mass) levels'
  var_meta%units       = ''
  var_meta%stagger     = ''
  var_meta%dimName1    = 'bottom_top'
  var_meta%dimName2    = ''
  var_meta%dimName3    = ''
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               rdn,nz_wrf-1,fzone_wrf)

  !  Scads of vertical coefficients.
  var_meta%name        = 'DNW'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'Z'
  var_meta%description = 'dn values on full (w) levels'
  var_meta%units       = ''
  var_meta%stagger     = ''
  var_meta%dimName1    = 'bottom_top'
  var_meta%dimName2    = ''
  var_meta%dimName3    = ''
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               dnw,nz_wrf-1,fzone_wrf)

  var_meta%name        = 'DN'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'Z'
  var_meta%description = 'dn values on half (mass) levels'
  var_meta%units       = ''
  var_meta%stagger     = ''
  var_meta%dimName1    = 'bottom_top'
  var_meta%dimName2    = ''
  var_meta%dimName3    = ''
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               dn,nz_wrf-1,fzone_wrf)

  var_meta%name        = 'ZNU'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'Z'
  var_meta%description = 'eta values on half (mass) levels'
  var_meta%units       = ''
  var_meta%stagger     = ''
  var_meta%dimName1    = 'bottom_top'
  var_meta%dimName2    = ''
  var_meta%dimName3    = ''
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               zlevels_half,nz_wrf-1,fzone_wrf)

  var_meta%name        = 'ZNW'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'Z'
  var_meta%description = 'eta values on full (w) levels'
  var_meta%units       = ''
  var_meta%stagger     = 'Z'
  var_meta%dimName1    = 'bottom_top_stag'
  var_meta%dimName2    = ''
  var_meta%dimName3    = ''
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               zlevels_wrf,nz_wrf,fzone_wrf)

  work1d(:) = 0.0
  var_meta%name        = 'T_BASE'          ! set to 0.0
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'Z'
  var_meta%description = 'BASE STATET T IN IDEALIZED CASES'
  var_meta%units       = 'K'
  var_meta%stagger     = ''
  var_meta%dimName1    = 'bottom_top'
  var_meta%dimName2    = ''
  var_meta%dimName3    = ''
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work1d,nz_wrf-1,fzone_wrf)

  cfn  = (.5*dnw(nz_wrf-1)+dn(nz_wrf-1))/dn(nz_wrf-1)
  cfn1 = -.5*dnw(nz_wrf-1)/dn(nz_wrf-1)

  var_meta%name        = 'CFN'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = '0'
  var_meta%description = 'extrapolation constant'
  var_meta%units       = ''
  var_meta%stagger     = ''
  var_meta%dimName1    = ''
  var_meta%dimName2    = ''
  var_meta%dimName3    = ''
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               cfn,1,fzone_wrf)

  var_meta%name        = 'CFN1'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = '0'
  var_meta%description = 'extrapolation constant'
  var_meta%units       = ''
  var_meta%stagger     = ''
  var_meta%dimName1    = ''
  var_meta%dimName2    = ''
  var_meta%dimName3    = ''
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               cfn1,1,fzone_wrf)

  work1d(:) = 0.0
  var_meta%name        = 'EPSTS'           ! set to 0.0
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = '0'
  var_meta%description = 'leapfrog time filter constant'
  var_meta%units       = ''
  var_meta%stagger     = ''
  var_meta%dimName1    = ''
  var_meta%dimName2    = ''
  var_meta%dimName3    = ''
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work1d,1,fzone_wrf)

  var_meta%name        = 'STEP_NUMBER'     ! set to 0
  var_meta%fieldType   = WRF_integer
  var_meta%MemoryOrder = '0'
  var_meta%description = ''
  var_meta%units       = '-'
  var_meta%stagger     = ''
  var_meta%dimName1    = ''
  var_meta%dimName2    = ''
  var_meta%dimName3    = ''
  CALL write1di(FileHandler,io_form,var_meta,DateStr(1:19),             &
                0,1,fzone_wrf)

  !
  !  Write out Q2, T2, TH2, U10, V10 etc. (zeros as in real.exe)
  !

  CALL const_module_initialize ( p00 , t00 , a )

  work2d(:,:) = 0.0

  var_meta%fieldType   = WRF_REAL   ! common to all 2D arrays below - 5
  var_meta%MemoryOrder = 'XY'
  var_meta%stagger     = ''
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = ''

  work2d(:,:) = qv_wrf(:,:,1) ! see WRFV2.1 dyn_em/module_initialize_real.f
  var_meta%name        = 'Q2'
  var_meta%description = 'QV at 2 M'
  var_meta%units       = 'kg kg-1'
  CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work2d,nx_wrf,ny_wrf,fzone_wrf,                          &
               tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

  work2d(:,:) = pt_wrf(:,:,1)+300.  ! see WRFV2.1 dyn_em/module_initialize_real.f
  DO j = 1,ny_wrf
    DO i = 1,nx_wrf
      work2d(i,j) = work2d(i,j)*(((p_wrf(i,j,1)+pb_wrf(i,j,1))/base_pres)**(r_d/cp_wrf))
    END DO
  END DO
  var_meta%name        = 'T2'
  var_meta%description = 'TEMP at 2 M'
  var_meta%units       = 'K'
  CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work2d,nx_wrf,ny_wrf,fzone_wrf,                          &
               tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

  work2d(:,:) = pt_wrf(:,:,1)+300.  ! see WRFV2.1 dyn_em/module_initialize_real.f
  var_meta%name        = 'TH2'
  var_meta%description = 'POT TEMP at 2 M'
  var_meta%units       = 'K'
  CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work2d,nx_wrf,ny_wrf,fzone_wrf,                          &
               tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

  DO j = 1,ny_wrf                  ! see WRFV2.1 dyn_em/module_initialize_real.f
    DO i = 1,nx_wrf
      p_surf = p00* EXP (-t00/a + ( (t00/a)**2 -                        &
                                 2.*g_wrf*hterain_wrf(i,j)/a/r_d) **0.5)
      work2d(i,j) = p_surf + p_wrf(i,j,1)
    END DO
  END DO
  var_meta%name        = 'PSFC'
  var_meta%description = 'SFC PRESSURE'
  var_meta%units       = 'Pa'
  CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work2d,nx_wrf,ny_wrf,fzone_wrf,                          &
               tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

  DO j = 1,ny_wrf          ! should do message passing here, it did not
    DO i = 1,nx_wrf-1      ! because U10/V10 is not used in WRF.
      work2d(i,j) = (u_wrf(i,j,1)+u_wrf(i+1,j,1))*0.5 
                           ! see WRFV2.1 dyn_em/module_initialize_real.f
    END DO
  END DO
  var_meta%name        = 'U10'
  var_meta%description = 'U at 10 M'
  var_meta%units       = 'm s-1'
  CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work2d,nx_wrf,ny_wrf,fzone_wrf,                          &
               tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

  DO j = 1,ny_wrf-1
    DO i = 1,nx_wrf
      work2d(i,j) = (v_wrf(i,j,1)+v_wrf(i,j+1,1))*0.5 
                           ! see WRFV2.1 dyn_em/module_initialize_real.f
    END DO
  END DO
  var_meta%name        = 'V10'
  var_meta%description = 'V at 10 M'
  var_meta%units       = 'm s-1'
  CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work2d,nx_wrf,ny_wrf,fzone_wrf,                          &
               tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

  var_meta%fieldType   = WRF_REAL   ! common for all 1D variable below - 9
  var_meta%MemoryOrder = '0'
  var_meta%units       = ''
  var_meta%stagger     = ''
  var_meta%dimName1    = ''
  var_meta%dimName2    = ''
  var_meta%dimName3    = ''

  work1d(1) = 1/dx_wrf

  var_meta%name        = 'RDX'
  var_meta%description = 'INVERSE X GRID LENGTH'

  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work1d(1),1,fzone_wrf)

  work1d(1) = 1/dy_wrf

  var_meta%name        = 'RDY'
  var_meta%description = 'INVERSE Y GRID LENGTH'

  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work1d(1),1,fzone_wrf)

  work1d(1) = 0.0

  var_meta%name        = 'DTS'
  var_meta%description = 'SMALL TIMESTEP'

  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work1d(1),1,fzone_wrf)

  var_meta%name        = 'DTSEPS'
  var_meta%description = 'TIME WEIGHT CONSTANT FOR SMALL STEPS'

  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work1d(1),1,fzone_wrf)

  var_meta%name        = 'RESM'
  var_meta%description = 'TIME WEIGHT CONSTANT FOR SMALL STEPS'

  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work1d(1),1,fzone_wrf)

  var_meta%name        = 'ZETATOP'
  var_meta%description = 'ZETA AT MODEL TOP'

  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work1d(1),1,fzone_wrf)

  !  Scads of vertical coefficients.
  i = (2.*dn(2)+dn(3))/(dn(2)+dn(3))*dnw(1)/dn(2)
  j =     dn(2)       /(dn(2)+dn(3))*dnw(1)/dn(3)

  work1d(1)  = fnp(2) + i
  work1d(2)  = fnm(2) - i - j 
  work1d(3)  = j

  var_meta%name        = 'CF1'
  var_meta%description = '2nd order extrapolation constant'

  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work1d(1),1,fzone_wrf)

  var_meta%name        = 'CF2'
  var_meta%description = '2nd order extrapolation constant'

  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work1d(2),1,fzone_wrf)

  var_meta%name        = 'CF3'
  var_meta%description = '2nd order extrapolation constant'

  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work1d(3),1,fzone_wrf)
!
!----------------------------------------------------------------------
!
!  Write out water vapor mixing ratio
!
!----------------------------------------------------------------------
!  
  var_meta%fieldType   = WRF_REAL       ! common for all mixing ratios - 7
  var_meta%units       = 'kg kg-1'
  var_meta%MemoryOrder = 'XYZ'
  var_meta%stagger     = ''
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = 'bottom_top'

  var_meta%name        = 'QVAPOR'
  var_meta%description = 'Water vapor mixing ratio'

  CALL write3d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               qv_wrf,nx_wrf,ny_wrf,nz_wrf,fzone_wrf,                   &
               tem3dlg1,tem3dlg2,nxlg_wrf-1,nylg_wrf-1,nz_wrf-1)
  !
  !  Write out QCLOUD and QRAIN, QSNOW, QICE, QGRAUP
  !
  !  NOTE: They are not all zeros according to real.exe. 
  !        We can initialize them here use those values from ARPS.
  !
  IF(mp_physics >= 1 .AND. mp_physics <= 6 .OR. mp_physics == 8) THEN

     var_meta%name        = 'QCLOUD'
     var_meta%description = 'Cloud water mixing ratio'

     CALL write3d(FileHandler,io_form,var_meta,DateStr(1:19),           &
               qc_wrf,nx_wrf,ny_wrf,nz_wrf,fzone_wrf,                   &
               tem3dlg1,tem3dlg2,nxlg_wrf-1,nylg_wrf-1,nz_wrf-1)

  END IF
  
  IF((mp_physics >= 1 .AND. mp_physics <= 4) .OR. mp_physics == 6       &
      .OR. mp_physics == 8) THEN

     ! QRAIN
     var_meta%name        = 'QRAIN'
     var_meta%description = 'Rain water mixing ratio'

     CALL write3d(FileHandler,io_form,var_meta,DateStr(1:19),           &
               qr_wrf,nx_wrf,ny_wrf,nz_wrf,fzone_wrf,                   &
               tem3dlg1,tem3dlg2,nxlg_wrf-1,nylg_wrf-1,nz_wrf-1)
  END IF

  IF( mp_physics == 2 .OR. mp_physics == 4 .OR. mp_physics == 6         &
      .OR. mp_physics == 8) THEN
     ! QICE
     var_meta%name        = 'QICE'
     var_meta%description = 'Ice mixing ratio'

     CALL write3d(FileHandler,io_form,var_meta,DateStr(1:19),          &
               qi_wrf,nx_wrf,ny_wrf,nz_wrf,fzone_wrf,                  &
               tem3dlg1,tem3dlg2,nxlg_wrf-1,nylg_wrf-1,nz_wrf-1)

    ! QSNOW
    var_meta%name        = 'QSNOW'
    var_meta%description = 'Snow mixing ratio'

    CALL write3d(FileHandler,io_form,var_meta,DateStr(1:19),           &
              qs_wrf,nx_wrf,ny_wrf,nz_wrf,fzone_wrf,                   &
              tem3dlg1,tem3dlg2,nxlg_wrf-1,nylg_wrf-1,nz_wrf-1)
  END IF
  
  IF(mp_physics == 2 .OR. mp_physics == 6 .OR. mp_physics == 8) THEN
    ! QGRAUP
    var_meta%name        = 'QGRAUP'
    var_meta%description = 'Graupel mixing ratio'

    CALL write3d(FileHandler,io_form,var_meta,DateStr(1:19),            &
              qg_wrf,nx_wrf,ny_wrf,nz_wrf,fzone_wrf,                    &
              tem3dlg1,tem3dlg2,nxlg_wrf-1,nylg_wrf-1,nz_wrf-1)
  END IF

  work3d(:,:,:) = 0.0
  IF (mp_physics == 8) THEN
    ! QNICE
    var_meta%name        = 'QNICE'
    var_meta%description = 'Ice Number concentration'
    var_meta%units       = ''

    CALL write3d(FileHandler,io_form,var_meta,DateStr(1:19),            &
              work3d,nx_wrf,ny_wrf,nz_wrf,fzone_wrf,                    &
              tem3dlg1,tem3dlg2,nxlg_wrf-1,nylg_wrf-1,nz_wrf-1)
  END IF

!----------------------------------------------------------------------
!
!  Write out Soil related variables
!
!-----------------------------------------------------------------------

  !
  !  Write out FCX, GCX, DTBC (0.0 as in real.exe)
  !
  work1d = 0.0

  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'C'
  var_meta%units       = ''
  var_meta%stagger     = ''
  var_meta%dimName1    = ''
  var_meta%dimName2    = ''
  var_meta%dimName3    = ''

  var_meta%name        = 'FCX'
  var_meta%description = 'RELAXATION TERM FOR BOUNDARY ZONE'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               work1d,bdy_width,fzone_wrf)

  var_meta%name        = 'GCX'
  var_meta%description = '2ND RELAXATION TERM FOR BOUNDARY ZONE'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               work1d,bdy_width,fzone_wrf)

  var_meta%name        = 'DTBC'
  var_meta%MemoryOrder = '0'
  var_meta%description = 'TIME SINCE BOUNDARY READ'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               work1d,1,fzone_wrf)

  ! LANDMAK  0  water      XLAND     2  water
  !          1  land                 1  land
  !
  DO j = 1, ny_wrf-1
    DO i = 1, nx_wrf-1
      work2d(i,j) = MOD(NINT(xland_wrf(i,j)), 2)
    END DO
  END DO

  var_meta%name        = 'LANDMASK'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XY'
  var_meta%description = 'LAND MASK (1 FOR LAND, 0 FOR WATER)'
  var_meta%units       = ''
  var_meta%stagger     = ''
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = ''
  CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work2d,nx_wrf,ny_wrf,fzone_wrf,                          &
               tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

  !
  !  WRFSI provides these static variables, but ARPS does not.
  !
  var_meta%name        = 'SHDMAX'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XY'
  var_meta%description = 'ANNUAL MAX VEG FRACTION'
  var_meta%units       = ''
  var_meta%stagger     = ''
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = ''
  CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               shdmax_wrf,nx_wrf,ny_wrf,fzone_wrf,                      &
               tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

  var_meta%name        = 'SHDMIN'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XY'
  var_meta%description = 'ANNUAL MIN VEG FRACTION'
  var_meta%units       = ''
  var_meta%stagger     = ''
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = ''
  CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               shdmin_wrf,nx_wrf,ny_wrf,fzone_wrf,                      &
               tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

  var_meta%name        = 'SNOALB'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XY'
  var_meta%description = 'ANNUAL MAX SNOW ALBEDO IN FRACTION'
  var_meta%units       = ''
  var_meta%stagger     = ''
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = ''
  CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               snoalb_wrf,nx_wrf,ny_wrf,fzone_wrf,                      &
               tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

  !
  !  Interpolate soil variables
  !
  var_meta%name        = 'TSLB'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XYZ'
  var_meta%description = 'SOIL TEMPERATURE'
  var_meta%units       = 'K'
  var_meta%stagger     = 'Z'
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = 'soil_layers_stag'

  CALL write3d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               tslb_wrf,nx_wrf,ny_wrf,nzsoil_wrf,fzone_wrf,             &
               tem3dlg1,tem3dlg2,nxlg_wrf-1,nylg_wrf-1,nzsoil_wrf)

  !
  !  Soil layers and variables
  !
  var_meta%name        = 'ZS'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'Z'
  var_meta%description = 'DEPTHS OF CENTERS OF SOIL LAYERS'
  var_meta%units       = 'm'
  var_meta%stagger     = 'Z'
  var_meta%dimName1    = 'soil_layers_stag'
  var_meta%dimName2    = ''
  var_meta%dimName3    = ''
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               zs_wrf,nzsoil_wrf,fzone_wrf)

  var_meta%name        = 'DZS'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'Z'
  var_meta%description = 'THICKNESSES OF SOIL LAYERS'
  var_meta%units       = 'm'
  var_meta%stagger     = 'Z'
  var_meta%dimName1    = 'soil_layers_stag'
  var_meta%dimName2    = ''
  var_meta%dimName3    = ''
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               dzs_wrf,nzsoil_wrf,fzone_wrf)

  var_meta%name        = 'SMOIS'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XYZ'
  var_meta%description = 'SOIL MOISTURE'
  var_meta%units       = 'm3 m-3'
  var_meta%stagger     = 'Z'
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = 'soil_layers_stag'

  CALL write3d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               smois_wrf,nx_wrf,ny_wrf,nzsoil_wrf,fzone_wrf,            &
               tem3dlg1,tem3dlg2,nxlg_wrf-1,nylg_wrf-1,nzsoil_wrf)

  !   SH2O  soil liquid water, depends on swxxxxxx etc.
  !         we do not know how swxxxxxx  are defined.
  !
  work3d(:,:,:) = 0.0
  DO k = 1,nzsoil_wrf
    DO j = 1, ny_wrf-1
      DO i = 1, nx_wrf-1
        IF(xland_wrf(i,j) > 1.5) work3d(i,j,k) = 1.0   ! over water
      END DO
    END DO
  END DO

  var_meta%name        = 'SH2O'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XYZ'
  var_meta%description = 'SOIL LIQUID WATER'
  var_meta%units       = 'm3 m-3'
  var_meta%stagger     = 'Z'
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = 'soil_layers_stag'
  CALL write3d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work3d,nx_wrf,ny_wrf,nzsoil_wrf,fzone_wrf,               &
               tem3dlg1,tem3dlg2,nxlg_wrf-1,nylg_wrf-1,nzsoil_wrf)

  var_meta%name        = 'XICE'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XY'
  var_meta%description = 'SEA ICE FLAG'
  var_meta%units       = ''
  var_meta%stagger     = ''
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = ''

  CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               xice_wrf,nx_wrf,ny_wrf,fzone_wrf,                        &
               tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

  !
  !  Soil type and vegetation type
  !
  var_meta%name        = 'IVGTYP'
  var_meta%fieldType   = WRF_INTEGER
  var_meta%MemoryOrder = 'XY'
  var_meta%description = 'DOMINANT VEGETATION CATEGORY'
  var_meta%units       = ''
  var_meta%stagger     = ''
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = ''
  CALL write2di(FileHandler,io_form,var_meta,DateStr(1:19),             &
               vegtyp_wrf,nx_wrf,ny_wrf,fzone_wrf,                      &
               tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

  var_meta%name        = 'ISLTYP'
  var_meta%fieldType   = WRF_INTEGER
  var_meta%MemoryOrder = 'XY'
  var_meta%description = 'DOMINANT SOIL CATEGORY'
  var_meta%units       = ''
  var_meta%stagger     = ''
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = ''
  CALL write2di(FileHandler,io_form,var_meta,DateStr(1:19),             &
               soiltyp_wrf,nx_wrf,ny_wrf,fzone_wrf,                     &
               tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

  var_meta%name        = 'VEGFRA'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XY'
  var_meta%description = 'VEGETATION FRACTION'
  var_meta%units       = ''
  var_meta%stagger     = ''
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = ''

  CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               vegfrct_wrf,nx_wrf,ny_wrf,fzone_wrf,                     &
               tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

  !
  !  Process Water equivalent of accumulated snow
  !
    DO j = 1, ny_wrf-1
      DO i = 1, nx_wrf-1
        snowc(i,j) = 0
        IF(snowh_wrf(i,j) >= 10.0/100) snowc(i,j) = 1
      END DO
    END DO

!  Convert snow depth (in meter) to water equiv. of accum. snow depth(kg/m**2)
!  (where 1 meter liquid water is set equivqlent to 10 meters snow).
!          100 = ((m snow) / 10 ) * (1000 kg/m**3)

    work2d(:,:) = 100.*snowh_wrf(:,:)

    var_meta%name        = 'SNOW'
    var_meta%fieldType   = WRF_REAL
    var_meta%MemoryOrder = 'XY'
    var_meta%description = 'SNOW WATER EQUIVALENT'
    var_meta%units       = 'kg m-2'
    var_meta%stagger     = ''
    var_meta%dimName1    = 'west_east'
    var_meta%dimName2    = 'south_north'
    var_meta%dimName3    = ''

    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             work2d,nx_wrf,ny_wrf,fzone_wrf,                            &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

    var_meta%name        = 'SNOWH'
    var_meta%fieldType   = WRF_REAL
    var_meta%MemoryOrder = 'XY'
    var_meta%description = 'PHYSICAL SNOW DEPTH'
    var_meta%units       = 'm'
    var_meta%stagger     = ''
    var_meta%dimName1    = 'west_east'
    var_meta%dimName2    = 'south_north'
    var_meta%dimName3    = ''

    ! SNOWH       may be snowdpth of ARPS. Its unit is "m" as in ARPS
    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             snowh_wrf,nx_wrf,ny_wrf,fzone_wrf,                         &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

    !
    !  Canopy water amount (meter, in ARPS, kg/m**2 in WRF)
    !
    var_meta%name        = 'CANWAT'
    var_meta%fieldType   = WRF_REAL
    var_meta%MemoryOrder = 'XY'
    var_meta%description = 'CANOPY WATER'
    var_meta%units       = 'kg m-2'
    var_meta%stagger     = ''
    var_meta%dimName1    = 'west_east'
    var_meta%dimName2    = 'south_north'
    var_meta%dimName3    = ''
    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             canwat_wrf,nx_wrf,ny_wrf,fzone_wrf,                        &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

    var_meta%name        = 'SST'
    var_meta%fieldType   = WRF_REAL
    var_meta%MemoryOrder = 'XY'
    var_meta%description = 'SEA SURFACE TEMPERATURE'
    var_meta%units       = 'K'
    var_meta%stagger     = ''
    var_meta%dimName1    = 'west_east'
    var_meta%dimName2    = 'south_north'
    var_meta%dimName3    = ''
    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             sst_wrf,nx_wrf,ny_wrf,fzone_wrf,                           &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

    ! ifndsnowh   depends on flag_snowh to indicate whether SNOWH
    !             is provided. set it to 0.

    var_meta%name        = 'FNDSNOWH'
    var_meta%fieldType   = WRF_INTEGER
    var_meta%MemoryOrder = '0'
    var_meta%description = 'SNOWH_LOGICAL'
    var_meta%units       = '-'
    var_meta%stagger     = ''
    var_meta%dimName1    = ''
    var_meta%dimName2    = ''
    var_meta%dimName3    = ''
    CALL write1di(FileHandler,io_form,var_meta,DateStr(1:19),0,1,fzone_wrf)

    ! ifndsoilw   depends on num_sw_levels_input to denotes the 
    !             number of soilwxxx provided. No such variable 
    !             provided in WRFSI 1.3.2
    !
    var_meta%name        = 'FNDSOILW'
    var_meta%fieldType   = WRF_INTEGER
    var_meta%MemoryOrder = '0'
    var_meta%description = 'SOILW_LOGICAL'
    var_meta%units       = '-'
    var_meta%stagger     = ''
    var_meta%dimName1    = ''
    var_meta%dimName2    = ''
    var_meta%dimName3    = ''
    CALL write1di(FileHandler,io_form,var_meta,DateStr(1:19),0,1,fzone_wrf)

    !
    !  These variable are intialized as 0.0 in real_em.f
    !  WRFSI also does not provide definitions for those variables
    !
    work2d = 0.0

    var_meta%name        = 'TOTSWDN'
    var_meta%fieldType   = WRF_REAL
    var_meta%MemoryOrder = 'XY'
    var_meta%description = '-'
    var_meta%units       = '-'
    var_meta%stagger     = ''
    var_meta%dimName1    = 'west_east'
    var_meta%dimName2    = 'south_north'
    var_meta%dimName3    = ''

    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             work2d,nx_wrf,ny_wrf,fzone_wrf,                            &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

    var_meta%name        = 'TOTLWDN'
    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             work2d,nx_wrf,ny_wrf,fzone_wrf,                            &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

    var_meta%name        = 'RSWTOA'
    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             work2d,nx_wrf,ny_wrf,fzone_wrf,                            &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

    var_meta%name        = 'RLWTOA'
    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             work2d,nx_wrf,ny_wrf,fzone_wrf,                            &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

    var_meta%name        = 'CZMEAN'
    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             work2d,nx_wrf,ny_wrf,fzone_wrf,                            &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

    var_meta%name        = 'CFRACL'
    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             work2d,nx_wrf,ny_wrf,fzone_wrf,                            &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

    var_meta%name        = 'CFRACM'
    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             work2d,nx_wrf,ny_wrf,fzone_wrf,                            &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

    var_meta%name        = 'CFRACH'
    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             work2d,nx_wrf,ny_wrf,fzone_wrf,                            &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

    var_meta%name        = 'ACFRST'
    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             work2d,nx_wrf,ny_wrf,fzone_wrf,                            &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

    work2di(:,:) = 0
    var_meta%name        = 'NCFRST'
    var_meta%fieldType   = WRF_INTEGER
    CALL write2di(FileHandler,io_form,var_meta,DateStr(1:19),           &
              work2di,nx_wrf,ny_wrf,fzone_wrf,                          &
              tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

    var_meta%name        = 'ACFRCV'
    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             work2d,nx_wrf,ny_wrf,fzone_wrf,                            &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

    work2di(:,:) = 0
    var_meta%name        = 'NCFRCV'
    var_meta%fieldType   = WRF_INTEGER
    CALL write2di(FileHandler,io_form,var_meta,DateStr(1:19),           &
             work2di,nx_wrf,ny_wrf,fzone_wrf,                           &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

!-----------------------------------------------------------------------
!
!  Map projection information
!
!-----------------------------------------------------------------------

    var_meta%name        = 'MAPFAC_M'
    var_meta%fieldType   = WRF_REAL
    var_meta%MemoryOrder = 'XY'
    var_meta%description = 'Map scale factor on mass grid'
    var_meta%units       = ''
    var_meta%stagger     = ''
    var_meta%dimName1    = 'west_east'
    var_meta%dimName2    = 'south_north'
    var_meta%dimName3    = ''

    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             msft_wrf,nx_wrf,ny_wrf,fzone_wrf,                          &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

    var_meta%name        = 'MAPFAC_U'
    var_meta%fieldType   = WRF_REAL
    var_meta%MemoryOrder = 'XY'
    var_meta%description = 'Map scale factor on u-grid'
    var_meta%units       = ''
    var_meta%stagger     = 'X'
    var_meta%dimName1    = 'west_east_stag'
    var_meta%dimName2    = 'south_north'
    var_meta%dimName3    = ''

    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             msfu_wrf,nx_wrf,ny_wrf,fzone_wrf,                          &
             tem3dlg1,nxlg_wrf,nylg_wrf-1)

    var_meta%name        = 'MAPFAC_V'
    var_meta%fieldType   = WRF_REAL
    var_meta%MemoryOrder = 'XY'
    var_meta%description = 'Map scale factor on v-grid'
    var_meta%units       = ''
    var_meta%stagger     = 'Y'
    var_meta%dimName1    = 'west_east'
    var_meta%dimName2    = 'south_north_stag'
    var_meta%dimName3    = ''

    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             msfv_wrf,nx_wrf,ny_wrf,fzone_wrf,                          &
             tem3dlg1,nxlg_wrf-1,nylg_wrf)

    DO j=1,ny_wrf-1
      DO i=1,nx_wrf-1
        work3d(i,j,1)=2*omega_ear*SIN(lat_wrf(i,j)*d2rfactor)
        work2d(i,j)  =2*omega_ear*COS(lat_wrf(i,j)*d2rfactor)
      END DO
    END DO

    var_meta%name        = 'F'
    var_meta%fieldType   = WRF_REAL
    var_meta%MemoryOrder = 'XY'
    var_meta%description = 'Coriolis sine latitude term'
    var_meta%units       = 's-1'
    var_meta%stagger     = ''
    var_meta%dimName1    = 'west_east'
    var_meta%dimName2    = 'south_north'
    var_meta%dimName3    = ''

    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             work3d(:,:,1),nx_wrf,ny_wrf,fzone_wrf,                     &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

    var_meta%name        = 'E'
    var_meta%fieldType   = WRF_REAL
    var_meta%MemoryOrder = 'XY'
    var_meta%description = 'Coriolis cosine latitude term'
    var_meta%units       = 's-1'
    var_meta%stagger     = ''
    var_meta%dimName1    = 'west_east'
    var_meta%dimName2    = 'south_north'
    var_meta%dimName3    = ''

    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             work2d,nx_wrf,ny_wrf,fzone_wrf,                            &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

    DO j=1,ny_wrf-1
      DO i=1,nx_wrf-1
        projrot_deg = projrot_latlon(mapproj_wrf,trulat1_wrf,           &
                           trulat2_wrf,trulon_wrf,ctrlat_wrf,ctrlon_wrf,&
                           lat_wrf(i,j),lon_wrf(i,j),istatus)
        IF(istatus == 1)THEN
          work3d(i,j,1)=SIN(d2rfactor*projrot_deg)
          work2d(i,j)  =COS(d2rfactor*projrot_deg)
        ELSE
          CALL wrf_debug(1,'WARNING: Problem in projrot_latlon.')
        END IF
      END DO
    END DO

    var_meta%name        = 'SINALPHA'
    var_meta%fieldType   = WRF_REAL
    var_meta%MemoryOrder = 'XY'
    var_meta%description = 'Local sine of map rotation'
    var_meta%units       = ''
    var_meta%stagger     = ''
    var_meta%dimName1    = 'west_east'
    var_meta%dimName2    = 'south_north'
    var_meta%dimName3    = ''

    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             work3d(:,:,1),nx_wrf,ny_wrf,fzone_wrf,                     &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

    var_meta%name        = 'COSALPHA'
    var_meta%fieldType   = WRF_REAL
    var_meta%MemoryOrder = 'XY'
    var_meta%description = 'Local cosine of map rotation'
    var_meta%units       = ''
    var_meta%stagger     = ''
    var_meta%dimName1    = 'west_east'
    var_meta%dimName2    = 'south_north'
    var_meta%dimName3    = ''

    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             work2d,nx_wrf,ny_wrf,fzone_wrf,                            &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

    !
    !  Terrain height
    !
    var_meta%name        = 'HGT'
    var_meta%fieldType   = WRF_REAL
    var_meta%MemoryOrder = 'XY'
    var_meta%description = 'Terrain Height'
    var_meta%units       = 'm'
    var_meta%stagger     = ''
    var_meta%dimName1    = 'west_east'
    var_meta%dimName2    = 'south_north'
    var_meta%dimName3    = ''

    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             hterain_wrf,nx_wrf,ny_wrf,fzone_wrf,                       &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

!
! Surface skin temperature TSK. ARPS does not provide such variable.
! use tsoil at the first soil layers to represent.
!
    DO j = 1,ny_wrf-1
      DO i = 1,nx_wrf-1
        IF (xland_wrf(i,j) < 1.5) THEN    ! 1 for land, 2 for water
          work2d(i,j) = tsk_wrf(i,j)
        ELSE
          work2d(i,j) = sst_wrf(i,j)
        END IF
      END DO
    END DO

  var_meta%name        = 'TSK'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XY'
  var_meta%description = 'SURFACE SKIN TEMPERATURE'
  var_meta%units       = 'K'
  var_meta%stagger     = ''
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = ''

  CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
           work2d,nx_wrf,ny_wrf,fzone_wrf,                            &
           tem3dlg1,nxlg_wrf-1,nylg_wrf-1)


  work1d(:) = 0.0

  var_meta%name        = 'U_BASE'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'Z'
  var_meta%description = 'BASE STATE X WIND IN IDEALIZED CASES'
  var_meta%units       = ''
  var_meta%stagger     = ''
  var_meta%dimName1    = 'bottom_top'
  var_meta%dimName2    = ''
  var_meta%dimName3    = ''

  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work1d,nz_wrf-1,fzone_wrf)

  var_meta%name        = 'V_BASE'
  var_meta%description = 'BASE STATE Y WIND IN IDEALIZED CASES'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work1d,nz_wrf-1,fzone_wrf)

  var_meta%name        = 'QV_BASE'
  var_meta%description = 'BASE STATE QV IN IDEALIZED CASES'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work1d,nz_wrf-1,fzone_wrf)

  var_meta%name        = 'Z_BASE'
  var_meta%description = 'BASE STATE HEIGHT IN IDEALIZED CASES'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work1d,nz_wrf-1,fzone_wrf)

  var_meta%name        = 'U_FRAME'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = '0'
  var_meta%description = 'FRAME X WIND'
  var_meta%units       = 'm s-1'
  var_meta%stagger     = ''
  var_meta%dimName1    = ''
  var_meta%dimName2    = ''
  var_meta%dimName3    = ''
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work1d,1,fzone_wrf)

  var_meta%name        = 'V_FRAME'
  var_meta%description = 'FRAME Y WIND'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               work1d,1,fzone_wrf)

  !
  ! Vertical mass coordinate parameters
  !
  var_meta%name        = 'P_TOP'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = '0'
  var_meta%description = 'PRESSURE TOP OF THE MODEL'
  var_meta%units       = 'Pa'
  var_meta%stagger     = ''
  var_meta%dimName1    = ''
  var_meta%dimName2    = ''
  var_meta%dimName3    = ''

  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               ptop,1,fzone_wrf)

!-----------------------------------------------------------------------
!
!  Latitude and Longitude variables
!
!-----------------------------------------------------------------------

  !
  ! WRFV2.0.3, Latitude & longitude at corners
  !

  var_meta%fieldType   = WRF_REAL
  var_meta%memoryOrder = '0'
  var_meta%units       = 'degrees'
  var_meta%stagger     = ''
  var_meta%dimName1    = 'ext_scalar'
  var_meta%dimName2    = ''
  var_meta%dimName3    = ''

  !
  ! Latitude, T point
  !

  var_meta%name        = 'LAT_LL_T'
  var_meta%description = 'latitude lower left, temp point'

  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               lat_ll(1),1,fzone_wrf)

  var_meta%name        = 'LAT_UL_T'
  var_meta%description = 'latitude up left, temp point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               lat_ul(1),1,fzone_wrf)

  var_meta%name        = 'LAT_UR_T'
  var_meta%description = 'latitude up right, temp point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               lat_ur(1),1,fzone_wrf)

  var_meta%name        = 'LAT_LR_T'
  var_meta%description = 'latitude lower right, temp point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               lat_lr(1),1,fzone_wrf)

  !
  ! Latitude, U point
  !
  var_meta%name        = 'LAT_LL_U'
  var_meta%description = 'latitude lower left, u point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               lat_ll(2),1,fzone_wrf)

  var_meta%name        = 'LAT_UL_U'
  var_meta%description = 'latitude up left, u point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               lat_ul(2),1,fzone_wrf)

  var_meta%name        = 'LAT_UR_U'
  var_meta%description = 'latitude up right, u point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               lat_ur(2),1,fzone_wrf)

  var_meta%name        = 'LAT_LR_U'
  var_meta%description = 'latitude lower right, u point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               lat_lr(2),1,fzone_wrf)

  !
  ! latitude , V point
  !
  var_meta%name        = 'LAT_LL_V'
  var_meta%description = 'latitude lower left, v point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               lat_ll(3),1,fzone_wrf)

  var_meta%name        = 'LAT_UL_V'
  var_meta%description = 'latitude up left, v point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               lat_ul(3),1,fzone_wrf)

  var_meta%name        = 'LAT_UR_V'
  var_meta%description = 'latitude up right, v point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               lat_ur(3),1,fzone_wrf)

  var_meta%name        = 'LAT_LR_V'
  var_meta%description = 'latitude lower right, v point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               lat_lr(3),1,fzone_wrf)

  !
  ! latitude, massless point
  !
  var_meta%name        = 'LAT_LL_D'
  var_meta%description = 'latitude lower left, massless point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),lat_ll(4),1,fzone_wrf)

  var_meta%name        = 'LAT_UL_D'
  var_meta%description = 'latitude up left, massless point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),lat_ul(4),1,fzone_wrf)

  var_meta%name        = 'LAT_UR_D'
  var_meta%description = 'latitude up right, massless point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),lat_ur(4),1,fzone_wrf)

  var_meta%name        = 'LAT_LR_D'
  var_meta%description = 'latitude lower right, massless point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),lat_lr(4),1,fzone_wrf)


  !
  ! longitude, T point
  !

  var_meta%name        = 'LON_LL_T'
  var_meta%description = 'longitude lower left, temp point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               LON_ll(1),1,fzone_wrf)

  var_meta%name        = 'LON_UL_T'
  var_meta%description = 'longitude up left, temp point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               LON_ul(1),1,fzone_wrf)

  var_meta%name        = 'LON_UR_T'
  var_meta%description = 'longitude up right, temp point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               LON_ur(1),1,fzone_wrf)

  var_meta%name        = 'LON_LR_T'
  var_meta%description = 'longitude lower right, temp point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               LON_lr(1),1,fzone_wrf)

  !
  ! longitude, U point
  !

  var_meta%name        = 'LON_LL_U'
  var_meta%description = 'longitude lower left, u point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               LON_ll(2),1,fzone_wrf)

  var_meta%name        = 'LON_UL_U'
  var_meta%description = 'longitude up left, u point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               LON_ul(2),1,fzone_wrf)

  var_meta%name        = 'LON_UR_U'
  var_meta%description = 'longitude up right, u point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               LON_ur(2),1,fzone_wrf)

  var_meta%name        = 'LON_LR_U'
  var_meta%description = 'longitude lower right, u point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               LON_lr(2),1,fzone_wrf)

  !
  ! longitude , V point
  !
  var_meta%name        = 'LON_LL_V'
  var_meta%description = 'longitude lower left, v point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               LON_ll(3),1,fzone_wrf)

  var_meta%name        = 'LON_UL_V'
  var_meta%description = 'longitude up left, v point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               LON_ul(3),1,fzone_wrf)

  var_meta%name        = 'LON_UR_V'
  var_meta%description = 'longitude up right, v point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               LON_ur(3),1,fzone_wrf)

  var_meta%name        = 'LON_LR_V'
  var_meta%description = 'longitude lower right, v point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),               &
               LON_lr(3),1,fzone_wrf)

  !
  ! longitude, massless point
  !
  var_meta%name        = 'LON_LL_D'
  var_meta%description = 'longitude lower left, massless point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),LON_ll(4),1,fzone_wrf)

  var_meta%name        = 'LON_UL_D'
  var_meta%description = 'longitude up left, massless point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),LON_ul(4),1,fzone_wrf)

  var_meta%name        = 'LON_UR_D'
  var_meta%description = 'longitude up right, massless point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),LON_ur(4),1,fzone_wrf)

  var_meta%name        = 'LON_LR_D'
  var_meta%description = 'longitude lower right, massless point'
  CALL write1d(FileHandler,io_form,var_meta,DateStr(1:19),LON_lr(4),1,fzone_wrf)

  !
  !  WRF latitude and longitude
  !
  var_meta%name        = 'XLAT'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XY'
  var_meta%description = 'LATITUDE, SOUTH IS NEGATIVE'
  var_meta%units       = 'degree_north'
  var_meta%stagger     = ''
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = ''

  CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               lat_wrf,nx_wrf,ny_wrf,fzone_wrf,                         &
               tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

  var_meta%name        = 'XLONG'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XY'
  var_meta%description = 'LONGITUDE, WEST IS NEGATIVE'
  var_meta%units       = 'degree_east'
  var_meta%stagger     = ''
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = ''

  CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),              &
               lon_wrf,nx_wrf,ny_wrf,fzone_wrf,                         &
               tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

!-----------------------------------------------------------------------
!
! Misc. surface variables
!
!-----------------------------------------------------------------------

  var_meta%name        = 'ALBBCK'
  var_meta%fieldType   = WRF_REAL
  var_meta%MemoryOrder = 'XY'
  var_meta%description = 'BACKGROUND ALBEDO'
  var_meta%units       = ''
  var_meta%stagger     = ''
  var_meta%dimName1    = 'west_east'
  var_meta%dimName2    = 'south_north'
  var_meta%dimName3    = ''

  CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),             &
               albbck_wrf,nx_wrf,ny_wrf,fzone_wrf,                     &
               tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

!  IF (tmn_wrf(1,1) >= 0) THEN
!    work2d(:,:) = tmn_wrf(:,:)
!  ELSE
    !
    ! Soil temperature at lower boundary, use tsoil at top layer
    !
    DO j = 1,ny_wrf-1
      DO i = 1,nx_wrf-1
        IF (xland_wrf(i,j) < 1.5) THEN    ! 1 for land, 2 for water
          work2d(i,j) = tsk_wrf(i,j)
        ELSE
          work2d(i,j) = sst_wrf(i,j)
        END IF
      END DO
    END DO
!  END IF

    var_meta%name        = 'TMN'
    var_meta%fieldType   = WRF_REAL
    var_meta%MemoryOrder = 'XY'
    var_meta%description = 'SOIL TEMPERATURE AT LOWER BOUNDARY'
    var_meta%units       = 'K'
    var_meta%stagger     = ''
    var_meta%dimName1    = 'west_east'
    var_meta%dimName2    = 'south_north'
    var_meta%dimName3    = ''

    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             work2d,nx_wrf,ny_wrf,fzone_wrf,                            &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

    var_meta%name        = 'XLAND'
    var_meta%fieldType   = WRF_REAL
    var_meta%MemoryOrder = 'XY'
    var_meta%description = 'LAND MASK (1 FOR LAND, 2 FOR WATER)'
    var_meta%units       = ''
    var_meta%stagger     = ''
    var_meta%dimName1    = 'west_east'
    var_meta%dimName2    = 'south_north'
    var_meta%dimName3    = ''

    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             xland_wrf,nx_wrf,ny_wrf,fzone_wrf,                         &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

    var_meta%name        = 'SNOWC'
    var_meta%fieldType   = WRF_REAL
    var_meta%MemoryOrder = 'XY'
    var_meta%description = 'FLAG INDICATING SNOW COVERAGE (1 FOR SNOW COVER)'
    var_meta%units       = ''
    var_meta%stagger     = ''
    var_meta%dimName1    = 'west_east'
    var_meta%dimName2    = 'south_north'
    var_meta%dimName3    = ''

    CALL write2d(FileHandler,io_form,var_meta,DateStr(1:19),            &
             snowc,nx_wrf,ny_wrf,fzone_wrf,                             &
             tem3dlg1,nxlg_wrf-1,nylg_wrf-1)

  DEALLOCATE(snowc,                             STAT = istatus) 
  DEALLOCATE(dnw, rdnw, dn, rdn, fnp, fnm,      STAT = istatus)
  DEALLOCATE(tem3dlg1, tem3dlg2,                STAT = istatus) 

  RETURN
END SUBROUTINE write_wrf_input
!
!##################################################################
!##################################################################
!######                                                      ######
!######               SUBROUTINE write_wrf_namelist          ######
!######                                                      ######
!######                     Developed by                     ######
!######     Center for Analysis and Prediction of Storms     ######
!######                University of Oklahoma                ######
!######                                                      ######
!##################################################################
!##################################################################
!

SUBROUTINE write_wrf_namelist(nchout,filename,io_form,                  &,5
                   nx_wrf,ny_wrf,nz_wrf,nzsoil_wrf,nxlg_wrf,nylg_wrf,   &
                   dx_wrf,dy_wrf,dt,spec_bdy_width,                     &
                   eyear,emonth,eday,ehour,eminute,esecond,tintv_bdyin, &
                   syear,smonth,sday,shour,sminute,ssecond,             & 
                   mp_physics,ra_lw_physics,ra_sw_physics,sf_sfclay_physics, &
                   sf_surface_physics,bl_pbl_physics,cu_physics,        &
                   diff_opt,km_opt,khdif,kvdif,nprocx_wrf,nprocy_wrf,   &
                   istatus)

!-----------------------------------------------------------------------
!
! PURPOSE
!     Write out WRF namelist file
!
!-----------------------------------------------------------------------

  USE wrf_metadata

  IMPLICIT NONE

  INTEGER, INTENT(OUT)     :: nchout
  CHARACTER(*), INTENT(IN) :: filename
  INTEGER, INTENT(IN)      :: io_form
  INTEGER, INTENT(IN)      :: nx_wrf, ny_wrf, nz_wrf
  INTEGER, INTENT(IN)      :: nzsoil_wrf
  INTEGER, INTENT(IN)      :: nxlg_wrf, nylg_wrf
  REAL,    INTENT(IN)      :: dx_wrf, dy_wrf
  REAL,    INTENT(IN)      :: dt
  INTEGER, INTENT(IN)      :: spec_bdy_width
  INTEGER, INTENT(IN)      :: tintv_bdyin
  INTEGER, INTENT(IN)      :: syear, smonth, sday, shour, sminute, ssecond
  INTEGER, INTENT(IN)      :: eyear, emonth, eday, ehour, eminute, esecond
  INTEGER, INTENT(IN)      :: mp_physics
  INTEGER, INTENT(IN)      :: ra_lw_physics,ra_sw_physics
  INTEGER, INTENT(IN)      :: sf_sfclay_physics, sf_surface_physics
  INTEGER, INTENT(IN)      :: bl_pbl_physics
  INTEGER, INTENT(IN)      :: cu_physics
  INTEGER, INTENT(IN)      :: diff_opt,km_opt
  REAL,    INTENT(IN)      :: khdif,kvdif
  INTEGER, INTENT(IN)      :: nprocx_wrf,nprocy_wrf
  INTEGER, INTENT(OUT)     :: istatus

!-----------------------------------------------------------------------
!
! Misc. local variables
!
!-----------------------------------------------------------------------

  INTEGER :: abstime, abstime1
  INTEGER :: rday, rhour, rmin, rsec

  INTEGER :: io_form_wrf

!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Begin of executable code
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  SELECT CASE ( io_form )
  CASE ( IO_INT )
    io_form_wrf = IO_INT_WRF
  CASE ( IO_PHDF5 )
    io_form_wrf = IO_PHDF5_WRF
  CASE ( IO_NET )
    io_form_wrf = IO_NET_WRF
  CASE DEFAULT
    io_form_wrf = 0           ! should not be here
  END SELECT

  !
  ! get the end date and time
  !
  CALL ctim2abss( eyear,emonth,eday,ehour,eminute,esecond, abstime )
  abstime = abstime + tintv_bdyin
  CALL abss2ctim( abstime, eyear, emonth, eday, ehour, eminute, esecond )

  !
  ! get the initial date and time from saved variables
  !
  CALL ctim2abss( syear,smonth,sday,shour,sminute,ssecond, abstime1 )

  !
  ! Compute the run time in days, hours, minutes and seconds
  ! 
  ! NOTE: abstime and abstime1 are used as temporary variables below
  !
  abstime = abstime - abstime1      ! run time in seconds
  rday    = abstime/(24*3600)
  abstime1= MOD(abstime, 24*3600)   ! remain seconds < one day
  rhour   = abstime1 / 3600
  abstime1= MOD(abstime1,3600)      ! remain seconds < one hour 
  rmin    = abstime1 / 60           
  rsec    = MOD(abstime1, 60)
    
!-----------------------------------------------------------------------
!
! Generate a namelist file for WRF version 2.0.3
!
!-----------------------------------------------------------------------

  CALL getunit( nchout )

  OPEN(nchout,FILE=filename, STATUS='UNKNOWN')

  WRITE(6,'(/a)') ' Generating namelist for WRF version 2.1 ...'

  WRITE(nchout,'(a)') '!'
  WRITE(nchout,'(a)') '! Autogenerated namelist for WRF 2.1 from ARPS2WRF.'
  WRITE(nchout,'(a)') '! The variables are in three categories'
  WRITE(nchout,'(a)') '!'
  WRITE(nchout,'(a)') '!     1. WRF defaults, need to be checked/changed before run WRF'
  WRITE(nchout,'(a)') '!     2. ARPS2WRF determined, may be checked/changed before run WRF'
  WRITE(nchout,'(a)') '!     3. Must NOT changed because wrfinput was created based on them.'
  WRITE(nchout,'(a)') '!        -- Capitalized'
  WRITE(nchout,'(a)') '!'
  WRITE(nchout,'(a)') '! For detailed instructions, '
  WRITE(nchout,'(a)') '! see http://www.mmm.ucar.edu/wrf/users/wrfv2/wrf-namelist.html.'
  WRITE(nchout,'(a)') '!'

  WRITE(nchout,'(a   )')     '&time_control'
  WRITE(nchout,'(a,I8,a)')   '   run_days               = ',rday,','
  WRITE(nchout,'(a,I8,a)')   '   run_hours              = ',rhour,','
  WRITE(nchout,'(a,I8,a)')   '   run_minutes            = ',rmin,','
  WRITE(nchout,'(a,I8,a)')   '   run_seconds            = ',rsec,','
  WRITE(nchout,'(a,I8,a)')   '   START_YEAR             = ',syear,  ',    2001,    2001,'
  WRITE(nchout,'(a,I8,a)')   '   START_MONTH            = ',smonth, ',      06,      06,'
  WRITE(nchout,'(a,I8,a)')   '   START_DAY              = ',sday,   ',      11,      11,'
  WRITE(nchout,'(a,I8,a)')   '   START_HOUR             = ',shour,  ',      12,      12,'
  WRITE(nchout,'(a,I8,a)')   '   START_MINUTE           = ',sminute,',      00,      00,'
  WRITE(nchout,'(a,I8,a)')   '   START_SECOND           = ',ssecond,',      00,      00,'
  WRITE(nchout,'(a,I8,a)')   '   end_year               = ',eyear,   ',    2001,    2001,'
  WRITE(nchout,'(a,I8,a)')   '   end_month              = ',emonth,  ',      06,      06,'
  WRITE(nchout,'(a,I8,a)')   '   end_day                = ',eday,    ',      12,      12,'
  WRITE(nchout,'(a,I8,a)')   '   end_hour               = ',ehour,   ',      12,      12,'
  WRITE(nchout,'(a,I8,a)')   '   end_minute             = ',eminute, ',      00,      00,'
  WRITE(nchout,'(a,I8,a)')   '   end_second             = ',esecond, ',      00,      00,'
  WRITE(nchout,'(a,I8,a)')   '   interval_seconds       = ',Tintv_bdyin,','
  WRITE(nchout,'(a,a)')      '   input_from_file        =   .TRUE., .FALSE., .FALSE.,'
  WRITE(nchout,'(a   )')     '   history_interval       =       60,      30,      30,        ! minutes'
  WRITE(nchout,'(a   )')     '   frames_per_outfile     =        1,       1,       1,'
  WRITE(nchout,'(a   )')     '   restart                =  .FALSE.,'
  WRITE(nchout,'(a   )')     '   restart_interval       =     5000,'
  WRITE(nchout,'(a   )')     '   io_form_history        =        2,'
  WRITE(nchout,'(a   )')     '   io_form_restart        =        2,'
  WRITE(nchout,'(a,I8,a)')   '   IO_FORM_INPUT          = ',io_form_wrf,','

  WRITE(nchout,'(a,I8,a)')   '   IO_FORM_BOUNDARY       = ',io_form_wrf,','
  WRITE(nchout,'(a   )')     '   debug_level            =        0,'
  WRITE(nchout,'(a  /)')     '/'

  WRITE(nchout,'(a   )')     '&domains'
  WRITE(nchout,'(a,I8,a)')   '   time_step              = ',INT(dt),',                          ! seconds'
  WRITE(nchout,'(a   )')     '   time_step_fract_num    =        0,'
  WRITE(nchout,'(a   )')     '   time_step_fract_den    =        1,'
  WRITE(nchout,'(a   )')     '   max_dom                =        1,'
  WRITE(nchout,'(a   )')     '   S_WE                   =        1,       1,       1,'
  WRITE(nchout,'(a,I8,a)')   '   E_WE                   = ',nxlg_wrf,',      97,      91,'
  WRITE(nchout,'(a   )')     '   S_SN                   =        1,       1,       1,'
  WRITE(nchout,'(a,I8,a)')   '   E_SN                   = ',nylg_wrf,',     112,      94,'
  WRITE(nchout,'(a   )')     '   S_VERT                 =        1,       1,       1,'
  WRITE(nchout,'(a,3(I8,a))')'   E_VERT                 = ',nz_wrf,',',nz_wrf,',',nz_wrf,','
  WRITE(nchout,'(a,F10.2,a)')'   DX                     = ',dx_wrf,',    3333,    1111,'
  WRITE(nchout,'(a,F10.2,a)')'   DY                     = ',dy_wrf,',    3333,    1111,'
  WRITE(nchout,'(a   )')     '   grid_id                =        1,       2,       3,'
!  WRITE(nchout,'(a   )')     '   level                  =        1,       2,       3,'
  WRITE(nchout,'(a   )')     '   parent_id              =        0,       1,       2,'
  WRITE(nchout,'(a   )')     '   i_parent_start         =        0,      30,      30,'
  WRITE(nchout,'(a   )')     '   j_parent_start         =        0,      20,      30,'
  WRITE(nchout,'(a   )')     '   parent_grid_ratio      =        1,       3,       3,'
  WRITE(nchout,'(a   )')     '   parent_time_step_ratio =        1,       3,       3,'
  WRITE(nchout,'(a   )')     '   feedback               =        1,'
  WRITE(nchout,'(a   )')     '   smooth_option          =        0,'
  WRITE(nchout,'(a,I8,a)')   '   nproc_x                = ',nprocx_wrf,','
  WRITE(nchout,'(a,I8,a)')   '   nproc_y                = ',nprocy_wrf,','
  WRITE(nchout,'(a  /)')     '/'

  WRITE(nchout,'(a   )')     '&physics'
  WRITE(nchout,'(a,I8,a)')   '   MP_PHYSICS             = ',mp_physics,   ',       2,       2,'
  WRITE(nchout,'(a   )')     '   mp_zero_out            =        0,'
  WRITE(nchout,'(a   )')     '   mp_zero_out_thresh     =    1.e-8,'
  WRITE(nchout,'(a,I8,a)')   '   ra_lw_physics          = ',ra_lw_physics,',       1,       1,'
  WRITE(nchout,'(a,I8,a)')   '   ra_sw_physics          = ',ra_sw_physics,',       1,       1,'
  WRITE(nchout,'(a     )')   '   radt                   =       10,      10,      10,             ! minutes'
  WRITE(nchout,'(a,I8,a)')   '   sf_sfclay_physics      = ',sf_sfclay_physics, ',       1,       1,'
  WRITE(nchout,'(a,I8,a)')   '   SF_SURFACE_PHYSICS     = ',sf_surface_physics,',       2,       2,'
  WRITE(nchout,'(a,I8,a)')   '   bl_pbl_physics         = ',bl_pbl_physics,    ',       1,       1,'
  WRITE(nchout,'(a     )')   '   bldt                   =        0,       0,       0,             ! minutes'
  WRITE(nchout,'(a,I8,a)')   '   cu_physics             = ',cu_physics,',       1,       0,'
  WRITE(nchout,'(a     )')   '   cudt                   =        5,       5,       5,             ! minutes'
  WRITE(nchout,'(a   )')     '   isfflx                 =        1,'
  WRITE(nchout,'(a   )')     '   ifsnow                 =        0,'
  WRITE(nchout,'(a   )')     '   icloud                 =        1,'
  WRITE(nchout,'(a   )')     '   surface_input_source   =        1,'
  WRITE(nchout,'(a,I8,a)')   '   NUM_SOIL_LAYERS        = ',nzsoil_wrf,','
  WRITE(nchout,'(a     )')   '   maxiens                =        1,'
  WRITE(nchout,'(a     )')   '   maxens                 =        3,'
  WRITE(nchout,'(a     )')   '   maxens2                =        3,'
  WRITE(nchout,'(a     )')   '   maxens3                =       16,'
  WRITE(nchout,'(a     )')   '   ensdim                 =      144,'
  WRITE(nchout,'(a  /)')     '/'

  WRITE(nchout,'(a   )')     '&dynamics'
!  WRITE(nchout,'(a   )')     '   DYN_OPT                =        2,'
!  WRITE(nchout,'(a   )')     '   rk_ord                 =        3,'
  WRITE(nchout,'(a     )')   '   w_damping              =        0,'
  WRITE(nchout,'(a,I8,a)')   '   diff_opt               = ',diff_opt,','
  WRITE(nchout,'(a,I8,a)')   '   km_opt                 = ',km_opt,  ','
!  WRITE(nchout,'(a     )')   '   damp_opt               =        0,'
!  WRITE(nchout,'(a     )')   '   zdamp                  =    5000.,   5000.,   5000.,'
!  WRITE(nchout,'(a     )')   '   dampcoef               =      0.2,     0.2,     0.2,'
  WRITE(nchout,'(a,F8.2,a)') '   base_temp              = ',base_temp,','
  WRITE(nchout,'(a,F8.2,a)') '   khdif                  = ',khdif,',     0.0,     0.0,'
  WRITE(nchout,'(a,F8.2,a)') '   kvdif                  = ',kvdif,',     0.0,     0.0,'
!  WRITE(nchout,'(a   )')     '   smdiv                  =      0.1,     0.1,     0.1,'
!  WRITE(nchout,'(a   )')     '   emdiv                  =     0.01,    0.01,    0.01,'
!  WRITE(nchout,'(a   )')     '   epssm                  =      0.1,     0.1,     0.1,'
  WRITE(nchout,'(a   )')     '   non_hydrostatic        =   .TRUE.,  .TRUE.,  .TRUE.,'
!  WRITE(nchout,'(a   )')     '   time_step_sound        =        4,       4,       4,'
!  WRITE(nchout,'(a   )')     '   h_mom_adv_order        =        5,       5,       5,'
!  WRITE(nchout,'(a   )')     '   v_mom_adv_order        =        3,       3,       3,'
!  WRITE(nchout,'(a   )')     '   h_sca_adv_order        =        5,       5,       5,'
!  WRITE(nchout,'(a   )')     '   v_sca_adv_order        =        3,       3,       3,'
  WRITE(nchout,'(a  /)')     '/'

  WRITE(nchout,'(a   )')     '&bdy_control'
  WRITE(nchout,'(a,I8,a)')   '   SPEC_BDY_WIDTH         = ',spec_bdy_width,','
  WRITE(nchout,'(a   )')     '   spec_zone              =        1,'
  WRITE(nchout,'(a,I8,a)')   '   relax_zone             = ',spec_bdy_width-1,','
  WRITE(nchout,'(a   )')     '   specified              =   .TRUE., .FALSE., .FALSE.,'
!  WRITE(nchout,'(a   )')     '   periodic_x             =  .FALSE., .FALSE., .FALSE.,'
!  WRITE(nchout,'(a   )')     '   symmetric_xs           =  .FALSE., .FALSE., .FALSE.,'
!  WRITE(nchout,'(a   )')     '   symmetric_xe           =  .FALSE., .FALSE., .FALSE.,'
!  WRITE(nchout,'(a   )')     '   open_xs                =  .FALSE., .FALSE., .FALSE.,'
!  WRITE(nchout,'(a   )')     '   open_xe                =  .FALSE., .FALSE., .FALSE.,'
!  WRITE(nchout,'(a   )')     '   periodic_y             =  .FALSE., .FALSE., .FALSE.,'
!  WRITE(nchout,'(a   )')     '   symmetric_ys           =  .FALSE., .FALSE., .FALSE.,'
!  WRITE(nchout,'(a   )')     '   symmetric_ye           =  .FALSE., .FALSE., .FALSE.,'
!  WRITE(nchout,'(a   )')     '   open_ys                =  .FALSE., .FALSE., .FALSE.,'
!  WRITE(nchout,'(a   )')     '   open_ye                =  .FALSE., .FALSE., .FALSE.,'
  WRITE(nchout,'(a   )')     '   nested                 =  .FALSE.,  .TRUE.,  .TRUE.,'
  WRITE(nchout,'(a  /)')     '/'

  WRITE(nchout,'(a   )')     '&namelist_quilt'
  WRITE(nchout,'(a   )')     '   nio_tasks_per_group      =        0,'
  WRITE(nchout,'(a   )')     '   nio_groups               =        1,'
  WRITE(nchout,'(a  /)')     '/'

  CLOSE(nchout)

  CALL retunit (nchout )

  istatus = 0
  RETURN
END SUBROUTINE write_wrf_namelist