diff --git a/testing_and_setup/compass/ocean/global_ocean/EC15to60/build_mesh/arctic_high_res_region.geojson b/testing_and_setup/compass/ocean/global_ocean/EC15to60/build_mesh/arctic_high_res_region.geojson
new file mode 100644
index 0000000000..830995a713
--- /dev/null
+++ b/testing_and_setup/compass/ocean/global_ocean/EC15to60/build_mesh/arctic_high_res_region.geojson
@@ -0,0 +1,77 @@
+{
+ "type": "FeatureCollection",
+ "features": [
+ {
+ "type": "Feature",
+ "properties": {
+ "name": "Arctic high-res region",
+ "component": "ocean",
+ "object": "region",
+ "author": "Luke Van Roekel"
+ },
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [
+ -66.4453125,
+ 50.82879925192134
+ ],
+ [
+ -2.109375,
+ 53.10743118848039
+ ],
+ [
+ 102.3046875,
+ 77.54209596075547
+ ],
+ [
+ 88.9453125,
+ 81.74845396137906
+ ],
+ [
+ 21.796875,
+ 84.08887757413991
+ ],
+ [
+ -40.78125,
+ 84.67351256610522
+ ],
+ [
+ -61.87499999999999,
+ 84.30218294503882
+ ],
+ [
+ -73.47656249999999,
+ 82.58610635020881
+ ],
+ [
+ -78.046875,
+ 81.77364370720657
+ ],
+ [
+ -87.1875,
+ 79.87429692631282
+ ],
+ [
+ -86.1328125,
+ 73.82482034613932
+ ],
+ [
+ -82.265625,
+ 68.65655498475735
+ ],
+ [
+ -74.1796875,
+ 58.81374171570782
+ ],
+ [
+ -66.4453125,
+ 50.82879925192134
+ ]
+ ]
+ ]
+ }
+ }
+ ]
+}
diff --git a/testing_and_setup/compass/ocean/global_ocean/EC15to60/build_mesh/build_base_mesh.py b/testing_and_setup/compass/ocean/global_ocean/EC15to60/build_mesh/build_base_mesh.py
new file mode 100755
index 0000000000..4eaf6234b4
--- /dev/null
+++ b/testing_and_setup/compass/ocean/global_ocean/EC15to60/build_mesh/build_base_mesh.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python
+import numpy as np
+import mpas_tools.mesh.creation.mesh_definition_tools as mdt
+from mpas_tools.ocean import build_spherical_mesh
+from mpas_tools.mesh.creation.signed_distance import \
+ signed_distance_from_geojson
+from mpas_tools.cime.constants import constants
+from geometric_features import read_feature_collection
+
+import xarray
+
+
+def cellWidthVsLatLon():
+ """
+ Create cell width array for this mesh on a regular latitude-longitude grid.
+ Returns
+ -------
+ cellWidth : ndarray
+ m x n array, entries are desired cell width in km
+
+ lat : ndarray
+ latitude, vector of length m, with entries between -90 and 90,
+ degrees
+
+ lon : ndarray
+ longitude, vector of length n, with entries between -180 and 180,
+ degrees
+ """
+
+ dlon = 0.1
+ dlat = dlon
+ nlon = int(360./dlon) + 1
+ nlat = int(180./dlat) + 1
+ lon = np.linspace(-180., 180., nlon)
+ lat = np.linspace(-90., 90., nlat)
+
+ cellWidthVsLat = mdt.EC_CellWidthVsLat(lat)
+
+ _, cellWidth = np.meshgrid(lon, cellWidthVsLat)
+
+ fc = read_feature_collection('north_mid_res_region.geojson')
+
+ earth_radius = constants['SHR_CONST_REARTH']
+
+ mr_signed_distance = signed_distance_from_geojson(fc, lon, lat,
+ earth_radius,
+ max_length=0.25)
+
+ fc = read_feature_collection('arctic_high_res_region.geojson')
+
+ hr_signed_distance = signed_distance_from_geojson(fc, lon, lat,
+ earth_radius,
+ max_length=0.25)
+
+ frac = (-mr_signed_distance / (-mr_signed_distance + hr_signed_distance))
+
+ frac = np.maximum(0., np.minimum(1., frac))
+
+ dx_min = 15.
+ dx_max = 30.
+
+ arctic_widths = dx_max + (dx_min - dx_max) * frac
+
+ trans_width = 1000e3
+ trans_start = 0.
+
+ weights = 0.5 * (1 + np.tanh((mr_signed_distance - trans_start) /
+ trans_width))
+
+ cellWidth = arctic_widths * (1 - weights) + cellWidth * weights
+
+ return cellWidth, lon, lat
+
+
+def main():
+ cellWidth, lon, lat = cellWidthVsLatLon()
+ build_spherical_mesh(cellWidth, lon, lat, out_filename='base_mesh.nc')
+
+
+if __name__ == '__main__':
+ main()
+
diff --git a/testing_and_setup/compass/ocean/global_ocean/EC15to60/build_mesh/config_base_mesh.xml b/testing_and_setup/compass/ocean/global_ocean/EC15to60/build_mesh/config_base_mesh.xml
new file mode 120000
index 0000000000..9177b99813
--- /dev/null
+++ b/testing_and_setup/compass/ocean/global_ocean/EC15to60/build_mesh/config_base_mesh.xml
@@ -0,0 +1 @@
+../../config_files/config_base_mesh.xml
\ No newline at end of file
diff --git a/testing_and_setup/compass/ocean/global_ocean/EC15to60/build_mesh/config_culled_mesh.xml b/testing_and_setup/compass/ocean/global_ocean/EC15to60/build_mesh/config_culled_mesh.xml
new file mode 120000
index 0000000000..9c49ba6246
--- /dev/null
+++ b/testing_and_setup/compass/ocean/global_ocean/EC15to60/build_mesh/config_culled_mesh.xml
@@ -0,0 +1 @@
+../../config_files/config_culled_mesh.xml
\ No newline at end of file
diff --git a/testing_and_setup/compass/ocean/global_ocean/EC15to60/build_mesh/config_driver.xml b/testing_and_setup/compass/ocean/global_ocean/EC15to60/build_mesh/config_driver.xml
new file mode 100644
index 0000000000..5b34eec160
--- /dev/null
+++ b/testing_and_setup/compass/ocean/global_ocean/EC15to60/build_mesh/config_driver.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/testing_and_setup/compass/ocean/global_ocean/EC15to60/build_mesh/north_mid_res_region.geojson b/testing_and_setup/compass/ocean/global_ocean/EC15to60/build_mesh/north_mid_res_region.geojson
new file mode 100644
index 0000000000..48f6e009da
--- /dev/null
+++ b/testing_and_setup/compass/ocean/global_ocean/EC15to60/build_mesh/north_mid_res_region.geojson
@@ -0,0 +1,70 @@
+{
+ "type": "FeatureCollection",
+ "features": [
+ {
+ "type": "Feature",
+ "properties": {
+ "stroke": "#555555",
+ "stroke-width": 2,
+ "stroke-opacity": 1,
+ "fill": "#555555",
+ "fill-opacity": 0.5,
+ "name": "northern mid res region",
+ "component": "ocean",
+ "object": "region",
+ "author": "Xylar Asay-Davis"
+ },
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [
+ -158.90625,
+ 65
+ ],
+ [
+ -115.6640625,
+ 56.559482483762245
+ ],
+ [
+ -75.234375,
+ 36.59788913307022
+ ],
+ [
+ -3.8671874999999996,
+ 38.272688535980976
+ ],
+ [
+ 101.953125,
+ 72.18180355624855
+ ],
+ [
+ 180,
+ 65
+ ],
+ [
+ 180,
+ 90
+ ],
+ [
+ 0,
+ 90
+ ],
+ [
+ -180,
+ 90
+ ],
+ [
+ -180,
+ 65
+ ],
+ [
+ -158.90625,
+ 65
+ ]
+ ]
+ ]
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/testing_and_setup/compass/ocean/global_ocean/EC15to60/files_for_e3sm/config_E3SM_coupling_files.ini b/testing_and_setup/compass/ocean/global_ocean/EC15to60/files_for_e3sm/config_E3SM_coupling_files.ini
new file mode 100644
index 0000000000..f6951d5ac1
--- /dev/null
+++ b/testing_and_setup/compass/ocean/global_ocean/EC15to60/files_for_e3sm/config_E3SM_coupling_files.ini
@@ -0,0 +1,77 @@
+# This is the custom config file specific to this test case. Any values here
+# will override the defaults in defaults.ini Users wishing to alter the
+# configuration should modify this file, rather than defaults.ini
+
+[main]
+nprocs = 1
+# the file name of the initial condition, possibly after spin-up
+initial_condition = ../../spin_up_EN4_1900/simulation/restarts/restart.0001-01-01_01.00.00.nc
+
+[mesh]
+short_name = ${prefix}${min_res}to${max_res}E${e3sm_version}r${mesh_version}
+long_name = ${prefix}${min_res}to${max_res}kmL${levels}E3SMv${e3sm_version}r${mesh_version}
+prefix = EC
+description = MPAS Eddy Closure mesh for E3SM version ${e3sm_version} with
+ enhanced resolution around the equator (30 km), South pole
+ (35 km), Greenland (${min_res} km), ${max_res}-km resolution at
+ mid latitudes, and ${levels} vertical levels. Bathymetry is from
+ GEBCO 2019, combined with BedMachineAntarctica around Antarctica.
+ The initial condition is from EN4 1900. The mesh is documented at
+ https://github.com/MPAS-Dev/MPAS-Model/pull/740
+e3sm_version = 2
+mesh_version = 04
+creation_date = autodetect
+min_res = 15
+max_res = 60
+max_depth = autodetect
+levels = autodetect
+runoff_description = <<>>
+
+# The following options are detected from .gitconfig if not explicitly entered
+author = autodetect
+email = autodetect
+
+[initial_condition_ocean]
+enable = true
+
+[graph_partition_ocean]
+enable = true
+
+[initial_condition_seaice]
+enable = true
+
+[scrip]
+enable = true
+
+[transects_and_regions]
+enable = true
+
+[mapping_analysis]
+enable = true
+
+[mapping_CORE_Gcase]
+enable = false
+
+[mapping_JRA_Gcase]
+enable = false
+
+[mapping_ne30]
+enable = false
+
+[domain_CORE_Gcase]
+enable = false
+
+[domain_JRA_Gcase]
+enable = false
+
+[domain_ne30]
+enable = false
+
+[mapping_runoff]
+enable = false
+
+[salinity_restoring]
+enable = false
+
+[prescribed_ismf]
+enable = false
diff --git a/testing_and_setup/compass/ocean/global_ocean/EC15to60/files_for_e3sm/config_driver.xml b/testing_and_setup/compass/ocean/global_ocean/EC15to60/files_for_e3sm/config_driver.xml
new file mode 100644
index 0000000000..b7331f7fd0
--- /dev/null
+++ b/testing_and_setup/compass/ocean/global_ocean/EC15to60/files_for_e3sm/config_driver.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/testing_and_setup/compass/ocean/global_ocean/EC15to60/files_for_e3sm/config_files_for_e3sm.xml b/testing_and_setup/compass/ocean/global_ocean/EC15to60/files_for_e3sm/config_files_for_e3sm.xml
new file mode 100644
index 0000000000..e816bf866e
--- /dev/null
+++ b/testing_and_setup/compass/ocean/global_ocean/EC15to60/files_for_e3sm/config_files_for_e3sm.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_EN4_1900/config_driver.xml b/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_EN4_1900/config_driver.xml
new file mode 100644
index 0000000000..7ac384432a
--- /dev/null
+++ b/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_EN4_1900/config_driver.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_EN4_1900/config_initial_state.xml b/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_EN4_1900/config_initial_state.xml
new file mode 100644
index 0000000000..3e24456371
--- /dev/null
+++ b/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_EN4_1900/config_initial_state.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 36
+
+
+
+
+
+
diff --git a/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_EN4_1900/config_initial_state_64_layers.xml b/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_EN4_1900/config_initial_state_64_layers.xml
new file mode 100644
index 0000000000..3b5ea008a7
--- /dev/null
+++ b/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_EN4_1900/config_initial_state_64_layers.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 4
+
+
+
+
+
+
+
+
+
diff --git a/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_EN4_1900/config_simulation.xml b/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_EN4_1900/config_simulation.xml
new file mode 100644
index 0000000000..2e391279f9
--- /dev/null
+++ b/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_EN4_1900/config_simulation.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ init.nc
+
+
+ init.nc
+
+
+
+ 00-00-00_01:00:00
+
+
+ 00-00-00_01:00:00
+
+
+
+
+
+
+
+
+ 128
+
+
+
+
+
diff --git a/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_EN4_1900/define_vertical_grid_64_layers.py b/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_EN4_1900/define_vertical_grid_64_layers.py
new file mode 120000
index 0000000000..4e1cac8e2b
--- /dev/null
+++ b/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_EN4_1900/define_vertical_grid_64_layers.py
@@ -0,0 +1 @@
+../../../scripts/vertical_grid/define_vertical_grid_64_layers.py
\ No newline at end of file
diff --git a/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_PHC/config_driver.xml b/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_PHC/config_driver.xml
new file mode 100644
index 0000000000..7ac384432a
--- /dev/null
+++ b/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_PHC/config_driver.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_PHC/config_initial_state.xml b/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_PHC/config_initial_state.xml
new file mode 100644
index 0000000000..ad0dcab2a5
--- /dev/null
+++ b/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_PHC/config_initial_state.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 36
+
+
+
+
+
+
diff --git a/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_PHC/config_initial_state_64_layer.xml b/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_PHC/config_initial_state_64_layer.xml
new file mode 100644
index 0000000000..92a7495014
--- /dev/null
+++ b/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_PHC/config_initial_state_64_layer.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 4
+
+
+
+
+
+
+
+
+
diff --git a/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_PHC/config_simulation.xml b/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_PHC/config_simulation.xml
new file mode 100644
index 0000000000..2e391279f9
--- /dev/null
+++ b/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_PHC/config_simulation.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ init.nc
+
+
+ init.nc
+
+
+
+ 00-00-00_01:00:00
+
+
+ 00-00-00_01:00:00
+
+
+
+
+
+
+
+
+ 128
+
+
+
+
+
diff --git a/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_PHC/define_vertical_grid_64_layers.py b/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_PHC/define_vertical_grid_64_layers.py
new file mode 120000
index 0000000000..4e1cac8e2b
--- /dev/null
+++ b/testing_and_setup/compass/ocean/global_ocean/EC15to60/spin_up_PHC/define_vertical_grid_64_layers.py
@@ -0,0 +1 @@
+../../../scripts/vertical_grid/define_vertical_grid_64_layers.py
\ No newline at end of file
diff --git a/testing_and_setup/compass/ocean/global_ocean/EC15to60/template_GEBCO_bathymetry.xml b/testing_and_setup/compass/ocean/global_ocean/EC15to60/template_GEBCO_bathymetry.xml
new file mode 100644
index 0000000000..eb8d55683f
--- /dev/null
+++ b/testing_and_setup/compass/ocean/global_ocean/EC15to60/template_GEBCO_bathymetry.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing_and_setup/compass/ocean/global_ocean/EC15to60/template_forward.xml b/testing_and_setup/compass/ocean/global_ocean/EC15to60/template_forward.xml
new file mode 100644
index 0000000000..12f402aeb2
--- /dev/null
+++ b/testing_and_setup/compass/ocean/global_ocean/EC15to60/template_forward.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing_and_setup/compass/ocean/global_ocean/config_files/config_base_mesh.xml b/testing_and_setup/compass/ocean/global_ocean/config_files/config_base_mesh.xml
index 39152518a9..52d551f1ce 100644
--- a/testing_and_setup/compass/ocean/global_ocean/config_files/config_base_mesh.xml
+++ b/testing_and_setup/compass/ocean/global_ocean/config_files/config_base_mesh.xml
@@ -2,6 +2,8 @@
+
+