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
|
---|