-
Notifications
You must be signed in to change notification settings - Fork 306
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2513 from samsrabin/merge-b4bdev-20240502
Merge b4b-dev branch into master.
- Loading branch information
Showing
58 changed files
with
3,394 additions
and
341 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
8 changes: 8 additions & 0 deletions
8
cime_config/usermods_dirs/f09_37x288pt_PanBoreal/shell_commands
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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' |
22 changes: 22 additions & 0 deletions
22
cime_config/usermods_dirs/f09_37x288pt_PanBoreal/user_nl_clm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) | ||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
.. sectnum:: | ||
|
||
.. contents:: | ||
|
||
===================================================================================== | ||
Requirements to consider for python packages to be included for CTSM python tools | ||
===================================================================================== | ||
|
||
Requirements for CTSM python tools: | ||
|
||
Any added dependencies should be discussed and approved by the CTSM-software team. Criteria for evaluation of third-party packages | ||
include: | ||
- How much value does this package provide to us beyond what we could get without it? | ||
- How difficult it is to install this package (including: how much does this complicate / slow down the creation of the conda | ||
environment)? | ||
- How stable is this package? | ||
- How well maintained is this package? | ||
- Are there other packages that are more stable or better maintained that would provide nearly the same level of value? | ||
- Tools that require extra packages should be done in a "contrib" type area out of the main part of tools (this would apply for | ||
advanced plotting capability for example) | ||
- We need to be able to reproduce working conda environments minimally on our test machines (currently cheyenne and izumi), but also | ||
on any machine that we run CTSM on. If there is a machine that we can run CTSM on that we can't build the conda environments or run | ||
the tools on -- that needs to be fixed. | ||
- We need to tell the user how long to expect the conda environment to load, and give them options if the conda load is taking too | ||
long | ||
- Conda environments need to build robustly even for users who don't have ctsm_pylib loaded in their conda environment | ||
- Currently dask will NOT be something we require for any of the main CTSM tools | ||
- Currently we won't use conda-lock | ||
- We specify the black version exactly so that black will function identically for all users | ||
- We specify the pylint version exactly because pylint is finicky with version and we need it to work identically for all developers | ||
- We might remove the need for python packages that aren't providing enough utility | ||
Packages where specific versions seem to be required will have the version requirements in a least the >= form if not an exact | ||
version |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.