diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index 3035923261..f86a330408 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -2,6 +2,7 @@ b429b63824e09f82e95d2982f14311cbbd8e4a37 d229b5c6689efc4c2a6cef077515c4ccd5c18ff6 4cd83cb3ee6d85eb909403487abf5eeaf4d98911 +d229b5c6689efc4c2a6cef077515c4ccd5c18ff6 0aa2957c1f8603c63fa30b11295c06cfddff44a5 2cdb380febb274478e84cd90945aee93f29fa2e6 e44dc469439e02e9ee582dab274d890ebdfab104 diff --git a/cime_config/usermods_dirs/f09_37x288pt_PanBoreal/shell_commands b/cime_config/usermods_dirs/f09_37x288pt_PanBoreal/shell_commands new file mode 100644 index 0000000000..1176d22871 --- /dev/null +++ b/cime_config/usermods_dirs/f09_37x288pt_PanBoreal/shell_commands @@ -0,0 +1,8 @@ + +# Change below line if you move the subset data directory + +./xmlchange CLM_USRDAT_DIR='$DIN_LOC_ROOT/lnd/clm2/regional_datasets/f09_38x288pt_PanBoreal' + +./xmlchange ATM_DOMAIN_MESH='$CLM_USRDAT_DIR/domain.lnd.fv0.9x1.25_gx1v7_f09_38x288pt_PanBoreal_c230524_ESMF_UNSTRUCTURED_MESH.nc' +./xmlchange LND_DOMAIN_MESH='$CLM_USRDAT_DIR/domain.lnd.fv0.9x1.25_gx1v7_f09_38x288pt_PanBoreal_c230524_ESMF_UNSTRUCTURED_MESH.nc' +./xmlchange MASK_MESH='$CLM_USRDAT_DIR/domain.lnd.fv0.9x1.25_gx1v7_f09_38x288pt_PanBoreal_c230524_ESMF_UNSTRUCTURED_MESH.nc' diff --git a/cime_config/usermods_dirs/f09_37x288pt_PanBoreal/user_nl_clm b/cime_config/usermods_dirs/f09_37x288pt_PanBoreal/user_nl_clm new file mode 100644 index 0000000000..025aa390e7 --- /dev/null +++ b/cime_config/usermods_dirs/f09_37x288pt_PanBoreal/user_nl_clm @@ -0,0 +1,22 @@ +!---------------------------------------------------------------------------------- +! Users should add all user specific namelist changes below in the form of +! namelist_var = new_namelist_value +! +! EXCEPTIONS: +! Set use_cndv by the compset you use and the CLM_BLDNML_OPTS -dynamic_vegetation setting +! Set use_vichydro by the compset you use and the CLM_BLDNML_OPTS -vichydro setting +! Set use_cn by the compset you use and CLM_BLDNML_OPTS -bgc setting +! Set use_crop by the compset you use and CLM_BLDNML_OPTS -crop setting +! Set spinup_state by the CLM_BLDNML_OPTS -bgc_spinup setting +! Set co2_ppmv with CCSM_CO2_PPMV option +! Set fatmlndfrc with LND_DOMAIN_PATH/LND_DOMAIN_FILE options +! Set finidat with RUN_REFCASE/RUN_REFDATE/RUN_REFTOD options for hybrid or branch cases +! (includes $inst_string for multi-ensemble cases) +! or with CLM_FORCE_COLDSTART to do a cold start +! or set it with an explicit filename here. +! Set maxpatch_glc with GLC_NEC option +! Set glc_do_dynglacier with GLC_TWO_WAY_COUPLING env variable +!---------------------------------------------------------------------------------- + + +fsurdat = '$CLM_USRDAT_DIR/surfdata_f09_38x288pt_PanBoreal_hist_16pfts_Irrig_CMIP6_simyr2000_c230523.nc' diff --git a/doc/design/python_script_user_interface.rst b/doc/design/python_script_user_interface.rst index 3ad6a4d2cf..87c1b3e8fc 100644 --- a/doc/design/python_script_user_interface.rst +++ b/doc/design/python_script_user_interface.rst @@ -81,3 +81,10 @@ More verbose output should go in ``logger.info`` or ``logger.debug`` statements * e.g. You might want to output a ``logging.debug`` statement for every variable in a file you are editing. Near the top of each python module where logging is used, there should be a line, ``logger = logging.getLogger(__name__)``. Then logging statements should be done using statements like ``logger.info(...)``, *not* ``logging.info(...)``: this allows more contextual information in logging output. + +==================================================== + Considerations on inclusion of python packages +==================================================== + +Since, this is somewhat an implementation detail the discussion for this is in ``../../python/README.python_pkgs.rst``. The python +packages used is somewhat both an important part of the user interface, the tool design, and an implementation detail. diff --git a/doc/source/conf.py b/doc/source/conf.py index 6c00f5a686..894e9b6c66 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -45,8 +45,8 @@ # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # -# source_suffix = ['.rst', '.md'] -source_suffix = '.rst' +source_suffix = ['.rst', '.md'] +#source_suffix = '.rst' # The master toctree document. master_doc = 'index' diff --git a/doc/source/how-to-make-mesh.md b/doc/source/how-to-make-mesh.md new file mode 100644 index 0000000000..0620598e05 --- /dev/null +++ b/doc/source/how-to-make-mesh.md @@ -0,0 +1,98 @@ +# 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](https://earthsystemmodeling.org/docs/release/ESMF_8_0_1/ESMF_refdoc/node3.html#SECTION03028200000000000000). + +------ + +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: +``` Shell +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](https://user-images.githubusercontent.com/17344536/200441736-972a8136-5c05-4bc9-9bca-b498d972914a.png) + + +test_mesh_1d_global.png + +![image](https://user-images.githubusercontent.com/17344536/200441753-d06e95d1-d85b-4216-9c23-d11ba89a31e4.png) + + + +------ + ## 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](https://user-images.githubusercontent.com/17344536/200442002-1ee5595c-9252-4934-a07c-2f6ad86aff1b.png) + + + \ No newline at end of file diff --git a/py_env_create b/py_env_create index 4b3612cfda..9a9b8d940c 100755 --- a/py_env_create +++ b/py_env_create @@ -20,6 +20,7 @@ if [ $error != 0 ]; then echo "For notes on installing on a user system see: https://docs.conda.io/projects/conda/en/latest/user-guide/install/index.html" echo "Error code was $error" cat condahelp.txt + rm condahelp.txt exit -1 fi rm condahelp.txt @@ -44,7 +45,7 @@ usage() { echo "[-v|--verbose] " echo " Run with verbose mode for the install so you see the progress bar" echo "[-f|--file ] " - echo " Conda environment file to use (can be a text format or YAML format)" + echo " Conda environment requirements text file to use (text format) in addition to the others" echo " Assumed to be under the directory: $condadir" echo " Default is: $condafile" echo "[--option