MCIP Nested Domains

The standard way is to use M3Tools program m3cple: do repeated runs using the same output file, starting with the first CONC file in the set.

I would take a look at the while date loop in the cctm run script and implement it in your bcon run script.

set TODAYG = ${START_DATE}
set TODAYJ = `date -ud "${START_DATE}" +%Y%j` #> Convert YYYY-MM-DD to YYYYJJJ
set START_DAY = ${TODAYJ}
set STOP_DAY = `date -ud "${END_DATE}" +%Y%j` #> Convert YYYY-MM-DD to YYYYJJJ
set NDAYS = 0

while ($TODAYJ <= $STOP_DAY )  #>Compare dates in terms of YYYYJJJ


....


  #> Increment both Gregorian and Julian Days
  set TODAYG = `date -ud "${TODAYG}+1days" +%Y-%m-%d` #> Add a day for tomorrow
  set TODAYJ = `date -ud "${TODAYG}" +%Y%j` #> Convert YYYY-MM-DD to YYYYJJJ

end  #Loop to the next Simulation Day
2 Likes

Sorry meant to post this earlier but I was able to get this working using the m3cple tool.

Hello, sir. I have the same question. I set up a nested domain in WRF with 3 domains and I get the error:
Compiler is set to gcc
Tue Sep 7 15:05:15 CST 2021
if: Expression Syntax.
But I didn’t change the code of run_mcip.csh. Sorry, I can’t upload attachments, my script is bellow.
Thanks,
Zhang Yu

*#!/bin/csh -f *

#------------------------------------------------------------------------------#
# The Community Multiscale Air Quality (CMAQ) system software is in #
# continuous development by various groups and is based on information #
# from these groups: Federal Government employees, contractors working #
# within a United States Government contract, and non-Federal sources #
# including research institutions. These groups give the Government #
# permission to use, prepare derivative works of, and distribute copies #
# of their work in the CMAQ system to the public and to permit others #
# to do so. The United States Environmental Protection Agency #
# therefore grants similar permission to use the CMAQ system software, #
# but users are requested to provide copies of derivative works or #
# products designed to operate in the CMAQ system to the United States #
# Government without restrictions as to use by others. Software #
# that is used with the CMAQ system but distributed under the GNU #
# General Public License or the GNU Lesser General Public License is #
# subject to their copyright restrictions. #
#------------------------------------------------------------------------------#

#=======================================================================
#
# Script: run.mcip
# Purpose: Runs Models-3/CMAQ Meteorology-Chemistry Interface
# Processor. Part of the US EPA’s Models-3/CMAQ system.
# Method: In UNIX/Linux: run.mcip >&! mcip.log
# Revised: See README.revisions
#=======================================================================

#-----------------------------------------------------------------------
# Set identification for input and output files.
#
# APPL = Application Name (tag for MCIP output file names)
# CoordName = Coordinate system name for GRIDDESC
# GridName = Grid Name descriptor for GRIDDESC
# InMetDir = Directory that contains input meteorology files
# InTerDir = Directory that contains input MM5 “TERRAIN” file or
# WRF Preprocessing System “GEOGRID” file. (Used for
# providing fractional land-use categories. For MM5,
# it will only work if IEXTRA was set to TRUE in
# MM5’s TERRAIN program. Is TRUE for P-X simulations.
# Not needed for WRF if “LANDUSEF” is part of history
# file.)
# InSatDir = Directory that contains GOES satellite files. (Used
# with satellite processing from UAH; otherwise leave
# blank.)
# OutDir = Directory to write MCIP output files
# ProgDir = Directory that contains the MCIP executable
# WorkDir = Working Directory for Fortran links and namelist
#-----------------------------------------------------------------------

set CMAQ_HOME = /home/rain/Build_CMAQ/CMAQ_Project
set CMAQ_DATA = /home/rain/Build_CMAQ/CMAQ_Project/data
source $CMAQ_HOME/config_cmaq.csh gcc

*set APPL = 110702 *
set CoordName = LamCon_40N_97W # 16-character maximum
set GridName = SE52BENCH # 16-character maximum

set DataPath = $CMAQ_DATA
set InMetDir = $DataPath/wrf
set InTerDir = $DataPath/wrf
set InSatDir = $DataPath/goes
set OutDir = $CMAQ_DATA/mcip/$GridName
set ProgDir = $CMAQ_HOME/PREP/mcip/src
set WorkDir = $OutDir

#-----------------------------------------------------------------------
# Set name(s) of input meteorology file(s)
#
# File name(s) must be set inside parentheses since “InMetFiles” is
# a C-shell script array. Multiple file names should be space-
# delimited. Additional lines can be used when separated by a
# back-slash () continuation marker. The file names can be as
# they appear on your system; MCIP will link the files in by a
# Fortran unit number and the explicit name via a namelist. The
# files must be listed in chronological order. The maximum number
# of input meteorology files must be less than or equal to the number
# in MAX_MM in file_mod.F (default is 367).
#
# Example:
*# set InMetFiles = ( $InMetDir/MMOUT_DOMAIN2.time1 *
# $InMetDir/MMOUT_DOMAIN2.time2 )
#
#-----------------------------------------------------------------------

*set InMetFiles = ( $InMetDir/wrfout_d01_2020-06-16_18:00:00 *

  •               $InMetDir/wrfout_d02_2020-06-16_18:00:00 \*
    
  •               $InMetDir/wrfout_d03_2020-06-16_18:00:00 )*
    

set IfTer = “T”
*set InTerFile = ( $InTerDir/geo_em.d01.nc *

  •               $InTerDir/geo_em.d02.nc \*
    
  •               $InTerDir/geo_em.d03.nc )*
    

set InSatFiles = ( )

#-----------------------------------------------------------------------
# Set user control options.
#
# LPV: 0 = Do not compute and output potential vorticity
# 1 = Compute and output potential vorticity
#
# LWOUT: 0 = Do not output vertical velocity
# 1 = Output vertical velocity
#
# LUVCOUT: 0 = Do not output u- and v-component winds on C-grid
# 1 = Output u- and v-component winds on C-grid
#
# LSAT: 0 = No satellite input is available (default)
# 1 = GOES observed cloud info replaces model-derived input
#-----------------------------------------------------------------------

set LPV = 0
set LWOUT = 0
set LUVCOUT = 0
set LSAT = 0

#-----------------------------------------------------------------------
# Set run start and end date. (YYYY-MO-DD-HH:MI:SS.SSSS)
# MCIP_START: First date and time to be output [UTC]
# MCIP_END: Last date and time to be output [UTC]
# INTVL: Frequency of output [minutes]
#-----------------------------------------------------------------------

set MCIP_START = 2020-06-17-00:00:00.0000 # [UTC]
set MCIP_END = 2020-06-18-00:00:00.0000 # [UTC]

set INTVL = 60 # [min]

#-----------------------------------------------------------------------
*# Set CTM layers. Should be in descending order starting at 1 and *
# ending with 0. There is currently a maximum of 100 layers allowed.
# To use all of the layers from the input meteorology without
# collapsing (or explicitly specifying), set CTMLAYS = -1.0.
#-----------------------------------------------------------------------

set CTMLAYS = “-1.0”
*#set CTMLAYS = "1.000, 0.997, 0.993, 0.988, 0.980, 0.970, 0.960, 0.950, 0.930, *

  •          #0.910, 0.890, 0.870, 0.840, 0.800, 0.760, 0.720, 0.680, 0.640, \*
    
  •          #0.600, 0.550, 0.450, 0.350, 0.250, 0.150, 0.060, 0.000"*
    

#-----------------------------------------------------------------------
# Determine whether or not static output (GRID) files will be created.
#-----------------------------------------------------------------------

set MKGRID = T

#-----------------------------------------------------------------------
# Set number of meteorology “boundary” points to remove on each of four
# horizontal sides of MCIP domain. This affects the output MCIP domain
# dimensions by reducing meteorology domain by 2BTRIM + 2NTHIK + 1,
# where NTHIK is the lateral boundary thickness (in BDY files), and the
# extra point reflects conversion from grid points (dot points) to grid
# cells (cross points). Setting BTRIM = 0 will use maximum of input
# meteorology. To remove MM5 lateral boundaries, set BTRIM = 5.
#
# *** If windowing a specific subset domain of input meteorology, set
# BTRIM = -1, and BTRIM will be ignored in favor of specific window
# information in X0, Y0, NCOLS, and NROWS.
#-----------------------------------------------------------------------

set BTRIM = 0

#-----------------------------------------------------------------------
# Define MCIP subset domain. (Only used if BTRIM = -1. Otherwise,
# the following variables will be set automatically from BTRIM and
# size of input meteorology fields.)
# X0: X-coordinate of lower-left corner of full MCIP “X” domain
# (including MCIP lateral boundary) based on input MM5 domain.
# X0 refers to the east-west dimension. Minimum value is 1.
# Y0: Y-coordinate of lower-left corner of full MCIP “X” domain
# (including MCIP lateral boundary) based on input MM5 domain.
# Y0 refers to the north-south dimension. Minimum value is 1.
# NCOLS: Number of columns in output MCIP domain (excluding MCIP
# lateral boundaries).
# NROWS: Number of rows in output MCIP domain (excluding MCIP
# lateral boundaries).
#-----------------------------------------------------------------------

*set X0 = 6 *
set Y0 = 6
set NCOLS = 72
set NROWS = 100

#-----------------------------------------------------------------------
# Set coordinates for cell for diagnostic prints on output domain.
# If coordinate is set to 0, domain center cell will be used.
#-----------------------------------------------------------------------

set LPRT_COL = 0
set LPRT_ROW = 0

#-----------------------------------------------------------------------
# Optional: Set WRF Lambert conformal reference latitude.
# (Handy for matching WRF grids to existing MM5 grids.)
# If not set, MCIP will use average of two true latitudes.
# To “unset” this variable, set the script variable to “-999.0”.
# Alternatively, if the script variable is removed here, remove it
# from the setting of the namelist (toward the end of the script).
#-----------------------------------------------------------------------

set WRF_LC_REF_LAT = -999.0

#=======================================================================
#=======================================================================
# Set up and run MCIP.
# Should not need to change anything below here.
#=======================================================================
#=======================================================================

set PROG = mcip

date

#-----------------------------------------------------------------------
# Make sure directories exist.
#-----------------------------------------------------------------------

if ( ! -d $InMetDir ) then

  • echo “No such input directory $InMetDir”*
  • exit 1*
    endif

if ( ! -d $OutDir ) then

  • echo “No such output directory…will try to create one”*
  • mkdir -p $OutDir*
  • if ( $status != 0 ) then*
  • echo “Failed to make output directory, $OutDir”*
  • exit 1*
  • endif*
    endif

if ( ! -d $ProgDir ) then

  • echo “No such program directory $ProgDir”*
  • exit 1*
    endif

if ( $LSAT == 1 ) then

  • if ( ! -d $InSatDir ) then*
  • echo “No such satellite input directory $InSatDir”*
  • exit 1*
  • endif*
    endif

#-----------------------------------------------------------------------
# Make sure the input files exist.
#-----------------------------------------------------------------------

if ( $IfTer == “T” ) then

  • if ( ! -f $InTerFile ) then*
  • echo “No such input file $InTerFile”*
  • exit 1*
  • endif*
    endif

foreach fil ( $InMetFiles )

  • if ( ! -f $fil ) then*
  • echo “No such input file $fil”*
  • exit 1*
  • endif*
    end

if ( $LSAT == 1 ) then

  • foreach fil ( $InSatFiles )*
  • if ( ! -f $fil ) then*
  •  echo "No such input file $fil"*
    
  •  exit 1*
    
  • endif*
  • end*
    endif

#-----------------------------------------------------------------------
# Make sure the executable exists.
#-----------------------------------------------------------------------

if ( ! -f ProgDir/{PROG}.exe ) then

  • echo “Could not find ${PROG}.exe”*
  • exit 1*
    endif

#-----------------------------------------------------------------------
# Create a work directory for this job.
#-----------------------------------------------------------------------

if ( ! -d $WorkDir ) then

  • mkdir -p $WorkDir*
  • if ( $status != 0 ) then*
  • echo “Failed to make work directory, $WorkDir”*
  • exit 1*
  • endif*
    endif

cd $WorkDir

#-----------------------------------------------------------------------
# Set up script variables for input files.
#-----------------------------------------------------------------------

if ( $IfTer == “T” ) then

  • if ( -f $InTerFile ) then*
  • set InTer = $InTerFile*
  • else*
  • set InTer = “no_file”*
  • endif*
    else
  • set InTer = “no_file”*
    endif

set FILE_GD = $OutDir/GRIDDESC
set FILE_HDR = OutDir/mmheader.{APPL}

#-----------------------------------------------------------------------
# Create namelist with user definitions.
#-----------------------------------------------------------------------

set MACHTYPE = uname
if ( ( $MACHTYPE == “AIX” ) || ( $MACHTYPE == “Darwin” ) ) then

  • set Marker = “/”*
    else
  • set Marker = “&END”*
    endif

cat > WorkDir/namelist.{PROG} << !

  • &FILENAMES*
  • file_gd = “$FILE_GD”*
  • file_hdr = “$FILE_HDR”*
  • file_mm = “$InMetFiles[1]”,*
    !

if ( $#InMetFiles > 1 ) then

  • @ nn = 2*
  • while ( nn <= #InMetFiles )*
  • cat >> WorkDir/namelist.{PROG} << !*
  •           "$InMetFiles[$nn]",*
    

!

  • @ nn ++*
  • end*
    endif

if ( $IfTer == “T” ) then
cat >> WorkDir/namelist.{PROG} << !

  • file_ter = “$InTer”*
    !
    endif

if ( $LSAT == 1 ) then

  • cat >> WorkDir/namelist.{PROG} << !*
  • file_sat = “$InSatFiles[1]”,*
    !
  • if ( $#InSatFiles > 1 ) then*
  • @ nn = 2*
  • while ( nn <= #InSatFiles )*
  •  cat >> $WorkDir/namelist.${PROG} << !*
    
  •           "$InSatFiles[$nn]",*
    

!

  •  @ nn ++*
    
  • end*
  • endif*
    endif

cat >> WorkDir/namelist.{PROG} << !

  • makegrid = .${MKGRID}.*

  • $Marker*

  • &USERDEFS*

  • lpv = $LPV*

  • lwout = $LWOUT*

  • luvcout = $LUVCOUT*

  • lsat = $LSAT*

  • mcip_start = “$MCIP_START”*

  • mcip_end = “$MCIP_END”*

  • intvl = $INTVL*

  • coordnam = “$CoordName”*

  • grdnam = “$GridName”*

  • ctmlays = $CTMLAYS*

  • btrim = $BTRIM*

  • lprt_col = $LPRT_COL*

  • lprt_row = $LPRT_ROW*

  • wrf_lc_ref_lat = $WRF_LC_REF_LAT*

  • $Marker*

  • &WINDOWDEFS*

  • x0 = $X0*

  • y0 = $Y0*

  • ncolsin = $NCOLS*

  • nrowsin = $NROWS*

  • $Marker*

!

#-----------------------------------------------------------------------
# Set links to FORTRAN units.
#-----------------------------------------------------------------------

rm fort.*
if ( -f $FILE_GD ) rm -f $FILE_GD

ln -s $FILE_HDR fort.2
ln -s $FILE_GD fort.4
ln -s WorkDir/namelist.{PROG} fort.8
if ( $IfTer == “T” ) then

  • ln -s $InTerFile fort.9*
    endif

set NUMFIL = 0
foreach fil ( $InMetFiles )

  • @ NN = $NUMFIL + 10*
  • ln -s $fil fort.$NN*
  • @ NUMFIL ++*
    end

#-----------------------------------------------------------------------
# Set output file names and other miscellaneous environment variables.
#-----------------------------------------------------------------------

setenv IOAPI_CHECK_HEADERS T
setenv EXECUTION_ID $PROG

setenv GRID_BDY_2D OutDir/GRIDBDY2D_{APPL}.nc
setenv GRID_CRO_2D OutDir/GRIDCRO2D_{APPL}.nc
setenv GRID_CRO_3D OutDir/GRIDCRO3D_{APPL}.nc
setenv GRID_DOT_2D OutDir/GRIDDOT2D_{APPL}.nc
setenv MET_BDY_3D OutDir/METBDY3D_{APPL}.nc
setenv MET_CRO_2D OutDir/METCRO2D_{APPL}.nc
setenv MET_CRO_3D OutDir/METCRO3D_{APPL}.nc
setenv MET_DOT_3D OutDir/METDOT3D_{APPL}.nc

#-----------------------------------------------------------------------
# Execute MCIP.
#-----------------------------------------------------------------------

ProgDir/{PROG}.exe

if ( $status == 0 ) then

  • rm fort.**
  • exit 0*
    else
  • echo “Error running $PROG”*
  • exit 1*
    endif

My suggestion is to create 3 different versions of run_mcip.csh, one for each nested WRF domain.
cp run_mcip.csh run_mcip_d01.csh
cp run_mcip.csh run_mcip_d02.csh
cp run_mcip.csh run_mcip_d03.csh

You would then follow the instructions in the README.md to edit each run_mcip_d01.csh script to specify the input files and GRIDDESC file for that domain, then run mcip for that domain. If that is successful, proceed to editing the run_mcip_d02.csh and run for that domain, and if that is successful, proceed to edit run_cip_d03.csh and run.
Note, this question was added to an old issue under the CMAQ tag, and may have been missed. Please create a new issue, if additional assistance is required and use the MCIP tag.

Thank you so much, sir. I’m sorry for replying you so late. Your advice is very practical.