diff --git a/testcases/idealized_single_cell/create_forcing.py b/testcases/idealized_single_cell/create_forcing.py
new file mode 100644
index 0000000..7b99b85
--- /dev/null
+++ b/testcases/idealized_single_cell/create_forcing.py
@@ -0,0 +1,225 @@
+from netCDF4 import Dataset
+import numpy as np
+import netCDF4
+
+#-------------------------------------------------------------------------------
+
+def create_output_times(inputTimesPerYear, year):
+
+ daysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31]
+
+ xtimes = []
+
+ if (inputTimesPerYear == 1460):
+
+ minute = 0
+ second = 0
+
+ for iMonth in range(0,12):
+ for iDay in range(0,daysInMonth[iMonth]):
+ for iSixHours in range(0,4):
+
+ month = iMonth + 1
+ day = iDay + 1
+ hour = (iSixHours + 1) * 6
+
+ timeStr = "%4.4i-%2.2i-%2.2i_%2.2i:%2.2i:%2.2i" %(year,month,day,hour,minute,second)
+ xtimes.append(timeStr)
+
+ elif (inputTimesPerYear == 12):
+
+ day = 15
+ hour = 0
+ minute = 0
+ second = 0
+
+ for iMonth in range(0,12):
+
+ month = iMonth + 1
+
+ timeStr = "%4.4i-%2.2i-%2.2i_%2.2i:%2.2i:%2.2i" %(year,month,day,hour,minute,second)
+ xtimes.append(timeStr)
+
+ return xtimes
+
+#-------------------------------------------------------------------------------
+
+def create_forcing_subtest(
+ forcingName,
+ airTemperature,
+ airSpecificHumidity,
+ uAirVelocity,
+ vAirVelocity,
+ cloudFraction,
+ rainfallRate,
+ seaSurfaceSalinity,
+ seaSurfaceTemperature,
+ uOceanVelocity,
+ vOceanVelocity,
+ seaSurfaceTiltU,
+ seaSurfaceTiltV,
+ oceanMixedLayerDepth,
+ oceanHeatFluxConvergence):
+
+ # six hourly atmos forcing
+ fileOut = Dataset("atmosphere_forcing_six_hourly.%s.2000.nc" %(forcingName),"w",format="NETCDF3_CLASSIC")
+
+ fileOut.createDimension("nCells",1)
+ fileOut.createDimension("StrLen",64)
+ fileOut.createDimension("Time",None)
+
+ # time
+ xtimes = create_output_times(1460, 2000)
+ varXtime = fileOut.createVariable("xtime","c",dimensions=["Time","StrLen"])
+ for iTime in range(0,1460):
+ varXtime[iTime,0:19] = netCDF4.stringtochar(np.array(xtimes[iTime], 'S19'))
+ varXtime[iTime,19:] = " "*45
+
+ airTemperatureVar = fileOut.createVariable("airTemperature","d",dimensions=["Time", "nCells"])
+ airSpecificHumidityVar = fileOut.createVariable("airSpecificHumidity","d",dimensions=["Time", "nCells"])
+ uAirVelocityVar = fileOut.createVariable("uAirVelocity","d",dimensions=["Time", "nCells"])
+ vAirVelocityVar = fileOut.createVariable("vAirVelocity","d",dimensions=["Time", "nCells"])
+
+ airTemperatureVar[:] = airTemperature
+ airSpecificHumidityVar[:] = airSpecificHumidity
+ uAirVelocityVar[:] = uAirVelocity
+ vAirVelocityVar[:] = vAirVelocity
+
+ fileOut.close()
+
+ # monthly atmos forcing
+ fileOut = Dataset("atmosphere_forcing_monthly.%s.nc" %(forcingName),"w",format="NETCDF3_CLASSIC")
+
+ fileOut.createDimension("nCells",1)
+ fileOut.createDimension("StrLen",64)
+ fileOut.createDimension("Time",None)
+
+ # time
+ xtimes = create_output_times(12, 0)
+ varXtime = fileOut.createVariable("xtime","c",dimensions=["Time","StrLen"])
+ for iTime in range(0,12):
+ varXtime[iTime,0:19] = netCDF4.stringtochar(np.array(xtimes[iTime], 'S19'))
+ varXtime[iTime,19:] = " "*45
+
+ cloudFractionVar = fileOut.createVariable("cloudFraction","d",dimensions=["Time", "nCells"])
+ rainfallRateVar = fileOut.createVariable("rainfallRate","d",dimensions=["Time", "nCells"])
+
+ cloudFractionVar[:] = cloudFraction
+ rainfallRateVar[:] = rainfallRate
+
+ fileOut.close()
+
+ # monthly ocean forcing
+ fileOut = Dataset("ocean_forcing_monthly.%s.nc" %(forcingName),"w",format="NETCDF3_CLASSIC")
+
+ fileOut.createDimension("nCells",1)
+ fileOut.createDimension("StrLen",64)
+ fileOut.createDimension("Time",None)
+
+ # time
+ xtimes = create_output_times(12, 0)
+ varXtime = fileOut.createVariable("xtime","c",dimensions=["Time","StrLen"])
+ for iTime in range(0,12):
+ varXtime[iTime,0:19] = netCDF4.stringtochar(np.array(xtimes[iTime], 'S19'))
+ varXtime[iTime,19:] = " "*45
+
+ cloudFractionVar = fileOut.createVariable("cloudFraction","d",dimensions=["Time", "nCells"])
+ rainfallRateVar = fileOut.createVariable("rainfallRate","d",dimensions=["Time", "nCells"])
+
+ seaSurfaceSalinityVar = fileOut.createVariable("seaSurfaceSalinity","d",dimensions=["Time", "nCells"])
+ seaSurfaceTemperatureVar = fileOut.createVariable("seaSurfaceTemperature","d",dimensions=["Time", "nCells"])
+ uOceanVelocityVar = fileOut.createVariable("uOceanVelocity","d",dimensions=["Time", "nCells"])
+ vOceanVelocityVar = fileOut.createVariable("vOceanVelocity","d",dimensions=["Time", "nCells"])
+ seaSurfaceTiltUVar = fileOut.createVariable("seaSurfaceTiltU","d",dimensions=["Time", "nCells"])
+ seaSurfaceTiltVVar = fileOut.createVariable("seaSurfaceTiltV","d",dimensions=["Time", "nCells"])
+ oceanMixedLayerDepthVar = fileOut.createVariable("oceanMixedLayerDepth","d",dimensions=["Time", "nCells"])
+ oceanHeatFluxConvergenceVar = fileOut.createVariable("oceanHeatFluxConvergence","d",dimensions=["Time", "nCells"])
+
+ seaSurfaceSalinityVar[:] = seaSurfaceSalinity
+ seaSurfaceTemperatureVar[:] = seaSurfaceTemperature
+ uOceanVelocityVar[:] = uOceanVelocity
+ vOceanVelocityVar[:] = vOceanVelocity
+ seaSurfaceTiltUVar[:] = seaSurfaceTiltU
+ seaSurfaceTiltVVar[:] = seaSurfaceTiltV
+ oceanMixedLayerDepthVar[:] = oceanMixedLayerDepth
+ oceanHeatFluxConvergenceVar[:] = oceanHeatFluxConvergence
+
+ fileOut.close()
+
+#-------------------------------------------------------------------------------
+
+def create_forcing():
+
+ processes = ["congelation",
+ "surface_ice_melt",
+ "frazil"]
+
+ args = {"congelation":
+ {"airTemperature":273.15 - 30.0, # Kelvin
+ "airSpecificHumidity":0.0001,
+ "uAirVelocity":0.0,
+ "vAirVelocity":0.0,
+ "cloudFraction":1.0,
+ "rainfallRate":0.0,
+ "seaSurfaceSalinity":34.0,
+ "seaSurfaceTemperature":-1.8,
+ "uOceanVelocity":0.0,
+ "vOceanVelocity":0.0,
+ "seaSurfaceTiltU":0.0,
+ "seaSurfaceTiltV":0.0,
+ "oceanMixedLayerDepth":50.0,
+ "oceanHeatFluxConvergence":0.0},
+ "surface_ice_melt":
+ {"airTemperature":273.15 + 30.0, # Kelvin
+ "airSpecificHumidity":0.0001,
+ "uAirVelocity":0.0,
+ "vAirVelocity":0.0,
+ "cloudFraction":1.0,
+ "rainfallRate":0.0,
+ "seaSurfaceSalinity":34.0,
+ "seaSurfaceTemperature":-1.8,
+ "uOceanVelocity":0.0,
+ "vOceanVelocity":0.0,
+ "seaSurfaceTiltU":0.0,
+ "seaSurfaceTiltV":0.0,
+ "oceanMixedLayerDepth":50.0,
+ "oceanHeatFluxConvergence":0.0},
+ "frazil":
+ {"airTemperature":273.15 - 30.0, # Kelvin
+ "airSpecificHumidity":0.0001,
+ "uAirVelocity":0.0,
+ "vAirVelocity":0.0,
+ "cloudFraction":1.0,
+ "rainfallRate":0.0,
+ "seaSurfaceSalinity":34.0,
+ "seaSurfaceTemperature":-1.8,
+ "uOceanVelocity":0.0,
+ "vOceanVelocity":0.0,
+ "seaSurfaceTiltU":0.0,
+ "seaSurfaceTiltV":0.0,
+ "oceanMixedLayerDepth":50.0,
+ "oceanHeatFluxConvergence":0.0}}
+
+ for process in processes:
+ create_forcing_subtest(
+ process,
+ args[process]["airTemperature"],
+ args[process]["airSpecificHumidity"],
+ args[process]["uAirVelocity"],
+ args[process]["vAirVelocity"],
+ args[process]["cloudFraction"],
+ args[process]["rainfallRate"],
+ args[process]["seaSurfaceSalinity"],
+ args[process]["seaSurfaceTemperature"],
+ args[process]["uOceanVelocity"],
+ args[process]["vOceanVelocity"],
+ args[process]["seaSurfaceTiltU"],
+ args[process]["seaSurfaceTiltV"],
+ args[process]["oceanMixedLayerDepth"],
+ args[process]["oceanHeatFluxConvergence"])
+
+#-------------------------------------------------------------------------------
+
+if __name__ == "__main__":
+
+ create_forcing()
diff --git a/testcases/idealized_single_cell/create_mesh.py b/testcases/idealized_single_cell/create_mesh.py
new file mode 100644
index 0000000..949ed8f
--- /dev/null
+++ b/testcases/idealized_single_cell/create_mesh.py
@@ -0,0 +1,85 @@
+from netCDF4 import Dataset
+import math
+import os
+import matplotlib.pyplot as plt
+import numpy as np
+
+#-------------------------------------------------------------------------------
+
+def create_mesh():
+
+ mpas_tools_dir = os.environ['MPAS_TOOLS_DIR']
+
+ fileGrid = Dataset("grid_in.nc","w",format="NETCDF3_CLASSIC")
+
+ fileGrid.on_a_sphere = "NO"
+
+ nCells = 1
+ nVertices = 4
+ vertexDegree = 4
+
+ fileGrid.createDimension("nCells", nCells)
+ fileGrid.createDimension("nVertices", nVertices)
+ fileGrid.createDimension("vertexDegree", vertexDegree)
+
+ xCell = np.zeros(nCells)
+ yCell = np.zeros(nCells)
+ zCell = np.zeros(nCells)
+
+ xVertex = np.zeros(nVertices)
+ yVertex = np.zeros(nVertices)
+ zVertex = np.zeros(nVertices)
+ cellsOnVertex = np.zeros((nVertices,vertexDegree),dtype="i")
+ cellsOnVertex[:] = -1
+
+ xVertex[0] = -0.5
+ yVertex[0] = -0.5
+ cellsOnVertex[0,0] = 0
+
+ xVertex[1] = 0.5
+ yVertex[1] = -0.5
+ cellsOnVertex[1,0] = 0
+
+ xVertex[2] = 0.5
+ yVertex[2] = 0.5
+ cellsOnVertex[2,0] = 0
+
+ xVertex[3] = -0.5
+ yVertex[3] = 0.5
+ cellsOnVertex[3,0] = 0
+
+ var = fileGrid.createVariable("xCell","d",dimensions=["nCells"])
+ var[:] = xCell[:]
+ var = fileGrid.createVariable("yCell","d",dimensions=["nCells"])
+ var[:] = yCell[:]
+ var = fileGrid.createVariable("zCell","d",dimensions=["nCells"])
+ var[:] = zCell[:]
+
+ var = fileGrid.createVariable("xVertex","d",dimensions=["nVertices"])
+ var[:] = xVertex[:]
+ var = fileGrid.createVariable("yVertex","d",dimensions=["nVertices"])
+ var[:] = yVertex[:]
+ var = fileGrid.createVariable("zVertex","d",dimensions=["nVertices"])
+ var[:] = zVertex[:]
+
+ cellsOnVertex[:] += 1
+ var = fileGrid.createVariable("cellsOnVertex","i",dimensions=["nVertices","vertexDegree"])
+ var[:] = cellsOnVertex[:]
+
+ fileGrid.close()
+
+ os.system("%s/mesh_tools/mesh_conversion_tools/MpasMeshConverter.x grid_in.nc grid.nc" %(mpas_tools_dir))
+
+ fileGrid = Dataset("grid.nc","a")
+
+ fileGrid.variables["latCell"][:] = math.radians(80.0)
+ fileGrid.variables["latVertex"][:] = math.radians(80.0)
+ fileGrid.variables["latEdge"][:] = math.radians(80.0)
+
+ fileGrid.close()
+
+#-------------------------------------------------------------------------------
+
+if __name__ == "__main__":
+
+ create_mesh()
diff --git a/testcases/idealized_single_cell/namelist.seaice.congelation b/testcases/idealized_single_cell/namelist.seaice.congelation
new file mode 100644
index 0000000..b8f4ce6
--- /dev/null
+++ b/testcases/idealized_single_cell/namelist.seaice.congelation
@@ -0,0 +1,519 @@
+&seaice_model
+ config_dt = 3600.0
+ config_calendar_type = 'gregorian_noleap'
+ config_start_time = '2000-01-01_00:00:00'
+ config_stop_time = 'none'
+ config_run_duration = '00-00-20_00:00:00'
+ config_num_halos = 2
+/
+&io
+ config_pio_num_iotasks = 0
+ config_pio_stride = 1
+ config_write_output_on_startup = false
+ config_test_case_diag = false
+ config_test_case_diag_type = 'none'
+ config_full_abort_write = true
+/
+&decomposition
+ config_block_decomp_file_prefix = 'graphs/graph.info.part.'
+ config_number_of_blocks = 0
+ config_explicit_proc_decomp = false
+ config_proc_decomp_file_prefix = 'graphs/graph.info.part.'
+ config_use_halo_exch = true
+ config_aggregate_halo_exch = false
+ config_reuse_halo_exch = false
+ config_load_balance_timers = false
+/
+&restart
+ config_do_restart = false
+ config_restart_timestamp_name = 'restart_timestamp'
+ config_do_restart_hbrine = false
+ config_do_restart_zsalinity = false
+ config_do_restart_bgc = false
+ config_do_restart_snow_density = false
+ config_do_restart_snow_grain_radius = false
+/
+&dimensions
+ config_nCategories = 1
+ config_nIceLayers = 7
+ config_nSnowLayers = 1
+/
+&initialize
+ config_earth_radius = 6371229.0
+ config_initial_condition_type = 'single_cell'
+ config_initial_ice_area = 1.0
+ config_initial_ice_volume = 1.0
+ config_initial_snow_volume = 0.0
+ config_initial_latitude_north = 70.0
+ config_initial_latitude_south = -60.0
+ config_initial_velocity_type = 'uniform'
+ config_initial_uvelocity = 0.0
+ config_initial_vvelocity = 0.0
+ config_calculate_coriolis = true
+/
+&use_sections
+ config_use_dynamics = true
+ config_use_velocity_solver = false
+ config_use_advection = false
+ config_use_forcing = true
+ config_use_column_package = true
+ config_use_prescribed_ice = false
+ config_use_prescribed_ice_forcing = false
+/
+&forcing
+ config_atmospheric_forcing_type = 'CORE'
+ config_forcing_start_time = '2000-01-01_00:00:00'
+ config_forcing_cycle_start = '2000-01-01_00:00:00'
+ config_forcing_cycle_duration = '2-00-00_00:00:00'
+ config_forcing_precipitation_units = 'mm_per_sec'
+ config_forcing_sst_type = 'som_varying_thickness'
+ config_update_ocean_fluxes = false
+ config_include_pond_freshwater_feedback = false
+/
+&testing
+ config_use_test_ice_shelf = false
+ config_testing_system_test = false
+ config_use_congelation_basal_melt = true
+ config_use_lateral_melt = false
+ config_use_latent_processes = false
+ config_limit_air_temperatures = true
+/
+&velocity_solver
+ config_dynamics_subcycle_number = 1
+ config_rotate_cartesian_grid = true
+ config_include_metric_terms = true
+ config_elastic_subcycle_number = 120
+ config_strain_scheme = 'variational'
+ config_constitutive_relation_type = 'evp'
+ config_stress_divergence_scheme = 'variational'
+ config_variational_basis = 'wachspress'
+ config_variational_denominator_type = 'original'
+ config_wachspress_integration_type = 'dunavant'
+ config_wachspress_integration_order = 8
+ config_average_variational_strain = false
+ config_calc_velocity_masks = true
+ config_use_air_stress = true
+ config_use_ocean_stress = true
+ config_use_surface_tilt = true
+ config_geostrophic_surface_tilt = true
+ config_ocean_stress_type = 'quadratic'
+ config_use_special_boundaries_velocity = false
+ config_use_special_boundaries_velocity_masks = false
+/
+&advection
+ config_advection_type = 'incremental_remap'
+ config_monotonic = true
+ config_conservation_check = false
+ config_monotonicity_check = false
+ config_recover_tracer_means_check = false
+/
+&column_package
+ config_use_column_shortwave = true
+ config_use_column_vertical_thermodynamics = true
+ config_use_column_biogeochemistry = false
+ config_use_column_itd_thermodynamics = false
+ config_use_column_ridging = false
+ config_use_column_snow_tracers = false
+/
+&column_tracers
+ config_use_ice_age = true
+ config_use_first_year_ice = true
+ config_use_level_ice = true
+ config_use_cesm_meltponds = false
+ config_use_level_meltponds = true
+ config_use_topo_meltponds = false
+ config_use_aerosols = false
+ config_use_effective_snow_density = false
+ config_use_snow_grain_radius = false
+ config_use_special_boundaries_tracers = false
+/
+&biogeochemistry
+ config_use_brine = false
+ config_use_vertical_zsalinity = false
+ config_use_vertical_biochemistry = false
+ config_use_shortwave_bioabsorption = false
+ config_use_vertical_tracers = false
+ config_use_skeletal_biochemistry = false
+ config_use_nitrate = false
+ config_use_carbon = false
+ config_use_chlorophyll = false
+ config_use_ammonium = false
+ config_use_silicate = false
+ config_use_DMS = false
+ config_use_nonreactive = false
+ config_use_humics = false
+ config_use_DON = false
+ config_use_iron = false
+ config_use_macromolecules = false
+ config_use_modal_aerosols = false
+ config_use_zaerosols = false
+ config_skeletal_bgc_flux_type = 'Jin2006'
+ config_scale_initial_vertical_bgc = false
+ config_biogrid_bottom_molecular_sublayer = 0.006
+ config_biogrid_top_molecular_sublayer = 0.006
+ config_bio_gravity_drainage_length_scale = 0.024
+ config_zsalinity_molecular_sublayer = 0.0
+ config_zsalinity_gravity_drainage_scale = 0.028
+ config_snow_porosity_at_ice_surface = -0.3
+ config_new_ice_fraction_biotracer = 0.80
+ config_fraction_biotracer_in_frazil = 0.80
+ config_ratio_Si_to_N_diatoms = 1.80
+ config_ratio_Si_to_N_small_plankton = 0.00
+ config_ratio_Si_to_N_phaeocystis = 0.00
+ config_ratio_S_to_N_diatoms = 0.03
+ config_ratio_S_to_N_small_plankton = 0.03
+ config_ratio_S_to_N_phaeocystis = 0.03
+ config_ratio_Fe_to_C_diatoms = 0.0033
+ config_ratio_Fe_to_C_small_plankton = 0.0033
+ config_ratio_Fe_to_C_phaeocystis = 0.1
+ config_ratio_Fe_to_N_diatoms = 0.023
+ config_ratio_Fe_to_N_small_plankton = 0.023
+ config_ratio_Fe_to_N_phaeocystis = 0.7
+ config_ratio_Fe_to_DON = 0.023
+ config_ratio_Fe_to_DOC_saccharids = 0.1
+ config_ratio_Fe_to_DOC_lipids = 0.033
+ config_respiration_fraction_of_growth = 0.05
+ config_rapid_mobile_to_stationary_time = 5200.0
+ config_long_mobile_to_stationary_time = 173000.0
+ config_algal_maximum_velocity = 0.0000000111
+ config_ratio_Fe_to_dust = 0.035
+ config_solubility_of_Fe_in_dust = 0.005
+ config_chla_absorptivity_of_diatoms = 0.03
+ config_chla_absorptivity_of_small_plankton = 0.01
+ config_chla_absorptivity_of_phaeocystis = 0.05
+ config_light_attenuation_diatoms = 0.8
+ config_light_attenuation_small_plankton = 0.67
+ config_light_attenuation_phaeocystis = 0.67
+ config_light_inhibition_diatoms = 0.018
+ config_light_inhibition_small_plankton = 0.0025
+ config_light_inhibition_phaeocystis = 0.01
+ config_maximum_growth_rate_diatoms = 1.44
+ config_maximum_growth_rate_small_plankton = 0.851
+ config_maximum_growth_rate_phaeocystis = 0.851
+ config_temperature_growth_diatoms = 0.06
+ config_temperature_growth_small_plankton = 0.06
+ config_temperature_growth_phaeocystis = 0.06
+ config_grazed_fraction_diatoms = 0.0
+ config_grazed_fraction_small_plankton = 0.1
+ config_grazed_fraction_phaeocystis = 0.1
+ config_mortality_diatoms = 0.007
+ config_mortality_small_plankton = 0.007
+ config_mortality_phaeocystis = 0.007
+ config_temperature_mortality_diatoms = 0.03
+ config_temperature_mortality_small_plankton = 0.03
+ config_temperature_mortality_phaeocystis = 0.03
+ config_exudation_diatoms = 0.0
+ config_exudation_small_plankton = 0.0
+ config_exudation_phaeocystis = 0.0
+ config_nitrate_saturation_diatoms = 1.0
+ config_nitrate_saturation_small_plankton = 1.0
+ config_nitrate_saturation_phaeocystis = 1.0
+ config_ammonium_saturation_diatoms = 0.3
+ config_ammonium_saturation_small_plankton = 0.3
+ config_ammonium_saturation_phaeocystis = 0.3
+ config_silicate_saturation_diatoms = 4.0
+ config_silicate_saturation_small_plankton = 0.0
+ config_silicate_saturation_phaeocystis = 0.0
+ config_iron_saturation_diatoms = 1.0
+ config_iron_saturation_small_plankton = 0.2
+ config_iron_saturation_phaeocystis = 0.1
+ config_fraction_spilled_to_DON = 0.6
+ config_degredation_of_DON = 0.03
+ config_fraction_DON_ammonium = 0.25
+ config_fraction_loss_to_saccharids = 0.4
+ config_fraction_loss_to_lipids = 0.4
+ config_fraction_exudation_to_saccharids = 1.0
+ config_fraction_exudation_to_lipids = 1.0
+ config_remineralization_saccharids = 0.03
+ config_remineralization_lipids = 0.03
+ config_maximum_brine_temperature = 0.0
+ config_salinity_dependence_of_growth = 1.0
+ config_minimum_optical_depth = 0.1
+ config_slopped_grazing_fraction = 0.5
+ config_excreted_fraction = 0.5
+ config_fraction_mortality_to_ammonium = 0.5
+ config_fraction_iron_remineralized = 0.3
+ config_nitrification_rate = 0.0
+ config_desorption_loss_particulate_iron = 3065.0
+ config_maximum_loss_fraction = 0.9
+ config_maximum_ratio_iron_to_saccharids = 0.2
+ config_respiration_loss_to_DMSPd = 0.75
+ config_DMSP_to_DMS_conversion_fraction = 0.5
+ config_DMSP_to_DMS_conversion_time = 3.0
+ config_DMS_oxidation_time = 10.0
+ config_mobility_type_diatoms = 0.0
+ config_mobility_type_small_plankton = 0.5
+ config_mobility_type_phaeocystis = 0.5
+ config_mobility_type_nitrate = -1.0
+ config_mobility_type_ammonium = 1.0
+ config_mobility_type_silicate = -1.0
+ config_mobility_type_DMSPp = 0.5
+ config_mobility_type_DMSPd = -1.0
+ config_mobility_type_humics = 1.0
+ config_mobility_type_saccharids = 0.5
+ config_mobility_type_lipids = 0.5
+ config_mobility_type_inorganic_carbon = -1.0
+ config_mobility_type_proteins = 0.5
+ config_mobility_type_dissolved_iron = 0.5
+ config_mobility_type_particulate_iron = 0.5
+ config_mobility_type_black_carbon1 = 1.0
+ config_mobility_type_black_carbon2 = 1.0
+ config_mobility_type_dust1 = 1.0
+ config_mobility_type_dust2 = 1.0
+ config_mobility_type_dust3 = 1.0
+ config_mobility_type_dust4 = 1.0
+ config_ratio_C_to_N_diatoms = 7.0
+ config_ratio_C_to_N_small_plankton = 7.0
+ config_ratio_C_to_N_phaeocystis = 7.0
+ config_ratio_chla_to_N_diatoms = 2.1
+ config_ratio_chla_to_N_small_plankton = 1.1
+ config_ratio_chla_to_N_phaeocystis = 0.84
+ config_scales_absorption_diatoms = 2.0
+ config_scales_absorption_small_plankton = 4.0
+ config_scales_absorption_phaeocystis = 5.0
+ config_ratio_C_to_N_proteins = 7.0
+/
+&shortwave
+ config_shortwave_type = 'dEdd'
+ config_albedo_type = 'ccsm3'
+ config_use_snicar_ad = false
+ config_visible_ice_albedo = 0.78
+ config_infrared_ice_albedo = 0.36
+ config_visible_snow_albedo = 0.98
+ config_infrared_snow_albedo = 0.70
+ config_variable_albedo_thickness_limit = 0.3
+ config_ice_shortwave_tuning_parameter = 0.0
+ config_pond_shortwave_tuning_parameter = 0.0
+ config_snow_shortwave_tuning_parameter = 1.5
+ config_temp_change_snow_grain_radius_change = 1.5
+ config_max_melting_snow_grain_radius = 1500.0
+ config_algae_absorption_coefficient = 0.6
+/
+&snow
+ config_snow_redistribution_scheme = 'none'
+ config_fallen_snow_radius = 54.526
+ config_use_snow_liquid_ponds = false
+ config_new_snow_density = 100.0
+ config_max_snow_density = 450.0
+ config_minimum_wind_compaction = 10.0
+ config_wind_compaction_factor = 27.3
+ config_max_dry_snow_radius = 1800.0
+/
+&meltponds
+ config_snow_to_ice_transition_depth = 0.0
+ config_pond_refreezing_type = 'hlid'
+ config_pond_flushing_timescale = 1.0e-3
+ config_min_meltwater_retained_fraction = 0.15
+ config_max_meltwater_retained_fraction = 1.0
+ config_pond_depth_to_fraction_ratio = 0.8
+ config_snow_on_pond_ice_tapering_parameter = 0.03
+ config_critical_pond_ice_thickness = 0.01
+/
+&thermodynamics
+ config_thermodynamics_type = 'mushy'
+ config_heat_conductivity_type = 'bubbly'
+ config_rapid_mode_channel_radius = 0.5e-3
+ config_rapid_model_critical_Ra = 10.0
+ config_rapid_mode_aspect_ratio = 1.0
+ config_slow_mode_drainage_strength = -5.0e-8
+ config_slow_mode_critical_porosity = 0.05
+ config_congelation_ice_porosity = 0.85
+/
+&itd
+ config_itd_conversion_type = 'delta function'
+ config_category_bounds_type = 'single category'
+/
+&ridging
+ config_ice_strength_formulation = 'Rothrock75'
+ config_ridging_participation_function = 'exponential'
+ config_ridging_redistribution_function = 'exponential'
+ config_ridiging_efolding_scale = 3.0
+ config_ratio_ridging_work_to_PE = 17.0
+/
+&atmosphere
+ config_atmos_boundary_method = 'ccsm3'
+ config_calc_surface_stresses = true
+ config_calc_surface_temperature = true
+ config_use_form_drag = false
+ config_use_high_frequency_coupling = false
+ config_boundary_layer_iteration_number = 5
+/
+&ocean
+ config_use_ocean_mixed_layer = true
+ config_ocean_mixed_layer_type = "e3sm"
+ config_min_friction_velocity = 0.0005
+ config_ocean_heat_transfer_type = 'constant'
+ config_sea_freezing_temperature_type = 'mushy'
+ config_ocean_surface_type = 'free'
+ config_couple_biogeochemistry_fields = false
+ config_use_data_icebergs = false
+/
+&diagnostics
+ config_check_state = false
+/
+&AM_highFrequencyOutput
+ config_AM_highFrequencyOutput_enable = false
+ config_AM_highFrequencyOutput_compute_interval = 'output_interval'
+ config_AM_highFrequencyOutput_output_stream = 'highFrequencyOutput'
+ config_AM_highFrequencyOutput_compute_on_startup = true
+ config_AM_highFrequencyOutput_write_on_startup = true
+/
+&AM_temperatures
+ config_AM_temperatures_enable = true
+ config_AM_temperatures_compute_interval = 'dt'
+ config_AM_temperatures_output_stream = 'none'
+ config_AM_temperatures_compute_on_startup = false
+ config_AM_temperatures_write_on_startup = false
+/
+&AM_regionalStatistics
+ config_AM_regionalStatistics_enable = false
+ config_AM_regionalStatistics_compute_interval = 'output_interval'
+ config_AM_regionalStatistics_output_stream = 'regionalStatisticsOutput'
+ config_AM_regionalStatistics_compute_on_startup = false
+ config_AM_regionalStatistics_write_on_startup = false
+ config_AM_regionalStatistics_ice_extent_limit = 0.15
+/
+&AM_ridgingDiagnostics
+ config_AM_ridgingDiagnostics_enable = false
+ config_AM_ridgingDiagnostics_compute_interval = 'dt'
+ config_AM_ridgingDiagnostics_output_stream = 'none'
+ config_AM_ridgingDiagnostics_compute_on_startup = false
+ config_AM_ridgingDiagnostics_write_on_startup = false
+/
+&AM_conservationCheck
+ config_AM_conservationCheck_enable = true
+ config_AM_conservationCheck_compute_interval = 'dt'
+ config_AM_conservationCheck_output_stream = 'conservationCheckOutput'
+ config_AM_conservationCheck_compute_on_startup = false
+ config_AM_conservationCheck_write_on_startup = false
+ config_AM_conservationCheck_write_to_logfile = true
+ config_AM_conservationCheck_include_ocean = true
+/
+&AM_geographicalVectors
+ config_AM_geographicalVectors_enable = false
+ config_AM_geographicalVectors_compute_interval = 'dt'
+ config_AM_geographicalVectors_output_stream = 'none'
+ config_AM_geographicalVectors_compute_on_startup = false
+ config_AM_geographicalVectors_write_on_startup = false
+/
+&AM_loadBalance
+ config_AM_loadBalance_enable = false
+ config_AM_loadBalance_compute_interval = 'output_interval'
+ config_AM_loadBalance_output_stream = 'loadBalanceOutput'
+ config_AM_loadBalance_compute_on_startup = false
+ config_AM_loadBalance_write_on_startup = false
+ config_AM_loadBalance_nProcs = 32
+/
+&AM_maximumIcePresence
+ config_AM_maximumIcePresence_enable = false
+ config_AM_maximumIcePresence_compute_interval = 'dt'
+ config_AM_maximumIcePresence_output_stream = 'maximumIcePresenceOutput'
+ config_AM_maximumIcePresence_compute_on_startup = false
+ config_AM_maximumIcePresence_write_on_startup = false
+ config_AM_maximumIcePresence_start_time = '0000-00-00_00:00:00'
+/
+&AM_miscellaneous
+ config_AM_miscellaneous_enable = false
+ config_AM_miscellaneous_compute_interval = 'dt'
+ config_AM_miscellaneous_output_stream = 'none'
+ config_AM_miscellaneous_compute_on_startup = false
+ config_AM_miscellaneous_write_on_startup = false
+/
+&AM_areaVariables
+ config_AM_areaVariables_enable = false
+ config_AM_areaVariables_compute_interval = 'dt'
+ config_AM_areaVariables_output_stream = 'none'
+ config_AM_areaVariables_compute_on_startup = false
+ config_AM_areaVariables_write_on_startup = false
+/
+&AM_pondDiagnostics
+ config_AM_pondDiagnostics_enable = false
+ config_AM_pondDiagnostics_compute_interval = 'dt'
+ config_AM_pondDiagnostics_output_stream = 'none'
+ config_AM_pondDiagnostics_compute_on_startup = false
+ config_AM_pondDiagnostics_write_on_startup = false
+/
+&AM_unitConversion
+ config_AM_unitConversion_enable = true
+ config_AM_unitConversion_compute_interval = 'dt'
+ config_AM_unitConversion_output_stream = 'none'
+ config_AM_unitConversion_compute_on_startup = false
+ config_AM_unitConversion_write_on_startup = false
+/
+&AM_pointwiseStats
+ config_AM_pointwiseStats_enable = false
+ config_AM_pointwiseStats_compute_interval = 'dt'
+ config_AM_pointwiseStats_output_stream = 'pointwiseStatsOutput'
+ config_AM_pointwiseStats_compute_on_startup = false
+ config_AM_pointwiseStats_write_on_startup = false
+/
+&AM_iceShelves
+ config_AM_iceShelves_enable = false
+ config_AM_iceShelves_compute_interval = 'output_interval'
+ config_AM_iceShelves_output_stream = 'iceShelvesOutput'
+ config_AM_iceShelves_compute_on_startup = true
+ config_AM_iceShelves_write_on_startup = true
+/
+&AM_icePresent
+ config_AM_icePresent_enable = false
+ config_AM_icePresent_compute_interval = 'dt'
+ config_AM_icePresent_output_stream = 'none'
+ config_AM_icePresent_compute_on_startup = false
+ config_AM_icePresent_write_on_startup = false
+/
+&AM_timeSeriesStatsDaily
+ config_AM_timeSeriesStatsDaily_enable = false
+ config_AM_timeSeriesStatsDaily_compute_on_startup = false
+ config_AM_timeSeriesStatsDaily_write_on_startup = false
+ config_AM_timeSeriesStatsDaily_compute_interval = 'dt'
+ config_AM_timeSeriesStatsDaily_output_stream = 'timeSeriesStatsDailyOutput'
+ config_AM_timeSeriesStatsDaily_restart_stream = 'timeSeriesStatsDailyRestart'
+ config_AM_timeSeriesStatsDaily_operation = 'avg'
+ config_AM_timeSeriesStatsDaily_reference_times = 'initial_time'
+ config_AM_timeSeriesStatsDaily_duration_intervals = 'repeat_interval'
+ config_AM_timeSeriesStatsDaily_repeat_intervals = 'reset_interval'
+ config_AM_timeSeriesStatsDaily_reset_intervals = '00-00-01_00:00:00'
+ config_AM_timeSeriesStatsDaily_backward_output_offset = '00-00-01_00:00:00'
+/
+&AM_timeSeriesStatsMonthly
+ config_AM_timeSeriesStatsMonthly_enable = false
+ config_AM_timeSeriesStatsMonthly_compute_on_startup = false
+ config_AM_timeSeriesStatsMonthly_write_on_startup = false
+ config_AM_timeSeriesStatsMonthly_compute_interval = 'dt'
+ config_AM_timeSeriesStatsMonthly_output_stream = 'timeSeriesStatsMonthlyOutput'
+ config_AM_timeSeriesStatsMonthly_restart_stream = 'timeSeriesStatsMonthlyRestart'
+ config_AM_timeSeriesStatsMonthly_operation = 'avg'
+ config_AM_timeSeriesStatsMonthly_reference_times = 'initial_time'
+ config_AM_timeSeriesStatsMonthly_duration_intervals = 'repeat_interval'
+ config_AM_timeSeriesStatsMonthly_repeat_intervals = 'reset_interval'
+ config_AM_timeSeriesStatsMonthly_reset_intervals = '00-01-00_00:00:00'
+ config_AM_timeSeriesStatsMonthly_backward_output_offset = '00-01-00_00:00:00'
+/
+&AM_timeSeriesStatsClimatology
+ config_AM_timeSeriesStatsClimatology_enable = false
+ config_AM_timeSeriesStatsClimatology_compute_on_startup = false
+ config_AM_timeSeriesStatsClimatology_write_on_startup = false
+ config_AM_timeSeriesStatsClimatology_compute_interval = '00-00-00_01:00:00'
+ config_AM_timeSeriesStatsClimatology_output_stream = 'timeSeriesStatsClimatologyOutput'
+ config_AM_timeSeriesStatsClimatology_restart_stream = 'timeSeriesStatsClimatologyRestart'
+ config_AM_timeSeriesStatsClimatology_operation = 'avg'
+ config_AM_timeSeriesStatsClimatology_reference_times = '00-03-01_00:00:00;00-06-01_00:00:00;00-09-01_00:00:00;00-12-01_00:00:00'
+ config_AM_timeSeriesStatsClimatology_duration_intervals = '00-03-00_00:00:00;00-03-00_00:00:00;00-03-00_00:00:00;00-03-00_00:00:00'
+ config_AM_timeSeriesStatsClimatology_repeat_intervals = '01-00-00_00:00:00;01-00-00_00:00:00;01-00-00_00:00:00;01-00-00_00:00:00'
+ config_AM_timeSeriesStatsClimatology_reset_intervals = '1000-00-00_00:00:00;1000-00-00_00:00:00;1000-00-00_00:00:00;1000-00-00_00:00:00'
+ config_AM_timeSeriesStatsClimatology_backward_output_offset = '00-03-00_00:00:00'
+/
+&AM_timeSeriesStatsCustom
+ config_AM_timeSeriesStatsCustom_enable = false
+ config_AM_timeSeriesStatsCustom_compute_on_startup = false
+ config_AM_timeSeriesStatsCustom_write_on_startup = false
+ config_AM_timeSeriesStatsCustom_compute_interval = '00-00-00_01:00:00'
+ config_AM_timeSeriesStatsCustom_output_stream = 'timeSeriesStatsCustomOutput'
+ config_AM_timeSeriesStatsCustom_restart_stream = 'timeSeriesStatsCustomRestart'
+ config_AM_timeSeriesStatsCustom_operation = 'avg'
+ config_AM_timeSeriesStatsCustom_reference_times = 'initial_time'
+ config_AM_timeSeriesStatsCustom_duration_intervals = 'repeat_interval'
+ config_AM_timeSeriesStatsCustom_repeat_intervals = 'reset_interval'
+ config_AM_timeSeriesStatsCustom_reset_intervals = '00-00-07_00:00:00'
+ config_AM_timeSeriesStatsCustom_backward_output_offset = '00-00-01_00:00:00'
+/
diff --git a/testcases/idealized_single_cell/namelist.seaice.frazil b/testcases/idealized_single_cell/namelist.seaice.frazil
new file mode 100644
index 0000000..7d7d150
--- /dev/null
+++ b/testcases/idealized_single_cell/namelist.seaice.frazil
@@ -0,0 +1,519 @@
+&seaice_model
+ config_dt = 3600.0
+ config_calendar_type = 'gregorian_noleap'
+ config_start_time = '2000-01-01_00:00:00'
+ config_stop_time = 'none'
+ config_run_duration = '00-00-20_00:00:00'
+ config_num_halos = 2
+/
+&io
+ config_pio_num_iotasks = 0
+ config_pio_stride = 1
+ config_write_output_on_startup = false
+ config_test_case_diag = false
+ config_test_case_diag_type = 'none'
+ config_full_abort_write = true
+/
+&decomposition
+ config_block_decomp_file_prefix = 'graphs/graph.info.part.'
+ config_number_of_blocks = 0
+ config_explicit_proc_decomp = false
+ config_proc_decomp_file_prefix = 'graphs/graph.info.part.'
+ config_use_halo_exch = true
+ config_aggregate_halo_exch = false
+ config_reuse_halo_exch = false
+ config_load_balance_timers = false
+/
+&restart
+ config_do_restart = false
+ config_restart_timestamp_name = 'restart_timestamp'
+ config_do_restart_hbrine = false
+ config_do_restart_zsalinity = false
+ config_do_restart_bgc = false
+ config_do_restart_snow_density = false
+ config_do_restart_snow_grain_radius = false
+/
+&dimensions
+ config_nCategories = 1
+ config_nIceLayers = 7
+ config_nSnowLayers = 1
+/
+&initialize
+ config_earth_radius = 6371229.0
+ config_initial_condition_type = 'single_cell'
+ config_initial_ice_area = 1.0
+ config_initial_ice_volume = 1.0
+ config_initial_snow_volume = 0.0
+ config_initial_latitude_north = 70.0
+ config_initial_latitude_south = -60.0
+ config_initial_velocity_type = 'uniform'
+ config_initial_uvelocity = 0.0
+ config_initial_vvelocity = 0.0
+ config_calculate_coriolis = true
+/
+&use_sections
+ config_use_dynamics = true
+ config_use_velocity_solver = false
+ config_use_advection = false
+ config_use_forcing = true
+ config_use_column_package = true
+ config_use_prescribed_ice = false
+ config_use_prescribed_ice_forcing = false
+/
+&forcing
+ config_atmospheric_forcing_type = 'CORE'
+ config_forcing_start_time = '2000-01-01_00:00:00'
+ config_forcing_cycle_start = '2000-01-01_00:00:00'
+ config_forcing_cycle_duration = '2-00-00_00:00:00'
+ config_forcing_precipitation_units = 'mm_per_sec'
+ config_forcing_sst_type = 'som_varying_thickness'
+ config_update_ocean_fluxes = true
+ config_include_pond_freshwater_feedback = false
+/
+&testing
+ config_use_test_ice_shelf = false
+ config_testing_system_test = false
+ config_use_congelation_basal_melt = false
+ config_use_lateral_melt = false
+ config_use_latent_processes = false
+ config_limit_air_temperatures = true
+/
+&velocity_solver
+ config_dynamics_subcycle_number = 1
+ config_rotate_cartesian_grid = true
+ config_include_metric_terms = true
+ config_elastic_subcycle_number = 120
+ config_strain_scheme = 'variational'
+ config_constitutive_relation_type = 'evp'
+ config_stress_divergence_scheme = 'variational'
+ config_variational_basis = 'wachspress'
+ config_variational_denominator_type = 'original'
+ config_wachspress_integration_type = 'dunavant'
+ config_wachspress_integration_order = 8
+ config_average_variational_strain = false
+ config_calc_velocity_masks = true
+ config_use_air_stress = true
+ config_use_ocean_stress = true
+ config_use_surface_tilt = true
+ config_geostrophic_surface_tilt = true
+ config_ocean_stress_type = 'quadratic'
+ config_use_special_boundaries_velocity = false
+ config_use_special_boundaries_velocity_masks = false
+/
+&advection
+ config_advection_type = 'incremental_remap'
+ config_monotonic = true
+ config_conservation_check = false
+ config_monotonicity_check = false
+ config_recover_tracer_means_check = false
+/
+&column_package
+ config_use_column_shortwave = true
+ config_use_column_vertical_thermodynamics = true
+ config_use_column_biogeochemistry = false
+ config_use_column_itd_thermodynamics = true
+ config_use_column_ridging = false
+ config_use_column_snow_tracers = false
+/
+&column_tracers
+ config_use_ice_age = true
+ config_use_first_year_ice = true
+ config_use_level_ice = true
+ config_use_cesm_meltponds = false
+ config_use_level_meltponds = true
+ config_use_topo_meltponds = false
+ config_use_aerosols = false
+ config_use_effective_snow_density = false
+ config_use_snow_grain_radius = false
+ config_use_special_boundaries_tracers = false
+/
+&biogeochemistry
+ config_use_brine = false
+ config_use_vertical_zsalinity = false
+ config_use_vertical_biochemistry = false
+ config_use_shortwave_bioabsorption = false
+ config_use_vertical_tracers = false
+ config_use_skeletal_biochemistry = false
+ config_use_nitrate = false
+ config_use_carbon = false
+ config_use_chlorophyll = false
+ config_use_ammonium = false
+ config_use_silicate = false
+ config_use_DMS = false
+ config_use_nonreactive = false
+ config_use_humics = false
+ config_use_DON = false
+ config_use_iron = false
+ config_use_macromolecules = false
+ config_use_modal_aerosols = false
+ config_use_zaerosols = false
+ config_skeletal_bgc_flux_type = 'Jin2006'
+ config_scale_initial_vertical_bgc = false
+ config_biogrid_bottom_molecular_sublayer = 0.006
+ config_biogrid_top_molecular_sublayer = 0.006
+ config_bio_gravity_drainage_length_scale = 0.024
+ config_zsalinity_molecular_sublayer = 0.0
+ config_zsalinity_gravity_drainage_scale = 0.028
+ config_snow_porosity_at_ice_surface = -0.3
+ config_new_ice_fraction_biotracer = 0.80
+ config_fraction_biotracer_in_frazil = 0.80
+ config_ratio_Si_to_N_diatoms = 1.80
+ config_ratio_Si_to_N_small_plankton = 0.00
+ config_ratio_Si_to_N_phaeocystis = 0.00
+ config_ratio_S_to_N_diatoms = 0.03
+ config_ratio_S_to_N_small_plankton = 0.03
+ config_ratio_S_to_N_phaeocystis = 0.03
+ config_ratio_Fe_to_C_diatoms = 0.0033
+ config_ratio_Fe_to_C_small_plankton = 0.0033
+ config_ratio_Fe_to_C_phaeocystis = 0.1
+ config_ratio_Fe_to_N_diatoms = 0.023
+ config_ratio_Fe_to_N_small_plankton = 0.023
+ config_ratio_Fe_to_N_phaeocystis = 0.7
+ config_ratio_Fe_to_DON = 0.023
+ config_ratio_Fe_to_DOC_saccharids = 0.1
+ config_ratio_Fe_to_DOC_lipids = 0.033
+ config_respiration_fraction_of_growth = 0.05
+ config_rapid_mobile_to_stationary_time = 5200.0
+ config_long_mobile_to_stationary_time = 173000.0
+ config_algal_maximum_velocity = 0.0000000111
+ config_ratio_Fe_to_dust = 0.035
+ config_solubility_of_Fe_in_dust = 0.005
+ config_chla_absorptivity_of_diatoms = 0.03
+ config_chla_absorptivity_of_small_plankton = 0.01
+ config_chla_absorptivity_of_phaeocystis = 0.05
+ config_light_attenuation_diatoms = 0.8
+ config_light_attenuation_small_plankton = 0.67
+ config_light_attenuation_phaeocystis = 0.67
+ config_light_inhibition_diatoms = 0.018
+ config_light_inhibition_small_plankton = 0.0025
+ config_light_inhibition_phaeocystis = 0.01
+ config_maximum_growth_rate_diatoms = 1.44
+ config_maximum_growth_rate_small_plankton = 0.851
+ config_maximum_growth_rate_phaeocystis = 0.851
+ config_temperature_growth_diatoms = 0.06
+ config_temperature_growth_small_plankton = 0.06
+ config_temperature_growth_phaeocystis = 0.06
+ config_grazed_fraction_diatoms = 0.0
+ config_grazed_fraction_small_plankton = 0.1
+ config_grazed_fraction_phaeocystis = 0.1
+ config_mortality_diatoms = 0.007
+ config_mortality_small_plankton = 0.007
+ config_mortality_phaeocystis = 0.007
+ config_temperature_mortality_diatoms = 0.03
+ config_temperature_mortality_small_plankton = 0.03
+ config_temperature_mortality_phaeocystis = 0.03
+ config_exudation_diatoms = 0.0
+ config_exudation_small_plankton = 0.0
+ config_exudation_phaeocystis = 0.0
+ config_nitrate_saturation_diatoms = 1.0
+ config_nitrate_saturation_small_plankton = 1.0
+ config_nitrate_saturation_phaeocystis = 1.0
+ config_ammonium_saturation_diatoms = 0.3
+ config_ammonium_saturation_small_plankton = 0.3
+ config_ammonium_saturation_phaeocystis = 0.3
+ config_silicate_saturation_diatoms = 4.0
+ config_silicate_saturation_small_plankton = 0.0
+ config_silicate_saturation_phaeocystis = 0.0
+ config_iron_saturation_diatoms = 1.0
+ config_iron_saturation_small_plankton = 0.2
+ config_iron_saturation_phaeocystis = 0.1
+ config_fraction_spilled_to_DON = 0.6
+ config_degredation_of_DON = 0.03
+ config_fraction_DON_ammonium = 0.25
+ config_fraction_loss_to_saccharids = 0.4
+ config_fraction_loss_to_lipids = 0.4
+ config_fraction_exudation_to_saccharids = 1.0
+ config_fraction_exudation_to_lipids = 1.0
+ config_remineralization_saccharids = 0.03
+ config_remineralization_lipids = 0.03
+ config_maximum_brine_temperature = 0.0
+ config_salinity_dependence_of_growth = 1.0
+ config_minimum_optical_depth = 0.1
+ config_slopped_grazing_fraction = 0.5
+ config_excreted_fraction = 0.5
+ config_fraction_mortality_to_ammonium = 0.5
+ config_fraction_iron_remineralized = 0.3
+ config_nitrification_rate = 0.0
+ config_desorption_loss_particulate_iron = 3065.0
+ config_maximum_loss_fraction = 0.9
+ config_maximum_ratio_iron_to_saccharids = 0.2
+ config_respiration_loss_to_DMSPd = 0.75
+ config_DMSP_to_DMS_conversion_fraction = 0.5
+ config_DMSP_to_DMS_conversion_time = 3.0
+ config_DMS_oxidation_time = 10.0
+ config_mobility_type_diatoms = 0.0
+ config_mobility_type_small_plankton = 0.5
+ config_mobility_type_phaeocystis = 0.5
+ config_mobility_type_nitrate = -1.0
+ config_mobility_type_ammonium = 1.0
+ config_mobility_type_silicate = -1.0
+ config_mobility_type_DMSPp = 0.5
+ config_mobility_type_DMSPd = -1.0
+ config_mobility_type_humics = 1.0
+ config_mobility_type_saccharids = 0.5
+ config_mobility_type_lipids = 0.5
+ config_mobility_type_inorganic_carbon = -1.0
+ config_mobility_type_proteins = 0.5
+ config_mobility_type_dissolved_iron = 0.5
+ config_mobility_type_particulate_iron = 0.5
+ config_mobility_type_black_carbon1 = 1.0
+ config_mobility_type_black_carbon2 = 1.0
+ config_mobility_type_dust1 = 1.0
+ config_mobility_type_dust2 = 1.0
+ config_mobility_type_dust3 = 1.0
+ config_mobility_type_dust4 = 1.0
+ config_ratio_C_to_N_diatoms = 7.0
+ config_ratio_C_to_N_small_plankton = 7.0
+ config_ratio_C_to_N_phaeocystis = 7.0
+ config_ratio_chla_to_N_diatoms = 2.1
+ config_ratio_chla_to_N_small_plankton = 1.1
+ config_ratio_chla_to_N_phaeocystis = 0.84
+ config_scales_absorption_diatoms = 2.0
+ config_scales_absorption_small_plankton = 4.0
+ config_scales_absorption_phaeocystis = 5.0
+ config_ratio_C_to_N_proteins = 7.0
+/
+&shortwave
+ config_shortwave_type = 'dEdd'
+ config_albedo_type = 'ccsm3'
+ config_use_snicar_ad = false
+ config_visible_ice_albedo = 0.78
+ config_infrared_ice_albedo = 0.36
+ config_visible_snow_albedo = 0.98
+ config_infrared_snow_albedo = 0.70
+ config_variable_albedo_thickness_limit = 0.3
+ config_ice_shortwave_tuning_parameter = 0.0
+ config_pond_shortwave_tuning_parameter = 0.0
+ config_snow_shortwave_tuning_parameter = 1.5
+ config_temp_change_snow_grain_radius_change = 1.5
+ config_max_melting_snow_grain_radius = 1500.0
+ config_algae_absorption_coefficient = 0.6
+/
+&snow
+ config_snow_redistribution_scheme = 'none'
+ config_fallen_snow_radius = 54.526
+ config_use_snow_liquid_ponds = false
+ config_new_snow_density = 100.0
+ config_max_snow_density = 450.0
+ config_minimum_wind_compaction = 10.0
+ config_wind_compaction_factor = 27.3
+ config_max_dry_snow_radius = 1800.0
+/
+&meltponds
+ config_snow_to_ice_transition_depth = 0.0
+ config_pond_refreezing_type = 'hlid'
+ config_pond_flushing_timescale = 1.0e-3
+ config_min_meltwater_retained_fraction = 0.15
+ config_max_meltwater_retained_fraction = 1.0
+ config_pond_depth_to_fraction_ratio = 0.8
+ config_snow_on_pond_ice_tapering_parameter = 0.03
+ config_critical_pond_ice_thickness = 0.01
+/
+&thermodynamics
+ config_thermodynamics_type = 'mushy'
+ config_heat_conductivity_type = 'bubbly'
+ config_rapid_mode_channel_radius = 0.5e-3
+ config_rapid_model_critical_Ra = 10.0
+ config_rapid_mode_aspect_ratio = 1.0
+ config_slow_mode_drainage_strength = -5.0e-8
+ config_slow_mode_critical_porosity = 0.05
+ config_congelation_ice_porosity = 0.85
+/
+&itd
+ config_itd_conversion_type = 'delta function'
+ config_category_bounds_type = 'single category'
+/
+&ridging
+ config_ice_strength_formulation = 'Rothrock75'
+ config_ridging_participation_function = 'exponential'
+ config_ridging_redistribution_function = 'exponential'
+ config_ridiging_efolding_scale = 3.0
+ config_ratio_ridging_work_to_PE = 17.0
+/
+&atmosphere
+ config_atmos_boundary_method = 'ccsm3'
+ config_calc_surface_stresses = true
+ config_calc_surface_temperature = true
+ config_use_form_drag = false
+ config_use_high_frequency_coupling = false
+ config_boundary_layer_iteration_number = 5
+/
+&ocean
+ config_use_ocean_mixed_layer = true
+ config_ocean_mixed_layer_type = "e3sm"
+ config_min_friction_velocity = 0.0005
+ config_ocean_heat_transfer_type = 'constant'
+ config_sea_freezing_temperature_type = 'mushy'
+ config_ocean_surface_type = 'free'
+ config_couple_biogeochemistry_fields = false
+ config_use_data_icebergs = false
+/
+&diagnostics
+ config_check_state = false
+/
+&AM_highFrequencyOutput
+ config_AM_highFrequencyOutput_enable = false
+ config_AM_highFrequencyOutput_compute_interval = 'output_interval'
+ config_AM_highFrequencyOutput_output_stream = 'highFrequencyOutput'
+ config_AM_highFrequencyOutput_compute_on_startup = true
+ config_AM_highFrequencyOutput_write_on_startup = true
+/
+&AM_temperatures
+ config_AM_temperatures_enable = true
+ config_AM_temperatures_compute_interval = 'dt'
+ config_AM_temperatures_output_stream = 'none'
+ config_AM_temperatures_compute_on_startup = false
+ config_AM_temperatures_write_on_startup = false
+/
+&AM_regionalStatistics
+ config_AM_regionalStatistics_enable = false
+ config_AM_regionalStatistics_compute_interval = 'output_interval'
+ config_AM_regionalStatistics_output_stream = 'regionalStatisticsOutput'
+ config_AM_regionalStatistics_compute_on_startup = false
+ config_AM_regionalStatistics_write_on_startup = false
+ config_AM_regionalStatistics_ice_extent_limit = 0.15
+/
+&AM_ridgingDiagnostics
+ config_AM_ridgingDiagnostics_enable = false
+ config_AM_ridgingDiagnostics_compute_interval = 'dt'
+ config_AM_ridgingDiagnostics_output_stream = 'none'
+ config_AM_ridgingDiagnostics_compute_on_startup = false
+ config_AM_ridgingDiagnostics_write_on_startup = false
+/
+&AM_conservationCheck
+ config_AM_conservationCheck_enable = true
+ config_AM_conservationCheck_compute_interval = 'dt'
+ config_AM_conservationCheck_output_stream = 'conservationCheckOutput'
+ config_AM_conservationCheck_compute_on_startup = false
+ config_AM_conservationCheck_write_on_startup = false
+ config_AM_conservationCheck_write_to_logfile = true
+ config_AM_conservationCheck_include_ocean = true
+/
+&AM_geographicalVectors
+ config_AM_geographicalVectors_enable = false
+ config_AM_geographicalVectors_compute_interval = 'dt'
+ config_AM_geographicalVectors_output_stream = 'none'
+ config_AM_geographicalVectors_compute_on_startup = false
+ config_AM_geographicalVectors_write_on_startup = false
+/
+&AM_loadBalance
+ config_AM_loadBalance_enable = false
+ config_AM_loadBalance_compute_interval = 'output_interval'
+ config_AM_loadBalance_output_stream = 'loadBalanceOutput'
+ config_AM_loadBalance_compute_on_startup = false
+ config_AM_loadBalance_write_on_startup = false
+ config_AM_loadBalance_nProcs = 32
+/
+&AM_maximumIcePresence
+ config_AM_maximumIcePresence_enable = false
+ config_AM_maximumIcePresence_compute_interval = 'dt'
+ config_AM_maximumIcePresence_output_stream = 'maximumIcePresenceOutput'
+ config_AM_maximumIcePresence_compute_on_startup = false
+ config_AM_maximumIcePresence_write_on_startup = false
+ config_AM_maximumIcePresence_start_time = '0000-00-00_00:00:00'
+/
+&AM_miscellaneous
+ config_AM_miscellaneous_enable = false
+ config_AM_miscellaneous_compute_interval = 'dt'
+ config_AM_miscellaneous_output_stream = 'none'
+ config_AM_miscellaneous_compute_on_startup = false
+ config_AM_miscellaneous_write_on_startup = false
+/
+&AM_areaVariables
+ config_AM_areaVariables_enable = false
+ config_AM_areaVariables_compute_interval = 'dt'
+ config_AM_areaVariables_output_stream = 'none'
+ config_AM_areaVariables_compute_on_startup = false
+ config_AM_areaVariables_write_on_startup = false
+/
+&AM_pondDiagnostics
+ config_AM_pondDiagnostics_enable = false
+ config_AM_pondDiagnostics_compute_interval = 'dt'
+ config_AM_pondDiagnostics_output_stream = 'none'
+ config_AM_pondDiagnostics_compute_on_startup = false
+ config_AM_pondDiagnostics_write_on_startup = false
+/
+&AM_unitConversion
+ config_AM_unitConversion_enable = true
+ config_AM_unitConversion_compute_interval = 'dt'
+ config_AM_unitConversion_output_stream = 'none'
+ config_AM_unitConversion_compute_on_startup = false
+ config_AM_unitConversion_write_on_startup = false
+/
+&AM_pointwiseStats
+ config_AM_pointwiseStats_enable = false
+ config_AM_pointwiseStats_compute_interval = 'dt'
+ config_AM_pointwiseStats_output_stream = 'pointwiseStatsOutput'
+ config_AM_pointwiseStats_compute_on_startup = false
+ config_AM_pointwiseStats_write_on_startup = false
+/
+&AM_iceShelves
+ config_AM_iceShelves_enable = false
+ config_AM_iceShelves_compute_interval = 'output_interval'
+ config_AM_iceShelves_output_stream = 'iceShelvesOutput'
+ config_AM_iceShelves_compute_on_startup = true
+ config_AM_iceShelves_write_on_startup = true
+/
+&AM_icePresent
+ config_AM_icePresent_enable = false
+ config_AM_icePresent_compute_interval = 'dt'
+ config_AM_icePresent_output_stream = 'none'
+ config_AM_icePresent_compute_on_startup = false
+ config_AM_icePresent_write_on_startup = false
+/
+&AM_timeSeriesStatsDaily
+ config_AM_timeSeriesStatsDaily_enable = false
+ config_AM_timeSeriesStatsDaily_compute_on_startup = false
+ config_AM_timeSeriesStatsDaily_write_on_startup = false
+ config_AM_timeSeriesStatsDaily_compute_interval = 'dt'
+ config_AM_timeSeriesStatsDaily_output_stream = 'timeSeriesStatsDailyOutput'
+ config_AM_timeSeriesStatsDaily_restart_stream = 'timeSeriesStatsDailyRestart'
+ config_AM_timeSeriesStatsDaily_operation = 'avg'
+ config_AM_timeSeriesStatsDaily_reference_times = 'initial_time'
+ config_AM_timeSeriesStatsDaily_duration_intervals = 'repeat_interval'
+ config_AM_timeSeriesStatsDaily_repeat_intervals = 'reset_interval'
+ config_AM_timeSeriesStatsDaily_reset_intervals = '00-00-01_00:00:00'
+ config_AM_timeSeriesStatsDaily_backward_output_offset = '00-00-01_00:00:00'
+/
+&AM_timeSeriesStatsMonthly
+ config_AM_timeSeriesStatsMonthly_enable = false
+ config_AM_timeSeriesStatsMonthly_compute_on_startup = false
+ config_AM_timeSeriesStatsMonthly_write_on_startup = false
+ config_AM_timeSeriesStatsMonthly_compute_interval = 'dt'
+ config_AM_timeSeriesStatsMonthly_output_stream = 'timeSeriesStatsMonthlyOutput'
+ config_AM_timeSeriesStatsMonthly_restart_stream = 'timeSeriesStatsMonthlyRestart'
+ config_AM_timeSeriesStatsMonthly_operation = 'avg'
+ config_AM_timeSeriesStatsMonthly_reference_times = 'initial_time'
+ config_AM_timeSeriesStatsMonthly_duration_intervals = 'repeat_interval'
+ config_AM_timeSeriesStatsMonthly_repeat_intervals = 'reset_interval'
+ config_AM_timeSeriesStatsMonthly_reset_intervals = '00-01-00_00:00:00'
+ config_AM_timeSeriesStatsMonthly_backward_output_offset = '00-01-00_00:00:00'
+/
+&AM_timeSeriesStatsClimatology
+ config_AM_timeSeriesStatsClimatology_enable = false
+ config_AM_timeSeriesStatsClimatology_compute_on_startup = false
+ config_AM_timeSeriesStatsClimatology_write_on_startup = false
+ config_AM_timeSeriesStatsClimatology_compute_interval = '00-00-00_01:00:00'
+ config_AM_timeSeriesStatsClimatology_output_stream = 'timeSeriesStatsClimatologyOutput'
+ config_AM_timeSeriesStatsClimatology_restart_stream = 'timeSeriesStatsClimatologyRestart'
+ config_AM_timeSeriesStatsClimatology_operation = 'avg'
+ config_AM_timeSeriesStatsClimatology_reference_times = '00-03-01_00:00:00;00-06-01_00:00:00;00-09-01_00:00:00;00-12-01_00:00:00'
+ config_AM_timeSeriesStatsClimatology_duration_intervals = '00-03-00_00:00:00;00-03-00_00:00:00;00-03-00_00:00:00;00-03-00_00:00:00'
+ config_AM_timeSeriesStatsClimatology_repeat_intervals = '01-00-00_00:00:00;01-00-00_00:00:00;01-00-00_00:00:00;01-00-00_00:00:00'
+ config_AM_timeSeriesStatsClimatology_reset_intervals = '1000-00-00_00:00:00;1000-00-00_00:00:00;1000-00-00_00:00:00;1000-00-00_00:00:00'
+ config_AM_timeSeriesStatsClimatology_backward_output_offset = '00-03-00_00:00:00'
+/
+&AM_timeSeriesStatsCustom
+ config_AM_timeSeriesStatsCustom_enable = false
+ config_AM_timeSeriesStatsCustom_compute_on_startup = false
+ config_AM_timeSeriesStatsCustom_write_on_startup = false
+ config_AM_timeSeriesStatsCustom_compute_interval = '00-00-00_01:00:00'
+ config_AM_timeSeriesStatsCustom_output_stream = 'timeSeriesStatsCustomOutput'
+ config_AM_timeSeriesStatsCustom_restart_stream = 'timeSeriesStatsCustomRestart'
+ config_AM_timeSeriesStatsCustom_operation = 'avg'
+ config_AM_timeSeriesStatsCustom_reference_times = 'initial_time'
+ config_AM_timeSeriesStatsCustom_duration_intervals = 'repeat_interval'
+ config_AM_timeSeriesStatsCustom_repeat_intervals = 'reset_interval'
+ config_AM_timeSeriesStatsCustom_reset_intervals = '00-00-07_00:00:00'
+ config_AM_timeSeriesStatsCustom_backward_output_offset = '00-00-01_00:00:00'
+/
diff --git a/testcases/idealized_single_cell/namelist.seaice.surface_ice_melt b/testcases/idealized_single_cell/namelist.seaice.surface_ice_melt
new file mode 100644
index 0000000..4f4fa18
--- /dev/null
+++ b/testcases/idealized_single_cell/namelist.seaice.surface_ice_melt
@@ -0,0 +1,519 @@
+&seaice_model
+ config_dt = 3600.0
+ config_calendar_type = 'gregorian_noleap'
+ config_start_time = '2000-01-01_00:00:00'
+ config_stop_time = 'none'
+ config_run_duration = '00-00-05_00:00:00'
+ config_num_halos = 2
+/
+&io
+ config_pio_num_iotasks = 0
+ config_pio_stride = 1
+ config_write_output_on_startup = false
+ config_test_case_diag = false
+ config_test_case_diag_type = 'none'
+ config_full_abort_write = true
+/
+&decomposition
+ config_block_decomp_file_prefix = 'graphs/graph.info.part.'
+ config_number_of_blocks = 0
+ config_explicit_proc_decomp = false
+ config_proc_decomp_file_prefix = 'graphs/graph.info.part.'
+ config_use_halo_exch = true
+ config_aggregate_halo_exch = false
+ config_reuse_halo_exch = false
+ config_load_balance_timers = false
+/
+&restart
+ config_do_restart = false
+ config_restart_timestamp_name = 'restart_timestamp'
+ config_do_restart_hbrine = false
+ config_do_restart_zsalinity = false
+ config_do_restart_bgc = false
+ config_do_restart_snow_density = false
+ config_do_restart_snow_grain_radius = false
+/
+&dimensions
+ config_nCategories = 1
+ config_nIceLayers = 7
+ config_nSnowLayers = 1
+/
+&initialize
+ config_earth_radius = 6371229.0
+ config_initial_condition_type = 'single_cell'
+ config_initial_ice_area = 1.0
+ config_initial_ice_volume = 1.0
+ config_initial_snow_volume = 0.0
+ config_initial_latitude_north = 70.0
+ config_initial_latitude_south = -60.0
+ config_initial_velocity_type = 'uniform'
+ config_initial_uvelocity = 0.0
+ config_initial_vvelocity = 0.0
+ config_calculate_coriolis = true
+/
+&use_sections
+ config_use_dynamics = true
+ config_use_velocity_solver = false
+ config_use_advection = false
+ config_use_forcing = true
+ config_use_column_package = true
+ config_use_prescribed_ice = false
+ config_use_prescribed_ice_forcing = false
+/
+&forcing
+ config_atmospheric_forcing_type = 'CORE'
+ config_forcing_start_time = '2000-01-01_00:00:00'
+ config_forcing_cycle_start = '2000-01-01_00:00:00'
+ config_forcing_cycle_duration = '2-00-00_00:00:00'
+ config_forcing_precipitation_units = 'mm_per_sec'
+ config_forcing_sst_type = 'som_varying_thickness'
+ config_update_ocean_fluxes = false
+ config_include_pond_freshwater_feedback = false
+/
+&testing
+ config_use_test_ice_shelf = false
+ config_testing_system_test = false
+ config_use_congelation_basal_melt = false
+ config_use_lateral_melt = false
+ config_use_latent_processes = false
+ config_limit_air_temperatures = false
+/
+&velocity_solver
+ config_dynamics_subcycle_number = 1
+ config_rotate_cartesian_grid = true
+ config_include_metric_terms = true
+ config_elastic_subcycle_number = 120
+ config_strain_scheme = 'variational'
+ config_constitutive_relation_type = 'evp'
+ config_stress_divergence_scheme = 'variational'
+ config_variational_basis = 'wachspress'
+ config_variational_denominator_type = 'original'
+ config_wachspress_integration_type = 'dunavant'
+ config_wachspress_integration_order = 8
+ config_average_variational_strain = false
+ config_calc_velocity_masks = true
+ config_use_air_stress = true
+ config_use_ocean_stress = true
+ config_use_surface_tilt = true
+ config_geostrophic_surface_tilt = true
+ config_ocean_stress_type = 'quadratic'
+ config_use_special_boundaries_velocity = false
+ config_use_special_boundaries_velocity_masks = false
+/
+&advection
+ config_advection_type = 'incremental_remap'
+ config_monotonic = true
+ config_conservation_check = false
+ config_monotonicity_check = false
+ config_recover_tracer_means_check = false
+/
+&column_package
+ config_use_column_shortwave = true
+ config_use_column_vertical_thermodynamics = true
+ config_use_column_biogeochemistry = false
+ config_use_column_itd_thermodynamics = false
+ config_use_column_ridging = false
+ config_use_column_snow_tracers = false
+/
+&column_tracers
+ config_use_ice_age = true
+ config_use_first_year_ice = true
+ config_use_level_ice = true
+ config_use_cesm_meltponds = false
+ config_use_level_meltponds = true
+ config_use_topo_meltponds = false
+ config_use_aerosols = false
+ config_use_effective_snow_density = false
+ config_use_snow_grain_radius = false
+ config_use_special_boundaries_tracers = false
+/
+&biogeochemistry
+ config_use_brine = false
+ config_use_vertical_zsalinity = false
+ config_use_vertical_biochemistry = false
+ config_use_shortwave_bioabsorption = false
+ config_use_vertical_tracers = false
+ config_use_skeletal_biochemistry = false
+ config_use_nitrate = false
+ config_use_carbon = false
+ config_use_chlorophyll = false
+ config_use_ammonium = false
+ config_use_silicate = false
+ config_use_DMS = false
+ config_use_nonreactive = false
+ config_use_humics = false
+ config_use_DON = false
+ config_use_iron = false
+ config_use_macromolecules = false
+ config_use_modal_aerosols = false
+ config_use_zaerosols = false
+ config_skeletal_bgc_flux_type = 'Jin2006'
+ config_scale_initial_vertical_bgc = false
+ config_biogrid_bottom_molecular_sublayer = 0.006
+ config_biogrid_top_molecular_sublayer = 0.006
+ config_bio_gravity_drainage_length_scale = 0.024
+ config_zsalinity_molecular_sublayer = 0.0
+ config_zsalinity_gravity_drainage_scale = 0.028
+ config_snow_porosity_at_ice_surface = -0.3
+ config_new_ice_fraction_biotracer = 0.80
+ config_fraction_biotracer_in_frazil = 0.80
+ config_ratio_Si_to_N_diatoms = 1.80
+ config_ratio_Si_to_N_small_plankton = 0.00
+ config_ratio_Si_to_N_phaeocystis = 0.00
+ config_ratio_S_to_N_diatoms = 0.03
+ config_ratio_S_to_N_small_plankton = 0.03
+ config_ratio_S_to_N_phaeocystis = 0.03
+ config_ratio_Fe_to_C_diatoms = 0.0033
+ config_ratio_Fe_to_C_small_plankton = 0.0033
+ config_ratio_Fe_to_C_phaeocystis = 0.1
+ config_ratio_Fe_to_N_diatoms = 0.023
+ config_ratio_Fe_to_N_small_plankton = 0.023
+ config_ratio_Fe_to_N_phaeocystis = 0.7
+ config_ratio_Fe_to_DON = 0.023
+ config_ratio_Fe_to_DOC_saccharids = 0.1
+ config_ratio_Fe_to_DOC_lipids = 0.033
+ config_respiration_fraction_of_growth = 0.05
+ config_rapid_mobile_to_stationary_time = 5200.0
+ config_long_mobile_to_stationary_time = 173000.0
+ config_algal_maximum_velocity = 0.0000000111
+ config_ratio_Fe_to_dust = 0.035
+ config_solubility_of_Fe_in_dust = 0.005
+ config_chla_absorptivity_of_diatoms = 0.03
+ config_chla_absorptivity_of_small_plankton = 0.01
+ config_chla_absorptivity_of_phaeocystis = 0.05
+ config_light_attenuation_diatoms = 0.8
+ config_light_attenuation_small_plankton = 0.67
+ config_light_attenuation_phaeocystis = 0.67
+ config_light_inhibition_diatoms = 0.018
+ config_light_inhibition_small_plankton = 0.0025
+ config_light_inhibition_phaeocystis = 0.01
+ config_maximum_growth_rate_diatoms = 1.44
+ config_maximum_growth_rate_small_plankton = 0.851
+ config_maximum_growth_rate_phaeocystis = 0.851
+ config_temperature_growth_diatoms = 0.06
+ config_temperature_growth_small_plankton = 0.06
+ config_temperature_growth_phaeocystis = 0.06
+ config_grazed_fraction_diatoms = 0.0
+ config_grazed_fraction_small_plankton = 0.1
+ config_grazed_fraction_phaeocystis = 0.1
+ config_mortality_diatoms = 0.007
+ config_mortality_small_plankton = 0.007
+ config_mortality_phaeocystis = 0.007
+ config_temperature_mortality_diatoms = 0.03
+ config_temperature_mortality_small_plankton = 0.03
+ config_temperature_mortality_phaeocystis = 0.03
+ config_exudation_diatoms = 0.0
+ config_exudation_small_plankton = 0.0
+ config_exudation_phaeocystis = 0.0
+ config_nitrate_saturation_diatoms = 1.0
+ config_nitrate_saturation_small_plankton = 1.0
+ config_nitrate_saturation_phaeocystis = 1.0
+ config_ammonium_saturation_diatoms = 0.3
+ config_ammonium_saturation_small_plankton = 0.3
+ config_ammonium_saturation_phaeocystis = 0.3
+ config_silicate_saturation_diatoms = 4.0
+ config_silicate_saturation_small_plankton = 0.0
+ config_silicate_saturation_phaeocystis = 0.0
+ config_iron_saturation_diatoms = 1.0
+ config_iron_saturation_small_plankton = 0.2
+ config_iron_saturation_phaeocystis = 0.1
+ config_fraction_spilled_to_DON = 0.6
+ config_degredation_of_DON = 0.03
+ config_fraction_DON_ammonium = 0.25
+ config_fraction_loss_to_saccharids = 0.4
+ config_fraction_loss_to_lipids = 0.4
+ config_fraction_exudation_to_saccharids = 1.0
+ config_fraction_exudation_to_lipids = 1.0
+ config_remineralization_saccharids = 0.03
+ config_remineralization_lipids = 0.03
+ config_maximum_brine_temperature = 0.0
+ config_salinity_dependence_of_growth = 1.0
+ config_minimum_optical_depth = 0.1
+ config_slopped_grazing_fraction = 0.5
+ config_excreted_fraction = 0.5
+ config_fraction_mortality_to_ammonium = 0.5
+ config_fraction_iron_remineralized = 0.3
+ config_nitrification_rate = 0.0
+ config_desorption_loss_particulate_iron = 3065.0
+ config_maximum_loss_fraction = 0.9
+ config_maximum_ratio_iron_to_saccharids = 0.2
+ config_respiration_loss_to_DMSPd = 0.75
+ config_DMSP_to_DMS_conversion_fraction = 0.5
+ config_DMSP_to_DMS_conversion_time = 3.0
+ config_DMS_oxidation_time = 10.0
+ config_mobility_type_diatoms = 0.0
+ config_mobility_type_small_plankton = 0.5
+ config_mobility_type_phaeocystis = 0.5
+ config_mobility_type_nitrate = -1.0
+ config_mobility_type_ammonium = 1.0
+ config_mobility_type_silicate = -1.0
+ config_mobility_type_DMSPp = 0.5
+ config_mobility_type_DMSPd = -1.0
+ config_mobility_type_humics = 1.0
+ config_mobility_type_saccharids = 0.5
+ config_mobility_type_lipids = 0.5
+ config_mobility_type_inorganic_carbon = -1.0
+ config_mobility_type_proteins = 0.5
+ config_mobility_type_dissolved_iron = 0.5
+ config_mobility_type_particulate_iron = 0.5
+ config_mobility_type_black_carbon1 = 1.0
+ config_mobility_type_black_carbon2 = 1.0
+ config_mobility_type_dust1 = 1.0
+ config_mobility_type_dust2 = 1.0
+ config_mobility_type_dust3 = 1.0
+ config_mobility_type_dust4 = 1.0
+ config_ratio_C_to_N_diatoms = 7.0
+ config_ratio_C_to_N_small_plankton = 7.0
+ config_ratio_C_to_N_phaeocystis = 7.0
+ config_ratio_chla_to_N_diatoms = 2.1
+ config_ratio_chla_to_N_small_plankton = 1.1
+ config_ratio_chla_to_N_phaeocystis = 0.84
+ config_scales_absorption_diatoms = 2.0
+ config_scales_absorption_small_plankton = 4.0
+ config_scales_absorption_phaeocystis = 5.0
+ config_ratio_C_to_N_proteins = 7.0
+/
+&shortwave
+ config_shortwave_type = 'dEdd'
+ config_albedo_type = 'ccsm3'
+ config_use_snicar_ad = false
+ config_visible_ice_albedo = 0.78
+ config_infrared_ice_albedo = 0.36
+ config_visible_snow_albedo = 0.98
+ config_infrared_snow_albedo = 0.70
+ config_variable_albedo_thickness_limit = 0.3
+ config_ice_shortwave_tuning_parameter = 0.0
+ config_pond_shortwave_tuning_parameter = 0.0
+ config_snow_shortwave_tuning_parameter = 1.5
+ config_temp_change_snow_grain_radius_change = 1.5
+ config_max_melting_snow_grain_radius = 1500.0
+ config_algae_absorption_coefficient = 0.6
+/
+&snow
+ config_snow_redistribution_scheme = 'none'
+ config_fallen_snow_radius = 54.526
+ config_use_snow_liquid_ponds = false
+ config_new_snow_density = 100.0
+ config_max_snow_density = 450.0
+ config_minimum_wind_compaction = 10.0
+ config_wind_compaction_factor = 27.3
+ config_max_dry_snow_radius = 1800.0
+/
+&meltponds
+ config_snow_to_ice_transition_depth = 0.0
+ config_pond_refreezing_type = 'hlid'
+ config_pond_flushing_timescale = 1.0e-3
+ config_min_meltwater_retained_fraction = 0.15
+ config_max_meltwater_retained_fraction = 1.0
+ config_pond_depth_to_fraction_ratio = 0.8
+ config_snow_on_pond_ice_tapering_parameter = 0.03
+ config_critical_pond_ice_thickness = 0.01
+/
+&thermodynamics
+ config_thermodynamics_type = 'mushy'
+ config_heat_conductivity_type = 'bubbly'
+ config_rapid_mode_channel_radius = 0.5e-3
+ config_rapid_model_critical_Ra = 10.0
+ config_rapid_mode_aspect_ratio = 1.0
+ config_slow_mode_drainage_strength = -5.0e-8
+ config_slow_mode_critical_porosity = 0.05
+ config_congelation_ice_porosity = 0.85
+/
+&itd
+ config_itd_conversion_type = 'delta function'
+ config_category_bounds_type = 'single category'
+/
+&ridging
+ config_ice_strength_formulation = 'Rothrock75'
+ config_ridging_participation_function = 'exponential'
+ config_ridging_redistribution_function = 'exponential'
+ config_ridiging_efolding_scale = 3.0
+ config_ratio_ridging_work_to_PE = 17.0
+/
+&atmosphere
+ config_atmos_boundary_method = 'ccsm3'
+ config_calc_surface_stresses = true
+ config_calc_surface_temperature = true
+ config_use_form_drag = false
+ config_use_high_frequency_coupling = false
+ config_boundary_layer_iteration_number = 5
+/
+&ocean
+ config_use_ocean_mixed_layer = true
+ config_ocean_mixed_layer_type = "e3sm"
+ config_min_friction_velocity = 0.0005
+ config_ocean_heat_transfer_type = 'constant'
+ config_sea_freezing_temperature_type = 'mushy'
+ config_ocean_surface_type = 'free'
+ config_couple_biogeochemistry_fields = false
+ config_use_data_icebergs = false
+/
+&diagnostics
+ config_check_state = false
+/
+&AM_highFrequencyOutput
+ config_AM_highFrequencyOutput_enable = false
+ config_AM_highFrequencyOutput_compute_interval = 'output_interval'
+ config_AM_highFrequencyOutput_output_stream = 'highFrequencyOutput'
+ config_AM_highFrequencyOutput_compute_on_startup = true
+ config_AM_highFrequencyOutput_write_on_startup = true
+/
+&AM_temperatures
+ config_AM_temperatures_enable = true
+ config_AM_temperatures_compute_interval = 'dt'
+ config_AM_temperatures_output_stream = 'none'
+ config_AM_temperatures_compute_on_startup = false
+ config_AM_temperatures_write_on_startup = false
+/
+&AM_regionalStatistics
+ config_AM_regionalStatistics_enable = false
+ config_AM_regionalStatistics_compute_interval = 'output_interval'
+ config_AM_regionalStatistics_output_stream = 'regionalStatisticsOutput'
+ config_AM_regionalStatistics_compute_on_startup = false
+ config_AM_regionalStatistics_write_on_startup = false
+ config_AM_regionalStatistics_ice_extent_limit = 0.15
+/
+&AM_ridgingDiagnostics
+ config_AM_ridgingDiagnostics_enable = false
+ config_AM_ridgingDiagnostics_compute_interval = 'dt'
+ config_AM_ridgingDiagnostics_output_stream = 'none'
+ config_AM_ridgingDiagnostics_compute_on_startup = false
+ config_AM_ridgingDiagnostics_write_on_startup = false
+/
+&AM_conservationCheck
+ config_AM_conservationCheck_enable = true
+ config_AM_conservationCheck_compute_interval = 'dt'
+ config_AM_conservationCheck_output_stream = 'conservationCheckOutput'
+ config_AM_conservationCheck_compute_on_startup = false
+ config_AM_conservationCheck_write_on_startup = false
+ config_AM_conservationCheck_write_to_logfile = true
+ config_AM_conservationCheck_include_ocean = true
+/
+&AM_geographicalVectors
+ config_AM_geographicalVectors_enable = false
+ config_AM_geographicalVectors_compute_interval = 'dt'
+ config_AM_geographicalVectors_output_stream = 'none'
+ config_AM_geographicalVectors_compute_on_startup = false
+ config_AM_geographicalVectors_write_on_startup = false
+/
+&AM_loadBalance
+ config_AM_loadBalance_enable = false
+ config_AM_loadBalance_compute_interval = 'output_interval'
+ config_AM_loadBalance_output_stream = 'loadBalanceOutput'
+ config_AM_loadBalance_compute_on_startup = false
+ config_AM_loadBalance_write_on_startup = false
+ config_AM_loadBalance_nProcs = 32
+/
+&AM_maximumIcePresence
+ config_AM_maximumIcePresence_enable = false
+ config_AM_maximumIcePresence_compute_interval = 'dt'
+ config_AM_maximumIcePresence_output_stream = 'maximumIcePresenceOutput'
+ config_AM_maximumIcePresence_compute_on_startup = false
+ config_AM_maximumIcePresence_write_on_startup = false
+ config_AM_maximumIcePresence_start_time = '0000-00-00_00:00:00'
+/
+&AM_miscellaneous
+ config_AM_miscellaneous_enable = false
+ config_AM_miscellaneous_compute_interval = 'dt'
+ config_AM_miscellaneous_output_stream = 'none'
+ config_AM_miscellaneous_compute_on_startup = false
+ config_AM_miscellaneous_write_on_startup = false
+/
+&AM_areaVariables
+ config_AM_areaVariables_enable = false
+ config_AM_areaVariables_compute_interval = 'dt'
+ config_AM_areaVariables_output_stream = 'none'
+ config_AM_areaVariables_compute_on_startup = false
+ config_AM_areaVariables_write_on_startup = false
+/
+&AM_pondDiagnostics
+ config_AM_pondDiagnostics_enable = false
+ config_AM_pondDiagnostics_compute_interval = 'dt'
+ config_AM_pondDiagnostics_output_stream = 'none'
+ config_AM_pondDiagnostics_compute_on_startup = false
+ config_AM_pondDiagnostics_write_on_startup = false
+/
+&AM_unitConversion
+ config_AM_unitConversion_enable = true
+ config_AM_unitConversion_compute_interval = 'dt'
+ config_AM_unitConversion_output_stream = 'none'
+ config_AM_unitConversion_compute_on_startup = false
+ config_AM_unitConversion_write_on_startup = false
+/
+&AM_pointwiseStats
+ config_AM_pointwiseStats_enable = false
+ config_AM_pointwiseStats_compute_interval = 'dt'
+ config_AM_pointwiseStats_output_stream = 'pointwiseStatsOutput'
+ config_AM_pointwiseStats_compute_on_startup = false
+ config_AM_pointwiseStats_write_on_startup = false
+/
+&AM_iceShelves
+ config_AM_iceShelves_enable = false
+ config_AM_iceShelves_compute_interval = 'output_interval'
+ config_AM_iceShelves_output_stream = 'iceShelvesOutput'
+ config_AM_iceShelves_compute_on_startup = true
+ config_AM_iceShelves_write_on_startup = true
+/
+&AM_icePresent
+ config_AM_icePresent_enable = false
+ config_AM_icePresent_compute_interval = 'dt'
+ config_AM_icePresent_output_stream = 'none'
+ config_AM_icePresent_compute_on_startup = false
+ config_AM_icePresent_write_on_startup = false
+/
+&AM_timeSeriesStatsDaily
+ config_AM_timeSeriesStatsDaily_enable = false
+ config_AM_timeSeriesStatsDaily_compute_on_startup = false
+ config_AM_timeSeriesStatsDaily_write_on_startup = false
+ config_AM_timeSeriesStatsDaily_compute_interval = 'dt'
+ config_AM_timeSeriesStatsDaily_output_stream = 'timeSeriesStatsDailyOutput'
+ config_AM_timeSeriesStatsDaily_restart_stream = 'timeSeriesStatsDailyRestart'
+ config_AM_timeSeriesStatsDaily_operation = 'avg'
+ config_AM_timeSeriesStatsDaily_reference_times = 'initial_time'
+ config_AM_timeSeriesStatsDaily_duration_intervals = 'repeat_interval'
+ config_AM_timeSeriesStatsDaily_repeat_intervals = 'reset_interval'
+ config_AM_timeSeriesStatsDaily_reset_intervals = '00-00-01_00:00:00'
+ config_AM_timeSeriesStatsDaily_backward_output_offset = '00-00-01_00:00:00'
+/
+&AM_timeSeriesStatsMonthly
+ config_AM_timeSeriesStatsMonthly_enable = false
+ config_AM_timeSeriesStatsMonthly_compute_on_startup = false
+ config_AM_timeSeriesStatsMonthly_write_on_startup = false
+ config_AM_timeSeriesStatsMonthly_compute_interval = 'dt'
+ config_AM_timeSeriesStatsMonthly_output_stream = 'timeSeriesStatsMonthlyOutput'
+ config_AM_timeSeriesStatsMonthly_restart_stream = 'timeSeriesStatsMonthlyRestart'
+ config_AM_timeSeriesStatsMonthly_operation = 'avg'
+ config_AM_timeSeriesStatsMonthly_reference_times = 'initial_time'
+ config_AM_timeSeriesStatsMonthly_duration_intervals = 'repeat_interval'
+ config_AM_timeSeriesStatsMonthly_repeat_intervals = 'reset_interval'
+ config_AM_timeSeriesStatsMonthly_reset_intervals = '00-01-00_00:00:00'
+ config_AM_timeSeriesStatsMonthly_backward_output_offset = '00-01-00_00:00:00'
+/
+&AM_timeSeriesStatsClimatology
+ config_AM_timeSeriesStatsClimatology_enable = false
+ config_AM_timeSeriesStatsClimatology_compute_on_startup = false
+ config_AM_timeSeriesStatsClimatology_write_on_startup = false
+ config_AM_timeSeriesStatsClimatology_compute_interval = '00-00-00_01:00:00'
+ config_AM_timeSeriesStatsClimatology_output_stream = 'timeSeriesStatsClimatologyOutput'
+ config_AM_timeSeriesStatsClimatology_restart_stream = 'timeSeriesStatsClimatologyRestart'
+ config_AM_timeSeriesStatsClimatology_operation = 'avg'
+ config_AM_timeSeriesStatsClimatology_reference_times = '00-03-01_00:00:00;00-06-01_00:00:00;00-09-01_00:00:00;00-12-01_00:00:00'
+ config_AM_timeSeriesStatsClimatology_duration_intervals = '00-03-00_00:00:00;00-03-00_00:00:00;00-03-00_00:00:00;00-03-00_00:00:00'
+ config_AM_timeSeriesStatsClimatology_repeat_intervals = '01-00-00_00:00:00;01-00-00_00:00:00;01-00-00_00:00:00;01-00-00_00:00:00'
+ config_AM_timeSeriesStatsClimatology_reset_intervals = '1000-00-00_00:00:00;1000-00-00_00:00:00;1000-00-00_00:00:00;1000-00-00_00:00:00'
+ config_AM_timeSeriesStatsClimatology_backward_output_offset = '00-03-00_00:00:00'
+/
+&AM_timeSeriesStatsCustom
+ config_AM_timeSeriesStatsCustom_enable = false
+ config_AM_timeSeriesStatsCustom_compute_on_startup = false
+ config_AM_timeSeriesStatsCustom_write_on_startup = false
+ config_AM_timeSeriesStatsCustom_compute_interval = '00-00-00_01:00:00'
+ config_AM_timeSeriesStatsCustom_output_stream = 'timeSeriesStatsCustomOutput'
+ config_AM_timeSeriesStatsCustom_restart_stream = 'timeSeriesStatsCustomRestart'
+ config_AM_timeSeriesStatsCustom_operation = 'avg'
+ config_AM_timeSeriesStatsCustom_reference_times = 'initial_time'
+ config_AM_timeSeriesStatsCustom_duration_intervals = 'repeat_interval'
+ config_AM_timeSeriesStatsCustom_repeat_intervals = 'reset_interval'
+ config_AM_timeSeriesStatsCustom_reset_intervals = '00-00-07_00:00:00'
+ config_AM_timeSeriesStatsCustom_backward_output_offset = '00-00-01_00:00:00'
+/
diff --git a/testcases/idealized_single_cell/plot_testcase.py b/testcases/idealized_single_cell/plot_testcase.py
new file mode 100644
index 0000000..52bf779
--- /dev/null
+++ b/testcases/idealized_single_cell/plot_testcase.py
@@ -0,0 +1,292 @@
+from netCDF4 import Dataset
+import matplotlib.pyplot as plt
+import numpy as np
+import math
+import argparse
+
+#-------------------------------------------------------------------------------
+
+def plot_subtestcase(process):
+
+ filein = Dataset("./output_%s/output.2000.nc" %(process),"r")
+
+ nCategories = len(filein.dimensions["nCategories"])
+ nTimes = len(filein.dimensions["Time"])
+ nIceLayers = len(filein.dimensions["nIceLayers"])
+ nSnowLayers = len(filein.dimensions["nSnowLayers"])
+
+ iceAreaCategory = filein.variables["iceAreaCategory"][:,0,:,0]
+
+ iceAreaCell = filein.variables["iceAreaCell"][:,0]
+ iceVolumeCell = filein.variables["iceVolumeCell"][:,0]
+ snowVolumeCell = filein.variables["snowVolumeCell"][:,0]
+
+ surfaceHeatFlux = filein.variables["surfaceHeatFlux"][:,0]
+ surfaceShortwaveFluxCategory = filein.variables["surfaceShortwaveFlux"][:,0,:]
+ longwaveDown = filein.variables["longwaveDown"][:,0]
+ longwaveUp = filein.variables["longwaveUp"][:,0]
+ sensibleHeatFlux = filein.variables["sensibleHeatFlux"][:,0]
+ latentHeatFlux = filein.variables["latentHeatFlux"][:,0]
+
+ surfaceIceMelt = filein.variables["surfaceIceMelt"][:,0]
+ basalIceMelt = filein.variables["basalIceMelt"][:,0]
+ lateralIceMelt = filein.variables["lateralIceMelt"][:,0]
+ snowMelt = filein.variables["snowMelt"][:,0]
+ congelation = filein.variables["congelation"][:,0]
+ snowiceFormation = filein.variables["snowiceFormation"][:,0]
+ frazilFormation = filein.variables["frazilFormation"][:,0]
+
+ surfaceTemperatureCell = filein.variables["surfaceTemperatureCell"][:]
+ iceTemperature = filein.variables["iceTemperature"][:,0,0,:]
+ snowTemperature = filein.variables["snowTemperature"][:,0,0,:]
+
+ seaSurfaceTemperature = filein.variables["seaSurfaceTemperature"][:,0]
+ seaFreezingTemperature = filein.variables["seaFreezingTemperature"][:,0]
+ seaSurfaceSalinity = filein.variables["seaSurfaceSalinity"][:,0]
+ oceanMixedLayerDepth = filein.variables["oceanMixedLayerDepth"][:,0]
+
+ oceanFreshWaterFlux = filein.variables["oceanFreshWaterFlux"][:,0]
+ oceanSaltFlux = filein.variables["oceanSaltFlux"][:,0]
+ oceanHeatFlux = filein.variables["oceanHeatFlux"][:,0]
+ oceanShortwaveFlux = filein.variables["oceanShortwaveFlux"][:,0]
+
+ filein.close()
+
+ surfaceShortwaveFlux = np.zeros(nTimes)
+ oceanFluxTemperature = np.zeros(nTimes)
+ for iCategory in range(0,nCategories):
+ surfaceShortwaveFlux[:] += surfaceShortwaveFluxCategory[:,iCategory] * iceAreaCategory[:,iCategory]
+
+ seaiceDensitySeaWater = 1026.0
+ seaiceSeaWaterSpecificHeat = 4218.0
+ oceanFluxTemperature = np.zeros(nTimes)
+ for iTime in range(0,nTimes):
+ if (surfaceIceMelt[iTime] > 0.0):
+ if (oceanFreshWaterFlux[iTime] > 0.0):
+ oceanFluxTemperature[iTime] = oceanHeatFlux[iTime] / (oceanFreshWaterFlux[iTime] * seaiceDensitySeaWater * seaiceSeaWaterSpecificHeat)
+ else:
+ oceanFluxTemperature[iTime] = 0.0
+ else:
+ oceanFluxTemperature[iTime] = math.nan
+
+ emissivity = 1.0
+
+ cm = 1/2.54 # centimeters in inches
+ plt.rc('font', family="Times New Roman")
+ plt.rc('mathtext',fontset="stix")
+ SMALL_SIZE = 8
+ MEDIUM_SIZE = 8
+ BIGGER_SIZE = 8
+ plt.rc('font', size=SMALL_SIZE) # controls default text sizes
+ plt.rc('axes', titlesize=SMALL_SIZE) # fontsize of the axes title
+ plt.rc('axes', labelsize=MEDIUM_SIZE) # fontsize of the x and y labels
+ plt.rc('xtick', labelsize=SMALL_SIZE) # fontsize of the tick labels
+ plt.rc('ytick', labelsize=SMALL_SIZE) # fontsize of the tick labels
+ plt.rc('legend', fontsize=SMALL_SIZE) # legend fontsize
+ plt.rc('figure', titlesize=BIGGER_SIZE) # fontsize of the figure title
+
+ # ice area and volume
+ fig, axis = plt.subplots(figsize=(12*cm,7*cm))
+
+ axis.plot(iceAreaCell,color="green",label="iceAreaCell",lw=0.5)
+ axis.set_ylabel("Area")
+ axis.set_xlabel("Time step")
+ axis.set_ylim(0,1)
+ axis.set_xlim(0,None)
+ axis.set_title("Ice area and volumes")
+ axis.legend(loc='center left', bbox_to_anchor=(1.2, 0.3))
+ axis.yaxis.label.set_color("green")
+
+ axis2 = axis.twinx()
+
+ axis2.plot(iceVolumeCell,color="red",label="iceVolumeCell",lw=0.5)
+ axis2.plot(snowVolumeCell,color="blue",label="snowVolumeCell",lw=0.5)
+ axis2.set_ylabel("Volume (m)")
+ axis2.set_ylim(0,None)
+ axis2.legend(loc='center left', bbox_to_anchor=(1.2, 0.7))
+ axis2.yaxis.label.set_color("red")
+
+ plt.tight_layout()
+ plt.savefig("ice_area_and_volume_%s.png" %(process),dpi=300)
+ plt.cla()
+ plt.close(fig)
+
+ # surface heat balance
+ fig, axis = plt.subplots(figsize=(12*cm,7*cm))
+
+ axis.plot(surfaceHeatFlux,label="surfaceHeatFlux",color="black",lw=0.5) # fsurfn
+ axis.plot(surfaceShortwaveFlux,label="surfaceShortwaveFlux",lw=0.5) # fswsfc
+ axis.plot(longwaveDown*emissivity,label="longwaveDown Abs.",lw=0.5) # flwdabs = emissivity * flw
+ axis.plot(longwaveUp,label="longwaveUp",lw=0.5) # flwoutn
+ axis.plot(sensibleHeatFlux,label="sensibleHeatFlux",lw=0.5) # fsensn
+ axis.plot(latentHeatFlux,label="latentHeatFlux",lw=0.5) # flatn
+
+ axis.set_ylabel("Surface heat flux")
+ axis.set_xlabel("Time step")
+ axis.set_xlim(0,None)
+ axis.set_title("Surface heat balance")
+ axis.legend(loc='center left', bbox_to_anchor=(1, 0.5))
+
+ plt.tight_layout()
+ plt.savefig("surface_heat_balance_%s.png" %(process),dpi=300)
+ plt.cla()
+ plt.close(fig)
+
+ # melt growth rates
+ fig, axis = plt.subplots(figsize=(12*cm,7*cm))
+
+ axis.plot(surfaceIceMelt,label="surfaceIceMelt",lw=0.5)
+ axis.plot(basalIceMelt,label="basalIceMelt",lw=0.5)
+ axis.plot(lateralIceMelt,label="lateralIceMelt",lw=0.5)
+ axis.plot(snowMelt,label="snowMelt",lw=0.5)
+ axis.plot(congelation,label="congelation",lw=0.5)
+ axis.plot(snowiceFormation,label="snowiceFormation",lw=0.5)
+ axis.plot(frazilFormation,label="frazilFormation",lw=0.5)
+
+ axis.set_ylabel("Melt growth rates")
+ axis.set_xlabel("Time step")
+ axis.set_xlim(0,None)
+ axis.set_title("Melt growth rates")
+ axis.legend(loc='center left', bbox_to_anchor=(1, 0.5))
+
+ plt.tight_layout()
+ plt.savefig("melt_growth_rates_%s.png" %(process),dpi=300)
+ plt.cla()
+ plt.close(fig)
+
+ # temperatures
+ fig, axis = plt.subplots(figsize=(12*cm,7*cm))
+
+ axis.plot(surfaceTemperatureCell,label="Surface Temperature",color="black",lw=0.5)
+ for iSnowLayer in range(0,nSnowLayers):
+ axis.plot(snowTemperature[:,iSnowLayer],label="Snow Temperature %i" %(iSnowLayer),lw=0.5)
+ for iIceLayer in range(0,nIceLayers):
+ axis.plot(iceTemperature[:,iIceLayer],label="Ice Temperature %i" %(iIceLayer),lw=0.5)
+ axis.plot(seaSurfaceTemperature,label="seaSurfaceTemperature",lw=0.5)
+ axis.plot(seaFreezingTemperature,label="seaFreezingTemperature",lw=0.5)
+
+ axis.set_ylabel(r'Temperature ($^\circ$ C)')
+ axis.set_xlabel("Time step")
+ axis.set_xlim(0,None)
+ axis.set_title("Temperatures")
+ axis.legend(loc='center left', bbox_to_anchor=(1, 0.5))
+
+ plt.tight_layout()
+ plt.savefig("temperatures_%s.png" %(process),dpi=300)
+ plt.cla()
+ plt.close(fig)
+
+ # ocean temperatures
+ fig, axis = plt.subplots(figsize=(12*cm,7*cm))
+
+ axis.plot(seaSurfaceTemperature,label="seaSurfaceTemperature",lw=0.5)
+ axis.plot(seaFreezingTemperature,label="seaFreezingTemperature",lw=0.5)
+
+ axis.set_ylabel(r'Temperature ($^\circ$ C)')
+ axis.set_xlabel("Time step")
+ axis.set_xlim(0,None)
+ axis.set_title("Temperatures")
+ axis.legend(loc='center left', bbox_to_anchor=(1, 0.5))
+
+ plt.tight_layout()
+ plt.savefig("sea_temperatures_%s.png" %(process),dpi=300)
+ plt.cla()
+ plt.close(fig)
+
+ # ocean
+ fig, axis = plt.subplots(figsize=(12*cm,7*cm))
+
+ color1 = plt.cm.jet(0)
+ color2 = plt.cm.jet(0.33)
+ color3 = plt.cm.jet(0.66)
+ color4 = plt.cm.jet(0.99)
+
+ par1 = axis.twinx()
+ par2 = axis.twinx()
+
+ p1, = axis.plot(seaSurfaceTemperature,label="seaSurfaceTemperature",color=color1)
+ p2, = axis.plot(oceanFluxTemperature,label="oceanFluxTemperature",color=color2)
+ p3, = par1.plot(seaSurfaceSalinity,label="seaSurfaceSalinity",color=color3)
+ p4, = par2.plot(oceanMixedLayerDepth,label="oceanMixedLayerDepth",color=color4)
+
+ axis.set_xlabel("Time step")
+ axis.set_ylabel(r'Temperature ($^\circ$ C)')
+ par1.set_ylabel("Sea Surface Salinity (ppt)")
+ par2.set_ylabel("Mixed layer depth (m)")
+
+ par2.spines['right'].set_position(('outward', 60))
+ par2.xaxis.set_ticks([])
+
+ axis.yaxis.label.set_color(p1.get_color())
+ par1.yaxis.label.set_color(p3.get_color())
+ par2.yaxis.label.set_color(p4.get_color())
+
+ lns = [p1, p2, p3, p4]
+ axis.legend(handles=lns, loc='best')
+
+ plt.tight_layout()
+ plt.savefig("ocean_%s.png" %(process),dpi=300)
+ plt.cla()
+ plt.close(fig)
+
+ # ocean fluxes
+ fig, axis = plt.subplots(figsize=(12*cm,7*cm))
+
+ color1 = plt.cm.jet(0)
+ color2 = plt.cm.jet(0.33)
+ color3 = plt.cm.jet(0.66)
+ color4 = plt.cm.jet(0.99)
+
+ par1 = axis.twinx()
+ par2 = axis.twinx()
+
+ p1, = axis.plot(oceanHeatFlux,label="oceanHeatFlux",color=color1)
+ p2, = axis.plot(oceanShortwaveFlux,label="oceanShortwaveFlux",color=color2)
+ p3, = par1.plot(oceanFreshWaterFlux,label="oceanFreshWaterFlux",color=color3, lw=2.5)
+ p4, = par2.plot(oceanSaltFlux,label="oceanSaltFlux",color=color4)
+
+ axis.set_xlabel("Time step")
+ axis.set_ylabel(r'Heat flux ($\mathrm{W} \mathrm{m}^{-2}$)')
+ par1.set_ylabel(r'Fresh water flux ($\mathrm{kg} \mathrm{m}^{-2}$)')
+ par2.set_ylabel(r'Salt flux ($\mathrm{kg} \mathrm{m}^{-2}$)')
+
+ par2.spines['right'].set_position(('outward', 60))
+ par2.xaxis.set_ticks([])
+
+ axis.yaxis.label.set_color(p1.get_color())
+ par1.yaxis.label.set_color(p3.get_color())
+ par2.yaxis.label.set_color(p4.get_color())
+
+ lns = [p1, p2, p3, p4]
+ axis.legend(handles=lns, loc='best')
+
+ plt.tight_layout()
+ plt.savefig("ocean_fluxes_%s.png" %(process),dpi=300)
+ plt.cla()
+ plt.close(fig)
+
+#-------------------------------------------------------------------------------
+
+def plot_testcase(process=None):
+
+ if (process is None):
+ processes = ["congelation",
+ "surface_ice_melt",
+ "frazil"]
+ else:
+ processes = [process]
+
+ for process in processes:
+ plot_subtestcase(process)
+
+#-------------------------------------------------------------------------------
+
+if __name__ == "__main__":
+
+ parser = argparse.ArgumentParser(description='')
+
+ parser.add_argument('-p', dest='process', default=None, help='')
+
+ args = parser.parse_args()
+
+ plot_testcase(args.process)
diff --git a/testcases/idealized_single_cell/run_model.py b/testcases/idealized_single_cell/run_model.py
new file mode 100644
index 0000000..5a6c9c0
--- /dev/null
+++ b/testcases/idealized_single_cell/run_model.py
@@ -0,0 +1,47 @@
+import os
+import argparse
+
+#-------------------------------------------------------------------------------
+
+def run_model(process=None):
+
+ if (process is None):
+ processes = ["congelation",
+ "surface_ice_melt",
+ "frazil"]
+ else:
+ processes = [process]
+
+ MPAS_SEAICE_EXECUTABLE = os.environ.get('MPAS_SEAICE_EXECUTABLE')
+ MPAS_SEAICE_TESTCASES_RUN_COMMAND = os.environ.get('MPAS_SEAICE_TESTCASES_RUN_COMMAND')
+ if (MPAS_SEAICE_TESTCASES_RUN_COMMAND is None):
+ MPAS_SEAICE_TESTCASES_RUN_COMMAND = ""
+
+ for process in processes:
+
+ print("Process: ", process)
+
+ if (not os.path.isdir("output")):
+ os.mkdir("output")
+
+ os.system("rm -rf namelist.seaice streams.seaice output_%s" %(process))
+ os.system("ln -s namelist.seaice.%s namelist.seaice" %(process))
+ os.system("ln -s streams.seaice.%s streams.seaice" %(process))
+
+ os.system("%s %s" %(MPAS_SEAICE_TESTCASES_RUN_COMMAND, MPAS_SEAICE_EXECUTABLE))
+
+ os.system("mv output output_%s" %(process))
+
+ os.system("mv log.seaice.0000.out log.seaice.0000.out_%s" %(process))
+
+#-------------------------------------------------------------------------------
+
+if __name__ == "__main__":
+
+ parser = argparse.ArgumentParser(description='')
+
+ parser.add_argument('-p', dest='process', default=None, help='')
+
+ args = parser.parse_args()
+
+ run_model(args.process)
diff --git a/testcases/idealized_single_cell/run_testcase.py b/testcases/idealized_single_cell/run_testcase.py
new file mode 100644
index 0000000..eec8323
--- /dev/null
+++ b/testcases/idealized_single_cell/run_testcase.py
@@ -0,0 +1,30 @@
+from create_mesh import create_mesh
+from create_forcing import create_forcing
+from run_model import run_model
+from plot_testcase import plot_testcase
+
+#-------------------------------------------------------------------------------
+
+def run_testcase():
+
+ # create mesh
+ print("Create mesh")
+ create_mesh
+
+ # create forcing
+ print("Create forcing")
+ create_forcing
+
+ # run the model
+ print("Run models")
+ run_model()
+
+ # plot sub tests
+ print("Plot subtests")
+ plot_testcase()
+
+#-------------------------------------------------------------------------------
+
+if __name__ == "__main__":
+
+ run_testcase()
diff --git a/testcases/idealized_single_cell/streams.seaice.congelation b/testcases/idealized_single_cell/streams.seaice.congelation
new file mode 100644
index 0000000..f2a5e1e
--- /dev/null
+++ b/testcases/idealized_single_cell/streams.seaice.congelation
@@ -0,0 +1,339 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testcases/idealized_single_cell/streams.seaice.frazil b/testcases/idealized_single_cell/streams.seaice.frazil
new file mode 100644
index 0000000..83277b4
--- /dev/null
+++ b/testcases/idealized_single_cell/streams.seaice.frazil
@@ -0,0 +1,340 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testcases/idealized_single_cell/streams.seaice.surface_ice_melt b/testcases/idealized_single_cell/streams.seaice.surface_ice_melt
new file mode 100644
index 0000000..2a959bd
--- /dev/null
+++ b/testcases/idealized_single_cell/streams.seaice.surface_ice_melt
@@ -0,0 +1,339 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/compare_mpas_files.py b/testing/compare_mpas_files.py
index 7e1cf97..9edb0cc 100755
--- a/testing/compare_mpas_files.py
+++ b/testing/compare_mpas_files.py
@@ -16,12 +16,18 @@ def add_variable_to_diag_file(file1,variableArray1,variableArray2,variableName):
fileDiag = Dataset(filenameDiag,"a")
varIn = file1[variableName]
- for dimension in varIn.dimensions:
- if (dimension not in fileDiag.dimensions):
- fileDiag.createDimension(dimension,len(file1.dimensions[dimension]))
+ if (varIn.datatype == np.dtype('S1')):
- varOut = fileDiag.createVariable(varIn.name, varIn.dtype, varIn.dimensions)
- varOut[:] = variableArray2[:] - variableArray1[:]
+ fileDiag.variableName = "Different"
+
+ else:
+
+ for dimension in varIn.dimensions:
+ if (dimension not in fileDiag.dimensions):
+ fileDiag.createDimension(dimension,len(file1.dimensions[dimension]))
+
+ varOut = fileDiag.createVariable(varIn.name, varIn.dtype, varIn.dimensions)
+ varOut[:] = variableArray2[:] - variableArray1[:]
fileDiag.close()