clm5/doc/source/how-to-make-mesh.md
2024-05-09 15:14:01 +08:00

4.1 KiB

Creating an ESMF mesh file from a netCDF file

This gist includes instructions for creating and visualizing a mesh file from a netcdf file with valid 1D or 2D lats and lons coordinates.

  • ESMF Mesh file aka Unstructured Grid File Format is a netcdf file (format) that includes the information about the grids coordinates and their connectivity to each other.

Additional information about ESMF mesh files are available here.


In this example, we will use ./mesh_maker.py which uses mesh_type.py to create a mesh file and visualize it.

1- First clone my fork and branch that includes these capabilities:

git clone https://github.com/negin513/ctsm.git ctsm_mesh
cd ctsm_mesh

git checkout subset_mesh_dask

2- Next run mesh_maker.py for a netcdf file:

cd tools/site_and_regional

Check all the avaialble options:

./mesh_maker.py --help

The output shows all available options for this script:

|------------------------------------------------------------------|
|---------------------  Instructions  -----------------------------|
|------------------------------------------------------------------|
This script creates ESMF unstructured GRID (mesh file) from a netcdf
file with valid lats and lons. Provided lats and lons can be 1D or 2D.

For example for running WRF-CTSM cases, the user can create a mesh
file for their domain :
    ./mesh_maker.py --input wrfinput_d01 --output my_region
        --lat XLAT --lon XLONG --verbose

optional arguments:
  -h, --help        show this help message and exit
  --input INPUT     Netcdf input file for creating ESMF mesh.
  --output OUTPUT   Name of the ESMF mesh created.
  --outdir OUT_DIR  Output directory (only if name of output mesh is not
                    defined)
  --lat LAT_NAME    Name of latitude varibale on netcdf input file. If none
                    given, looks to find variables that include 'lat'.
  --lon LON_NAME    Name of latitude varibale on netcdf input file. If none
                    given, looks to find variables that include 'lon'.
  --mask MASK_NAME  Name of mask varibale on netcdf input file. If none given,
                    create a fake mask with values of 1.
  --area AREA_NAME  Name of area variable on netcdf input file. If none given,
                    ESMF calculates element areas automatically.
  --overwrite       If meshfile exists, overwrite the meshfile.
  -v, --verbose     Increase output verbosity
  

Let's create a mesh file from a netcdf file with 1D lats and lons. On the sample files provided 1D lat and long coordinates are saved on lsmlat and lsmlon variables.

./mesh_maker.py --input /glade/scratch/negins/example_files/surfdata_4x5_hist_78pfts_CMIP6_simyr1850_275.0-330.0_-40-15_c220705.nc --output test_mesh_1d.nc --lat lsmlat --lon lsmlon --overwrite

--verbose option also provide additional information for debugging.

This script will create regional and global mesh plots. For example for the above files, the plos are: test_mesh_1d_regional.png image

test_mesh_1d_global.png

image


Creating Mesh files for a WRF domain:

For running WRF-CTSM cases, we need to create ESMF mesh files for the WRF domain. We can create mesh file from wrfinput (wrf initial condition files). wrfinput has 2D coordinate information on XLAT and XLONG variable.

For example, let's create a mesh file from a WRF input file for WRF-CTSM run.

./mesh_maker.py --input /glade/scratch/negins/example_files/wrfinput_d01  --output test_mesh_wrf.nc --lat XLAT --lon XLONG --overwrite

This produce mesh files for running for our WRF domain.

Here is how the regional plot looks like for this mesh file:

image