forked from ufs-community/ufs-weather-model
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Loading status checks…
Updates for component NoahMP land model (ufs-community#2387)
* UFSWM - new RT tests based on S2S configurations: cpld_control_p8_lnd and control_restart_p8_atmlnd. * CMEPS - flexible way to use same grid in atm-lnd coupling * FV3 - * ccpp-physics - new flux calculation method is implemented in CCPP/Physics sfc_land scheme to overcome initialization issues. * NOAHMP - add new decomposition algorithm to NoahMP component model NUOPC cap to distribute land and ocean points evenly to all the processor.
1 parent
b9d2bec
commit 0682f90
Showing
34 changed files
with
3,086 additions
and
3,046 deletions.
There are no files selected for viewing
Submodule CMEPS
updated
2 files
+17 −4 | mediator/esmFldsExchange_ufs_mod.F90 | |
+17 −0 | mediator/med_internalstate_mod.F90 |
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
Submodule FV3
updated
9 files
+3 −12 | .github/workflows/GCC.yml | |
+138 −0 | .github/workflows/docs.yml | |
+3 −2 | CMakeLists.txt | |
+1 −1 | ccpp/physics | |
+1 −0 | ccpp/suites/suite_FV3_GFS_v17_coupled_p8.xml | |
+1 −0 | ccpp/suites/suite_FV3_GFS_v17_coupled_p8_ugwpv1.xml | |
+1 −0 | ccpp/suites/suite_FV3_GFS_v17_p8_ugwpv1.xml | |
+8 −12 | docs/CMakeLists.txt | |
+4 −1 | docs/Doxyfile.in |
Submodule noahmp
updated
7 files
+2 −2 | .github/workflows/datm_noahmp.yaml | |
+25 −10 | drivers/ccpp/update.sh | |
+249 −3 | drivers/nuopc/lnd_comp_domain.F90 | |
+7 −7 | drivers/nuopc/lnd_comp_io.F90 | |
+10 −0 | drivers/nuopc/lnd_comp_nuopc.F90 | |
+37 −10 | drivers/nuopc/lnd_comp_shr.F90 | |
+3 −0 | drivers/nuopc/lnd_comp_types.F90 |
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 |
---|---|---|
@@ -1 +1 @@ | ||
export BL_DATE=20250107 | ||
export BL_DATE=20250122 |
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 |
---|---|---|
@@ -1,64 +1,161 @@ | ||
mkdir -p INPUT RESTART | ||
|
||
if [ "$LNDRES" = "C96" ]; then | ||
if [ "$ATMRES" = "C96" ]; then | ||
inputdir=FV3_input_data | ||
elif [ "$LNDRES" = "C48" ]; then | ||
inputdir=FV3_input_data48 | ||
elif [ "$LNDRES" = "C192" ]; then | ||
inputdir=FV3_input_data192 | ||
elif [ "$LNDRES" = "C384" ]; then | ||
inputdir=FV3_input_data384 | ||
elif [ "$LNDRES" = "C768" ]; then | ||
inputdir=FV3_input_data768 | ||
else | ||
inputdir=FV3_input_data${ATMRES#C} | ||
fi | ||
echo "inputdir=$inputdir,LNDRES=$LNDRES" | ||
echo "inputdir=$inputdir,ATMRES=$ATMRES" | ||
|
||
V2_SFC_FILE=${V2_SFC_FILE:-false} | ||
SUFFIX=${RT_SUFFIX} | ||
|
||
if [ $DATM_CDEPS == true ]; then | ||
if [[ $DATM_CDEPS == true ]] || [[ $S2S = false ]]; then | ||
targetdir="./INPUT" | ||
rsync -arv @[INPUTDATA_ROOT]/NOAHMP_IC/$atm_datamode/ufs-land_@[LNDRES]_init_fields.tile1.nc ./${targetdir}/@[LNDRES].initial.tile1.nc | ||
rsync -arv @[INPUTDATA_ROOT]/NOAHMP_IC/$atm_datamode/ufs-land_@[LNDRES]_init_fields.tile2.nc ./${targetdir}/@[LNDRES].initial.tile2.nc | ||
rsync -arv @[INPUTDATA_ROOT]/NOAHMP_IC/$atm_datamode/ufs-land_@[LNDRES]_init_fields.tile3.nc ./${targetdir}/@[LNDRES].initial.tile3.nc | ||
rsync -arv @[INPUTDATA_ROOT]/NOAHMP_IC/$atm_datamode/ufs-land_@[LNDRES]_init_fields.tile4.nc ./${targetdir}/@[LNDRES].initial.tile4.nc | ||
rsync -arv @[INPUTDATA_ROOT]/NOAHMP_IC/$atm_datamode/ufs-land_@[LNDRES]_init_fields.tile5.nc ./${targetdir}/@[LNDRES].initial.tile5.nc | ||
rsync -arv @[INPUTDATA_ROOT]/NOAHMP_IC/$atm_datamode/ufs-land_@[LNDRES]_init_fields.tile6.nc ./${targetdir}/@[LNDRES].initial.tile6.nc | ||
else | ||
if [ "$ATMRES" = "$LNDRES" ]; then | ||
targetdir="./INPUT" | ||
cd ${targetdir} | ||
ln -sf grid_spec.nc @[LNDRES]_mosaic.nc | ||
cd - | ||
else | ||
mkdir -p INPUT/$LNDRES | ||
targetdir="./INPUT/$LNDRES" | ||
fi | ||
|
||
if [ $WARM_START = .false. ]; then | ||
cp -r @[INPUTDATA_ROOT]/${inputdir}/INPUT_L127/sfc_data.tile*.nc ${targetdir}/. | ||
if [ $DATM_CDEPS == true ]; then | ||
# Initial condition | ||
rsync -arv @[INPUTDATA_ROOT]/NOAHMP_IC/$atm_datamode/ufs-land_@[LNDRES]_init_fields.tile1.nc ./${targetdir}/@[LNDRES].initial.tile1.nc | ||
rsync -arv @[INPUTDATA_ROOT]/NOAHMP_IC/$atm_datamode/ufs-land_@[LNDRES]_init_fields.tile2.nc ./${targetdir}/@[LNDRES].initial.tile2.nc | ||
rsync -arv @[INPUTDATA_ROOT]/NOAHMP_IC/$atm_datamode/ufs-land_@[LNDRES]_init_fields.tile3.nc ./${targetdir}/@[LNDRES].initial.tile3.nc | ||
rsync -arv @[INPUTDATA_ROOT]/NOAHMP_IC/$atm_datamode/ufs-land_@[LNDRES]_init_fields.tile4.nc ./${targetdir}/@[LNDRES].initial.tile4.nc | ||
rsync -arv @[INPUTDATA_ROOT]/NOAHMP_IC/$atm_datamode/ufs-land_@[LNDRES]_init_fields.tile5.nc ./${targetdir}/@[LNDRES].initial.tile5.nc | ||
rsync -arv @[INPUTDATA_ROOT]/NOAHMP_IC/$atm_datamode/ufs-land_@[LNDRES]_init_fields.tile6.nc ./${targetdir}/@[LNDRES].initial.tile6.nc | ||
|
||
# Fixed files | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/oro_@[LNDRES].mx@[OCNRES].tile1.nc ${targetdir}/oro_data.tile1.nc | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/oro_@[LNDRES].mx@[OCNRES].tile2.nc ${targetdir}/oro_data.tile2.nc | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/oro_@[LNDRES].mx@[OCNRES].tile3.nc ${targetdir}/oro_data.tile3.nc | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/oro_@[LNDRES].mx@[OCNRES].tile4.nc ${targetdir}/oro_data.tile4.nc | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/oro_@[LNDRES].mx@[OCNRES].tile5.nc ${targetdir}/oro_data.tile5.nc | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/oro_@[LNDRES].mx@[OCNRES].tile6.nc ${targetdir}/oro_data.tile6.nc | ||
cp @[INPUTDATA_ROOT]/${inputdir}/INPUT_L127_gfsv17/oro_data_ls* ${targetdir}/. | ||
cp @[INPUTDATA_ROOT]/${inputdir}/INPUT_L127_gfsv17/oro_data_ss* ${targetdir}/. | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/@[LNDRES]*.nc ${targetdir}/. | ||
cp @[INPUTDATA_ROOT]/CPL_FIX/a@[LNDRES]o@[OCNRES]/grid_spec.nc ${targetdir}/. | ||
cp @[INPUTDATA_ROOT]/${inputdir}/INPUT/@[LNDRES]_grid*.nc ${targetdir}/. | ||
cp @[INPUTDATA_ROOT]/${inputdir}/INPUT/grid_spec.nc ${targetdir}/@[LNDRES]_mosaic.nc | ||
else | ||
# land restart file | ||
cp ../${DEP_RUN}${SUFFIX}/ufs.cpld.lnd.out.${RESTART_FILE_SUFFIX_SECS}.tile*.nc RESTART/. | ||
# CMEPS restart and pointer files | ||
RFILE=ufs.cpld.cpl.r.${RESTART_FILE_SUFFIX_SECS}.nc | ||
cp ../${DEP_RUN}${SUFFIX}/RESTART/${RFILE} . | ||
ls -1 ${RFILE}>rpointer.cpl | ||
# link grid spec file | ||
# Initial condition | ||
if [ $WARM_START = .false. ]; then | ||
# IC | ||
if [ "$V2_SFC_FILE" = "true" ]; then | ||
cp -r @[INPUTDATA_ROOT]/${inputdir}/INPUT_L127_mx${OCNRES}_v2_sfc/sfc_data*.nc ${targetdir}/. | ||
cp -r @[INPUTDATA_ROOT]/${inputdir}/INPUT_L127_mx${OCNRES}_v2_sfc/gfs_data*.nc ${targetdir}/. | ||
cp -r @[INPUTDATA_ROOT]/${inputdir}/INPUT_L127_mx${OCNRES}_v2_sfc/gfs_ctrl.nc ${targetdir}/. | ||
else | ||
cp -r @[INPUTDATA_ROOT]/${inputdir}/INPUT_L127_mx${OCNRES}/sfc_data*.nc ${targetdir}/. | ||
cp -r @[INPUTDATA_ROOT]/${inputdir}/INPUT_L127_mx${OCNRES}/gfs_data*.nc ${targetdir}/. | ||
cp -r @[INPUTDATA_ROOT]/${inputdir}/INPUT_L127_mx${OCNRES}/gfs_ctrl*.nc ${targetdir}/. | ||
fi | ||
else | ||
# FV3 related restart files | ||
cp -r ../${DEP_RUN}${SUFFIX}/${targetdir}/* ${targetdir}/. | ||
cp -r ../${DEP_RUN}${SUFFIX}/RESTART/${RESTART_FILE_PREFIX}.* ${targetdir}/. | ||
for RFILE in INPUT/${RESTART_FILE_PREFIX}.*; do | ||
[ -e $RFILE ] || exit 1 | ||
RFILE_OLD=$(basename $RFILE) | ||
mv -f $RFILE ${targetdir}/"${RFILE_OLD//${RESTART_FILE_PREFIX}./}" | ||
done | ||
if [[ $IAU_OFFSET == 6 ]] && [[ $FHROT -le 6 ]]; then | ||
cp @[INPUTDATA_ROOT]/${inputdir}/INPUT_L127_mx${OCNRES}/fv_increment*.nc INPUT/. | ||
fi | ||
fi | ||
|
||
# Fixed files | ||
FNSMCC="global_soilmgldas.statsgo.t1534.3072.1536.grb" | ||
FNMSKH="global_slmask.t1534.3072.1536.grb" | ||
cp @[INPUTDATA_ROOT]/${inputdir}/${FNSMCC} . | ||
cp @[INPUTDATA_ROOT]/${inputdir}/${FNMSKH} . | ||
if [ $TILEDFIX = .true. ]; then | ||
cp @[INPUTDATA_ROOT]/FV3_fix/global_glacier.2x2.grb . | ||
cp @[INPUTDATA_ROOT]/FV3_fix/global_maxice.2x2.grb . | ||
cp @[INPUTDATA_ROOT]/FV3_fix/RTGSST.1982.2012.monthly.clim.grb . | ||
cp @[INPUTDATA_ROOT]/FV3_fix/global_snoclim.1.875.grb . | ||
cp @[INPUTDATA_ROOT]/FV3_fix/IMS-NIC.blended.ice.monthly.clim.grb . | ||
fi | ||
|
||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[ATMRES]/oro_@[ATMRES].mx@[OCNRES].tile1.nc ${targetdir}/oro_data.tile1.nc | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[ATMRES]/oro_@[ATMRES].mx@[OCNRES].tile2.nc ${targetdir}/oro_data.tile2.nc | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[ATMRES]/oro_@[ATMRES].mx@[OCNRES].tile3.nc ${targetdir}/oro_data.tile3.nc | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[ATMRES]/oro_@[ATMRES].mx@[OCNRES].tile4.nc ${targetdir}/oro_data.tile4.nc | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[ATMRES]/oro_@[ATMRES].mx@[OCNRES].tile5.nc ${targetdir}/oro_data.tile5.nc | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[ATMRES]/oro_@[ATMRES].mx@[OCNRES].tile6.nc ${targetdir}/oro_data.tile6.nc | ||
cp @[INPUTDATA_ROOT]/${inputdir}/INPUT_L127_gfsv17/oro_data_ls* ${targetdir}/. | ||
cp @[INPUTDATA_ROOT]/${inputdir}/INPUT_L127_gfsv17/oro_data_ss* ${targetdir}/. | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[ATMRES]/@[ATMRES]*.nc . | ||
cp @[INPUTDATA_ROOT]/CPL_FIX/a@[ATMRES]o@[OCNRES]/grid_spec.nc ${targetdir}/. | ||
cp @[INPUTDATA_ROOT]/${inputdir}/INPUT/@[ATMRES]_grid*.nc ${targetdir}/. | ||
cp @[INPUTDATA_ROOT]/${inputdir}/INPUT/grid_spec.nc ${targetdir}/@[ATMRES]_mosaic.nc | ||
cp @[INPUTDATA_ROOT]/MOM6_FIX/@[OCNRES]/ocean_mosaic.nc ${targetdir}/. | ||
|
||
# Merra2 | ||
if [ $IAER = 1011 ]; then | ||
for n in 01 02 03 04 05 06 07 08 09 10 11 12; do | ||
cp @[INPUTDATA_ROOT]/FV3_input_data_INCCN_aeroclim/MERRA2_y14_24/merra2_1423_${n}.nc aeroclim.m${n}.nc | ||
done | ||
cp @[INPUTDATA_ROOT]/FV3_input_data_INCCN_aeroclim/aer_data/LUTS/optics_BC.v1_3.dat optics_BC.dat | ||
cp @[INPUTDATA_ROOT]/FV3_input_data_INCCN_aeroclim/aer_data/LUTS/optics_OC.v1_3.dat optics_OC.dat | ||
cp @[INPUTDATA_ROOT]/FV3_input_data_INCCN_aeroclim/aer_data/LUTS/optics_DU.v15_3.dat optics_DU.dat | ||
cp @[INPUTDATA_ROOT]/FV3_input_data_INCCN_aeroclim/aer_data/LUTS/optics_SS.v3_3.dat optics_SS.dat | ||
cp @[INPUTDATA_ROOT]/FV3_input_data_INCCN_aeroclim/aer_data/LUTS/optics_SU.v1_3.dat optics_SU.dat | ||
fi | ||
|
||
cp @[INPUTDATA_ROOT]/FV3_input_data/ugwp_c384_tau.nc ./ugwp_limb_tau.nc | ||
|
||
if [ $IMP_PHYSICS = 8 ]; then | ||
cp @[INPUTDATA_ROOT]/FV3_fix/CCN_ACTIVATE.BIN CCN_ACTIVATE.BIN | ||
cp @[INPUTDATA_ROOT]/FV3_fix/freezeH2O.dat freezeH2O.dat | ||
cp @[INPUTDATA_ROOT]/FV3_fix/qr_acr_qgV2.dat qr_acr_qgV2.dat | ||
cp @[INPUTDATA_ROOT]/FV3_fix/qr_acr_qsV2.dat qr_acr_qsV2.dat | ||
fi | ||
|
||
# Prognostic aerosols | ||
if [ $CPLCHM = .true. ]; then | ||
ln -sf @[INPUTDATA_ROOT]/GOCART/p8c_5d/ExtData . | ||
fi | ||
fi | ||
fi | ||
|
||
# Land component related restart files | ||
if [ $WARM_START = .true. ]; then | ||
# Copy land restart files | ||
cp ../${DEP_RUN}${SUFFIX}/ufs.cpld.lnd.out.${RESTART_FILE_SUFFIX_SECS}.tile*.nc RESTART/. | ||
# CMEPS restart and pointer files | ||
RFILE=ufs.cpld.cpl.r.${RESTART_FILE_SUFFIX_SECS}.nc | ||
cp ../${DEP_RUN}${SUFFIX}/RESTART/${RFILE} . | ||
ls -1 ${RFILE}>rpointer.cpl | ||
fi | ||
|
||
# Running land in different resolution | ||
# Note that CMEPS mediator has some limitiations to run land in different resolution than atmosphere | ||
if [ "$ATMRES" != "$LNDRES" ]; then | ||
rsync -arv @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/@[LNDRES].maximum_snow_albedo.tile*.nc ${targetdir}/. | ||
rsync -arv @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/@[LNDRES].slope_type.tile*.nc ${targetdir}/. | ||
rsync -arv @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/@[LNDRES].soil_type.tile*.nc ${targetdir}/. | ||
rsync -arv @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/@[LNDRES].soil_color.tile*.nc ${targetdir}/. | ||
rsync -arv @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/@[LNDRES].substrate_temperature.tile*.nc ${targetdir}/. | ||
rsync -arv @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/@[LNDRES].vegetation_greenness.tile*.nc ${targetdir}/. | ||
rsync -arv @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/@[LNDRES].vegetation_type.tile*.nc ${targetdir}/. | ||
rsync -arv @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/oro_@[LNDRES].mx*.tile1.nc ${targetdir}/oro_data.tile1.nc | ||
rsync -arv @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/oro_@[LNDRES].mx*.tile2.nc ${targetdir}/oro_data.tile2.nc | ||
rsync -arv @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/oro_@[LNDRES].mx*.tile3.nc ${targetdir}/oro_data.tile3.nc | ||
rsync -arv @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/oro_@[LNDRES].mx*.tile4.nc ${targetdir}/oro_data.tile4.nc | ||
rsync -arv @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/oro_@[LNDRES].mx*.tile5.nc ${targetdir}/oro_data.tile5.nc | ||
rsync -arv @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/oro_@[LNDRES].mx*.tile6.nc ${targetdir}/oro_data.tile6.nc | ||
rsync -arv @[INPUTDATA_ROOT]/${inputdir}/INPUT/@[LNDRES]_grid.tile*.nc ${targetdir}/. | ||
rsync -arv @[INPUTDATA_ROOT]/${inputdir}/INPUT/grid_spec.nc ${targetdir}/@[LNDRES]_mosaic.nc | ||
mkdir -p INPUT/$LNDRES | ||
targetdir="./INPUT/$LNDRES" | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/@[LNDRES].maximum_snow_albedo.tile*.nc ${targetdir}/. | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/@[LNDRES].slope_type.tile*.nc ${targetdir}/. | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/@[LNDRES].soil_type.tile*.nc ${targetdir}/. | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/@[LNDRES].soil_color.tile*.nc ${targetdir}/. | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/@[LNDRES].substrate_temperature.tile*.nc ${targetdir}/. | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/@[LNDRES].vegetation_greenness.tile*.nc ${targetdir}/. | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/@[LNDRES].vegetation_type.tile*.nc ${targetdir}/. | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/oro_@[LNDRES].mx025.tile1.nc ${targetdir}/oro_data.tile1.nc | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/oro_@[LNDRES].mx025.tile2.nc ${targetdir}/oro_data.tile2.nc | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/oro_@[LNDRES].mx025.tile3.nc ${targetdir}/oro_data.tile3.nc | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/oro_@[LNDRES].mx025.tile4.nc ${targetdir}/oro_data.tile4.nc | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/oro_@[LNDRES].mx025.tile5.nc ${targetdir}/oro_data.tile5.nc | ||
cp @[INPUTDATA_ROOT]/FV3_fix_tiled/@[LNDRES]/oro_@[LNDRES].mx025.tile6.nc ${targetdir}/oro_data.tile6.nc | ||
cp @[INPUTDATA_ROOT]/FV3_input_data${LNDRES#C}/INPUT/@[LNDRES]_grid.tile*.nc ${targetdir}/. | ||
cp @[INPUTDATA_ROOT]/FV3_input_data${LNDRES#C}/INPUT/grid_spec.nc ${targetdir}/@[LNDRES]_mosaic.nc | ||
if [ $WARM_START = .false. ]; then | ||
if [ "$V2_SFC_FILE" = "true" ]; then | ||
cp @[INPUTDATA_ROOT]/FV3_input_data${LNDRES#C}/INPUT_L127_mx025_v2_sfc/sfc_data*.nc ${targetdir}/. | ||
cp @[INPUTDATA_ROOT]/FV3_input_data${LNDRES#C}/INPUT_L127_mx025_v2_sfc/gfs_data*.nc ${targetdir}/. | ||
cp @[INPUTDATA_ROOT]/FV3_input_data${LNDRES#C}/INPUT_L127_mx025_v2_sfc/gfs_ctrl*.nc ${targetdir}/. | ||
else | ||
cp @[INPUTDATA_ROOT]/FV3_input_data${LNDRES#C}/INPUT_L127_mx025/sfc_data*.nc ${targetdir}/. | ||
cp @[INPUTDATA_ROOT]/FV3_input_data${LNDRES#C}/INPUT_L127_mx025/gfs_data*.nc ${targetdir}/. | ||
cp @[INPUTDATA_ROOT]/FV3_input_data${LNDRES#C}/INPUT_L127_mx025/gfs_ctrl*.nc ${targetdir}/. | ||
fi | ||
fi | ||
fi |
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
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
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,205 @@ | ||
############################################# | ||
#### UFS Run-Time Configuration File ###### | ||
############################################# | ||
|
||
# ESMF # | ||
logKindFlag: ESMF_LOGKIND_MULTI | ||
globalResourceControl: @[ESMF_THREADING] | ||
|
||
# EARTH # | ||
EARTH_component_list: MED ATM CHM OCN ICE WAV LND | ||
EARTH_attributes:: | ||
Verbosity = 0 | ||
:: | ||
|
||
# MED # | ||
MED_model: @[med_model] | ||
MED_petlist_bounds: @[med_petlist_bounds] | ||
MED_omp_num_threads: @[med_omp_num_threads] | ||
|
||
# ATM # | ||
ATM_model: @[atm_model] | ||
ATM_petlist_bounds: @[atm_petlist_bounds] | ||
ATM_omp_num_threads: @[atm_omp_num_threads] | ||
ATM_attributes:: | ||
Verbosity = 0 | ||
DumpFields = false | ||
ProfileMemory = false | ||
OverwriteSlice = true | ||
:: | ||
|
||
# CHM # | ||
CHM_model: @[chm_model] | ||
CHM_petlist_bounds: @[chm_petlist_bounds] | ||
CHM_omp_num_threads: @[chm_omp_num_threads] | ||
CHM_attributes:: | ||
Verbosity = 0 | ||
:: | ||
|
||
# OCN # | ||
OCN_model: @[ocn_model] | ||
OCN_petlist_bounds: @[ocn_petlist_bounds] | ||
OCN_omp_num_threads: @[ocn_omp_num_threads] | ||
OCN_attributes:: | ||
Verbosity = 0 | ||
DumpFields = false | ||
ProfileMemory = false | ||
OverwriteSlice = true | ||
mesh_ocn = @[MESH_OCN] | ||
use_coldstart = @[use_coldstart] | ||
use_mommesh = @[use_mommesh] | ||
:: | ||
|
||
# ICE # | ||
ICE_model: @[ice_model] | ||
ICE_petlist_bounds: @[ice_petlist_bounds] | ||
ICE_omp_num_threads: @[ice_omp_num_threads] | ||
ICE_attributes:: | ||
Verbosity = 0 | ||
DumpFields = false | ||
ProfileMemory = false | ||
OverwriteSlice = true | ||
mesh_ice = @[MESH_ICE] | ||
eps_imesh = @[eps_imesh] | ||
stop_n = @[RESTART_N] | ||
stop_option = nhours | ||
stop_ymd = -999 | ||
:: | ||
|
||
# WAV # | ||
WAV_model: @[wav_model] | ||
WAV_petlist_bounds: @[wav_petlist_bounds] | ||
WAV_omp_num_threads: @[wav_omp_num_threads] | ||
WAV_attributes:: | ||
Verbosity = 0 | ||
OverwriteSlice = false | ||
mesh_wav = @[MESH_WAV] | ||
user_histname = @[WW3_user_histname] | ||
use_historync = @[WW3_historync] | ||
use_restartnc = @[WW3_restartnc] | ||
restart_from_binary = @[WW3_restart_from_binary] | ||
pio_typename = @[WW3_PIO_FORMAT] | ||
pio_numiotasks = @[WW3_PIO_IOTASKS] | ||
pio_stride = @[WW3_PIO_STRIDE] | ||
pio_rearranger = @[WW3_PIO_REARR] | ||
pio_root = @[WW3_PIO_ROOT] | ||
:: | ||
|
||
# LND # | ||
LND_model: @[lnd_model] | ||
LND_petlist_bounds: @[lnd_petlist_bounds] | ||
LND_omp_num_threads: @[lnd_omp_num_threads] | ||
LND_attributes:: | ||
Verbosity = 1 | ||
Diagnostic = 0 | ||
mosaic_file = @[mosaic_file] | ||
input_dir = @[lnd_input_dir] | ||
fixed_dir = @[lnd_fixed_dir] | ||
ic_type = @[lnd_ic_type] | ||
layout = @[layout_x]:@[layout_y] # need to be consistent with number of PEs | ||
num_soil_levels = 4 | ||
forcing_height = 10 | ||
soil_level_thickness = 0.10:0.30:0.60:1.00 | ||
soil_level_nodes = 0.05:0.25:0.70:1.50 | ||
dynamic_vegetation_option = 4 | ||
canopy_stomatal_resistance_option = 2 | ||
soil_wetness_option = 1 | ||
runoff_option = 1 | ||
surface_exchange_option = 3 | ||
supercooled_soilwater_option = 1 | ||
frozen_soil_adjust_option = 1 | ||
radiative_transfer_option = 3 | ||
snow_albedo_option = @[snow_albedo_option] | ||
precip_partition_option = @[precip_partition_option] | ||
soil_temp_lower_bdy_option = 2 | ||
soil_temp_time_scheme_option = 3 | ||
surface_evap_resistance_option = 1 # not used, it is fixed to 4 in sfc_noahmp_drv.F90 | ||
glacier_option = 1 | ||
surface_thermal_roughness_option = 2 | ||
output_freq = 3600 | ||
restart_freq = -1 | ||
calc_snet = @[CALC_SNET] | ||
initial_albedo = @[initial_albedo] | ||
:: | ||
|
||
# CMEPS warm run sequence | ||
runSeq:: | ||
@@[coupling_interval_slow_sec] | ||
MED med_phases_prep_ocn_avg | ||
MED -> OCN :remapMethod=redist | ||
OCN | ||
@@[coupling_interval_fast_sec] | ||
MED med_phases_prep_atm | ||
MED med_phases_prep_ice | ||
MED med_phases_prep_wav_accum | ||
MED med_phases_prep_wav_avg | ||
MED med_phases_prep_lnd | ||
MED -> ATM :remapMethod=redist | ||
MED -> ICE :remapMethod=redist | ||
MED -> WAV :remapMethod=redist | ||
MED -> LND :remapMethod=redist | ||
ATM phase1 | ||
ATM -> CHM | ||
CHM | ||
CHM -> ATM | ||
ATM phase2 | ||
ICE | ||
WAV | ||
LND | ||
ATM -> MED :remapMethod=redist | ||
MED med_phases_post_atm | ||
ICE -> MED :remapMethod=redist | ||
MED med_phases_post_ice | ||
WAV -> MED :remapMethod=redist | ||
MED med_phases_post_wav | ||
LND -> MED :remapMethod=redist | ||
MED med_phases_post_lnd | ||
MED med_phases_ocnalb_run | ||
MED med_phases_prep_ocn_accum | ||
@ | ||
OCN -> MED :remapMethod=redist | ||
MED med_phases_post_ocn | ||
MED med_phases_restart_write | ||
@ | ||
:: | ||
|
||
# CMEPS variables | ||
|
||
DRIVER_attributes:: | ||
:: | ||
|
||
MED_attributes:: | ||
ATM_model = @[atm_model] | ||
ICE_model = @[ice_model] | ||
OCN_model = @[ocn_model] | ||
WAV_model = @[wav_model] | ||
LND_model = @[lnd_model] | ||
coupling_mode = @[CPLMODE] | ||
pio_rearranger = @[pio_rearranger] | ||
ocean_albedo_limit = @[ocean_albedo_limit] | ||
:: | ||
|
||
ALLCOMP_attributes:: | ||
ScalarFieldCount = 3 | ||
ScalarFieldIdxGridNX = 1 | ||
ScalarFieldIdxGridNY = 2 | ||
ScalarFieldIdxGridNTile = 3 | ||
ScalarFieldName = cpl_scalars | ||
start_type = @[RUNTYPE] | ||
restart_dir = @[CMEPS_RESTART_DIR] | ||
case_name = ufs.cpld | ||
restart_n = @[RESTART_N] | ||
restart_option = nhours | ||
restart_ymd = -999 | ||
write_restart_at_endofrun = @[WRITE_ENDOFRUN_RESTART] | ||
dbug_flag = @[cap_dbug_flag] | ||
stop_n = @[FHMAX] | ||
stop_option = nhours | ||
stop_ymd = -999 | ||
orb_eccen = 1.e36 | ||
orb_iyear = 2000 | ||
orb_iyear_align = 2000 | ||
orb_mode = fixed_year | ||
orb_mvelp = 1.e36 | ||
orb_obliq = 1.e36 | ||
:: |
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,8 @@ | ||
cpld_control_p8_lnd intel | ||
cpld_restart_p8_lnd intel | ||
datm_cdeps_lnd_gswp3 intel | ||
datm_cdeps_lnd_era5 intel | ||
datm_cdeps_lnd_era5_rst intel | ||
control_p8_atmlnd intel | ||
control_restart_p8_atmlnd intel | ||
control_p8_atmlnd_debug intel |
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 was deleted.
Oops, something went wrong.
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,104 @@ | ||
# | ||
# cpld_control P8 test with land component model | ||
# | ||
|
||
source tests/cpld_control_p8 | ||
|
||
export TEST_DESCR="Fully coupled FV3-CCPP-GOCART-MOM6-CICE-CMEPS-WW3-NOAHMP system - C96MX100" | ||
|
||
export CNTL_DIR=cpld_control_p8_lnd | ||
|
||
export LIST_FILES="sfcf021.tile1.nc \ | ||
sfcf021.tile2.nc \ | ||
sfcf021.tile3.nc \ | ||
sfcf021.tile4.nc \ | ||
sfcf021.tile5.nc \ | ||
sfcf021.tile6.nc \ | ||
atmf021.tile1.nc \ | ||
atmf021.tile2.nc \ | ||
atmf021.tile3.nc \ | ||
atmf021.tile4.nc \ | ||
atmf021.tile5.nc \ | ||
atmf021.tile6.nc \ | ||
sfcf024.tile1.nc \ | ||
sfcf024.tile2.nc \ | ||
sfcf024.tile3.nc \ | ||
sfcf024.tile4.nc \ | ||
sfcf024.tile5.nc \ | ||
sfcf024.tile6.nc \ | ||
atmf024.tile1.nc \ | ||
atmf024.tile2.nc \ | ||
atmf024.tile3.nc \ | ||
atmf024.tile4.nc \ | ||
atmf024.tile5.nc \ | ||
atmf024.tile6.nc \ | ||
gocart.inst_aod.20210323_0600z.nc4 \ | ||
RESTART/20210323.060000.coupler.res \ | ||
RESTART/20210323.060000.fv_core.res.nc \ | ||
RESTART/20210323.060000.fv_core.res.tile1.nc \ | ||
RESTART/20210323.060000.fv_core.res.tile2.nc \ | ||
RESTART/20210323.060000.fv_core.res.tile3.nc \ | ||
RESTART/20210323.060000.fv_core.res.tile4.nc \ | ||
RESTART/20210323.060000.fv_core.res.tile5.nc \ | ||
RESTART/20210323.060000.fv_core.res.tile6.nc \ | ||
RESTART/20210323.060000.fv_srf_wnd.res.tile1.nc \ | ||
RESTART/20210323.060000.fv_srf_wnd.res.tile2.nc \ | ||
RESTART/20210323.060000.fv_srf_wnd.res.tile3.nc \ | ||
RESTART/20210323.060000.fv_srf_wnd.res.tile4.nc \ | ||
RESTART/20210323.060000.fv_srf_wnd.res.tile5.nc \ | ||
RESTART/20210323.060000.fv_srf_wnd.res.tile6.nc \ | ||
RESTART/20210323.060000.fv_tracer.res.tile1.nc \ | ||
RESTART/20210323.060000.fv_tracer.res.tile2.nc \ | ||
RESTART/20210323.060000.fv_tracer.res.tile3.nc \ | ||
RESTART/20210323.060000.fv_tracer.res.tile4.nc \ | ||
RESTART/20210323.060000.fv_tracer.res.tile5.nc \ | ||
RESTART/20210323.060000.fv_tracer.res.tile6.nc \ | ||
RESTART/20210323.060000.phy_data.tile1.nc \ | ||
RESTART/20210323.060000.phy_data.tile2.nc \ | ||
RESTART/20210323.060000.phy_data.tile3.nc \ | ||
RESTART/20210323.060000.phy_data.tile4.nc \ | ||
RESTART/20210323.060000.phy_data.tile5.nc \ | ||
RESTART/20210323.060000.phy_data.tile6.nc \ | ||
RESTART/20210323.060000.sfc_data.tile1.nc \ | ||
RESTART/20210323.060000.sfc_data.tile2.nc \ | ||
RESTART/20210323.060000.sfc_data.tile3.nc \ | ||
RESTART/20210323.060000.sfc_data.tile4.nc \ | ||
RESTART/20210323.060000.sfc_data.tile5.nc \ | ||
RESTART/20210323.060000.sfc_data.tile6.nc \ | ||
RESTART/20210323.060000.MOM.res.nc \ | ||
RESTART/iced.2021-03-23-21600.nc \ | ||
RESTART/ufs.cpld.cpl.r.2021-03-23-21600.nc \ | ||
20210323.060000.out_pnt.ww3 \ | ||
20210323.060000.out_grd.ww3 \ | ||
ufs.cpld.lnd.out.2021-03-23-21600.tile1.nc \ | ||
ufs.cpld.lnd.out.2021-03-23-21600.tile2.nc \ | ||
ufs.cpld.lnd.out.2021-03-23-21600.tile3.nc \ | ||
ufs.cpld.lnd.out.2021-03-23-21600.tile4.nc \ | ||
ufs.cpld.lnd.out.2021-03-23-21600.tile5.nc \ | ||
ufs.cpld.lnd.out.2021-03-23-21600.tile6.nc" | ||
|
||
export CPLLND=.true. | ||
export CPLLND2ATM=.true. | ||
export UFS_CONFIGURE=ufs.configure.s2swal_fast.IN | ||
export lnd_model=noahmp | ||
export LND_tasks=144 | ||
export lnd_ic_type=sfc | ||
export CALC_SNET=.false. | ||
export layout_x=3 | ||
export layout_y=8 | ||
export LNDRES=C96 | ||
export coupling_interval_sec=720 | ||
export snow_albedo_option=1 | ||
export precip_partition_option=4 | ||
export initial_albedo=0.2 | ||
if [[ "$ATMRES" = "$LNDRES" ]]; then | ||
export lnd_input_dir="INPUT/" | ||
export mosaic_file="INPUT/${LNDRES}_mosaic.nc" | ||
export lnd_fixed_dir="./" | ||
export samegrid_atmlnd=.true. | ||
else | ||
export lnd_input_dir="INPUT/${LNDRES}/" | ||
export mosaic_file="INPUT/${LNDRES}/${LNDRES}_mosaic.nc" | ||
export lnd_fixed_dir="INPUT/${LNDRES}/" | ||
export samegrid_atmlnd=.false. | ||
fi |
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,94 @@ | ||
# | ||
# cpld_restart P8 test with land component | ||
# | ||
|
||
source tests/cpld_restart_p8 | ||
|
||
export TEST_DESCR="Fully coupled FV3-CCPP-GOCART-MOM6-CICE-CMEPS-WW3-NOAHMP system - C96MX100" | ||
|
||
export CNTL_DIR=cpld_control_p8_lnd | ||
|
||
export LIST_FILES="sfcf024.tile1.nc \ | ||
sfcf024.tile2.nc \ | ||
sfcf024.tile3.nc \ | ||
sfcf024.tile4.nc \ | ||
sfcf024.tile5.nc \ | ||
sfcf024.tile6.nc \ | ||
atmf024.tile1.nc \ | ||
atmf024.tile2.nc \ | ||
atmf024.tile3.nc \ | ||
atmf024.tile4.nc \ | ||
atmf024.tile5.nc \ | ||
atmf024.tile6.nc \ | ||
gocart.inst_aod.20210323_0600z.nc4 \ | ||
RESTART/20210323.060000.coupler.res \ | ||
RESTART/20210323.060000.fv_core.res.nc \ | ||
RESTART/20210323.060000.fv_core.res.tile1.nc \ | ||
RESTART/20210323.060000.fv_core.res.tile2.nc \ | ||
RESTART/20210323.060000.fv_core.res.tile3.nc \ | ||
RESTART/20210323.060000.fv_core.res.tile4.nc \ | ||
RESTART/20210323.060000.fv_core.res.tile5.nc \ | ||
RESTART/20210323.060000.fv_core.res.tile6.nc \ | ||
RESTART/20210323.060000.fv_srf_wnd.res.tile1.nc \ | ||
RESTART/20210323.060000.fv_srf_wnd.res.tile2.nc \ | ||
RESTART/20210323.060000.fv_srf_wnd.res.tile3.nc \ | ||
RESTART/20210323.060000.fv_srf_wnd.res.tile4.nc \ | ||
RESTART/20210323.060000.fv_srf_wnd.res.tile5.nc \ | ||
RESTART/20210323.060000.fv_srf_wnd.res.tile6.nc \ | ||
RESTART/20210323.060000.fv_tracer.res.tile1.nc \ | ||
RESTART/20210323.060000.fv_tracer.res.tile2.nc \ | ||
RESTART/20210323.060000.fv_tracer.res.tile3.nc \ | ||
RESTART/20210323.060000.fv_tracer.res.tile4.nc \ | ||
RESTART/20210323.060000.fv_tracer.res.tile5.nc \ | ||
RESTART/20210323.060000.fv_tracer.res.tile6.nc \ | ||
RESTART/20210323.060000.phy_data.tile1.nc \ | ||
RESTART/20210323.060000.phy_data.tile2.nc \ | ||
RESTART/20210323.060000.phy_data.tile3.nc \ | ||
RESTART/20210323.060000.phy_data.tile4.nc \ | ||
RESTART/20210323.060000.phy_data.tile5.nc \ | ||
RESTART/20210323.060000.phy_data.tile6.nc \ | ||
RESTART/20210323.060000.sfc_data.tile1.nc \ | ||
RESTART/20210323.060000.sfc_data.tile2.nc \ | ||
RESTART/20210323.060000.sfc_data.tile3.nc \ | ||
RESTART/20210323.060000.sfc_data.tile4.nc \ | ||
RESTART/20210323.060000.sfc_data.tile5.nc \ | ||
RESTART/20210323.060000.sfc_data.tile6.nc \ | ||
RESTART/20210323.060000.MOM.res.nc \ | ||
RESTART/iced.2021-03-23-21600.nc \ | ||
RESTART/ufs.cpld.cpl.r.2021-03-23-21600.nc \ | ||
20210323.060000.out_pnt.ww3 \ | ||
20210323.060000.out_grd.ww3 \ | ||
ufs.cpld.lnd.out.2021-03-23-21600.tile1.nc \ | ||
ufs.cpld.lnd.out.2021-03-23-21600.tile2.nc \ | ||
ufs.cpld.lnd.out.2021-03-23-21600.tile3.nc \ | ||
ufs.cpld.lnd.out.2021-03-23-21600.tile4.nc \ | ||
ufs.cpld.lnd.out.2021-03-23-21600.tile5.nc \ | ||
ufs.cpld.lnd.out.2021-03-23-21600.tile6.nc" | ||
|
||
# LND warm start | ||
export FV3_RUN="cpld_control_run.IN noahmp_run.IN" | ||
export CPLLND=.true. | ||
export CPLLND2ATM=.true. | ||
export UFS_CONFIGURE=ufs.configure.s2swal_fast.IN | ||
export lnd_model=noahmp | ||
export LND_tasks=144 | ||
export lnd_ic_type=sfc | ||
export CALC_SNET=.false. | ||
export layout_x=3 | ||
export layout_y=8 | ||
export LNDRES=C96 | ||
export coupling_interval_sec=720 | ||
export snow_albedo_option=1 | ||
export precip_partition_option=4 | ||
export initial_albedo=0.2 | ||
if [[ "$ATMRES" = "$LNDRES" ]]; then | ||
export lnd_input_dir="INPUT/" | ||
export mosaic_file="INPUT/${LNDRES}_mosaic.nc" | ||
export lnd_fixed_dir="./" | ||
export samegrid_atmlnd=.true. | ||
else | ||
export lnd_input_dir="INPUT/${LNDRES}/" | ||
export mosaic_file="INPUT/${LNDRES}/${LNDRES}_mosaic.nc" | ||
export lnd_fixed_dir="INPUT/${LNDRES}/" | ||
export samegrid_atmlnd=.false. | ||
fi |
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