UFS Short-Range Weather (SRW) Practical Session Guide | Session 3 > 2. Changing a Physics Scheme in the Suite Definition File (SDF)

The following set of instructions will guide you through the process of changing the land surface model from Noah to NoahMP in the suite GFSv15p2.

  1. Go to the suite definition file directory:
    The physics schemes for the GFSv15p2 suite are defined in the suite definition file suite_FV3_GFS_v15p2.xml under the directory: /glade/scratch/$USER/ufs-srweather-app/src/ufs_weather_model/FV3/ccpp/suites
    Change to the suite directory and check the suite files:
    cd /glade/scratch/$USER/ufs-srweather-app/src/ufs_weather_model/FV3/ccpp/suites
    ls -1
    suite_FV3_GFS_v15p2.xml
    suite_FV3_RRFS_v1alpha.xml
    suite.xsd

    The suite definition file is a text file, and a modified suite can be constructed from the existing SDF. A modified suite can be constructed from an existing SDF through copying the existing suite file and changing other aspects of the file.

    cp suite_FV3_GFS_v15p2.xml suite_FV3_GFS_v15p2_noahmp.xml
  2. Modify the GFSv15p2_noahmp SDF file with a new land surface model(LSM):
    1. To change the Noah land surface model (lsm_noah) to noah_mp land surface model (noahmpdrv) in suite_FV3_GFS_v15p2_noahmp.xml, change:
      <scheme>lsm_noah</scheme>

      to

      <scheme>noahmpdrv</scheme>
    2. Change the suite name in the file from:
      <suite name="FV3_GFS_v15p2" lib="ccppphys" ver="5">

      to

       <suite name="FV3_GFS_v15p2_noahmp" lib="ccppphys" ver="5">
  3. Add the new suite to the compiling command:
    Edit the file /glade/scratch/$USER/ufs-srweather-app/src/CMakeLists.txt by changing:
    set(CCPP_SUITES "FV3_GFS_v15p2,FV3_RRFS_v1alpha")

    to

    set(CCPP_SUITES "FV3_GFS_v15p2,FV3_GFS_v15p2_noahmp,FV3_RRFS_v1alpha")

    so the new suite is included in the compiling of the model.

  4. Modify the Workflow to include the new suite:
    1. Add suite FV3_GFS_v15p2_noahmp to the file FV3.input.yml under the directory /glade/scratch/$USER/ufs-srweather-app/regional_workflow/ush/templates. Insert the following part after line 272 in FV3.input.yml:
      FV3_GFS_v15p2_noahmp:
        atmos_model_nml:
          fdiag: 1
        fms_nml:
          domains_stack_size: 1800200
        fv_core_nml: 
          <<: *gfs_v15_fv_core
          agrid_vel_rst: False
          d2_bg_k1: 0.15
          d2_bg_k2: 0.02
          dnats: 1
          do_sat_adj: True
          fv_debug: False
          fv_sg_adj: 600

          k_split: 1
          kord_mt: 9
          kord_tm: -9
          kord_tr: 9
          kord_wz: 9
          n_split: 8
          n_sponge: 30
          nord_zs_filter: !!python/none
          nudge_qv: True
          range_warn: False
          rf_cutoff: 750.0
          rf_fast: False
        gfdl_cloud_microphysics_nml:
          <<: *gfs_gfdl_cloud_mp
          sedi_transport: True
          tau_l2v: 225.0
          tau_v2l: 150.0

        gfs_physics_nml: 
          <<: *gfs_v15_gfs_physics
          bl_mynn_edmf: !!python/none
          bl_mynn_edmf_mom: !!python/none
          bl_mynn_tkeadvect: !!python/none
          cnvcld: True
          cnvgwd: True
          cplflx: !!python/none
          do_myjpbl: False
          do_myjsfc: False
          do_mynnedmf: !!python/none
          do_mynnsfclay: !!python/none
          do_tofd: False
          do_ugwp: False
          do_ysu: False
          fhcyc: 0.0
          fhlwr: 3600.0
          fhswr: 3600.0
          fhzero: 6.0
          hybedmf: True
          iau_delthrs: !!python/none
          iaufhrs: !!python/none
          imfdeepcnv: 2
          imfshalcnv: 2
          imp_physics: 11
          icloud_bl: !!python/none
          iopt_alb: 2
          iopt_btr: 1
          iopt_crs: 1
          iopt_dveg: 2
          iopt_frz: 1
          iopt_inf: 1
          iopt_rad: 1
          iopt_run: 1
          iopt_sfc: 1
          iopt_snf: 4
          iopt_stc: 1
          iopt_tbot: 2
          ldiag_ugwp: False
          lgfdlmprad: True
          lradar: !!python/none
          lsm: 2
          lsoil: !!python/none
          lsoil_lsm: !!python/none
          ltaerosol: !!python/none
          shal_cnv: True
          shinhong: False
          ttendlim: !!python/none
          xkzm_h: 1.0
          xkzm_m: 1.0
          xkzminv: 0.3
        namsfc:
          landice: True
          ldebug: False
        surf_map_nml:

      It’s similar to the setting for suite FV3_GFS_v15p2 except the lsm=2.

    2. Prepare tables for noahmp:
      cp field_table.FV3_GFS_v15p2 field_table.FV3_GFS_v15p2_noahmp
      cp diag_table.FV3_GFS_v15p2 diag_table.FV3_GFS_v15p2_noahmp
    3. Add suite FV3_GFS_v15p2_noahmp to valid_param_vals.sh under /glade/scratch/$USER/ufs-srweather-app/regional_workflow/ush, by changing:
      valid_vals_CCPP_PHYS_SUITE=( \
      "FV3_GFS_v15p2" \
      "FV3_RRFS_v1alpha" \
      )

      to

      valid_vals_CCPP_PHYS_SUITE=( \
      "FV3_GFS_v15p2" \
      "FV3_GFS_v15p2_noahmp" \
      "FV3_RRFS_v1alpha" \
      )
    4. Add suite FV3_GFS_v15p2_noahmp to files exregional_make_ics.sh, and exregional_make_lbcs.sh under the directory /glade/scratch/$USER/ufs-srweather-app/regional_workflow/scripts:
      cd /glade/scratch/$USER/ufs-srweather-app/regional_workflow/scripts

      Edit files exregional_make_ics.sh, and exregional_make_lbcs.sh, changing all

      [ "${CCPP_PHYS_SUITE}" = "FV3_GFS_v15p2" ] || \

      to

      [ "${CCPP_PHYS_SUITE}" = "FV3_GFS_v15p2" ] || \
      [ "${CCPP_PHYS_SUITE}" = "FV3_GFS_v15p2_noahmp" ] || \

      and changing

      "FV3_GFS_v15p2" | "FV3_CPT_v0" )

      to

      "FV3_GFS_v15p2_noahmp" | \
      "FV3_GFS_v15p2" | "FV3_CPT_v0" )

      To confirm the changes, run:

      less *.sh | grep v15

      to get the following messages to make sure the suite is added correctly:

      "FV3_GFS_v15p2_noahmp" | \
      "FV3_GFS_v15p2" | "FV3_CPT_v0" )
      [ "${CCPP_PHYS_SUITE}" = "FV3_GFS_v15p2" ] || \
      [ "${CCPP_PHYS_SUITE}" = "FV3_GFS_v15p2_noahmp" ] || \
      [ "${CCPP_PHYS_SUITE}" = "FV3_GFS_v15p2" ] || \
      [ "${CCPP_PHYS_SUITE}" = "FV3_GFS_v15p2_noahmp" ] || \
      [ "${CCPP_PHYS_SUITE}" = "FV3_GFS_v15p2" ] || \
      [ "${CCPP_PHYS_SUITE}" = "FV3_GFS_v15p2_noahmp" ] || \
      [ "${CCPP_PHYS_SUITE}" = "FV3_GFS_v15p2" ] || \
      [ "${CCPP_PHYS_SUITE}" = "FV3_GFS_v15p2_noahmp" ] || \
      [ "${CCPP_PHYS_SUITE}" = "FV3_GFS_v15p2" ] || \
      [ "${CCPP_PHYS_SUITE}" = "FV3_GFS_v15p2_noahmp" ] || \
      "FV3_GFS_v15p2_noahmp" | \
      "FV3_GFS_v15p2" | "FV3_CPT_v0" )
      [ "${CCPP_PHYS_SUITE}" = "FV3_GFS_v15p2" ] || \
      [ "${CCPP_PHYS_SUITE}" = "FV3_GFS_v15p2_noahmp" ] || \
      [ "${CCPP_PHYS_SUITE}" = "FV3_GFS_v15p2" ] || \
      [ "${CCPP_PHYS_SUITE}" = "FV3_GFS_v15p2_noahmp" ] || \
      [ "${CCPP_PHYS_SUITE}" = "FV3_GFS_v15p2" ] || \
      [ "${CCPP_PHYS_SUITE}" = "FV3_GFS_v15p2_noahmp" ] || \
  5. Compile the model with the new suite:
    Users can refer to Session 1 for additional information:
    cd /glade/scratch/$USER/ufs-srweather-app/
    source env/build_cheyenne_intel.env
  6. mkdir build
    cd build

    Run cmake to set up the Makefile, then run make:

    cmake .. -DCMAKE_INSTALL_PREFIX=..
    make -j 4 >& build.out &
  7. Set the config.sh file:
    Go to the the ush directory
    cd /glade/scratch/$USER/ufs-srweather-app/regional_workflow/ush/

    Use the config.sh from Session 1 and edit the config.sh, making sure the machine and account are set correctly:

    MACHINE="cheyenne"
    ACCOUNT="NJNT0008"
    1. Change the name of the experiment directory (which is also the name of the experiment) to something that properly represents the new settings:
      EXPT_SUBDIR="test_CONUS_25km_GFSv15p2_noahmp"
    2. Set the predefined grid to the CONUS grid with 25km resolution:
      PREDEF_GRID_NAME="RRFS_CONUS_25km"
    3. Change the forecast length to 6 hours:
      FCST_LEN_HRS="6"

      Only a 6 hour forecast is used for practice purposes.

    4. Set the suite:
      CCPP_PHYS_SUITE="FV3_GFS_v15p2_noahmp"
    5. Make sure the LBCS and ICS directories are set correctly:
      USE_USER_STAGED_EXTRN_FILES="TRUE"
      EXTRN_MDL_SOURCE_BASEDIR_ICS="/glade/p/ral/jntp/UFS_SRW_app/staged_extrn_mdl_files/FV3GFS"
      EXTRN_MDL_SOURCE_BASEDIR_LBCS="/glade/p/ral/jntp/UFS_SRW_app/staged_extrn_mdl_files/FV3GFS"
  8. Generate the workflow with the modified suite file:
    Load the appropriate Python environment for Cheyenne:
    source ../../env/wflow_cheyenne.env

    Generate the workflow with the command:

    ./generate_FV3LAM_wflow.sh
  9. Run the workflow:
    1. Run the model manually:
      cd /glade/scratch/$USER/expt_dirs/test_CONUS_25km_GFSv15p2_noahmp
      ./launch_FV3LAM_wflow.sh

      This command needs to be repeated until all the jobs are finished.

    2. Run the model through the crontab:
      For automatic resubmission of the workflow (e.g., every 3 minutes), the following line can be added to the user’s crontab:
      crontab -e

      and insert the line:

      */3 * * * * cd /glade/scratch/$USER/expt_dirs/test_CONUS_25km_GFSv15p2_noahmp &&  ./launch_FV3LAM_wflow.sh
  10. Check the model running status:
    rocotostat -w FV3LAM_wflow.xml -d FV3LAM_wflow.db -v 10

    The workflow run is completed when all tasks have “SUCCEEDED”

  11. Generate the plots:
    1. Change to the python script directory:
      cd /glade/scratch/$USER/ufs-srweather-app/regional_workflow/ush/Python
    2. Load the appropriate Python environment for Cheyenne:
      module purge
      module load ncarenv
      ncar_pylib /glade/p/ral/jntp/UFS_SRW_app/ncar_pylib/python_graphics

      If you see something like:

      Warning: library /glade/p/ral/jntp/UFS_SRW_app/ncar_pylib/regional_workflow is missing from NPL clone registry.
      Do you wish to add it to the registry (y/N)?

      This will occur if this is the first time you have used the NCAR Python Library (NPL), type ‘y’, to get the following output:

      Searching library for configuration info ...
      Now using NPL virtual environment at path:
      /glade/p/ral/jntp/UFS_SRW_app/ncar_pylib/regional_workflow
      Use deactivate to remove NPL from environment
    3. Run the python plotting script:
      Note: The following is a one-line command:
      python plot_allvars.py 2019061500 6 6 6  /glade/scratch/$USER/expt_dirs/test_CONUS_25km_GFSv15p2_noahmp  /glade/p/ral/jntp/UFS_SRW_app/tools/NaturalEarth
    4. Display the output figures:
      The output files (in .png format) can be found in the directory /glade/scratch/$USER/expt_dirs/test_CONUS_25km_GFSv15p2_noahmp/2019061500/postprd
      cd /glade/scratch/$USER/expt_dirs/test_CONUS_25km_GFSv15p2_noahmp/2019061500/postprd
      display 10mwind_conus_f006.png