Skip to content

Commit

Permalink
Seg offset (#171)
Browse files Browse the repository at this point in the history
* Add a variable to shorten some statements

- suggested by @Hallberg-NOAA in the discussion for #164

* Fix to small i/j error
  • Loading branch information
kshedstrom authored Jul 27, 2022
1 parent 1a3f42a commit c598441
Showing 1 changed file with 19 additions and 20 deletions.
39 changes: 19 additions & 20 deletions src/core/MOM_open_boundary.F90
Original file line number Diff line number Diff line change
Expand Up @@ -3696,6 +3696,7 @@ subroutine update_OBC_segment_data(G, GV, US, OBC, tv, h, Time)
real, dimension(:,:,:), allocatable, target :: tmp_buffer ! A buffer for input data [various units]
real, dimension(:), allocatable :: h_stack ! Thicknesses at corner points [H ~> m or kg m-2]
integer :: is_obc2, js_obc2
integer :: i_seg_offset, j_seg_offset
real :: net_H_src ! Total thickness of the incoming flow in the source field [H ~> m or kg m-2]
real :: net_H_int ! Total thickness of the incoming flow in the model [H ~> m or kg m-2]
real :: scl_fac ! A scaling factor to compensate for differences in total thicknesses [nondim]
Expand Down Expand Up @@ -3737,6 +3738,8 @@ subroutine update_OBC_segment_data(G, GV, US, OBC, tv, h, Time)
ie_obc = min(segment%ie_obc,ied)
js_obc = max(segment%js_obc,jsd-1)
je_obc = min(segment%je_obc,jed)
i_seg_offset = G%idg_offset - segment%HI%Isgb
j_seg_offset = G%jdg_offset - segment%HI%Jsgb

! Calculate auxiliary fields at staggered locations.
! Segment indices are on q points:
Expand Down Expand Up @@ -3890,39 +3893,39 @@ subroutine update_OBC_segment_data(G, GV, US, OBC, tv, h, Time)
if (segment%field(m)%name == 'V' .or. segment%field(m)%name == 'DVDX' .or. &
segment%field(m)%name == 'Vamp' .or. segment%field(m)%name == 'Vphase') then
segment%field(m)%buffer_src(is_obc,:,:) = &
tmp_buffer(1,2*(js_obc+G%jdg_offset-segment%HI%Jsgb)+1:2*(je_obc+G%jdg_offset-segment%HI%Jsgb)+1:2,:)
tmp_buffer(1,2*(js_obc+j_seg_offset)+1:2*(je_obc+j_seg_offset)+1:2,:)
else
segment%field(m)%buffer_src(is_obc,:,:) = &
tmp_buffer(1,2*(js_obc+G%jdg_offset-segment%HI%Jsgb)+1:2*(je_obc+G%jdg_offset-segment%HI%Jsgb):2,:)
tmp_buffer(1,2*(js_obc+j_seg_offset)+1:2*(je_obc+j_seg_offset):2,:)
endif
else
if (segment%field(m)%name == 'U' .or. segment%field(m)%name == 'DUDY' .or. &
segment%field(m)%name == 'Uamp' .or. segment%field(m)%name == 'Uphase') then
segment%field(m)%buffer_src(:,js_obc,:) = &
tmp_buffer(2*(is_obc+G%idg_offset-segment%HI%Isgb)+1:2*(ie_obc+G%idg_offset-segment%HI%Isgb)+1:2,1,:)
tmp_buffer(2*(is_obc+i_seg_offset)+1:2*(ie_obc+i_seg_offset)+1:2,1,:)
else
segment%field(m)%buffer_src(:,js_obc,:) = &
tmp_buffer(2*(is_obc+G%idg_offset-segment%HI%Isgb)+1:2*(ie_obc+G%idg_offset-segment%HI%Isgb):2,1,:)
tmp_buffer(2*(is_obc+i_seg_offset)+1:2*(ie_obc+i_seg_offset):2,1,:)
endif
endif
else
if (segment%is_E_or_W) then
if (segment%field(m)%name == 'V' .or. segment%field(m)%name == 'DVDX' .or. &
segment%field(m)%name == 'Vamp' .or. segment%field(m)%name == 'Vphase') then
segment%field(m)%buffer_src(is_obc,:,:) = &
tmp_buffer(1,js_obc+G%jdg_offset-segment%HI%Jsgb+1:je_obc+G%jdg_offset-segment%HI%Jsgb+1,:)
tmp_buffer(1,js_obc+j_seg_offset+1:je_obc+j_seg_offset+1,:)
else
segment%field(m)%buffer_src(is_obc,:,:) = &
tmp_buffer(1,js_obc+G%jdg_offset-segment%HI%Jsgb+1:je_obc+G%jdg_offset-segment%HI%Jsgb,:)
tmp_buffer(1,js_obc+j_seg_offset+1:je_obc+j_seg_offset,:)
endif
else
if (segment%field(m)%name == 'U' .or. segment%field(m)%name == 'DUDY' .or. &
segment%field(m)%name == 'Uamp' .or. segment%field(m)%name == 'Uphase') then
segment%field(m)%buffer_src(:,js_obc,:) = &
tmp_buffer(is_obc+G%idg_offset-segment%HI%Isgb+1:ie_obc+G%idg_offset-segment%HI%Isgb+1,1,:)
tmp_buffer(is_obc+i_seg_offset+1:ie_obc+i_seg_offset+1,1,:)
else
segment%field(m)%buffer_src(:,js_obc,:) = &
tmp_buffer(is_obc+G%idg_offset-segment%HI%Isgb+1:ie_obc+G%idg_offset-segment%HI%Isgb,1,:)
tmp_buffer(is_obc+i_seg_offset+1:ie_obc+i_seg_offset,1,:)
endif
endif
endif
Expand All @@ -3949,40 +3952,36 @@ subroutine update_OBC_segment_data(G, GV, US, OBC, tv, h, Time)
if (segment%is_E_or_W) then
if (segment%field(m)%name == 'V' .or. segment%field(m)%name == 'DVDX') then
segment%field(m)%dz_src(is_obc,:,:) = &
tmp_buffer(1,2*(js_obc+G%jdg_offset-segment%HI%Jsgb)+1:2*(je_obc+G%jdg_offset- &
segment%HI%Jsgb)+1:2,:)
tmp_buffer(1,2*(js_obc+j_seg_offset)+1:2*(je_obc+j_seg_offset)+1:2,:)
else
segment%field(m)%dz_src(is_obc,:,:) = &
tmp_buffer(1,2*(js_obc+G%jdg_offset-segment%HI%Jsgb)+1:2*(je_obc+G%jdg_offset- &
segment%HI%Jsgb):2,:)
tmp_buffer(1,2*(js_obc+j_seg_offset)+1:2*(je_obc+j_seg_offset):2,:)
endif
else
if (segment%field(m)%name == 'U' .or. segment%field(m)%name == 'DUDY') then
segment%field(m)%dz_src(:,js_obc,:) = &
tmp_buffer(2*(is_obc+G%idg_offset-segment%HI%Isgb)+1:2*(ie_obc+G%idg_offset- &
segment%HI%Isgb)+1:2,1,:)
tmp_buffer(2*(is_obc+i_seg_offset)+1:2*(ie_obc+i_seg_offset)+1:2,1,:)
else
segment%field(m)%dz_src(:,js_obc,:) = &
tmp_buffer(2*(is_obc+G%idg_offset-segment%HI%Isgb)+1:2*(ie_obc+G%idg_offset- &
segment%HI%Isgb):2,1,:)
tmp_buffer(2*(is_obc+i_seg_offset)+1:2*(ie_obc+i_seg_offset):2,1,:)
endif
endif
else
if (segment%is_E_or_W) then
if (segment%field(m)%name == 'V' .or. segment%field(m)%name == 'DVDX') then
segment%field(m)%dz_src(is_obc,:,:) = &
tmp_buffer(1,js_obc+G%jdg_offset-segment%HI%Jsgb+1:je_obc+G%jdg_offset-segment%HI%Jsgb+1,:)
tmp_buffer(1,js_obc+j_seg_offset+1:je_obc+j_seg_offset+1,:)
else
segment%field(m)%dz_src(is_obc,:,:) = &
tmp_buffer(1,js_obc+G%jdg_offset-segment%HI%Jsgb+1:je_obc+G%jdg_offset-segment%HI%Jsgb,:)
tmp_buffer(1,js_obc+j_seg_offset+1:je_obc+j_seg_offset,:)
endif
else
if (segment%field(m)%name == 'U' .or. segment%field(m)%name == 'DUDY') then
segment%field(m)%dz_src(:,js_obc,:) = &
tmp_buffer(is_obc+G%idg_offset-segment%HI%Isgb+1:ie_obc+G%idg_offset-segment%HI%Isgb+1,1,:)
tmp_buffer(is_obc+i_seg_offset+1:ie_obc+i_seg_offset+1,1,:)
else
segment%field(m)%dz_src(:,js_obc,:) = &
tmp_buffer(is_obc+G%idg_offset-segment%HI%Isgb+1:ie_obc+G%idg_offset-segment%HI%Isgb,1,:)
tmp_buffer(is_obc+i_seg_offset+1:ie_obc+i_seg_offset,1,:)
endif
endif
endif
Expand Down

0 comments on commit c598441

Please sign in to comment.