Skip to content

Commit 20beb2f

Browse files
committed
Fix for even number of OBC turns.
- not that turns other than 0, 1 is supported elsewhere for OBCs. This still has issue NOAA-GFDL#5 from a comment in NOAA-GFDL#752: Some experimentation with the rotate_OBC subroutines. Dr Neumann's test uses boundary data of the value=const type. Copying the buffer_dst from OBC_in to CS%OBC gets some of these across, also the tracer reservoir values. However, the tracer reservoir values get overwritten by an interior tracer value between the first call to step_MOM_dynamics and the second.
1 parent 698b05d commit 20beb2f

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed

src/core/MOM_open_boundary.F90

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6182,14 +6182,25 @@ subroutine rotate_OBC_segment_data(segment_in, segment, turns)
61826182
call rotate_array(segment_in%grad_tan, turns, segment%grad_tan)
61836183
if (allocated(segment_in%grad_gradient)) &
61846184
call rotate_array(segment_in%grad_gradient, turns, segment%grad_gradient)
6185-
if (allocated(segment_in%rx_norm_rad)) &
6186-
call rotate_array(segment_in%rx_norm_rad, turns, segment%ry_norm_rad)
6187-
if (allocated(segment_in%ry_norm_rad)) &
6188-
call rotate_array(segment_in%ry_norm_rad, turns, segment%rx_norm_rad)
6189-
if (allocated(segment_in%rx_norm_obl)) &
6190-
call rotate_array(segment_in%rx_norm_obl, turns, segment%ry_norm_obl)
6191-
if (allocated(segment_in%ry_norm_obl)) &
6192-
call rotate_array(segment_in%ry_norm_obl, turns, segment%rx_norm_obl)
6185+
if (modulo(turns, 2) /= 0) then
6186+
if (allocated(segment_in%rx_norm_rad)) &
6187+
call rotate_array(segment_in%rx_norm_rad, turns, segment%ry_norm_rad)
6188+
if (allocated(segment_in%ry_norm_rad)) &
6189+
call rotate_array(segment_in%ry_norm_rad, turns, segment%rx_norm_rad)
6190+
if (allocated(segment_in%rx_norm_obl)) &
6191+
call rotate_array(segment_in%rx_norm_obl, turns, segment%ry_norm_obl)
6192+
if (allocated(segment_in%ry_norm_obl)) &
6193+
call rotate_array(segment_in%ry_norm_obl, turns, segment%rx_norm_obl)
6194+
else
6195+
if (allocated(segment_in%rx_norm_rad)) &
6196+
call rotate_array(segment_in%rx_norm_rad, turns, segment%rx_norm_rad)
6197+
if (allocated(segment_in%ry_norm_rad)) &
6198+
call rotate_array(segment_in%ry_norm_rad, turns, segment%ry_norm_rad)
6199+
if (allocated(segment_in%rx_norm_obl)) &
6200+
call rotate_array(segment_in%rx_norm_obl, turns, segment%rx_norm_obl)
6201+
if (allocated(segment_in%ry_norm_obl)) &
6202+
call rotate_array(segment_in%ry_norm_obl, turns, segment%ry_norm_obl)
6203+
endif
61936204
if (allocated(segment_in%cff_normal)) &
61946205
call rotate_array(segment_in%cff_normal, turns, segment%cff_normal)
61956206
if (allocated(segment_in%nudged_normal_vel)) &

0 commit comments

Comments
 (0)