14 implicit none ;
private
16 #include <MOM_memory.h>
18 public supercritical_set_obc_data
21 #include "version_variable.h"
26 subroutine supercritical_set_obc_data(OBC, G, param_file)
33 character(len=40) :: mdl =
"supercritical_set_OBC_data"
36 integer :: isd, ied, jsd, jed, isdb, iedb, jsdb, jedb
39 if (.not.
associated(obc))
call mom_error(fatal,
'supercritical_initialization.F90: '// &
40 'supercritical_set_OBC_data() was called but OBC type was not initialized!')
42 call get_param(param_file, mdl,
"SUPERCRITICAL_ZONAL_FLOW", zonal_flow, &
43 "Constant zonal flow imposed at upstream open boundary.", &
44 units=
"m/s", default=8.57)
46 do l=1, obc%number_of_segments
47 segment => obc%segment(l)
48 if (.not. segment%on_pe) cycle
49 if (segment%gradient) cycle
50 if (segment%oblique .and. .not. segment%nudged .and. .not. segment%Flather) cycle
52 if (segment%is_E_or_W)
then
53 jsd = segment%HI%jsd ; jed = segment%HI%jed
54 isdb = segment%HI%IsdB ; iedb = segment%HI%IedB
56 do j=jsd,jed ;
do i=isdb,iedb
57 if (segment%specified .or. segment%nudged)
then
58 segment%normal_vel(i,j,k) = zonal_flow
60 if (segment%specified)
then
61 segment%normal_trans(i,j,k) = zonal_flow * g%dyCu(i,j)
65 do j=jsd,jed ;
do i=isdb,iedb
66 segment%normal_vel_bt(i,j) = zonal_flow
69 isd = segment%HI%isd ; ied = segment%HI%ied
70 jsdb = segment%HI%JsdB ; jedb = segment%HI%JedB
71 do j=jsdb,jedb ;
do i=isd,ied
72 segment%normal_vel_bt(i,j) = 0.0
77 end subroutine supercritical_set_obc_data