ROMS
Loading...
Searching...
No Matches
ana_fsobc.h
Go to the documentation of this file.
1!!
2 SUBROUTINE ana_fsobc (ng, tile, model)
3!
4!! git $Id$
5!!======================================================================
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 routine sets free-surface open boundary conditions using !
12! analytical expressions. !
13! !
14!=======================================================================
15!
16 USE mod_param
17 USE mod_ncparam
18!
19! Imported variable declarations.
20!
21 integer, intent(in) :: ng, tile, model
22!
23! Local variable declarations.
24!
25 character (len=*), parameter :: MyFile = &
26 & __FILE__
27!
28#include "tile.h"
29!
30 CALL ana_fsobc_tile (ng, tile, model, &
31 & lbi, ubi, lbj, ubj, &
32 & imins, imaxs, jmins, jmaxs)
33!
34! Set analytical header file name used.
35!
36#ifdef DISTRIBUTE
37 IF (lanafile) THEN
38#else
39 IF (lanafile.and.(tile.eq.0)) THEN
40#endif
41 ananame( 6)=myfile
42 END IF
43!
44 RETURN
45 END SUBROUTINE ana_fsobc
46!
47!***********************************************************************
48 SUBROUTINE ana_fsobc_tile (ng, tile, model, &
49 & LBi, UBi, LBj, UBj, &
50 & IminS, ImaxS, JminS, JmaxS)
51!***********************************************************************
52!
53 USE mod_param
54 USE mod_boundary
55 USE mod_grid
56 USE mod_ncparam
57 USE mod_scalars
58!
59! Imported variable declarations.
60!
61 integer, intent(in) :: ng, tile, model
62 integer, intent(in) :: LBi, UBi, LBj, UBj
63 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
64!
65! Local variable declarations.
66!
67 integer :: i, j
68!
69 real(r8) :: cff, fac, omega, phase, val
70
71#include "set_bounds.h"
72!
73!-----------------------------------------------------------------------
74! Free-surface open boundary conditions.
75!-----------------------------------------------------------------------
76!
77#if defined INLET_TEST
78 IF (lbc(inorth,isfsur,ng)%acquire.and. &
79 & domain(ng)%Northern_Edge(tile)) THEN
80 cff=-1.0_r8*sin(2.0_r8*pi*time(ng)/(12.0_r8*3600.0_r8))
81 DO i=istrt,iendt
82 boundary(ng)%zeta_north(i)=cff
83 END DO
84 END IF
85#elif defined KELVIN
86 fac=1.0_r8 ! zeta0
87 omega=2.0_r8*pi/(12.42_r8*3600.0_r8) ! M2 Tide period
88 IF (lbc(iwest,isfsur,ng)%acquire.and. &
89 & domain(ng)%Western_Edge(tile)) THEN
90 DO j=jstrt,jendt
91 val=fac*exp(-grid(ng)%f(istr-1,j)*grid(ng)%yp(istr-1,j)/ &
92 & sqrt(g*grid(ng)%h(istr-1,j)))
93 boundary(ng)%zeta_west(j)=val*cos(omega*time(ng))
94 END DO
95 END IF
96
97 IF (lbc(ieast,isfsur,ng)%acquire.and. &
98 & domain(ng)%Eastern_Edge(tile)) THEN
99 DO j=jstrt,jendt
100 cff=1.0_r8/sqrt(g*grid(ng)%h(istr-1,j))
101 val=fac*exp(-grid(ng)%f(istr-1,j)*grid(ng)%yp(iend,j)*cff)
102 boundary(ng)%zeta_east(j)=val*cos(omega*grid(ng)%xp(iend,j)* &
103 & cff-omega*time(ng))
104 END DO
105 END IF
106#elif defined ESTUARY_TEST
107 IF (lbc(iwest,isfsur,ng)%acquire.and. &
108 & domain(ng)%Western_Edge(tile)) THEN
109 cff=1.0_r8*sin(2.0_r8*pi*time(ng)/(12.0_r8*3600.0_r8))
110 DO j=jstrt,jendt
111 boundary(ng)%zeta_west(j)=cff
112 END DO
113 END IF
114#elif defined SED_TEST1
115 IF (lbc(iwest,isfsur,ng)%acquire.and. &
116 & domain(ng)%Western_Edge(tile)) THEN
117 fac=100.0_r8
118 DO j=jstrt,jendt
119 boundary(ng)%zeta_west(j)=9.0e-06_r8*fac
120 END DO
121 END IF
122
123 IF (lbc(ieast,isfsur,ng)%acquire.and. &
124 & domain(ng)%Eastern_Edge(tile)) THEN
125 fac=100.0_r8
126 DO j=jstrt,jendt
127 boundary(ng)%zeta_east(j)=9.0e-06_r8*real(iend+1,r8)*fac
128 END DO
129 END IF
130#elif defined SHOREFACE
131 IF (lbc(iwest,isfsur,ng)%acquire.and. &
132 & domain(ng)%Western_Edge(tile)) THEN
133!! cff=-1.0_r8*SIN(2.0_r8*pi*time(ng)/(12.0_r8*3600.0_r8))
134 cff=0.0_r8
135 DO j=jstrt,jendt
136 boundary(ng)%zeta_west(j)=cff
137 END DO
138 END IF
139#elif defined TEST_CHAN
140 IF (lbc(iwest,isfsur,ng)%acquire.and. &
141 & domain(ng)%Western_Edge(tile)) THEN
142 cff=0.0_r8
143 DO j=jstrt,jendt
144 boundary(ng)%zeta_west(j)=cff
145 END DO
146 END IF
147
148 IF (lbc(ieast,isfsur,ng)%acquire.and. &
149 & domain(ng)%Eastern_Edge(tile)) THEN
150 cff=-0.4040_r8*min(time(ng)/150000.0_r8,1.0_r8)
151 DO j=jstrt,jendt
152 boundary(ng)%zeta_east(j)=cff
153 END DO
154 END IF
155#elif defined WEDDELL
156 IF (lbc(iwest,isfsur,ng)%acquire.and. &
157 & domain(ng)%Western_Edge(tile)) THEN
158 fac=tanh((tdays(ng)-dstart)/1.0_r8)
159 omega=2.0_r8*pi*time(ng)/(12.42_r8*3600.0_r8) ! M2 Tide period
160 val=0.53_r8+(0.53_r8-0.48_r8)/real(iend+1,r8)
161 phase=(277.0_r8+(277.0_r8-240.0_r8)/real(iend+1,r8))*deg2rad
162 DO j=jstrt,jendt
163 boundary(ng)%zeta_west(j)=fac*val*cos(omega-phase)
164 END DO
165 END IF
166
167 IF (lbc(ieast,isfsur,ng)%acquire.and. &
168 & domain(ng)%Eastern_Edge(tile)) THEN
169 fac=tanh((tdays(ng)-dstart)/1.0_r8)
170 omega=2.0_r8*pi*time(ng)/(12.42_r8*3600.0_r8) ! M2 Tide period
171 val=0.53_r8+(0.53_r8-0.48_r8)
172 phase=(277.0_r8+(277.0_r8-240.0_r8))*deg2rad
173 DO j=jstrt,jendt
174 boundary(ng)%zeta_east(j)=fac*val*cos(omega-phase)
175 END DO
176 END IF
177#else
178 IF (lbc(ieast,isfsur,ng)%acquire.and. &
179 & domain(ng)%Eastern_Edge(tile)) THEN
180 DO j=jstrt,jendt
181 boundary(ng)%zeta_east(j)=0.0_r8
182 END DO
183 END IF
184
185 IF (lbc(iwest,isfsur,ng)%acquire.and. &
186 & domain(ng)%Western_Edge(tile)) THEN
187 DO j=jstrt,jendt
188 boundary(ng)%zeta_west(j)=0.0_r8
189 END DO
190 END IF
191
192 IF (lbc(isouth,isfsur,ng)%acquire.and. &
193 & domain(ng)%Southern_Edge(tile)) THEN
194 DO i=istrt,iendt
195 boundary(ng)%zeta_south(i)=0.0_r8
196 END DO
197 END IF
198
199 IF (lbc(inorth,isfsur,ng)%acquire.and. &
200 & domain(ng)%Northern_Edge(tile)) THEN
201 DO i=istrt,iendt
202 boundary(ng)%zeta_north(i)=0.0_r8
203 END DO
204 END IF
205#endif
206!
207 RETURN
208 END SUBROUTINE ana_fsobc_tile
subroutine ana_fsobc(ng, tile, model)
Definition ana_fsobc.h:3
subroutine ana_fsobc_tile(ng, tile, model, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs)
Definition ana_fsobc.h:51
type(t_boundary), dimension(:), allocatable boundary
type(t_grid), dimension(:), allocatable grid
Definition mod_grid.F:365
integer isfsur
logical lanafile
character(len=256), dimension(39) ananame
type(t_lbc), dimension(:,:,:), allocatable lbc
Definition mod_param.F:375
type(t_domain), dimension(:), allocatable domain
Definition mod_param.F:329
integer, parameter iwest
real(dp), dimension(:), allocatable tdays
real(dp) dstart
real(dp), parameter deg2rad
integer, parameter isouth
integer, parameter ieast
real(dp) g
real(dp), dimension(:), allocatable time
integer, parameter inorth
real(dp), parameter pi