Skip to content

Commit 2bc939b

Browse files
committed
Merge branch 'ESMG-user/ksh/open_bc' into dev/master
2 parents 36275ae + f288b1a commit 2bc939b

20 files changed

+1447
-465
lines changed

src/core/MOM_barotropic.F90

Lines changed: 52 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -363,9 +363,7 @@ module MOM_barotropic
363363
OBC_mask_v => NULL()
364364
integer, dimension(:,:), pointer :: &
365365
OBC_direction_u => NULL(), &
366-
OBC_direction_v => NULL(), &
367-
OBC_kind_u => NULL(), &
368-
OBC_kind_v => NULL()
366+
OBC_direction_v => NULL()
369367
real, dimension(:,:), pointer :: &
370368
Cg_u => NULL(), & ! The external wave speed at u-points, in m s-1.
371369
Cg_v => NULL(), & ! The external wave speed at u-points, in m s-1.
@@ -2376,11 +2374,11 @@ subroutine apply_velocity_OBCs(OBC, ubt, vbt, uhbt, vhbt, ubt_trans, vbt_trans,
23762374

23772375
if (associated(BT_OBC%OBC_mask_u)) then
23782376
do j=js,je ; do I=is-1,ie ; if (BT_OBC%OBC_mask_u(I,j)) then
2379-
if (BT_OBC%OBC_kind_u(I,j) == OBC_SIMPLE) then
2377+
if (OBC%OBC_segment_list(OBC%OBC_segment_u(I,j))%specified) then
23802378
uhbt(I,j) = BT_OBC%uhbt(I,j)
23812379
ubt(I,j) = BT_OBC%ubt_outer(I,j)
23822380
vel_trans = ubt(I,j)
2383-
elseif (BT_OBC%OBC_kind_u(I,j) == OBC_FLATHER) then
2381+
elseif (OBC%OBC_segment_list(OBC%OBC_segment_u(I,j))%Flather) then
23842382
if (BT_OBC%OBC_direction_u(I,j) == OBC_DIRECTION_E) then
23852383
cfl = dtbt * BT_OBC%Cg_u(I,j) * G%IdxCu(I,j) ! CFL
23862384
u_inlet = cfl*ubt_old(I-1,j) + (1.0-cfl)*ubt_old(I,j) ! Valid for cfl<1
@@ -2413,7 +2411,7 @@ subroutine apply_velocity_OBCs(OBC, ubt, vbt, uhbt, vhbt, ubt_trans, vbt_trans,
24132411
endif
24142412
vel_trans = ubt(I,j)
24152413
elseif (BT_OBC%OBC_direction_u(I,j) == OBC_DIRECTION_S) then
2416-
if ((vbt(i,J)+vbt(i+1,J)) > 0.0) then
2414+
if ((vbt(i,J)+vbt(i+1,J)) < 0.0) then
24172415
ubt(I,j) = 2.0*ubt(I,j+1)-ubt(I,j+2)
24182416
else
24192417
ubt(I,j) = BT_OBC%ubt_outer(I,j)
@@ -2422,7 +2420,7 @@ subroutine apply_velocity_OBCs(OBC, ubt, vbt, uhbt, vhbt, ubt_trans, vbt_trans,
24222420
endif
24232421
endif
24242422

2425-
if (BT_OBC%OBC_kind_u(I,j) /= OBC_SIMPLE) then
2423+
if (.not. OBC%OBC_segment_list(OBC%OBC_segment_u(I,j))%specified) then
24262424
if (use_BT_cont) then
24272425
uhbt(I,j) = find_uhbt(vel_trans,BTCL_u(I,j)) + uhbt0(I,j)
24282426
else
@@ -2436,11 +2434,11 @@ subroutine apply_velocity_OBCs(OBC, ubt, vbt, uhbt, vhbt, ubt_trans, vbt_trans,
24362434

24372435
if (associated(BT_OBC%OBC_mask_v)) then
24382436
do J=js-1,je ; do i=is,ie ; if (BT_OBC%OBC_mask_v(i,J)) then
2439-
if (BT_OBC%OBC_kind_v(i,J) == OBC_SIMPLE) then
2437+
if (OBC%OBC_segment_list(OBC%OBC_segment_v(i,J))%specified) then
24402438
vhbt(i,J) = BT_OBC%vhbt(i,J)
24412439
vbt(i,J) = BT_OBC%vbt_outer(i,J)
24422440
vel_trans = vbt(i,J)
2443-
elseif (BT_OBC%OBC_kind_v(i,J) == OBC_FLATHER) then
2441+
elseif (OBC%OBC_segment_list(OBC%OBC_segment_v(i,J))%Flather) then
24442442
if (BT_OBC%OBC_direction_v(i,J) == OBC_DIRECTION_N) then
24452443
cfl = dtbt * BT_OBC%Cg_v(i,J) * G%IdyCv(I,j) ! CFL
24462444
v_inlet = cfl*vbt_old(i,J-1) + (1.0-cfl)*vbt_old(i,J) ! Valid for cfl<1
@@ -2490,7 +2488,7 @@ subroutine apply_velocity_OBCs(OBC, ubt, vbt, uhbt, vhbt, ubt_trans, vbt_trans,
24902488
endif
24912489
endif
24922490

2493-
if (BT_OBC%OBC_kind_v(i,J) /= OBC_SIMPLE) then
2491+
if (.not. OBC%OBC_segment_list(OBC%OBC_segment_v(i,J))%specified) then
24942492
if (use_BT_cont) then
24952493
vhbt(i,J) = find_vhbt(vel_trans,BTCL_v(i,J)) + vhbt0(i,J)
24962494
else
@@ -2538,50 +2536,54 @@ subroutine apply_eta_OBCs(OBC, eta, ubt, vbt, BT_OBC, G, MS, halo, dtbt)
25382536

25392537
if ((OBC%apply_OBC_u_flather_east .or. OBC%apply_OBC_u_flather_west) .and. &
25402538
associated(BT_OBC%OBC_mask_u)) then
2541-
do j=js,je ; do I=is-1,ie ; if (BT_OBC%OBC_kind_u(I,j) == OBC_FLATHER) then
2542-
if (BT_OBC%OBC_direction_u(I,j) == OBC_DIRECTION_E) then
2543-
cfl = dtbt * BT_OBC%Cg_u(I,j) * G%IdxCu(I,j) ! CFL
2544-
u_inlet = cfl*ubt(I-1,j) + (1.0-cfl)*ubt(I,j) ! Valid for cfl <1
2545-
! h_in = 2.0*cfl*eta(i,j) + (1.0-2.0*cfl)*eta(i+1,j) ! external
2546-
h_in = eta(i,j) + (0.5-cfl)*(eta(i,j)-eta(i-1,j)) ! internal
2547-
2548-
H_u = BT_OBC%H_u(I,j)
2549-
eta(i+1,j) = 2.0 * 0.5*((BT_OBC%eta_outer_u(I,j)+h_in) + &
2550-
(H_u/BT_OBC%Cg_u(I,j))*(u_inlet-BT_OBC%ubt_outer(I,j))) - eta(i,j)
2551-
elseif (BT_OBC%OBC_direction_u(I,j) == OBC_DIRECTION_W) then
2552-
cfl = dtbt*BT_OBC%Cg_u(I,j)*G%IdxCu(I,j) ! CFL
2553-
u_inlet = cfl*ubt(I+1,j) + (1.0-cfl)*ubt(I,j) ! Valid for cfl <1
2554-
! h_in = 2.0*cfl*eta(i+1,j) + (1.0-2.0*cfl)*eta(i,j) ! external
2555-
h_in = eta(i+1,j) + (0.5-cfl)*(eta(i+1,j)-eta(i+2,j)) ! internal
2556-
2557-
H_u = BT_OBC%H_u(I,j)
2558-
eta(i,j) = 2.0 * 0.5*((BT_OBC%eta_outer_u(I,j)+h_in) + &
2559-
(H_u/BT_OBC%Cg_u(I,j))*(BT_OBC%ubt_outer(I,j)-u_inlet)) - eta(i+1,j)
2539+
do j=js,je ; do I=is-1,ie ; if (OBC%OBC_segment_u(I,j) /= OBC_NONE) then
2540+
if (OBC%OBC_segment_list(OBC%OBC_segment_u(I,j))%Flather) then
2541+
if (BT_OBC%OBC_direction_u(I,j) == OBC_DIRECTION_E) then
2542+
cfl = dtbt * BT_OBC%Cg_u(I,j) * G%IdxCu(I,j) ! CFL
2543+
u_inlet = cfl*ubt(I-1,j) + (1.0-cfl)*ubt(I,j) ! Valid for cfl <1
2544+
! h_in = 2.0*cfl*eta(i,j) + (1.0-2.0*cfl)*eta(i+1,j) ! external
2545+
h_in = eta(i,j) + (0.5-cfl)*(eta(i,j)-eta(i-1,j)) ! internal
2546+
2547+
H_u = BT_OBC%H_u(I,j)
2548+
eta(i+1,j) = 2.0 * 0.5*((BT_OBC%eta_outer_u(I,j)+h_in) + &
2549+
(H_u/BT_OBC%Cg_u(I,j))*(u_inlet-BT_OBC%ubt_outer(I,j))) - eta(i,j)
2550+
elseif (BT_OBC%OBC_direction_u(I,j) == OBC_DIRECTION_W) then
2551+
cfl = dtbt*BT_OBC%Cg_u(I,j)*G%IdxCu(I,j) ! CFL
2552+
u_inlet = cfl*ubt(I+1,j) + (1.0-cfl)*ubt(I,j) ! Valid for cfl <1
2553+
! h_in = 2.0*cfl*eta(i+1,j) + (1.0-2.0*cfl)*eta(i,j) ! external
2554+
h_in = eta(i+1,j) + (0.5-cfl)*(eta(i+1,j)-eta(i+2,j)) ! internal
2555+
2556+
H_u = BT_OBC%H_u(I,j)
2557+
eta(i,j) = 2.0 * 0.5*((BT_OBC%eta_outer_u(I,j)+h_in) + &
2558+
(H_u/BT_OBC%Cg_u(I,j))*(BT_OBC%ubt_outer(I,j)-u_inlet)) - eta(i+1,j)
2559+
endif
25602560
endif
25612561
endif ; enddo ; enddo
25622562
endif
25632563

25642564
if ((OBC%apply_OBC_v_flather_north .or. OBC%apply_OBC_v_flather_south) .and. &
25652565
associated(BT_OBC%OBC_mask_v)) then
2566-
do J=js-1,je ; do i=is,ie ; if (BT_OBC%OBC_kind_v(i,J) == OBC_FLATHER) then
2567-
if (BT_OBC%OBC_direction_v(i,J) == OBC_DIRECTION_N) then
2568-
cfl = dtbt*BT_OBC%Cg_v(i,J)*G%IdyCv(i,J) ! CFL
2569-
v_inlet = cfl*vbt(i,J-1) + (1.0-cfl)*vbt(i,J) ! Valid for cfl <1
2570-
! h_in = 2.0*cfl*eta(i,j) + (1.0-2.0*cfl)*eta(i,j+1) ! external
2571-
h_in = eta(i,j) + (0.5-cfl)*(eta(i,j)-eta(i,j-1)) ! internal
2572-
2573-
H_v = BT_OBC%H_v(i,J)
2574-
eta(i,j+1) = 2.0 * 0.5*((BT_OBC%eta_outer_v(i,J)+h_in) + &
2575-
(H_v/BT_OBC%Cg_v(i,J))*(v_inlet-BT_OBC%vbt_outer(i,J))) - eta(i,j)
2576-
elseif (BT_OBC%OBC_direction_v(i,J) == OBC_DIRECTION_S) then
2577-
cfl = dtbt*BT_OBC%Cg_v(i,J)*G%IdyCv(i,J) ! CFL
2578-
v_inlet = cfl*vbt(i,J+1) + (1.0-cfl)*vbt(i,J) ! Valid for cfl <1
2579-
! h_in = 2.0*cfl*eta(i,j+1) + (1.0-2.0*cfl)*eta(i,j) ! external
2580-
h_in = eta(i,j+1) + (0.5-cfl)*(eta(i,j+1)-eta(i,j+2)) ! internal
2581-
2582-
H_v = BT_OBC%H_v(i,J)
2583-
eta(i,j) = 2.0 * 0.5*((BT_OBC%eta_outer_v(i,J)+h_in) + &
2584-
(H_v/BT_OBC%Cg_v(i,J))*(BT_OBC%vbt_outer(i,J)-v_inlet)) - eta(i,j+1)
2566+
do J=js-1,je ; do i=is,ie ; if (OBC%OBC_segment_v(i,J) /= OBC_NONE) then
2567+
if (OBC%OBC_segment_list(OBC%OBC_segment_v(i,J))%Flather) then
2568+
if (BT_OBC%OBC_direction_v(i,J) == OBC_DIRECTION_N) then
2569+
cfl = dtbt*BT_OBC%Cg_v(i,J)*G%IdyCv(i,J) ! CFL
2570+
v_inlet = cfl*vbt(i,J-1) + (1.0-cfl)*vbt(i,J) ! Valid for cfl <1
2571+
! h_in = 2.0*cfl*eta(i,j) + (1.0-2.0*cfl)*eta(i,j+1) ! external
2572+
h_in = eta(i,j) + (0.5-cfl)*(eta(i,j)-eta(i,j-1)) ! internal
2573+
2574+
H_v = BT_OBC%H_v(i,J)
2575+
eta(i,j+1) = 2.0 * 0.5*((BT_OBC%eta_outer_v(i,J)+h_in) + &
2576+
(H_v/BT_OBC%Cg_v(i,J))*(v_inlet-BT_OBC%vbt_outer(i,J))) - eta(i,j)
2577+
elseif (BT_OBC%OBC_direction_v(i,J) == OBC_DIRECTION_S) then
2578+
cfl = dtbt*BT_OBC%Cg_v(i,J)*G%IdyCv(i,J) ! CFL
2579+
v_inlet = cfl*vbt(i,J+1) + (1.0-cfl)*vbt(i,J) ! Valid for cfl <1
2580+
! h_in = 2.0*cfl*eta(i,j+1) + (1.0-2.0*cfl)*eta(i,j) ! external
2581+
h_in = eta(i,j+1) + (0.5-cfl)*(eta(i,j+1)-eta(i,j+2)) ! internal
2582+
2583+
H_v = BT_OBC%H_v(i,J)
2584+
eta(i,j) = 2.0 * 0.5*((BT_OBC%eta_outer_v(i,J)+h_in) + &
2585+
(H_v/BT_OBC%Cg_v(i,J))*(BT_OBC%vbt_outer(i,J)-v_inlet)) - eta(i,j+1)
2586+
endif
25852587
endif
25862588
endif ; enddo ; enddo
25872589
endif
@@ -2640,7 +2642,6 @@ subroutine set_up_BT_OBC(OBC, eta, BT_OBC, G, GV, MS, halo, use_BT_cont, Datu, D
26402642
allocate(BT_OBC%ubt_outer(isdw-1:iedw,jsdw:jedw)) ; BT_OBC%ubt_outer(:,:) = 0.0
26412643
allocate(BT_OBC%eta_outer_u(isdw-1:iedw,jsdw:jedw)) ; BT_OBC%eta_outer_u(:,:) = 0.0
26422644
allocate(BT_OBC%OBC_mask_u(isdw-1:iedw,jsdw:jedw)) ; BT_OBC%OBC_mask_u(:,:)=.false.
2643-
allocate(BT_OBC%OBC_kind_u(isdw-1:iedw,jsdw:jedw)) ; BT_OBC%OBC_kind_u(:,:)=OBC_NONE
26442645
allocate(BT_OBC%OBC_direction_u(isdw-1:iedw,jsdw:jedw)); BT_OBC%OBC_direction_u(:,:)=OBC_NONE
26452646

26462647
allocate(BT_OBC%Cg_v(isdw:iedw,jsdw-1:jedw)) ; BT_OBC%Cg_v(:,:) = 0.0
@@ -2649,13 +2650,11 @@ subroutine set_up_BT_OBC(OBC, eta, BT_OBC, G, GV, MS, halo, use_BT_cont, Datu, D
26492650
allocate(BT_OBC%vbt_outer(isdw:iedw,jsdw-1:jedw)) ; BT_OBC%vbt_outer(:,:) = 0.0
26502651
allocate(BT_OBC%eta_outer_v(isdw:iedw,jsdw-1:jedw)) ; BT_OBC%eta_outer_v(:,:)=0.0
26512652
allocate(BT_OBC%OBC_mask_v(isdw:iedw,jsdw-1:jedw)) ; BT_OBC%OBC_mask_v(:,:)=.false.
2652-
allocate(BT_OBC%OBC_kind_v(isdw-1:iedw,jsdw:jedw)) ; BT_OBC%OBC_kind_v(:,:)=OBC_NONE
26532653
allocate(BT_OBC%OBC_direction_v(isdw-1:iedw,jsdw:jedw)); BT_OBC%OBC_direction_v(:,:)=OBC_NONE
26542654

26552655
if (associated(OBC%OBC_mask_u)) then
26562656
do j=js-1,je+1 ; do I=is-1,ie
26572657
BT_OBC%OBC_mask_u(I,j) = OBC%OBC_mask_u(I,j)
2658-
BT_OBC%OBC_kind_u(I,j) = OBC%OBC_kind_u(I,j)
26592658
BT_OBC%OBC_direction_u(I,j) = OBC%OBC_direction_u(I,j)
26602659
enddo ; enddo
26612660
if (OBC%apply_OBC_u) then
@@ -2664,7 +2663,7 @@ subroutine set_up_BT_OBC(OBC, eta, BT_OBC, G, GV, MS, halo, use_BT_cont, Datu, D
26642663
enddo ; enddo ; enddo
26652664
endif
26662665
do j=js,je ; do I=is-1,ie ; if (OBC%OBC_mask_u(I,j)) then
2667-
if (OBC%OBC_kind_u(I,j) == OBC_SIMPLE) then
2666+
if (OBC%OBC_segment_list(OBC%OBC_segment_u(I,j))%specified) then
26682667
if (use_BT_cont) then
26692668
BT_OBC%ubt_outer(I,j) = uhbt_to_ubt(BT_OBC%uhbt(I,j),BTCL_u(I,j))
26702669
else
@@ -2691,7 +2690,6 @@ subroutine set_up_BT_OBC(OBC, eta, BT_OBC, G, GV, MS, halo, use_BT_cont, Datu, D
26912690
if (associated(OBC%OBC_mask_v)) then
26922691
do J=js-1,je ; do i=is-1,ie+1
26932692
BT_OBC%OBC_mask_v(i,J) = OBC%OBC_mask_v(i,J)
2694-
BT_OBC%OBC_kind_v(i,J) = OBC%OBC_kind_v(i,J)
26952693
BT_OBC%OBC_direction_v(i,J) = OBC%OBC_direction_v(i,J)
26962694
enddo ; enddo
26972695
if (OBC%apply_OBC_v) then
@@ -2701,7 +2699,7 @@ subroutine set_up_BT_OBC(OBC, eta, BT_OBC, G, GV, MS, halo, use_BT_cont, Datu, D
27012699
endif
27022700

27032701
do J=js-1,je ; do i=is,ie ; if (OBC%OBC_mask_v(i,J)) then
2704-
if (OBC%OBC_kind_v(i,J) == OBC_SIMPLE) then
2702+
if (OBC%OBC_segment_list(OBC%OBC_segment_v(i,J))%specified) then
27052703
if (use_BT_cont) then
27062704
BT_OBC%vbt_outer(i,J) = vhbt_to_vbt(BT_OBC%vhbt(i,J),BTCL_v(i,J))
27072705
else
@@ -2741,7 +2739,6 @@ subroutine destroy_BT_OBC(BT_OBC)
27412739
type(BT_OBC_type), intent(inout) :: BT_OBC
27422740

27432741
if (associated(BT_OBC%OBC_mask_u)) deallocate(BT_OBC%OBC_mask_u)
2744-
if (associated(BT_OBC%OBC_kind_u)) deallocate(BT_OBC%OBC_kind_u)
27452742
if (associated(BT_OBC%OBC_direction_u)) deallocate(BT_OBC%OBC_direction_u)
27462743
deallocate(BT_OBC%Cg_u)
27472744
deallocate(BT_OBC%H_u)
@@ -2750,7 +2747,6 @@ subroutine destroy_BT_OBC(BT_OBC)
27502747
deallocate(BT_OBC%eta_outer_u)
27512748

27522749
if (associated(BT_OBC%OBC_mask_v)) deallocate(BT_OBC%OBC_mask_v)
2753-
if (associated(BT_OBC%OBC_kind_v)) deallocate(BT_OBC%OBC_kind_v)
27542750
if (associated(BT_OBC%OBC_direction_v)) deallocate(BT_OBC%OBC_direction_v)
27552751
deallocate(BT_OBC%Cg_v)
27562752
deallocate(BT_OBC%H_v)

src/core/MOM_boundary_update.F90

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
! This file is part of MOM6. See LICENSE.md for the license.
2+
!> Controls where open boundary conditions are applied
3+
module MOM_boundary_update
4+
5+
! This file is part of MOM6. See LICENSE.md for the license.
6+
7+
use MOM_cpu_clock, only : cpu_clock_id, cpu_clock_begin, cpu_clock_end, CLOCK_ROUTINE
8+
use MOM_diag_mediator, only : diag_ctrl, time_type
9+
use MOM_domains, only : pass_var, pass_vector
10+
use MOM_domains, only : To_All, SCALAR_PAIR, CGRID_NE
11+
use MOM_error_handler, only : MOM_mesg, MOM_error, FATAL, WARNING
12+
use MOM_file_parser, only : get_param, log_version, param_file_type, log_param
13+
use MOM_grid, only : ocean_grid_type
14+
use MOM_dyn_horgrid, only : dyn_horgrid_type
15+
use MOM_io, only : EAST_FACE, NORTH_FACE
16+
use MOM_io, only : slasher, read_data
17+
use MOM_open_boundary, only : ocean_obc_type
18+
use MOM_tracer_registry, only : add_tracer_OBC_values, tracer_registry_type
19+
use MOM_variables, only : thermo_var_ptrs
20+
use tidal_bay_initialization, only : tidal_bay_set_OBC_data
21+
22+
implicit none ; private
23+
24+
#include <MOM_memory.h>
25+
26+
public update_OBC_data
27+
28+
integer :: id_clock_pass
29+
30+
character(len=40) :: mod = "MOM_boundary_update" ! This module's name.
31+
! This include declares and sets the variable "version".
32+
#include "version_variable.h"
33+
34+
contains
35+
36+
!> Calls appropriate routine to update the open boundary conditions.
37+
subroutine update_OBC_data(OBC, G, h, Time)
38+
type(ocean_grid_type), intent(in) :: G !< Ocean grid structure
39+
real, dimension(SZI_(G),SZJ_(G),SZK_(G)), intent(inout) :: h !< layer thickness
40+
type(ocean_OBC_type), pointer :: OBC !< Open boundary structure
41+
type(time_type), intent(in) :: Time !< Model time
42+
! Local variables
43+
logical :: read_OBC_eta = .false.
44+
logical :: read_OBC_uv = .false.
45+
logical :: read_OBC_TS = .false.
46+
integer :: i, j, k, itt, is, ie, js, je, isd, ied, jsd, jed, nz
47+
integer :: isd_off, jsd_off
48+
integer :: IsdB, IedB, JsdB, JedB
49+
character(len=40) :: mod = "set_Flather_Bdry_Conds" ! This subroutine's name.
50+
character(len=200) :: filename, OBC_file, inputdir ! Strings for file/path
51+
52+
real :: temp_u(G%domain%niglobal+1,G%domain%njglobal)
53+
real :: temp_v(G%domain%niglobal,G%domain%njglobal+1)
54+
55+
real, pointer, dimension(:,:,:) :: &
56+
OBC_T_u => NULL(), & ! These arrays should be allocated and set to
57+
OBC_T_v => NULL(), & ! specify the values of T and S that should come
58+
OBC_S_u => NULL(), &
59+
OBC_S_v => NULL()
60+
61+
is = G%isc ; ie = G%iec ; js = G%jsc ; je = G%jec ; nz = G%ke
62+
isd = G%isd ; ied = G%ied ; jsd = G%jsd ; jed = G%jed
63+
IsdB = G%IsdB ; IedB = G%IedB ; JsdB = G%JsdB ; JedB = G%JedB
64+
65+
if (OBC%OBC_values_config == "tidal_bay") then
66+
call tidal_bay_set_OBC_data(OBC, G, h, Time)
67+
endif
68+
69+
end subroutine update_OBC_data
70+
71+
!> \namespace mom_boundary_update
72+
!! This module updates the open boundary arrays when time-varying.
73+
!! It caused a circular dependency with the tidal_bay setup when
74+
!! MOM_open_boundary.
75+
!!
76+
!! A small fragment of the grid is shown below:
77+
!!
78+
!! j+1 x ^ x ^ x At x: q, CoriolisBu
79+
!! j+1 > o > o > At ^: v, tauy
80+
!! j x ^ x ^ x At >: u, taux
81+
!! j > o > o > At o: h, bathyT, buoy, tr, T, S, Rml, ustar
82+
!! j-1 x ^ x ^ x
83+
!! i-1 i i+1 At x & ^:
84+
!! i i+1 At > & o:
85+
!!
86+
!! The boundaries always run through q grid points (x).
87+
88+
end module MOM_boundary_update

0 commit comments

Comments
 (0)