diff --git a/ice_ocean_SIS2/FLOR2/INPUT/.gitignore b/ice_ocean_SIS2/FLOR2/INPUT/.gitignore new file mode 100644 index 0000000000..03865c2906 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/.gitignore @@ -0,0 +1,2 @@ +# Undo *.nc in top-level .gitignore +!*.nc diff --git a/ice_ocean_SIS2/FLOR2/INPUT/MOM_channels_FLOR b/ice_ocean_SIS2/FLOR2/INPUT/MOM_channels_FLOR new file mode 100644 index 0000000000..b743c3029d --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/MOM_channels_FLOR @@ -0,0 +1,9 @@ +! This file specifies restricted channel widths in MOM. The order is: +! [U|V]_width, min_longitude, max_longitude, min_latitude, max_latitude, width + +U_width, -5.9, -5.4, 35.8, 36.2, 12000.0 ! Gibraltar +U_width, 26.4, 26.8, 40.4, 40.6, 5000.0 ! Dardanelles + +V_width, 28.8, 29.4, 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/ice_ocean_SIS2/FLOR2/INPUT/WOA05_pottemp_salt.nc b/ice_ocean_SIS2/FLOR2/INPUT/WOA05_pottemp_salt.nc new file mode 120000 index 0000000000..c83305ca57 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/WOA05_pottemp_salt.nc @@ -0,0 +1 @@ +.datasets/obs/WOA05_pottemp_salt.nc \ No newline at end of file diff --git a/ice_ocean_SIS2/FLOR2/INPUT/atmos_mosaic_tile1Xland_mosaic_tile1.nc b/ice_ocean_SIS2/FLOR2/INPUT/atmos_mosaic_tile1Xland_mosaic_tile1.nc new file mode 120000 index 0000000000..fac5c08c7e --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/atmos_mosaic_tile1Xland_mosaic_tile1.nc @@ -0,0 +1 @@ +/lustre/f1/unswept/Matthew.Harrison/MOM6_datasets/FLOR2/ocn_only/atmos_mosaic_tile1Xland_mosaic_tile1.nc \ No newline at end of file diff --git a/ice_ocean_SIS2/FLOR2/INPUT/atmos_mosaic_tile1Xocean_mosaic_tile1.nc b/ice_ocean_SIS2/FLOR2/INPUT/atmos_mosaic_tile1Xocean_mosaic_tile1.nc new file mode 120000 index 0000000000..530b5c5889 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/atmos_mosaic_tile1Xocean_mosaic_tile1.nc @@ -0,0 +1 @@ +/lustre/f1/unswept/Matthew.Harrison/MOM6_datasets/FLOR2/ocn_only/atmos_mosaic_tile1Xocean_mosaic_tile1.nc \ No newline at end of file diff --git a/ice_ocean_SIS2/FLOR2/INPUT/grid_spec.nc b/ice_ocean_SIS2/FLOR2/INPUT/grid_spec.nc new file mode 120000 index 0000000000..1b29f54ad2 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/grid_spec.nc @@ -0,0 +1 @@ +/lustre/f1/unswept/Matthew.Harrison/MOM6_datasets/FLOR2/ocn_only/grid_spec.nc \ No newline at end of file diff --git a/ice_ocean_SIS2/FLOR2/INPUT/land_mask.nc b/ice_ocean_SIS2/FLOR2/INPUT/land_mask.nc new file mode 120000 index 0000000000..821286e0ed --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/land_mask.nc @@ -0,0 +1 @@ +/lustre/f1/unswept/Matthew.Harrison/MOM6_datasets/FLOR2/ocn_only/land_mask.nc \ No newline at end of file diff --git a/ice_ocean_SIS2/FLOR2/INPUT/land_mosaic_tile1Xocean_mosaic_tile1.nc b/ice_ocean_SIS2/FLOR2/INPUT/land_mosaic_tile1Xocean_mosaic_tile1.nc new file mode 120000 index 0000000000..d04b56ffb7 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/land_mosaic_tile1Xocean_mosaic_tile1.nc @@ -0,0 +1 @@ +/lustre/f1/unswept/Matthew.Harrison/MOM6_datasets/FLOR2/ocn_only/land_mosaic_tile1Xocean_mosaic_tile1.nc \ No newline at end of file diff --git a/ice_ocean_SIS2/FLOR2/INPUT/layer_coord.nc b/ice_ocean_SIS2/FLOR2/INPUT/layer_coord.nc new file mode 100644 index 0000000000..c7a21340bf Binary files /dev/null and b/ice_ocean_SIS2/FLOR2/INPUT/layer_coord.nc differ diff --git a/ice_ocean_SIS2/FLOR2/INPUT/ncar_precip.clim.nc b/ice_ocean_SIS2/FLOR2/INPUT/ncar_precip.clim.nc new file mode 120000 index 0000000000..1aedfc1a0a --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/ncar_precip.clim.nc @@ -0,0 +1 @@ +.datasets/CORE/NYF_v2.0/ncar_precip.clim.nc \ No newline at end of file diff --git a/ice_ocean_SIS2/FLOR2/INPUT/ncar_rad.clim.nc b/ice_ocean_SIS2/FLOR2/INPUT/ncar_rad.clim.nc new file mode 120000 index 0000000000..d14bd3a9d7 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/ncar_rad.clim.nc @@ -0,0 +1 @@ +.datasets/CORE/NYF_v2.0/ncar_rad.clim.nc \ No newline at end of file diff --git a/ice_ocean_SIS2/FLOR2/INPUT/ocean_hgrid.nc b/ice_ocean_SIS2/FLOR2/INPUT/ocean_hgrid.nc new file mode 120000 index 0000000000..2c920c1263 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/ocean_hgrid.nc @@ -0,0 +1 @@ +/lustre/f1/unswept/Matthew.Harrison/MOM6_datasets/FLOR2/ocean_hgrid.nc \ No newline at end of file diff --git a/ice_ocean_SIS2/FLOR2/INPUT/ocean_mask.nc b/ice_ocean_SIS2/FLOR2/INPUT/ocean_mask.nc new file mode 120000 index 0000000000..a4fba154c5 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/ocean_mask.nc @@ -0,0 +1 @@ +/lustre/f1/unswept/Matthew.Harrison/MOM6_datasets/FLOR2/ocn_only/ocean_mask.nc \ No newline at end of file diff --git a/ice_ocean_SIS2/FLOR2/INPUT/ocean_mosaic.nc b/ice_ocean_SIS2/FLOR2/INPUT/ocean_mosaic.nc new file mode 120000 index 0000000000..f61a4599a5 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/ocean_mosaic.nc @@ -0,0 +1 @@ +/lustre/f1/unswept/Matthew.Harrison/MOM6_datasets/FLOR2/ocn_only/ocean_mosaic.nc \ No newline at end of file diff --git a/ice_ocean_SIS2/FLOR2/INPUT/q_10_mod.clim.nc b/ice_ocean_SIS2/FLOR2/INPUT/q_10_mod.clim.nc new file mode 120000 index 0000000000..10034b6841 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/q_10_mod.clim.nc @@ -0,0 +1 @@ +.datasets/CORE/NYF_v2.0/q_10_mod.clim.nc \ No newline at end of file diff --git a/ice_ocean_SIS2/FLOR2/INPUT/runoff.nc b/ice_ocean_SIS2/FLOR2/INPUT/runoff.nc new file mode 120000 index 0000000000..7db3188216 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/runoff.nc @@ -0,0 +1 @@ +.datasets/OM4_025/INPUT/runoff.nc \ No newline at end of file diff --git a/ice_ocean_SIS2/FLOR2/INPUT/seawifs_1998-2006_smoothed_2X.nc b/ice_ocean_SIS2/FLOR2/INPUT/seawifs_1998-2006_smoothed_2X.nc new file mode 120000 index 0000000000..e6e41fbb77 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/seawifs_1998-2006_smoothed_2X.nc @@ -0,0 +1 @@ +/lustre/f1/unswept/Matthew.Harrison/MOM6_datasets/FLOR2/seawifs_1998-2006_smoothed_2X.nc \ No newline at end of file diff --git a/ice_ocean_SIS2/FLOR2/INPUT/slp.clim.nc b/ice_ocean_SIS2/FLOR2/INPUT/slp.clim.nc new file mode 120000 index 0000000000..240294dbde --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/slp.clim.nc @@ -0,0 +1 @@ +.datasets/CORE/NYF_v2.0/slp.clim.nc \ No newline at end of file diff --git a/ice_ocean_SIS2/FLOR2/INPUT/t_10_mod.clim.nc b/ice_ocean_SIS2/FLOR2/INPUT/t_10_mod.clim.nc new file mode 120000 index 0000000000..d1e8efbd12 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/t_10_mod.clim.nc @@ -0,0 +1 @@ +.datasets/CORE/NYF_v2.0/t_10_mod.clim.nc \ No newline at end of file diff --git a/ice_ocean_SIS2/FLOR2/INPUT/tidal_amplitude.nc b/ice_ocean_SIS2/FLOR2/INPUT/tidal_amplitude.nc new file mode 120000 index 0000000000..5288150244 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/tidal_amplitude.nc @@ -0,0 +1 @@ +/lustre/f1/unswept/Matthew.Harrison/MOM6_datasets/FLOR2/tidal_amplitude.nc \ No newline at end of file diff --git a/ice_ocean_SIS2/FLOR2/INPUT/topog.nc b/ice_ocean_SIS2/FLOR2/INPUT/topog.nc new file mode 120000 index 0000000000..3dcc54d4d4 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/topog.nc @@ -0,0 +1 @@ +/lustre/f1/unswept/Matthew.Harrison/MOM6_datasets/FLOR2/topog.nc \ No newline at end of file diff --git a/ice_ocean_SIS2/FLOR2/INPUT/u_10_mod.clim.nc b/ice_ocean_SIS2/FLOR2/INPUT/u_10_mod.clim.nc new file mode 120000 index 0000000000..f7c1466beb --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/u_10_mod.clim.nc @@ -0,0 +1 @@ +.datasets/CORE/NYF_v2.0/u_10_mod.clim.nc \ No newline at end of file diff --git a/ice_ocean_SIS2/FLOR2/INPUT/v_10_mod.clim.nc b/ice_ocean_SIS2/FLOR2/INPUT/v_10_mod.clim.nc new file mode 120000 index 0000000000..fb89f12b4e --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/v_10_mod.clim.nc @@ -0,0 +1 @@ +.datasets/CORE/NYF_v2.0/v_10_mod.clim.nc \ No newline at end of file diff --git a/ice_ocean_SIS2/FLOR2/INPUT/vgrid.py b/ice_ocean_SIS2/FLOR2/INPUT/vgrid.py new file mode 100644 index 0000000000..f56e8d79a7 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/INPUT/vgrid.py @@ -0,0 +1,69 @@ +import numpy +import math + +def dzIter(nk, Htot, dzTop, Huniform, fnPow, prec): + """ + Optimizes the highest ratio dzFn so that the sum(dz)=Htot. + """ + def dzFn(nk, Huniform, dzTop, fnPow, zFac): + """ + Returns dz = dzTop * ( 1 + zFac \int \fn(k) dk ) and sum(dz). + """ + dz = numpy.ones(nk) * dzTop + k = math.ceil( Huniform/dzTop ) + dz = dzTop * numpy.cumprod( 1. + zFac * (fn( numpy.linspace(1, nk, nk).astype(numpy.float64), k, nk )**fnPow) ) + return dz, numpy.sum(dz) + + def fn(z, z0, z1): + """ + Cosine bell function between z0 and z1 s.t. f(zz1)=0. + """ + zStar = (z-z0)/(z1-z0) # non-dimensional coordinate 0..1 + zStar = numpy.maximum(0., zStar) + zStar = numpy.minimum(1., zStar) + return 0.5*(1. - numpy.cos(2.*math.pi*zStar)) + + def optimizeZfac(nk, Htot, dzTop, Huniform, fnPow, prec): + """ + Optimizes the highest ratio dzFn() so that the sum(dz)=Htot. + """ + it = 0 + zc0 = 0; dz, H0 = dzFn( nk, Huniform, dzTop, fnPow, zc0 ) + zc2 = 2; dz, H2 = dzFn( nk, Huniform, dzTop, fnPow, zc2 ) + while H2-H0 > prec/8 and it<200: # Binary search + zc1 = (zc0 + zc2)/2; dz, H1 = dzFn( nk, Huniform, dzTop, fnPow, zc1 ) + if Htot0 or KhTh_Slope_Cff>0, + ! this is set to true regardless of what is in the + ! parameter file. +RESOLN_SCALED_KH = True ! [Boolean] default = False + ! If true, the Laplacian lateral viscosity is scaled away + ! when the first baroclinic deformation radius is well + ! resolved. +RESOLN_SCALED_KHTH = True ! [Boolean] default = False + ! If true, the interface depth diffusivity is scaled away + ! when the first baroclinic deformation radius is well + ! resolved. +KHTR_SLOPE_CFF = 0.25 ! [nondim] default = 0.0 + ! The nondimensional coefficient in the Visbeck formula + ! for the epipycnal tracer diffusivity +USE_STORED_SLOPES = True ! [Boolean] default = False + ! If true, the isopycnal slopes are calculated once and + ! stored for re-use. This uses more memory but avoids calling + ! the equation of state more times than should be necessary. + +! === module MOM_wave_speed === +ETA_TOLERANCE = 1.0E-06 ! [m] default = 3.75E-09 + ! The tolerance 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*ANGSTROM, and this should not be set less x + ! than about 10^-15*MAXIMUM_DEPTH. +ETA_TOLERANCE_AUX = 0.001 ! [m] default = 1.0E-06 + ! The tolerance for free-surface height discrepancies + ! between the barotropic solution and the sum of the + ! layer thicknesses when calculating the auxiliary + ! corrected velocities. By default, this is the same as + ! ETA_TOLERANCE, but can be made larger for efficiency. +CORIOLIS_SCHEME = "SADOURNY75_ENSTRO" ! default = "SADOURNY75_ENERGY" + ! CORIOLIS_SCHEME selects the discretization for the + ! Coriolis terms. Valid values are: + ! SADOURNY75_ENERGY - Sadourny, 1975; energy cons. + ! ARAKAWA_HSU90 - Arakawa & Hsu, 1990 + ! SADOURNY75_ENSTRO - Sadourny, 1975; enstrophy cons. + ! ARAKAWA_LAMB81 - Arakawa & Lamb, 1981; En. + Enst. + ! ARAKAWA_LAMB_BLEND - A blend of Arakawa & Lamb with + ! Arakawa & Hsu and Sadourny energy +BOUND_CORIOLIS = True ! [Boolean] default = False + ! If true, 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 Coriolis scheme if it + ! were possible to use centered difference thickness fluxes. +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. + +! === module MOM_hor_visc === +LAPLACIAN = True ! [Boolean] default = False + ! If true, use a Laplacian horizontal viscosity. +SMAGORINSKY_KH = True ! [Boolean] default = False + ! If true, use a Smagorinsky nonlinear eddy viscosity. +SMAG_LAP_CONST = 0.01 ! [nondim] default = 0.0 + ! The nondimensional Laplacian Smagorinsky constant, + ! often 0.15. +AH_VEL_SCALE = 0.025 ! [m s-1] default = 0.0 + ! The velocity scale which is multiplied by the cube of + ! the grid spacing to calculate the Laplacian viscosity. + ! The final viscosity is the largest of this scaled + ! viscosity, the Smagorinsky viscosity and AH. +SMAGORINSKY_AH = True ! [Boolean] default = False + ! If true, use a biharmonic Smagorinsky nonlinear eddy + ! viscosity. +SMAG_BI_CONST = 0.06 ! [nondim] default = 0.0 + ! The nondimensional biharmonic Smagorinsky constant, + ! typically 0.015 - 0.06. + +! === module MOM_vert_friction === +CHANNEL_DRAG = True ! [Boolean] default = False + ! If true, the bottom drag is exerted directly on each + ! layer proportional to the fraction of the bottom it + ! overlies. +U_TRUNC_FILE = "U_velocity_truncations" ! default = "" + ! 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" ! default = "" + ! 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. +HMIX_FIXED = 0.5 ! [m] + ! The prescribed depth over which the near-surface + ! viscosity and diffusivity are elevated when the bulk + ! mixed layer is not used. +KV = 1.0E-04 ! [m2 s-1] + ! The background kinematic viscosity in the interior. + ! The molecular value, ~1e-6 m2 s-1, may be used. +HBBL = 10.0 ! [m] + ! The thickness 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. +MAXVEL = 6.0 ! [m s-1] default = 3.0E+08 + ! The maximum velocity allowed before the velocity + ! components are truncated. + +! === module MOM_PointAccel === + +! === module MOM_set_visc === +PRANDTL_TURB = 1.0 ! [nondim] default = 0.0 + ! The turbulent Prandtl number applied to shear + ! instability. +DRAG_BG_VEL = 0.1 ! [m s-1] default = 0.0 + ! 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. DRAG_BG_VEL is only used when + ! BOTTOMDRAGLAW is defined. +BBL_USE_EOS = False ! [Boolean] default = False + ! If true, use the equation of state in determining the + ! properties of the bottom boundary layer. Otherwise use + ! the layer target potential densities. +BBL_THICK_MIN = 0.1 ! [m] default = 0.0 + ! The minimum bottom boundary layer thickness that can be + ! used with BOTTOMDRAGLAW. This might be + ! Kv / (cdrag * drag_bg_vel) to give Kv as the minimum + ! near-bottom viscosity. +SMAG_CONST_CHANNEL = 0.15 ! [nondim] default = 0.01 + ! 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 value used is + ! also 0.15 if the specified value is negative. + +! === module MOM_barotropic === +BOUND_BT_CORRECTION = True ! [Boolean] default = False + ! If true, the corrective pseudo mass-fluxes into the + ! barotropic solver are limited to values that require + ! less than 0.1*MAXVEL to be accommodated. +!BT x-halo = 0 ! + ! The barotropic x-halo size that is actually used. +!BT y-halo = 0 ! + ! The barotropic y-halo size that is actually used. +BT_PROJECT_VELOCITY = True ! [Boolean] default = False + ! If true, step the barotropic velocity first and project + ! out the velocity tendancy by 1+BEBT when calculating the + ! transport. The default (false) is to use a predictor + ! continuity step to find the pressure field, and then + ! to do a corrector continuity step using a weighted + ! average of the old and new velocities, with weights + ! of (1-BEBT) and BEBT. +BT_STRONG_DRAG = False ! [Boolean] default = True + ! If true, use a stronger estimate of the retarding + ! effects of strong bottom drag, by making it implicit + ! with the barotropic time-step instead of implicit with + ! the baroclinic time-step and dividing by the number of + ! barotropic steps. +BEBT = 0.2 ! [nondim] default = 0.1 + ! 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. +DTBT = -0.9 ! [s or nondim] default = -0.98 + ! 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. + ! Setting DTBT to 0 is the same as setting it to -0.98. + ! The value of DTBT that will actually be used is an + ! integer fraction of DT, rounding down. + +! === module MOM_thickness_diffuse === + +! === module MOM_mixed_layer_restrat === +MIXEDLAYER_RESTRAT = True ! [Boolean] default = False + ! If true, a density-gradient dependent re-stratifying + ! flow is imposed in the mixed layer. + ! This is only used if BULKMIXEDLAYER is true. +FOX_KEMPER_ML_RESTRAT_COEF = 10.0 ! [nondim] default = 0.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 the + ! 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 + ! by Fox-Kemper et al. (2010) +Z_OUTPUT_GRID_FILE = "vgrid_75_2m.nc" ! default = "" + ! The file that specifies the vertical grid for + ! depth-space diagnostics, or blank to disable + ! depth-space output. +!NK_ZSPACE (from file) = 35 ! [nondim] + ! The number of depth-space levels. This is determined + ! from the size of the variable zw in the output grid file. + +! === module MOM_diabatic_driver === +! The following parameters are used for diabatic processes. +PRESSURE_DEPENDENT_FRAZIL = True ! [Boolean] default = False + ! If true, use a pressure dependent freezing temperature + ! when making frazil. The default is false, which will be + ! faster but is inappropriate with ice-shelf cavities. +BBL_MIXING_AS_MAX = False ! [Boolean] default = True + ! 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. +HENYEY_IGW_BACKGROUND = True ! [Boolean] default = False + ! If true, use a latitude-dependent scaling for the near + ! surface background diffusivity, as described in + ! Harrison & Hallberg, JPO 2008. +N2_FLOOR_IOMEGA2 = 0.0 ! [nondim] default = 1.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. +KD = 2.0E-05 ! [m2 s-1] + ! The background diapycnal diffusivity of density in the + ! interior. Zero or the molecular value, ~1e-7 m2 s-1, + ! may be used. +KD_MIN = 2.0E-06 ! [m2 s-1] default = 2.0E-07 + ! The minimum diapycnal diffusivity. +KDML = 1.0E-04 ! [m2 s-1] default = 2.0E-05 + ! If BULKMIXEDLAYER is false, KDML is the elevated + ! diapycnal diffusivity in the topmost HMIX of fluid. + ! KDML is only used if BULKMIXEDLAYER is false. +INT_TIDE_DISSIPATION = True ! [Boolean] default = False + ! If true, use an internal tidal dissipation scheme to + ! drive diapycnal mixing, along the lines of St. Laurent + ! et al. (2002) and Simmons et al. (2004). +INT_TIDE_DECAY_SCALE = 300.3003003003003 ! [m] default = 0.0 + ! The decay scale away from the bottom for tidal TKE with + ! the new coding when INT_TIDE_DISSIPATION is used. +KAPPA_ITIDES = 6.28319E-04 ! [m-1] default = 6.283185307179586E-04 + ! A topographic wavenumber used with INT_TIDE_DISSIPATION. + ! The default is 2pi/10 km, as in St.Laurent et al. 2002. +KAPPA_H2_FACTOR = 0.84 ! [nondim] default = 1.0 + ! A scaling factor for the roughness amplitude with nINT_TIDE_DISSIPATION. +TKE_ITIDE_MAX = 0.1 ! [W m-2] default = 1000.0 + ! The maximum internal tide energy source availble to mix + ! above the bottom boundary layer with INT_TIDE_DISSIPATION. +READ_TIDEAMP = True ! [Boolean] default = False + ! If true, read a file (given by TIDEAMP_FILE) containing + ! the tidal amplitude with INT_TIDE_DISSIPATION. +TIDEAMP_FILE = "tidal_amplitude.nc" ! default = "tideamp.nc" + ! The path to the file containing the spatially varying + ! tidal amplitudes with INT_TIDE_DISSIPATION. +H2_FILE = "topog.nc" ! + ! The path to the file containing the sub-grid-scale + ! topographic roughness amplitude with INT_TIDE_DISSIPATION. + +! === module MOM_kappa_shear === +! Parameterization of shear-driven turbulence following Jackson, Hallberg and Legg, JPO 2008 +USE_JACKSON_PARAM = True ! [Boolean] default = False + ! If true, use the Jackson-Hallberg-Legg (JPO 2008) + ! shear mixing parameterization. +MAX_RINO_IT = 25 ! [nondim] default = 50 + ! The maximum number of iterations that may be used to + ! estimate the Richardson number driven mixing. + +! === module MOM_KPP === +! This is the MOM wrapper to CVmix:KPP +! See http://code.google.com/p/cvmix/ +USE_KPP = True ! [Boolean] default = False + ! If true, turns on the [CVmix] KPP scheme of Large et al., 1984, + ! to calculate diffusivities and non-local transport in the OBL. +KPP% +NLT_SHAPE = "PARABOLIC" ! default = "CVMIX" + ! The shape of the nonlocal transport (or redistribution of surface + ! forcina. Allowed values are: + ! CVMIX - Uses the profile from CVmix + ! LINEAR - A linear profile, 1-sigma + ! PARABOLIC - A paroblic profile, (1-sigma)^2 + ! CUBIC - A cubic profile, (1-sigma)^2(1+2*sigma) + ! CUBIC_LMD - The original KPP profile +KPP_IS_ADDITIVE = True ! [Boolean] default = False + ! If true, adds KPP diffusivity to the existing diffusivity. If false, replaces exisiting diffusivity with KPP diffusivity wherever the latter is non-zero. +%KPP + +! === module MOM_diffConvection === +! This module implements enhanced diffusivity as a +! function of static stability, N^2. +CONVECTION% +%CONVECTION + +! === module MOM_entrain_diffusive === + +! === module MOM_regularize_layers === + +! === module MOM_opacity === +VAR_PEN_SW = True ! [Boolean] default = False + ! If true, use one of the CHL_A schemes specified by + ! OPACITY_SCHEME to determine the e-folding depth of + ! incoming short wave radiation. +CHL_FILE = "seawifs_1998-2006_smoothed_2X.nc" ! + ! CHL_FILE is the file containing chl_a concentrations in + ! the variable CHL_A. It is used when VAR_PEN_SW and + ! CHL_FROM_FILE are true. +PEN_SW_NBANDS = 3 ! default = 1 + ! The number of bands of penetrating shortwave radiation. + +! === module MOM_tracer_advect === +TRACER_ADVECTION_SCHEME = "PPM:H3" ! default = "PLM" + ! The horizontal transport scheme for tracers: + ! PLM - Piecewise Linear Method + ! PPM:H3 - Piecewise Parabolic Method (Huyhn 3rd order) + +! === module MOM_tracer_hor_diff === +CHECK_DIFFUSIVE_CFL = True ! [Boolean] default = False + ! If true, use enough iterations the diffusion to ensure + ! that the diffusive equivalent of the CFL limit is not + ! violated. If false, always use 1 iteration. + +! === module ocean_model_init === +ENERGYSAVEDAYS = 0.25 ! [days] default = 1.0 + ! The interval in units of TIMEUNIT between saves of the + ! energies of the run and other globally summed diagnostics. + +! === module MOM_surface_forcing === +MAX_P_SURF = 0.0 ! [Pa] default = -1.0 + ! The maximum surface pressure that can be exerted by the + ! atmosphere and floating sea-ice or ice shelves. 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. +WIND_STAGGER = "C" ! default = "C" + ! A case-insensitive character string to indicate the + ! staggering of the input wind stress field. Valid + ! values are 'A', 'B', or 'C'. +CD_TIDES = 0.0018 ! [nondim] default = 1.0E-04 + ! The drag coefficient that applies to the tides. + +! === module MOM_sum_output === +MAXTRUNC = 100000 ! [truncations save_interval-1] default = 0 + ! 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. diff --git a/ice_ocean_SIS2/FLOR2/MOM_layout b/ice_ocean_SIS2/FLOR2/MOM_layout new file mode 100644 index 0000000000..02f04eba0f --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/MOM_layout @@ -0,0 +1,6 @@ +! These parameters are for testing mask_tables in a non-FRE environment. +! This file should not be used in production unless you really want to +! use this layout. +LAYOUT = 18,16 +IO_LAYOUT = 2,2 +!MASKTABLE = "mask_table.96.32x18" ! 32*18-96 = 480 PEs diff --git a/ice_ocean_SIS2/FLOR2/MOM_override b/ice_ocean_SIS2/FLOR2/MOM_override new file mode 100644 index 0000000000..35b1c55f99 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/MOM_override @@ -0,0 +1,27 @@ +! Blank file in which we can put "overrides" for parameters +!VERBOSITY = 9 +!To make MEKE active +!MEKE_KHTH_FAC = 1.0 +!MEKE_ALPHA_RHINES = 0.05 +!MEKE_ALPHA_EADY = 0.2 +!Variants +!MEKE_KHMEKE_FAC = 1.0 +!KH_RES_FN_POWER = 100 +!INTERPOLATE_RES_FN = False +!GILL_EQUATORIAL_LD = True +!To make backscatter +!#override CORIOLIS_SCHEME = "ARAKAWA_HSU90" +!#override MEKE_GMCOEFF = 0.0 +!#override MEKE_FRCOEFF = 1.0 +!#override MEKE_ALPHA_RHINES = 0. +!#override MEKE_ALPHA_EADY = 0. +!#override MEKE_ALPHA_GRID = 1. +!#override MEKE_KH = 600. +!#override MEKE_VISCOSITY_COEFF = -0.4 +!#override SMAGORINSKY_KH = False +!#override AH_VEL_SCALE = 0. +!MEKE_COLD_START = True +!KH_RES_SCALE_COEF = 0.3 +!KH_RES_FN_POWER = 10 +!INTERPOLATE_RES_FN = False +!GILL_EQUATORIAL_LD = True diff --git a/ice_ocean_SIS2/FLOR2/MOM_parameter_doc.all b/ice_ocean_SIS2/FLOR2/MOM_parameter_doc.all new file mode 100644 index 0000000000..5a953e5476 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/MOM_parameter_doc.all @@ -0,0 +1,1621 @@ +! This file was written by the model and records all non-layout parameters used at run-time. +REENTRANT_X = True ! [Boolean] default = True + ! If true, the domain is zonally reentrant. +REENTRANT_Y = False ! [Boolean] default = False + ! If true, the domain is meridionally reentrant. +TRIPOLAR_N = True ! [Boolean] default = False + ! Use tripolar connectivity at the northern edge of the + ! domain. With TRIPOLAR_N, NIGLOBAL must be even. +NIGLOBAL = 360 ! + ! The total number of thickness grid points in the + ! x-direction in the physical domain. With STATIC_MEMORY_ + ! this is set in MOM_memory.h at compile time. +NJGLOBAL = 320 ! + ! The total number of thickness grid points in the + ! y-direction in the physical domain. With STATIC_MEMORY_ + ! this is set in MOM_memory.h at compile time. + +! === module MOM_grid === +! Parameters providing information about the vertical grid. +G_EARTH = 9.8 ! [m s-2] default = 9.8 + ! The gravitational acceleration of the Earth. +RHO_0 = 1035.0 ! [kg m-3] default = 1035.0 + ! The mean ocean density used with BOUSSINESQ true to + ! calculate accelerations and the mass for conservation + ! properties, or with BOUSSINSEQ false to convert some + ! parameters from vertical units of m to kg m-2. +FIRST_DIRECTION = 0 ! default = 0 + ! An integer that indicates which direction goes first + ! in parts of the code that use directionally split + ! updates, with even numbers (or 0) used for x- first + ! and odd numbers used for y-first. +BOUSSINESQ = True ! [Boolean] default = True + ! If true, make the Boussinesq approximation. +ANGSTROM = 1.0E-10 ! [m] default = 1.0E-10 + ! The minumum layer thickness, usually one-Angstrom. +BATHYMETRY_AT_VEL = False ! [Boolean] default = False + ! If true, there are separate values for the basin depths + ! at velocity points. Otherwise the effects of of + ! topography are entirely determined from thickness points. +NK = 75 ! [nondim] + ! The number of model layers. + +! === module MOM_verticalGrid === +! Parameters providing information about the vertical grid. +AVAILABLE_DIAGS_FILE = "available_diags.000000" ! default = "available_diags.000000" + ! A file into which to write a list of all available + ! ocean diagnostics that can be included in a diag_table. + +! === module MOM === +VERBOSITY = 2 ! default = 2 + ! Integer controlling level of messaging + ! 0 = Only FATAL messages + ! 2 = Only FATAL, WARNING, NOTE [default] + ! 9 = All) +SPLIT = True ! [Boolean] default = True + ! Use the split time stepping if true. +USE_LEGACY_SPLIT = False ! [Boolean] default = False + ! If true, use the full range of options available from + ! the older GOLD-derived split time stepping code. +ENABLE_THERMODYNAMICS = True ! [Boolean] default = True + ! If true, Temperature and salinity are used as state + ! variables. +USE_EOS = True ! [Boolean] default = True + ! If true, density is calculated from temperature and + ! salinity with an equation of state. If USE_EOS is + ! true, ENABLE_THERMODYNAMICS must be true as well. +DIABATIC_FIRST = True ! [Boolean] default = False + ! If true, apply diabatic and thermodynamic processes, + ! including buoyancy forcing and mass gain or loss, + ! before stepping the dynamics forward. +ADIABATIC = False ! [Boolean] default = False + ! There are no diapycnal mass fluxes if ADIABATIC is + ! true. This assumes that KD = KDML = 0.0 and that + ! there is no buoyancy forcing, but makes the model + ! faster by eliminating subroutine calls. +BULKMIXEDLAYER = False ! [Boolean] default = True + ! If true, 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 true. + ! The default is the same setting as ENABLE_THERMODYNAMICS. +USE_REGRIDDING = True ! [Boolean] default = False + ! If True, use the ALE algorithm (regridding/remapping). + ! If False, use the layered isopycnal algorithm. +THICKNESSDIFFUSE = True ! [Boolean] default = False + ! If true, interfaces or isopycnal surfaces are diffused, + ! depending on the value of FULL_THICKNESSDIFFUSE. +THICKNESSDIFFUSE_FIRST = True ! [Boolean] default = False + ! If true, do thickness diffusion before dynamics. + ! This is only used if THICKNESSDIFFUSE is true. +DEBUG = False ! [Boolean] default = False + ! If true, write out verbose debugging data. +DEBUG_TRUNCATIONS = False ! [Boolean] default = False + ! If true, calculate all diagnostics that are useful for + ! debugging truncations. +DT = 3600.0 ! [s] + ! The (baroclinic) dynamics time step. The time-step that + ! is actually used will be an integer fraction of the + ! forcing time-step (DT_FORCING in ocean-only mode or the + ! coupling timestep in coupled mode.) +DT_THERM = 7200.0 ! [s] default = 3600.0 + ! The thermodynamic and tracer advection time step. + ! Ideally DT_THERM should be an integer multiple of DT + ! and less than the forcing or coupling time-step, unless + ! THERMO_SPANS_COUPLING is true, in which case DT_THERM + ! can be an integer multiple of the coupling timestep. By + ! default DT_THERM is set to DT. +THERMO_SPANS_COUPLING = False ! [Boolean] default = False + ! If true, the MOM will take thermodynamic and tracer + ! timesteps that can be longer than the coupling timestep. + ! The actual thermodynamic timestep that is used in this + ! case is the largest integer multiple of the coupling + ! timestep that is less than or equal to DT_THERM. +HMIX_SFC_PROP = 1.0 ! [m] default = 1.0 + ! If BULKMIXEDLAYER is false, HMIX_SFC_PROP is the depth + ! over which to average to find surface properties like + ! SST and SSS or density (but not surface velocities). +MIN_Z_DIAG_INTERVAL = 2.16E+04 ! [s] default = 0.0 + ! 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. +INTERPOLATE_P_SURF = False ! [Boolean] default = False + ! If true, linearly interpolate the surface pressure + ! over the coupling time step, using the specified value + ! at the end of the step. +SSH_SMOOTHING_PASSES = 0.0 ! [nondim] default = 0.0 + ! The number of Laplacian smoothing passes to apply to the + ! the sea surface height that is reported to the sea-ice. +DTBT_RESET_PERIOD = -1.0 ! [s] default = 7200.0 + ! The period between recalculations of DTBT (if DTBT <= 0). + ! 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. The default is + ! set by DT_THERM. This is only used if SPLIT is true. +FRAZIL = True ! [Boolean] default = False + ! If true, water freezes if it gets too cold, and the + ! the accumulated heat deficit is returned in the + ! surface state. FRAZIL is only used if + ! ENABLE_THERMODYNAMICS is true. +DO_GEOTHERMAL = False ! [Boolean] default = False + ! If true, apply geothermal heating. +BOUND_SALINITY = True ! [Boolean] default = False + ! If true, limit salinity to being positive. (The sea-ice + ! model may ask for more salt than is available and + ! drive the salinity negative otherwise.) +C_P = 3925.0 ! [J kg-1 K-1] default = 3991.86795711963 + ! The heat capacity of sea water, approximated as a + ! constant. This is only used if ENABLE_THERMODYNAMICS is + ! true. The default value is from the TEOS-10 definition + ! of conservative temperature. +P_REF = 2.0E+07 ! [Pa] default = 2.0E+07 + ! The pressure that is used for calculating the coordinate + ! density. (1 Pa = 1e4 dbar, so 2e7 is commonly used.) + ! This is only used if USE_EOS and ENABLE_THERMODYNAMICS + ! are true. +CHECK_BAD_SURFACE_VALS = True ! [Boolean] default = False + ! If true, check the surface state for ridiculous values. +BAD_VAL_SSH_MAX = 50.0 ! [m] default = 20.0 + ! The value of SSH above which a bad value message is + ! triggered, if CHECK_BAD_SURFACE_VALS is true. +BAD_VAL_SSS_MAX = 75.0 ! [PSU] default = 45.0 + ! The value of SSS above which a bad value message is + ! triggered, if CHECK_BAD_SURFACE_VALS is true. +BAD_VAL_SST_MAX = 55.0 ! [deg C] default = 45.0 + ! The value of SST above which a bad value message is + ! triggered, if CHECK_BAD_SURFACE_VALS is true. +BAD_VAL_SST_MIN = -3.0 ! [deg C] default = -2.1 + ! The value of SST below which a bad value message is + ! triggered, if CHECK_BAD_SURFACE_VALS is true. +SAVE_INITIAL_CONDS = False ! [Boolean] default = False + ! If true, write the initial conditions to a file given + ! by IC_OUTPUT_FILE. +IC_OUTPUT_FILE = "MOM_IC" ! default = "MOM_IC" + ! The file into which to write the initial conditions. + +! === module MOM_tracer_registry === +EQN_OF_STATE = "WRIGHT" ! default = "WRIGHT" + ! EQN_OF_STATE determines which ocean equation of state + ! should be used. Currently, the valid choices are + ! "LINEAR", "UNESCO", and "WRIGHT". + ! This is only used if USE_EOS is true. +EOS_QUADRATURE = False ! [Boolean] default = False + ! If true, always use the generic (quadrature) code + ! code for the integrals of density. +TFREEZE_FORM = "LINEAR" ! default = "LINEAR" + ! TFREEZE_FORM determines which expression should be + ! used for the freezing point. Currently, the valid + ! choices are "LINEAR", "MILLERO_78". +TFREEZE_S0_P0 = 0.0 ! [deg C] default = 0.0 + ! When TFREEZE_FORM=LINEAR, + ! this is the freezing potential temperature at + ! S=0, P=0. +DTFREEZE_DS = -0.054 ! [deg C PSU-1] default = -0.054 + ! When TFREEZE_FORM=LINEAR, + ! this is the derivative of the freezing potential + ! temperature with salinity. +DTFREEZE_DP = -7.75E-08 ! [deg C Pa-1] default = 0.0 + ! When TFREEZE_FORM=LINEAR, + ! this is the derivative of the freezing potential + ! temperature with pressure. +PARALLEL_RESTARTFILES = True ! [Boolean] default = False + ! If true, each processor writes its own restart file, + ! otherwise a single restart file is generated +RESTARTFILE = "MOM.res" ! default = "MOM.res" + ! The name-root of the restart file. +LARGE_FILE_SUPPORT = True ! [Boolean] default = True + ! If true, use the file-size limits with NetCDF large + ! file support (4Gb), otherwise the limit is 2Gb. +MAX_FIELDS = 100 ! default = 100 + ! The maximum number of restart fields that can be used. + +! === module MOM_tracer_flow_control === +USE_USER_TRACER_EXAMPLE = False ! [Boolean] default = False + ! If true, use the USER_tracer_example tracer package. +USE_DOME_TRACER = False ! [Boolean] default = False + ! If true, use the DOME_tracer tracer package. +USE_IDEAL_AGE_TRACER = True ! [Boolean] default = False + ! If true, use the ideal_age_example tracer package. +USE_OIL_TRACER = False ! [Boolean] default = False + ! If true, use the oil_tracer tracer package. +USE_ADVECTION_TEST_TRACER = False ! [Boolean] default = False + ! If true, use the advection_test_tracer tracer package. +USE_OCMIP2_CFC = False ! [Boolean] default = False + ! If true, use the MOM_OCMIP2_CFC tracer package. +USE_generic_tracer = False ! [Boolean] default = False + ! If true and _USE_GENERIC_TRACER is defined as a + ! preprocessor macro, use the MOM_generic_tracer packages. + +! === module ideal_age_example === +DO_IDEAL_AGE = True ! [Boolean] default = True + ! If true, use an ideal age tracer that is set to 0 age + ! in the mixed layer and ages at unit rate in the interior. +DO_IDEAL_VINTAGE = False ! [Boolean] default = False + ! If true, 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 ! [Boolean] default = False + ! If true, use an ideal age tracer that is everywhere 0 + ! before IDEAL_AGE_DATED_START_YEAR, but the behaves like + ! the standard ideal age tracer - i.e. is set to 0 age in + ! the mixed layer and ages at unit rate in the interior. +AGE_IC_FILE = "" ! default = "" + ! The file in which the age-tracer initial values can be + ! found, or an empty string for internal initialization. +AGE_IC_FILE_IS_Z = False ! [Boolean] default = False + ! If true, AGE_IC_FILE is in depth space, not layer space +MASK_MASSLESS_TRACERS = False ! [Boolean] default = False + ! If true, the tracers are masked out in massless layer. + ! This can be a problem with time-averages. +TRACERS_MAY_REINIT = False ! [Boolean] default = False + ! If true, tracers may go through the initialization code + ! if they are not found in the restart files. Otherwise + ! it is a fatal error if the tracers are not found in the + ! restart files of a restarted run. +INPUTDIR = "INPUT" ! default = "." + ! The directory in which input files are found. + +! === module MOM_grid_init === +GRID_CONFIG = "mosaic" ! + ! A character string that determines the method for + ! defining the horizontal grid. Current options are: + ! mosaic - read the grid from a mosaic (supergrid) + ! file set by GRID_FILE. + ! cartesian - use a (flat) Cartesian grid. + ! spherical - use a simple spherical grid. + ! mercator - use a Mercator spherical grid. +GRID_FILE = "ocean_hgrid.nc" ! + ! Name of the file from which to read horizontal grid data. +TOPO_CONFIG = "file" ! + ! This specifies how bathymetry is specified: + ! file - read bathymetric information from the file + ! specified by (TOPO_FILE). + ! flat - flat bottom set to MAXIMUM_DEPTH. + ! bowl - an analytically specified bowl-shaped basin + ! ranging between MAXIMUM_DEPTH and MINIMUM_DEPTH. + ! spoon - a similar shape to 'bowl', but with an vertical + ! wall at the southern face. + ! halfpipe - a zonally uniform channel with a half-sine + ! profile in the meridional direction. + ! benchmark - use the benchmark test case topography. + ! DOME - use a slope and channel configuration for the + ! DOME sill-overflow test case. + ! DOME2D - use a shelf and slope configuration for the + ! DOME2D gravity current/overflow test case. + ! seamount - Gaussian bump for spontaneous motion test case. + ! Phillips - ACC-like idealized topography used in the Phillips config. + ! USER - call a user modified routine. +TOPO_FILE = "topog.nc" ! default = "topog.nc" + ! The file from which the bathymetry is read. +TOPO_VARNAME = "depth" ! default = "depth" + ! The name of the bathymetry variable in TOPO_FILE. +MAXIMUM_DEPTH = 6500.0 ! [m] + ! The maximum depth of the ocean. +MINIMUM_DEPTH = 9.5 ! [m] default = 0.0 + ! If MASKING_DEPTH is unspecified, then anything shallower than + ! MINIMUM_DEPTH is assumed to be land and all fluxes are masked out. + ! If MASKING_DEPTH is specified, then all depths shallower than + ! MINIMUM_DEPTH but depper than MASKING_DEPTH are rounded to MINIMUM_DEPTH. +COORD_CONFIG = "file" ! + ! This specifies how layers are to be defined: + ! file - read coordinate information from the file + ! specified by (COORD_FILE). + ! linear - linear based on interfaces not layesrs. + ! ts_ref - use reference temperature and salinity + ! ts_range - use range of 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 temperature and salinity profiles + ! (read from COORD_FILE) to set layer densities. + ! USER - call a user modified routine. +GFS = 9.8 ! [m s-2] default = 9.8 + ! The reduced gravity at the free surface. +COORD_FILE = "layer_coord.nc" ! + ! The file from which the coordinate densities are read. +COORD_VAR = "Layer" ! default = "Layer" + ! The variable in COORD_FILE that is to be used for the + ! coordinate densities. +MASKING_DEPTH = 0.0 ! [m] default = -9999.0 + ! The depth below which to mask points as land points, for which all + ! fluxes are zeroed out. MASKING_DEPTH is ignored if negative. +APPLY_OBC_U_FLATHER_EAST = False ! [Boolean] default = False + ! Apply a Flather open boundary condition on the eastern + ! side of the global domain +APPLY_OBC_U_FLATHER_WEST = False ! [Boolean] default = False + ! Apply a Flather open boundary condition on the western + ! side of the global domain +APPLY_OBC_V_FLATHER_NORTH = False ! [Boolean] default = False + ! Apply a Flather open boundary condition on the northern + ! side of the global domain +APPLY_OBC_V_FLATHER_SOUTH = False ! [Boolean] default = False + ! Apply a Flather open boundary condition on the southern + ! side of the global domain +CHANNEL_CONFIG = "list" ! default = "none" + ! A parameter that determines which set of channels are + ! restricted to specific widths. Options are: + ! none - All channels have the grid width. + ! global_1deg - Sets 16 specific channels appropriate + ! for a 1-degree model, as used in CM2G. + ! list - Read the channel locations and widths from a + ! text file, like MOM_channel_list in the MOM_SIS + ! test case. + ! file - Read open face widths everywhere from a + ! NetCDF file on the model grid. +CHANNEL_LIST_FILE = "MOM_channels_FLOR" ! default = "MOM_channel_list" + ! The file from which the list of narrowed channels is read. +CHANNEL_LIST_360_LON_CHECK = True ! [Boolean] default = True + ! If true, the channel configuration list works for any + ! longitudes in the range of -360 to 360. +ROTATION = "2omegasinlat" ! default = "2omegasinlat" + ! This specifies how the Coriolis parameter is specified: + ! 2omegasinlat - Use twice the planetary rotation rate + ! times the sine of latitude. + ! betaplane - Use a beta-plane or f-plane. + ! USER - call a user modified routine. +OMEGA = 7.2921E-05 ! [s-1] default = 7.2921E-05 + ! The rotation rate of the earth. +WRITE_GEOM = 0 ! default = 1 + ! If =0, never write the geometry and vertical grid files. + ! If =1, write the geometry and vertical grid files only for + ! a new simulation. If =2, always write the geometry and + ! vertical grid files. Other values are invalid. +BOUNDARY_EXTRAPOLATION_PRESSURE = True ! [Boolean] default = True + ! When defined, the reconstruction is extrapolated + ! within boundary cells rather than assume PCM for the. + ! calculation of pressure. e.g. if PPM is used, a + ! PPM reconstruction will also be used within + ! boundary cells. +RECONSTRUCT_FOR_PRESSURE = True ! [Boolean] default = True + ! If True, use vertical reconstruction of T/S within + ! the integrals of teh FV pressure gradient calculation. + ! If False, use the constant-by-layer algorithm. + ! By default, this is True when using ALE and False otherwise. +PRESSURE_RECONSTRUCTION_SCHEME = 1 ! default = 1 + ! Type of vertical reconstruction of T/S to use in integrals + ! within the FV pressure gradient calculation. 1: PLM reconstruction. + ! 2: PPM reconstruction. +REGRIDDING_COORDINATE_MODE = "Z*" ! default = "LAYER" + ! Coordinate mode for vertical regridding. + ! Choose among the following possibilities: + ! LAYER - Isopycnal or stacked shallow water layers + ! Z* - stetched geopotential z* + ! SIGMA - terrain following coordinates + ! RHO - continuous isopycnal +REGRIDDING_COORDINATE_UNITS = "m" ! default = "m" + ! Units of the regridding coordinuate. +INTERPOLATION_SCHEME = "P1M_H2" ! default = "P1M_H2" + ! This sets the interpolation scheme to use to + ! determine the new grid. These parameters are + ! only relevant when REGRIDDING_COORDINATE_MODE is + ! set to a function of state. Otherwise, it is not + ! used. It can be one of the following schemes: + ! P1M_H2 (2nd-order accurate) + ! P1M_H4 (2nd-order accurate) + ! P1M_IH4 (2nd-order accurate) + ! PLM (2nd-order accurate) + ! PPM_H4 (3rd-order accurate) + ! PPM_IH4 (3rd-order accurate) + ! P3M_IH4IH3 (4th-order accurate) + ! P3M_IH6IH5 (4th-order accurate) + ! PQM_IH4IH3 (4th-order accurate) + ! PQM_IH6IH5 (5th-order accurate) +ALE_COORDINATE_CONFIG = "FILE:INPUT/vgrid_75_2m.nc,dz" ! default = "UNIFORM" + ! Determines how to specify the coordinate + ! resolution. Valid options are: + ! PARAM - use the vector-parameter ALE_RESOLUTION + ! UNIFORM - uniformly distributed + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,Z +!ALE_RESOLUTION = 4*2.0, 2*2.01, 2.02, 2.03, 2.05, 2.08, 2.11, 2.15, 2.2, 2.27, 2.34, 2.44, 2.55, 2.69, 2.85, 3.04, 3.27, 3.54, 3.85, 4.22, 4.66, 5.18, 5.79, 6.52, 7.37, 8.37, 9.55, 10.94, 12.57, 14.48, 16.72, 19.33, 22.36, 25.87, 29.91, 34.53, 39.79, 45.72, 52.37, 59.76, 67.89, 76.74, 86.29, 96.47, 107.2, 118.35, 129.81, 141.42, 153.01, 164.41, 175.47, 186.01, 195.9, 205.01, 213.27, 220.6, 226.99, 232.43, 236.96, 240.63, 243.52, 245.72, 247.33, 248.45, 249.18, 249.62, 249.86, 249.96, 249.99, 2*250.0 ! [m] + ! The distribution of vertical resolution for the target + ! grid used for Eulerian-like coordinates. For example, + ! in z-coordinate mode, the parameter is a list of level + ! thicknesses (in m). In sigma-coordinate mode, the list + ! is of non-dimensional fractions of the water column. +MIN_THICKNESS = 0.001 ! [m] default = 0.001 + ! When regridding, this is the minimum layer + ! thickness allowed. +BOUNDARY_EXTRAPOLATION = False ! [Boolean] default = False + ! When defined, a proper high-order reconstruction + ! scheme is used within boundary cells rather + ! than PCM. E.g., if PPM is used for remapping, a + ! PPM reconstruction will also be used within + ! boundary cells. +REMAPPING_SCHEME = "PPM_H4" ! default = "PLM" + ! This sets the reconstruction scheme used + ! for vertical remapping for all variables. + ! It can be one of the following schemes: + ! PCM (1st-order accurate) + ! PLM (2nd-order accurate) + ! PPM_H4 (3rd-order accurate) + ! PPM_IH4 (3rd-order accurate) + ! PQM_IH4IH3 (4th-order accurate) + ! PQM_IH6IH5 (5th-order accurate) +INIT_LAYERS_FROM_Z_FILE = True ! [Boolean] default = False + ! If true, intialize the layer thicknesses, temperatures, + ! and salnities from a Z-space file on a latitude- + ! longitude grid. +TEMP_SALT_Z_INIT_FILE = "WOA05_pottemp_salt.nc" ! default = "temp_salt_z.nc" + ! The name of the z-space input file used to initialize + ! the layer thicknesses, temperatures and salinities. +Z_INIT_FILE_PTEMP_VAR = "PTEMP" ! default = "ptemp" + ! The name of the potential temperature variable in + ! TEMP_SALT_Z_INIT_FILE. +Z_INIT_FILE_SALT_VAR = "SALT" ! default = "salt" + ! The name of the salinity variable in + ! TEMP_SALT_Z_INIT_FILE. +Z_INIT_HOMOGENIZE = False ! [Boolean] default = False + ! If True, then horizontally homogenize the interpolated + ! initial conditions. +Z_INIT_ALE_REMAPPING = True ! [Boolean] default = False + ! If True, then remap straight to model coordinate from file. +Z_INIT_REMAPPING_SCHEME = "PPM_IH4" ! default = "PPM_IH4" + ! The remapping scheme to use if using Z_INIT_ALE_REMAPPING + ! is True. +VELOCITY_CONFIG = "zero" ! default = "zero" + ! A string that determines how the initial velocities + ! are specified for a new run: + ! file - read velocities from the file specified + ! by (VELOCITY_FILE). + ! zero - the fluid is initially at rest. + ! uniform - the flow is uniform (determined by + ! parameters TORUS_U and TORUS_V). + ! rossby_front - a mixed layer front in thermal wind balance. + ! USER - call a user modified routine. +CONVERT_THICKNESS_UNITS = False ! [Boolean] default = False + ! If true, convert the thickness initial conditions from + ! units of m to kg m-2 or vice versa, depending on whether + ! BOUSSINESQ is defined. This does not apply if a restart + ! file is read. +DEPRESS_INITIAL_SURFACE = False ! [Boolean] default = False + ! If true, depress the initial surface to avoid huge + ! tsunamis when a large surface pressure is applied. +SPONGE = False ! [Boolean] default = False + ! If true, sponges may be applied anywhere in the domain. + ! The exact location and properties of those sponges are + ! specified via SPONGE_CONFIG. +APPLY_OBC_U = False ! [Boolean] default = False + ! If true, open boundary conditions may be set at some + ! u-points, with the configuration controlled by OBC_CONFIG +APPLY_OBC_V = False ! [Boolean] default = False + ! If true, open boundary conditions may be set at some + ! v-points, with the configuration controlled by OBC_CONFIG + +! === module MOM_MEKE === +USE_MEKE = True ! [Boolean] default = False + ! If true, turns on the MEKE scheme which calculates + ! a sub-grid mesoscale eddy kinetic energy budget. +MEKE_DAMPING = 0.0 ! [s-1] default = 0.0 + ! The local depth-indepented MEKE dissipation rate. +MEKE_CD_SCALE = 0.0 ! [nondim] default = 0.0 + ! The ratio of the bottom eddy velocity to the column mean + ! eddy velocity, i.e. sqrt(2*MEKE). This should be less than 1 + ! to account for the surface intensification of MEKE. +MEKE_CB = 25.0 ! [nondim] default = 25.0 + ! A coefficient in the expression for the ratio of bottom projected + ! eddy energy and mean column energy (see Jansen et al. 2015). +MEKE_MIN_GAMMA2 = 1.0E-04 ! [nondim] default = 1.0E-04 + ! The minimum allowed value of gamma_b^2. +MEKE_CT = 50.0 ! [nondim] default = 50.0 + ! A coefficient in the expression for the ratio of barotropic + ! eddy energy and mean column energy (see Jansen et al. 2015). +MEKE_GMCOEFF = 1.0 ! [nondim] default = -1.0 + ! The efficiency of the conversion of potential energy + ! into MEKE by the thickness mixing parameterization. + ! If MEKE_GMCOEFF is negative, this conversion is not + ! used or calculated. +MEKE_FRCOEFF = -1.0 ! [nondim] default = -1.0 + ! The efficiency of the conversion of mean energy into + ! MEKE. If MEKE_FRCOEFF is negative, this conversion + ! is not used or calculated. +MEKE_BGSRC = 1.0E-13 ! [W kg-1] default = 0.0 + ! A background energy source for MEKE. +MEKE_KH = -1.0 ! [m2 s-1] default = -1.0 + ! A background lateral diffusivity of MEKE. + ! Use a negative value to not apply lateral diffusion to MEKE. +MEKE_K4 = -1.0 ! [m4 s-1] default = -1.0 + ! A lateral bi-harmonic diffusivity of MEKE. + ! Use a negative value to not apply bi-harmonic diffusion to MEKE. +MEKE_DTSCALE = 1.0 ! [nondim] default = 1.0 + ! A scaling factor to accelerate the time evolution of MEKE. +MEKE_KHCOEFF = 1.0 ! [nondim] default = 1.0 + ! A scaling factor in the expression for eddy diffusivity + ! which is otherwise proportional to the MEKE velocity- + ! scale times an eddy mixing-length. This factor + ! must be >0 for MEKE to contribute to the thickness/ + ! and tracer diffusivity in the rest of the model. +MEKE_USCALE = 0.0 ! [m s-1] default = 0.0 + ! The background velocity that is combined with MEKE to + ! calculate the bottom drag. +MEKE_VISC_DRAG = True ! [Boolean] default = True + ! If true, use the vertvisc_type to calculate the bottom + ! drag acting on MEKE. +MEKE_KHTH_FAC = 0.0 ! [nondim] default = 0.0 + ! A factor that maps MEKE%Kh to KhTh. +MEKE_KHTR_FAC = 0.0 ! [nondim] default = 0.0 + ! A factor that maps MEKE%Kh to KhTr. +MEKE_KHMEKE_FAC = 0.0 ! [nondim] default = 0.0 + ! A factor that maps MEKE%Kh to Kh for MEKE itself. +MEKE_OLD_LSCALE = False ! [Boolean] default = False + ! If true, use the old formula for length scale which is + ! a function of grid spacing and deformation radius. +MEKE_RD_MAX_SCALE = False ! [nondim] default = False + ! If true, the length scale used by MEKE is the minimum of + ! the deformation radius or grid-spacing. Only used if + ! MEKE_OLD_LSCALE=True +MEKE_VISCOSITY_COEFF = 0.0 ! [nondim] default = 0.0 + ! If non-zero, is the scaling coefficient in the expression for + ! viscosity used to parameterize lateral momentum mixing by + ! unresolved eddies represented by MEKE. Can be negative to + ! represent backscatter from the unresolved eddies. +MEKE_FIXED_MIXING_LENGTH = 0.0 ! [m] default = 0.0 + ! If positive, is a fixed length contribution to the expression + ! for mixing length used in MEKE-derived diffusiviity. +MEKE_ALPHA_DEFORM = 0.0 ! [nondim] default = 0.0 + ! If positive, is a coefficient weighting the deformation scale + ! in the expression for mixing length used in MEKE-derived diffusiviity. +MEKE_ALPHA_RHINES = 0.05 ! [nondim] default = 0.05 + ! If positive, is a coefficient weighting the Rhines scale + ! in the expression for mixing length used in MEKE-derived diffusiviity. +MEKE_ALPHA_EADY = 0.05 ! [nondim] default = 0.05 + ! If positive, is a coefficient weighting the Eady length scale + ! in the expression for mixing length used in MEKE-derived diffusiviity. +MEKE_ALPHA_FRICT = 0.0 ! [nondim] default = 0.0 + ! If positive, is a coefficient weighting the frictional arrest scale + ! in the expression for mixing length used in MEKE-derived diffusiviity. +MEKE_ALPHA_GRID = 0.0 ! [nondim] default = 0.0 + ! If positive, is a coefficient weighting the grid-spacing as a scale + ! in the expression for mixing length used in MEKE-derived diffusiviity. +MEKE_COLD_START = False ! [Boolean] default = False + ! If true, initialize EKE to zero. Otherwise a local equilibrium solution + ! is used as an initial condition for EKE. +CDRAG = 0.003 ! [nondim] default = 0.003 + ! CDRAG is the drag coefficient relating the magnitude of + ! the velocity field to the bottom stress. + +! === module MOM_lateral_mixing_coeffs === +USE_VARIABLE_MIXING = True ! [Boolean] default = False + ! If true, the variable mixing code will be called. This + ! allows diagnostics to be created even if the scheme is + ! not used. If KHTR_SLOPE_CFF>0 or KhTh_Slope_Cff>0, + ! this is set to true regardless of what is in the + ! parameter file. +RESOLN_SCALED_KH = True ! [Boolean] default = False + ! If true, the Laplacian lateral viscosity is scaled away + ! when the first baroclinic deformation radius is well + ! resolved. +RESOLN_SCALED_KHTH = True ! [Boolean] default = False + ! If true, the interface depth diffusivity is scaled away + ! when the first baroclinic deformation radius is well + ! resolved. +RESOLN_SCALED_KHTR = False ! [Boolean] default = False + ! If true, the epipycnal tracer diffusivity is scaled + ! away when the first baroclinic deformation radius is + ! well resolved. +KHTH_SLOPE_CFF = 0.0 ! [nondim] default = 0.0 + ! The nondimensional coefficient in the Visbeck formula + ! for the interface depth diffusivity +KHTR_SLOPE_CFF = 0.25 ! [nondim] default = 0.0 + ! The nondimensional coefficient in the Visbeck formula + ! for the epipycnal tracer diffusivity +USE_STORED_SLOPES = True ! [Boolean] default = False + ! If true, the isopycnal slopes are calculated once and + ! stored for re-use. This uses more memory but avoids calling + ! the equation of state more times than should be necessary. +VISBECK_MAX_SLOPE = 0.0 ! [nondim] default = 0.0 + ! If non-zero, is an upper bound on slopes used in the + ! Visbeck formula for diffusivity. This does not affect the + ! isopycnal slope calculation used within thickness diffusion. +KD_SMOOTH = 1.0E-06 ! [not defined] default = 1.0E-06 + ! A diapycnal diffusivity that is used to interpolate + ! more sensible values of T & S into thin layers. +VARMIX_KTOP = 2 ! [nondim] default = 2 + ! The layer number at which to start vertical integration + ! of S*N for purposes of finding the Eady growth rate. +VISBECK_L_SCALE = 0.0 ! [m] default = 0.0 + ! The fixed length scale in the Visbeck formula. + +! === module MOM_wave_speed === +KH_RES_SCALE_COEF = 1.0 ! [nondim] default = 1.0 + ! A coefficient that determines how KhTh is scaled away if + ! RESOLN_SCALED_... is true, as + ! F = 1 / (1 + (KH_RES_SCALE_COEF*Rd/dx)^KH_RES_FN_POWER). +KH_RES_FN_POWER = 2 ! [nondim] default = 2 + ! The power of dx/Ld in the Kh resolution function. Any + ! positive integer may be used, although even integers + ! are more efficient to calculate. Setting this greater + ! than 100 results in a step-function being used. +VISC_RES_SCALE_COEF = 1.0 ! [nondim] default = 1.0 + ! A coefficient that determines how Kh is scaled away if + ! RESOLN_SCALED_... is true, as + ! F = 1 / (1 + (KH_RES_SCALE_COEF*Rd/dx)^KH_RES_FN_POWER). + ! This function affects lateral viscosity, Kh, and not KhTh. +VISC_RES_FN_POWER = 2 ! [nondim] default = 2 + ! The power of dx/Ld in the Kh resolution function. Any + ! positive integer may be used, although even integers + ! are more efficient to calculate. Setting this greater + ! than 100 results in a step-function being used. + ! This function affects lateral viscosity, Kh, and not KhTh. +INTERPOLATE_RES_FN = True ! [Boolean] default = True + ! If true, interpolate the resolution function to the + ! velocity points from the thickness points; otherwise + ! interpolate the wave speed and calculate the resolution + ! function independently at each point. +GILL_EQUATORIAL_LD = False ! [Boolean] default = False + ! If true, uses Gill's definition of the baroclinic + ! equatorial deformation radius, otherwise, if false, use + ! Pedlosky's definition. These definitions differ by a factor + ! of 2 infront of the beta term in the denominator. Gill'sis the more appropriate definition. + +! === module MOM_set_visc === +BOTTOMDRAGLAW = True ! [Boolean] default = True + ! If true, the bottom stress is calculated with a drag + ! law of the form 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. +CHANNEL_DRAG = True ! [Boolean] default = False + ! If true, the bottom stress is calculated with a drag + ! law of the form 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. +LINEAR_DRAG = False ! [Boolean] default = False + ! If LINEAR_DRAG and BOTTOMDRAGLAW are defined the drag + ! law is cdrag*DRAG_BG_VEL*u. +DOUBLE_DIFFUSION = False ! [Boolean] default = False + ! If true, increase diffusivitives for temperature or salt + ! based on double-diffusive paramaterization from MOM4/KPP. +PRANDTL_TURB = 1.0 ! [nondim] default = 0.0 + ! The turbulent Prandtl number applied to shear + ! instability. +DYNAMIC_VISCOUS_ML = False ! [Boolean] default = False + ! If true, use a bulk Richardson number criterion to + ! determine the mixed layer thickness for viscosity. +HBBL = 10.0 ! [m] + ! The thickness 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. +DRAG_BG_VEL = 0.1 ! [m s-1] default = 0.0 + ! 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. DRAG_BG_VEL is only used when + ! BOTTOMDRAGLAW is defined. +BBL_USE_EOS = False ! [Boolean] default = False + ! If true, use the equation of state in determining the + ! properties of the bottom boundary layer. Otherwise use + ! the layer target potential densities. +BBL_THICK_MIN = 0.1 ! [m] default = 0.0 + ! The minimum bottom boundary layer thickness that can be + ! used with BOTTOMDRAGLAW. This might be + ! Kv / (cdrag * drag_bg_vel) to give Kv as the minimum + ! near-bottom viscosity. +HTBL_SHELF_MIN = 0.1 ! [m] default = 0.1 + ! The minimum top boundary layer thickness that can be + ! used with BOTTOMDRAGLAW. This might be + ! Kv / (cdrag * drag_bg_vel) to give Kv as the minimum + ! near-top viscosity. +HTBL_SHELF = 10.0 ! [m] default = 10.0 + ! The thickness over which near-surface velocities are + ! averaged for the drag law under an ice shelf. By + ! default this is the same as HBBL +KV_BBL_MIN = 0.0 ! [m2 s-1] default = 0.0 + ! The minimum viscosities in the bottom boundary layer. +KV_TBL_MIN = 0.0 ! [m2 s-1] default = 0.0 + ! The minimum viscosities in the top boundary layer. +SMAG_CONST_CHANNEL = 0.15 ! [nondim] default = 0.01 + ! 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 value used is + ! also 0.15 if the specified value is negative. +TIDES = False ! [Boolean] default = False + ! If true, apply tidal momentum forcing. +BE = 0.6 ! [nondim] default = 0.6 + ! If SPLIT is true, BE determines the relative weighting + ! of a 2nd-order Runga-Kutta baroclinic time stepping + ! scheme (0.5) and a backward Euler scheme (1) that is + ! used for the Coriolis and inertial terms. BE may be + ! from 0.5 to 1, but instability may occur near 0.5. + ! BE is also applicable if SPLIT is false and USE_RK2 + ! is true. +BEGW = 0.0 ! [nondim] default = 0.0 + ! If SPILT is true, BEGW is a number from 0 to 1 that + ! controls the extent to which the treatment of gravity + ! waves is forward-backward (0) or simulated backward + ! Euler (1). 0 is almost always used. + ! If SPLIT is false and USE_RK2 is true, BEGW can be + ! between 0 and 0.5 to damp gravity waves. +SPLIT_BOTTOM_STRESS = False ! [Boolean] default = False + ! If true, provide the bottom stress calculated by the + ! vertical viscosity to the barotropic solver. +BT_USE_LAYER_FLUXES = True ! [Boolean] default = True + ! If true, use the summed layered fluxes plus an + ! adjustment due to the change in the barotropic velocity + ! in the barotropic continuity equation. +CONTINUITY_SCHEME = "PPM" ! default = "PPM" + ! CONTINUITY_SCHEME selects the discretization for the + ! continuity solver. The only valid value currently is: + ! PPM - use a positive-definite (or monotonic) + ! piecewise parabolic reconstruction solver. +MONOTONIC_CONTINUITY = False ! [Boolean] default = False + ! If true, CONTINUITY_PPM uses the Colella and Woodward + ! monotonic limiter. The default (false) is to use a + ! simple positive definite limiter. +SIMPLE_2ND_PPM_CONTINUITY = False ! [Boolean] default = False + ! If true, CONTINUITY_PPM uses a simple 2nd order + ! (arithmetic mean) interpolation of the edge values. + ! This may give better PV conservation propterties. While + ! it formally reduces the accuracy of the continuity + ! solver itself in the strongly advective limit, it does + ! not reduce the overall order of accuracy of the dynamic + ! core. +UPWIND_1ST_CONTINUITY = False ! [Boolean] default = False + ! If true, CONTINUITY_PPM becomes a 1st-order upwind + ! continuity solver. This scheme is highly diffusive + ! but may be useful for debugging or in single-column + ! mode where its minimal stensil is useful. +ETA_TOLERANCE = 1.0E-06 ! [m] default = 3.75E-09 + ! The tolerance 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*ANGSTROM, and this should not be set less x + ! than about 10^-15*MAXIMUM_DEPTH. +ETA_TOLERANCE_AUX = 0.001 ! [m] default = 1.0E-06 + ! The tolerance for free-surface height discrepancies + ! between the barotropic solution and the sum of the + ! layer thicknesses when calculating the auxiliary + ! corrected velocities. By default, this is the same as + ! ETA_TOLERANCE, but can be made larger for efficiency. +VELOCITY_TOLERANCE = 3.0E+08 ! [m s-1] default = 3.0E+08 + ! The tolerance for barotropic velocity discrepancies + ! between the barotropic solution and the sum of the + ! layer thicknesses. +CONT_PPM_AGGRESS_ADJUST = False ! [Boolean] default = False + ! If true, allow the adjusted velocities to have a + ! relative CFL change up to 0.5. +CONT_PPM_VOLUME_BASED_CFL = False ! [Boolean] default = False + ! If true, use the ratio of the open face lengths to the + ! tracer cell areas when estimating CFL numbers. The + ! default is set by CONT_PPM_AGGRESS_ADJUST. +CONTINUITY_CFL_LIMIT = 0.5 ! [nondim] default = 0.5 + ! The maximum CFL of the adjusted velocities. +CONT_PPM_BETTER_ITER = True ! [Boolean] default = True + ! If true, stop corrective iterations using a velocity + ! based criterion and only stop if the iteration is + ! better than all predecessors. +CONT_PPM_USE_VISC_REM_MAX = True ! [Boolean] default = True + ! If true, use more appropriate limiting bounds for + ! corrections in strongly viscous columns. +NOSLIP = False ! [Boolean] default = False + ! If true, no slip boundary conditions are used; otherwise + ! free slip boundary conditions are assumed. The + ! implementation of the free slip BCs on a C-grid is much + ! cleaner than the no slip BCs. The use of free slip BCs + ! is strongly encouraged, and no slip BCs are not used with + ! the biharmonic viscosity. +CORIOLIS_EN_DIS = False ! [Boolean] default = False + ! If true, 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. +CORIOLIS_SCHEME = "SADOURNY75_ENSTRO" ! default = "SADOURNY75_ENERGY" + ! CORIOLIS_SCHEME selects the discretization for the + ! Coriolis terms. Valid values are: + ! SADOURNY75_ENERGY - Sadourny, 1975; energy cons. + ! ARAKAWA_HSU90 - Arakawa & Hsu, 1990 + ! SADOURNY75_ENSTRO - Sadourny, 1975; enstrophy cons. + ! ARAKAWA_LAMB81 - Arakawa & Lamb, 1981; En. + Enst. + ! ARAKAWA_LAMB_BLEND - A blend of Arakawa & Lamb with + ! Arakawa & Hsu and Sadourny energy +BOUND_CORIOLIS = True ! [Boolean] default = False + ! If true, 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 Coriolis scheme if it + ! were possible to use centered difference thickness fluxes. +KE_SCHEME = "KE_ARAKAWA" ! default = "KE_ARAKAWA" + ! KE_SCHEME selects the discretization for acceleration + ! due to the kinetic energy gradient. Valid values are: + ! KE_ARAKAWA, KE_SIMPLE_GUDONOV, KE_GUDONOV +PV_ADV_SCHEME = "PV_ADV_CENTERED" ! default = "PV_ADV_CENTERED" + ! PV_ADV_SCHEME selects the discretization for PV + ! advection. Valid values are: + ! PV_ADV_CENTERED - centered (aka Sadourny, 75) + ! PV_ADV_UPWIND1 - upwind, first order +ANALYTIC_FV_PGF = True ! [Boolean] default = True + ! If true 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, as + ! described in Adcroft et al., O. Mod. (2008). +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. + +! === module MOM_hor_visc === +LAPLACIAN = True ! [Boolean] default = False + ! If true, use a Laplacian horizontal viscosity. +KH = 0.0 ! [m2 s-1] default = 0.0 + ! The background Laplacian horizontal viscosity. +KH_VEL_SCALE = 0.0 ! [m s-1] default = 0.0 + ! The velocity scale which is multiplied by the grid + ! spacing to calculate the Laplacian viscosity. + ! The final viscosity is the largest of this scaled + ! viscosity, the Smagorinsky viscosity and KH. +SMAGORINSKY_KH = True ! [Boolean] default = False + ! If true, use a Smagorinsky nonlinear eddy viscosity. +SMAG_LAP_CONST = 0.01 ! [nondim] default = 0.0 + ! The nondimensional Laplacian Smagorinsky constant, + ! often 0.15. +BOUND_KH = True ! [Boolean] default = True + ! If true, the Laplacian coefficient is locally limited + ! to be stable. +BETTER_BOUND_KH = True ! [Boolean] default = True + ! If true, the Laplacian coefficient is locally limited + ! to be stable with a better bounding than just BOUND_KH. +BIHARMONIC = True ! [Boolean] default = True + ! If true, use a biharmonic horizontal viscosity. + ! BIHARMONIC may be used with LAPLACIAN. +AH = 0.0 ! [m4 s-1] default = 0.0 + ! The background biharmonic horizontal viscosity. +AH_VEL_SCALE = 0.025 ! [m s-1] default = 0.0 + ! The velocity scale which is multiplied by the cube of + ! the grid spacing to calculate the biharmonic viscosity. + ! The final viscosity is the largest of this scaled + ! viscosity, the Smagorinsky viscosity and AH. +SMAGORINSKY_AH = True ! [Boolean] default = False + ! If true, use a biharmonic Smagorinsky nonlinear eddy + ! viscosity. +BOUND_AH = True ! [Boolean] default = True + ! If true, the biharmonic coefficient is locally limited + ! to be stable. +BETTER_BOUND_AH = True ! [Boolean] default = True + ! If true, the biharmonic coefficient is locally limited + ! to be stable with a better bounding than just BOUND_AH. +SMAG_BI_CONST = 0.06 ! [nondim] default = 0.0 + ! The nondimensional biharmonic Smagorinsky constant, + ! typically 0.015 - 0.06. +BOUND_CORIOLIS_BIHARM = True ! [Boolean] default = True + ! If true use a viscosity that increases with the square + ! of the velocity shears, so that the resulting viscous + ! drag is of comparable magnitude to the Coriolis terms + ! when the velocity differences between adjacent grid + ! points is 0.5*BOUND_CORIOLIS_VEL. The default is the + ! value of BOUND_CORIOLIS (or false). +BOUND_CORIOLIS_VEL = 6.0 ! [m s-1] default = 6.0 + ! The velocity scale at which BOUND_CORIOLIS_BIHARM causes + ! the biharmonic drag to have comparable magnitude to the + ! Coriolis acceleration. The default is set by MAXVEL. +HORVISC_BOUND_COEF = 0.8 ! [nondim] default = 0.8 + ! The nondimensional coefficient of the ratio of the + ! viscosity bounds to the theoretical maximum for + ! stability without considering other terms. + +! === module MOM_vert_friction === +DIRECT_STRESS = False ! [Boolean] default = False + ! If true, the wind stress is distributed over the + ! topmost HMIX_STRESS of fluid (like in HYCOM), and KVML + ! may be set to a very small value. +U_TRUNC_FILE = "U_velocity_truncations" ! default = "" + ! 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" ! default = "" + ! 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. +HARMONIC_VISC = False ! [Boolean] default = False + ! If true, use the harmonic mean thicknesses for + ! calculating the vertical viscosity. +HMIX_FIXED = 0.5 ! [m] + ! The prescribed depth over which the near-surface + ! viscosity and diffusivity are elevated when the bulk + ! mixed layer is not used. +KV = 1.0E-04 ! [m2 s-1] + ! The background kinematic viscosity in the interior. + ! The molecular value, ~1e-6 m2 s-1, may be used. +KVML = 1.0E-04 ! [m2 s-1] default = 1.0E-04 + ! The kinematic viscosity in the mixed layer. A typical + ! value is ~1e-2 m2 s-1. KVML is not used if + ! BULKMIXEDLAYER is true. The default is set by KV. +MAXVEL = 6.0 ! [m s-1] default = 3.0E+08 + ! The maximum velocity allowed before the velocity + ! components are truncated. +CFL_BASED_TRUNCATIONS = True ! [Boolean] default = True + ! If true, base truncations on the CFL number, and not an + ! absolute speed. +CFL_TRUNCATE = 0.5 ! [nondim] default = 0.5 + ! The value of the CFL number that will cause velocity + ! components to be truncated; instability can occur past 0.5. +CFL_REPORT = 0.5 ! [nondim] default = 0.5 + ! The value of the CFL number that causes accelerations + ! to be reported; the default is CFL_TRUNCATE. +CFL_TRUNCATE_RAMP_TIME = 0.0 ! [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.0 ! [nondim] default = 0.0 + ! The start value of the truncation CFL number used when + ! ramping up CFL_TRUNC. + +! === module MOM_PointAccel === +MAX_TRUNC_FILE_SIZE_PER_PE = 50 ! default = 50 + ! The maximum number of colums of truncations that any PE + ! will write out during a run. + +! === module MOM_barotropic === +BOUND_BT_CORRECTION = True ! [Boolean] default = False + ! If true, the corrective pseudo mass-fluxes into the + ! barotropic solver are limited to values that require + ! less than maxCFL_BT_cont to be accommodated. +BT_CONT_CORR_BOUNDS = True ! [Boolean] default = True + ! If true, and BOUND_BT_CORRECTION is true, use the + ! BT_cont_type variables to set limits determined by + ! MAXCFL_BT_CONT on the CFL number of the velocites + ! that are likely to be driven by the corrective mass fluxes. +GRADUAL_BT_ICS = False ! [Boolean] default = False + ! If true, adjust the initial conditions for the + ! barotropic solver to the values from the layered + ! solution over a whole timestep instead of instantly. + ! This is a decent approximation to the inclusion of + ! sum(u dh_dt) while also correcting for truncation errors. +USE_BT_CONT_TYPE = True ! [Boolean] default = True + ! If true, use a structure with elements that describe + ! effective face areas from the summed continuity solver + ! as a function the barotropic flow in coupling between + ! the barotropic and baroclinic flow. This is only used + ! if SPLIT is true. +NONLINEAR_BT_CONTINUITY = False ! [Boolean] default = False + ! If true, use nonlinear transports in the barotropic + ! continuity equation. This does not apply if + ! USE_BT_CONT_TYPE is true. +BT_MASS_SOURCE_LIMIT = 0.0 ! [nondim] default = 0.0 + ! The fraction of the initial depth of the ocean that can + ! be added to or removed from the bartropic solution + ! within a thermodynamic time step. By default this is 0 + ! for no correction. +BT_PROJECT_VELOCITY = True ! [Boolean] default = False + ! If true, step the barotropic velocity first and project + ! out the velocity tendancy by 1+BEBT when calculating the + ! transport. The default (false) is to use a predictor + ! continuity step to find the pressure field, and then + ! to do a corrector continuity step using a weighted + ! average of the old and new velocities, with weights + ! of (1-BEBT) and BEBT. +DYNAMIC_SURFACE_PRESSURE = False ! [Boolean] default = False + ! If true, add a dynamic pressure due to a viscous ice + ! shelf, for instance. +SADOURNY = True ! [Boolean] default = True + ! If true, the Coriolis terms are discretized with the + ! Sadourny (1975) energy conserving scheme, otherwise + ! the Arakawa & Hsu scheme is used. If the internal + ! deformation radius is not resolved, the Sadourny scheme + ! should probably be used. +BT_THICK_SCHEME = "FROM_BT_CONT" ! default = "FROM_BT_CONT" + ! A string describing the scheme that is used to set the + ! open face areas used for barotropic transport and the + ! relative weights of the accelerations. Valid values are: + ! ARITHMETIC - arithmetic mean layer thicknesses + ! HARMONIC - harmonic mean layer thicknesses + ! HYBRID (the default) - use arithmetic means for + ! layers above the shallowest bottom, the harmonic + ! mean for layers below, and a weighted average for + ! layers that straddle that depth + ! FROM_BT_CONT - use the average thicknesses kept + ! in the h_u and h_v fields of the BT_cont_type +BT_STRONG_DRAG = False ! [Boolean] default = True + ! If true, use a stronger estimate of the retarding + ! effects of strong bottom drag, by making it implicit + ! with the barotropic time-step instead of implicit with + ! the baroclinic time-step and dividing by the number of + ! barotropic steps. +CLIP_BT_VELOCITY = False ! [Boolean] default = False + ! If true, limit any velocity components that exceed + ! CFL_TRUNCATE. This should only be used as a desperate + ! debugging measure. +MAXCFL_BT_CONT = 0.25 ! [nondim] default = 0.25 + ! The maximum permitted CFL number associated with the + ! barotropic accelerations from the summed velocities + ! times the time-derivatives of thicknesses. +DT_BT_FILTER = -0.25 ! [sec or nondim] default = -0.25 + ! A time-scale over which the barotropic mode solutions + ! are filtered, in seconds if positive, or as a fraction + ! of DT if negative. When used this can never be taken to + ! be longer than 2*dt. Set this to 0 to apply no filtering. +G_BT_EXTRA = 0.0 ! [nondim] default = 0.0 + ! A nondimensional factor by which gtot is enhanced. +SSH_EXTRA = 10.0 ! [m] default = 10.0 + ! An estimate of how much higher SSH might get, for use + ! in calculating the safe external wave speed. The + ! default is the minimum of 10 m or 5% of MAXIMUM_DEPTH. +DEBUG_BT = False ! [Boolean] default = False + ! If true, write out verbose debugging data within the + ! barotropic time-stepping loop. The data volume can be + ! quite large if this is true. +BEBT = 0.2 ! [nondim] default = 0.1 + ! 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. +DTBT = -0.9 ! [s or nondim] default = -0.98 + ! 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. + ! Setting DTBT to 0 is the same as setting it to -0.98. + ! The value of DTBT that will actually be used is an + ! integer fraction of DT, rounding down. + +! === module MOM_thickness_diffuse === +KHTH = 0.0 ! [m2 s-1] default = 0.0 + ! The background horizontal thickness diffusivity. +KHTH_MIN = 0.0 ! [m2 s-1] default = 0.0 + ! The minimum horizontal thickness diffusivity. +KHTH_MAX = 0.0 ! [m2 s-1] default = 0.0 + ! The maximum horizontal thickness diffusivity. +DETANGLE_INTERFACES = False ! [Boolean] default = False + ! If defined add 3-d structured enhanced interface height + ! diffusivities to horizonally smooth jagged layers. +KHTH_SLOPE_MAX = 0.01 ! [nondim] default = 0.01 + ! A slope beyond which the calculated isopycnal slope is + ! not reliable and is scaled away. This is used with + ! FULL_THICKNESSDIFFUSE. + +! === module MOM_mixed_layer_restrat === +MIXEDLAYER_RESTRAT = True ! [Boolean] default = False + ! If true, a density-gradient dependent re-stratifying + ! flow is imposed in the mixed layer. + ! This is only used if BULKMIXEDLAYER is true. +FOX_KEMPER_ML_RESTRAT_COEF = 10.0 ! [nondim] default = 0.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 the + ! 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 + ! by Fox-Kemper et al. (2010) +Z_OUTPUT_GRID_FILE = "vgrid_75_2m.nc" ! default = "" + ! The file that specifies the vertical grid for + ! depth-space diagnostics, or blank to disable + ! depth-space output. +!NK_ZSPACE (from file) = 35 ! [nondim] + ! The number of depth-space levels. This is determined + ! from the size of the variable zw in the output grid file. + +! === module MOM_diabatic_driver === +! The following parameters are used for diabatic processes. +INTERNAL_TIDES = False ! [Boolean] default = False + ! If true, use the code that advances as separate set of + ! equations for the internal tide energy density. +MASSLESS_MATCH_TARGETS = True ! [Boolean] default = True + ! If true, the temperature and salinity of massless layers + ! are kept consistent with their target densities. + ! Otherwise the properties of massless layers evolve + ! diffusively to match massive neighboring layers. +RECLAIM_FRAZIL = True ! [Boolean] default = True + ! If true, try to use any frazil heat deficit to cool any + ! overlying layers down to the freezing point, thereby + ! avoiding the creation of thin ice when the SST is above + ! the freezing point. +PRESSURE_DEPENDENT_FRAZIL = True ! [Boolean] default = False + ! If true, use a pressure dependent freezing temperature + ! when making frazil. The default is false, which will be + ! faster but is inappropriate with ice-shelf cavities. +AGGREGATE_FW_FORCING = True ! [Boolean] default = True + ! If true, the net incoming and outgoing fresh water fluxes are combined + ! and applied as either incoming or outgoing depending on the sign of the net. + ! If false, the net incoming fresh water flux is added to the model and + ! thereafter the net outgoing is removed from the updated state.into the first non-vanished layer for which the column remains stable +DEBUG_CONSERVATION = False ! [Boolean] default = False + ! If true, monitor conservation and extrema. +MIX_BOUNDARY_TRACERS = True ! [Boolean] default = True + ! If true, mix the passive tracers in massless layers at + ! the bottom into the interior as though a diffusivity of + ! KD_MIN_TR were operating. +KD_MIN_TR = 2.0E-06 ! [m2 s-1] default = 2.0E-06 + ! A minimal diffusivity that should always be applied to + ! tracers, especially in massless layers near the bottom. + ! The default is 0.1*KD. +KD_BBL_TR = 0.0 ! [m2 s-1] default = 0.0 + ! A bottom boundary layer tracer diffusivity that will + ! allow for explicitly specified bottom fluxes. The + ! entrainment at the bottom is at least sqrt(Kd_BBL_tr*dt) + ! over the same distance. +DIAG_MLD_DENSITY_DIFF = 0.1 ! [kg/m3] default = 0.1 + ! The density difference used to determine a diagnostic mixed + ! layer depth, MLD_user, following the definition of Levitus 1982. + ! The MLD is the depth at which the density is larger than the + ! surface density by the specified amount. +FLUX_RI_MAX = 0.2 ! [not defined] default = 0.2 + ! The flux Richardson number where the stratification is + ! large enough that N2 > omega2. The full expression for + ! the Flux Richardson number is usually + ! FLUX_RI_MAX*N2/(N2+OMEGA2). +ML_RADIATION = False ! [Boolean] default = False + ! If true, allow a fraction of TKE available from wind + ! work to penetrate below the base of the mixed layer + ! with a vertical decay scale determined by the minimum + ! of: (1) The depth of the mixed layer, (2) an Ekman + ! length scale. +BBL_EFFIC = 0.2 ! [nondim] default = 0.2 + ! The efficiency with which the energy extracted by + ! bottom drag drives BBL diffusion. This is only + ! used if BOTTOMDRAGLAW is true. +BBL_MIXING_MAX_DECAY = 0.0 ! [m] default = 0.0 + ! The maximum decay scale for the BBL diffusion, or 0 + ! to allow the mixing to penetrate as far as + ! stratification and rotation permit. The default is 0. + ! This is only used if BOTTOMDRAGLAW is true. +BBL_MIXING_AS_MAX = False ! [Boolean] default = True + ! 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. +BRYAN_LEWIS_DIFFUSIVITY = False ! [Boolean] default = False + ! If true, use a Bryan & Lewis (JGR 1979) like tanh + ! profile of background diapycnal diffusivity with depth. +HENYEY_IGW_BACKGROUND = True ! [Boolean] default = False + ! If true, use a latitude-dependent scaling for the near + ! surface background diffusivity, as described in + ! Harrison & Hallberg, JPO 2008. +HENYEY_N0_2OMEGA = 20.0 ! [nondim] default = 20.0 + ! The ratio of the typical Buoyancy frequency to twice + ! the Earth's rotation period, used with the Henyey + ! scaling from the mixing. +N2_FLOOR_IOMEGA2 = 0.0 ! [nondim] default = 1.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. +KD_TANH_LAT_FN = False ! [Boolean] default = False + ! If true, use a tanh dependence of Kd_sfc on latitude, + ! like CM2.1/CM2M. There is no physical justification + ! for this form, and it can not be used with + ! HENYEY_IGW_BACKGROUND. +KD = 2.0E-05 ! [m2 s-1] + ! The background diapycnal diffusivity of density in the + ! interior. Zero or the molecular value, ~1e-7 m2 s-1, + ! may be used. +KD_MIN = 2.0E-06 ! [m2 s-1] default = 2.0E-07 + ! The minimum diapycnal diffusivity. +KD_MAX = -1.0 ! [m2 s-1] default = -1.0 + ! The maximum permitted increment for the diapycnal + ! diffusivity from TKE-based parameterizations, or a + ! negative value for no limit. +KD_ADD = 0.0 ! [m2 s-1] default = 0.0 + ! A uniform diapycnal diffusivity that is added + ! everywhere without any filtering or scaling. +KDML = 1.0E-04 ! [m2 s-1] default = 2.0E-05 + ! If BULKMIXEDLAYER is false, KDML is the elevated + ! diapycnal diffusivity in the topmost HMIX of fluid. + ! KDML is only used if BULKMIXEDLAYER is false. +INT_TIDE_DISSIPATION = True ! [Boolean] default = False + ! If true, use an internal tidal dissipation scheme to + ! drive diapycnal mixing, along the lines of St. Laurent + ! et al. (2002) and Simmons et al. (2004). +INT_TIDE_PROFILE = "STLAURENT_02" ! default = "STLAURENT_02" + ! INT_TIDE_PROFILE selects the vertical profile of energy + ! dissipation with INT_TIDE_DISSIPATION. Valid values are: + ! STLAURENT_02 - Use the St. Laurent et al exponential + ! decay profile. + ! POLZIN_09 - Use the Polzin WKB-streched algebraic + ! decay profile. +LEE_WAVE_DISSIPATION = False ! [Boolean] default = False + ! If true, use an lee wave driven dissipation scheme to + ! drive diapycnal mixing, along the lines of Nikurashin + ! (2010) and using the St. Laurent et al. (2002) + ! and Simmons et al. (2004) vertical profile +USER_CHANGE_DIFFUSIVITY = False ! [Boolean] default = False + ! If true, call user-defined code to change the diffusivity. +DISSIPATION_MIN = 0.0 ! [W m-3] default = 0.0 + ! The minimum dissipation by which to determine a lower + ! bound of Kd (a floor). +DISSIPATION_N0 = 0.0 ! [W m-3] default = 0.0 + ! 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. +DISSIPATION_N1 = 0.0 ! [J m-3] default = 0.0 + ! The coefficient multiplying N, following Gargett, used to + ! set a minimum dissipation by which to determine a lower + ! bound of Kd (a floor): B in eps_min = A + B*N +DISSIPATION_KD_MIN = 0.0 ! [m2 s-1] default = 0.0 + ! The minimum vertical diffusivity applied as a floor. +INT_TIDE_DECAY_SCALE = 300.3003003003003 ! [m] default = 0.0 + ! The decay scale away from the bottom for tidal TKE with + ! the new coding when INT_TIDE_DISSIPATION is used. +MU_ITIDES = 0.2 ! [nondim] default = 0.2 + ! A dimensionless turbulent mixing efficiency used with + ! INT_TIDE_DISSIPATION, often 0.2. +GAMMA_ITIDES = 0.3333 ! [nondim] default = 0.3333 + ! The fraction of the internal tidal energy that is + ! dissipated locally with INT_TIDE_DISSIPATION. + ! THIS NAME COULD BE BETTER. +MIN_ZBOT_ITIDES = 0.0 ! [m] default = 0.0 + ! Turn off internal tidal dissipation when the total + ! ocean depth is less than this value. +KAPPA_ITIDES = 6.28319E-04 ! [m-1] default = 6.283185307179586E-04 + ! A topographic wavenumber used with INT_TIDE_DISSIPATION. + ! The default is 2pi/10 km, as in St.Laurent et al. 2002. +UTIDE = 0.0 ! [m s-1] default = 0.0 + ! The constant tidal amplitude used with INT_TIDE_DISSIPATION. +KAPPA_H2_FACTOR = 0.84 ! [nondim] default = 1.0 + ! A scaling factor for the roughness amplitude with nINT_TIDE_DISSIPATION. +TKE_ITIDE_MAX = 0.1 ! [W m-2] default = 1000.0 + ! The maximum internal tide energy source availble to mix + ! above the bottom boundary layer with INT_TIDE_DISSIPATION. +READ_TIDEAMP = True ! [Boolean] default = False + ! If true, read a file (given by TIDEAMP_FILE) containing + ! the tidal amplitude with INT_TIDE_DISSIPATION. +TIDEAMP_FILE = "tidal_amplitude.nc" ! default = "tideamp.nc" + ! The path to the file containing the spatially varying + ! tidal amplitudes with INT_TIDE_DISSIPATION. +H2_FILE = "topog.nc" ! + ! The path to the file containing the sub-grid-scale + ! topographic roughness amplitude with INT_TIDE_DISSIPATION. + +! === module MOM_kappa_shear === +! Parameterization of shear-driven turbulence following Jackson, Hallberg and Legg, JPO 2008 +USE_JACKSON_PARAM = True ! [Boolean] default = False + ! If true, use the Jackson-Hallberg-Legg (JPO 2008) + ! shear mixing parameterization. +RINO_CRIT = 0.25 ! [nondim] default = 0.25 + ! The critical Richardson number for shear mixing. +SHEARMIX_RATE = 0.089 ! [nondim] default = 0.089 + ! A nondimensional rate scale for shear-driven entrainment. + ! Jackson et al find values in the range of 0.085-0.089. +MAX_RINO_IT = 25 ! [nondim] default = 50 + ! The maximum number of iterations that may be used to + ! estimate the Richardson number driven mixing. +KD_KAPPA_SHEAR_0 = 2.0E-05 ! [m2 s-1] default = 2.0E-05 + ! The background diffusivity that is used to smooth the + ! density and shear profiles before solving for the + ! diffusivities. Defaults to value of KD. +FRI_CURVATURE = -0.97 ! [nondim] default = -0.97 + ! The nondimensional curvature of the function of the + ! Richardson number in the kappa source term in the + ! Jackson et al. scheme. +TKE_N_DECAY_CONST = 0.24 ! [nondim] default = 0.24 + ! The coefficient for the decay of TKE due to + ! stratification (i.e. proportional to N*tke). + ! The values found by Jackson et al. are 0.24-0.28. +TKE_SHEAR_DECAY_CONST = 0.14 ! [nondim] default = 0.14 + ! The coefficient for the decay of TKE due to shear (i.e. + ! proportional to |S|*tke). The values found by Jackson + ! et al. are 0.14-0.12. +KAPPA_BUOY_SCALE_COEF = 0.82 ! [nondim] default = 0.82 + ! The coefficient for the buoyancy length scale in the + ! kappa equation. The values found by Jackson et al. are + ! in the range of 0.81-0.86. +KAPPA_N_OVER_S_SCALE_COEF2 = 0.0 ! [nondim] default = 0.0 + ! The square of the ratio of the coefficients of the + ! buoyancy and shear scales in the diffusivity equation, + ! Set this to 0 (the default) to eliminate the shear scale. + ! This is only used if USE_JACKSON_PARAM is true. +KAPPA_SHEAR_TOL_ERR = 0.1 ! [nondim] default = 0.1 + ! The fractional error in kappa that is tolerated. + ! Iteration stops when changes between subsequent + ! iterations are smaller than this everywhere in a + ! column. The peak diffusivities usually converge most + ! rapidly, and have much smaller errors than this. +TKE_BACKGROUND = 0.0 ! [m2 s-2] default = 0.0 + ! A background level of TKE used in the first iteration + ! of the kappa equation. TKE_BACKGROUND could be 0. +KAPPA_SHEAR_ELIM_MASSLESS = True ! [Boolean] default = True + ! If true, massless layers are merged with neighboring + ! massive layers in this calculation. The default is + ! true and I can think of no good reason why it should + ! be false. This is only used if USE_JACKSON_PARAM is true. +MAX_KAPPA_SHEAR_IT = 13 ! [nondim] default = 13 + ! The maximum number of iterations that may be used to + ! estimate the time-averaged diffusivity. +DEBUG_KAPPA_SHEAR = False ! [Boolean] default = False + ! If true, write debugging data for the kappa-shear code. + ! Caution: this option is _very_ verbose and should only + ! be used in single-column mode! + +! === module MOM_KPP === +! This is the MOM wrapper to CVmix:KPP +! See http://code.google.com/p/cvmix/ +USE_KPP = True ! [Boolean] default = False + ! If true, turns on the [CVmix] KPP scheme of Large et al., 1994, + ! to calculate diffusivities and non-local transport in the OBL. +KPP% +PASSIVE = False ! [Boolean] default = False + ! If True, puts KPP into a passive-diagnostic mode. +APPLY_NONLOCAL_TRANSPORT = True ! [Boolean] default = True + ! If True, applies the non-local transport to heat and scalars. + ! If False, calculates the non-local transport and tendencies but + ! purely for diagnostic purposes. +RI_CRIT = 0.3 ! [nondim] default = 0.3 + ! Critical bulk Richardson number used to define depth of the + ! surface Ocean Boundary Layer (OBL). +VON_KARMAN = 0.4 ! [nondim] default = 0.4 + ! von Karman constant. +INTERP_TYPE = "cubic" ! default = "cubic" + ! Type of interpolation to determine the OBL depth. + ! Allowed types are: linear, quadratic, cubic. +COMPUTE_EKMAN = False ! [Boolean] default = False + ! If True, limit OBL depth to be no deeper than Ekman depth. +COMPUTE_MONIN_OBUKHOV = False ! [Boolean] default = False + ! If True, limit the OBL depth to be no deeper than + ! Monin-Obukhov depth. +CS = 98.96 ! [nondim] default = 98.96 + ! Parameter for computing velocity scale function. +DEEP_OBL_OFFSET = 0.0 ! [m] default = 0.0 + ! If non-zero, the distance above the bottom to which the OBL is clipped + ! if it would otherwise reach the bottom. The smaller of this and 0.1D is used. +FIXED_OBLDEPTH = False ! [Boolean] default = False + ! If True, fix the OBL depth to FIXED_OBLDEPTH_VALUE + ! rather than using the OBL depth from CVMix. + ! This option is just for testing purposes. +FIXED_OBLDEPTH_VALUE = 30.0 ! [m] default = 30.0 + ! Value for the fixed OBL depth when fixedOBLdepth==True. + ! This parameter is for just for testing purposes. + ! It will over-ride the OBLdepth computed from CVMix. +SURF_LAYER_EXTENT = 0.1 ! [nondim] default = 0.1 + ! Fraction of OBL depth considered in the surface layer. +MINIMUM_OBL_DEPTH = 0.0 ! [m] default = 0.0 + ! If non-zero, a minimum depth to use for KPP OBL depth. Independent of + ! this parameter, the OBL depth is always at least as deep as the first layer. +MINIMUM_VT2 = 1.0E-10 ! [m2/s2] default = 1.0E-10 + ! Min of the unresolved velocity Vt2 used in Rib CVMix calculation. + ! Scaling: MINIMUM_VT2 = const1*d*N*ws, with d=1m, N=1e-5/s, ws=1e-6 m/s. +CORRECT_SURFACE_LAYER_AVERAGE = False ! [Boolean] default = False + ! If true, applies a correction step to the averaging of surface layer + ! properties. This option is obsolete. +FIRST_GUESS_SURFACE_LAYER_DEPTH = 0.0 ! [m] default = 0.0 + ! The first guess at the depth of the surface layer used for averaging + ! the surface layer properties. If =0, the top model level properties + ! will be used for the surface layer. If CORRECT_SURFACE_LAYER_AVERAGE=True, a + ! subsequent correction is applied. This parameter is obsolete +NLT_SHAPE = "PARABOLIC" ! default = "CVMIX" + ! MOM6 method to set nonlocal transport profile. + ! Over-rides the result from CVMix. Allowed values are: + ! CVMIX - Uses the profiles from CVmix specified by MATCH_TECHNIQUE + ! LINEAR - A linear profile, 1-sigma + ! PARABOLIC - A parablic profile, (1-sigma)^2 + ! CUBIC - A cubic profile, (1-sigma)^2(1+2*sigma) + ! CUBIC_LMD - The original KPP profile +MATCH_TECHNIQUE = "SimpleShapes" ! default = "SimpleShapes" + ! CVMix method to set profile function for diffusivity and NLT, + ! as well as matching across OBL base. Allowed values are: + ! SimpleShapes = sigma*(1-sigma)^2 for both diffusivity and NLT + ! MatchGradient = sigma*(1-sigma)^2 for NLT; diffusivity profile from matching + ! MatchBoth = match gradient for both diffusivity and NLT + ! ParabolicNonLocal = sigma*(1-sigma)^2 for diffusivity; (1-sigma)^2 for NLT +KPP_ZERO_DIFFUSIVITY = False ! [Boolean] default = False + ! If True, zeroes the KPP diffusivity and viscosity; for testing purpose. +KPP_IS_ADDITIVE = True ! [Boolean] default = True + ! If true, adds KPP diffusivity to diffusivity from other schemes.If false, KPP is the only diffusivity wherever KPP is non-zero. +%KPP +KPP_BEFORE_KAPPA_SHEAR = True ! [Boolean] default = True + ! If true, KPP matches interior diffusivity that EXCLUDES any + ! diffusivity from kappa-shear. +SALT_REJECT_BELOW_ML = False ! [Boolean] default = False + ! If true, place salt from brine rejection below the mixed layer, + ! into the first non-vanished layer for which the column remains stable + +! === module MOM_diffConvection === +! This module implements enhanced diffusivity as a +! function of static stability, N^2. +USE_CONVECTION = False ! [Boolean] default = False + ! If true, turns on the diffusive convection scheme that + ! increases diapycnal diffusivities at statically unstable + ! interfaces. Relevant parameters are contained in the + ! CONVECTION% parameter block. +CONVECTION% +PASSIVE = False ! [Boolean] default = False + ! If True, puts KPP into a passive-diagnostic mode. +KD_CONV = 1.0 ! [m2/s] default = 1.0 + ! DIffusivity used in statically unstable regions of column. +%CONVECTION + +! === module MOM_entrain_diffusive === +CORRECT_DENSITY = True ! [Boolean] default = True + ! If true, and USE_EOS is true, the layer densities are + ! restored toward their target values by the diapycnal + ! mixing, as described in Hallberg (MWR, 2000). +MAX_ENT_IT = 5 ! default = 5 + ! The maximum number of iterations that may be used to + ! calculate the interior diapycnal entrainment. +TOLERANCE_ENT = 2.683281572999748E-05 ! [m] default = 2.683281572999748E-05 + ! The tolerance with which to solve for entrainment values. + +! === module MOM_regularize_layers === +REGULARIZE_SURFACE_LAYERS = False ! [Boolean] default = False + ! If defined, vertically restructure the near-surface + ! layers when they have too much lateral variations to + ! allow for sensible lateral barotropic transports. +HMIX_MIN = 0.0 ! [m] default = 0.0 + ! The minimum mixed layer depth if the mixed layer depth + ! is determined dynamically. +REG_SFC_DEFICIT_TOLERANCE = 0.5 ! [nondim] default = 0.5 + ! The value of the relative thickness deficit at which + ! to start modifying the layer structure when + ! REGULARIZE_SURFACE_LAYERS is true. +ALLOW_CLOCKS_IN_OMP_LOOPS = True ! [Boolean] default = True + ! If true, clocks can be called from inside loops that can + ! be threaded. To run with multiple threads, set to False. + +! === module MOM_opacity === +VAR_PEN_SW = True ! [Boolean] default = False + ! If true, use one of the CHL_A schemes specified by + ! OPACITY_SCHEME to determine the e-folding depth of + ! incoming short wave radiation. +OPACITY_SCHEME = "MANIZZA_05" ! default = "MANIZZA_05" + ! This character string specifies 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_FROM_FILE = True ! [Boolean] default = True + ! If true, chl_a is read from a file. +CHL_FILE = "seawifs_1998-2006_smoothed_2X.nc" ! + ! CHL_FILE is the file containing chl_a concentrations in + ! the variable CHL_A. It is used when VAR_PEN_SW and + ! CHL_FROM_FILE are true. +BLUE_FRAC_SW = 0.5 ! [nondim] default = 0.5 + ! The fraction of the penetrating shortwave radiation + ! that is in the blue band. +PEN_SW_NBANDS = 3 ! default = 1 + ! The number of bands of penetrating shortwave radiation. +OPACITY_LAND_VALUE = 10.0 ! [m-1] default = 10.0 + ! The value to use for opacity over land. The default is + ! 10 m-1 - a value for muddy water. + +! === module MOM_tracer_advect === +TRACER_ADVECTION_SCHEME = "PPM:H3" ! default = "PLM" + ! The horizontal transport scheme for tracers: + ! PLM - Piecewise Linear Method + ! PPM:H3 - Piecewise Parabolic Method (Huyhn 3rd order) + +! === module MOM_tracer_hor_diff === +KHTR = 0.0 ! [m2 s-1] default = 0.0 + ! The background along-isopycnal tracer diffusivity. +KHTR_MIN = 0.0 ! [m2 s-1] default = 0.0 + ! The minimum along-isopycnal tracer diffusivity. +KHTR_MAX = 0.0 ! [m2 s-1] default = 0.0 + ! The maximum along-isopycnal tracer diffusivity. +KHTR_PASSIVITY_COEFF = 0.0 ! [nondim] default = 0.0 + ! The coefficient that scales deformation radius over + ! grid-spacing in passivity, where passiviity is the ratio + ! between along isopycnal mxiing of tracers to thickness mixing. + ! A non-zero value enables this parameterization. +KHTR_PASSIVITY_MIN = 0.5 ! [nondim] default = 0.5 + ! The minimum passivity which is the ratio between + ! along isopycnal mxiing of tracers to thickness mixing. +DIFFUSE_ML_TO_INTERIOR = False ! [Boolean] default = False + ! If true, enable epipycnal mixing between the surface + ! boundary layer and the interior. +CHECK_DIFFUSIVE_CFL = True ! [Boolean] default = False + ! If true, use enough iterations the diffusion to ensure + ! that the diffusive equivalent of the CFL limit is not + ! violated. If false, always use 1 iteration. +OBSOLETE_DIAGNOSTIC_IS_FATAL = True ! [Boolean] default = True + ! If an obsolete diagnostic variable appears in the diag_table + ! then cause a FATAL error rather than issue a WARNING. + +! === module ocean_model_init === +RESTART_CONTROL = 1 ! default = 1 + ! An integer whose bits encode which restart files are + ! written. Add 2 (bit 1) for a time-stamped file, and odd + ! (bit 0) for a non-time-stamped file. A restart file + ! will be saved at the end of the run segment for any + ! non-negative value. +TIMEUNIT = 8.64E+04 ! [s] default = 8.64E+04 + ! The time unit for ENERGYSAVEDAYS. +ENERGYSAVEDAYS = 0.25 ! [days] default = 1.0 + ! The interval in units of TIMEUNIT between saves of the + ! energies of the run and other globally summed diagnostics. +OCEAN_SURFACE_STAGGER = "B" ! default = "B" + ! A case-insensitive character string to indicate the + ! staggering of the surface velocity field that is + ! returned to the coupler. Valid values include + ! 'A', 'B', or 'C'. +RESTORE_SALINITY = False ! [Boolean] default = False + ! If true, the coupled driver will add a globally-balanced + ! fresh-water flux that drives sea-surface salinity + ! toward specified values. + +! === module MOM_surface_forcing === +LATENT_HEAT_FUSION = 3.34E+05 ! [J/kg] default = 3.34E+05 + ! The latent heat of fusion. +LATENT_HEAT_VAPORIZATION = 2.5E+06 ! [J/kg] default = 2.5E+06 + ! The latent heat of fusion. +MAX_P_SURF = 0.0 ! [Pa] default = -1.0 + ! The maximum surface pressure that can be exerted by the + ! atmosphere and floating sea-ice or ice shelves. 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. +ADJUST_NET_SRESTORE_TO_ZERO = False ! [Boolean] default = False + ! If true, adjusts the salinity restoring seen to zero + ! whether restoring is via a salt flux or virtual precip. +ADJUST_NET_SRESTORE_BY_SCALING = False ! [Boolean] default = False + ! If true, adjustments to salt restoring to achieve zero net are + ! made by scaling values without moving the zero contour. +ADJUST_NET_FRESH_WATER_TO_ZERO = False ! [Boolean] default = False + ! If true, adjusts the net fresh-water forcing seen + ! by the ocean (including restoring) to zero. +ADJUST_NET_FRESH_WATER_BY_SCALING = False ! [Boolean] default = False + ! If true, adjustments to net fresh water to achieve zero net are + ! made by scaling values without moving the zero contour. +ICE_SALT_CONCENTRATION = 0.005 ! [kg/kg] default = 0.005 + ! The assumed sea-ice salinity needed to reverse engineer the + ! melt flux (or ice-ocean fresh-water flux). +USE_LIMITED_PATM_SSH = True ! [Boolean] default = True + ! If true, return the the sea surface height with the + ! correction for the atmospheric (and sea-ice) pressure + ! limited by max_p_surf instead of the full atmospheric + ! pressure. +WIND_STAGGER = "C" ! default = "C" + ! A case-insensitive character string to indicate the + ! staggering of the input wind stress field. Valid + ! values are 'A', 'B', or 'C'. +CD_TIDES = 0.0018 ! [nondim] default = 1.0E-04 + ! The drag coefficient that applies to the tides. +READ_GUST_2D = False ! [Boolean] default = False + ! If true, use a 2-dimensional gustiness supplied from + ! an input file +GUST_CONST = 0.02 ! [Pa] default = 0.02 + ! The background gustiness in the winds. +USE_RIGID_SEA_ICE = False ! [Boolean] default = False + ! If true, sea-ice is rigid enough to exert a + ! nonhydrostatic pressure that resist vertical motion. + +! === module MOM_sum_output === +CALCULATE_APE = True ! [Boolean] default = True + ! If true, calculate the available potential energy of + ! the interfaces. Setting this to false reduces the + ! memory footprint of high-PE-count models dramatically. +WRITE_STOCKS = True ! [Boolean] default = True + ! If true, write the integrated tracer amounts to stdout + ! when the energy files are written. +MAXTRUNC = 100000 ! [truncations save_interval-1] default = 0 + ! 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. +MAX_ENERGY = 0.0 ! [m2 s-2] default = 0.0 + ! The maximum permitted average energy per unit mass; the + ! model will be stopped if there is more energy than + ! this. If zero or negative, this is set to 10*MAXVEL^2. +ENERGYFILE = "timestats" ! default = "timestats" + ! The file to use to write the energies and globally + ! summed diagnostics. +READ_DEPTH_LIST = False ! [Boolean] default = False + ! Read the depth list from a file if it exists or + ! create that file otherwise. +DEPTH_LIST_MIN_INC = 1.0E-10 ! [m] default = 1.0E-10 + ! The minimum increment between the depths of the + ! entries in the depth-list file. +SEND_LOG_TO_STDOUT = False ! [Boolean] default = False + ! If true, all log messages are also sent to stdout. +REPORT_UNUSED_PARAMS = False ! [Boolean] default = False + ! If true, report any parameter lines that are not used + ! in the run. +FATAL_UNUSED_PARAMS = False ! [Boolean] default = False + ! If true, kill the run if there are any unused + ! parameters. +DOCUMENT_FILE = "MOM_parameter_doc" ! default = "MOM_parameter_doc" + ! The basename for files where run-time parameters, their + ! settings, units and defaults are documented. Blank will + ! disable all parameter documentation. +COMPLETE_DOCUMENTATION = True ! [Boolean] default = True + ! If true, all run-time parameters are + ! documented in MOM_parameter_doc.all . +MINIMAL_DOCUMENTATION = True ! [Boolean] default = True + ! If true, non-default run-time parameters are + ! documented in MOM_parameter_doc.short . diff --git a/ice_ocean_SIS2/FLOR2/MOM_parameter_doc.layout b/ice_ocean_SIS2/FLOR2/MOM_parameter_doc.layout new file mode 100644 index 0000000000..6257e6a5a0 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/MOM_parameter_doc.layout @@ -0,0 +1,66 @@ +! This file was written by the model and records the layout parameters used at run-time. +!SYMMETRIC_MEMORY_ = False ! [Boolean] + ! If defined, the velocity point data domain includes + ! every face of the thickness points. In other words, + ! some arrays are larger than others, depending on where + ! they are on the staggered grid. Also, the starting + ! index of the velocity-point arrays is usually 0, not 1. + ! This can only be set at compile time. +NONBLOCKING_UPDATES = False ! [Boolean] default = False + ! If true, non-blocking halo updates may be used. +!STATIC_MEMORY_ = False ! [Boolean] + ! If STATIC_MEMORY_ is defined, the principle variables + ! will have sizes that are statically determined at + ! compile time. Otherwise the sizes are not determined + ! until run time. The STATIC option is substantially + ! faster, but does not allow the PE count to be changed + ! at run time. This can only be set at compile time. +NIHALO = 4 ! default = 2 + ! The number of halo points on each side in the + ! x-direction. With STATIC_MEMORY_ this is set as NIHALO_ + ! in MOM_memory.h at compile time; without STATIC_MEMORY_ + ! the default is NIHALO_ in MOM_memory.h (if defined) or 2. +NJHALO = 4 ! default = 2 + ! The number of halo points on each side in the + ! y-direction. With STATIC_MEMORY_ this is set as NJHALO_ + ! in MOM_memory.h at compile time; without STATIC_MEMORY_ + ! the default is NJHALO_ in MOM_memory.h (if defined) or 2. +MASKTABLE = "MOM_mask_table" ! default = "MOM_mask_table" + ! A text file to specify n_mask, layout and mask_list. + ! This feature masks out processors that contain only land points. + ! The first line of mask_table is the number of regions to be masked out. + ! The second line is the layout of the model and must be + ! consistent with the actual model layout. + ! The following (n_mask) lines give the logical positions + ! of the processors that are masked out. The mask_table + ! can be created by tools like check_mask. The + ! following example of mask_table masks out 2 processors, + ! (1,2) and (3,6), out of the 24 in a 4x6 layout: + ! 2 + ! 4,6 + ! 1,2 + ! 3,6 +NIPROC = 18 ! + ! The number of processors in the x-direction. With + ! STATIC_MEMORY_ this is set in MOM_memory.h at compile time. +NJPROC = 16 ! + ! The number of processors in the x-direction. With + ! STATIC_MEMORY_ this is set in MOM_memory.h at compile time. +LAYOUT = 18, 16 ! + ! The processor layout that was acutally used. +IO_LAYOUT = 2, 2 ! default = 0 + ! The processor layout to be used, or 0,0 to automatically + ! set the io_layout to be the same as the layout. +NIBLOCK = 1 ! default = 1 + ! The number of blocks in the x-direction on each processor (for openmp). +NJBLOCK = 1 ! default = 1 + ! The number of blocks in the y-direction on each processor (for openmp). +BT_USE_WIDE_HALOS = True ! [Boolean] default = True + ! If true, use wide halos and march in during the + ! barotropic time stepping for efficiency. +BTHALO = 0 ! default = 0 + ! The minimum halo size for the barotropic solver. +!BT x-halo = 0 ! + ! The barotropic x-halo size that is actually used. +!BT y-halo = 0 ! + ! The barotropic y-halo size that is actually used. diff --git a/ice_ocean_SIS2/FLOR2/MOM_parameter_doc.short b/ice_ocean_SIS2/FLOR2/MOM_parameter_doc.short new file mode 100644 index 0000000000..31798036be --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/MOM_parameter_doc.short @@ -0,0 +1,572 @@ +! This file was written by the model and records the non-default parameters used at run-time. +TRIPOLAR_N = True ! [Boolean] default = False + ! Use tripolar connectivity at the northern edge of the + ! domain. With TRIPOLAR_N, NIGLOBAL must be even. +NIGLOBAL = 360 ! + ! The total number of thickness grid points in the + ! x-direction in the physical domain. With STATIC_MEMORY_ + ! this is set in MOM_memory.h at compile time. +NJGLOBAL = 320 ! + ! The total number of thickness grid points in the + ! y-direction in the physical domain. With STATIC_MEMORY_ + ! this is set in MOM_memory.h at compile time. + +! === module MOM_grid === +! Parameters providing information about the vertical grid. +NK = 75 ! [nondim] + ! The number of model layers. + +! === module MOM_verticalGrid === +! Parameters providing information about the vertical grid. + +! === module MOM === +DIABATIC_FIRST = True ! [Boolean] default = False + ! If true, apply diabatic and thermodynamic processes, + ! including buoyancy forcing and mass gain or loss, + ! before stepping the dynamics forward. +BULKMIXEDLAYER = False ! [Boolean] default = True + ! If true, 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 true. + ! The default is the same setting as ENABLE_THERMODYNAMICS. +USE_REGRIDDING = True ! [Boolean] default = False + ! If True, use the ALE algorithm (regridding/remapping). + ! If False, use the layered isopycnal algorithm. +THICKNESSDIFFUSE = True ! [Boolean] default = False + ! If true, interfaces or isopycnal surfaces are diffused, + ! depending on the value of FULL_THICKNESSDIFFUSE. +THICKNESSDIFFUSE_FIRST = True ! [Boolean] default = False + ! If true, do thickness diffusion before dynamics. + ! This is only used if THICKNESSDIFFUSE is true. +DT = 3600.0 ! [s] + ! The (baroclinic) dynamics time step. The time-step that + ! is actually used will be an integer fraction of the + ! forcing time-step (DT_FORCING in ocean-only mode or the + ! coupling timestep in coupled mode.) +DT_THERM = 7200.0 ! [s] default = 3600.0 + ! The thermodynamic and tracer advection time step. + ! Ideally DT_THERM should be an integer multiple of DT + ! and less than the forcing or coupling time-step, unless + ! THERMO_SPANS_COUPLING is true, in which case DT_THERM + ! can be an integer multiple of the coupling timestep. By + ! default DT_THERM is set to DT. +MIN_Z_DIAG_INTERVAL = 2.16E+04 ! [s] default = 0.0 + ! 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. +DTBT_RESET_PERIOD = -1.0 ! [s] default = 7200.0 + ! The period between recalculations of DTBT (if DTBT <= 0). + ! 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. The default is + ! set by DT_THERM. This is only used if SPLIT is true. +FRAZIL = True ! [Boolean] default = False + ! If true, water freezes if it gets too cold, and the + ! the accumulated heat deficit is returned in the + ! surface state. FRAZIL is only used if + ! ENABLE_THERMODYNAMICS is true. +BOUND_SALINITY = True ! [Boolean] default = False + ! If true, limit salinity to being positive. (The sea-ice + ! model may ask for more salt than is available and + ! drive the salinity negative otherwise.) +C_P = 3925.0 ! [J kg-1 K-1] default = 3991.86795711963 + ! The heat capacity of sea water, approximated as a + ! constant. This is only used if ENABLE_THERMODYNAMICS is + ! true. The default value is from the TEOS-10 definition + ! of conservative temperature. +CHECK_BAD_SURFACE_VALS = True ! [Boolean] default = False + ! If true, check the surface state for ridiculous values. +BAD_VAL_SSH_MAX = 50.0 ! [m] default = 20.0 + ! The value of SSH above which a bad value message is + ! triggered, if CHECK_BAD_SURFACE_VALS is true. +BAD_VAL_SSS_MAX = 75.0 ! [PSU] default = 45.0 + ! The value of SSS above which a bad value message is + ! triggered, if CHECK_BAD_SURFACE_VALS is true. +BAD_VAL_SST_MAX = 55.0 ! [deg C] default = 45.0 + ! The value of SST above which a bad value message is + ! triggered, if CHECK_BAD_SURFACE_VALS is true. +BAD_VAL_SST_MIN = -3.0 ! [deg C] default = -2.1 + ! The value of SST below which a bad value message is + ! triggered, if CHECK_BAD_SURFACE_VALS is true. + +! === module MOM_tracer_registry === +DTFREEZE_DP = -7.75E-08 ! [deg C Pa-1] default = 0.0 + ! When TFREEZE_FORM=LINEAR, + ! this is the derivative of the freezing potential + ! temperature with pressure. +PARALLEL_RESTARTFILES = True ! [Boolean] default = False + ! If true, each processor writes its own restart file, + ! otherwise a single restart file is generated + +! === module MOM_tracer_flow_control === +USE_IDEAL_AGE_TRACER = True ! [Boolean] default = False + ! If true, use the ideal_age_example tracer package. + +! === module ideal_age_example === +INPUTDIR = "INPUT" ! default = "." + ! The directory in which input files are found. + +! === module MOM_grid_init === +GRID_CONFIG = "mosaic" ! + ! A character string that determines the method for + ! defining the horizontal grid. Current options are: + ! mosaic - read the grid from a mosaic (supergrid) + ! file set by GRID_FILE. + ! cartesian - use a (flat) Cartesian grid. + ! spherical - use a simple spherical grid. + ! mercator - use a Mercator spherical grid. +GRID_FILE = "ocean_hgrid.nc" ! + ! Name of the file from which to read horizontal grid data. +TOPO_CONFIG = "file" ! + ! This specifies how bathymetry is specified: + ! file - read bathymetric information from the file + ! specified by (TOPO_FILE). + ! flat - flat bottom set to MAXIMUM_DEPTH. + ! bowl - an analytically specified bowl-shaped basin + ! ranging between MAXIMUM_DEPTH and MINIMUM_DEPTH. + ! spoon - a similar shape to 'bowl', but with an vertical + ! wall at the southern face. + ! halfpipe - a zonally uniform channel with a half-sine + ! profile in the meridional direction. + ! benchmark - use the benchmark test case topography. + ! DOME - use a slope and channel configuration for the + ! DOME sill-overflow test case. + ! DOME2D - use a shelf and slope configuration for the + ! DOME2D gravity current/overflow test case. + ! seamount - Gaussian bump for spontaneous motion test case. + ! Phillips - ACC-like idealized topography used in the Phillips config. + ! USER - call a user modified routine. +MAXIMUM_DEPTH = 6500.0 ! [m] + ! The maximum depth of the ocean. +MINIMUM_DEPTH = 9.5 ! [m] default = 0.0 + ! If MASKING_DEPTH is unspecified, then anything shallower than + ! MINIMUM_DEPTH is assumed to be land and all fluxes are masked out. + ! If MASKING_DEPTH is specified, then all depths shallower than + ! MINIMUM_DEPTH but depper than MASKING_DEPTH are rounded to MINIMUM_DEPTH. +COORD_CONFIG = "file" ! + ! This specifies how layers are to be defined: + ! file - read coordinate information from the file + ! specified by (COORD_FILE). + ! linear - linear based on interfaces not layesrs. + ! ts_ref - use reference temperature and salinity + ! ts_range - use range of 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 temperature and salinity profiles + ! (read from COORD_FILE) to set layer densities. + ! USER - call a user modified routine. +COORD_FILE = "layer_coord.nc" ! + ! The file from which the coordinate densities are read. +MASKING_DEPTH = 0.0 ! [m] default = -9999.0 + ! The depth below which to mask points as land points, for which all + ! fluxes are zeroed out. MASKING_DEPTH is ignored if negative. +CHANNEL_CONFIG = "list" ! default = "none" + ! A parameter that determines which set of channels are + ! restricted to specific widths. Options are: + ! none - All channels have the grid width. + ! global_1deg - Sets 16 specific channels appropriate + ! for a 1-degree model, as used in CM2G. + ! list - Read the channel locations and widths from a + ! text file, like MOM_channel_list in the MOM_SIS + ! test case. + ! file - Read open face widths everywhere from a + ! NetCDF file on the model grid. +CHANNEL_LIST_FILE = "MOM_channels_FLOR" ! default = "MOM_channel_list" + ! The file from which the list of narrowed channels is read. +WRITE_GEOM = 0 ! default = 1 + ! If =0, never write the geometry and vertical grid files. + ! If =1, write the geometry and vertical grid files only for + ! a new simulation. If =2, always write the geometry and + ! vertical grid files. Other values are invalid. +REGRIDDING_COORDINATE_MODE = "Z*" ! default = "LAYER" + ! Coordinate mode for vertical regridding. + ! Choose among the following possibilities: + ! LAYER - Isopycnal or stacked shallow water layers + ! Z* - stetched geopotential z* + ! SIGMA - terrain following coordinates + ! RHO - continuous isopycnal +ALE_COORDINATE_CONFIG = "FILE:INPUT/vgrid_75_2m.nc,dz" ! default = "UNIFORM" + ! Determines how to specify the coordinate + ! resolution. Valid options are: + ! PARAM - use the vector-parameter ALE_RESOLUTION + ! UNIFORM - uniformly distributed + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,Z +!ALE_RESOLUTION = 4*2.0, 2*2.01, 2.02, 2.03, 2.05, 2.08, 2.11, 2.15, 2.2, 2.27, 2.34, 2.44, 2.55, 2.69, 2.85, 3.04, 3.27, 3.54, 3.85, 4.22, 4.66, 5.18, 5.79, 6.52, 7.37, 8.37, 9.55, 10.94, 12.57, 14.48, 16.72, 19.33, 22.36, 25.87, 29.91, 34.53, 39.79, 45.72, 52.37, 59.76, 67.89, 76.74, 86.29, 96.47, 107.2, 118.35, 129.81, 141.42, 153.01, 164.41, 175.47, 186.01, 195.9, 205.01, 213.27, 220.6, 226.99, 232.43, 236.96, 240.63, 243.52, 245.72, 247.33, 248.45, 249.18, 249.62, 249.86, 249.96, 249.99, 2*250.0 ! [m] + ! The distribution of vertical resolution for the target + ! grid used for Eulerian-like coordinates. For example, + ! in z-coordinate mode, the parameter is a list of level + ! thicknesses (in m). In sigma-coordinate mode, the list + ! is of non-dimensional fractions of the water column. +REMAPPING_SCHEME = "PPM_H4" ! default = "PLM" + ! This sets the reconstruction scheme used + ! for vertical remapping for all variables. + ! It can be one of the following schemes: + ! PCM (1st-order accurate) + ! PLM (2nd-order accurate) + ! PPM_H4 (3rd-order accurate) + ! PPM_IH4 (3rd-order accurate) + ! PQM_IH4IH3 (4th-order accurate) + ! PQM_IH6IH5 (5th-order accurate) +INIT_LAYERS_FROM_Z_FILE = True ! [Boolean] default = False + ! If true, intialize the layer thicknesses, temperatures, + ! and salnities from a Z-space file on a latitude- + ! longitude grid. +TEMP_SALT_Z_INIT_FILE = "WOA05_pottemp_salt.nc" ! default = "temp_salt_z.nc" + ! The name of the z-space input file used to initialize + ! the layer thicknesses, temperatures and salinities. +Z_INIT_FILE_PTEMP_VAR = "PTEMP" ! default = "ptemp" + ! The name of the potential temperature variable in + ! TEMP_SALT_Z_INIT_FILE. +Z_INIT_FILE_SALT_VAR = "SALT" ! default = "salt" + ! The name of the salinity variable in + ! TEMP_SALT_Z_INIT_FILE. +Z_INIT_ALE_REMAPPING = True ! [Boolean] default = False + ! If True, then remap straight to model coordinate from file. + +! === module MOM_MEKE === +USE_MEKE = True ! [Boolean] default = False + ! If true, turns on the MEKE scheme which calculates + ! a sub-grid mesoscale eddy kinetic energy budget. +MEKE_GMCOEFF = 1.0 ! [nondim] default = -1.0 + ! The efficiency of the conversion of potential energy + ! into MEKE by the thickness mixing parameterization. + ! If MEKE_GMCOEFF is negative, this conversion is not + ! used or calculated. +MEKE_BGSRC = 1.0E-13 ! [W kg-1] default = 0.0 + ! A background energy source for MEKE. + +! === module MOM_lateral_mixing_coeffs === +USE_VARIABLE_MIXING = True ! [Boolean] default = False + ! If true, the variable mixing code will be called. This + ! allows diagnostics to be created even if the scheme is + ! not used. If KHTR_SLOPE_CFF>0 or KhTh_Slope_Cff>0, + ! this is set to true regardless of what is in the + ! parameter file. +RESOLN_SCALED_KH = True ! [Boolean] default = False + ! If true, the Laplacian lateral viscosity is scaled away + ! when the first baroclinic deformation radius is well + ! resolved. +RESOLN_SCALED_KHTH = True ! [Boolean] default = False + ! If true, the interface depth diffusivity is scaled away + ! when the first baroclinic deformation radius is well + ! resolved. +KHTR_SLOPE_CFF = 0.25 ! [nondim] default = 0.0 + ! The nondimensional coefficient in the Visbeck formula + ! for the epipycnal tracer diffusivity +USE_STORED_SLOPES = True ! [Boolean] default = False + ! If true, the isopycnal slopes are calculated once and + ! stored for re-use. This uses more memory but avoids calling + ! the equation of state more times than should be necessary. + +! === module MOM_wave_speed === + +! === module MOM_set_visc === +CHANNEL_DRAG = True ! [Boolean] default = False + ! If true, the bottom stress is calculated with a drag + ! law of the form 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. +PRANDTL_TURB = 1.0 ! [nondim] default = 0.0 + ! The turbulent Prandtl number applied to shear + ! instability. +HBBL = 10.0 ! [m] + ! The thickness 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. +DRAG_BG_VEL = 0.1 ! [m s-1] default = 0.0 + ! 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. DRAG_BG_VEL is only used when + ! BOTTOMDRAGLAW is defined. +BBL_THICK_MIN = 0.1 ! [m] default = 0.0 + ! The minimum bottom boundary layer thickness that can be + ! used with BOTTOMDRAGLAW. This might be + ! Kv / (cdrag * drag_bg_vel) to give Kv as the minimum + ! near-bottom viscosity. +SMAG_CONST_CHANNEL = 0.15 ! [nondim] default = 0.01 + ! 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 value used is + ! also 0.15 if the specified value is negative. +ETA_TOLERANCE = 1.0E-06 ! [m] default = 3.75E-09 + ! The tolerance 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*ANGSTROM, and this should not be set less x + ! than about 10^-15*MAXIMUM_DEPTH. +ETA_TOLERANCE_AUX = 0.001 ! [m] default = 1.0E-06 + ! The tolerance for free-surface height discrepancies + ! between the barotropic solution and the sum of the + ! layer thicknesses when calculating the auxiliary + ! corrected velocities. By default, this is the same as + ! ETA_TOLERANCE, but can be made larger for efficiency. +CORIOLIS_SCHEME = "SADOURNY75_ENSTRO" ! default = "SADOURNY75_ENERGY" + ! CORIOLIS_SCHEME selects the discretization for the + ! Coriolis terms. Valid values are: + ! SADOURNY75_ENERGY - Sadourny, 1975; energy cons. + ! ARAKAWA_HSU90 - Arakawa & Hsu, 1990 + ! SADOURNY75_ENSTRO - Sadourny, 1975; enstrophy cons. + ! ARAKAWA_LAMB81 - Arakawa & Lamb, 1981; En. + Enst. + ! ARAKAWA_LAMB_BLEND - A blend of Arakawa & Lamb with + ! Arakawa & Hsu and Sadourny energy +BOUND_CORIOLIS = True ! [Boolean] default = False + ! If true, 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 Coriolis scheme if it + ! were possible to use centered difference thickness fluxes. +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. + +! === module MOM_hor_visc === +LAPLACIAN = True ! [Boolean] default = False + ! If true, use a Laplacian horizontal viscosity. +SMAGORINSKY_KH = True ! [Boolean] default = False + ! If true, use a Smagorinsky nonlinear eddy viscosity. +SMAG_LAP_CONST = 0.01 ! [nondim] default = 0.0 + ! The nondimensional Laplacian Smagorinsky constant, + ! often 0.15. +AH_VEL_SCALE = 0.025 ! [m s-1] default = 0.0 + ! The velocity scale which is multiplied by the cube of + ! the grid spacing to calculate the biharmonic viscosity. + ! The final viscosity is the largest of this scaled + ! viscosity, the Smagorinsky viscosity and AH. +SMAGORINSKY_AH = True ! [Boolean] default = False + ! If true, use a biharmonic Smagorinsky nonlinear eddy + ! viscosity. +SMAG_BI_CONST = 0.06 ! [nondim] default = 0.0 + ! The nondimensional biharmonic Smagorinsky constant, + ! typically 0.015 - 0.06. + +! === module MOM_vert_friction === +U_TRUNC_FILE = "U_velocity_truncations" ! default = "" + ! 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" ! default = "" + ! 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. +HMIX_FIXED = 0.5 ! [m] + ! The prescribed depth over which the near-surface + ! viscosity and diffusivity are elevated when the bulk + ! mixed layer is not used. +KV = 1.0E-04 ! [m2 s-1] + ! The background kinematic viscosity in the interior. + ! The molecular value, ~1e-6 m2 s-1, may be used. +MAXVEL = 6.0 ! [m s-1] default = 3.0E+08 + ! The maximum velocity allowed before the velocity + ! components are truncated. + +! === module MOM_PointAccel === + +! === module MOM_barotropic === +BOUND_BT_CORRECTION = True ! [Boolean] default = False + ! If true, the corrective pseudo mass-fluxes into the + ! barotropic solver are limited to values that require + ! less than maxCFL_BT_cont to be accommodated. +BT_PROJECT_VELOCITY = True ! [Boolean] default = False + ! If true, step the barotropic velocity first and project + ! out the velocity tendancy by 1+BEBT when calculating the + ! transport. The default (false) is to use a predictor + ! continuity step to find the pressure field, and then + ! to do a corrector continuity step using a weighted + ! average of the old and new velocities, with weights + ! of (1-BEBT) and BEBT. +BT_STRONG_DRAG = False ! [Boolean] default = True + ! If true, use a stronger estimate of the retarding + ! effects of strong bottom drag, by making it implicit + ! with the barotropic time-step instead of implicit with + ! the baroclinic time-step and dividing by the number of + ! barotropic steps. +BEBT = 0.2 ! [nondim] default = 0.1 + ! 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. +DTBT = -0.9 ! [s or nondim] default = -0.98 + ! 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. + ! Setting DTBT to 0 is the same as setting it to -0.98. + ! The value of DTBT that will actually be used is an + ! integer fraction of DT, rounding down. + +! === module MOM_thickness_diffuse === + +! === module MOM_mixed_layer_restrat === +MIXEDLAYER_RESTRAT = True ! [Boolean] default = False + ! If true, a density-gradient dependent re-stratifying + ! flow is imposed in the mixed layer. + ! This is only used if BULKMIXEDLAYER is true. +FOX_KEMPER_ML_RESTRAT_COEF = 10.0 ! [nondim] default = 0.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 the + ! 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 + ! by Fox-Kemper et al. (2010) +Z_OUTPUT_GRID_FILE = "vgrid_75_2m.nc" ! default = "" + ! The file that specifies the vertical grid for + ! depth-space diagnostics, or blank to disable + ! depth-space output. +!NK_ZSPACE (from file) = 35 ! [nondim] + ! The number of depth-space levels. This is determined + ! from the size of the variable zw in the output grid file. + +! === module MOM_diabatic_driver === +! The following parameters are used for diabatic processes. +PRESSURE_DEPENDENT_FRAZIL = True ! [Boolean] default = False + ! If true, use a pressure dependent freezing temperature + ! when making frazil. The default is false, which will be + ! faster but is inappropriate with ice-shelf cavities. +BBL_MIXING_AS_MAX = False ! [Boolean] default = True + ! 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. +HENYEY_IGW_BACKGROUND = True ! [Boolean] default = False + ! If true, use a latitude-dependent scaling for the near + ! surface background diffusivity, as described in + ! Harrison & Hallberg, JPO 2008. +N2_FLOOR_IOMEGA2 = 0.0 ! [nondim] default = 1.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. +KD = 2.0E-05 ! [m2 s-1] + ! The background diapycnal diffusivity of density in the + ! interior. Zero or the molecular value, ~1e-7 m2 s-1, + ! may be used. +KD_MIN = 2.0E-06 ! [m2 s-1] default = 2.0E-07 + ! The minimum diapycnal diffusivity. +KDML = 1.0E-04 ! [m2 s-1] default = 2.0E-05 + ! If BULKMIXEDLAYER is false, KDML is the elevated + ! diapycnal diffusivity in the topmost HMIX of fluid. + ! KDML is only used if BULKMIXEDLAYER is false. +INT_TIDE_DISSIPATION = True ! [Boolean] default = False + ! If true, use an internal tidal dissipation scheme to + ! drive diapycnal mixing, along the lines of St. Laurent + ! et al. (2002) and Simmons et al. (2004). +INT_TIDE_DECAY_SCALE = 300.3003003003003 ! [m] default = 0.0 + ! The decay scale away from the bottom for tidal TKE with + ! the new coding when INT_TIDE_DISSIPATION is used. +KAPPA_ITIDES = 6.28319E-04 ! [m-1] default = 6.283185307179586E-04 + ! A topographic wavenumber used with INT_TIDE_DISSIPATION. + ! The default is 2pi/10 km, as in St.Laurent et al. 2002. +KAPPA_H2_FACTOR = 0.84 ! [nondim] default = 1.0 + ! A scaling factor for the roughness amplitude with nINT_TIDE_DISSIPATION. +TKE_ITIDE_MAX = 0.1 ! [W m-2] default = 1000.0 + ! The maximum internal tide energy source availble to mix + ! above the bottom boundary layer with INT_TIDE_DISSIPATION. +READ_TIDEAMP = True ! [Boolean] default = False + ! If true, read a file (given by TIDEAMP_FILE) containing + ! the tidal amplitude with INT_TIDE_DISSIPATION. +TIDEAMP_FILE = "tidal_amplitude.nc" ! default = "tideamp.nc" + ! The path to the file containing the spatially varying + ! tidal amplitudes with INT_TIDE_DISSIPATION. +H2_FILE = "topog.nc" ! + ! The path to the file containing the sub-grid-scale + ! topographic roughness amplitude with INT_TIDE_DISSIPATION. + +! === module MOM_kappa_shear === +! Parameterization of shear-driven turbulence following Jackson, Hallberg and Legg, JPO 2008 +USE_JACKSON_PARAM = True ! [Boolean] default = False + ! If true, use the Jackson-Hallberg-Legg (JPO 2008) + ! shear mixing parameterization. +MAX_RINO_IT = 25 ! [nondim] default = 50 + ! The maximum number of iterations that may be used to + ! estimate the Richardson number driven mixing. + +! === module MOM_KPP === +! This is the MOM wrapper to CVmix:KPP +! See http://code.google.com/p/cvmix/ +USE_KPP = True ! [Boolean] default = False + ! If true, turns on the [CVmix] KPP scheme of Large et al., 1994, + ! to calculate diffusivities and non-local transport in the OBL. +KPP% +NLT_SHAPE = "PARABOLIC" ! default = "CVMIX" + ! MOM6 method to set nonlocal transport profile. + ! Over-rides the result from CVMix. Allowed values are: + ! CVMIX - Uses the profiles from CVmix specified by MATCH_TECHNIQUE + ! LINEAR - A linear profile, 1-sigma + ! PARABOLIC - A parablic profile, (1-sigma)^2 + ! CUBIC - A cubic profile, (1-sigma)^2(1+2*sigma) + ! CUBIC_LMD - The original KPP profile +%KPP + +! === module MOM_diffConvection === +! This module implements enhanced diffusivity as a +! function of static stability, N^2. +CONVECTION% +%CONVECTION + +! === module MOM_entrain_diffusive === + +! === module MOM_regularize_layers === + +! === module MOM_opacity === +VAR_PEN_SW = True ! [Boolean] default = False + ! If true, use one of the CHL_A schemes specified by + ! OPACITY_SCHEME to determine the e-folding depth of + ! incoming short wave radiation. +CHL_FILE = "seawifs_1998-2006_smoothed_2X.nc" ! + ! CHL_FILE is the file containing chl_a concentrations in + ! the variable CHL_A. It is used when VAR_PEN_SW and + ! CHL_FROM_FILE are true. +PEN_SW_NBANDS = 3 ! default = 1 + ! The number of bands of penetrating shortwave radiation. + +! === module MOM_tracer_advect === +TRACER_ADVECTION_SCHEME = "PPM:H3" ! default = "PLM" + ! The horizontal transport scheme for tracers: + ! PLM - Piecewise Linear Method + ! PPM:H3 - Piecewise Parabolic Method (Huyhn 3rd order) + +! === module MOM_tracer_hor_diff === +CHECK_DIFFUSIVE_CFL = True ! [Boolean] default = False + ! If true, use enough iterations the diffusion to ensure + ! that the diffusive equivalent of the CFL limit is not + ! violated. If false, always use 1 iteration. + +! === module ocean_model_init === +ENERGYSAVEDAYS = 0.25 ! [days] default = 1.0 + ! The interval in units of TIMEUNIT between saves of the + ! energies of the run and other globally summed diagnostics. + +! === module MOM_surface_forcing === +MAX_P_SURF = 0.0 ! [Pa] default = -1.0 + ! The maximum surface pressure that can be exerted by the + ! atmosphere and floating sea-ice or ice shelves. 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. +CD_TIDES = 0.0018 ! [nondim] default = 1.0E-04 + ! The drag coefficient that applies to the tides. + +! === module MOM_sum_output === +MAXTRUNC = 100000 ! [truncations save_interval-1] default = 0 + ! 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. diff --git a/ice_ocean_SIS2/FLOR2/MOM_saltrestore b/ice_ocean_SIS2/FLOR2/MOM_saltrestore new file mode 100644 index 0000000000..44e053a81c --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/MOM_saltrestore @@ -0,0 +1,20 @@ +! These parameters are used in CORE mode but should not be used in +! the coupled model (CM4). +RESTORE_SALINITY = True ! [Boolean] default = False + ! If true, the coupled driver will add a globally-balanced + ! fresh-water flux that drives sea-surface salinity + ! toward specified values. +ADJUST_NET_FRESH_WATER_TO_ZERO = True ! [Boolean] default = False + ! If true, adjusts the net fresh-water forcing seen + ! by the ocean (including restoring) to zero. +FLUXCONST = 0.1667 ! [m day-1] + ! The constant that relates the restoring surface fluxes + ! to the relative surface anomalies (akin to a piston + ! velocity). Note the non-MKS units. +SALT_RESTORE_FILE = "salt_restore.nc" ! default = "salt_restore.nc" + ! A file in which to find the surface salinity to use for restoring. +SRESTORE_AS_SFLUX = True ! [Boolean] default = False + ! If true, the restoring of salinity is applied as a salt + ! flux instead of as a freshwater flux. +MAX_DELTA_SRESTORE = 5.0 ! [PSU or g kg-1] default = 999.0 + ! The maximum salinity difference used in restoring terms. diff --git a/ice_ocean_SIS2/FLOR2/SIS_input b/ice_ocean_SIS2/FLOR2/SIS_input new file mode 100644 index 0000000000..e3aafd36d1 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/SIS_input @@ -0,0 +1,141 @@ +!********+*********+*********+*********+*********+*********+*********+* +!* This file determines the adjustable run-time parameters for the * +!* Sea Ice Simulator (SIS), versions 2 and later. Where * +!* appropriate, MKS units are used. * +!********+*********+*********+*********+*********+*********+*********+* +! >>> Global coupled ice-ocean SIS2 5 layer ice, 63 layer ocean test case. + +DO_ICEBERGS = True ! If true, use the icebergs module. + +! 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). +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 = "ocean_hgrid.nc" + ! Name of file to read horizontal grid data +INPUTDIR = "INPUT" + ! INPUTDIR is a directory in which NetCDF + ! input files might be found. + +CGRID_ICE_DYNAMICS = True ! If true, use a C-grid discretization of the + ! sea-ice dynamics; if false use a B-grid + ! discretization. + +! Specify the numerical domain. +!LAYOUT = 0,1 ! LAYOUT specifies the grid layout for the + ! sea-ice, with 0 indicating a PE count in one + ! or both directions that is automatically + ! generated. +NIGLOBAL = 360 ! NIGLOBAL and NJGLOBAL are the number of thickness +NJGLOBAL = 320 ! grid points in the zonal and meridional + ! directions of the physical domain. +NK = 75 ! The number of layers. +NCAT_ICE = 5 ! The number of sea ice thickness categories. +NIHALO = 2 ! NIHALO and NJHALO are the number of halo +NJHALO = 2 ! 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 = 1 ! 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 = 1 ! 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. + +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. +ICE_STATS_INTERVAL = 0.25 ! The interval in units of TIMEUNIT between + ! writes of the globally summed ice statistics + ! and conservation checks. + +! Specify the time integration scheme for the ice dynamics. +DT_ICE_DYNAMICS = 1200.0 ! The time step used for the slow ice dynamics, + ! including stepping the continuity equation and + ! interactions between the ice mass field and + ! velocities, in s. +INTERSPERSED_ICE_THERMO = False ! If true, the sea ice thermodynamic updates are applied + ! after the new velocities are determined, but before the + ! transport occurs. Otherwise, the ice thermodynamic + ! updates occur at the start of the slow ice update and + ! dynamics and continuity can occur together. + ! The default should be changed to false. + +DT_RHEOLOGY = 50.0 ! The sub-cycling time step, in s, for iterating + ! the rheology and ice momentum equations. If + ! DT_RHEOLOGY is negative, the time step is set + ! via NSTEPS_DYN. +PROJECT_ICE_DRAG_VEL = True ! If true, project forward the ice velocity used in the + ! drag calculation to avoid an instability that can occur + ! when an finite stress is applied to thin ice moving with + ! the velocity of the ocean. +ICE_TDAMP_ELASTIC = -0.2 ! The damping timescale associated with the elastic terms + ! in the sea-ice dynamics equations (if positive) or the + ! fraction of DT_ICE_DYNAMICS (if negative). + +SIS_TRACER_ADVECTION_SCHEME = "PPM:H3" ! The horizontal transport scheme for + ! tracers. Valid options include: + ! UPWIND_2D - Non-directionally split upwind + ! PCM - Directionally split peicewise constant + ! PLM - Piecewise Linear Method + ! PPM:H3 - Piecewise Parabolic Method (Huyhn 3rd order) +SIS_THICKNESS_ADVECTION_SCHEME = "PCM" ! default = "UPWIND_2D" + ! The horizontal transport scheme for thickness: + ! UPWIND_2D - Non-directionally split upwind + ! PCM - Directionally split peicewise constant + ! PLM - Piecewise Linear Method + ! PPM:H3 - Piecewise Parabolic Method (Huyhn 3rd order) +SIS_CONTINUITY_SCHEME = "PCM" ! The horizontal transport scheme used in continuity: + ! UPWIND_2D - Non-directionally split upwind + ! PCM - Directionally split peicewise constant + ! PPM:C2PD - Positive definite PPM with 2nd order edge values + ! PPM:C2MO - Monotonic PPM with 2nd order edge values + +! Specify the ice properties. +ICE_STRENGTH_PSTAR = 2.75e4 ! ICE_STRENGTH_PSTAR is a constant in the + ! expression for the ice strength, P* in + ! Hunke & Dukowics '97, in Pa. +RHO_OCEAN = 1030.0 ! RHO_OCEAN is used in the Boussinesq + ! approximation to calculations of pressure and + ! pressure gradients, in units of kg m-3. +RHO_ICE = 905.0 ! RHO_ICE is the nominal density of sea ice + ! used in SIS, in units of kg m-3. +RHO_SNOW = 330.0 ! RHO_SNOW is the nominal density of snow + ! used in SIS, in units of kg m-3. +C_P_ICE = 2100.0 ! C_P_ICE is the heat capacity of fresh ice + ! in J kg-1 K-1, approximated as a constant. +C_P = 3925.0 ! C_P is the heat capacity of sea water in + ! J kg-1 K-1, approximated as a constant. +SNOW_ALBEDO = 0.88 ! The albedo of dry snow atop sea ice, ND. +ICE_ALBEDO = 0.68 ! The albedo of dry bare sea ice, ND. +ICE_BULK_SALINITY = 0.0 ! The fixed bulk salinity of sea ice, in g/kg. +ICE_RELATIVE_SALINITY = 0.10 ! The initial salinity of sea ice as a + ! fraction of the salinity of the seawater from + ! which it formed. + +! Specify the properties of the surface forcing. +WIND_STAGGER = "C" ! "A", "B", or "C" to indicate the + ! staggering of the wind stresses between the + ! sea ice and ocean. +ICE_OCEAN_STRESS_STAGGER = "C" ! default = "B" + ! A case-insensitive character string to indicate the + ! staggering of the stress field on the ocean that is + ! returned to the coupler. Valid values include + ! 'A', 'B', or 'C'. diff --git a/ice_ocean_SIS2/FLOR2/SIS_layout b/ice_ocean_SIS2/FLOR2/SIS_layout new file mode 100644 index 0000000000..02f04eba0f --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/SIS_layout @@ -0,0 +1,6 @@ +! These parameters are for testing mask_tables in a non-FRE environment. +! This file should not be used in production unless you really want to +! use this layout. +LAYOUT = 18,16 +IO_LAYOUT = 2,2 +!MASKTABLE = "mask_table.96.32x18" ! 32*18-96 = 480 PEs diff --git a/ice_ocean_SIS2/FLOR2/SIS_override b/ice_ocean_SIS2/FLOR2/SIS_override new file mode 100644 index 0000000000..5d67420dc4 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/SIS_override @@ -0,0 +1 @@ +! Blank file in which we can put "overrides" for parameters diff --git a/ice_ocean_SIS2/FLOR2/SIS_parameter_doc.all b/ice_ocean_SIS2/FLOR2/SIS_parameter_doc.all new file mode 100644 index 0000000000..82f89d73eb --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/SIS_parameter_doc.all @@ -0,0 +1,341 @@ +! This file was written by the model and records all non-layout parameters used at run-time. +SPECIFIED_ICE = False ! [Boolean] default = False + ! If true, the ice is specified and there is no dynamics. +CGRID_ICE_DYNAMICS = True ! [Boolean] default = False + ! If true, use a C-grid discretization of the sea-ice + ! dynamics; if false use a B-grid discretization. +USE_SLAB_ICE = False ! [Boolean] default = False + ! If true, use the very old slab-style ice. +SIS1_5L_THERMODYNAMICS = False ! [Boolean] default = False + ! If true, use the thermodynamic calculations inhereted + ! from the SIS1 5 layer. Otherwise, use the newer SIS2 version. +INTERSPERSED_ICE_THERMO = False ! [Boolean] default = True + ! If true, the sea ice thermodynamic updates are applied + ! after the new velocities are determined, but before the + ! transport occurs. Otherwise, the ice thermodynamic + ! updates occur at the start of the slow ice update and + ! dynamics and continuity can occur together. + ! The default should be changed to false. +AREA_WEIGHTED_STRESSES = True ! [Boolean] default = True + ! If true, use wind stresses that are weighted by the ice + ! areas in the neighboring cells. The default (true) is + ! probably the right behavior, and this option will be + ! obsoleted as soon as it is verified to work properly. +ICE_OCEAN_STRESS_STAGGER = "C" ! default = "C" + ! A case-insensitive character string to indicate the + ! staggering of the stress field on the ocean that is + ! returned to the coupler. Valid values include + ! 'A', 'B', or 'C', with a default that follows the + ! value of CGRID_ICE_DYNAMICS. +DT_ICE_DYNAMICS = 1200.0 ! [seconds] default = -1.0 + ! The time step used for the slow ice dynamics, including + ! stepping the continuity equation and interactions + ! between the ice mass field and velocities. If 0 or + ! negative the coupling time step will be used. +RHO_OCEAN = 1030.0 ! [kg m-3] default = 1030.0 + ! The nominal density of sea water as used by SIS. +RHO_ICE = 905.0 ! [kg m-3] default = 905.0 + ! The nominal density of sea ice as used by SIS. +RHO_SNOW = 330.0 ! [kg m-3] default = 330.0 + ! The nominal density of snow as used by SIS. +MOMENTUM_ROUGH_ICE = 1.0E-04 ! [m] default = 1.0E-04 + ! The default momentum roughness length scale for the ocean. +HEAT_ROUGH_ICE = 1.0E-04 ! [m] default = 1.0E-04 + ! The default roughness length scale for the turbulent + ! transfer of heat into the ocean. +ICE_KMELT = 240.0 ! [W m-2 K-1] default = 240.0 + ! A constant giving the proportionality of the ocean/ice + ! base heat flux to the tempature difference, given by + ! the product of the heat capacity per unit volume of sea + ! water times a molecular diffusive piston velocity. +SNOW_CONDUCT = 0.31 ! [W m-1 K-1] default = 0.31 + ! The conductivity of heat in snow. +COLUMN_CHECK = False ! [Boolean] default = False + ! If true, add code to allow debugging of conservation + ! column-by-column. This does not change answers, but + ! can increase model run time. +IMBALANCE_TOLERANCE = 1.0E-09 ! [nondim] default = 1.0E-09 + ! The tolerance for imbalances to be flagged by COLUMN_CHECK. +ICE_BOUNDS_CHECK = True ! [Boolean] default = True + ! If true, periodically check the values of ice and snow + ! temperatures and thicknesses to ensure that they are + ! sensible, and issue warnings if they are not. This + ! does not change answers, but can increase model run time. +DEBUG = False ! [Boolean] default = False + ! If true, write out verbose debugging data. +ICE_SEES_ATMOS_WINDS = True ! [Boolean] default = True + ! If true, the sea ice is being given wind stresses with + ! the atmospheric sign convention, and need to have their + ! sign changed. +ICE_BULK_SALINITY = 0.0 ! [g/kg] default = 4.0 + ! The fixed bulk salinity of sea ice. +ICE_RELATIVE_SALINITY = 0.1 ! [nondim] default = 0.0 + ! The initial salinity of sea ice as a fraction of the + ! salinity of the seawater from which it formed. +DO_ICE_RESTORE = False ! [Boolean] default = False + ! If true, restore the sea ice state toward climatology. +APPLY_ICE_LIMIT = False ! [Boolean] default = False + ! If true, restore the sea ice state toward climatology. +APPLY_SLP_TO_OCEAN = False ! [Boolean] default = False + ! If true, apply the atmospheric sea level pressure to + ! the ocean. +MIN_H_FOR_TEMP_CALC = 0.0 ! [m] default = 0.0 + ! The minimum ice thickness at which to do temperature + ! calculations. +VERBOSE = False ! [Boolean] default = False + ! If true, write out verbose diagnostics. +DO_ICEBERGS = True ! [Boolean] default = False + ! If true, call the iceberg module. +ADD_DIURNAL_SW = False ! [Boolean] default = False + ! If true, add a synthetic diurnal cycle to the shortwave + ! radiation. +DO_SUN_ANGLE_FOR_ALB = False ! [Boolean] default = False + ! If true, find the sun angle for calculating the ocean + ! albedo within the sea ice model. +DO_RIDGING = False ! [Boolean] default = False + ! If true, call the ridging routines. +RESTARTFILE = "ice_model.res.nc" ! default = "ice_model.res.nc" + ! The name of the restart file. +TIMEUNIT = 8.64E+04 ! [s] default = 8.64E+04 + ! The time unit for ICE_STATS_INTERVAL. +ICE_STATS_INTERVAL = 0.25 ! [days] default = 1.0 + ! The interval in units of TIMEUNIT between writes of the + ! globally summed ice statistics and conservation checks. +REENTRANT_X = True ! [Boolean] default = True + ! If true, the domain is zonally reentrant. +REENTRANT_Y = False ! [Boolean] default = False + ! If true, the domain is meridionally reentrant. +TRIPOLAR_N = True ! [Boolean] default = False + ! Use tripolar connectivity at the northern edge of the + ! domain. With TRIPOLAR_N, NIGLOBAL must be even. +NIGLOBAL = 360 ! + ! The total number of thickness grid points in the + ! x-direction in the physical domain. With STATIC_MEMORY_ + ! this is set in SIS2_memory.h at compile time. +NJGLOBAL = 320 ! + ! The total number of thickness grid points in the + ! y-direction in the physical domain. With STATIC_MEMORY_ + ! this is set in SIS2_memory.h at compile time. +GLOBAL_INDEXING = False ! [Boolean] default = False + ! If true, use a global lateral indexing convention, so + ! that corresponding points on different processors have + ! the same index. This does not work with static memory. +NCAT_ICE = 5 ! [nondim] default = 5 + ! The number of sea ice thickness categories. +NK_ICE = 4 ! [nondim] default = 4 + ! The number of layers within the sea ice. +NK_SNOW = 1 ! [nondim] default = 1 + ! The number of layers within the snow atop the sea ice. +H_TO_KG_M2 = 1.0 ! [kg m-2 H-1] default = 1.0 + ! A constant that translates thicknesses from the model's + ! internal units of thickness to kg m-2. +GRID_FILE = "ocean_hgrid.nc" ! + ! Name of the file from which to read horizontal grid data. +INPUTDIR = "INPUT" ! default = "." + ! The directory in which input files are found. +AVAILABLE_DIAGS_FILE = "SIS.available_diags" ! default = "SIS.available_diags" + ! A file into which to write a list of all available + ! ocean diagnostics that can be included in a diag_table. +GRID_CONFIG = "mosaic" ! + ! The method for defining the horizontal grid. Valid + ! entries include: + ! file - read the grid from GRID_FILE + ! mosaic - read the grid from a mosaic grid file + ! cartesian - a Cartesian grid + ! spherical - a spherical grid + ! mercator - a Mercator grid +CP_ICE = 2100.0 ! [J kg-1 K-1] default = 2100.0 + ! The heat capacity of fresh ice, approximated as a + ! constant. +CP_SEAWATER = 4200.0 ! [J kg-1 K-1] default = 4200.0 + ! The heat capacity of sea water, approximated as a + ! constant. +CP_WATER = 4200.0 ! [J kg-1 K-1] default = 4200.0 + ! The heat capacity of water in sea-ice, approximated as + ! a constant. CP_WATER and CP_SEAWATER should be equal, + ! but for computational convenience CP_WATER has often + ! been set equal to CP_ICE instead. +CP_BRINE = 2100.0 ! [J kg-1 K-1] default = 2100.0 + ! The heat capacity of water in brine pockets within the + ! sea-ice, approximated as a constant. CP_BRINE and + ! CP_WATER should be equal, but for computational + ! convenience CP_BRINE has often been set equal to CP_ICE. +DTFREEZE_DS = -0.054 ! [deg C PSU-1] default = -0.054 + ! The derivative of the freezing temperature with salinity. +ENTHALPY_LIQUID_0 = 0.0 ! [J kg-1] default = 0.0 + ! The enthalpy of liquid fresh water at 0 C. The solutions + ! should be physically consistent when this is adjusted, + ! because only the relative value is of physical meaning, + ! but roundoff errors can change the solution. +ENTHALPY_UNITS = 1.0 ! [J kg-1] default = 1.0 + ! A constant that rescales enthalpy from J/kg to a + ! different scale in its internal representation. Changing + ! this by a power of 2 is useful for debugging, as answers + ! should not change. A negative values is taken as an inverse. +SNOW_CONDUCTIVITY = 0.31 ! [W m-1 K-1] default = 0.31 + ! The conductivity of heat in snow. +ICE_CONDUCTIVITY = 2.03 ! [W m-1 K-1] default = 2.03 + ! The conductivity of heat in ice. +DO_DELTA_EDDINGTON_SW = True ! [Boolean] default = True + ! If true, a delta-Eddington radiative transfer calculation + ! for the shortwave radiation within the sea-ice. +ICE_TEMP_RANGE_ESTIMATE = 40.0 ! [degC] default = 40.0 + ! An estimate of the range of snow and ice temperatures + ! that is used to evaluate whether an explicit diffusive + ! form of the heat fluxes or an inversion based on the + ! layer heat budget is more likely to be more accurate. + ! Setting this to 0 causes the explicit diffusive form. + ! to always be used. +ICE_DELTA_EDD_R_ICE = 0.0 ! [perhaps nondimensional?] default = 0.0 + ! A dreadfully documented tuning parameter for the radiative + ! propeties of sea ice with the delta-Eddington radiative + ! transfer calculation. +ICE_DELTA_EDD_R_SNOW = 0.0 ! [perhaps nondimensional?] default = 0.0 + ! A dreadfully documented tuning parameter for the radiative + ! propeties of snow on sea ice with the delta-Eddington + ! radiative transfer calculation. +ICE_DELTA_EDD_R_POND = 0.0 ! [perhaps nondimensional?] default = 0.0 + ! A dreadfully documented tuning parameter for the radiative + ! propeties of meltwater ponds on sea ice with the delta-Eddington + ! radiative transfer calculation. +DT_RHEOLOGY = 50.0 ! [seconds] default = -1.0 + ! The sub-cycling time step for iterating the rheology + ! and ice momentum equations. If DT_RHEOLOGY is negative, + ! the time step is set via NSTEPS_DYN. +ICE_TDAMP_ELASTIC = -0.2 ! [s or nondim] default = -0.2 + ! The damping timescale associated with the elastic terms + ! in the sea-ice dynamics equations (if positive) or the + ! fraction of DT_ICE_DYNAMICS (if negative). +WEAK_LOW_SHEAR_ICE = False ! [Boolean] default = False + ! If true, the divergent stresses go toward 0 in the C-grid + ! dynamics when the shear magnitudes are very weak. + ! Otherwise they go to -P_ice. This setting is temporary. +PROJECT_ICE_DRAG_VEL = True ! [Boolean] default = True + ! If true, project forward the ice velocity used in the + ! drag calculation to avoid an instability that can occur + ! when an finite stress is applied to thin ice moving with + ! the velocity of the ocean. +ICE_YIELD_ELLIPTICITY = 2.0 ! [Nondim] default = 2.0 + ! The ellipticity coefficient for the plastic yield curve + ! in the sea-ice rheology. For an infinite ellipticity + ! (i.e., a cavitating fluid rheology), use 0. +ICE_STRENGTH_PSTAR = 2.75E+04 ! [Pa] default = 2.75E+04 + ! A constant in the expression for the ice strength, + ! P* in Hunke & Dukowicz 1997. +ICE_STRENGTH_CSTAR = 20.0 ! [nondim] default = 20.0 + ! A constant in the exponent of the expression for the + ! ice strength, c* in Hunke & Dukowicz 1997. +ICE_CDRAG_WATER = 0.00324 ! [nondim] default = 0.00324 + ! The drag coefficient between the sea ice and water. +ICE_DEL_SH_MIN_SCALE = 2.0 ! [nondim] default = 2.0 + ! A scaling factor for the lower bound on the shear rates + ! used in the denominator of the stress calculation. This + ! probably needs to be greater than 1. +PROJECT_ICE_CONCENTRATION = True ! [Boolean] default = True + ! If true, project the evolution of the ice concentration + ! due to the convergence or divergence of the ice flow. +CFL_TRUNCATE = 0.5 ! [nondim] default = 0.5 + ! The value of the CFL number that will cause ice velocity + ! components to be truncated; instability can occur past 0.5. +CFL_TRUNC_DYN_ITS = False ! [Boolean] default = False + ! If true, check the CFL number for every iteration of the + ! rheology solver; otherwise only the final velocities that + ! are used for transport are checked. +DEBUG_REDUNDANT = False ! [Boolean] default = False + ! If true, debug redundant data points. +U_TRUNC_FILE = "" ! default = "" + ! The absolute path to the file where the accelerations + ! leading to zonal velocity truncations are written. + ! Leave this empty for efficiency if this diagnostic is + ! not needed. +V_TRUNC_FILE = "" ! default = "" + ! The absolute path to the file where the accelerations + ! leading to meridional velocity truncations are written. + ! Leave this empty for efficiency if this diagnostic is + ! not needed. +MAX_TRUNC_FILE_SIZE_PER_PE = 50 ! default = 50 + ! The maximum number of colums of truncations that any PE + ! will write out during a run. +NSTEPS_ADV = 1 ! default = 1 + ! The number of advective iterations for each slow time + ! step. +ICE_CHANNEL_VISCOSITY = 0.0 ! [m2 s-1] default = 0.0 + ! A viscosity used in one-cell wide channels to + ! parameterize transport, especially with B-grid sea ice + ! coupled to a C-grid ocean model. +ICE_CHANNEL_SMAG_COEF = 0.15 ! [Nondim] default = 0.15 + ! A Smagorinsky coefficient for viscosity in channels. +ICE_CHANNEL_CFL_LIMIT = 0.25 ! [Nondim] default = 0.25 + ! The CFL limit that is applied to the parameterized + ! viscous transport in single-point channels. +SEA_ICE_ROLL_FACTOR = 1.0 ! [Nondim] default = 1.0 + ! A factor by which the propensity of small amounts of + ! thick sea-ice to become thinner by rolling is increased + ! or 0 to disable rolling. This can be thought of as the + ! minimum number of ice floes in a grid cell divided by + ! the horizontal floe aspect ratio. Sensible values are + ! 0 (no rolling) or larger than 1. +CHECK_ICE_TRANSPORT_CONSERVATION = False ! [Boolean] default = False + ! If true, use add multiple diagnostics of ice and snow + ! mass conservation in the sea-ice transport code. This + ! is expensive and should be used sparingly. +SIS_THICKNESS_ADVECTION_SCHEME = "PCM" ! default = "UPWIND_2D" + ! The horizontal transport scheme for thickness: + ! UPWIND_2D - Non-directionally split upwind + ! PCM - Directionally split peicewise constant + ! PLM - Piecewise Linear Method + ! PPM:H3 - Piecewise Parabolic Method (Huyhn 3rd order) +SIS_CONTINUITY_SCHEME = "PCM" ! default = "UPWIND_2D" + ! The horizontal transport scheme used in continuity: + ! UPWIND_2D - Non-directionally split upwind + ! PCM - Directionally split peicewise constant + ! PPM:C2PD - Positive definite PPM with 2nd order edge values + ! PPM:C2MO - Monotonic PPM with 2nd order edge values +CONT_PPM_VOLUME_BASED_CFL = False ! [Boolean] default = False + ! If true, use the ratio of the open face lengths to the + ! tracer cell areas when estimating CFL numbers. + +! === module SIS_tracer_advect === +SIS_TRACER_ADVECTION_SCHEME = "PPM:H3" ! default = "UPWIND_2D" + ! The horizontal transport scheme for tracers: + ! UPWIND_2D - Non-directionally split upwind + ! PCM - Directionally split peicewise constant + ! PLM - Piecewise Linear Method + ! PPM:H3 - Piecewise Parabolic Method (Huyhn 3rd order) + +! === module SIS_tracer_registry === + +! === module SIS_sum_output === +WRITE_STOCKS = True ! [Boolean] default = True + ! If true, write the integrated tracer amounts to stdout + ! when the statistics files are written. +STDOUT_HEARTBEAT = True ! [Boolean] default = True + ! If true, periodically write sea ice statistics to + ! stdout to allow the progress to be seen. +MAXTRUNC = 0 ! [truncations save_interval-1] default = 0 + ! The run will be stopped, and the day set to a very + ! large value if the velocity is truncated more than + ! MAXTRUNC times between writing ice statistics. + ! Set MAXTRUNC to 0 to stop if there is any truncation + ! of sea ice velocities. +STATISTICS_FILE = "seaice.stats" ! default = "seaice.stats" + ! The file to use to write the globally integrated + ! statistics. +SEND_LOG_TO_STDOUT = False ! [Boolean] default = False + ! If true, all log messages are also sent to stdout. +REPORT_UNUSED_PARAMS = False ! [Boolean] default = False + ! If true, report any parameter lines that are not used + ! in the run. +FATAL_UNUSED_PARAMS = False ! [Boolean] default = False + ! If true, kill the run if there are any unused + ! parameters. +DOCUMENT_FILE = "SIS_parameter_doc" ! default = "MOM_parameter_doc" + ! The basename for files where run-time parameters, their + ! settings, units and defaults are documented. Blank will + ! disable all parameter documentation. +COMPLETE_DOCUMENTATION = True ! [Boolean] default = True + ! If true, all run-time parameters are + ! documented in SIS_parameter_doc.all . +MINIMAL_DOCUMENTATION = True ! [Boolean] default = True + ! If true, non-default run-time parameters are + ! documented in SIS_parameter_doc.short . diff --git a/ice_ocean_SIS2/FLOR2/SIS_parameter_doc.layout b/ice_ocean_SIS2/FLOR2/SIS_parameter_doc.layout new file mode 100644 index 0000000000..4f03e2b1cc --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/SIS_parameter_doc.layout @@ -0,0 +1,53 @@ +! This file was written by the model and records the layout parameters used at run-time. +!SYMMETRIC_MEMORY_ = False ! [Boolean] + ! If defined, the velocity point data domain includes + ! every face of the thickness points. In other words, + ! some arrays are larger than others, depending on where + ! they are on the staggered grid. Also, the starting + ! index of the velocity-point arrays is usually 0, not 1. + ! This can only be set at compile time. +NONBLOCKING_UPDATES = False ! [Boolean] default = False + ! If true, non-blocking halo updates may be used. +!STATIC_MEMORY_ = False ! [Boolean] + ! If STATIC_MEMORY_ is defined, the principle variables + ! will have sizes that are statically determined at + ! compile time. Otherwise the sizes are not determined + ! until run time. The STATIC option is substantially + ! faster, but does not allow the PE count to be changed + ! at run time. This can only be set at compile time. +NIHALO = 2 ! default = 2 + ! The number of halo points on each side in the + ! x-direction. With STATIC_MEMORY_ this is set as NIHALO_ + ! in SIS2_memory.h at compile time; without STATIC_MEMORY_ + ! the default is NIHALO_ in SIS2_memory.h (if defined) or 2. +NJHALO = 2 ! default = 2 + ! The number of halo points on each side in the + ! y-direction. With STATIC_MEMORY_ this is set as NJHALO_ + ! in SIS2_memory.h at compile time; without STATIC_MEMORY_ + ! the default is NJHALO_ in SIS2_memory.h (if defined) or 2. +MASKTABLE = "MOM_mask_table" ! default = "MOM_mask_table" + ! A text file to specify n_mask, layout and mask_list. + ! This feature masks out processors that contain only land points. + ! The first line of mask_table is the number of regions to be masked out. + ! The second line is the layout of the model and must be + ! consistent with the actual model layout. + ! The following (n_mask) lines give the logical positions + ! of the processors that are masked out. The mask_table + ! can be created by tools like check_mask. The + ! following example of mask_table masks out 2 processors, + ! (1,2) and (3,6), out of the 24 in a 4x6 layout: + ! 2 + ! 4,6 + ! 1,2 + ! 3,6 +NIPROC = 18 ! + ! The number of processors in the x-direction. With + ! STATIC_MEMORY_ this is set in SIS2_memory.h at compile time. +NJPROC = 16 ! + ! The number of processors in the x-direction. With + ! STATIC_MEMORY_ this is set in SIS2_memory.h at compile time. +LAYOUT = 18, 16 ! + ! The processor layout that was acutally used. +IO_LAYOUT = 2, 2 ! default = 0 + ! The processor layout to be used, or 0,0 to automatically + ! set the io_layout to be the same as the layout. diff --git a/ice_ocean_SIS2/FLOR2/SIS_parameter_doc.short b/ice_ocean_SIS2/FLOR2/SIS_parameter_doc.short new file mode 100644 index 0000000000..19b98e3e14 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/SIS_parameter_doc.short @@ -0,0 +1,81 @@ +! This file was written by the model and records the non-default parameters used at run-time. +CGRID_ICE_DYNAMICS = True ! [Boolean] default = False + ! If true, use a C-grid discretization of the sea-ice + ! dynamics; if false use a B-grid discretization. +INTERSPERSED_ICE_THERMO = False ! [Boolean] default = True + ! If true, the sea ice thermodynamic updates are applied + ! after the new velocities are determined, but before the + ! transport occurs. Otherwise, the ice thermodynamic + ! updates occur at the start of the slow ice update and + ! dynamics and continuity can occur together. + ! The default should be changed to false. +DT_ICE_DYNAMICS = 1200.0 ! [seconds] default = -1.0 + ! The time step used for the slow ice dynamics, including + ! stepping the continuity equation and interactions + ! between the ice mass field and velocities. If 0 or + ! negative the coupling time step will be used. +ICE_BULK_SALINITY = 0.0 ! [g/kg] default = 4.0 + ! The fixed bulk salinity of sea ice. +ICE_RELATIVE_SALINITY = 0.1 ! [nondim] default = 0.0 + ! The initial salinity of sea ice as a fraction of the + ! salinity of the seawater from which it formed. +DO_ICEBERGS = True ! [Boolean] default = False + ! If true, call the iceberg module. +ICE_STATS_INTERVAL = 0.25 ! [days] default = 1.0 + ! The interval in units of TIMEUNIT between writes of the + ! globally summed ice statistics and conservation checks. +TRIPOLAR_N = True ! [Boolean] default = False + ! Use tripolar connectivity at the northern edge of the + ! domain. With TRIPOLAR_N, NIGLOBAL must be even. +NIGLOBAL = 360 ! + ! The total number of thickness grid points in the + ! x-direction in the physical domain. With STATIC_MEMORY_ + ! this is set in SIS2_memory.h at compile time. +NJGLOBAL = 320 ! + ! The total number of thickness grid points in the + ! y-direction in the physical domain. With STATIC_MEMORY_ + ! this is set in SIS2_memory.h at compile time. +GRID_FILE = "ocean_hgrid.nc" ! + ! Name of the file from which to read horizontal grid data. +INPUTDIR = "INPUT" ! default = "." + ! The directory in which input files are found. +GRID_CONFIG = "mosaic" ! + ! The method for defining the horizontal grid. Valid + ! entries include: + ! file - read the grid from GRID_FILE + ! mosaic - read the grid from a mosaic grid file + ! cartesian - a Cartesian grid + ! spherical - a spherical grid + ! mercator - a Mercator grid +DT_RHEOLOGY = 50.0 ! [seconds] default = -1.0 + ! The sub-cycling time step for iterating the rheology + ! and ice momentum equations. If DT_RHEOLOGY is negative, + ! the time step is set via NSTEPS_DYN. +SIS_THICKNESS_ADVECTION_SCHEME = "PCM" ! default = "UPWIND_2D" + ! The horizontal transport scheme for thickness: + ! UPWIND_2D - Non-directionally split upwind + ! PCM - Directionally split peicewise constant + ! PLM - Piecewise Linear Method + ! PPM:H3 - Piecewise Parabolic Method (Huyhn 3rd order) +SIS_CONTINUITY_SCHEME = "PCM" ! default = "UPWIND_2D" + ! The horizontal transport scheme used in continuity: + ! UPWIND_2D - Non-directionally split upwind + ! PCM - Directionally split peicewise constant + ! PPM:C2PD - Positive definite PPM with 2nd order edge values + ! PPM:C2MO - Monotonic PPM with 2nd order edge values + +! === module SIS_tracer_advect === +SIS_TRACER_ADVECTION_SCHEME = "PPM:H3" ! default = "UPWIND_2D" + ! The horizontal transport scheme for tracers: + ! UPWIND_2D - Non-directionally split upwind + ! PCM - Directionally split peicewise constant + ! PLM - Piecewise Linear Method + ! PPM:H3 - Piecewise Parabolic Method (Huyhn 3rd order) + +! === module SIS_tracer_registry === + +! === module SIS_sum_output === +DOCUMENT_FILE = "SIS_parameter_doc" ! default = "MOM_parameter_doc" + ! The basename for files where run-time parameters, their + ! settings, units and defaults are documented. Blank will + ! disable all parameter documentation. diff --git a/ice_ocean_SIS2/FLOR2/data_table b/ice_ocean_SIS2/FLOR2/data_table new file mode 100644 index 0000000000..cdbb1a6ca4 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/data_table @@ -0,0 +1,42 @@ +"ATM" , "p_surf" , "SLP" , "./INPUT/slp.clim.nc" , "bilinear" , 1.0 +"ATM" , "p_bot" , "SLP" , "./INPUT/slp.clim.nc" , "bilinear" , 1.0 +"ATM" , "t_bot" , "T_10_MOD" , "./INPUT/t_10_mod.clim.nc" , "bilinear" , 1.0 +"ATM" , "sphum_bot" , "Q_10_MOD" , "./INPUT/q_10_mod.clim.nc" , "bilinear" , 1.0 +"ATM" , "u_bot" , "U_10_MOD" , "./INPUT/u_10_mod.clim.nc" , "bicubic", 1.0 +"ATM" , "v_bot" , "V_10_MOD" , "./INPUT/v_10_mod.clim.nc" , "bicubic", 1.0 +"ATM" , "z_bot" , "" , "" , "bilinear" , 10.0 +"ATM" , "gust" , "" , "" , "bilinear" , 1.0e-4 +"ICE" , "lw_flux_dn" , "LWDN_MOD" , "./INPUT/ncar_rad.clim.nc" , "bilinear" , 1.0 +"ICE" , "sw_flux_vis_dir_dn", "SWDN_MOD", "./INPUT/ncar_rad.clim.nc" , "bilinear" , 0.285 +"ICE" , "sw_flux_vis_dif_dn", "SWDN_MOD", "./INPUT/ncar_rad.clim.nc" , "bilinear" , 0.285 +"ICE" , "sw_flux_nir_dir_dn", "SWDN_MOD", "./INPUT/ncar_rad.clim.nc" , "bilinear" , 0.215 +"ICE" , "sw_flux_nir_dif_dn", "SWDN_MOD", "./INPUT/ncar_rad.clim.nc" , "bilinear" , 0.215 +"ICE" , "lprec" , "RAIN" , "./INPUT/ncar_precip.clim.nc" , "bilinear" , 0.9933 +"ICE" , "fprec" , "SNOW" , "./INPUT/ncar_precip.clim.nc" , "bilinear" , 0.9933 +"ICE" , "runoff" , "runoff" , "./INPUT/runoff.nc" , "bilinear" , 1.0 +"ICE" , "calving" , "" , "" , "none" , 0.0 +"ICE" , "dhdt" , "" , "" , "none" , 80.0 +"ICE" , "dedt" , "" , "" , "none" , 2.0e-6 +"ICE" , "drdt" , "" , "" , "none" , 10.0 +"LND" , "t_surf" , "" , "" , "none" , 273.0 +"LND" , "t_ca" , "" , "" , "none" , 273.0 +"LND" , "q_ca" , "" , "" , "none" , 0.0 +"LND" , "rough_mom" , "" , "" , "none" , 0.01 +"LND" , "rough_heat" , "" , "" , "none" , 0.1 +"LND" , "albedo" , "" , "" , "none" , 0.1 +#"LND" , "t_ca" , "" , "" , "none" , 273.0 +#"LND" , "t_surf" , "" , "" , "none" , 273.0 +"LND" , "sphum_surf" , "" , "" , "none" , 0.0 +"LND" , "sphum_ca" , "" , "" , "none" , 0.0 +"LND" , "t_flux" , "" , "" , "none" , 0.0 +"LND" , "sphum_flux" , "" , "" , "none" , 0.0 +"LND" , "lw_flux" , "" , "" , "none" , 0.0 +"LND" , "sw_flux" , "" , "" , "none" , 0.0 +"LND" , "lprec" , "" , "" , "none" , 0.0 +"LND" , "fprec" , "" , "" , "none" , 0.0 +"LND" , "dhdt" , "" , "" , "none" , 5.0 +"LND" , "dedt" , "" , "" , "none" , 2e-6 +"LND" , "dedq" , "" , "" , "none" , 0.0 +"LND" , "drdt" , "" , "" , "none" , 5.0 +"LND" , "drag_q" , "" , "" , "none" , 0.0 +"LND" , "p_surf" , "" , "" , "none" , 1.e5 diff --git a/ice_ocean_SIS2/FLOR2/diag_table b/ice_ocean_SIS2/FLOR2/diag_table new file mode 100644 index 0000000000..f41f8853f9 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/diag_table @@ -0,0 +1,2 @@ +FLOR2_z +1900 1 1 0 0 0 diff --git a/ice_ocean_SIS2/FLOR2/diag_table.MOM6 b/ice_ocean_SIS2/FLOR2/diag_table.MOM6 new file mode 100644 index 0000000000..2cb7ae110e --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/diag_table.MOM6 @@ -0,0 +1,197 @@ +# Ocean diagnostics files +"ocean_daily", 1, "days", 1, "days", "time" +"ocean_month", 1, "months", 1, "days", "time" +"ocean_month_snap", 1, "months", 1, "days", "time" +"ocean_annual", 12, "months", 1, "days", "time" +"ocean_scalar_month", 1, "months", 1, "days", "time" +"ocean_scalar_annual", 12, "months", 1, "days", "time" +"ocean_static", -1, "months", 1, "days", "time" +"ocean_annual_z", 12, "months", 1, "days", "time" +"ocean_Drake_passage", 1, "days", 1, "days", "time" +"ocean_Denmark_Strait", 1, "days", 1, "days", "time" +"ocean_Iceland_Norway", 1, "days", 1, "days", "time" +"ocean_Gibraltar_Strait", 1, "days", 1, "days", "time" +"ocean_Bering_Strait", 1, "days", 1, "days", "time" +"ocean_Agulhas_section", 1, "days", 1, "days", "time" + +# High-frequency 2d + "ocean_model", "SSH", "ssh", "ocean_daily", "all", "mean", "none",2 + "ocean_model", "SSU", "ssu", "ocean_daily", "all", "mean", "none",2 + "ocean_model", "SSV", "ssv", "ocean_daily", "all", "mean", "none",2 + "ocean_model", "SST", "sst", "ocean_daily", "all", "mean", "none",2 + "ocean_model", "SSS", "sss", "ocean_daily", "all", "mean", "none",2 +#"ocean_model", "SST", "sst_max", "ocean_daily", "all", "max", "none",2 +#"ocean_model", "SST", "sst_min", "ocean_daily", "all", "min", "none",2 + +# Monthly averages + "ocean_model", "SSH", "ssh", "ocean_month", "all", "mean", "none",2 + "ocean_model", "SSH", "ssh_pow2", "ocean_month", "all", "pow2", "none",2 + "ocean_model", "SST", "sst_max", "ocean_month", "all", "max", "none",2 + "ocean_model", "SST", "sst_min", "ocean_month", "all", "min", "none",2 + "ocean_model", "SST", "sst_pow2", "ocean_month", "all", "pow2", "none",2 + "ocean_model", "KPP_OBLdepth", "KPP_OBLdepth", "ocean_month", "all", "mean", "none",2 + "ocean_model", "KPP_OBLdepth", "KPP_OBLdepth_max", "ocean_month", "all", "max", "none",2 + "ocean_model", "KPP_OBLdepth", "KPP_OBLdepth_min", "ocean_month", "all", "min", "none",2 + "ocean_model", "MLD_003", "MLD_003", "ocean_month", "all", "mean", "none",2 + "ocean_model", "subML_N2", "subML_N2", "ocean_month", "all", "mean", "none",2 + "ocean_model", "temp", "temp", "ocean_month", "all", "mean", "none",2 + "ocean_model", "salt", "salt", "ocean_month", "all", "mean", "none",2 + "ocean_model", "u", "u", "ocean_month", "all", "mean", "none",2 + "ocean_model", "v", "v", "ocean_month", "all", "mean", "none",2 + "ocean_model", "Kd_interface", "Kd_interface", "ocean_month", "all", "mean", "none",2 + "ocean_model", "Kd_shear", "Kd_shear", "ocean_month", "all", "mean", "none",2 + "ocean_model", "Kd_itides", "Kd_itides", "ocean_month", "all", "mean", "none",2 + "ocean_model", "KPP_Kheat", "KPP_Kheat", "ocean_month", "all", "mean", "none",2 + "ocean_model", "pso", "pso", "ocean_month", "all", "mean", "none",2 + "ocean_model", "speed", "speed", "ocean_month", "all", "mean", "none",2 + "ocean_model", "speed", "speed_pow2", "ocean_month", "all", "pow2", "none",2 + +# Monthly surface forcing (mechanical) + "ocean_model", "taux", "taux", "ocean_month", "all", "mean", "none",2 + "ocean_model", "tauy", "tauy", "ocean_month", "all", "mean", "none",2 + "ocean_model", "ustar", "ustar", "ocean_month", "all", "mean", "none",2 + "ocean_model", "p_surf", "p_surf", "ocean_month", "all", "mean", "none",2 +# Monthly surface forcing (mass) + "ocean_model", "PRCmE", "PRCmE", "ocean_month", "all", "mean", "none",2 + "ocean_model", "net_massin", "net_massin", "ocean_month", "all", "mean", "none",2 + "ocean_model", "net_massout", "net_massout", "ocean_month", "all", "mean", "none",2 + "ocean_model", "evap", "evap", "ocean_month", "all", "mean", "none",2 + "ocean_model", "lrunoff", "lrunoff", "ocean_month", "all", "mean", "none",2 + "ocean_model", "frunoff", "frunoff", "ocean_month", "all", "mean", "none",2 + "ocean_model", "lprec", "lprec", "ocean_month", "all", "mean", "none",2 + "ocean_model", "fprec", "fprec", "ocean_month", "all", "mean", "none",2 + "ocean_model", "vprec", "vprec", "ocean_month", "all", "mean", "none",2 +# Monthly surface forcing (heat) + "ocean_model", "net_heat_coupler", "net_heat_coupler", "ocean_month", "all", "mean", "none",2 + "ocean_model", "net_heat_surface", "net_heat_surface", "ocean_month", "all", "mean", "none",2 + "ocean_model", "heat_content_massin", "heat_content_massin", "ocean_month", "all", "mean", "none",2 + "ocean_model", "heat_content_massout", "heat_content_massout", "ocean_month", "all", "mean", "none",2 + "ocean_model", "heat_content_surfwater", "heat_content_surfwater", "ocean_month", "all", "mean", "none",2 + "ocean_model", "heat_content_lprec", "heat_content_lprec", "ocean_month", "all", "mean", "none",2 + "ocean_model", "heat_content_fprec", "heat_content_fprec", "ocean_month", "all", "mean", "none",2 + "ocean_model", "heat_content_vprec", "heat_content_vprec", "ocean_month", "all", "mean", "none",2 + "ocean_model", "heat_content_lrunoff", "heat_content_lrunoff", "ocean_month", "all", "mean", "none",2 + "ocean_model", "heat_content_frunoff", "heat_content_frunoff", "ocean_month", "all", "mean", "none",2 + "ocean_model", "heat_content_cond", "heat_content_cond", "ocean_month", "all", "mean", "none",2 + "ocean_model", "SW", "SW", "ocean_month", "all", "mean", "none",2 + "ocean_model", "LwLatSens", "LwLatSens", "ocean_month", "all", "mean", "none",2 + "ocean_model", "Heat_PmE", "Heat_PmE", "ocean_month", "all", "mean", "none",2 + "ocean_model", "frazil", "frazil", "ocean_month", "all", "mean", "none",2 +#"ocean_model", "internal_heat", "internal_heat", "ocean_month", "all", "mean", "none",2 +# Monthly surface forcing (salt) + "ocean_model", "salt_flux", "salt_flux", "ocean_month", "all", "mean", "none",2 + +# Monthly scalars + "ocean_model", "SST_global", "SST_global", "ocean_scalar_month", "all", "mean", "none",2 + "ocean_model", "SSS_global", "SSS_global", "ocean_scalar_month", "all", "mean", "none",2 + "ocean_model", "temp_global", "temp_global", "ocean_scalar_month", "all", "mean", "none",2 + "ocean_model", "salt_global", "salt_global", "ocean_scalar_month", "all", "mean", "none",2 + +# Annual averages + "ocean_model", "e", "e", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "h", "h", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "temp", "temp", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "salt", "salt", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "u", "u", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "v", "v", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "Kd_interface", "Kd_interface", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "Kd_shear", "Kd_shear", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "Kd_itides", "Kd_itides", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "KPP_Kheat", "KPP_Kheat", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "MLD_003", "MLD_003_min", "ocean_annual", "all", "min", "none",2 + "ocean_model", "MLD_003", "MLD_003_max", "ocean_annual", "all", "max", "none",2 + "ocean_model", "uh", "uh", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "vh", "vh", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "uhml", "uhml", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "vhml", "vhml", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "T_ady", "T_ady", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "S_ady", "S_ady", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "TKE_tidal", "TKE_tidal", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "TKE_itidal", "TKE_itidal", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "taux", "taux", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "tauy", "tauy", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "ustar", "ustar", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "PRCmE", "PRCmE", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "SW", "SW", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "net_heat_surface", "net_heat_surface", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "LwLatSens", "LwLatSens", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "p_surf", "p_surf", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "salt_flux", "salt_flux", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "age", "age", "ocean_annual", "all", "mean", "none",2 +#"ocean_model", "vintage", "vintage", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "MEKE_Ue", "MEKE_Ue", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "MEKE_Le", "MEKE_Le", "ocean_annual", "all", "mean", "none",2 + "ocean_model", "MEKE_KH", "MEKE_KH", "ocean_annual", "all", "mean", "none",2 + +# Annual scalars + "ocean_model", "SST_global", "SST_global", "ocean_scalar_annual", "all", "mean", "none",2 + "ocean_model", "SSS_global", "SSS_global", "ocean_scalar_annual", "all", "mean", "none",2 + "ocean_model", "temp_global", "temp_global", "ocean_scalar_annual", "all", "mean", "none",2 + "ocean_model", "salt_global", "salt_global", "ocean_scalar_annual", "all", "mean", "none",2 + +# Monthly snapshots + "ocean_model", "mass_wt", "mass_wt", "ocean_month_snap", "all", "none", "none",1 + "ocean_model", "tomint", "tomint", "ocean_month_snap", "all", "none", "none",1 + "ocean_model", "somint", "somint", "ocean_month_snap", "all", "none", "none",1 + +# Z diagnostics + "ocean_model_z", "thetao", "thetao", "ocean_annual_z", "all", "mean", "none",2 + "ocean_model_z", "so", "so", "ocean_annual_z", "all", "mean", "none",2 + "ocean_model_z", "age", "age", "ocean_annual_z", "all", "mean", "none",2 + "ocean_model_z", "uo", "uo", "ocean_annual_z", "all", "mean", "none",2 + "ocean_model_z", "vo", "vo", "ocean_annual_z", "all", "mean", "none",2 + "ocean_model_z", "uh", "uh", "ocean_annual_z", "all", "mean", "none",2 + "ocean_model_z", "vh", "vh", "ocean_annual_z", "all", "mean", "none",2 + "ocean_model_z", "N2", "N2", "ocean_annual_z", "all", "mean", "none",2 + "ocean_model_z", "Kd", "Kd", "ocean_annual_z", "all", "mean", "none",2 + "ocean_model_z", "Kd_itides", "Kd_itides", "ocean_annual_z", "all", "mean", "none",2 +#"ocean_model_z", "vintage", "vintage", "ocean_annual_z", "all", "mean", "none",2 + +# Sections +"ocean_model", "temp", "temp", "ocean_Drake_passage", "all", "mean", "-70. -70. -71. -54.5 -1 -1",2 +"ocean_model", "salt", "salt", "ocean_Drake_passage", "all", "mean", "-70. -70. -71. -54.5 -1 -1",2 +"ocean_model", "uh", "uh", "ocean_Drake_passage", "all", "mean", "-70. -70. -71. -54.5 -1 -1",2 +"ocean_model", "u", "u", "ocean_Drake_passage", "all", "mean", "-70. -70. -71. -54.5 -1 -1",2 +"ocean_model", "e", "e", "ocean_Drake_passage", "all", "mean", "-70. -70. -71. -54.5 -1 -1",2 +"ocean_model", "temp", "temp", "ocean_Denmark_Strait", "all", "mean", "-42.5 -20. 65. 65. -1 -1",2 +"ocean_model", "salt", "salt", "ocean_Denmark_Strait", "all", "mean", "-42.5 -20. 65. 65. -1 -1",2 +"ocean_model", "vh", "vh", "ocean_Denmark_Strait", "all", "mean", "-42.5 -20. 65. 65. -1 -1",2 +"ocean_model", "v", "v", "ocean_Denmark_Strait", "all", "mean", "-42.5 -20. 65. 65. -1 -1",2 +"ocean_model", "e", "e", "ocean_Denmark_Strait", "all", "mean", "-42.5 -20. 65. 65. -1 -1",2 +"ocean_model", "temp", "temp", "ocean_Iceland_Norway", "all", "mean", "-20. 15. 65. 65. -1 -1",2 +"ocean_model", "salt", "salt", "ocean_Iceland_Norway", "all", "mean", "-20. 15. 65. 65. -1 -1",2 +"ocean_model", "vh", "vh", "ocean_Iceland_Norway", "all", "mean", "-20. 15. 65. 65. -1 -1",2 +"ocean_model", "v", "v", "ocean_Iceland_Norway", "all", "mean", "-20. 15. 65. 65. -1 -1",2 +"ocean_model", "e", "e", "ocean_Iceland_Norway", "all", "mean", "-20. 15. 65. 65. -1 -1",2 +"ocean_model", "temp", "temp", "ocean_Gibraltar_Strait", "all", "mean", "-5. -5. 35.8 36.2 -1 -1",2 +"ocean_model", "salt", "salt", "ocean_Gibraltar_Strait", "all", "mean", "-5. -5. 35.8 36.2 -1 -1",2 +"ocean_model", "uh", "uh", "ocean_Gibraltar_Strait", "all", "mean", "-5. -5. 35.8 36.2 -1 -1",2 +"ocean_model", "u", "u", "ocean_Gibraltar_Strait", "all", "mean", "-5. -5. 35.8 36.2 -1 -1",2 +"ocean_model", "e", "e", "ocean_Gibraltar_Strait", "all", "mean", "-5. -5. 35.8 36.2 -1 -1",2 +"ocean_model", "temp", "temp", "ocean_Bering_Strait", "all", "mean", "-171.4 -168.7 66.1 66.1 -1 -1",2 +"ocean_model", "salt", "salt", "ocean_Bering_Strait", "all", "mean", "-171.4 -168.7 66.1 66.1 -1 -1",2 +"ocean_model", "vh", "vh", "ocean_Bering_Strait", "all", "mean", "-171.4 -168.7 66.1 66.1 -1 -1",2 +"ocean_model", "v", "v", "ocean_Bering_Strait", "all", "mean", "-171.4 -168.7 66.1 66.1 -1 -1",2 +"ocean_model", "e", "e", "ocean_Bering_Strait", "all", "mean", "-171.4 -168.7 66.1 66.1 -1 -1",2 +"ocean_model", "temp", "temp", "ocean_Agulhas_section", "all", "mean", "20. 20. -70.1 -34.5 -1 -1",2 +"ocean_model", "salt", "salt", "ocean_Agulhas_section", "all", "mean", "20. 20. -70.1 -34.5 -1 -1",2 +"ocean_model", "uh", "uh", "ocean_Agulhas_section", "all", "mean", "20. 20. -70.1 -34.5 -1 -1",2 +"ocean_model", "u", "u", "ocean_Agulhas_section", "all", "mean", "20. 20. -70.1 -34.5 -1 -1",2 +"ocean_model", "e", "e", "ocean_Agulhas_section", "all", "mean", "20. 20. -70.1 -34.5 -1 -1",2 + +# Static geometry data + "ocean_model", "geolon", "geolon", "ocean_static", "all", "none", "none", 2 + "ocean_model", "geolat", "geolat", "ocean_static", "all", "none", "none", 2 + "ocean_model", "geolon_c", "geolon_c", "ocean_static", "all", "none", "none", 2 + "ocean_model", "geolat_c", "geolat_c", "ocean_static", "all", "none", "none", 2 + "ocean_model", "geolon_u", "geolon_u", "ocean_static", "all", "none", "none", 2 + "ocean_model", "geolat_u", "geolat_u", "ocean_static", "all", "none", "none", 2 + "ocean_model", "geolon_v", "geolon_v", "ocean_static", "all", "none", "none", 2 + "ocean_model", "geolat_v", "geolat_v", "ocean_static", "all", "none", "none", 2 + "ocean_model", "area_t", "area_t", "ocean_static", "all", "none", "none", 2 + "ocean_model", "depth_ocean", "depth_ocean", "ocean_static", "all", "none", "none", 2 + "ocean_model", "wet", "wet", "ocean_static", "all", "none", "none", 2 + "ocean_model", "wet_c", "wet_c", "ocean_static", "all", "none", "none", 2 + "ocean_model", "wet_u", "wet_u", "ocean_static", "all", "none", "none", 2 + "ocean_model", "wet_v", "wet_v", "ocean_static", "all", "none", "none", 2 + "ocean_model", "deptho", "deptho", "ocean_static", "all", "none", "none", 2 diff --git a/ice_ocean_SIS2/FLOR2/diag_table.SIS b/ice_ocean_SIS2/FLOR2/diag_table.SIS new file mode 100644 index 0000000000..62626d9492 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/diag_table.SIS @@ -0,0 +1,93 @@ +## output files +"ice_daily", 1, "days", 1, "days", "time" +"ice_month", 1, "months", 1, "days", "time" +"ice_static", -1, "months", 1, "days", "time" + +#================ +# ICE DIAGNOSTICS +#================ + "ice_model", "CELL_AREA", "CELL_AREA", "ice_static", "all", "none", "none", 2 + "ice_model", "COSROT", "COSROT", "ice_static", "all", "none", "none", 2 + "ice_model", "GEOLAT", "GEOLAT", "ice_static", "all", "none", "none", 2 + "ice_model", "GEOLON", "GEOLON", "ice_static", "all", "none", "none", 2 + "ice_model", "SINROT", "SINROT", "ice_static", "all", "none", "none", 2 + +# Daily sea-ice + "ice_model", "SST", "SST", "ice_daily", "all", "mean", "none", 2 + "ice_model", "SSH", "SSH", "ice_daily", "all", "mean", "none", 2 + "ice_model", "SSS", "SSS", "ice_daily", "all", "mean", "none", 2 + "ice_model", "EXT", "EXT", "ice_daily", "all", "mean", "none", 2 + +# Monthly sea-ice + "ice_model", "CELL_AREA", "CELL_AREA", "ice_month", "all", "none", "none", 2 + "ice_model", "COSROT", "COSROT", "ice_month", "all", "none", "none", 2 + "ice_model", "GEOLAT", "GEOLAT", "ice_month", "all", "none", "none", 2 + "ice_model", "GEOLON", "GEOLON", "ice_month", "all", "none", "none", 2 + "ice_model", "SINROT", "SINROT", "ice_month", "all", "none", "none", 2 + +#"ice_model", "AGE", "AGE", "ice_month", "all", "mean", "none", 2 + "ice_model", "ALB", "ALB", "ice_month", "all", "mean", "none", 2 + "ice_model", "BHEAT", "BHEAT", "ice_month", "all", "mean", "none", 2 + "ice_model", "BMELT", "BMELT", "ice_month", "all", "mean", "none", 2 + "ice_model", "BSNK", "BSNK", "ice_month", "all", "mean", "none", 2 + "ice_model", "CALVING", "CALVING", "ice_month", "all", "mean", "none", 2 + "ice_model", "CALVING_HFLX","CALVING_HFLX","ice_month", "all", "mean", "none", 2 + "ice_model", "CN", "CN", "ice_month", "all", "mean", "none", 2 + "ice_model", "E2MELT", "E2MELT", "ice_month", "all", "mean", "none", 2 + "ice_model", "EVAP", "EVAP", "ice_month", "all", "mean", "none", 2 + "ice_model", "EXT", "EXT", "ice_month", "all", "mean", "none", 2 + "ice_model", "EXT", "EXT_MIN", "ice_month", "all", "min", "none", 2 + "ice_model", "EXT", "EXT_MAX", "ice_month", "all", "max", "none", 2 + "ice_model", "FA_X", "FA_X", "ice_month", "all", "mean", "none", 2 + "ice_model", "FA_Y", "FA_Y", "ice_month", "all", "mean", "none", 2 +#"ice_model", "FC_X", "FC_X", "ice_month", "all", "mean", "none", 2 +#"ice_model", "FC_Y", "FC_Y", "ice_month", "all", "mean", "none", 2 + "ice_model", "FI_X", "FI_X", "ice_month", "all", "mean", "none", 2 + "ice_model", "FI_Y", "FI_Y", "ice_month", "all", "mean", "none", 2 +#"ice_model", "FW_X", "FW_X", "ice_month", "all", "mean", "none", 2 +#"ice_model", "FW_Y", "FW_Y", "ice_month", "all", "mean", "none", 2 + "ice_model", "FRAZIL", "FRAZIL", "ice_month", "all", "mean", "none", 2 + "ice_model", "HI", "HI", "ice_month", "all", "mean", "none", 2 +#"ice_model", "HI_PART", "HI_PART", "ice_month", "all", "mean", "none", 2 + "ice_model", "HS", "HS", "ice_month", "all", "mean", "none", 2 + "ice_model", "IX_TRANS", "IX_TRANS", "ice_month", "all", "mean", "none", 2 + "ice_model", "IY_TRANS", "IY_TRANS", "ice_month", "all", "mean", "none", 2 + "ice_model", "LH", "LH", "ice_month", "all", "mean", "none", 2 + "ice_model", "LSNK", "LSNK", "ice_month", "all", "mean", "none", 2 + "ice_model", "LSRC", "LSRC", "ice_month", "all", "mean", "none", 2 + "ice_model", "LW", "LW", "ice_month", "all", "mean", "none", 2 +#"ice_model", "LWDN", "LWDN", "ice_month", "all", "mean", "none", 2 + "ice_model", "MI", "MI", "ice_month", "all", "mean", "none", 2 + "ice_model", "RAIN", "RAIN", "ice_month", "all", "mean", "none", 2 +#"ice_model", "RDG_RATE", "RDG_RATE", "ice_month", "all", "mean", "none", 2 +#"ice_model", "RDG_FRAC", "RDG_FRAC", "ice_month", "all", "mean", "none", 2 + "ice_model", "RUNOFF", "RUNOFF", "ice_month", "all", "mean", "none", 2 +#"ice_model", "RUNOFF_HFLX","RUNOFF_HFLX", "ice_month", "all", "mean", "none", 2 + "ice_model", "SALTF", "SALTF", "ice_month", "all", "mean", "none", 2 + "ice_model", "SH", "SH", "ice_month", "all", "mean", "none", 2 +#"ice_model", "SIGI", "SIGI", "ice_month", "all", "mean", "none", 2 +#"ice_model", "SIGII", "SIGII", "ice_month", "all", "mean", "none", 2 +#"ice_model", "SLP", "SLP", "ice_month", "all", "mean", "none", 2 + "ice_model", "SNOWFL", "SNOWFL", "ice_month", "all", "mean", "none", 2 + "ice_model", "SN2IC", "SN2IC", "ice_month", "all", "mean", "none", 2 + "ice_model", "SSH", "SSH", "ice_month", "all", "mean", "none", 2 + "ice_model", "SSS", "SSS", "ice_month", "all", "mean", "none", 2 + "ice_model", "SST", "SST", "ice_month", "all", "mean", "none", 2 +#"ice_model", "STRENGTH", "STRENGTH", "ice_month", "all", "mean", "none", 2 +#"ice_model", "STRAIN_ANGLE","STRAIN_ANGLE","ice_month", "all", "mean", "none", 2 + "ice_model", "SW", "SW", "ice_month", "all", "mean", "none", 2 +#"ice_model", "SWDN", "SWDN", "ice_month", "all", "mean", "none", 2 +#"ice_model", "SW_NIR_DIF", "SW_NIR_DIF", "ice_month", "all", "mean", "none", 2 +#"ice_model", "SW_NIR_DIR", "SW_NIR_DIR", "ice_month", "all", "mean", "none", 2 +#"ice_model", "SW_VIS", "SW_VIS", "ice_month", "all", "mean", "none", 2 +#"ice_model", "SW_VIS_DIF", "SW_VIS_DIF", "ice_month", "all", "mean", "none", 2 +#"ice_model", "SW_VIS_DIR", "SW_VIS_DIR", "ice_month", "all", "mean", "none", 2 + "ice_model", "TMELT", "TMELT", "ice_month", "all", "mean", "none", 2 + "ice_model", "TS", "TS", "ice_month", "all", "mean", "none", 2 + "ice_model", "T1", "T1", "ice_month", "all", "mean", "none", 2 + "ice_model", "T2", "T2", "ice_month", "all", "mean", "none", 2 + "ice_model", "UI", "UI", "ice_month", "all", "mean", "none", 2 + "ice_model", "VI", "VI", "ice_month", "all", "mean", "none", 2 + "ice_model", "UO", "UO", "ice_month", "all", "mean", "none", 2 + "ice_model", "VO", "VO", "ice_month", "all", "mean", "none", 2 + "ice_model", "XPRT", "XPRT", "ice_month", "all", "mean", "none", 2 diff --git a/ice_ocean_SIS2/FLOR2/diag_table.icebergs b/ice_ocean_SIS2/FLOR2/diag_table.icebergs new file mode 100644 index 0000000000..ce011d050e --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/diag_table.icebergs @@ -0,0 +1,30 @@ +"iceberg_month", 1, "months", 1, "days", "time" + + "icebergs", "lon", "lon", "iceberg_month", "all", "none", "none", 2 + "icebergs", "lat", "lat", "iceberg_month", "all", "none", "none", 2 + "icebergs", "area", "area", "iceberg_month", "all", "none", "none", 2 + "icebergs", "mask", "mask", "iceberg_month", "all", "none", "none", 2 +#"icebergs", "uo", "uo", "iceberg_month", "all", "mean", "none", 2 +#"icebergs", "vo", "vo", "iceberg_month", "all", "mean", "none", 2 +#"icebergs", "ui", "ui", "iceberg_month", "all", "mean", "none", 2 +#"icebergs", "vi", "vi", "iceberg_month", "all", "mean", "none", 2 +#"icebergs", "ua", "ua", "iceberg_month", "all", "mean", "none", 2 +#"icebergs", "va", "va", "iceberg_month", "all", "mean", "none", 2 +#"icebergs", "sst", "sst", "iceberg_month", "all", "mean", "none", 2 +#"icebergs", "cn", "cn", "iceberg_month", "all", "mean", "none", 2 +#"icebergs", "hi", "hi", "iceberg_month", "all", "mean", "none", 2 + "icebergs", "melt", "melt", "iceberg_month", "all", "mean", "none", 2 + "icebergs", "melt_buoy", "melt_buoy", "iceberg_month", "all", "mean", "none", 2 + "icebergs", "melt_eros", "melt_eros", "iceberg_month", "all", "mean", "none", 2 + "icebergs", "melt_conv", "melt_conv", "iceberg_month", "all", "mean", "none", 2 +#"icebergs", "bergy_src", "bergy_src", "iceberg_month", "all", "mean", "none", 2 +#"icebergs", "bergy_melt", "bergy_melt", "iceberg_month", "all", "mean", "none", 2 +#"icebergs", "bergy_mass", "bergy_mass", "iceberg_month", "all", "mean", "none", 2 + "icebergs", "virtual_area", "virtual_area", "iceberg_month", "all", "mean", "none", 2 + "icebergs", "mass", "mass", "iceberg_month", "all", "mean", "none", 2 +#"icebergs", "calving", "calving", "iceberg_month", "all", "mean", "none", 2 + "icebergs", "calving_hflx_in", "calving_hflx_in", "iceberg_month", "all", "mean", "none", 2 + "icebergs", "unused_calving", "unused_calving", "iceberg_month", "all", "mean", "none", 2 + "icebergs", "accum_calving", "accum_calving", "iceberg_month", "all", "mean", "none", 2 + "icebergs", "real_calving", "real_calving", "iceberg_month", "all", "mean", "none", 2 + "icebergs", "stored_ice", "stored_ice", "iceberg_month", "all", "mean", "none", 2 diff --git a/ice_ocean_SIS2/FLOR2/field_table b/ice_ocean_SIS2/FLOR2/field_table new file mode 100644 index 0000000000..33cceaf32d --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/field_table @@ -0,0 +1,25 @@ +# specific humidity for moist runs + "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" / +# sphum must be present on land as well + "TRACER", "land_mod", "sphum" + "longname", "specific humidity" + "units", "kg/kg" / +# test tracer for radon +# +# "TRACER", "atmos_mod", "radon" +# "longname", "radon test tracer" +# "units", "kg/kg" / +###................................................. diff --git a/ice_ocean_SIS2/FLOR2/input.nml b/ice_ocean_SIS2/FLOR2/input.nml new file mode 100644 index 0000000000..0bd161a293 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/input.nml @@ -0,0 +1,125 @@ + &MOM_input_nml + output_directory = '.', + input_filename = 'n' + restart_input_dir = 'INPUT', + restart_output_dir = 'RESTART', + parameter_filename = 'MOM_input', + 'MOM_layout', + 'MOM_override' +/ + + &SIS_input_nml + output_directory = './', + input_filename = 'n' + restart_input_dir = 'INPUT/', + restart_output_dir = 'RESTART/', + parameter_filename = 'SIS_input', + 'SIS_layout', + 'SIS_override' / + + &atmos_model_nml + layout = 0, 0 +/ + + &coupler_nml + months = 0, + days = 10, + hours = 0, + current_date = 1900,1,1,0,0,0, + calendar = 'NOLEAP', + dt_cpld = 3600, + dt_atmos = 3600, + do_atmos = .false., + do_land = .false., + do_ice = .true., + do_ocean = .true., + do_flux = .true., + atmos_npes = 0, + concurrent = .false. + use_lag_fluxes=.false. + check_stocks = 0 +/ + + &diag_manager_nml + conserve_water=.false. + max_axes = 100, + max_num_axis_sets = 100, + max_input_fields = 699 + max_output_fields = 699 + mix_snapshot_average_fields=.false. +/ + + &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' + max_files_r = 200 + max_files_w = 200 + checksum_required = .false. +/ + + &fms_nml + clock_grain='ROUTINE' + clock_flags='NONE' + domains_stack_size = 5000000 + stack_size =0 +/ + + &ice_albedo_nml + t_range = 10. +/ + + &ice_model_nml +/ + + &icebergs_nml + verbose=.false., + verbose_hrs=24, + traj_sample_hrs=24, + debug=.false., + really_debug=.false., + use_slow_find=.true., + add_weight_to_ocean=.true., + passive_mode=.false., + generate_test_icebergs=.false., + speed_limit=0., + use_roundoff_fix=.true., + make_calving_reproduce=.true., + / + + &monin_obukhov_nml + neutral = .true. +/ + + &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 + ncar_ocean_flux = .true. + raoult_sat_vap = .true. +/ + + &topography_nml + topog_file = 'INPUT/navy_topography.data.nc' +/ + + &xgrid_nml + make_exchange_reproduce = .false. + interp_method = 'second_order' +/ + diff --git a/ice_ocean_SIS2/FLOR2/ocn_annual.frepp b/ice_ocean_SIS2/FLOR2/ocn_annual.frepp new file mode 100644 index 0000000000..fc4e1725aa --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/ocn_annual.frepp @@ -0,0 +1,119 @@ +#!/bin/csh -fx +#------------------------------------ +#PBS -N ocean_ts_annual +#PBS -l size=1 +#PBS -l walltime=04:00:00 +#PBS -r y +#PBS -j oe +#PBS -o +#PBS -q batch +#---------------------------------- + +echo $0 $* + +# ============== VARIABLES SET BY FREPP ============= +# original arguments passed to this script when it was created by frepp +set argu +# experiment name (as appears in output directory names) +set descriptor +# path to NetCDF files postprocessed by frepp, as specified in XML +set in_data_dir +# input data file[s], without any path prefix; +# currently only used by timeAverage diagnostics +set in_data_file +# final output directory for diagnostics generated by this script +set out_dir +# working directory -- do whatever you want in here +# we may have to create this (use "mkdir -p" to be sure) +# and then clean up at end +set WORKDIR +# a string to indicate the mode: "batch" or "interactive" +set mode +# actual start/end years of diagnostics (start_year & end_year in XML) +set yr1 +set yr2 +# alternate way to specify a single year (instead of yr1==yr2) +set specify_year +# Data years, only used in scripts using time series as input, to +# generate a Ferret descriptor file from consecutive NetCDF chunks. +# start year of first chunk +set databegyr +# end year of last chunk +set dataendyr +# chunk length (an integer number), as specified in XML +set datachunk +# atmospheric land mask file +set staticfile +set script_path +set fremodule +# a string: "monthly" or "annual" for timeseries data +set freq +# first year of integration (4-digits, e.g. the year of initial condition) +set MODEL_start_yr +# Specify MOM version; "om2" or "om3" because some files depend on mom's grid +set mom_version +# full path to the grid specification file, which contains the land/sea mask +set gridspecfile +# history directory where the original "*.nc.cpio" files are found +set hist_dir +set nlon +set nlat +set frexml +set freanalysismodule +set stdoutdir +set analysis_options +set platform +set target +# ============== END OF VARIABLES SET BY FREPP ============= +# If any arguments were supplied on the command line, then those +# will replace the original frepp-supplied arguments. +if ($#argv) set argu = ($argv:q) + + +#set freanalysismodule = fre-analysis/test + +# make sure valid platform and required modules are loaded +if (`gfdl_platform` == "hpcs-csc") then + source $MODULESHOME/init/csh + module use -a /home/fms/local/modulefiles #/usr/local/paida/Modules + module purge +# module load $fremodule +# module load $freanalysismodule +# module load gcc + module load netcdf/4.2 + module load python/2.7.3 + module load intel_compilers +else + echo "ERROR: invalid platform" + exit 1 +endif + +# check again? +#if (! $?FRE_ANALYSIS_HOME) then +# echo "ERROR: environment variable FRE_ANALYSIS_HOME not set." +# exit 1 +#endif + +# Build MIDAS libs and set PYTHONPATH +(cd ${out_dir}/mom6/tools/python/025gridGeneration ; make frepp_local ) +setenv PYTHONPATH ${out_dir}/mom6/tools/python/025gridGeneration/local/lib/python + +# Run script +set src_dir = ${out_dir}/mom6/tools/analysis +set script_bash = ${src_dir}/MOM6_ts_annual.bash +set script_dir = ${out_dir}/mom6/tools/analysis +set woa05=/archive/gold/datasets/OM4_025/obs/WOA05_ptemp_salt_annual.v20141006.nc +set mosaicDir=/archive/gold/datasets/OM4_025/mosaic.v20140610.unpacked + +echo The following command is going to be invoked + +#mkdir -p $out_dir/ocean_${yr1}-${yr2}/ptemp +#$script_dir/SST_bias_WOA05.py -w $woa05 -g $mosaicDir -o $out_dir/ocean_${yr1}-${yr2}/ptemp -l ${yr1}-${yr2} $in_data_dir/ocean_annual.$yr1-$yr2.ann.nc +#$script_dir/zonal_T_bias_WOA05.py -w $woa05 -g $mosaicDir -o $out_dir/ocean_${yr1}-${yr2}/ptemp -l ${yr1}-${yr2} $in_data_dir/ocean_annual.$yr1-$yr2.ann.nc + +#mkdir -p $out_dir/ocean_${yr1}-${yr2}/salinity +#$script_dir/SSS_bias_WOA05.py -w $woa05 -g $mosaicDir -o $out_dir/ocean_${yr1}-${yr2}/salinity -l ${yr1}-${yr2} $in_data_dir/ocean_annual.$yr1-$yr2.ann.nc +#$script_dir/zonal_S_bias_WOA05.py -w $woa05 -g $mosaicDir -o $out_dir/ocean_${yr1}-${yr2}/salinity -l ${yr1}-${yr2} $in_data_dir/ocean_annual.$yr1-$yr2.ann.nc + +mkdir -p $out_dir/ocean_${yr1}-${yr2}/heat_salt_0_300m +$script_dir/TS_depth_integrals.py -r $woa05 -s 0 -e 300 -g $mosaicDir -o $out_dir/ocean_${yr1}-${yr2}/heat_salt_0_300m -l ${yr1}-${yr2} $in_data_dir/ocean_annual.$yr1-$yr2.ann.nc diff --git a/ice_ocean_SIS2/FLOR2/ocn_annual_z.frepp b/ice_ocean_SIS2/FLOR2/ocn_annual_z.frepp new file mode 100644 index 0000000000..e5898e95ac --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/ocn_annual_z.frepp @@ -0,0 +1,116 @@ +#!/bin/csh -fx +#------------------------------------ +#PBS -N ocean_ts_annual +#PBS -l size=1 +#PBS -l walltime=04:00:00 +#PBS -r y +#PBS -j oe +#PBS -o +#PBS -q batch +#---------------------------------- + +echo $0 $* + +# ============== VARIABLES SET BY FREPP ============= +# original arguments passed to this script when it was created by frepp +set argu +# experiment name (as appears in output directory names) +set descriptor +# path to NetCDF files postprocessed by frepp, as specified in XML +set in_data_dir +# input data file[s], without any path prefix; +# currently only used by timeAverage diagnostics +set in_data_file +# final output directory for diagnostics generated by this script +set out_dir +# working directory -- do whatever you want in here +# we may have to create this (use "mkdir -p" to be sure) +# and then clean up at end +set WORKDIR +# a string to indicate the mode: "batch" or "interactive" +set mode +# actual start/end years of diagnostics (start_year & end_year in XML) +set yr1 +set yr2 +# alternate way to specify a single year (instead of yr1==yr2) +set specify_year +# Data years, only used in scripts using time series as input, to +# generate a Ferret descriptor file from consecutive NetCDF chunks. +# start year of first chunk +set databegyr +# end year of last chunk +set dataendyr +# chunk length (an integer number), as specified in XML +set datachunk +# atmospheric land mask file +set staticfile +set script_path +set fremodule +# a string: "monthly" or "annual" for timeseries data +set freq +# first year of integration (4-digits, e.g. the year of initial condition) +set MODEL_start_yr +# Specify MOM version; "om2" or "om3" because some files depend on mom's grid +set mom_version +# full path to the grid specification file, which contains the land/sea mask +set gridspecfile +# history directory where the original "*.nc.cpio" files are found +set hist_dir +set nlon +set nlat +set frexml +set freanalysismodule +set stdoutdir +set analysis_options +set platform +set target +# ============== END OF VARIABLES SET BY FREPP ============= +# If any arguments were supplied on the command line, then those +# will replace the original frepp-supplied arguments. +if ($#argv) set argu = ($argv:q) + + +set freanalysismodule = fre-analysis/test + +# make sure valid platform and required modules are loaded +if (`gfdl_platform` == "hpcs-csc") then + source $MODULESHOME/init/csh + module use -a /home/fms/local/modulefiles #/usr/local/paida/Modules + module purge + module load $fremodule + module load $freanalysismodule + module load gcc + module load netcdf/4.2 + module load python/2.7.3 +else + echo "ERROR: invalid platform" + exit 1 +endif + +# check again? +if (! $?FRE_ANALYSIS_HOME) then + echo "ERROR: environment variable FRE_ANALYSIS_HOME not set." + exit 1 +endif + +# Run script +set src_dir = ${out_dir}/mom6/tools/analysis +set script_bash = ${src_dir}/MOM6_ts_annual.bash +set script_dir = ${out_dir}/mom6/tools/analysis +set woa05=/archive/gold/datasets/OM4_025/obs/WOA05_ptemp_salt_annual.v20141007.nc +set mosaicDir=/archive/gold/datasets/OM4_025/mosaic.v20140610.unpacked + +echo The following command is going to be invoked + +mkdir -p $out_dir/ocean_${yr1}-${yr2}/ptemp +$script_dir/SST_bias_WOA05.py -w $woa05 -g $mosaicDir -o $out_dir/ocean_${yr1}-${yr2}/ptemp -l ${yr1}-${yr2} $in_data_dir/ocean_annual_z.$yr1-$yr2.ann.nc +$script_dir/zonal_T_bias_WOA05.py -w $woa05 -g $mosaicDir -o $out_dir/ocean_${yr1}-${yr2}/ptemp -l ${yr1}-${yr2} $in_data_dir/ocean_annual_z.$yr1-$yr2.ann.nc +$script_dir/depth_average_T_bias.py -w $woa05 -g $mosaicDir -zb 100 -o $out_dir/ocean_${yr1}-${yr2}/ptemp -l ${yr1}-${yr2} $in_data_dir/ocean_annual_z.$yr1-$yr2.ann.nc +$script_dir/depth_average_T_bias.py -w $woa05 -g $mosaicDir -zb 300 -o $out_dir/ocean_${yr1}-${yr2}/ptemp -l ${yr1}-${yr2} $in_data_dir/ocean_annual_z.$yr1-$yr2.ann.nc +$script_dir/depth_average_T_bias.py -w $woa05 -g $mosaicDir -zb 700 -o $out_dir/ocean_${yr1}-${yr2}/ptemp -l ${yr1}-${yr2} $in_data_dir/ocean_annual_z.$yr1-$yr2.ann.nc +$script_dir/depth_average_T_bias.py -w $woa05 -g $mosaicDir -zb 2000 -o $out_dir/ocean_${yr1}-${yr2}/ptemp -l ${yr1}-${yr2} $in_data_dir/ocean_annual_z.$yr1-$yr2.ann.nc +$script_dir/depth_average_T_bias.py -w $woa05 -g $mosaicDir -zt 2000 -zb 4000 -o $out_dir/ocean_${yr1}-${yr2}/ptemp -l ${yr1}-${yr2} $in_data_dir/ocean_annual_z.$yr1-$yr2.ann.nc + +mkdir -p $out_dir/ocean_${yr1}-${yr2}/salinity +$script_dir/SSS_bias_WOA05.py -w $woa05 -g $mosaicDir -o $out_dir/ocean_${yr1}-${yr2}/salinity -l ${yr1}-${yr2} $in_data_dir/ocean_annual_z.$yr1-$yr2.ann.nc +$script_dir/zonal_S_bias_WOA05.py -w $woa05 -g $mosaicDir -o $out_dir/ocean_${yr1}-${yr2}/salinity -l ${yr1}-${yr2} $in_data_dir/ocean_annual_z.$yr1-$yr2.ann.nc diff --git a/ice_ocean_SIS2/FLOR2/ocn_monthly.frepp b/ice_ocean_SIS2/FLOR2/ocn_monthly.frepp new file mode 100644 index 0000000000..2532b1f0d0 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/ocn_monthly.frepp @@ -0,0 +1,103 @@ +#!/bin/csh -fx +#------------------------------------ +#PBS -N ocean_ts_annual +#PBS -l size=1 +#PBS -l walltime=04:00:00 +#PBS -r y +#PBS -j oe +#PBS -o +#PBS -q batch +#---------------------------------- + +echo $0 $* + +# ============== VARIABLES SET BY FREPP ============= +# original arguments passed to this script when it was created by frepp +set argu +# experiment name (as appears in output directory names) +set descriptor +# path to NetCDF files postprocessed by frepp, as specified in XML +set in_data_dir +# input data file[s], without any path prefix; +# currently only used by timeAverage diagnostics +set in_data_file +# final output directory for diagnostics generated by this script +set out_dir +# working directory -- do whatever you want in here +# we may have to create this (use "mkdir -p" to be sure) +# and then clean up at end +set WORKDIR +# a string to indicate the mode: "batch" or "interactive" +set mode +# actual start/end years of diagnostics (start_year & end_year in XML) +set yr1 +set yr2 +# alternate way to specify a single year (instead of yr1==yr2) +set specify_year +# Data years, only used in scripts using time series as input, to +# generate a Ferret descriptor file from consecutive NetCDF chunks. +# start year of first chunk +set databegyr +# end year of last chunk +set dataendyr +# chunk length (an integer number), as specified in XML +set datachunk +# atmospheric land mask file +set staticfile +set script_path +set fremodule +# a string: "monthly" or "annual" for timeseries data +set freq +# first year of integration (4-digits, e.g. the year of initial condition) +set MODEL_start_yr +# Specify MOM version; "om2" or "om3" because some files depend on mom's grid +set mom_version +# full path to the grid specification file, which contains the land/sea mask +set gridspecfile +# history directory where the original "*.nc.cpio" files are found +set hist_dir +set nlon +set nlat +set frexml +set freanalysismodule +set stdoutdir +set analysis_options +set platform +set target +# ============== END OF VARIABLES SET BY FREPP ============= +# If any arguments were supplied on the command line, then those +# will replace the original frepp-supplied arguments. +if ($#argv) set argu = ($argv:q) + + +set freanalysismodule = fre-analysis/test + +# make sure valid platform and required modules are loaded +if (`gfdl_platform` == "hpcs-csc") then + source $MODULESHOME/init/csh + module use -a /home/fms/local/modulefiles /usr/local/paida/Modules + module purge + module load $fremodule + module load $freanalysismodule + module load gcc + module load netcdf/4.2 + module load python/2.7.3 +else + echo "ERROR: invalid platform" + exit 1 +endif + +# check again? +if (! $?FRE_ANALYSIS_HOME) then + echo "ERROR: environment variable FRE_ANALYSIS_HOME not set." + exit 1 +endif + +# Run script +set script_dir = ${out_dir}/mom6/tools/analysis +set mosaicDir=/archive/gold/datasets/OM4_025/mosaic.v20140610.unpacked + +echo The following command is going to be invoked + +mkdir -p $out_dir/ocean_${yr1}-${yr2}/Hosoda_MLD +$script_dir/MLD_003.py -g $mosaicDir -o $out_dir/ocean_${yr1}-${yr2}/Hosoda_MLD -l ${yr1}-${yr2} $in_data_dir/ocean_monthly.${yr1}01-${yr2}12.MLD_003.nc diff --git a/ice_ocean_SIS2/FLOR2/seaice.stats b/ice_ocean_SIS2/FLOR2/seaice.stats new file mode 100644 index 0000000000..9bedcd4632 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/seaice.stats @@ -0,0 +1,43 @@ + Step, Day, Area(N/S), Extent(N/S), Mass(N/S), Heat(N/S), Salinty(N/S), Frac Mass Err, Temp Err, Salin Err + [days] [m2] [m2] [kg] [J] [g/kg] [Nondim] [Nondim] [Nondim] + 0, 693135.000, 0, Area 0.000000000000E+00 0.000000000000E+00, Ext 0.0000E+00 0.0000E+00, CFL 0.000, M 0.00000E+00 0.00000E+00, Enth 0.00000E+00 0.00000E+00, S 0.0000 0.0000, Me 0.00E+00, Te 0.00E+00, Se 0.00E+00 + 6, 693135.250, 0, Area 8.963521744018E+12 9.272211530765E+10, Ext 9.1270E+12 1.0021E+11, CFL 0.018, M 6.83256E+14 5.70850E+12, Enth -2.23094E+20 -1.77261E+18, S 3.0683 3.3735, Me 2.61E-17, Te 1.70E-17, Se 1.07E-16 + 12, 693135.500, 0, Area 9.588617577548E+12 8.819107541701E+10, Ext 9.8055E+12 1.0071E+11, CFL 0.019, M 8.22876E+14 5.35269E+12, Enth -2.75960E+20 -1.64773E+18, S 3.0577 3.3586, Me 3.60E-17, Te 1.86E-17, Se 5.91E-17 + 18, 693135.750, 0, Area 9.908496702658E+12 8.034193779637E+10, Ext 1.0196E+13 9.3553E+10, CFL 0.016, M 9.62685E+14 4.93696E+12, Enth -3.25981E+20 -1.50521E+18, S 3.0527 3.3397, Me 5.03E-17, Te 5.39E-18, Se 5.22E-17 + 24, 693136.000, 0, Area 1.011898584269E+13 7.537591699370E+10, Ext 1.0453E+13 9.4189E+10, CFL 0.015, M 1.09578E+15 4.47819E+12, Enth -3.72774E+20 -1.35751E+18, S 3.0507 3.3197, Me 3.33E-17, Te -1.40E-18, Se 4.93E-17 + 30, 693136.250, 0, Area 1.029788741797E+13 6.878552583800E+10, Ext 1.0690E+13 9.2590E+10, CFL 0.020, M 1.22229E+15 4.04019E+12, Enth -4.17017E+20 -1.22995E+18, S 3.0502 3.2989, Me 2.90E-17, Te -5.87E-17, Se 2.91E-17 + 36, 693136.500, 0, Area 1.043465669301E+13 6.518161164909E+10, Ext 1.0893E+13 8.8236E+10, CFL 0.020, M 1.34449E+15 3.62920E+12, Enth -4.59987E+20 -1.11260E+18, S 3.0505 3.2778, Me 3.35E-17, Te -2.37E-17, Se 3.88E-17 + 42, 693136.750, 0, Area 1.058527282819E+13 5.949722662999E+10, Ext 1.1103E+13 8.7352E+10, CFL 0.025, M 1.46308E+15 3.21596E+12, Enth -5.01749E+20 -9.86909E+17, S 3.0508 3.2490, Me 1.72E-17, Te -4.85E-17, Se 1.54E-17 + 48, 693137.000, 0, Area 1.072933410296E+13 5.473446450635E+10, Ext 1.1291E+13 8.2140E+10, CFL 0.029, M 1.57977E+15 2.79515E+12, Enth -5.43035E+20 -8.58712E+17, S 3.0509 3.2158, Me 1.81E-17, Te -3.20E-17, Se 2.76E-17 + 54, 693137.250, 0, Area 1.087544577627E+13 5.159509911549E+10, Ext 1.1481E+13 7.6697E+10, CFL 0.031, M 1.69465E+15 2.40016E+12, Enth -5.83755E+20 -7.40396E+17, S 3.0509 3.1801, Me 1.85E-17, Te -2.22E-17, Se 2.52E-17 + 60, 693137.500, 0, Area 1.098192407355E+13 4.758819135001E+10, Ext 1.1594E+13 7.1497E+10, CFL 0.022, M 1.80814E+15 2.03721E+12, Enth -6.24074E+20 -6.31541E+17, S 3.0509 3.1430, Me 1.05E-17, Te -3.45E-17, Se 6.71E-18 + 66, 693137.750, 0, Area 1.108833389850E+13 4.197776337889E+10, Ext 1.1736E+13 6.1858E+10, CFL 0.022, M 1.91912E+15 1.69794E+12, Enth -6.63656E+20 -5.27264E+17, S 3.0509 3.1027, Me 8.58E-18, Te -4.20E-17, Se 1.47E-17 + 72, 693138.000, 0, Area 1.117752595445E+13 3.775999878877E+10, Ext 1.1855E+13 5.8836E+10, CFL 0.023, M 2.02819E+15 1.37743E+12, Enth -7.02747E+20 -4.27979E+17, S 3.0508 3.0452, Me 1.24E-17, Te -3.27E-17, Se 1.09E-17 + 78, 693138.250, 0, Area 1.125379219377E+13 3.392194836512E+10, Ext 1.1962E+13 5.4567E+10, CFL 0.031, M 2.13471E+15 1.08987E+12, Enth -7.40396E+20 -3.40061E+17, S 3.0505 2.9778, Me 1.34E-17, Te -2.46E-17, Se 1.07E-17 + 84, 693138.500, 0, Area 1.132668879491E+13 2.819704029604E+10, Ext 1.2043E+13 4.5468E+10, CFL 0.035, M 2.23812E+15 8.47330E+11, Enth -7.76589E+20 -2.65899E+17, S 3.0501 2.9153, Me 2.45E-17, Te -1.32E-17, Se 3.11E-17 + 90, 693138.750, 0, Area 1.139426018197E+13 2.436278576931E+10, Ext 1.2158E+13 3.8783E+10, CFL 0.031, M 2.33812E+15 6.44915E+11, Enth -8.11668E+20 -2.02964E+17, S 3.0497 2.8289, Me 1.93E-17, Te -2.23E-17, Se 2.39E-17 + 96, 693139.000, 0, Area 1.145280433359E+13 1.993819497334E+10, Ext 1.2238E+13 3.1392E+10, CFL 0.030, M 2.43538E+15 4.72884E+11, Enth -8.45559E+20 -1.48979E+17, S 3.0493 2.7349, Me 1.28E-17, Te -3.35E-17, Se 1.10E-17 + 102, 693139.250, 0, Area 1.150679367630E+13 1.731646674950E+10, Ext 1.2304E+13 2.7400E+10, CFL 0.026, M 2.53005E+15 3.31254E+11, Enth -8.78606E+20 -1.04597E+17, S 3.0488 2.6515, Me 1.35E-17, Te -2.82E-17, Se 1.43E-17 + 108, 693139.500, 0, Area 1.156727821824E+13 1.165309346324E+10, Ext 1.2364E+13 2.0324E+10, CFL 0.026, M 2.62250E+15 2.33366E+11, Enth -9.10974E+20 -7.38221E+16, S 3.0485 2.6389, Me 9.38E-18, Te -3.61E-17, Se 1.26E-17 + 114, 693139.750, 0, Area 1.160969269446E+13 7.469024253888E+09, Ext 1.2399E+13 1.6006E+10, CFL 0.020, M 2.71320E+15 1.62563E+11, Enth -9.42442E+20 -5.12485E+16, S 3.0483 2.6489, Me 1.52E-17, Te -3.35E-17, Se 9.94E-18 + 120, 693140.000, 0, Area 1.166253770437E+13 5.329901367042E+09, Ext 1.2491E+13 1.1508E+10, CFL 0.020, M 2.80201E+15 1.07815E+11, Enth -9.72990E+20 -3.39839E+16, S 3.0481 2.5541, Me 7.46E-18, Te -2.88E-17, Se 1.86E-17 + 126, 693140.250, 0, Area 1.173084759624E+13 3.451733417130E+09, Ext 1.2560E+13 7.6593E+09, CFL 0.019, M 2.88883E+15 6.57643E+10, Enth -1.00283E+21 -2.07927E+16, S 3.0480 2.4664, Me 1.00E-17, Te -2.98E-17, Se 1.22E-17 + 132, 693140.500, 0, Area 1.177623279588E+13 2.434493706265E+09, Ext 1.2617E+13 6.6757E+09, CFL 0.021, M 2.97387E+15 3.78375E+10, Enth -1.03226E+21 -1.19975E+16, S 3.0479 2.4310, Me -6.71E-19, Te -4.41E-17, Se 2.66E-18 + 138, 693140.750, 0, Area 1.181572437023E+13 9.840179414274E+08, Ext 1.2680E+13 2.9183E+09, CFL 0.027, M 3.05697E+15 2.06830E+10, Enth -1.06144E+21 -6.52971E+15, S 3.0477 2.4295, Me 7.99E-18, Te -4.31E-17, Se -8.95E-19 + 144, 693141.000, 0, Area 1.186565440932E+13 7.974561560516E+08, Ext 1.2747E+13 1.9671E+09, CFL 0.029, M 3.13873E+15 8.94139E+09, Enth -1.09011E+21 -2.84039E+15, S 3.0476 1.8708, Me 2.13E-17, Te -1.58E-17, Se 2.01E-17 + 150, 693141.250, 0, Area 1.189913602228E+13 0.000000000000E+00, Ext 1.2777E+13 0.0000E+00, CFL 0.025, M 3.21909E+15 0.00000E+00, Enth -1.11809E+21 0.00000E+00, S 3.0474 0.0000, Me 1.48E-17, Te -2.05E-17, Se 1.55E-17 + 156, 693141.500, 0, Area 1.192329612269E+13 0.000000000000E+00, Ext 1.2802E+13 0.0000E+00, CFL 0.023, M 3.29776E+15 0.00000E+00, Enth -1.14559E+21 0.00000E+00, S 3.0471 0.0000, Me 1.13E-17, Te -2.40E-17, Se 1.76E-17 + 162, 693141.750, 0, Area 1.195225282648E+13 0.000000000000E+00, Ext 1.2843E+13 0.0000E+00, CFL 0.025, M 3.37465E+15 0.00000E+00, Enth -1.17221E+21 0.00000E+00, S 3.0468 0.0000, Me 5.16E-18, Te -2.99E-17, Se 7.10E-18 + 168, 693142.000, 0, Area 1.197294927242E+13 0.000000000000E+00, Ext 1.2891E+13 0.0000E+00, CFL 0.024, M 3.44981E+15 0.00000E+00, Enth -1.19824E+21 0.00000E+00, S 3.0465 0.0000, Me 1.68E-17, Te -2.51E-17, Se 2.40E-17 + 174, 693142.250, 0, Area 1.199421197071E+13 0.000000000000E+00, Ext 1.2911E+13 0.0000E+00, CFL 0.023, M 3.52317E+15 0.00000E+00, Enth -1.22353E+21 0.00000E+00, S 3.0461 0.0000, Me 1.18E-17, Te -3.02E-17, Se 1.40E-17 + 180, 693142.500, 0, Area 1.202162334233E+13 0.000000000000E+00, Ext 1.2949E+13 0.0000E+00, CFL 0.026, M 3.59492E+15 0.00000E+00, Enth -1.24829E+21 0.00000E+00, S 3.0457 0.0000, Me 1.30E-17, Te -2.23E-17, Se 1.92E-17 + 186, 693142.750, 0, Area 1.204674392328E+13 0.000000000000E+00, Ext 1.2966E+13 0.0000E+00, CFL 0.023, M 3.66528E+15 0.00000E+00, Enth -1.27258E+21 0.00000E+00, S 3.0453 0.0000, Me 9.05E-18, Te -3.51E-17, Se 1.16E-17 + 192, 693143.000, 0, Area 1.207475864396E+13 0.000000000000E+00, Ext 1.2992E+13 0.0000E+00, CFL 0.023, M 3.73453E+15 0.00000E+00, Enth -1.29659E+21 0.00000E+00, S 3.0449 0.0000, Me 4.91E-18, Te -3.82E-17, Se -2.80E-19 + 198, 693143.250, 0, Area 1.209477318878E+13 0.000000000000E+00, Ext 1.3017E+13 0.0000E+00, CFL 0.023, M 3.80273E+15 0.00000E+00, Enth -1.32025E+21 0.00000E+00, S 3.0445 0.0000, Me 8.70E-18, Te -3.28E-17, Se 3.83E-18 + 204, 693143.500, 0, Area 1.212693901611E+13 0.000000000000E+00, Ext 1.3053E+13 0.0000E+00, CFL 0.025, M 3.87008E+15 0.00000E+00, Enth -1.34374E+21 0.00000E+00, S 3.0441 0.0000, Me 1.02E-17, Te -4.57E-17, Se 2.55E-18 + 210, 693143.750, 0, Area 1.214122619906E+13 0.000000000000E+00, Ext 1.3072E+13 0.0000E+00, CFL 0.026, M 3.93655E+15 0.00000E+00, Enth -1.36681E+21 0.00000E+00, S 3.0437 0.0000, Me 1.85E-17, Te -2.38E-17, Se 1.46E-17 + 216, 693144.000, 0, Area 1.216089255134E+13 0.000000000000E+00, Ext 1.3113E+13 0.0000E+00, CFL 0.024, M 4.00225E+15 0.00000E+00, Enth -1.38975E+21 0.00000E+00, S 3.0432 0.0000, Me 9.82E-18, Te -3.89E-17, Se 1.39E-17 + 222, 693144.250, 0, Area 1.217081737520E+13 0.000000000000E+00, Ext 1.3143E+13 0.0000E+00, CFL 0.022, M 4.06727E+15 0.00000E+00, Enth -1.41267E+21 0.00000E+00, S 3.0427 0.0000, Me 9.95E-18, Te -3.27E-17, Se 1.99E-17 + 228, 693144.500, 0, Area 1.219380210871E+13 0.000000000000E+00, Ext 1.3180E+13 0.0000E+00, CFL 0.024, M 4.13179E+15 0.00000E+00, Enth -1.43574E+21 0.00000E+00, S 3.0422 0.0000, Me 1.29E-17, Te -2.26E-17, Se 2.56E-17 + 234, 693144.750, 0, Area 1.222142765719E+13 0.000000000000E+00, Ext 1.3191E+13 0.0000E+00, CFL 0.026, M 4.19607E+15 0.00000E+00, Enth -1.45891E+21 0.00000E+00, S 3.0418 0.0000, Me 1.01E-17, Te -2.47E-17, Se 1.81E-17 + 240, 693145.000, 0, Area 1.224329297889E+13 0.000000000000E+00, Ext 1.3240E+13 0.0000E+00, CFL 0.023, M 4.26038E+15 0.00000E+00, Enth -1.48214E+21 0.00000E+00, S 3.0414 0.0000, Me 2.08E-17, Te -1.33E-17, Se 2.68E-17 diff --git a/ice_ocean_SIS2/FLOR2/timestats b/ice_ocean_SIS2/FLOR2/timestats new file mode 100644 index 0000000000..2c34b447c4 --- /dev/null +++ b/ice_ocean_SIS2/FLOR2/timestats @@ -0,0 +1,43 @@ + Step, Day, Truncs, Energy/Mass, Maximum CFL, Mean Sea Level, Total Mass, Mean Salin, Mean Temp, Frac Mass Err, Salin Err, Temp Err + [days] [m2 s-2] [Nondim] [m] [kg] [PSU] [degC] [Nondim] [PSU] [degC] + 0, 693135.000, 0, En 1.459528669927E-05, CFL 0.00000, SL -1.0445E-10, M 1.38104E+21, S 34.7205, T 3.6205, Me 0.00E+00, Se 0.00E+00, Te 0.00E+00 + 6, 693135.250, 0, En 7.237251558122E-04, CFL 0.09222, SL -1.6605E-03, M 1.38104E+21, S 34.7205, T 3.6207, Me -3.06E-19, Se -1.09E-12, Te 6.02E-12 + 12, 693135.500, 0, En 7.580600215675E-04, CFL 0.10022, SL -2.0716E-03, M 1.38104E+21, S 34.7205, T 3.6207, Me -3.03E-20, Se -7.37E-13, Te 9.22E-12 + 18, 693135.750, 0, En 8.296596198350E-04, CFL 0.14889, SL -2.4751E-03, M 1.38104E+21, S 34.7205, T 3.6207, Me 3.83E-20, Se -5.27E-13, Te 1.13E-11 + 24, 693136.000, 0, En 9.682503001298E-04, CFL 0.07982, SL -2.8673E-03, M 1.38104E+21, S 34.7205, T 3.6207, Me 9.75E-20, Se -4.43E-13, Te 1.29E-11 + 30, 693136.250, 0, En 9.882978862264E-04, CFL 0.07500, SL -3.2475E-03, M 1.38104E+21, S 34.7205, T 3.6207, Me 9.37E-20, Se -3.44E-13, Te 1.29E-11 + 36, 693136.500, 0, En 1.036695782870E-03, CFL 0.09379, SL -3.6219E-03, M 1.38104E+21, S 34.7205, T 3.6207, Me -1.92E-19, Se -2.91E-13, Te 1.27E-11 + 42, 693136.750, 0, En 1.086382609158E-03, CFL 0.11998, SL -3.9825E-03, M 1.38104E+21, S 34.7205, T 3.6208, Me 1.27E-19, Se -2.76E-13, Te 1.29E-11 + 48, 693137.000, 0, En 1.105334153401E-03, CFL 0.09367, SL -4.3400E-03, M 1.38104E+21, S 34.7205, T 3.6208, Me -2.24E-19, Se -2.92E-13, Te 1.25E-11 + 54, 693137.250, 0, En 1.166818499441E-03, CFL 0.08957, SL -4.6970E-03, M 1.38104E+21, S 34.7205, T 3.6208, Me 8.87E-20, Se -3.13E-13, Te 1.16E-11 + 60, 693137.500, 0, En 1.178647457586E-03, CFL 0.08200, SL -5.0483E-03, M 1.38104E+21, S 34.7205, T 3.6208, Me -4.12E-19, Se -3.32E-13, Te 1.07E-11 + 66, 693137.750, 0, En 1.190588444169E-03, CFL 0.06935, SL -5.3860E-03, M 1.38104E+21, S 34.7205, T 3.6208, Me 2.13E-19, Se -3.56E-13, Te 1.05E-11 + 72, 693138.000, 0, En 1.201500180548E-03, CFL 0.07003, SL -5.7168E-03, M 1.38104E+21, S 34.7205, T 3.6208, Me 1.30E-19, Se -3.80E-13, Te 1.05E-11 + 78, 693138.250, 0, En 1.175872287248E-03, CFL 0.06968, SL -6.0434E-03, M 1.38104E+21, S 34.7205, T 3.6209, Me -8.61E-20, Se -3.71E-13, Te 1.06E-11 + 84, 693138.500, 0, En 1.217590238719E-03, CFL 0.07276, SL -6.3641E-03, M 1.38104E+21, S 34.7205, T 3.6209, Me -2.34E-19, Se -3.67E-13, Te 1.08E-11 + 90, 693138.750, 0, En 1.232339892458E-03, CFL 0.08513, SL -6.6689E-03, M 1.38104E+21, S 34.7205, T 3.6209, Me 1.07E-19, Se -3.49E-13, Te 1.11E-11 + 96, 693139.000, 0, En 1.223114131563E-03, CFL 0.07528, SL -6.9611E-03, M 1.38104E+21, S 34.7205, T 3.6209, Me -3.97E-21, Se -3.00E-13, Te 1.11E-11 + 102, 693139.250, 0, En 1.211402121872E-03, CFL 0.07566, SL -7.2486E-03, M 1.38104E+21, S 34.7205, T 3.6210, Me 1.76E-19, Se -3.05E-13, Te 1.09E-11 + 108, 693139.500, 0, En 1.204846554636E-03, CFL 0.07877, SL -7.5424E-03, M 1.38104E+21, S 34.7205, T 3.6210, Me -2.03E-19, Se -2.69E-13, Te 1.13E-11 + 114, 693139.750, 0, En 1.212354589319E-03, CFL 0.08090, SL -7.8339E-03, M 1.38104E+21, S 34.7205, T 3.6210, Me 2.69E-20, Se -3.26E-13, Te 1.15E-11 + 120, 693140.000, 0, En 1.217642237521E-03, CFL 0.08335, SL -8.1221E-03, M 1.38104E+21, S 34.7205, T 3.6210, Me -2.22E-19, Se -2.63E-13, Te 1.14E-11 + 126, 693140.250, 0, En 1.199800847544E-03, CFL 0.08601, SL -8.4188E-03, M 1.38104E+21, S 34.7205, T 3.6210, Me 1.12E-19, Se -3.36E-13, Te 1.18E-11 + 132, 693140.500, 0, En 1.205082724689E-03, CFL 0.08872, SL -8.7149E-03, M 1.38104E+21, S 34.7205, T 3.6210, Me -7.54E-20, Se -3.85E-13, Te 1.27E-11 + 138, 693140.750, 0, En 1.195567677079E-03, CFL 0.09148, SL -9.0069E-03, M 1.38104E+21, S 34.7205, T 3.6211, Me -1.04E-19, Se -3.77E-13, Te 1.19E-11 + 144, 693141.000, 0, En 1.189604757229E-03, CFL 0.09271, SL -9.2932E-03, M 1.38104E+21, S 34.7205, T 3.6211, Me 1.63E-19, Se -3.74E-13, Te 1.26E-11 + 150, 693141.250, 0, En 1.172124923149E-03, CFL 0.09375, SL -9.5669E-03, M 1.38104E+21, S 34.7205, T 3.6211, Me -7.79E-20, Se -3.79E-13, Te 1.35E-11 + 156, 693141.500, 0, En 1.162674700902E-03, CFL 0.09365, SL -9.8226E-03, M 1.38104E+21, S 34.7205, T 3.6211, Me -6.93E-20, Se -3.74E-13, Te 1.33E-11 + 162, 693141.750, 0, En 1.167716910618E-03, CFL 0.09283, SL -1.0058E-02, M 1.38104E+21, S 34.7205, T 3.6211, Me -3.58E-20, Se -3.55E-13, Te 1.36E-11 + 168, 693142.000, 0, En 1.171749099731E-03, CFL 0.09091, SL -1.0282E-02, M 1.38104E+21, S 34.7206, T 3.6212, Me 1.16E-19, Se -3.46E-13, Te 1.48E-11 + 174, 693142.250, 0, En 1.158043832273E-03, CFL 0.08982, SL -1.0495E-02, M 1.38104E+21, S 34.7206, T 3.6212, Me 1.11E-19, Se -3.26E-13, Te 1.57E-11 + 180, 693142.500, 0, En 1.162759754605E-03, CFL 0.08949, SL -1.0693E-02, M 1.38104E+21, S 34.7206, T 3.6212, Me -1.87E-19, Se -3.08E-13, Te 1.59E-11 + 186, 693142.750, 0, En 1.162225298190E-03, CFL 0.08881, SL -1.0875E-02, M 1.38104E+21, S 34.7206, T 3.6212, Me -1.47E-19, Se -2.79E-13, Te 1.55E-11 + 192, 693143.000, 0, En 1.158195093236E-03, CFL 0.08936, SL -1.1052E-02, M 1.38104E+21, S 34.7206, T 3.6213, Me 3.15E-19, Se -2.42E-13, Te 1.54E-11 + 198, 693143.250, 0, En 1.157192464459E-03, CFL 0.09002, SL -1.1228E-02, M 1.38104E+21, S 34.7206, T 3.6213, Me -1.75E-19, Se -2.25E-13, Te 1.50E-11 + 204, 693143.500, 0, En 1.157376140521E-03, CFL 0.08997, SL -1.1407E-02, M 1.38104E+21, S 34.7206, T 3.6213, Me 4.16E-20, Se -2.07E-13, Te 1.48E-11 + 210, 693143.750, 0, En 1.159974721943E-03, CFL 0.09042, SL -1.1585E-02, M 1.38104E+21, S 34.7206, T 3.6214, Me -1.17E-19, Se -1.81E-13, Te 1.39E-11 + 216, 693144.000, 0, En 1.160287688676E-03, CFL 0.08982, SL -1.1766E-02, M 1.38104E+21, S 34.7206, T 3.6214, Me 2.72E-20, Se -1.67E-13, Te 1.37E-11 + 222, 693144.250, 0, En 1.155998252753E-03, CFL 0.08875, SL -1.1943E-02, M 1.38104E+21, S 34.7206, T 3.6214, Me 1.28E-19, Se -1.65E-13, Te 1.39E-11 + 228, 693144.500, 0, En 1.149970614814E-03, CFL 0.08859, SL -1.2127E-02, M 1.38104E+21, S 34.7206, T 3.6215, Me 8.13E-21, Se -1.59E-13, Te 1.36E-11 + 234, 693144.750, 0, En 1.145774643956E-03, CFL 0.08906, SL -1.2301E-02, M 1.38104E+21, S 34.7206, T 3.6215, Me 7.80E-20, Se -1.45E-13, Te 1.35E-11 + 240, 693145.000, 0, En 1.154009544837E-03, CFL 0.08949, SL -1.2473E-02, M 1.38104E+21, S 34.7206, T 3.6215, Me 1.93E-19, Se -1.40E-13, Te 1.39E-11 diff --git a/tools/python/FLOR2gridGeneration/.gitignore b/tools/python/FLOR2gridGeneration/.gitignore new file mode 100644 index 0000000000..70fca87c91 --- /dev/null +++ b/tools/python/FLOR2gridGeneration/.gitignore @@ -0,0 +1,4 @@ +DATA +local +tpxo7_atlas_netcdf.tar.Z +input.nml diff --git a/tools/python/FLOR2gridGeneration/FLOR2_grid-mercator.py b/tools/python/FLOR2gridGeneration/FLOR2_grid-mercator.py new file mode 100644 index 0000000000..3a230ecd76 --- /dev/null +++ b/tools/python/FLOR2gridGeneration/FLOR2_grid-mercator.py @@ -0,0 +1,260 @@ + +from scipy.interpolate import interp1d +from midas.rectgrid import * +import numpy as np +import matplotlib.pyplot as plt +from mpl_toolkits.basemap import Basemap, cm +import netCDF4 as nc + + +# In[161]: + +lat0=-65. +lon0=-300. +lenlat=125. +lenlon=360. +nlon=360*2 +nlat=500*2 +mercator=supergrid(nlon,nlat,'mercator','degrees',lat0,lenlat,lon0,lenlon,cyclic_x=True) +mercator.grid_metrics() +#get_ipython().magic(u'matplotlib inline') +phi=mercator.y[:,0] +dphi=phi[1:]-phi[0:-1] +plt.plot(phi[1:],2.0*dphi) +plt.title('Mercator N/S resolution') + + +# In[162]: + +#get_ipython().magic(u'matplotlib inline') +phi=mercator.y[:,0] +dphi=phi[1:]-phi[0:-1] +jind=np.where(phi>-20.)[0][0] +jind=jind+np.mod(jind,2) +phi=phi[0:jind] +dphi=dphi[0:jind] +N=26 +phi_s = phi[-1] +dphi_s = dphi[-1] +phi_e = -10. +dphi_e = 0.2 +nodes = [0,1,N-2,N-1] +phi_nodes = [phi_s,phi_s+dphi_s,phi_e-dphi_e,phi_e] +f2=interp1d(nodes,phi_nodes,kind=3) +jInd2=np.arange(N) +phi2=f2(jInd2) +dphi2=phi2[1:]-phi2[0:-1] +phi=np.concatenate((phi[0:-1],phi2)) +dphi=phi[1:]-phi[0:-1] + +N=56 +phi_s = phi[-1] +phi2=np.linspace(phi_s,0,N) +dphi2=phi2[1:]-phi2[0:-1] +PHI=np.concatenate((phi[0:-1],phi2)) +PHI=np.concatenate((PHI[0:-1],-PHI[::-1])) + +DPHI=PHI[1:]-PHI[0:-1] +plt.plot(PHI[1:],2*DPHI) + + +# In[163]: + +LAMBDA=np.linspace(lon0,lon0+360.,nlon+1) +jind=np.where(PHI>-78.)[0][0] +jind=jind+np.mod(jind,2) +jind2=np.where(PHI>60.)[0][0] +jind2=jind2+np.mod(jind2,2) + +PHI2=PHI[jind:jind2-1] +DPHI2=PHI2[1:]-PHI2[0:-1] +x,y = np.meshgrid(LAMBDA,PHI2) +gridB = supergrid(xdat=x,ydat=y,axis_units='degrees',cyclic_x=True) +gridB.grid_metrics() +gridB.write_nc('flor_gridB.nc') + + +# In[164]: + +ny_ncap=155 +phi_tps = PHI2[-1] +dphi_tps = DPHI2[-1] +nodes = [0,1,ny_ncap-2,ny_ncap-1] +phi_tp_nodes = [phi_tps,phi_tps+dphi_tps,89.9,90.] +ftp=interp1d(nodes,phi_tp_nodes,kind=3) +jInd2=np.arange(ny_ncap) +phitp=ftp(jInd2) +dphitp=phitp[1:]-phitp[0:-1] +plt.plot(phitp[0:-1],2*dphitp) +plt.title('Model N/S Arctic resolution (prior to transform)') + + +# In[165]: + +lat0_tp = PHI2[-1] +XTP,YTP=np.meshgrid(LAMBDA,phitp) +gridC=supergrid(xdat=XTP,ydat=YTP,axis_units='degrees',tripolar_n=True) +gridC.grid_metrics() +gridC.write_nc('flor_gridC.nc') + + +### Combine grids + +# In[166]: + +f=nc.Dataset('flor_gridB.nc') +g=nc.Dataset('flor_gridC.nc') + +y1=f.variables['y'][:] +y2=g.variables['y'][:] +y=np.concatenate((y1,y2[1:,:]),axis=0) + +dy1=f.variables['dy'][:] +dy2=g.variables['dy'][:] +dy=np.concatenate((dy1,dy2),axis=0) + +x1=f.variables['x'][:] +x2=g.variables['x'][:] +x=np.concatenate((x1,x2[1:,:]),axis=0) + +dx1=f.variables['dx'][:] +dx2=g.variables['dx'][:] +dx=np.concatenate((dx1,dx2[1:,:]),axis=0) + + +area1=f.variables['area'][:] +area2=g.variables['area'][:] +area=np.concatenate((area1,area2),axis=0) + +angle_dx1=f.variables['angle_dx'][:,:] +angle_dx2=g.variables['angle_dx'][:-1,:] +angle_dx=np.concatenate((angle_dx1,angle_dx2),axis=0) + +fout=nc.Dataset('supergrid.nc','w',format='NETCDF3_CLASSIC') + +ny=area.shape[0]; nx = area.shape[1] +nyp=ny+1; nxp=nx+1 + +fout.createDimension('nyp',nyp) +fout.createDimension('nxp',nxp) +fout.createDimension('ny',ny) +fout.createDimension('nx',nx) +string=fout.createDimension('string',255) + +tile=fout.createVariable('tile','S1',('string')) +yv=fout.createVariable('y','f8',('nyp','nxp')) +xv=fout.createVariable('x','f8',('nyp','nxp')) +yv.units='degrees' +xv.units='degrees' +yv[:]=y +xv[:]=x + +tile[0:4]='tile1' +dyv=fout.createVariable('dy','f8',('ny','nxp')) +dyv.units='meters' +dyv[:]=dy +dxv=fout.createVariable('dx','f8',('nyp','nx')) +dxv.units='meters' +dxv[:]=dx +areav=fout.createVariable('area','f8',('ny','nx')) +areav.units='m2' +areav[:]=area +anglev=fout.createVariable('angle_dx','f8',('nyp','nxp')) +anglev.units='degrees' +print nxp,nyp +print angle_dx.shape +anglev[:]=angle_dx + +fout.sync() +fout.close() + + +### Load the final supergrid and create a model grid + +# In[167]: + +sgrid=supergrid(file='supergrid.nc',cyclic_x=True,tripolar_n=True) +grid=quadmesh(supergrid=sgrid) +print 'Total number of i grid points = ',grid.im +print 'Total number of j grid points = ',grid.jm +print 'Closest grid point to the equator =',grid.lath[np.where(np.abs(grid.lath)<0.2)[0]] + + +# In[168]: + +aiso1=grid.dyh[:,0]/grid.dxh[:,0] +aiso2=1.0/aiso1 +aiso = np.maximum(aiso1,aiso2) +#plt.plot(grid.lath,aiso1,color='b') +#plt.plot(grid.lath,aiso2,color='g') +plt.plot(grid.lath,aiso,color='c') + +plt.plot([grid.lath[0],grid.lath[-1]],[1.,1.],'r--') +plt.xlim(-80,50) +plt.ylim(0.25,3) +plt.title('Grid Anisotropy (nd)') + + +# In[169]: + +#get_ipython().magic(u'matplotlib inline') +print grid.x_T.min(),grid.x_T.max() +plt.pcolormesh(grid.x_T,grid.y_T,grid.dxh*grid.dyh) +plt.xlim(-300,60) +plt.ylim(-90,90) +plt.title('Cell Area') +plt.colorbar() + + +# In[172]: + +wd=6667000. +ht=6667000. +m = Basemap(projection='stere',width=wd,height=ht,lon_0=0.0,lat_ts=70.,lat_0=90.,resolution='l') +xx=grid.x_T.copy() +yy=grid.y_T.copy() +xx[xx<-180]=xx[xx<-180]+360. +xplt,yplt=m(xx,yy,inverse=False) +aiso = grid.dyh/grid.dxh +aiso = np.maximum(aiso,1.0/aiso) +cf=m.contourf(xplt,yplt,aiso,np.linspace(1.0,3,10)) +#m.contourf(xplt,yplt,aiso) +#cl=m.contour(xplt,yplt,aiso,np.linspace(1.0,2.0,10),colors='k') +#plt.clabel(cl) +m.drawcoastlines() +plt.title('Tripolar Anisotropy') +plt.colorbar(cf) + + +# In[171]: + +wd=6667000. +ht=6667000. +m = Basemap(projection='stere',width=wd,height=ht,lon_0=0.0,lat_ts=70.,lat_0=90.,resolution='l') +xx=grid.x_T +yy=grid.y_T +xx[xx<-180]=xx[xx<-180]+360. +xplt,yplt=m(xx,yy,inverse=False) +cf=m.contourf(xplt,yplt,grid.dxh*grid.dyh/1.e9,np.arange(0.1,3.6,.1),extend='both') +m.drawcoastlines() +m.drawparallels(np.arange(50.,90.,10.)) +m.drawmeridians(np.arange(-180.,180.,15.)) +plt.title('Tripolar grid cell Area') +plt.colorbar(cf) + + +# In[ ]: + +ingrid=quadmesh('GEBCO_08_v2.nc',var='depth',simple_grid=True,cyclic=True) +TOPO=state('GEBCO_08_v2.nc',grid=ingrid,fields=['depth']) +TOPO.rename_field('depth','topo') +TOPO.var_dict['topo']['Ztype']='Fixed' +fnam = 'topog_gebco.nc' +R=TOPO.subtile('topo',target=grid) +R.write_nc(fnam,['mean','max','min','std','count']) + + +# In[ ]: + + + diff --git a/tools/python/FLOR2gridGeneration/Jenkins.csh b/tools/python/FLOR2gridGeneration/Jenkins.csh new file mode 100755 index 0000000000..69cc4f9ef2 --- /dev/null +++ b/tools/python/FLOR2gridGeneration/Jenkins.csh @@ -0,0 +1,21 @@ +#!/bin/csh -fx + +echo -n Started $0 in ; pwd + +# Modules +source $MODULESHOME/init/csh +module use -a /home/fms/local/modulefiles +module load python +module load netcdf/4.2 intel_compilers +module load nco/4.3.1 + +# Installing this file avoids a slow and unreliable file server (that would otherwise be ftp'd from ftp.oce.orst.edu) +cp -n /archive/gold/datasets/obs/tpxo7_atlas_netcdf.tar.Z . +# This is the one non-reproducible file needed in this work flow +cp -n /archive/aja/permanent/edit_topog.nc.v20140629 edit_topog.nc + +# Work around for environment problem inside MIDAS +setenv PYTHONPATH $cwd/local/lib + +# Run through the work flow +make diff --git a/tools/python/FLOR2gridGeneration/Makefile b/tools/python/FLOR2gridGeneration/Makefile new file mode 100644 index 0000000000..a26ded8686 --- /dev/null +++ b/tools/python/FLOR2gridGeneration/Makefile @@ -0,0 +1,112 @@ +# Makefile to create supergrid.nc and interpolated_topog.nc +# To use: +# module load python +# setenv PYTHONPATH $cwd/MIDAS +# +# then +# make all +# or +# make supergrid.nc +# make interpolated_topog.nc + +SHELL=tcsh -f + +all: input forcing obs + md5sum -c md5sums.txt + +showenv: + env + -set + -module list + which python + -python --version + +input: ocean_hgrid.nc topog.nc basin_codes.nc + +forcing: salt_restore.nc seawifs_1998-2006_smoothed_2X.nc tidal_amplitude.nc + +obs: WOA05_ptemp_salt_monthly.nc WOA05_ptemp_salt_annual.nc + +# Grid + +ocean_hgrid.nc: local + unlimit stacksize; setenv PYTHONPATH ./local/lib/python; python create_grids.py + unlimit stacksize; setenv PYTHONPATH ./local/lib/python; python merge_grids.py + ./changeChar.py ocean_hgrid.nc tile tile1 + +# Topography +interpolated_topog.nc: ocean_hgrid.nc + unlimit stacksize; setenv PYTHONPATH ./local/lib/python; python create_topo.py + + +topog.nc: edit_topog.nc interpolated_topog.nc + ./ice9.py edit_topog.nc --output topog.nc + +basin_codes.nc: topog.nc + unlimit stacksize; setenv PYTHONPATH ./local/lib/python; python make_basin_mask.py + ncatted -h -a flag_meanings,basin,c,c,'1:Southern Ocean, 2:Atlantic Ocean, 3:Pacific Ocean, 4:Arctic Ocean, 5:Indian Ocean, 6:Mediterranean Sea, 7:Black Sea, 8:Hudson Bay, 9:Baltic Sea, 10:Red Sea, 11:Persian Gulf' basin_codes.nc + ncatted -h -a flag_values,basin,c,c,'1,2,3,4,5,6,7,8,9,10,11' basin_codes.nc + +WOA05_ptemp_salt_annual.nc: WOA05_ptemp_salt_monthly.nc + ncra -h -O $< $@ + +WOA05_ptemp_salt_monthly.nc: ocean_hgrid.nc topog.nc /archive/gold/datasets/obs/WOA05_pottemp_salt.nc interpWOA05.py local + unlimit stacksize; setenv PYTHONPATH ./local/lib/python; python interpWOA05.py + ncatted -h -a modulo,TIME,c,c,' ' WOA05_ptemp_salt_monthly.nc + +salt_restore.nc: ocean_hgrid.nc topog.nc /archive/gold/datasets/obs/WOA05_pottemp_salt.nc interpSaltRestore.py local + unlimit stacksize; setenv PYTHONPATH ./local/lib/python; python interpSaltRestore.py + ncatted -h -a modulo,TIME,c,c,' ' salt_restore.nc + +seawifs_1998-2006_smoothed_2X.nc: ocean_hgrid.nc topog.nc /archive/gold/datasets/global/siena_201204/INPUT/seawifs_1998-2006_GOLD_smoothed_2X.nc interpCHL.py local + unlimit stacksize; setenv PYTHONPATH ./local/lib/python; python interpCHL.py + ncatted -h -a modulo,TIME,c,c,' ' seawifs_1998-2006_smoothed_2X.nc + +tidal_amplitude.nc: DATA interpTides.py local + unlimit stacksize; setenv PYTHONPATH ./local/lib/python; python interpTides.py + +DATA: tpxo7_atlas_netcdf.tar.Z GEBCO_08_v2.nc + tar xzvf tpxo7_atlas_netcdf.tar.Z + touch DATA + +tpxo7_atlas_netcdf.tar.Z: + wget ftp://ftp.oce.orst.edu/dist/tides/Global/tpxo7_atlas_netcdf.tar.Z + +MIDAS: + git clone https://github.com/mjharriso/MIDAS.git + +# Submodule method for obtaining MIDAS (used by frepp_local target) +MIDAS/README.md: + (cd ../../..; git submodule init tools/python/025gridGeneration/MIDAS) + (cd ../../..; git submodule update tools/python/025gridGeneration/MIDAS) + +local: MIDAS + -rm -rf $ $@ + md5sum sgrid*.nc ocean_hgrid.nc >> $@ + echo >> $@ + echo Topography >> $@ + md5sum *topog*.nc >> $@ + md5sum basin_codes.nc >> $@ + echo >> $@ + echo Data >> $@ + md5sum salt_restore.nc seawifs_1998-2006_smoothed_2X.nc tidal_amplitude.nc >> $@ + echo >> $@ + echo Obs >> $@ + md5sum WOA05_ptemp_salt_{monthly,annual}.nc >> $@ diff --git a/tools/python/FLOR2gridGeneration/README.md b/tools/python/FLOR2gridGeneration/README.md new file mode 100644 index 0000000000..42fee42d9d --- /dev/null +++ b/tools/python/FLOR2gridGeneration/README.md @@ -0,0 +1,10 @@ +The Makefile in this directory manages the complete work flow to create +the grids, topography and some oceanographic fields needed to run OM4_025. + +The environment must be setup outside of make. At GFDL do: + + source $MODULESHOME/init/csh + module use -a /home/fms/local/modulefiles + module load netcdf/4.2 intel_compilers + module load nco/4.3.1 + module load python diff --git a/tools/python/FLOR2gridGeneration/addDimension.py b/tools/python/FLOR2gridGeneration/addDimension.py new file mode 100755 index 0000000000..7b2bc8a20f --- /dev/null +++ b/tools/python/FLOR2gridGeneration/addDimension.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python + +def error(msg,code=9): + print 'Error: ' + msg + exit(code) + +# Imports +try: import argparse +except: error('This version of python is not new enough. python 2.7 or newer is required.') +try: from netCDF4 import Dataset +except: error('Unable to import netCDF4 module. Check your PYTHONPATH.\n' + +'Perhaps try:\n module load python_netcdf4') + +def main(): + + # Command line arguments + parser = argparse.ArgumentParser(description= + 'Adds the named dimension to a netcdf file.', + epilog='Written by A.Adcroft, 2013.') + parser.add_argument('filename', type=str, + help='netcdf file to modify.') + parser.add_argument('dimension', type=str, + nargs='?', default='ntiles', + help='Name of dimension to add.') + parser.add_argument('value', type=int, + nargs='?', default=1, + help='Value to set dimension length to.') + + optCmdLineArgs = parser.parse_args() + + rg = Dataset(optCmdLineArgs.filename, 'a' ); + rg.createDimension(optCmdLineArgs.dimension,optCmdLineArgs.value) + rg.close() + print 'File "%s" updated.'%(optCmdLineArgs.filename) + +# Invoke main() +if __name__ == '__main__': main() + diff --git a/tools/python/FLOR2gridGeneration/changeChar.py b/tools/python/FLOR2gridGeneration/changeChar.py new file mode 100755 index 0000000000..a8c99850dd --- /dev/null +++ b/tools/python/FLOR2gridGeneration/changeChar.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python + +def error(msg,code=9): + print 'Error: ' + msg + exit(code) + +# Imports +try: import argparse +except: error('This version of python is not new enough. python 2.7 or newer is required.') +try: from netCDF4 import Dataset, stringtochar +except: error('Unable to import netCDF4 module. Check your PYTHONPATH.\n' + +'Perhaps try:\n module load python_netcdf4') +try: import numpy as np +except: error('Unable to import numpy module. Check your PYTHONPATH.\n' + +'Perhaps try:\n module load python_numpy') + +def main(): + + # Command line arguments + parser = argparse.ArgumentParser(description= + 'Changes the value of a named char variable in a netcdf file.', + epilog='Written by A.Adcroft, 2013.') + parser.add_argument('filename', type=str, + help='netcdf file to modify.') + parser.add_argument('variable', type=str, + help='Name of char variable to change.') + parser.add_argument('value', type=str, + help='Contents to change string to.') + + optCmdLineArgs = parser.parse_args() + + rg = Dataset(optCmdLineArgs.filename, 'a' ); + if optCmdLineArgs.variable in rg.variables: + var = rg.variables[optCmdLineArgs.variable] + dat = np.empty(1,'S'+repr(len(var))) + dat[0] = optCmdLineArgs.value + dc = stringtochar(dat) + var[:] = dc + else: error('"'+optCmdLineArgs.variable+'" was not found in "'+optCmdLineArgs.filename+'".') + rg.close() + print 'File "%s" updated.'%(optCmdLineArgs.filename) + +# Invoke main() +if __name__ == '__main__': main() + diff --git a/tools/python/FLOR2gridGeneration/create_grids.py b/tools/python/FLOR2gridGeneration/create_grids.py new file mode 100755 index 0000000000..0bb7fb8c31 --- /dev/null +++ b/tools/python/FLOR2gridGeneration/create_grids.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python + +#============================================================ +# Generate tiles for the northern/southern caps +# and central mercator grid. For use in Antarctic ice-sheet +# modeling. +# +# +# python create_topo.py +# Output: mercator_supergrid.nc, ncap_supergrid.nc, scap_supergrid.nc +# These are supergrids (2x grid tracer refinement) containing positions +# cell lengths, areas and angles. +# +#============================================================ + + + +from midas.rectgrid_gen import * +from midas.rectgrid import * +import numpy as np +from scipy.interpolate import interp1d +lat0=-65. +lon0=-300. +lenlat=125. +lenlon=360. +nlon=360*2 +nlat=500*2 + +mercator=supergrid(nlon,nlat,'mercator','degrees',lat0,lenlat,lon0,lenlon,cyclic_x=True) +mercator.grid_metrics() + +phi=mercator.y[:,0] +dphi=phi[1:]-phi[0:-1] + +phi=mercator.y[:,0] +dphi=phi[1:]-phi[0:-1] +jind=np.where(phi>-20.)[0][0] +jind=jind+np.mod(jind,2) +phi=phi[0:jind] +dphi=dphi[0:jind] + +N=26 +phi_s = phi[-1] +dphi_s = dphi[-1] +phi_e = -10. +dphi_e = 0.2 +nodes = [0,1,N-2,N-1] +phi_nodes = [phi_s,phi_s+dphi_s,phi_e-dphi_e,phi_e] +f2=interp1d(nodes,phi_nodes,kind=3) +jInd2=np.arange(N) +phi2=f2(jInd2) +dphi2=phi2[1:]-phi2[0:-1] +phi=np.concatenate((phi[0:-1],phi2)) +dphi=phi[1:]-phi[0:-1] + +N=56 +phi_s = phi[-1] +phi2=np.linspace(phi_s,0,N) +dphi2=phi2[1:]-phi2[0:-1] +PHI=np.concatenate((phi[0:-1],phi2)) +PHI=np.concatenate((PHI[0:-1],-PHI[::-1])) + +DPHI=PHI[1:]-PHI[0:-1] + +LAMBDA=np.linspace(lon0,lon0+360.,nlon+1) +jind=np.where(PHI>-78.)[0][0] +jind=jind+np.mod(jind,2) +jind2=np.where(PHI>60.)[0][0] +jind2=jind2+np.mod(jind2,2) + +PHI2=PHI[jind:jind2-1] +DPHI2=PHI2[1:]-PHI2[0:-1] +x,y = np.meshgrid(LAMBDA,PHI2) +gridA = supergrid(xdat=x,ydat=y,axis_units='degrees',cyclic_x=True) +gridA.grid_metrics() +gridA.write_nc('sgridA.nc') + + +ny_ncap=155 +phi_tps = PHI2[-1] +dphi_tps = DPHI2[-1] +nodes = [0,1,ny_ncap-2,ny_ncap-1] +phi_tp_nodes = [phi_tps,phi_tps+dphi_tps,89.9,90.] +ftp=interp1d(nodes,phi_tp_nodes,kind=3) +jInd2=np.arange(ny_ncap) +phitp=ftp(jInd2) +dphitp=phitp[1:]-phitp[0:-1] + +lat0_tp = PHI2[-1] +XTP,YTP=np.meshgrid(LAMBDA,phitp) +gridB=supergrid(xdat=XTP,ydat=YTP,axis_units='degrees',tripolar_n=True) +gridB.grid_metrics() +gridB.write_nc('sgridB.nc') + + + + + diff --git a/tools/python/FLOR2gridGeneration/create_topo.py b/tools/python/FLOR2gridGeneration/create_topo.py new file mode 100755 index 0000000000..8c891a32a6 --- /dev/null +++ b/tools/python/FLOR2gridGeneration/create_topo.py @@ -0,0 +1,43 @@ +#!python + +#============================================================ +# Generate tiles for the northern/southern caps +# and central mercator grid. +# +# python create_topo.py +# Output: mercator_supergrid.nc, ncap_supergrid.nc, scap_supergrid.nc +# These are supergrids (2x grid tracer refinement) containing positions +# cell lengths, areas and angles +# +# Generate topography for grid tiles using BEDMAP for the Antarctic cap +# GEBCO 2 minute data for the Mercator grid and either +# IBCAO or GEBCO for the Northern cap (these files need to be linked to the +# current directory prior to running this command) + +# python create_topo.py --tile ncap|scap|mercator +# +#============================================================ + + + +from midas.rectgrid import * +from midas.rectgrid_gen import * +import numpy as np +import matplotlib.pyplot as plt +from mpl_toolkits.basemap import Basemap, cm +from mpl_toolkits.basemap import interp +import argparse + +sgrid=supergrid(file='ocean_hgrid.nc',cyclic_x=True,tripolar_n=True) +grid=quadmesh(supergrid=sgrid) + +ingrid=quadmesh('GEBCO_08_v2.nc',var='depth',simple_grid=True,cyclic=True) +TOPO=state('GEBCO_08_v2.nc',grid=ingrid,fields=['depth']) +TOPO.rename_field('depth','topo') +TOPO.var_dict['topo']['Ztype']='Fixed' + +fnam='interpolated_topog.nc' +R=TOPO.subtile('topo',target=grid) +R.rename_field('mean','depth') +R.write_nc(fnam,['depth','max','min','std','count']) + diff --git a/tools/python/FLOR2gridGeneration/editTopo.py b/tools/python/FLOR2gridGeneration/editTopo.py new file mode 100755 index 0000000000..0478bb4671 --- /dev/null +++ b/tools/python/FLOR2gridGeneration/editTopo.py @@ -0,0 +1,456 @@ +#!/usr/bin/env python + +def error(msg,code=9): + print 'Error: ' + msg + exit(code) + + +# Imports +try: import argparse +except: error('This version of python is not new enough. python 2.7 or newer is required.') +try: from netCDF4 import Dataset +except: error('Unable to import netCDF4 module. Check your PYTHONPATH.\n' + +'Perhaps try:\n module load python_netcdf4') +try: import numpy as np +except: error('Unable to import numpy module. Check your PYTHONPATH.\n' + +'Perhaps try:\n module load python_numpy') +try: import matplotlib.pyplot as plt +except: error('Unable to import matplotlib.pyplot module. Check your PYTHONPATH.\n' + +'Perhaps try:\n module load python_matplotlib') +from matplotlib.widgets import Button, RadioButtons +from matplotlib.colors import LinearSegmentedColormap +import shutil as sh + + +def main(): + + # Command line arguments + parser = argparse.ArgumentParser(description= + '''Point-wise editting of topography. + Button 1 assigns the prescribed level to the cell at the mouse pointer. + Adjust the prescribed value with buttons on the bottom. + Double click button 1 assigns the highest of the nearest ocean points. + Right click on a cell resets to the original value. + Scroll wheel zooms in and out. + Move the "data window" around with the North, South, East and West buttons. + Closing the window writes the file to the output file if one is specified with --output. + ''', + epilog='Written by A.Adcroft, 2013.') + parser.add_argument('filename', type=str, + help='netcdf file to read.') + parser.add_argument('variable', type=str, + nargs='?', default='depth', + help='Name of variable to edit. Defaults to "depth".') + parser.add_argument('--output', type=str, + nargs='?', default=' ', + help='Write an output file. If no output file is specified, creates the file with the "edit_" prepended to the name of the input file.') + + optCmdLineArgs = parser.parse_args() + + createGUI(optCmdLineArgs.filename, optCmdLineArgs.variable, optCmdLineArgs.output) + + +def createGUI(fileName, variable, outFile): + + # Open netcdf file + try: rg=Dataset( fileName, 'r' ); + except: error('There was a problem opening "'+fileName+'".') + + rgVar = rg.variables[variable] # handle to the variable + dims = rgVar.dimensions # tuple of dimensions + depth = rgVar[:] # Read the data + #depth = depth[0:600,0:600] + (nj,ni) = depth.shape + print 'Range of input depths: min=',np.amin(depth),'max=',np.amax(depth) + + try: + sg=Dataset( 'supergrid.nc', 'r' ); + lon = sg.variables['x'][:]; lon = lon[0:2*nj+1:2,0:2*ni+1:2] + lat = sg.variables['y'][:]; lat = lat[0:2*nj+1:2,0:2*ni+1:2] + except: + lon, lat = np.meshgrid( np.arange(ni+1), np.arange(nj+1) ) + fullData = Topography(lon, lat, depth) + + class Container: + def __init__(self): + self.view = None + self.edits = None + self.data = None + self.quadMesh = None + self.ax = None + self.syms = None + cdict = {'red': ((0.0, 0.0, 0.0), (0.5, 0.7, 0.0), (1.0, 0.9, 0.0)), + 'green': ((0.0, 0.0, 0.0), (0.5, 0.7, 0.2), (1.0, 1.0, 0.0)), + 'blue': ((0.0, 0.0, 0.2), (0.5, 1.0, 0.0), (1.0, 0.9, 0.0))} + self.cmap = LinearSegmentedColormap('my_colormap',cdict,256) + self.clim = 6000 + self.climLabel = None + All = Container() + All.view = View(ni,nj) + All.edits = Edits() + + # Read edit data, if it exists + if 'iEdit' in rg.variables: + jEdit = rg.variables['iEdit'][:]; iEdit = rg.variables['jEdit'][:] + zEdit = rg.variables['zEdit'][:] + for l,i in enumerate(iEdit): + All.edits.setVal( fullData.height[iEdit[l],jEdit[l]] ) + fullData.height[iEdit[l],jEdit[l]] = zEdit[l] # Restore data + All.edits.add( iEdit[l],jEdit[l] ) + All.data = fullData.cloneWindow( (All.view.i0,All.view.j0), (All.view.iw,All.view.jw) ) + if All.edits.ijz: All.data.applyEdits(fullData, All.edits.ijz) + + # A mask based solely on value of depth + #notLand = np.where( depth<0, 1, 0) + #wet = ice9it(600,270,depth) + + All.quadMesh = plt.pcolormesh(All.data.longitude,All.data.latitude,All.data.height,cmap=All.cmap,vmin=-All.clim,vmax=All.clim) + All.syms = All.edits.plot(fullData) + dir(All.syms) + All.ax=plt.gca(); All.ax.set_xlim( All.data.xlim ); All.ax.set_ylim( All.data.ylim ) + All.climLabel = plt.figtext(.97,.97, 'XXXXX', ha='right', va='top') + All.climLabel.set_text('clim = $\pm$%i'%(All.clim)) + All.edits.label = plt.figtext(.97,.03, 'XXXXX', ha='right', va='bottom') + All.edits.label.set_text('New depth = %i'%(All.edits.get())) + lowerButtons = Buttons() + def resetDto0(event): All.edits.setVal(0) + lowerButtons.add('Set 0', resetDto0) + def resetDto100(event): All.edits.addToVal(100) + lowerButtons.add('+100', resetDto100) + def resetDto100(event): All.edits.addToVal(30) + lowerButtons.add('+30', resetDto100) + def resetDto100(event): All.edits.addToVal(10) + lowerButtons.add('+10', resetDto100) + def resetDto100(event): All.edits.addToVal(3) + lowerButtons.add('+3', resetDto100) + def resetDto100(event): All.edits.addToVal(1) + lowerButtons.add('+1', resetDto100) + def resetDto100(event): All.edits.addToVal(-1) + lowerButtons.add('-1', resetDto100) + def resetDto100(event): All.edits.addToVal(-3) + lowerButtons.add('-3', resetDto100) + def resetDto100(event): All.edits.addToVal(-10) + lowerButtons.add('-10', resetDto100) + def resetDto100(event): All.edits.addToVal(-30) + lowerButtons.add('-30', resetDto100) + def resetDto100(event): All.edits.addToVal(-100) + lowerButtons.add('-100', resetDto100) + def resetDto100(event): All.edits.addToVal(-500) + lowerButtons.add('-500', resetDto100) + def undoLast(event): + All.edits.pop() + All.data = fullData.cloneWindow( (All.view.i0,All.view.j0), (All.view.iw,All.view.jw) ) + All.data.applyEdits(fullData, All.edits.ijz) + All.quadMesh.set_array(All.data.height.ravel()) + All.edits.updatePlot(fullData,All.syms) + plt.draw() + lowerButtons.add('Undo', undoLast) + upperButtons = Buttons(bottom=1-.0615) + def colorScale(event): + Levs = [50, 200, 1000, 6000] + i = Levs.index(All.clim) + if event=='+clim': i = min(i+1, len(Levs)-1) + elif event==' -clim': i = max(i-1, 0) + All.clim = Levs[i] + #All.quadMesh = plt.pcolormesh(All.data.longitude,All.data.latitude,All.data.height,cmap=All.cmap,vmin=-All.clim,vmax=All.clim) + #All.ax.set_xlim( All.data.xlim ); All.ax.set_ylim( All.data.ylim ) + All.quadMesh.set_clim(vmin=-All.clim, vmax=All.clim) + All.climLabel.set_text('clim = $\pm$%i'%(All.clim)) + plt.draw() + def moveVisData(di,dj): + All.view.move(di,dj) + All.data = fullData.cloneWindow( (All.view.i0,All.view.j0), (All.view.iw,All.view.jw) ) + All.data.applyEdits(fullData, All.edits.ijz) + plt.sca(All.ax); plt.cla() + All.quadMesh = plt.pcolormesh(All.data.longitude,All.data.latitude,All.data.height,cmap=All.cmap,vmin=-All.clim,vmax=All.clim) + All.ax.set_xlim( All.data.xlim ); All.ax.set_ylim( All.data.ylim ) + All.syms = All.edits.plot(fullData) + plt.draw() + def moveWindowLeft(event): moveVisData(-1,0) + upperButtons.add('West', moveWindowLeft) + def moveWindowRight(event): moveVisData(1,0) + upperButtons.add('East', moveWindowRight); + def moveWindowDown(event): moveVisData(0,-1) + upperButtons.add('South', moveWindowDown) + def moveWindowUp(event): moveVisData(0,1) + upperButtons.add('North', moveWindowUp) + climButtons = Buttons(bottom=1-.0615,left=0.65) + def incrCScale(event): colorScale('+clim') + climButtons.add('Incr', incrCScale) + def incrCScale(event): colorScale(' -clim') + climButtons.add('Decr', incrCScale) + plt.sca(All.ax) + def onClick(event): # Mouse button click + if event.inaxes==All.ax and event.button==1 and event.xdata: + (i,j) = findPointInMesh(fullData.longitude, fullData.latitude, event.xdata, event.ydata) + if not i==None: + (I,J) = findPointInMesh(All.data.longitude, All.data.latitude, event.xdata, event.ydata) + if event.dblclick: + nVal = -99999 + if All.data.height[I+1,J]<0: nVal = max(nVal, All.data.height[I+1,J]) + if All.data.height[I-1,J]<0: nVal = max(nVal, All.data.height[I-1,J]) + if All.data.height[I,J+1]<0: nVal = max(nVal, All.data.height[I,J+1]) + if All.data.height[I,J-1]<0: nVal = max(nVal, All.data.height[I,J-1]) + if nVal==-99999: return + All.edits.add(i,j,nVal) + All.data.height[I,J] = nVal + else: + All.edits.add(i,j) + All.data.height[I,J] = All.edits.get() + All.quadMesh.set_array(All.data.height.ravel()) + All.edits.updatePlot(fullData,All.syms) + plt.draw() + elif event.inaxes==All.ax and event.button==3 and event.xdata: + (i,j) = findPointInMesh(fullData.longitude, fullData.latitude, event.xdata, event.ydata) + if not i==None: + All.edits.delete(i,j) + All.data = fullData.cloneWindow( (All.view.i0,All.view.j0), (All.view.iw,All.view.jw) ) + All.data.applyEdits(fullData, All.edits.ijz) + All.quadMesh.set_array(All.data.height.ravel()) + All.edits.updatePlot(fullData,All.syms) + plt.draw() + elif event.inaxes==All.ax and event.button==2 and event.xdata: zoom(event) # Re-center + plt.gcf().canvas.mpl_connect('button_press_event', onClick) + def zoom(event): # Scroll wheel up/down + if event.button == 'up': scale_factor = 1/1.5 # deal with zoom in + elif event.button == 'down': scale_factor = 1.5 # deal with zoom out + else: scale_factor = 1.0 + new_xlim, new_ylim = newLims( \ + All.ax.get_xlim(), All.ax.get_ylim(), (event.xdata,event.ydata), \ + All.data.xlim, All.data.ylim, scale_factor) + if not new_xlim: return # No changein limits + All.ax.set_xlim(new_xlim[0], new_xlim[1]); All.ax.set_ylim(new_ylim[0], new_ylim[1]) + plt.draw() # force re-draw + plt.gcf().canvas.mpl_connect('scroll_event', zoom) + def statusMesg(x,y): + j,i = findPointInMesh(fullData.longitude, fullData.latitude, x, y) + if not i==None: return 'lon,lat=%.2f,%.2f depth(%i,%i)=%.2f'%(x,y,i,j,fullData.height[j,i]) + else: return 'lon,lat=%.3f,%.3f'%(x,y) + All.ax.format_coord = statusMesg + plt.show() + All.edits.list() + if not outFile: outFile = 'edit_'+fileName + if not outFile==' ': + print 'Creating new file "'+outFile+'"' + # Create new netcdf file + if not fileName==outFile: sh.copyfile(fileName,outFile) + try: rg=Dataset( outFile, 'r+' ); + except: error('There was a problem opening "'+outFile+'".') + rgVar = rg.variables[variable] # handle to the variable + dims = rgVar.dimensions # tuple of dimensions + rgVar[:] = fullData.height[:,:] # Write the data + if All.edits.ijz: + print 'Applying %i edits'%(len(All.edits.ijz)) + if 'nEdits' in rg.dimensions: + numEdits = rg.dimensions['nEdits'] + else: numEdits = rg.createDimension('nEdits', 0)#len(All.edits.ijz)) + if 'iEdit' in rg.variables: iEd = rg.variables['iEdit'] + else: + iEd = rg.createVariable('iEdit','i4',('nEdits',)) + iEd.long_name = 'i-index of edited data' + if 'jEdit' in rg.variables: jEd = rg.variables['jEdit'] + else: + jEd = rg.createVariable('jEdit','i4',('nEdits',)) + jEd.long_name = 'j-index of edited data' + if 'zEdit' in rg.variables: zEd = rg.variables['zEdit'] + else: + zEd = rg.createVariable('zEdit','f4',('nEdits',)) + zEd.long_name = 'Original value of edited data' + zEd.units = rgVar.units + for l,(i,j,z) in enumerate(All.edits.ijz): + iEd[l] = j; jEd[l] = i; zEd[l] = rgVar[i,j]; rgVar[i,j] = z + rg.close() + + +def ice9it(i,j,depth): + # Iterative implementation of "ice 9" + wetMask = 0*depth + (ni,nj) = wetMask.shape + stack = set() + stack.add( (i,j) ) + while stack: + (i,j) = stack.pop() + if wetMask[i,j] or depth[i,j] >= 0: continue + wetMask[i,j] = 1 + if i>0: stack.add( (i-1,j) ) + else: stack.add( (ni-1,j) ) + if i0: stack.add( (i,j-1) ) + if j0: return 1.0 + elif x<0: return -1.0 + else: return 0. + def crossProd(u0,v0,u1,v1): + return sign( u0*v1 - u1*v0 ) + def isPointInConvexPolygon(pX, pY, p): + u0 = pX[0]-pX[-1]; v0 = pY[0]-pY[-1] + u1 = pX[-1] - p[0]; v1 = pY[-1] - p[1] + firstSign = crossProd(u0,v0,u1,v1) + for n in range(len(pX)-1): + u0 = pX[n+1]-pX[n]; v0 = pY[n+1]-pY[n] + u1 = pX[n] - p[0]; v1 = pY[n] - p[1] + if crossProd(u0,v0,u1,v1)*firstSign<0: return False + return True + def recurIJ(mX, mY, p, ij00, ij22): + # Unpack indices + i0 = ij00[0]; i2 = ij22[0]; j0 = ij00[1]; j2 = ij22[1]; + # Test bounding box first (bounding box is larger than polygon) + xmin=min( np.amin(mX[i0,j0:j2]), np.amin(mX[i2,j0:j2]), np.amin(mX[i0:i2,j0]), np.amin(mX[i0:i2,j2]) ) + xmax=max( np.amax(mX[i0,j0:j2]), np.amax(mX[i2,j0:j2]), np.amax(mX[i0:i2,j0]), np.amax(mX[i0:i2,j2]) ) + ymin=min( np.amin(mY[i0,j0:j2]), np.amin(mY[i2,j0:j2]), np.amin(mY[i0:i2,j0]), np.amin(mY[i0:i2,j2]) ) + ymax=max( np.amax(mY[i0,j0:j2]), np.amax(mY[i2,j0:j2]), np.amax(mY[i0:i2,j0]), np.amax(mY[i0:i2,j2]) ) + if p[0]xmax or p[1]ymax: return None, None + if i2>i0+1: + i1=int(0.5*(i0+i2)) + if j2>j0+1: # Four quadrants to test + j1=int(0.5*(j0+j2)) + iAns, jAns = recurIJ(mX, mY, p, (i0,j0), (i1,j1)) + if iAns==None: iAns, jAns = recurIJ(mX, mY, p, (i1,j1), (i2,j2)) + if iAns==None: iAns, jAns = recurIJ(mX, mY, p, (i0,j1), (i1,j2)) + if iAns==None: iAns, jAns = recurIJ(mX, mY, p, (i1,j0), (i2,j1)) + else: # Two halves, east/west, to test + j1=int(0.5*(j0+j2)) + iAns, jAns = recurIJ(mX, mY, p, (i0,j0), (i1,j2)) + if iAns==None: iAns, jAns = recurIJ(mX, mY, p, (i1,j0), (i2,j2)) + else: + if j2>j0+1: # Two halves, north/south, to test + j1=int(0.5*(j0+j2)) + iAns, jAns = recurIJ(mX, mY, p, (i0,j0), (i2,j1)) + if iAns==None: iAns, jAns = recurIJ(mX, mY, p, (i0,j1), (i2,j2)) + else: # Only one cell left (based on the bounding box) + if not isPointInConvexPolygon( \ + [mX[i0,j0],mX[i0+1,j0],mX[i0+1,j0+1],mX[i0,j0+1]], \ + [mY[i0,j0],mY[i0+1,j0],mY[i0+1,j0+1],mY[i0,j0+1]], \ + p): return None, None + return i0,j0 + return iAns, jAns + (ni,nj) = meshX.shape; ij00 = [0, 0]; ij22 = [ni-1, nj-1] + return recurIJ(meshX, meshY, (pointX, pointY), ij00, ij22) + + +# Calculate a new window by scaling the current window, centering +# on the cursor if possible. +def newLims(cur_xlim, cur_ylim, cursor, xlim, ylim, scale_factor): + cur_xrange = (cur_xlim[1] - cur_xlim[0])*.5 + cur_yrange = (cur_ylim[1] - cur_ylim[0])*.5 + xdata = cursor[0]; ydata = cursor[1] + new_xrange = cur_xrange*scale_factor; new_yrange = cur_yrange*scale_factor + xdata = min( max( xdata, xlim[0]+new_xrange ), xlim[1]-new_xrange ) + ydata = min( max( ydata, ylim[0]+new_yrange ), ylim[1]-new_yrange ) + xL = max( xlim[0], xdata - new_xrange ); xR = min( xlim[1], xdata + new_xrange ) + yL = max( ylim[0], ydata - new_yrange ); yR = min( ylim[1], ydata + new_yrange ) + if xL==cur_xlim[0] and xR==cur_xlim[1] and \ + yL==cur_ylim[0] and yR==cur_ylim[1]: return None, None + return (xL, xR), (yL, yR) + + +# Class to handle adding buttons to GUI +class Buttons: + scale = 0.014; space = .01 + def __init__(self, bottom=.015, left=.015): + self.leftEdge = left + self.bottomEdge = bottom + self.height = .05 + self.list = [] + def add(self,label,fn): # fn is callback + width = self.scale*len(label) + np = [ self.leftEdge, self.bottomEdge, width, self.height ] + self.leftEdge = self.leftEdge + width + self.space + button = Button(plt.axes(np),label); button.on_clicked( fn ) + self.list.append( button ) + + +# Class to contain edits +class Edits: + def __init__(self): + self.newDepth = 0 + self.ijz = [] + self.label = None # Handle to text box + def setVal(self, newVal): + self.newDepth = newVal + if self.label: self.label.set_text('New depth = %i'%(self.newDepth)) + def addToVal(self, increment): + self.newDepth += increment + if self.label: self.label.set_text('New depth = %i'%(self.newDepth)) + plt.draw() + def get(self): return self.newDepth + def delete(self,i,j): + for I,J,D in self.ijz: + if (i,j)==(I,J): self.ijz.remove((I,J,D)) + def add(self,i,j,nVal=None): + self.delete(i,j) + if not nVal==None: self.ijz.append( (i,j,nVal) ) + else: self.ijz.append( (i,j,self.newDepth) ) + def pop(self): + if self.ijz: self.ijz.pop() + def list(self): + for a in self.ijz: print a + def plot(self,topo): + x = []; y= [] + for i,j,z in self.ijz: + tx,ty = topo.cellCoord(j,i) + if tx: + x.append(tx); y.append(ty) + if x: + h, = plt.plot(x, y, 'ro', hold=True) + return h + else: return None + def updatePlot(self,topo,h): + x = []; y= [] + for i,j,z in self.ijz: + tx,ty = topo.cellCoord(j,i) + if tx: + x.append(tx); y.append(ty) + if x: + h.set_xdata(x); h.set_ydata(y) + + +# Class to contain data +class Topography: + def __init__(self, lon, lat, height): + self.longitude = lon + self.latitude = lat + self.height = np.copy( height ) + self.xlim = ( np.min(lon), np.max(lon) ) + self.ylim = ( np.min(lat), np.max(lat) ) + def cloneWindow(self, (i0,j0), (iw,jw)): + i1 = i0 + iw; j1 = j0 + jw + return Topography( self.longitude[j0:j1+1,i0:i1+1], \ + self.latitude[j0:j1+1,i0:i1+1], \ + self.height[j0:j1,i0:i1] ) + def applyEdits(self, origData, ijz): + for i,j,z in ijz: + x = (origData.longitude[i,j] + origData.longitude[i+1,j+1])/2. + y = (origData.latitude[i,j] + origData.latitude[i+1,j+1])/2. + (I,J) = findPointInMesh(self.longitude, self.latitude, x, y) + if not I==None: self.height[I,J] = z + def cellCoord(self,j,i): + #ni, nj = self.longitude.shape + #if i<0 or j<0 or i>=ni-1 or j>=nj-1: return None, None + x = (self.longitude[i,j] + self.longitude[i+1,j+1])/2. + y = (self.latitude[i,j] + self.latitude[i+1,j+1])/2. + return x,y + +# CLass to record the editing window +class View: + def __init__(self, ni, nj): + self.ni = ni + self.nj = nj + self.i0 = 0 + self.j0 = 0 + self.iw = min(512,ni) + self.jw = min(512,nj) + def move(self, di, dj): + self.i0 = min( max(0, self.i0+int(di*self.iw/2.)), self.ni-self.iw) + self.j0 = min( max(0, self.j0+int(dj*self.jw/2.)), self.nj-self.jw) + def geti(self): return (self.i0,self.i0+self.iw) + def getj(self): return (self.j0,self.j0+self.jw) +# Invoke main() +if __name__ == '__main__': main() + diff --git a/tools/python/FLOR2gridGeneration/generateZinterfaces.py b/tools/python/FLOR2gridGeneration/generateZinterfaces.py new file mode 100644 index 0000000000..0bb65d23b2 --- /dev/null +++ b/tools/python/FLOR2gridGeneration/generateZinterfaces.py @@ -0,0 +1,13 @@ +import netCDF4 +import numpy + +dz=netCDF4.Dataset('../../../examples/ocean_SIS/MOM6z_SIS_025/INPUT/vgrid_cm4.nc').variables['dz'][:] +zi=numpy.zeros(76) +zi[1:]=numpy.cumsum(-dz) +print zi + +Zbot = -netCDF4.Dataset('ocean_topog.nc').variables['depth'][:] + +Zi =numpy.zeros((76,1080,1440)) +for k in range(0,76): + Zi[k,:,:] = numpy.maximum( Zbot, zi[k] ) diff --git a/tools/python/FLOR2gridGeneration/ice9.py b/tools/python/FLOR2gridGeneration/ice9.py new file mode 100755 index 0000000000..f801926132 --- /dev/null +++ b/tools/python/FLOR2gridGeneration/ice9.py @@ -0,0 +1,150 @@ +#!/usr/bin/env python + +def error(msg,code=9): + print 'Error: ' + msg + exit(code) + + +# Imports +try: import argparse +except: error('This version of python is not new enough. python 2.7 or newer is required.') +try: from netCDF4 import Dataset +except: error('Unable to import netCDF4 module. Check your PYTHONPATH.\n' + +'Perhaps try:\n module load python_netcdf4') +try: import numpy as np +except: error('Unable to import numpy module. Check your PYTHONPATH.\n' + +'Perhaps try:\n module load python_numpy') +import shutil as sh + + +def main(): + + # Command line arguments + parser = argparse.ArgumentParser(description= + 'Applies an "ice 9" algorithm to remove detached water from the topography. Also sets land elevation to 0.', + epilog='Written by A.Adcroft, 2013.') + parser.add_argument('filename', type=str, + help='netcdf file to read.') + parser.add_argument('variable', type=str, + nargs='?', default='depth', + help='Name of variable to plot.') + parser.add_argument('--output', type=str, + nargs='?', default=' ', + help='name of the output file. If not specified, "iced_" is prepended to the name of the input file.') + parser.add_argument('--shallow', type=float, + help='The "shallow" value (+ve, default 1.) to use when calculating the modified_mask. Wet points shallower than this are indicated with mask value of 2.') + parser.add_argument('--analyze', action='store_true', + help='Report on impact of round shallow values to zero') + + optCmdLineArgs = parser.parse_args() + + nFileName = optCmdLineArgs.output + if nFileName == ' ': nFileName = 'iced_'+optCmdLineArgs.filename + shallow = 1 + if not optCmdLineArgs.shallow==None: shallow = optCmdLineArgs.shallow + applyIce9(optCmdLineArgs.filename, nFileName, optCmdLineArgs.variable, + 0., -40., shallow, optCmdLineArgs.analyze) + +def applyIce9(fileName, nFileName, variable, x0, y0, shallow, analyze): + + iRg = Dataset( fileName, 'r' ); + iDepth = iRg.variables[variable] # handle to the variable + depth = iDepth[:] # Read the data + print 'Range of input depths: min=',np.amin(depth),'max=',np.amax(depth) + + # Open new netcdf file + if fileName==nFileName: error('Output file must be different from the input file') + try: rg=Dataset( nFileName, 'w', format='NETCDF3_CLASSIC' ); + except: error('There was a problem opening "'+nFileName+'".') + + (ny, nx) = depth.shape + rg.createDimension('nx',nx) + rg.createDimension('ny',ny) + rgDepth = rg.createVariable('depth','f4',('ny','nx')) + rgDepth.units = iDepth.units + rgDepth.standard_name = 'depth below geoid' + rgDepth.description = 'Non-negative nominal thickness of the ocean at cell centers' + rg.createDimension('ntiles',1) + + # A mask based solely on value of depth + notLand = np.where( depth<0, 1, 0) + lons=iRg.variables['longitude'][:] + lats=iRg.variables['latitude'][:] + + iind=np.where(lons>-40.)[0][0] + jind=np.where(lats>30.)[0][0] + print jind,iind + print lons[iind],lats[jind] + notLand = ice9it(iind,jind,depth) + + rgWet = rg.createVariable('wet','f4',('ny','nx')) + rgWet.long_name = 'Wet/dry mask' + rgWet.description = 'Values: 1=Ocean, 0=Land' + rgWet[:] = notLand # + (1-notLand)*0.3*np.where( depth<0, 1, 0) + + rgDepth[:] = -depth*notLand # Change sign here. Until this point depth has actually been elevation. + + if 'std' in iRg.variables: # Need to copy over list of edits + rgH2 = rg.createVariable('h2','f4',('ny','nx')) + rgH2.units = iDepth.units+'^2' + rgH2.standard_name = 'Variance of sub-grid scale topography' + rgH2[:] = iRg.variables['std'][:]**2 + + if 'zEdit' in iRg.variables: # Need to copy over list of edits + rgMod = rg.createVariable('modified_mask','f4',('ny','nx')) + rgMod.long_name = 'Modified mask' + rgMod.description = 'Values: 1=Ocean, 0=Land, -1 indicates water points removed by "Ice 9" algorithm. 2 indicates wet points that are shallower than 1m deep.' + rgMod[:] = notLand - (1-notLand)*np.where( depth<0, 1, 0) + np.where( (notLand>0) & (depth>-shallow), 1, 0) + n = len(iRg.variables['zEdit']) + nEd = rg.createDimension('nEdits',n) + iEd = rg.createVariable('iEdit','i4',('nEdits',)) + iEd.long_name = 'i-index of edited data' + jEd = rg.createVariable('jEdit','i4',('nEdits',)) + jEd.long_name = 'j-index of edited data' + zEd = rg.createVariable('zEdit','f4',('nEdits',)) + zEd.long_name = 'Original value of height data' + zEd.units = iDepth.units + iEd[:] = iRg.variables['iEdit'][:] + jEd[:] = iRg.variables['jEdit'][:] + zEd[:] = iRg.variables['zEdit'][:] + + rg.close() + print 'File "%s" written.'%(nFileName) + + # Analyze the shallow points + if analyze: + print 'Analyzing...' + numNotLand = np.count_nonzero(notLand) + print '# of wet points after Ice 9 = %i'%(numNotLand) + newDepth = depth*np.where(depth*notLand <= -shallow, 1, 0) + numNewWet = np.count_nonzero(newDepth) + print '# of wet points deeper than %f = %i'%(-shallow,numNewWet) + print '%i - %i = %i fewer points left'%(numNotLand,numNewWet,numNotLand-numNewWet) + newWet = ice9it(600,270,newDepth) + numNewDeep = np.count_nonzero(newWet) + print '# of wet deep points after Ice 9 = %i'%(numNewDeep) + print '%i - %i = %i fewer points left'%(numNewWet,numNewDeep,numNewWet-numNewDeep) + + +def ice9it(i,j,depth): + # Iterative implementation of "ice 9" + wetMask = 0*depth + (nj,ni) = wetMask.shape + stack = set() + stack.add( (j,i) ) + while stack: + (j,i) = stack.pop() + if wetMask[j,i] or depth[j,i] >= 0: continue + wetMask[j,i] = 1 + if i>0: stack.add( (j,i-1) ) + else: stack.add( (j,ni-1) ) + if i0: stack.add( (j-1,i) ) + if j0.]=1. +OM.SALT=np.ma.masked_where(OM.SALT<0.,OM.SALT) +OM.fill_interior('SALT',smooth=True,num_pass=10000) +OM.mask_where('SALT','grid.D<=0.') +OM.rename_field('SALT','salt') +OM.var_dict['salt']['xax_data']=grid.x_T[0,:] +OM.var_dict['salt']['yax_data']=grid.y_T[:,grid.im/4] +OM.write_nc('salt_restore.nc',fields=['salt']) diff --git a/tools/python/FLOR2gridGeneration/interpTides.py b/tools/python/FLOR2gridGeneration/interpTides.py new file mode 100755 index 0000000000..8a17f6985f --- /dev/null +++ b/tools/python/FLOR2gridGeneration/interpTides.py @@ -0,0 +1,125 @@ +#!/usr/bin/env python + +from midas.rectgrid import * +import netCDF4 as nc +import numpy as np + +f=nc.Dataset('DATA/grid_tpxo7_atlas.nc') + +lon_u=f.variables['lon_u'][:].T +lat_u=f.variables['lat_u'][:].T +lon_v=f.variables['lon_v'][:].T +lat_v=f.variables['lat_v'][:].T + +grid_u=quadmesh(lon=lon_u,lat=lat_u,cyclic=True) +grid_v=quadmesh(lon=lon_v,lat=lat_v,cyclic=True) + +Su=state(grid=grid_u) +Sv=state(grid=grid_v) + +f=nc.Dataset('DATA/u_tpxo7_atlas.nc') + +ua=np.zeros((1,8,721,1440)) +va=np.zeros((1,8,721,1440)) + +for i in np.arange(0,8): + tmp=f.variables['ua'][i,:] + ua[0,i,:]=tmp.T + tmp=f.variables['va'][i,:] + va[0,i,:]=tmp.T + +ua[ua==0.0]=-1.e20 +va[va==0.0]=-1.e20 +ua[:,:,-1,:] = ua[:,:,-2,:] # Work around for missing data at N-pole +va[:,:,-1,:] = va[:,:,-2,:] # Work around for missing data at N-pole +ua=np.ma.masked_where(ua==-1.e20,ua) +va=np.ma.masked_where(va==-1.e20,va) + + +vdict_u={} +vdict_v={} + +vdict_u['X']=f.variables['ua'].dimensions[1] +vdict_u['Y']=f.variables['ua'].dimensions[2] +vdict_u['Z']=f.variables['ua'].dimensions[0][0:8] +vdict_u['T']=None +vdict_u['units']='cm s-1' +vdict_u['path']='DATA/u_tpxo7_atlas.nc' +vdict_u['Zdir']=1 +vdict_u['Ztype']='Fixed' +vdict_u['Zb']=None +vdict_u['z']=np.arange(0,8) +vdict_u['z_interfaces']=None +vdict_u['zunits']='none' +vdict_u['zax_data']=np.arange(0,8) +vdict_u['xax_data']=grid_u.lonh +vdict_u['yax_data']=grid_u.lath +vdict_u['xunits']='degrees_east' +vdict_u['yunits']='degrees_north' +vdict_u['zunits']='component' +vdict_u['_FillValue']=-1.e20 +vdict_u['missing_value']=-1.e20 +vdict_u['masked']=True +vdict_v['X']=f.variables['va'].dimensions[1] +vdict_v['Y']=f.variables['va'].dimensions[2] +vdict_v['Z']=f.variables['va'].dimensions[0][0:8] +vdict_v['T']=None +vdict_v['units']='cm s-1' +vdict_v['path']='DATA/u_tpxo7_atlas.nc' +vdict_v['Zdir']=1 +vdict_v['Ztype']='Fixed' +vdict_v['Zb']=None +vdict_v['z']=np.arange(0,8) +vdict_v['z_interfaces']=None +vdict_v['zunits']='none' +vdict_v['zax_data']=np.arange(0,8) +vdict_v['xax_data']=grid_v.lonh +vdict_v['yax_data']=grid_v.lath +vdict_v['xunits']='degrees_east' +vdict_v['yunits']='degrees_north' +vdict_v['zunits']='component' +vdict_v['_FillValue']=-1.e20 +vdict_v['missing_value']=-1.e20 +vdict_v['masked']=True + +Su.add_field_from_array(ua,'ua',var_dict=vdict_u) +Sv.add_field_from_array(va,'va',var_dict=vdict_v) + +grid=quadmesh(lon=lon_v,lat=lat_u,cyclic=True) +grid.wet=np.ones((grid.jm,grid.im)) + +S=Su.horiz_interp('ua',target=grid,method='bilinear') +S=Sv.horiz_interp('va',target=grid,method='bilinear',PrevState=S) + +u2mod = (S.ua**2.0 + S.va**2.0) +umod=np.sum(u2mod,axis=1)**0.5 +umod=umod[:,np.newaxis,:] +umod = 1.e-2*umod + +vdict=S.var_dict['ua'].copy() +vdict['units']='m s-1' +vdict['Z'] = None + +S.add_field_from_array(umod,'umod',var_dict=vdict) + +sgrid=supergrid(file='ocean_hgrid.nc',cyclic_x=True,tripolar_n=True) +output_grid = quadmesh(supergrid=sgrid,cyclic=True) +output_grid.D=nc.Dataset('topog.nc').variables['depth'][:] +output_grid.wet = np.zeros(output_grid.D.shape) +output_grid.wet[output_grid.D>0.]=1. + +S.fill_interior('umod') + +print S.umod.shape + +T=S.horiz_interp('umod',target=output_grid,method='bilinear') + +T.fill_interior('umod') + +T.var_dict['umod']['yax_data'] = output_grid.y_T[:,output_grid.im/4] + +#T.umod = np.ma.filled(T.umod,0.0) + +T.rename_field('umod','tideamp') + +T.write_nc('tidal_amplitude.nc',['tideamp']) diff --git a/tools/python/FLOR2gridGeneration/interpWOA05.py b/tools/python/FLOR2gridGeneration/interpWOA05.py new file mode 100755 index 0000000000..dde875af3a --- /dev/null +++ b/tools/python/FLOR2gridGeneration/interpWOA05.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python + +from midas.rectgrid import * +import netCDF4 as nc +import numpy as np + +sgrid=supergrid(file='ocean_hgrid.nc',cyclic_x=True,tripolar_n=True) +grid=quadmesh(supergrid=sgrid) +grid.lath=grid.y_T[:,grid.im/4] +grid.latq=grid.y_T_bounds[:,grid.im/4] +grid.D=nc.Dataset('topog.nc').variables['depth'][:] +grid.wet=np.zeros(grid.D.shape) +grid.wet[grid.D>0.]=1 +S=state(grid=grid) + +# Model vertical grid +#dz=nc.Dataset('../../../examples/ocean_SIS/OM4_025/INPUT/vgrid_75_2m.nc').variables['dz'][:] +#nk = dz.shape[0] +#zi=np.zeros(nk+1) +#zi[1:]=np.cumsum(-dz) +# Analysis vertical grid +zi=-nc.Dataset('../../../ice_ocean_SIS/OM4_025/INPUT/vgrid_75_2m.nc').variables['zw'][:] +nk=zi.shape[0]-1 + +zb =np.zeros((nk+1,S.grid.jm,S.grid.im)) +for k in range(0,nk+1): + zb[k,:]=zi[k] + zb[k,:,:] = np.maximum( -S.grid.D, zb[k] ) + +for n in np.arange(0,12): + O=state('/archive/gold/datasets/obs/WOA05_pottemp_salt.nc',fields=['SALT','PTEMP'],time_indices=np.arange(n,n+1),default_calendar='noleap',z_orientation=-1) + O.grid.cyclic_x=True + O.rename_field('PTEMP','ptemp') + O.rename_field('SALT','salt') + OM=O.horiz_interp('salt',target=S.grid,method='bilinear') + OM=O.horiz_interp('ptemp',target=S.grid,method='bilinear',PrevState=OM) + OM.adjust_thickness('ptemp') + OM.adjust_thickness('salt') + OM.fill_interior('salt',smooth=True,num_pass=10000) + OM.fill_interior('ptemp',smooth=True,num_pass=10000) + + OM.remap_ALE(fields=['ptemp','salt'],z_bounds=zb,zbax_data=-zi,method='ppm_h4',bndy_extrapolation=False) + OM.rename_field('ptemp_remap','ptemp') + OM.rename_field('salt_remap','salt') + OM.mask_where('ptemp','grid.wet==0.') + OM.mask_where('salt','grid.wet==0.') + OM.ptemp=np.ma.masked_where(OM.var_dict['ptemp']['dz'][np.newaxis,:]<1.e-2, OM.ptemp) + OM.salt=np.ma.masked_where(OM.var_dict['ptemp']['dz'][np.newaxis,:]<1.e-2, OM.salt) + + if n==0: + OM.write_nc('WOA05_ptemp_salt_monthly.nc',['ptemp','salt'],append=False,write_interface_positions=True) + else: + OM.write_nc('WOA05_ptemp_salt_monthly.nc',['ptemp','salt'],append=True,write_interface_positions=True) diff --git a/tools/python/FLOR2gridGeneration/make_basin_mask.py b/tools/python/FLOR2gridGeneration/make_basin_mask.py new file mode 100755 index 0000000000..b73739d352 --- /dev/null +++ b/tools/python/FLOR2gridGeneration/make_basin_mask.py @@ -0,0 +1,198 @@ +#!/usr/bin/env python + +from midas.rectgrid import * +from midas.rectgrid_gen import * +import netCDF4 +import numpy + +def ice9it(i, j, depth, minD=0.): + """ + Recursive implementation of "ice 9". + Returns 1 where depth>minD and is connected to depth[j,i], 0 otherwise. + """ + wetMask = 0*depth + + (nj,ni) = wetMask.shape + stack = set() + stack.add( (j,i) ) + while stack: + (j,i) = stack.pop() + if wetMask[j,i] or depth[j,i] <= minD: continue + wetMask[j,i] = 1 + + if i>0: stack.add( (j,i-1) ) + else: stack.add( (j,ni-1) ) # Periodic beyond i=0 + + if i0: stack.add((j-1,i)) + + if j=0] = 1; Y[Y<=0] = 0 + return Y + +# Rewrite +print 'Reading grid ...', +x = netCDF4.Dataset('ocean_hgrid.nc').variables['x'][1::2,1::2] # Cell centers +y = netCDF4.Dataset('ocean_hgrid.nc').variables['y'][1::2,1::2] # Cell centers +print 'reading topography ...', +depth = netCDF4.Dataset('topog.nc').variables['depth'][:] +print 'done.' + +print 'Generating global wet mask ...', +wet = ice9(x, y, depth, (0,-35)) # All ocean points seeded from South Atlantic +print 'done.' + +code = 0*wet + +print 'Finding Cape of Good Hope ...', +tmp = 1 - wet; tmp[x<-30] = 0 +tmp = ice9(x, y, tmp, (20,-30.)) +yCGH = (tmp*y).min() +print 'done.', yCGH + +print 'Finding Melbourne ...', +tmp = 1 - wet; tmp[x>-180] = 0 +tmp = ice9(x, y, tmp, (-220,-25.)) +yMel = (tmp*y).min() +print 'done.', yMel + +print 'Processing Persian Gulf ...' +tmp = wet*( 1-southOf(x, y, (55.,23.), (56.5,27.)) ) +tmp = ice9(x, y, tmp, (53.,25.)) +code[tmp>0] = 11 +wet = wet - tmp # Removed named points + +print 'Processing Red Sea ...' +tmp = wet*( 1-southOf(x, y, (40.,11.), (45.,13.)) ) +tmp = ice9(x, y, tmp, (40.,18.)) +code[tmp>0] = 10 +wet = wet - tmp # Removed named points + +print 'Processing Black Sea ...' +tmp = wet*( 1-southOf(x, y, (26.,42.), (32.,40.)) ) +tmp = ice9(x, y, tmp, (32.,43.)) +code[tmp>0] = 7 +wet = wet - tmp # Removed named points + +print 'Processing Mediterranean ...' +tmp = wet*( southOf(x, y, (-5.7,35.5), (-5.7,36.5)) ) +tmp = ice9(x, y, tmp, (4.,38.)) +code[tmp>0] = 6 +wet = wet - tmp # Removed named points + +print 'Processing Baltic ...' +tmp = wet*( southOf(x, y, (8.6,56.), (8.6,60.)) ) +tmp = ice9(x, y, tmp, (10.,58.)) +code[tmp>0] = 9 +wet = wet - tmp # Removed named points + +print 'Processing Hudson Bay ...' +tmp = wet*( + ( 1-(1-southOf(x, y, (-95.,66.), (-83.5,67.5))) + *(1-southOf(x, y, (-83.5,67.5), (-84.,71.))) + )*( 1-southOf(x, y, (-70.,58.), (-70.,65.)) ) ) +tmp = ice9(x, y, tmp, (-85.,60.)) +code[tmp>0] = 8 +wet = wet - tmp # Removed named points + +print 'Processing Arctic ...' +tmp = wet*( + (1-southOf(x, y, (-171.,66.), (-166.,65.5))) * (1-southOf(x, y, (-64.,66.4), (-50.,68.5))) # Lab Sea + + southOf(x, y, (-50.,0.), (-50.,90.)) * (1- southOf(x, y, (0.,65.5), (360.,65.5)) ) # Denmark Strait + + southOf(x, y, (-18.,0.), (-18.,65.)) * (1- southOf(x, y, (0.,64.9), (360.,64.9)) ) # Iceland-Sweden + + southOf(x, y, (20.,0.), (20.,90.)) # Barents Sea + + (1-southOf(x, y, (-280.,55.), (-200.,65.))) + ) +tmp = ice9(x, y, tmp, (0.,85.)) +code[tmp>0] = 4 +wet = wet - tmp # Removed named points + +print 'Processing Pacific ...' +tmp = wet*( (1-southOf(x, y, (0.,yMel), (360.,yMel))) + -southOf(x, y, (-257,1), (-257,0))*southOf(x, y, (0,3), (1,3)) + -southOf(x, y, (-254.25,1), (-254.25,0))*southOf(x, y, (0,-5), (1,-5)) + -southOf(x, y, (-243.7,1), (-243.7,0))*southOf(x, y, (0,-8.4), (1,-8.4)) + -southOf(x, y, (-234.5,1), (-234.5,0))*southOf(x, y, (0,-8.9), (1,-8.9)) + ) +tmp = ice9(x, y, tmp, (-150.,0.)) +code[tmp>0] = 3 +wet = wet - tmp # Removed named points + +print 'Processing Atlantic ...' +tmp = wet*(1-southOf(x, y, (0.,yCGH), (360.,yCGH))) +tmp = ice9(x, y, tmp, (-20.,0.)) +code[tmp>0] = 2 +wet = wet - tmp # Removed named points + +print 'Processing Indian ...' +tmp = wet*(1-southOf(x, y, (0.,yCGH), (360.,yCGH))) +tmp = ice9(x, y, tmp, (55.,0.)) +code[tmp>0] = 5 +wet = wet - tmp # Removed named points + +print 'Processing Southern Ocean ...' +tmp = ice9(x, y, wet, (0.,-55.)) +code[tmp>0] = 1 +wet = wet - tmp # Removed named points + +code[wet>0] = -9 +(j,i) = numpy.unravel_index( wet.argmax(), x.shape) +if j: + print 'There are leftover points unassigned to a basin code' + while j: + print x[j,i],y[j,i],[j,i] + wet[j,i]=0 + (j,i) = numpy.unravel_index( wet.argmax(), x.shape) +else: print 'All points assigned a basin code' + +sgrid=supergrid(file='ocean_hgrid.nc',cyclic_x=True,tripolar_n=True) +grid=quadmesh(supergrid=sgrid) +grid.D=netCDF4.Dataset('topog.nc').variables['depth'][:] +grid.wet=numpy.zeros(grid.D.shape) +grid.wet[grid.D>0.]=1.0 +grid.lath=grid.y_T[:,grid.im/4] # should not be needed +grid.latq=grid.y_T_bounds[:,grid.im/4+1] # ditto + +mask=code + +S=state(grid=grid) +var_dict={} +var_dict['X']='Longitude' +var_dict['xax_data']= grid.lonh +var_dict['xunits']= 'degrees_E' +var_dict['Y']='Latitude' +var_dict['yax_data']= grid.lath +var_dict['yunits']= 'degrees_N' +var_dict['Z']=None +var_dict['T']=None +var_dict['_FillValue']=None +var_dict['missing_value']=None +var_dict['flag_values']='1,2,3,4,5,6,7,8,9,10,11' +var_dict['flag_meanings']='1:Southern Ocean, 2:Atlantic Ocean, 3:Pacific Ocean, 4:Arctic Ocean, 5:Indian Ocean, 6:Mediterranean Sea, 7:Black Sea, 8:Hudson Bay, 9:Baltic Sea, 10:Red Sea, 11:Persian Gulf' + +S.add_field_from_array(mask,'basin',var_dict=var_dict) + +S.write_nc('basin_codes.nc',['basin']) diff --git a/tools/python/FLOR2gridGeneration/md5sums.txt b/tools/python/FLOR2gridGeneration/md5sums.txt new file mode 100644 index 0000000000..c7c1db63ea --- /dev/null +++ b/tools/python/FLOR2gridGeneration/md5sums.txt @@ -0,0 +1,20 @@ +Grids +cf5d421c37ca5c8049de37db44278c8d ocean_hgrid.nc +8184fe588dc81719db67d6c26b88d137 sgridA.nc +3d61fd0aec0cb55c4e11fe366fe064ef sgridB.nc + +Topography +0cc44897b024b9e28c2cf57024f6faa1 basin_codes.nc +84e9cfa4a935de293ff8703f2500de8c edit_topog.nc +56c36a41f19a6815f49e656034224960 interpolated_topog.nc +2b0984424978a6ded51bc385fd6390c1 topog.nc +a6e37af12e25a6f44d8a3392d6d2cbdc GEBCO_08_v2.nc + +Data +132ec022f942530fd5230db03a60d481 salt_restore.nc +73b03b658536477898ac7d3877a888fd seawifs_1998-2006_smoothed_2X.nc +360c65405cea4d0c0dc59f875b56f9ad tidal_amplitude.nc + +Obs +6f44eb18699f596d8f9e4c9ec2eb7a6d WOA05_ptemp_salt_annual.nc +30386852bb93746b0328583a42a5cc79 WOA05_ptemp_salt_monthly.nc diff --git a/tools/python/FLOR2gridGeneration/merge_grids.py b/tools/python/FLOR2gridGeneration/merge_grids.py new file mode 100755 index 0000000000..2c81fdadd8 --- /dev/null +++ b/tools/python/FLOR2gridGeneration/merge_grids.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python + +import netCDF4 as nc +import numpy as np + +f=nc.Dataset('sgridA.nc') +g=nc.Dataset('sgridB.nc') +y1=f.variables['y'][:] +y2=g.variables['y'][:] +y=np.concatenate((y1,y2[1:,:]),axis=0) + +dy1=f.variables['dy'][:] +dy2=g.variables['dy'][:] +dy=np.concatenate((dy1,dy2),axis=0) + +x1=f.variables['x'][:] +x2=g.variables['x'][:] +x=np.concatenate((x1,x2[1:,:]),axis=0) + +dx1=f.variables['dx'][:] +dx2=g.variables['dx'][:] +dx=np.concatenate((dx1,dx2[1:,:]),axis=0) + + +area1=f.variables['area'][:] +area2=g.variables['area'][:] +area=np.concatenate((area1,area2),axis=0) + +angle_dx1=f.variables['angle_dx'][:,:] +angle_dx2=g.variables['angle_dx'][:-1,:] +angle_dx=np.concatenate((angle_dx1,angle_dx2),axis=0) + +fout=nc.Dataset('ocean_hgrid.nc','w',format='NETCDF3_CLASSIC') + +ny=area.shape[0]; nx = area.shape[1] +nyp=ny+1; nxp=nx+1 + +print 'ny,nx= ',ny,nx + +nyp=fout.createDimension('nyp',nyp) +nxp=fout.createDimension('nxp',nxp) +ny=fout.createDimension('ny',ny) +nx=fout.createDimension('nx',nx) +string=fout.createDimension('string',255) + +tile=fout.createVariable('tile','S1',('string')) +yv=fout.createVariable('y','f8',('nyp','nxp')) +xv=fout.createVariable('x','f8',('nyp','nxp')) +yv.units='degrees' +xv.units='degrees' +yv[:]=y +xv[:]=x + +tile[0:4]='tile1' +dyv=fout.createVariable('dy','f8',('ny','nxp')) +dyv.units='meters' +dyv[:]=dy +dxv=fout.createVariable('dx','f8',('nyp','nx')) +dxv.units='meters' +dxv[:]=dx +areav=fout.createVariable('area','f8',('ny','nx')) +areav.units='m2' +areav[:]=area +anglev=fout.createVariable('angle_dx','f8',('nyp','nxp')) +anglev.units='degrees' +anglev[:]=angle_dx + +fout.sync() +fout.close()