ROMS
Loading...
Searching...
No Matches
bc_bry3d.F
Go to the documentation of this file.
1#include "cppdefs.h"
3!
4!git $Id$
5!================================================== Hernan G. Arango ===
6! Copyright (c) 2002-2025 The ROMS Group !
7! Licensed under a MIT/X style license !
8! See License_ROMS.md !
9!=======================================================================
10! !
11! This package applies gradient conditions for generic 3D boundary !
12! fields. !
13! !
14! Routines: !
15! !
16! bc_r3d_bry_tile Boundary conditions for field at RHO-points !
17! bc_u3d_bry_tile Boundary conditions for field at U-points !
18! bc_v3d_bry_tile Boundary conditions for field at V-points !
19! !
20!=======================================================================
21!
22 implicit none
23
24 CONTAINS
25!
26!***********************************************************************
27 SUBROUTINE bc_r3d_bry_tile (ng, tile, boundary, &
28 & LBij, UBij, LBk, UBk, &
29 & A)
30!***********************************************************************
31!
32 USE mod_param
33 USE mod_scalars
34!
35! Imported variable declarations.
36!
37 integer, intent(in) :: ng, tile, boundary
38 integer, intent(in) :: LBij, UBij, LBk, UBk
39
40#ifdef ASSUMED_SHAPE
41 real(r8), intent(inout) :: A(LBij:,LBk:)
42#else
43 real(r8), intent(inout) :: A(LBij:UBij,LBk:UBk)
44#endif
45!
46! Local variable declarations.
47!
48 integer :: k
49
50#include "set_bounds.h"
51!
52!-----------------------------------------------------------------------
53! Western and Eastern edges: gradient boundary conditions.
54!-----------------------------------------------------------------------
55!
56 IF (boundary.eq.iwest) THEN
57 IF (domain(ng)%SouthWest_Corner(tile)) THEN
58 DO k=lbk,ubk
59 a(jstr-1,k)=a(jstr,k)
60 END DO
61 END IF
62 IF (domain(ng)%NorthWest_Corner(tile)) THEN
63 DO k=lbk,ubk
64 a(jend+1,k)=a(jend,k)
65 END DO
66 END IF
67 END IF
68
69 IF (boundary.eq.ieast) THEN
70 IF (domain(ng)%SouthEast_Corner(tile)) THEN
71 DO k=lbk,ubk
72 a(jstr-1,k)=a(jstr,k)
73 END DO
74 END IF
75 IF (domain(ng)%NorthEast_Corner(tile)) THEN
76 DO k=lbk,ubk
77 a(jend+1,k)=a(jend,k)
78 END DO
79 END IF
80 END IF
81!
82!-----------------------------------------------------------------------
83! Southern and Northern edges: gradient boundary conditions.
84!-----------------------------------------------------------------------
85!
86 IF (boundary.eq.isouth) THEN
87 IF (domain(ng)%SouthWest_Corner(tile)) THEN
88 DO k=lbk,ubk
89 a(istr-1,k)=a(istr,k)
90 END DO
91 END IF
92 IF (domain(ng)%SouthEast_Corner(tile)) THEN
93 DO k=lbk,ubk
94 a(iend+1,k)=a(iend,k)
95 END DO
96 END IF
97 END IF
98
99 IF (boundary.eq.inorth) THEN
100 IF (domain(ng)%NorthWest_Corner(tile)) THEN
101 DO k=lbk,ubk
102 a(istr-1,k)=a(istr,k)
103 END DO
104 END IF
105 IF (domain(ng)%NorthEast_Corner(tile)) THEN
106 DO k=lbk,ubk
107 a(iend+1,k)=a(iend,k)
108 END DO
109 END IF
110 END IF
111
112 RETURN
113 END SUBROUTINE bc_r3d_bry_tile
114
115!
116!***********************************************************************
117 SUBROUTINE bc_u3d_bry_tile (ng, tile, boundary, &
118 & LBij, UBij, LBk, UBk, &
119 & A)
120!***********************************************************************
121!
122 USE mod_param
123 USE mod_scalars
124!
125! Imported variable declarations.
126!
127 integer, intent(in) :: ng, tile, boundary
128 integer, intent(in) :: LBij, UBij, LBk, UBk
129
130#ifdef ASSUMED_SHAPE
131 real(r8), intent(inout) :: A(LBij:,LBk:)
132#else
133 real(r8), intent(inout) :: A(LBij:UBij,LBk:UBk)
134#endif
135!
136! Local variable declarations.
137!
138 integer :: k
139
140#include "set_bounds.h"
141!
142!-----------------------------------------------------------------------
143! Western and Eastern edges: gradient boundary conditions.
144!-----------------------------------------------------------------------
145!
146 IF (boundary.eq.iwest) THEN
147 IF (domain(ng)%SouthWest_Corner(tile)) THEN
148 DO k=lbk,ubk
149 a(jstr-1,k)=a(jstr,k)
150 END DO
151 END IF
152 IF (domain(ng)%NorthWest_Corner(tile)) THEN
153 DO k=lbk,ubk
154 a(jend+1,k)=a(jend,k)
155 END DO
156 END IF
157 END IF
158
159 IF (boundary.eq.ieast) THEN
160 IF (domain(ng)%SouthEast_Corner(tile)) THEN
161 DO k=lbk,ubk
162 a(jstr-1,k)=a(jstr,k)
163 END DO
164 END IF
165 IF (domain(ng)%NorthEast_Corner(tile)) THEN
166 DO k=lbk,ubk
167 a(jend+1,k)=a(jend,k)
168 END DO
169 END IF
170 END IF
171!
172!-----------------------------------------------------------------------
173! Southern and Northern edges: gradient boundary conditions.
174!-----------------------------------------------------------------------
175!
176 IF (boundary.eq.isouth) THEN
177 IF (domain(ng)%SouthWest_Corner(tile)) THEN
178 DO k=lbk,ubk
179 a(istru-1,k)=a(istru,k)
180 END DO
181 END IF
182 IF (domain(ng)%SouthEast_Corner(tile)) THEN
183 DO k=lbk,ubk
184 a(iend+1,k)=a(iend,k)
185 END DO
186 END IF
187 END IF
188
189 IF (boundary.eq.inorth) THEN
190 IF (domain(ng)%NorthWest_Corner(tile)) THEN
191 DO k=lbk,ubk
192 a(istru-1,k)=a(istru,k)
193 END DO
194 END IF
195 IF (domain(ng)%NorthEast_Corner(tile)) THEN
196 DO k=lbk,ubk
197 a(iend+1,k)=a(iend,k)
198 END DO
199 END IF
200 END IF
201
202 RETURN
203 END SUBROUTINE bc_u3d_bry_tile
204
205!
206!***********************************************************************
207 SUBROUTINE bc_v3d_bry_tile (ng, tile, boundary, &
208 & LBij, UBij, LBk, UBk, &
209 & A)
210!***********************************************************************
211!
212 USE mod_param
213 USE mod_scalars
214!
215! Imported variable declarations.
216!
217 integer, intent(in) :: ng, tile, boundary
218 integer, intent(in) :: LBij, UBij, LBk, UBk
219
220#ifdef ASSUMED_SHAPE
221 real(r8), intent(inout) :: A(LBij:,LBk:)
222#else
223 real(r8), intent(inout) :: A(LBij:UBij,LBk:UBk)
224#endif
225!
226! Local variable declarations.
227!
228 integer :: k
229
230#include "set_bounds.h"
231!
232!-----------------------------------------------------------------------
233! Western and Eastern edges: gradient boundary conditions.
234!-----------------------------------------------------------------------
235!
236 IF (boundary.eq.iwest) THEN
237 IF (domain(ng)%SouthWest_Corner(tile)) THEN
238 DO k=lbk,ubk
239 a(jstrv-1,k)=a(jstrv,k)
240 END DO
241 END IF
242 IF (domain(ng)%NorthWest_Corner(tile)) THEN
243 DO k=lbk,ubk
244 a(jend+1,k)=a(jend,k)
245 END DO
246 END IF
247 END IF
248
249 IF (boundary.eq.ieast) THEN
250 IF (domain(ng)%SouthEast_Corner(tile)) THEN
251 DO k=lbk,ubk
252 a(jstrv-1,k)=a(jstrv,k)
253 END DO
254 END IF
255 IF (domain(ng)%NorthEast_Corner(tile)) THEN
256 DO k=lbk,ubk
257 a(jend+1,k)=a(jend,k)
258 END DO
259 END IF
260 END IF
261!
262!-----------------------------------------------------------------------
263! Southern and Northern edges: gradient boundary conditions.
264!-----------------------------------------------------------------------
265!
266 IF (boundary.eq.isouth) THEN
267 IF (domain(ng)%SouthWest_Corner(tile)) THEN
268 DO k=lbk,ubk
269 a(istr-1,k)=a(istr,k)
270 END DO
271 END IF
272 IF (domain(ng)%SouthEast_Corner(tile)) THEN
273 DO k=lbk,ubk
274 a(iend+1,k)=a(iend,k)
275 END DO
276 END IF
277 END IF
278
279 IF (boundary.eq.inorth) THEN
280 IF (domain(ng)%NorthWest_Corner(tile)) THEN
281 DO k=lbk,ubk
282 a(istr-1,k)=a(istr,k)
283 END DO
284 END IF
285 IF (domain(ng)%NorthEast_Corner(tile)) THEN
286 DO k=lbk,ubk
287 a(iend+1,k)=a(iend,k)
288 END DO
289 END IF
290 END IF
291
292 RETURN
293 END SUBROUTINE bc_v3d_bry_tile
294
295 END MODULE bc_bry3d_mod
subroutine bc_u3d_bry_tile(ng, tile, boundary, lbij, ubij, lbk, ubk, a)
Definition bc_bry3d.F:120
subroutine bc_r3d_bry_tile(ng, tile, boundary, lbij, ubij, lbk, ubk, a)
Definition bc_bry3d.F:30
subroutine bc_v3d_bry_tile(ng, tile, boundary, lbij, ubij, lbk, ubk, a)
Definition bc_bry3d.F:210
type(t_domain), dimension(:), allocatable domain
Definition mod_param.F:329
integer, parameter iwest
integer, parameter isouth
integer, parameter ieast
integer, parameter inorth