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()