Skip to content

OBC Development Notes

Kate Hedstrom edited this page Dec 5, 2016 · 4 revisions

This page is a placeholder for documention on the rapidly evolving MOM6 open boundary routines

The initial implementation in CCS1 will use the FLATHER option which relaxes SSH and BT normal transports. External data are needed for these two fields. Full-column velocity profiles are provided by the output from brushcutter. External fields associated with segment (n) are stored in

OBC%OBC_segment_number(n)%field(:)

which is an OBC_segment_data_type structure.

MOM_barotropic:set_up_BT_OBC:

Doesn't work with wide halos.

Called before btstep loop

Allocates data domain arrays for external mode phase velocity (BT_OBC%Cg_u,BT_OBC%Cg_v), outer column thickness, transport, ubar and SSH (BT_OBC%H_u,uhbt,ubt_outer,eta_outer_u) .

If OBC%specified_u_BCs_exist_globally,

calculate BT_OBC%uhbt from OBC%uh
loop through and check OBC%OBC_segment_u /= OBC_NONE. If true,
  if OBC%OBC_segment_u(i,j)%specified, 
     calculate BT_OBC%ubt_outer from BT_OBC%uhbt 
  else,
     calculate BT_OBC%Cg_u from bathyT
     calculate BT_OBC%H_u from eta (%H_u == eta_outer_u ??)
  BT_OBC%ubt_outer = OBC%ubt_outer
  BT_OBC%eta_outer_u = OBC%eta_outer_u

Within btstep loop,

If apply_u_OBCs == T,

save transports (ubt_prev, uhbt_prev, ubt_sum_prev, uhbt_sum_prev, ubt_wtd_prev)

Overwrite transports at OBCs after calculating accelerations

call apply_velocity_OBCs based on current state (using Flather, radiation, oblique of legacy options)

Update transports on OBC locations using updated ubt, uhbt from apply_velocity_OBCs

Proposed Changes for Segments

Before the btstep loop, no need to call set_up_BT_OBC, segment data including BT velocities and transports have already been updated from a previous call to update_OBC_segment_data from MOM_dynamic_split_RK2:step_MOM_dyn_split_RK2.

New subroutine apply_velocity_OBC_segments with the same arguments as apply_velocity_OBCs, but without BT_OBC.

Use OBC%OBC_segment_number(:) arrays to store auxiliary data (Cg_u,H_u,...)


Options we need to support

  • OBC segments with no external values needed of any kind (pure radiation or gradient, could try circle_obcs this way - answers would change).
  • OBC segments with values in user file (DOME, Supercritical, Tidal_bay).
  • OBC segments with external values from strings in MOM_input (circle_obcs).
  • OBC segments with values from external file (CCS1). Note that these could be initialization only or needing to be updated. How do we set that switch?
  • OBC segments with external values plus tides.
Clone this wiki locally