-
Notifications
You must be signed in to change notification settings - Fork 2
OBC Development Notes
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.