13 implicit none ;
private 15 #include <MOM_memory.h> 21 #include "version_variable.h" 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
76 do j=jsdb,jedb ;
do i=isd,ied
77 segment%normal_vel_bt(i,j) = 0.0
89 real,
dimension(SZI_(G),SZJ_(G)),
intent(out) :: D
91 real,
intent(in) :: max_depth
93 character(len=40) :: mdl =
"supercritical_initialize_topography" 96 real :: coast_offset, coast_angle
99 call mom_mesg(
" supercritical_initialization.F90, supercritical_initialize_topography: setting topography", 5)
102 call get_param(param_file, mdl,
"MINIMUM_DEPTH", min_depth, &
103 "The minimum depth of the ocean.", units=
"m", default=0.0)
104 call get_param(param_file, mdl,
"SUPERCRITICAL_COAST_OFFSET", coast_offset, &
105 "The distance along the southern boundary at which the coasts angles in.", &
106 units=
"km", default=10.0)
107 call get_param(param_file, mdl,
"SUPERCRITICAL_COAST_ANGLE", coast_angle, &
108 "The angle of the southern bondary beyond X=SUPERCRITICAL_COAST_OFFSET.", &
109 units=
"degrees", default=8.95)
111 coast_angle = coast_angle * (atan(1.0)/45.)
113 do j=g%jsc,g%jec ;
do i=g%isc,g%iec
115 if ((g%geoLonT(i,j) > coast_offset).AND. &
116 (atan2(g%geoLatT(i,j),g%geoLonT(i,j) - coast_offset) < coast_angle))
then 120 if (d(i,j) > max_depth) d(i,j) = max_depth
121 if (d(i,j) < min_depth) d(i,j) = 0.5*min_depth
subroutine, public supercritical_initialize_topography(D, G, param_file, max_depth)
This subroutine sets up the supercritical topography and land mask. We were not able to get the shock...
Ocean grid type. See mom_grid for details.
Provides the ocean grid type.
Open boundary segment data structure.
integer, parameter, public obc_simple
logical function, public is_root_pe()
subroutine, public mom_mesg(message, verb, all_print)
subroutine, public supercritical_set_obc_data(OBC, G, param_file)
This subroutine sets the properties of flow at open boundary conditions.
integer, parameter, public obc_none
Controls where open boundary conditions are applied.
subroutine, public mom_error(level, message, all_print)
The module configures the model for the "supercritical" experiment. https://marine.rutgers.edu/po/index.php?model=test-problems&title=supercritical.