This subroutine sets the properties of flow at open boundary conditions.
64 type(ocean_OBC_type),
pointer :: OBC
67 type(tidal_bay_OBC_CS),
pointer :: CS
68 type(ocean_grid_type),
intent(in) :: G
69 real,
dimension(SZI_(G),SZJ_(G),SZK_(G)),
intent(in) :: h
70 type(time_type),
intent(in) :: Time
74 real :: my_flux, total_area
76 real,
allocatable :: my_area(:,:)
77 character(len=40) :: mdl =
"tidal_bay_set_OBC_data"
78 integer :: i, j, k, itt, is, ie, js, je, isd, ied, jsd, jed, nz, n
79 integer :: IsdB, IedB, JsdB, JedB
80 type(OBC_segment_type),
pointer :: segment => null()
82 is = g%isc ; ie = g%iec ; js = g%jsc ; je = g%jec ; nz = g%ke
83 isd = g%isd ; ied = g%ied ; jsd = g%jsd ; jed = g%jed
84 isdb = g%IsdB ; iedb = g%IedB ; jsdb = g%JsdB ; jedb = g%JedB
88 if (.not.
associated(obc))
return
90 allocate(my_area(1:1,js:je))
92 time_sec = time_type_to_real(time)
93 cff = 0.1*sin(2.0*pi*time_sec/(12.0*3600.0))
96 segment => obc%segment(1)
98 do j=segment%HI%jsc,segment%HI%jec ;
do i=segment%HI%IscB,segment%HI%IecB
99 if (obc%segnum_u(i,j) /= obc_none)
then
101 my_area(1,j) = my_area(1,j) + h(i,j,k)*g%dyCu(i,j)
106 my_flux = - cs%tide_flow*sin(2.0*pi*time_sec/(12.0*3600.0))
108 do n = 1, obc%number_of_segments
109 segment => obc%segment(n)
111 if (.not. segment%on_pe) cycle
113 segment%normal_vel_bt(:,:) = my_flux/total_area
114 segment%eta(:,:) = cff