From dee81f1c8c48c7afe4ef89a91edbee1f9c59d5fa Mon Sep 17 00:00:00 2001 From: Matthew Harrison Date: Tue, 16 Sep 2014 21:45:30 -0400 Subject: [PATCH 1/3] Modifications for Static Ice Shelf configuration o New experiment in examples/ocean_SIS/GIS_0125 o Mods to MOM_ice_shelf.F90 o MOM_bulk_mixed_layer and MOM_diabatic_driver mods --- config_src/coupled_driver/ocean_model_MOM.F90 | 34 +- examples/ocean_SIS/GIS_0125/MOM_channel_list | 9 + examples/ocean_SIS/GIS_0125/MOM_input | 859 ++++++++++++++++++ examples/ocean_SIS/GIS_0125/MOM_override | 1 + examples/ocean_SIS/GIS_0125/README | 0 src/core/MOM_barotropic.F90 | 11 +- src/ice_shelf/MOM_ice_shelf.F90 | 104 ++- .../vertical/MOM_bulk_mixed_layer.F90 | 154 ++-- .../vertical/MOM_diabatic_driver.F90 | 187 +++- 9 files changed, 1259 insertions(+), 100 deletions(-) create mode 100644 examples/ocean_SIS/GIS_0125/MOM_channel_list create mode 100644 examples/ocean_SIS/GIS_0125/MOM_input create mode 100644 examples/ocean_SIS/GIS_0125/MOM_override create mode 100644 examples/ocean_SIS/GIS_0125/README diff --git a/config_src/coupled_driver/ocean_model_MOM.F90 b/config_src/coupled_driver/ocean_model_MOM.F90 index 1a3c7cf0db..ac23054636 100644 --- a/config_src/coupled_driver/ocean_model_MOM.F90 +++ b/config_src/coupled_driver/ocean_model_MOM.F90 @@ -60,7 +60,8 @@ module ocean_model_mod use MOM_time_manager, only : operator(/=) use MOM_tracer_flow_control, only : call_tracer_register, tracer_flow_control_init use MOM_variables, only : surface - +use MOM_ice_shelf, only : initialize_ice_shelf, shelf_calc_flux, ice_shelf_CS +use MOM_ice_shelf, only : ice_shelf_end, ice_shelf_save_restart use coupler_types_mod, only : coupler_2d_bc_type use mpp_domains_mod, only : domain2d, mpp_get_layout, mpp_get_global_domain use mpp_domains_mod, only : mpp_define_domains, mpp_get_compute_domain, mpp_get_data_domain @@ -151,7 +152,8 @@ module ocean_model_mod type(time_type) :: write_energy_time ! The next time to write to the energy file. integer :: nstep = 0 ! The number of calls to update_ocean. - + logical :: use_ice_shelf = .false. ! If true, the ice shelf model is enabled. + type(ice_shelf_CS), pointer :: Ice_shelf_CSp => NULL() logical :: restore_salinity ! If true, the coupled MOM driver adds a term to ! restore salinity to a specified value. real :: press_to_z ! A conversion factor between pressure and ocean @@ -263,10 +265,19 @@ subroutine ocean_model_init(Ocean_sfc, OS, Time_init, Time_in) call get_param(param_file, mod, "G_EARTH", G_Earth, & "The gravitational acceleration of the Earth.", & units="m s-2", default = 9.80) + + call get_param(param_file,mod,"ICE_SHELF",OS%use_ice_shelf) + + OS%press_to_z = 1.0/(Rho0*G_Earth) call surface_forcing_init(Time_in, OS%grid, param_file, OS%MOM_CSp%diag, & OS%forcing_CSp, OS%restore_salinity) + + if (OS%use_ice_shelf) then + call initialize_ice_shelf(OS%Time, OS%ice_shelf_CSp,OS%MOM_CSp%diag, OS%fluxes) + endif + call MOM_sum_output_init(OS%grid, param_file, OS%dirs%output_directory, & OS%MOM_CSp%ntrunc, Time_init, OS%sum_output_CSp) @@ -362,6 +373,14 @@ subroutine update_ocean_model(Ice_ocean_boundary, OS, Ocean_sfc, & call enable_averaging(time_step, OS%Time + Ocean_coupling_time_step, OS%MOM_CSp%diag) ! Needed to allow diagnostics in convert_IOB call convert_IOB_to_fluxes(Ice_ocean_boundary, OS%fluxes, index_bnds, OS%Time, & OS%grid, OS%forcing_CSp, OS%state, OS%restore_salinity) + +! Add ice shelf fluxes + + if (OS%use_ice_shelf) then + call shelf_calc_flux(OS%State, OS%fluxes, OS%Time, time_step, OS%Ice_shelf_CSp) + endif + + call disable_averaging(OS%MOM_CSp%diag) Master_time = OS%Time ; Time1 = OS%Time @@ -412,12 +431,18 @@ subroutine ocean_model_restart(OS, timestamp) OS%MOM_CSp%restart_CSp, .true.) call forcing_save_restart(OS%forcing_CSp, OS%grid, OS%Time, & OS%dirs%restart_output_dir, .true.) + if (OS%use_ice_shelf) then + call ice_shelf_save_restart(OS%Ice_shelf_CSp, OS%Time, OS%dirs%restart_output_dir, .true.) + endif endif if (BTEST(OS%Restart_control,0)) then call save_restart(OS%dirs%restart_output_dir, OS%Time, OS%grid, & OS%MOM_CSp%restart_CSp) call forcing_save_restart(OS%forcing_CSp, OS%grid, OS%Time, & OS%dirs%restart_output_dir) + if (OS%use_ice_shelf) then + call ice_shelf_save_restart(OS%Ice_shelf_CSp, OS%Time, OS%dirs%restart_output_dir) + endif endif end subroutine ocean_model_restart @@ -445,6 +470,7 @@ subroutine ocean_model_end(Ocean_sfc, Ocean_state, Time) call ocean_model_save_restart(Ocean_state, Time) call MOM_end(Ocean_state%MOM_CSp) + if (Ocean_state%use_ice_shelf) call ice_shelf_end(Ocean_state%Ice_shelf_CSp) end subroutine ocean_model_end ! NAME="ocean_model_end" @@ -472,6 +498,10 @@ subroutine ocean_model_save_restart(OS, Time, directory, filename_suffix) call forcing_save_restart(OS%forcing_CSp, OS%grid, Time, restart_dir) + if (OS%use_ice_shelf) then + call ice_shelf_save_restart(OS%Ice_shelf_CSp, OS%Time, OS%dirs%restart_output_dir) + endif + end subroutine ocean_model_save_restart !####################################################################### diff --git a/examples/ocean_SIS/GIS_0125/MOM_channel_list b/examples/ocean_SIS/GIS_0125/MOM_channel_list new file mode 100644 index 0000000000..9853330c8a --- /dev/null +++ b/examples/ocean_SIS/GIS_0125/MOM_channel_list @@ -0,0 +1,9 @@ +! This file specifies restricted channel widths in MOM. The order is: +! [UV]_WIDTH, min_longitude, max_longitude, min_latitude, max_latitude, width + +U_width, -6.1, -5.4, 35.8, 36.0, 12000.0 ! Gibraltar +U_width, 26.4, 26.8, 40.4, 40.6, 5000.0 ! Dardanelles + +V_width, 28.8, 29.0, 41.1, 41.2, 2500.0 ! Bosporus - should be 1km wide. +V_width, 43.25, 43.5, 12.6, 12.8, 10000.0 ! Red Sea, Bab-el-Mendeb +V_width, 141.5, 141.7, 52.0, 52.15, 2500.0 ! Between Sakhalin & Russia diff --git a/examples/ocean_SIS/GIS_0125/MOM_input b/examples/ocean_SIS/GIS_0125/MOM_input new file mode 100644 index 0000000000..b854a0e181 --- /dev/null +++ b/examples/ocean_SIS/GIS_0125/MOM_input @@ -0,0 +1,859 @@ +!********+*********+*********+*********+*********+*********+*********+* +!* This file determines the adjustable run-time parameters for the * +!* Modular Ocean Model (MOM), versions 6 and later. Where * +!* appropriate, MKS units are used. * +!********+*********+*********+*********+*********+*********+*********+* + +DAYMAX = 36500.0 + + +! Specify properties of the physical domain. + + +OMEGA = 7.2921e-5 ! The rotation rate of the earth in s-1. +ROTATION = "2omegasinlat" ! Rotation approximation (2omegasinlat, + ! betaplane or USER). +RAD_EARTH = 6.378e6 ! The radius of the earth in m. +G_EARTH = 9.80 ! G_EARTH is the Earth's gravitational + ! acceleration, in m s-2. +GRID_CONFIG = "mosaic" ! Method for defining horizontal grid + ! = file|cartesian|spherical|mercator + ! file - read grid from file "GRID_FILE" + ! cartesian - a Cartesian grid + ! spherical - a spherical grid + ! mercator - a Mercator grid +GRID_FILE = "supergrid.nc" + ! Name of file to read horizontal grid data +TOPO_CONFIG = "file" ! Method for defining topography + ! file - read topographic information from file + ! (TOPO_FILE). + ! flat - flat bottom set to MAXIMUM_DEPTH. + ! bowl - bowl like basin using MAXIMUM_DEPTH and + ! MINIMUM_DEPTH. + ! spoon - similar to bowl except that southern + ! face of the "bowl" is open. + ! DOME - sill-overflow test case basin. + ! USER - user defined +TOPO_FILE = "topog.nc" ! If topography is to be set externally, +TOPO_VARNAME = "depth" + ! then this is the file to use. +MAXIMUM_DEPTH = 6500.0 ! The maximum depth of the ocean in m. +MINIMUM_DEPTH = 9.9 ! The minimum ocean depth, in m. Anything + ! shallower than this depth is assumed to be on + ! land, and all fluxes are masked out. +CHANNEL_CONFIG = "list" ! A string which determines which + ! set of channels are restricted to specific + ! widths. The default, "none", has no + ! partially restricted channels. + +COORD_CONFIG = "file" ! How layers are to be defined: + ! file - read coordinate information from file + ! (COORD_FILE). + ! ts_ref - use reference temperature + ! and salinity (T_REF and S_REF) to determine + ! surface density and GINT calculate internal + ! densities. + ! gprime - use reference density (RHO_0) for + ! surface density and GINT calculate internal + ! densities. + ! ts_profile - use profiles of temperature + ! and salinity (read from COORD_FILE) to determine + ! surface density and internal densities. + ! USER - user defined routine +COORD_FILE = "Vertical_coordinate.nc" + ! If the vertical coordinate is defined by a + ! file, use this file. +GFS = 9.80 ! The reduced gravity at the free + ! surface, in m s-2. +GINT = 1.2e-3 ! The nominal reduced gravity of the internal + ! interfaces for idealized models, in m s-2. + +INIT_LAYERS_FROM_Z_FILE = True ! interpolate online from z-space potential temperature + ! /salinity file. + +TEMP_SALT_Z_INIT_FILE = "WOA05_pottemp_salt.nc" +Z_INIT_FILE_PTEMP_VAR = "PTEMP" +Z_INIT_FILE_SALT_VAR = "SALT" +FIT_TO_TARGET_DENSITY_IC = False +USE_OLD_HINTERP = False + +ADJUST_THICKNESS = True + +VELOCITY_CONFIG = "zero" ! Method for defining initial layer velocities + ! file - read velocity information from file. + ! zero - zero velocities everywhere. + ! USER - user defined. + +! Specify the numerical domain. +NIGLOBAL = 2880 ! NIGLOBAL and NJGLOBAL are the number of thickness +NJGLOBAL = 2240 ! grid points in the zonal and meridional + ! directions of the physical domain. +NK = 63 ! The number of layers. +NIHALO = 4 ! NIHALO and NJHALO are the number of halo +NJHALO = 4 ! points on each side in the x- and y-directions. + ! If static memory allocation is used, these + ! must match the values of NIHALO_ and NJHALO_ + ! in MOM_memory.h. +NIPROC_IO = 8 ! The number of processors used for I/O in the + ! x-direction, or 0 to equal NIPROC. NIPROC_IO + ! must be a factor of NIPROC. +NJPROC_IO = 4 ! The number of processors used for I/O in the + ! y-direction, or 0 to equal NJPROC. NJPROC_IO + ! must be a factor of NJPROC. + +NIPROC = 32 ! The number of processors used in the x and y directions + ! respectively. +NJPROC = 24 + +REENTRANT_X = True ! If defined, the domain is zonally reentrant. +REENTRANT_Y = False ! If defined, the domain is meridionally + ! reentrant. +TRIPOLAR_N = True ! Use tripolar connectivity at the northern + ! edge of the domain. With TRIPOLAR_N, NIGLOBAL + ! must be even. +DEBUG = False ! If true, write out verbose debugging data. +DEBUG_TRUNCATIONS = False ! If true, calculate all diagnostics that are + ! useful for debugging truncations. +SEND_LOG_TO_STDOUT = False ! If true write out log information to stdout. + +! Specify the time integration scheme. +SPLIT = True ! Use the split time stepping if defined. +DT_FORCING = 3600.0 ! The time step for changing forcing or + ! writing certain diagnostics, in s. +DT_THERM = 1200.0 ! The thermodynamic time step, in s. DT_THERM + ! should be an integer multiple of DT and less + ! than or equal to DT_FORCING. +DT = 600.0 ! The (baroclinic) dynamics time step, in s. + ! DT should be an integer fraction of DT_FORCING. +DT_BT_FILTER = 600. ! Time-scale for filtering BT variables, in s. +DTBT = -0.9 ! The barotropic time step, in s. DTBT is only + ! used with the split explicit time stepping. + ! To set the time step automatically based + ! the maximum stable value use 0, or a negative + ! value gives the fraction of the stable value. + ! The value of DTBT that will actually be used + ! is an integer fraction of DT, rounding down. +DTBT_RESET_PERIOD = 0.0 ! The period between recalculations of DTBT + ! of DTBT (if DTBT <= 0), in seconds. If + ! DTBT_RESET_PERIOD is negative, DTBT is set + ! based only on information available at + ! initialization. If dynamic, DTBT will be set + ! at least every forcing time step, and if 0, + ! every dynamics time step. +BE = 0.6 ! BE determines whether the neutral baroclinic + ! time stepping scheme (0.5) or a backward Euler + ! scheme (1) is used. BE may be from 0.5 to 1, + ! but instability may occur near 0.5. +BEBT = 0.2 ! BEBT determines whether the barotropic time + ! stepping uses the forward-backward time- + ! stepping scheme or a backward Euler scheme. + ! BEBT is valid in the range from 0 (for a + ! forward-backward treatment of nonrotating + ! gravity waves) to 1 (for a backward Euler + ! treatment). In practice, BEBT must be greater + ! than about 0.05. +ETA_TOLERANCE = 1e-6 ! The tolerance, in m, for the differences + ! between the barotropic and baroclinic + ! estimates of the sea surface height due to + ! the fluxes through each face. The total + ! tolerance for SSH is 4 times this value. The + ! default is 0.5*NK*EPSILON, and this should not + ! be set less than about 10^-15*MAXIMUM_DEPTH. +ETA_TOLERANCE_AUX = 1e-3 ! The equivalent to ETA_TOLERANCE for the + ! calculation of auxiliary velocities, in m. + + +! Specify properties of the I/O and length of the integration. +TIMEUNIT = 86400.0 ! The time unit in seconds for the following + ! fields. +ENERGYSAVEDAYS = 10.0 ! The number of days between saves of the + ! energies of the run. +ENERGYFILE = "timestats" ! The file to use to save the energies. +RESTARTFILE = "MOM.res" ! The name of the restart file. +RESTINT = 365.0 ! The number of days between saves of the + ! restart file. Use a value that is larger than + ! DAYMAX not to save incremental restart files + ! within a run. Use 0 not to save restart files + ! at all. +PARALLEL_RESTARTFILES = True ! If defined, each processor writes its own + ! restart file, otherwise a single restart file + ! is generated. +LARGE_FILE_SUPPORT = True ! If true, use the file-size limits with + ! NetCDF large file support (4Gb). +RESTART_CONTROL = 1 ! RESTART_CONTROL determines which restart + ! files are written - Add 2 (bit 1) for a time- + ! stamped restart file, and odd (bit 0) for a + ! non-time-stamped file. A restart will be + ! saved at the end of the run segment for any + ! non-negative value. +SAVE_INITIAL_CONDS = True ! If defined, the inital conditions are + ! written to IC_OUTPUT_FILE at the start of a + ! new run. +IC_OUTPUT_FILE = "MOM_IC" ! The name-root of a file into which the + ! initial conditions are written for a new run. + +Z_OUTPUT_GRID_FILE = "zgrid.nc" + ! The file that specifies the vertical grid + ! for depth-space diagnostics. +MIN_Z_DIAG_INTERVAL = 2.16e4 ! The minimum amount of time in seconds between + ! calculations of depth-space diagnostics. + ! Making this larger than DT_THERM reduces the + ! performance penalty of regridding to depth + ! online. + +MAXCPU = 86400.0 ! The maximum amount of cpu time per processor + ! for which MOM should run before saving a + ! restart file and quitting with a return value + ! that indicates that a further execution is + ! required to complete the simulation. If + ! automatic restarts are not desired, use a + ! negative value for MAXCPU. MAXCPU has units + ! of wall-clock seconds. (i.e. CPU time limit is + ! larger by a factor of the number of processors + ! used. +INPUTDIR = "INPUT" + ! INPUTDIR is a directory in which NetCDF + ! input files might be found. + +! Specify the horizontal (along-isopycnal) viscosity. +LAPLACIAN = True ! LAPLACIAN is defined to use a Laplacian + ! horizontal viscosity. +BIHARMONIC = True ! BIHARMONIC is defined to use a biharmonic + ! horizontal viscosity. BIHARMONIC may be used + ! with LAPLACIAN, and it is automatically + ! defined if LAPLACIAN is undefined. +BOUND_KH = True ! If BOUND_KH is defined, the Laplacian + ! coefficient is locally limited to guarantee + ! stability. +BOUND_AH = True ! If BOUND_AH is defined, the biharmonic + ! coefficient is locally limited to guarantee + ! stability. +BETTER_BOUND_KH = True ! If BETTER_BOUND_KH is defined, use more + ! careful bounds in limiting KH for stability. +BETTER_BOUND_AH = True ! If BETTER_BOUND_AH is defined, use more + ! careful bounds in limiting AH for stability. +KH = 0.0 ! The Laplacian horizontal viscosity, in + ! m2 s-1. KH is used if LAPLACIAN is defined. +AH = 0.0 ! The biharmonic horizontal viscosity, in + ! m4 s-1. AH is used if BIHARMONIC is defined. +KH_VEL_SCALE = 0.0 ! The velocity scale which is multiplied by + ! the grid spacing to calculate the Laplacian + ! viscosity ,if LAPLACIAN is defined, in m s-1. + ! The final viscosity is the largest of this + ! scaled viscosity, the Smagorinsky viscosity + ! and KH. +AH_VEL_SCALE = 0.025 ! The velocity scale which is multiplied by + ! the cube of the grid spacing to calculate the + ! biharmonic viscosity if BIHARMONIC is defined, + ! in units of m s-1. The final viscosity is + ! the largest of this scaled viscosity, the + ! Smagorinsky viscosity and AH. +RESOLN_SCALED_KH = True ! If true, the lateral viscosity is scaled + ! away when the first baroclinic deformation + ! radius is well resolved. +KH_RES_SCALE_COEF = 1.0 ! A coefficient that determines how Kh is + ! scaled away, as F = 1/(1 + coef*Rd2/dx2) +SMAGORINSKY_KH = True ! If defined, use Smagorinsky's nonlinear eddy + ! viscosity. KH is the background. +SMAG_LAP_CONST = 0.01 ! The nondimensional Laplacian Smagorinsky + ! constant. Often 0.15. +SMAGORINSKY_AH = True ! If defined, use a biharmonic form of + ! Smagorinsky's nonlinear eddy viscosity. +SMAG_BI_CONST = 0.06 ! The nondimensional biharmonic Smagorinsky + ! constant. Often 0.015. +NOSLIP = False ! This should True for no slip + ! boundary conditions False for free + ! slip boundary conditions (the default). The + ! implementation of the free slip boundary + ! conditions on a C-grid is much cleaner than + ! the no slip boundary conditions. The use of + ! free slip b.c.s is strongly encouraged. The + ! no slip b.c.s are not implemented with the + ! biharmonic viscosity. + +! Specify the horizontal interface depth (akin to Gent-McWilliams) diffusion. +THICKNESSDIFFUSE = True ! If THICKNESSDIFFUSE is defined, interfaces + ! are diffused with a coefficient of KHTH. +THICKNESSDIFFUSE_FIRST = True ! If THICKNESSDIFFUSE_FIRST is defined, do + ! thickness diffusion before dynamics. +RESOLN_SCALED_KHTH = True ! If defined, the interface depth diffusivity + ! is scaled away when the first baroclinic + ! deformation radius is well resolved. +KHTH_SLOPE_MAX = 1.0e-2 ! A slope beyond which the calculated isopycnal + ! slope is not reliable and is scaled away. +KHTH = 1.0 ! KHTH is the nominal interface depth diffusivity + ! in m2 s-1. +KHTH_MIN = 0.0 ! Minimum thickness diffusivity in m2 s-1. +KHTH_MAX = 1000.0 ! Maximum thickness diffusivity in m2 s-1. +KHTH_SLOPE_CFF = 0.0 ! Non-dimensional coefficient in Visbeck formula. +USE_VARIABLE_MIXING = True ! If defined, forces the variable mixing code to + ! be called. This allows diagnostics to be created + ! even if the scheme is not used. This flag is + ! unused if the coefficients are non-zero. + +DETANGLE_INTERFACES = False ! If true, scale up the interface height diffusivity + ! around layers with abrupt thickness changes. +REGULARIZE_SURFACE_LAYERS = True ! If true, reorganize top NKML+NKBL layers for + ! spatial smoothness. +REG_SFC_DEFICIT_TOLERANCE = 0.5 +MIXEDLAYER_RESTRAT = True ! If true, a density-gradient dependent + ! re-stratifying flow is imposed in the mixed + ! layer. +FOX_KEMPER_ML_RESTRAT_COEF = 5.0 + ! A nondimensional coefficient that is + ! proportional to the ratio of the deformation + ! radius to the dominant lengthscale of the + ! submesoscale mixed layer instabilities, times + ! the minimum of the ratio of mesoscale eddy + ! kinetic energy to the large-scale geostrophic + ! kinetic energy or 1 plus the square of the + ! grid spacing over the deformation radius, as + ! detailed in the work of Fox-Kemper et al. + +! Specify the scheme for the Coriolis and momentum advection terms. +CORIOLIS_SCHEME = "SADOURNY75_ENERGY" + ! Selects the discretization of Coriolis terms. + ! Possible values are: + ! SADOURNY75_ENERGY - Sadourny's energy + ! conserving scheme + ! ARAKAWA_HSU90 - Arakawa and Hsu's scheme + ! ROBUST_ENSTRO - A pseudo-enstrophy + ! conserving scheme, robust + ! to vanishing thickness +KE_SCHEME = "KE_ARAKAWA" ! Selects the discretization for the kinetic + ! energy in the Bernoulli function. Possible + ! values are KE_ARAKAWA, KE_SIMPLE_GUDONOV, + ! and KE_GUDONOV. KE_ARAKAWA is the default. +BOUND_CORIOLIS = True ! If BOUND_CORIOLIS is defined, the Coriolis + ! terms at u points are bounded by the four + ! estimates of (f+rv)v from the four neighboring + ! v points, and similarly at v points. This + ! option would have no effect on the SADOURNY + ! scheme if it were possible to use centered + ! difference thickness fluxes. In addition, if + ! SMAGORINSKY_AH is used, the biharmonic + ! viscosity is modified to include a term that + ! scales quadratically with the velocity + ! shears. +CORIOLIS_EN_DIS = True ! If CORIOLIS_EN_DIS is defined, two estimates + ! of the thickness fluxes are used to estimate + ! the Coriolis term, and the one that dissipates + ! energy relative to the other one is used. + +! Specify the scheme for the continuity solver. +CONTINUITY_SCHEME = "PPM" ! CONTINUTITY_SCHEME specifies the scheme used + ! for the continuity solver. PPM is currently + ! the only option, in which case a positive- + ! definite piecewise parabolic reconstruction + ! is used for the continuity solver. +CONTINUITY_CFL_LIMIT = 0.5 ! This is the CFL limit for corrections with + ! the PPM continuity scheme. +CONT_PPM_BETTER_ITER = True ! If true, use the velocity change tolerance + ! to determine when to keep iterating with the + ! PPM continuity scheme. +CONT_PPM_USE_VISC_REM_MAX = True ! If true, use more appropriate limiting + ! bounds for corrections in viscous columns. + +! Specify the scheme for the vertical viscosity. +HARMONIC_VISC = False ! If defined, use the harmonic mean thickness + ! for calculating the vertical viscosity. + +! Specify the scheme for the pressure gradient accelerations. +ANALYTIC_FV_PGF = True ! If defined the pressure gradient forces + ! are calculated with a finite volume form that + ! analytically integrates the equations of state + ! in pressure to avoid any possibility of + ! numerical thermobaric instability. + +! Specify the scheme for the barotropic solver. +BOUND_BT_CORRECTION = True ! If defined, the corrective pseudo mass- + ! fluxes into the barotropic solver are limited + ! to values that require less than 0.1*MAXVEL to + ! be accommodated. +BT_PROJECT_VELOCITY = True + +INTERPOLATE_P_SURF = False ! Interpolate surface pressure changes through the + ! barotropic solver. +BT_THICK_SCHEME = "FROM_BT_CONT" + +DYNAMIC_SURFACE_PRESSURE = True +ICE_LENGTH_DYN_PSURF = 1.e3 +CONST_DYN_PSURF = 0.9 + +TFREEZE_FORM = "MILLERO_78" +USE_RIGID_SEA_ICE = True +PRESSURE_DEPENDENT_FRAZIL = True + + +MASS_WEIGHT_IN_PRESSURE_GRADIENT = True ! [Boolean] default = False + ! If true, use mass weighting when interpolation T/S for + ! top/bottom integrals in AFV pressure gradient calculation. + +! Specify the properties of the active tracers and Eqn of state. +ENABLE_THERMODYNAMICS = True ! Temperature and salinity are used as state + ! variables if ENABLE_THERMODYNAMICS is defined. +FRAZIL = True ! If FRAZIL is defined, water freezes if it + ! gets colder than the freezing point, and the + ! accumulated heat deficit is returned in the + ! surface state. +RECLAIM_FRAZIL = True ! If defined, balance heat consumption by + ! frazil formation by cooling any overlying water + ! down to the freezing point to avoid creating + ! thin sea-ice for SSTs above freezing. +EQN_OF_STATE = "WRIGHT" ! EQN_OF_STATE determines which ocean equation + ! of state should be used. Currently, the valid + ! choices are "LINEAR", "UNESCO", and "WRIGHT". + ! The default is "WRIGHT", but this only matters + ! of USE_EOS is defined. +USE_EOS = True ! If USE_EOS is defined, density is calculated + ! from temperature and salinity with an equation + ! of state. ENABLE_THERMODYNAMICS must be + ! defined if USE_EOS is. +BOUSSINESQ = True ! If true, make the Boussinesq approximation. +P_REF = 2.0e7 ! P_REF is the pressure that is used for + ! calculating the coordinate density, in Pa. + ! (1 Pa = 1e4 dbar, so 2e7 is common--ly used.) +RHO_0 = 1035.0 ! RHO_0 is used in the Boussinesq + ! approximation to calculations of pressure and + ! pressure gradients, in units of kg m-3. +C_P = 3925.0 ! C_P is the heat capacity of sea water in + ! J kg-1 K-1, approximated as a constant. +CORRECT_DENSITY = True ! If CORRECT_DENSITY is defined, the layer + ! densities are restored toward their target + ! values by the diapycnal mixing. + +! Specify the properties of the surface forcing. +WIND_STAGGER = "B" ! "A", "B", or "C" to indicate the + ! staggering of the wind stresses. + +! Specify the properties of the passive tracers. +KHTR = 0.0 ! KHTR is the along-isopycnal tracer diffusivity, in m2 s-1. +KHTR_MIN = 0.0 ! Minimum tracer diffusivity in m2 s-1. +KHTR_MAX = 0.0 ! Maximum tracer diffusivity in m2 s-1. +KHTR_SLOPE_CFF = 0.25 ! Non-dimensional coefficient in Visbeck formula. + ! Use non-zero value (e.g. 0.1) to enable Visbeck +RESOLN_SCALED_KHTR = False ! If defined, the tracer diffusivity is scaled + ! away when the first baroclinic deformation + ! radius is well resolved. +KHTR_PASSIVITY_COEFF = 0.0 ! Passivity coefficient that scales Rd/dx + ! where passivity is the ratio between the + ! along-isopycnal tracer mixing and thickness + ! mixing +CHECK_DIFFUSIVE_CFL = True ! If true, use enough iterations to ensure + ! that the horizontal diffusive CFL limit is + ! respected. If false, always use 1 iteration. + +CHECK_BAD_SURFACE_VALS = False +BAD_VAL_SST_MIN = -3.0 +BAD_VAL_SST_MAX = 55.0 +BAD_VAL_SSS_MIN = 0.0 +BAD_VAL_SSS_MAX = 65.0 +BAD_VAL_SSH_MIN = -50.0 +BAD_VAL_SSH_MAX = 50.0 + +DIFFUSE_ML_TO_INTERIOR = True ! If true, enable epipycnal mixing between the + ! surface boundary layer and the interior. +ML_KHTR_SCALE = 0.0 ! With Diffuse_ML_interior, this is the ratio + ! of the truly horizontal diffusivity in the + ! mixed layer to the epipycnal diffusivity. + ! The default is 1.0. Nondimensional. + +USE_USER_TRACER_EXAMPLE = False ! If defined, the example tracer package is used. +USE_IDEAL_AGE_TRACER = True ! If defined, the ideal age and vintage + ! tracer package may be used. +DO_IDEAL_VINTAGE = False ! If defined and USE_IDEAL_AGE_TRACER is + ! defined, use an ideal vintage tracer that is + ! set to an exponentially increasing value in + ! the mixed layer and is conserved thereafter. + +DO_IDEAL_AGE_DATED = False + +! Specify the properties of the diapycnal viscosity and diffusion. +ADIABATIC = False ! There are no diapycnal mass fluxes if + ! ADIABATIC is defined. This assumes that + ! KD = KDML = 0.0 and that there is no buoyancy + ! forcing, but makes the model faster by + ! eliminating subroutine calls. + +BULKMIXEDLAYER = True ! If defined, use a Kraus-Turner-like bulk + ! mixed layer with transitional buffer layers. + ! Layers 1 through NKML+NKBL have variable + ! densities. There must be at least NKML+NKBL+1 + ! layers if BULKMIXEDLAYER is defined. +! The following parameters only apply when BULKMIXEDLAYER is defined. +NKML = 2 ! NKML is the number of sublayers within the + ! mixed layer. +NKBL = 2 ! NKBL is the number of layers used as + ! variable density buffer layers. +MSTAR = 0.3 ! MSTAR is a non-dimensional constant of + ! proportionality between the cube of the + ! surface friction velocity and the turbulent + ! kinetic energy input at the surface. +NSTAR = 0.15 ! NSTAR is the portion of the buoyant + ! potential energy imparted by surface fluxes + ! that is available to drive entrainment at the + ! base of mixed layer when that energy is + ! positive. +NSTAR2 = 0.15 ! NSTAR2 is the portion of any potential + ! energy released by convective adjustment that + ! is available to drive entrainment at the + ! base of the mixed layer. By default, + ! NSTAR2 = NSTAR. +READ_GUST_2D = False ! Signals to read gustiness from a file (Pa) +GUST_CONST = 0.02 ! Gustinesss to use if not read from file or + ! a background that is added to the data (Pa) +PEN_SW_FRAC = 0.42 ! PEN_SW_FRAC is the fraction of the shortwave + ! radiation that penetrates below the surface. +PEN_SW_SCALE = 40.0 ! PEN_SW_SCALE is the vertical absorption + ! e-folding depth of the penetrating shortwave + ! radiation, in m. +PEN_SW_NBANDS = 3 ! The number of bands of penetrating shortwave + ! radiation. +ABSORB_ALL_SW = True ! If defined, all shortwave radiation is + ! absorbed by the ocean, instead of passing + ! through to the bottom mud. +CORRECT_ABSORPTION_DEPTH = True ! If true, the depth at which penetrating + ! shortwave radiation is absorbed is corrected by + ! moving some of the heating upward in the water + ! column. The default is false. +ML_USE_OMEGA = True ! Use Omega instead of f in ML code +TKE_DECAY = 10.0 ! TKE_DECAY relates the vertical rate of decay + ! of the TKE available for mechanical entrain- + ! ment to the natural Ekman depth. Nondim. +CONV_DECAY = 0.5 ! CONV_DECAY relates the vertical rate of + ! decay of the convectively released TKE + ! available for penetrating entrainment to the + ! natural Ekman length. Nondimensional. +BULK_RI_ML = 0.05 ! BULK_RI_ML is the efficiency with which mean + ! kinetic energy released by mechanically forced + ! entrainment of the mixed layer is converted to + ! turbulent kinetic energy. Nondimensional. +BULK_RI_CONVECTIVE = 0.05 ! BULK_RI_CONVECTIVE is the efficiency with + ! which convectively released mean kinetic + ! energy is converted to turbulent kinetic + ! energy. Nondimensional. +RESOLVE_EKMAN = False ! If true, the nkml>1 layers in the mixed + ! layer are chosen to optimally represent the + ! impact of the Ekman transport on the mixed + ! layer TKE budget. Otherwise, the sublayers + ! are distributed uniformly through the mixed + ! layer. The default is false. +ML_MIX_FIRST = 0.0 ! The fraction of the mixed layer mixing that + ! is applied before interior diapycnal mixing. +ML_RESORT = True ! If defined, resort the topmost layers by + ! potential density before the mixed layer + ! calculations. +ML_PRESORT_NK_CONV_ADJ = 4 ! Convectively mix the first X layers before + ! sorting when ML_RESORT is defined. +LIMIT_BUFFER_DETRAIN = True ! If defined, limit the detrainment from the + ! buffer layers to not be too different from the + ! neighbors. +DYNAMIC_VISCOUS_ML = True ! If defined, use a bulk Richardson number criteria + ! to determine the mixed layer thickness for viscosity. +HMIX_MIN = 4.0 ! The minimum mixed layer depth, in m. +! End of the BULKMIXEDLAYER parameters. + +PRANDTL_TURB = 1.0 +USE_LIMITED_PATM_SSH = True ! If defined, return the full sea surface height + ! with the correction for the atmospheric (and + ! sea-ice) pressure limited by max_p_surf, instead + ! of the full atmospheric pressure. +DEPTH_LIMIT_FLUXES = 0.1 ! The surface fluxes are scaled away when the + ! total ocean depth is less than this, in m. +KVML = 1.00e-2 ! The kinematic viscosity in the mixed layer, + ! in m2 s-1. A typical value is ~1e-2 m2 s-1. + ! KVML is not used if BULKMIXEDLAYER is defined. +DIRECT_STRESS = False ! If DIRECT_STRESS is defined, the wind stress + ! is distributed over the topmost HMIX_STRESS + ! of fluid, and KVML need not be elevated. + +KV = 1.00e-3 ! The kinematic viscosity in the interior, in + ! m2 s-1. The molecular value, ~1e-6 m2 s-1, + ! may be used. +KD = 2.00e-5 ! The diapycnal diffusivity of density in the + ! interior, in m2 s-1. Zero or the molecular + ! value, ~1e-7 m2 s-1, may be used. +MAX_ENT_IT = 20 ! The maximum number of iterations that may be + ! used to calculate the interior diapycnal + ! entrainment. +TOLERANCE_ENT = 1.0e-5 ! The tolerance in m with which to solve for + ! entrainment values. +USE_JACKSON_PARAM = True ! If true, use the new Jackson-Hallberg-Legg + ! (JPO 2008) shear mixing parameterization. +! The Jackson-Hallberg-Legg shear mixing parameterization uses the following +! 6 nondimensional coefficients. That paper gives 3 best fit parameter sets. +! Ri_Crit Rate FRi_Curv K_buoy TKE_N TKE_Shear +! p1: 0.25 0.089 -0.97 0.82 0.24 0.14 +! p2: 0.30 0.085 -0.94 0.86 0.26 0.13 +! p3: 0.35 0.088 -0.89 0.81 0.28 0.12 +! Future research will reveal how these should be modified to take +! subgridscale inhomogeneity into account. +RINO_CRIT = 0.25 ! The critical Richardson number for shear + ! mixing. With the Jackson et al. parameteriz- + ! ation, values range from 0.25 to 0.35. +SHEARMIX_RATE = 0.089 ! A nondimensional rate scale for shear-driven + ! entrainment. The original value from Hallberg + ! (MWR 2000) is 0.1. The default value with + ! USE_JACKSON_PARAM is 0.089. +FRI_CURVATURE = -0.97 ! The nondimensional curvature of the fit to + ! function of the Richardson number in the kappa + ! source term in the Jackson et al. scheme. The + ! default value is -0.97. +KAPPA_BUOY_SCALE_COEF = 0.82 ! The nondimensional ratio of the buoyancy + ! length scale to the kappa decay scale in the + ! kappa equation. The default value is 0.82. +TKE_N_DECAY_CONST = 0.24 ! The coefficient for the decay of TKE due to + ! stratification (i.e. proportional to N*tke), + ! ND. The default value is 0.24. +TKE_SHEAR_DECAY_CONST = 0.14 ! The coefficient for the decay of TKE due + ! to shear (i.e. proportional to |S|*tke), ND. + ! The default value is 0.14. +TKE_BACKGROUND = 0.0 ! A background level of TKE used in the first + ! iteration of the kappa equation, in m2 s-2. + ! TKE_BACKGROUND could be 0, its default. +MAX_RINO_IT = 25 ! The maximum number of iterations that may be + ! used to estimate the Richardson number driven + ! mixing. + +BRYAN_LEWIS_DIFFUSIVITY = False ! If true, a Bryan & Lewis (JGR 1979) like + ! tanh profile of background diapycnal + ! diffusivity with depth is used. +LEE_WAVE_DISSIPATION = False ! If true, use a lee wave driven dissipation + ! scheme to drive diapycnal mixing, along the + ! lines of Nikurashin (2010). +DISSIPATION_N0 = 1.0e-7 ! The intercept when N=0 of the N-dependent + ! expression used to set a minimum dissipation + ! by which to determine a lower bound of Kd + ! (a floor): A in eps_min = A + B*N, in W m-3. +DISSIPATION_N1 = 6.0e-4 ! The coefficient multiplying N, following + ! Gargett (1984), used to set a minimum + ! dissipation by which to determine a lower + ! bound of Kd (a floor): B in eps_min = A + B*N + ! in units of J m-3. +INT_TIDE_DISSIPATION = False ! If true, use an internal tidal dissipation + ! scheme to drive diapycnal mixing, along the + ! lines of St. Laurent, 2002 and Simmons, 2004. +INT_TIDE_DECAY_SCALE = 300.3003003003003 ! The decay scale away from the + ! bottom for tidal TKE when INT_TIDE_DISSIPATION + ! is used, in m. +MU_ITIDES = 0.2 ! A dimensionless turbulent mixing efficiency. + ! (global value to use instead?) +GAMMA_ITIDES = 0.3333 ! Fraction of tidal energy dissipated locally. +MIN_ZBOT_ITIDES = 0.0 ! Turn off tidal dissipation where total ocean + ! depth less than this value. +READ_H2 = False ! Read SGS topographic variance from file +KAPPA_ITIDES = 0.000628319 ! The effective wavelength of the subgridscale + ! topographic variations, in m-1. Currently set + ! to 2*pi/10km. +H2_FILE = "topog.nc" ! File containing sub-grid topography amplitude +READ_TIDEAMP = False ! If true, read a file (given by TIDEAMP_FILE) + ! containing the tidal amplitude. +TIDEAMP_FILE = "tideamp.nc" ! File containing tidal flow amplitude +KAPPA_H2_FACTOR = 0.75 ! A scaling factor for roughness amplitude. +TKE_ITIDE_MAX = 0.1 ! Maximum conversion to baroclinic tides, W m-2. +N2_FLOOR_IOMEGA2 = 0. ! The floor applied to N2(k) scaled by Omega^2 + ! If =0., N2(k) is simply positive definite + ! If =1., N2(k) > Omega^2 everywhere +BBL_MIXING_AS_MAX = False ! If true, take the maximum of the diffusivity + ! from the BBL mixing and the other + ! diffusivities. Otherwise, diffusiviy from the + ! BBL_mixing is simply added. +KD_MIN = 2.e-6 ! Minimum diapycnal diffusivity (m^2/s) +CD_TIDES = 2.5e-3 ! The drag coefficient for calculating the + ! frictional drag of tidal velocities, nondim. +HBBL = 10.0 ! The thickness in m of a bottom boundary + ! layer with a viscosity of KVBBL if + ! BOTTOMDRAGLAW is not defined, or the thickness + ! over which near-bottom velocities are averaged + ! for the drag law if BOTTOMDRAGLAW is defined + ! but LINEAR_DRAG is not. +KVBBL = 2.00e-2 ! The kinematic viscosity in the benthic + ! boundary layer, in m2 s-1. A typical value is + ! ~1e-3 m2 s-1. KVBBL is not used with if + ! BOTTOMDRAGLAW is defined. +BOTTOMDRAGLAW = True ! If BOTTOMDRAGLAW is defined, the bottom + ! stress is calculated with a drag law + ! c_drag*|u|*u. The velocity magnitude may be an + ! assumed value or it may be based on the actual + ! velocity in the bottommost HBBL, depending on + ! LINEAR_DRAG. +CDRAG = 0.003 ! CDRAG is the drag coefficient relating the + ! magnitude of the velocity field to the bottom + ! stress. CDRAG is only used if BOTTOMDRAGLAW is + ! defined. +CDRAG_CHAN = 0.1 + +LINEAR_DRAG = False ! If LINEAR_DRAG and BOTTOMDRAGLAW are defined + ! the drag law is cdrag*DRAG_BG_VEL*u. +DRAG_BG_VEL = 0.10 ! DRAG_BG_VEL is either the assumed bottom + ! velocity (with LINEAR_DRAG) or an unresolved + ! velocity that is combined with the resolved + ! velocity to estimate the velocity magnitude, + ! in m s-1. DRAG_BG_VEL is only used when + ! BOTTOMDRAGLAW is defined. +BBL_THICK_MIN = 0.1 ! The minimum bottom boundary layer thickness, + ! in m, that can be used with BOTTOMDRAGLAW. + ! This might be Kv / (cdrag * drag_bg_vel) to + ! give Kv as the minimum near-bottom viscosity. +BBL_EFFIC = 0.20 ! BBL_EFFIC is the efficiency with which the + ! energy extracted by bottom drag drives BBL + ! diffusion. Nondimensional. BBL_EFFIC only + ! applies when BOTTOMDRAGLAW is defined. +BBL_EFFIC_RAY = 0.2 +BBL_MIXING_MAX_DECAY = 0.0 ! This sets the maximum decay scale in m for + ! the BBL diffusion, or 0 to allow the mixing + ! to penetrate as far as stratification and + ! rotation permit. The default is 0. +CHANNEL_DRAG = True ! If defined the drag is exerted directly on + ! each layer according to what fraction of the + ! bottom they overlie. +SMAG_CONST_CHANNEL = 0.15 ! The nondimensional Laplacian Smagorinsky + ! constant used in calculating the channel drag + ! if it is enabled. The default is to use the + ! same value as SMAG_LAP_CONST if it is defined, + ! or 0.15 if it is not. + ! The file containing RMS tidal amplitude. +DO_RIVERMIX = True ! If true, apply additional mixing whereever + ! there is runoff, so that it is mixed down to + ! RIVERMIX_DEPTH, if the ocean is that deep. +RIVERMIX_DEPTH = 40.0 ! The depth to which rivers are mixed, in m, + ! if DO_RIVERMIX is defined. +HENYEY_IGW_BACKGROUND = True ! If defined use a latitude-dependent scaling + ! for the near-surface background diffusivity, + ! as described in Harrison & Hallberg, JPO'08. +ML_RADIATION = True ! Turns on sub-ML mixing driven by ML radiation +ML_RAD_COEFF = 0.1 ! Non-dimensional energy input for sub-ML mixing +ML_RAD_KD_MAX = 1.e-3 ! Maximum diffusivity allowed in sub-ML mixing +ML_RAD_EFOLD_COEFF = 0.2 ! Non-dimensional length scale (multiples ML depth) + +! Specify properties of the bottom thermal forcing. +DO_GEOTHERMAL = False ! If defined, apply geothermal heating. +GEOTHERMAL_FILE = geothermal_heating_cm2g.nc + ! The file from which the geothermal heating is + ! to be read, or blank to use a constant heating + ! rate. +GEOTHERMAL_SCALE = 0.001 ! The constant geothermal heat flux, a + ! rescaling factor for the heat flux read from + ! GEOTHERMAL_FILE, or 0 to disable the geothermal + ! heating. + +! Specify properties of the surface forcing. +BOUND_SALINITY = True ! Limit salinity to being positive (the sea-ice + ! model may ask for more salt than is available and + ! otherwise drive the salinity negative) +RESTORE_SALINITY = False ! If RESTORE_SALINITY is defined, the coupled + ! driver will add a globally-balanced fresh- + ! water flux that drives sea-surface salinity + ! toward specified values. +SRESTORE_AS_SFLUX = False ! If SRESTORE_AS_SFLUX is defined, the relaxation of + ! surface salinity is done via a virtual salt flux + ! rather than through a freshwater flux. +MAX_DELTA_SRESTORE = 5.0 ! + +MASK_SRESTORE_MARGINAL_SEAS = False ! Other options for salt restoring from MOM4 +MASK_SRESTORE_UNDER_ICE = False +ICE_SALT_CONCENTRATION = 0.005 +SALT_REJECT_BELOW_ML = True +ADJUST_NET_FRESH_WATER_TO_ZERO = True + + +FLUXCONST = 0.1667 ! A constant that relates the surface fluxes + ! to the mixed layer property anomalies, if + ! RESTOREBUOY or RESTORE_SALINITY is defined. + !] +MAX_P_SURF = 3.0e4 ! The maximum surface pressure that can be + ! exerted by the atmosphere and floating sea-ice, + ! in Pa. This is needed because the FMS coupling + ! structure does not limit the water that can be + ! frozen out of the ocean and the ice-ocean heat + ! fluxes are treated explicitly. No limit is + ! applied if a negative value is used. + +CALCULATE_APE = False + + +! Specify whether sponges are used. It is possible to use the model in robust +! diagnostic mode by defining sponges that span the entire domain. +SPONGE = False ! If SPONGE is defined, sponges may be applied + ! anywhere in the domain. The exact location and + ! properties of those sponges are specified from + ! MOM_initialization.F90. +APPLY_OBC_U = False ! If defined, open boundary conditions may be +APPLY_OBC_V = False ! applied at some u- or v- points. The boundary + ! conditions are set in USER_set_Open_Bdry_Conds + ! in MOM_initialization.F90 + +! Specify properties of the tides. +TIDES = False ! Apply tidal momentum forcing. +TIDE_USE_SAL_SCALAR = True ! Use the scalar approximation when + ! calculating self-attraction and loading. +TIDE_SAL_SCALAR_VALUE = 0.094 + ! The constant of proportionality between + ! sea surface height (should be bottom pressure) + ! anomalies and bottom geopotential anomalies. +TIDAL_SAL_FROM_FILE = False ! Read the tidal self-attraction and loading + ! from input files, specified with one or more + ! lines like 'TIDAL_INPUT_FILE = path'. +USE_PREVIOUS_TIDES = False ! Use the previous iteration of the tides + ! to facilitate convergent iteration. +! Specify which tidal constituents to use. +TIDE_M2 = False +TIDE_S2 = False +TIDE_N2 = False +TIDE_K2 = False +TIDE_K1 = False +TIDE_O1 = False +TIDE_P1 = False +TIDE_Q1 = False +TIDE_MF = False +TIDE_MM = False + + +! Opacity Rules +VAR_PEN_SW = False ! Use time and/or space varying CHL_A to set opacity + +OPACITY_SCHEME = "MANIZZA_05" ! OPACITY_SCHEME is used to specify how + ! chlorophyll concentrations are translated into + ! opacities. Currently valid options include: + ! MANIZZA_05 - Use Manizza et al., GRL, 2005. + ! MOREL_88 - Use Morel, JGR, 1988. +CHL_FILE = "" + +! CFCs tracers +USE_OCMIP2_CFC = False ! If defined, CFC11 and CFC12 distributions + ! are simulated. +CFC_IC_FILE = False + ! The file in which to find initial conditions + ! for CFCs, if USE_OCMIP2_CFC is defined. + +! Specify a few miscellaneous limits. + +CFL_BASED_TRUNCATIONS = True + +CFL_TRUNCATE_RAMP_TIME = 8.64e+05 ! [s] default = 0.0 + ! The time over which the CFL trunction value is ramped + ! up at the beginning of the run. +CFL_TRUNCATE_START = 0.3 ! [nondim] default = 0.0 + ! The start value of the truncation CFL number used when + ! ramping up CFL_TRUNC. + +MAXVEL = 6.0 ! This is the maximum velocity allowed before + ! the velocity is truncated, in units of m s-1. +MAXTRUNC = 1000 ! The run will be stopped, and the day set to + ! a very large value if the velocity is + ! truncated more than MAXTRUNC times between + ! energy saves. Set MAXTRUNC to 0 to stop if + ! there is any truncation of velocities. +U_TRUNC_FILE = "U_velocity_truncations" + ! The absolute path to a file into which the + ! accelerations leading to zonal velocity + ! truncations are written. Undefine this for + ! efficiency if this diagnostic is not needed. +V_TRUNC_FILE = "V_velocity_truncations" + + + ! The absolute path to a file into which the + ! accelerations leading to meridional velocity + ! truncations are written. Undefine this for + ! efficiency if this diagnostic is not needed. + diff --git a/examples/ocean_SIS/GIS_0125/MOM_override b/examples/ocean_SIS/GIS_0125/MOM_override new file mode 100644 index 0000000000..8244328586 --- /dev/null +++ b/examples/ocean_SIS/GIS_0125/MOM_override @@ -0,0 +1 @@ +# Blank file in which we can put "overrides" for parameters diff --git a/examples/ocean_SIS/GIS_0125/README b/examples/ocean_SIS/GIS_0125/README new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/core/MOM_barotropic.F90 b/src/core/MOM_barotropic.F90 index e1c46145b3..c7d082d577 100644 --- a/src/core/MOM_barotropic.F90 +++ b/src/core/MOM_barotropic.F90 @@ -707,7 +707,7 @@ subroutine btstep(U_in, V_in, eta_in, dt, bc_accel_u, bc_accel_v, & "implemented for a non-Boussinesq model.") endif ; endif - nstep = CEILING(dt/CS%dtbt - 0.0001) + nstep = max(CEILING(dt/CS%dtbt - 0.0001),4) if (is_root_PE() .and. (nstep /= CS%nstep_last)) then write(mesg,'("btstep is using a dynamic barotropic timestep of ", ES12.6, & & " seconds, max ", ES12.6, ".")') (dt/nstep), CS%dtbt_max @@ -715,6 +715,7 @@ subroutine btstep(U_in, V_in, eta_in, dt, bc_accel_u, bc_accel_v, & endif CS%nstep_last = nstep + ! Set the actual barotropic time step. Instep = 1.0 / real(nstep) dtbt = dt * Instep @@ -775,8 +776,6 @@ subroutine btstep(U_in, V_in, eta_in, dt, bc_accel_u, bc_accel_v, & if (.not. use_BT_cont) then call create_group_pass(pass_Dat_uv, Datu, Datv, CS%BT_Domain, To_All+Scalar_Pair) endif - call create_group_pass(pass_eta_ubt, eta, CS%BT_Domain) - call create_group_pass(pass_eta_ubt, ubt, vbt, CS%BT_Domain) if (find_etaav) then call create_group_pass(pass_etaav, etaav, G%Domain) endif @@ -1441,6 +1440,10 @@ subroutine btstep(U_in, V_in, eta_in, dt, bc_accel_u, bc_accel_v, & endif nfilter = ceiling(dt_filt / dtbt) + call create_group_pass(pass_eta_ubt, eta, CS%BT_Domain) + call create_group_pass(pass_eta_ubt, ubt, vbt, CS%BT_Domain) + + ! Set up the normalized weights for the filtered velocity. sum_wt_vel = 0.0 ; sum_wt_eta = 0.0 ; sum_wt_accel = 0.0 ; sum_wt_trans = 0.0 allocate(wt_vel(nstep+nfilter)) ; allocate(wt_eta(nstep+nfilter)) @@ -2203,6 +2206,8 @@ subroutine set_dtbt(G, CS, eta, pbce, BT_cont, gtot_est, SSH_add) CS%dtbt = CS%dtbt_fraction * dtbt_max CS%dtbt_max = dtbt_max + + end subroutine set_dtbt ! The following 4 subroutines apply the open boundary conditions. diff --git a/src/ice_shelf/MOM_ice_shelf.F90 b/src/ice_shelf/MOM_ice_shelf.F90 index 1c96d5fbee..2d8667cbdb 100644 --- a/src/ice_shelf/MOM_ice_shelf.F90 +++ b/src/ice_shelf/MOM_ice_shelf.F90 @@ -167,6 +167,7 @@ module MOM_ice_shelf ! Perhaps these diagnostics should only be kept with the call? exch_vel_t => NULL(), & exch_vel_s => NULL(), & + utide => NULL(), & tfreeze => NULL(), & ! The freezing point potential temperature an the ice-ocean ! interface, in deg C. tflux_shelf => NULL(), & ! The UPWARD diffusive heat flux in the ice shelf at the @@ -234,6 +235,7 @@ module MOM_ice_shelf !! [if float_frac = 1 ==> grounded; obv. counterintuitive; might fix] real :: ustar_bg ! A minimum value for ustar under ice shelves, in m s-1. + real :: cdrag ! drag coefficient under ice shelves , non-dimensional. real :: Cp ! The heat capacity of sea water, in J kg-1 K-1. real :: Cp_ice ! The heat capacity of fresh ice, in J kg-1 K-1. real :: gamma_t ! The (fixed) turbulent exchange velocity in the @@ -455,6 +457,7 @@ subroutine shelf_calc_flux(state, fluxes, Time, time_step, CS) ! Variables used in iterating for wB_flux. real :: wB_flux_new, DwB, dDwB_dwB_in real :: I_Gam_T, I_Gam_S, dG_dwB, iDens + real :: u_at_h, v_at_h, Isqrt2 logical :: Sb_min_set, Sb_max_set character(4) :: stepnum character(2) :: procnum @@ -478,6 +481,7 @@ subroutine shelf_calc_flux(state, fluxes, Time, time_step, CS) PR = CS%kv_molec/CS%kd_molec_temp I_VK = 1.0/VK RhoCp = G%Rho0 * CS%Cp + Isqrt2 = 1.0/sqrt(2.0) !first calculate molecular component Gam_mol_t = 12.5 * (PR**c2_3) - 6 @@ -511,7 +515,22 @@ subroutine shelf_calc_flux(state, fluxes, Time, time_step, CS) ! salinity just below the ice-shelf as the variable that is being ! iterated for. ! ### SHOULD I SET USTAR_SHELF YET? + + u_at_h = state%u(i,j) + v_at_h = state%v(i,j) + + fluxes%ustar_shelf(i,j)= sqrt(CS%cdrag)*((u_at_h**2.0 + v_at_h**2.0)**0.5 +& + CS%utide(i,j)) ustar_h = MAX(CS%ustar_bg, fluxes%ustar_shelf(i,j)) + + fluxes%ustar_shelf(i,j) = ustar_h + + if (associated(state%taux_shelf) .and. associated(state%tauy_shelf)) then + state%taux_shelf(i,j) = ustar_h*ustar_h*G%Rho0*Isqrt2 + state%tauy_shelf(i,j) = state%taux_shelf(i,j) + endif + + ! Estimate the neutral ocean boundary layer thickness as the minimum of the ! reported ocean mixed layer thickness and the neutral Ekman depth. absf = 0.25*((abs(G%CoriolisBu(I,J)) + abs(G%CoriolisBu(I-1,J-1))) + & @@ -743,7 +762,7 @@ end subroutine shelf_calc_flux subroutine add_shelf_flux(G, CS, state, fluxes) type(ocean_grid_type), intent(inout) :: G - type(ice_shelf_CS), intent(in) :: CS + type(ice_shelf_CS), intent(inout) :: CS type(surface), intent(inout) :: state type(forcing), intent(inout) :: fluxes ! Arguments: @@ -759,6 +778,7 @@ subroutine add_shelf_flux(G, CS, state, fluxes) real :: taux2, tauy2 ! The squared surface stresses, in Pa. real :: asu1, asu2 ! Ocean areas covered by ice shelves at neighboring u- real :: asv1, asv2 ! and v-points, in m2. + real :: fraz ! refreezing rate in kg m-2 s-1 integer :: i, j, is, ie, js, je, isd, ied, jsd, jed is = G%isc ; ie = G%iec ; js = G%jsc ; je = G%jec isd = G%isd ; jsd = G%jsd ; ied = G%ied ; jed = G%jed @@ -788,9 +808,21 @@ subroutine add_shelf_flux(G, CS, state, fluxes) fluxes%frac_shelf_v(i,J) = ((CS%area_shelf_h(i,j) + CS%area_shelf_h(i,j+1)) / & (G%areaT(i,j) + G%areaT(i,j+1))) fluxes%rigidity_ice_v(i,J) = (CS%kv_ice / CS%density_ice) * & - min(CS%mass_shelf(i,j), CS%mass_shelf(i,j+1)) + max(CS%mass_shelf(i,j), CS%mass_shelf(i,j+1)) enddo ; enddo call pass_vector(fluxes%frac_shelf_u, fluxes%frac_shelf_v, G%domain, TO_ALL, CGRID_NE) + else + ! This is needed because rigidity is potentially modified in the coupler. Reset + ! in the ice shelf cavity: MJH + do j=isd,jed ; do i=isd,ied-1 ! changed stride + fluxes%rigidity_ice_u(I,j) = (CS%kv_ice / CS%density_ice) * & + min(CS%mass_shelf(i,j), CS%mass_shelf(i+1,j)) + enddo ; enddo + + do j=jsd,jed-1 ; do i=isd,ied ! changed stride + fluxes%rigidity_ice_v(i,J) = (CS%kv_ice / CS%density_ice) * & + max(CS%mass_shelf(i,j), CS%mass_shelf(i,j+1)) + enddo ; enddo endif if (CS%debug) then @@ -806,6 +838,15 @@ subroutine add_shelf_flux(G, CS, state, fluxes) call pass_vector(state%taux_shelf, state%tauy_shelf, G%domain, TO_ALL, CGRID_NE) endif + if (associated(fluxes%sw_vis_dir)) fluxes%sw_vis_dir = 0.0 + if (associated(fluxes%sw_vis_dif)) fluxes%sw_vis_dif = 0.0 + if (associated(fluxes%sw_nir_dir)) fluxes%sw_nir_dir = 0.0 + if (associated(fluxes%sw_nir_dif)) fluxes%sw_nir_dif = 0.0 + + if (.NOT.ASSOCIATED(state%frazil)) then + call MOM_error (FATAL, "FRAZIL NEEDS TO BE TURNED ON FOR THE ICE SHELF MODEL. ") + endif + do j=G%jsc,G%jec ; do i=G%isc,G%iec frac_area = fluxes%frac_shelf_h(i,j) if (frac_area > 0.0) then @@ -828,10 +869,6 @@ subroutine add_shelf_flux(G, CS, state, fluxes) fluxes%latent(i,j) = 0.0 fluxes%evap(i,j) = 0.0 - if (associated(fluxes%sw_vis_dir)) fluxes%sw_vis_dir(i,j) = 0.0 - if (associated(fluxes%sw_vis_dif)) fluxes%sw_vis_dif(i,j) = 0.0 - if (associated(fluxes%sw_nir_dir)) fluxes%sw_nir_dir(i,j) = 0.0 - if (associated(fluxes%sw_nir_dif)) fluxes%sw_nir_dif(i,j) = 0.0 if (CS%lprec(i,j) > 0.0 ) then fluxes%lprec(i,j) = frac_area*CS%lprec(i,j)*CS%flux_factor @@ -839,6 +876,17 @@ subroutine add_shelf_flux(G, CS, state, fluxes) fluxes%evap(i,j) = frac_area*CS%lprec(i,j)*CS%flux_factor endif + ! Add frazil formation diagnosed by the ocean model (J m-2) in the + ! form of surface layer evaporation (kg m-2 s-1). Update lprec in the + ! control structure for diagnostic purposes. + + fraz= state%frazil(i,j) / CS%time_step / CS%Lat_fusion + fluxes%evap(i,j) = fluxes%evap(i,j) - fraz + CS%lprec(i,j)=CS%lprec(i,j) - fraz + + + state%frazil(i,j) = 0.0 + fluxes%sens(i,j) = -frac_area*CS%t_flux(i,j)*CS%flux_factor fluxes%salt_flux(i,j) = frac_area * CS%salt_flux(i,j)*CS%flux_factor @@ -862,12 +910,12 @@ subroutine add_shelf_flux(G, CS, state, fluxes) if (CS%shelf_mass_is_dynamic) then do j=G%jsc,G%jec ; do i=G%isc-1,G%iec fluxes%rigidity_ice_u(I,j) = (CS%kv_ice / CS%density_ice) * & - min(CS%mass_shelf(i,j), CS%mass_shelf(i+1,j)) + max(CS%mass_shelf(i,j), CS%mass_shelf(i+1,j)) enddo ; enddo do j=G%jsc-1,G%jec ; do i=G%isc,G%iec fluxes%rigidity_ice_v(i,J) = (CS%kv_ice / CS%density_ice) * & - min(CS%mass_shelf(i,j), CS%mass_shelf(i,j+1)) + max(CS%mass_shelf(i,j), CS%mass_shelf(i,j+1)) enddo ; enddo endif end subroutine add_shelf_flux @@ -1025,7 +1073,9 @@ subroutine initialize_ice_shelf(Time, CS, diag, fluxes, Time_in, solo_mode_in) character(len=2) :: procnum integer :: i, j, is, ie, js, je, isd, ied, jsd, jed, Isdq, Iedq, Jsdq, Jedq, iters integer :: wd_halos(2) - logical :: solo_mode + logical :: solo_mode, read_TideAmp + character(len=128) :: Tideamp_file + real :: utide if (associated(CS)) then call MOM_error(WARNING, "shelf_model_init called with an associated "// & @@ -1159,6 +1209,28 @@ subroutine initialize_ice_shelf(Time, CS, diag, fluxes, Time_in, solo_mode_in) "The minimum ML thickness where melting is allowed.", units="m", & default=0.0) + call get_param(param_file, mod, "READ_TIDEAMP", read_TIDEAMP, & + "If true, read a file (given by TIDEAMP_FILE) containing \n"//& + "the tidal amplitude with INT_TIDE_DISSIPATION.", default=.false.) + + call safe_alloc_ptr(CS%utide,isd,ied,jsd,jed) ; CS%utide(:,:) = 0.0 + + if (read_TIDEAMP) then + call get_param(param_file, mod, "TIDEAMP_FILE", TideAmp_file, & + "The path to the file containing the spatially varying \n"//& + "tidal amplitudes.", & + default="tideamp.nc") + call get_param(param_file, mod, "INPUTDIR", inputdir, default=".") + inputdir = slasher(inputdir) + TideAmp_file = trim(inputdir) // trim(TideAmp_file) + call read_data(TideAmp_file,'tideamp',CS%utide,domain=G%domain%mpp_domain,timelevel=1) + else + call get_param(param_file, mod, "UTIDE", utide, & + "The constant tidal amplitude used with INT_TIDE_DISSIPATION.", & + units="m s-1", default=0.0) + CS%utide = utide + endif + call select_eqn_of_state(param_file, CS%eqn_of_state) !! new parameters that need to be in MOM_input @@ -1241,17 +1313,19 @@ subroutine initialize_ice_shelf(Time, CS, diag, fluxes, Time_in, solo_mode_in) call get_param(param_file, mod, "USTAR_SHELF_BG", CS%ustar_bg, & "The minimum value of ustar under ice sheves.", units="m s-1", & default=0.0) + call get_param(param_file, mod, "CDRAG_SHELF", cdrag, & + "CDRAG is the drag coefficient relating the magnitude of \n"//& + "the velocity field to the surface stress.", units="nondim", & + default=0.003) + CS%cdrag = cdrag if (CS%ustar_bg <= 0.0) then - call get_param(param_file, mod, "CDRAG", cdrag, & - "CDRAG is the drag coefficient relating the magnitude of \n"//& - "the velocity field to the surface stress.", units="nondim", & - default=0.003) - call get_param(param_file, mod, "DRAG_BG_VEL", drag_bg_vel, & + call get_param(param_file, mod, "DRAG_BG_VEL_SHELF", drag_bg_vel, & "DRAG_BG_VEL is either the assumed bottom velocity (with \n"//& "LINEAR_DRAG) or an unresolved velocity that is \n"//& "combined with the resolved velocity to estimate the \n"//& "velocity magnitude.", units="m s-1", default=0.0) - if (cdrag*drag_bg_vel > 0.0) CS%ustar_bg = sqrt(cdrag*drag_bg_vel) + if (CS%cdrag*drag_bg_vel > 0.0) CS%ustar_bg = sqrt(CS%cdrag)*drag_bg_vel + endif ! Allocate and initialize variables diff --git a/src/parameterizations/vertical/MOM_bulk_mixed_layer.F90 b/src/parameterizations/vertical/MOM_bulk_mixed_layer.F90 index dc0d630b1b..b36826954f 100644 --- a/src/parameterizations/vertical/MOM_bulk_mixed_layer.F90 +++ b/src/parameterizations/vertical/MOM_bulk_mixed_layer.F90 @@ -146,6 +146,8 @@ module MOM_bulk_mixed_layer ! to set the heat carried by runoff, instead of ! using SST for temperature of liq_runoff logical :: use_calving_heat_content ! Use SST for temperature of froz_runoff + logical :: salt_reject_below_ML ! It true, add salt below mixed layer (layer mode only) + type(diag_ctrl), pointer :: diag ! A structure that is used to regulate the ! timing of diagnostic output. real :: Allowed_T_chg ! The amount by which temperature is allowed @@ -1611,7 +1613,7 @@ subroutine mechanical_entrainment(h, d_eb, htot, Ttot, Stot, uhtot, vhtot, & EF4_val = EF4(htot(i)+h_neglect,h_avail,Idecay_len_TKE(i)) TKE_full_ent = (exp_kh*TKE(i) - (h_avail*G%H_to_m)*(dRL*f1_kh + Pen_En_Contrib)) + & MKE_rate*dMKE*EF4_val - if ((TKE_full_ent > 0.0) .or. (h_avail+htot(i) <= Hmix_min)) then + if ((TKE_full_ent >= 0.0) .or. (h_avail+htot(i) <= Hmix_min)) then ! The layer will be fully entrained. h_ent = h_avail @@ -1636,88 +1638,92 @@ subroutine mechanical_entrainment(h, d_eb, htot, Ttot, Stot, uhtot, vhtot, & ! entrained is determined iteratively. No further layers will be ! entrained. h_min = 0.0 ; h_max = h_avail - h_ent = h_avail * TKE(i) / (TKE(i) - TKE_full_ent) + if (TKE(i) <= 0.0) then + h_ent = 0.0 + else + h_ent = h_avail * TKE(i) / (TKE(i) - TKE_full_ent) - do itt=1,15 -! Evaluate the TKE that would remain if h_ent were entrained. + do itt=1,15 + ! Evaluate the TKE that would remain if h_ent were entrained. - kh = Idecay_len_TKE(i)*h_ent ; exp_kh = exp(-kh) - if (kh >= 2.0e-5) then - f1_kh = (1.0-exp_kh) / kh - else - f1_kh = (1.0 - kh*(0.5 - C1_6*kh)) - endif + kh = Idecay_len_TKE(i)*h_ent ; exp_kh = exp(-kh) + if (kh >= 2.0e-5) then + f1_kh = (1.0-exp_kh) / kh + else + f1_kh = (1.0 - kh*(0.5 - C1_6*kh)) + endif - Pen_En_Contrib = 0.0 ; Pen_dTKE_dh_Contrib = 0.0 - do n=1,nsw ; if (Pen_SW_bnd(n,i) > 0.0) then -! Two different forms are used here to make sure that only negative -! values are taken into exponentials to avoid excessively large -! numbers. They are, of course, mathematically identical. - opacity = opacity_band(n,i,k) - SW_trans = exp(-h_ent*opacity) - if (Idecay_len_TKE(i) > opacity) then - x1 = (Idecay_len_TKE(i) - opacity) * h_ent - if (x1 >= 2.0e-5) then - e_x1 = exp(-x1) ; f1_x1 = ((1.0-e_x1)/(x1)) - f3_x1 = ((e_x1-(1.0-x1))/(x1*x1)) - else - f1_x1 = (1.0 - x1*(0.5 - C1_6*x1)) - f3_x1 = (0.5 - x1*(C1_6 - C1_24*x1)) - endif - Pen_En1 = SW_trans * ((1.0+opacity*htot(i))*f1_x1 + & + Pen_En_Contrib = 0.0 ; Pen_dTKE_dh_Contrib = 0.0 + do n=1,nsw ; if (Pen_SW_bnd(n,i) > 0.0) then + ! Two different forms are used here to make sure that only negative + ! values are taken into exponentials to avoid excessively large + ! numbers. They are, of course, mathematically identical. + opacity = opacity_band(n,i,k) + SW_trans = exp(-h_ent*opacity) + if (Idecay_len_TKE(i) > opacity) then + x1 = (Idecay_len_TKE(i) - opacity) * h_ent + if (x1 >= 2.0e-5) then + e_x1 = exp(-x1) ; f1_x1 = ((1.0-e_x1)/(x1)) + f3_x1 = ((e_x1-(1.0-x1))/(x1*x1)) + else + f1_x1 = (1.0 - x1*(0.5 - C1_6*x1)) + f3_x1 = (0.5 - x1*(C1_6 - C1_24*x1)) + endif + Pen_En1 = SW_trans * ((1.0+opacity*htot(i))*f1_x1 + & opacity*h_ent*f3_x1) - else - x1 = (opacity - Idecay_len_TKE(i)) * h_ent - if (x1 >= 2.0e-5) then - e_x1 = exp(-x1) ; f1_x1 = ((1.0-e_x1)/(x1)) - f2_x1 = ((1.0-(1.0+x1)*e_x1)/(x1*x1)) - else - f1_x1 = (1.0 - x1*(0.5 - C1_6*x1)) - f2_x1 = (0.5 - x1*(C1_3 - 0.125*x1)) - endif - - Pen_En1 = exp_kh * ((1.0+opacity*htot(i))*f1_x1 + & + else + x1 = (opacity - Idecay_len_TKE(i)) * h_ent + if (x1 >= 2.0e-5) then + e_x1 = exp(-x1) ; f1_x1 = ((1.0-e_x1)/(x1)) + f2_x1 = ((1.0-(1.0+x1)*e_x1)/(x1*x1)) + else + f1_x1 = (1.0 - x1*(0.5 - C1_6*x1)) + f2_x1 = (0.5 - x1*(C1_3 - 0.125*x1)) + endif + + Pen_En1 = exp_kh * ((1.0+opacity*htot(i))*f1_x1 + & opacity*h_ent*f2_x1) - endif - C1 = g_H_2Rho0*dR0_dT(i)*Pen_SW_bnd(n,i) - Pen_En_Contrib = Pen_En_Contrib + C1*(Pen_En1 - f1_kh) - Pen_dTKE_dh_Contrib = Pen_dTKE_dh_Contrib + & - C1*((1.0-SW_trans) - opacity*(htot(i) + h_ent)*SW_trans) - endif ; enddo ! (Pen_SW_bnd(n,i) > 0.0) - - TKE_ent1 = exp_kh*TKE(i) - (h_ent*G%H_to_m)*(dRL*f1_kh + Pen_En_Contrib) - EF4_val = EF4(htot(i)+h_neglect,h_ent,Idecay_len_TKE(i),dEF4_dh) - HpE = htot(i)+h_ent - MKE_rate = 1.0/(1.0 + (cMKE(1,i)*HpE + cMKE(2,i)*HpE**2)) - TKE_ent = TKE_ent1 + dMKE*EF4_val*MKE_rate -! TKE_ent is the TKE that would remain if h_ent were entrained. - - dTKE_dh = ((-Idecay_len_TKE(i)*TKE_ent1 - dRL*G%H_to_m) + & - Pen_dTKE_dh_Contrib*G%H_to_m) + dMKE * MKE_rate* & - (dEF4_dh - EF4_val*MKE_rate*(cMKE(1,i)+2.0*cMKE(2,i)*HpE)) -! dh_Newt = -TKE_ent / dTKE_dh + endif + C1 = g_H_2Rho0*dR0_dT(i)*Pen_SW_bnd(n,i) + Pen_En_Contrib = Pen_En_Contrib + C1*(Pen_En1 - f1_kh) + Pen_dTKE_dh_Contrib = Pen_dTKE_dh_Contrib + & + C1*((1.0-SW_trans) - opacity*(htot(i) + h_ent)*SW_trans) + endif ; enddo ! (Pen_SW_bnd(n,i) > 0.0) + + TKE_ent1 = exp_kh*TKE(i) - (h_ent*G%H_to_m)*(dRL*f1_kh + Pen_En_Contrib) + EF4_val = EF4(htot(i)+h_neglect,h_ent,Idecay_len_TKE(i),dEF4_dh) + HpE = htot(i)+h_ent + MKE_rate = 1.0/(1.0 + (cMKE(1,i)*HpE + cMKE(2,i)*HpE**2)) + TKE_ent = TKE_ent1 + dMKE*EF4_val*MKE_rate + ! TKE_ent is the TKE that would remain if h_ent were entrained. + + dTKE_dh = ((-Idecay_len_TKE(i)*TKE_ent1 - dRL*G%H_to_m) + & + Pen_dTKE_dh_Contrib*G%H_to_m) + dMKE * MKE_rate* & + (dEF4_dh - EF4_val*MKE_rate*(cMKE(1,i)+2.0*cMKE(2,i)*HpE)) +! dh_Newt = -TKE_ent / dTKE_dh ! Bisect if the Newton's method prediction is outside of the bounded range. - if (TKE_ent > 0.0) then - if ((h_max-h_ent)*(-dTKE_dh) > TKE_ent) then - dh_Newt = -TKE_ent / dTKE_dh - else - dh_Newt = 0.5*(h_max-h_ent) - endif - h_min = h_ent - else - if ((h_min-h_ent)*(-dTKE_dh) < TKE_ent) then - dh_Newt = -TKE_ent / dTKE_dh - else - dh_Newt = 0.5*(h_min-h_ent) - endif - h_max = h_ent - endif - h_ent = h_ent + dh_Newt + if (TKE_ent > 0.0) then + if ((h_max-h_ent)*(-dTKE_dh) > TKE_ent) then + dh_Newt = -TKE_ent / dTKE_dh + else + dh_Newt = 0.5*(h_max-h_ent) + endif + h_min = h_ent + else + if ((h_min-h_ent)*(-dTKE_dh) < TKE_ent) then + dh_Newt = -TKE_ent / dTKE_dh + else + dh_Newt = 0.5*(h_min-h_ent) + endif + h_max = h_ent + endif + h_ent = h_ent + dh_Newt - if (ABS(dh_Newt) < 0.2*G%Angstrom) exit - enddo + if (ABS(dh_Newt) < 0.2*G%Angstrom) exit + enddo + endif if (h_ent < Hmix_min-htot(i)) h_ent = Hmix_min - htot(i) diff --git a/src/parameterizations/vertical/MOM_diabatic_driver.F90 b/src/parameterizations/vertical/MOM_diabatic_driver.F90 index a786ac6bbd..fbdf159706 100644 --- a/src/parameterizations/vertical/MOM_diabatic_driver.F90 +++ b/src/parameterizations/vertical/MOM_diabatic_driver.F90 @@ -135,6 +135,7 @@ module MOM_diabatic_driver ! and 1 is a sensible value too. Note that if there ! are convective instabilities in the initial state, ! the first call may do much more than the second. + integer :: NKBL ! The number of buffer layers (if bulk_mixed_layer) logical :: massless_match_targets ! If true (the default), keep the T & S ! consistent with the target values. logical :: mix_boundary_tracers ! If true, mix the passive tracers in massless @@ -159,6 +160,7 @@ module MOM_diabatic_driver logical :: useKPP ! If true, use [CVmix] KPP diffusivities and non-local ! transport. + logical :: salt_reject_below_ML ! It true, add salt below mixed layer (layer mode only) logical :: KPPisPassive ! If true, KPP is in passive mode, not changing answers. logical :: useConvection ! If true, calculate large diffusivities when column ! is statically unstable. @@ -176,7 +178,7 @@ module MOM_diabatic_driver integer :: id_ea = -1, id_eb = -1, id_Kd_z = -1, id_Kd_interface = -1 integer :: id_Tdif_z = -1, id_Tadv_z = -1, id_Sdif_z = -1, id_Sadv_z = -1 integer :: id_Tdif = -1, id_Tadv = -1, id_Sdif = -1, id_Sadv = -1 - integer :: id_createdH = -1, id_subMLN2 = -1 + integer :: id_createdH = -1, id_subMLN2 = -1, id_brine_lay = -1 integer :: id_MLD_003 = -1, id_MLD_0125 = -1, id_MLD_user = -1 type(entrain_diffusive_CS), pointer :: entrain_diffusive_CSp => NULL() @@ -359,7 +361,11 @@ subroutine diabatic(u, v, h, tv, fluxes, visc, ADp, CDp, dt, G, CS) ! make_frazil is deliberately called at both the beginning and at ! the end of the diabatic processes. if (ASSOCIATED(tv%T) .AND. ASSOCIATED(tv%frazil)) then - call make_frazil(h,tv,G,CS) + if (ASSOCIATED(fluxes%p_surf_full)) then + call make_frazil(h,tv,G,CS,fluxes%p_surf_full) + else + call make_frazil(h,tv,G,CS) + endif if (showCallTree) call callTree_waypoint("done with 1st make_frazil (diabatic)") endif if (CS%debugConservation) call MOM_state_stats('1st make_frazil', u, v, h, tv%T, tv%S, G) @@ -400,6 +406,8 @@ subroutine diabatic(u, v, h, tv, fluxes, visc, ADp, CDp, dt, G, CS) call bulkmixedlayer(h, u_h, v_h, tv, fluxes, dt*CS%ML_mix_first, & eaml,ebml, G, CS%bulkmixedlayer_CSp, CS%optics, dt, & last_call=.false.) + if (CS%salt_reject_below_ML) & + call insert_brine(h,tv,G,fluxes,CS,dt*CS%ML_mix_first) else ! Changes: h, tv%T, tv%S, eaml and ebml (G is also inout???) call bulkmixedlayer(h, u_h, v_h, tv, fluxes, dt, eaml, ebml, & @@ -805,6 +813,8 @@ subroutine diabatic(u, v, h, tv, fluxes, visc, ADp, CDp, dt, G, CS) call bulkmixedlayer(h, u_h, v_h, tv, fluxes, dt_mix, ea, eb, & G, CS%bulkmixedlayer_CSp, CS%optics, dt, last_call=.true.) + if (CS%salt_reject_below_ML) & + call insert_brine(h,tv,G,fluxes,CS,dt_mix) ! Keep salinity from falling below a small but positive threshold. ! This occurs when the ice model attempts to extract more salt than ! is actually present in the ocean. @@ -1111,7 +1121,12 @@ subroutine diabatic(u, v, h, tv, fluxes, visc, ADp, CDp, dt, G, CS) ! make_frazil is deliberately called at both the beginning and at ! the end of the diabatic processes. if (ASSOCIATED(tv%T) .AND. ASSOCIATED(tv%frazil)) then - call make_frazil(h,tv,G,CS) + if (ASSOCIATED(fluxes%p_surf_full)) then + call make_frazil(h,tv,G,CS,fluxes%p_surf_full) + else + call make_frazil(h,tv,G,CS) + endif + if (showCallTree) call callTree_waypoint("done with 2nd make_frazil (diabatic)") if (CS%debugConservation) call MOM_state_stats('2nd make_frazil', u, v, h, tv%T, tv%S, G) endif @@ -1183,11 +1198,12 @@ subroutine adiabatic(h, tv, fluxes, dt, G, CS) end subroutine adiabatic -subroutine make_frazil(h, tv, G, CS) +subroutine make_frazil(h, tv, G, CS, p_surf) real, dimension(NIMEM_,NJMEM_,NKMEM_), intent(in) :: h type(thermo_var_ptrs), intent(inout) :: tv type(ocean_grid_type), intent(in) :: G type(diabatic_CS), intent(in) :: CS + real, dimension(NIMEM_,NJMEM_), intent(in), optional :: p_surf ! Frazil formation keeps the temperature above the freezing point. ! This subroutine warms any water that is colder than the (currently @@ -1204,7 +1220,8 @@ subroutine make_frazil(h, tv, G, CS) ! diabatic_driver_init. real, dimension(SZI_(G)) :: & fraz_col, & ! The accumulated heat requirement due to frazil, in J. - T_freeze ! The freezing potential temperature at the current salinity, C. + T_freeze, & ! The freezing potential temperature at the current salinity, C. + ps ! pressure real, dimension(SZI_(G),SZK_(G)) :: & pressure ! The pressure at the middle of each layer in Pa. real :: hc ! A layer's heat capacity in J m-2 K-1. @@ -1222,11 +1239,16 @@ subroutine make_frazil(h, tv, G, CS) !$OMP private(fraz_col,T_fr_set,T_freeze,hc) & !$OMP firstprivate(pressure) do j=js,je + ps(:) = 0.0 + if (PRESENT(p_surf)) then + ps(:) = p_surf(:,j) + endif + do i=is,ie ; fraz_col(:) = 0.0 ; enddo if (CS%pressure_dependent_frazil) then do i=is,ie - pressure(i,1) = (0.5*G%H_to_Pa)*h(i,j,1) + pressure(i,1) = ps(i)+(0.5*G%H_to_Pa)*h(i,j,1) enddo do k=2,nz ; do i=is,ie pressure(i,k) = pressure(i,k-1) + & @@ -1463,6 +1485,140 @@ subroutine adjust_salt(h, tv, G, CS) end subroutine adjust_salt +subroutine insert_brine(h, tv, G, fluxes, CS, dt) + real, dimension(NIMEM_,NJMEM_,NKMEM_), intent(in) :: h + type(thermo_var_ptrs), intent(inout) :: tv + type(ocean_grid_type), intent(in) :: G + type(forcing), intent(in) :: fluxes + type(diabatic_CS), intent(in) :: CS + real, intent(in) :: dt + +! Insert salt from brine rejection into the first layer below +! the mixed layer which both contains mass and in which the +! change in layer density remains stable after the addition +! of salt via brine rejection. + +! Arguments: h - Layer thickness, in m. +! (in/out) tv - A structure containing pointers to any available +! thermodynamic fields. Absent fields have NULL ptrs. +! (in) G - The ocean's grid structure. +! (in) CS - The control structure returned by a previous call to +! diabatic_driver_init. + + real :: salt(SZI_(G)) ! The amount of salt rejected from + ! sea ice. [grams] + real :: dzbr(SZI_(G)) ! cumulative depth over which brine is distributed + real :: inject_layer(SZI_(G),SZJ_(G)) ! diagnostic + + + real :: p_ref_cv(SZI_(G)) + real :: T(SZI_(G),SZK_(G)) + real :: S(SZI_(G),SZK_(G)) + real :: h_2d(SZI_(G),SZK_(G)) + real :: Rcv(SZI_(G),SZK_(G)) + real :: mc ! A layer's mass kg m-2 . + real :: s_new,R_new,t0,scale, cdz + integer :: i, j, k, is, ie, js, je, nz, nkmb, ks + + real, parameter :: brine_dz = 1.0 ! minumum thickness over which to distribute brine + real, parameter :: s_max = 45.0 ! salinity bound + + is = G%isc ; ie = G%iec ; js = G%jsc ; je = G%jec ; nz = G%ke + + if (.not.ASSOCIATED(fluxes%salt_flux)) return + + nkmb = G%nkml + CS%nkbl + + p_ref_cv(:) = tv%P_ref + + inject_layer = nz + + do j=js,je + + salt(:)=0.0;dzbr(:)=0.0 + + do i=is,ie + if (G%mask2dT(i,j) > 0.) then + salt(i) = dt * (1000. * fluxes%salt_flux(i,j)) + endif + enddo + + do k=1,nz + do i=is,ie + T(i,k)=tv%T(i,j,k); S(i,k)=tv%S(i,j,k); h_2d(i,k)=h(i,j,k) + enddo + + call calculate_density(T(:,k), S(:,k), p_ref_cv, Rcv(:,k), is, & + ie-is+1, tv%eqn_of_state) + enddo + +! First, try to find an interior layer where inserting all the salt +! will not cause the layer to become statically unstable. +! Bias towards deeper layers. + + do k=nkmb+1,nz-1 + do i=is,ie + if ((G%mask2dT(i,j) > 0.0) .and. dzbr(i) < brine_dz .and. salt(i) > 0.) then + mc = G%H_to_kg_m2 * h_2d(i,k) + s_new = S(i,k) + salt(i)/mc + t0 = T(i,k) + call calculate_density(t0,s_new,tv%P_Ref,R_new,tv%eqn_of_state) + if (R_new < 0.5*(Rcv(i,k)+Rcv(i,k+1)) .and. s_new 0.0) .and. dzbr(i) < brine_dz .and. salt(i) > 0.) then + mc = G%H_to_kg_m2 * h_2d(i,k) + dzbr(i)=dzbr(i)+h_2d(i,k) + inject_layer(i,j) = min(inject_layer(i,j),float(k)) + endif + enddo + enddo + +! finally if unable to find a layer to insert, then place in mixed layer + + do k=1,G%nkml + do i=is,ie + if ((G%mask2dT(i,j) > 0.0) .and. dzbr(i) < brine_dz .and. salt(i) > 0.) then + mc = G%H_to_kg_m2 * h_2d(i,k) + dzbr(i)=dzbr(i)+h_2d(i,k) + inject_layer(i,j) = min(inject_layer(i,j),float(k)) + endif + enddo + enddo + + + do i=is,ie + if ((G%mask2dT(i,j) > 0.0) .and. salt(i) > 0.) then +! if (dzbr(i)< brine_dz) call MOM_error(FATAL,"insert_brine: failed") + ks=inject_layer(i,j) + cdz=0.0 + do k=ks,nz + mc = G%H_to_kg_m2 * h_2d(i,k) + scale = h_2d(i,k)/dzbr(i) + cdz=cdz+h_2d(i,k) + if (cdz > 1.0) exit + tv%S(i,j,k) = tv%S(i,j,k) + scale*salt(i)/mc + enddo + endif + enddo + + + enddo + + + if (CS%id_brine_lay > 0) call post_data(CS%id_brine_lay,inject_layer,CS%diag) + return + +end subroutine insert_brine + subroutine triDiagTS(G, is, ie, js, je, hold, ea, eb, T, S) ! Simple tri-diagnonal solver for T and S ! "Simple" means it only uses arrays hold, ea and eb @@ -1625,6 +1781,11 @@ subroutine diabatic_driver_init(Time, G, param_file, useALEalgorithm, diag, & "The fraction of the mixed layer mixing that is applied \n"//& "before interior diapycnal mixing. 0 by default.", & units="nondim", default=0.0) + + call get_param(param_file, mod, "NKBL", CS%nkbl, & + "The number of variable density buffer layers if \n"//& + "BULKMIXEDLAYER is true.", default=2) + else CS%ML_mix_first = 0.0 endif @@ -1762,6 +1923,20 @@ subroutine diabatic_driver_init(Time, G, param_file, useALEalgorithm, diag, & "diffusivity from kappa-shear.", default=.true.) endif + CS%salt_reject_below_ML = .false. + call get_param(param_file, mod, "SALT_REJECT_BELOW_ML", CS%salt_reject_below_ML, & + "If true, place salt from brine rejection below the mixed layer,\n"// & + "into the first non-vanished layer for which the column remains stable", & + default=.false.) + + + + if (CS%salt_reject_below_ML) then + + CS%id_brine_lay = register_diag_field('ocean_model','brine_layer',diag%axesT1,Time, & + 'Brine insertion layer','none') + endif + ! CS%useConvection is set to True IF convection will be used, otherwise False. ! CS%Conv_CSp is allocated by diffConvection_init() CS%useConvection = diffConvection_init(param_file, G, diag, Time, CS%Conv_CSp) From 1aa03f48159a227636957b29a4ff1aca49e8a7d4 Mon Sep 17 00:00:00 2001 From: Matthew Harrison Date: Thu, 25 Sep 2014 14:08:18 -0400 Subject: [PATCH 2/3] Reverted MOM_barotropic.F90 merge with z1l branch. This update give reproducing results for the following examples: SOLO TEST CASES =============== double_gyre DOME adjustment2d/layer adjustment2d/rho adjustment2d/z benchmark lock_exchange global global_ALE/layer OCEAN-SIS TEST CASES =============== GOLD_SIS --- src/core/MOM_barotropic.F90 | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/core/MOM_barotropic.F90 b/src/core/MOM_barotropic.F90 index c7d082d577..e4611c2b25 100644 --- a/src/core/MOM_barotropic.F90 +++ b/src/core/MOM_barotropic.F90 @@ -707,7 +707,7 @@ subroutine btstep(U_in, V_in, eta_in, dt, bc_accel_u, bc_accel_v, & "implemented for a non-Boussinesq model.") endif ; endif - nstep = max(CEILING(dt/CS%dtbt - 0.0001),4) + nstep = CEILING(dt/CS%dtbt - 0.0001) if (is_root_PE() .and. (nstep /= CS%nstep_last)) then write(mesg,'("btstep is using a dynamic barotropic timestep of ", ES12.6, & & " seconds, max ", ES12.6, ".")') (dt/nstep), CS%dtbt_max @@ -776,6 +776,8 @@ subroutine btstep(U_in, V_in, eta_in, dt, bc_accel_u, bc_accel_v, & if (.not. use_BT_cont) then call create_group_pass(pass_Dat_uv, Datu, Datv, CS%BT_Domain, To_All+Scalar_Pair) endif + call create_group_pass(pass_eta_ubt, eta, CS%BT_Domain) + call create_group_pass(pass_eta_ubt, ubt, vbt, CS%BT_Domain) if (find_etaav) then call create_group_pass(pass_etaav, etaav, G%Domain) endif @@ -1440,10 +1442,6 @@ subroutine btstep(U_in, V_in, eta_in, dt, bc_accel_u, bc_accel_v, & endif nfilter = ceiling(dt_filt / dtbt) - call create_group_pass(pass_eta_ubt, eta, CS%BT_Domain) - call create_group_pass(pass_eta_ubt, ubt, vbt, CS%BT_Domain) - - ! Set up the normalized weights for the filtered velocity. sum_wt_vel = 0.0 ; sum_wt_eta = 0.0 ; sum_wt_accel = 0.0 ; sum_wt_trans = 0.0 allocate(wt_vel(nstep+nfilter)) ; allocate(wt_eta(nstep+nfilter)) @@ -2206,8 +2204,6 @@ subroutine set_dtbt(G, CS, eta, pbce, BT_cont, gtot_est, SSH_add) CS%dtbt = CS%dtbt_fraction * dtbt_max CS%dtbt_max = dtbt_max - - end subroutine set_dtbt ! The following 4 subroutines apply the open boundary conditions. From d1d22afee6d9529afeb4b1828b12cfc5a5472288 Mon Sep 17 00:00:00 2001 From: Matthew Harrison Date: Thu, 25 Sep 2014 14:24:49 -0400 Subject: [PATCH 3/3] Added Amery ice shelf example. The datasets are not yet in place so this example can not be run yet. --- examples/ocean_SIS/Amery/INPUT/.datasets | 1 + examples/ocean_SIS/Amery/MOM_input | 895 +++++++++++++++++++++++ examples/ocean_SIS/Amery/MOM_override | 0 examples/ocean_SIS/Amery/data_table | 60 ++ examples/ocean_SIS/Amery/diag_table | 78 ++ examples/ocean_SIS/Amery/field_table | 19 + examples/ocean_SIS/Amery/input.nml | 121 +++ 7 files changed, 1174 insertions(+) create mode 120000 examples/ocean_SIS/Amery/INPUT/.datasets create mode 100644 examples/ocean_SIS/Amery/MOM_input create mode 100644 examples/ocean_SIS/Amery/MOM_override create mode 100644 examples/ocean_SIS/Amery/data_table create mode 100644 examples/ocean_SIS/Amery/diag_table create mode 100644 examples/ocean_SIS/Amery/field_table create mode 100644 examples/ocean_SIS/Amery/input.nml diff --git a/examples/ocean_SIS/Amery/INPUT/.datasets b/examples/ocean_SIS/Amery/INPUT/.datasets new file mode 120000 index 0000000000..086a13aa04 --- /dev/null +++ b/examples/ocean_SIS/Amery/INPUT/.datasets @@ -0,0 +1 @@ +../../../.datasets \ No newline at end of file diff --git a/examples/ocean_SIS/Amery/MOM_input b/examples/ocean_SIS/Amery/MOM_input new file mode 100644 index 0000000000..20fb8e151a --- /dev/null +++ b/examples/ocean_SIS/Amery/MOM_input @@ -0,0 +1,895 @@ +!********+*********+*********+*********+*********+*********+*********+* +!* This file determines the adjustable run-time parameters for the * +!* Modular Ocean Model (MOM), versions 6 and later. Where * +!* appropriate, MKS units are used. * +!********+*********+*********+*********+*********+*********+*********+* + +!SYMMETRIC_MEMORY_ = True + +DAYMAX = 36500.0 + + +! Specify properties of the physical domain. + + +OMEGA = 7.2921e-5 ! The rotation rate of the earth in s-1. +ROTATION = "2omegasinlat" ! Rotation approximation (2omegasinlat, + ! betaplane or USER). +RAD_EARTH = 6.378e6 ! The radius of the earth in m. +G_EARTH = 9.80 ! G_EARTH is the Earth's gravitational + ! acceleration, in m s-2. +GRID_CONFIG = "mosaic" ! Method for defining horizontal grid + ! = file|cartesian|spherical|mercator + ! file - read grid from file "GRID_FILE" + ! cartesian - a Cartesian grid + ! spherical - a spherical grid + ! mercator - a Mercator grid +GRID_FILE = "supergrid.nc" + ! Name of file to read horizontal grid data +TOPO_CONFIG = "file" ! Method for defining topography + ! file - read topographic information from file + ! (TOPO_FILE). + ! flat - flat bottom set to MAXIMUM_DEPTH. + ! bowl - bowl like basin using MAXIMUM_DEPTH and + ! MINIMUM_DEPTH. + ! spoon - similar to bowl except that southern + ! face of the "bowl" is open. + ! DOME - sill-overflow test case basin. + ! USER - user defined +TOPO_FILE = "topog_ocean.nc" ! If topography is to be set externally, +TOPO_VARNAME = "depth" + ! then this is the file to use. +MAXIMUM_DEPTH = 6500.0 ! The maximum depth of the ocean in m. +MINIMUM_DEPTH = 9.9 ! The minimum ocean depth, in m. Anything + ! shallower than this depth is assumed to be on + ! land, and all fluxes are masked out. +CHANNEL_CONFIG = "list" ! A string which determines which + ! set of channels are restricted to specific + ! widths. The default, "none", has no + ! partially restricted channels. + +COORD_CONFIG = "file" ! How layers are to be defined: + ! file - read coordinate information from file + ! (COORD_FILE). + ! ts_ref - use reference temperature + ! and salinity (T_REF and S_REF) to determine + ! surface density and GINT calculate internal + ! densities. + ! gprime - use reference density (RHO_0) for + ! surface density and GINT calculate internal + ! densities. + ! ts_profile - use profiles of temperature + ! and salinity (read from COORD_FILE) to determine + ! surface density and internal densities. + ! USER - user defined routine +COORD_FILE = "Vertical_coordinate.nc" + ! If the vertical coordinate is defined by a + ! file, use this file. +GFS = 9.80 ! The reduced gravity at the free + ! surface, in m s-2. +GINT = 1.2e-3 ! The nominal reduced gravity of the internal + ! interfaces for idealized models, in m s-2. + +INIT_LAYERS_FROM_Z_FILE = True ! interpolate online from z-space potential temperature + ! /salinity file. + +TEMP_SALT_Z_INIT_FILE = "WOA05_pottemp_salt.nc" +Z_INIT_FILE_PTEMP_VAR = "PTEMP" +Z_INIT_FILE_SALT_VAR = "SALT" +FIT_TO_TARGET_DENSITY_IC = False +Z_INIT_HOMOGENIZE = True +USE_OLD_HINTERP = False + +ADJUST_THICKNESS = True + +VELOCITY_CONFIG = "zero" ! Method for defining initial layer velocities + ! file - read velocity information from file. + ! zero - zero velocities everywhere. + ! USER - user defined. + +! Specify the numerical domain. +NIGLOBAL = 172 ! NIGLOBAL and NJGLOBAL are the number of thickness +NJGLOBAL = 219 ! grid points in the zonal and meridional + ! directions of the physical domain. +NK = 63 ! The number of layers. +NIHALO = 4 ! NIHALO and NJHALO are the number of halo +NJHALO = 4 ! points on each side in the x- and y-directions. + ! If static memory allocation is used, these + ! must match the values of NIHALO_ and NJHALO_ + ! in MOM_memory.h. +NIPROC_IO = 13 ! The number of processors used for I/O in the + ! x-direction, or 0 to equal NIPROC. NIPROC_IO + ! must be a factor of NIPROC. +NJPROC_IO = 2 ! The number of processors used for I/O in the + ! y-direction, or 0 to equal NJPROC. NJPROC_IO + ! must be a factor of NJPROC. + +NIPROC = 12 ! The number of processors used in the x and y directions + ! respectively. +NJPROC = 20 + +REENTRANT_X = False ! If defined, the domain is zonally reentrant. +REENTRANT_Y = False ! If defined, the domain is meridionally + ! reentrant. +TRIPOLAR_N = True ! Use tripolar connectivity at the northern + ! edge of the domain. With TRIPOLAR_N, NIGLOBAL + ! must be even. +DEBUG = False ! If true, write out verbose debugging data. +DEBUG_TRUNCATIONS = False ! If true, calculate all diagnostics that are + ! useful for debugging truncations. +SEND_LOG_TO_STDOUT = False ! If true write out log information to stdout. + +! Specify the time integration scheme. +SPLIT = True ! Use the split time stepping if defined. +DT_FORCING = 3600.0 ! The time step for changing forcing or + ! writing certain diagnostics, in s. +DT_THERM = 1200.0 ! The thermodynamic time step, in s. DT_THERM + ! should be an integer multiple of DT and less + ! than or equal to DT_FORCING. +DT = 300.0 ! The (baroclinic) dynamics time step, in s. + ! DT should be an integer fraction of DT_FORCING. +DT_BT_FILTER = 300. ! Time-scale for filtering BT variables, in s. +DTBT = -0.9 ! The barotropic time step, in s. DTBT is only + ! used with the split explicit time stepping. + ! To set the time step automatically based + ! the maximum stable value use 0, or a negative + ! value gives the fraction of the stable value. + ! The value of DTBT that will actually be used + ! is an integer fraction of DT, rounding down. +DTBT_RESET_PERIOD = 0.0 ! The period between recalculations of DTBT + ! of DTBT (if DTBT <= 0), in seconds. If + ! DTBT_RESET_PERIOD is negative, DTBT is set + ! based only on information available at + ! initialization. If dynamic, DTBT will be set + ! at least every forcing time step, and if 0, + ! every dynamics time step. +BE = 0.6 ! BE determines whether the neutral baroclinic + ! time stepping scheme (0.5) or a backward Euler + ! scheme (1) is used. BE may be from 0.5 to 1, + ! but instability may occur near 0.5. +BEBT = 0.2 ! BEBT determines whether the barotropic time + ! stepping uses the forward-backward time- + ! stepping scheme or a backward Euler scheme. + ! BEBT is valid in the range from 0 (for a + ! forward-backward treatment of nonrotating + ! gravity waves) to 1 (for a backward Euler + ! treatment). In practice, BEBT must be greater + ! than about 0.05. +ETA_TOLERANCE = 1e-6 ! The tolerance, in m, for the differences + ! between the barotropic and baroclinic + ! estimates of the sea surface height due to + ! the fluxes through each face. The total + ! tolerance for SSH is 4 times this value. The + ! default is 0.5*NK*EPSILON, and this should not + ! be set less than about 10^-15*MAXIMUM_DEPTH. +ETA_TOLERANCE_AUX = 1e-3 ! The equivalent to ETA_TOLERANCE for the + ! calculation of auxiliary velocities, in m. + + +! Specify properties of the I/O and length of the integration. +TIMEUNIT = 86400.0 ! The time unit in seconds for the following + ! fields. +ENERGYSAVEDAYS = 10.0 ! The number of days between saves of the + ! energies of the run. +ENERGYFILE = "timestats" ! The file to use to save the energies. +RESTARTFILE = "MOM.res" ! The name of the restart file. +RESTINT = 365.0 ! The number of days between saves of the + ! restart file. Use a value that is larger than + ! DAYMAX not to save incremental restart files + ! within a run. Use 0 not to save restart files + ! at all. +PARALLEL_RESTARTFILES = True ! If defined, each processor writes its own + ! restart file, otherwise a single restart file + ! is generated. +LARGE_FILE_SUPPORT = True ! If true, use the file-size limits with + ! NetCDF large file support (4Gb). +RESTART_CONTROL = 1 ! RESTART_CONTROL determines which restart + ! files are written - Add 2 (bit 1) for a time- + ! stamped restart file, and odd (bit 0) for a + ! non-time-stamped file. A restart will be + ! saved at the end of the run segment for any + ! non-negative value. +SAVE_INITIAL_CONDS = True ! If defined, the inital conditions are + ! written to IC_OUTPUT_FILE at the start of a + ! new run. +IC_OUTPUT_FILE = "MOM_IC" ! The name-root of a file into which the + ! initial conditions are written for a new run. + +Z_OUTPUT_GRID_FILE = "zgrid.nc" + ! The file that specifies the vertical grid + ! for depth-space diagnostics. +MIN_Z_DIAG_INTERVAL = 2.16e4 ! The minimum amount of time in seconds between + ! calculations of depth-space diagnostics. + ! Making this larger than DT_THERM reduces the + ! performance penalty of regridding to depth + ! online. + +MAXCPU = 86400.0 ! The maximum amount of cpu time per processor + ! for which MOM should run before saving a + ! restart file and quitting with a return value + ! that indicates that a further execution is + ! required to complete the simulation. If + ! automatic restarts are not desired, use a + ! negative value for MAXCPU. MAXCPU has units + ! of wall-clock seconds. (i.e. CPU time limit is + ! larger by a factor of the number of processors + ! used. +INPUTDIR = "INPUT" + ! INPUTDIR is a directory in which NetCDF + ! input files might be found. + +! Specify the horizontal (along-isopycnal) viscosity. +LAPLACIAN = True ! LAPLACIAN is defined to use a Laplacian + ! horizontal viscosity. +BIHARMONIC = True ! BIHARMONIC is defined to use a biharmonic + ! horizontal viscosity. BIHARMONIC may be used + ! with LAPLACIAN, and it is automatically + ! defined if LAPLACIAN is undefined. +BOUND_KH = True ! If BOUND_KH is defined, the Laplacian + ! coefficient is locally limited to guarantee + ! stability. +BOUND_AH = True ! If BOUND_AH is defined, the biharmonic + ! coefficient is locally limited to guarantee + ! stability. +BETTER_BOUND_KH = True ! If BETTER_BOUND_KH is defined, use more + ! careful bounds in limiting KH for stability. +BETTER_BOUND_AH = True ! If BETTER_BOUND_AH is defined, use more + ! careful bounds in limiting AH for stability. +KH = 0.0 ! The Laplacian horizontal viscosity, in + ! m2 s-1. KH is used if LAPLACIAN is defined. +AH = 0.0 ! The biharmonic horizontal viscosity, in + ! m4 s-1. AH is used if BIHARMONIC is defined. +KH_VEL_SCALE = 0.0 ! The velocity scale which is multiplied by + ! the grid spacing to calculate the Laplacian + ! viscosity ,if LAPLACIAN is defined, in m s-1. + ! The final viscosity is the largest of this + ! scaled viscosity, the Smagorinsky viscosity + ! and KH. +AH_VEL_SCALE = 0.025 ! The velocity scale which is multiplied by + ! the cube of the grid spacing to calculate the + ! biharmonic viscosity if BIHARMONIC is defined, + ! in units of m s-1. The final viscosity is + ! the largest of this scaled viscosity, the + ! Smagorinsky viscosity and AH. +RESOLN_SCALED_KH = True ! If true, the lateral viscosity is scaled + ! away when the first baroclinic deformation + ! radius is well resolved. +KH_RES_SCALE_COEF = 1.0 ! A coefficient that determines how Kh is + ! scaled away, as F = 1/(1 + coef*Rd2/dx2) +SMAGORINSKY_KH = True ! If defined, use Smagorinsky's nonlinear eddy + ! viscosity. KH is the background. +SMAG_LAP_CONST = 0.01 ! The nondimensional Laplacian Smagorinsky + ! constant. Often 0.15. +SMAGORINSKY_AH = True ! If defined, use a biharmonic form of + ! Smagorinsky's nonlinear eddy viscosity. +SMAG_BI_CONST = 0.06 ! The nondimensional biharmonic Smagorinsky + ! constant. Often 0.015. +NOSLIP = False ! This should True for no slip + ! boundary conditions False for free + ! slip boundary conditions (the default). The + ! implementation of the free slip boundary + ! conditions on a C-grid is much cleaner than + ! the no slip boundary conditions. The use of + ! free slip b.c.s is strongly encouraged. The + ! no slip b.c.s are not implemented with the + ! biharmonic viscosity. + +! Specify the horizontal interface depth (akin to Gent-McWilliams) diffusion. +THICKNESSDIFFUSE = True ! If THICKNESSDIFFUSE is defined, interfaces + ! are diffused with a coefficient of KHTH. +THICKNESSDIFFUSE_FIRST = True ! If THICKNESSDIFFUSE_FIRST is defined, do + ! thickness diffusion before dynamics. +RESOLN_SCALED_KHTH = True ! If defined, the interface depth diffusivity + ! is scaled away when the first baroclinic + ! deformation radius is well resolved. +KHTH_SLOPE_MAX = 1.0e-2 ! A slope beyond which the calculated isopycnal + ! slope is not reliable and is scaled away. +KHTH = 1.0 ! KHTH is the nominal interface depth diffusivity + ! in m2 s-1. +KHTH_MIN = 1.e1 ! Minimum thickness diffusivity in m2 s-1. +KHTH_MAX = 1000-.0 ! Maximum thickness diffusivity in m2 s-1. +KHTH_SLOPE_CFF = 0.0 ! Non-dimensional coefficient in Visbeck formula. +USE_VARIABLE_MIXING = True ! If defined, forces the variable mixing code to + ! be called. This allows diagnostics to be created + ! even if the scheme is not used. This flag is + ! unused if the coefficients are non-zero. + +DETANGLE_INTERFACES = True ! If true, scale up the interface height diffusivity + ! around layers with abrupt thickness changes. +REGULARIZE_SURFACE_LAYERS = True ! If true, reorganize top NKML+NKBL layers for + ! spatial smoothness. +REG_SFC_DEFICIT_TOLERANCE = 0.5 +MIXEDLAYER_RESTRAT = True ! If true, a density-gradient dependent + ! re-stratifying flow is imposed in the mixed + ! layer. +FOX_KEMPER_ML_RESTRAT_COEF = 5.0 + ! A nondimensional coefficient that is + ! proportional to the ratio of the deformation + ! radius to the dominant lengthscale of the + ! submesoscale mixed layer instabilities, times + ! the minimum of the ratio of mesoscale eddy + ! kinetic energy to the large-scale geostrophic + ! kinetic energy or 1 plus the square of the + ! grid spacing over the deformation radius, as + ! detailed in the work of Fox-Kemper et al. + +! Specify the scheme for the Coriolis and momentum advection terms. +CORIOLIS_SCHEME = "SADOURNY75_ENERGY" + ! Selects the discretization of Coriolis terms. + ! Possible values are: + ! SADOURNY75_ENERGY - Sadourny's energy + ! conserving scheme + ! ARAKAWA_HSU90 - Arakawa and Hsu's scheme + ! ROBUST_ENSTRO - A pseudo-enstrophy + ! conserving scheme, robust + ! to vanishing thickness +KE_SCHEME = "KE_ARAKAWA" ! Selects the discretization for the kinetic + ! energy in the Bernoulli function. Possible + ! values are KE_ARAKAWA, KE_SIMPLE_GUDONOV, + ! and KE_GUDONOV. KE_ARAKAWA is the default. +BOUND_CORIOLIS = True ! If BOUND_CORIOLIS is defined, the Coriolis + ! terms at u points are bounded by the four + ! estimates of (f+rv)v from the four neighboring + ! v points, and similarly at v points. This + ! option would have no effect on the SADOURNY + ! scheme if it were possible to use centered + ! difference thickness fluxes. In addition, if + ! SMAGORINSKY_AH is used, the biharmonic + ! viscosity is modified to include a term that + ! scales quadratically with the velocity + ! shears. +CORIOLIS_EN_DIS = True ! If CORIOLIS_EN_DIS is defined, two estimates + ! of the thickness fluxes are used to estimate + ! the Coriolis term, and the one that dissipates + ! energy relative to the other one is used. + +! Specify the scheme for the continuity solver. +CONTINUITY_SCHEME = "PPM" ! CONTINUTITY_SCHEME specifies the scheme used + ! for the continuity solver. PPM is currently + ! the only option, in which case a positive- + ! definite piecewise parabolic reconstruction + ! is used for the continuity solver. +CONTINUITY_CFL_LIMIT = 0.5 ! This is the CFL limit for corrections with + ! the PPM continuity scheme. +CONT_PPM_BETTER_ITER = True ! If true, use the velocity change tolerance + ! to determine when to keep iterating with the + ! PPM continuity scheme. +CONT_PPM_USE_VISC_REM_MAX = True ! If true, use more appropriate limiting + ! bounds for corrections in viscous columns. + +! Specify the scheme for the vertical viscosity. +HARMONIC_VISC = False ! If defined, use the harmonic mean thickness + ! for calculating the vertical viscosity. + +! Specify the scheme for the pressure gradient accelerations. +ANALYTIC_FV_PGF = True ! If defined the pressure gradient forces + ! are calculated with a finite volume form that + ! analytically integrates the equations of state + ! in pressure to avoid any possibility of + ! numerical thermobaric instability. + +! Specify the scheme for the barotropic solver. +BOUND_BT_CORRECTION = True ! If defined, the corrective pseudo mass- + ! fluxes into the barotropic solver are limited + ! to values that require less than 0.1*MAXVEL to + ! be accommodated. +BT_PROJECT_VELOCITY = True + +INTERPOLATE_P_SURF = False ! Interpolate surface pressure changes through the + ! barotropic solver. +BT_THICK_SCHEME = "FROM_BT_CONT" + +DYNAMIC_SURFACE_PRESSURE = True +ICE_LENGTH_DYN_PSURF = 1.e3 +CONST_DYN_PSURF = 0.9 + +TFREEZE_FORM = "MILLERO_78" +USE_RIGID_SEA_ICE = True +PRESSURE_DEPENDENT_FRAZIL = True + + +MASS_WEIGHT_IN_PRESSURE_GRADIENT = True ! [Boolean] default = False + ! If true, use mass weighting when interpolation T/S for + ! top/bottom integrals in AFV pressure gradient calculation. + +! Specify the properties of the active tracers and Eqn of state. +ENABLE_THERMODYNAMICS = True ! Temperature and salinity are used as state + ! variables if ENABLE_THERMODYNAMICS is defined. +FRAZIL = True ! If FRAZIL is defined, water freezes if it + ! gets colder than the freezing point, and the + ! accumulated heat deficit is returned in the + ! surface state. +RECLAIM_FRAZIL = True ! If defined, balance heat consumption by + ! frazil formation by cooling any overlying water + ! down to the freezing point to avoid creating + ! thin sea-ice for SSTs above freezing. +EQN_OF_STATE = "WRIGHT" ! EQN_OF_STATE determines which ocean equation + ! of state should be used. Currently, the valid + ! choices are "LINEAR", "UNESCO", and "WRIGHT". + ! The default is "WRIGHT", but this only matters + ! of USE_EOS is defined. +USE_EOS = True ! If USE_EOS is defined, density is calculated + ! from temperature and salinity with an equation + ! of state. ENABLE_THERMODYNAMICS must be + ! defined if USE_EOS is. +BOUSSINESQ = True ! If true, make the Boussinesq approximation. +P_REF = 2.0e7 ! P_REF is the pressure that is used for + ! calculating the coordinate density, in Pa. + ! (1 Pa = 1e4 dbar, so 2e7 is common--ly used.) +RHO_0 = 1035.0 ! RHO_0 is used in the Boussinesq + ! approximation to calculations of pressure and + ! pressure gradients, in units of kg m-3. +C_P = 3925.0 ! C_P is the heat capacity of sea water in + ! J kg-1 K-1, approximated as a constant. +CORRECT_DENSITY = True ! If CORRECT_DENSITY is defined, the layer + ! densities are restored toward their target + ! values by the diapycnal mixing. + +! Specify the properties of the surface forcing. +WIND_STAGGER = "B" ! "A", "B", or "C" to indicate the + ! staggering of the wind stresses. + +! Specify the properties of the passive tracers. +KHTR = 0.0 ! KHTR is the along-isopycnal tracer diffusivity, in m2 s-1. +KHTR_MIN = 0.0 ! Minimum tracer diffusivity in m2 s-1. +KHTR_MAX = 0.0 ! Maximum tracer diffusivity in m2 s-1. +KHTR_SLOPE_CFF = 0.25 ! Non-dimensional coefficient in Visbeck formula. + ! Use non-zero value (e.g. 0.1) to enable Visbeck +RESOLN_SCALED_KHTR = False ! If defined, the tracer diffusivity is scaled + ! away when the first baroclinic deformation + ! radius is well resolved. +KHTR_PASSIVITY_COEFF = 0.0 ! Passivity coefficient that scales Rd/dx + ! where passivity is the ratio between the + ! along-isopycnal tracer mixing and thickness + ! mixing +CHECK_DIFFUSIVE_CFL = True ! If true, use enough iterations to ensure + ! that the horizontal diffusive CFL limit is + ! respected. If false, always use 1 iteration. + +CHECK_BAD_SURFACE_VALS = False +BAD_VAL_SST_MIN = -3.0 +BAD_VAL_SST_MAX = 55.0 +BAD_VAL_SSS_MIN = 0.0 +BAD_VAL_SSS_MAX = 65.0 +BAD_VAL_SSH_MIN = -50.0 +BAD_VAL_SSH_MAX = 50.0 + +DIFFUSE_ML_TO_INTERIOR = True ! If true, enable epipycnal mixing between the + ! surface boundary layer and the interior. +ML_KHTR_SCALE = 0.0 ! With Diffuse_ML_interior, this is the ratio + ! of the truly horizontal diffusivity in the + ! mixed layer to the epipycnal diffusivity. + ! The default is 1.0. Nondimensional. + +USE_USER_TRACER_EXAMPLE = False ! If defined, the example tracer package is used. +USE_IDEAL_AGE_TRACER = True ! If defined, the ideal age and vintage + ! tracer package may be used. +DO_IDEAL_VINTAGE = False ! If defined and USE_IDEAL_AGE_TRACER is + ! defined, use an ideal vintage tracer that is + ! set to an exponentially increasing value in + ! the mixed layer and is conserved thereafter. + +DO_IDEAL_AGE_DATED = True + +! Specify the properties of the diapycnal viscosity and diffusion. +ADIABATIC = False ! There are no diapycnal mass fluxes if + ! ADIABATIC is defined. This assumes that + ! KD = KDML = 0.0 and that there is no buoyancy + ! forcing, but makes the model faster by + ! eliminating subroutine calls. + +BULKMIXEDLAYER = True ! If defined, use a Kraus-Turner-like bulk + ! mixed layer with transitional buffer layers. + ! Layers 1 through NKML+NKBL have variable + ! densities. There must be at least NKML+NKBL+1 + ! layers if BULKMIXEDLAYER is defined. +! The following parameters only apply when BULKMIXEDLAYER is defined. +NKML = 2 ! NKML is the number of sublayers within the + ! mixed layer. +NKBL = 2 ! NKBL is the number of layers used as + ! variable density buffer layers. +MSTAR = 0.3 ! MSTAR is a non-dimensional constant of + ! proportionality between the cube of the + ! surface friction velocity and the turbulent + ! kinetic energy input at the surface. +NSTAR = 0.15 ! NSTAR is the portion of the buoyant + ! potential energy imparted by surface fluxes + ! that is available to drive entrainment at the + ! base of mixed layer when that energy is + ! positive. +NSTAR2 = 0.15 ! NSTAR2 is the portion of any potential + ! energy released by convective adjustment that + ! is available to drive entrainment at the + ! base of the mixed layer. By default, + ! NSTAR2 = NSTAR. +READ_GUST_2D = False ! Signals to read gustiness from a file (Pa) +GUST_CONST = 0.02 ! Gustinesss to use if not read from file or + ! a background that is added to the data (Pa) +PEN_SW_FRAC = 0.42 ! PEN_SW_FRAC is the fraction of the shortwave + ! radiation that penetrates below the surface. +PEN_SW_SCALE = 40.0 ! PEN_SW_SCALE is the vertical absorption + ! e-folding depth of the penetrating shortwave + ! radiation, in m. +PEN_SW_NBANDS = 3 ! The number of bands of penetrating shortwave + ! radiation. +ABSORB_ALL_SW = True ! If defined, all shortwave radiation is + ! absorbed by the ocean, instead of passing + ! through to the bottom mud. +CORRECT_ABSORPTION_DEPTH = True ! If true, the depth at which penetrating + ! shortwave radiation is absorbed is corrected by + ! moving some of the heating upward in the water + ! column. The default is false. +ML_USE_OMEGA = True ! Use Omega instead of f in ML code +TKE_DECAY = 10.0 ! TKE_DECAY relates the vertical rate of decay + ! of the TKE available for mechanical entrain- + ! ment to the natural Ekman depth. Nondim. +CONV_DECAY = 0.5 ! CONV_DECAY relates the vertical rate of + ! decay of the convectively released TKE + ! available for penetrating entrainment to the + ! natural Ekman length. Nondimensional. +BULK_RI_ML = 0.05 ! BULK_RI_ML is the efficiency with which mean + ! kinetic energy released by mechanically forced + ! entrainment of the mixed layer is converted to + ! turbulent kinetic energy. Nondimensional. +BULK_RI_CONVECTIVE = 0.05 ! BULK_RI_CONVECTIVE is the efficiency with + ! which convectively released mean kinetic + ! energy is converted to turbulent kinetic + ! energy. Nondimensional. +RESOLVE_EKMAN = False ! If true, the nkml>1 layers in the mixed + ! layer are chosen to optimally represent the + ! impact of the Ekman transport on the mixed + ! layer TKE budget. Otherwise, the sublayers + ! are distributed uniformly through the mixed + ! layer. The default is false. +ML_MIX_FIRST = 0.0 ! The fraction of the mixed layer mixing that + ! is applied before interior diapycnal mixing. +ML_RESORT = True ! If defined, resort the topmost layers by + ! potential density before the mixed layer + ! calculations. +ML_PRESORT_NK_CONV_ADJ = 4 ! Convectively mix the first X layers before + ! sorting when ML_RESORT is defined. +LIMIT_BUFFER_DETRAIN = True ! If defined, limit the detrainment from the + ! buffer layers to not be too different from the + ! neighbors. +BUFFER_LAYER_EXTRAP_LIMIT = 0.5 + +DYNAMIC_VISCOUS_ML = True ! If defined, use a bulk Richardson number criteria + ! to determine the mixed layer thickness for viscosity. +HMIX_MIN = 4.0 ! The minimum mixed layer depth, in m. +! End of the BULKMIXEDLAYER parameters. + +PRANDTL_TURB = 1.0 +USE_LIMITED_PATM_SSH = True ! If defined, return the full sea surface height + ! with the correction for the atmospheric (and + ! sea-ice) pressure limited by max_p_surf, instead + ! of the full atmospheric pressure. +DEPTH_LIMIT_FLUXES = 0.1 ! The surface fluxes are scaled away when the + ! total ocean depth is less than this, in m. +KVML = 1.00e-2 ! The kinematic viscosity in the mixed layer, + ! in m2 s-1. A typical value is ~1e-2 m2 s-1. + ! KVML is not used if BULKMIXEDLAYER is defined. +DIRECT_STRESS = False ! If DIRECT_STRESS is defined, the wind stress + ! is distributed over the topmost HMIX_STRESS + ! of fluid, and KVML need not be elevated. + +KV = 1.00e-3 ! The kinematic viscosity in the interior, in + ! m2 s-1. The molecular value, ~1e-6 m2 s-1, + ! may be used. +KD = 2.00e-5 ! The diapycnal diffusivity of density in the + ! interior, in m2 s-1. Zero or the molecular + ! value, ~1e-7 m2 s-1, may be used. +MAX_ENT_IT = 20 ! The maximum number of iterations that may be + ! used to calculate the interior diapycnal + ! entrainment. +TOLERANCE_ENT = 1.0e-5 ! The tolerance in m with which to solve for + ! entrainment values. +USE_JACKSON_PARAM = True ! If true, use the new Jackson-Hallberg-Legg + ! (JPO 2008) shear mixing parameterization. +! The Jackson-Hallberg-Legg shear mixing parameterization uses the following +! 6 nondimensional coefficients. That paper gives 3 best fit parameter sets. +! Ri_Crit Rate FRi_Curv K_buoy TKE_N TKE_Shear +! p1: 0.25 0.089 -0.97 0.82 0.24 0.14 +! p2: 0.30 0.085 -0.94 0.86 0.26 0.13 +! p3: 0.35 0.088 -0.89 0.81 0.28 0.12 +! Future research will reveal how these should be modified to take +! subgridscale inhomogeneity into account. +RINO_CRIT = 0.25 ! The critical Richardson number for shear + ! mixing. With the Jackson et al. parameteriz- + ! ation, values range from 0.25 to 0.35. +SHEARMIX_RATE = 0.089 ! A nondimensional rate scale for shear-driven + ! entrainment. The original value from Hallberg + ! (MWR 2000) is 0.1. The default value with + ! USE_JACKSON_PARAM is 0.089. +FRI_CURVATURE = -0.97 ! The nondimensional curvature of the fit to + ! function of the Richardson number in the kappa + ! source term in the Jackson et al. scheme. The + ! default value is -0.97. +KAPPA_BUOY_SCALE_COEF = 0.82 ! The nondimensional ratio of the buoyancy + ! length scale to the kappa decay scale in the + ! kappa equation. The default value is 0.82. +TKE_N_DECAY_CONST = 0.24 ! The coefficient for the decay of TKE due to + ! stratification (i.e. proportional to N*tke), + ! ND. The default value is 0.24. +TKE_SHEAR_DECAY_CONST = 0.14 ! The coefficient for the decay of TKE due + ! to shear (i.e. proportional to |S|*tke), ND. + ! The default value is 0.14. +TKE_BACKGROUND = 0.0 ! A background level of TKE used in the first + ! iteration of the kappa equation, in m2 s-2. + ! TKE_BACKGROUND could be 0, its default. +MAX_RINO_IT = 25 ! The maximum number of iterations that may be + ! used to estimate the Richardson number driven + ! mixing. + +BRYAN_LEWIS_DIFFUSIVITY = False ! If true, a Bryan & Lewis (JGR 1979) like + ! tanh profile of background diapycnal + ! diffusivity with depth is used. +LEE_WAVE_DISSIPATION = False ! If true, use a lee wave driven dissipation + ! scheme to drive diapycnal mixing, along the + ! lines of Nikurashin (2010). +DISSIPATION_N0 = 1.0e-7 ! The intercept when N=0 of the N-dependent + ! expression used to set a minimum dissipation + ! by which to determine a lower bound of Kd + ! (a floor): A in eps_min = A + B*N, in W m-3. +DISSIPATION_N1 = 6.0e-4 ! The coefficient multiplying N, following + ! Gargett (1984), used to set a minimum + ! dissipation by which to determine a lower + ! bound of Kd (a floor): B in eps_min = A + B*N + ! in units of J m-3. +INT_TIDE_DISSIPATION = False ! If true, use an internal tidal dissipation + ! scheme to drive diapycnal mixing, along the + ! lines of St. Laurent, 2002 and Simmons, 2004. +INT_TIDE_DECAY_SCALE = 300.3003003003003 ! The decay scale away from the + ! bottom for tidal TKE when INT_TIDE_DISSIPATION + ! is used, in m. +MU_ITIDES = 0.2 ! A dimensionless turbulent mixing efficiency. + ! (global value to use instead?) +GAMMA_ITIDES = 0.3333 ! Fraction of tidal energy dissipated locally. +MIN_ZBOT_ITIDES = 0.0 ! Turn off tidal dissipation where total ocean + ! depth less than this value. +READ_H2 = False ! Read SGS topographic variance from file +KAPPA_ITIDES = 0.000628319 ! The effective wavelength of the subgridscale + ! topographic variations, in m-1. Currently set + ! to 2*pi/10km. +H2_FILE = "topog.nc" ! File containing sub-grid topography amplitude +READ_TIDEAMP = False ! If true, read a file (given by TIDEAMP_FILE) + ! containing the tidal amplitude. +TIDEAMP_FILE = "tideamp.nc" ! File containing tidal flow amplitude +KAPPA_H2_FACTOR = 0.75 ! A scaling factor for roughness amplitude. +TKE_ITIDE_MAX = 0.1 ! Maximum conversion to baroclinic tides, W m-2. +N2_FLOOR_IOMEGA2 = 0. ! The floor applied to N2(k) scaled by Omega^2 + ! If =0., N2(k) is simply positive definite + ! If =1., N2(k) > Omega^2 everywhere +BBL_MIXING_AS_MAX = False ! If true, take the maximum of the diffusivity + ! from the BBL mixing and the other + ! diffusivities. Otherwise, diffusiviy from the + ! BBL_mixing is simply added. +KD_MIN = 2.e-6 ! Minimum diapycnal diffusivity (m^2/s) +CD_TIDES = 2.5e-3 ! The drag coefficient for calculating the + ! frictional drag of tidal velocities, nondim. +HBBL = 10.0 ! The thickness in m of a bottom boundary + ! layer with a viscosity of KVBBL if + ! BOTTOMDRAGLAW is not defined, or the thickness + ! over which near-bottom velocities are averaged + ! for the drag law if BOTTOMDRAGLAW is defined + ! but LINEAR_DRAG is not. +KVBBL = 2.00e-2 ! The kinematic viscosity in the benthic + ! boundary layer, in m2 s-1. A typical value is + ! ~1e-3 m2 s-1. KVBBL is not used with if + ! BOTTOMDRAGLAW is defined. +BOTTOMDRAGLAW = True ! If BOTTOMDRAGLAW is defined, the bottom + ! stress is calculated with a drag law + ! c_drag*|u|*u. The velocity magnitude may be an + ! assumed value or it may be based on the actual + ! velocity in the bottommost HBBL, depending on + ! LINEAR_DRAG. +CDRAG = 0.003 ! CDRAG is the drag coefficient relating the + ! magnitude of the velocity field to the bottom + ! stress. CDRAG is only used if BOTTOMDRAGLAW is + ! defined. +CDRAG_CHAN = 0.1 + +LINEAR_DRAG = False ! If LINEAR_DRAG and BOTTOMDRAGLAW are defined + ! the drag law is cdrag*DRAG_BG_VEL*u. +DRAG_BG_VEL = 0.10 ! DRAG_BG_VEL is either the assumed bottom + ! velocity (with LINEAR_DRAG) or an unresolved + ! velocity that is combined with the resolved + ! velocity to estimate the velocity magnitude, + ! in m s-1. DRAG_BG_VEL is only used when + ! BOTTOMDRAGLAW is defined. +BBL_THICK_MIN = 0.1 ! The minimum bottom boundary layer thickness, + ! in m, that can be used with BOTTOMDRAGLAW. + ! This might be Kv / (cdrag * drag_bg_vel) to + ! give Kv as the minimum near-bottom viscosity. +BBL_EFFIC = 0.20 ! BBL_EFFIC is the efficiency with which the + ! energy extracted by bottom drag drives BBL + ! diffusion. Nondimensional. BBL_EFFIC only + ! applies when BOTTOMDRAGLAW is defined. +BBL_EFFIC_RAY = 0.2 +BBL_MIXING_MAX_DECAY = 0.0 ! This sets the maximum decay scale in m for + ! the BBL diffusion, or 0 to allow the mixing + ! to penetrate as far as stratification and + ! rotation permit. The default is 0. +CHANNEL_DRAG = True ! If defined the drag is exerted directly on + ! each layer according to what fraction of the + ! bottom they overlie. +SMAG_CONST_CHANNEL = 0.15 ! The nondimensional Laplacian Smagorinsky + ! constant used in calculating the channel drag + ! if it is enabled. The default is to use the + ! same value as SMAG_LAP_CONST if it is defined, + ! or 0.15 if it is not. + ! The file containing RMS tidal amplitude. +DO_RIVERMIX = True ! If true, apply additional mixing whereever + ! there is runoff, so that it is mixed down to + ! RIVERMIX_DEPTH, if the ocean is that deep. +RIVERMIX_DEPTH = 40.0 ! The depth to which rivers are mixed, in m, + ! if DO_RIVERMIX is defined. +HENYEY_IGW_BACKGROUND = True ! If defined use a latitude-dependent scaling + ! for the near-surface background diffusivity, + ! as described in Harrison & Hallberg, JPO'08. +ML_RADIATION = True ! Turns on sub-ML mixing driven by ML radiation +ML_RAD_COEFF = 0.1 ! Non-dimensional energy input for sub-ML mixing +ML_RAD_KD_MAX = 1.e-3 ! Maximum diffusivity allowed in sub-ML mixing +ML_RAD_EFOLD_COEFF = 0.2 ! Non-dimensional length scale (multiples ML depth) + +! Specify properties of the bottom thermal forcing. +DO_GEOTHERMAL = False ! If defined, apply geothermal heating. +GEOTHERMAL_FILE = geothermal_heating_cm2g.nc + ! The file from which the geothermal heating is + ! to be read, or blank to use a constant heating + ! rate. +GEOTHERMAL_SCALE = 0.001 ! The constant geothermal heat flux, a + ! rescaling factor for the heat flux read from + ! GEOTHERMAL_FILE, or 0 to disable the geothermal + ! heating. + +! Specify properties of the surface forcing. +BOUND_SALINITY = True ! Limit salinity to being positive (the sea-ice + ! model may ask for more salt than is available and + ! otherwise drive the salinity negative) +RESTORE_SALINITY = False ! If RESTORE_SALINITY is defined, the coupled + ! driver will add a globally-balanced fresh- + ! water flux that drives sea-surface salinity + ! toward specified values. +SRESTORE_AS_SFLUX = False ! If SRESTORE_AS_SFLUX is defined, the relaxation of + ! surface salinity is done via a virtual salt flux + ! rather than through a freshwater flux. +MAX_DELTA_SRESTORE = 5.0 ! + +MASK_SRESTORE_MARGINAL_SEAS = False ! Other options for salt restoring from MOM4 +MASK_SRESTORE_UNDER_ICE = False +ICE_SALT_CONCENTRATION = 0.005 +SALT_REJECT_BELOW_ML = True +ADJUST_NET_FRESH_WATER_TO_ZERO = True + + +FLUXCONST = 0.1667 ! A constant that relates the surface fluxes + ! to the mixed layer property anomalies, if + ! RESTOREBUOY or RESTORE_SALINITY is defined. + !] +MAX_P_SURF = 3.0e4 ! The maximum surface pressure that can be + ! exerted by the atmosphere and floating sea-ice, + ! in Pa. This is needed because the FMS coupling + ! structure does not limit the water that can be + ! frozen out of the ocean and the ice-ocean heat + ! fluxes are treated explicitly. No limit is + ! applied if a negative value is used. + +CALCULATE_APE = False + + +ICE_SHELF = True +DYNAMIC_SHELF_MASS = False +SHELF_THERMO = True +SHELF_THREE_EQN = True +ICE_SHELF_FLUX_FACTOR = 0.0 +ICE_SHELF_TEMPERATURE = -20.0 +ICE_PROFILE_CONFIG = "FILE" +ICE_THICKNESS_FILE = "topog_ocean.nc" +ICE_THICKNESS_VARNAME = "thick" +ICE_AREA_VARNAME = "area" +DEPRESS_INITIAL_SURFACE = True +SURFACE_HEIGHT_IC_FILE = "topog_ocean.nc" +SURFACE_HEIGHT_IC_VAR = "thick" +SURFACE_HEIGHT_IC_SCALE = -0.885 +COL_THICK_MELT_THRESHOLD = 1.0 +CDRAG_SHELF = 0.003 +DRAG_BG_VEL_SHELF = 0.0001 +DEPTH_MIN_DYN_PSURF = 50.0 +APPLY_OBC_U_FLATHER_EAST = True ! [Boolean] default = False + ! Apply a Flather open boundary condition on the eastern + ! side of the global domain +APPLY_OBC_U_FLATHER_WEST = True ! [Boolean] default = False + ! Apply a Flather open boundary condition on the western + ! side of the global domain +APPLY_OBC_V_FLATHER_NORTH = True ! [Boolean] default = False + ! Apply a Flather open boundary condition on the northern + ! side of the global domain + + +! Specify whether sponges are used. It is possible to use the model in robust +! diagnostic mode by defining sponges that span the entire domain. +SPONGE = True ! If SPONGE is defined, sponges may be applied + ! anywhere in the domain. The exact location and + ! properties of those sponges are specified from + ! MOM_initialization.F90. +SPONGE_DAMPING_FILE = "Idamp.nc" +SPONGE_STATE_FILE = "sponge_state.nc" +SPONGE_PTEMP_VAR = "TEMP" + + +! Specify properties of the tides. +TIDES = False ! Apply tidal momentum forcing. +TIDE_USE_SAL_SCALAR = True ! Use the scalar approximation when + ! calculating self-attraction and loading. +TIDE_SAL_SCALAR_VALUE = 0.094 + ! The constant of proportionality between + ! sea surface height (should be bottom pressure) + ! anomalies and bottom geopotential anomalies. +TIDAL_SAL_FROM_FILE = False ! Read the tidal self-attraction and loading + ! from input files, specified with one or more + ! lines like 'TIDAL_INPUT_FILE = path'. +USE_PREVIOUS_TIDES = False ! Use the previous iteration of the tides + ! to facilitate convergent iteration. + + +! Specify which tidal constituents to use. +TIDE_M2 = False +TIDE_S2 = False +TIDE_N2 = False +TIDE_K2 = False +TIDE_K1 = False +TIDE_O1 = False +TIDE_P1 = False +TIDE_Q1 = False +TIDE_MF = False +TIDE_MM = False + + +! Opacity Rules +VAR_PEN_SW = False ! Use time and/or space varying CHL_A to set opacity + +OPACITY_SCHEME = "MANIZZA_05" ! OPACITY_SCHEME is used to specify how + ! chlorophyll concentrations are translated into + ! opacities. Currently valid options include: + ! MANIZZA_05 - Use Manizza et al., GRL, 2005. + ! MOREL_88 - Use Morel, JGR, 1988. +CHL_FILE = "" + +! CFCs tracers +USE_OCMIP2_CFC = False ! If defined, CFC11 and CFC12 distributions + ! are simulated. +CFC_IC_FILE = False + ! The file in which to find initial conditions + ! for CFCs, if USE_OCMIP2_CFC is defined. + +! Specify a few miscellaneous limits. + +CFL_BASED_TRUNCATIONS = True + +CFL_TRUNCATE_RAMP_TIME = 8.64e+05 ! [s] default = 0.0 + ! The time over which the CFL trunction value is ramped + ! up at the beginning of the run. +CFL_TRUNCATE_START = 0.3 ! [nondim] default = 0.0 + ! The start value of the truncation CFL number used when + ! ramping up CFL_TRUNC. + +MAXVEL = 6.0 ! This is the maximum velocity allowed before + ! the velocity is truncated, in units of m s-1. +MAXTRUNC = 1000 ! The run will be stopped, and the day set to + ! a very large value if the velocity is + ! truncated more than MAXTRUNC times between + ! energy saves. Set MAXTRUNC to 0 to stop if + ! there is any truncation of velocities. +U_TRUNC_FILE = "U_velocity_truncations" + ! The absolute path to a file into which the + ! accelerations leading to zonal velocity + ! truncations are written. Undefine this for + ! efficiency if this diagnostic is not needed. +V_TRUNC_FILE = "V_velocity_truncations" + + + ! The absolute path to a file into which the + ! accelerations leading to meridional velocity + ! truncations are written. Undefine this for + ! efficiency if this diagnostic is not needed. + diff --git a/examples/ocean_SIS/Amery/MOM_override b/examples/ocean_SIS/Amery/MOM_override new file mode 100644 index 0000000000..e69de29bb2 diff --git a/examples/ocean_SIS/Amery/data_table b/examples/ocean_SIS/Amery/data_table new file mode 100644 index 0000000000..591e624fee --- /dev/null +++ b/examples/ocean_SIS/Amery/data_table @@ -0,0 +1,60 @@ +"ATM" , "p_surf" , "" , "" , .false. , 1.0e5 +"ATM" , "p_bot" , "" , "" , .false. , 1.0e5 +"ATM" , "t_bot" , "" , "" , .false. , 273.0 +"ATM" , "sphum_bot" , "" , "" , .false. , 0.01 +"ATM" , "u_bot" , "" , "" , .false. , 0.0 +"ATM" , "u_flux" , "" , "" , .false. , 0.0 +"ATM" , "v_flux" , "" , "" , .false. , 0.0 +"ATM" , "v_bot" , "" , "" , .false. , 0.0 +"ATM" , "z_bot" , "" , "" , .false. , 10.0 +"ATM" , "gust" , "" , "" , .false. , 1.0e-4 +"ATM" , "flux_sw" , "" , "" , .false. , 0.0 +"ATM" , "flux_lw" , "" , "" , .false. , 0.0 +"ATM" , "lprec" , "" , "" , .false. , 0.0 +"ATM" , "fprec" , "" , "" , .false. , 0.0 +"LND" , "t_surf" , "" , "" , .false. , 273.0 +"LND" , "t_ca" , "" , "" , .false. , 273.0 +"LND" , "q_ca" , "" , "" , .false. , 0.01 +"LND" , "rough_mom" , "" , "" , .false. , 1.0e-3 +"LND" , "rough_heat" , "" , "" , .false. , 1.0e-3 +"LND" , "albedo" , "" , "" , .false. , 0.0 +"LND" , "sphum_surf" , "" , "" , .false. , 0.01 +"LND" , "sphum_ca" , "" , "" , .false. , 0.01 +"LND" , "t_flux" , "" , "" , .false. , 0.0 +"LND" , "sphum_flux" , "" , "" , .false. , 0.0 +"LND" , "lw_flux" , "" , "" , .false. , 0.0 +"LND" , "sw_flux" , "" , "" , .false. , 0.0 +"LND" , "lprec" , "" , "" , .false. , 0.0 +"LND" , "fprec" , "" , "" , .false. , 0.0 +"LND" , "dhdt" , "" , "" , .false. , 1.0e-5 +"LND" , "dedt" , "" , "" , .false. , 1.0e-5 +"LND" , "dedq" , "" , "" , .false. , 1.0e-5 +"LND" , "drdt" , "" , "" , .false. , 1.0e-5 +"LND" , "drag_q" , "" , "" , .false. , 1.0e-3 +"LND" , "p_surf" , "" , "" , .false. , 1.0e5 +"ICE" , "lw_flux_dn" , "" , "" , .false. , 0.0 +"ICE" , "sw_flux_vis_dir_dn" , "" , "" , .false. , 0.0 +"ICE" , "sw_flux_vis_dif_dn" , "" , "" , .false. , 0.0 +"ICE" , "sw_flux_nir_dir_dn" , "" , "" , .false. , 0.0 +"ICE" , "sw_flux_nir_dif_dn" , "" , "" , .false. , 0.0 +"ICE" , "runoff" , "" , "" , .false. , 0.0 +"ICE" , "calving" , "" , "" , .false. , 0.0 +"ICE" , "u_flux" , "" , "" , .false. , 0.0 +"ICE" , "v_flux" , "" , "" , .false. , 0.0 +"ICE" , "t_flux" , "" , "" , .false. , 0.0 +"ICE" , "q_flux" , "" , "" , .false. , 0.0 +"ICE" , "lw_flux_dn" , "" , "" , .false. , 0.0 +"ICE" , "lw_flux" , "" , "" , .false. , 0.0 +"ICE" , "lprec" , "" , "" , .false. , 0.0 +"ICE" , "fprec" , "" , "" , .false. , 0.0 +"ICE" , "dhdt" , "" , "" , .false. , 80.0 +"ICE" , "dedt" , "" , "" , .false. , 2.0e-6 +"ICE" , "drdt" , "" , "" , .false. , 10.0 +"ICE" , "sic_obs" , "" , "" , .true. , 0.00 +"ICE" , "sit_obs" , "" , "" , .true. , 0.00 +"ICE" , "sst_obs" , "SST" , "./INPUT/sst_ice_clim.nc" , .false. , 1.0 +"OCN" , "u_flux" , "" , "" , .true. , 0.00 +"OCN" , "v_flux" , "" , "" , .true. , 0.00 +"OCN" , "t_flux" , "" , "" , .true. , 0.00 +"OCN" , "q_flux" , "" , "" , .true. , 0.00 +"OCN" , "salt_flux" , "" , "" , .true. , 0.00 diff --git a/examples/ocean_SIS/Amery/diag_table b/examples/ocean_SIS/Amery/diag_table new file mode 100644 index 0000000000..c6a7edeb81 --- /dev/null +++ b/examples/ocean_SIS/Amery/diag_table @@ -0,0 +1,78 @@ +Amery_baseline +1992 1 1 0 0 0 +## output files +"ocean_month", 1, "months", 1, "days", "time" +"ocean_month_snap", 1, "months", 1, "days", "time" +"ocean_daily", 1, "days", 1, "days", "time" +## output variables +# +#================== +# OCEAN DIAGNOSTICS +#================== +# Monthly snapshots of tracers, interface positions and Kd +"ocean_model","e","e","ocean_month_snap","all",.false.,"none",2 +"ocean_model","temp","temp","ocean_month_snap","all",.false.,"none",2 +"ocean_model","salt","salt","ocean_month_snap","all",.false.,"none",2 +"ocean_model","u","u","ocean_month_snap","all",.false.,"none",2 +"ocean_model","v","v","ocean_month_snap","all",.false.,"none",2 +"ocean_model","salt_int","salt_int","ocean_month_snap","all",.false.,"none",2 +"ocean_model","temp_int","temp_int","ocean_month_snap","all",.false.,"none",2 +#"ocean_model","Kd_shear","Kd_shear","ocean_month_snap","all",.false.,"none",2 +"ocean_model","Kd_layer","Kd_layer","ocean_month_snap","all",.false.,"none",2 +#"ocean_model","Kd_work","Kd_work","ocean_month_snap","all",.false.,"none",2 +# Monthly Avg transports in sigma2 +"ocean_model","uh","uh","ocean_month","all",.true.,"none",2 +"ocean_model","vh","vh","ocean_month","all",.true.,"none",2 +"ocean_model","wd","wd","ocean_month","all",.true.,"none",2 +#"ocean_model","Res_fn","Res_fn","ocean_month","all",.true.,"none",2 +#"ocean_model","col_mass","col_mass","ocean_month","all",.true.,"none",2 +#"ocean_model","Tflx_dia_diff","Tflx_dia_diff","ocean_month","all",.true.,"none",2 +#"ocean_model","Tflx_dia_adv","Tflx_dia_adv","ocean_month","all",.true.,"none",2 +#"ocean_model","Sflx_dia_diff","Sflx_dia_diff","ocean_month","all",.true.,"none",2 +#"ocean_model","Sflx_dia_adv","Sflx_dia_adv","ocean_month","all",.true.,"none",2 +#"ocean_model","T_adx_2d","T_adx_2d","ocean_month","all",.true.,"none",2 +#"ocean_model","T_ady_2d","T_ady_2d","ocean_month","all",.true.,"none",2 +#"ocean_model","S_adx_2d","S_adx_2d","ocean_month","all",.true.,"none",2 +#"ocean_model","S_ady_2d","S_ady_2d","ocean_month","all",.true.,"none",2 +#"ocean_model","T_diffx_2d","T_diffx_2d","ocean_month","all",.true.,"none",2 +#"ocean_model","T_diffy_2d","T_diffy_2d","ocean_month","all",.true.,"none",2 +#"ocean_model","S_diffx_2d","S_diffx_2d","ocean_month","all",.true.,"none",2 +#"ocean_model","S_diffy_2d","S_diffy_2d","ocean_month","all",.true.,"none",2 +"ocean_model","age","age","ocean_month","all",.true.,"none",2 +"ocean_model","temp_h","temp_h","ocean_month","all",.true.,"none",2 +"ocean_model","salt_h","salt_h","ocean_month","all",.true.,"none",2 +"ocean_model","h","h","ocean_month","all",.true.,"none",2 +"ocean_model","Kd_work","Kd_work","ocean_month","all",.true.,"none",2 +# Monthly Avg Stress +#"ocean_model","taux", "taux", "ocean_month","all",.true.,"none",2 +#"ocean_model","tauy", "tauy", "ocean_month","all",.true.,"none",2 +#=========================== +# Mixed Layer and TKE Budget Terms: +#=========================== +"ocean_model","h_ML","h_ML","ocean_daily","all",.true.,"none",2 +"ocean_model","ustar_shelf","ustar_shelf","ocean_daily","all",.true.,"none",2 +"ocean_model","SST","SST","ocean_daily","all",.true.,"none",2 +"ocean_model","SST","SST_max","ocean_daily","all",max,"none",2 +"ocean_model","SST","SST_min","ocean_daily","all",min,"none",2 +"ocean_model","SSS","SSS","ocean_daily","all",.true.,"none",2 +"ocean_model","SSH","SSH","ocean_daily","all",.true.,"none",2 +"ocean_model","SSU","SSU","ocean_daily","all",.true.,"none",2 +"ocean_model","SSV","SSV","ocean_daily","all",.true.,"none",2 +"ocean_model","melt","melt","ocean_daily","all",.true.,"none",2 +"ocean_model","uhbt","uhbt","ocean_daily","all",.true.,"none",2 +"ocean_model","vhbt","vhbt","ocean_daily","all",.true.,"none",2 +#================== +# Surface Forcing: +#================= +"ocean_model","taux", "taux", "ocean_daily","all",.true.,"none",2 +"ocean_model","tauy", "tauy", "ocean_daily","all",.true.,"none",2 +"ocean_model","ustar", "ustar", "ocean_daily","all",.true.,"none",2 +"ocean_model","PRCmE", "PmE", "ocean_daily","all",.true.,"none",2 +#"ocean_model","SW", "SW", "ocean_daily","all",.true.,"none",2 +#"ocean_model","LwLatSens","LwLatSens","ocean_daily","all",.true.,"none",2 +#"ocean_model","salt_flux","salt_flux","ocean_daily","all",.true.,"none",2 +"ocean_model","exch_vel_t", "exch_vel_t", "ocean_daily","all",.true.,"none",2 +"ocean_model","exch_vel_s", "exch_vel_s", "ocean_daily","all",.true.,"none",2 +"ocean_model","frazil", "frazil", "ocean_daily","all",.true.,"none",2 +#"ocean_model","net_heat_surface","net_heat_surface","ocean_daily","all",.true.,"none",2 +# diff --git a/examples/ocean_SIS/Amery/field_table b/examples/ocean_SIS/Amery/field_table new file mode 100644 index 0000000000..5b3707ca02 --- /dev/null +++ b/examples/ocean_SIS/Amery/field_table @@ -0,0 +1,19 @@ +# specific humidity for moist runs +## check if "profile_type", "fixed", "surface_value=3.e-6" is needed for coupled model + "TRACER", "atmos_mod", "sphum" + "longname", "specific humidity" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=3.e-6" / +# prognostic cloud scheme tracers + "TRACER", "atmos_mod", "liq_wat" + "longname", "cloud liquid specific humidity" + "units", "kg/kg" / + "TRACER", "atmos_mod", "ice_wat" + "longname", "cloud ice water specific humidity" + "units", "kg/kg" / + "TRACER", "atmos_mod", "cld_amt" + "longname", "cloud fraction" + "units", "none" / + "TRACER", "land_mod", "sphum" + "longname", "specific humidity" + "units", "kg/kg" / diff --git a/examples/ocean_SIS/Amery/input.nml b/examples/ocean_SIS/Amery/input.nml new file mode 100644 index 0000000000..8146124dd6 --- /dev/null +++ b/examples/ocean_SIS/Amery/input.nml @@ -0,0 +1,121 @@ + &MOM_input_nml + output_directory = 'RESTART/', + input_filename = 'n' + restart_input_dir = 'INPUT/', + restart_output_dir = 'RESTART/', + parameter_filename = 'MOM_input', + 'MOM_override' +/ + + &coupler_nml + months = 12, + days = 0, + current_date = 1992,1,1,0,0,0, + calendar = 'JULIAN', + dt_cpld = 3600, + dt_atmos = 3600, + do_atmos = .true., + do_land = .false., + do_ice = .true., + do_ocean = .true., + do_flux = .true., + atmos_npes = 32, + ocean_npes = 240, + concurrent = .true. + use_lag_fluxes=.true. + check_stocks = 0 +/ + + &diag_manager_nml + max_axes = 100, + max_num_axis_sets = 100, + max_input_fields = 699 + max_output_fields = 699 + mix_snapshot_average_fields=.false. + conserve_water=.true. +/ + + &flux_exchange_nml + debug_stocks = .FALSE. + divert_stocks_report = .TRUE. + do_area_weighted_flux = .FALSE. +/ + + &fms_io_nml + fms_netcdf_restart=.true. + threading_read='multi' + threading_write='single' + fileset_write='single' + max_files_r = 200 + max_files_w = 200 +/ + + &fms_nml + clock_grain='ROUTINE' + clock_flags='NONE' + domains_stack_size = 5000000 + stack_size =0 +/ + + &ice_albedo_nml + t_range = 10. +/ + + &ice_model_nml + layout=8,4 + nsteps_dyn=144 + nsteps_adv=2 + num_part = 6 + wd_turn = 0.0 + spec_ice=.false. + ice_bulk_salin = 0.010 + alb_sno = 0.85 ! keep CM2 setting + alb_ice = 0.65 ! keep CM2 setting + t_range_melt = 1.0 ! NOTE: CM2 uses 1.0 + heat_rough_ice = 5.0e-4 + cm2_bugs = .false. + do_icebergs = .false. + atmos_winds=.true. + add_diurnal_sw = .false. + do_ice_limit=.false. + max_ice_limit=10.0 + channel_viscosity=5.e-5 + chan_cfl_limit=0.001 + h_lo_lim = 1.e-10 + io_layout=1,1 +/ + + &icebergs_nml + verbose=.FALSE. + traj_sample_hrs=0 + verbose_hrs=2400 +/ + + &monin_obukhov_nml + stable_option = 2, + rich_crit = 10.0, + zeta_trans = 0.5 +/ + + &ocean_albedo_nml + ocean_albedo_option = 2 +/ + + &ocean_rough_nml + rough_scheme = 'beljaars' +/ + + &sat_vapor_pres_nml + construct_table_wrt_liq = .true. + construct_table_wrt_liq_and_ice = .true. +/ + + &surface_flux_nml + gust_min = 1.e-10 +/ + + &xgrid_nml + make_exchange_reproduce = .false. + interp_method = 'second_order' +/ +