Ticket #18: ana_fsobc.h

File ana_fsobc.h, 5.5 KB (added by m.hadfield, 17 years ago)
Line 
1 SUBROUTINE ana_fsobc (ng, tile, model)
2!
3!! svn $Id: ana_fsobc.h 34 2007-04-27 04:40:21Z arango $
4!!======================================================================
5!! Copyright (c) 2002-2007 The ROMS/TOMS Group !
6!! Licensed under a MIT/X style license !
7!! See License_ROMS.txt !
8!! !
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#include "tile.h"
24!
25 CALL ana_fsobc_tile (ng, model, Istr, Iend, Jstr, Jend, &
26 & LBi, UBi, LBj, UBj)
27!
28! Set analytical header file name used.
29!
30 IF (Lanafile) THEN
31 ANANAME( 6)='ROMS/Functionals/ana_fsobc.h'
32 END IF
33
34 RETURN
35 END SUBROUTINE ana_fsobc
36!
37!***********************************************************************
38 SUBROUTINE ana_fsobc_tile (ng, model, Istr, Iend, Jstr, Jend, &
39 & LBi, UBi, LBj, UBj)
40!***********************************************************************
41!
42 USE mod_param
43 USE mod_boundary
44 USE mod_grid
45 USE mod_scalars
46!
47! Imported variable declarations.
48!
49 integer, intent(in) :: ng, model, Iend, Istr, Jend, Jstr
50 integer, intent(in) :: LBi, UBi, LBj, UBj
51!
52! Local variable declarations.
53!
54 integer :: IstrR, IendR, JstrR, JendR, IstrU, JstrV
55 integer :: i, j
56 real(r8) :: cff, fac, omega, phase, val
57
58#include "set_bounds.h"
59!
60!-----------------------------------------------------------------------
61! Free-surface open boundary conditions.
62!-----------------------------------------------------------------------
63!
64#if defined INLET_TEST
65 IF (NORTHERN_EDGE) THEN
66 cff=-1.0_r8*sin(2.0_r8*pi*time(ng)/(12.0_r8*3600.0_r8))
67 DO i=IstrR,IendR
68 BOUNDARY(ng)%zeta_north(i)=cff
69 END DO
70 END IF
71#elif defined KELVIN
72 fac=1.0_r8 ! zeta0
73 omega=2.0_r8*pi/(12.42_r8*3600.0_r8) ! M2 Tide period
74 IF (WESTERN_EDGE) THEN
75 DO j=JstrR,JendR
76 val=fac*EXP(-GRID(ng)%f(Istr-1,j)*GRID(ng)%yp(Istr-1,j)/ &
77 & SQRT(g*GRID(ng)%h(Istr-1,j)))
78 BOUNDARY(ng)%zeta_west(j)=val*COS(omega*time(ng))
79 END DO
80 END IF
81 IF (EASTERN_EDGE) THEN
82 DO j=JstrR,JendR
83 cff=1.0_r8/SQRT(g*GRID(ng)%h(Istr-1,j))
84 val=fac*EXP(-GRID(ng)%f(Istr-1,j)*GRID(ng)%yp(Iend,j)*cff)
85 BOUNDARY(ng)%zeta_east(j)=val*COS(omega*GRID(ng)%xp(Iend,j)* &
86 & cff-omega*time(ng))
87 END DO
88 END IF
89#elif defined ESTUARY_TEST
90 IF (WESTERN_EDGE) THEN
91 cff=1.0_r8*SIN(2.0_r8*pi*time(ng)/(12.0_r8*3600.0_r8))
92 DO j=JstrR,JendR
93 BOUNDARY(ng)%zeta_west(j)=cff
94 END DO
95 END IF
96#elif defined SED_TEST1
97 IF (WESTERN_EDGE) THEN
98 fac=100.0_r8
99 DO j=JstrR,JendR
100 BOUNDARY(ng)%zeta_west(j)=9.0E-06_r8*fac
101 END DO
102 END IF
103 IF (EASTERN_EDGE) THEN
104 fac=100.0_r8
105 DO j=JstrR,JendR
106 BOUNDARY(ng)%zeta_east(j)=9.0E-06_r8*REAL(Iend+1,r8)*fac
107 END DO
108 END IF
109#elif defined SHOREFACE
110 IF (WESTERN_EDGE) THEN
111!! cff=-1.0_r8*SIN(2.0_r8*pi*time(ng)/(12.0_r8*3600.0_r8))
112 cff=0.0_r8
113 DO j=JstrR,JendR
114 BOUNDARY(ng)%zeta_west(j)=cff
115 END DO
116 END IF
117#elif defined TEST_CHAN
118 IF (WESTERN_EDGE) THEN
119 cff=0.0_r8
120 DO j=JstrR,JendR
121 BOUNDARY(ng)%zeta_west(j)=cff
122 END DO
123 END IF
124 IF (EASTERN_EDGE) THEN
125 cff=-0.4040_r8*MIN(time(ng)/150000.0_r8,1.0_r8)
126 DO j=JstrR,JendR
127 BOUNDARY(ng)%zeta_east(j)=cff
128 END DO
129 END IF
130#elif defined WEDDELL
131 IF (WESTERN_EDGE) THEN
132 fac=TANH((tdays(ng)-dstart)/1.0_r8)
133 omega=2.0_r8*pi*time(ng)/(12.42_r8*3600.0_r8) ! M2 Tide period
134 val=0.53_r8+(0.53_r8-0.48_r8)/REAL(Iend+1,r8)
135 phase=(277.0_r8+(277.0_r8-240.0_r8)/REAL(Iend+1,r8))*deg2rad
136 DO j=JstrR,JendR
137 BOUNDARY(ng)%zeta_west(j)=fac*val*COS(omega-phase)
138 END DO
139 END IF
140 IF (EASTERN_EDGE) THEN
141 fac=TANH((tdays(ng)-dstart)/1.0_r8)
142 omega=2.0_r8*pi*time(ng)/(12.42_r8*3600.0_r8) ! M2 Tide period
143 val=0.53_r8+(0.53_r8-0.48_r8)
144 phase=(277.0_r8+(277.0_r8-240.0_r8))*deg2rad
145 DO j=JstrR,JendR
146 BOUNDARY(ng)%zeta_east(j)=fac*val*COS(omega-phase)
147 END DO
148 END IF
149#else
150 IF (EASTERN_EDGE) THEN
151 DO j=JstrR,JendR
152 BOUNDARY(ng)%zeta_east(j)=0.0_r8
153 END DO
154 END IF
155 IF (WESTERN_EDGE) THEN
156 DO j=JstrR,JendR
157 BOUNDARY(ng)%zeta_west(j)=0.0_r8
158 END DO
159 END IF
160 IF (SOUTHERN_EDGE) THEN
161 DO i=IstrR,IendR
162 BOUNDARY(ng)%zeta_south(i)=0.0_r8
163 END DO
164 END IF
165 IF (NORTHERN_EDGE) THEN
166 DO i=IstrR,IendR
167 BOUNDARY(ng)%zeta_north(i)=0.0_r8
168 END DO
169 END IF
170#endif
171 RETURN
172 END SUBROUTINE ana_fsobc_tile