Skip to content

Commit 24e195f

Browse files
committed
Fixing next round of rotated OBC issues
1 parent 0d625d3 commit 24e195f

File tree

2 files changed

+37
-3
lines changed

2 files changed

+37
-3
lines changed

src/core/MOM_open_boundary.F90

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6079,6 +6079,7 @@ subroutine rotate_OBC_init(OBC_in, G, GV, US, param_file, tv, restart_CS, OBC)
60796079
call rotate_OBC_segment_data(OBC_in%segment(l), OBC%segment(l), G%HI%turns)
60806080
enddo
60816081

6082+
call setup_OBC_tracer_reservoirs(G, GV, OBC)
60826083
call open_boundary_init(G, GV, US, param_file, OBC, restart_CS)
60836084
end subroutine rotate_OBC_init
60846085

@@ -6119,7 +6120,6 @@ subroutine rotate_OBC_segment_data(segment_in, segment, turns)
61196120
segment%field(n)%name = 'Vphase'
61206121
case ('V')
61216122
segment%field(n)%name = 'U'
6122-
segment%field(n)%buffer_dst(:,:,:) = -segment%field(n)%buffer_dst(:,:,:)
61236123
case ('Vamp')
61246124
segment%field(n)%name = 'Uamp'
61256125
case ('Vphase')
@@ -6211,12 +6211,47 @@ subroutine rotate_OBC_segment_data(segment_in, segment, turns)
62116211
call rotate_array(segment_in%nudged_tangential_grad, turns, segment%nudged_tangential_grad)
62126212
if (associated(segment_in%tr_Reg)) then
62136213
do n = 1, segment_in%tr_Reg%ntseg
6214+
call rotate_array(segment_in%tr_Reg%tr(n)%t, turns, segment%tr_Reg%tr(n)%t)
62146215
call rotate_array(segment_in%tr_Reg%tr(n)%tres, turns, segment%tr_Reg%tr(n)%tres)
62156216
! Testing this to see if it works for contant tres values. Probably wrong otherwise.
62166217
segment%tr_Reg%Tr(n)%is_initialized=.true.
62176218
enddo
62186219
endif
62196220

6221+
do n = 1, num_fields
6222+
if ((segment%field(n)%name == 'U' .or. segment%field(n)%name == 'Uamp') .and. &
6223+
modulo(turns, 2) /= 0) then
6224+
segment%field(n)%buffer_dst(:,:,:) = -segment%field(n)%buffer_dst(:,:,:)
6225+
if (segment%is_E_or_W) then
6226+
segment%normal_trans(:,:,:) = -segment%normal_trans(:,:,:)
6227+
segment%normal_vel(:,:,:) = -segment%normal_vel(:,:,:)
6228+
segment%normal_vel_bt(:,:) = -segment%normal_vel_bt(:,:)
6229+
if (allocated(segment%nudged_normal_vel)) &
6230+
segment%nudged_normal_vel(:,:,:) = -segment%nudged_normal_vel(:,:,:)
6231+
else
6232+
if (allocated(segment%tangential_vel)) &
6233+
segment%tangential_vel(:,:,:) = -segment%tangential_vel(:,:,:)
6234+
if (allocated(segment%nudged_tangential_vel)) &
6235+
segment%nudged_tangential_vel(:,:,:) = -segment%nudged_tangential_vel(:,:,:)
6236+
endif
6237+
elseif ((segment%field(n)%name == 'V' .or. segment%field(n)%name == 'Vamp') .and. &
6238+
modulo(turns, 4) == 3) then
6239+
segment%field(n)%buffer_dst(:,:,:) = -segment%field(n)%buffer_dst(:,:,:)
6240+
if (segment%is_N_or_S) then
6241+
segment%normal_trans(:,:,:) = -segment%normal_trans(:,:,:)
6242+
segment%normal_vel(:,:,:) = -segment%normal_vel(:,:,:)
6243+
segment%normal_vel_bt(:,:) = -segment%normal_vel_bt(:,:)
6244+
if (allocated(segment%nudged_normal_vel)) &
6245+
segment%nudged_normal_vel(:,:,:) = -segment%nudged_normal_vel(:,:,:)
6246+
else
6247+
if (allocated(segment%tangential_vel)) &
6248+
segment%tangential_vel(:,:,:) = -segment%tangential_vel(:,:,:)
6249+
if (allocated(segment%nudged_tangential_vel)) &
6250+
segment%nudged_tangential_vel(:,:,:) = -segment%nudged_tangential_vel(:,:,:)
6251+
endif
6252+
endif
6253+
enddo
6254+
62206255
segment%temp_segment_data_exists = segment_in%temp_segment_data_exists
62216256
segment%salt_segment_data_exists = segment_in%salt_segment_data_exists
62226257
end subroutine rotate_OBC_segment_data

src/initialization/MOM_state_initialization.F90

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ module MOM_state_initialization
2626
use MOM_open_boundary, only : set_tracer_data, initialize_segment_data
2727
use MOM_open_boundary, only : open_boundary_test_extern_h
2828
use MOM_open_boundary, only : fill_temp_salt_segments
29-
use MOM_open_boundary, only : update_OBC_segment_data, setup_OBC_tracer_reservoirs
29+
use MOM_open_boundary, only : update_OBC_segment_data
3030
!use MOM_open_boundary, only : set_3D_OBC_data
3131
use MOM_grid_initialize, only : initialize_masks, set_grid_metrics
3232
use MOM_restart, only : restore_state, is_new_run, copy_restart_var, copy_restart_vector
@@ -628,7 +628,6 @@ subroutine MOM_initialize_state(u, v, h, tv, Time, G, GV, US, PF, dirs, &
628628
if (OBC%some_need_no_IO_for_data) then
629629
call calc_derived_thermo(tv, h, G, GV, US)
630630
call update_OBC_segment_data(G, GV, US, OBC, tv, h, Time)
631-
call setup_OBC_tracer_reservoirs(G, GV, OBC)
632631
endif
633632

634633
call get_param(PF, mdl, "OBC_USER_CONFIG", config, &

0 commit comments

Comments
 (0)