56 REAL(SP) :: S2D,S2D_NEXT,S2D_OBC,T2D,T2D_NEXT,T2D_OBC,XFLUX2D,TMP,RAMP_TS
59 INTEGER :: I,J,K,J1,J11,J22,NCON2
60 REAL(SP),
ALLOCATABLE :: TTMP(:,:),STMP(:,:)
62 REAL(SP) ::TMAX,TMIN,SMAX,SMIN
71 IF(river_ts_setting ==
'specified')
THEN 73 IF(river_inflow_location ==
'node')
THEN 81 ELSE IF(river_inflow_location ==
'edge')
THEN 97 IF(.NOT. obc_on)
RETURN 107 ALLOCATE(ttmp(
iobcn,kbm1)); ttmp = 0.0_sp
115 t2d=t2d+
t1(j,k)*
dz(j,k)
116 t2d_next=t2d_next+
tf1(j1,k)*
dz(j1,k)
124 t2d_obc=(t2d*
dt(j)-tmp*dti/
art1(j))/
d(j)
129 tf1(j,k)=t2d_obc+ttmp(i,k)
138 tmax = max(tmax,(
t1(j,k)*
dz(j,k+1)+
t1(j,k+1)*
dz(j,k))/ &
140 tmin = min(tmin,(
t1(j,k)*
dz(j,k+1)+
t1(j,k+1)*
dz(j,k))/ &
142 ELSE IF(k == kbm1)
THEN 143 tmax = max(tmax,(
t1(j,k)*
dz(j,k-1)+
t1(j,k-1)*
dz(j,k))/ &
145 tmin = min(tmin,(
t1(j,k)*
dz(j,k-1)+
t1(j,k-1)*
dz(j,k))/ &
148 tmax = max(tmax,(
t1(j,k)*
dz(j,k-1)+
t1(j,k-1)*
dz(j,k))/ &
149 (
dz(j,k)+
dz(j,k-1)), &
150 (
t1(j,k)*
dz(j,k+1)+
t1(j,k+1)*
dz(j,k))/ &
152 tmin = min(tmin,(
t1(j,k)*
dz(j,k-1)+
t1(j,k-1)*
dz(j,k))/ &
153 (
dz(j,k)+
dz(j,k-1)), &
154 (
t1(j,k)*
dz(j,k+1)+
t1(j,k+1)*
dz(j,k))/ &
158 IF(tmin-
tf1(j,k) > 0.0_sp)
tf1(j,k) = tmin
159 IF(
tf1(j,k)-tmax > 0.0_sp)
tf1(j,k) = tmax
165 IF(obc_temp_nudging)
THEN 167 tf1(j,k) =
t1(j,k) - obc_temp_nudging_timescale*ramp*(
t1(j,k)&
185 ELSE IF(ncon2 == 2)
THEN 189 ALLOCATE(stmp(
iobcn,kbm1)); stmp = 0.0_sp
197 s2d=s2d+
s1(j,k)*
dz(j,k)
198 s2d_next=s2d_next+
sf1(j1,k)*
dz(j1,k)
205 s2d_obc=(s2d*
dt(j)-tmp*dti/
art1(j))/
d(j)
210 sf1(j,k)=s2d_obc+stmp(i,k)
219 smax = max(smax,(
s1(j,k)*
dz(j,k+1)+
s1(j,k+1)*
dz(j,k))/ &
221 smin = min(smin,(
s1(j,k)*
dz(j,k+1)+
s1(j,k+1)*
dz(j,k))/ &
223 ELSE IF(k == kbm1)
THEN 224 smax = max(smax,(
s1(j,k)*
dz(j,k-1)+
s1(j,k-1)*
dz(j,k))/ &
226 smin = min(smin,(
s1(j,k)*
dz(j,k-1)+
s1(j,k-1)*
dz(j,k))/ &
229 smax = max(smax,(
s1(j,k)*
dz(j,k-1)+
s1(j,k-1)*
dz(j,k))/ &
230 (
dz(j,k)+
dz(j,k-1)), &
231 (
s1(j,k)*
dz(j,k+1)+
s1(j,k+1)*
dz(j,k))/ &
233 smin = min(smin,(
s1(j,k)*
dz(j,k-1)+
s1(j,k-1)*
dz(j,k))/ &
234 (
dz(j,k)+
dz(j,k-1)), &
235 (
s1(j,k)*
dz(j,k+1)+
s1(j,k+1)*
dz(j,k))/ &
239 IF(smin-
sf1(j,k) > 0.0_sp)
sf1(j,k) = smin
240 IF(
sf1(j,k)-smax > 0.0_sp)
sf1(j,k) = smax
245 IF (obc_salt_nudging)
THEN 247 sf1(j,k) =
s1(j,k) - obc_salt_nudging_timescale*ramp*(
s1(j,k)&
260 print*,
'NCON2 NOT IN THE LIST' 261 print*,
'MUST BE 1 OR 2' integer, dimension(:), allocatable, target ntsn
real(sp), dimension(:), allocatable, target d
subroutine bcond_t_perturbation(T2D_NEXT, T2D, TTMP, I, J, J1)
real(sp), dimension(:,:), allocatable, target s
logical function dbg_set(vrb)
real(sp), dimension(:), allocatable, target art1
real(sp), dimension(:,:), allocatable, target t1
subroutine, public update_obc_temp(NOW, TEMP)
real(sp), dimension(:,:), allocatable xflux_obc
real(sp), dimension(:,:), allocatable, target s1
subroutine, public update_obc_salt(NOW, SALT)
real(sp), dimension(:), allocatable, target sdis
real(sp), dimension(:,:), allocatable temp_obc
integer, dimension(:), allocatable next_obc
real(sp), dimension(:,:), allocatable, target tf1
real(sp), dimension(:), allocatable uard_obcn
integer, dimension(:), allocatable i_obc_n
real(sp), dimension(:,:), allocatable, target sf1
integer, dimension(:,:), allocatable, target n_icellq
real(sp), dimension(:,:), allocatable, target dz
integer, dimension(:,:), allocatable, target nbsn
real(sp), dimension(:,:), allocatable, target t
real(sp), dimension(:), allocatable, target tdis
integer, parameter dbg_sbr
integer, dimension(:), allocatable, target inodeq
subroutine bcond_s_perturbation(S2D_NEXT, S2D, STMP, I, J, J1)
real(sp), dimension(:,:), allocatable salt_obc
real(sp), dimension(:), allocatable, target dt