From 5f222f07874fe3b97744e09b6333f7a07764b157 Mon Sep 17 00:00:00 2001 From: Kate Hedstrom Date: Mon, 20 Jun 2016 16:15:17 -0800 Subject: [PATCH] Added OBC for flow parallel to boundary. --- src/core/MOM_continuity.F90 | 4 ++-- src/core/MOM_continuity_PPM.F90 | 32 ++++++++++++++++++++++++-- src/core/MOM_dynamics_legacy_split.F90 | 4 ++-- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/core/MOM_continuity.F90 b/src/core/MOM_continuity.F90 index 555484057d..cefb7ee938 100644 --- a/src/core/MOM_continuity.F90 +++ b/src/core/MOM_continuity.F90 @@ -79,8 +79,8 @@ subroutine continuity(u, v, hin, h, uh, vh, dt, G, GV, CS, uhbt, vhbt, OBC, & uhbt_aux, vhbt_aux, u_cor_aux, v_cor_aux, BT_cont) type(ocean_grid_type), intent(inout) :: G type(verticalGrid_type), intent(in) :: GV - real, dimension(SZIB_(G),SZJ_(G),SZK_(G)), intent(in) :: u - real, dimension(SZI_(G),SZJB_(G),SZK_(G)), intent(in) :: v + real, dimension(SZIB_(G),SZJ_(G),SZK_(G)), intent(inout) :: u + real, dimension(SZI_(G),SZJB_(G),SZK_(G)), intent(inout) :: v real, dimension(SZI_(G),SZJ_(G),SZK_(G)), intent(in) :: hin real, dimension(SZI_(G),SZJ_(G),SZK_(G)), intent(inout) :: h real, dimension(SZIB_(G),SZJ_(G),SZK_(G)), intent(out) :: uh diff --git a/src/core/MOM_continuity_PPM.F90 b/src/core/MOM_continuity_PPM.F90 index 2562ca995f..84f24e4ced 100644 --- a/src/core/MOM_continuity_PPM.F90 +++ b/src/core/MOM_continuity_PPM.F90 @@ -110,8 +110,8 @@ subroutine continuity_PPM(u, v, hin, h, uh, vh, dt, G, GV, CS, uhbt, vhbt, OBC, uhbt_aux, vhbt_aux, u_cor_aux, v_cor_aux, BT_cont) type(ocean_grid_type), intent(inout) :: G type(continuity_PPM_CS), pointer :: CS - real, dimension(SZIB_(G),SZJ_(G),SZK_(G)), intent(in) :: u - real, dimension(SZI_(G),SZJB_(G),SZK_(G)), intent(in) :: v + real, dimension(SZIB_(G),SZJ_(G),SZK_(G)), intent(inout) :: u + real, dimension(SZI_(G),SZJB_(G),SZK_(G)), intent(inout) :: v real, dimension(SZI_(G),SZJ_(G),SZK_(G)), intent(in) :: hin real, dimension(SZI_(G),SZJ_(G),SZK_(G)), intent(inout) :: h real, dimension(SZIB_(G),SZJ_(G),SZK_(G)), intent(out) :: uh @@ -236,6 +236,14 @@ subroutine continuity_PPM(u, v, hin, h, uh, vh, dt, G, GV, CS, uhbt, vhbt, OBC, if (OBC%OBC_kind_u(I,j) == OBC_FLATHER .and. (OBC%OBC_direction_u(I,j) == OBC_DIRECTION_W)) & h(i,j,k) = h_input(i+1,j,k) enddo + enddo + do J=LB%jsh-1,LB%jeh + do i=LB%ish-1,LB%ieh+1 + if (OBC%OBC_kind_v(i,J) == OBC_FLATHER .and. (OBC%OBC_direction_v(i,J) == OBC_DIRECTION_E)) & + v(i,J,k) = v(i-1,J,k) + if (OBC%OBC_kind_v(i,J) == OBC_FLATHER .and. (OBC%OBC_direction_v(i,J) == OBC_DIRECTION_W)) & + v(i,J,k) = v(i+1,J,k) + enddo enddo ; enddo endif LB%ish = G%isc ; LB%ieh = G%iec ; LB%jsh = G%jsc ; LB%jeh = G%jec @@ -264,6 +272,12 @@ subroutine continuity_PPM(u, v, hin, h, uh, vh, dt, G, GV, CS, uhbt, vhbt, OBC, if (OBC%OBC_kind_v(i,J) == OBC_FLATHER .and. (OBC%OBC_direction_v(i,J) == OBC_DIRECTION_S)) & h(i,j,k) = h_input(i,j+1,k) enddo ; enddo + do j=LB%jsh-1,LB%jeh+1 ; do I=LB%ish-1,LB%ieh + if (OBC%OBC_kind_u(I,j) == OBC_FLATHER .and. (OBC%OBC_direction_u(I,j) == OBC_DIRECTION_N)) & + u(I,j,k) = u(I,j-1,k) + if (OBC%OBC_kind_u(I,j) == OBC_FLATHER .and. (OBC%OBC_direction_u(I,j) == OBC_DIRECTION_S)) & + u(I,j,k) = u(I,j+1,k) + enddo ; enddo enddo endif else ! .not. x_first @@ -291,6 +305,12 @@ subroutine continuity_PPM(u, v, hin, h, uh, vh, dt, G, GV, CS, uhbt, vhbt, OBC, if (OBC%OBC_kind_v(i,J) == OBC_FLATHER .and. (OBC%OBC_direction_v(i,J) == OBC_DIRECTION_S)) & h(i,j,k) = h_input(i,j+1,k) enddo ; enddo + do j=LB%jsh-1,LB%jeh+1 ; do I=LB%ish-1,LB%ieh + if (OBC%OBC_kind_u(I,j) == OBC_FLATHER .and. (OBC%OBC_direction_u(I,j) == OBC_DIRECTION_N)) & + u(I,j,k) = u(I,j-1,k) + if (OBC%OBC_kind_u(I,j) == OBC_FLATHER .and. (OBC%OBC_direction_u(I,j) == OBC_DIRECTION_S)) & + u(I,j,k) = u(I,j+1,k) + enddo ; enddo enddo endif @@ -319,6 +339,14 @@ subroutine continuity_PPM(u, v, hin, h, uh, vh, dt, G, GV, CS, uhbt, vhbt, OBC, if (OBC%OBC_kind_u(I,j) == OBC_FLATHER .and. (OBC%OBC_direction_u(I,j) == OBC_DIRECTION_W)) & h(i,j,k) = h_input(i+1,j,k) enddo + enddo + do J=LB%jsh-1,LB%jeh + do i=LB%ish-1,LB%ieh+1 + if (OBC%OBC_kind_v(i,J) == OBC_FLATHER .and. (OBC%OBC_direction_v(i,J) == OBC_DIRECTION_E)) & + v(i,J,k) = v(i-1,J,k) + if (OBC%OBC_kind_v(i,J) == OBC_FLATHER .and. (OBC%OBC_direction_v(i,J) == OBC_DIRECTION_W)) & + v(i,J,k) = v(i+1,J,k) + enddo enddo ; enddo endif endif diff --git a/src/core/MOM_dynamics_legacy_split.F90 b/src/core/MOM_dynamics_legacy_split.F90 index 77b9f3c6f5..0f30cf7bfc 100644 --- a/src/core/MOM_dynamics_legacy_split.F90 +++ b/src/core/MOM_dynamics_legacy_split.F90 @@ -1052,8 +1052,8 @@ end subroutine step_MOM_dyn_legacy_split subroutine adjustments_dyn_legacy_split(u, v, h, dt, G, GV, CS) type(ocean_grid_type), intent(inout) :: G type(verticalGrid_type), intent(in) :: GV - real, dimension(SZIB_(G),SZJ_(G),SZK_(G)), intent(in) :: u - real, dimension(SZI_(G),SZJB_(G),SZK_(G)), intent(in) :: v + real, dimension(SZIB_(G),SZJ_(G),SZK_(G)), intent(inout) :: u + real, dimension(SZI_(G),SZJB_(G),SZK_(G)), intent(inout) :: v real, dimension(SZI_(G),SZJ_(G),SZK_(G)), intent(in) :: h real, intent(in) :: dt type(MOM_dyn_legacy_split_CS), pointer :: CS