-
Notifications
You must be signed in to change notification settings - Fork 148
Open Boundary Conditions
The boundaries pass from q-point to q-point. Each boundary segment is specified separately in the MOM_input file as shown below. The boundary conditions for the southern and western sides only work in symmetric mode.
The boundaries can be either specified or computed based on a radiation-type condition, possibly with nudging as well. There is land mask outside a specified boundary, ocean outside a radiation boundary.
There was a "Flather" option for each of the four sides of the domain, which applied boundary conditions to the flow normal to the corresponding side. It applied these conditions to both the baroclinic and barotropic velocities, Orlanski and Flather, respectively. It is no longer available, however picking the "LEGACY" option is meant to reproduce the old answers.
Segments are a means of specifying pieces of open boundary, each being aligned with the i- or j-axis. We don't promise to support convex interior corners such as would be required by converting the peninsula between segment 1 and segment 2 in the figure to an open boundary.
We start by setting the number of segments:
- OBC_NUMBER_OF_SEGMENTS = 2
For each segment, there's a range of i or j at a fixed j or i. Set the fixed value first, then the range. The index order for the range will give the direction, going around the domain in a counter-clockwise direction.
Once the location of the boundary is set, determine its type. Up to five descriptive words can be used. The available list is subject to change...
- OBC_SEGMENT_001 = "I=0,J=23:1,SIMPLE"
- OBC_SEGMENT_002 = "J=45,I=5:15,FLATHER, OBLIQUE, NUDGED"
For the I,J ranges, can use a shorthand of "N" for the northernmost or easternmost value instead of spelling out the numeric value:
- "I=N,J=5:N-2" (part of eastern boundary)
- "I=0,J=N:0" (entire western boundary)
- "I=N-2,J=N-10:N-2" (eastern boundary condition 2 rows in)
- Maybe even shorthand for the entire boundary being open? "IJ=N" (not yet)
For the whole boundary to be open, including corners, one should set:
- OBC_NUMBER_OF_SEGMENTS = 4
- OBC_SEGMENT_001 = "J=N,I=N:0,FLATHER"
- OBC_SEGMENT_002 = "J=0,I=0:N,FLATHER"
- OBC_SEGMENT_003 = "I=N,J=0:N,FLATHER"
- OBC_SEGMENT_004 = "I=0,J=N:0,FLATHER"
The order should not matter.
Note that FLATHER and NUDGED imply the need for boundary values, barotropic and baroclinic, respectively (there is also barotropic ORLANSKI+NUDGED which isn't quite the same as FLATHER). These can either come from an internal configuration using the "user" directory, from a set value in MOM_input, or from an external file.
OBCs on tangential velocities are applied via choices to the vorticity and strain boundary condition. These options are available globally. Set at most one of these:
- OBC_ZERO_VORTICITY = True
- OBC_FREESLIP_VORTICITY = True
Also, at most one of these:
- OBC_ZERO_STRAIN = True
- OBC_FREESLIP_STRAIN = True
When using biharmonic viscosity, you probably also want this:
- OBC_ZERO_BIHARMONIC = True
The gradient of kinetic energy is also set to zero across open boundaries.
User-specified fields for open boundaries can be set via OBC_USER_CONFIG in MOM_input, DOME, for instance. This is currently the only way to provide the cross-boundary transport required for SPECIFIED boundaries.
- OBC_SEGMENT_001_DATA = “TEMP=file:xyz_%y.nc(theta),SALT=...”
- OBC_SEGMENT_002_DATA = “SALT=IC”
- or OBC_SEGMENT_002_DATA = “TEMP=DOME”
- OBC_SEGMENT_003_DATA = "U=value:0.0,V=value:0.0,SSH=value:0.0
For the first example, the value in parentheses is the name of the variable in the file.
Right now, values in MOM_input have to be in the order shown in the fourth line, U then V then SSH (T and S for later).
For providing data, one should know that open boundaries are internally extended by one on each end to allow for open corner points. We're trying to understand and get rid of this need...